Kho tháng 11/2007

Thứ sáu, 30 Tháng mười một năm 2007 05:26:16 ICT

Chạy được Compiz rồi

Bố khỉ. Mấy lần trước thử Compiz, tuy nó chạy thật, nhưng các cửa sổ terminal luôn trống rỗng. Cũng may, cuối cùng cũng tìm ra nguyên nhân, thiếu Option "XaaNoOffscreenPixmaps" trong xorg.conf!

Với XAA thì Compiz chạy mượt (Intel 945GM), mỗi tội Xv không hoạt động (đồng nghĩa với việc xem phim sẽ nóng hơn, ý là nóng cái CPU hơn). Không rõ các trò chơi 3D chạy ở chế độ toàn màn hình có hoạt động hay không.

Một khi đã thử XAA rồi mà chuyển qua "hàng hiệu" EXA thì sẽ thất vọng. CPU bay vút, màn hình cà giựt... Giờ hiểu tại sao Carl Worth phải đầu tư cải tiến driver cho chip Intel rồi.

TB. Em không chảnh tới độ chơi compiz-fusion. Cần là làm cho thằng gkrellm mờ đi một chút, kế đến là một cái gì đó tương tự Exposé. Tạm thời thoả mãn (vẫn không hài lòng lắm với switcher của compiz bởi vì nó không chơi tốt với libwnck).


Cập nhật 2 lần. Lần cuối: Tue Aug 08 11:22:15+0011 2017

Tác giả: pclouds | Liên kết tĩnh | Linux, Mánh và mẹo

Thứ tư, 28 Tháng mười một năm 2007 20:26:04 ICT

Định dạng nguồn cho words-vi

Sau khi đã có được cột đầu tiên, việc nhập tiếp cột thứ hai, từ loại, sẽ khó khăn hơn nhiều. Việc đầu tiên là sẽ lưu như thế nào. Có một số yếu tố cần xem xét:

  1. Có thể dễ dàng chỉnh sửa bằng trình soạn thảo văn bản
  2. Có thể tận dụng diff để so sánh giữa các phiên bản
  3. Có thể kiểm tra để bảo đảm tính toàn vẹn, đúng đắn của dữ liệu
  4. Có thể chuyển sang định dạng khác nếu cần
  5. Không gây khó dễ việc cập nhật từ các nhánh phát triển khác nhau

Có một số lựa chọn để xem xét. Tuy cũng định hướng "từ điển điện tử", nhưng khác với babiloo, words-vi nhắm đối tượng sử dụng là máy tính nhiều hơn là người, do đó lựa chọn cũng không giống với lựa chọn của babiloo. Các lựa chọn bao gồm:

  • XML
  • Tương tự TeX hay NROFF
  • WordNet
  • Dùng nhiều tập tin
  • COMLEX (Lisp)

Có một số định dạng khác như những định dạng được dùng trong Penn TreeBank hoặc FrameNet. Tuy nhiên rõ ràng mục đích của những định dạng này khác hoàn toàn với words-vi nên loại từ đầu.

Hãy xét từng lựa chọn một. XML vi phạm yếu tố thứ nhất: chỉnh sửa XML bằng trình soạn thảo văn bản rất nhọc nhằn (mặc dù XML lại mạnh ở yếu tố 3 và 4).

Cách dùng một định dạng tương tự TeX hoặc NROFF (dạng thức DICF(Dictionary Interchange Format) dùng NROFF) có cái dở là xử lý phức tạp. Vả lại soạn thảo cũng dễ sai mà đọc cũng khó (đặc biệt trong trường hợp cần nhóm một số mục thông tin thành một khối).

Giải pháp WordNet đúng ra là hai giải pháp. Giải pháp dùng định dạng kết quả của WordNet hoàn toàn không thích hợp do tất cả thông tin của một mục từ nằm trên một dòng, rất khó để so sánh hai phiên bản khác nhau (vi phạm yếu tố thứ hai), lại càng khó điều chỉnh. Giải pháp dùng định dạng nguồn lại quá lạm dụng ký hiệu, cực kỳ khó hiểu (dẫn đến dễ nhập sai, hiểu sai).

