Thứ Ba, 27 tháng 1, 2009

Socket with java server

một ví dụ về socket:

flash chỉ có thể là client. Cần dùng một ngôn ngữ khác để tạo server socket:

java server socket:

server đợi request từ client tới, nếu có request, sẽ tạo socket với client. Sau khi tạo socket, trả về client chuỗi "hello client".
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server
{

/**
* @param args
*/
public static void main(String[] args)
{
try
{
//tao ServerSocket
ServerSocket server = new ServerSocket(2000);

//create socket connect to client
Socket socket = server.accept();//wait client request
System.out.println("da tao socket");

//create stream to write to client
OutputStreamWriter out = new     OutputStreamWriter(socket.getOutputStream());
//write from server
out.write("hello client");
out.flush();

//create stream to read from client
BufferedReader read = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//read from client
String str;
while(true)
{
str = read.readLine();
if(str==null) break;
System.out.println(str);
}

} catch (Exception e)
{
e.printStackTrace();
}

}

Phía client: ta dùng actionscript để tạo socket kết nối với server:  tạo application trong flex:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
<mx:Script>
<![CDATA[
private var server:String = "localhost";
private var port:Number = 2000;
private var socket:Socket;
private function init():void {
socket = new Socket();
socket.addEventListener(Event.CONNECT, onConnect);
socket.addEventListener(Event.CLOSE, onClose);
socket.addEventListener(ErrorEvent.ERROR, onError);
socket.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
socket.addEventListener(ProgressEvent.SOCKET_DATA, onResponse);
Security.allowDomain(server);
Security.loadPolicyFile("http://"+server+"/crossdomain.xml");
try {
socket.connect(server, port);
outMessage("Trying to connect to "+server+":"+port);
} catch (error:Error) {
socket.close();
outMessage(error.message);
}

}
public function send(string:String):void {
socket.writeUTFBytes(string);
socket.flush();
}
private function onConnect(event:Event):void {
outMessage("Connected to "+server+":"+port);
socket.writeUTFBytes("hello server 1\n");
// send("respond");
}
private function onClose(event:Event):void {
outMessage("Connection closed");
}
private function onError(event:IOErrorEvent):void {
outMessage("Connection error");
}
private function onIOError(event:IOErrorEvent):void {
outMessage("I/O error");
}
private function onResponse(event:ProgressEvent):void {
var string:String = socket.readUTFBytes(socket.bytesAvailable);
outMessage(string);
socket.writeUTFBytes("hello server 2\n");

}
public function outMessage(msg:String):void {
log.htmlText += '<font color="#000099">'+msg+'<br></font>';
}
]]>
</mx:Script>
<mx:TextArea id="log" width="400" height="200" x="10" y="10" selectable="false"/>
</mx:Application>

Mọi giao tiếp giữa client và server cần được viết trong hàm onResponse(event:ProgressEvent).

Việt Hóa oscommerce


Đầu tiên bạn download bộ cài đặt tiếng Việt tại địa chỉ:


http://www.mediafire.com/?sharekey=470c49a9e32e055e111096d429abd360e04e75f6e8ebb871


Giải nén bộ cài và upload vào thư mục osc/includes/languages của Oscommerce.


Tiếp theo vào phần quản trị của Oscommerce http://localhost/osc/admin/. Vào phần Localization và chọn tiếp Languages






[caption id="" align="alignnone" width="140" caption="5"]5[/caption]



Bấm vào nút new languagevà thiết lập các thông số như sau:

[caption id="" align="alignnone" width="282" caption="6"]6[/caption]

Cuối cùng bấm vào Insert  để kết thúc việc cài đặt ngôn ngữ tiếng Việt  cho site của bạn.

Chúc bạn thành công

Chú ý: Với bộ Việt hóa trên thì bạn không nên sự  dụng font việt  trong trang admin nhé sẽ gặp một số lỗi không mong muốn.

cài đặt osCommerce:


1.Tải osCommerce tại trang http://www.oscommerce.com/solutions/downloads với file


» oscommerce-2.2rc2a.zip


2. Giải nén file mới tải về vào thư mục chạy của AppServ hoặc xampp. Tạo một thư mục mới(ở đây tôi đặt tên osc) copy tất cả file và thư mục có trong thư mục catalog vào.


3. Dùng SQLserver tạo một CSDL mới , chưa cần tảo bảng cho nó. (ở đây tôi đặt tên CSDL là osc)


4. Chạy thư mục mới bung ra bằng http://localhost/osc/



Nháy chuột vào continue để tiếp tục




[caption id="" align="alignnone" width="184" caption="1"]1[/caption]



5.Điền đầy đủ thông số cho nó:




[caption id="" align="alignnone" width="246" caption="2"]2[/caption]



Nháy chuột vào continue để tiếp tục


6. Tiếp tục ấn continue để tiếp tục.


7. Điền đầy đủ thông số cho nó(một cách bất kỳ):




[caption id="" align="alignnone" width="298" caption="3"]3[/caption]



Nháy chuột vào continue để tiếp tục


8.Nháy chuột vào catlog để đến trang web đã được tạo. Nháy chuột vào Administrtion Tool để vào trang admin.




[caption id="" align="alignnone" width="750" caption="4"]4[/caption]



Đến đây việc cài đặt gần như hoàn thiện ta chỉ việc làm tiếp nhưng công việc sau:


B1: xóa thư mục install trong …\osc\


B2: Chuyển configure.php trong …\osc\includes sang chế độ Read-only


Như vậy công việc cài đặt osCommerce coi như xong.


Chủ Nhật, 18 tháng 1, 2009

Ten recommendations for developers

1. Add comments to your code.
2. Do not complicate things.
3. Keep in Mind - “Less is more” is not always better.
4. No hard coding please.
5. Do not invent your own frameworks.
6. Say no to Print lines and String Concatenations.
7. Pay attention to the GUI.
8. Always Prepare Document Requirements.
9. Unit-test. Unit-test. Unit-test.
10. Remember - quality, not quantity.

for more details, feel free to drop email to contact@hoangnd.com  or come and speak to me, i'm available in meeting room, guys!

Thứ Bảy, 17 tháng 1, 2009

Cakephp 1.2 - một số hàm hepler thường dùng (Phần 2)

Sau đây sẽ là một số hàm hepler thường dùng trong form:
8. form->input: Tạo ra thẻ html input

Cú pháp:
$form->input(string $fieldName, array $options = array()) ;

Thẻ input trong cakephp là thẻ được sử dụng nhiều nhất, hiệu quả nhất và phức tạp nhất trong hepler form của cakephp. Trước tiên ta hãy tìm hiểu cách sinh ra các phương thức tự động trong Formhepler.
a.  Quy cách sinh tự động các thẻ HTML.
Thẻ input sẽ dựa vào loại dữ liệu (type) của model để tự động sinh ra các thẻ html tương ứng. Sau đây là một bảng liệt kê các thẻ html trả về tương ứng với loại dữ liệu:


































Kiểu dữ liệuThẻ form trả về
string (char, varchar, etc.)text
boolean, tinyint(1)checkbox
texttextarea
text, with name of password, passwd, or pswordpassword
dateday, month, and year selects
datetime, timestampday, month, year, hour, minute, and meridian selects
timehour, minute, and meridian selects

Cho ví dụ, giả sử model User bao gồm các trường là username(varchar), password(varchar), approved(datetime) và quote(text). Chúng ta có thể chỉ sử dụng một phương thức input trong FormHepler là có thể tạo ra được tất cả các thẻ html khác nhau.
Ví dụ:
<?php echo $form->create(); ?>

<?php
echo $form->input('username');   //text
echo $form->input('password');   //password
echo $form->input('approved');   //day, month, year, hour, minute, meridian
echo $form->input('quote');      //textarea
?>

<?php echo $form->end('Add'); ?>

Ta cũng có thể mở rộng một vài thuộc tính trong thẻ input như sau:
echo $form->input('birth_dt', array( 'label' => 'Date of birth' , 'dateFormat' => 'DMY' , 'minYear' => date('Y') - 70, 'maxYear' => date('Y') - 18 ));

b. Quy ước tên trường trong phương thức input
Form hepler rất thông minh, khi bạn xác định tên một trường với phương thức của form helper, cakephp sẽ tự động sử dụng tên model hiện đại để dịnh dạng theo cấu trúc dưới đây.
<input type="text" id="ModelnameFieldname" name="data[Modelname][fieldname]">


Bạn cũng có thể chỉ ra tên model bằng truyển tên model như tham số đầu tiên (Modelname.fieldname).
<?php echo $form->input('Modelname.fieldname'); ?>
Trong trường hợp bạn muốn sử dụng nhiều tên trường giống nhau, chúng ta có thể tạo ra một mảng array và lưu chúng vào CSDL bằng phương thức saveAll() theo quy ước như ví dụ sau:
<?php
echo $form->input('Modelname.0.fieldname');
echo $form->input('Modelname.1.fieldname');
?>
//Dữ liệu trả về HTML
<input type="text" id="Modelname0Fieldname" name="data[Modelname][0][fieldname]">
<input type="text" id="Modelname1Fieldname" name="data[Modelname][1][fieldname]">

c. Các options trong thẻ input ($options)
c.1. $options['type']
Bạn có thể chỉ định loại của thẻ input tạo ra giống như trong html. Type sẽ được gán hợp lệ như sau: file, password, text, textarea ....

Ví dụ:
<?php echo $form->input('field', array('type' => 'file')); ?>
//Dữ liệu trả về HTML
<div class="input">
<label for="UserField">Field</label>
<input type="file" name="data[User][field]" value="" id="UserField" />
</div>

c.2. $options['options']
Từ khóa này sẽ tạo ra cho bạn một thẻ select input hoặc một thẻ radio group. Nếu muốn sử dụng với thẻ radio, bạn phải dùng thêm $option['type']. Mặc định sẽ tạo ra một thẻ select input. (Lưu ý: từ khóa options sẽ luôn được gán với một mảng array)
Ví dụ:
<?php echo $form->input('field', array('options' => array(1,2,3,4,5))); ?>
//Dữ liệu trả về HTML
<div class="input">
<label for="UserField">Field</label>
<select name="data[User][field]" id="UserField">
<option value="0">1</option>
<option value="1">2</option>
<option value="2">3</option>
<option value="3">4</option>
<option value="4">5</option>
</select>
</div>

Bạn cũng có thể sử dụng cặp key-value như sau:
<?php echo $form->input('field', array('options' => array(
'Value 1'=>'Label 1',
'Value 2'=>'Label 2',
'Value 3'=>'Label 3'
))); ?>
//Dữ liệu trả về HTML
<div class="input">
<label for="UserField">Field</label>
<select name="data[User][field]" id="UserField">
<option value="Value 1">Label 1</option>
<option value="Value 2">Label 2</option>
<option value="Value 3">Label 3</option>
</select>
</div>

c.3. $options['multiple']
Nếu 'mutiple' được gán là true cho một thẻ input mà đầu ra là thẻ select input, thì bạn sẽ có thể lựa chọn nhiều tùy chọn selection cùng một lúc.
Ví dụ:
$form->input('Model.field', array( 'type' => 'select', 'multiple' => true ));

c.4. $options['maxLenght']
Xác định số ký tự cho phép nhập vào trong một thẻ text input.

c.5. $options['label']
Gán nhãn cho một thẻ input khi thẻ đó được hiển thị
Ví dụ:
<?php echo $form->input( 'User.name', array( 'label' => 'The User Alias' ) );?>
//Dữ liệu trả về dạng HTML
<div class="input">
<label for="UserName">The User Alias</label>
<input name="data[User][name]" type="text" value="" id="UserName" />
</div>

Chúng ta cũng có thể gán key label là false nếu không muốn hiển thị nhãn label trong thẻ
Ví dụ:
<?php echo $form->input( 'User.name', array( 'label' => false ) ); ?>
//Dữ liệu trả về dạng HTML
<div class="input">
<input name="data[User][name]" type="text" value="" id="UserName" />
</div>

c.6. $options['id']
Gán giá trị DOM id của một thẻ input.

c.7. $options['default']
Sử dụng kết hợp với thẻ select input. Gán một giá trị là defaul trong tập hợp các tùy chọn đó khi hiển thị .
Ví dụ;
<?php echo $form->input('country', array('options'=>$countries, 'default'=>'US')); ?>

c.8. $options['empty']
Khi sử dụng với thẻ select list, một thẻ option với giá trị rỗng trong list chọn của thẻ input. Nếu muốn có một giá trị rỗng trong option, ta chỉ việc truyển giá trị rỗng.
Ví dụ:
<?php echo $form->input('field', array('options' => array(1,2,3,4,5), 'empty' => '(choose one)')); ?>
//Dữ liệu trả về dạng HTML
<div class="input">
<label for="UserField">Field</label>
<select name="data[User][field]" id="UserField">
<option value="">(choose one)</option>
<option value="0">1</option>
<option value="1">2</option>
<option value="2">3</option>
<option value="3">4</option>
<option value="4">5</option>
</select>
</div>

9. form->hidden: Tạo ra một thẻ input hidden

Cú pháp
$form->hidden(string $fieldName, array $options)
Ví dụ:
<?php echo $form->hidden('field', array('id' => 'field')); ?>
//Dữ liệu trả về HTML
<input type="hidden" name="data[ModelName][field]" id="field" />

10. form->password: Tạo ra một thẻ input dạng password

Cú pháp:
$form->password(string $fieldName, array $options);
Ví dụ:
<?php echo $form->password('pass', array('id' => 'pass')); ?>
//Dữ liệu trả về HTML
<input type="password" name="data[ModelName][pass]" id="pass" />

11. form->text: Tạo ra một thẻ input text

Cú pháp:
$form->text(string $fieldName, array $options);
Ví dụ:
<?php echo $form->text('field', array('id' => 'field')); ?>
//Dữ liệu trả về HTML
<input type="text" name="data[ModelName][field]" id="field" />

12. form->textarea: Tạo ra một thể input textarea

Cú pháp:
$form->textarea(string $fieldName, array $options)
Ví dụ
<?php echo $form->textarea('field', array('id' => 'field')); ?>
//Dữ liệu trả về HTML
<textarea name="data[ModelName][field]" id="field" />

13. form->submit: Tạo ra một nút submit

Cú pháp:
$form->submit(string $caption, array $options)
Tạo ra một nút button submit với nhãn là $captió. Nếu $caption là một URL của một image, thì nút submit sẽ hiện thị như một images.
Ví dụ:
<?php echo $form->submit('save', array('id' => 'field')); ?>
//Dữ liệu trả về HTML
<button type="submit" name="data[ModelName][save]" id="field" />

14. form->checkbox: Tạo ra một thẻ checkbox

Cú pháp:
$form->checkbox(string $fieldName, array $options)
Tạo ra một thẻ checkbox. Phương thức này cũng sẽ tạo ra một thẻ input hidden ẩn để phục vụ gửi dữ liệu lên.
Ví dụ
<?php echo $form->checkbox('done'); ?>
//Dữ liệu trả về dạng HTML
<input type="hidden" name="data[ModelName][done]" value="0" id="UserDone_" />
<input type="checkbox" name="data[ModelName][done]" value="1" id="UserDone" />

15. form->radio: tạo ra một thẻ radio button.

Cú pháp:
$form->radio(string $fieldName, array $options, array $attributes)
Tạo ra một thẻ radio button input. $attributes['value'] để gán giá trị được set mặc định. Thuộc tính radio sẽ tạo ra một label và fieldset với giá trị mặc định, nếu muốn thay đổi thì gán $attributes['legend'] là false.
Ví dụ:
<?php echo $form->radio('User.sex', array(0 => 'male', 1 => 'female'), array('value' => '1')); ?>
//Dữ liệu trả về dạng html
<fieldset>
<legend>Sex</legend>
<input type="radio" name="data[User][sex]" id="UserSex0" value="0"  />
<label for="UserSex0">male</label><input type="radio" name="data[User][sex]" id="UserSex1" value="1" checked="checked"  />
<label for="UserSex1">female</label>
</fieldset>

16. form->select: tạo ra  một thẻ select

Cú pháp:
$form->select(string $fieldName, array $options, mixed $selected, array $attributes, boolean $showEmpty)


Tạo ra một thẻ input select, với các item nằm trong $options, với tùy chọn $selected ta có thẻ chọn một item mặc định được chọn. Với giá trị $showEmpty gán là false, nếu muốn hiện ra một lựa chọn với giá trị trống làm mặc định.
Ví dụ:
<?php echo $form->select('age', array(0 => 'male', 1 => 'female'), '1'); ?>
//Dữ liệu trả về HTML
<select name="data[age]" id="age">
<option value=""></option>
<option value="0">male</option>
<option value="1" selected="selected">female</option>
</select>

17. form->file: Tạo ra một thẻ input file

Cú pháp:
$form->file(string $fieldName, array $options)
Ví dụ:
<?php echo $form->file('fileName', array('id' => 'fileName')); ?>
//Dữ liệu trả về dạng HTML
<input type="file" name="data[fileName]" id="fileName" value="" />

18. form->submitImage: Tạo ra một nút button submit ảnh

Cú pháp:
$form->submitImage(string $path, array $options);
Tạo ra một nút button submit ảnh theo đường chỉ định URL trong $path


Ví dụ:
<?php echo $form->submit('anh.jpg', array('id' => 'anh1')); ?>
//Dữ liệu trả về dạng HTML
<div class="submit"><input type="image" src="/projectName/img/anh.jpg" id="anh1" /></div>

(Chú ý: Tất cả các phương thức được giới thiệu từ phần 9 trở đi đều có thể dùng phương thức input ở phần 8 thay thế được)

Cakephp 1.2 - một số hàm hepler thường dùng (Phần 1)

Với các bạn đã từng làm việc với cakephp hẳn các bạn không lạ gì việc sử dụng các hepler trong cake như form, html, javascript. Sau đây tôi xin liệt kê một số hàm hay sử  dụng nhất trong cakephp, cấu trúc và cách sử dụng chúng.
1. javascript->link:Chỉ link đường dẫn tới file javascript

Cú pháp:

$javascript->link($url, $inline);

$url (require): đường dẫn tới file javascript. Các file javascript sẽ được đặt trong thư mục 'app/webroot/js'. Mặc định url là đường dẫn tới thư mục app/webroot/js/.

$inline: (boolean) . Nếu giá trị là true, thì thẻ script sẽ được in trong thẻ header , nếu là false thì sẽ in trong $script_for_layout. Giá trị mặc đinh là true.
Ví dụ:

<?php echo $javascript->link('script.js', true); ?>
//Dữ liệu trả về html
<script type="text/javascript" src="/test/js/script.js"></script>

2. html->css:link chỉ đường dẫn tới một file css

Cú pháp:

$html->css(mixed $path, string $rel = null, array $htmlAttributes = array(), boolean $inline = true);

Tạo một link tới file css. Nếu $inline được gán là false, thì thẻ css sẽ được đặt bên trong biến $script_for_layout, còn là true thì đặt trong thẻ header. Mặc định đường dẫn trong của file css là /app/webroot/css/.
Ví dụ:

<?php echo $html->css('forms'); ?>
//Dữ liệu trả về html
<link rel="stylesheet" type="text/css" href="/test/css/forms.css" />

//Ta cũng có thể khai báo nhiều file css cùng một lúc
<?php echo $html->css(array('forms','tables','menu')); ?>
//Dữ liệu trả về html
<link rel="stylesheet" type="text/css" href="/test/css/forms.css" />
<link rel="stylesheet" type="text/css" href="/test/css/tables.css" />
<link rel="stylesheet" type="text/css" href="/test/css/menu.css" />

3. html->image: Link đường dẫn tới một file ảnh

Cú pháp:

$html->image(string $path, array $htmlAttributes = array());

Tạo ra một thẻ định dạng là image. Mặc định nó sẽ chỉ tới thư mục /app/webroot/img/
Ví dụ:

<?php echo $html->image('cake_logo.png', array('alt' => 'CakePHP'))?>
//Dữ liệu trả về html
<img src="/img/cake_logo.png" alt="CakePHP" />

4. html->link: Tạo ra một thẻ html link.

Cú pháp:

$html->link(string $title, mixed $url = null, array $htmlAttributes = array(), string $confirmMessage = false,boolean $escapeTitle = true);


Tạo ra một thẻ html link. Các tham số truyền vào là
$title: Nhãn của đường link.
$url: Đường dẫn của link liên kết.
$htmlAttributes: các thuộc tính html của thẻ link.
$confirmMessage: Thông báo khi kích vào link. Mặc định giá trị là false.
Ví dụ:

<?php echo $html->link('Enter', '/pages/home', array('class'=>'button')); ?>
//Dữ liệu trả về HTML
<a href="/pages/home" class="button">Enter</a>

<?php echo $html->link('Delete', array('controller'=>'recipes', 'action'=>'delete', 6), array(), "Are you sure you wish to delete this recipe?");?>
//Dữ liệu trả về html
<a href="/recipes/delete/6" onclick="return confirm('Are you sure you wish to delete this recipe?');">Delete</a>

//Chuỗi query cũng có thể tạo ra từ một thẻ link()
<?php echo $html->link('View image', array('controller' => 'images', 'action' => 'view', 1, '?' => array( 'height' => 400, 'width' => 500))); ?>
//Dữ liệu trả về html
<a href="/images/view/1?height=400&width=500">View image</a>

5. html->url: Tạo ra đường dẫn tới link hiện tại

Cú pháp:

$html->url($path);

Ví dụ:


//Giả sử ta đang trong project test

<?php echo $html->url('cake.jpg'); ?>
//Dữ liệu trả về html
'/test/cake.jpg'
<?php echo $html->url('/file.txt'); ?>
//Dữ liệu trả về html
/test/file.txt

6. form->create: Tạo ra một thẻ form mở

Cú pháp:

$form->create(string $model = null, array $options = array());

Tất cả các tham số có thể là tùy chọn. Nếu không có tham số truyền vào, thì mặc định phương thức là POST, và controller và action nào gọi ra view chứa form này thì khi submit thì form sẽ chuyển dữ liệu về controller và action đấy.
Ví dụ:


//ta tạo ra một form trong action có tên là add
<?php echo $form->create('Recipe'); ?>
//Dữ liệu trả về html:
<form id="RecipeAddForm" method="post" action="/recipes/add">

Các tham số truyền vào:
$model: tên model dùng để khởi tạo form đấy.
$option: Các thuộc tính khai báo thêm cho form đấy bao gồm
+ $options['type']: Chỉ định các phương thức truyền dữ liệu. Giá trị hợp lệ bao gồm 'post', 'get', 'file', 'put' và 'delete'.
Ví dụ:

<?php echo $form->create('User', array('type' => 'get')); ?>
//Dữ liệu trả về html
<form id="UserAddForm" method="get" action="/users/add">

<?php echo $form->create('User', array('type' => 'file')); ?>
//Dữ liệu trả về html
<form id="UserAddForm" enctype="multipart/form-data" method="post" action="/users/add">

+options['url']: Chỉ định đường dẫn khi form truyền dữ liệu. Giá trị url có thể truyền vào một chuỗi hay một mảng.
Ví dụ:

<?php echo $form->create(null, array('url' => '/recipes/add')); ?>
// hoặc
<?php echo $form->create(null, array('url' => array('controller' => 'recipes', 'action' => 'add'))); ?>
//Dữ liệu trả về html:
<form method="post" action="/recipes/add">

<?php echo $form->create(null, array('url' => 'http://www.google.com/search', 'type' => 'get')); ?>
//Dữ liệu trả về html:
<form method="get" action="http://www.google.com/search">

+options['action']:  Cho phép chỉ định một action bất kỳ trong controller hiện tại. Giả sử bạn muốn truyền dữ liệu tới form login trong controller hiện tại, bạn có thể khai báo như sau:
<?php echo $form->create('User', array('action' => 'login')); ?>
//Dữ liệu trả về html:
<form id="UserLoginForm" method="post" action="/users/login">
</form>

7. form->end: tạo ra một thẻ form đóng

Cú pháp:

$form->end('submitName');

Tạo ra một thẻ form đóng trong trường hợp đã sử dụng $form->create.
Ví dụ:

<?php echo $form->create(); ?>

<!-- Form elements go here -->

<?php echo $form->end(); ?>
hoặc:
<?php echo $form->end('Finish'); ?>

//Dữ liệu trả về html

<div class="submit">
<input type="submit" value="Finish" />
</div>
</form>

Thứ Sáu, 16 tháng 1, 2009

Red5 For MacOSX

Download và cài đặt Red5:
- Các bạn vào đây để download Red5
- Sau khi download xong tiến hành cài đặt như bình thường, thư mục mặc định để cài đặt Red5 là Applications

Khởi động và chạy Red5
- Sau khi cài xong các bạn có thể khởi động Red5 bằng các cách sau :
Cách 1 : Vào Applications , tìm đến thư mục Red5 rồi chạy file Red5
Cách 2 : Vào Terminal (Applications/Utilitie/Terminal) :
Gõ đường dẫn tới thư mục Red5 : cd /Applications/Red5/
Sau khi vào thư mục Red5, gõ tiếp : 'ls' để xem toàn bộ file trong thư mục đó.
Các bạn sẽ thấy file red5.sh. Sau đó các bạn gõ lệnh : sh red5.sh.
Như vậy là đã khởi động xong Red5

Sau khi khởi động Red5, vào trình duyệt gõ : http://localhost:8088/ hoặc : http://localhost:5080/, nếu xuất hiện trang web với dòng chữ : Red5 Test Page ở ngay dòng đầu thì nghĩa là bạn đã thành công.

Sau khi trang Web hiện lên, bạn có thể đăng nhập với quyền Admin bằng cách click vào dòng chữ administration interface với username và password mặc định là : admin/admin.
Để đổi username và password mặc định bạn vào : Applications/red5/conf/tomcat-users.xml.

Để tắt Red5, gõ lệnh : sh red5-shutdown.sh

PopUp Window

Có nhiều cách để tạo một cửa sổ window, dưới đây là một mẫu code ngắn, có thể chế biến lại phù hợp với yêu cầu:

-Tạo lớp để có một window resizable, có nút close (các chức năng khác bạn tự thêm vào): file ResizablePanel.as
package
{
import flash.events.MouseEvent;

import mx.containers.TitleWindow;
import mx.controls.Button;
import mx.events.CloseEvent;
import mx.managers.PopUpManager;

public class ResizablePanel extends TitleWindow
{
private var resizer:Button = new Button();

public function ResizablePanel()
{
super();
resizer.addEventListener(MouseEvent.MOUSE_DOWN, resizeDown);
this.showCloseButton="true";

this.addEventListener(CloseEvent.CLOSE, closeDialog);
}
override protected function createChildren():void{
resizer.height=10;
resizer.width = 10;
super.createChildren();
rawChildren.addChild(resizer);
}
override protected function updateDisplayList(w:Number, h:Number):void{
super.updateDisplayList(w,h);
resizer.y = h - resizer.height;
resizer.x = w - resizer.width;
}
private function resizeDown(e:MouseEvent):void{
stage.addEventListener(MouseEvent.MOUSE_MOVE, scalePanel);
stage.addEventListener(MouseEvent.MOUSE_UP, stopScale);
}
private function scalePanel(e:MouseEvent):void{
if((stage.mouseX - x)>50)
width = (stage.mouseX-x);
if((stage.mouseY-y)>50)
height = (stage.mouseY-y);
}
private function stopScale(e:MouseEvent):void{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, scalePanel);
stage.removeEventListener(MouseEvent.MOUSE_UP, stopScale);
}
//function close window
private function closeDialog(event:CloseEvent) : void {
this.parent.removeChild(this);
}
}
}

