Tsu_Kpa's Blog


Yo, Đây là bài đăng đầu tiên trong series Spring của mình, mong các bạn ủng hộ ^^


Kết quả hình ảnh cho tight coupling and loose coupling in java

 

Tight-coupling và Loose-coupling là gì?


Tight-coupling: Khi mà các class phụ thuộc vào nhau. Kịch bản này phát sinh khi một class nhận quá nhiều trách nhiệm hoặc khi một mối quan tâm được trải rộng trên nhiều class thay vì một class riêng.

Loose-coupling có được khi điều chỉnh thiết kế cho các class có một trách nhiệm riêng của nó và tách biệt các mối quan tâm.
Interface là một công cụ mạnh mẽ để sử dụng cho coupling. Các class có thể giao tiếp qua các interface chứ không phải qua các class cụ thể khác. Và bất kỳ class nào cũng có thể gọi giao diện bằng cách sử dụng implement.

Ví dụ về Tight-coupling:


class CustomerRepository
{
    private readonly Database database;

    public CustomerRepository(Database database)
    {
        this.database = database;
    }

    public void Add(string CustomerName)
    {
        database.AddRow("Customer", CustomerName);
    }
}

class Database
{
    public void AddRow(string Table, string Value)
    {
    }
}

Ví dụ về Loose-coupling



class CustomerRepository
{
    private readonly IDatabase database;

    public CustomerRepository(IDatabase database)
    {
        this.database = database;
    }

    public void Add(string CustomerName)
    {
        database.AddRow("Customer", CustomerName);
    }
}

interface IDatabase
{
    void AddRow(string Table, string Value);
}

class Database : IDatabase
{
    public void AddRow(string Table, string Value)
    {
    }
}

Giải thích trong thực tế:

Tight-coupling: Hãy tưởng tượng rằng bạn muốn thay da của bạn từ màu trắng sang màu đen? Bạn sẽ phải lột nó ra và gắn da mới vào. Rất đau đúng không? Bởi vì da của bạn gắn chặt với cơ thể bạn. Bạn sẽ phải thiết kế lại cơ thể con người để biến điều này thành có thể.

#keypoint1: Nếu bạn muốn thay da thì phải thay đổi thiết kế của cơ thể bạn.



Hình ảnh có liên quan







Loose-coupling: Bây giờ bạn hãy nghĩ về việc mặc quần áo buổi sáng, bạn không thích chiếc áo thun với màu tím mộng mơ? Đừng lo, bạn có thể chọn màu đen huyền bí. Bạn có thể chọn và mặc nó dễ dàng bởi vì nó không gắn chặt với cơ thể bạn như là Da. Bởi vì chiếc áo không thực sự quan tâm cơ thể bạn ra sao.

#keypoint2: Nếu bạn muốn đẹp hơn thì chỉ cần thay áo bởi vì chiếc áo không làm thay đổi thiết kế cơ thể của bạn.



Kết quả hình ảnh cho purple t shirt gays


Tại sao lại cần Tight-coupling và Loose-coupling?

Nó quan trọng bởi vì phần mềm luôn thay đổi. Để dễ dàng cho việc sửa code.

Ví dụ khác:

Nếu ai đó muốn output là file CSV chứ không phải là JSON v.v.. hoặc là bạn muốn thay MySQL bằng PostGreSQL bạn có thể thực hiện điều đó dễ dàng mà không cần phải viết lại toàn bộ class. 
Nói cách khác, bạn muốn tight-coupling phần mềm của mình,
(Chỉ sử dụng MySQL và output CSV) và rồi chuyện gì đến sẽ đến. Vào một ngày đẹp trời nọ, khách hàng dở chứng muốn đổi từ MySQL sang PostGreSQL. Tiếp đó bạn sẽ làm gì? Viết lại toàn bộ class? Chính vì thế nên sử dụng Loose-coupling cho code của bạn để việc bảo trì trở nên dễ dàng hơn bao giờ hết.


SUMMARY

Để thuận tiện sửa code khi có yêu cầu thì chúng ta nên viết theo kiểu Loose-coupling để việc bảo trì trở nên dễ dàng hơn.


Bài viết được dịch từ StackOverFlow. Cám ơn các bạn đã theo dõi!

https://stackoverflow.com/questions/2832017/what-is-the-difference-between-loose-coupling-and-tight-coupling-in-the-object-o
 