Cách dùng nhiều tập tin (từ loại một tập tin riêng, diễn giải một tập tin riêng...) vi phạm yếu tố 3. Nếu ta quên một mục nào đó trong tập tin chứa từ loại thì sao? Hai tập tin từ và từ loại sẽ không còn tương ứng, làm sai lệch hoàn toàn nội dung. Một giải pháp khác là tập tin từ loại sẽ chứa hai cột, cột từ và từ loại. Nếu mục từ bị gõ sai, ta phải sửa tất cả các tập tin, không hay lắm. Giải pháp thay thế này nghe có vẻ không tồi.

Giải pháp cuối cùng là dùng Lisp. Thay vì định nghĩa mới, ta có thể tận dụng định dạng của COMLEX. Đây là một ý tưởng hết sức hấp dẫn trong bối cảnh vừa đọc On Lisp. Một cơ hội lý tưởng để thực tập Lisp. Nói chung giải pháp này hơn cách dùng nhiều tập tin ở chỗ tập trung tất cả thông tin của một mục từ ở một chỗ. Bù lại, viết Lisp, tuy hấp dẫn, không phải là một giải pháp phù hợp cho nhiều người, đặc biệt nếu không phải "mọi máy tính" (computer geek).

Tóm lại có hai cách có thể áp dụng cho words-vi là dùng nhiều tập tin, hoặc dùng định dạng tương tự COMLEX. Nên chọn cách nào?

Góp ý của lngt:

Dùng OpenOffice.org Spreadsheet đẻ nhập liệu. Xong rồi muốn xuất ra gì chả được. Hế hế :D

Nếu liệt các chương trình bảng tính vào loại "soạn thảo văn bản" luôn thì coi như COMLEX bị loại, chiến thắng thuộc về cách dùng nhiều tập tin. :) Ừ, mấy cái này mà dùng chương trình bảng tính thì cũng tiện thật.


Cập nhật 4 lần. Lần cuối: Tue Aug 08 11:22:15+0011 2017

Tác giả: pclouds | Liên kết tĩnh | Tiếng Việt, OSS

Chủ nhật, 25 Tháng mười một năm 2007 19:11:31 ICT

On Lisp

Định nghe mấy album mới chép về. Cuối cùng lại đi đọc On Lisp. Hậu quả về thị giác là giờ nhìn toàn thấy những đường cong gợi cảm, những vầng trăng (khuyết) và mấy cái lưỡi liềm. Hậu quả vật lý là, ngoài Emacs, giờ lại có thêm guile, scsh, cmucl.

Lisp quả là một ngôn ngữ thú -vật- vị. On Lisp cho rằng mã Lisp đẹp hơn. Trông như dòng chảy, trong khi mã của imperative language nhìn sắc cạnh, "thô". Nói về khía cạnh "đẹp" của Lisp mà không trưng cái hình này ra thì đúng là mất hết ý nghĩa:

:http://img264.imageshack.us/img264/1397/lispnd7.png

Quả thật nếu đã luyện mắt để nhìn phần nội dung, chứ không nhìn mấy cái dấu ngoặc, thì cũng không đến nỗi (đó là nhìn thôi, để hiểu, cần một cái đầu mới). On Lisp tập trung nhiều về lambda và macro, đặc biệt là macro.

Có cái hay là On Lisp giải thích rõ ràng sự khác nhau giữa dynamic scoped và lexical scoped. Đây là cái trước đây dù nghe nhưng chỉ hiểu lờ mờ. Mọi chuyện bắt đầu từ cái gọi là "biến tự do", những biến không thể xác định trước, phụ thuộc vào ngữ cảnh gọi hàm. Cách xác định "biến tự do" quy định biến thể Lisp đó là dynamic scoped hay lexical scoped. Nếu tìm biến tự do từ ngữ cảnh khai báo hàm thì đó là lexical scoped, còn nếu dựa vào ngữ cảnh gọi hàm thì đó là dynamic scoped. Scheme là lexical scoped. Common Lisp chơi cả hai. Elisp là dynamic scoped.