lớp trên chỉ tạo một window trống. Để có nội dung như ý mình (VD: có form đăng nhập, có ....) bạn tạo một component mxml mở rộng lớp trên ra. Ở đây, để đơn giản, chỉ hiển thị window trống này thôi:

Hiển thị window:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="createPopUpWindow()" layout="absolute" xmlns:local="*">
<mx:Script>
<![CDATA[
import mx.managers.PopUpManager;
function createPopUpWindow():void
{
var popupWindow:Register = new Register();
PopUpManager.addPopUp(popupWindow, this);
}
]]>
</mx:Script>
</mx:Application>

Cài đặt memcache, memcache PHP extension (Linux)

Bước 1
Download  libevent , cài đặt :
#tar -xvf libevent-1.3b.tar.gz
#cd libevent-1.3b
#./configure
#make
#make install;


Bước 2
Download memcache, cài đặt :
#gunzip memcached-1.2.1.tar.gz
#tar -xvf memcached-1.2.1.tar
#cd memcached-1.2.1
#./configure
#make
#make install;


Bước 3
Tạo liên kết cho memcache :
#ln -s /usr/local/lib/libevent-1.3b.so.1 /lib/libevent-1.3b.so.1
memcached -d -u nobody -m 512 127.0.0.1 -p 11211


