Kr@z7_&_U3vNtv_$>

MySQL hỗ trợ tiếng Việt.

Posted in Ubuntu by krazv7rvn9 on 29/03/2010

Implement Vietnamese Collation in MySQL

MySQL has yet to integrate support for Vietnamese Collation (Bug #4745). You can, in the meantime, add the missing collation simply by replacing the Index.xml file in <MySQL Server 5.x>\share\charsets directory with this Index.xml, which implements the Vietnamese collation for both utf8 and ucs2 charsets. As a result, you will have native support for both sort and compare operations in MySQL 5.x Community Server. (Be sure to restart the database server for it to read in the new collations.)

Using MySQL Administrator or Query Browser tool, you can set the Charset and Collation for Table and Columns when you get to MySQL Table Editor dialog. With the modified Index.xml installed, you can see the new Vietnamese Collations after selecting either utf8 or usc2 for Charset.

With the new collations, you can run the query as follows, assuming your table has a column with one character of the Vietnamese alphabetical set in each row:

SELECT letter FROM letters WHERE letter='a' COLLATE utf8_vietnamese1_ci;

would return ‘a’, ‘à’, ‘ả’, ‘ã’, ‘á’, ‘ạ’, and their capitals, not necessarily in any order. The same result would also be returned for any diacritical variation of the character ‘a’ in the WHERE clause.

On the other hand, the query

SELECT letter FROM letters WHERE letter='a' COLLATE utf8_vietnamese2_ci;

would return only ‘a’ and ‘A’.

To put the result set in Vietnamese alphabetical order, add the ORDER BY clause with appropriate collation:

SELECT letter FROM letters WHERE letter='a' COLLATE utf8_vietnamese1_ci ORDER BY letter COLLATE utf8_vietnamese2_ci;

References:

Aethros 9285 và 928X trên Karmic 9.10

Posted in Ubuntu by krazv7rvn9 on 20/03/2010

Trên Ubuntu Karmic 9.10, các card wifi này đều hoạt động, nhưng tín hiệu kém, yếu hơn nhiều so với khi chạy trên windows.
Để có tín hiệu mạnh hơn, ta phải làm 2 việc:
- Cài đặt wicd thay cho Gnome network manager.
sudo apt-get install wicd
- Cài đặt module backport cho kernel
sudo apt-get install linux-backports-modules-karmic
Có 2 lệnh vậy thôi mà làm mình mất 2 ngày để lục lọi từ ubuntuforums đến các thể loại hầm bà lằng khác! Thật sự bó tay! :(

Lật ngược cái webcam lại nào!!!

Posted in Ubuntu by krazv7rvn9 on 20/03/2010

Sau hai ngày lăn lộn, cuối cùng cũng lộn ngược được cái webcam của ASUS K40IN về đúng chiều! Chấm dứt 2 hôm cầm lộn ngược máy tính để skype :D

Thêm dòng này vào trong /etc/apt/sources.list.d/libv4l.list: deb http://ppa.launchpad.net/libv4l/ppa/ubuntu karmic main
Rồi chạy lệnh:
sudo apt-get install libv4l-0
Với mỗi 1 chương trình dùng webcam, ví dụ như skype, thay vì chạy lệnh /usr/bin/skype để kích hoạt chương trình, ta phải chạy một lệnh loằng ngoằng hơn: LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so skype

Done!

Ubuntu Karmic 9.10 on ASUS K40IN T6600

Posted in Ubuntu by krazv7rvn9 on 19/03/2010

dinhtrung@dinhtrung-laptop:~$ lspci
00:00.0 Host bridge: nVidia Corporation MCP79 Host Bridge (rev b1)
00:00.1 RAM memory: nVidia Corporation MCP79 Memory Controller (rev b1)
00:03.0 ISA bridge: nVidia Corporation MCP79 LPC Bridge (rev b3)
00:03.1 RAM memory: nVidia Corporation MCP79 Memory Controller (rev b1)
00:03.2 SMBus: nVidia Corporation MCP79 SMBus (rev b1)
00:03.3 RAM memory: nVidia Corporation MCP79 Memory Controller (rev b1)
00:03.5 Co-processor: nVidia Corporation MCP79 Co-processor (rev b1)
00:04.0 USB Controller: nVidia Corporation MCP79 OHCI USB 1.1 Controller (rev b1)
00:04.1 USB Controller: nVidia Corporation MCP79 EHCI USB 2.0 Controller (rev b1)
00:08.0 Audio device: nVidia Corporation MCP79 High Definition Audio (rev b1)
00:09.0 PCI bridge: nVidia Corporation MCP79 PCI Bridge (rev b1)
00:0b.0 SATA controller: nVidia Corporation MCP79 AHCI Controller (rev b1)
00:10.0 PCI bridge: nVidia Corporation MCP79 PCI Express Bridge (rev b1)
00:15.0 PCI bridge: nVidia Corporation MCP79 PCI Express Bridge (rev b1)
00:16.0 PCI bridge: nVidia Corporation MCP79 PCI Express Bridge (rev b1)
02:00.0 VGA compatible controller: nVidia Corporation C79 [GeForce
G102M] (rev b1)
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 01)
04:00.0 Network controller: Atheros Communications Inc. AR9285 Wireless Network Adapter (PCI-Express) (rev 01)

dinhtrung@dinhtrung-laptop:~$
dinhtrung@dinhtrung-laptop:~$
dinhtrung@dinhtrung-laptop:~$ lsusb
Bus 001 Device 002: ID 04f2:b071 Chicony Electronics Co., Ltd 2.0M UVC WebCam / CNF7129
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 1c4f:0003 SiGma Micro
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
dinhtrung@dinhtrung-laptop:~$

Nói chung vấn đề lớn nhất gặp phải với dòng máy này là:
- Không cấu hình được Touchpad.
- Webcam bị lộn ngược.
- Wifi chập chờn lúc được lúc không.
Còn lại thì ổn cả.

Sử dụng Google Calendar trên Thunderbird

Posted in Ubuntu by krazv7rvn9 on 15/03/2010

Để sử dụng được Google Calendar trên Thunderbird, ta phải cài 2 extension là Lightning và Provider for Google Calendar.
1.Mở Thunderbird 3.03, Công cụ > Tiện ích.
2.Trong thẻ Lấy thêm tiện ích, nhập vào từ khóa Lightning và Enter, rồi nhấn vào tiện ích Lightning.
3. Nhập tiếp Google Calendar để tìm kiếm Provider for Google Calendar, rồi cài thêm tiện ích này.
4. Khởi động lại Thunderbird.
Sau khi khởi động lại, ta có thể bắt đầu cấu hình Lightning để đồng bộ dữ liệu với Google Calendar như sau:
- Mở Lightning bằng cách chọn Sự kiện và tác vụ > Lịch.
- Chọn Tập tin > Lịch mới.
- Chọn Google Calendar.
- Mở trang calendar.google.com, bấm vào danh sách lịch và chọn Cài đặt lịch cho cuốn lịch muốn đồng bộ.
- Nhấp vào nút XML ở phần Địa chỉ lịch. Cóp vào trong Thunderbird.

Điền Form với jQuery Populate.

Posted in Ubuntu by krazv7rvn9 on 15/03/2010

jQuery Populate là một plugin giúp tự động điền dữ liệu vào form từ một chuỗi JSON. Plugin này giúp ta tự động điền giá trị của Form ngay khi người dùng mở trang web, hoặc cập nhật thông tin từ server.
Với PHP5, ta có thể cung cấp json dễ dàng nhờ hàm json_encode() được tích hợp sẵn.
Ví dụ đơn giản:

<form id="my-form" method="post">
 <label>Username</label>
 <input name="username" value="" id="username" maxlength="40" type="text"><br>
 <label>Role</label>
 <select name="role" id="role">
 <option value="0">admin</option>
 <option value="1">editor</option>
 <option value="2">user</option>
 </select><br>
 <label>Sex</label>
 <input name="sex" value="male" class="check" id="aa8da" type="radio">
 <input name="sex" value="female" class="check" id="c19cb" type="radio">
 <input name="sex" value="unknown" class="check" id="ccf23" type="radio">
 <hr>
 <input name="submit" value="Gửi" id="submit" type="submit">
 <input name="reset" value="Nhập lại" id="reset" type="reset"><br>
</form>
<button type="button" id="populate-form">Populate Default Values<button>
<button type="button" id="request-populate-form">Request and Populate</button>
<script type="text/javascript">
 $(document).ready(function(){
 $("#populate-form").click(function(){
 $("#my-form").populate({"username" : "Username that you like", "Role" : 1, "Sex" : "unknown"});
 });
 $("#request-populate-form").click(function(){
 $.getJSON("populate.php", function(jsonobj){$("#my-form").populate(jsonobj)});
 });
 });
</script>

Ở form trên, có 2 nút. Nút Populate Default Value demo việc sử dụng jQuery Populate để điền form ngay khi người dùng mở trang web.
Nút Request and Populate demo việc gửi một truy vấn tới server, cụ thể là tới file populate.php để lấy các giá trị cần điền vào form. Trên server ta cần tạo thêm một PHP file tên là populate.php với nội dung sau:

<?php
 $data = array('username' => 'demo', 'role' => 2, 'sex' => 'unknown');
 echo json_encode($data);
?>

Trung đổi số điện thoại, mong mọi người update giúp.

Posted in Ubuntu by krazv7rvn9 on 10/03/2010

Hi all,
Tuần vừa rồi mình mất máy di động nên giờ số điện thoại cũ : 01685287522 mình không còn sử dụng nữa.
Hiện tại mình đang dùng hai số này:
- 0926843166
- 01997785235

Mong mọi người update lại giúp Trung nhé. Thanks.

Sử dụng tính năng tạo bài viết qua Email trên WordPress

Posted in Ubuntu by krazv7rvn9 on 07/03/2010

WordPress cho phép ta tạo các bài viết thông qua Email.
Sau khi đăng nhập vào WordPress admin (http://yourname.wordpress.com/wp-admin), ta chọn mục Trang web của tôi.
Trong trang này, ta thấy ở phía bên phải có cột Post by Email. Bấm dấu kiểm trong hộp đó, ta nhận được một địa chỉ email đặc biệt để gửi bài viết tới.
Ngoài ra, ở ngay cột trước đấy, ta còn có thể yêu cầu WordPress lấy tin từ Facebook, Twitter và đăng tải lên ngay khi ta viết tin trên các ứng dụng này. Quy trình sẽ bao gồm việc đăng nhập vào tài khoản Facebook hay Twitter để xác nhận.

Xóa dữ liệu trùng lặp trong MySQL

Posted in Web Dev by krazv7rvn9 on 07/03/2010

Với 3 lệnh đơn giản, ta có thể lọc toàn bộ một bảng MySQL, xóa đi các dòng có một trường giống nhau.
mysql > CREATE TABLE new_table as
--------> SELECT * FROM old_table WHERE 1 GROUP BY [tên_cột_cần_lọc];
mysql > DROP TABLE old_table;
mysql > RENAME TABLE new_table TO old_table;

Peace of cake, huh?

Tagged with: , ,

Thiết kế CSDL với Dia

Posted in GNOME Desktop, Web Dev by krazv7rvn9 on 23/02/2010

Thiết kế CSDL với Dia

Trong bài viết này, tôi sẽ giới thiệu sơ bộ về cách tạo cấu trúc CSDL với Dia. Trong quá trình thiết kế, việc sử dụng hình ảnh để mô tả một CSDL quan hệ sẽ giúp nhà phát triển có cái nhìn trực quan và tổng quát về hệ thống. Tuy nhiên, quá trình mô tả bằng hình vẽ gặp nhiều khó khăn, nhất là khâu cập nhật mỗi khi có thay đổi trong việc thiết kế. Mỗi khi tạo thêm một cột mới, hoặc thay đổi thiết kế, bạn phải sửa lại sơ đồ của mình để đồng bộ nó với nội dung SQL cần thực thi. Ngoài ra, vì mỗi một hệ CSDL đều có cú pháp riêng, khiến cho việc đồng bộ sơ đồ CSDL với tập lệnh tạo ra CSDL đó cho mỗi nền CSDL thành ra càng khó khăn hơn. Vì vậy, bài viết này sẽ hướng dẫn bạn cách ứng dụng Dia để thiết kế CSDL hiệu quả hơn.

Dia là một chương trình để thiết kế sơ đồ. Trong bài viết này, ta sẽ sử dụng tính năng thiết kế UML trong Dia để tạo sơ đồ CSDL. Ngoài ra, bằng việc sử dụng tedia2sql, một văn lệnh Perl giúp chuyển đổi từ sơ đồ Dia sang lệnh SQL, ta có thể lấy được mã lệnh tương ứng với CSDL trên nền CSDL mình cần.

Trước tiên, ta phải cài đặt Dia và tedia2sql. Tải tedia2sql tại đây, và Dia tại đây. Cách cài đặt thì tùy vào bản phân phối Linux bạn có. Nếu không dùng Linux, thì bạn nên thử xem! :) Cũng dễ thôi mà!

Mở Dia, tạo một đồ hình mới và lưu nó dưới dạng “employee.dia”. Chọn bộ đối tượng UML từ danh sách các mẫu đồ hình. Bằng cách sử dụng các đối tượng UML ta có thể biểu diễn các bảng và định nghĩa cụ thể các thành phần cấu thành nên CSDL của mình. Dưới đây xin phép tổng hợp lại các thành phần UML chính và cách sử dụng chúng:

Các đối tượng UML trong Dia

Đối tượng LớpClass (Lớp) biểu diễn một bảng trong CSDL. Tên lớp chính là tên bảng trong CSDL, và các thuộc tính của lớp sẽ tương ứng với các trường trong bảng. Thuộc tính có thể là public (công), private (riêng) hay protected (được bảo vệ). Những thuộc tính được bảo vệ sẽ tương ứng với khóa chính của bảng. Ta sẽ đi sâu tìm hiểu lớp trong phần sau.

Đối tượng Thành phầnComponent (Thành phần) là một đối tượng đặc biệt, cho phép ta mô tả danh sách các giá trị mặc định sẽ được chèn vào trong bảng, giống như viết các câu lệnh “insert into ..” trong tệp lệnh SQL.

Đối tượng Gói nhỏSmall Package (Gói nhỏ) biểu diễn một ánh xạ kiểu. Các ánh xạ kiểu được sử dụng để thêm các kiểu dữ liệu SQL một cách tùy ý, như kiểu TINYINT trong MySQL chả hạn.

Giờ ta sẽ bắt tay vào việc tạo bảng đầu tiên. Chọn đối tượng Class trong mục đối tượng UML rồi bấm chuột trái vào trong cửa sổ soạn thảo sơ đồ. Bấm chuột phải trong lớp mới tạo và chọn “Show properties” (“Thuộc tính”). Hộp thoại thuộc tính lớp sẽ hiện lên. Ta sẽ phải chỉnh sửa lại một số thuộc tính được liệt kê dưới đây.

Trước hết, trong thẻ “Class” (“Lớp”), gõ tên bảng (employee) vào trong trường “Class Name” (“Tên lớp”). Tiếp đó nhấn chọn thẻ “Attributes” (“Thuộc tính”) rồi gõ vào các thuộc tính lớp, ứng với các cột trong bảng. Trong trường “Type: “ (“Kiểu: “), nhập kiểu dữ liệu SQL mà cột này sử dụng, như INT, VARCHAR hay BOOL. Nếu muốn đồ hình của mình hỗ trợ nhiều nền tảng CSDL khác nhau, hãy sử dụng các kiểu dữ liệu chuẩn ANSI SQL 1992, hoặc sử dụng ánh xạ kiểu. Ta sẽ bàn luận thêm về ánh xạ kiểu sau. Trong trường “Value: “ (“Giá trị”), ta nhập giá trị mặc định của trường (“NOT NULL” chả hạn). Nếu cột được thêm vào là một khóa chính, ta chọn “Protected” trong trường “Visibilitiy: “ (“Khả kiến”). Lưu ý rằng với các khóa chính, ta không cần nhập “NOT NULL” vào trong ô “Value :”. Ảnh chụp màn hình dưới đây minh họa cho quá trình sửa thuộc tính của Lớp.
Hộp thoại thuộc tính Lớp
Tiếp tục tạo thê các bảng có trong CSDL. Ví dụ, ta có 2 bảng “employee” và “department” với các cột như hình vẽ bên dưới (lưu ý là dấu ‘#’ ở phía trước một thuộc tính biểu diễn độ khả kiến “Protected”, ứng với trường khóa chính của bảng):

Ví dụ trên mô tả quan hệ của 2 bảng chứa dữ liệu về nhân viên và phòng ban mà họ làm việc. Giả dụ ta có một danh sách các phòng ban mặc định, được thêm vào ngay khi CSDL được tạo ra. Để thực hiện điều này, ta sử dụng đối tượng “Component” trong các đối tượng UML. Chọn đối tượng “Component” và thêm nó vào trong cửa sổ soạn thảo đồ hình. Bấm phải vào đối tượng mới thêm, và chọn “Properties” (“Thuộc tính”).
Sơ đồ minh họa với 2 bảng
Trong hộp thoại hiện ra, ta nhập giá trị sẽ dùng trong câu lệnh “INSERT INTO” vào trường “Stereotype: “. Lấy ví dụ, để thêm vào danh sách mặc định các phòng ban, ta cần viết các câu SQL sau:

insert into department (department_id, name) values (1, 'Marketing');
insert into department (department_id, name) values (2, 'Production');
insert into department (department_id, name) values (3, 'Design');

Vì vậy, trường “Stereotype: ” sẽ chứa nội dung là “department (department_id, name)”. Nhấn OK để đóng hộp thoại thuộc tính thành phần. Tiếp đến, trong hộp đối tượng Component, ta nhập các giá trị muốn thêm vào, mỗi giá trị một dòng.
Sơ đồ với đối tượng Thành phần, tương ứng với dữ liệu mặc định
Giờ ta sẽ nói về ánh xạ kiểu. Các ánh xạ kiểu được dùng khi bạn muốn cấu hình các kiểu dữ liệu tự định nghĩa. Ví dụ, ta có thể tạo ánh xạ kiểu cho dữ liệu có thuộc tính auto_increment trong MySQL. Đây là một tính năng mà MySQL hỗ trợ, nhưng các nền CSDL khác thì chưa chắc đã có. Giả dụ rằng ta có một trường khóa chính với thuộc tính auto_increment này. Nhưng ta muốn CSDL của mình vừa dùng được cho MySQL, vừa dùng được cho Apache Derby. Vì cách khai báo trên 2 nền CSDL này khác nhau, nên ta sẽ sử dụng một ánh xạ kiểu tự chọn và đặt SQL riêng cho từng nền CSDL.

Các ánh xạ kiểu được tạo bằng đối tượng Small Package.

Trong trường “Stereotype: ” ta nhập nền CSDL muốn dùng. Ví dụ, “mysql: typemap”. Để biết các nền CSDL nào mà tedia2sql hỗ trợ, hãy gõ lệnh tedia2sql –help. Một số nền CSDL phổ dụng là: postgres, mysql, sybase, oracle, db2, và innodb. Nhấn OK để đóng hộp thoại Thuộc tính. Bên trong hộp Small Package, ta nhập các kiểu tùy chọn của CSDL đó. Ví dụ, ta sẽ tạo một kiểu dữ liệu tùy chọn với tên “identity”. Khi tạo tệp lệnh SQL từ sơ đồ, tedia2sql sẽ thay thế kiểu dữ liệu này với kiểu dữ liệu ta định nghĩa trong hộp Small Package. Dưới đây là một số ví dụ:

MySQL typemaps

identity: int unsigned auto_increment
bigid: bigint unsigned auto_increment
Apache Derby typemaps

identity: int generated by default as identity
bigid: long generated by default as identity

Thực hiện lại việc cấu hình Small Package cho Apache Derby dùng Stereotype “db2: typemap”. Giờ ta đã định nghĩa xong các kiểu dữ liệu tự chọn. Ta có thể thay đổi kiểu dữ liệu của trường employee_id từ “int” thành “identity”. Sơ đồ của ta giờ có dạng như hình vẽ bên dưới:
Sơ đồ với đối tượng Small Package, tương ứng với kiểu dữ liệu đặc tả
Cuối cùng, ta sẽ dùng tedia2sql để tạo CSDL tương ứng từ sơ đồ cho nền CSDL MySQL và Apache derby. Tuy nhiên, trước khi chạy tedia2sql, ta phải vá lại chương trình này, để sửa lại lỗi định dạng lệnh SQL của tedia2sql để hỗ trợ các ánh xạ kiểu. Sửa lại văn lệnh tedia2sql (/usr/bin/tedia2sql) và chú thích lại các dòng trong hàm parseTypeMap(..) sau:

$defStr =~ s/s//g; # ignore spaces
     -- thành --
#   $defStr =~ s/s//g; # ignore spaces

Giờ ta có thể tạo CSDL mình cần:

$ tedia2sql -i employee.dia -o employee-mysql.sql -t mysql -d
$ tedia2sql -i employee.dia -o employee-derby.sql -t db2 -d

Hai lệnh trên sẽ tạo 2 tệp SQL ứng với nền MySQL và Apache derby. Nếu bạn xem các tệp tin này, bạn sẽ thấy tedia2sql xử lý các ánh xạ kiểu như thế nào:

MySQL

-- employee
create table employee (
  employee_id                int unsigned auto_increment not null,
  department_id             int not null,
  first_name                varchar(255) not null,
  last_name                 varchar(255),
  start_date                date,
  constraint pk_Employee primary key (employee_id)
) ;

Apache Derby

-- employee
create table employee (
  employee_id                int generated by default as identity  not null,
  department_id             int not null,
  first_name                varchar(255) not null,
  last_name                 varchar(255),
  start_date                date,
  constraint pk_Employee primary key (employee_id)
) ;

Các tập tin trong ví dụ trên:

Ta có thể chạy thử các tệp SQL được tạo bởi tedia2sql và tạo CSDL employee như sau:

MySQL

$ mysql -u user -p dbname < employee-mysql.sql

Apache Derby

$ java -cp derby.jar:derbytools.jar \
       -Dderby.system.home=/path/to/dbroot \
       -Dij.protocol=jdbc:derby: \
       -Dij.database='employee;create=true'
    org.apache.derby.tools.ij employee-derby.sql

Đối với các dự án cỡ trung và nhỏ, việc tạo CSDL bằng Dia và tạo tệp SQL thông qua tedia2sql thực sự giúp bạn tiết kiệm không ít thời gian. Bạn có thể xuất trực tiếp sơ đồ thành ảnh jpg, png, eps, tiff, pdf để trình bày với các thành viên khác trong nhóm. Ngoài ra, tedia2sql còn hỗ trợ rất nhiều tính năng, như đánh chỉ mục, khóa ngoại lai, views v..v… Xin xem thêm: hướng dẫn sử dụng tedia2sqlHướng dẫn Dia.

Chúc vui!

Follow

Get every new post delivered to your Inbox.