Blog chia sẻ và thảo luận về IT|Programming Language|Search Engine Optimization|Data Base|Linux| ...

datnguyen

Hướng Dẫn Cài Đặt LAMP (Apache, Mysql, PHP) stack trên CentOS 6.5/6.4

+ 3 comments
Hướng dẫn cài đặt LAMP stack trên CentOS

LAMP là một bộ mã nguồn mở được cài trên linux để triển khai một máy chủ web động và web application. Thuật ngữ này là đại diện cho hệ thống linux và Apache web server. Dữ liệu được lưu trữ với MySQL (using MariaDB), và nội dung website được xử lý bởi PHP.

Trong hướng dẫn này sẽ hưỡng dẫn bạn cài đặt bộ LAMP stack trên CentOS version hiện tại là bản 6.5/6.4 , và để thực hiện được thì trước hết bạn phải cài đặt hệ điều điều hành CentOS trước (Sẽ có một bài hưỡng dẫn bạn cài đặt riêng, hoặc có thể tham khảo một số toturial hướng dẫn trên google nhé !!! ) .
Read more

Cùng trải nghiệm Drupal

+ No comment yet

Nếu bạn là 1 coder PHP thì chắc chắn cũng đã từng nghe đến Drupal, một PHP Platform đuợc sử dụng rộng rãi cho các dự án lớn, luôn trong top cuộc thị mã nguồn mở.
Xét về số người dùng cũng như các nhà phát triển cho Drupal thì có thể nói là ngang ngửa Joomla và chỉ chịu đứng sau Wordpress. Nhưng xét về các dự án lớn thì Drupal luôn là lựa chọn số 1 (Joomla chỉ dành cho các dự án tầm trung và wordpress thì không nói, chỉ dành cho các blogger).

Read more

Hàm escape() ?

+ 1 comment
Hàm escape có tác dụng gì() ?

Ví dụ trong Controller Contact có action sau:

PHP Code:
public function indexAction()
{
// action body
$this->view->name=$this->_getParam('email','guest');
}


Ra trang view /contact/index.phtml chúng ta muốn hiển thị giá trị name:

PHP Code:
<?php echo $this->escape($this->name);?>


Hàm escape() loại bỏ các ký tự đặc biệt, mục đích là để trang web hiển thị đúng hơn và tránh được lỗi cross-site scripting.

Bình thường escape() sẽ dùng hàm htmlspecialchars() của PHP để làm việc, nhưng nếu bạn muốn nó sử dụng hàm khác thì dùng setEscape() để cài cho nó một callback function mới. Có thể xem chi tiết hơn tại đây: http://framework.zend.com/manual/en/...w.scripts.html

JSON làm việc như thế nào

+ No comment yet
JSON hoạt động?
________________________________________
Convert chuỗi JSON thành đối tượng JavaScript

Với JSON, để lấy dữ liệu JSON từ web server (như 1 file hay 1 HttpRequest), convert dữ liệu JSON thành đối tượng JavaScript, và sử dụng dữ liệu này trong trang web
Sau đây là demo:
________________________________________
Ví dụ JSON – Tạo Object từ Chuỗi (String)

Đầu tiên, tạo 1 chuỗi JavaScript chứa cú pháp JSON:
Mã:
var txt = '{ "employees" : [' +
'{ "firstName":"John" , "lastName":"Doe" },' +
'{ "firstName":"Anna" , "lastName":"Smith" },' +
'{ "firstName":"Peter" , "lastName":"Jones" } ]}';
Kể từ khi cú pháp JSON là tập con của cú pháp JavaScript, hàm JavaScript eval() có thể convert chuỗi JSON thành đối tượng JavaScript.
Hàm eval() sử dụng trình biên dịch(compiler) JavaScript sẽ phân tích cú pháp(parse) chuỗi JSON và sinh ra đối tượng JavaScript. Chuỗi phải được bọc trong dấu ngoặc ‘()’ để tránh lỗi cú pháp:
Mã:
var obj = eval ("(" + txt + ")");
Cuối cùng là việc sử dụng đối tượng JavaScript trong trang web như sau:

Mã:
<p>
First Name: <span id="fname"></span><br /> 
Last Name: <span id="lname"></span><br /> 
</p> 

