Ngày 12 tháng 11 năm 2016

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.

Ngày 13 tháng 10 năm 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.

Ngày 21 tháng 08 năm 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

Ngày 01 tháng 12 năm 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


Ngày 23 tháng 11 năm 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

Ngày 23 tháng 09 năm 2015

The Best iText Questions on StackOverflow

A couple of years ago, I decided to self-publish new books about iText, as opposed to working with
a publisher as I did before for the “iText in Action” books. This led to a book about digital signatures
that is available for download¹ on the iText site, and a book called “The ABC of PDF”² published on
LeanPub. The goal of “The ABC of PDF” was to start with a book that looks at PDF at the lowest
level, examining the syntax of a PDF file and a PDF page, and then to continue writing a series of
books that explain how to use iText on a higher level, answering questions such as:
  • How to create a PDF from scratch?
  • How to create PDF from HTML?
  • How to fill out PDF forms?
  • How to parse a PDF file?
However, in spite of the fact that almost 15,000 people downloaded “The ABC of PDF”, it turned
out that people really wanted me to write a different kind of book. I’ve received many comments
through LeanPub from people who were disappointed that the ABC-book didn’t explain how to
use iText. They expected a book with more practical examples, instead of examples that helps them
understand the PDF specification. Some people even used the feedback form to ask me technical
questions. Unfortunately, I was unable to answer these questions, because the people posting them
didn’t realize that I received these questions anonymously. Even if I knew the answers, I didn’t know
who or where to send them to.
All of this faced me with a dilemma: do I stop writing “The ABC of PDF” and start writing one of
the other books that were planned? If so, which part of iText is most important to iText users? The
plan for the ABC was to write a book of about 150 pages, but much to my surprise, I was only half
way when I finished writing page 150. Didn’t I have other writing priorities?
Then suddenly I had an idea: why not write a book with questions and answers? Why not create a
book entitled “The Best iText Questions on StackOverflow?”
Download: Mediafire

Ngày 03 tháng 09 năm 2015

Khắc phục lỗi MS_description khi tạo file bacpac

Thỉnh thoảng khi bạn tạo file bacpac, bạn có thể gặp bảng thông báo lỗi như sau:
Nguyên nhân là thuộc tính MS_Description không được hỗ trợ bởi export data-tier application utility.