Introduction to Functional Reactive Programming

Phải hơn nửa năm rồi tôi không viết blog, chủ đề Functional Reactive Programming mà tôi hứa với các bạn trong bài trước về Declarative Programming vẫn còn bỏ ngỏ. Mặc dù  tôi vẫn học, vẫn tìm hiểu và làm việc với FRP hàng ngày, vẫn gặp những bài toán cũng như cách giải quyết theo hướng Reactive. Nhưng quả thật tôi không muốn viết những cái nhỏ lẻ, viết lại những cái mà bạn có thể dễ dàng tìm thấy trên mạng, nhất là = tiếng Việt. Tôi muốn mình phải thật sự hiểu, phải có cách diễn đạt của riêng mình để giúp các bạn có được tư duy theo cách Reactive, thứ  mà cá nhân tôi phải mất gần 9 tháng tổng hợp, ghép nối lại.

5k iMac Mod_Small

Đó là nguyên nhân sâu xa dẫn đến việc lỡ hẹn với các bạn, còn nguyên nhân trực tiếp thôi thúc tôi triển khai chủ đề này là vừa qua tôi có tham gia Tech Talk #4 chủ  đề dành cho Mobile. Tôi đăng ký làm speaker với chủ đề FRP và được thực hiện việc trình bày trong vỏn vẹn có 5 phút, Q&A trong vòng cũng 5 phút thôi (do nói gần cuối nên phần Q&A của tôi bị cắt còn đúng 1 câu hỏi).

Và bạn biết đấy, kiến thức, kinh nghiệm bạn có được trong 9 tháng dù ít dù nhiều cũng khó lòng mà gói gọn trong vòng 5 phút được. Tôi phải bỏ bớt 1 phần demo, không cho khán giả có thời gian suy nghĩ mà bắn liên thanh, ba hoa về  Reactive, Functional, Stream, Signal... Có thể tôi đã sai khi đăng ký chủ đề mới, khó và có quá nhiều cái để nói. Tôi có thể dùng 1 slide dài hơn, đầy đủ hơn sau đó để mọi người tìm hiểu thêm. Tuy nhiên vụ #đừngimlặng làm tôi suy nghĩ nhiều lắm. Với tinh thần chia sẻ, mong muốn share để được share không cho phép tôi ngồi yên được nữa. Cần phải có 1 bài đầy đủ, chi tiết hơn để chuộc lỗi, phải giữ lời hứa với anh em. Ai thắc mắc động cơ viết bài này là gì thì tôi trả lời luôn là động cơ quyền lực nhé!

Ahihi, deep thế đủ rồi, bắt tay vào chủ đề thôi.

Continue reading “Introduction to Functional Reactive Programming”

Advertisements

THỜI TRANG LẬP TRÌNH – SỰ TRỖI DẬY CỦA DECLARATIVE PROGRAMMING!

Kể từ sau loạt bài về Apple Watch + CI, tôi muốn chuyển sang các chủ đề khác nói về các món ăn chơi nhảy múa mà không phải là về code, công việc. Nhưng nói thật là các món ăn chơi thì nhiều, cũng lắm sự kỳ công đòi hỏi người chơi phải có niềm yêu thích thực sự, thời gian tìm hiểu nhất định. Thêm nữa là khi viết những bài như vậy cần phải có kiến thức rộng, bao quát cũng như khá khó để tạo được cảm hứng cho người đọc. Thế nên thôi, lại quay về với cái máng lợn là: CODE…

Chắc hẳn trong công việc, mọi người đều có những mục tiêu riêng, đích đến nhất định qua các quãng thời gian dài ngắn khác nhau. Là 1 một lập trình viên iOS đơn thuần, mục tiêu trong năm nay của tôi là học 1 ngôn ngữ lập trình mới, vốn đang rất hot trong cộng đồng cũng như nội bộ công ty: Swift của Apple. Nhưng lần mò, vâng vẫn là cái trò lần mò, tôi được biết tới Functional Programming. Nhưng nghe lạ tai quá, tìm hiểu mãi thì mới đi đến ngọn nguồn của vấn đề: Declarative Programming.

1425999742-1425306960-paradigm-cover

Mới đầu đọc thì tôi chỉ biết đến nó như là 1 lĩnh vực nhỏ trong thế giới Computer Science bao la và cao siêu khó lường. Nhưng các kết quả tìm kiếm thường có cụm từ: Declarative Programming vs Imperative Programming. Imperative Programming (IP) thường gắn liền với lập trình hướng đối tượng OOP mà lâu nay tôi và các bạn(xin lỗi nếu có vơ đũa cả nắm) vẫn nghĩ là tối ưu, là phương pháp hay nhất khi phát triển phần mềm. Imperative Programming là cách mà bao lâu nay tôi vẫn lập trình, từ thời học cấp 3, Đại học và cả khi đi làm. Và nó có 1 thế giới đối nghịch Declarative Programming (DP). Vậy là ngoài kia, ngoài cái thế giới mà tôi đang sống có 1 thế giới khác mà bao lâu nay tôi không hề hay biết. Trên đường đi khám phá thế giới mới tôi gặp rất nhiều lời ca ngợi về nó, càng thôi thúc sự tò mò, khát khao khám phá của bản thân.

Continue reading “THỜI TRANG LẬP TRÌNH – SỰ TRỖI DẬY CỦA DECLARATIVE PROGRAMMING!”

Continuous Integration – The future of software development (updated)!

