Article:
FSM với Akka
1164
ngocdaothanh.myopenid.com 172Updated about 1 month ago |
FSM (Finite State Machine) là design pattern được dùng nhiều khi viết game. Cốt lõi của FSM là:
State(S) x Event(E) -> Actions(A), State(S')
Có nghĩa khi ta đang ở trạng thái S mà có sự kiện E xảy ra, thì ta sẽ thực hiện hành động A rồi chuyển sang trạng thái S'.
Thư viện Akka của Scala từ sau phiên bản 0.10 (ra ngày 22/8/2010) sẽ có thêm tính năng FSM. Bài viết này giới thiệu cách sử dụng tính năng này. Để hiểu bạn cần có chút kinh nghiệm Scala.
![]()
Article:
Nhúng Jetty vào chương trình web Java dựa trên Jersey
600
ngocdaothanh.myopenid.com 172Updated 4 months ago |
Chương trình web Java servlet thường chạy với Tomcat. Tomcat là application web server, ta nhúng nhiều application vào nó để nó chạy. Đôi khi ta muốn viết chương trình có tính năng làm web server, và ta muốn nhúng web server vào chương trình thay vì nhúng chương trình vào web server. Lúc này ta thường dùng Jetty vì nó nổi tiếng là được thiết kế rất dễ nhúng. Nhúng Tomcat cũng được, nhưng loằng ngoằng hơn. Google App Engine hiện dùng Jetty.
Bài hướng dẫn này dùng Jetty 7 và dùng Maven để build. Để hiểu bạn cần biết tối thiểu servlet và Maven. Biết thêm JAX-RS càng tốt.
Article:
Xitrum: web framework và web server cho Scala do người Việt viết
395
ngocdaothanh.myopenid.com 172Updated 4 months ago |
Xitrum vừa là web framework vừa là web server mã nguồn mở theo phong cách hiện đại viết bằng Scala, cho Scala, có những tính năng nổi bật sau:
- Áp dụng rất nhiều chiêu thức tối ưu tốc độ
- Dùng annotation để khai báo route. Khi khởi động framework sẽ tự động scan tất cả route trong chương trình. Do đó không cần khai báo tất cả route chung một chỗ, như Rails, khá khó chịu.
- Bất đồng bộ. Cùng lúc có thể giữ cả trăm ngàn kết nối.
- Tích hợp sẵn, chặt chẽ với thư viện jQuery Validation.
- i18n dùng GNU gettext chứ không dùng tập tin .properties như đa số framework chạy trên JVM khác (ngay cả Rails mặc định cũng dùng kiểu này).
- Tích hợp sẵn cache server theo kiểu in-process, không cần chạy thêm ví dụ như memcached.
- Comet.
- Hỗ trợ chạy kiểu web cluster ngay từ đầu. Cache và Comet chạy được ngay lập tức theo kiểu cluster mà không cần làm gì thêm.
Article:
Giới thiệu tính năng parser combinator của Scala
563
ngocdaothanh.myopenid.com 172Updated 5 months ago |
Trong bài về Leex và Yecc, chúng ta đã tìm hiểu công cụ cho phép viết tokenizer và parser của Erlang. Trong bài viết này, chúng ta sẽ tìm hiểu sơ lược công cụ tương tự của Scala. Erlang cần đến 2 bước độc lập (1) viết tokenizer, (2) viết parser, còn Scala gộp chúng làm một, tiện hơn. Thậm chí Scala cho phép gộp thêm cả bước compile, thành 3 trong 1 luôn!
Để minh hoạ, chúng ta sẽ viết chương trình calculator tính kết quả của biểu thức chỉ chứa 2 toán tử cộng và trừ. Ví dụ cho chuỗi: "1 + 2 - 3", kết quả phải ra 0.0. Có thể hiểu là ta compile chuỗi "1 + 2 - 3" thành con số 0.0.
Article:
Chiêu thức lạ với parameterized type trong Scala
247
ngocdaothanh.myopenid.com 172Updated 5 months ago |
Article:
Chuyển từ HTML sang PDF trong Ruby
2803
ngocdaothanh.myopenid.com 172Updated 5 months ago |
Mục lục rất hữu ích, nó giúp người đọc mường tượng được "cấu trúc", viết nên đọc cái gì trước cái gì sau. Mục lục là thành phần (tính năng) quan trọng của OpenKH, chỉ nên đưa link đến bài viết có giá trị hoặc liên kết ngoài hay vào mục lục.
Chúng tôi muốn thêm tính năng cho OpenKH để từ nội dung trong mục lục xuất bản thành sách PDF hiển thị được chữ tiếng Việt nói riêng và bất kì ngôn ngữ nào khác nói chung (OpenKH dùng Ruby-Gettext nên chỉ mất chừng 30 phút để chuyển ngữ, hiện đã có 3 thứ tiếng: Anh, Việt, Nhật). Bài viết này trình bày những biện pháp chúng tôi đã tìm hiểu để đạt mục đích trên. Rất hoan nghênh mọi góp ý của các bạn.
Article:
Ghi chú về SBT 0.10.0
309
ngocdaothanh.myopenid.com 172Updated 7 months ago |
Article:
Java 64 bit gọi C 32 bit
925
ngocdaothanh.myopenid.com 172Updated 11 months ago |
Chú ý:
- Bài viết này trình bày chủ yếu cho CentOS 64 bit, tuy nhiên ý tưởng có thể áp dụng cho các hệ điều hành khác. Cuối bài có ghi chú cho Ubuntu.
- Hệ điều hành 64 bit vẫn chạy/dùng được chương trình/thư viện 32 bit.
Giả sử ta muốn từ chương trình Java do ta viết gọi hàm gì đó trong thư viện viết bằng C. Nếu JVM và thư viện C đều cùng là 32 bit hoặc 64 bit thì quá khỏe, chỉ việc dùng JNA để nối trực tiếp thư viện vào chương trình (chạy 1 process).
JNA chỉ nối được sang thư viện động, không nối được sang thư viện tĩnh. Trên Linux 64 bit nếu có libXxx.a 32 bit, thì để chuyển sang libXxx.so 32 bit:
$ ar -x libXxx.a <-- giải nén .a thành các tập tin .o
$ gcc -m32 -shared *.o -o libXxx.so <-- gom các tập tin .o lại thành .so
Tuy nhiên giả sử JVM là 64 bit còn thư viện là 32 bit, mà ta lại không có source code của thư viện để sửa và biên dịch lại theo chế độ 64 bit, thì chỉ còn cách cấu trúc theo kiểu client server (chạy 2 process).
Bài viết này giới thiệu cách dùng Thrift để đạt mục đích trên. (Dùng Thrift thì 2 process có thể nằm trên 2 máy khác nhau). Để hiểu bạn cần có căn bản Java và C++.
Article:
Can thiệp vào process JVM đang chạy
438
ngocdaothanh.myopenid.com 172Updated about 1 year ago |
Có vài loại JDK. JDK do Sun cung cấp có tính năng gọi là attach API, cho phép can thiệp vào process JVM đang chạy. Bài viết này giới thiệu công cụ liverepl dựa vào tính năng trên để cho phép ta tương tác với process JVM đang chạy thông qua màn hình REPL của Clojure (tương tự lệnh irb của Ruby). Để hiểu bạn cần có kinh nghiệm Java trên Linux.
Article:
Ghi chú khi viết OpenID client cho JVM
466
ngocdaothanh.myopenid.com 172Updated about 1 year ago |
Nếu chưa biết OpenID là gì, xin đọc Wikipedia để biết ý tưởng mục đích chung v.v. Bài viết này ghi chú một số kinh nghiệm khi viết OpenID client cho JVM. Để hiểu bạn cần có kinh nghiệm lập trình web bằng Java Servlet.
172





5 months ago