Yo, Sau đây là phần tiếp theo của bài viết Cài đặt GNS3 trên Ubuntu 16.04 


Cài đặt GNS3 VM



Để mô phỏng được các thiết bị thì chúng ta cần một máy đóng vai trò là một server. Sau đây là hướng dẫn cài đặt GNS3 VM trên VMware Workstations và kết nối GNS3 với GNS3VM.

Cài đặt VMware Pro


Cài đặt các gói cần thiết:

$sudo apt-get update
$sudo apt-get install gcc build-essential linux-headers-$(uname -r)

Download VMware Workstation Player

Sau khi cài đặt xong các gói thì tải về bản cài đặt VMware tại


hoặc


Tiến hành cài đặt
Di chuyển vào thư mục chứa file vừa tải
$cd ~/Downloads

Cấp cho nó quyền thực thi
$chmod +x VMware-Player*

$sudo ./VMware-Player*

Sau khi đợi một lát thì nó sẽ có giao diện để cài đặt để nhập key. Các bạn có thể sử dụng các key sau hoặc lên google search key khác.


UZ3J8-D8F5M-M84LZ-W6WZZ-WP8T6 
AZ5NK-4TGEJ-088PZ-96X5X-ZL2T4
 
VV510-AWYE1-M85QZ-NMYZG-QA8W6
 
ZG75A-4DY8K-489TQ-YQNZV-Y2UWA 
CY7JA-2LZE4-480CQ-TDM7V-ZK8DF 
YA75U-89XE4-08EQY-45WNT-NC890 
YV5XR-0AG93-H845Q-DDZQC-M2KWF 
AA1JR-0TX86-4847Y-JDQGV-YQKF8 
ZA35K-FHX4Q-0848P-MGW5G-N28FD 
YZ192-86X1N-H884Q-GWXEC-N7HV0 
FZ5XU-40X0H-48EXP-DPYGT-MZKYA 
YY3T0-42DEN-H88MZ-RDPEG-Y6RR0 
AU75H-2EWE2-M85QQ-JXXNZ-MCHA4 
FG3N0-FFD0P-0895Z-64P7C-XQRA2 
GG1D8-4QXE1-481NY-C6XQX-Y3U9D 
FU58K-2YX9J-M8ETZ-DWNEG-X7KAA 
FF788-A1X86-08E9Q-5YN79-XV0YD 
FC51U-43Z0L-H85TZ-NZQ5G-PZUW6


OK vậy là xong. Bây giờ tiếp tục tải về GNS3 VM tại trang chủ 

Chú ý: Phiên bản GNS3 và GNS3 VM phải cùng phiên bản

GNS3 sẽ không chạy nếu cùng chạy VMware và Virtualbox

Sau khi tải về xong thì giải nén sẽ được 1 file GNS3.ova

Tiến hành cài đặt bằng cách mở VMware lên và chọn File>Open>GNS3.ova














Sau khi chọn xong thì sẽ hiện thị một bảng và nhấn import. Sau đó thì sẽ có một khung phía bên phải.
Bạn có thể cấu hình file này trước khi boot.






Sau khi boot xong thì chúng ta sẽ tiến hành cấu hình IP và port bằng cách vào Configure
Tùy chỉnh phần host và port như hình dưới và kích hoạt kvm. Sau khi sửa xong thì nhấn thoát bằng CTRL + O, CTRL + X






Vào Networking chỉnh sửa cấu hình IP netmask





Tiếp tục lưu và thoát thì hệ thống sẽ khởi động lại. 

Trong phần mạng ảo VMware sẽ tự tạo card mạng ảo. Chúng ta nên chú ý phần này để GNS3 có thể nhìn thấy GNS3 VM. 
Vào VMware và chọn Edit>Virtual Network Editor phần này sẽ yêu cầu mật khẩu. Sau khi mở xong thì bạn có thể tùy chọn cài đặt mạng ảo cho máy. Trong trường hợp này thì mình đã cấu hình sẵn nên các bạn có thể làm theo hoặc tùy ý các bạn sử dụng.

Chú ý cẩn thận với phần vmnet0 với vmnet 8. Nếu sai phần này thì sau này có thể không sử dụng NAT được