Lambda dựa trên lexical scoped. Có thể coi lambda như là tạo một đối tượng động, gắn liền với 1 hàm cụ thể. Điểm khác biệt là ta không khai báo "đối tượng" tường minh, và các "biến thành phần" của đối tượng chính là các biến tự do. Qua On Lisp còn biết thêm lệnh labels, có tác dụng giống như let. Nếu let tạo ra biến cục bộ thì labels tạo ra hàm cục bộ.

Một phần lớn của On Lisp được dành để nói về macro. Lisp macro (nghe hơi cao ngạo chút) không tầm thường như C macro hay đại loại thế. Điểm khác biệt đầu tiên: C macro là macro ở mức lexical trong khi Lisp macro là ở mức syntax. Sự khác biệt này rất dễ nhận ra. Ai đã từng dùng macro trong C có lẽ cũng gặp qua những lỗi hết sức khó hiểu do macro gây ra, ví dụ như thiếu dấu ngoặc, dấu nháy... do C macro chỉ thay thế ở dạng văn bản, sau đó trình biên dịch mới xây dựng cây cú pháo từ kết quả. Với Lisp thì ngược lại, Lisp macro thay thế ở mức cây cú pháp. Mà thực ra cây cú pháp của lisp đơn giản chỉ là danh sách lồng nhau. Cái sự đơn giản hơi quá đáng này (một trong những nguyên nhân làm Lisp rất khó đọc) lại là một thế mạnh của Lisp. Do cấu trúc cú pháp quá đơn giản, ta có thể dùng macro để thay thế, hay nói đúng hơn là chuyển đổi, cây cú pháp, dẫn đến phát sinh chương trình động. Lisp macro không chỉ đơn thuần là một tí mô tả về cách phát sinh một... cái gì đấy. Lisp macro là một chương trình (theo nghĩa hẹp, kiểu một hàm) có nhiệm vụ biến đầu vào thành một mớ danh sách lồng nhau mà Lisp có thể hiểu được.

Các ngôn ngữ động khác như Perl, Ruby... đa phần đều có lệnh eval, cho phép định nghĩa động hành vi của chương trình. Tuy nhiên do cú pháp phức tạp, phần phát sinh thường đơn giản chỉ là tìm và thay thế (kiểu PHP), không phức tạp đến mức chuyển đổi cấu trúc (kiểu XSLT). Và do cú pháp phức tạp, lại phát sinh mã động ở mức lexical (như C macro), nên dễ gây ra lỗi hơn, so với cách trực tiếp tạo ra cây cú pháp như Lisp macro.

Quay sang Lisp và functional programming. Theo On Lisp (và thực tế quả vậy), Lisp có thể hoạt động theo cả hai mô hình imperative programming và functional programming. Tuy nhiên functional programming thì ưu việt hơn. On Lisp nhìn functional programming theo kiểu: các hàm nhận đầu vào và trả kết quả về mà không gây ra các hiệu ứng phụ nào. "Hiệu ứng phụ" ở đây bao gồm thay đổi môi trường, hoặc các biến đầu vào. Ưu điểm của nguyên tắc này là các hàm có thể được cô lập dễ dàng, dẫn đến dễ dàng kiểm tra, thử nghiệm cũng như áp dụng.

Và trong thực tế, nguyên tắc này được ứng dụng khi viết chương trình Lisp. Khác với imperative programming, theo đó lập trình viên viết cả chương trình, biên dịch rồi thử, lập trình viên Lisp thường viết những hàm rời và thử trực tiếp từng hàm (eval-sexp của Emacs chẳng hạn). Khi hàm tốt rồi thì lại viết hàm khác và thử hàm khác ngay sau khi viết. Dần dần hình thành một chương trình hoàn chỉnh (nguyên tắc "bottom-up programming" mà On Lisp cổ vũ).

Không ngạc nhiên gì khi các ngôn ngữ tận dụng thế mạnh xử lý song song như Erlang lại là functional language. Ưu điểm độc lập và "không tác dụng phụ" của functional programming, đơn giản hoá sự tương tác giữa các hàm, giúp bản thân ngôn ngữ có thêm cơ hội để chia việc trên nhiều tiến trình/tiểu trình/CPU khác nhau mà không cần phải áp dụng các cơ chế đồng bộ phức tạp.

