$i->php();

Hãy tiết kiệm điện và sử dụng opensource để bảo vệ môi trường

Lập trình viên nào không sử dụng mã nguồn mở giơ tay...

Đừng hỏi Tổ Quốc đã làm gì cho ta, mà hãy hỏi ta đã làm gì cho Tổ Quốc hôm nay (Khát Vọng Tuổi Trẻ - ns. Vũ Hoàn - nguyên tác J.F. Kenedy)

March 2010
M T W T F S S
« Feb    
1234567
891011121314
15161718192021
22232425262728
293031  

Hướng dẫn làm web cơ bản với CakePHP

Posted By tungnd on July 1, 2009

CakePHP là 1 trong số nhiều framework dành cho PHP. Ở đây, chúng tôi chọn CakePHP vì đó là 1 công cụ thân thiệt, dẽ sử dụng, nhanh, mạnh và rất linh hoạt. Để có thể học và sử dụng thành thạo 1 cách nhanh chóng bạn phải biết những kiến thức cơ bản về HTML và PHP.

Bây giờ ta bắt đầu thôi nhỉ, đầu tiên bạn phải download CakePHP về : Download

Cài Đặt :

Để có thể sử dụng  framework vừa download về, máy tính của bạn phải đáp ứng thêm 1 số yêu cầu sau :

- Một HTTP server (Apache, ISS). Ở đây tôi sử dụng Xampp vì nó khá phổ thông và còn kèm thêm cho bạn MySQL.

-Database : Cake hỗ trợ các hệ cơ sở dữ liệu sau : MySQL, PostgreSQL.

- Chú ý thêm là CakePHP chỉ support trong PHP ver4 trở lên.

Sau khi download thành công và đáp ứng đủ các yêu cầu trên thì bạn có thể giải nén tập tin (.zip) vừa download về và sao chép vào thư mục chứa Apache server (vd :  C:\AppServ\www\CakePHP).

Cấu Hình :

Đầu tiên, để Cake và DataBase hoạt động cùng nhau, bạn phải cấu hình lại file database.php :

-Mở file database.php.default tại /CakePHP/app/config/database.php.default

-Điều chỉnh lại các thông số liên quan :

var $default = array( 'driver' => 'mysql', 'connect' => 'mysql_connect', 'host' => 'localhost', 'login' => 'user', 'password' => 'password', 'database' => 'project_name', 'prefix' => '' );

Với user, password, database lần lượt là: tên user, password và database ở trong MySql. Quy ước về đặt tên bảng trong database

  • Tên bảng trong cake nên ở dạng tiếng Anh số nhiều (vd: users, customers, students, … )
  • Bảng phải có primary key tên là ‘id’
  • Nếu có sử dụng quan hệ trong các bảng vd: user_id (user không có s và dấu _ cộng id)

-Tiếp đến bạn thay đổi tên file thành database.php -Cuối cùng, mở file core.php tại /CakePHP/app/config/core.php. Thay đổi security theo ý của bạn : Configure::write(‘Security.salt’, ‘8rnc4ry438tc34jchcyu34cu5cbn4u’);  => Configure::write(‘Security.salt’, ‘<tùy bạn>’);

Hướng dẫn sử dụng :

Để kiểm tra xem khâu cài đặt có hoàn thành hay không, bạn mở đường dẫn :  http://localhost/CakePHP/ Ở đây tôi không tiện chụp ảnh lại nên bạn chịu khó nhìn giao diện, nếu không thấy đỏ lòm hay vàng khè j` thì cứ yên tâm là đã ok ! Yên tâm hơn nữa thì hãy tìm 2 dòng Your database configuration file is present.  và Cake is able to connect to the database. Nếu tìm tháy thì cùng tôi bắt đầu tiếp. Còn nếu có 2 màu đặc biệt đấy thì bạn nên xem lại các bước đã làm ! Tạo bảng Cơ Sở Dữ Liệu : tạo bảng customers như sau :

id: INT, AUTO_INCREMENT, PRIMARY KEY
name: NVARCHAR
age: INT
address: VARCHAR

Code :

