Đêm - sáng tác guitar đầu tay

Sunday, January 31, 2010 0 phản hồi

Cuối tuần bị sốt nằm vật vạ ở nhà. Trong cơn mê sảng, tôi thấy mình lênh đênh đến một phương trời vô định, chỉ có ánh trăng bàng bạc và khoảng không im lặng đến rợn người. Tôi cố vùng vẫy, trốn chạy ... Có một thứ bóng đêm cố nuốt lấy tôi vào khoảng không mênh mông ấy. Đó chính là lúc tôi cảm thấy mình khao khát sống, khao khát tồn tại hơn bao giờ hết.

Bàng hoàng tỉnh giấc, tôi lại đối diện với chính mình và ... vẫn là bóng tối mênh mông. Trong cuộc sống vô thường này, người ta chỉ có thể thành thật với bóng đêm và cái chết. Tôi muốn ghi lại cảm xúc thật lòng của mình bằng một giai điệu của đêm, ... và của cõi lòng mình.



Đêm dài, lặng nhìn mây trôi
Mình ta với bóng, lòng chơi vơi sầu
Đêm dài, buồn như mây khói
Thầm mong cơn gió xua tan nỗi buồn

Cuộc đời cuốn ta vào vòng cơm áo
Có bao giờ nghe lại tiếng lòng ta
Thân cô viễn, xuân về nơi xứ lạ
Lòng man mác nhớ, buồn đau đáu buồn

Robot chat thông minh

Tuesday, January 26, 2010 3 phản hồi

Có những ý tưởng ra đời từ sự điên rồ pha lẫn chút lãng mạn.

Có đôi lúc, tôi tự hỏi mình: khi buồn, vui mình sẽ nói với ai. Dù là người bạn thân nhất cũng không thể hiểu được hết chính mình. Tôi muốn tạo cho mình một người bạn - có thể giúp tôi trong công việc, cũng như có thể cho tôi những điều thú vị những lúc tôi cần.

Ngày cuối tuần lang thang, tôi nhớ lại những năm tháng sinh viên. Ngày đó, một người bạn gợi cho tôi cảm hứng viết một chú robot chat từ học kì thứ 3 ĐH. Chúng tôi loay hoay gần 3h đồng hồ để release một sản phẩm robot chat biết học và trả lời những câu hỏi - viết bằng C++. Cả phòng kí túc xá đông nghẹt những khán giả muốn thử "trí thông minh" của con robot này. Chương trình chỉ dựa trên sự so khớp độ chính xác giữa câu hỏi input và những dữ liệu có sẵn rồi đưa ra câu trả lời tương ứng. Sau đó, chúng tôi bỏ đi uống cafe và để lại con robot cho mọi người tha hồ thử nghiệm. Khi trở về, tôi thử chat lại với con robot thì ... than ôi, mỗi câu hỏi của tôi đều bị nó trả lời bằng những câu chửi hết sức bậy bạ (vì đã được train sau gần 2 tiếng đồng hồ). Chúng tôi bật cười và xem như đây là 1 thử nghiệm thất bại. Sau đó vì bận học, nên chúng tôi cũng dần quên đi ý tưởng này.


Đêm cuối tuần, tôi research một số lý thuyết về xử lý ngôn ngữ và những hướng tiếp cận của robot chat. AIML (ngôn ngữ đặc tả trí thông minh nhân tạo) là hướng tiếp cận phổ biến nhất hiện tại trên TG. Có một số hướng khác để hỗ trợ phân tích ngữ nghĩa cuộc thoại, máy học được bổ trợ để làm cho robot chat thông minh hơn. Tuy nhiên các cách tiếp cận này vẫn còn đang được nghiên cứu.

Tôi download được một bộ AIML parser viết trên C# và bắt tay vào những dòng code đầu tiên. Tôi release version 0.1 của robotchat với các tính năng để xử lý một cuộc thoại cơ bản chỉ có chào hỏi. Robot có thể nói với người về những đặc điểm riêng của chủ nó.

Ngày thứ hai, tôi phát hiện AIML vẫn thiếu những syntax mà tôi cần để phát triển ý tưởng. Tôi bắt tay customize AIML parser và hỗ trợ thêm một số tag cần thiết.

...
Dưới đây là các version tôi đã release internal sau 2 ngày coding:
v0.2: robot có thể tìm kiến thức trên wiki/google để trả lời cho người hỏi về những lĩnh vực nó không biết.









v0.3: nếu chủ nó buồn, hoặc vui (tùy theo tâm trạng lúc chat), robot có thể tìm ngẫu nhiên các bài hát, video vui nhộn để play giúp chủ nó relax.