<script type="text/javascript">
document.getElementById("fname").innerHTML = obj.employees[1].firstName 
document.getElementById("lname").innerHTML = obj.employees[1].lastName 
</script>
________________________________________
JSON Parser

Sẽ an toàn hơn để sử dụng JSON Parser để convert chuỗi JSON thành đối tượng JavaScript. 1 JSON Parser sẽ nhận dạng chỉ chuỗi JSON và không biên dịch các script khác.

Trong trình duyệt có hỗ trợ mặc định cho JSON, thì JSON sẽ được parse nhanh hơn.
Thông thường thì các trình duyệt mới đều hỗ trợ mặc định cho JSON và trong chuẩn ECMAScript (JavaScript) mới nhất.

Web Browsers Support

  • Firefox (Mozilla) 3.5
  • Internet Explorer 8
  • Chrome
  • Opera 10
  • Safari 4
Web Software Support
  • jQuery
  • Yahoo UI
  • Prototype
  • Dojo
  • ECMAScript 1.5
Nguồn : Phponline.com

Cú pháp JSON

+ No comment yet
Cú pháp JSON

Cú pháp JSON là một tập hợp con của cú pháp JavaScript

Các quy luật cú pháp JSON

Cú pháp JSON là một tập hợp con của cú pháp đối tượng JavaScript.
  • Dữ liệu là các cặp tên/giá trị (name/values)
  • Dữ liệu được phân cách bằng dấu phẩy
  • Đối tượng nằm trong cặp ngoặc nhọn ‘{}’
  • Dấu ngoặc vuông giữ mảng ‘[]’
Cặp Tên/Giá trị của JSON

Dữ liệu JSON được viết trong cặp Tên/Giá trị.
Một cặp Tên/Giá trị chứa tên 1 trường (trong dấu nháy đôi “”), theo sau là dấu phẩy, cuối cùng là giá trị:
Mã:
"firstName" : "John"
Cú pháp này khá dễ hiểu, và tương đương với lệnh JavaScript sau:
Mã:
firstName = "John"
________________________________________
Các giá trị của JSON
Giá trị (value) JSON có thể là:
  • 1 số (nguyên (integer) hay số thực (floating point))
  • 1 chuỗi (nằm trong dấu nháy đôi “”)
  • 1 số luận lý (true or false)
  • 1 mảng (nằm trong dấu ngoặc vuông [])
  • 1 đối tượng (nằm trong dấu ngoặc nhọn {})
  • Kiểu null
 _______________________________________ 
Các đối tượng JSON

Các đối tượng được đặt trong dấu ngoặc nhọn {}
Đối tượng có thể chứa nhiều cặp Tên/Giá trị (Name/Values):
Mã:
{ "firstName":"John" , "lastName":"Doe" }
Và tương đương với lệnh JavaScript sau:
Mã:
firstName = "John"
lastName = "Doe"
________________________________________
Mảng của JSON
Mảng JSON nằm trong dấu ngoặc vuông [].
1 mảng có thể chứa nhiều đối tượng:
Mã:
{
	"employees": [
		{ "firstName":"John" , "lastName":"Doe" }, 
		{ "firstName":"Anna" , "lastName":"Smith" }, 
		{ "firstName":"Peter" , "lastName":"Jones" }
	]
}
Trong ví dụ trên, đối tượng “employees” là 1 mảng chứa 3 đối tượng. mỗi đối tượng là 1 record của person (với 1 ‘first name và’ 1 ‘last name’).
________________________________________
JSON sử dụng cú pháp JavaScript
Bởi vì JSON sử dụng cú pháp JavaScript, nên không cần 1 chương trình trung gian làm việc giữ JSON và JavaScript.
Với JavaScript bạn có thể tạo 1 mảng các đối tượng và gán dữ liệu như sau:

Ví dụ:
Mã:
var employees = [
	{ "firstName":"John" , "lastName":"Doe" }, 
	{ "firstName":"Anna" , "lastName":"Smith" }, 
	{ "firstName":"Peter" , "lastName": "Jones" }
];
Dòng đầu tiên trong mảng đối tượng JavaScript có thể được truy cập như sau:
Mã:
employees[0].lastName;
Kết quả:
Mã:
Doe
Dữ liệu mới được gán như sau:
Mã:
employees[0].lastName = "Jonatan";
Trong phần 4, tui sẽ chỉ cách chuyển chuỗi JSON qua đối tượng JavaScript.
________________________________________
JSON Files
  • Kiểu file của JSON là ".json"
  • Kiểu MIME của JSON là "application/json"
