Phát triển ứng dụng dựa trên tài nguyên mã mở

Mã nguồn mở cung cấp mọi thứ cần thiết cho các lập trình viên để tạo ra những ứng dụng lớn

Những nhà phát triển ứng dụng Web đang tận hưởng thời kỳ hưng thịnh. Sau thời kỳ viết mã ứng dụng tập trung trên server, các nhà phát triển bây giờ viết mã ứng dụng trên cả hai phía, server và client. Thế hệ các công cụ và khung ứng dụng mới nhất tự động hóa và đơn giản hóa sự vất vả cực nhọc của việc xây dựng, triển khai và duy trì một ứng dụng Web. Có rất nhiều các công cụ có sẵn và chúng đa phần là mã nguồn mở. Bài viết này cung cấp cái nhìn tổng quát các ứng dụng mã mở miễn phí cho các nhà phát triển để phát triển các ứng dụng Web.

Martin Streicher , Giám đốc công nghệ, 自由职业者

Photo of Martin StreicherMartin Streicher là trưởng phòng công nghệ của McClatchy Interactive và là nguyên chủ biên của tạp chí Linux Magazine. Martin tốt nghiệp Thạc sỹ khoa học chuyên ngành Khoa học máy tính tại trường đại học Purdue và đã lập trình trên hệ thống Unix từ năm 1986.



20 05 2009

Trước khi bắt đầu

Tìm hiểu nội dung bài viết này và cách học hiểu quả.

Về bài viết này

Bài viết này mô tả sự phong phú của các công cụ lập trình có sẵn trên Linux®. Hơn nữa, bài viết này trình bày cách phát triển ứng dụng nhanh và dễ và trình diễn những sáng kiến mới nhất trong các công cụ mã mở.

Mục đích

Học cách cài đặt máy chủ, cơ sở dữ liệu, và một vài ngôn ngữ lập trình trên Linux. Bạn cũng học cách xây dựng ứng dụng web, đầu tiên là với PHP, sau đó là Ruby trên Rails.

Yêu cầu

Bài viết này được viết cho các nhà phát triển ứng dụng trên nền Linux và các nhà phát triển muốn khám phá các công cụ phát triển mã mở miễn phí có sẵn. Để nắm bắt được bài viết này, bạn cần biết cơ bản về các câu lệnh comnand-line Linux và một ít kinh nghiệm lập trình. Nếu bạn có kinh nghiệm cài đặt và cấu hình ứng dụng trên Linux thì tốt, nhưng không có cũng không sao.

Yêu cầu hệ thống

Để thực thi các ví dụ trong bài viết này, bạn cần một máy tính với hệ điều hành Linux có ít nhất 300MB trống trên ổ cứng. Bạn cũng cần phải có quyền root để cài đặt các ứng dụng. Các ứng dụng trong bài viết này được tạo trên hệ điều hành Ubuntu Desktop Linux 8.04.1 chạy trên máy ảo trên máy Mac OS X Leopard. Tuy nhiên, bạn không nhất thiết phải dùng Ubuntu vì Aptitude (sử dụng trong bài viết này) có thể chạy trên bất của hệ điều hành Debian Linux nào.


Thời kỳ thịnh vượng

Hiện nay, các nhà thiết kế và tạo mẫu gặp rất nhiều thuận lợi cho việc tạo nội dung và giao diện cho World Wide Web với công nghệ truyền thông đa phương tiện và các tiêu chuẩn như là Cascading Style Sheets (CSS). Điều đó làm cho các trang web trở lên quyến rũ hơn.

Những nhà phát triển ứng dụng cũng có những thuận lợi nhất định. Sau thời kỳ viết mã ứng dụng tập trung trên server, các nhà phát triển bây giờ viết mã ứng dụng trên cả hai phía, server và client. Công nghệ JavaScript không đồng bộ + XML, được biết đến như là Ajax, tạo ra sự thay đổi này. Hãy nhìn Basecamp, Google Mail, và Apple's MobileMe (xem phần Tài nguyên). Những website này và cả những website khác — hoạt động chủ yếu trên trình duyệt của desktop — làm lu mờ các gói ứng dụng có sẵn trên desktop.

Sự hưng thịnh này có được là do tính làm chủ, sáng tạo và tính khéo léo. Thế hệ các công cụ và khung làm việc ứng dụng mới nhất tự động hóa và đơn giản hóa sự vất vả cực nhọc của việc xây dựng, phát triển và duy trì một Web site. Hơn nữa, có vô vàn các công cụ, ngôn ngữ lập trình và khung làm việc — hỗ trợ sẵn Ajax — như thế sẵn sàng cho các nhà phát triển ứng dụng lựa chọn để tạo ra các ứng dụng Web.

Và một điều quan trọng nữa là các công cụ phát triển đó đều có mã nguồn mở, miễn phí, sẵn sàng trên internet, và khả chuyển giữa các nền hệ điều hành như Linux, Mac OS X, và Microsoft ® Windows®. Linux có một thuận lợi đặc thù so với các hệ điều hành khác: Nó cũng miễn phí.

Trong bài viết này, bạn sẽ tìm hiểu về mã nguồn mở và Linux và có cái nhìn tổng quan về phần mềm miễn phí sẵn sàng cho các nhà phát triển để tạo và phát triển các ứng dụng web. Các ứng dụng miễn phí đưa ra các tính năng hấp dẫn, cạnh tranh. Bạn sẽ xem các ứng dụng server, cơ sở dữ liệu, ngôn ngữ lập trình, trình soạn thảo và môi trường phát triển ứng dụng tích hợp (IDE), và chế độ viết mã mới. Bạn sẽ tạo ra một môi trường máy chủ đơn giản và một số ứng dụng mẫu.

Nếu bạn đã quen với môi trường dòng lệnh shell của Linux, bạn sẽ thấy bài viết này rất dễ để học. Nếu bạn chưa từng dùng Linux, thì hãy thực hiện các bước một cách cẩn thận và chính xác.

Hầu hết các ứng dụng giới thiệu ở đây là khả chuyển và bạn có thể tìm thấy các bản cài đặt của chúng trên các hệ điều hành tương ứng. Thực tế, mọi bản Mac OS X của Apple đều bao gồm những ứng dụng giới thiệu ở đây, cũng như hàm trăm gói ứng dụng mã mở khác.

Bài viết này sử dụng Ubuntu Linux (xem Tài nguyên). Ubuntu là hệ điều hành linux miễn phí, và một người mới bắt đầu có thể nhanh chóng tải về và cài đặt nó. Nó cũng rất dễ dùng và quản trị. Giao diện thân thiện, và cài đặt ứng dụng và các bản cập nhật rất dễ dàng với một công cụ tuyệt vời tên là Aptitude (hay "apt").

Bài viết này sử dụng bản cài đặt Ubuntu Desktop 8.04.1 (xem Hình 1). Tốt nhất là bạn có một máy tính cài đặt hệ điều hành Ubuntu và có quyền truy cập tài khoản root để cài đặt các ứng dụng khác.

Hình 1. Màn hình Desktop của Ubuntu
Màn hình Desktop của Ubuntu

