Bí kíp để trở thành người hùng lập trình

Posted May 11, 2015
Category Technology

Được đánh giá là một nghề thời thượng với cơ hội nghề nghiệp lớn, mức thu nhập tốt, lập trình đang là nghề nghiệp hấp dẫn nhiều người, đặc biệt là giới trẻ. Có rất nhiều người trẻ đã bước chân vào nghề này, tuy nhiên không phải ai cũng thành công.

Dưới góc nhìn của nhà đào tạo và dưới góc nhìn của doanh nghiệp, một LTV được đánh giá là giỏi cũng có phần khác nhau. Cùng chia sẻ những điều này cùng Hanoi-Aptech trong ngày thứ 4 này nhé!

Với nhà đào tạo: Chủ động, năng động & có tinh thần khởi nghiệp là những gì mà một LTV cần có

1. Kiên trì là yếu tố đầu tiên quyết định sự thành bại của một LTV: Điều này vô cùng dễ hiểu bởi lẽ nếu thiếu đi sự kiên trì thì LTV sẽ dễ dàng bỏ cuộc, nổi nóng trước những dòng code “khó nhằn”, đây là điều mà những bạn trẻ ở nước ta thiếu nhiều nhất, thậm chí các bạn rất vội vàng, vừa ra trường đã đòi hỏi mức lương cao, đãi ngộ tốt thay vì cố gắng làm việc nâng cao trình độ và kinh nghiệm lập trình.

2. Ham học hỏi có lẽ là phẩm chất thứ 2 mà lập trình viên Việt Nam cần có: Thực tế hiện nay cho thấy mặt bằng LTV của chúng ta chưa thể so sánh với Trung Quốc, Ấn Độ hay các nước phát triển khác. Vì thế, LTV cần đầu tư thời gian, công sức để học tập và rèn luyện kỹ năng lập trình cũng như kiến thức về IT để bắt kịp với các LTV tại những quốc gia này thì mới hy vọng đưa Việt Nam đứng trong hàng ngũ những nước có chất lượng nhân lực công nghệ thông tin hàng đầu thế giới.

3. Tinh thần làm việc nhóm (team-work): Có lẽ ngành LTV là một trong những ngành nghề mà sự teamwork trong công việc là rất quan trọng. Với đặc thù công việc, dự án thường cần nhiều người cùng hợp tác làm việc vì mỗi người sẽ có những khả năng riêng,, sáng tạo riêng và còn cả sự kiên trì để có thể thực thi những dòng lệnh, công đoạn dù có thể nhỏ nhặt nhưng rất quan trọng với mọi dự án.

4. Tinh thần cầu tiến và không ngừng cập nhật kiến thức mới: Công nghệ thông tin là lĩnh vực thay đổi từng ngày, thậm chí từng giờ. Vì thế LTV phải thường xuyên cập nhật các kiến thức, kĩ năng để không bị bỏ lại phía sau sự phát triển vũ bão của thế giới IT. Năng động – nhiệt huyết – luôn làm mới mình là những gì LTV cần có.

5. Tinh thần khởi nghiệp: Là người có khát vọng thay đổi, có mong muốn làm cho thế giới, cộng đồng, xã hội tốt lên. LTV chính là người kết nối và mang công nghệ thông tin hòa nhập vào xã hội.

hanoiaptech2

 Bạn chọn thành công hay thất bại?

Với doanh nghiệp: LTV cần có tinh thần của những “chiến binh” thực sự

1. Có tính tò mò, ham khám phá vì đó là những điểm đặc trưng đầu tiên của “con nhà” kỹ thuật.

2. Biết kiên trì, nhẫn nại, không được nản chí khi công việc đòi hỏi nhiều thời gian. Minh chứng từ Mark Zuckerberg – tỷ phú trẻ tuổi nhất thế giới, người sáng lập mạng xã hội lớn nhất hành tinh Facebook đã cho thấy: để có được thành công, một LTV phải làm việc không kể ngày đêm, quên ăn quên ngủ và Mark Zuckerberg đã từng “code” thâu đêm suốt sáng để cho ra Facebook.

hanoiaptech1

Mark Zuckerberg đã từng “code” thâu đêm suốt sáng để cho ra Facebook

 3. Luôn mang trong mình tinh thần cầu tiến, đam mê sự hoàn hảo của sản phẩm. Hãy nghĩ rằng làm sao để có được sản phẩm ưu việt nhất bởi lẽ sẽ luôn có những thứ tốt hơn của mình ra đời phía sau nữa.

4. Có tinh thần của một chiến binh hiếu thắng, mình làm ra cái gì cũng phải hơn bạn, hơn những sản phẩm trước đó, phải luôn phấn đấu để trở thành số 1.

hanoiaptech

 Hanoi-Aptech – địa chỉ cho những ai muốn học và thành nghề với nghề lập trình

 Có rất nhiều yếu tố để tạo nên sự thành bại của một LTV. Nhưng trên tất cả sự kiên trì, ham học hỏi, có tinh thần cầu tiến là những bí kíp để bạn trở thành một người hùng lập trình.

Hy vọng rằng với những bí kíp mà chúng tôi thống kê ở trên sẽ phần nào giúp các bạn đã, đang và sẽ là lập trình viên sẽ có cái nhìn đúng đắn nhất về ngành nghề mà các bạn đã lựa chọn

Read More »

Phần lớn thời gian của một lập trình viên là dùng để code?

Posted February 4, 2015
Category Technology

Khi bạn đọc hiểu code chính là lúc bạn đang rewriting code

Coding Horror

Nếu bạn hỏi một nhà phát triển phần mềm rằng họ dành thời gian để làm công việc gì nhiều nhất, thì họ sẽ nói với bạn rằng họ dành phần lớn thời gian để viết code.

Tuy nhiên, nếu bạn thực sự quan sát công việc mà các nhà phát triển phần mềm dành thời gian của họ để làm, thì bạn sẽ nhận ra rằng họ dành phần lớn thời gian của họ để cố gắng hiểucode:

Phần lớn thời gian làm việc của một lập trình viên là dùng để đọc hiểu code.Phần lớn thời gian làm việc của một lập trình viên là dùng để đọc hiểu code.


Như Peter Hallam đã giải thích:

Tại sao việc chỉnh sửa code lại tốn thời gian gấp 5 lần việc viết code mới? Code mới trở thành cũ hầu như tức thì. Bạn viết một số code mới. Sau đó ra ngoài làm một tách cà-phê. Và đột nhiên tất cả code của bạn vừa viết trở thành code cũ. Code mới toanh thì hầu như chỉ có ở giai đoạn thiết kế ban đầu tuy nhiên giai đoạn này thì không nhiều. Hầu hết các dự án phát triển phần mềm đều sử dụng phương pháp phát triển lặp lại. Thiết kế kiến trúc phần mềm, lập trình, kiểm thử, lặp lại. Lặp lại rất nhiều. Chỉ có code ở trong phần lặp đầu tiên mới được xem là code hoàn toàn mới. Sau quy trình lặp đầu tiên thì code đó nhanh chóng bị chỉnh sửa ngày càng nhiều hơn code mới. Hơn nữa, hầu hết tất cả thay đổi code được thực hiện trong quá trình sửa lỗi (fix bug) thì đều rơi vào trong thể loại chỉnh sửa code. Hãy nhìn [nhóm phát triển ra sản phẩm Visual Studio của Microsoft]; những milestones (điểm mốc quan trọng) trong quá trình sửa lỗi của chúng tôi cũng nhiều như là những milestones về những đặc trưng mới vậy. Công việc chỉnh sửa code tiêu tốn nhiều thời gian của một nhà phát triển phần mềm chuyên nghiệp hơn là việc viết ra code mới.

Tại sao việc đọc hiểu code lại tốn thời gian gấp 3 lần so với việc chỉnh sửa code? Trước khi chỉnh sửa code, thì trước tiên bạn phải hiểu nó làm cái gì đã. Điều này cũng đúng trong bất kỳ hoạt động tái cấu trúc code đang tồn tại – bạn phải hiểu hành vi của đoạn code đó đến mức bạn có thể đảm bảo rằng việc tái cấu trúc đó đã không làm thay đổi bất kỳ điều gì không mong muốn. Khi bạn debugging, thời gian bạn dành để hiểu vấn đề đó lớn hơn rất nhiều lần so với thời gian bạn thực sự dùng để sửa lỗi. Một khi bạn đã sửa được vấn đề đó, bạn cần phải hiểu phần code mới để đảm bảo rằng công việc sửa lỗi vừa làm là đúng đắn. Thậm chí khi viết code mới, thì bạn cũng chẳng bao giờ phải bắt đầu từ con số không. Bạn sẽ gọi đến những phần code đã tồn tại để thực hiện hầu hết công việc của bạn. Hoặc là sử dụng code đã viết rồi hoặc là một thư viện được cung cấp bởi Microsoft, hoặc thậm chí một dll do hãng thứ ba cung cấp. Trước khi gọi đến phần code đang tồn tại này thì bạn phải hiểu nó cặn kẽ trong từng chi tiết. Khi viết ứng dụng về XML đầu tiên của mình, thì tôi đã phải dành rất nhiều thời gian để hiểu chi tiết của những lớp thư viện XML hơn là tôi thực sự viết code. Khi bổ sung thêm những đặc trưng mới thì bạn phải hiểu về những đặc trưng đang tồn tại đến mức bạn có thể sử dụng lại ở nơi thích hợp. Việc đọc hiểu code là hoạt động mà các nhà phát triển phần mềm chuyên nghiệp dành hầu hết thời gian của họ để thực hiện.

