- 
        
            Design Pattern    
        
        
- Singleton Design Pattern
 - Factory Design Pattern
 - Factory Method Design Pattern
 - Abstract Factory Design Pattern
 - Builder Design Pattern
 - Prototype Design Pattern
 - Object Pool Design Pattern
 - Chain of Responsibility Design Pattern
 - Command Design Pattern
 - Interpreter Design Pattern
 - Iterator Design Pattern
 - Mediator Design Pattern
 - Memento Design Pattern
 - Observer Design Pattern
 - Observer Design Pattern - Xử Lý Exception
 - Strategy Design Pattern
 - Template Method Design Pattern
 - Visitor Design Pattern
 - Null Object Design Pattern
 - Adapter Design Pattern
 - Bridge Design Pattern
 - Composite Design Pattern
 - Decorator Design Pattern
 - Flyweight Design Pattern
 - Proxy Design Pattern
 
 - S.O.L.I.D
 - Clean code
 - Lập trình socket
 - Java Core
 - Multi-Thread
 - Spring
 - Java Web
 - Memory Caching
 - Message Queue
 - DevOps
 - Xây dựng một nền tảng
 - MongoDB
 - MySQL timestamp
 - Properties vs yaml
 - Kotlin
 - Lập Trình Machine Learning với PyTorch
 - Mã Nguồn Mở
 - Ezy HTTP
 - Free Chat
 - Một số kinh nghiệm với Git
 - Review cho đồng nghiệp!
 - Kinh nghiệm phát triển dự án phức tạp, nhiều người - Tuân thủ
 - Kinh nghiệm phát triển dự án phức tạp, nhiều người - Lựa chọn người đi cùng
 - Ngành công nghiệp phần mềm tại Việt Nam - Mới chỉ là bắt đầu.
 - Ngành công nghiệp phần mềm tại Việt Nam - Dây chuyền sản xuất.
 - Ngành công nghiệp phần mềm tại Việt Nam - Thị trường
 - Ngành công nghiệp phần mềm tại Việt Nam - Công ăn việc làm
 - Setup Dev Environment
 - Hello World
 - Create a Server Project
 - Handle Client Requests
 - Using ezyfox-server-csharp-client
 - Using ezyfox-es6-client
 - Client React.js Interaction
 - Build And Deploy In Local
 - Tham gia phát triển open source!
 - Buôn có bạn, bán có phường
 - Đam mê đi đâu rồi?
 - Giữa lửa đam mê!
 - Tương lai nào cho tester? Thay đổi để dẫn đầu xu thế!
 - Tương lai nào cho tester? - Khi thế sự đổi thay!
 - Tương lai nào cho lập trình viên? Khi không có hệ quy chiếu!
 - Tương lai nào cho lập trình viên - Làm đến bao nhiêu tuổi?
 - Tương lai nào cho lập trình viên? Có làm giàu được không?
 - Tương lai nào cho lập trình viên? Có cân bằng cuộc sống được không?
 - Tương lai nào cho lập trình viên - Nhảy việc đến khi nào?
 - Tương lai nào cho lập trình viên - Con đường sự nghiệp (Career path)!
 - Tương lai nào cho lập trình viên - Tổng kết lại!
 - Con đường sự nghiệp cho lập trình viên - Giai đoạn sơ cấp (Junior)!
 - Con đường sự nghiệp cho lập trình viên - Giai đoạn trung cấp (Intermediate)!
 - Con đường sự nghiệp cho lập trình viên - Giai đoạn lành nghề (Senior)!
 - Giai đoạn lành nghề (Senior) - Giữa những hoang mang!
 - Giai đoạn lành nghề (Senior) - Phân hoá trong doanh nghiệp!
 - Con đường sự nghiệp cho lập trình viên - Trở thành chuyên gia (Expert)!
 - Con đường sự nghiệp cho lập trình viên - Trở thành người ảnh hưởng (Influencer)!
 - Các giai đoạn phát triển của lập trình viên - Tổng kết lại!
 - Metaverse - Câu chuyện 10 nghìn CCU (Người tham gia đồng thời)
 - Metaverse có khả thi ở Việt Nam?
 - Lựa chọn nghề nghiệp - DevOps!
 - Lựa chọn nghề nghiệp - Project Manager (PM)!
 - Lựa chọn nghề nghiệp - Data Engineer!
 - Lựa chọn nghề nghiệp - BackEnd Engineer!
 - “Talk is cheap. Show me the code” ― Linus Torvalds
 - Lựa chọn nghề nghiệp - Web Front-End Engineer!
 - Lựa chọn nghề nghiệp - Mobile Engineer!
 - Lựa chọn nghề nghiệp - Game Engineer!
 - Lựa chọn nghề nghiệp - Product Owner!
 - Tuổi trẻ cần đột phá!
 - Tuổi trẻ cần sự đồng cảm!
 - Tuổi trẻ - điều đáng sợ đầu tiên là gì?
 - Tuổi trẻ - Điều đáng sợ thứ 2 là gì?
 - Tuổi trẻ - Điều đáng sợ thứ 3 là gì?
 - Tuổi trẻ - Điều đáng sợ thứ 4 là gì?
 - Nếu tận dụng hết năng lực thì sẽ thế nào?
 - Tuổi trẻ - Điều đáng sợ thứ 5 là gì?
 - Tuổi trẻ - Điều đáng sợ thứ 6 là gì?
 - Tuổi trẻ - Điều đáng sợ thứ 7 là gì?
 - Tuổi trẻ - ham học hỏi là như thế nào?
 - Đầu tư cho bản thân là gì?
 - Học chủ động!
 - Có nên quay lại công ty cũ?
 - Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 1)
 - Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 2)
 - Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 3)
 - Tự học
 - Học tập tại doanh nghiệp
 - Học tại trung tâm
 - Cách đọc sách kỹ thuật hiệu quả
 - Học trong một tổ chức mã nguồn mở.
 - Câu chuyện lập trình viên - Công việc đầu tiên
 - Câu chuyện lập trình viên - Mức lương đầu tiên
 - Câu chuyện lập trình viên - 2018
 - Định hướng là gì?
 - Wordpress nguy hiểm thế nào?
 - Danh sách 10 trung tâm đào tạo trình uy tín, chất lượng ở Hà Nội
 
                        1. Create a React.js project, let's say it's 
    
    
 
                    
                    
                    simple-chat-reactjs, by execute command:
npx create-react-app simple-chat-reactjs2. Install ezyfox-es6-client , execute:
cd simple-chat-reactjs npm install ezyfox-es6-client3. Install Mvc.js (optional) - Download Mvc.js file - Copy Mvc.js file to
src folder
4. Create file ClientCreator.js
5. Import module
import Ezy from 'ezyfox-es6-client'; import Mvc from '../Mvc'; /*optional*/6. Declare class
class ClientCreator {
    setCredential(username, password) {
        this.username = username;
        this.password = password;
    }
    // hidden code
}
export default ClientCreator
7. Create handlers
var mvc = Mvc.getInstance(); /*optional*/
var loginController = mvc.getController("login");
var handshakeHandler = new Ezy.HandshakeHandler();
handshakeHandler.getLoginRequest = () => {
    return ["freechat", this.username, this.password, []];
}
var userLoginHandler = new Ezy.LoginSuccessHandler();
userLoginHandler.handleLoginSuccess = function() {
    var accessAppRequest = ["freechat", []];
    this.client.sendRequest(Ezy.Command.APP_ACCESS, accessAppRequest);
}
var accessAppHandler = new Ezy.AppAccessHandler();
accessAppHandler.postHandle = function(app, data) {
    loginController.updateViews("access-app"); /*optional*/
}
var disconnectionHandler = new Ezy.DisconnectionHandler();
disconnectionHandler.preHandle = function(event) {
    console.log("custom handle disconnection");
}
8. Config client
var config = new Ezy.ClientConfig; config.zoneName = "freechat"; var clients = Ezy.Clients.getInstance(); var client = clients.newDefaultClient(config); var setup = client.setup; setup.addEventHandler(Ezy.EventType.DISCONNECTION, disconnectionHandler); setup.addDataHandler(Ezy.Command.HANDSHAKE, handshakeHandler); setup.addDataHandler(Ezy.Command.LOGIN, userLoginHandler); setup.addDataHandler(Ezy.Command.APP_ACCESS, accessAppHandler);9. Add App's data handlers
setupApp.addDataHandler("1", function(app, data) {
});
setupApp.addDataHandler("2", function(app, data) {
});
10. Merge all code to one
import Ezy from 'ezyfox-es6-client';
import Mvc from '../Mvc'; /*optional*/
class ClientCreator {
    setCredential(username, password) {
        this.username = username;
        this.password = password;
    }
    createClient() {
        var mvc = Mvc.getInstance(); /*optional*/
        var loginController = mvc.getController("login");
        var handshakeHandler = new Ezy.HandshakeHandler();
        handshakeHandler.getLoginRequest = () => {
            return ["freechat", this.username, this.password, []];
        }
        var userLoginHandler = new Ezy.LoginSuccessHandler();
        userLoginHandler.handleLoginSuccess = function() {
            var accessAppRequest = ["freechat", []];
            this.client.sendRequest(Ezy.Command.APP_ACCESS, accessAppRequest);
        }
        var accessAppHandler = new Ezy.AppAccessHandler();
        accessAppHandler.postHandle = function(app, data) {
            loginController.updateViews("access-app"); /*optional*/
        }
        var disconnectionHandler = new Ezy.DisconnectionHandler();
        disconnectionHandler.preHandle = function(event) {
            console.log("custom handle disconnection");
        }
        var config = new Ezy.ClientConfig;
        config.zoneName = "freechat";
        var clients = Ezy.Clients.getInstance();
        var client = clients.newDefaultClient(config);
        var setup = client.setup;
        setup.addEventHandler(Ezy.EventType.DISCONNECTION, disconnectionHandler);
        setup.addDataHandler(Ezy.Command.HANDSHAKE, handshakeHandler);
        setup.addDataHandler(Ezy.Command.LOGIN, userLoginHandler);
        setup.addDataHandler(Ezy.Command.APP_ACCESS, accessAppHandler);
        var setupApp = setup.setupApp("freechat");
        setupApp.addDataHandler("1", function(app, data) {
        });
        
        setupApp.addDataHandler("2", function(app, data) {
        });
        
        setupApp.addDataHandler("4", function(app, data) {
        });
        
        setupApp.addDataHandler("5", function(app, data) {
        });
        
        setupApp.addDataHandler("6", function(app, data) {
        });
        return client;
    }
}
export default ClientCreator
11. Connect to server
var clientCreator = new ClientCreator();
clientCreator.setCredential(this.username, this.password);
var client = clientCreator.createClient();
client.connect("wss://ws.tvd12.com/ws");
12. Full connect to server source code
import * as React from 'react';
import Mvc from '../../Mvc';
import ClientCreator from '../../socket/ClientCreator'
class LoginView extends React.Component {
    constructor(props) {
        super(props);
        this.username = "dungtv";
        this.password = "123456";
        this.login = this.login.bind(this);
    }
    login() {
        var clientCreator = new ClientCreator();
        clientCreator.setCredential(this.username, this.password);
        var client = clientCreator.createClient();
        client.connect("wss://ws.tvd12.com/ws");
    }
    render() {
        return (
            
        );
    }
}
export default LoginView;
                        - 
        
            Design Pattern    
        
        
