November 24, 2013

Gearman persistent queue with MySQL

Nguồn: https://blog.engineyard.com/wp-content/uploads/Gearman-Communication-Diagram-1.png
Theo mặc định, Gearman chạy với queue trên memory, tuy nhiên, nếu muốn sử dụng Gearman với tính năng persitence queue, chúng ta có thể kết hợp với MySQL và những tùy chọn khi khởi chạy Server Gearman. Bài viết sau sẽ hướng dẫn cách thiết lập Persistence Queue của Gearman

Install Gearman on Ubuntu 12.04

Cài đặt Gearman 1.1.11 có một số vấn đề trên môi trường Ubuntu. Bài viết sau đây mang tính chất ghi chú lại việc cài đặt này, nhằm thuận tiện cho những bạn nào thích cài đặt thử nghiệm.

1 - Cài đặt các gói phụ thuộc

Việc cài đặt này đòi hỏi 1 số gói phụ thuộc, thông tin cụ thể các bạn có thể xem tại link sau: http://gearman.info/build/ubuntu.html
Đơn giản hơn, dùng lệnh như bên dưới
sudo apt-get install gcc autoconf bison flex libtool libboost-all-dev libcurl4-openssl-dev curl libevent-dev uuid-dev libsqlite3-dev libmysqlclient-dev

October 24, 2013

PHP - Design Pattern - Observer

Nguồn: http://mydevelopedworld.files.wordpress.com/2013/03/observer-pattern-uml.png
Đã lâu lắm rồi mới ngồi viết lại đề tài "Design Pattern", hôm nay mình giới thiệu thêm một cái Design Pattern nữa cũng rất hấp dẫn và lôi cuốn, và nó cũng làm mình mất không ít thời gian tìm hiểu - Observer Design Pattern. Với mẫu thiết kế này, nó sẽ giúp bạn xây dựng mô hình lập trình hướng sự kiện - Event-Driven Programming (EDP) - và trong ví dụ này của mình cũng sẽ dùng vấn đề này để demo cho mẫu thiết kế Observer

PHP - Design Pattern - Observer

Nguồn: http://mydevelopedworld.files.wordpress.com/2013/03/observer-pattern-uml.png
Đã lâu lắm rồi mới ngồi viết lại đề tài "Design Pattern", hôm nay mình giới thiệu thêm một cái Design Pattern nữa cũng rất hấp dẫn và lôi cuốn, và nó cũng làm mình mất không ít thời gian tìm hiểu - Observer Design Pattern. Với mẫu thiết kế này, nó sẽ giúp bạn xây dựng mô hình lập trình hướng sự kiện - Event-Driven Programming (EDP) - và trong ví dụ này của mình cũng sẽ dùng vấn đề này để demo cho mẫu thiết kế Observer

October 21, 2013

Developer Round Table Lần 1 - Sự im lặng đến nghẹt thở

Sự kiện Developer Round Table được trung tâm tin học Hoàng Nguyễn tổ chức, với mục đích chia sẻ giao lưu là chính. Và lần thứ nhất đã được diễn ra tại ngay trung tâm của Hoàng Nguyễn, lúc 9h ngày 20/10/2013 (Đúng vào ngày phụ nữ VN) với một không khí hết sức im lặng, im lặng đến mức nghẹt thở chứ không như mình tưởng tượng ban đầu, sẽ rất ồn ào náo nhiệt, điều khá lạ tại hội thảo IT

October 1, 2013

Install MongoDB, Redis, Memcached on Ubuntu 12.04

Bài viết chỉ mang tính chất note lại việc cài đặt các ứng dụng MongoDB, Redis, Memcached trên Ubuntu Server 12.04, không nhằm tính chất giải thích hay các vấn đề khác.
Version cài đặt như sau:
Ubuntu Server 12.04
MongDB Server: 2.4.6
Redis Server: 2.6.16
Memcached Server: 1.4.15

September 24, 2013

MongoDB - Something to note

