Thứ Sáu, 17 tháng 1, 2014

Phần 1 - Self-adjusting computation là gì?

Giới thiệu về Bidirectional Transformations

Một trong những bài toán mà tôi đang theo đuổi đó là bài toán "incremental view-update" - tạm dịch là "cập nhật tăng dần". Đây là một trong những bài toán kinh điển, vốn đã được cộng đồng nghiên cứu cơ sở dữ liệu theo đuổi từ lâu. Tuy nhiên với hướng tiếp cận cho chuyển đổi hai chiều (bidirectional transformations - Bx) thì bài toán này thoả mãn 3 tiêu chí cơ bản trong việc lựa chọn bài toán nghiên cứu: một là bài toán thú vị (interesting problem) do bài toán phổ biến từ lâu nhưng được nhìn lại ở khía cạnh chuyển đổi song phương (Bx); hai là đủ khó (difficult problem): trước nay chưa ai nghiên cứu giải quyết bài toán này cho Bx; và ba là hữu dụng (useful problem): có khả năng giải quyết được rất nhiều bài toán thực tế liên quan đến Incremental view-update trong Bx.

Chuyển đổi hai chiều hiện diện ở rất nhiều trong lĩnh vực công nghệ phần mềm. Sau đây tôi sẽ đưa ra nhiều ví dụ khác nhau để làm rõ thêm về việc ứng dụng chuyển đổi hai chiều trong đó.

             Ví dụ như đồng bộ bookmarks ở các trình duyệt khác nhau, hoặc trên nhiều máy tính/thiết bị khác nhau. Khi các bạn xài nhiều máy tính khác nhau, trang web mà bạn đánh dấu trên máy tính này sẽ được tự động đồng bộ với bookmarks của bạn ở các máy tính khác khi bạn bật nó lên. Ví dụ này nhìn bên ngoài tuy đơn giản nhưng làm thế nào để thực hiện việc đồng bộ một cách tự động và chính xác thì lại là một việc không dễ dàng.

             Một ví dụ khác là trong quy trình phát triển phần mềm, chúng ta có các bước khác nhau trong quá trình phát triển một phần mềm như lấy yêu cầu, phân tích, thiết kế, cài đặt, kiểm thử và đóng gói cho khác hàng. Nếu thay đổi xảy ra ở một bước nào đó ví dụ như thiết kế, yêu cầu đặt ra là làm sao để thay đổi đó có thể tự động được đồng bộ đến cá bước trước đó (như lấy yêu cầu, phân tích) hay sau đó (như cài đặt, kiểm thử và đóng gói).

Big Picture:

Bx được sử dụng để giải quyết nhiều bài toán ở các lĩnh vực khác nhau như software engineering, programming languages, ... Hiện tại, nhóm của chúng tôi đã xây dựng được một framework tên GRoundTram để hỗ trợ chuyển đổi hai chiều một cách tự động. Cho đến hiện nay (Jan 2014), vẫn chưa có được sự thống nhất để đưa ra định n ghĩa về BX là gì. Mỗi một nhóm nghiên cứu (subcommunities) sẽ đưa ra định nghĩa của riêng mình và quy chiếu một cách tương đối so với các nhóm nghiên cứu khác tuỳ theo cách tiếp cận của từng nhóm.

BXs cũng được nghiên cứu ở các cộng đồng khác nhau, (tôi tạm dịch một cách thuần Việt những thuật ngữ này) và đóng một vai trò quan trọng trong các nghiên cứu này ví dụ như: công nghệ phần mềm (software engineering), cơ sở dữ liệu (database), phát triển hướng mô hình (model driven development), đồng bộ hoá dữ liệu trùng lập đa định dạng (synchronization of replicated data in different formats), ...

           Có nhiều hướng tiếp cận BXs khác nhau, trong đó lens là một cách tiếp cận hướng ngôn ngữ. Lens là một chuyển đổi hai chiều giữa cặp dữ liệu, trong đó những thay đổi dữ liệu của bất kỳ bên nào, sẽ được cập nhật vào vị trí thích hợp cho bên còn lại. Phát biểu một cách nôm na thì Lens là chương trình biến đổi hai chiều (BX program) với 2 hàm get (forward) để biến đổi dữ liệu nguồn sang đích và put (backward) để biến đổi từ dữ liệu đích sang nguồn. Để đảm bảo tính đúng đắn và trong chuyển đổi hai chiều trên lens thì get & put phải thoả mãn hai thuộc tính gọi là well-behavedness properties như sau: (1) GetPut: đảm bảo nếu target không bị thay đổi thì source cũng không bị thay đổi & (2) PutGet: thay đổi trên target phải được cập nhật lên source chính xác.