Tôi nghĩ rằng cái cách mà hầu hết các nhà phát triển phần mềm “hiểu” code thì cũng đồng nghĩa với việc họ đang rewrite nó. Joel bạn tôi thì cho rằng việc rewriting code luôn luôn là một ý tưởng tồi. Tôi không chắc điều đó có chính xác hay không. Nhưng theo như cuốn sáchThe Universe in a Nutshell, thì có nói rằng dòng chữ được viết trên tấm bảng đen của nhà vật lý nổi tiếng Richard Feynman tại thời điểm ông ta qua đời là:

Cái gì mà tôi không thể tạo ra được, thì tôi không hiểu được.

Điều đó không có nghĩa là các lập trình viên muốn viết lại mọi thứ; mà nó có nghĩa rằng có rất ít các lập trình viên có đủ thông minh để hiểu code mà không cần rewrite nó. Và cũng giống như việc tôi tin vào sự hiệu quả của việc đọc code, tôi cũng tin chắc rằng chỉ có một cách để trở nên giỏi hơn trong việc viết code đó là phải viết code thật nhiều. Càng nhiều càng tốt. Dù tốt, dù xấu, hay bất cứ thứ gì đi chăng nữa. Không ai lại muốn các nhà phát triển phát minh lại cái bánh xe (lần nữa), nhưng việc cứ ngồi đọc để xem những chiếc bánh xe đó hoạt động như thế nào thì kém xa so với trải nghiệm lái xe vòng quanh trên một số chiếc bánh xe mà bạn đã tự tạo ra chúng.

Việc hiểu code của một ai đó– thực sự hiểu làm thế nào tất cả chúng có thể hoạt động trơn tru với nhau– mất một số lượng lớn những nỗ lực trí óc. Và, thậm chí sau đó một câu hỏi đặt ra là,liệu mã nguồn có phải thực sự là cách tốt nhất để hiểu một ứng dụng? Sau khi đọc nhữngsuy nghĩ khiêu khích của Nate Comb trong một bài blog, thì tôi cũng cảm thấy thắc mắc:

Có phải Martians đang mong muốn hiểu các quy luật của trò game nổi tiếng World of Warcraft (WoW) tốt hơn bằng cách cố gắng đọc mã nguồn của nó hoặc ngồi xem hàng triệu giờ video ghi lại cảnh chiến đấu trên màn hình?

“Liệu một ai đó ngồi đọc mã nguồn trò chơi thì bạn có nghĩ rằng họ có thể học được cách làm thế nào để chơi giỏi trò [Monopoly] (một trò đánh bài)?”

Tôi đã làm việc trên rất nhiều ứng dụng mà thậm chí phần lớn source code là do chính tay tôi viết, và tôi cũng đã gặp vấn đề trong việc giải thích chính xác ứng dụng đó làm việc như thế nào. Hãy tưởng tượng sẽ khó như thế nào đối với việc giảng giải này đối với dự án mà có 3, hoặc 5, hoặc 12 lập trình viên giam gia.

Liệu mã nguồn có thực sự nói lên câu chuyện của ứng dụng đó? Tôi cũng không chắc nữa. Có thể cách tốt nhất để hiểu một ứng dụng thì nghịch lý thay, đó là lờ đi toàn bộ mã nguồn của nó. Nếu bạn muốn biết ứng dụng đó thực sự làm việc như thế nào, thì hãy quan sát cẩn thận xem người dùng sử dụng nó ra sao. Sau đó hãy viết một phiên bản của chính bạn.

Read More »

Trình bày phương pháp lập trình hướng đối tượng

Posted February 2, 2015
Category Technology
1. MỞ ĐẦU:
- Lập trình hướng đối tượng là phương pháp lập trình lấy đối tượng làm nền tảng để xây dựng thuật toán, xây dựng chương trình.
- Có sự tương xứng giữa các đối tượng trong chương trình và các đối tượng trên thực tế và có hướng tiếp cận đa dạng.
- Đối tượng phần mềm thông thường là sự kết hợp giữa mã lệnh và dữ liệu trong một thể thống nhất.

2. CÁC ĐẶC TÍNH CƠ BẢN CỦA LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG:
  • Tính đóng gói: khả năng truy suất vào các thành thần một đối tượng trong khi vẫn đảm bảo che giấu các đặc tính riêng tư trong đối tượng được gói gọi là tính đóng gói.
·       
 
  • Tính kế thừa: Tính kế thừa cho phép các đối tượng  chia sẻ hay mở rộng các thuộc tính hoặc phương thứcc mà không phải tiến hành định nghĩa lại.
 ·       
  • Tính trừu tượng: Một đặc tả trừu tượng cho ta biết một đối tượng có thể  làm gì mà không bận tâm vào việc nó làm như thế nào.
·       
  • Tính đa hình: Tính đa hình thể hiện khi với cùng một phương thức nhưng có thể có cách ứng xử khác nhau ở những lớp cùng giao diện.
  •  
3.      ƯU ĐIỂM CỦA LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG:
  • Khả năng tái sử dụng cao.
  • Ổn định và dễ bảo trì.
  • Chi phí giảm dần.
  • Tăng năng suất lập trình.
  • Tăng chất lượng phần mềm.
  • Tăng tính dễ hiểu của phần mềm.
  • Vòng đời của phần mềm tăng.
4.      LỚP
  • Lớp là khái niệm dùng để mô tả một nhóm các đối tượng có những thuộc tính, hành vi và những mối quan hệ thông thường tương tự nhau.
  • Thuật ngữ lớp c1 thể hiểu là "lớp các đối tượng (class)" là khuôn mẫu để sinh ra đối tượng, mỗi đối tượng được coi như là một thể hiện của lớp với những giá trị thuộc tính cũng như cách thức hoạt động đặc trưng.
  • Sơ đồ mô tả lớp: sơ đồ lớp mô tả những đặc điểm khái quát nhất về lớp bao gồm: Tên lớp, các thuộc tính, và các phương thức.

5. ĐỐI TƯỢNG:
  • Đối tượng là thể hiện (instance) của một lớp.
  • Mỗi đối tượng có:
    • Định danh
    • Thuộc tính (dữ liệu)
    • Hành vi (phương thức)
 
Thuộc tính và hành vi của đối tượng:
Thuộc tính là những đặc điểm đặc trưng của đối tượng, thể hiện thông qua những giá trị cụ thể.
Hành vi là những cách thức mà qua đó đối tượng thể hiện sự hoạt động hay chức năng của chúng.
Quản lý bộ nhớ khi sử dụng đối tượng:
Stack: khi gọi phương thức, bộ nhớ được yêu cầu cho các tham số và các biến cục bộ. Khi phương thức kết thúc, vùng nhớ được giải phóng.
Heap: khi tạo một đối tượng sử dụng từ khóa new và lời gọi phương thức khởi tạo. Nó sẽ được giải phóng một cách tự động khi kết thúc.

6. TÀI LIỆU THAM KHẢO
[1] Trần Đan Thư, Lập trình hướng đối tượng, Nhà xuất bản khoa học & kỹ thuật, 2010, 370.
[2] Lê Thị Mỹ Hạnh, Lập trình hướng đối tượng, 2002, 165.
[3] Internet.

Ths. HOÀNG CÔNG TRÌNH
Khoa Công Nghệ Thông Tin
Trường Cao Đẳng Công Nghệ Thủ Đức

Read More »

Xu hướng mới trong lập trình phần mềm: Giao tiếp trong kiến trúc Module

Posted January 7, 2015
Category Technology
Kiến trúc mô-đun (module) cho phép chia nhỏ bài toán (hay yêu cầu) của phần mềm thành các phần hầu như không trùng lắp và do đó hỗ trợ làm việc song song trên các module và đặc biệt là dễ bảo trì hơn.