Bài này được viết khá lâu rồi, từ giữa tháng 5 nhưng quả thật lúc đấy hơi lười, lại hơi tham muốn làm cho cả Android + iOS nên để mốc meo đến tận bây giờ. Nhưng chỉ còn vài ngày ngắn ngủi làm việc cho 3S thôi nên trước khi ra đi cũng muốn viết cái gì đó dành cho team iOS nên tôi quyết định edit lại để đưa lên Techblog không nó phí hoài . Bài này sẽ chỉ nói về Continuous Integration(CI) cho iOS kết hợp với Automation Test, cái món mà tôi khá tâm đắc và rất rất mong muốn được áp dụng vào khi làm việc.

continuous

Tôi biết đến với CI 1 cách rất tình cờ. Khi đó đang trong giai đoạn giữa XXXiOS, ngồi ngáp ngắn ngáp dài chờ khách hàng confirm về việc thay đổi Requirement lần thứ n. Code trước thì cũng dở mà ngồi chơi thì ại không hay. Tiện đang có vụ liên quan đến OSX Server của anh Nghĩa nên ngó nghiêng nghịch ngợm tý.

Đọc các bài hướng dẫn sử dụng OSX Server thì thấy có cái nhắc đến Xcode Server + XCode Bot mà chả biết nó là cái gì, cơ mà cứ có chữ Xcode là hấp dẫn rồi. Tìm hiểu thêm thì ra đây là bộ công cụ của Apple để hỗ trợ Continuous Integration cho Mac OS và iOS.

Nhưng mà trí thông minh có hạn nên đọc mãi vẫn chưa hiểu cụ thể CI nó là cái gì, ứng dụng như thế nào. Đến khi thấy các ví dụ sử dụng CI việc test các project 1 cách liên tục, đặc biệt là sự kết hợp hoàn hảo với Automation Test thì mới thấy được lợi ích rõ ràng của nó.  Bỏ hẳn 3 ngày để setup, tìm hiểu + viết code sau đó là làm buổi Seminar nho nhỏ. Vẫn cố gắng để áp dụng kỹ thuật mình nghiên cứu được vào công việc nhưng sau Tết ăn nhiều đạm + bận nhiều việc linh tinh nên quên béng đi mất.

Đến giờ thì mới thấy tiếc quãng thời gian vừa qua. Giá như mình chịu khó hơn, giá như mình quyết liệt hơn với anh Tuấn thì có lẽ giờ anh Hiếu.TT đang hì hụi làm Automation rồi cũng nên.

Continue reading “Continuous Integration – The future of software development (updated)!”

Tôi đã viết app cho Apple Watch như thế nào (P3)?

Phần này tôi viết trong đợt nghỉ lễ 30/4-1/5 nhưng mà một phần là vì lười, mải đi chơi trà đá, về nhà thì lại chơi LoL nên lần nữa mãi vẫn chưa đưa lên blog được :D. Lười khổ thế đấy!

Phần 3 này tôi sẽ tiếp tục giới thiệu xử lý sự kiện cho Table kết hợp truyền dữ liệu giữa 2 ViewController dùng Segues Context, cuối bài sẽ là việc tối ưu hóa hiệu năng khi load ảnh sử dụng ImageCached của WatchKit.

Phần này chủ yếu thực hành code và là phần nối tiếp của phần 2, nên nếu bạn nào quên hoặc chưa đọc phần 2 thì tại đây: Phần 2.

Continue reading “Tôi đã viết app cho Apple Watch như thế nào (P3)?”

Tôi đã viết app cho Apple Watch như thế nào (P2)?

Ở bài trước tôi đã giới thiệu tổng quan về kiến trúc và cách thức hoạt động cơ bản của Apple Watch. Sau khi ngủ một giấc đã đời, đọc lại bài thì thấy vẫn còn chỗ chưa thật sự chính xác cũng như thiếu xót. Nhưng thôi, kệ! Bạn nào có thắc mắc hay chỗ nào chưa hiểu thì có thể comment, email hoặc gặp trực tiếp để trao đổi. Mong là câu hỏi của các bạn dễ dễ 1 chút để tôi có thể trả lời được.

Tôi sẽ cố gắng chỉnh sửa lại phần 1 nếu không có ai rủ đi chơi :D.cheerscheerscheerscheerscheerscheerscheerscheerscheerscheers

apple-watch-dribbble

Ở phần 2 này chúng ta sẽ tiếp tục làm quen với các thành phần giao diện cơ bản của WatchKit, các thuộc tính của WKInterfaceObjectWKInterfaceGroup

Continue reading “Tôi đã viết app cho Apple Watch như thế nào (P2)?”

Tôi đã viết app cho Apple Watch như thế nào (P1)?

Sau dự án XXXiOS tôi may mắn được đội Dọn Rác thuê theo hợp đồng cho mượn ngắn hạn để sang nghiên cứu và làm 1 cái khá là mới mẻ: Apple Watch. Được cấp trên đầu tư thời gian, điều kiện để nghiên cứu nên cũng muốn chia sẻ những gì mình biết được qua tìm hiểu cũng như làm dự án thực tế: Crisis Management.

apple-watch-selling-points

Có thể trên mạng đã có tương đối các bài viết hướng dẫn, giới thiệu đầy đủ về Apple Watch và WatchKit nhưng tôi vẫn muốn viết lại. Để chia sẻ với mọi người trong 3S đặc biệt là team iOS cùng 1 số bạn ham mê tự học Objective-C. Có thể bài viết của tôi không được chi tiết, không nói hết được các đặc điểm của WatchKit nhưng ít nhất nó được rút ra từ việc làm sản phẩm thực tế chứ không phải là làm các ứng dụng đơn giản mục đích demo. Đặc biệt hơn nữa là nó viết bằng Tiếng Việt :D.

Continue reading “Tôi đã viết app cho Apple Watch như thế nào (P1)?”