Sản phẩm này sẽ open source vì tôi tin rằng còn có nhiều người điên rồ hơn có thể giúp tôi phát triển thành công sản phẩm này. Và hơn tất cả, tôi luôn tin rằng sự chia sẻ có thể đem lại những giá trị hữu ích cho con người.
Thời điểm công bố bản public release sẽ được thông báo sau. :)

Mẹ

Monday, January 25, 2010 0 phản hồi

"Ta làm thơ cho đời và biết bao người con gái
Có bao giờ thơ cho mẹ ta không?"

Mẹ
Đỗ Trung Quân


Con sẽ không đợi một ngày kia
khi mẹ mất đi mới giật mình khóc lóc
Những dòng sông trôi đi có trở lại bao giờ?
Con hốt hoảng trước thời gian khắc nghiệt
Chạy điên cuồng qua tuổi mẹ già nua

Mỗi ngày qua con lại thấy bơ vơ
Ai níu nổi thời gian?
Ai níu nổi?
Con mỗi ngày một lớn lên
Mẹ mỗi ngày thêm già cỗi
Cuộc hành trình thầm lặng phía hoàng hôn.
Con sẽ không đợi một ngày kia
có người cài cho con lên áo một bông hồng
mới thảng thốt nhận ra mình mất mẹ
Mỗi ngày đi qua đang cài cho con một bông hồng
Hoa đẹp đấy - cớ sao lòng hoảng sợ?

Ta ra đi mười năm xa vòng tay của mẹ
Sống tự do như một cánh chim bằng
Ta làm thơ cho đời và biết bao người con gái
Có bao giờ thơ cho mẹ ta không?
Những bài thơ chất ngập tâm hồn
đau khổ - chia lìa - buồn vui - hạnh phúc

Có những bàn chân đã giẫm xuống trái tim ta độc ác
mà vẫn cứ đêm về thao thức làm thơ
ta quên mất thềm xưa dáng mẹ ngồi chờ
giọt nước mắt già nua không ứa nổi
ta mê mải trên bàn chân rong ruổi
mắt mẹ già thầm lặng dõi sau lưng

Khi gai đời đâm ứa máu bàn chân
mấy kẻ đi qua
mấy người dừng lại?

Sao mẹ già ở cách xa đến vậy
trái tim âu lo đã giục giã đi tìm
ta vẫn vô tình
ta vẫn thản nhiên?

Hôm nay...
anh đã bao lần dừng lại trên phố quen
ngã nón đứng chào xe tang qua phố
ai mất mẹ?
sao lòng anh hoảng sợ
tiếng khóc kia bao lâu nữa
của mình?

Bài thơ này xin thắp một bình minh
trên đời mẹ bao năm rồi tăm tối
bài thơ như một nụ hồng
Con cài sẵn cho tháng ngày
sẽ tới !

Suy nghĩ tích cực làm thay đổi cuộc đời

Tuesday, January 19, 2010 3 phản hồi

Có nhiều bạn từng tâm sự với tôi:
"Tại sao em làm ở công ty X lâu quá mà em chưa được lên chức? Lương thì bèo bọt. Em thấy em biết nhiều kiến thức, làm cũng tương đối được việc mà sếp ko đả động gì đến. Chán quá."

Đây có lẽ là một câu hỏi chung của rất nhiều bạn, mà cũng có thể là của rất nhiều bạn đồng nghiệp của tôi. Vì vậy, tôi muốn chia sẻ với các bạn những ý kiến dưới góc độ của một người trong cuộc qua bài viết này.

Thoát khỏi bế tắc từ suy nghĩ


Cách đây 5 năm, tôi luôn bị ám ảnh bởi suy nghĩ: làm sao để thành đạt, làm sao kiếm được nhiều tiền? Tôi làm project outsource liên tục, thay đổi công ty liên tục. Trung bình một ngày chỉ ngủ 4-5 giờ vì phần còn lại tôi dành cho công việc và cập nhật những kiến thức cho công việc. Mỗi lần thay đổi công ty tất nhiên mức lương mới sẽ cao hơn ở công ty cũ. Trong hơn 5 năm đi làm, tôi đi qua liên tục 5 công ty, làm những vị trí, vai trò khác nhau. Có một điều sau này tôi nhận ra rằng: mình vẫn ko thoát khỏi sự bế tắc trong cuộc sống. Mỗi khi qua công ty mới, mọi thứ phải setup lại từ đầu. Không tên tuổi, không thương hiệu. Thanh gươm kiến thức trong tay cũng đã mòn vì không đi chuyên sâu vào bất cứ lĩnh vực nào.