Về khái niệm, kiến trúc mô-đun (module) cho phép chia nhỏ bài toán (hay yêu cầu) của phần mềm thành các phần hầu như không trùng lắp và do đó hỗ trợ làm việc song song trên các module và đặc biệt là dễ bảo trì hơn. Kiến trúc module cũng là chìa khóa để đạt tới các khả năng tái sử dụng các thành phần của hệ thống và khả năng mở rộng tốt hơn.Một số ngôn ngữ hỗ trợ lập trình theo cơ chế module cho phép biên dịch các module một cách độc lập và có thể gắn kết vào hệ thống lúc thực thi như Flex, Ruby... Một số ngôn ngữ khác thì hỗ trợ cơ chế như thư viện liên kết động (DLL) để biên dịch các module thành các thư viện độc lập và có thể gắn kết động vào hệ thống.


Những ví dụ dễ thấy của kiến trúc module là các môi trường như Eclipse, Visual Studio. Chúng được tạo ra như những nền tảng cơ bản trong đó việc hỗ trợ các ngôn ngữ như Java, C#... được thiết kế dạng plugin có thể dễ dàng gắn vào nền tảng. Chúng ta cũng có thể thấy công cụ Visual Studio đi kèm bộ SQL Professional để hỗ trợ các project của SQL server dưới tên khác là SQL.

Server Business Intelligence Development Studio. Việc tổ chức như thế thậm chí còn cho phép các nhà phát triển thứ 3 dễ dàng phát triển các tính năng mở rộng, như bổ sung hỗ trợ PHP vào Visual Studio qua plugin VS.php. (Hình 1)

Hình 1: Các ứng dụng web như các CMS Joomla,
Drupal cũng được xây dựng trên nền tảng
module cho cộng đồng cùng phát triển và dễ mở rộng.
Kiến trúc module có thể mở rộng để áp dụng ở mức hệ thống và các module có thể là các ứng dụng hay dịch vụ chạy song song và tương tác với nhau thông qua một kiểu giao tiếp nào đó như Messaging, RPC, Socket...

Về mặt ý tưởng, kiến trúc module có thể xem là nền tảng cơ bản của rất nhiều kiến trúc tiên tiến khác như MVC, Multi-tier, SOA... Hơn nữa, kiến trúc module có thể tái áp dụng vào các module của chính nó hay các thành phần con của các kiến trúc trên như các dịch vụ bên trong các hệ thống SOA.

Interface – công cụ giao tiếp của các module

Các module được gắn kết với nhau trong chương trình thông qua các "interface". Một interface của module mô tả những thành phần được cung cấp và cần được cung cấp. Các thành phần này này được các module khác "thấy" và sử dụng.

Lưu ý khái niệm interface ở đây khác biệt với khái niệm "interface" của các ngôn ngữ như Java, C#. Các interface của các module thường được thiết kế theo tiêu chí sao cho các quan hệ phụ thuộc giữa các module là nhỏ nhất.

David Parnas – người đi tiên phong về lĩnh vực kiến trúc phần mềm – đã đưa ra khái niệm Information-hidding được dùng như nền tảng cơ bản cho những nghiên cứu sau này.Information-hiding (Parnas)

Trong kiến trúc module, theo nguyên tắc Information-hiding, những phần có khả năng thay đổi bên trong của module được ẩn đi nên những phần còn lại dùng để giao tiếp giữa các module sẽ không bị ảnh hưởng khi thay đổi thiết kế. Kết quả là những module có thể thay đổi một cách độc lập mà không ảnh hưởng lẫn nhau. Ví dụ, khi chúng ta muốn xây dựng một ứng dụng hỗ trợ nhiều cách lưu trữ dữ liệu khác nhau, thậm chí có thể mở rộng bổ sung trong tương lai thì cách tốt nhất là ẩn đi những xử lý lưu trữ cụ thể và chỉ dùng một giao diện chung đơn giản cho chúng.

Như vậy theo Parmas, interface của module nên được thiết kế chỉ bao gồm những phần hầu như không thay đổi, những thành phần này được gọi là thành phần "công khai". Còn những chi tiết ẩn bên trong bởi interface thường được gọi là các thành phần "bí mật" hoặc "riêng tư”. (Hình 3)Trong .Net framework, những thành phần bí mật được sử dụng nội bộ bên trong các lớp thư viện của framework được khai báo bằng từ khóa "Internal". Các thành phần "Internal" của .Net không thể truy cập trực tiếp từ bên ngoài assembly của chúng cho dù chúng ta biết rõ mô tả của chúng. Tuy nhiên, trong một số trường hợp chúng ta muốn sử dụng một số tính năng cấp thấp hoặc sửa lỗi của framework nên buộc phải truy cập vào các thành phần này, một kĩ thuật thường dùng là Reflection.Trong các mẫu lập trình (pattern), có một mẫu được tổ chức theo ý tưởng trên và được dùng rất phổ biến, đó là Facade pattern.

Facade pattern

Facade pattern thường được dùng trong lập trình hướng đối tượng. Một facade là một object đại diện cho các lớp thư viện bên trong, cung cấp một giao diện đơn giản ra bên ngoài. Facade có thể:• Làm cho một thư viện phần mềm dễ hiểu và dễ sử dụng hơn vì facade cung cấp phương tiện đơn giản hơn để truy cập những tác vụ thông thường (thay vì thao tác qua nhiều lớp thư viện phức tạp).• Giảm sự phụ thuộc giữa code bên ngoài và code thực thi bên trong thư viện, vì thế cho phép phát triển hệ thống một cách mềm dẻo hơn.• Được dùng như một cách để gói gọn một tập hợp API có sẵn được tổ chức không tốt bằng một tập API đơn giản hơn nhiều để phục vụ cho một vài tác vụ nhất định.(Xem hình 3)

Facade pattern thường kết hợp với Singleton pattern để tổ chức lớp facade theo dạng singleton. Ngoài ra, Facade pattern đặc biệt phù hợp trong mô hình 3 cấp (3-tier) qua cách định nghĩa các giao tiếp đơn giản để tương tác giữa các cấp, nhờ đó ẩn đi các xử lý phức tạp bên trong. Nó còn được áp dụng rất phổ biến trong .NET Framework theo mô hình thiết kế component-oriented.

Một trong những facade thường được sử dụng trong .NET 2.0 là "System.Web.Mail.SmtpMail". Lớp này cung cấp cho người dùng một giao tiếp đơn giản để gửi mail thông qua giao thức SMTP mà không phải quan tâm đến các thao tác xử lý phức tạp bên trong.Tuy nhiên, việc sử dụng các lớp facade trong một thư viện cần được xem xét cẩn thận. Vì các facade cung cấp giao tiếp ở mức cao cho những chi tiết bên trong nên nếu không được thiết kế tốt, chúng sẽ hạn chế những tính năng của thư viện khi người dùng không thể truy cập đến những chi tiết ở mức thấp bị ẩn đi.

Inversion of control

Inversion of Control, hay IoC, là một nguyên tắc thuộc lĩnh vực thiết kế kiến trúc phần mềm trong đó mô tả luồng điều khiển của hệ thống bị đảo ngược so với kiến trúc cổ điển.Theo mô hình lập trình cổ điển, lập trình viên viết các xử lý và thủ tục gọi đến các thủ tục trong thư viện có sẵn, các thủ tục này có thể gọi đến một thủ tục khác ở một thư viện khác nhưng nó không bao giờ gọi trở lại những xử lý do người lập trình đó viết (chúng ta tạm gọi là thủ tục của người dùng – user procedure). Nhưng đối với IoC, điều này lại xảy ra. Kết quả này có thể đạt được bằng cách thư viện hay một framework định nghĩa cơ chế chung cho một loại vấn đề, còn xử lý cụ thể sẽ do thủ tục của người dùng giải quyết. Một ví dụ dễ thấy của IoC là sự thay đổi của mô hình lập trình giao diện. Theo mô hình console cổ điển thì giao diện ứng dụng được điều khiển bởi code của ứng dụng. Ví dụ, để giải một bài toán c=a+b ta cần lần lượt yêu cầu người dùng nhập a, b rồi hiện kết quả c. Tuy nhiên, với các framework lập trình hỗ trợ giao diện đồ họa mới như .NET, vòng lặp xử lý chính được framework cung cấp và chương trình cần viết chỉ việc cung cấp các thủ tục xử lý sự kiện cho các control tương ứng với các giá trị trên. Luồng xử lý chính của ứng dụng như thế đã tách khỏi chương trình và đi vào framework.IoC được sử dụng như một tính năng cơ bản trong các framework hỗ trợ lập trình mức cao (như Spring, Cairngorm, PureMVC...). Thay vì phải viết một chuỗi các xử lý và thủ tục được gọi một cách tuần tự, người sử dụng các framework này thường viết các xử lý để đáp ứng lại các event hoặc yêu cầu dữ liệu đặc trưng. Đây cũng là một hướng khác trong việc thiết kế phương tiện giao tiếp giữa các module so với kiểu cổ điển vì trong phương thức giao tiếp có sự tham gia điều phối của framework bên dưới. Dưới đây chúng ta sẽ khái quát ba trong số các khái niệm kế thừa từ IoC: data-binding, dependency injection và event-driven architecture.