Trong khi đó thì ta mở GNS3 lên và cấu hình kết nối tới GNS3 VM
Chọn Edit>Preferences hoặc tổ hợp phím Ctrl+Shift+P chọn phần Server
Vì lúc nảy ta cấu hình host có địa chỉ là 192.168.100.100 và thuộc nhánh mạng của vmnet1 192.168.100.0/24 nên chúng ta sẽ chọn phần Host binding: là 192.168.100.1





Sau khi đợi nó connect xong tới máy ảo VMware thì chọn qua phần GNS3 VM sẽ có giao diện như hình bên dưới:







Ok nếu như mọi chuyện ổn cả thì chúng ta sẽ có giao diện chính như sau: 







Vậy là xong chúc các bạn thành công!

Xem lại phần 1 tại đây nhé:



Chào các bạn, sau bao ngày thì mình lại có hứng viết blog. Sau đây mình xin chia sẽ cách cài GNS3 trên máy của mình.

Hướng dẫn này dành cho các hệ điều hành dựa trên các bản phân phối của Ubuntu cũng như là Linux Mint



$sudo add-apt-repository ppa:gns3/ppa

$sudo apt-get update

$sudo apt-get install gns3-gui



Nếu như bạn muốn hỗ trợ IOU



$sudo dpkg --add-architecture i386

$sudo apt-get update

$sudo apt-get install gns3-iou



Vậy là xong! Bạn đã cài xong GNS3 bản mới nhất.


Nếu như không hài lòng bản mới nhất thì bạn có thể sử dụng bản cũ hơn bằng cách cài đặt từ package:


Thêm i386 để hỗ trợ IOU:



$ sudo dpkg --add-architecture i386

$ sudo apt-get update


Cài đặt GNS3 dependencies:



$ sudo apt-get install gcc

$ sudo apt-get install python3-dev

$ sudo apt‐get install python3‐setuptools

$ sudo apt‐get install python3‐pyqt4

$ sudo apt‐get install python3‐ws4py

$ sudo apt‐get install python3‐zmq

$ sudo apt‐get install python3‐tornado

$ sudo apt‐get install python3‐netifaces



Cài đặt Dynmips dependencies



$ sudo apt-get install cmake

$ sudo apt‐get install libelf‐dev

$ sudo apt‐get install uuid‐dev

$ sudo apt‐get install libpcap‐dev


Download và giải nén gói GNS3 bao gồm:


(GNS3-1.2.1-source.zip)
  • dynamips-0.2.14.zip 
  • gns3-server-1.2.1.zip 
  • vpcs-0.6.zip
  • gns3-gui-1.2.1.zip 
  • iouyap-0.95.zip

(Các bạn có thể tìm các phiên bản khác nhau trên internet )



Build và cài đặt Dynamips:



$ cd GNS3-1.2.1-source

$ unzip dynamips-0.2.14.zip

$ cd dynamips-0.2.14

$ mkdir build

$ cd build

$ cmake ..

$ make

$ sudo make install

$ sudo setcap cap_net_admin,cap_net_raw=ep /usr/local/bin/dynamips



Cài đặt GNS3 Server:



$ unzip gns3-server-1.2.1.zip

$ cd gns3-server-1.2.1

$ sudo python3 setup.py install



Cài đặt GNS3 GUI:



$ unzip gns3-gui-1.2.1.zip

$ cd gns3-gui-1.2.1

$ sudo python3 setup.py install




Cài đặt IOU prerequisites



$ sudo apt-get install libssl1.0.0:i386

$ sudo ln -s /usr/lib/i386-linux-gnu/libcrypto.so.1.0.0 /usr/lib/libcrypto.so.4


$ sudo apt-get install bison

$ sudo apt-get install flex

$ sudo apt-get install git

$ git clone http://github.com/ndevilla/iniparser.git

$ cd iniparser

$ make

$ sudo cp libiniparser.* /usr/lib/

$ sudo cp src/iniparser.h /usr/local/include

$ sudo cp src/dictionary.h /usr/local/include




Cài đặt GNS3 IOUYAP app (provides network support for IOU):


$ unzip iouyap-0.95.zip

$ cd iouyap-0.95

$ sudo make install

$ sudo cp iouyap /usr/local/bin/



Cài đặt VPCS:


$ unzip vpcs-0.6.zip

$ cd vpcs-0.6/src