Bước 4
Cài đặt gói pecl cho PHP (memcache PHP extension):
#wget http://pecl.php.net/get/memcache-2.1.2.tgz
#gzip -df memcache-2.1.2.tgz
#tar -xvf memcache-2.1.2.tar
#cd memcache-2.1.2
#phpize (Chú ý)
#./configure
#make
#make install


Chú ý  : khi gõ lệnh #phpize có thể sẽ gặp lỗi như  sau :
"Cannot find autoconf. Please check your autoconf installation"
Lỗi này là do bạn chưa install autoconf trên hệ thống. Bạn cần cài đặt autoconf và m4 cho hệ thống
Cách làm như  sau:
# cd /usr/src
# wget http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz
# tar -zvxf m4-1.4.9.tar.gz
# cd m4-1.4.9/
# ./configure
# make
# make install
# cd ../
# wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.62.tar.gz
# tar -zvxf autoconf-2.62.tar.gz
# cd autoconf-2.62/
# ./configure
# make
# make install
Sau đó bạn có thể configure và install memcache PHP extension bình thường.

Bước 5
Tìm file php.ini, memcache.so bằng lệnh :
#whereis php.ini

#whereis memcache.so
Nó sẽ chỉ đường dẫn vào cả 2 file. Mở file php.ini.
Vào thư mục chứa file, gõ lệnh :
#nano php.ini
thêm câu lệnh sau vào file php.ini :
extension = /path/memcache.so
path là đường dẫn trực tiếp vào file memcache.so.