Data-binding

Trở lại ví dụ chương trình giải bài toán c=a+b ở trên, nếu chúng ta sử dụng một công cụ bảng tính như Excel và gán công thức cho cell C là cell A + cell B thì khi giá trị cell A và B được cập nhật, giá trị cell C sẽ tự động được tính lại. Tính năng tự động đồng bộ dữ liệu khi có thay đổi như trên không phải là mới và xuất hiện nhiều trong các ngôn ngữ lập trình hiện nay với tên gọi là data-binding.

Hình 5: Một ví dụ về mô hình data-binding

Theo kiểu lập trình thô sơ hơn mà chúng ta thường làm thì để đạt được khả năng trên, trong một ngôn ngữ lập trình như .NET, chúng ta sẽ bắt các sự kiện thay đổi của các control (cell A, cell B) và gọi lại thủ tục cập nhật cell C. Còn khi sử dụng kĩ thuật data-binding, một đối tượng quan sát (observer) được tạo ra để quan sát các thay đổi trên thuộc tính của đối tượng nguồn và tự động cập nhật thay đổi lên thuộc tính được đăng ký tương ứng của đối tượng đích. Để cài đặt cơ chế data-binding, Observer pattern thường được dùng để tạo đối tượng observer và thuộc tính của đối tượng đích thường được dùng ở dạng set property. Cơ chế kích hoạt của data-binding là cách sử dụng sự kiện (event). Khi có sự thay đổi trên thuộc tính đối tượng nguồn, một event sẽ được kích hoạt và gửi tới observer. Observer sau đó duyệt trong danh sách đăng ký của mình và kích hoạt lại biểu thức gán thuộc tính các đối tượng đích tương ứng. (Hình 5)Tính năng data-binding được hỗ trợ sẵn trong hầu hết các các framework lập trình hiện tại (như .NET, Flex...) và giúp lập trình viên giảm bớt rất nhiều thao tác xử lý so với cách xử lý thủ công. Hiện tại, data-binding ở các framework khác nhau cũng được hỗ trợ một số tính năng bổ sung khác nhau như khả năng binding 2 chiều, binding ngược từ đối tượng đích đến đối tượng nguồn... Trở lại vấn đề ứng dụng trong kiến trúc module thì data-binding có ứng dụng như thế nào? Data-binding có khả năng rất to lớn trong việc thay đổi cách tương tác của các thành phần giao diện với các thành phần đảm nhận xử lý logic và dữ liệu. Trong các mô hình như 3-tier hay MVC, khi sử dụng data-binding, các module presentation hay View có thể gửi và nhận các thay đổi từ các module khác một cách tự động nhờ xử lý của framework bên dưới và do đó giảm bớt sự phụ thuộc giữa các module. Một framework được xem là chuẩn và được sử dụng rộng rãi trong các dự án lớn hiện nay là Cairngorm (xây dựng trên nền tảng Flex của Adobe theo mô hình MVC) cũng sử dụng data-binding như là phương tiện duy nhất để thao tác tới các thành phần View.

Dependency injection

Được xem như một khái niệm điển hình kế thừa từ IoC, dependency injection thường được ứng dụng như một pattern mạnh mẽ trong việc hạn chế sự phụ thuộc giữa các object hay các module. Trong một ứng dụng, giả sử B là một lớp dịch vụ được tổ chức ở mức trừu tượng – abstract, ví dụ như hỗ trợ lưu trữ ảnh, và có nhiều lớp cụ thể kế thừa từ nó như lưu trữ vào database, lưu trữ file jpg, png, ... Thông thường, nếu một thành phần A (client) cần truy cập đến một dịch vụ cụ thể của B thì A thường hoặc phải nắm giữ tham chiếu trực tiếp đến đối tượng cụ thể hoặc thông qua một đối tượng trung gian nào đó để lấy tham chiếu đến nó. Bằng cách sử dụng cách truy cập thông qua đối tượng trung gian, chúng ta có thể tăng tính tái sử dụng A trong nhiều trường hợp bằng cách kết hợp nó với nhiều dạng lưu trữ khác nhau. Tuy nhiên theo cách này thì A vẫn bị giới hạn là phải biết đến đối tượng trung gian cũng như cách truy cập một dịch vụ cụ thể của B từ nó. Nhưng đối với dependency injection, A đơn giản chỉ cần cung cấp một thuộc tính dùng để chứa tham chiếu và một khi một đối tượng A cụ thể được tạo ra, một dịch vụ cụ thể của B cũng sẽ được tự động tạo ra và gắn vào tham chiếu này thông qua một cơ chế bên ngoài.Dependency injection được ứng dụng rộng rãi trong các framework trên nền tảng Java và .NET như Spring, PicoContainer, Spring.NET, Castle MicroKernel/Windsor... hay trong Flex như Mate, Swiz... Các framework này hầu hết đều hỗ trợ cấu hình các liên kết thông qua file config nên càng tăng tính tiện dụng.

Event-driven architecture

Event-driven architecture (EDA) là mẫu kiến trúc phần mềm (architecture software pattern) trong đó, về cơ bản, hệ thống được xây dựng xung quanh các thao tác như tạo, khám phá, tiêu thụ và đáp trả lại các sự kiện. Hiểu đơn giản hơn, EDA là một dạng kiến trúc phần mềm được xây dựng trên luồng các event, sử dụng event như là phương tiện giao tiếp giữa các thành phần hệ thống.Một event trong EDA được hiểu là một "thay đổi trạng thái đáng chú ý” của một thành phần nào đó. Event có thể được phát sinh do người dùng, do các thiết bị phần cứng hoặc do chính phần mềm phát sinh trong một điều kiện nào đó. EDA được xem như một trong những kĩ thuật thiết kế hiệu quả nhất trong việc hạn chế đến mức nhỏ nhất quan hệ phụ thuộc giữa các thành phần hệ thống hay các module.

 

Hình 6: Một ví dụ đơn giản về EDA

Một ví dụ đơn giản của EDA: một module quản lý việc đăng nhập của user cần chứng thực thông tin của user vừa nhập xong nên tự phát sinh và gửi đi một event gọi là LoginEvent chứa thông tin user. Event này sau đó được một module có khả năng thao tác với dữ liệu như WebServer, Database... bắt lấy, thực hiện việc kiểm chứng và sau đó trả lời kết quả thông qua LoginResultEvent để module đăng nhập bắt lấy. Theo cách xử lý này thì module đăng nhập không cần biết module nào và sẽ làm thế nào để thực hiện việc kiểm tra, nó chỉ cần biết gửi yêu cầu và nhận kết quả sau khi kiểm tra và tất cả những gì nó quan tâm chỉ là các event được định nghĩa ở mức hệ thống. Hơn nữa, event kết quả trong trường hợp trên có thể được quan tâm bởi nhiều module khác như module đảm nhận ghi log và do đó làm cho hệ thống càng mềm dẻo hơn. (Hình 6)EDA là mẫu kiến trúc được ứng dụng rất rộng rãi trong các hệ thống hiện đại và đặc biệt được dùng như phương tiện giao tiếp giữa các dịch vụ trong các hệ thống Service-oriented architecture (SOA) kiểu mới. EDA còn được sử dụng rộng rãi trong các framework phổ biến như Cairngorm, PureMVC...

Lời kết

Hi vọng bài viết cung cấp cho các bạn những thông tin hữu ích về kiến trúc module. Còn rất nhiều vấn đề chưa được đề cập như phương pháp chia nhỏ hệ thống thành các module, các nguyên tắc thiết kế... Những vấn đề này hi vọng chúng ta sẽ có dịp bàn tới trong các bài viết khác.

 

PC World

Read More »

So sánh sức mạnh của iOS, Android và Windows Phone

Posted January 7, 2015
Category Technology
Ngày nay, nhiều người muốn sở hữu cho riêng mình một chiếc điện thoại thông minh. Và chúng ta đang sống trong một giai đoạn mà có quá nhiều điều tuyệt vời để lựa chọn, không chỉ về phần cứng, kiểu dáng thiết kế mà còn cả hệ điều hành của điện thoại. Hiện tại có ba nền tảng lớn của thị trường di động là iOS, Android và Windows Phone. Ba hệ điều hành này chiếm đến khoảng 96,9% thị trường, chỉ có 3,1% là của những nền tảng khác.
 