Nói đi cũng phải nói lại. Các ưu thế của Lisp ngày trước giờ không còn là độc quyền của Lisp. Ta có thể tìm thấy rất nhiều ý tưởng của Lisp trong bộ thư viện STL(Standard Template Library) của C++, bao gồm những khái niệm như "function object", "closure", "template"...

Nói lại rồi ta lại nói đi. Gì thì gì Lisp macro là quá mạnh (nếu biết cách khai thác) và là duy nhất, bởi không ngôn ngữ nào có thể đơn giản bằng Lisp để có thể được chuyển đổi dễ dàng như trong Lisp (XSLT tiến khá gần, nhưng XML quá nhộn nhạo, không dễ đọc như Lisp). Tuy nhiên, do chưa đọc nhiều về phần macro trong On Lisp nên ngừng ở đây. Nói nhiều đâm ra nói xạo (trong khi nãy giờ nổ cũng nhiều rồi).

Cuối cùng, trích dẫn một tí có liên quan đến Lisp (nguồn):

The CLR’s Garbage Collection was initially written in Lisp by a Patrick Dussud (I can’t find a blog). This code was then run through a Lisp->C converter which was then cleaned up by an intern.

Ai bảo Lisp dỏm?


Cập nhật 5 lần. Lần cuối: Tue Aug 08 11:22:15+0011 2017

Tác giả: pclouds | Liên kết tĩnh | Hâm

Thứ tư, 21 Tháng mười một năm 2007 23:57:53 ICT

Thông báo phát hành words-vi 0.1

words-vi phiên bản 0.1 đã chính thức ra mắt bà con. Tải về ở địa chỉ này:

http://dev.gentoo.org/~pclouds/files/words-vi-0.1.tar.gz

Nội dung không có gì nguy hiểm cả, nên kiểm tra bằng md5sum với sha1sum thì cũng hơi quá đáng. Mà đằng nào làm cái này cũng coi như quá đáng rồi.

MD5: 52c60ba8c7398410ab4bc916f150602b
SHA-1: edc46b8265617164db6e4d7a208f05ddca9951b1

Vậy words-vi.git là cái quái gì? Đây là một dự án dài hơi nhằm biến cuốn từ điển giấy (Từ điển tiếng Việt 2007) thành từ điển điện tử. Dĩ nhiên do sức người có hạn nên "từ điển" này chỉ hạn chế ở một số nội dung mà thôi. Ở thời điểm hiện thời, từ điển gồm danh sách các từ tiếng Việt trong từ điển giấy. Tương lai sẽ có thêm từ loại. Tương lai xa (2009 trở đi) may ra sẽ nhập nội dung. Hi vọng khi từ điển giấy bản mới được phát hành thì từ điển này cũng sẽ được cập nhật.

Về phần bản quyền, do nghi ngờ bản quyền vẫn thuộc về Trung tâm Từ điển học Vietlex, tui chỉ là người gõ lại, nên không dám tuyên bố nắm bản quyền. Toàn bộ nội dung đã nhập được công bố dưới dạng "public domain" (nói nôm na là "đồ chùa"). Chỉ năn nỉ bà con cô bác có dùng thì cũng đừng tuyên bố "tao gõ hết mớ chữ này".

Ai muốn tham gia cập nhật, bổ sung... vào words-vi có thể theo dõi những hoạt động nóng bỏng diễn ra hằng ngày của words-vi tại:

http://repo.or.cz/w/words-vi.git

Bà con anh chị em cô bác nào biết dùng git thì có thể dùng Mirror URL có ghi ở trang trên để lấy về. Ai không biết dùng git thì có thể lấy tarball về qua liên kết "snapshot". Còn vẫn làm biếng thì nhấn vào đây là sẽ có ngay "hàng" để xài. Lưu ý là tên tập tin dùng unicode, nên có thể sẽ không hoạt động. Trong trường hợp đó thì thông cảm xem trực tiếp qua web ở địa chỉ trên (và thông báo tui biết để mai mốt đóng tarball thì đổi tên cho phù hợp).