Quên mất, bạn đã biết mô hình MVC (Models-Controller-View) là j` chưa nhỉ, nếu chưa thì bạn cứ hiểu nôm na như sau : Mô hình MVC trong lập trình hướng đối tượng hoạt động theo 3 tầng, tầng trên cùng là View, tiếp theo là Controller và tầng dưới cùng là Models.

- Models : dùng để giao tiếp với Cơ Sở Dữ Liệu của bạn.

-Controller : dùng để tạo các function để viết các yêu cầu theo ý muốn, lấy dữ liệu từ Cơ Sở Dữ Liệu thông qua Models và hiển thị ra tại View.

-View : là nơi thể hiện dữ liệu đã được xử, hoặc từ đây ta có thể nhập dữ liệu mới, sau đó Controller sẽ lấy dự liệu từ View chuyển về cho Models để lưu vào Cơ Sở Dữ Liệu. Nói nhanh cho vuông thì View cũng có thể coi là 1 trang template.

*Để hiểu thêm về mô hình MVC thì bạn hãy search google và tìm hiểu thêm, còn bây giờ tôi phải vào mục chính là làm việc với CakePHP.

Chúng ta bắt đầu làm việc theo thứ tự 3 tầng MVC từ thấp đến cao.

Đâu tiên là Model : mở trình soạn, tạo file customer.php tại \CakePHP\app\models\customer.php

<?php
class Customer extends AppModel
{
   var $name = 'Customer';
}
?>

Tiếp đến là Controller : tạo file custermers_controller.php tại \CakePHP\app\controllers\custermers_controleller.php

<?php
class CustomersController extends AppController
{
    var $name = 'Customers';
    function index()
    {
        $this->set('customers', $this->Customer->findAll());
    }
}
?>

Cuối cùng là View : file index.ctp tại \CakePHP\app\view\custermers\index.ctp

<h1>Customer Manager</h1>
   <table>
       <tr>
           <th>Id</th>
           <th>Name</th>
           <th>Age</th>
           <th>Address</th>
       </tr>
       <?php foreach ($customers as $cust): ?>
       <tr>
           <td><?php echo $cust['Customer']['id']; ?></td>
           <td>
               <?php echo $html->link($cust['Customer']['name'], '/customers/view/'.$cust['Customer']['id']);?>
               <?php echo $html->link('Delete',"/customers/delete/{$cust['Customer']['id']}",null,'Are you sure?')?>
               <?php echo $html->link('Edit', '/customers/edit/'.$cust['Customer']['id']);?>
           </td>
           </td>
           <td><?php echo $cust['Customer']['age']; ?></td>
           <td><?php echo $cust['Customer']['address']; ?></td>
       </tr>
       <?php endforeach; ?>
   </table>

Có vẻ ổn rồi, bạn hãy thử mở đường dẫn http://localhost/CakePHP/custermers để xem kết quả của chương trình bạn vừa viết. Và sau đó tìm hiểu thêm nhiều tính năng nữa của Cake nhé, khi đó bạn sẽ rất “sướng” cho mà xem.

Còn tôi thì phải đi làm tách trà đá cái đã !







MỘT NGÀY PHẢI KHÁC MỌI NGÀY

Posted By ngocbd on June 20, 2009

MỘT NGÀY PHẢI KHÁC MỌI NGÀY

(Sau một ngày thống kê một cách khách quan những bi hài kịch thời sự nóng hổi)

Chào một ngày giống hệt mọi ngày

Sóng truyền hình phủ toàn phim Trung Quốc

Từ HTV, VTV, BTV, Đồng Nai, Long An, Bà Rịa Vũng Tàu, Cà Mau… cho đến “cáp”

Hết “Triều Đại Mãn Thanh” đến “Đại Tống Truyền Kỳ”

Chào một ngày giống hệt mọi ngày

Đọc báo thấy cha ông mất hút

Thấy thiên hạ quỳ mọp dưới tượng đài Binh Pháp Mặc Công, Ngọa Hổ Tàng Long, Họa Bì, Xích Bích…

Con nít thuộc lòng Hoắc Nguyên Giáp, Hoàng Phi Hồng, Diệp Vấn, Diệp tùm lum hơn thuộc sử Tiên Rồng

Chào một ngày đất nước tự lưu vong

Cội rễ văn hiến 4000 năm trốc gốc

Tuổi teen gối đầu giường Lý An, Ngô Vũ Sâm, Trương Nghệ Mưu, Trần Khải Ca lạ hoắc

Pano giăng khắp nơi hình ảnh Củng Lợi, Chương Tử Di, Thành Long phơi phới toét miệng cười

Chào một ngày phát triển giống đười ươi

Đi trên xã tắc thấy người thua xa khỉ

Thấy lô cốt ngáng đường, thấy nước ngập tận mông, thấy thánh hiền sợ quỷ

Thấy truyền thống chống ngoại xâm co rúm lại vì… tiền

Chào một ngày vong bản vì… hèn

Sống chết mặc bây, túi thầy vô cảm

Ải Nam Quan nằm ngoài ranh giới Việt Nam, xưa rồi Diễm…

Nước mắt Nguyễn Trãi khóc Nguyễn Phi Khanh rơi ở tận… nước Tàu

Chào một ngày bãi biển hóa nương dâu

Thác Bản Giốc rời Cao Bằng như có cánh

Thắng cảnh để lại của tiền nhân bị cháu con ghẻ lạnh

Các di tích, kỳ quan cứ mất tích đều đều

Chào một ngày hình chữ S tong teo

Tài nguyên bôxit bị bới đào như… bọ xít

Nhôm và đô la chẳng thấy đâu, chỉ thấy đất Tây Nguyên rên xiết

Ô nhiễm mạch ngầm, nước sông làm nghẹt thở Chín Con Rồng

Chào một ngày long mạch bị xới tung

Máu bầm đất đỏ bazan, máu tràn ra hải đảo

Ai cho phép Hoàng Sa Trường Sa thành Tam Sa lếu láo

Tội nghiệp rừng cọc nhọn của Hưng Đạo Đại Vương trên sóng Bạch Đằng

Chào một ngày giống hệt cõi âm

Những xác chết anh hùng bật dậy

Máu trả máu, đầu trả đầu. Nhớ đấy

Mãi quốc cầu vinh tất quả báo nhãn tiền

Chào một ngày soi rõ mặt anh em!

21 – 4 – 2009

BÙI CHÍ VINH

Giải thử vài câu đề thi tốt nghiệp ptth môn toán

Posted By ngocbd on May 30, 2009

Xem đề thị tại đây : http://www.thanhnien.com.vn/News/Documents/GiaoDuc/PTTH/2009/Dapan/DeToan_GDTHPT.pdf

Tất nhiên là giải theo cách thông thường thì các bạn xem trong đáp án :P

Ở đây là phương pháp  giải “khác” :D .

Câu 1:
1.

Khảo sát và vẽ đồ thị hàm số :
http://www57.wolframalpha.com/input/?i=(2x%2B1)%2Fx-2
Câu 2
2.1.

Giải phương trình :
http://www57.wolframalpha.com/input/?i=25^x-6*5^x%2B5%3D0
2.2.

Tính tích phân :

http://www57.wolframalpha.com/input/?i=integral+[x(1%2Bcos(x))%2C0%2Cpi]
2.3.

Tìm max – min trên một đoạn .
min :

http://www57.wolframalpha.com/input/?i=minimize+x^2-ln(1-2x)+over+[-2%2C0]
max :
http://www57.wolframalpha.com/input/?i=maximize+x^2-ln(1-2x)+over+[-2%2C0]

Câu 4

4.a.1

Tính toạn độ tâm và bán kính của hình cầu

(x-1)^2+(y-2)^2+(z-2)^2 = 36

http://www61.wolframalpha.com/input/?i=(x-1)^2%2B+(y-2)^2%2B(z-2)^2%3D36

vậy

tâm S(T) : (1,2,2)
bán kính :6

Câu 5
5.a.

Giải phương trình trên tập số phức
http://www57.wolframalpha.com/input/?i=8x^2+-4x+%2B1+%3D0
5.b.
Giải phương trình trên tập số phức

http://www57.wolframalpha.com/input/?i=2x^2+-+i+x+%2B++1+%3D0

Tạm vậy đã các , các câu khác ai có cách  giải thì commnet nhé  !

Funny web2.0

Posted By hoangnd on May 28, 2009

IE webrender – Công cụ kiểm tra web design trên IE

Posted By ngocbd on May 26, 2009

http://ipinfo.info/netrenderer/

Với công cụ trên không những kiểm tra đựoc thiết kế , mà còn có thể xem trực tiếp sự sai khác giữa các phiên bản IE (6-7)

Công cụ khủng hơn :D

http://browsershots.org

Demo

http://browsershots.org/http://khuvuc.com/

hay http://www.browsercam.com

Skype and Facebook plugin for Pidgin

Posted By ngocbd on May 26, 2009

http://code.google.com/p/skype4pidgin/

http://code.google.com/p/pidgin-facebookchat/

[Note] Sinh lại RSA Key cho ssh client

Posted By ngocbd on May 19, 2009

Hôm nay cài lại server ssh lên không thiêng .
Lỗi là tại RSA key ở client đã cũ (do ssh server được cài lại).
gõ lệnh sau để gen lại ssh key cho client

“ssh-keygen -R ip_addressInConflict”

TUT Làm bản đồ đại lý

Posted By habogay on May 18, 2009

Công việc này có thể làm bạn nghĩ đến giải pháp google maps nhưng theo tôi   dùng google map và maker api của nó là quá phức tạp . Thôi thì tự làm một cái vậy .

Yêu cầu của bài toán là vẽ một bàn đồ nước việt nam , trên đó vị trí các tỉnh thành phố có đại lý của công ty XYZ thì xuất hiện maker (Dùng hình ngôi sao hoặc chấm tròn) và tên tỉnh thành pố có đại lý đo .

Nếu người dùng click vào tỉnh thành phố nào thì xuất hiện chi tiết danh sách các đại lý trực thuộc tỉnh thành phố đó .

Các đồ nghề cần sài : Flash IDE  (CS2) , PHP 5 , Mysql 5 , GIMP (Hoặc PS)

Đầu tiên là làm một cái flash có hiển thị tên các tỉnh thành .

B1 Kiếm một cái bản đồ việt nam (dạng khung) :

google nào

Tôi chọn cái ảnh thứ 2 :

Giờ là lúc dùng đến GIMP để sửa sang nó

Kết quả :D

Cũng không tệ lắm

B2. Tạo flash document có kích thước lớn hơn bức anh một chút : 325×680

Import bản đồ vào .Kéo bản đồ từ lib vào stage nếu bạn import nó vào lib . Đặt tên cho instance là map .

Xong .

B3. Vẽ hình ngôi sao :D

Convert ngôi sao thành Moviclip (nhớ chọn option Export for Actionscript) . Đặt tên cho Class là ” Star”  .

B4. Tạo file chứa tên tỉnh thành và tọa độ của chúng . Tất nhiên cái này phải lấy từ  csdl nhưng trước mắt cứ lấy đại một cái file tĩnh đã , sau này chỉ cần sửa lại url trỏ vào file php là xong .

tạo một file data.txt để giả lập dữ liệu lấy ta từ  csdl . giả sử file này đặt ở http://localhost:81/data.txt

data.txt:
Hanoi=30-20&Saigon=40-50

Tôi lưu file theo cấu trúc : “tên tinht thành=tọa độ x- tọa độ y”

tiếp theo mở actionscript code thẳng vào frame 1 .

import flash.net.*;
var myLoader:URLLoader = new URLLoader()
//the data will come as URL-encoded variables
myLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
//Load using an URLRequest, even beeing local
myLoader.load(new URLRequest(“http://localhost:81/data.txt”));
//add a listener for the complete event
myLoader.addEventListener(Event.COMPLETE, onLoadHandle);
function onLoadHandle(ev:Event):void{

for (var name in myLoader.data){
trace(name+”:”+myLoader.data[name]);

}
}

Chạy thử đoạn code trên :

kq:

Hanoi
30-20
Saigon
40-50

Tiếp theo là thay vì trace ta sẽ add các ngôi sao lên các vị trí tương tứng :

var mc:Star = new Star();
var valuePair:String=String(myLoader.data[name]);
var arr=         valuePair.split(“-”);
mc.name=name;
mc.x=arr[0];
mc.y=arr[1];
addChild(mc);

Thay đoạn code này vào trong vòng for .

Ta sẽ thấy xuất hiện 2 ngôi sao ở vị trí 30-20 và 40-50 .

Giờ là lúc tìm vị trí chính xác cho 2 ngôi sao này (Dùng GIMP đo tọa độ trên ảnh )

Đây là kết quả của tôi :D (chắc chắn là chưa chính xác vì tôi áng khoảng thôi , bạn phải khớp với bản đồ thật)

Hanoi=137-108&Saigon=179-570

Chạy lại : Hai ngôi sao đã phù hợp với vị trí các tinht thành , nếu muốn có thêm các tỉnh thành khác bạn chỉ việc thêm vào file data.txt .

B5. Xử lý tên tỉnh thành nằm cạnh ngôi sao :

import flash.net.*;
import flash.text.TextField;
var myLoader:URLLoader = new URLLoader()
//the data will come as URL-encoded variables
myLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
//Load using an URLRequest, even beeing local
myLoader.load(new URLRequest(“http://localhost:81/data.txt”));
//add a listener for the complete event
myLoader.addEventListener(Event.COMPLETE, onLoadHandle);
function onLoadHandle(ev:Event):void{

for (var name:String in myLoader.data){

var mc:Star = new Star();

var valuePair:String=String(myLoader.data[name]);
var arr=         valuePair.split(“-”);
mc.name=name;
var txt:TextField = new TextField();
txt.text=mc.name;

mc.x=arr[0];
mc.y=arr[1];
mc.addChild(txt);
addChild(mc);

}
}

Tạm thế đã . :D

Sự tàn lụi của PHP

Posted By hoangnd on April 29, 2009

Mặc định rằng các bạn đang đọc bài này là những người làm trong ngành nên tôi sẽ không giải thích hay ghi chú những khái niệm phổ thông. Mặt khác, lý lẽ trong bài viết này chỉ phản ánh quan điểm của cá nhân tôi, không đại diện cho ai hay tổ chức nào khác.

Lịch sử ngành công nghiệp máy tính & mạng đã chứng minh PHP là một trong số những ngôn ngữ mạnh & linh động nhất trên nền Web và cũng không quá khó để thành thục ở mức phổ thông. Được phát triển và biết đến từ những năm cuối của thập kỷ trước, PHP đã đạt được sự tăng trưởng đáng kinh ngạc so với các ngôn ngữ lập trình khác.

 

PHP Timeline

PHP Timeline

 

 

Nhìn biểu đồ trên, ta thấy con đường đi lên của PHP là theo hướng phát triển truyền thống, tức là Thiết kế -> sử dụng -> chỉnh sửa -> lớn mạnh -> phát triển. Điều thú vị là cho đến nay, rất nhiều các sản phẩm được phổ biến rộng rãi cũng đi theo con đường trên như các nền tảng .NET, Java hay Linux.

Ta lần lượt điểm qua một số điểm mẫu chốt sau

Vòng đời

Một lần nữa, nhắc lại thế mạnh của PHP trên nền web chính là tốc độ (phát triển & thực thi), nhẹ & dễ học. Bên cạnh đó, do đặc tính mã nguồn mở (theo giấy phép PHP) cũng như sự đổi mới về phong cách khi ra đời, PHP sở hữu rất nhiều thứ quý giá

 

  • Cộng đồng lớn. Khoản này vô đối. Luôn có những guru sẵn sàng chia sẻ kinh nghiệm & kiến thức, hướng dẫn những người mới và giải đáp thắc mắc.
  • Thư viện, cả nội tại và mở rộng của PHP, có chứa số lượng function cực lớn được đóng góp bởi những người tình nguyện. Con số vào khoảng 700 buit-in functions và uncountable external functions (hoangnd tính toán).
  • Framework đa dạng về số lượng cũng như chất lượng, thậm chí đa dạng cả về mô hìnhmục đích sử dụng.

 

Sự mở rộng và phát triển

 

  • Khái niệm về namespace. .NET đã có từ lâu, Java cũng có khái niệm package gần tương đương, và bây giờ chúng ta chứng kiến PHP. Đành rằng namespace ra đời với mục đích cơ bản là giúp lập trình viên dễ tổ chức và quản lý code hơn, nhưng với PHP thì tôi cho rằng là một sự ôm đồm. Mặc dù có rất nhiều những giải thích về cách gõ namespace trong PHP, nhưng thực sự là rất khó chấp nhận ký tự “\” để phân cách.  Thứ nhất  là hơi va chạm với tư tưởng chạy đa nền của PHP vì ký tự “\” được dùng phổ biến trong windows để phân tách đường dẫn. Thứ hai là có vẻ như PHP đã sử dụng cạn kiệt tài nguyên bàn phím. 
  • PHP cho đến nay đã quá rộng lớn và các lập trình viên dễ dàng tìm được nhiều giải pháp khác nhau cho cùng một bài toán. Điều này thể hiện rất rõ ràng tư tưởng “open and share” mà nhờ nó, nhân loại mới có được kho tri thức khổng lồ (không chỉ trong ngành khoa học máy tính mà còn ở tất cả các lĩnh vực khác). Tuy nhiên, hãy nhìn Python làm, bạn có rất ít những cách để xử lý một vấn đề và thường thì những cách đó luôn là cách tốt nhất và dễ dàng nhất cho bạn, đến nỗi bạn chả buồn nghĩ tới hướng khác :P . Ở phía đối diện, .NET độc quyền gắn chặt với hệ điều hành Window$ của Micro$oft nhưng có sự thống nhất, rõ ràng và ổn định cực tốt (nếu bạn chọn phát triển trên nền tảng này).

 

Yahoo và facebook xài PHP

Quá đúng, bỏ qua phần backend thì chính những đoạn mã  PHP đã dựng lên bộ mặt yahoo & facebook như bây giờ. Và nó đã chứng minh giá trị của mình khi cả Yahoo & facebook đều đã hoặc đang trở thành những đế chế internet với danh tiếng, lợi nhuận & lượng người dùng cực lớn, chưa kể đến số lượng các dịch vụ kèm theo.

Thế nhưng, trong các đăng báo tuyển dụng, họ luôn muốn ưu tiên những ứng viên biết thêm Perl hoặc Python bên cạnh thành thạo PHP (bỏ qua các yêu cầu khác). Câu hỏi đặt ra là, họ (yahoo & facebook) định cho những ứng viên này làm cả ở nền tảng trên & dưới của hệ thống web application? hay họ muốn những ứng viên đó có được tư duy ngôn ngữ của perl, python? hay nữa là họ muốn dự phòng và sẵn sàng chuyển đổi sang perl, python? (lol)

Đặc điểm

Một chút hình dung


Có nghĩa lý gì? Ai cũng biết .NET là một nền tảng còn PHP là một ngôn ngữ lập trình, tất nhiên sẽ là không hợp lý nếu so sánh chúng với nhau. Cái tôi muốn đề cập là, với .NET chúng ta có thể sử dụng để lập trình web, windows application, mobile, embedded, cloud … với sự tách biệt không quá lớn dành cho lập trình viên (tất nhiên môi trường triển khai thì không nói). Còn PHP không thể đứng một mình, nó sẽ kết hợp với các công nghệ khác tạo thành những nền tảng thực thi bài toán, mà chất lượng kết quả bài toán đó phụ thuộc rất nhiều vào kinh nghiệm & kiến thức của kiến trúc sư trưởng dự án. Sợi dây liên kết này tôi cho rằng là kém vững trãi hơn so với .NET

Ngoài ra, mô hình trên còn thể hiện một nội dung khác. Nếu coi mỗi ngôn ngữ là một tập thông tin thì chúng liên kết với nhau qua giao của những tập đó. Có nghĩa là PHP sẽ đứng chung với python, perl, ruby … Và cũng có nghĩa là tôi sẽ chọn python thay vì PHP để kết hợp với flex. Tức là PHP đã mất đi một người dùng là tôi, ít nhất là trong dự án nào đó.

Buồn ngủ quá nên đoạn này viết hơi sơ sài và lung tung, sẽ cập nhật lại sớm thôi

Tuy nhiên

Các lập trình viên PHP đừng quá buồn và suy nghĩ nhiều làm gì, PHP đã, đang và sẽ luôn làm rất tốt trong phân khúc thị trường của nó. Và trong 1, 2, 3 năm nữa có thể ta có PHP phiên bản 6.0, 6.1, 6.2 … nhưng rồi nó sẽ phát triển tiếp thành cái gì? Cộng đồng không có nhiều người biết, tôi cá là bạn không biết, còn tất nhiên là tôi không biết roài. :D

(just my cent at 3 a.m)

Project Dark Star – start Server: Helloworld

Posted By dungbk on March 19, 2009

Quay trở lại vấn đề Start Server & làm cho Server chào Helloworld – điều mà không phải ai cũng đủ kiên trì làm được với bài tut trước. Bài tut này sẽ trình bày lại một cách đơn giản cách Start Server, bỏ qua việc giới thiệu & quảng cáo về PDS.

C      Công việc sẽ chia thành mấy bước thế này:

– Build Path cho các file .jar trong thư viện của PDS vào project

– Tạo class HelloWorld

– Tạo thư mục conf

– Viết hello.xml

Trước hết, muốn làm việc với PDS thì phải down nó về đã. Down ở đây:

http://www.projectdarkstar.com/current-distribution.html

download và giải nén 2 gói Project Darkstar Server, source & binary Project Darkstar Java Client SDK, source & binary là đủ dùng.

Bây giờ tạo một project Java, ví dụ tên là PDSHelloServer.

1.    1. Build Path: (lấy thư viện của PDS Server)

Chuột phải vào System library-> Build Patch -> Configure Build Path -> Add External Jars. Sau đó chỉ đường dẫn vào sgs-server-dist->lib, chọn tất cả file đuôi jar -> ok . Sẽ xuất hiện thư mục Referenced Library.

2.    2. Tạo 1 package tên là helloServer trong project, copy class HelloWorld trong sgs-server-dist-0.9.8\tutorial\src\com\sun\sgs\tutorial\server\lesson1, nhớ đổi tên package

3.   3. Tạo thư mục conf trong Project copy các file Helloworld.boot , Helloworld.properties , logging.properties trong sgs-server-dist-0.9.8/tutorial/conf vào thư mục conf.

Chỉnh sửa một số thông tin trong các file này như sau:

File HelloWorld.boot:

SGS_PROPERTIES=${SGS_HOME}/HelloWorld/conf/HelloWorld.properties

SGS_LOGGING=${SGS_HOME}/HelloWorld/conf/logging.properties

- Fi   File  HelloWorld.properties:

com.sun.sgs.app.name=HelloWorld

com.sun.sgs.app.root=HelloWorld/data/HelloWorld

com.sun.sgs.app.port=1139

com.sun.sgs.app.listener=helloServer.HelloWorld => package chứa class HelloWorld

4.  4. Viết hello.xml

Tạo ra 1 file hello.xml trong project, nội dung như sau:

<project default=“jar”>

<!–bắt buộc phải có target clean trong mỗi ant –>

<target name=“clean”>

<delete dir=“jar”></delete>

</target>

<!– nén file từ basedir thành destfile (trong thư mục project của minh)–>

<target name=“jar”>

<mkdir dir=“jar”/>

<jar destfile=“jar/HelloWorld.jar” basedir=“bin”/>

<!–copy file jar–>

<!–ở đây folder sgs-server-dist-0.9.8 được đặt ở địa chỉ E:/mydata/projectdarkstar, để chạy được phải sửa đường dẫn tương ứng trên máy cá nhân –>

<copyfile dest=“E:/my data/projectdarkstar/sgs-server-dist-0.9.8/lib/HelloWorld.jar” src=“jar/HelloWorld.jar”/>

<copydir dest=“E:/my data/projectdarkstar/sgs-server-dist-0.9.8/HelloWorld/conf” src=“conf”></copydir>

<!–delete để có thể chạy lại application–>

<delete dir=“E:/my data/projectdarkstar/sgs-server-dist-0.9.8/HelloWorld/data”></delete>

<!–start application với tham số bên dưới–>

<java fork=“true” jar=“E:/my data/projectdarkstar/sgs-server-dist-0.9.8/bin/sgs-boot.jar” >

<arg value=“E:/my data/projectdarkstar/sgs-server-dist-0.9.8/HelloWorld/conf/HelloWorld.boot”></arg>

</java>

</target>

</project>

Right click vào file hello.xml này, chọn Run As –> Ant Build, trên màn hình console sẽ log lại dòng Hello World!

Lưu ý, khi start lại Server lần 2, nếu gặp lỗi không xóa được /sgs-server-dist-0.9.8/HelloWorld/data

thì vào task manager và kill bớt mấy process từ lần chạy trước. Good luck!