Android là nền tảng mở nên khi có quá nhiều loại thiết bị sử dụng hệ điều hành này từ các hãng sản xuất khác nhau, các lập trình viên cũng phải căn chỉnh ứng dụng của mình sao cho phù hợp với càng nhiều thiết bị càng tốt. Trong khi đó, ứng dụng trên iOS có thể hoạt động mượt mà vì chỉ được tối ưu hóa cho các thiết bị của Apple. Chợ ứng dụng của Windows Phone là “non trẻ” nhất và chưa được sử dụng rộng rãi như iOS và Android.
Infographic dưới đây là một sự so sánh nhỏ giữa ba hệ điều hành iOS, Android và Windows Phone, từ đó cung cấp cho bạn một cái nhìn khách quan đối với mỗi hệ điều hành để bạn có thể có sự lựa chọn phù hợp cho nhu cầu điện thoại thông minh của mình.
 

Nguồn bài viết: DOTNET.VN

Read More »

Những xu hướng lập trình đang nổi trong làng công nghệ

Posted January 7, 2015
Category Technology
Những xu hướng, công cụ lập trình mới đang góp phần vào sự thay đổi của thế giới công nghệ. Giới lập trình không dễ thay đổi nền tảng của mình nhưng các xu hướng đang dần giải phóng sức lao động cho họ.

Trong thế giới của công nghệ thì những tính chất nền tảng như sự chặt chẽ, khoa học, công thức hay quy tắc được ưu tiên hàng đầu và quan trọng hơn các xu thế lập trình. Nhưng điều đó không có nghĩa là môn lập trình không có xu hướng, các công nghệ mới có khả năng tăng hiệu quả cao, độ tùy biến mở rộng, dễ sử dụng, liên tục thay đổi và có khả năng làm lu mờ các thế hệ đi trước.

PC World VN giới thiệu những xu hướng đang nóng trong giới lập trình viên ngày nay. Danh sách này không hẳn tuyệt đối với tất cả nhưng những thay đổi nhanh chóng, những cuộc tranh luận đầy đam mê hay sự trở lại đột ngột của một công nghệ nào đó là những gì đã làm cho nghề lập trình trở nên luôn hấp dẫn.

 

Xu hướng đang nóng: Preprocessors – tiền xử lý

Cách đây không lâu, việc tạo ra một ngôn ngữ lập trình mới có nghĩa là xây dựng tất cả mọi thứ để biến các đoạn mã thành các bit chỉ thị cho máy tính. Sau đó, một người nào đó đã tìm ra cách để mã nguồn của một ngôn ngữ ban đầu sang dạng mã mới ở một ngôn ngữ cấp thấp hơn. Bây giờ mọi người đã sử dụng một ý tưởng thông minh hơn khi chỉ cần viết một biên dịch mã tiền xử lý mới kết hợp với kho tài nguyên phong phú của các thư viện và các API.

 


Tiền xử lý giúp các nhà lập trình trở nên dễ dàng hơn

Ngôn ngữ lập trình Groovy là một trong những công cụ được yêu thích hiện nay với khả năng hoạt động trên JVM và hòa nhập thông suốt đối với ngôn ngữ Java. Goovy sử dụng cú pháp gần giống với Java nhưng nó không sử dụng dấu chấm phẩy ở cuối mỗi dòng, và nó được tự động dịch sang bytecode và chạy trên máy ảo Java. Những người muốn sửa JavaScript để biên dịch thành CoffeScript thì có thể sử dụng một Preprocessors cho phép mã hóa mà không sử dụng dấu chấm câu. Hàng chục ngôn ngữ như Scala hay Clojure đều chạy trên JVM nhưng lại chỉ có một JVM duy nhất. Groovy có thể tích hợp thông suốt đối với mã nền hiện nay của lập trình viên. Groovy không thay thế ngôn ngữ Java — bởi đây là một bộ phận hỗ trợ phát triển.

 

JavaScript MV* framework

Mô hình JavaScript MVC được ứng dụng nhiều nhất

Rất lâu trước đây, tất cả mọi người đã học cách viết JavaScript để bật lên một hộp cảnh báo hoặc kiểm tra xem địa chỉ email thực sự có chứa đựng @. Và bây giờ các ứng dụng HTML AJAX khá đầy đủ cho phép người mới bắt dầu dễ hơn. JavaScript MV*đơn giản một kiến trúc phần mềm có ba thành phần chính là Model, View, phần còn lại có thể là một tinh năng nào khác. Hiện nay có hàng chục các framework như Kendo, Sencha, jQuery Mobile, AngularJS, Ember, Backbone, Meteor JS… và tất cả đã sẵn sàng để xử lý các sự kiện và nội dung cho ứng dụng web và trang của bạn.

 

CSS frameworks

Để tăng khả năng trình diễn của Website thì trong file CSS sẽ xuất hiện nhiều các câu lệnh, ví dụ như việc thiết lập các phông chữ thì có font-style:italic. Tuy nhiên bây giờ các Website không còn sử dụng các câu lệnh thô sơ như trước nữa, những tinh chỉnh từ màu sắc cho đến kiểu chữ hiện đã sử dụng CSS framework- bộ công cụ, thư viện, các quy ước và những ứng dụng. Những đặc tính trong CSS đã được tách ra với các các nhiệm vụ, và được tích hợp vào nhiều module chung để có thể tái sử dụng.

CSS frameworks tương tự như SASS hay người anh em Compass. Những nền tảng này giúp tăng năng suất và tránh các lỗi thông thường, tính tương tích trình duyệt tối ưu, ổn định mã hóa bằng cách cung cấp các cấu trúc lập trình như biến thực- real variable, quy tắc xếp chồng… Những công cụ này không phải là bước đột phá gì mới nhưng đã cải thiện rất nhiều hiệu suất trong lập trình Web.

 

SVG + JavaScript trên Canvas

 


SVG xử lý hình ảnh tối ưu hơn so với nền tảng cũ

Flash vừa mang lại những điều tuyệt vời những cũng là sự khó chịu của rất nhiều người dùng. Các nhà lập trình hiện nay đã có thể xây dựn các ngăn xếp sâu của các đoạn mã Flash cung cấp quá trình biên dịch phức tạp và hình ảnh động. Bây giờ các lớp JavaScript đã có khả năng làm những điều như vật, các nhà cung cấptrình duyệt và phát triển đang coi đây là thời kì cuối của Flash. Họp thấy việc tích hợp các lớp DOM đến từ định dạng mới như SVG (Scalable Vector Graphics) tốt hơn. SVG và HTML đã làm việc thiết kế, xây dựng hình ảnh trở nên dễ dàng cho các nhà phát triển Web. Sau đó có các API lớn cung cấp bản vẽ được dựng trên đối tượng Canvas, thường là với sự giúp đỡ của card video. Và khi kết hợp những điều trên thì không có lý do gì phải sử dụng Flash nữa.

 

Game frameworks

 


Nhà phát triển game sử dụng thư viên để tập trung vào cốt chuyện, nhân vật cũng như đồ họa nhiều hơn

Đã có một thời gian, phát triển một tựa game là thuê nhiều nhà phát triển viết tất cả mọi thứ và bắt đầu từ C. Và hiện nay hầu hết các nhà phát triển game đã từ bỏ niềm tự hào của họ nhiều năm trước đồng thời chuyển sang sử dụng các thư viên như Unity, Corona, hoặc LibGDX để xây dựng hệ thống của họ. Về bản chất, các game thủ không quá quan tâm phía sau một nền tảng xây dựng lên trò chơi đó là gì, họ quan tâm đến nội dụng, nhân vật và tính nghệ thuật. Điều đó khiến các nhà sản xuất ưu tiên vào các nền tảng được dựng sẵn, không quá quan tâm đến chi tiết lập trình nữa.

 

Ứng dụng Single-page Web

Các ứng dụng web mới biểu thị cho giai đoạn đầu trước khi cơ sở dữ liệu chứa đầy nội dung. Khi các ứng dụng Web muốn thông tin, nó kéo cơ sở dữ liệu và đổ vào khuôn địa phương. Các lớp dữ liệu là hoàn toàn tách biệt với các lớp trình bày và định dạng. Ở đây, sự sự phát triển của điện toán di động là một yếu tố quan trọng khi có thể đáp ứng được việc biến trang web thành ứng dụng

 

 

Ứng dụng Mobile Web

 


Ứng dụng Mobile Web cho nhiều lựa chọn trên các nền tảng

Khi có ý tưởng nội dung và người phát triên có thể triển khai tạo ra các ứng dụng trên những nền tảng như iOS,Android, Windowphone… Điều này tương đối mệt mỏi với các nhà lập trình, đơn giản là vì mỗi nền tảng cần có một công cụ lập trình riêng và điều đó tương đối mất thời gian khi muốn chỉnh sửa hoặc nâng cấp. Ứng dụng Mobile Web có thể đơn giản hơn khi nhà lập trình chỉ cần tạo ra các HTML Apps có thể tương thích với nhiều nền tảng và nếu cần chỉnh sửa thay đổi thì rất nhanh.

 

