Thứ Năm, 23 tháng 6, 2011

Attempt to replace rtfio.dll in Unikey

(Email gửi anh PK Long)

Để unikey trở nên mở hoàn toàn em định: Thay thế rtfio.dll (mã đóng) -> mã mở.

Mình phải làm gì hả anh? Có rtfio.h -> cứ thực thi các hàm trong đó là
OK hả anh?
Nếu bỏ rtfio.dll thì thì chức năng nào trong unikey bị ảnh hưởng hả ảnh?
Anh gợi ý giúp nhé.

Từ Unikey/readme.txt:

From version 3.62, UniKey uses RtfIO library for converting rich
texts. At the moment I cannot
release source code of this library. Therefore, this package includes
only the binary library
in rtfio\rtfio.dll. You will need rtfio\rtfio.lib to build UniKey. The
header file of
this library is rtfio\intrtfio.h. To run UniKey, rtfio.dll must be in
the same folder
as UniKey program.

The official UniKey program on UniKey web site was compiled with RtfIO
library inside, therefore
does not need rtfio.dll to run.

Search: rtf C++
http://www.codeproject.com/search.aspx?q=rtf++&doctypeid=1%3b2%3b3

Một số kết quả đại biểu:
http://www.codeproject.com/KB/recipes/RtfConverter.aspx
http://www.codeproject.com/KB/library/rtflib.aspx
http://www.codeproject.com/KB/clipboard/clipnutshell.aspx

Spell checking libaries

A Spell Checking Engine in C++
http://www.codeproject.com/KB/recipes/spellchecker_mg.aspx

NHunspell - Hunspell for the .NET platform
http://www.codeproject.com/KB/recipes/hunspell-for-net.aspx

Hunspell Vietnamese dictionary for OpenOffice
http://wiki.services.openoffice.org/wiki/Dictionaries#Vietnamese_.28Vietnam.29

hunspell-spellcheck-vi
Hunspell Vietnamese Spell Checker
http://code.google.com/p/hunspell-spellcheck-vi/

GNU Aspell (Win32 version)
http://aspell.net/win32/
Học cách sử dụng lib sau
http://ftp.gnu.org/gnu/aspell/w32/aspell-dev-0-50-3-3.zip
Chưa có tiếng Việt.

Các công cụ kiểm tra chính tả

hunspell: Chủ yếu dùng cho OOo/LibO và Mozilla products
myspell Không phổ biến
aspell Tốt, nhiều người dùng, chưa có phiên bản tiếng Việt, hỗ trợ Winodws
ispell: Cũ, bị thay thế bởi aspell

Thứ Hai, 20 tháng 6, 2011

Source code của Unikey

Các phiên bản Unikey

3.62 Có cả mã nguồn và binaries ra ngày 2005-07-23.

3.63 ra ngày 2005-09-30 không có mã nguồn.

Từ phiên bản 4.0 trở đi, Unikey chỉ phát hành các bản beta và RC (không chính thức) và không đi kèm mã nguồn.

4.0 RC2 là phiên bản cuối ra ngày 2009-11-01.

Theo anh Phạm Kim Long, lý do của việc này là vấn đề license của một số module được dùng trong Unikey.

Telex vs. Telex Pro




Trong Unikey, kiểu gõ Telex và Telex Pro khác nhau như sau:

Với kiểu Telex thường

1. w chạy như W (hoa)
2. Các dấu ngoặc sẽ có "ư" hay "ơ" -> []{}
Các key này tuy tiện nhưng bị hay conflict với thói quen sử dụng của người dùng

Ngoài ra, các "tone" (dấu) được định nghĩa trong keymap.txt.
Có thể sửa file này nếu muốn thay đổi luật gõ.
Việc thay đổi này không đuợc khuyến khích vì đa số chúng ta đã quen với cách đặt dấu truyền thống.

Z = Tone0
S = Tone1
F = Tone2
R = Tone3
X = Tone4
J = Tone5
W = Hook-Bowl
A = Roof-A
E = Roof-E
O = Roof-O
D = D-Mark

Unikey: 7 trieu download!


Chỉ tính riêng trên sf.net, Unikey đã có 7 triệu download.
Để một phần mềm được cả dân tộc sử dụng đóng và không phát triển được thì phí quá.

Muốn cái code Unikey 4 (có thể mất một vài chức năng) để phát triển tiếp quá :)



Nhan xet cua BGK MHST 2011