Tham gia cộng đồng LAMP

Để có một ứng dụng web giống như một cửa hàng trực tuyến bạn cần phải có một máy tính, một đường truyền internet, một hệ điều hành, một máy chủ web, một cơ sở dữ liệu, và bản thân ứng dụng web. Trên các máy dùng hệ điều hành Linux, một bộ các phần mềm như thế được gọi là LAMP, viết tắt của "Linux, Apache, MySQL, và Perl, PHP, Python, hoặc ngôn ngữ lập trình khác (programming language)."

Linux

Linux là hệ điều hành cung cấp các tính năng cần thiết để truy cập các tài nguyên của máy tính bao gồm kết nối mạng, bộ xử lý, ổ cứng, máy in, .... Linux là hệ điều hành đa nhiệm, có khả năng thực thi nhiều ứng dụng cùng lúc. Linux được cấu thành bởi một lõi trung tâm — "bộ não" của hệ điều hành — và hàng nghìn các tiện ích và chương trình khác.

Apache

Apache (hay còn gọi là HTTP server Apache) là một máy chủ web mã nguồn mở. Nó hoạt động như một ứng dụng thường trú trên Linux, đợi các yêu cầu từ các trình duyệt web. Khi có yêu cầu, Apache chấp nhận kết nối, thông dịch và thực thi các yêu cầu (như là "hãy lấy tệp có tên là my_vacation.html"), và trả lại kết quả. Apache cũng hoạt động đa nhiệm để xử lý nhiều yêu cầu cùng lúc.

MySQL

MySQL là một trong số rất nhiều cơ sở dữ liệu mã mở. MySQL lưu trữ dữ liệu mà ứng dụng yêu cầu và thu thập. Ví dụ, một cơ sở dữ liệu có thể lưu trữ một cửa hiệu tạp hóa và tất cả các đơn hàng đặt qua website. MySQL cũng là ứng dụng thường trú (server) và đợi các yêu cầu. Và nó cũng hoạt động đa nhiệm giống như các ứng dụng server khác.

Perl, PHP, và Python

Lúc đầu, chữ P trong LAMP là viết tắt của Perl, một ngôn ngữ lập trình mã mở có từ lâu và được cho rằng là ngôn ngữ lập trình ứng dụng web động đầu tiên trên Linux. Vào đầu thập kỷ này, PHP và Python, — có cùng chữ đầu tiên là "P"— nổi lên, và thành lập lên tên viết tắt nổi tiếng LAMP.

Các máy chủ, cơ sở dữ liệu, ngôn ngữ lập trình khác

Apache không phải là máy chủ web duy nhất trên nền Linux. lighttpd (phát âm là "lighty") cũng là một máy chủ trên linux và nó nhỏ gọn, nhanh và dễ cấu hình hơn Apache. Tương tự, MySQL không phải là cơ sở dữ liệu duy nhất trên Linux. PostgreSQL là một cơ sở dữ liệu mã mở phổ biến với sự hỗ trợ mở rộng cho các giao dịch. Và SQLite được biết đến như là một cơ sở dữ liệu tí hon. Và tất nhiên, rất nhiều ngôn ngữ lập trình web, cả biên dịch và thông dịch, cũng sẵn sàng trên nền Linux, bao gồm Java™, Mono, một dạng cài đặt mã mở của Microsoft's .NET framework, và Ruby.

Ngày nay, LAMP được nhắc đến như một bộ công cụ mã mở để xây dựng ứng dụng web. Và nếu bạn nghe thấy ai đó nói rằng "We're a LAMP shop" thì điều đó nghĩa là công ty của họ sử dụng công cụ mã mở để phát triển ứng dụng web.


Cài đặt máy chủ, cơ sở dữ liệu, và ngôn ngữ lập trình

Ubuntu chính là "L" của LAMP, do đó bạn phải cài thêm "AMP". Bạn sẽ cài lighttpd làm máy chủ, MySQL làm cơ sở dữ liệu, và PHP làm ngôn ngữ lập trình. PHP rất dễ học và có một cộng đồng lớn những nhà phát triển ứng dụng và rất nhiều đoạn mã sẵn sàng để sử dụng. Phiên bản cuối cùng của lighttpd là 1.4.19, của MySQL là 5.1, và của PHP là 5.26.

