October 6, 2016

Tôi là ai?

http://patnabeats.com/wp-content/uploads/2016/07/who-am-i.jpg
Tôi là ai trong cõi đời tấp nập,
Là bóng vô hình hay một khoảng khắc không gian
Nơi tôi đi quá có để lại dấu chân,
Những điều tôi làm có hiện hữu chăng?

September 26, 2016

Hạnh phúc xa lắm - đừng cố tìm

Có một câu chuyện kể rằng: Khi xưa, có một anh chàng đến gặp một bậc cao nhân sống ẩn sâu, cầu mong cao nhân chỉ giúp làm sao tìm được hạnh phúc. Vị cao nhân nhìn thấy điều anh chàng này muốn, ôn tồn đáp:

- Được rồi, người hãy về nhà đi, rồi sáng mai hãy quay lại đây, ta sẽ chỉ nhà ngươi cách tìm được hạnh phúc. À mà nhớ là từ giờ tới ngày mai, nhà ngươi không được ăn gì hết.

Sáng ngày hôm sau, cậu chàng trai quay lại đúng hẹn với bậc cao nhân, chàng bắt đầu lắng nghe sự chỉ giảng của bậc cao nhân này. Cao nhân giữ đúng lời hứa, nói với chàng trai, đi theo mình và làm những điều mà cao nhân chỉ rồi sau đó sẽ dạy chàng trai. Cao nhân dắt chàng trai băng rừng, vượt suối, leo đèo,..., sau đó tới một cánh rừng đầy táo ngọt. Chàng trai vốn đã nhịn từ ngày hôm trước, đói rã rời, mà bây giờ nhìn khu rừng đầy táo ngọt liền quá thèm định chạy lại hái ăn. Thì ngay lúc đó, bậc cao nhân liền nói:

September 2, 2016

Hậu phương vững chãi - Tiền tuyến xông pha

Ngồi code hoài cũng làm cho bản thân ngợp ngạt, loay hoay một hồi thì cũng có chuyện phải làm - viết bài blog chia sẻ cho vui. Cũng trùng hợp hay sự ngẫu nhiên gì đó, lang thang facebook thì thấy người bạn chia sẻ bài viết về người vợ dịu dàng sẽ giúp chồng thành công càng dữ dội, và thấy đề tài này hay nè, bàn bạc tí cho nó vui.

Dễ hình dung cho cái đề tài này mà, dân gian hay ví von một điều là vợ là hậu phương, còn chồng là tiền tuyến. Và lẽ dĩ nhiên, hậu phương vững chắc, thì tiền tuyến an tâm mà xông pha trận mạc, dám đương đầu sóng gió vì anh ta biết khi quay về nhà (hậu phương) thì anh ta sẽ được chăm lo, được khôi phục, là sẽ luôn tràn đầy năng lượng.

Nhưng, tôi là một coder, không phải nhà tâm lý học hay nhà phân tích thực trạng xã hội, tôi không dám mạnh miệng nói sảng trên vấn đề này. Vậy tôi lảm nhảm cái gì - tôi nói về hậu phương và tiền tuyền trong quá trình phát triển phần mềm.

August 13, 2016

Tản mạn chuyện Tỷ Can moi tim

Tỷ Can moi tim
Coi Đắc Kỷ Trụ Vương - Bảng Phong Thần thì có rất nhiều phân đoạn tuyệt vời (đối với từng người và từng thời điểm), nhưng hôm nay có tí khí chất "văn chương" ngồi viết lảm nhảm suy nghĩ về nhân vật Tỷ Can, và đặc biệt là khi ông moi tim hiến vua cứu Đắc Kỷ. Đây là dòng suy nghĩ miên man rất cá nhân cho vui thôi, vì cuối tuần không biết làm gì, rảnh rỗi sinh nông nổi ấy mà.

Tỷ Can là một trung quân ái quốc, ai đã từng coi qua bất kỳ bộ phim hoặc truyện Phong Thần thì nhân vật này không thể không được đề cập bên cạnh những nhân vật khiết tiếng như Na Tra, Lý Tịnh, Khương Tử Nha, Đắc Kỷ, Trụ Vương...

Ông ngoài trung cam nghĩa đảm, ông còn được trời ban cho trái tim Thất Khứu Linh Lung, tương truyền là có khả năng làm cho bách yêu trách xa, chính vì điều đó mà yêu hồ Đắc Kỷ không thể tấn công trực tiếp mà phải mượn tay vua Trụ moi tim ông. Khi ông thấy triều đình trở nên mục nát, ông xin vua cáo lão hồi hương, sống an nhàn thanh đạm những ngày cuối đời. Nhưng cũng vì có trái tim thần ban, cộng với tính khí không thể chịu nhường nhịn, khuất phục, mặc kệ cho bọn yêu ma tác quái, ông quay về triều đình và kết quả lãnh nhận cái kết quá bi đát - tự moi tim mà chết.