Lập trình cho GPU

 

Trước đây, bộ vi xử lý CPU thông dịch các lệnh của chương trình và điều khiển hoạt động xử lí. Các trò chơi hiện tại có chất lượng đồ họa hình ảnh khá cao. hiệu ứng phong phú khiến máy tính cần có một card đồ họa để xử lý song song. Nhưng một card đồ họa tốt thì có mức giá khá cao từ 500-600 USD tương đương với một con chip mới nhất, điều này đội giá chiếc máy tính lên khá cao. Hiện nay các game thủ có thể giảm tải chí phí nhờ vào bộ vi xử lý đồ họa GPU được tích hợp sẵn trong CPU. GPU là một bộ vi xử lý chuyên dụng nhận nhiệm vụ tăng tốc, xử lý đồ họa cho bộ vi xử lý trung tâm. Những nhà nghiên cứu phát triển đã có thể chạy nhiều ứng dụng song song có tốc độ cao gấp hàng trăm lần so với thế hệ chip cũ.

 

GitHub- hệ thống quản lý mã nguồn

 


Mạng xã hội của mã nguồn

GitHub còn được gọi là social network dành cho dành cho các nhà phát triển. Hệ thống quản lý phân tán GIT giúp người dùng lưu trữ mã nguồn các dự án. GitHub cung cấp dịch vụ thương mại và cả tài khoản miễn phí cho các dự án nguồn mở. Đã có gần 500 ngàn nhà phát triển và đã tạo ra hơn 1 triệu 400 ngàn repositories, ngoài ra một số khách hàng lớn khác sử dụng dịch vụ của GitHub như Twitter, Facebook, Yahoo …

 

Giao diện Web

 

Một thời gian khá lâu, các nhà lập phát triển sử dụng trình biên dịch dòng lệnh và sau đó tích hợp với các khá để tạo ra môi trường phát triển tích hợp IDE. Hiện tại thì IDE đã không còn quá nổi bật khi mà các công cụ dựa trên nền tảng trình duyệt cho phép nhà phát triển chỉnh sửa mã nguồn. Cách thực hoạt động của WordPress là một điều thú vị, mã nguồn này đi kèm với một công cụ biên tập cho phép bạn chỉnh sửa code ngay tại chỗ. Hay Azure của Microsoft cũng cho phép nhà lập trình viết các đoạn mã JavaScript. Hiện tại thì những hệ thống này không cung cấp môi trường sủa lỗi tốt nhất và có thể nguy hiểm cho việc chỉnh sửa mã nguồn.

st

Read More »

Tạo mạng Ad-hoc

Posted November 12, 2014
Category Technology

Đầu tiên, mở Network and Sharing Center, kích vào liên kết Set up a new connection or network

Trình Set Up a Connection or Network sẽ được mở ra, bạn có thể thông qua đó để cấu hình tất cả các loại kết nối, từ kết nối mạng thông thường tới kết nối mạng riêng ảo của công ty hoặc kết nối ad-hoc (kết nối từ máy tính tới máy tính). Từ danh sách lựa chọn lại mạng, chọn Set up a wireless ad hoc (computer-to-computer) network, sau đó kích Next

Bạn thấy một cửa sổ mới mô tả mọi thứ có thể làm trên một mạng ad-hoc không dây. Đọc nội dung tại cửa sổ này hoặc bỏ qua nó và kích Next

Bước này sẽ là cửa sổ thiết lập mạng. Đầu tiên bạn cần nhập vào tên mạng và sau đó là loại bảo mật bạn muốn sử dụng. Để bảo mật hơn cho mạng của mình, bạn nên sử dụng Security type là WPA2-Personal, loại bảo mật này giúp mã hóa tốt hơn và khó phá hơn bảo mật WEP. Cuối cùng cần nhập vào mật khẩu đăng nhập mạng, sau khi đã đảm bảo ô Save this network đã được chọn bạn hãy kích tiếp vào Next

Sau khi đã có các lựa chọn, mạng mới sẽ được tạo, quá trình tạo sẽ mất khoảng một vài giây.

Tại cửa sổ cuối cùng, bạn sẽ nhận được thông báo rằng mạng mới đã được tạo và nó đã sẵn sàng để sử dụng. Đừng quên ghi nhớ mật khẩu của mạng và sau đó kích Close

Máy tính của bạn lúc này trở thành điểm phát của mạng không giây và lúc đó chỉ cần các máy tính khác kết nối vào.

Read More »

Khái quát về php framework

Posted September 21, 2014
Category Technology
Framework giống như 1 thư viện mã lệnh được xây dựng sẵn để chúng ta sử dụng. PHP framework là 1 giải pháp tuyệt vời cho các lập trình viên, giúp: giảm thiểu việc viết lại mã, tăng tốc quá trình phát triển ứng dụng, và chuẩn hóa mã lệnh khi xây dựng các ứng dụng web.

Framework là gì?
·        Một cấu trúc mới của ngôn ngữ giúp phát triển các phần mềm.
·        Một thư viện được xây dựng sẵn để người lập trình sử dụng.
·        Các chuẩn để xây dựng một framework:
o   MVC: có hỗ trợ Model-Control-View?
o   Multiple DB’s: làm việc được với nhiều loại database?
o   ORM: có hỗ trợ Object-Relation-Mapper?
o   Templates: có hỗ trợ cho template engine?
o   AJAX, validation, caching?
o   Auth Module: có module xác thực người dùng?
o   Module: tích hợp các module tiện ích như PDF,RSS…
o   EDPnew (Event Driven Programming): có hướng sự kiện
 
Tại sao chúng ta lại phải sử dụng framework?
·        Tăng tốc quá trình phát triển ứng dụng
·        Giảm thời gian và sự nỗ lực để có được một dự án.
·        Cung cấp sẵn các module cần thiết để xây dựng một project.
·        Dễ nâng cấp, sửa chữa do có sự phân hóa rõ ràng của mô hình MVC
 
Các thành phần cơ bản của một framework:
·        Code Library: thư viện source code giúp các lập trình viên tra cứu về lập trình. Hỗ trợ 30 ngôn ngữ lập trình: C#, Java, VB, PHP, Javascript…
·        Scripting Language: sử dụng ngôn ngữ kịch bản
·        API: sử dụng các hàm API xây dựng sẵn
 
Các PHP framework phổ biến hiện nay:
·        Zend Framework: có một cộng đồng phát triển rộng lớn, và nó tập trung phát triển ứng dụng web theo phong cách 2.0. Nó có các tính năng mạnh mẽ, phải có kiến thức sâu rộng về PHP để có thể sử dụng nó.
·        CakePHP: lựa chọn tuyệt vời cho các lập trình viên có kiến thức nâng cao về  . Một framework mạnh về khía cạnh rapid development, đẩy mạnh quá trình phát triển ứng dụng, có hệ thống hỗ trợ, tính đơn giản và môi trường mở cao
·        Symfony: nhằm mục đích giúp đỡ các lập trình viên nâng cao hơn các website doanh nghiệp, là một PHP framework mã nguồn mở, có đầy đủ tính năng cần thiết, nhưng lại hạn chế về mặt tốc độ so với các framework khác.
·        CodeIgniter: dễ hiểu, dễ sử dụng, hiệu suất cao, lý tưởng cho việc xây dựng các ứng dụng lưu trữ, chia sẻ dữ liệu. Phù hợp cho người mới làm quen với framework.
·        Seagull: một framework cực kỳ dễ sử dụng cho người mới cũng như chuyên gia về PHP, cung cấp mẫu ứng dụng tùy chỉnh để phù hợp với nhu cầu, cung cấp các tùy chọn máy chủ để xây dựng ứng dụng web nhanh và dễ dàng.
 

Read More »

PHP5 và những cải tiến vượt bậc

Posted September 21, 2014
Category Technology
PHP hiện là ngôn ngữ lập trình được sử dụng phổ biến nhất để xây dựng các trang web động với 16.251.453 tên miền, và 1.346.521 địa chỉ IP, tính đến ngày 18/7/2004. 