Để bắt đầu, bạn mở cửa sổ terminal trong Ubuntu (click Application > Accessories > Terminal), chuyển đến shell prompt ($), và truy xuất quyền root, hay superuser, bằng cách gõ dòng lệnh sudo su -. Khi (và bất cứ khi nào) bạn thấy ký hiệu thăng (#), bạn có quyền root. Bạn có thể gõ whoami để biết chắc:

$ sudo su -
# whoami
root

Bây giờ bạn có thể cài lighttpd, MySQL 5, và PHP 5. Việc cài đặt chỉ cần vài dòng lệnh Aptitude.

Cài đặt máy chủ lighttpd

Đầu tiên, cài lighttpd:

# apt-get install lighttpd

apt-get install tải và cài đặt gói có tên theo sau nó. Mỗi khi bạn cài đặt một gói, Aptitude sẽ phân tích các gói phụ thuộc, cài đặt gói cần thiết nếu có, sau đó mới cài gói bạn yêu cầu. Nếu Aptitude cần phải cài các gói phụ thuộc, nó sẽ yêu cầu bạn xác nhận. Đọc kỹ danh sách các gói nó hiển thị và gõ Y nếu bạn muốn tiếp tục. Nếu bất cứ gói nào cung cấp một máy chủ — giống như lighttpd và MySQL— Aptitude sẽ tự động khởi động máy chủ ngay sau khi hoàn tất quá trình cài đặt. Thật là đơn giản.

Sau khi bạn cài lighttpd xong, mở trình duyệt Firefox (biểu tượng của nó nằm trên thanh menu ở phía trên đỉnh màn hình) và gõ http://127.0.0.1 vào thanh địa chỉ. Bạn sẽ thấy một trang web như trong Hình 2. Điều này có nghĩa là lighttpd đã làm việc, nhưng cần được cấu hình.

Hình 2. lighttpd đã hoạt động
lighttpd đã hoạt động

Cài đặt cơ sở dữ liệu MySQL

Tiếp theo, cài đặt cơ sở dữ liệu MySQL 5. Bạn gõ dòng lệnh sau:

# apt-get install mysql-server-5.0 

Trong quá trình cài đặt, để ý dấu nhắc thêm mật khẩu của superuser của MySQL 5 (không phải của Ubuntu). Xem Hình 3. Hãy chọn một mật khẩu khó đoán — mật khẩu khó đoán thường bao gồm ký tự HOA, thường, chữ số, và ký tự đặc biệt (nhưng cũng khó nhớ) — và gõ Enter. Nhập mật khẩu lần nữa để xác nhận và gõ Enter.

Hình 3. Nhập và xác nhận mật khẩu cho superuser của MySQL
Nhập và xác nhận mật khẩu cho superuser của MySQL

Khi cài xong, khởi động trình tiện ích của MySQL và xem danh sách các cơ sở dữ liệu ban đầu như trong Ví dụ 1.

Ví dụ 1. Khởi động trình tiện ích của MySQL và xem danh sách cơ sở dữ liệu ban đầu
$ mysql -uroot -p
Enter your password: s0m3p@ssWoRD
mysql> show databases \G
Database: information_schema
Database: mysql
2 rows in set (0.01 sec)
mysql> quit

Khi được yêu cầu nhập mật khẩu, hãy nhập mật khẩu bạn chọn lúc cài đặt. (mật khẩu s0m3p@ssWoRD, chỉ là một ví dụ.) Tại dấu nhắc của MySQL, gõ show databases \G. Bạn sẽ thấy hai cơ sở dữ liệu, information_schema và mysql; cả hai đều được là cơ sở dữ liệu được dùng bởi MySQL, và bạn không nên thay đổi chúng. Gõ quit để thoát khỏi trình tiện ích.

Cài đặt ngôn ngữ lập trình PHP

Cuối cùng, bạn cài PHP 5. lighttpd sử dụng Fast Common Gateway Interface (FastCGI) để chạy ứng dụng web, do đó bạn cần cài đặt đúng phiên bản PHP 5, nó là php5-cgi. Để kết nối PHP với MySQL, bạn cũng phải cài mô-đun php5-mysql:

# apt-get install php5-cgi php5-mysql

Cấu hình máy chủ và ngôn ngữ lập trình

Bạn cần thực hiện thêm một bước nữa trước khi bắt tay vào xây dựng ứng dụng. Bạn cần phải cấu hình lighttpd và PHP để chúng hoạt động được. Mỗi một gói ứng dụng đều có một tệp cấu hình của riêng nó (đây là truyền thống trên linux).

Quay trở lại của sổ terminal và gõ Control-D để thoát khỏi chế độ superuser. Tiếp theo, gõ :

$ sudo gedit /etc/php5/cgi/php.ini

Lệnh này sẽ gọi gedit— một trình soạn thảo văn bản đơn giản, giống mà không giống Notepad của Windows và Text Editor của Mac OS — dưới quyền root và chỉnh sửa tệp /etc/php5/cgi/php.ini. Đây là tệp hệ thống nên cần quyền superuser để chỉnh sửa.

Trên các hệ thống Linux, thư mục /etc thường chứa các tệp cấu hình cho tất cả các gói ựng dụng trên hệ thống. Và thường thì các tệp cấu hình của ứng dụng nào nằm trong thư mục của ứng dụng đó, trong ví dụ này là /etc/php5. Tệp tùy biến hoạt động cho CGI của PHP là cgi/php.ini. Thông thường, tệp ".ini" là tệp tùy biến, còn ".conf" là tệp cấu hình.

Sử dụng gedit, tìm dòng:

; cgi.fix_pathinfo = 0

Đổi nó thành:

 cgi.fix_pathinfo = 1 

Chọn File > Save hoặc gõ Control-S để lưu thai đổi. Press Control-Q để đóng gedit. Tiếp theo, gõ lệnh:

$ sudo gedit /etc/lighttpd/lighttpd.conf

Tìm dòng có bắt đầu là server.modules= và thêm mod_fastcgi vào danh sách được phân cách bằng dấu phẩy nằm trong ngoặc của nó. mod_fastcgi mở rộng hỗ trợ FastCGI của PHP trong lighttpd. lighttpd nhận các yêu cầu từ trình duyệt, dịch các yêu cầu đó sang yêu cầu FastCGI và chuyển cho PHP để xử lý. Kết quả trả về đi ngược các tiến trình đó.

Danh sách các mô-đun sẽ giống như Ví dụ 2, có lẽ nhiều hơn.

Ví dụ 2. Danh sách các mô-đun server.modules = list
server.modules = (
  "mod_fastcgi",
  "mod_access",
  "mod_alias",
  "mod_accesslog",
  "mod_compress"
)

Bây giờ cuộn xuống cuối tệp và thêm nguyên văn đoạn trích trong Ví dụ 3 .

Ví dụ 3. Đoạn mã cấu hình phiên bản FastCGI của PHP cho lighttpd
fastcgi.server = ( 
  ".php" => (( 
	"bin-path" => "/usr/bin/php-cgi",
	"socket" => "/tmp/php.socket"
)))

Đoạn mã nhỏ này sẽ cho lighttpd biết chỗ để tìm phiên bản FastCGI của PHP và socket cần để gửi yêu cầu tới PHP. Lưu các thay đổi lại và đóng trình soạn thảo lại.

Bước cuối cùng — khởi động lại lighttpd với dòng lệnh sudo /etc/init.d/lighttpd restart . (Hầu hết các máy chủ đều cần phải khởi động lại sau khi thay đổi cấu hình.)

$ sudo /etc/init.d/lighttpd restart
Stopping web server lighttpd [OK]
Starting web server lighttpd [OK]

OK! Bây giờ mọi thứ đã sẵn sàng để bạn viết ứng dụng PHP đầu tiên (và thứ hai).


Ứng dụng PHP đầu tiên (và thứ hai)

Như đã giới thiệu ở trên, PHP là ngôn ngữ phát triển ứng dụng web phổ biến bởi vì tính dễ học và dễ trộn lẫn với mã HTML. Mã HTML nằm trong các thẻ như <head></div>, mã PHP được nhứng vào trong mã HTML bằng thẻ <? ?> .

Ứng dụng PHP đầu tiên

Một ví dụ đơn giản của ứng dụng PHP có lẽ giống như trong Ví dụ 4.

Ví dụ 4. Một ứng dụng PHP đơn giản
<html> 
  <head> <title> Hello, World!</title> </head> 
  <body> 
	<h1> 
	  <? echo 'Hello, World! ?> 
	</h1> 
  </body> 
</html>

Mở gedit với dòng lệnh sudo gedit /var/www/hello.php, nhập đoạn mã vào, và lưu lại. Chuyển sang Firefox và gõ http://127.0.0.1/hello.php vào thanh địa chỉ. Bạn sẽ thấy một trang web như trong Hình 4. Nếu đúng như thế thì lighttpd và PHP hoạt động tốt.

Hình 4. Hello, World! của PHP chạy trên lighttpd
Hello, World! của PHP chạy trên lighttpd

Ứng dụng thứ hai

Bây giờ chúng ta tạo ra ứng dụng phức tạp hơn một chút. Sử dụng cơ sở dữ liệu MySQL để lưu trữ một số thông tin và ứng dụng toàn bộ LAMP. Trong ví dụ này, bạn viết mã để hiển thị các thành viên của công ty Superheroes, một công ty gia công phần mềm. Để tạo ứng dụng, bạn cần thực hiện những bước sau:

  1. Thiết kế và tạo cơ sở dữ liệu để lưu trữ thông tin thành viên.
  2. Nhập các thông tin vào cơ sở dữ liệu.
  3. Viết mã PHP để kết nối cơ sở dữ liệu sau đó hiển thị lên một trang web.

Tạo và nhập dữ liệu cho cơ sở dữ liệu

Đoạn mã trong Ví dụ 5 là một kịch bản lệnh (script) SQL thực hiện các công việc sau:

  1. Tạo ra một cơ sở dữ liệu tên là superheroes.
  2. Tạo ra một bảng table tên là members trong cơ sở dữ liệu superheroes .
  3. Nhập thông tin của bốn thành viên vào bảng table.
  4. Tạo một user trong MySQL tên là hero với quyền truy cập và thay đổi thông tin cơ sở dữ liệu.
Ví dụ 5. Mã SQL tạo và nhập liệu cho cơ sở dữ liệu superheroes
DROP DATABASE IF EXISTS `superheroes`;

CREATE DATABASE `superheroes`;

USE `superheroes`;

DROP TABLE IF EXISTS `members`;

CREATE TABLE `members` (
  `id` int(11) NOT NULL,
  `name` varchar(128) NOT NULL,
  `city` varchar(128) NOT NULL,
  `superpower` varchar(128) NOT NULL,
  `initiated` date NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `id` (`id`),
  KEY `name` (`name`)
) ENGINE=MyISAM;

INSERT INTO `members` 
  (`id`, `name`, `city`, `superpower`, `initiated`) 
VALUES 
  (1,'Batman','Gotham City','Detection','1939-05-01'),
  (2,'Spider-man','New York City','Webs','1962-08-01'),
  (3,'Daredevil','Hell\'s Kitchen (NYC)','Radar','1964-04-01'),
  (4,'Superman','Metropolis','Strength','1938-06-01');

GRANT ALL ON `superheroes`.* 
  TO 'hero'@'localhost' IDENTIFIED BY 'shizzle';

Nói chung, mỗi ứng dụng web nên có một cơ sở dữ liệu MySQL riêng và một người dùng user duy nhất để ngăn chặn sự xâm nhập trái phép. Hơn nữa, tuyệt đối không dùng quyền root cho bất cứ ứng dụng nào. Một sự tắc trách với quyền root có thể phá hủy toàn bộ dữ liệu của bạn. Và trong thực tế, cách tốt nhất là tạo ra một superuser mới rồi xóa user mặc định root để tránh sự nhòm ngó.

Sử dụng gedit để lưu đoạn mã trên vào tệp superheroes.sql và dùng công cụ dòng lệnh mysql để thực thi đoạn mã trên. Bởi vì user hero chưa tồn tại nên bạn phải thực hiện mysql với quyền user root:

$ mysql -uroot -p < superheroes.sql
Enter password:

Gõ mật khẩu root của bạn tại dấu nhắc và gõ Enter. Để kiểm tra, hãy xem cơ sở dữ liệu, với user hero. Bạn sẽ thấy các thông tin như trong Ví dụ 6.

Ví dụ 6. Cơ sở dữ liệu Superheroes
$ mysql -uhero -pshizzle superheroes
mysql> select * from members;
-----+------------+--------------------------------+------------+-------------
| id | name       | city                           | superpower | initiated  |
-----+------------+--------------------------------+------------+-------------
|  1 | Batman     | Gotham City                    | Detection  | 1939-05-01 | 
|  2 | Spider-man | New York City                  | Webs       | 1962-08-01 | 
|  3 | Daredevil  | Hell's Kitchen (New York City) | Radar      | 1964-04-01 | 
|  4 | Superman   | Metropolis                     | Strength   | 1938-06-01 | 
----+------------+--------------------------------+------------+--------------
4 rows in set (0.00 sec)

Chúc mừng, vậy là cơ sở dữ liệu đã sẵn sàng.

Tạo trang web

Ví dụ 7 là mã PHP để tạo ra trang web.

Ví dụ 7. Mã PHP để tạo ra trang web Superheroes, Inc.
<html>
<head>
<title>
  Superheroes, Inc. Members
</title>
</head>
<body>
<? 
  if ( ! ( $connection = mysql_connect("localhost", "hero", "shizzle" ) ) ) {
	die( 'An error occurred. Check your connections.' );
  }

  if ( !mysql_select_db( "superheroes", $connection ) ) {
	die( 'An error occurred. Check your database and permissions.' );
  }

  $query = "select * from members order by name";
  if ( ! ( $result = mysql_query( $query, $connection ) ) ) {
	die( 'An error occurred. ' . mysql_error() );
  }
?>

  <table>
	<tr>
	  <th>Name</th>
	  <th>Superpower</th>
	  <th>City</th>
	</tr>
<?
	while ($row = mysql_fetch_assoc($result)) {	
?>
	  <tr>
		<td><? echo $row{'name'}; ?></td>
		<td><? echo $row{'superpower'}; ?></td>
		<td><? echo $row{'city'}; ?></td>
	  </tr>
<?
	}
?>	
  </table>

<?
  mysql_close( $connection );
?>
</body>
</html>

Bạn sao chép và dán đoạn mã trên vào gedit rồi lưu vào tệp the /var/www/superhero.php. Mở Firefox và nhập http://127.0.0.1/superhero.php vào thanh địa chỉ. Và ngay lập tức — nhanh hơn cả điện xẹt — bạn sẽ thấy trang web như trong Hình 5.

Hình 5. Danh sách các thành viên của superhero
Danh sách các thành viên của superhero

Xem lại mã PHP

Hãy duyệt lại đoạn mã PHP. Mã PHP được nhúng trong trang HTML truyền thống. Mã PHP nằm trong cặp thẻ <? ?> , và bạn có thể trộn mã PHP và HTML với nhau như ở trên để tạo ra bảng thông tin thành viên. Ứng dụng kết nối tới MySQL server cục bộ, chọn một cơ sở dữ liệu, thực hiện truy vấn, và hiển thị kết quả. Cụ thể:

  1. mysql_connect() thành lập một kết nối tới MySQL server trên máy hiện tại (có tên là localhost) sử dụng quyền truy cập của user hero.
  2. mysql_select_db() chọn cơ sở dữ liệu superheroes. Tất cả các thao tác trên cơ sở dữ liệu theo sau — reads, writes, updates, deletes — sẽ được thực hiện trên cơ sở dữ liệu này (cho đến khi một cơ sở dữ liệu khác được chọn bởi lệnh mysql_select_db() ).
  3. mysql_query() truy vấn thông tin từ cơ sở dữ liệu. Câu truy vấn này yêu cầu thông tin của tất cả các cột của tất cả các dòng trong cơ sở dữ liệu và trả lại theo thứ tự abc. Các giá trị trả lại bởi mysql_query() là một tập hợp kết quả, một dạng con trỏ chỉ tới các dòng dữ liệu phù hợp trong bảng.
  4. Vòng lặp trong đoạn mã sẽ nhận từng dòng trong tập kết quả như là một mảng dữ liệu liên kết. Đây là một mảng mà các chỉ số là các tên, và trong trường hợp này là tên của các cột được chọn. (Các mảng trong ngôn ngữ khác thường sử dụng chỉ số nguyên). Do đó $row{'name'} là tên cột của dòng hiện tại.
  5. Sau khi toàn bộ kết quả được xuất ra thành dòng trong bảng của HTML, kết nối tới cơ sở dữ liệu được đóng lại với lệnh mysql_close(). Ứng dụng kết thúc khi mọi dữ liệu đã được xử lý.

Và bạn đã làm xong! Tất nhiên, đây chỉ là ví dụ đơn giản, không phải là Twitter hay Mint.com (xem Tài nguyên), nhưng dù sao nó cũng phản ánh sự dễ dàng (và rẻ) của việc viết một ứng dụng.

Cải tiến để viết mã tốt hơn

Có rất nhiều cách để cải thiện việc phát triển ứng dụng mà bạn nên xem xét khi các ứng dụng trở nên phức tạp. Đó là:

  • Tách biệt mã lập trình (logic) với mã trình bày (HTML)
  • Đặc tính đối tượng (Object features)
  • Khung làm việc của ứng dụng (Application frameworks)

Tách biệt mã lập trình với mã trình bày

Tách biệt mã lập trình (PHP) với mã trình bày (HTML). Hầu hết các ngôn ngữ lập trình web đều đưa ra hệ thống mẫu (template) để thực hiện việc tách biệt này. Sau khi dữ liệu của bạn được khởi tạo, quyền điều khiển chuyển sang hệ thống mẫu để thông dịch và trình bày các cấu trúc dữ liệu. Các mẫu làm cho mã lập trình và mã HTML trở lên dễ đọc và cho phép nhà phát triển và thiết kế hoạt động độc lập. Smarty là một trong những hệ thống mẫu như vậy được sử dụng rộng rãi trong các ứng dụng PHP. Template Toolkit là hệ thống mẫu phổ biến cho Perl.

Đặc tính của đối tượng

Các ngôn ngữ lập trình hiện đại đều hỗ trợ đặc tính lập trình hướng đối tượng. Nếu bạn đã sử dụng C++ hay Smalltalk, bạn có thể tìm thấy một ngôn ngữ lập trình web có tính hướng đối tượng tương tự.

Khung làm việc của ứng dụng (Application frameworks)

Cân nhắc chọn một khung làm việc ứng dụng (application framework). Trong hầu hết các trường hợp, bạn không cần phải "phát minh lại cái bánh xe". Cho dù khung làm việc là tập hợp các lớp, hay một tập đầy đủ các quy định, công cụ hay công nghệ, hãy xây dựng trên các kết quả có sẵn và đẩy nhanh tiến độ để đưa sản phẩm của bạn ra thị trường.

Thực ra, một framework cụ thể, Ruby trên Rails, đã thu hút hàng nghìn lập trình viên về Ruby, một ngôn ngữ kịch bản với sức mạnh của Perl, đặc tính đối tượng của Java, và cấu trúc tối giản của Python. Nếu bạn cân nhắc việc phát triển ứng dụng web trên mã mở, bạn nên xem Ruby trên Rails.


Khám phá Ruby trên Rails

Khẩu hiệu trên trang chủ của Ruby trên Rails (xem Hình 6) là một lời giới thiệu tuyệt vời cho Ruby trên Rails.

Hình 6. Khẩu hiệu của Rails
Khẩu hiệu của Rails

"Lập trình web không khó" ("Web development that doesn't hurt") là một khẩu hiệu. Khẩu hiệu khác là "Đừng lặp lại những gì bạn đã làm" ( "Don't repeat yourself.") thay vì tái phát minh cái bánh xe (các framework) với mỗi một ứng dụng web mới, Ruby trên Rails củng cố một số lượng lớn các quy tắc quy ước giúp bạn tập tập trung vào các tính năng quan trọng.

Ví dụ, mọi ứng dụng Rails đều được tổ chức dựa theo quy định chắt chẽ — cấu hình ở một nơi, bảng định kiểu ở nơi khác và mã JavaScript™ ở một nơi khác. Các quy tắc đó tạo ra "phong cách riêng" về thiết kế, phát triển, triển khai và tái sử dụng.

Hơn nữa, tất cả các ứng dụng Ruby trên Rails đều dựa trên cùng một mô hình: mô hình Model-View-Controller.

Mô hình Model-View-Controller

Như đã đề cập, tách riêng mã lập trình (logic) và cách biểu diễn (presentation) là rất quan trọng và tiện lợi. Sự phân tách là nền tảng cơ bản của mô hình Model-View-Controller.

Model

Model chứa dữ liệu. Ví dụ, một model cho một thành viên của công ty Superheros sẽ chứa tên, thành phố, khả năng, và các thông tin khác như lần xuất hiện đầu tiên chẳng hạn. Thêm vào đó, model còn có thể chứa mã để xử lý các thuộc tính khác, giống như một đối tượng trong ngôn ngữ lập trình hướng đối tượng kết hợp dữ liệu với các phương thức.

View

View biểu diễn thông tin. Giống như hệ thống template, View chia nhỏ cấu trúc dữ liệu và biểu diễn chúng bao gồm cả giao diện tương tác với người dùng. Ví dụ, một view cho ứng dụng superhero có thể hiển thị thông tin thành viên và cung cấp các tính năng như thêm, sửa và xóa các thành viên.

Controller

Cuối cùng, controller chịu trách nhiệm cho việc nhập và xuất dữ liệu. Các điều khiển như web form và giao diện người dùng tạo ra dữ liệu đầu vào. Controller sẽ thông dịch dữ liệu vào, thực hiện các công việc xử lý cần thiết, và tạo dữ liệu ra cho view.

Phân chia vai trò

Sự phân chia vai trò giữa model, view, controller giảm và giới hạn tính phức tạp. Lập trình viên đã áp dụng mô hình này rất tốt. Một cách khái quát, mỗi

  • Model biểu diễn một thực thể hay một đối tượng
  • View cho phép thực hiện nhiệm vụ, thao tác
  • Controller thực hiện một nhiệm vụ

Nếu bạn sở hữu một chiếc iPhone, bạn đã quen với kiểu "extreme" Model-View-Controller — giao diện của iPhone được thiết kế theo mẫu này.

Viết lại ứng dụng Superheroes với Ruby trên Rails

Bây giờ bạn sẽ viết lại ứng dụng bảng phân công thành viên superheros trên Ruby trên Rails. Để thuận tiện và xây dựng mô hình nhanh chóng, Rails có sẵn máy chủ tên là WEBrick. (Khi bạn đã sẵn sàng triển khai ứng dụng của bạn, bạn có thể kết hợp lighttpd với Rails)

Cài đặt Ruby và Rails

Bạn đã có cơ sở dữ liệu rồi, bây giờ bạn cài Ruby và Rails. Phiên bản mới nhất của Ruby cho Rails là 1.8.6 và của Rails là 2.1.0. Một lần nữa, bạn dùng Aptitude để cài đặt các gói này:

$ sudo apt-get install ruby rubygems rails
$ sudo gem install rails --include-dependencies

Lệnh đầu tiên cài đặt ngôn ngữ lập trình Ruby, bộ quản lý gói Ruby (RubyGems), và các công cụ tương ứng với Rails. Gem giống như Aptitude, nhưng chỉ dành cho các mô-đun và thư viện của Ruby. Lệnh thứ hai sử dụng gem để cài đặt thư viện lập trình Rails và các yêu cầu cần thiết.

Khởi tạo ứng dụng

Khi Rails được cài đặt xong, bạn có thể bắt đầu viết chương trình. Hãy đảm bảo rằng bạn không phải là superuser (root), chuyển thư mục hiện tại về thư mục home của bạn, khởi tạo ứng dụng với tiện ích rails. Chỉ cần cung cấp tên ứng dụng — trong trường hợp này là superheroes — và Rails sẽ làm mọi việc tiếp theo như trong Ví dụ 8.

Ví dụ 8. Khởi tạo ứng dụng của bạn với rails
$ cd 
$ rails superheroes
	  create  
	  create  app/controllers
	  create  app/helpers
	  create  app/models
	  create  app/views/layouts
	  create  config/environments
	  create  config/initializers
	  create  db
	  create  doc
	  create  lib
	  create  lib/tasks
	  create  log
	  create  public/images
	  create  public/javascripts
	  create  public/stylesheets
	  create  script/performance
	  create  script/process
	  create  test/fixtures
	  create  test/functional
	  create  test/integration
	  create  test/mocks/development
	  create  test/mocks/test
	  create  test/unit
	  create  vendor
	  create  vendor/plugins
	  create  tmp/sessions
	  create  tmp/sockets
	  create  tmp/cache
	  create  tmp/pids
	  create  Rakefile
	  create  README
	  create  app/controllers/application.rb
	  create  app/helpers/application_helper.rb
	  create  test/test_helper.rb
	  create  config/database.yml
	  create  config/routes.rb
	  create  public/.htaccess
	  create  config/initializers/inflections.rb
	  create  config/initializers/mime_types.rb
	  create  config/boot.rb
	  create  config/environment.rb
	  create  config/environments/production.rb
	  create  config/environments/development.rb
	  create  config/environments/test.rb
	  create  script/about
	  create  script/console
	  create  script/destroy
	  create  script/generate
	  create  script/performance/benchmarker
	  create  script/performance/profiler
	  create  script/performance/request
	  create  script/process/reaper
	  create  script/process/spawner
	  create  script/process/inspector
	  create  script/runner
	  create  script/server
	  create  script/plugin
	  create  public/dispatch.rb
	  create  public/dispatch.cgi
	  create  public/dispatch.fcgi
	  create  public/404.html
	  create  public/422.html
	  create  public/500.html
	  create  public/index.html
	  create  public/favicon.ico
	  create  public/robots.txt
	  create  public/images/rails.png
	  create  public/javascripts/prototype.js
	  create  public/javascripts/effects.js
	  create  public/javascripts/dragdrop.js
	  create  public/javascripts/controls.js
	  create  public/javascripts/application.js
	  create  doc/README_FOR_APP
	  create  log/server.log
	  create  log/production.log
	  create  log/development.log
	  create  log/test.log

Lệnh rails tạo tất cả các thư mục và tệp cần thiết cho ứng dụng của bạn— theo các quy ước chặt chẽ.

Tạo cơ sở dữ liệu

Tiếp theo, bạn cần một cơ sở dữ liệu. Bởi vì tên ứng dụng là superheroes, nên tên của cơ sở dữ liệu là superheroes_development. Một lần nữa, đây là quy ước chung, lấy tên ứng dụng làm tiền tố của "_development." (nếu bạn quên mất quy ước này, hãy mở tệp db/database.yml ra xem tên của các cơ sở dữ liệu.) Bạn có thể sử dụng lệnh mysqladmin để tạo cơ sở dữ liệu ngay từ dòng lệnh:

$ sudo mysqladmin -uroot -p create superheroes_development

Cấu hình ứng dụng để kết nối tới cơ sở dữ liệu

Với cơ sở dữ liệu đã có, bạn có thể cấu hình ứng dụng Rails kết nối tới nó. Chuyển đến thư mục tên là superheroes và chỉnh sửa tệp config/databases.yaml với đoạn mã trong Ví dụ 9.

Ví dụ 9. Tệp config/databases.yaml đã được chỉnh sửa
development:
  adapter: mysql
  encoding: utf8
  database: superheroes_development
  username: hero
  password: shizzle
  socket: /var/run/mysqld/mysqld.sock

Bạn chỉ nên thay đổi usernamepassword trong phần development bởi vì các trường khác đã được đặt giá trị theo quy ước chung khi bạn khởi tạo dự án superheroes. Lưu thay đổi và thoát khỏi trình soạn thảo.

Xây dựng bảng dữ liệu

Bây giờ bạn có thể truy cập cơ sở dữ liệu mới nhưng chưa có bảng hay dữ liệu gì. Bước tiếp theo là tạo các bảng dữ liệu.

Không giống như ứng dụng PHP, sử dụng mã SQL để tạo cơ sở dữ liệu, bạn có thể sử dụng chính Rails để tạo bảng members table. Thực vậy, bạn có thể tạo bảng members (model) và một giao diện đơn giản (view và controller), để tạo, chỉnh sửa, và xóa dữ liệu thành viên. Rails gọi đặc tính này là scaffold. Scaffold (giống như cái giàn) giúp bạn khi xây dựng từng phần của ứng dụng. Và bạn loại bỏ chúng đi khi đã viết xong mã.

Để tạo một scaffold, bạn đặt tên cho nó và cung cấp một danh sách các trường dữ liệu và kiểu dữ liệu. Như trong PHP, model members cần một tên (name), một khả năng (superpower), một tên thành phố (city name) và ngày bắt đầu (start date) như trong Ví dụ 10.

Ví dụ 10. Mã tạo bảng dữ liệu members
$ ruby ./script/generate scaffold member name:string city:string initiated:date
   exists  app/models/
	  exists  app/controllers/
	  exists  app/helpers/
	  create  app/views/members
	  exists  app/views/layouts/
	  exists  test/functional/
	  exists  test/unit/
	  create  app/views/members/index.html.erb
	  create  app/views/members/show.html.erb
	  create  app/views/members/new.html.erb
	  create  app/views/members/edit.html.erb
	  create  app/views/layouts/members.html.erb
	  create  public/stylesheets/scaffold.css
  dependency  model
	  exists    app/models/
	  exists    test/unit/
	  exists    test/fixtures/
	  create    app/models/member.rb
	  create    test/unit/member_test.rb
	  create    test/fixtures/members.yml
	  create    db/migrate
	  create    db/migrate/001_create_members.rb
	  create  app/controllers/members_controller.rb
	  create  test/functional/members_controller_test.rb
	  create  app/helpers/members_helper.rb
	   route  map.resources :members

Rails tổ chức mô hình Model-View-Controller như thế nào?

Nếu bạn xem qua danh sách các tệp tạo bởi scaffold bạn sẽ thấy cách Rails tổ chức mô hình Model-View-Controller.

Rails tạo model trong member.rb. Tên model là Member, và (theo quy ước) nó được gắn kết với bảng dữ liệu members. Nếu bạn nhìn xuống bốn dòng, bạn sẽ thấy một tệp đặc biệt, 001_create_members.rb, được tạo ra vì mục đích tạo bảng dữ liệu đó như trong Ví dụ 11. Đoạn mã create_table chứa các trường mà bạn cần.

Ví dụ 11. 001_create_members.rb
class CreateMembers < ActiveRecord::Migration
  def self.up
	create_table :members do |t|
	  t.string :name
	  t.string :city
	  t.date :initiated

	  t.timestamps
	end
  end

  def self.down
	drop_table :members
  end
end

Scaffold tạo ra sáu tệp cho view, bao gồm một tệp định kiểu stylesheet để tùy biến giao diện trang web. Tệp index.html.erb hiển thị danh sách toàn bộ thành viên. Tệp show.html.erb hiển thị từng thành viên cụ thể. new.html.erb là form để tạo thêm thành viên, còn edit.html.erb là form để chỉnh sửa thông tin của một thành viên. members.html.erb là trang bao hàm cả bốn trang trên. Nó có thể bao gồm cả phần header, footer và các thông tin khác nữa.

Bộ tạo scaffold cũng tạo ra một controller trong members_controller.rb để xử lý tất cả các tác vụ cần thiết như nhập liệu từ form, thay đổi thông tin model và tạo view.

Tạo bảng dữ liệu members

Bạn sẽ chạy ứng dụng ngay bây giờ. Đầu tiên, bạn phải tạo bảng dữ liệu members. rake, giống như trình tiện ích make dành riêng cho Rails, bao gồm một lệnh để quản lý cơ sở dữ liệu. Đặc biệt, rails gọi sự thay đổi cấu trúc và nội dung của cơ sở dữ liệu migration, và rake là sự di chuyển về trước hay về sau để tạo ra một cấu hình cơ sở dữ liệu cụ thể. (Các cơ sở dữ liệu thay đổi liên tục trong quá trình phát triển. Migraions cho phép bạn lấy lại được trạng thái cơ sở dữ liệu từ trước, nó giống như undo và redo trong các trình soạn thảo) Nếu bạn muốn di chuyển đến phiên bản mới nhất của database, gõ rake db:migrate, như trong Ví dụ 12.

Ví dụ 12. Sử dụng rake db:migrate để di chuyển đên phiên bản cuối cùng của cơ sở dữ liệu
$ rake db:migrate
== 1 CreateMembers: migrating =================================================
-- create_table(:members)
   -> 0.1660s
== 1 CreateMembers: migrated (0.1668s) ========================================

Và, ứng dụng đã sẵn sàng.

Thực thi ứng dụng

Từ thư mục superheroes, gõ ruby script/server, như trong Ví dụ 13.

Ví dụ 13. Gõ ruby script/server để thực thi ứng dụng
$ ruby script/server 
=> Booting WEBrick...
=> Rails application started on http://127.0.0.1:3000
=> Ctrl-C to shutdown server; call with --help for options
[2008-07-06 01:47:11] INFO  WEBrick 1.3.1
[2008-07-06 01:47:11] INFO  ruby 1.8.6 (2007-09-24) [i486-linux]
[2008-07-06 01:47:11] INFO  WEBrick::HTTPServer#start: pid=10298 port=3000

Mở trình duyệt và truy cập đến http://localhost:3000/members, và bạn sẽ thấy trang web như trong Hình 7.

Hình 7. Trang index của superhero members
Trang index của superhero members

Trang web chưa có gì vì bảng dữ liệu members chưa có bản ghi nào. Bây giờ, click New Member. Điền các thông tin vào cho Spider-man (như trong hình Hình 8) và click Create. Bạn có thể tạo thêm nhiều heroes nữa.

Hình 8. Mẫu form để tạo member mới
Mẫu form để tạo member mới

Giới hạn của Scaffold

Scaffold có những giới hạn của nó. Bạn có thể để ý thấy rằng menu date chỉ có giới hạn 10 năm trong khi bạn muốn có một giới hạn 80 năm. Và bạn có thể cho rằng việc hiển thị bản ghi hero ngay sao khi nó được tạo là không cần thiết. Hai vấn đề có thể được giải quyết một cách dễ dàng — chỉ cần chỉnh sửa view của Member và controller. Trong bất cứ trường hợp nào, scaffold, quy ước và mẫu Model-View-Controller kết hợp để lên sức mạnh của Rails, và như khẩu hiệu của nó: Lập trình web không khó.


Môi trường phát triển tích hợp Eclipse

Như bạn đã thấy, LAMP cung cấp đầy đủ những thứ cần thiết để phát triển ứng dụng. Nhưng những công cụ hỗ trợ lập trình như là kiểm tra cú pháp, trình gỡ lỗi (debugger), IDE mà tích hợp tất cả các công cụ lại như một cổng lập trình thì sao?

Công cụ hỗ trợ lập trình mã mở

Không có gì là ngạc nhiên về sự phong phú của các công cụ hỗ trợ lập trình mã mở.

Quản lý mã nguồn (Source control)

Các hệ thống quản lý mã nguồn tốt nhất trên linux là Subversion và Git. Cả hai đều cung cấp quản lý sự chỉnh sửa của mã, rẽ nhánh, và gắn thẻ, và cả hai đều thích hợp cho việc phát triển ứng dụng song song hay phân tán. Rất nhiều các dự án mã mở sử dụng các công cụ này để quản lý mã. Ví dụ, nhóm phát triển nhân Linux sử dụng Git, viết bởi các chuyên gia về kernel và người sáng lập Linux Linus Torvalds, để phới hợp công việc của họ.

Trình soạn thảo (Editor)

Nếu bạn muốn tìm kiếm trình soạn thảo mã cho Linux, google "text editor Linux". Vim và Emacs là hai trình duyệt lâu đời và hữu dụng, Kate cũng vậy. Bạn có thể tìm trên mạng các trình soạn thảo phù hợp với bạn.

Trình gỡ rối (Debugger)

Nói chung, mỗi ngôn ngữ lập trình đều có một trình gỡ rối cho riêng nó. Ví dụ, một trình gỡ rối và ứng dụng dòng lệnh có sẵn trong Rails và WEBrick. Thử lệnh debugger bất cứ đâu trông ứng dụng Rails của bạn, và WEBrick sẽ dừng lại với dấu nhắc dòng lệnh để bạn có thể xem danh sách các biến cùng giá trị của chúng, thực hiện gọi stack, hay từng phương một. Một trình gỡ rối thuộc dạng bố già của tất cả các trình gỡ rối trên linux là GDB, được sử dụng để gỡ rối bất cứ ngôn ngữ biên dịch nào trên Linux.

Môi trường phát triển ứng dụng tích hợp (Integrated development environment- IDE)

Có rất nhiều IDE mã mở trên linux như bạn mong đợi. Tuy nhiên, Eclipse là phổ biến nhất, với vô vàn các plug-in mở rộng khả năng hỗ trợ ngôn ngữ mới, quản lý mã, công cụ thiết kế giao diện tương tác, và nhiều thứ tuyệt vời khác. Trung tâm Eclipse Plugin Central (EPIC) có hàng ngàn các mô-đun độc lập. Các thành phần cũng được đóng gói cùng với nhau trong các nền tảng, như là Web Tools Platform và PDT. Xem Tài nguyên.

Phiên bản mới nhất của Eclipse tên là Ganymede là 3.4. Nó hoạt động trên Windows, Linux, và Mac OS X, và bạn có thể tìm thấy các biến thể của Ganymede dành riêng cho ngôn ngữ C hay Java.

Cài đặt Eclipse

Ganymede hoạt động tốt nhất trên Java 1.6. Bạn có thể sử dụng Aptitude để cài đặt Java Software Development Kit (SDK) trên máy Linux của bạn.

$ sudo apt-get install sun-java6-jdk
$ sudo update-alternatives --config java

Lệnh thứ hai, sudo update-alternatives --config java có thể yêu cầu bạn chọn. Nếu nó yêu cầu, bạn hãy chọn cái lựa chọn mà nó chỉ đến sun-java6-jdk. Ví dụ, từ các lựa trong Ví dụ 14, bạn nên chọn cái thứ 3.

Ví dụ 14. Các lựa chọn của Java
There are 3 alternatives which provide `java'.

  Selection    Alternative
-----------------------------------------------
          1    /usr/bin/gij-4.2
*+        2    /usr/lib/jvm/java-gcj/jre/bin/java
          3    /usr/lib/jvm/java-6-sun/jre/bin/java

Press enter to keep the default[*], or type selection number: 3
Using '/usr/lib/jvm/java-6-sun/jre/bin/java' to provide 'java'.

Để tiếp tục, bạn vào trang chủ của Ganymede và tải Eclipse classic về. Khi tải xong, giải nén với lệnh tar xvzf eclipse-SDK-3.4-linux-gtk.tar.gz, như trong Ví dụ 15.

Ví dụ 15. Giải nén với tar xvzf eclipse-SDK-3.4-linux-gtk.tar.gz
$ tar xvzf eclipse-SDK-3.4-linux-gtk.tar.gz
eclipse/
eclipse/features/
...
eclipse/plugins/org.eclipse.jface.databinding_1.2.0.I20080515-2000a.jar

Đổi tên thư mục vừa mới tạo thành eclipse và chạy ./eclipse:

$ cd eclipse
$ ./eclipse

Khi được yêu cầu tạo workspace, click OK. Sau đó, bạn sẽ thấy Eclipse workspace như trong Hình 9.

Hình 9. Eclipse workspace
Eclipse workspace

Cài đặt môi trường phát triển Ruby cho Eclipse

Tiếp tục và cài đặt môi trường phát triển Ruby cho Eclipse. Trong quá trình này, bạn sẽ học cách cập nhật và mở rộng tính năng của Eclipse. Nhấn Help > Software Updates. Khi hộp thoại xuất hiện, chọn thẻ tên là Available Software. Khi thẻ xuất hiện, mở rộng mũi tên cạnh Ganymede Update Site. Và bạn sẽ thấy danh sách dài các lựa chọn mà bạn có thể cài đặt như trong Hình 10.

Hình 10. Các lựa chọn để mở rộng môi trường Eclipse
Các lựa chọn để mở rộng môi trường Eclipse

Mở rộng mũi tên bên cạnh Programming Languages và đánh dấu lựa chọn Ruby. Rồi click Install. Update Manager xác định tất cả các phần mềm cần thiết để môi trường Ruby hoạt động. Ở màn hình tiếp theo, click Finish để bắt đầu cài đặt. Sau khi cài đặt xong, bạn đã sẵn sàng để viết mã ruby trong trình soạn thảo được tối ưu riêng cho Ruby.

Tạo dự án Ruby

Chọn File > New > Project, kéo xuống và mở rộng mũi tên bên cạnh Ruby, và chọn Ruby Project. Nhấn Next và đặt tên cho dự án, ví dụ như simple demo. Tiếp theo, click đường dẫn Configure interpreters. Bạn phải chọn trình thông dịch Ruby mà bạn muốn dùng— trừ khi bạn đã cài JRuby, một lựa chọn duy nhất là /usr/bin/ruby. Nhấn Add và điền các thông tin vào để có được Hình 11. Nhấn OK, sau đó nhấn OK lần nữa, và, cuối cùng là, Finish.

Hình 11. Chọn trình thông dich Ruby interpreter
Chọn trình thông dich Ruby

Bởi vì bạn vừa tạo ra một dự án Ruby, Eclipse chuyển giao diện tương ứng với Ruby, mà bạn có các công cụ để viết mã Ruby. Chọn File > New > Empty Ruby Script, và đặt tên tệp là simple.rb. Hãy gõ mã Ruby trong cái bảng ở giữa.

Hình 12 là một ảnh chụp màn hình của Ruby. Bởi vì array là một mảng Array, trình soạn thảo nhắc bạn với danh sách các phương thức có sẵn của lớp. Bạn có thể thấy dòng mã đó bị đánh dấu như là lỗi (ít nhất là tạm thời). Các biến được hiển thị bên phải. Các cảnh báo, như là về lỗi cú pháp với khoảng trắng (space) giữa tên phương thức và dấu mở ngoặc đơn, hiển thị ở phía dưới.

Hình 12. Auto-completion cho ngôn ngữ lập trình Ruby
Auto-completion cho ngôn ngữ lập trình Ruby

Eclipse làm việc với hầu hết tất cả các ngôn ngữ lập trình. Vào trang chủ của Eclipse để tìm các plug-in trong kho của nó.


Tất cả chỉ là lựa chọn

Tóm lược

Các lập trình viên đang đẩy lùi các giới hạn của ứng dụng web với tính năng mạnh mẽ của trình duyệt. Thật may mắn là những người tiên phong là những ngôi sao sáng chói dẫn đường cho những người khác bằng cách chia sẻ công cụ của họ dưới dạng mã mở. Với một chiếc PC, bạn có thể cài hệ điều hành miễn phí Linux, tải tất cả các ứng dụng bạn cần để phát triển, triển khai, quản lý các trang web của bạn một cách miễn phí.

Tài nguyên

Học tập

Lấy sản phẩm và công nghệ

  • Bài viết này sử dụng Ubuntu Linux.
  • Apache là một máy chủ mã mở thuộc về LAMP.
  • lighttpd sử dụng FastCGI để thực thi các ứng dụng Web.
  • Khám phá tất cả các tính năng của MySQL 5.0. Cơ sở dữ liệu mã mở khác gồm có PostgreSQL, mạnh về các tác vụ transactions, và SQLite, với ưu điểm là nhỏ gọn.
  • Perl is là ngôn ngữ lập trình mã mở được sử dụng để cấu hình LAMP trước kia. Sau đó là PHPPython.
  • Một số ngôn ngữ lập trình Web khác trên nền Linux bao gồm Java, Mono, và Ruby.
  • Tải về máy chủ nhỏ gọn nhưng mạnh mẽ lighttpd.
  • Tải về phiên bản mới nhất của IDE mã mở, Eclipse.
  • Eclipse Plugin Central (EPIC) cung cấp hơn 1000 module Eclipse.
  • Các thành phần cho Eclipse cũng được đóng gói lại thành các nền tảng ứng dụng như Web Tools PlatformPDT.

Thảo luận

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Nguồn mở, SOA và dịch vụ Web
ArticleID=384315
ArticleTitle=Phát triển ứng dụng dựa trên tài nguyên mã mở
publish-date=05202009