Ngồi code hoài cũng làm cho bản thân ngợp ngạt, loay hoay một hồi thì cũng có chuyện phải làm - viết bài blog chia sẻ cho vui. Cũng trùng hợp hay sự ngẫu nhiên gì đó, lang thang facebook thì thấy người bạn chia sẻ bài viết về người vợ dịu dàng sẽ giúp chồng thành công càng dữ dội, và thấy đề tài này hay nè, bàn bạc tí cho nó vui.
Dễ hình dung cho cái đề tài này mà, dân gian hay ví von một điều là vợ là hậu phương, còn chồng là tiền tuyến. Và lẽ dĩ nhiên, hậu phương vững chắc, thì tiền tuyến an tâm mà xông pha trận mạc, dám đương đầu sóng gió vì anh ta biết khi quay về nhà (hậu phương) thì anh ta sẽ được chăm lo, được khôi phục, là sẽ luôn tràn đầy năng lượng.
Nhưng, tôi là một coder, không phải nhà tâm lý học hay nhà phân tích thực trạng xã hội, tôi không dám mạnh miệng nói sảng trên vấn đề này. Vậy tôi lảm nhảm cái gì - tôi nói về hậu phương và tiền tuyền trong quá trình phát triển phần mềm.
Một weblog bé tí của một con người bé tí, nhằm chia sẻ những điều bé tí để hy vọng những thứ ấy kết hợp lại thành một cái to lớn.
Showing posts with label Web Developer. Show all posts
Showing posts with label Web Developer. Show all posts
September 2, 2016
Hậu phương vững chãi - Tiền tuyến xông pha
Labels:
Bình loạn,
Linh tinh,
Web Developer
April 28, 2016
Cài đặt APCu trên Windows với WAMP
Cách đây xưa thiệt là xưa, xa thiệt là xa, mình có bài viết cài đặt APC trên nền Linux, cụ thể lúc đó mình dùng CentOS nhằm hỗ trợ tăng tốc cho PHP. APC có cái lợi vừa opcode cache vừa data cache (xem lại bài này để biết chi tiết). Nhưng từ khi PHP 5.5 ra đời thì mình dẹp luôn cái APC vì Zend Optimizer+ ngon, bổ, rẻ nó tích hợp sẵn.
Dự án APC không vì đó mà ngừng lại, họ tách phần data cache ra, tạo một extension riêng cho PHP là APCu - APC User Cache. Thật ra mình cũng không dùng sau này, vì có memcache, redis hỗ trợ ổn cho vấn đề cache data.
Nhưng hôm nay vì lý do phải dùng nó, mà máy công ty là Windows, đang dùng WAMP, nên thôi viết tiếp bài này chia sẻ chơi cho vui.
Dự án APC không vì đó mà ngừng lại, họ tách phần data cache ra, tạo một extension riêng cho PHP là APCu - APC User Cache. Thật ra mình cũng không dùng sau này, vì có memcache, redis hỗ trợ ổn cho vấn đề cache data.
Nhưng hôm nay vì lý do phải dùng nó, mà máy công ty là Windows, đang dùng WAMP, nên thôi viết tiếp bài này chia sẻ chơi cho vui.
Labels:
APC,
Cache,
PHP,
WAMP,
Web Developer
January 26, 2016
Dễ dàng giả lập HTTP với module Nock trong NodeJS
![]() |
| source: https://cms-assets.tutsplus.com/uploads/users/487/posts/22836/final_image/http-mock-test.png |
Mục tiêu và tại sao lại giả lập HTTP, và có tác dụng gì cho việc unit test - TDD. Đơn giản là, hiện tại mình đang viết vài project NodeJS theo cơ chế "thông" nhau bởi API. Unit test vốn dĩ là isolated test, có nghĩa là cô lập nó lại mà test. Nên mình cần giả lập (mock) http response từ API server, rồi tiếp đó mình chỉ tập trung viết code cho client là đủ (không thèm biết API nó mần sao, chỉ cần giả lập những response như nó mô tả là đủ)
March 16, 2015
Unit test multi modules in Phalex project
Tested #Phalex multi modules with @phpunit, only one phpunit.xml config file. Thank to #ZF2, I learned more thing from it.
— Trần Minh Quang (@tmquang6805) March 16, 2015
Sau khi mình release project Phalex của mình thì tới nay đã khá lâu (cũng gần 4 tháng rồi) và mình cũng bắt đầu code vài dự án với Phalex. Một trong những dự án dựa trên Phalex 5SOnline - đây là một dự án mình làm cho công ty HDViet. Tuy nhiên, bên cạnh đó mình vẫn âm thâm code một dự án riêng của cá nhân, hy vọng sẽ trình làng mọi người vào giữa năm nay.Dự án của HDViet thì phải chạy cho nhanh nên không có test (TDD) cho dự án, còn dự án cá nhân thì chắc chắn là có. Phalex ra đời nhằm mục đích là multi modules, nên khi làm việc với nó, mình cũng mất khá nhiều thời gian khi chạy test cho từng module. May mắn thay, vô tình hôm nay đọc cách test của Zend Framework 2, nên mình đã thử áp dụng vào project và đã thành công, nay mình chia sẽ lại với các bạn nếu ai đó có dùng Phalex để code
January 26, 2015
TDD và quan điểm của tôi
![]() |
| http://www.filecatalyst.com/wp-content/uploads/tdd.png |
Test Driven Development (TDD) là một trong rất nhiều quy trình phát triển phần mềm (không chỉ trong lĩnh vực web). Đây là một quy trình phát triển sản phẩm dựa trên test.
KHÔNG BÀN LUẬN
Bài viết này không nhằm giải thích thế nào là TDD, không phân tích ưu nhược điểm TDD, không so sánh TDD với các quy trình khác, và càng không hướng dẫn mọi người cách thực hiện TDD. Nếu bạn đang tìm một trong những thứ mình vừa đề cập bên trên, bạn có thể ngừng đọc tiếp phần bên dưới ^_^VẬY BÀN ĐIỀU GÌ - NOTHING ^_*
Bài viết cũng chẳng bàn thêm gì trong TDD, chỉ là chia sẻ góc nhìn của mình khi dấn thân làm TDD, những cảm nhận, suy nghĩ, khó khăn và những thú vị xung quanh TDD mà mình từng trải nghiệm.
Labels:
Phalex,
PHP,
TDD,
Unit Test,
Web Developer,
Zend Framework 2
Location:
Ho Chi Minh City, Ho Chi Minh, Vietnam
December 12, 2014
Slide: Reusable and Configurable project with ZF2
Labels:
Composer,
PHP,
Presentation,
Slide,
Web Developer,
Zend Framework 2
Location:
Ho Chi Minh City, Ho Chi Minh, Vietnam
June 9, 2014
Người thứ hai đạt chứng chỉ ZCPE - chuẩn PHP 5.5 tại Việt Nam
Như vậy là sau bao nhiêu ngày tháng học tập, làm việc với PHP thì cuối cùng mình cũng đã lấy được chứng chỉ PHP của Zend. Đây là bằng cấp quốc tế thứ 2 của mình trong năm. Thật tế thì ở Việt Nam đã có 33 anh hùng hào kiệt lấy được chứng chỉ PHP của Zend - và mình là người thứ 33. Tuy nhiên, từ tháng 10/2013 thì Zend đưa ra chuẩn mới dựa theo PHP 5.5, và từ lúc đó đến giờ thì ở Việt Nam mình có được 2 người đạt chuẩn này - và mình là người thứ 2 - nên "giựt tít" cho thêm phần sôi nổi ^^
Labels:
Chứng chỉ quốc tế,
PHP,
PHP 5.5,
Web Developer,
ZCPE,
Zend,
Zend Certified PHP Engineer
Location:
Ho Chi Minh City, Vietnam
March 24, 2014
Techcamp Saigon 2014 - Buổi nói chuyện đầu tiên tại sự kiện cộng đồng
Sự kiện Techcamp Saigon 2014 vừa rồi (diễn ra tại trường đại học RMIT ngày 23/3) mình cũng có đăng ký tham gia chia sẻ. Chủ đề mình đăng ký nói về PHP Framework Phalcon và một module nhỏ do mình làm ra nhằm mục đích dễ phát triển hơn với Phalcon. Nhân một chút rãnh rỗi, ngồi viết lại bài blog này chia sẻ cùng mọi người.
October 24, 2013
PHP - Design Pattern - Observer
![]() |
| Nguồn: http://mydevelopedworld.files.wordpress.com/2013/03/observer-pattern-uml.png |
Labels:
Design Patterns,
Event,
Event-Driven Programming,
PHP,
Web Developer
Location:
Ho Chi Minh City, Vietnam
PHP - Design Pattern - Observer
![]() |
| Nguồn: http://mydevelopedworld.files.wordpress.com/2013/03/observer-pattern-uml.png |
Labels:
Design Patterns,
Event,
Event-Driven Programming,
PHP,
Web Developer
Location:
Ho Chi Minh City, Vietnam
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
September 24, 2013
MongoDB - Something to note
![]() |
| MongoDB.org |
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ả.
Labels:
Map-Reduce,
MongoDB,
NoSQL,
Tip,
Web Developer
Location:
Ho Chi Minh City, Vietnam
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.
Labels:
High Performance,
PHP,
Tip,
Web Developer
Location:
Ho Chi Minh City, Vietnam
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.
Labels:
Login,
PHP,
Session,
Web Developer,
Zend Framework 2
Location:
Ho Chi Minh City, Vietnam
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
Labels:
Bottle neck,
High Performance,
Profiler,
WAMP,
Web Developer,
Xdebug
Location:
Ho Chi Minh City, Vietnam
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.
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.
Labels:
Web Developer,
Work Flow,
Zend Framework
Location:
Ho Chi Minh City, Vietnam
March 28, 2013
Zend Framework 2 - Routing - Part 2
![]() |
| Tree Routing |
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.
Labels:
Friendly Url,
Rewrite Url,
Routing,
Web Developer,
Zend Framework 2
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
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
Labels:
Friendly Url,
Rewrite Url,
Routing,
Web Developer,
Zend Framework 2
Location:
Ho Chi Minh City, Vietnam
March 22, 2013
Zend Framework 1.x - Work Flow - Part 1
![]() |
| nguồn: http://www.kurttest.com/zfa/dispatch.html |
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.
Labels:
Web Developer,
Work Flow,
Zend Framework
Location:
Ho Chi Minh City, Vietnam
March 18, 2013
Zend Framework 2 - Access Db via PDO
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.
Labels:
Database,
MySQL,
PDO,
Web Developer,
Zend Framework 2
Subscribe to:
Posts (Atom)
