August 12, 2016

Xây dựng ứng dụng API với NodeJS - Bảo mật ứng dụng với JWT và Passport

source: https://scotch.io/wp-content/uploads/2014/04/restful-api-node-express-4-router.jpg
Ứng dụng xây xong mà không có bảo mật thì thật sự rất đáng nguy, ứng dụng nào cũng vậy chứ không riêng gì API. Hôm nay có tí chút thời gian, viết thêm bài viết về bảo mật ứng dụng bằng PassportJS và JWT. Để dễ hình dung, mình tóm tắt ngón gọn thế nào là PassportJS cũng như JWT:

Passport là một module trong NodeJS, rất linh động và tích hợp tương tác với nhiều kiểu chứng thực (authenticate) phổ biến như: Basic, Digest, OAuth, OAuth2 và dĩ nhiên là phải có JWT (không có sao có bài viết này được ^^). Còn JWT (Json Web Token) là một kiểu chứng thực (authenticate) đơn giản nhưng cũng an toàn dành cho REST API (rất hợp lý cho loạt bài này).

Rào trước đón sau: "Bài viết không có ý định làm rõ những khái niệm này, chỉ là một ghi chú của bản thân để sau này dễ triển khai." Nên nếu ai đó có sự thắc mắc muốn làm rõ hơn thì bạn nên tự thân vận động để nắm được vấn đề, có vậy bạn mới trở nên cao tay hơn.

July 22, 2016

Xây dựng ứng dụng API với NodeJS - Phần 2.4: CRUD - Delete

source: https://scotch.io/wp-content/uploads/2014/04/restful-api-node-express-4-router.jpg
Đi tiếp cho hết quảng đường CRUD của loạt bài này, để còn đi qua một chặng đường khác đầy hào hứng và hấp dẫn hơn rất nhiều, can đoan luôn. Đây là bài cuối trong phần này, liên can chữ D đó là Delete. Bây giờ chúng ta sẽ thêm một phương thức mới vào service user mà chúng ta đã làm mấy lâu nay:
removeUserById: function (id, cb) {
      User
        .destroy({where: {id: id}})
        .then(function (number) {
          return number ? cb(null, true) : cb(null, false);
        })
        .catch(function (error) {
          return cb(error);
        });
    }

Bây giờ, chúng ta sẽ thêm một router mới đảm nhận vai trò xóa user theo email được cung cấp. Chỉnh sửa tập tin user.js trong thư mục app/controllers theo nội dung như bên dưới:

July 19, 2016

Xây dựng ứng dụng API với NodeJS - Phần 2.3: CRUD - Update

source: https://scotch.io/wp-content/uploads/2014/04/restful-api-node-express-4-router.jpg
Tiếp theo những phần trước, bài này sẽ đi tới phần Update trong CRUD. Để minh họa, mình sẽ viết tiếp phần login vừa rồi, sau khi login sẽ cập nhật thông tin "last_logged_in" chính là ngày hiện hành. Bây giờ chúng ta sẽ sửa lại phương thức login của tập tin user.js trong thư mục app/services như sau:
login: function (email, password, cb) {
      var isSuccessful = true;
      User
        .findOne({
          where: {email: email}
        })
        .then(function (instance) {
          if (!instance) {
            return cb(null, false);
          }
          var user = _.clone(instance.dataValues);
          if (user.password !== password) {
            isSuccessful = false;
            return;
          }
          instance.last_logged_in = sequelize.fn('NOW');
          return instance.save({silent: true});
        })
        .then(function () {
          return cb(null, isSuccessful);
        })
        .catch(function (error) {
          return cb(error);
        });
    }

July 17, 2016

Xây dựng ứng dụng API với NodeJS - Phần 2.2: CRUD - Read

source: https://scotch.io/wp-content/uploads/2014/04/restful-api-node-express-4-router.jpg
Trong phần này, mình sẽ minh họa việc đọc dữ liệu bằng thao tác login. Trong bài này, mình chỉ dùng phương thức findOne() mà được cung cấp sẵn bởi Sequelize nhằm tìm một đối tượng duy nhất. Kết quả trả về chỉ một dòng dữ liệu duy nhất (được phát sinh bởi LIMIT = 1) hoặc là không tìm thấy kết quả nào hết. Đây chỉ là một trong những phương thức lấy dữ liệu mà Sequelize cung cấp, bên cạnh đó có những phương thức khác như: findAll(), findById()