15 tháng 1, 2017

Gửi các bạn programmer, và dân IT nói chung...

Được trích từ bài viết của bạn sakura196 trên ddth
Vừa rồi trong công ty mình đã xảy ra trường hợp đáng thương tâm.
Một đồng nghiệp của mình đã qua đời trong lúc làm việc vì đột quỵ. Thật khủng khiếp, anh ấy chỉ mới 28 tuổi, và vợ anh ấy đang mang thai. Mặc dù anh ấy có tiền sử bị bệnh tim, nhưng làm việc đến tận 9h đêm trong nhiều ngày liên tiếp rõ ràng là nguyên nhân chính dẫn đến tai nạn đáng tiếc đó.

12 tháng 11, 2016

Hướng dẫn sử dụng GruntJs

 

GruntJs là gì?

GruntJS là một JavaScript Task Runner, dựa trên dòng lệnh, xây dựng công cụ giúp các developer thực hiện các công việc lặp đi lặp lại.
Ngoài GruntJs, bạn có thể tham khảo thêm 1 số thư viện khác: Make, Ant, Gulp, Jake, Rake và MSBuild.
VD:
Khi build 1 website, bạn cần kiểm tra các file javascript, gom lại thành 1 file và nén chúng. GruntJs sẽ thực hiện tự động mỗi khi deploy, thay vì chúng ta phải thực hiện thủ công.

Sử dụng Module trong Autofac

Trong ngôn ngữ lập trình hướng đối tượng, IOC hay DI pattern là một trong những khái niệm quan trọng. Nó chống lại sự phụ thuộc lẫn nhau giữa các object. Nếu quản lý bằng cách khởi tạo đối tượng thông thường, sẽ khó khăn khi project của bạn ngày càng lớn.

Class dependencies and model complexity

Theo 1 khái niệm trên trang asp.net:
The Dependency Injection pattern is a particular implementation of Inversion of Control. Inversion of Control (IoC) means that objects do not create other objects on which they rely to do their work. Instead, they get the objects that they need from an outside source (for example, an xml configuration file).
Dependency Injection (DI) means that this is done without the object intervention, usually by a framework component that passes constructor parameters and set properties.
Có thể hiểu:
Inversion of Control (IoC) có nghĩa rằng các object không phải tự nó tạo ra các objects mà nó phụ thuộc. Thay vào đó, nó sẽ có những objects nó cần nhờ vào một bên thứ ba.

13 tháng 10, 2016

HangFire - Thực thi background task với SQL Server

Trong lập trình, bạn sẽ thường gặp 1 số vấn đề timeout như xử lý file lớn, import data, clean up database. Ngoài ra, bạn cần phải thiết lập thời gian để chạy schedule task như gởi report định kỳ theo tuần, theo ngày… Bạn nghĩ ngay đến Windows Service. Nhưng vấn đề là bạn cần phải host trên Windows Server. Nếu chỉ sử dụng IIS thôi thì HangFire có lẽ là sự lựa chọn tốt nhất.
HangFire bao gồm bản tính phí và bản không tính phí. Với phiên bản miễn phí, có lẽ đủ cho bạn chạy chương trình
Có 4 loại job trong HangFire (Free):
  1. Fire-and-forgot job: thực thi 1 lần và gần như ngay lập tức sau khi khởi tạo.
  2. Delayed job: Thực thi 1 lần sau 1 khoảng thời gian quy định
  3. Recurring job: Lặp lại công việc nhiều lần dựa trên CRON schedule.
  4. Continuations: Tiếp tục thực thi công việc sau khi công việc trước đó thực hiện xong.

21 tháng 8, 2016

Angularjs: Sử dụng Provider

Giả sử bạn đang cần viết 1 service cho phép Partner tạo order. Khi request được gởi lên bao gồm data + api key.
Vấn đề đặt ra là giả sử bạn có nhiều service, ví dụ như service tạo SP Order, DTG Order. Service 2 tạo blended order từ sp order và dtg order.
                createOrder: function(){

                    //pass api key here???

                    //implementation

                    console.log('Order is being created');

                }
Service trong AngularJs rất hữu ích nhưng trong trường hợp này thì có 1 sự dư thừa trong thiết kế. Thật sự không hay khi mỗi lần tạo order lại truyền apiKey.
Trong trường hợp này, ta sẽ dùng Provider.
Điểm khác biệt giữa Provider với Factory, Service là bạn phải định nghĩa làm $get để trả về đối tượng và bạn có thể sử dụng Provider trong app.config()
    var app = angular.module('app', []);

    app.provider('creatingPartnerOrder', [function(){       

        var apiKey = '';

        this.setApiKey = function(key){

            apiKey = key;

        };


        this.$get = function(){

            return{

                apiKey: apiKey,

                createOrder: function(){

                    //pass api key here???

                    //implementation

                    console.log('Order is being created');

                }

            }

        };

    }]);

    app.config(['creatingPartnerOrderProvider', function(creatingPartnerOrderProvider) {

        creatingPartnerOrderProvider.setApiKey('123456');


    }])

   

    app.controller('AppCtrl', ['$scope', 'creatingPartnerOrder', function($scope, creatingPartnerOrder) {

        function createOrder(){

            if(creatingPartnerOrder.apiKey == '123456'){

                creatingPartnerOrder.createOrder();

                console.log('Order was created: ' + new Date());

            }

        }


        createOrder();

}]);

Cách tạo Provider


  1. Inject $provide vào hàm app config
  2. Tạo 1 provider bằng cách sử dụng hàm $provide.provider()
  3. Hàm provider nhất định phải có hàm $get()
  4. Kết quả trả về của hàm $get là đối tượng javascript.
Ngoài ra, bạn có thể khai báo provider bằng cách sau:
app.provider( 'providerExample', fun);

Nhật ký học tập

1 tháng 12, 2015

SQL: Tùy biến cách sắp xếp trong câu lệnh ORDER BY

ORDER BY dùng để sắp xếp kết quả trả về bởi câu lệnh SELECT. Thỉnh thoáng, bạn cần tùy biến cách sắp xếp, không phải theo cách thông thường như ABC, 123…
VD: Chúng ta có bảng Currency dùng để liệt kê tiền tệ của các nước


23 tháng 11, 2015

Kill nhiều processes trong Windows bằng CMD

Mở CMD bằng quyền Administrator: Start > Run > cmd.exe
Trong CMD gõ "taskkill /F /IM <tên process bạn cần kill>" và nhấn enter
Nếu bạn thấy dòng:  "SUCCESS:The process xxxx with PID xxxx has been terminated." thì bạn đã thành công