Hiệu năng trong BXs là một vấn đề rất đáng được quan tâm. Với khối lượng dữ liệu lớn (Big data), thì việc chuyển đổi ở chiều ngược lại (putback hoặc backward transformation) đóng vai trò rất quan trọng. Đưa thêm ví dụ cụ thể để minh hoạ.

            Ví dụ với dữ liệu nguồn lớn (source) thì chiều get (forward) chúng ta sẽ thu được những thông tin rút gọn cần thiết ở đích (target). Tuy nhiên khi thực hiện cập nhật ở đích (target) và thể hiện những thay đổi này về nguồn (source) thì putback yêu cầu phải có dữ liệu nguồn ban đầu (original source) để thực hiện việc cập nhật. Trong ngữ cảnh đó việc cập nhật sẽ không hiệu quả vì phải tính toán lại trên toàn bộ dữ liệu nguồn ban đầu (original source) kết hợp với dữ liệu đích mới (modified target). Khi này vấn đề đặt ra là làm thế nào để tăng hiệu năng của phép chuyển đổi hai chiều trong lens và vẫn đảm bảo được qui tắc well-behavedness của lens.

            Bài toán đặt ra ở đây là làm thế nào để thực hiện phép biến đổi get/put hiệu quả hơn khi có những thay đổi nhỏ ở nguồn hoặc đích. Thay vì tính toán lại toàn bộ, làm thế nào để tái sử dụng lại nhiều nhất các phép tính toán đã thực hiện và chỉ phải tính lại đúng những phần bị thay đổi mà thôi. Bài toán thuộc dạng này được gọi là Incremental updates - đây là bài toán được nghiên cứu từ lâu trong cộng đồng nghiên

Phương pháp:
     Yêu cầu đặt ra của bài toán là làm thế nào để tăng hiệu năng của lens khi thực hiện biến đổi 2 chiều. Cụ thể hơn là với những thay đổi nhỏ ở nguồn (source) hoặc đích (target), ta có thể tái sử dụng lại các phép tính toán và kết quả đã thực hiện trước đó mà không cần thiết phải tính lại toàn bộ.

     Có nhiều phương pháp khác nhau để giải quyết bài toán Incremental update trong BXs như là
          (1) tính toán lại toàn bộ mà không tái sử dụng bất kỳ phép tính nào - cách này kém hiệu quả,
          (2) thiết kế riêng cho từng bài toán, cụ thể trong trường hợp này là thiết kế riêng phương án tăng hiệu năng cho lens - phương pháp này hiệu quả cho từng bài toán cụ thể, nhưng không tổng quát hoá được và áp dụng một cách có hệ thống được
          (3) đặc tả những thay đổi có thể xảy ra để khi nguồn hoặc đích bị thay đổi thì chỉ cần tính toán lại trên những thay đổi đó mà thôi (Edit lenses) - cách này yêu cầu nhiều ràng buộc và không thân thiện với người sử dụng
          (4) Self-adjusting computation: ghi nhớ lại những phép tính đã thực hiện và khi bị thay đổi thì tái sự lại nhiều nhất các phép tính có thể - cách này có hiệu quả cao hơn hết do có thể biểu diễn mối quan hệ giữa các phép tính và dữ liệu bằng cách xây dựng đồ thi phụ thuộc động (Dynamic dependence graphs), và có thể áp dụng một cách có hệ thống cho nhiều bài toán khác nhau, và thân thiện với người dùng - người dùng không cần biết nhiều về cấu trúc bên trong, chỉ cần thay đổi một ít trong CTDL hiện có của mình và của chương trình mình viết.