$ ./mk.sh

$ sudo cp vpcs /usr/local/bin/

(verify the path in GNS3 Preferences)


Start GNS3


$ gns3






Vậy là hết phần 1. Các bạn xem phần 2 tại đây nhé
https://tsukpa.blogspot.com/2019/04/cai-at-gns3-tren-ubuntu-1604-phan-2.html



Xem thêm bài viết gốc tại :

https://www.gns3.com/discussions/how-to-install-gns3-1-2-1-on-deb


Từ signup flow, a multi-view stepper, đến monotonous data entry interface, form là một trong những thành phần quan trọng nhất của thiết kế sản phẩm số. Bài viết này tập trung vào những nguyên tắc nên và không nên làm trong form design. Nên nhớ, đây chỉ là những điểm chung và luôn có ngoại lệ cho mọi quy luật.



Form chỉ nên có 1 dòng duy nhất


Nhãn trên













Nhóm nhãn với input của chúng








Tránh viết hoa hoàn toàn







Hiển thị tất cả lựa chọn nếu chỉ có dưới 6







Tránh dùng placeholder text làm nhãn








Đặt checkbox (và radios) từ trên xuống dưới để dễ scan








CTA (Call to action) rõ ràng







Hiển thị errors nội dòng






Chỉ dùng xác nhận nội dòng sau khi người dùng nhập liệu xong (trừ khi thông tin đó hữu ích trong quá trình nhập liệu)










Đừng ẩn đoạn text trợ giúp cơ bản







Phân biệt rõ hành động chính và hành động phụ







Thể hiện yêu cầu nhập liệu ngay trong trường nhập liệu







Bỏ dấu * đi và chỉ rõ các trường không bắt buộc







Nhóm các thông tin tương tự







Hỏi làm gì?

Hãy bỏ các trường không bắt buộc đi và tìm cách khác để thu thập dữ liệu. Các kiểu trắc nghiệm cũng là một cách hay với tỷ lệ phản hồi cao để thay thế câu hỏi. Hơn nữa, dữ liệu phân tích tự động và các kênh xã hội, UI chuyển đổi, SMS, email, voice, ORN, vị trí, vân tay,… đang dần trở thành kênh thống kê của thời hiện đại.

Make it fun


Cuộc đời ngắn ngủi lắm. Chả ai muốn ngồi lỳ điền một cái form dài thật dài cả. Hãy thật gần gũi, vui nhộn, tiếp xúc mạnh mẽ. Hãy làm điều không ai ngờ đến. Vai trò của một designer là phải thể hiện thương hiệu của công ty theo cách gợi ra phản ứng cảm xúc nơi người dùng. Nếu thực hiện đúng cách, bạn sẽ có thể tăng tỷ lệ hoàn thành (vẫn nên đi theo các quy luật bên trên nhé).
                                                                                                

Nguồn: uxdesign                                                                                                                             











Giáng sinh cũng sắp đến rồi, không khí Noel cũng tràn ngập các con đường ở những thành phố lớn. Và cũng rất nhiều website, đã thay đổi để tạo nên một không khí noel hòa cùng với cuộc sống. Dù sự thay đổi đó là lớn như thay đổi hoàn toàn giao diện web, hay chỉ nhỏ và đơn giản như tạo tuyết rơi.









Hiệu ứng tuyết rơi này khá đơn giản, chỉ là những cục tuyết rơi nhỏ không góc cạnh, nhìn như chấm tròn màu trắng vậy đó.

- Thêm đoạn code js sau vào bên trong thẻ <head>:


<script src='http://static.tumblr.com/2w7y46r/xtmlvfnoc/snowstorm.js'/>

Và lưu lại, chỉ đơn giản như vậy là bạn đã có tuyết rơi trên web của mình rồi đó.

- Ngoài ra, nếu muốn tùy chỉnh nhiều hơn thì các bạn có thể thêm đoạn code nhỏ bên dưới đây vào sau nó và tùy chỉnh theo ý muốn:



<script type="text/javascript">
snowStorm.snowColor = '#fff'; // Màu của tuyết rơi
snowStorm.flakesMaxActive = 96; // Số lượng tuyết tối đa trên màn hình
snowStorm.snowStick = true; // Nếu chuyển thành false thì tuyết sẽ không đọng ở cuối trang web
</script>