MongoDB.org
Mấy ngày nay ngồi tìm hiểu về MongoDB, một Document Database mà theo mình là rất hấp dẫn. Nghiên cứu nhiều tài liệu, từ trang chủ, slideshare, stackoverflow ... và vẫn đang tiếp tục tìm hiểu. Mình viết lại những gì mình đã đọc tại đây để có gì còn coi lại và vận dụng. Cũng như chia sẻ cho mọi người những điều thú vị mà mình đọc qua, hy vọng các bạn sẽ thấy được điều hữu ích gì đó dành cho mọi người.
Loạt bài này sẽ nhiều phần, vì như mình nói, mình đang nghiên cứu nghiền ngẫm, thấy hay gì là note lại chứ không logic hay chuẩn bị gì cả.

September 13, 2013

Zend Framework 2: Integrate MongoDB By Doctrine ODM

ZF2 - Doctrine - MongoDB
Đang research để làm ứng dụng với MongoDB bằng ZF2. Ban đầu thì cũng không muốn dùng Doctrine cho lắm vì ám ảnh cái ORM MySQL của nó quá là mệt mỏi, khổ sở. Nên đã cố gắng mày mò cả mấy ngày trời để code với PHP extension, nhưng thật sự quá đuối. Có nhiều cái đuối, trong đó cái đuối to nhất chính là chưa có tẹo kinh nghiệm nào về MongoDB hết, nên thật sự là một khó khăn cho bản thân. Cũng qua nhiều nguồn tham khảo thì đều đánh giá ODM của Doctrine với MongoDB khá ổn, tốt, từ đó đi đến quyết định cuối sẽ xài qua Doctrine trước, khi nào có điều kiện và có thời gian hơn thì lại tiếp tục nghiên cứu. Bài viết chỉ mang tính chất ghi chú lại quá trình cài đặt.

September 7, 2013

Zend Framework 2 - Model is also event

ZF2 - Event manager
Trong ZF2, mọi thứ đều là event, điều này có nghĩa rằng không chỉ Controller-Action là event mà cả Model do bạn tạo ra cũng là event. Controller\Action trong ZF2 thì đã được cấu hình sẵn, chúng ta chỉ việc gọi lệnh và chạy là xong. Tuy nhiên, vì mọi thứ đều là event nên Model do chúng ta dựng lên cũng là một event. Có một điều là chúng ta phải tinh chỉnh thêm 1 tí để dễ dàng hơn cho việc coding.

August 6, 2013

PHP - Tốc độ giữa Foreach vs For

Làm việc với PHP cũng có được vài năm kinh nghiệm, lại là một người yêu thích về mặt tốc độ khi triển khai ứng dụng web. Ngày hôm qua, sau khi đọc 1 bài viết phân tích sâu về ARRAY PHP và trong bài viết này đã cho rằng foreach chậm hơn for đã làm cho mình thật sự không tin. Benchmark không biết bao lần, dẫn chứng cho bao người xem, cuối cùng sau khi đọc hết bài viết, test thử và gật gù thừa nhận. Và phải nhìn lại rằng PHP là một ngôn ngữ tuy rất dễ chịu nhưng cũng thật huyền bí, thay đổi 1 vài thứ sẽ lật ngược ván cờ về performance. Bài viết không có ý định trình bày lại những gì tác giả kia đã viết, chỉ một chút minh họa để nhìn lại vấn đề performance thôi.

July 17, 2013

Zend Framework 2: Paginator with NULL adapter


Tiếp nối theo chuỗi bài viết về ZF2, hôm nay mình giới thiệu mọi người cách phân trang data với Adapter NULL được cung cấp trong Zend. Có lẽ khi mọi người tìm kiếm cách phân trang với ZF2 thì đều có nhiều cách, đa số sẽ dùng TableGateWay, nhưng bài hướng dẫn trước của mình lại dùng PDO để truy xuất database nên cũng sẽ có bạn thắc mắc cách xử lý thế nào. ZF2 cũng hiểu điều này nên cung cấp 1 loại Adapter đặc biệt - Adapter NULL - dùng cho chuyện phân trang với PDO.

June 30, 2013

Zend Framewok 2: Create custom library