Nguồn : Phponline.com

JSON (JavaScript Object Notation)

+ No comment yet
Chào các bạn,
Mình thấy khi lập trình người ta mã hóa chuỗi chứa dữ liệu dạng json, và họ mã hóa chuỗi đó. mình nghĩ đâu nhất thiết phải mã hóa nó đâu. có bạn nào giải thích dùm mình với. thank.
Thân mến!

Read more

Zend Framework, setting up a dynamic menu using a plugin

+ No comment yet
I wanted to set up the menu in layout.phtml using a dynamic call to the database.
I created a directory in library called plugins.
I put this in application.ini
autoloaderNamespaces[] = “Plugins”
I created a class in the plugins directory called Plugins_Layout with the file name Layout.php
  1. class Plugins_Layout extends Zend_Controller_Plugin_Abstract  
  2. {  
  3.     public function preDispatch(Zend_Controller_Request_Abstract $request)  
  4.     {  
  5.         $layout = Zend_Layout::getMvcInstance();  
  6.         $view = $layout->getView();  
  7.         $content_mapper = new Application_Model_ContentMapper();  
  8.         $view->menu = $content_mapper->getMenu();  
  9.     }  
  10. }  
I then added this to Bootstrap.php
  1. protected function _initRoutes() {  
  2.         ......   
  3.        Zend_Controller_Front::getInstance()->registerPlugin(new Plugins_Layout());  
  4.     }  
I was then able to create the dynamic menu in layout.phtml
  1. <!--?php foreach($this--->menu as $url => $title) { ?>  
  2.   
  3. a href="/<?php echo $url ?>"><!--?php echo $title; ?--></a>  
  4.   
  5. <!--? } ?-->  
All was working as I expected.
Nguồn : http://blog.saunderswebsolutions.com

Lucene , Sphinx Hay Solr , Dùng cái nào ? (P.1)

+ No comment yet





Solr là một platform mã nguồn mở cung cấp chức năng tìm kiếm phổ biến được phát triển bởi Apache.
Tính năng chính của nó bao gồm khả năng tìm kiếm full-text, highlighting, faceted search, tích hợp cơ sở dữ liệu, xử lý nhiều kiểu văn bản (ví dụ, Word, PDF), và tìm kiếm theo địa điểm. Solr có khả năng mở rộng cao, cung cấp tìm kiếm phân tán và nhân bản Index. Nó cung cấp các tính năng định hướng và tìm kiếm cho nhiều trang web hàng đầu trên thế giới.



Read more

Zend Search Lucene (ex1)

+ No comment yet

With Zend_Search_Lucene you can build a search function on your web page. The difference between searching via MySQL like most websites do is that you have to create an index and keep it up to date.

Create index folder

Create a folder where you store your search index and set write rights. In this tutorial we use the path /application/data/search of our Zend application.

Read more

Full text search

+ No comment yet

I. Full text search là gì?
Nói đơn giản dễ hiểu, full text search (gọi tắt là FTS) là cách tự nhiên nhất để tìm kiếm thông tin, hệt như Google, ta chỉ cần gõ từ khóa và nhấn enter thế là có kết quả trả về. Phạm vi bài viết này chỉ đề cập, giới thiệu sơ lược về FTS trong MySQL mà không bàn về các FTS engine như Sphinx hay Solr.

II. Tại sao chúng ta phải dùng Full text search?
Bình thường, chúng ta sẽ sử dụng câu truy vấn dạng như sau để tìm kiếm dữ liệu:

SELECT id,title,description FROM book WHERE title LIKE ‘%keyword%’

Nhưng cách truy vấn này có một số hạn chế như sau:

(Lưu ý: đây là những hạn chế chung trong MySQL, ngay cả full text search của MySQL cũng không giải quyết triệt để các vấn đề này mà phải dùng các search engine ngoài như Solr, Sphinx v.v Nhưng mình muốn nêu lên ở đây để chúng ta có cái nhìn rõ ràng về những khuyết điểm đó.)

Read more

Book - Yii Framework

+ No comment yet
Có mấy cuốn sách nghe nói hay , bạn nào luyện xong xin chỉ giáo lại.