Có một lúc tôi chợt tỉnh giấc và hiểu ra rằng: nếu mình ko thay đổi suy nghĩ, thì mãi mãi vẫn chỉ sống trong cái vòng lẩn quẩn này. Đến một lúc nào đó, sức cùng lực kiệt - liệu có thể phiêu lưu mãi nữa hay không?

Kể từ đó, tôi rũ bỏ đi bớt những suy tính cá nhân, lao vào trau dồi những kiến thức nền tảng để củng cố lại mình. Tôi chấp nhận một mức lương thấp hơn nhiều so với công ty cũ. Mỗi giờ làm việc ở công ty, tôi dồn tất cả sự đam mê và tâm huyết. Tôi mở lòng mình ra để chia sẻ với mọi người những gì tôi biết và mong muốn cả tập thể cùng tiến bộ. Càng lúc tôi càng hiểu ra rằng: càng suy nghĩ đến tiền, danh vọng sẽ không đem lại cho mình ích lợi gì cả. Vì về bản chất, tiền bạc và danh vọng chỉ là hệ quả của sự nỗ lực cho một mục tiêu. Ở đời, không có gì nguy hiểm bằng việc không biết mục tiêu của mình là gì.

Thật ra tôi chỉ đạt được một phần của mục tiêu mà tôi đang theo đuổi. Tuy nhiên, tôi cảm nhận rằng chính từ sự thay đổi cách suy nghĩ đã giúp tôi thoát khỏi những bế tắc trong cuộc sống.

Những căn bệnh về suy nghĩ làm cho bạn không thể thành đạt trong công việc


Căn bệnh 1: nhầm tưởng rằng có nhiều kiến thức là có thể thành đạt.
Thật sự đây chỉ là một điều kiện cần, chứ không phải là điều kiện đủ. Không có công ty nào trả lương cho bạn vì những gì bạn biết, mà là vì những gì bạn đóng góp. Nếu có nhiều kiến thức, nhưng bạn không đóng góp nhiều cho công ty, thì kiến thức của bạn đối với họ chỉ là con số 0.

Tôi không phản đối việc bạn phải học thêm kiến thức, nhưng tôi muốn nói đến yếu tố: nên học cái gì?
Có nhiều bạn từng hỏi tôi rằng: lĩnh vực kĩ thuật quá rộng, làm sao em học hết để đáp ứng nhu cầu công việc.


Trả lời: 
Kiến thức về cơ bản có thể phân tách thành: nguyên lý (principles), ứng dụng (practices), và giá trị mà nó đem lại (values).  Nguyên lý thì thay đổi chậm theo thời gian và thật sự chỉ thay đổi khi có sự đột phá từ những cuộc cách mạng về công nghệ/ nghiên cứu lý thuyết. Ứng dụng và giá trị thì thay đổi liên tục và nhiều vô tận.

Nói ví dụ cho dễ hiểu trong phần mềm:

+ Kiến thức về OOP, Design pattern, các phương pháp luận làm phần mềm, các nguyên lý thiết kế hệ thống, .. được xem là những principle.
+ Các ngôn ngữ lập trình, các framework phát triển ứng dụng, cách xài các thư viện hỗ trợ phát triển, .... là những practice và cũng cung cấp cho bạn những value khác nhau tùy vào lĩnh vực.

Trau dồi principle là cách giúp bạn có nền tảng và nhanh chóng nắm bắt tất cả các practices trong nhiều mảng khác nhau. Nhiều bạn đã quan tâm quá nhiều đến "chiêu" (practice) mà bỏ quên nền tảng sẽ dễ dàng bị fail trong các kì phỏng vấn, và thậm chí không được đánh giá cao trong tổ chức.

Bên cạnh đó, bạn cũng cần phải quan tâm đến những mảng kiến thức mà công ty đang cần. Suy nghĩ nhiều hơn về cách để đón đầu những cơ hội sắp tới và trau dồi kiến thức cần thiết cho mục tiêu của bạn.

Căn bệnh 2: quá chú trọng vào cá nhân mà không nghĩ đến tập thể
Ví dụ 1: Khi viết code, có người nghĩ: chỉ cần viết cho xong, chạy đúng. Code mình, mình hiểu. Cần gì viết cho ai hiểu.

Phân tích: Sai rồi bạn ạ. Thời của những lập trình viên anh hùng đã đi qua. Ở thời đại này, bạn không thể làm được gì nếu không làm việc cùng đồng đội (teamwork). Thứ hai, chất lượng code đánh giá chất lượng một lập trình viên. Bạn không muốn hoàn thiện sản phẩm mình làm ra, thì liệu bạn có được tổ chức đánh giá cao không nhỉ?