- Singleton Design Pattern
 - Factory Design Pattern
 - Factory Method Design Pattern
 - Abstract Factory Design Pattern
 - Builder Design Pattern
 - Prototype Design Pattern
 - Object Pool Design Pattern
 - Chain of Responsibility Design Pattern
 - Command Design Pattern
 - Interpreter Design Pattern
 - Iterator Design Pattern
 - Mediator Design Pattern
 - Memento Design Pattern
 - Observer Design Pattern
 - Observer Design Pattern - Xử Lý Exception
 - Strategy Design Pattern
 - Template Method Design Pattern
 - Visitor Design Pattern
 - Null Object Design Pattern
 - Adapter Design Pattern
 - Bridge Design Pattern
 - Composite Design Pattern
 - Decorator Design Pattern
 - Flyweight Design Pattern
 - Proxy Design Pattern
 
 - S.O.L.I.D
 - Clean code
 - Lập trình socket
 - Java Core
 - Multi-Thread
 - Spring
 - Java Web
 - Memory Caching
 - Message Queue
 - DevOps
 - Xây dựng một nền tảng
 - MongoDB
 - MySQL timestamp
 - Properties vs yaml
 - Kotlin
 - Lập Trình Machine Learning với PyTorch
 - Mã Nguồn Mở
 - Ezy HTTP
 - Free Chat
 - Một số kinh nghiệm với Git
 - Review cho đồng nghiệp!
 - Kinh nghiệm phát triển dự án phức tạp, nhiều người - Tuân thủ
 - Kinh nghiệm phát triển dự án phức tạp, nhiều người - Lựa chọn người đi cùng
 - Ngành công nghiệp phần mềm tại Việt Nam - Mới chỉ là bắt đầu.
 - Ngành công nghiệp phần mềm tại Việt Nam - Dây chuyền sản xuất.
 - Ngành công nghiệp phần mềm tại Việt Nam - Thị trường
 - Ngành công nghiệp phần mềm tại Việt Nam - Công ăn việc làm
 - Setup Dev Environment
 - Hello World
 - Create a Server Project
 - Handle Client Requests
 - Using ezyfox-server-csharp-client
 - Using ezyfox-es6-client
 - Client React.js Interaction
 - Build And Deploy In Local
 - Tham gia phát triển open source!
 - Buôn có bạn, bán có phường
 - Đam mê đi đâu rồi?
 - Giữa lửa đam mê!
 - Tương lai nào cho tester? Thay đổi để dẫn đầu xu thế!
 - Tương lai nào cho tester? - Khi thế sự đổi thay!
 - Tương lai nào cho lập trình viên? Khi không có hệ quy chiếu!
 - Tương lai nào cho lập trình viên - Làm đến bao nhiêu tuổi?
 - Tương lai nào cho lập trình viên? Có làm giàu được không?
 - Tương lai nào cho lập trình viên? Có cân bằng cuộc sống được không?
 - Tương lai nào cho lập trình viên - Nhảy việc đến khi nào?
 - Tương lai nào cho lập trình viên - Con đường sự nghiệp (Career path)!
 - Tương lai nào cho lập trình viên - Tổng kết lại!
 - Con đường sự nghiệp cho lập trình viên - Giai đoạn sơ cấp (Junior)!
 - Con đường sự nghiệp cho lập trình viên - Giai đoạn trung cấp (Intermediate)!
 - Con đường sự nghiệp cho lập trình viên - Giai đoạn lành nghề (Senior)!
 - Giai đoạn lành nghề (Senior) - Giữa những hoang mang!
 - Giai đoạn lành nghề (Senior) - Phân hoá trong doanh nghiệp!
 - Con đường sự nghiệp cho lập trình viên - Trở thành chuyên gia (Expert)!
 - Con đường sự nghiệp cho lập trình viên - Trở thành người ảnh hưởng (Influencer)!
 - Các giai đoạn phát triển của lập trình viên - Tổng kết lại!
 - Metaverse - Câu chuyện 10 nghìn CCU (Người tham gia đồng thời)
 - Metaverse có khả thi ở Việt Nam?
 - Lựa chọn nghề nghiệp - DevOps!
 - Lựa chọn nghề nghiệp - Project Manager (PM)!
 - Lựa chọn nghề nghiệp - Data Engineer!
 - Lựa chọn nghề nghiệp - BackEnd Engineer!
 - “Talk is cheap. Show me the code” ― Linus Torvalds
 - Lựa chọn nghề nghiệp - Web Front-End Engineer!
 - Lựa chọn nghề nghiệp - Mobile Engineer!
 - Lựa chọn nghề nghiệp - Game Engineer!
 - Lựa chọn nghề nghiệp - Product Owner!
 - Tuổi trẻ cần đột phá!
 - Tuổi trẻ cần sự đồng cảm!
 - Tuổi trẻ - điều đáng sợ đầu tiên là gì?
 - Tuổi trẻ - Điều đáng sợ thứ 2 là gì?
 - Tuổi trẻ - Điều đáng sợ thứ 3 là gì?
 - Tuổi trẻ - Điều đáng sợ thứ 4 là gì?
 - Nếu tận dụng hết năng lực thì sẽ thế nào?
 - Tuổi trẻ - Điều đáng sợ thứ 5 là gì?
 - Tuổi trẻ - Điều đáng sợ thứ 6 là gì?
 - Tuổi trẻ - Điều đáng sợ thứ 7 là gì?
 - Tuổi trẻ - ham học hỏi là như thế nào?
 - Đầu tư cho bản thân là gì?
 - Học chủ động!
 - Có nên quay lại công ty cũ?
 - Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 1)
 - Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 2)
 - Làm cho startup (công ty nhỏ) hay làm cho công ty lớn? (Phần 3)
 - Tự học
 - Học tập tại doanh nghiệp
 - Học tại trung tâm
 - Cách đọc sách kỹ thuật hiệu quả
 - Học trong một tổ chức mã nguồn mở.
 - Câu chuyện lập trình viên - Công việc đầu tiên
 - Câu chuyện lập trình viên - Mức lương đầu tiên
 - Câu chuyện lập trình viên - 2018
 - Định hướng là gì?
 - Wordpress nguy hiểm thế nào?
 - Danh sách 10 trung tâm đào tạo trình uy tín, chất lượng ở Hà Nội