Cuối cùng, như thường lệ, bất cứ ý kiến ý cò gì (khen ngợi, chê bai, thông báo lỗi, nghi ngờ lỗi, đóng góp...) vui lòng gửi cho tui, pclouds nhà tại gmail chấm com. Xin cám ơn.

TB. Tui sẽ chỉ quảng cáo trên vi-VN thôi. Ai muốn quảng cáo không công thì cứ tự nhiên ;)

TB2. Mình vừa mới ra bản 0.1 cho 2007 thì "nó" (Vietlex) đã ra từ điển 2008. Khốn nạn thật! :(


Cập nhật 5 lần. Lần cuối: Tue Aug 08 11:22:15+0011 2017

Tác giả: pclouds | Liên kết tĩnh | Tiếng Việt, OSS

Thứ hai, 19 Tháng mười một năm 2007 23:18:16 ICT

Tê...

Có gần bảy ngàn chữ bắt đầu bằng "tê...". Như vậy là đã vượt qua phần kinh khủng nhất: chữ tờ. Theo tổng kết đến thời điểm này, "t" là chữ cái có nhiều từ nhất, tổng cộng hơn 6800 mục từ. Kế đến là "c" với hơn 4800 mục từ. Về thứ ba là "n" với hơn 3300 mục từ. Cũng không có gì ngạc nhiên bởi c chứa luôn âm "ch", n chứa thêm âm "nh" và "ng" còn t chứa "th" và "tr". Đến thời điểm này, đã có gần 40000 mục từ. Đường không còn xa.

Một cái thống kê vui khác. Tổng thời gian nhập chữ "t" trong ngày hôm nay, kéo dài từ 19h19 đến 23h16, gõ được 5120 mục từ (khoảng 10000 tiếng, hay hơn 70000 ký tự). Tính ra nhập 21 mục từ, hoặc 45 tiếng, hoặc 300 ký tự mỗi phút. Đã có những lúc anh xuất thần, gõ mà chả biết mình gõ cái gì. Chữ truyền thẳng từ mắt xuống tay, không đi qua óc. Óc vẫn còn đang mãi nghĩ chuyện lăng nhăng gì đó. :D Hậu quả là tay phải lại đau. Mai lại biểu diễn chiêu "cày một tay" tiếp.

Một vài chuyện vui khi nhập chữ "tờ". Trắng là một chữ rất đẹp, nhưng có một từ bắt đầu bằng trắng không đẹp tí nào: trắng tay. Trộm là điều cấm kị, nhưng có một thứ được phép trộm: trộm nhớ thầm yêu. Trúng cái gì cũng vui, trừ trúng độc, trúng gió, trúng thực... Tù cái gì cũng buồn, trừ tù trưởng. Có một thứ túi không thể cầm theo: túi mật. Và có vài cái tuyệt chả tuyệt tí nào: tuyệt tình, tuyệt tự và tuyệt vọng. Cuối cùng, có một "từ" cực hay: từ từ!

Vậy là dự án bổ sung giờ chót cho wishlist 2007 về cơ bản có thể nói đã hoàn tất. Với sự giúp đỡ của lihavim (cám ơn nhiều!), coi như chỉ còn hai chữ không đáng kể là u và v. Sau khi hoàn tất nhập toàn bộ sẽ công bố để bà con xài được thì xài (ít ra tự mình kiểm tra lỗi chính tả cho mình cũng tốt). Bước kế tiếp sẽ là thêm nhãn từ loại vào (kế hoạch 2008!).


Cập nhật 2 lần. Lần cuối: Tue Aug 08 11:22:15+0011 2017

Tác giả: pclouds | Liên kết tĩnh | Tiếng Việt

Thứ năm, 08 Tháng mười một năm 2007 19:30:17 ICT

Đời?


Cập nhật 2 lần. Lần cuối: Tue Aug 08 11:22:15+0011 2017

Tác giả: pclouds | Liên kết tĩnh | Hâm