--------------- <> -----------------
--- KHOA HỌC - CÔNG NGHỆ - GIÁO DỤC - VIỆC LÀM ---
--- Học để đi cùng bà con trên thế giới ---

Tìm kiếm trong Blog

Học làm web (x6) - PHP: storing and retrieving data (tt)

Bài trước: Học làm web (x5) - PHP: storing and retrieving data
-----

Reading from a file (p65)


Right now, Bob’s customers can leave their orders via the Web, but if Bob’s staff members want to look at the orders, they have to open the files themselves.

Let’s create a web inteface to let Bob’s staff read the files easily. The code for this interface is shown below.

[vieworder.php]

<?php
    // create short variable name
    $document_root = $_SERVER['DOCUMENT_ROOT'];
?>
<!DOCTYPE html>
<html>
    <head>
        <title>Bob's Auto Parts - Order Results</title>
    </head>
    <body>
        <h1>Bob's Auto Parts</h1>
        <h2>Customer Orders</h2>
        <?php
            @$fp = fopen("$document_root/../orders/orders.txt", 'rb');
            flock($fp, LOCK_SH); // lock file for reading

            if(!$fp) {
                echo '<p><strong>No orders pending.<br>
                    Please try again later.</strong></p>';
                exit;
            }

            while (!feof($fp)) {
                $order = fgets($fp);
                echo htmlspecialchars($order).'<br>';
            }

            flock($fp, LOCK_UN); // release read lock
            fclose($fp);
        ?>
    </body>
</html>

This script follows the sequence we described earlier: open the file, read from the file, close the file. The output from this script is shown below:



Let’s look at the functions in this script in detail.

– Opening a file for reading: fopen()

   @$fp = fopen("$document_root/../orders/orders.txt", 'rb');

– Knowing when to stop: feof()

eof: end of the file

while (!feof($fp))

– Reading a line at a time: fgets(), fgetss(), fgetcsv()

In this example, you use the fgets() function to read from the file:

$order = fgets($fp);

This function reads one line at a time from a file. In this case, it reads until it encounters a newline character (\n) or EOF.

You can use many different functions to read from files. The fgets() function, for example, is useful when you’re dealing with files that contain plain text that you want to deal with in chunks.

An interesting variation on fgets() is fgetss(), which has the following prototype:

string fgetss(resource fp[, in length[, string allowable_tags]];

This function is similar to fgets() except that it strips out any PHP and HTML tags found in the string. If you want to leave in any particular tags, you can include them in the allowable_tags string. You would use fgetss() for safety when reading a file written by somebody else or one containing user input. Allowing unrestricted HTML code in the file could mess up your carefully planned formatting. Allowing unrestricted PHP or JavaScript could give a malicious user an opportunity to create a security problem.

The function fgetcsv() is another variation on fgets(). It has the following prototype:

array fgetcsv(resource fp, int length [, string delimiter
                        [, string enclosure
                        [, string escape]]])

This function breaks up lines of files when you have used a delimiting character, such as the tab character (as we suggested earlier), or a comma (as commonly used by spreadsheets and other applications). If you want to  reconsruct the variables from the order seperately rather than as a line of text, fgetcsv() allows you to do this simply. You call it in much the same way as you would call fgets(), but you pass it the delimiter you used to separate fields. For example,

$order = fgetcsv($fp, 0, ‘\t’);

This code would retrieve a line from the file and break it up wherever a tab (\t) was encountered.  The results are returned in an array.

The length parameter should be greater than the length in characters of the longest line in the file you are trying to read, or 0 if you do not want to limit the line length.

The enclosure parameter specifies what each field in a line is surrounded by. If not specified, it defaults to “ (a double quotation mark).

– Reading the whole file: readfile(), fpassthru(), file(), and file_get_contents()

Instead of reading from a file a line at a time, you can read the whole file in one go. Here are four different ways you can do this.

The first uses readfile(). You can replace almost the entire script you wrote previously with one line:

readfile("$document_root/../orders/orders.txt");

A call to the readfile() function opens the file, echoes the content to standard output (the browser), and then closes the file. The prototype for readfilne() is

int readfile (string filename, [bool use_include_path[, resource context]];

Second, you can use fpassthru(). To do so, you need to open the file using fopen() first. You can then pass the file pointer as an argument to fpassthru(), which dumps the contents of the file from the pointer’s position onward to standard output. It closes the file when it is finished.

You can use fpassthru() as follows:

$fp = fopen(("$document_root/../orders/orders.txt", ‘rb’);
fpassthru($fp);

The function fpassthru() returns true if the read is successful and false otherwise.

The third option for reading the whole file is using the file() function. This function is identical to readfile() except that instead of echoing the file to standard output, it turns it into an array.

$filearray = file((("$document_root/../orders/orders.txt");

This line reads the entire file into the array called $filearray. Each line of the file is stored in a separate element of the array.

The fourth option is to use the file_get_contents() function. This function is identical to readfile() except that it returns the content of the file as a string instead of outputing it to the browser.

– Reading a character: fgetc()

Another option for file processing is to read a single character at a time from a file. You can do this by using the fgetc() function. It takes a file pointer as its only parameter and returns the next character in a file. You can replace the while loop in the original script with one that uses fgetc(), as follows:

while (!feof($fp)){
            $char = fgetc($fp);
            if (!feof($fp))
                        echo ($char == “\n” ? “<br>” : $char);
}

Reading a file character by character is not generally sensible or efficient unless for some reason you actually want to process it character by character.

– Reading an arbitrary length: fread()

The final way you can read from a file is to use the fread() function to read an arbitrary number of bytes from the file. This function has the following prototype:

string fread(resource fp, int length);

It read up to length bytes, to the end of the file or network packet, whichever comes first.

Using other file functions (p70)


– Checking whether a file is there: file_exist()

If you want to check whether a file exists without actually opening it, you can use file_exist(), as follows:

if (file_exists("$document_root/../orders/orders.txt")) {
    echo 'There are orders waiting to be processed.';
} else {
    echo 'There are currently no orders.';
}

– Determining how big a file is: filesize()

You can check the size of a file by using the filesize() function:

echo filesize("$document_root/../orders/orders.txt");

– Deleting a file: unlink()

– Navigating inside a file: rewind(), fseek(), and ftell()

Locking files (p72)

A better way: Database (p73)


Problems with using flat files:

– When a file grows large, working with it can be very slow.

– Searching for a particular record or group of records in a flat file is difficult.

– Dealing with concurrent access can become problematic.

– All the file processing you have seen so far deals with a file using sequential processing.

– Beyond the limits offered by file permissions, there in no easy way of enforcing different levels of access to data.

How RDBMSs solve these problems

Relational database management systems address all these issues:

– RDBMSs can provide much faster access to data than flat files.

– RDBMSs can be easily queried to extract sets of data that fit certain criteria.

– RDBMSs have built-in machanisms for dealing with concurrent access so that you, as a programmer, don’t have to worry about it.

– RDBMSs provide random access to your data.

– RDBMSs have built-in privilege system.

Lab 10. Working with csv files

CSV stands for comma separated variable and indicates the file contains data delimited with a comma. Each line is a record, and each record is made up of fields, very much like a spreadsheet. In fact, software such as Excel provides the means to save files in this format. Note: You should using Notepad (saved as UTF-8) if you want to work with Vietnamese language. You can thinking about CSV file is a Excel file without header.

Using Excel to open employees.csv, as follows:



There are 3 lines of data, or records, in the file containing first name, last name, age and job title. To read the file and extract the individual fields, start by opening the file in read mode:

    $filename = 'employees.csv';
    $fp = fopen($filename, 'r';)

Now I need to use a function specifically to read the CSV formatted file, fgetcsv(); a while loop is used to cater for the for the fact that the number of records is expected to vary:

<?php
    $filename = 'employees.csv';
    $fp = fopen($filename, 'rb');
    while ($record = fgetcsv($fp)) {
        foreach($record as $field) {
            echo $field . '<br>';
        }
    }
    fclose($fp);
?>

This will produce output with a field on each line:

Nguyễn Văn
Tèo
30
Kỹ sư
Lê Văn
Tí
27
Lập trình viên
Trần
Dậu
40
Phân tích

Let’s examine the loop. First, fgetcsv() has one argument only  – the file handle; the comma delimiter is assumed. fgetcsv() returns data in an array which is then processed using a foreach loop. When all records have been read the file is closed using fclose().

Let’s now look at how you can update or write to a CSV file, this time using the function fputcsv(). Because I am using the same file that I used above, I will open it in append mode, and the data to be added to the file has been definied in an array.

// append data to the CSV file
    $newRecords  = array(
        array('Võ Thị', 'Sửu', 24, 'Kế toán'),
        array('Đặng', 'Dần', 24, 'Lập trình viên'),
        array('Lê', 'Ngọ', 45, 'Quản lý')
    );
    $fp = fopen($filename, 'a');
    foreach($newRecords as $record) {
        fputcsv($fp, $record);
    }
    fclose($fp);

Run above script, open the file employees.csv then to test the result.

</////06
-----------
Cập nhật [14/5/2019]
-----------
Xem thêm: Tổng hợp các bài viết về  Học làm web
Xem thêm: Học làm web (x7) - PHP: using arrays

Học làm web (x5) - PHP: storing and retrieving data

Bài trước: Học làm web (x4) - PHP: crash course 4
-----

1.2            Storing and retrieving data

Saving data for later (p54)


You can store data in two basic ways: in flat files (for example text file) or in a database.

Storing and retrieving Bob’s orders (p54)

Processing files (p55)


Writing data to a file requires three steps:

(1) Open the file. If the file doesn’t already exist, you need to create it

(2) Write data to the file

(3) Close the file

Similarly, reading data from file takes three steps:

(1) Open the file. If you cannot open the file (for example, if it doesn’t exist), you need to recognize this and exit gracefully

(2) Read data from the file

(3) Close the file

Opening a file (p55)


You use the fopen() function to open a file. You need to specify how you intend to use it. This is known as the file mode.

Choosing file modes

You need to make three choises when opening a file:

(1) You might want to open a file for reading only, for writing only, or for both reading and writing

(2) If writing to a file, you might want to overwrite any existing contents of a file or append new data to the end of the file. You also might like to terminate your program gracefully instead of overwriting a file if the file already exixts.

(3) If you are trying to write to a file on a system that differentiates between binary and text file, you might need to specify this fact.

Using fopen() to open a file (p56)

Assume that you want to write a customer order to Bob’s order file. You can open this file for writing with the following:

$fp = fopen(“$document_root/../orders/orders.txt”, ‘w’);
$document_root = $_SERVER['DOCUMENT_ROOT'];

Very few people use backslashes in paths within PHP because it means the code will work only in Windows environments. If you use forward slashes, you can often move your code between Windows and Unix machines without alteration.

If fopen() opens the file successfully, a resource that is effectively a handle or pointer to the file is returned and should be stored in a variable—in this case, $fp. You use this variable to access the file when you actually want to read from or write to it.

Opening files through FTP or HTTP (p58)

In addition to opening local files for reading and writing, you can open files via FTP, HTTP, and other protocols using fopen(). You can disable this capability by turning off the allow_url_fopen directive in the php.ini file. If you have trouble opening remote files with fopen(), check your php.ini file.

Addressing problems opening files (p58)

You could also choose to change ownership of the file to the web server user. Some people will choose to make the file world-writable as a shortcut here, but bear in mind that directories and files that anybody can write to are dangerous. In particular, directories that are accessible directly from the Web should not be writable. For this reason, our orders directory is outside the document tree.

If the call to fopen() fails, the function will return false. It will also cause PHP to emit a warning_level error (E_WARNING). You can deal with the error in a more user-friendly way by suppressing PHP’s error message and giving your own:

@$fp = fopen("$document_root/../orders/orders.txt", 'ab');
if (!$fp){
echo "<p><strong> Your order could not be processed at this time. "
.Please try again later.</strong></p></body></html>";
exit;
}

The @ symbol in front of the call to fopen() tells PHP to suppress any errors resulting from the function call. Usually, it’s a good idea to know when things go wrong, but in this case we’re going to deal with that problem elsewhere.

You can also write this line as follows:

$fp = @fopen("$document_root/../orders/orders.txt", 'a');

Using this method tends to make it less obvious that you are using the error suppression operator, so it may make your code harder to debug.

Writing to a file (p61)


Writing to a file in PHP is relatively simple. You can use either of the functions fwrite() (file write) or fputs() (file put string); fputs() is an alias to fwrite(). You call fwrite() in the following way:

fwrite($fp, $outputstring);

This function call tells PHP to write the string stored in $outputstring to the file pointed to by $fp.
An alternative to fwrite() is the file_put_contents() function. It has the following prototype:

int file_put_contents ( string filename,
mixed data
[, int flags
[, resource context]])

This function writes the string contained in data to the file named in filename without any need for an fopen() (or fclose()) function call. This function is the half of a matched pair, the other half being file_get_contents(), which we discuss shortly.

Parameters for fwrite() (p62)

File formats (p62)

When you are creating a data file like the one in the example, the format in which you store the data is completely up to you. (However, if you are planning to use the data file in another application, you may have to follow that application’s rules.)

Now construct a string that represents one record in the data file. You can do this as follows:

$outputstring = $date.'\t'.$tireqty.' tires \t'.$oilqty.' oil\t'
.$sparkqty.' spark plugs\t\$'.$totalamount
.'\t'. $address.'\n';

order.txt:

18:55, 16th April 2013 4 tires 1 oil 6 spark plugs $477.4 22 Short St, Smalltown
18:56, 16th April 2013 1 tires 0 oil 0 spark plugs $110 33 Main Rd, Oldtown
18:57, 16th April 2013 0 tires 1 oil 4 spark plugs $28.6 127 Acacia St, Springfield

Closing a file (p63)


After you’ve finished using a file, you need to close it. You should do this by using the fclose() function as follows:

fclose($fp);

This function returns true if the file was successfully closed or false if it wasn’t. This process is much less likely to go wrong than opening a file in the first place, so in this case we’ve chosen not to test it.

Following is the final version of the Order Processing Script (processorder.php):

<?php
// create short variable names
$tireqty = $_POST['tireqty'];
$oilqty = $_POST['oilqty'];
$sparkqty = $_POST['sparkqty'];
$address = preg_replace('/\t|\R/',' ',$_POST['address']);
$document_root = $_SERVER['DOCUMENT_ROOT'];
$date = date('H:i, jS F Y');
?>
<!DOCTYPE html>
<html>
  <head>
    <title>Bob's Auto Parts - Order Results</title>
  </head>
  <body>
    <h1>Bob's Auto Parts</h1>
    <h2>Order Results</h2>
    <?php
      echo "<p>Order processed at ".$date."</p>";
      echo '<p>Your order is as follows: </p>';
     
      $totalqty = 0;
      $totalamount = 0.00;

      define('TIREPRICE', 100);
      define('OILPRICE', 10);
      define('SPARKPRICE', 4);
     
      $totalqty = $tireqty + $oilqty + $sparkqty;
      echo "<p>Items ordered: ".$totalqty."<br>";
     
      if ($totalqty == 0) {
        echo 'You did not order anything on the previous page! <br>';
      } else {
        if ($tireqty > 0) {
          echo htmlspecialchars($tireqty).' tires<br />';
        }
        if ($oilqty > 0) {
          echo htmlspecialchars($oilqty).' bottles of oil<br />';
        }
        if ($sparkqty > 0) {
           echo htmlspecialchars($sparkqty).' spark plugs<br />';
        }
      }
     
      $totalamount = $tireqty * TIREPRICE
                   + $oilqty * OILPRICE
                   + $sparkqty * SPARKPRICE;
    
      echo "Subtotal: $".number_format($totalamount,2)."<br>";

      $taxrate = 0.1; //local sales tax is 10%
      $totalamount = $totalamount * (1 + $taxrate);
      echo "Total including tax: $".number_format($totalamount,2)."</p>";
     
      echo '<p>Address to ship to is '.htmlspecialchars($address).'</p>';

      $outputstring = $date."\t".$tireqty." tires \t".$oilqty." oil \t".$sparkqty." spark plugs\t".$totalamount."\t".$address. "\n";

      //open file for appending
      @$fp = fopen("$document_root/../orders/orders.txt", 'ab');

      if (!$fp) {
        echo $document_root.'<br>';
        echo '<p><strong> Your order could not be processed at this time.
              Please try again later.</strong></p>';
              exit;
      }

      flock($fp, LOCK_EX);
      fwrite($fp, $outputstring, strlen($outputstring));
      flock($fp, LOCK_UN);
      fclose($fp);

      echo '<p>Order written.</p>';
    ?>
  </body>
</html>

</////05

-----------
Cập nhật [12/5/2019]
-----------
Xem thêm: Tổng hợp các bài viết về  Học làm web
Xem thêm: Học làm web (x6) - PHP: storing and retrieving data (tt)

Ngu ngơ học Deep Learning (1) - Tổng quan


1         Mở đầu


Năm 2019 tháng 5, vẫn ý tưởng là dân Việt “tay bo” thì nên tập trung vào Công nghệ Thông tin và Nông nghiệp. Về lĩnh vực Công nghệ Thông tin, lúc đầu còn yếu nghề nên “ngu ngơ” tập trung vào làm một việc gì đó đơn giản, ví dụ làm Web, sau đó thấy ổn ổn rồi, còn thời gian rảnh thì học thêm những mảng nâng cao hơn để thêm trải nghiệm mới, có nhiều thách thức mới.

Thử bắt đầu với cái đang được nhiều người nhắc tới hiện nay, đó là Deep Learning.


2         Tổng quan


2.1       Artificial Intelligence, Machine Learning và Deep Learning


Đọc bài viết sau:

Giới thiệu về Machine Learning:


Rút ra được một số ý:

– Artificial Intelligence (AI) là Trí tuệ nhân tạo

– Machine Learning (ML) là Học máy hay Máy học

– Deep Learning dịch nôm na là Học sâu

– Trong đó, Machine Learning là tập con (nhánh) của AI, trong khi Deep Learning lại là tập con (nhánh) của Machine Learning.




– [Xe tự hành của Google và Tesla, hệ thống tự tag khuôn mặt trong ảnh của Facebook, trợ lý ảo Siri của Apple, hệ thống gợi ý sản phẩm của Amazon, hệ thống gợi ý phim của Netflix, máy chơi cờ vây AlphaGo của Google DeepMind, …, chỉ là một vài trong vô vàn những ứng dụng của AI/Machine Learning]

– [Nói đơn giản, Machine Learning là một lĩnh vực nhỏ của Khoa Học Máy Tính, nó có khả năng tự học hỏi dựa trên dữ liệu đưa vào mà không cần phải được lập trình cụ thể.]

– [Những năm gần đây, khi mà khả năng tính toán của các máy tính được nâng lên một tầm cao mới và lượng dữ liệu khổng lồ được thu thập bởi các hãng công nghệ lớn, Machine Learning đã tiến thêm một bước dài và một lĩnh vực mới được ra đời gọi là Deep Learning. Deep Learning đã giúp máy tính thực thi những việc tưởng chừng như không thể vào 10 năm trước: phân loại cả ngàn vật thể khác nhau trong các bức ảnh, tự tạo chú thích cho ảnh, bắt chước giọng nói và chữ viết của con người, giao tiếp với con người, hay thậm chí cả sáng tác văn hay âm nhạc]

Quá trình phát triển của AI, Machine Learning và Deep Learning được thể hiện trong hình sau (nguồn: https://blogs.nvidia.com/blog/2016/07/29/whats-difference-artificial-intelligence-machine-learning-deep-learning-ai/),



Tạm thời sẽ tập trung tìm hiểu về Machine Learning và Deep Learning.


2.2       Machine Learning


Như ở trên đã đề cập, Machine Learning là làm cho máy tính có khả năng tự học hỏi dựa trên dữ liệu đưa vào mà không cần phải được lập trình cụ thể.

Đọc thêm bài viết của tác giả Ông Xuân Hồng, Machine Learning là gì?


Trích một số nội dung quan trọng từ bài viết trên,

[Trong cuốn sách Machine Learning của Tom Mitchell, ông có định nghĩa:

A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E.

Từ định nghĩa trên, ta có thể diễn giải như sau: máy tính được gọi là học từ kinh nghiệm (dữ liệu) E với tác vụ (dự đoán, phân lớp, gom nhóm) T và được đánh giá bởi độ đo (độ chính xác) P nếu máy tính khiến tác vụ T này cải thiện được độ chính xác P thông qua dữ liệu E cho trước.

Thoạt đầu ta có thể lúng túng trước phát biểu này, nhưng đây là các thành phần cơ bản mà bất cứ hệ thống Machine learning nào cũng có. Đó là, dữ liệu E cho trước (tập dữ liệu email) nhằm hoàn thành tác vụ T (xác định email là spam hay không). Mô hình này được đánh giá bởi độ đo P (độ chính xác), từ đó ta có thể tiến hành cải thiện mô hình dựa vào độ đo P này.]

Các bước cần thực hiện để cài đặt được một mô hình Machine Learning:

1. Chuẩn bị dữ liệu (Data preparation)

– Data exploration

– Visualization

– Preprocessing data

– Feature engineering

…

2. Xây dựng, lựa chọn và đánh giá mô hình (Algorithm)

– Supervised learning

– Unsupervised learning

– Reinforment learning

– Train, validation, test splitting

– Evaluation metrics (Accuracy, precision, recall, RMSE)

…

3. Mô hình thu được (Model)




Kinh nghiệm của tác giả:

[Người mới bắt đầu học Machine Learning thường giải quyết vấn đề theo thứ tự:

– Bài toán này là supervised hay unsupervised?

– Trong supervised thuật toán nào là state-of-the-art?

– Áp dụng Deep Learning ngay lập tức mà không quan tâm đến data như thế nào?

– Làm thực nghiệm rất nhiều và failed !!

Nhưng thực tế, nên áp dụng cách giải quyết khác để quá trình nghiên cứu được chặt chẽ hơn:

– Bài toán cần giải là gì?

– Dữ liệu cần sử dụng vào bài toán là gì?

– Exploring dữ liệu xem có gì bất thường không (missing, duplicate, outlier,…v.v)?

– Visualize để có hình dung tốt về bản chất của dữ liệu hiện tại

– Tìm kiếm mô hình và giải pháp phù hợp

– Prototype mô hình đơn giản để làm baseline

– Áp dụng các mô hình Machine Learning tiềm năng nhất để giải bài toán

– Làm feature engineering và lặp lại bước xây dựng mô hinh

– Scale cho Big Data

– Deploy lên production server]


2.3       Kiến thức cần chuẩn bị


Toán

– Đại số tuyến tính

– Giải tích

– Toán rời rạc

– Xác suất thống kê

Kĩ thuật

– Thực tế, xây dựng mô hình Machine Learning chỉ là một công đoạn nhỏ trong toàn bộ quy trình (còn có tiền xử lý, phân tích dữ liệu, feature engineering,…v.v)

– Nếu cần có một công việc liên quan, bạn có thể bắt đầu với vị trí Data Analyst/ Data Engineer (nếu bạn code giỏi). Nhờ làm việc cùng với Data Scientists bạn sẽ có cơ hội học hỏi nhều hơn với các dự án trong thực tế. Dần dần phát triển bản thân mình trong lĩnh vực này

– Ngôn ngữ lập trình Python


</////01
-----------
Cập nhật [8/5/2019]
-----------
Xem thêm: Tổng hợp các bài viết về Deep Learning
Xem thêm: Ngu ngơ học Deep Learning (2) - 

PhoThong

Học để đi cùng bà con trên THẾ GIỚI

Chương trình giúp người học hình thành thói quen, để đạt được các điều sau:

- Rèn tính kiên trì, kỉ luật

- Khả năng tự học

- Rèn tư duy

- Dùng được tiếng Anh trong học và tư duy

- Lấy Toán - Tin - Tiếng Anh làm công cụ

- Ý thức về rèn luyện sức khỏe, cân đối giữa học chữ, tư duy và nâng cao thể lực

------------- AI thực hành ------------
Đọc ngược từ dưới lên


AI thực hành (7) - Cá nhân hóa khi dùng Chatbot
AI thực hành (6) - Sử dụng AI có trách nhiệm
AI thực hành (3) - Cùng học với AI
AI thực hành (2) - Cách đặt câu hỏi
AI thực hành (1) - Mở đầu

------------- Scratch ------------
Đọc ngược từ dưới lên


Lập trình Scratch (20) - Bút vẽ
Lập trình Scratch (19) - Nhạc
Lập trình Scratch (18) - Hệ thống menu
Lập trình Scratch (17) - Lồng tiếng cho nhân vật
Lập trình Scratch (16) - Tạo lời thoại 2
Lập trình Scratch (15) - Tạo lời thoại 1
Lập trình Scratch (14) - Hoạt hình 2
Lập trình Scratch (13) - Hoạt hình 1
Lập trình Scratch (12) - Hiển thị
Lập trình Scratch (11) - Đồng bộ hóa
Lập trình Scratch (10) - Phát thông điệp
Lập trình Scratch (9) - Thời gian thực thi lệnh
Lập trình Scratch (8) - Phép chia dư
Lập trình Scratch (7) - Kỹ thuật lập trình (3)
Lập trình Scratch (6) - Kỹ thuật lập trình (2)
Lập trình Scratch (5) - Kỹ thuật lập trình (1)
Lập trình Scratch (4) - Hoạt hình và hình nền
Lập trình Scratch (3) - Di chuyển nhân vật
Lập trình Scratch (2) - Chương trình đầu tiên
Lập trình Scratch (1) - Giới thiệu

------------- Học Math, Science & English & Tư duy ------------
Đọc ngược từ dưới lên

GRADE 6


Math_English_Grade6 (5) - Applications of rates
Math_English_Grade6 (4) - Tables of Ratios
Math_English_Grade6 (3) - Rates: Mastery test
Math_English_Grade6 (2) - Ratios: Mastery test
Math_English_Grade6 (1) - Ratios

GRADE 5

Math_English5 (11): Unit 6A Number and Algebra
Math_English5 (9): Unit 5A Number and Algebra
Math_English5 (7): Unit 4A - Number and Algebra
Math_English5 (5): Unit 3A - Number and Algebra

GRADE 4

Math_grade4 (1) - Multiplicaiton 1

GRADE 3

Math_Grade3 (4) - Geometry1
Math_Grade3 (3) - Ordering numbers to 1000
Math_Grade3 (2) - 100 More and 100 Less
Math_Grade3 (1) - Counting


GRADE 2

Math - Grade2 (3) - Comparison1
Math - Grade2 (2) - Addition1
Math - Grade2 (1) - Geometry1

GRADE 1

Math - Grade 1 (2) - Addition 1
Math - Grade 1 (1) - Identify shapes 1

------------- Tự học IELTS ------------
Đọc ngược từ dưới lên


1. Tự học IELTS(1): Lộ trình học


------------- Python ------------
Đọc ngược từ dưới lên

Giai đoạn 2 - 

Giai đoạn 1 - Python Căn bản

Python (30) - Tổng kết giai đoạn 1
Python (29) - Dự án kết thúc giai đoạn 1 (3)
--- Test Python02 ---
Python (1) - Mở đầu

------------- Tin học cho người đi làm ------------
Đọc ngược từ dưới lên


TinHocPhoThong (9): Sử dụng Google Meet
PhuongPhapHoc (1): Học và hành
TinHocPhoThong (7): Tìm kiếm với Google
TinHocChoNguoiDiLam (6): Quy tắc đánh dấu câu
TinHocChoNguoiDiLam (5): Gõ dấu tiếng Việt
TinHocChoNguoiDiLam (2): Tổ chức, lưu trữ dữ liệu
TinHocChoNguoiDiLam (1): Gõ bàn phím

------------- Cu Tèo Học Làm Web ------------
Đọc ngược từ dưới lên


10.
8. CuTeoHocLamWeb (8): Thao các căn bản trên blogger
7. CuTeoHocLamWeb (7): Tạo một website cá nhân
6. CuTeoHocLamWeb (6): Viết mã JavaScript ở đâu
5. CuTeoHocLamWeb (5): Làm quen với JavaScript
3. CuTeoHocLamWeb (3): Làm quen với CSS
2. CuTeoHocLamWeb (2): Tạo một trang web đơn giản
1. CuTeoHocLamWeb (1): Làm quen với HTML

------------- Teo Explores HTML ------------
Đọc ngược từ dưới lên

1. TeoExploresHTML (1): HTML Introduction

------------- Học Java ------------
Đọc ngược từ dưới lên


------------- Học C# ------------
Đọc ngược từ dưới lên


Nhập môn lập trình (1) - Chương trình, mã máy, hợp ngữ

------------- Windows Form ------------
Đọc ngược từ dưới lên

10. 
5. Windows Form (5): Lập trình cho Form
4. Windows Form (4): Thiết kế Form
3. Windows Form (3): Tạo Form đầu tiên
2. Windows Form (2): Chương trình đầu tiên (tt)
1. Windows Form (1): Chương trình đầu tiên

------------- Lập trình Android bằng Java------------
Đọc ngược từ dưới lên


Lập trình Android bằng Java (4): Activity và intent
Lập trình Android bằng Java (3): Làm quen với một số điều khiển
Lập trình Android bằng Java (2): Chương trình đầu tiên
Lập trình Android bằng Java (1): Lập trình cho thiết bị di động

------------- Excel ------------
Đọc ngược từ dưới lên

Excel (1) - Mở đầu 

------------- Tin học thiếu nhi ------------
Đọc ngược từ dưới lên


Tin học thiếu nhi (4) - Quy tắc đánh dấu câu
Tin học thiếu nhi (3) - Gõ dấu tiếng Việt
Tin học thiếu nhi (2) - Gõ bàn phím
Tin học thiếu nhi (1) - Bật tắt máy tính