1. Web Application Development With Yii and PHP
2. Yii 1.1 Application Development Cookbook
3. yii-blog-1.1.12
4. Agile web application development with yii 1.1 and php5

Lên google search link, down về châm cứu nhé.

Quản lí version source code bằng SVN

+ 1 comment
SVN là từ viết tắt của subversion control. Nó là một giao thức giúp lập trình viên quản lí version của sourcecode trong quá trình phát triển phần mềm.

Đặc điểm nổi bật của SVN:
- Lưu giữ source theo version để có thể backup và restore.
- Giúp cho thành viên trong nhóm deploy sản phẩm nhanh chóng và tiến hành kiểm định hay phát triển.


Read more

How to get reciprocal links

+ 1 comment

Lang thang trên mạng tìm được bài viết hay chia sẻ lên blog cho anh em nào thích thì đọc nhé, toàn tiếng anh nên làm biếng dịch , các bạn google translate cho nhanh nhé :

Reciprocal links are arranged when two web sites agree to link to each other.

Reciprocal links are also known as "link swaps", "link exchanges" and "link partners".

Read more

Lucene là gì ?

+ No comment yet

Lucene là gì?

Lucene là phần mềm mã nguồn mở, dùng để phân tích, đánh chỉ mục và tìm kiếm thông tin với hiệu suất cao bằng Java. Lucene được phát triển đầu tiên bởi Doug Cutting được giới thiệu đầu tiên vào tháng 8 năm 2000. Tháng 9 năm 2001 Lucene gia nhập vào tổ chức Apache và hiện tại được Apache phát triển và quản lý. Cần lưu ý rằng Lucene không phải là một ứng dụng mà chỉ là một công cụ đặc tả API cần thiết cho việc một search engine. Được xây dựng và thiết kế theo hướng hướng đối tượng nên các API cũng được cung cấp theo dạng hướng đối tượng. Mặc dù thiết kế và xây dựng ban đầu từ java nhưng hiện nay cũng đã có một số phiên bản cho các ngôn ngữ khác : .NET, C++, Perl, ….

Google AdWords Voucher ?

+ No comment yet

1. Adwords Voucher là gì?
Adwords voucher (hay adwords coupon, mã thưởng google) là mã giảm giá đặc biệt được tạo bởi Google bao gồm 23 kí tự có dạng: 4CWS-6MXD-AVKQ-NW15-XXX. Khi bạn nhập mã này vào account adwords, account của bạn sẽ nhận được tiền thưởng từ google. Giá trị tiền thưởng tùy thuộc vào loại voucher mà bạn nhập vào. Ví dụ: 500.000đ, 2 triệu...
2. Tôi phải dùng mã adwords voucher như thế nào để có được tiền thưởng?
Bước 1: Tạo 1 account adwords.
Bước 2: Kích hoạt account bằng thẻ tín dụng.
Bước 3: Click “Thanh toán” (Billing) > “Tùy chọn thanh toán” (Billing preferences)
Bước 4: Kéo xuống dưới cùng, nhập mã vào ô “Mã bù lại” (Redeem Coupon) rồi click nút “Lấy lại” (Redeem)
Bước 5: Bạn sẽ nhận được thông báo xác nhận thành công. Chờ 1 lát rồi vào phần Thanh toán > Tóm lược thanh toán, bạn sẽ thấy tiền được chuyển vào tài khoản.

3. Tôi có thể sử dụng bao nhiêu mã voucher với 1 account adwords?
Chỉ 1 mã voucher cho 1 account.
4. Tôi có thể dùng adwords voucher với account cũ của tôi không?
Không, Account adwords của bạn phải là account mới trong vòng 14 ngày trở lại.
5. Vậy nếu tôi đã có 1 account cũ rồi. Tôi phải làm gì để dùng voucher?
Hãy tạm dừng account hiện tại của bạn và mở 1 account mới.

Lỗi không cài được Yahoo!Messenger, vì sao?

+ No comment yet

Lỗi không cài được Yahoo!Messenger, vì sao?

Có một trong số trường hợp phổ biến không cài đặt được Yahoo! Messenger:

1/ Khi cài đặt Yahoo!Messenger mà máy bạn hiển thị thông báo lỗi “The application failed to initialize properly” hoặc "This application has failed to start because the application configuration is incorrect" là do trường hợp chương trình tối ưu hóa nào đó. Hoặc chương trình diệt virus nào đó đã chặn nhầm và đã làm tắt hoặc mất chức năng hỗ trợ Windows Installer. Vì vậy bạn nên gỡ bỏ Yahoo!Messenger rồi kiểm tra, vào menu Start mở hộp Run gõ services.msc và nhấn Enter. Ngay lập tức công cụ Services xuất hiện. Trong công cụ Services > nhấn vào cột Startup Type > tìm hàng chữ Windows Installer chọn Properties > khung cửa sổ Windows Installer Properties thì bạn kéo thanh cuộn Startup Type, chỉnh lại thành Automatic và nhấn OK để hoàn tất. Nếu sau khi thao tác xong mà vẫn không cài đặt được Yahoo!Messenger thì khi ấy, bạn cần phải cài đặt Windows Installer và Microsoft Visual C++ 2008 SP1 Redistributable Package sau đó mới tiến hành cài đặt lại Yahoo!Messenger được.

Read more

Một số thủ thuật, phím tắt trong Eclipse

+ No comment yet


Read more

Eval() và include()

+ No comment yet


Eval() và include()Có thể hiểu nôm na, eval() sẽ nhận đối số là một chuỗi và thực thi chuỗi đó như một đoạn code PHP. Vì vậy, đối số truyền cho eval() phải là một chuỗi thỏa các điều kiện về cú pháp của PHP. VD:

CODE

<?

$str = ‘echo “Hello world !!!”;’;

eval($str);

?>


Một VD khác:

CODE

<?

$a = “Hello world !!!”;

$b = “empty”;

echo “Bien \$b la: <b>$b</b><br>”;

echo “Sau khi eval(), “;

// gán giá trị biến $a cho biến $b và hiện ra thông báo về giá trị mới của biến $b

$str = ‘$b = $a; echo “bien \$b bay gio la: <b>$b</b>”;’;

eval($str);

?>


include_once() sẽ gộp một file được xác định trong quá trình một đoạn mã thực thi. Về cách hoạt động, nó rất giống include() nhưng khác ở chỗ, nếu file nào đó đã được gộp thì include_once() sẽ không gộp lại lần nữa và trả về trị là FALSE. VD:

CODE

*** File include: inc1.php **********

<?

echo “Toi duoc include.<br>”;

?>

*** File thuc thi: ex_inc_11.php ********

<?

include ‘inc1.php’;

include_once ‘inc1.php’;

?>

*** File thuc thi: ex_inc_12.php ********

<?

include ‘inc1.php’;

include ‘inc1.php’;

?>


VD khác:

CODE

*** File include: inc2.php **********

<?

echo “Toi duoc include.<br>”;

function doSth() {

echo “Hello world !!!<br>”;

}

?>


*** File thuc thi: ex_inc_2.php ********

<?

include ‘inc2.php’;

doSth();

// include ‘inc2.php’; <— sẽ có báo lỗi vì hàm doSth() đã được định nghĩa.

include_once ‘inc2.php’; // sẽ không có báo lỗi, nhưng hàm này cũng không được thực hiện

?>


Chúng ta có thể handle được các file nào đã được include trong suốt đoạn code bằng hàm get_included_files(). Hàm này sẽ trả về một mảng chứa các file đã được include. VD:

CODE

<?

include ‘inc1.php’;

include ‘inc2.php’;

$inc = get_included_files();

print_r($inc);

?>


Goodbye my lover !

+ No comment yet

Không biết người khác  khi nghe bài hát này sẽ cảm thấy ra sao nhưng với tôi  nó  thật sự hay và cảm xúc (vì phong cách của James Blunt và vì tâm trạng lúc nghe ...). Dù sao thì , tình cảm lúc nào cũng khó nói và diễn tả . Khi chia tay ai đó , nhất là với người mình đã từng yêu đều là những điều thật là khó khăn , phải không ?