Ý tưởng:
          Thử nghiệm bằng cách sử dụng phương pháp để giải quyết bài toán Incremental computation trên để giải quyết vấn đề Incremental update trong BXs. Tuy nhiên việc kết hợp này cũng đặt ra nhiều vấn đề liên quan cần giải quyết như: làm thế nào để giải quyết được compositional problem?.
          Ví dụ: với dữ liệu nguồn S (Source) và NHIỀU chương trình biến đổi hai chiều f (BX program) chương trình này sẽ áp dụng điều kiện p trên S để thu được V. Mô hình của compositional như sau: S <-> f <-> V1 <-> f <-> V2 <-> f <-> V3 <-> ... <-> V.
          Một vấn đề khác cũng được đặt ra đó là làm thế nào để xây dựng phương pháp một cách có hệ thống thay vì một giải pháp tình thế (ad hoc way) ?

Giải pháp:
          Kết hợp phương pháp self-adjusting computation với BXs, thử nghiệm bước đầu với Lenses để  tăng hiệu năng. Cách tiếp cận này có các ưu điểm sau:
                    (1) Modularity: với các chương trình BX hiện có, việc xây dựng thành Self-adjusting BX có thể thực hiện một cách có hệ thống mà không cần thay đổi toàn bộ cấu trúc chương trình sẵn có.
                    (2) Efficiency: cách tiếp cận này có thể tăng hiệu năng của chương trình vì nó tái sử dụng lại các phép tính toán và kết quả đã được thực hiện trước đó một cách chính xác.
                    (3) Compositional: nhiều chương trình chuyển đổi hai chiều có thể được kết hợp lại với nhau, trong đó output của một chương trình này có thể trở thành input của một chương trình khác một cách dễ dàng.

(Còn tiếp).

Chủ Nhật, 12 tháng 1, 2014

Hành trình khám phá bản thân & Vượt qua chính mình (Phần 1)

Dành thời gian cho một bài viết vào thời điểm này thì có lẽ không hợp lý tí nào, khi thời hạn báo cáo đã sắp hết. Nhưng dành thời gian để lắng đọng và đối diện với những khó khăn thông qua những câu chữ rành mạch, tự "độc thoại" hay "đối thoại với chính mình" thì cũng xứng đáng phải không.

Từ khi bắt đầu chuyến đi thực tập ở Tokyo thì tôi mới thực sự biết đến môi trường nghiên cứu khoa học là như thế nào. Nói cho ngay thì trước đó tôi chẳng có khái niệm gì ráo trọi, những thuật ngữ như paper, journal, publications, citation, h-index, ... là những thứ mà tôi biết về mặt ngữ nghĩa, nhưng để cảm nhận và thấu hiểu nó thì ... không.

Thực tập ở Viện thông tin quốc gia Nhật bản (NII) là một giai đoạn tuyệt vời, ý định đi theo con đường khoa học bắt đầu từ đây. Môi trường nghiên cứu khoa học đẳng cấp với những giáo sư có uy tín cao trong lĩnh vực mà họ theo đuổi. Đây chính là lý do khiến tôi quyết tâm theo xin theo họ cở nơi này. Có những biến cố xảy ra mà tôi hoàn toàn không lường trước được, chính là động đất. Trận động đất lịch sử của nước Nhật đã làm nổ 3 lò phản ứng hạt nhân Fukushima ở quốc đảo này. Nhưng điều này cũng không làm tôi chùng bước mà ngược lại tôi càng muốn quay trở lại nơi này. Bởi đơn giản tôi nghĩ rằng: Khủng hoảng chính là cơ hội.



Tôi vẫn còn nhớ rất rõ ở tại thời điểm đó, hầu hết các thực tập sinh quốc tế đều trở về nước của họ. Trong hoàn cảnh đó, tôi cũng có dịp thức trắng đêm các bạn người Anh, Ấn để động viên và cập nhật tình hình của nhau. Cậu bạn người Anh thì đốt thuốc cả đêm và uống bia cầm hơi để cân nhắc về quyết định có quay về hay không. Khi hỏi ra thì mới biết được nguyên nhân khiến cậu ta đắn đo là vì nếu như ra đi vì bất kỳ lý do nào trong hoàn cảnh này thì cơ hội để quay trở lại tiếp tục công việc của cậu ta ở Tokyo là Zero. Cậu ta giải thích đơn giản là nguyên tắc ở Nhật nó thế, nếu anh đã xin nghỉ ở công ty nào đó rồi thì đừng mong quay trở lại. Nói một cách nôm na thì nguyên tắc này gần giống với câu nói "Người ra đi đầu không ngoảnh lại".