Ví dụ 2: tôi thích mọi người phải theo ý tôi cơ. Tôi luôn đúng và phải chứng tỏ cho mọi người thấy điều đó. Tôi phải luôn thắng trong mọi cuộc thảo luận.

Phân tích: áp đặt ý kiến là một điều không tốt. Hơn nữa, bạn không thể là thánh, nên không thể tránh khỏi sai sót. Khi một người đồng nghiệp phát biểu một ý không đúng với những gì tôi nghĩ. Tôi luôn đặt ra 2 trường hợp:

+ Tôi và anh ta đang nhìn ở 2 góc nhìn khác nhau trên cùng một vấn đề. Có thể đây là một góc nhìn mới mà tôi chưa nhận ra. Tôi ghi nhận và vẽ nó ra trên bảng để chúng tôi cùng xem xét.

+ Có thể một trong 2 chúng tôi đang nhìn về một sự vật, nhưng mỗi bên có một suy nghĩ méo mó khác nhau. Có thể có người sai. Nhưng theo thuyết tương đối mà nói: luôn có khả năng để điều sai trở thành đúng trong một tình huống đặc biệt.

Tôi luôn khuyến khích mọi người trình bày về quan điểm của mình, và nếu cần thì nhờ họ đưa ra những chứng minh và hành động để phân tích một cách cụ thể.

Một điểm quan trọng nữa: mục tiêu của thảo luận là để tìm giải pháp cho vấn đề, chứ không phải là một buổi trình diễn âm nhạc. Thảo luận sẽ trở thành vô nghĩa nếu nó đi quá xa mục tiêu ban đầu của nó.

Căn bệnh 3: không thích chia sẻ

Ví dụ 1: tớ biết cái này hay lắm, nhưng bí mật. Chỉ mình tớ biết thôi đấy nhé. Thấy tớ có hay không?

Phân tích: Đây là căn bệnh trầm kha của dân IT Việt Nam. Bạn làm được nhiều điều rất hay, bạn có nhiều kinh nghiệm quý báu. Bạn giữ nó làm gì cho riêng bạn? Thế giới Internet phát triển quá xa rồi, bạn có chắc rằng điều bạn đang giữ thực sự là một bí mật về công nghệ. Chia sẻ để cùng nhau phát triển và nhận được nhiều hơn, đó là trách nhiệm và quyền lợi của mỗi cá nhân trong tổ chức.

Ví dụ 2: mình mới làm xong một product/ hoặc có idea khá hay. Nhưng mà nhát quá, nói ra thấy ngại ngại sao á. Có cần nói cho sếp ko nhỉ? Thôi khỏi, chắc chắn ổng biết mình giỏi rồi.

Phân tích: không ai biết bạn đã làm được gì nếu bạn không nói. Âm thầm đóng góp là một điều tốt, tuy nhiên sẽ thiệt thòi nếu không ai công nhận. Mạnh dạn lên bạn nhé. Hơn 20 rồi đấy, nhát thế thì làm sao ... tán được gái nhỉ?

Căn bệnh 4: thiếu thái độ nhiệt huyết và chủ động trong công việc

Ví dụ 1: sếp giao cho 1 task. Nhưng chưa biết làm có được không nữa, chừng nào biết chắc chắn làm được hoặc làm xong thì báo luôn thể.

Phân tích: có biết rằng sếp đang run lắm khi chờ đợi bạn trả lời ko nhỉ? Ít ra bạn phải chủ động báo cáo tiến độ định kì. Nếu sau vài lần như vậy, có lẽ bạn sẽ không nhận được task quan trọng hay cơ hội nào nữa đâu.

Ví dụ 2: cái task này khó quá, mà cũng chả bổ ích gì đối với mình hết. Thôi, không làm đâu.

Phân tích: không ai trả lương cho bạn để bạn làm cái bạn thích cả, họ trả tiền cho công việc mà họ cần. Từ chối một thử thách chính là từ chối đi cơ hội của chính bạn. Hãy tập vượt qua thử thách, đó chính là những kinh nghiệm bổ ích cho cuộc đời bạn.

Ví dụ 3: chán quá, chán quá, chả có việc gì làm hết.

Phân tích: chán là một biểu hiện tâm lý của việc không còn đam mê trong công việc. Không có đam mê = failed. Những người thành đạt luôn tao ra task cho chính mình để cải tiến bản thân hoặc tổ chức, cơ bản vì họ luôn có đam mê và khát khao. Đó là yếu tố giúp họ thành công.