Mình tóm tắt lại các vđ BGK nhận xét:

GK1:
  1. Chưa phân tích, phát triển thêm nhiều so với mô tả ý tưởng
  2. Tính portable của VC++2005
  3. Chưa có thiết kế chi tiết. Cần tìm hiểu phác thảo về cách làm để thể hiện rõ tính khả thi của kế hoạch.
  4. Chưa có biện pháp, phương pháp đối phó, giải quyết risk
  5. Sử dụng công cụ đóng và nền tảng đóng.
==> Chưa đưa ra được nhiều ý kiến thuyết phục để khẳng định khả năng thực hiện được ý tưởng thành công.

Cá nhân mình thấy vị GK này có tâm lý chung là tẩy chay Windows and it's fellows ;) Tất nhiên, trong thành phần BGK sẽ luôn có những vị GK như thế này, nên việc mình nắm bắt tâm lý họ và tìm ra các cách để thuyết phục là rất quan trọng nếu muốn có thứ hạng cao. Anh Hưng và Trung tìm các câu trả lời đối với nhận xét của vị giảm khảo này nhé.

GK2:
  1. Chưa có phân tích và làm rõ ý tưởng
  2. Chưa có thiết kế chi tiết do đó chưa thể đánh giá được tính mở và khả năng mở rộng, tùy biến sản phẩm của dự án.
  3. Chưa có phương án dự phòng rủi ro.
==> Bản phân tích chưa thực sự tốt

Vị GK này nhận xét khá tổng quát và khách quan

GK3:
  1. Chưa có kế hoạch cụ thể
  2. Chưa đánh giá hết rủi ro, chẳng hạn việc post mã nguồn mở Hunspell sang Window có thể sẽ rất phức tạp
==> Chưa quan tâm lập kế hoạch, bỏ hổng thiết kế chi tiết thì khó cho người phát triển sau.
Gợi ý: gắn Hunspell với Unikey

Vị GK này rất thích đề tài, và cũng đánh giá cao bản phân tích. Về ý kiến xây dựng kế hoạch và thiết kế chi tiết để tạo thuận lợi cho người phát triển sau, mình nghĩ ý tưởng viết blog của anh Hưng giải quyết được phần nào vấn đề này.

GK4:
  1. Tài liệu giải thích sử dụng Visual C++ trong bộ Visual Studio liệu có chắc chắn không bị vướng vào các bằng sáng chế?
  2. Chưa chỉ rõ phiên bản giấy phép của nguồn mở
==> Chỉ định rõ hơn các phiên bản giấy phép của nguồn mở vì những lý do về tính tương hợp mã nguồn của các giấy phép đó. Kiểm tra kỹ lại xem vấn đề về bằng sáng chế khi sử dụng Visual Studio để phát triển.