PHP 5.0 có những cải tiến vượt bậc so với các bản PHP 4.x trước đây. Cho đến nay, PHP 5 được coi là bản cập nhật đáng kể nhất trong vòng 2 năm trở lại đây trong khi vẫn giữ được thế mạnh vốn có của PHP kể từ thời PHP/FI 2.0 là tốc độ và tính hiệu quả. (Tham khảo lịch sử phát triển PHP trên Wikipedia tại địa chỉ http://vi.wikipedia.org/wiki/PHP và các thông tin khác về PHP trên website của cộng đồng PHP Việt Nam tại địa chỉ http://www.phpvietnam.net). 

Trở lại năm 1998, việc đưa Zend Engine 1 vào bộ lõi của PHP Engine đã đem đến sức mạnh vượt trội của PHP 4. Mặc dù PHP đã thu hút được số lượng người dùng đông đảo nhưng hạn chế chính của nó là không cung cấp thêm công cụ để xây dựng website. 

Sáu năm sau đó, cộng đồng đã thực sự nghiêm túc xem xét lại những tồn tại cố hữu của PHP khiến các nhà phát triển gặp nhiều khó khăn khi xử lý một số vấn đề. Trong số đó, các nhà phát triển nhấn mạnh đến việc hỗ trợ lập trình hướng đối tượng trong PHP 4 một cách nửa vời, thư viện mở rộng MySQL không hỗ trợ giao thức máy khách MySQL 4.1 mới, hỗ trợ XML chắp vá và hỗn độn. 

PHP 5 ra đời đã cải thiện 3 vấn đề quan trọng trên (được viết lại hoàn toàn) và kết quả thực sự ấn tượng. Tuy nhiên, đây vẫn chưa phải là tất cả những gì tốt đẹp nhất mà PHP 5 mang đến. Trong bài viết này, tôi sẽ đề cập đến 7 đặc điểm nổi bật của PHP 5. Những đặc điểm này cho phép phát triển mã lệnh ngắn hơn, đẹp hơn và cơ động hơn. 


Hỗ trợ mạnh lập trình hướng đối tượng 
Mặc dù những tính năng hỗ trợ đối tượng đã được tuyên bố từ PHP 4, tuy nhiên cộng đồng các nhà phát triển đã nhanh chóng nhận ra sự non nớt của chúng. Với PHP 5, các nhà phát triển từ nay có trong tay các phương tiện lập trình hướng đối tượng hoàn thiện (PHP 5 vẫn cho phép làm việc bình thường với kiểu lập trình cấu trúc). Có thể liệt kê một số đặc điểm: 
 
1.      Mô hình đối tượng hoàn toàn mới dựa trên nguyên mẫu là mô hình của Java 
2.      Hàm tạo dựng thống nhất _construct(): tạo điều kiện để di chuyển các lớp từ cây phân cấp lớp này sang cây phân cấp lớp khác. 
3.      Hàm hủy _destruct(): tạo điều kiện để ghi lại các thông tin phục vụ cho việc tìm lỗi, đóng kết nối dữ liệu và thực hiện các công việc giải phóng tài nguyên khác. 
4.      Các thuộc tính và các phương thức public, protected, và private: cho phép định nghĩa tính hữu hình của các thuộc tính lớp. Điều này rất quan trọng để hỗ trợ tính kế thừa và tính bao gói trong lập trình hướng đối tượng. 
5.      Giao diện (Interface): tính năng này lấy từ mô hình của Java nhằm hỗ trợ đa kế thừa.
6.      Các lớp trừu tượng.
7.      Cấu trúc gợi nhắc kiểu lớp (class hints). 
8.      Các thuộc tính và phương thức static. 
9.      Các thuộc tính và phương thức Final.
10. Một loạt các phương thức hỗ trợ mạnh khác như auto loading, reflection, xử lý lỗi ngoại lệ (exceptions), nhân bản đối tượng (object cloning), toán tử instanceof... 
 
Thêm vào đó, các đối tượng bây giờ đồng thời cả gán lẫn truyền đều theo tham chiếu (reference hoặc handle) thay vì theo giá trị, nhờ vậy lập trình viên không còn phải sử dụng rải rác các kí hiệu & xuyên suốt chương trình. Các tính năng ngôn ngữ này cũng đã mở đường cho lập trình viên PHP sử dụng tối ưu sức mạnh của các mô hình thiết kế (pattern). 


Thư viện mở rộng MySQL được viết lại hoàn toàn 
Hệ quản trị CSDL MySQL song hành với PHP như hình với bóng, mặc dù PHP có khả năng hỗ trợ nhiều hệ CSDL khác. Tuy nhiên, trong khi sự kết hợp này đem đến những thành công vang dội cho cả hai sản phẩm thì sự lạc hậu của mô đun mở rộng để PHP làm việc với MySQL lại là một trở ngại khi nó không cho phép tận dụng các tính năng cực kì hấp dẫn của MySQL 4.1 và các bản cao hơn. 
Nhóm phát triển PHP 5 đã viết một thư viện mở rộng hoàn toàn mới, rất mạnh để hỗ trợ MySQL 4.1 và 5.x, mang tên MySQL (MySQL Improved). Các tính năng bao gồm: 
 
1.      Câu lệnh biên dịch trước
2.      Tham số xuất và nhập có giới hạn
3.      Kết nối SSL
4.      Hàm đa truy vấn. 
 
MySQL còn tận dụng được hỗ trợ lập trình hướng đối tượng mới của PHP 5 để cung cấp một giao diện hướng đối tượng với MySQL. Trên hết, những bản mới nhất của MySQL bây giờ cho phép dùng chọn lọc con (subselects), chuyển tác (transactions) và bản sao dữ liệu (replication). 


Bộ công cụ XML có thể tương tác 
PHP 5 đã cải tiến hỗ trợ XML với các thư viện XML mở rộng như sau: 
 
1.      Làm việc được với nhau như một thể thống nhất. 
2.      Được chuẩn hóa trên một thư viện XML duy nhất: libXML2. 
3.      Tuân thủ hoàn toàn các đặc tả của W3. 
4.      Xử lý dữ liệu hiệu quả. 
5.      Cung cấp công cụ xử lý XML mạnh. 


Thêm vào đó, để tiếp tục duy trì tính dễ dàng của PHP trong việc xây dựng ứng dụng web, người ta đã đưa vào một thư viện XML mới cho phép đọc và thay đổi dễ dàng các tài liệu XML. Mô đun mở rộng SimpleXML cho phép tương tác với các thông tin có trong một văn bản XML như thể các thông tin này là mảng hay đối tượng, có thể dùng vòng lặp để duyệt qua chúng, biên tập chúng tại chỗ chỉ bằng cách gán các giá trị mới vào các biến. 

Nếu bạn đã biết trước định dạng của tài liệu, ví dụ như khi phân tách các file RSS, dữ liệu cấu hình thì dùng SimpleXMLrất tiện. 

Nếu thích dùng DOM, bạn sẽ rất hứng thú với mô đun mở rộng DOM của PHP 5, mô đun này đã được viết lại và cải tiến rất nhiều so với bản trong PHP 4. 


Hệ CSDL nhúng SQLITE 
Sự gắn kết hoàn hảo với MySQL là một lợi thế rất lớn cho PHP 4.x, tuy nhiên nhiều khi ứng dụng web lại không cần nhiều đến khả năng của hệ quản trị CSDL mạnh. Do đó, việc phân phối kèm hệ CSDL nhúng SQLite cho phép nhà phát triển có thêm công cụ sẵn sàng để lưu trữ và truy vấn dữ liệu bằng phương thức SQL mà không cần cài đặt hệ CSDL riêng biệt nào cả. SQLite xử lý chính xác các truy cập khóa chặn (locking) và truy cập đồng thời (concurrent), hai vấn đề nổi cộm khi xử lý các file dữ liệu phẳng (flat file) tự tạo. 

SQLite đủ mạnh để xử lý phần lớn các nhu cầu lưu trữ và thao tác dữ liệu thông thường. Nó hỗ trợ: 


1.      Chuyển tác (transactions)
2.      Truy vấn con (Subqueries) 
3.      Kiểm soát toàn vẹn tham chiếu (triggers) 
4.      Nhiều tính năng cao cấp liên quan đến CSDL như hỗ trợ View... 


SQLite tương thích với phần lớn các tính năng chuẩn SQL92, tuy nhiên bản 3.0 mới nhất chưa hỗ trợ chuyển tác lồng nhau, ràng buộc khóa ngoại, cũng như hỗ trợ kiểm soát toàn vẹn tham chiếu một cách đầy đủ. Bạn thậm chí có thể viết các hàm cho người sử dụng tự định nghĩa bằng PHP và gọi chúng bên trong SQLite. Đây là tính năng nổi bật nhất từ trước đến nay có được trong một mô đun mở rộng liên quan đến CSDL trong PHP. 


Cơ chế xử lý lỗi sáng sủa hơn với Exceptions 
PHP 5 cung cấp một mô hình kiểm tra lỗi hoàn toàn khác so với PHP 4. Nó có tên là xử lý lỗi ngoại lệ. Với lỗi ngoại lệ, nhà phát triển được giải phóng khỏi việc phải kiểm tra giá trị trả lại của tất cả các hàm. Thay vào đó, bạn có thể tách biệt luận lý lập trình xử lý lỗi và đặt chúng nằm bên cạnh các khối mã. 

Lỗi ngoại lệ thường được thấy ở các ngôn ngữ lập trình hướng đối tượng như Java và C++. Hiện tại, chỉ có một số ít mô đun mở rộng của PHP sử dụng lỗi ngoại lệ, nhưng dần dần điều này sẽ được thực hiện đồng bộ. Tuy nhiên, bạn có thể sử dụng lỗi ngoại lệ cho bất cứ đoạn mã PHP nào của mình. 


Bản thực thi SOAP cao cấp 
SOAP là thành phần chủ yếu của lĩnh vực dịch vụ web đang phát triển rất nhanh. Hỗ trợ SOAP trong PHP 4 chỉ ở cấp trung bình, không chỉ là việc có rất ít các gói SOAP mà còn ở chỗ các gói quan trọng nhất viết bằng PHP thay vì C nên chậm. 

Với PHP 5, cuối cùng chúng ta đã có một mô đun mở rộng cho SOAP viết bằng C. Hiện tại, mô đun này thực thi được phần lớn, mặc dù không phải là tất cả các đặc điểm nêu trong SOAP 1.2. Trong tương lai, mô đun này sẽ được cải thiện nhiều hơn. Hiện tại, so với .NET hay Java thì hỗ trợ SOAP trong PHP vẫn bị xếp ở chiếu dưới. 


Bộ lặp (Iterator)
Các bộ lặp là tính năng hoàn toàn mới trong PHP 5.0. Chúng cho phép bạn sử dụng vòng lặp foreach để lặp vòng qua các kiểu dữ liệu khác nhau: danh sách thư mục, tập kết quả CSDL và cả tài liệu XML. SPL - Thư viện PHP chuẩn - là tập các bộ lặp cung cấp chức năng này cùng với các chức năng lọc, giới hạn, ghi bộ nhớ đệm và thay đổi kết quả bộ lặp. 

Bộ lặp là cách làm thủ công rất hay để loại đi tất cả các đoạn mã gây nhiễu trong mã nguồn của bạn. 
Ví dụ, bộ lặp DirectoryIterator biến việc lặp qua các thư mục từ cách viết: 

 
<?php 
$dir = opendir($path); 
while (false !== ($file = readdir($dir))) { 
  print '$file'; 
} 
closedir($dir); 
?> 
thành cách viết: 

<?php 
foreach (new DirectoryIterator($path) as $file) { 
  print $file; 
} 
?>
 
Như vậy là không có con trỏ tham chiếu thư mục nào nằm lộn xộn vào đó, cũng như không có điều kiện so sánh thiếu trong sáng nào cần phải kiểm tra bên trong vòng lặp. 

Ngoài các điểm nổi bật trên, PHP 5.0 còn cung cấp: cải tiến dòng (streams), bộ bao (wrapper) và bộ lọc (filter). 
Dòng là khái niệm được đưa ra trong PHP 4.3, nhưng trước PHP 5.0 nó là phần ít được dùng đến. Những cải tiến được đưa vào từ bản Beta 3 của PHP 5.0 cho phép đặt giao diện file vào việc đọc và viết dữ liệu bằng cách sử dụng các đối tượng phụ thuộc theo giao thức, mà thường được nhắc đến với cái tên bộ bao. Dòng cũng cho phép thay đổi việc truyền dòng dữ liệu qua chúng bằng cách đính kèm vào đó các bộ lọc. 


Nội soi mã bằng cách sử dụng các lớp Reflection. 
Tập hợp các lớp này cho phép bạn kiểm tra các lớp, các phương thức, các tham số và những thứ khác để thăm dò các thuộc tính của đối tượng. Với chúng, bạn có thể dễ dàng tạo ra các bộ thăm dò lớp, các bộ dò lỗi PHP và các công cụ khác dựa vào việc thu thập các chi tiết về đối tượng và hàm. 


Sinh mã HTML chuẩn nhờ Tidy. 
Mô đun mở rộng Tidy giúp bạn dễ dàng nắm chắc việc sinh mã HTML và XHTML hợp lệ. Bộ phân tách thông minh của nó thậm chí còn biến các trang viết mã tùy tiện nhất trở thành các trang tuân thủ chặt chẽ các đặc tả mới nhất của W3C. 


Xử lý dòng lệnh ưu việt hơn 
Phiên bản dòng lệnh PHP5 giờ đây cho phép xử lý từng dòng riêng lẻ, giống như Perl và awk. Bạn có thể xác định mã cần chạy ở đầu, ở giữa và ở cuối của từng dòng trong một file. 

Read More »

HTML5 – Cảm ứng trên các thiết bị di động

Posted September 21, 2014
Category Technology
Hiện nay các nhà phát triển đang phát triển để HTML5 ngày càng hoàn thiện hơn và trong thời đại hiện nay các thiết bị cảm ứng phát triển mạnh và nhất là các smartphone cảm ứng như Iphone, Sony, HTC, Samsung, Motorola,...

Bên cạnh đó cũng có 1 số thư viện hỗ trợ chúng ta trong việc diễn hoạt và trình diễn trên mobile thông qua các sự kiện “event touch”, chúng ta có thể dựa vào bộ thư viện mà chúng ta yêu thích để phát triển và tùy chỉnh. 

Trong HTML5 hiện tại có hỗ trợ một số event touch như sau:

1.    ontouchcancel
2.    ontouchend
3.    ontouchenter
4.    ontouchleave
5.    ontouchmove
6.    ontouchstart

Một số thư viện hỗ trợ:

1.    Sencha Touch
2.    jQuery Mobile
3.    Kinetic
4.    jQTouch
5.    Và một số thư viện khác như DHTMLX Touch, MagicTouch, Titanium,  …

Tùy trưởng hợp và yêu cầu mà chúng ta nên cân nhắc sử dụng những thư viện nói trên:

1.    Do yêu cầu của khách hàng
2.    Do thư viện này không hỗ trợ mà các thư viện khác hỗ trợ (đòi hỏi phải hiểu nhiều thư viện)
3.    Hoặc chúng ta có thể viết thêm để sử dụng những gì mà thư viện không hỗ trợ...

So sánh một số ưu điểm và nhược điểm của những thư viện nói trên
•    jQTouch : là dễ dàng để sử dụng . Thích hợp trong việc xây dựng các ứng dụng cho iPhone với HTML, CSS, và JavaScript . jQTouch có một cách tiếp cận tiến bộ cung cấp một thiết lập cơ bản của các vật dụng và hình ảnh động. Tuy nhiên, hiệu suất của thư viện hoạt động không tốt.
•    jQuery Mobile : ra đời vào khoảng tháng 8 năm 2010 , nhưng vẫn được nhiều người biết đến do tính phổ biến, dễ hiểu và được nhiều lập trình viên sử dụng và viết các plugin bổ sung miễn phí. jQuery mobile mạnh hơn jQTouch về mặt hiệu suất, các hiệu ứng chuyển động tốt hơn. Nhưng jQuery mobile chưa được hoàn thiện ở giai đoạn hiện tại vì nó ra đời sau và còn khá non trẻ. Tuy nhiên, trong tương lai gần jQuery mobile có thể là 1 thư viện hỗ trợ mạnh mẽ công nghệ HTML5 cho các thiết bị di động cảm ứng.
•    Sencha Touch : là một thư viện có hiệu suất tốt hơn, bắt buộc sử dụng dữ liệu kiểu Json và tập trung vào việc xử lý các đối tượng DOM thay vì HTML như jQuery mobile và jQTouch.  Theo cộng đồng và tìm hiểu trên mạng thì đây là 1 thư viện tốt nhất hiện nay nhưng lại có tính phí. Việc sử dụng nó với phí l 299$/1 năm là một mặt hạn chế so với xu thế phần mềm mã nguồn mở hiện nay.
•    Kinetic : là 1 thư viện không tính phí, hoạt động ổn định và hỗ trợ người dùng viết ứng dụng HTML5 trên nền 2D và 3D với 2 phiên bản khác nhau và liên tục được cập nhật. Hỗ trợ mạnh mẽ các diễn hoạt trên nền HTML5, các phương thức quản lý và kiểm soát một đối tượng bất kỳ khi chúng được thêm vào khung vẽ. Tuy nhiên , hiệu suất hoạt động chưa tốt khi thực hiện trên 1 số điện thoại cấu hình thấp.
Dựa vào bảng so sánh trên, tùy vào trường hợp và ưu điểm của từng thư viện mà chúng ta có thể sử dụng chúng để hỗ trợ trong công việc.

Read More »

Bộ môn
chuyên ngành

200x200
Mạng
máy tính
200x200
công nghệ
phần mềm
200x200
Đồ họa
200x200
Tin học
cơ sở