Trên đây là tất cả các bước cần thiết để cài đặt memcache cho hệ thống.
Chúc mọi người thành công !


Thứ Năm, 8 tháng 1, 2009

Khắc phục lỗi ảnh PNG transparent trong IE6

Khi lưu ảnh dưới dạng .PNG , chúng ta bỏ đi phần background của ảnh đó để hình nền trở nên trong suốt. Nhưng khi đưa lên website và dùng trình duyệt IE6 thì hình nền của ảnh đó sẽ không còn trong suốt nữa mà trở thành mầu trắng. Sau đây là cách khắc phục để khi duyệt trên IE6 ảnh đó vẫn có hình nền trong suốt.

Các bạn ấn vào đây để download file dính kèm.

Sau khi download về các bạn giải nén ra và copy 2 file unitpngfix.js và clear.gif vào các thư mục js và img tương ứng.

Mở file unitpngfix.js và chỉnh đường dẫn tới thư mục chứa ảnh clear.gif tại dòng đầu tiên.

Sau khi chỉnh xong, chèn đoạn code sau vào file mà bạn muốn ảnh sẽ hiển thị là xong







Nguồn :http://labs.unitinteractive.com/unitpngfix.php

Thứ Hai, 5 tháng 1, 2009

Cài đặt Memcache

1. Cài đặt Memcached Server:
a. Download
i. memcached for Windows
ii. memcached for Win32
b. Unzip thu muc memcache: c:\memcache
c. Cài đặt service:
i. cmd: c:\memcache\memcached -d install
ii. cmd: c:\memcache\memcached -d start
Trên đây là cài đặt cho windows. Cài trên CentOS dùng lệnh yum install memcached, hoặc tải file RPM về cài đặt.