Did I disappoint you or let you down?
Should I be feeling guilty or let the judges frown?
‘Cause I saw the end before we’d begun,
Yes I saw you were blinded and I knew I had won.
So I took what’s mine by eternal right.
Took your soul out into the night.
It may be over but it won’t stop there,
I am here for you if you’d only care.
You touched my heart you touched my soul.
You changed my life and all my goals.
And love is blind and that I knew when,
My heart was blinded by you.
I’ve kissed your lips and held your head.
Shared your dreams and shared your bed.
I know you well, I know your smell.
I’ve been addicted to you.
Goodbye my lover.
Goodbye my friend.
You have been the one. -*
You have been the one for me.(2x)
I am a dreamer but when I wake,
You can’t break my spirit – it’s my dreams you take. -*
And as you move on, remember me,
Remember us and all we used to be
I’ve seen you cry, I’ve seen you smile.
I’ve watched you sleeping for a while.
I’d be the father of your child.
I’d spend a lifetime with you. -*
I know your fears and you know mine.
We’ve had our doubts but now we’re fine,
And I love you, I swear that’s true.
I cannot live without you.
Goodbye my lover.
Goodbye my friend.
You have been the one. -*
You have been the one for me.(2x)
And I still hold your hand in mine.
In mine when I’m asleep.
And I will bear my soul in time,
When I’m kneeling at your feet.
Goodbye my lover
Goodbye my friend.
You have been the one.
You have been the one for me.(2x)
I’m so hollow, baby, I’m so hollow.
I’m so, I’m so, I’m so hollow.(X2)
....
Và anh yêu em, anh thề điều đó là thựcAnh không thể sống mà thiếu vắng bóng em
[x2]
Tạm biệt người yêu của anh
Tạm biệt người bạn của anh
Em là người duy nhất
Em là người duy nhất dành cho anh
Và anh vẫn nắm chặt tay em đan trong tay anh
Hai tay ta đan vào nhau khi anh ngủ vùi
Và anh sẽ kịp lúc thổ lộ tâm tư mình
Khi anh quỳ xuống cạnh chân em
Tạm biệt người yêu của anh
Tạm biệt người bạn của anh
Em là người duy nhất
Em là người duy nhất dành cho anh
[x2]
Tạm biệt người yêu của anh
Tạm biệt người bạn của anh
Em là người duy nhất
Em là người duy nhất dành cho anh
[x2]
Anh thật trống vắng, em yêu à, anh thật trống vắng


Kiểm tra sự tồn tại file ảnh (image)

+ No comment yet
Hôm nay tôi đã fix 1 lỗi về đường dẫn file ảnh, công việc của tôi là kiểm tra file ảnh đó có tồn tại hay không và nếu không tồn tại thì phải thay bằng một ảnh mặc định nào đó.  Nếu là bạn, bạn sẽ dùng hàm gì ? Tôi nghĩ sẽ có nhiều người nghĩ ngay đến hàm file_exists() đã khá quen thuộc.  Nhưng khi tôi thử áp dụng thì nó lại cho kết quả không đúng mặc dù file ảnh mà tôi kiểm tra là có thực. Sau một hồi tìm kiếm, tôi đã có câu trả lời, đó là trong trường hợp này hàm  file_exists() sẽ kiểm tra thư mục của file ảnh, do đó nó sẽ luôn trả về false. Đồng thời tôi cũng tìm được giải pháp cho vấn đề trên, đó là hàm getimagesize() .
Tại sao là hàm getimagesize() ?
Hàm này sẽ trả về kích thước của một file ảnh bất kì, kết quả được chứa trong một mảng (array) với 7 phần tử. Nói cách khác là nếu hàm này trả về array thì file ảnh đó là có thực. (Không có ảnh thì lấy đâu ra kích thước ^^)
Để hiểu hơn, các bạn có thể xem ví dụ dưới đây
<?php
    $file_path = 'http://tanviet.speedymirror.com/wp-content/uploads/2011/07/border_radius.jpg' ;
    //Ham file_exists()
    if (file_exists($file_path)) {
        echo "This file exists!";
    }
    else {
        echo "This file does not exist";
    }
    //Ham getimagesize() cho ket qua chinh xac hon
    $url = getimagesize($file_path);
    if(is_array($url)){
        echo "<br />This file exists!";
    }
    else {
         echo "<br />This file does not exist!";
    }
?>
Kết quả
This file does not exist 
This file exists!

 

Kết luận,

Qua kết quả nhận được có thể nhận thấy sự khác nhau khi sử dụng hàm file_exists()  getimagesize(), từ đó bạn có thể áp dụng cho nhiều trường hợp khác. Tôi hi vọng bài viết này sẽ giúp ích phần nào cho công việc lập trình của các bạn.