Thư viện PHP trong Zend 2
Đã lâu rồi mới có dịp quay lại cái blog của mình mà viết thêm bài vào đây. Thời gian gần đây mình bị cuốn vào công việc, nên cũng ít chăm lo cho cái blog thân yêu này, hôm nay quay lại, tiếp tục chủ đề Zend Frameword 2 (ZF2) mà bấy lâu vẫn theo đuổi. Bài viết này sẽ giới thiệu tới các bạn kỹ thuật tạo một library riêng dùng chung cho tất cả module trong ZF2. Điều này chắc hẳn bạn nào từng làm việc với ZF1 sẽ dễ nhận ra ngay, và với cả mình, khi tiếp xúc với ZF2 cũng đã đặt ra câu hỏi là làm sao có một thư viện riêng mà các module đều xài được.

April 30, 2013

Zend Framework 2: Login ZF2 using session basic

Việc dùng session trong một ứng dụng web là chuyện rất bình thường và gần như là một điều bắt buộc trong việc lập trình ứng dụng web ngày nay. Bài viết không có ý định giải thích session là gì, cách khai báo, cơ chế như thế nào... trong session. Bài viết chỉ đơn giản làm một ví dụ minh họa cách dùng session đơn giản nhất trong Zend Framework 2 (ZF2). Việc ứng dụng hay dùng nhất  và cũng đơn giản nhất đó chính là việc login/logout trong một website, như vậy mình cũng sẽ dựa vào đây để làm ví dụ minh họa cho bài viết này.

April 9, 2013

Xdebug - Profiler website for high performance

Trong phần 1, mình đã giới thiệu tới mọi người tính năng thứ nhất của XDebug đó là debug code PHP. XDebug không chỉ dừng lại mỗi tính năng này, cái hay của nó là ở phần Profiler website - tính năng rất hữu ích cho việc tìm ra bottle-neck (nút thắt cổ chai) của website, từ đó đưa ra giải pháp cải tiến, nâng cấp, tối ưu nhầm mang lại hiểu quả cao hơn cho website. Hôm nay mình sẽ chia sẻ 1 phần kỹ thuật này, giúp mọi người có thể tự tay tìm ra điểm "chậm" của website mình

April 3, 2013

Zend Framework 1.x - Work Flow - Part 2

Sau khi tiến trình xử lý Routing kết thúc, ZF sẽ kích hoạt tiến trình preDispatch, đây là tiến trình được xử lý trước các action trong controller của ZF.


Tiến trình được xử lý đầu tiên bằng việc Plugin Broker kiểm tra xem có một controller plugin nào được thiết lập phương thức dispatchLoopStartup hay không, nếu có thì thực thi phương thức này của controller plugin, sau đó Plugin Broker sẽ thông báo ngược lại với Front Controller đã hoàn tất quá trình loop startup và từ đây Front Controller sẽ gắn trạng thái TRUE vào cờ isDispatch của đối tượng Request (xem lại phần 1), Front controller sẽ tiến tới quá trình xử lý preDispatch, như vậy tại đây chúng ta sẽ thấy rằng Loop Dispatch là tiến trình chạy trước preDispath.

March 28, 2013

Zend Framework 2 - Routing - Part 2

Tree Routing
Cải tiến hơn so với version 1, ZF2 không chỉ dừng lại ở mức routing cho từng path URI cụ thể. Đến với ZF2, chúng ta sẽ làm quen với khái niệm Tree Routing - hay có thể nói là làm sao kết nối các routing lại với nhau để tạo hiệu ứng tốt hơn cho việc làm đẹp url.

Ngoài ra, với tree routing còn giúp cải thiện tốc độ load web nhanh hơn. Nhưng đây cũng là một khái niệm khá mới nên có vẻ cũng hơi khó làm quen với nó. Mình cũng chỉ mới tập tành làm quen với dạng routing này.

March 25, 2013

Zend Framework 2 - Routing - Part 1

Trong ZF2 chức năng routing được thay đổi rất đáng kể so với ZF1. Đối với ZF2, sẽ không còn cái được gọi là routing mặc định để áp dụng cho tất cả những uri được request tới. Mà thay vào đó là mọi router đều phải được đăng ký. Việc này sẽ làm cho lập trình viên hơi bị mệt nhọc và nặng nề cho việc viết rule routing, tuy nhiên nó lại giúp cho ứng dụng ZF2 chạy nhanh hơn.

Việc cải tiến nữa trong routing ZF2 đó là cơ chế routing cơ bản nhất cũng yêu cầu sử dụng regular expression - cái thứ mà rất làm nản lòng dân developer.

