Làm ở Pyramid Consulting được gần 2 năm, giờ mới phát hiện ra một sự trùng hợp ngẫu nhiên của những Technical Architect tại đây.
Tôi chưa có cơ hội để làm việc với các bậc tiền bối TA. Tuy nhiên huyền thoại và cơ hội học hỏi từ các anh là một trong những yếu tố thúc đẩy để tôi bước chân vào công ty. Hôm qua đi uống cafe với bác Vinh, mới biết rằng mỗi nhân vật này đều có một biểu tượng về con vật đại diện. :)
anh An: monkey (con khỉ). Có lẽ là thể hiện cho sự nhanh nhẹn, thông minh và khéo léo.
anh Vĩ: một con vật lai giữa rùa và thỏ (có lẽ thể hiện cho sự nhanh nhẹn + sâu sắc và vững chắc).
anh Vinh: con heo. Biết lý do vì sao, nhưng không nói được. Ha ha.
anh Phước: con hà mã. Chưa biết ý nghĩa của biểu tượng này cho lắm.
anh Trí: có nghe bác Vinh nói, nhưng hôm nay quên mất con vật đại diện. Update later.
Nguyễn Ngọc Trung: soddino - khủng long ăn cỏ => To xác nhưng hiền lành.
Tôi giật mình nhìn lại biểu tượng mà tôi đã chọn cho mình trước khi tham gia vào Pyco: KBird. Sao lại trùng hợp vậy ta? Điều kì lạ hơn nữa là tất cả các con vật này đều "lành" - không tương sinh tương khắc.
Giải thích về cái biểu tượng KBird cho nó hay ho một chút: thật ra trước đây chọn con vật này vì mình thích phóng khoáng, bay bổng, ko muốn bị ràng buộc vì bất cứ lý do nào trong mọi suy nghĩ, hành động. Chơi CS trong công ty thì lấy alias biến tấu là coolbird. Vì chim lành quá nên cứ bị bắn chết hoài, chán thiệt.
Trùng hợp
Saturday, October 24, 2009 1 phản hồiPosted by Tran Dang Khoa at 7:15 AM
Nhật ký dự án Car Racing - điều kì diệu
Thursday, September 3, 2009 5 phản hồiDavid bảo chúng tôi phải tạo ra điều kì diệu. Yes, điều kì diệu là viết một game đua xe trên iPhone được estimate trong 6 tháng bởi một công ty chuyên làm game khá nổi tiếng - và chúng tôi sẽ phải làm trong 45 calendar days.
Chúng tôi bắt đầu từ những con số khá nghèo nàn.
1 Technical architect (Khoa) + 2 developer (Đạo, Chương). Trong 3 người chỉ có 2 người có kinh nghiệm lập trình trên iPhone trong 2-3 tháng.
Ngày thứ 1: chúng tôi bắt đầu từ những game engine 3D trên iPhone. Chúng tôi chọn SiO2 vì thấy có khá nhiều game sử dụng nó và cộng đồng LTV cũng khá đông đảo.
Ngày thứ 2: Chúng tôi thực hiện các thử nghiệm nhỏ: load mô hình 3D + thực hiện các chuyển động vật lý + đưa ra các mô hình điều khiển xe bằng việc tác động lực.
Ngày thứ 5: mọi chuyện có vẻ trở nên khó khăn. Đầu tiên là việc load xe và đặt vào terrain. Xe luôn bị rơi xuyên thủng mặt đất. Kế tiếp là việc load mô hình 3D sử dụng script Python chạy trên blender. SiO2 support mạnh cho blender, nhưng lại yếu đối với các 3D design tool khác. Mọi mô hình 3D phải được export ra định dạng sio2 trước khi được load vào game. Đội ngũ 3D design của chúng tôi không quen sử dụng công cụ này nên đây là một trở ngại rất lớn.
Ngày thứ 7: áp lực bắt đầu khá nặng nề. Chúng tôi đã load được mô hình xe đơn giản nhất - chỉ có 4 bánh - 1 thân và 2 trục, điều khiển xe chạy được trên iPhone. Tuy nhiên, còn quá nhiều câu hỏi hóc búa phải trăn trở: thắng xe như thế nào, tăng tốc ra sao, chuyển số cho xe như thế nào? Không có ai có kiến thức về xe ô tô, động lực học cơ bản cũng quên sạch.
Ngày thứ 8: tôi quyết định phải đọc lại những kiến thức vật lý cơ bản và bắt đầu từ 3 định luật Newton. Very stupid.
Buổi sáng ngày thứ 9: tôi nghĩ trong đầu: tại sao phải là SiO2. Sao không tìm thử một hướng mới. Tôi mò mẫm trong các search engine và vô tình tìm được một tutorial sample cho game đua xe ở Unity engine. Hura! có vẻ bắt đầu thuận lợi.
Chiều: phát hiện ra Unity3D có version cài trên Windows. Bắt đầu cài đặt và sau đó run thử tutorial. Cool! diễn tiến khá tốt đẹp - xe chạy smooth, có cả âm thanh, thắng và gài số tự động.
Ngày thứ 10: họp team và chia task. Công việc cần làm bao gồm:
+ Đọc hiểu script để điều khiển xe
+ Tìm hiểu cấu trúc 3D của xe trong game và yêu cầu nhóm design giúp chúng tôi để có 1 mô hình xe khác cho việc thử nghiệm
+ Tìm hiểu cách hiện thực GUI trên Unity để hiện thực một số màn hình
Ngày thứ 12: chúng tôi hiểu tương đối về cách điều khiển xe và giờ đây có thể thay đổi được cả terrain và mô hình xe. Một thành công vượt ngoài mong đợi.
Ngày thứ 14: chúng tôi gặp khó khăn khi đưa game chạy trên iPhone. Mô hình 3D khá nặng và code chưa được optimize nên chỉ cần vừa start game là bị crash. Mặc dù game chạy khá cool trên desktop và web.
Ngày thứ 15: bắt tay vào research các tips để optimize performance. Chúng tôi có may mắn quen với một người bạn đã từng làm game trên Unity (Hạo - cty Halovi). Bạn đã giúp chúng tôi khá nhiều trong việc tư vấn optimize performance cho game.
Ngày thứ 17: tôi collect lại tất cả các tips and tricks để optimize performance cho Unity iPhone và đưa vào một checklist. Chúng tôi bắt tay optimize từng điểm, từng điểm một. Ngay cả phép cộng, trừ, nhân, chia trên script cũng phải được cân nhắc và review từng dòng. Ví dụ: a / 2 sẽ chậm hơn a * 0.5, ...
Ngày thứ 19: game đã chạy được trên iPhone nhưng với FPS bằng 5, siêu giật và gần như không điều khiển được. Lại tiếp tục tìm trick optimize performance và optimize tiếp.
Ngày thứ 21: xe có thể chạy trên iPhone với FPS bằng 15. Điều khiển khá smooth. Nhưng tiếc thay, xe chỉ có thể chạy với 4 bánh và 2 trục, terrain thì gần như chỉ là một mặt phẳng.
Chúng tôi buộc phải nhờ cầu viện của bộ phận design. Mô hình phải được tối ưu hơn nữa. Càng ít polygon càng tốt, càng ít texture càng tốt. Chỉ có một câu phát biểu duy nhất trong lập trình game: phải cân bằng 2 yếu tố "đẹp" và "nhanh".
Ngày thứ 23: bắt đầu có những mâu thuẫn nhỏ. Mâu thuẫn lớn nhất xuất phát từ việc: các anh design cho rằng đã optimize hoàn toàn mô hình 3D, xe chỉ có 6K polygons. Tại sao khi load xe trong Unity lại có thể là 112K triangles?
Phải tìm cách giải quyết conflict và chỉ ra điểm cần optimize tiếp theo. Có vẻ sự sống của chúng tôi đang bi đát.
Ngày thứ 24: tôi đã giải thích được vì sao có sự khác biệt giữa số polygon trong Maya và trong Unity. Nguyên nhân xuất phát từ mô hình lý thuyết về texture mapping.
Lại họp nhóm - và lần này có cả 3D design group. Chúng tôi biết các anh cũng rất mệt vì đã support chúng tôi rất nhiều.
Cuộc họp giải quyết được khá nhiều vấn đề, và cơ bản chúng tôi biết cần optimize thêm những gì, làm sao để đo được kết quả số polygons thực tế trên game từ một mô hình 3D.
Ngày thứ 25: buộc phải release một bản demo trên web cho khách hàng review - vì version hiện tại chưa thể chạy được trên iPhone smooth.
Ngày thứ 27: chúng tôi đã có một version chạy với FPS = 15 trên iPhone với mô hình xe và terrain khá ổn. Tuy nhiên sau một vài thay đổi nhỏ, FPS lại rớt về 5. Very stupid.
Ngày thứ 28: phát hiện được một trick để optimize về physic của Unity. Đây là một bước tiến khá vượt bực. Chúng tôi giảm số frame vật lý xuống để làm tăng FPS và đã thành công. Tuy nhiên việc control xe có chút khó khăn vì frame vật lý không còn liên tục nữa.
Ngày thứ 29: optimize script để làm cho việc control xe smooth hơn bằng cách phân tách các hàm xử lý vào Update và FixedUpdate hợp lý.
Ngày thứ 30: bắt tay vào làm GUI cho các màn hình game. Hoàn thiện kịch bản.
Từ ngày thứ 31-34: chỉ hoàn tất kịch bản game và fix các bug về mô hình, control xe smooth hơn.
Ngày thứ 35: add thêm âm thanh cho game: tiếng xe chạy, tiếng va chạm vào tường.
Ngày thứ 36: phát hiện ra deployment guideline của mình thiếu đoạn jailbreak iPhone. Hì hục hết buổi sáng và nửa buổi chiều để jailbreak iPhone. Từ đó về sau, chúng tôi tự hào có thể jailbreak iPhone trong 5 phút.
Ngày thứ 37: chúng tôi không thể deploy cho khách hàng bằng cách sử dụng jailbreak iPhone. Họ bảo rằng cách này quá khó. Thật sự, Apple có support cách deploy AdHoc distribution cho beta user - sử dụng iTunes. Chỉ cần có UID của iPhone + provisioning profile (một dạng certificate để iTunes nhận dạng và install application).
Chiều: loay hoay mãi không deploy được mặc dù nghĩ rằng đã làm đúng tất cả các step. Stuck!
Đến gần 10h tối, thì cũng deploy thành công bằng AdHoc distribution. Viết mail thông báo cho onshore PM.
1 AM: bật mail công ty để check xem có tin gì mới. Problem: Onshore PM không deploy được theo kiểu AdHoc mặc dù mình đã đăng kí UID iPhone của họ với Apple và cung cấp đúng provisioning profile. Lúc chiều chính xác mình đã deploy thành công với iPhone 3G, 2G và 3GS. Wtf's happenning?
4 AM: search hoài nhưng vẫn stuck - vì thấy mình đã apply hết các trick tìm được rồi. Đi ngủ.
Ngày thứ 38: bị áp lực từ onshore và khách hàng. Với tất cả thông tin họ cung cấp, vẫn không tìm ra được vấn đề do đâu.
Lại một đêm ngồi làm đến 4 AM. Không dám check mail sợ bị áp lực không research tiếp được. Bật mail lên ghi vài dòng suggestion: "đề nghị backup solution hack iPhone và deploy bằng SSH. Onshore cần thử gấp cách này và cho chúng tôi kết quả, để xử lý những tình huống phát sinh khác"
Ngày thứ 39: vô vọng, kiệt sức. Vậy mà trước khi vô công ty phải refresh lại cái mặt để anh em nhìn vô không thấy nản. Chỉ có một câu nói còn ám ảnh mãi trong đầu: phải đốt cháy chính mình thì mới có thể truyền lửa cho người khác được. Lửa ơi trong tôi, xin đừng tắt.
Bật mail thì nghe tin Jeremy deploy thành công bằng cách jailbreak iPhone 3G và 3GS. Một chút hy vọng lóe lên. Dù sao thì cũng không phải cùng đường. Mặc dù vậy, khách hàng vẫn không happy.
Lại phải tìm tiếp. Thức đến 3 AM thì đuối. Có đọc được loáng thoáng 2 cách tạo application ID trên Apple là static và wildcard. Wildcard có nghĩa là dùng tên có * để đăng ký. Ví dụ: com.pyco.*, static là tên chính xác.
Đọc nhưng không remote vô được máy MAC ở công ty để làm.
Ngày thứ 40: buổi sáng, build cái app theo cách dùng wildcard app ID. Nhưng phải đợi onshore PM đến chiều, vì lệch múi giờ. Send app lúc 1 h chiều, ngồi đợi.
3h PM: Nicolas gõ qua MSN. Congratulation, it's working. You're the best.
Thở phào nhẹ nhỏm. Muốn hét lên Eureka, nhưng sợ bà con nói mình khùng.
CTO phải nhảy vào can thiệp vì project quá quan trọng. Nhưng lúc Gilbert vừa định kêu mình vào conference thì problem đã xử xong.
Buổi tối, ngồi support onshore deploy với bản build mới đến gần 11h mới về nhà. Oải, chỉ muốn ngủ.
Ngày thứ 41: âm thanh của xe bị chê. Hic, phải ngồi mở Youtube lên coi xe Ferrari chạy thế nào. Từ nhỏ tới lớn không coi đua xe, không biết nó gầm rú ra sao để làm cho chính xác.
Define solution + apply âm cho xe rú từ nhỏ đến to, từ to đến nhỏ. Làm hoài vẫn không giống. Nicolas chỉ nói: tao thấy mày làm hoài nó cũng chẵng khác biệt mấy.
Team ai cũng oải. Mặt mình lúc đó nhìn chắc cũng bi kịch lắm nên anh em nó mua cơm tối cho ăn mà cứ đòi cho free. Hic, quyết định của mình lúc đó: anh em về nhà relax đi, oải hết rồi. Mình ở lại confirm với Nicolas chút rồi về.
Sau một hồi discuss, quyết định phải code để cho onshore thấy hiệu ứng âm thanh như họ yêu cầu. Đến 11h thì xong task. Nicolas bảo: âm thanh vậy tao thấy được rối á. Về nhà.
Ngày thứ 42: fix thêm một số effects và chỉnh lại một chút về GUI cho hoàn hảo. Game coi như xong.
Ngày thứ 43: nghỉ lễ 2-9. Không dám về nhà vì ở quê không online được. Ngồi nhà nhưng tâm trạng thấp thỏm.
Ngày thứ 44: không có feedback mới. Khách hàng đã happy.
Ngày thứ 45: game được đem triễn lãm ở showroom.
Kết thúc! chúng tôi đã làm nên điều kì diệu như vậy đó. Cảm ơn rất nhiều nhé mọi người. Đặc biệt là Chương và Đạo - những người đã đóng góp rất lớn vào sự thành công của dự án. Anh em chúng ta đã trải qua những tháng ngày thử thách, nhưng cũng rất vui. OT mà đi nhậu thịt chó, uống rượu - thì còn gì bằng, đúng không nào?
Posted by Tran Dang Khoa at 11:23 AM
Giang hồ
Saturday, August 1, 2009 1 phản hồiTình cờ lang thang đọc được bài thơ này.
Giang hồ
-Phạm Hữu Quang-
Tàu đi qua phố, tàu qua phố
Phố lạ mà quen, ta giang hồ
Chẳng lẽ suốt ngày bên bếp vợ
Chẻ củi, trèo thang với... giặt đồ?
Giang hồ đâu bận lo tiền túi
Ngày đi ta chỉ có tay không,
Vợ con chẳng kịp chào xin lỗi
Mây trắng trời xa, trắng cả lòng...
Giang hồ ta ghé nhờ cơm bạn
Đũa lệch mâm suông cũng gọi tình
Gối trang sách cũ nằm nghĩ bụng
Cười xưa Dương Lễ với Lưu Bình.
Giang hồ có bữa ta ngồi quán
Quán vắng mà ta chẳng chịu về
Cô chủ giả đò nghiêng ghế trống
Đếm thấy thừa ra một gốc si.
Giang hồ mấy bận say như chết
Rượu sáng chưa lưa đã rượu chiều
Chí cốt cầm ra chai rượu cốt
Ừ. Thôi. Trời đất cứ liêu xiêu...
Giang hồ ta chẳng thay áo rách
Sá gì chải lược với soi gương
Sáng nay mới hiểu mình tóc bạc
Chợt tiếng trẻ thưa ở bên đường.
Giang hồ ba bữa buồn một bữa,
Thấy núi thành sông biển hoá rừng
Chân sẵn dép giầy, trời sẵn gió
Ngựa về. Ta đứng. Bụi mù tung...
Giang hồ tay nải cầm chưa chắc
Hình như ta mới khóc hôm qua
Giang hồ ta chỉ giang hồ vặt
Nghe tiếng cơm sôi cũng nhớ nhà.
Thích nhất 4 câu cuối: "Giang hồ tay nải cầm chưa chắc. Hình như ta mới khóc hôm qua. Giang hồ ta chỉ giang hồ vặt. Nghe tiếng cơm sôi cũng nhớ nhà". Có chút gì đó giống với tứ thơ trong Tràng Giang của Huy Cận
"Lòng quê dợn dợn vời con nước
Không khói hoàng hôn cũng nhớ nhà."
Thôi thì bỏ qua những bình luận văn chương. Ngẫm lại, từ lúc ta xa quê hương cũng đã 9 năm rồi. Chiều nay, thèm lắm tiếng cơm sôi bên bếp lửa, tiếng mẹ gọi về ăn cơm. Thèm được ngửi mùi rạ cháy trên đồng, mùi mạ non mới chớm. Ta muốn nhìn thấy con sông Hậu và những dòng lục bình trôi giữa dòng phù sa đỏ quạch trong mùa nước đổ. Ba mẹ ơi, quê nhà ơi ... nhớ lắm.
Giang hồ ư? Ừ, ta cũng chỉ là một gã giang hồ vặt bên cuộc đời bé nhỏ này thôi.
Ta đi chẳng phải để xem sông núi rộng dài, chỉ để xem lòng mình dài rộng đến đâu...
Posted by Tran Dang Khoa at 7:26 AM
Tướng giỏi - anh là ai?
Wednesday, July 22, 2009 1 phản hồiChiều nay, tôi tình cờ nghe một mẫu đối thoại giữa 2 người bạn làm tôi phải suy nghĩ khá nhiều:
A: anh làm ở vị trí nào trong công ty?
B: mình làm project manager - ở bộ phận quản lý.
A: chuyên môn của anh là gi?
B: ...
A: ở VN, ít có PM nào không xuất phát từ vị trí developer. Trước đây anh đã từng làm trên những domain nào?
B: mình vào làm ở vị trí quản lý trực tiếp. Chuyên môn của mình là quản lý dự án.
A: wow.
B: ở công ty mình, các department được chia ra theo nhóm chức năng để chuyên môn hóa. Vì vậy người quản lý chỉ tập trung vào quản lý dự án.
Tôi không có ý kiến về mẫu đối thoại ở trên, nhưng tôi thực sự muốn chia sẻ ở góc nhìn của một người thiên về kĩ thuật. Sau mẫu đối thoại đó, tôi tự chiêm nghiệm lại những gì mình đã từng trải qua khi đã từng là một người lính và đôi khi (cần) là một vị tướng. Câu hỏi lớn nhất trong đầu tôi suốt bao năm qua là: làm thế nào để trở thành tướng giỏi?
Trải qua nhiều năm chinh chiến, tôi rút ra được một số kinh nghiệm trận mạc. Vì vậy, tôi muốn truyền tải đến những người anh em đã, đang và sẽ cùng sát cánh bên tôi những đức tính mà tôi cho rằng một vị tướng giỏi bắt buộc phải có. Đó cũng chính là phương châm mà tôi áp dụng trong công việc hiện tại:
1. Gần như không có một vị tướng giỏi nào mà không từng chiến đấu như một người lính. Vì vậy hãy thấu hiểu và chia sẻ với đồng đội của bạn dù ở bất cứ cương vị nào như những người anh em trên cùng một chiến hào.
2. Một người lãnh đạo (leader) giỏi phải có khả năng định hướng cho tập thể. Vì vậy, nếu không có kinh nghiệm chuyên môn và nỗ lực hơn người khác, thì bạn không thể làm lãnh đạo. (không thể chấp nhận một người leader chỉ đơn thuần quản lý task, theo dõi tiến độ, và chỉ nói mà không biết làm).
3. Cho dù ở bất kì hoàn cảnh khắc nghiệt nào đi nữa, hãy hiểu rằng tâm trạng/ tinh thần của bạn chính là của cả tập thể. Bạn không được nản chí hoặc ít nhất không thể hiện điều đó ra trước mặt những người đồng sự. Phải động viên chính bản thân mình thì mới có thể động viên được người khác.
4. Đức hy sinh: trong mọi hoàn cảnh khắc nghiệt, hãy là người tiên phong gánh chịu trách nhiệm. Dù thành viên của bạn có phạm phải sai lầm chết người nào đi nữa thì đó cũng là lỗi của chính bạn. Vì một lãnh đạo giỏi sẽ không thể để thành viên của mình phạm sai lầm. Hãy nhường vinh dự và phần thưởng cao quý nhất cho những thành viên của bạn nếu đạt được thành quả - vì không có họ, bạn sẽ không là gì cả.
5. Dám công nhận khuyết điểm trước tập thể: nếu bạn phạm sai lầm, hãy thừa nhận rằng mình sai. Đừng cố gắng bao biện hoặc đỗ lỗi cho hoàn cảnh. Không nghiêm khắc với chính mình, thì không ai có thể phục bạn được.
6. Truyền lửa: hãy đốt cháy chính mình để lan tỏa ngọn lửa cho tập thể. Tôi không bao giờ làm bất kì điều gì mà không dồn hết sức với tất cả đam mê, nhiệt huyết. Chính điều đó sẽ giúp cho đồng đội của tôi sẽ cùng tôi thắp lên một ngọn lửa lớn để đốt cháy những khó khăn trước mặt.
Tôi tin rằng không có một người lãnh đạo giỏi nào không có đủ những đức tính ở trên. Tôi kỳ vọng những người đồng sự của tôi và tôi sẽ trở thành những người lãnh đạo giỏi trong tương lai.
Posted by Tran Dang Khoa at 9:18 AM
Anh là một con cừu - Bùi Chí Vinh - KBird - Hoàng Hà
Thursday, July 16, 2009 0 phản hồiSáng tác (nguyên bản): Bùi Chí Vinh
Cướp hết tình yêu dành cho mẹ anh đi
Em cướp hết như một người chinh phục
Kể từ đây không còn ai thân thuộc
Anh mồ côi trong đôi mắt em rồi
Hãy an ủi anh bằng những nụ hôn môi
Hãy che chở anh bằng vòng tay con gái
Hãy dạy anh đánh vần và tập nói:
" Yêu, yêu, yêu ... " cho đến lúc lìa đời
Em đã trở thành một bà mẹ nhân đôi
Đi chăn dắt một con cừu thần thoại
Một con cừu chứ sao? Đầy vụng dại
Anh là con cừu tình nguyện được ... mồ côi
KBird:
Anh là con cừu tình nguyện được ... mồ côi
Dù muốn hay không ... cũng trót yêu rồi
Nếu chăn dắt xin em nhè nhẹ
Đừng để cừu này ... ngỏm mất toi.
Hoàng Hà:
@ Trandangkhoa:
Này cừu non,ngươi mau ngoan nhé.
Đây suối trong,kia đồng cỏ xanh tươi
Có gió,có hoa và nắng nhuộm
Xanh thẳm làn mây phía cuối đồi.
Dẫu tình yêu ta không thay thế
Như tình yêu người mẹ thứ hai
Nhưng nếu lỡ một mai dâu bể
Sẽ cùng ngươi đi hết đường dài.
Posted by Tran Dang Khoa at 8:21 PM
Chết
Friday, June 26, 2009 0 phản hồiSáng nay chat với Thanh, cô bạn cũ hồi phổ thông. Nghe tin mấy đứa bạn học cùng khóa lớp 12 vừa qua đời. Bỗng dưng giật mình: phải chăng con người ta có số. Tự nhiên nghĩ loáng thoáng lại bài viết về 1 anh chàng IT vừa chết ở eTown, đâm ra nghĩ vu vơ.
Ai cũng phải trải qua sinh, lão, bệnh, tử. Cuộc sống vô thường như cái lẽ tự nhiên của nó.
Bạn tôi ơi, rũ bỏ hết chấp nê đi. Dẫu sao ta cũng chỉ có một kiếp đời để sống cho trọn vẹn. Cố sống sao cho đừng thẹn với lòng.
Posted by Tran Dang Khoa at 9:47 PM
Diseño e iconos por N.Design Studio | A Blogger por Blog and Web