Lời kết

Viết mệt quá, còn nhiều bệnh nữa. Nhưng chắc để update sau đi. Hôm nay vầy đủ rồi.

Lập trình game và 3D trên iPhone

Tuesday, January 5, 2010 0 phản hồi

Gần đây tôi nhận được nhiều email của các bạn hứng thú với lập trình 3D/ game trên iPhone. Các bạn hỏi tôi khá nhiều câu hỏi rất thú vị - đặc biệt là về tài liệu và cách tiếp cận. Tôi sẽ cố gắng giải đáp thắc mắc của các bạn trong nội dung bài viết này.

Phân biệt 2 khái niệm: game engine và 3D engine

Về bản chất, đây là 2 khái niệm khác biệt. Tuy nhiên đôi lúc cũng có chút nhập nhằng.
3D engine: là những thư viện giả lập môi trường 3D trên máy tính. Trong đó đặc thù bao gồm:
+ Mô phỏng/định nghĩa các thực thể 3D.
+ Ánh sáng, đổ bóng.
+ Phủ vật liệu.
+ Giả lập camera.
+ Hiện thực quá trình render ảnh từ môi trường 3D để thành kết quả cuối cùng và hiển thị lên màn hình.

Game engine: là những thư viện hỗ trợ cho quá trình lập trình game. Thông thường một game engine thường bao gồm:
+ 3D/2D engine hỗ trợ cho việc lập trình trên môi trường 3D hoặc 2D.
+ AI (Artificial Intelligence) engine: hỗ trợ cho việc lập trình các yếu tố liên quan đến AI trên game.
+ Physic engine: hỗ trợ việc giả lập các yếu tố vật lý trong môi trường game.
+ Tool hỗ trợ cho việc tạo ra/import các "vật liệu" sử dụng trong game. Ví dụ: tạo terrain (địa hình), tool convert hoặc import các file mô hình, ...

Những thư viện lập trình game/3D trên iPhone

Các bạn có thể tham khảo bài viết này (liệt kê tương đối đầy đủ):
http://www.neverreadpassively.com/2009/03/review-of-iphone-3d-engines.html

Tôi muốn trở thành một expert về lập trình game (đặc biệt là trên iPhone). Cần tiếp cận như thế nào?

Tôi sẽ không trả lời câu hỏi này một cách trực tiếp vì nó khá nhiều cho phạm vi một bài viết. Tuy nhiên, tôi sẽ gợi một số câu hỏi để các bạn tự tìm lời giải đáp.

1. Những kiến thức nào một lập trình viên game cần trang bị? Những vấn đề nào được gọi là nan giải về kĩ thuật trong việc lập trình game?
2. Ngành công nghiệp game của thế giới đang phát triển như thế nào? Quy trình làm một game ra sao (từ ý tưởng đến hiện thực)? Có những role nào trong một game project?
3. Phân tích xu hướng hiện tại và tương lai của thị trường game (và game trên iPhone)?
4. Vòng đời của một sản phẩm game?
5. Các mô hình mà những nhà phát triển game đang tiến hành để thu lợi nhuận?
6. Phân chia các thể loại game và những đặc trưng kĩ thuật/ý tưởng liên quan?
7. Lập trình game trên iPhone có gì khác biệt so với các môi trường khác?
8. Các engine và công cụ nào hỗ trợ lập trình game (nói chung) và trên iPhone (nói riêng)

Tôi muốn trở thành một expert về lập trình 3D trên iPhone. Cần tiếp cận như thế nào?

Tương tự, tôi cũng sẽ đặt một vài câu hỏi để các bạn tự tìm lời giải cho mình.
1. Lập trình 3D (nói chưng) và trên iPhone (nói riêng) được ứng dụng như thế nào?
2. Những kiến thức nào về lập trình 3D cần được chuẩn bị?
3. Những điểm khó khăn/ thuận lợi trong việc lập trình 3D trên iPhone?

Tài liệu tham khảo

Tôi liệt kê một vài quyển sách được gọi là khá hay cho lập trình 3D/game (nói chung) và cả trên iPhone. Các bạn có thể tìm thấy những quyển sách này trên trang: http://gigapedia.com/ (cần đăng kí thành viên trước khi search)

+ AI for Game Developers
+ AI game wisdom
+ 3D Math Primer for Graphics and Game development
+ Game creation and career
+ Game Development and Production
+ Physic for game programmer.
+ iPhone game project
+ Unity Game Development Essentials

Thân.