Nhưng cũng chính trong bối cảnh khủng hoảng này mà tôi đã tìm thấy cơ hội cho chính mình. Vì rằng tôi đã từng ở Nhật trong hoàn cảnh như vậy và mọi người cũng rất ngại ngần khi quay trở lại sau thảm hoạ kép động đất và hạt nhân. Vào tháng 9 năm 2011, khi hội nghị về Functional Programming (ICFP) được tổ chứng ở ngay tại Viện thông tin quốc gia Nhật Bản (NII), ban tổ chức đã trấn an khách tham dự bằng cách liên tục cập nhật về độ an toàn của không khí, thực phẩm và các vấn đề liên quan đến ... phóng xạ. Và hơn thế nữa, ngay tại bàn đăng ký của hội nghị lúc nào cũng có một máy ... .đo phóng xạ cầm tay để cho biết chỉ số phóng xạ trong môi trường hiện giờ là ... an toàn. Nhưng theo thông tin tôi được biết thì ông Giáo thân yêu của tôi tại thời điểm đó, hàng ngày vẫn chỉ uống nước khoáng ... nhập khẩu từ Châu Âu mà thôi :D.

(source: http://d.hatena.ne.jp/iwiwi/20110920/1316528846)

Có lẽ tôi đã đi ... hơi xa chủ đề mà tôi định nói. Thôi thì hơi lan man một chút về những biến cố khó quên trong đời. Nhưng hành trình vượt qua chính mình là khi tôi bắt đầu xin học bổng và nộp đơn xin theo học Tiến sĩ ở Tokyo. Và may mắn tôi đã làm được. Tôi xin hẹn kể lại câu chuyện này vào một dịp khác....

(Còn tiếp)

Thứ Hai, 6 tháng 1, 2014

Đôi dòng về facebook và lướt web - Where is my time?

Trước hết tôi phải công nhận rằng Facebook (FB) quả là một phương tiện kết nối những người bạn và những người không quen biết một cách tuyệt vời. Về sức lôi cuốn của FB thì tôi nghĩ là nó quá phổ biến và ích lợi với nhu cầu của đại đa số người sử dụng internet nên tôi cho rằng không cần phải nêu chi tiết ở đây. Liệu có bao giờ bạn thử đặt câu hỏi xem một ngày bạn dành bao nhiêu thời gian cho FB - một cách thẳng thắn nhất.

Với cá nhân tôi, tôi không có thói quen post những cảm nghĩ của mình lên FB, nhưng rất sẵng sàng đọc lướt qua tâm trạng của mọi người. Bạn đoán thử xem mỗi lần tôi "viếng thăm" FB mất bao nhiêu thời gian? Xin thưa với các bạn rằng dạo đầu thì tôi mất khoản 10-15 phút với các cảm xúc của nhiều người, vì rằng có nhiều người mà tôi không quen biết cứ hiện lên FB của tôi, nên tôi phải lướt qua họ để gặp những khuôn mặt mà tôi quen biết. Với những cảm nghĩ của kèm liên kết báo chí thì đây quả là một thảm hoạ đối với tôi. Bởi vì chính sự tò mò đã tiêu tốn nhiều thời gian hơn cho FB.

Bạn hãy hình dung nếu như bạn mở một cánh cửa để vào căn phòng, trong căn phòng đó lại có 5 cánh cửa khác được trang trí rất lôi cuốn và mỗi trong số năm cánh cửa đó đều phù hợp với từng lứa tuổi, chính vì vậy nên bạn lại bước tiếp và bước tiếp trong mê cung đó.

Một khía cạnh khác mà tôi nghĩ là rất quan trọng trong việc quản lý thời gian và hiệu suất làm việc liên quan trực tiếp đến hành vi mà tôi tạm gọi là "lướt web vô định" và một phương tiên "thời thượng" FB. Ở đây từ "lướt web vô đinh" để ám chỉ trạng thái không tự chủ của người dùng internet khi họ online, và tuân theo sự dẫn dắt của trí tò mò bằng cách lần theo những liên kết được chia sẻ hay duyệt lần lượt các trang tin tức mà họ biết. Khi lên FB thì bạn thường rơi vào trạng thái "lướt web vô định", và đây chính là sát thủ tiêu diệt thời gian của bạn.

Có thể bạn sẽ lý luận rằng một ngày bạn chỉ lên FB vài lần hoặc giả khi xong việt lướt web tôi lại quay trở về công việc ngay lập tức. Xin thưa với các bạn rằng việc này có ảnh hưởng xấu về mặt tâm lý và sự tập trung của bản thân các bạn. Khi quay trở lại công việc, bạn sẽ mất khoản 5 - 15 phút để lấy lại được sự tập trung trước khi bắt đầu công việc. Và sự tập trung của bạn chỉ tốt ở 15-30 phút đầu tiên mà thôi, chính vì vậy nên bạn sẽ có khuy hướng viếng thăm FB và lướt web vô định nhiều lần trong một ngày hơn bạn tưởng tượng.

Trên đây là một vài mặt trái của FB mà tôi muốn chỉ ra với riêng bản thân mình nhằm chia sẻ góc nhìn cá nhân với mọi người.

Còn BẠN thì sao?

Thứ Sáu, 3 tháng 1, 2014

Tản mạn

Tập trung tư tưởng là một điều gì đó xa xỉ với nó. Thân xác nó ngồi đó, nhưng thần trí thì lang thang mơ về một nơi vô định. Qua năm mới này nó lại nhích dần đến thời kỳ "tam thập nhi lập", mà điểm qua điểm lại thì vẫn tay trắng hoàn trắng tay. Nó bắt đầu một bước ngoặc mới khi nhảy cóc từ vùng quê thanh bình lên phố thị chen chúc. Rồi lại nhảy oạch bước nữa từ Sài gòn phố thị qua Tokyo náo nhiệt, đèo bồng theo cả tình yêu lớn và tình yêu vĩ đại của mình. Nhưng trong tâm trí hắn vẫn còn mãi phiêu du ở một phương trời nào đó, một nơi mà hắn có thể tung hoành ngang dọc chứ không chết dí trong một cái kiếp sống "đui câm điếc thì không" nhưng "nhìn mà không thấy, nói mà không nghe, và dẫu nghe thì cũng không biết". Đó chưa phải là ước mơ cuối cùng của hắn, chẳng là hắn chia ước mơ ra thành từng khoản nhỏ, và cứ từ từ mà gậm nhắm từng chút một. Ít ra là đã gậm được một nữa ước mơ.
Bài báo cầm lên đọc ít câu rồi lại quay đầu với bao suy nghĩ, hắn thích suy tư, ngẫm nghĩ về thời cuộc, về con người, về những gì thực tế. Và trong cả việc làm, hắn cũng là con người rất thực tế, vậy nên những gì hắn phải làm sao mà gượng ép và gò bó trong những điều trên mây. Vậy nên trong lòng hắn rất lấy làm khó chịu. Kiếp sống này là vô thường, hạnh phúc cho người khác và hạnh phúc cho chính mình. Nếu như bản thân mình không thấy hạnh phúc, thì mình cũng không thể suy nghĩ, hành động và thể hiện xúc cảm như một người hạnh phúc. Một năm nhìn lại nỗ lực cũng đã có rất nhiều, ước mơ cũng đã được hoàn thành phần nào, tạm đúc kết trong mấy chữ rất thường sử dụng từ khi còn là học sinh trung học cơ sở. Đó là "tận nhân lực, truy thiên mệnh" - Hãy cố gắng hết sức, và không cần phiền muộn về quá khứ hoặc tương lai, chỉ cần sống tốt từng phút từng giây hiện tại là được.
Với cuộc sống vô thường này, những ước mơ chính là nguồn sống, nguồn hạnh phúc của mỗi con người. Vậy nên hãy phấn đấu để đạt được những ước mơ mà mình hằng ấp ủ, hãy gạt bỏ những nỗi sợ hãi vô minh, hãy mạnh dạn làm theo những gì con tim mách bảo. Và trên hết là không bao giờ ân hận vì đã làm theo những gì mình cho là nên làm.