Vị GK này rất quan tâm đến vấn đề license. Team mình cũng cần chú trọng vđ này vì nếu dính vào kiện tụng gì đấy thì "tạch" mất :(

Tổng quát:
  1. Chưa có tài liệu làm rõ ý tưởng, thiết kế chi tiết
    Phần này trong bản Phân tích dự án của anh Hưng đã ghi rõ là "chưa triển khai thiết kế cơ bản và không có ý định viết thiết kế chi tiết"
  2. Chưa lường hết rủi ro và phương án khắc phục
    - Các thư viện chính tả được viết trên nền Unix/Linux, do đó, cần kiểm tra đánh giá tính tương thích trên Windows.
    ==> Nghiên cứu cấu trúc thư viện chính tả để viết lại trên VC++ nên không quá lo ngại vấn đề tương thích. Tăng test trên các nền Windows là có thể yên tâm
    - Cần hỗ trợ nhiều phiên bản khác nhau của Windows. Do đó, việc kiểm tra chương trình sẽ đòi hỏi nhân lực và thời gian.
    ==> Đưa lên các trang web như mạng xã hội facebook, forum unikey, gửi cho bạn bè, ... để tìm kiếm người dùng thử và lấy feedback
    - Độ phức tạp của Unikey có thể làm trễ thời gian tìm hiểu chương trình.
    ==> Tăng cường vọc code :D

  3. Chưa có plan cụ thể thời gian nào làm việc gì
    Deadline 2011/06/30:
    - Phân tích, đọc mã nguồn Unikey, các thư viện kiểm tra lỗi chính tả.
    ==> Mình chưa thể đầu tư nhiều thời gian + mới làm quen với VC++ nên khá khó khăn để hiểu code. Nếu Trung có thể support dưới dạng comment giải thích cho các variable, function, code block, etc. thì tốt quá :">
    - Trao đổi nhóm quyết định định hướng tích hợp.
    - Tạo prototype
    ==> Theo mình hiểu chức năng check spell là chức năng chạy ngầm nên không cần protoype. viết comic như anh Trung suggest là một ý tưởng hay :) cũng có thể là chỉ cần mô tả chi tiết chương trình sẽ chạy như thế nào là được.
    - Lấy ý kiến cộng đồng, điều chỉnh định hướng dự án nếu cần thiết.
  4. Vấn đề license xung đột với công cụ và nền tảng phát triển đóng
    Theo mình nghĩ đây sẽ là một câu hỏi BGK đặt ra cho team khi thuyết trình, nên team cần tìm ra cách trả lời luôn:

    Việc team đang làm là viết thêm chức năng cho Unikey
    - Về công cụ phát triển, Unikey dùng VC++ nên chuyện mình dùng VC++ là chuyện đương nhiên. Team đang dùng VC++2005 bản "xịn". Những người phát triển sau đó có thể dùng VC++ 2010 Express (free) nên không có gì lo ngại.
    - Về nền tảng, phần lớn người dùng Unikey là người dùng Windows nên phát triển trên nền Windows cũng là chuyện đương nhiên.

    License mình sẽ ghi rõ là
    Apache v2.0. License của Unikey là GNU GPL v3, như nhận xét của vị GK4 thì 2 license này tương thích với nhau. Mình sẽ tìm hiểu kỹ hơn về 2 license này và tính tương thích của chúng. Vì anh Hưng có kinh nghiệm hơn về phần này nên em sẽ "tra khảo" anh nhiều :D

Thứ Sáu, 17 tháng 6, 2011

First Unikey 3.6.2 build

Sau một thời gian mày mò thì em cũng xin ra lò 1 blog đầu tiên

1. Download source Unikey 3.6.2:
http://prdownloads.sourceforge.net/unikey/Uk362src.zip và giải nén vào *
[path]*
2. Mở file *[path]\newkey\newkey.sln* bằng Visual Studio 2005 và convert
project cho tương thích với VS2005 (Conversion Wizard)
3. Sửa các file sau đây:
- *[path]\keyhook\vietkey.cpp*
- line 1035:
WideCharToMultiByte(CP_US_ANSI, 0, p, -1, (char *)ansiPush,
sizeof(ansiPush), NULL, NULL);
--> WideCharToMultiByte(CP_US_ANSI, 0, *(LPCWSTR)*p, -1, (char
*)ansiPush, sizeof(ansiPush), NULL, NULL);
- *[path]\keyhook\keyhook.cpp*
- line 444:
int count = WideCharToMultiByte(1258, 0, VnKbd.uniPush,
VnKbd.keysPushed, (char *)VnKbd.ansiPush, VnKbd.keysPushed, 0, 0);
--> int count = WideCharToMultiByte(1258, 0, *(LPCWSTR)*VnKbd.uniPush,
VnKbd.keysPushed, (char *)VnKbd.ansiPush, VnKbd.keysPushed, 0, 0);
- *[path]\vnconv\charset.cpp*
- line 164:
int k;
--> int *i,* k;
- line 1106:
int k;
--> int *i,* k;
- *[path]\newkey\tooldlg.cpp*
- line 669:
static lastFormat = CF_TEXT; // format of last converted clipboard
(CF_TEXT or CF_UNICODETEXT)
--> static *int *lastFormat = CF_TEXT; // format of last converted
clipboard (CF_TEXT or CF_UNICODETEXT)
- *[path]\newkey\mactab.cpp*
- line 145:
char * pos = strchr(item, ':');
--> char * pos = *const_cast (*strchr(item, ':')*)*;
- *[path]\newkey\label.h*
- line 107:
static setLinkCursor(HCURSOR hCursor)
--> static *void *setLinkCursor(HCURSOR hCursor)
4. Build project *NewKey* với config *Win32 Release* hoặc *Win32
Unicode Release*. Theo em thấy từ góc độ người dùng 2 cái này khác nhau ở
chỗ bản *Unicode Release có thể chuyển sang giao diện tiếng Việt*, còn
bản Release thì không.

Anh Hưng và Trung confirm xem các bước làm như vậy có đúng không?

Hic, nhìn code chóng mặt quá, dòng hiểu dòng không :(