Bài viết sẽ cố gắng giúp mọi người có thể cài đặt routing trong ZF2 và cũng không dám mong rằng đây là một hướng dẫn xuyên suốt cho phần routing ZF2

March 22, 2013

Zend Framework 1.x - Work Flow - Part 1

Zend Framework 1.x work flow
nguồn: http://www.kurttest.com/zfa/dispatch.html
Đa số chúng ta làm việc với Zend Framework (ZF) nhưng cũng không nắm rõ lắm luồn dữ liệu được xử lý như thế nào? Một request URL đến, thì ZF đã làm gì để rã ra thành một module, controller, action và những tham số input để từ đó chúng ta tiến hành xử lý?

Bài viết mang một khía cạnh minh họa và giảng lược bằng hình ảnh để giúp những người đã từng có kinh nghiệm làm việc với ZF hiểu rõ cơ chế vận hành như thế nào.

Để rào trước đón sau, mình chỉ dám nói đây là tiến trình xử lý của ZF1 chứ không dám khẳng định ZF2 cũng y như vậy. ZF2 đã có 1 số cải tiến rất rõ về bộ library không biết có thay đổi về work flow không thì mình vẫn chưa thể khẳng định tại thời điểm này.

March 18, 2013

Zend Framework 2 - Access Db via PDO

Zend Framework 2 - access DB
Tiếp nối cho bài viết về Zend Framework 2 - Startup, chỉ đơn giản là cài đặt và chạy bộ khung của ứng dụng ZF2, hôm nay mình sẽ viết tiếp sự tương tác của ZF2 với Database. Cụ thể trong bài này mình sẽ dùng database là Mysql server và bộ thư viện PDO để tương tác. Đại đa số các bài hướng dẫn trên mạng về sự tương tác DB với ZF2 chủ yếu tập trung với việc dùng class TableGateway, bài viết của mình đơn giản hơn là dùng chính PDO để tương tác với MySQL server luôn.

March 5, 2013

Zend Framework 2 - Startup

Hôm nay mình sẽ viết loạt bài hướng dẫn sử dụng Zend Framework 2 (ZF2) để xây dựng ứng dụng web. Bài viết được viết dựa trên sự tham khảo từ website chính thức của Zend, và sự tìm tòi của cá nhân. ZF2 không còn làm mới mẻ gì nếu như bạn từng là một tín đồ của ZF1, vì chỉ tính từ khi phiên bản stable ra đời tới nay đã hơn 6 tháng rồi.

March 4, 2013

Xdebug (part1) - Debug code PHP with Netbeans

1 – Giới thiệu

Viết một ứng dụng PHP điều gặp khó khăn nhất so với các ngôn ngữ lập trình khác đó là việc debug – dò lỗi trong source code. Nhưng điều đó không có nghĩa là không thể làm được. Xdebug là một công cụ dùng để debug source web viết bằng PHP, một việc làm rất quan trọng cho việc lập trình và tìm ra lỗi nhanh nhất. Ngoài ra, Xdebug còn là một công cụ profiler rất tốt cho website. Đây là một tính năng giúp tìm ra thắt cổ chai (bottleneck) nhằm cải thiện tốc độ website.
Trong bài viết này, tôi xin giới thiệu với mọi người sử dụng Xdebug cho việc dò lỗi trong ứng dụng web. Và để thực hiện điều này, tôi sẽ dùng Netbeans để tích hợp công cụ này và debug lỗi.

January 1, 2013

2013 - New Year Resolutions

Một năm mới lại bắt đầu, kính chúc cho tất cả mọi người mọi nhà một năm mới an khang thịnh vượng, ấm no tiền tình, thành công trong sự nghiệp và tất cả những gì tốt đẹp nhất sẽ đến với mọi người.
Một năm nữa lại trôi qua - một năm với biết bao thăng trầm, biến cố của cuộc sống. Có lúc vui tươi, có khi buồn bã; khi cuồn cuộn nhiệt huyết, khi trầm lắng nội tâm. Năm 2012 vừa qua là một năm để lại rất nhiều kỷ niệm, rất nhiều điều đọng lại trong lòng của mình. Có thể cùng nhìn lại 20 khoảng khắc đáng nhớ nhất trong năm 2012 trên  Facebook tại địa chỉ sau: "Year In Review - 2012"