Home Blog Page 103

Làm thế nào để quản lý sự phụ thuộc của code thông qua việc giảm đi tính trừu tượng?

tính trừu tượng trong code
Làm thế nào để quản lý sự phụ thuộc của code thông qua việc giảm đi tính trừu tượng?

Tác giả: Kealan Parr

Sự phụ thuộc là một phần rất phổ biến của bất kỳ cơ sở code tốt nào. Và điều quan trọng là phải xử lý rõ ràng mọi vấn đề trong code của bên thứ ba mà chương trình của bạn dựa vào để hoạt động.

Có nhiều cách để nhận và cập nhật code của bên thứ ba. Và tôi đã đọc một cái gì đó gần đây mà nó dễ dàng trở thành cách yêu thích của tôi để làm điều này, vì vậy tôi đã phải chia sẻ nó.

tính trừu tượng trong code dependencies

Tính trừu tượng

Các nhà phát triển thường sử dụng sự trừu tượng của code để đơn giản hóa một hệ thống. Trừu tượng là một cách ẩn code phức tạp bên trong một cái gì đó và chúng thường cung cấp một giao diện dễ sử dụng.

Về cơ bản, chúng tôi không buộc người sử dụng code phải lo lắng về các chi tiết triển khai. Họ chỉ có thể gọi hàm và sẽ nhận được câu trả lời của họ – họ không phải lo lắng về những gì hàm đang làm “chui”.

Đó là điểm mạnh của việc trừu tượng hóa các chi tiết trong code của bạn. Bạn có thể trừu tượng hóa mọi thứ trong vô số cấu trúc dữ liệu hoặc cấu trúc code. Và bạn có thể trừu tượng hóa các chi tiết triển khai bên trong một nguyên mẫu, lớp, hàm hoặc hơn thế nữa.

Nếu bạn phải hiểu từng dòng code trong một danh sách dữ liệu code quá lớn (giả sử cơ sở code có 2 triệu dòng) thì bạn sẽ không bao giờ có thể bắt đầu viết code được. Bạn có thể tạo một bộ code có thể sử dụng lại, đơn giản để hiểu và dễ dàng thay đổi bằng cách trừu tượng hóa các chi tiết nhất định thành các mô-đun chính xác / tách code của bạn ra.

  "Code dễ đọc" là như thế nào?
  Tái cấu trúc mã nguồn: Trừu tượng hóa

Shimming

Shimming là hành động đặt một thứ gì đó trước thứ khác để chặn dữ liệu đang được truyền qua.

Hãy xem một ví dụ về cách nó hoạt động.

Giả sử một ngân hàng có API thực sự cũ không chấp nhận JSON do một số lỗi kỹ thuật kế thừa. Thay vào đó, nó chỉ có thể chấp nhận XML. Chúng tôi sẽ gọi đây là LegacyAPI .

Nhưng rất nhiều devs muốn sử dụng API ngân hàng này muốn gửi JSON. Ngân hàng từ chối thay đổi LegacyAPI vì nó quá rủi ro và có thể phá vỡ API. Vì vậy, phần lớn hệ thống của họ phụ thuộc vào nó, và họ không thể mạo hiểm thực hiện nhiều phát triển mới và gỡ bỏ những phần lớn của hệ thống nếu họ mắc lỗi.

Họ luôn luôn có thể Shim LegacyAPI nếu họ không muốn làm phát triển mới trên nó. Họ có thể làm điều này bằng cách tạo một API nằm “trước” LegacyAPI. Chúng tôi sẽ gọi nó là NewAPI .

Từ “phía trước” chỉ có nghĩa là thứ tự của người đầu tiên xử lý yêu cầu mạng. Bởi “phía trước”, chúng tôi có nghĩa là NewAPI sẽ là người đầu tiên nhận được các yêu cầu mạng.

Bạn sẽ nói với các nhà phát triển rằng bây giờ họ có thể nhấn NewAPI với JSON như họ muốn và NewAPI sẽ biến JSON thành XML cho LegacyAPI và cả hai bên đều có thể hài lòng.

Ngân hàng hiện có thể mở rộng dịch vụ của họ (ví dụ: họ có thể chấp nhận JSON) thông qua NewAPI mà không cần thay đổi API kế thừa cũ mà họ đã cảnh giác khi thay đổi.

Đây chỉ là một ví dụ của việc shimming. Và chỉ để xem lại, về cơ bản nó là thêm một cái gì đó vào phía trước một cái gì đó khác để hoạt động như một người đàn ông ở giữa để truyền dữ liệu cho một thứ khác.

Xem thêm Khái niệm về OOD – Object oriented design

Tại sao nên shimming tính trừu tượng khi coding?

Vấn đề

Bất cứ khi nào chúng tôi cần quản lý các phần phụ thuộc, cần đảm bảo rằng chúng tôi ngăn code của bên thứ ba “rò rỉ” trên toàn bộ code chính của chúng tôi. Leaking đồng nghĩa với việc code phụ thuộc được nhập nhiều lần đến những nơi khác nhau cần nó trong code của bạn.

Nếu bạn để một phần phụ thuộc “xâm chiếm” source code, nghĩa là bạn đang ngày càng trở nên gắn bó chặt chẽ với nó hơn. Điều này có thể (đôi khi!) Có nghĩa là bạn sẽ bị buộc phải viết mã theo hướng mà thư viện lựa chọn khi bạn kết hợp chặt chẽ với nó. Dẫn đến chi phí nhận thức đáng kể khi bạn ngày càng cố gắng làm cho thư viện này hoạt động trong code của bạn, nhưng nó không phù hợp với phần còn lại của các quyết định kiến ​​trúc của bạn.

Điều này có thể làm cho bất kỳ quá trình tái cấu trúc nào bạn cần thực hiện mất nhiều thời gian hơn so với việc tách biệt nó. Ví dụ, nếu phụ thuộc thay đổi, nó sẽ cần phải chấp nhận những đối số nào để tạo một đối tượng trong phụ thuộc?

Ngoài việc khó giữ cho bản dựng hoạt động tốt với phần phụ thuộc, nếu nó không còn phù hợp với nhu cầu hoặc bạn tìm thấy một thư viện tốt hơn để thay thế nó, thì việc tái cấu trúc của bạn trở nên khó khăn hơn nhiều để thực sự loại bỏ nó.

  "Mẹo bỏ túi" cho dân coder mới vào nghề

Giải pháp

Để thử và ngăn chặn tất cả những điều trên xảy ra, trước tiên, hãy đặt bất kỳ phụ thuộc nào chúng ta cần vào các mô-đun của riêng chúng, nơi chúng chỉ được tham chiếu một lần trong codebase của bạn.

Đây thực chất chính là shim. Bất cứ khi nào cần sự phụ thuộc của bên thứ ba, bạn chỉ cần nhập mô-đun trình bao bọc mà chúng tôi đặt xung quanh nó, để nó cung cấp một cấp độ trước khi chúng tôi gọi vào phần phụ thuộc bên thứ ba của mình.

Shim cho phép chúng tôi làm cho các biến phụ thuộc trở nên trừu tượng. Các nhà phát triển có nhu cầu sử dụng phụ thuộc bên thứ ba chỉ có thể sử dụng một assumption. Bạn sẽ đặt các đối số thành giá trị mặc định hợp lý và cố gắng loại bỏ càng nhiều chi tiết triển khai phức tạp càng tốt.

Bất kỳ nơi nào khác cần sự phụ thuộc này sẽ chỉ tải module và sau đó có thể được đưa vào khi cần thiết. Một lý do lớn mà chúng ta đã thảo luận là nó ngăn sự phụ thuộc của bạn và mã của bạn không bị kết hợp quá chặt chẽ với nhau.

Điều này hoạt động khi bạn chỉ có nó trong một module duy nhất. Sau đó, bạn chỉ phải thay đổi một module cho nhiều nơi khác để có quyền truy cập vào thứ gì đó. Điều này cho phép chúng tôi thực hiện các thay đổi dễ dàng hơn nhiều và giữ cho sự tách biệt rõ ràng về các mối quan tâm trong code.

Ở đây chúng tôi chỉ nói về một sự phụ thuộc – nhưng bạn có thể thấy điều này có thể tồi tệ hơn thế nào nếu chẳng hạn như bạn đang dựa vào 25 thư viện tùy chỉnh khác và bạn cần hiểu cách chúng hoạt động. Đây thường sẽ là một cơ sở code khá mỏng manh.

Hi vọng bài viết này sẽ mang đến cho bạn một cái nhìn tổng quan hơn về các vấn đề liên quan đến shimming và duy trì sự phụ thuộc.

Phỏng dịch theo bài viết gốc tại freecodecamp.org

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

PHP Autoloading là gì? PSR-4 autoloading với Composer

PHP Autoloading là gì? PSR-4 autoloading với Composer

Bài viết được sự cho phép của tác giả Kien Dang Chung

1. PSR là gì?

PSR viết tắt của cụm từ PHP Standard Recommendation là các tiêu chuẩn viết code trong ngôn ngữ PHP được đưa ra bởi tổ chức PHP-FIG (PHP Framework Interop Group).

PSR có rất nhiều các tiêu chuẩn khác nhau từ PSR-0 đến PSR-19, mỗi tài liệu đặc tả về những tiêu chuẩn viết code khác nhau cho những công việc khác nhau trong lập trình PHP. Thiết lập tiêu chuẩn viết code là rất quan trọng trong lập trình theo nhóm, nó giúp code dễ đọc, dễ phát hiện sai sót khi kiểm tra bởi các thành viên khác nhau trong nhóm.

Tiêu chuẩn viết mã trong PHP là rất khác nhau giữa các framework và ngay cả các phiên bản PHP khác nhau, ví dụ tên phương thức có thể viết theo nhiều kiểu khác nhau như camelCase, snake_case… hoặc một ví dụ khác về cách thức sử dụng các thư viện PHP ngoài bằng cách sử dụng include thuần túy hoặc sử dụng tiêu chuẩn autoload.

Chính vì vậy, PSR được hiệp hội phát triển framework ngồi lại và đưa ra các tiêu chuẩn chung cho viết code PHP. Trong viết code PHP có 4 tiêu chuẩn thường thấy nhất là PSR-0, PSR-1, PSR-2 và PSR-4, chúng ta cùng xem chúng là những tiêu chuẩn gì? PSR-0 và PSR-4 là tiêu chuẩn về đặt tên namespace và cách load các thư viện PHP tự động. Từ tháng 10 năm 2014, tiêu chuẩn PSR-0 không còn được dùng nữa và khuyến cáo chuyển sang PSR-4. PSR-1 và PSR-2 là các tiêu chuẩn cơ bản về viết mã nguồn và hiện PSR-2 được coi là tiêu chuẩn phổ biến cho “phong cách” viết code.

2. Autoloading là gì?

Composer là một công cụ tuyệt vời cho các lập trình viên PHP, nó giúp cho việc quản lý các gói thư viện dễ dàng. Trong bài viết này chúng ta không đi sâu vào composer mà chỉ tìm hiểu cách thức composer quản lý sự phụ thuộc giữa các gói thư viện thông qua autoloading. Vậy autoloading là gì? Vấn đề: Khi chúng ta viết một ứng dụng cho sử dụng một danh sách dài các thư viện, ở mỗi file code PHP chúng ta phải thực hiện include chúng vào những đoạn nào có gọi đến các class này, nếu danh sách này dài hàng vài chục dòng thì quả là vấn đề. Giải pháp: include tất cả các class này ở phần đầu mỗi file PHP. Giải pháp tốt hơn: Ở những đâu cần gọi đến các class này, thực hiện tải chúng ở thời điểm đó, như vậy ứng dụng không cần tải tất cả các class trong các thư viện cho tất cả các file PHP và chi tiết hơn là các phiên làm việc. Cách thức tải và sử dụng các class như vậy gọi là autoloading.

Tìm việc làm PHP đãi ngộ tốt trên TopDev

3. Tạo autoloader riêng

Để hiểu rõ cơ chế autoloading, chúng ta sẽ cùng nhau thử tạo ra một autoloader riêng. Bắt đầu bằng một ví dụ mà chúng ta thường viết kiểu này trước đây: Chúng ta có hai Class A và B ở hai file khác nhau A.php và B.php

<?php
// Classes/A.php
class A {}

<?php
// Classes/B.php
class B {}

Trong một file PHP chúng ta muốn gọi đến các Class A và B thì chúng ta phải thực hiện include các class này vào:

<?php
// index.php
include_once 'Classes/A.php';
include_once 'Classes/B.php';
// load A class
$a = new A();
// check the list of all loaded files
var_dump(get_included_files());

Kết quả khi chạy index.php như sau:

array(3) { 
    [0]=> string(35) "C:\Laragon\www\autoloader\index.php" 
    [1]=> string(39) "C:\Laragon\www\autoloader\Classes\A.php" 
    [2]=> string(39) "C:\Laragon\www\autoloader\Classes\B.php" 
}

Như vậy, toàn bộ các class được include vào index.php. Nếu chúng ta chỉ có 2 Class A và B thì không có vấn đề gì cả, khi số lượng class lên đến hàng 100 thậm chí hàng 1000, những ứng dụng hiện đại sử dụng các gói thư viện ngoài có khi lên đến cả triệu class thì cách thức viết code như vậy sẽ không thể thực hiện được, chúng ta cần đến autoloader. Cùng xem cách thức autoloading thực hiện bởi autoloader đơn giản sau:

<?php
// index.php
function my_autoloader($class) {
  include 'Classes/' . $class . '.php';
}
// register the autoloader
spl_autoload_register('my_autoloader');
// load A class
$b = new A();
// check the list of all loaded files
var_dump(get_included_files());

Như vậy trong function my_autoloader() chúng ta đã thực hiện việc ánh xạ giữa tên class và đường dẫn đến class để thực hiện include class này. Kết quả như sau:

array(2) { 
    [0]=> string(35) "C:\Laragon\www\autoloader\index.php" 
    [1]=> string(39) "C:\Laragon\www\autoloader\Classes\A.php" 
}

Như vậy chỉ có class nào cần gọi đến thì mới được include vào. Cách ánh xạ này đã giúp chúng ta có thể autoloading tuy còn một số nhược điểm như sau:

  • Tên file phải trùng tên với tên class.
  • Mỗi file chỉ được chứa duy nhất một class.
  • Tên file và tên class là phân biệt chữ hoa chữ thường.

Những tình huống này được xử lý trong autoloader của công cụ composer.

4. Autoloading với composer

Trong phần này chúng ta giả định đã cài đặt composer. Trong thư mục gốc của web server chúng ta có thể thực hiện lệnh composer xem như thế nào.

Nếu bạn vẫn chưa cài đặt, hãy xem thêm bài viết sau: Composer là gì? Quản lý các thư viện bằng composer

PHP Autoloading là gì? PSR-4 autoloading với Composer

Composer làm việc với một file thiết lập có định dạng json là composer.json được thêm vào trong thư mục gốc của dự án. Thực hiện tạo ra bằng lệnh composer init hoặc có thể tạo một file text và đặt tên là composer.json. Trong ví dụ này khá đơn giản không có thiết lập gì nên chúng ta đưa vào nội dung { } là bao của nội dung json. Tiếp đến, thực hiện lệnh composer install, nó sẽ tạo ra thư mục vendor chứa các gói thư viện ngoài mà bạn muốn sử dụng và file autoload.php.

PHP Autoloading là gì? PSR-4 autoloading với Composer

Thay đổi nội dung file composer.json để composer sẽ tự động tạo lại file autoload.php. Có 4 cách autoloading trong composer là:

  • File base autoloading
  • Classmap Based Autoloading
  • PSR-0 Autoloading
  • PSR-4 Autoloading

Trong bài viết này chúng ta sẽ sử dụng PSR-4 Autoloading, thay đổi nội dung composer.json như sau:

{
    "autoload": {
        "psr-4": {
            "Classes\\": "Classes"
        }
    }
}

Để composer tự động tạo ra file autoload thực hiện lệnh composer dump-autoload. Khi đó mở file vendor/composer/autoload_psr4.php chúng ta thấy composer đã tự động sinh code autoloading

<?php

// autoload_psr4.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
    'Classes\\' => array($baseDir . '/Classes'),
);

Để sử dụng autoloader này trong file index.php chúng ta thực hiện include mỗi autoloader này vào:

<?php

require('vendor/autoload.php');
use App\B;

$b = new B();
var_dump(get_included_files());

Thực hiện chúng ta thấy rằng, ứng dụng chỉ load mỗi class B mà không load class A:

array(6) { 
    [0]=> string(35) "C:\Laragon\www\autoloader\index.php" 
    [1]=> string(45) "C:\Laragon\www\autoloader\vendor\autoload.php" 
    [2]=> string(59) "C:\Laragon\www\autoloader\vendor\composer\autoload_real.php" 
    [3]=> string(57) "C:\Laragon\www\autoloader\vendor\composer\ClassLoader.php" 
    [4]=> string(61) "C:\Laragon\www\autoloader\vendor\composer\autoload_static.php" 
    [5]=> string(39) "C:\Laragon\www\autoloader\Classes\B.php" 
}

Ở đây chúng ta thấy ứng dụng load cả các file của composer tuy nhiên khi số lượng class tăng lên hàng trăm, hàng nghìn thì autoloader thật sự mới phát huy tác dụng.

5. Lời kết

Qua bài viết chúng ta hiểu thêm về khái niệm các tiêu chuẩn lập trình trong PHP như PSR-0, PSR-4, khái niệm autoloading và được thực hành PSR-4 autoloading với công cụ Composer. Những kiến thức cơ bản này sẽ đi cùng bạn trong suốt quá trình làm việc với các framework viết bằng PHP nói chung và framework Laravel nói riêng.

Bài viết gốc được đăng tải tại allaravel.com

Có thể bạn quan tâm:

Xem thêm các vị trí tuyển it hấp dẫn trên TopDev

Cài đặt ActiveMQ

Bài viết được sự cho phép của tác giả Giang Phan

Giới thiệu ActiveMQ

Cài đặt ActiveMQ

Apache ActiveMQ™ là một server JMS (Java Message Service) dựa trên Java, đa giao thức, mã nguồn mở phổ biến nhất.  Tích hợp các ứng dụng đa nền tảng bằng giao thức AMQP phổ biến. Trao đổi tin nhắn giữa các ứng dụng web của bạn bằng STOMP qua websockets. Quản lý thiết bị IoT của bạn bằng MQTT. ActiveMQ cung cấp sức mạnh và tính linh hoạt để hỗ trợ mọi trường hợp sử dụng hệ thống tin nhắn.

  Giới thiệu về Reactive Programing trong javascript
  Giới thiệu về Reactive Relational Database Connectivity (R2DBC)

Apache ActiveMQ được thiết kế để hỗ trợ:

  • Nhiều ngôn ngữ khác nhau: Java, C#, C, C++, Python, NodeJs, Go, …
  • Nhiều giao thức khác nhau: AMQP, MQTT, REST, RSS and Atom, …
  • Ngoài việc có thể sử dụng được trong nền tảng Java SE độc lập, có thể sử dụng được trong nhiều loại Container: J2EE, JBoss, Glassfish, JNDI, Tomcat, WebLogic, Spring, OSGi, …
  • Clustering: Queue consumer cluster, Broker cluster, Discovery of broker, Networks of broker, Master Slave, Replicated Message Stores.

Còn rất nhiều tính năng khác, các bạn tham khảo thêm trên ActiveMQ document.

Download và cài đặt ActiveMQ

Đầu tiên, các bạn hãy download phiên bản mới nhất của Apache ActiveMQ tại địa chỉ: https://activemq.apache.org/components/classic/download/

Hãy lựa chọn phiên bản phù hợp với hệ điều hành của các bạn. Ở đây mình đang sử dụng hệ điều hành macOS, do đó mình sẽ download tập tin apache-activemq-5.15.12-bin.tar.gz dành cho macOS.

Sau khi download, các bạn cần giải nén nó ra:

Mở thư mục bin của thư mục Apache ActiveMQ, mở command line lên và nhập dòng lệnh sau: ./activemq start . Để stop Apache ActiveMQ server này, các bạn cũng vào thư mục bin của Apache ActiveMQ rồi chạy câu lệnh sau: ./activemq stop

Tương tự nếu bạn sử dụng Window, để start cần chạy file activemq.bat

Sau khi khởi động Apache ActiveMQ chúng ta có thể theo dõi và quản lý Apache ActiveMQ từ giao diện web ở cổng 8161. Các bạn có thể truy cập vào trang này bằng URL sau: http://localhost:8161/admin với username và password là admin/admin:

Cài đặt ActiveMQ

Chúng ta có thể xem thông tin Queues, Topics, Subscribers, Connections, … trên các menu tương ứng.

Bây giờ, chọn menu Queues và tạo tạo một Queue có tên là: jms/gpcoder-queue

Chọn menu Topics và tạo một Topic có tên là: jms/gpcoder-topic

Sau đó, chọn menu Send và nhập thông tin Message để send tới Queue:

  • Destination: jms/gpcoder-queue
  • Queue or Topic: Queue
  • Message body: Welcome to ActiveMQ world
  • Chọn Send

Cài đặt ActiveMQ

Chọn menu Queues, chúng ta có kết quả sau:

Tương tự, send một message đến Topic, chúng ta có kết quả sau:

Cài đặt ActiveMQ

Tài liệu tham khảo:

Bài viết gốc được đăng tải tại gpcoder.com

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Học CSS Flexbox toàn tập phần 1

Bài viết được sự cho phép của tác giả Trần Anh Tuấn

Trước đây khi chúng ta thiết kế web đặc biệt là dàn trang layout, menu, chia các cột cho các thành phần trong web thì hầu hết đều sử dụng các thuộc tính như float kèm theo đó là clear float để chia cột . Khó khăn là khi responsive và hiển thị trên nhiều thiết bị phải chỉnh sửa code khá nhiều nên rất tốn thời gian.

Hoặc nhanh hơn thì các bạn sử dụng CSS Framework như bootstrap chẳng hạn, nhưng như thế thì website của bạn lại có nhiều đoạn code ‘dư thừa’ bạn không sử dụng gây ảnh hưởng đến tốc độ website…

Thế là Flexbox được sinh ra để cải thiện tình hình này, giúp cho việc dàn trang, canh các thành phần với nhau linh hoạt, dễ dàng và tiết kiệm thời gian hơn rất nhiều.

Hôm nay mình viết bài này để chúng ta cùng tìm hiểu về sức mạnh của CSS Flexbox để xem cách sử dụng nó như thế nào, nó có những thuộc tính hay gì mà nhiều người lại sử dụng nó thay cho float hay inline thế nhỉ ?

Tìm việc làm CSS lương cao

# Thuộc tính Display: Flex

Để sử dụng flex trong css thì đơn giản là chúng ta chỉ cần sử dụng thuộc tính display: flex. Mình có layout như thế này để các bạn dễ hình dung nha.

<div class="box">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>

Và mình css như sau:

.box {
display: flex;
width: 100%;
background-color: #1a1c28;
height: auto;
}
.item {
width: 150px;
height: 150px;
}
.item:nth-of-type(1) {
background-color: #bf4470;
}
.item:nth-of-type(2) {
background-color: #ffa400; 
}
.item:nth-of-type(3) {
background-color: #07a787;
}

Và đây là kết quả

Roài giờ đây mình sẽ đi vào chi tiết từng thuộc tính khác của CSS Flexbox kèm theo hình minh họa để cho các bạn dễ hình dung nha. Mình sẽ giải thích từng thuộc tính một cho các bạn kèm hình minh họa cho các bạn dễ hiểu. Nếu không hiểu thì bình luận ở dưới mình sẽ trả lời thắc mắc của các bạn. À 1 lưu ý nhỏ:

DÀNH CHO BẠN:

Mình có khoá học HTML CSS từ cơ bản tới nâng cao cho người mới, nếu bạn quan tâm thì bạn có thể học thử miễn phí bằng việc nhấn vào đây nha.

Các bạn nhớ check code ở Codepen. Và mình khuyên thêm đó là nên code theo  để hiểu nó hoạt động như thế nào, ra sao nhé chớ đọc nhiều rồi gật gù đúng đúng mà không làm thì cũng công cốc.

# Flex-direction

Như tên gọi của nó là hướng(trục), thì trong flexbox có 2 trục chính đó là trục X và trục Y giống như biểu đồ toán học đó các bạn. Lưu ý là flexbox chỉ hiển thị theo 1 trong 2 hướng thôi nha, chứ không hiển thị 1 lần 2 hướng như CSS Grid được(Sau này mình sẽ viết bài này sau).

Học CSS Flexbox toàn tập phần 1

Mặc định thì những items trong flexbox được sắp xếp theo trục X và từ trái qua phải. Đó là lý do vì sao khi mình dùng display: flex ở ví dụ ở trên đầu thì các items được sắp xếp thành hàng ngang và hiển thị từ trái qua phải.

Trong flex-direction có 4 giá trị bao gồm: row, row-reverse, column và column reverse.Các bạn nên mở Codepen mình chèn ở trên lên rồi chèn từng thuộc tính vào thử xem có giống hình mình minh họa không nhé.

flex-direction: row là giá trị mặc định trong flex-direction các items sẽ được sắp xếp theo chiều ngang(trục X) và hiển thị từ trái sang phải.

Học CSS Flexbox toàn tập phần 1

flex-direction: row-reverse cũng giống như thuộc tính flex-direction: row nhưng những items sẽ được hiển thị từ phải qua trái

flex-direction: column các items được sắp xếp chiều dọc(trục Y) và hiển thị từ trên xuống dưới

flex-direction: column-reverse cũng giống với thuộc tính flex-direction: column là các items được sắp xếp chiều dọc(trục Y) nhưng khác ở chỗ là các items hiển thị từ dưới lên trên

# Flex-wrap

Các bạn nhớ resize trình duyệt ở những demo codepen ở dưới đây để thấy sự khác nhau nha.

Cho phép các items tự động xuống hàng hoặc vẫn luôn nằm trên cùng một hàng khi kích thước container thay đổi. Hơi khó hiểu nhỉ, xem demo dưới đây nha.

Flex-wrap có 3 giá trị đó là wrap, nowrap và wrap-reverse.

Mặc định là nowrap nên các bạn không cần phải set. Khi chúng ta resize trình duyệt lại nếu các bạn sử dụng thuộc tính flex-wrap: nowrap thì các items sẽ tự động co lại cho chớ không có rớt xuống hàng, điều này dễ làm cho content bên trong(nếu có) bị ép lại có thể gây xấu giao diện.

flex-wrap: wrap ngược lại so với flex-wrap: nowrap khi kích thước container thay đổi và tổng chiều rộng các items cộng lại lớn hơn chiều rộng của container bọc ngoài thì nó sẽ rớt xuống.

Ví dụ như ở demo Codepen. Có 3 items mỗi item 150px, độ rộng(width) của container là 100% là khung hiển thị ở codepen. Khi chúng ta resize trình duyệt thì khung container nó cũng nhỏ theo, khi chạm qua item số 3 màu xanh lá 1 chút thì item sẽ tự động rớt xuống.

Cuối cùng là flex-wrap: wrap-reverse cũng tương tự như flex-wrap: wrap nhưng nó ngược lại thay vì item rớt xuống thì nó rớt lên. Resize trình duyệt phát hiểu ngay.

Lâu lâu các bạn có thấy một số người dùng thuộc tính flex-flow: row wrap. Thuộc tính này viết để gộp 2 thuộc tính flex-direction và flex-wrap lại nhé các bạn. Nó như thế này flex-flow: flex-direction flex-wrap. Ứng với flex-direction và flex-wrap các bạn thay giá trị tương ứng vào nhé.

# Tạm kết

Do bài này dài và mình cũng muốn giải thích chi tiết cho các bạn. Nên mình chia bài về flexbox này thành 5 phần(4 phần lý thuyết và 1 phần thực hành) cho các bạn dễ theo dõi và đỡ ngán khi đọc do dài quá.

Bài tiếp theo mình sẽ nói đến 4 thuộc tính khác đó là justify-content, align-items, align-self và order các bạn nhớ đón đọc nha. Nếu có ý kiến hay góp ý hoặc không hiểu thì bình luận bên dưới mình sẽ trả lời. Chúc các bạn một ngày tốt lành.

Bài viết gốc được đăng tải tại evondev.com

Có thể bạn quan tâm:

Xem thêm Việc làm ngành cntt hấp dẫn trên TopDev

Cấu hình HTTPS Server cho NGINX (SSL Certificate trong NGINX)

Cấu hình HTTPS Server cho NGINX (SSL Certificate trong NGINX)

Bài viết được sự cho phép của tác giả Trần Hữu Cương

Cấu hình HTTPS Server cho NGINX (SSL Certificate trong NGINX)

Trong bài này mình sẽ hướng dẫn mở tính năng HTTPs trên NGINX. (Mặc định thì NGINX đang tắt tính năng này)

  Hướng dẫn xử lý lỗi 502 Bad Gateway Nginx
  Cách Engineer Nhật Bản thực hiện test như thế nào

Cấu hình HTTPS Server cho NGINX (SSL Certificate trong NGINX)

Mở file nginx.conf tìm tới phần HTTPS server

# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;

# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;

# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;

# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;

# location / {
# root html;
# index index.html index.htm;
# }
#}

Mặc định NGINX không mở HTTPS, để enable HTTPS ta bỏ comment đoạn trên bằng cách xóa đi các dấu # ở đầu

Ví dụ:

# HTTPS server

server {
 listen 443 ssl;
 server_name localhost;

 ssl_certificate cert.pem;
 ssl_certificate_key cert.key;

 ssl_session_cache shared:SSL:1m;
 ssl_session_timeout 5m;

 ssl_ciphers HIGH:!aNULL:!MD5;
 ssl_prefer_server_ciphers on;
 location / {
 root html;
 index index.html index.htm;
}
}

Theo như cấu hình trên thì server sẽ thực hiện mã hóa ssl khi truy cập qua cổng 443, ssl certificate được sử dụng là file cert.pem và cert.key (nằm cùng folder với file nginx.conf)

Ngoài ra bạn cũng có thể trỏ ssl certificate tới địa chỉ trên mạng, ví dụ:

ssl_certificate www.example.com.chained.crt;
ssl_certificate_key www.example.com.key;

(Xem lại: Hướng dẫn tạo certificate SSL trên ubuntu (file key, pem))

Kết quả: truy cập vào địa chỉ https://localhost:443

Cấu hình HTTPS Server cho NGINX (SSL Certificate trong NGINX)

Okay, Done!

References: http://nginx.org/en/docs/http/configuring_https_servers.html

Bài viết gốc được đăng tải tại stackjava.com

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Fix Lỗi “RDP Authentication Error Has Occurred – The Function Requested Is Not Supported”

fix lỗi “RDP Authentication Error Has Occurred – The Function Requested Is Not Supported”

Bài viết được sự cho phép của BQT Kinh nghiệm lập trình

Bài viết hôm nay mình sẽ chia sẻ cách fix lỗi “RDP Authentication Error Has Occurred – The Function Requested Is Not Supported” khi remote tới Windows Server. Một ngày đẹp trời, tự nhiên bạn không thể remote tới Server như bao ngày. Màn hình xuất hiện thông báo như sau:

Remote Desktop Connection
An authentication error has occurred.
The function requested is not supported.
Remote computer: computer_name

Fix Lỗi "RDP Authentication Error Has Occurred – The Function Requested Is Not Supported"

Nguyên nhân gây ra lỗi trên?

Thực tế là các bản cập nhật bảo mật mới nhất (được phát hành sau tháng 5 năm 2018) được cài đặt trên máy tính của bạn. Các bản cập nhật này khắc phục lỗ hổng nghiêm trọng trong giao thức CredSSP (Nhà cung cấp hỗ trợ bảo mật thông tin xác thực) được sử dụng để xác thực trên các máy chủ RDP (CVE-2018-0886 –RDP authentication error: CredSSP Encryption Oracle Remediation). Các bản cập nhật này không được cài đặt ở phía máy chủ RDP / RDS của bạn và NLA (Network Level Authentication) được bật để có thể remote vào server.

  10 lời khuyên để giảm thiểu mối đe doạ an ninh nội bộ
  24 code ES6 tân tiến để khắc phục các lỗi thực hành JavaScript

NLA sử dụng các cơ chế CredSSP để xác thực trước người dùng RDP qua TLS / SSL hoặc Kerberos. Máy tính của bạn chỉ cần chặn kết nối máy tính từ xa đến một máy chủ sử dụng phiên bản bảo mật kém của CredSSP.

Cách fix?

Có những cách fix sau đây:

  1. Cách chuẩn xác nhất và tốt nhất bạn cần thực hiện là cài đặt “Windows security updates” trên server của bạn.
  2. Cách 2: Tắt NLA (Network Level Authentication) trên server của bạn.

Làm thế nào để vô hiệu hóa NLA trên Windows Server

Nếu NLA được bật trên máy chủ RDP của bạn, điều này có nghĩa là CredSSP được sử dụng cho người dùng RDP xác thực trước. Bạn có thể tắt Network Level Authentication (NLA) trong System Properties trên tab Remote bằng cách bỏ chọn các điều kiện. Chỉ cho phép kết nối từ các máy tính chạy Remote Desktop với Network Level Authentication (khuyên dùng) (Windows 10 /8.1 hoặc Windows Server 2012R2 / 2016).

Fix Lỗi "RDP Authentication Error Has Occurred – The Function Requested Is Not Supported"

Done! Các bạn cùng thử remote lại xem sao nhé. Hi vọng các bạn thành công!

Tham khảo:

http://woshub.com/rdp-authentication-error-function-requested-not-supported/

Bài viết gốc được đăng tải tại kinhnghiemlaptrinh.com

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Clean Code là gì? Tại sao phải CLEAN CODE trong lập trình?

Clean Code là gì? Tại sao phải CLEAN CODE trong lập trình?

Nếu anh em học và làm về lập trình thì chắc đã từng ít nhiều nghe về khái niệm “Clean Code” rồi phải không nhỉ. Nhưng mình tin chắc là số lượng anh em hiểu rõ về “clean code” là không nhiều.

Vậy tại sao phải “clean code” trong lập trình? nếu anh em đã từng thắc mắc như vậy thì hãy để mình giải thích kỹ hơn cho anh em trong bài viết ngày hôm nay nhé.

  Clean Architecture: Đứng trên vai những gã khổng lồ
  Clean code – Tất cả từ một cái tên

Nhưng trong khuôn khổ của bài viết này, mình sẽ chỉ đề cập đến các lý do để anh em nên viết code sao cho sạch, sao cho đẹp, gọn gàng… chứ không nói về cách làm như thế nào nhé.

#1. “Clean code” là gì?

Clean Code là gì? Tại sao phải CLEAN CODE trong lập trình?

Trước khi trả lời cho câu hỏi tại sao thì chúng ta cần phải hiểu như thế nào là clean code trước, vì chỉ khi hiểu được khái niệm thì chúng ta mới biết tại sao nó quan trọng.

Clean code nếu dịch ra thì có nghĩa là “mã nguồn sạch”, nhưng hiểu một cách đơn giản thì clean code bao gồm: cách tổ chức mã nguồn, cách triển khai mã nguồn sao cho khoa học, dễ hiểu và đem lại hiệu năng cao cho chương trình.

Việc áp dụng clean code không khó, nhưng áp dụng làm sao cho đúng và chuẩn thì lại là một câu chuyện khác. Chính vì vậy mà việc nắm được, hiểu và biết cách áp dụng clean code sẽ khiến cho mã nguồn tốt hơn rất nhiều.

#2. “Clean code” giúp code dễ bảo trì hơn

Bảo trì gần như là khâu bắt buộc của rất nhiều sản phẩm phần mềm nói riêng và sản phẩm kỹ thuật nói chung.

Clean Code là gì? Tại sao phải CLEAN CODE trong lập trình?

Nếu trong quá trình phát triển phần mềm chúng ta làm không tốt thì khâu bảo trì sẽ gặp rất nhiều khó khăn và tốn kém.

Và một trong những điều quan trọng mà đội ngũ phát triển có thể làm đó là đảm bảo chất lượng source code ngay từ đầu.

Để làm được điều này không phải không phải là dễ, vì bản chất của dự án là sẽ nhiều người làm cùng nhau. Nếu không có một quy chuẩn chung thì chắc chắn có người code hay có người code dở.

Khi bảo trì code, nếu người trước biết clean code thì người sau vào làm sẽ dễ dàng mở rộng chương trình, phát triển thêm tính năng mà không phải sửa đổi mã nguồn cũ.

Ngược lại, nếu không clean code thì sau này bảo trì và phát triển lên sẽ rất khó trong việc mở rộng mã nguồn. Thậm chí, trường hợp tệ nhất có khi còn phải đập đi xây lại toàn bộ nữa, gây lãng phí nguồn lực.

#3. “Clean code” giúp người khác đọc code dễ hơn

Clean Code là gì? Tại sao phải CLEAN CODE trong lập trình?

Như mình đã nói bên trên, bình thường thì một dự án sẽ do nhiều người cùng làm với nhau, chứ không phải chỉ có một người làm (thực tế thì cũng có, nhưng rất ít).

Vậy một bài toán đặt ra là mỗi ông code một kiểu thì làm sao để đọc code của nhau mà vẫn hiểu được người kia đang viết gì?

Mình đã từng trong hoàn cảnh này nên mình rất hiểu cái cảm giác “ức chế” khi phải đọc những dòng “xấu, bẩn, cẩu thả” của người khác.

Nếu một lập trình viên biết clean code thì họ sẽ không bao giờ viết code để cho mỗi mình anh ta đọc hiểu. Họ sẽ luôn nghĩ đến việc làm sao viết code để cả người khác khi đọc vẫn có thể hiểu được.

Tất nhiên, để làm được điều đó không phải là dễ, vì bản chất mỗi người sẽ có một phong cách lập trình trình khác nhau. Nhưng bạn phải chấp nhận thôi, muốn trở nên chuyên nghiệp bạn buộc phải nắm được những quy tắc chung.

Tham khảo thêm các vị trí tuyển dụng ngành Code hot từ các công ty: 

#4. “Clean code” thể hiện trình độ của lập trình viên

Tại sao clean code lại thể hiện trình độ của lập trình viên?

Clean Code là gì? Tại sao phải CLEAN CODE trong lập trình?

Thực ra, để đánh giá thì trình độ của một lập trình viên sẽ phải dựa trên rất nhiều khía cạnh khác nhau.

Nhưng nếu gói gọn lại trong khía cạnh kỹ thuật thì việc nắm được, hiểu được và áp dụng được clean code sẽ thể hiện phần nào trình độ kỹ thuật của một lập trình viên.

Đôi khi clean code còn thể hiện kinh nghiệm của một lập trình viên ra sao. Việc code nhiều, gặp nhiều lỗi sẽ giúp họ tích lũy kinh nghiệm theo năm tháng.

Và họ biết khi gặp một vấn đề, họ nên bắt đầu từ đâu và xử lý nó như thế nào cho hợp lý nhất.

Ngoài ra, việc làm qua nhiều dự án, tiếp xúc với nhiều loại mã nguồn (được viết bằng nhiều ngôn ngữ lập trình khác nhau) thì lập trình viên cũng “lĩnh ngộ” được nhiều cách tổ chức, triển khai mã nguồn.

Từ đó đúc rút ra những kinh nghiệm riêng để hoàn thiện và nâng cao khả năng kỹ thuật của mình (bạn có thể nhận thấy rõ khi làm việc với những DEV Lead từng làm nhiều dự án)

#5. “Clean code” giúp mọi người hình thành một quy tắc chung

“Quy tắc” gần như là điều bắt buộc nếu một doanh nghiệp muốn trở nên chuyên nghiệp, uy tín hơn.

Clean Code là gì? Tại sao phải CLEAN CODE trong lập trình?

Đối với các công ty phần mềm thì điều này càng chính xác hơn, đặc biệt là trong khâu phát triển sản phẩm (xây dựng mã nguồn chương trình)

Nếu tất cả thành viên của dự án đều code theo một chuẩn chung thì dự án sẽ phát triển rất nhanh, ít xảy ra lỗi, dễ bảo trì sau này và chất lượng sản phẩm cũng tốt hơn.

Ngược lại, nếu đội ngũ phát triển làm việc không có quy tắc (thường xảy ra ở các công ty nhỏ, mới thành lập chưa có kinh nghiệm và quy trình) thì mình tin chắc sản phẩm thường có nhiều nhiều lỗi, hoạt động không ổn định và đặc biệt chất lượng mã nguồn (source code) cực kỳ thấp.

Thực tế là không phải lập trình viên nào trong cùng dự án cũng có khả năng tương đương nhau, nhưng chỉ cần có 1-2 người có kỹ năng clean code thì họ sẽ “uốn” cả team theo chuẩn.

#6. “Clean code” thể hiện sự chuyên nghiệp của đội ngũ phát triển

Clean Code là gì? Tại sao phải CLEAN CODE trong lập trình?

“Chuyên nghiệp” là mục tiêu mà bất kỳ doanh nghiệp nào đều muốn hướng đến, đặc biệt là các doanh nghiệp làm phần mềm.

Chuyên nghiệp ở đây phải là trên mọi khía cạnh: từ quản lý con người, phát triển sản phẩm cho đến việc marketing để bán sản phẩm…

Nếu xét riêng về khía cạnh kỹ thuật thì đội ngũ phát triển phần mềm được gọi là chuyên nghiệp khi nào?

Điều này rõ nhất là khi chúng ta nhìn vào mã nguồn (source code) của họ. Source code có theo chuẩn, có theo quy tắc chung không, hay mỗi ông code một kiểu chẳng theo quy chuẩn gì hết.

Tổ chức mã nguồn ra sao, cách quản lý mã nguồn đó như thế nào, có đảm bảo về an toàn thông tin không?

Nói chung là câu chuyện về “chuyên nghiệp hóa” đội ngũ phát triển phần mềm thực sự không phải là dễ.

Nó đòi hỏi sự chuyên nghiệp từ các bộ phận khác của doanh nghiệp, từ những con người trong chính đội ngũ đó cho đến những người trưởng nhóm, người lãnh đạo.

#7. Lời Kết

Okay, vậy là qua bài viết này thì mình tin là bạn đã hiểu hơn về khái niệm Clean code rồi đúng không? và lý do tại sao cần phải Clean code.

Clean code thực sự là một trong những kỹ năng quan trọng bậc nhất nếu bạn muốn trở thành một lập trình viên chuyên nghiệp.

Có hai cuốn sách rất hay về chủ đề này bạn có thể tham khảo đó là:

  1. Clean Code: A Handbook of Agile Software Craftsmanship
  2. The Clean Coder: A Code of Conduct for Professional Programmers: Nếu thích bạn có thể mua trên Tiki !

CTV: Nguyễn Đức Cảnh – Bài viết gốc tại blogchiasekienthuc.com

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Những cái bẫy cần tránh đối với tester mới

Những cái bẫy cần tránh đối với tester mới

Bài viết được sự cho phép của vntesters.com

Bạn là tester mới? Bạn hoang mang không biết khởi đầu từ đâu? Càng tìm hiểu bạn càng cảm thấy bị mù mờ? Bạn lạc lõng và hoài nghi về năng lực cũng như con đường phát triển của một kỹ sư kiểm thử? Bạn cũng đã tự hỏi mình đã làm gì sai? Bạn không sai nhưng có thể bạn đã bị rơi vào một trong những cái bẫy mà những bạn tester mới hay mắc phải. Những cái bẫy mà theo mình các bạn cần phải thoát ra càng sớm càng tốt để có thể bước những bước vững chắc trên con đường phát triển nghề kiểm thử.

Tìm hiểu các công việc tester cần có

Lạc trong định nghĩa, khái niệm

Những cái bẫy cần tránh đối với tester mới

Image credit: httpsbrownehr.com

Các định nghĩa, khái niệm trong kiểm thử gần như là những thứ các bạn mới vào nghề thường tiếp cận. Những câu hỏi như “Trường hợp kiểm thử là gì”, “các kỹ thuật kiểm thử”, “sự khác nhau giữa test plan và test strategy”, “sự khác nhau giữa bug, defect, error, fault”, “các loại kiểm thử” hay những câu hỏi tương tự được hỏi ở rất nhiều diễn đàn.

Vấn đề ở đây không hẳn là các bạn không tìm được câu trả lời mà chính xác hơn là các bạn bị lạc trong các định nghĩa và khái niệm. Bạn đọc ở chỗ này định nghĩa như vậy, thầy giáo dạy bạn định nghĩa khác. Bạn thấy trên Wiki định nghĩa khác và đọc ở một blog thì thấy định nghĩa khác. Sao lại như vậy? Vậy định nghĩa nào là đúng nhất. Các bạn nghĩ rằng ở đâu đó sẽ có một định nghĩa đúng nhất và bạn đi tìm nó với ý nghĩ bạn có thể tự tin tuyên bố mình đã biết về nó. Theo kinh nghiệm thực tế thì đây là nỗ lực gần như vô vọng vì bạn sẽ sớm lạc trong định nghĩa vì hầu như ai cũng có thể định nghĩa được và đều nghe “lọt tai”.

Từ Wiki đến các định nghĩa trong các giáo trình chứng chỉ quốc tế. Từ những nhân vật có tiếng trong giới kiểm thử trên thế giới đến những kỹ sư kiểm thử trên các diễn đàn đều có những định nghĩa của riêng mình. Đó là lí do của những tranh luận (có khi tranh cãi) triền miên ai đúng ai sai khi bàn về định nghĩa. Thực tế làm việc cho thấy hầu như chẳng ai đặt nặng vấn đề định nghĩa mà là cách bạn làm như thế nào.

Các bạn hãy tìm hiểu về định nghĩa nhưng đừng đặt nặng nó và tránh xa những tranh luận liên quan đến định nghĩa vì chẳng mang lại lợi ích gì.

Bằng cấp, chứng chỉ về kiểm thử

Những cái bẫy cần tránh đối với tester mới

Image credit: alphacertified.com.au

Có một thực tế là bằng cấp và chứng chỉ (quốc tế) đang ngày càng phổ biến và có một sức hấp dẫn khá lớn đối với cộng đồng kỹ sư kiểm thử nói chung và các bạn mới vào nghề nói riêng. Nhu cầu để học và lấy chứng chỉ cũng khác nhau.

Đa phần là để tìm được việc vì thấy nhiều công ty yêu cầu chứng chỉ ABC nào đó, để thăng tiến vì có chứng chỉ sẽ giúp thăng tiến nhanh hơn và vì nó là kiến thức chuẩn quốc tế. Chương trình thì có từ cấp tốc với chứng chỉ nội bộ cho đến luyện thi chứng chỉ quốc tế với những lời chào mời kiểu như học xong làm việc được ngay, được giới thiệu việc làm và kiến thức chuẩn quốc tế. Nhiều bạn sau khi có chứng chỉ xong cứ nghĩ rằng mình “oách” và cho rằng kiến thức mình là chuẩn quốc tế để rồi sau này khi làm việc và tiếp cận với những kiến thức khác, những cách tiếp cận khác bạn vẫn cứ bảo thủ cho rằng mọi người phải giống bạn vì bạn là chuẩn. Mình không bài trừ chứng chỉ. Mình chỉ muốn chỉ ra rằng các khóa học hay chứng chỉ không phải cây đũa thần trong nghề kiểm thử. Sẽ không có vấn đề gì nếu mọi người nhận thức được rằng nó chỉ là một dạng giấy thông hành, là một góc nhìn khác về kiểm thử và không có chuẩn mực gì ở đây cả.

Như đã nói ở trên, mình không bài trừ việc bạn tham gia các khóa học hay chứng chỉ nhưng để tránh việc “tiền mất tật mang”, các bạn cần tỉnh táo để nhận ra nhu cầu thực sự của mình cũng như những giá trị mà các khóa học hay chứng chỉ đem lại.

Đi tìm “low-fruit” trong kiểm thử

Những cái bẫy cần tránh đối với tester mới

Image credit: idnplace.com

Có một câu chuyện vui là gần đây mình có tham gia vào một nhóm thảo luận qua Skype và có một bạn đặt câu hỏi làm thế nào để viết test case cho một cái ứng dụng của bạn đó. Rất nhiều bạn trong nhóm đã đưa ra những test case cụ thể ngay lập tức, tuy nhiên cũng có một số bạn (trong đó có mình) đặt câu hỏi ngược lại để hỏi thêm về yêu cầu, về tính năng của app.

Kết quả là mình và một số bạn bị cho là có vấn đề về đọc hiểu kiểu như “một câu hỏi đơn giản vậy mà không hiểu” kèm theo nhiều lời lẽ bức xúc khác. Hay như thỉnh thoảng mình cũng gặp những câu hỏi đại loại như “Mình không biết viết test case/test plan/test design như thế nào, bạn nào có template mẫu thì cho mình xin với”. Mình không hiểu template mẫu thì sẽ giúp được gì cho bạn đó trong ngữ cảnh đó vì mỗi dự án mỗi khác nhau.

Hai ví dụ mình nêu trên mình gọi vui là hội chứng “low-fruit” trong kiểm thử. Về mặt hình tượng thì low-fruit chỉ những trái cây ở dưới thấp. Bạn chỉ cần với tay là hái được liền. Ý nghĩa của nó ám chỉ những hành động với mục đích mong đợi hiệu quả ngay lập tức mà chẳng cần bỏ chút nỗ lực nào. Kiểm thử không phải là toán học với kết quả chỉ đúng hoặc sai. Kiểm thử cần bạn suy luận, đặt câu hỏi, tìm hiểu, trao đổi thông tin và phụ thuộc nhiều vào yếu tố ngữ cảnh.

Việc các bạn đặt câu hỏi và tìm hiểu hoàn toàn được khuyến khích nhưng đừng đi tìm những giá trị tức thời vì nó có thể là cái bẫy có thể khiến bạn không thể tiến xa trong công việc kiểm thử.

  Automation skills cho tester già mà lười
  Con đường trở thành Business Analyst của Tester

Thái độ tiêu cực đối với kiểm thử

Nhiều bạn tester mới có cảm giác luôn bị Dev, quản lí dự án xem thường, chèn ép. Hay bạn đọc đâu đó kiểm thử là công việc thứ cấp, chẳng ai muốn làm. Kết quả là bạn dần mất niềm tin và trở nên bi quan vào công việc kiểm thử. Có 2 nguyên nhân có thể khiến bạn rơi vào tình trạng trên:

1)      Tiên trách kỉ

Nhiều bạn kỹ sư kiểm thử tự làm mình mất giá cũng như bị xem thường trong mắt người khác. Có nhiều cách khác nhau nhưng về cơ bản bạn sẽ tự làm mình mất giá bằng các cách sau:

  1. Bạn không trân trọng những giá trị cũng những đồng nghiệp khác, cụ thể hơn là Dev. Nhiều bạn tester nói chuyện với nhau toàn là nói xấu Dev sau lưng khi bạn đó tìm thấy lỗi trong sản phẩm. Khi bạn có thái độ đó, chẳng trách sao bạn bị nhận được thái độ tương tự khi bạn bị sót bug. Hãy trân trọng những giá trị của đồng nghiệp, mỗi người đều có vai trò và đóng góp khác nhau trong dự án. Hỗ trợ nhau để cũng làm một sản phẩm chất lượng tốt nên là mục tiêu chung mà mọi người hướng đến.
  2. Không tự hào về những việc mình làm. Nếu bạn không tự hào về kiểm thử, về những việc mình làm, những giá trị mình mang lại cho dự án thì bạn đừng mong đợi mọi người nhìn thấy điều đó. Hãy cho thấy bạn quí trọng và tự hào về công việc kiểm thử. Đây là công việc của bạn và bạn có quyền tự hào về nó.

2)      Hậu trách nhân

Có một thực tế là nhiều Dev, nhà quản lí cũng không hiểu về công việc kiểm thử dẫn đến những thái độ, suy nghĩ tiêu cực về kỹ sư kiểm thử. Có 2 thái độ mình quan sát thấy được từ họ:

  1. Tester chẳng mang lại giá trị gì. Nhiều bạn Dev có kinh nghiệm và cho rằng mình có thể viết được những đoạn code chạy ào ào và sẽ không bao giờ có lỗi. Cần gì tester? Tester có cảm giác mình như người thừa trong dự án và chẳng có tiếng nói nào.
  2. Có tester rồi, lo gì. Nhiều bạn Dev lại dựa vào đội test kiểu như là chốt chặn cuối cùng và duy nhất cho sản phẩm. Cho nên họ chẳng quan tâm đến chất lượng của đoạn code hay kiểu như đổ lỗi cho tester khi bị sót bug. Kết quả là tester luôn sống trong những lời chỉ trích đổ lỗi từ đồng nghiệp.

Nếu bạn rơi vào những dự án mà giá trị của tester không được nhìn nhận một cách đúng mực thì một là bạn phải “khai sáng” cho họ về kiểm thử, hai là bạn nên chuyển dự án/công ty tùy vào bạn thấy việc nào dễ làm hơn. Mắc kẹt ở giữa sẽ chỉ làm bạn mai một niềm tin vào bản thân và kiểm thử.

Lời kết

Bạn mới vào nghề và có rất nhiều thứ bạn cần phải biết và học. Bạn cảm thấy lạc trong mớ định nghĩa, khái niệm về kiểm thử, bạn có thể nhận thức sai về chứng chỉ kiểm thử, bạn đi tìm những giá trị “low-fruit” hoặc nhiều khi bạn cũng nghi ngờ về công việc kiểm thử mình đang làm.

Tuy nhiên, bạn không cần phải hoảng loạn vì bạn hoàn toàn có thể tránh được những bẫy đó. Bạn mới không có nghĩa là bạn dở hay thiếu năng lực. Bạn mới đơn giản chỉ vì bạn mới mà thôi. Bước những bước chậm rãi và tận hưởng niềm vui tự hào trong công việc. Bạn sẽ thành một kỹ sư kiểm thử tuyệt vời trong tương lai.

Bài viết gốc được đăng tải tại vntesters.com

Có thể bạn quan tâm:

Xem thêm Tuyển dụng tester hcm, đà nẵng, hà nội hấp dẫn trên TopDev

Integration Test là gì

Integration Test là gì

Bài viết được sự cho phép của tác giả Lê Chí Dũng

Trong hôm nay mình cũng tìm hiểu lại một khái niệm là Integration Test còn gọi là test tích hợp từ các Unit Test

  04 Điều Cần Chú Ý Cho Người Mới Làm Automation Test
  A/B testing và những tiêu chí chính để đánh giá sự thành công của ASO

1. Khái niệm

  • Integration Testing là công việc kiểm thử tích hợp 1 nhóm các module riêng lẻ với nhau cùng với các Unit Test riêng lẻ trong từng module.
  • Một dự án phần mềm điển hình bao gồm nhiều module phần mềm, được code bởi nhiều người khác nhau. Tích hợp thử nghiệm tập trung vào kiểm tra truyền dữ liệu giữa các module.

2. Tại sao Integration Testing là cần thiết

Mặc dù mỗi module đều được unit test nhưng các lỗi vẫn còn tồn tại với các lý do khác nhau:

  • Một Module nói chung được thiết kế bởi một lập trình viên có hiểu biết và logic lập trình có thể khác với các lập trình viên khác. Kiểm thử tích hợp là cần thiết để đảm bảo tính hợp nhất của phần mềm.
  • Tại thời điểm phát triển module vẫn có thể có thay đổi trong spec của khách hàng, những thay đổi này có thể không được kiểm tra ở giai đoạn unit test trước đó.
  • Giao diện và cơ sở dữ liệu của các module có thể chưa hoàn chỉnh khi được ghép lại
  • Khi tích hợp hệ thống các module có thể không tương thích với cấu hình chugn của hệ thống
  • Thiếu các xử lý ngoại lệ có thể xảy ra

3. Intergration test case

Kiểm thử tích hợp khác với các trường hợp kiểm tra khác, nó tập trung chủ yếu vào các giao diện & lưu lượng dữ liệu / thông tin giữa các module. Ưu tiên được trao cho các liên kết tích hợp chứ không phải là các đơn vị chức năng.

Ví dụ 1 trường hợp mẫu Integration Test cho các kịch bản sau đây: Ứng dụng có 3 module gồm: ‘Login Page, ‘mail box’ và ‘delete mail’.

Trong đó tập trung chủ yếu vào phần Mail Box: Kiểm tra tích hợp của nó để delete mail.

Integration Test là gì

4. Cách tiếp cận / phương pháp / chiến lược của intergration test

Phương pháp tiếp cận Big Bang

Tại đây tất cả các thành phần được tích hợp cùng 1 lúc, sau đó sẽ tiến hành kiểm thử.

Ưu điểm:

Thuận tiện với các dự án nhỏ

Nhược điểm:

Khó khăn trogn việc phát hiện bug.

Có thể bỏ qua các bug giao diện nhỏ trong quá trình tìm bug

Mât thời gian dành cho tích hợp hệ thống nên làm giảm thời gian dành cho test.

Vì các module được kiểm thử cùng 1 lúc nên các module có nguy cơ bị cô lập trong quá trình kiểm thử

Phương pháp tiếp cận Incremental

Trong phương pháp này, kiểm tra được thực hiện bằng cách kết hợp hai hay nhiều module có liên quan một cách hợp lý. Sau đó, các phân hệ liên quan khác được thêm vào và kiểm tra sự hoạt động đúng đắn. Quá trình tiếp tục cho đến khi tất cả các module được tham gia và thử nghiệm thành công.

Quá trình này được thực hiện bằng cách sử dụng các chương trình giả gọi là Stub and Driver. Sơ khai và trình điều khiển không thực hiện toàn bộ logic lập trình các module nhưng chỉ mô phỏng giao tiếp dữ liệu với các module được gọi.

Stub: Được gọi bởi Module dưới Test.

Driver: Gọi Module để được kiểm tra.

Phương pháp Incremental được thực hiện bởi hai phương pháp khác nhau:

Bottom Up Top Down Bottom up Integration

Chiến lược Bottom Up

Mỗi module ở mức thấp hơn được thử nghiệm với các module cao hơn cho đến khi tất cả các module đều được kiểm tra. Nó được sử dụng cho Driver testing. Thể hiện bằng biểu đồ dưới đây:

Integration Test là gì

Ưu điểm:

  • Thu gọn phạm vi bug dễ dàng hơn
  • Không mất thời gian chờ tất cả các module được tích hợp

Nhược điểm:

  • Module quan trọng của hệ thống có thể dễ bị lỗi
  • Không giữ được nguyên mẫu đầu tiên của hệ thống

Top down Integration:

Trong tiếp cận từ trên xuống , kiểm tra được thực hiện từ trên xuống dưới theo dõi dòng kiểm soát của hệ thống phần mềm. Nó được sử dụng cho Stub testing

Integration Test là gì

Ưu điểm:

  • Thu gọn phạm vi bug dễ dàng hơn
  • Khả năng để có được một nguyên mẫu ban đầu.
  • Modules quan trọng đang được thử nghiệm trên mức ưu tiên; lỗi trong thiết kế lớn có thể được tìm thấy và cố định đầu tiên.

Nhược điểm:

  • Cần nhiều Stub.
  • Module ở mức độ thấp hơn sẽ được kiểm tra không đầy đủ.

5. Các bước thực hiện test tích hợp

  • Chuẩn bị Integration Test Plan
  • Thiết kế các kịch bản thử nghiệm, trường hợp, và Script (Test Scenarios, Cases, and Scripts ).
  • Thực hiện kiểm tra theo test case đã viết
  • Theo dõi & tái kiểm tra các lỗi ở trên.
  • Bước 3 và 4 được lặp đi lặp lại cho đến khi hoàn thành Integration là thành công.

6. Kết luận

Intergration test là 1 bước rất quan trọng trong suốt quá trình kiểm thử, phần mềm có được đảm bảo chất lượng hay không?hệ thống có vận hành theo đúng mong muốn người dùng hay không sẽ được kiểm tra qua bước này.

Bài viết gốc được đăng tải tại lcdung.top

Có thể bạn quan tâm:

Xem thêm Tuyển tester làm việc online hấp dẫn trên TopDev

Khởi sắc sự nghiệp IT cùng các cơ hội tại công ty IT Hàn Quốc

KICC

Tiếp nối thành công của dự án hợp tác 2020, KICC HCMC cùng TopDev tiếp tục mang đến chương trình hợp tác năm 2021 với thông điệp “Make Your IT Career Outstanding – Khởi sắc sự nghiệp IT của bạn”. Theo đó là những hoạt động phối hợp với mục đích kết nối các việc làm ngành CNTT tại các doanh nghiệp IT Hàn Quốc với đối tượng Lập Trình Viên Việt Nam.

Mối quan hệ đầu tư chiến lược Hàn Quốc – Việt Nam

Hiện tại, Việt Nam là đối tác hợp tác kinh tế hàng đầu trong Chính sách hướng Nam mới và là một trong những đối tác kinh tế lớn nhất của Hàn Quốc tại khu vực ASEAN. Không chỉ có các doanh nghiệp lớn, tập đoàn đang từng bước xây dựng các chuỗi cung ứng chiến lược tại Việt Nam mà các doanh nghiệp nhỏ và vừa của Hàn Quốc cũng tăng cường xúc tiến đầu tư tại Việt Nam. 

Nỗ lực kết nối Công nghệ – Đổi mới sáng tạo

“Công nghệ” & “Đổi mới sáng tạo” là những lĩnh vực có tiềm năng vô tận, và là chìa khóa để mọi quốc gia bước vào kỷ nguyên phát triển nhanh và bền vững. Đặc biệt, đây cũng là lĩnh vực để hai quốc gia có thể phát huy tiềm năng, khai thác hiệu quả tiềm lực và nguồn lực từ mỗi bên để phát triển những giá trị rõ rệt cho nền kinh tế – thương mại cũng như thị trường lao động – xã hội thêm tính cạnh tranh.

Khởi sắc sự nghiệp IT tại các công ty Công nghệ Hàn Quốc ngay tại Việt Nam

Trong khuôn khổ hợp tác lần này, KICC HCMC cùng TopDev hứa hẹn mang đến những giá trị cho tổ chức/ doanh nghiệp:

  • Hỗ trợ, hợp tác và thúc đẩy tuyển dụng việc làm công nghệ thông tin cho các công ty IT Hàn Quốc
  • Quảng bá hình ảnh, sản phẩm/ dịch vụ và thương hiệu tuyển dụng của các công ty IT Hàn Quốc đến với Cộng đồng Lập trình viên Việt Nam
  • Hỗ trợ khách hàng tiềm năng của nhau cùng tiếp cận thị trường địa phương, tìm kiếm đối tác, khách hàng tiềm năng và mở rộng kinh doanh tại Việt Nam.

Cơ hội đầu tư tài năng Công nghệ vào các công ty IT Hàn Quốc dành cho các Lập trình viên: 

  • Trực tiếp tham gia các dự án công nghệ sử dụng nền tảng hiện đại, tiên tiến từ nước ngoài;
  • Được tạo điều kiện để phát triển bằng các công tác giáo dục và bồi dưỡng nâng cao năng lực chuyên môn và kỹ năng thường xuyên
  • Môi trường làm việc quốc tế, chuyên nghiệp tại các doanh nghiệp hàng đầu của Hàn Quốc;
  • Mức lương xứng đáng, phù hợp với kinh nghiệm và vị trí;
  • Tiếp cận nền tảng công nghệ hiện đại, sản phẩm lớn và nhiều dự án mang đầy tính sáng tạo, thử thách
  • Cơ hội nâng cao trình độ qua các chuyến công tác onsite tại Hàn Quốc, training sử dụng các công nghệ….

Đại diện từ TopDev cũng cho biết  “Những năm gần đây, Việt Nam là mảnh đất màu mỡ với các doanh nghiệp Hàn Quốc, chúng ta đã chứng kiến rất nhiều phi vụ đầu tư từ quốc gia này vào thị trường Việt. Qua lần hợp tác này, nguồn nhân lực trẻ từ Việt Nam cũng sẽ có nhiều sự lựa chọn hơn. Với sự hỗ trợ từ TopDev, phía các doanh nghiệp sẽ rút ngắn thời gian tìm nhân tài, mà song song với đó, lập trình viên Việt Nam cũng sẽ được trải nghiệm cơ hội nghề nghiệp tại doanh nghiệp công nghệ Hàn Quốc.

Thông tin chi tiết về dự án vui lòng truy cập tại đây


Về KICC HCMC và NIPA:

Được thành lập vào ngày 23 tháng 5 năm 2019, KICC HCMC (KICC Hồ Chí Minh) là văn phòng thứ 6 trên toàn cầu và thứ 2 tại Việt Nam. KICC là văn phòng quốc tế trực thuộc Bộ Khoa học – Công nghệ Thông tin Hàn Quốc (MSIT) và Cơ quan Xúc tiến Công nghệ Thông tin – Truyền thông (NIPA) với mục đích giúp đỡ việc kinh doanh quốc tế của những công ty về Công nghệ Thông tin (CNTT) của Hàn Quốc. KICC có 06 văn phòng ở Thung lũng Silicon (Mỹ), Tokyo (Nhật), Bắc Kinh (Trung Quốc), Singapore, Hà Nội (Việt Nam) và Hồ Chí Minh (Việt Nam).

NIPA là tổ chức phi lợi nhuận từ Chính phủ Hàn Quốc và là thành viên của Bộ Khoa học – Công nghệ Thông tin Hàn Quốc, chịu trách nhiệm trong việc hỗ trợ các công ty và các chuyên gia CNTT. NIPA hiện dẫn đầu trong kiến thức về cơ sở hạ tầng kinh tế xã hội và phát triển kinh tế quốc gia bằng việc xúc tiến khả năng cạnh tranh của toàn ngành công nghiệp thông qua sự tiến bộ kỹ thuật CNTT và công nghiệp.

Thông tin liên hệ:

  • Hotline: 84 28 35208135 (Vietnamese) | 84 28 35208136 (Korean)
  • E-mail: HCMC@nipa.kr
  • Địa chỉ: 135 Hai Bà Trưng, Phường Bến Nghé, Quận 1, Thành phố Hồ Chí Minh

Về TopDev – nền tảng tuyển dụng IT

Với hơn 300.000 profile lập trình viên đồng thời sở hữu Cộng đồng Lập trình viên lớn nhất Việt Nam, TopDev hiện là một trong những nền tảng tuyển dụng chuyên về IT hàng đầu tại Việt Nam.  Ngoài ra, TopDev là một trong những đơn vị tiên phong ở lĩnh vực IT tại Việt Nam, giúp xây dựng và phát triển thương hiệu tuyển dụng – Employer Brand cho hàng trăm công ty công nghệ trong và ngoài nước. Đây còn là đơn vị chuyên khảo sát, phân tích và phát hành các báo cáo quý, năm về thị trường và nhân lực IT tại Việt Nam. (Báo cáo thị trường IT tại đây).

Swift – ngôn ngữ lập trình hoàn hảo

Swift – ngôn ngữ lập trình hoàn hảo

Bài viết được sự cho phép của smartjob.vn

Trong sự kiện quan trọng WWDC năm 2014, một ngôn ngữ lập trình hoàn toàn mới được ra đời, đó là Swift.

Swift hứa hẹn sẽ là ngôn ngữ lập trình góp phần quan trong trong trải nghiệm sử dụng sản phẩm di động.

Sau khi ra mắt iPhone vào năm 2007, Steve Jobs đã khiến giới công nghệ công nhận rằng đây không phải là sự kiện để Apple ra mắt các sản phẩm phần cứng, mà là sự kiện để các lập trình viên có thể học hỏi về những “vũ khí” mới của họ trong cuộc chinh phục cộng đồng người dùng iOS và Mac OX S.

Ngôn ngữ lập trình Swift là một trong những sản phẩm lớn nhất mà Apple muốn giới thiệu đến các fan nhà Táo. Nó có thể giúp quá trình phát triển ứng dụng trở nên nhanh và dễ dàng hơn nhằm tạo ra những sản phẩm di động tốt nhất đến người sử dụng. Hay nói cách khác Swift được thiết kế để đáp ứng tất cả nhu cầu của lập trình viên.

Hãy cùng chúng tôi tìm hiểu để thấy được tầm quan trọng và ý nghĩa sâu xa mà ngôn ngữ lập trình mới như Swift có thể mang lại.

Xem thêm Việc làm swift hấp dẫn trên TopDev

1. Swift là gì?

Swift là một ngôn ngữ lập trình hướng đối tượng. Sự ra đời của Swift có thể giúp các lập trình viên dễ dàng tiếp cận bởi nó sử dụng mã nguồn mở.

2. Swift là ngôn ngữ lập trình bậc cao

Với các ngôn ngữ lập trình bậc thấp, bạn sẽ phải mô tả tất cả các hành vi độc lập cần thiết để thực hiện toàn bộ tác vụ. Thậm chí, nếu bạn quên không ra lệnh bằng tay thì máy vi tính có thể gặp lỗi khi thực hiện tác vụ. Thay vì thực hiện từng dòng lệnh từ người lập trình viên, máy tính sẽ nhận một câu lệnh “bậc cao” từ coder và tự thực hiện dòng lệnh này. Swift là ngôn ngữ có cấu trúc bậc cao có nhiều đặc điểm nổi trội của các ngôn ngữ lập trình tân tiến hiện nay: đơn giản, chính xác, không thừa lexic hay operator.

Khi C và Objective-C đã có tuổi đời cao thì Apple cần phải thay đổi ngôn ngữ mới nhanh hơn, vẫn là nền tảng xây dựng nên iOS và Mac OS thì Swift là ngôn ngữ lập trình hoàn hảo nhất.

  Các ưu nhược điểm của Swift so với Objective C
  Giới thiệu Scene và Segue trong Swift

3. Swift- ngôn ngữ lập trình hoàn hảo

Không ngoa khi nói rằng Swift là ngôn ngữ hoàn hảo. Nó mang tất cả các điểm mạnh của cả 2 loại ngôn ngữ script và compile. Và các tính năng dưới đây sẽ chứng minh điều đó:
Các dòng code của Swift ngắn và dễ đọc.. giúp đẩy nhanh quá trình phát triển ứng dụng và tăng hiệu quả cho quá trình bảo trì trong tương lai.

Hoạt động tương tự Objective C đơn giản với các lớp đối tượng được đơn giản hóa, và các dòng mã được sắp xếp hợp lý.

Swift tạo ra các ứng dụng có sức ép phần cứng thấp hơn Objective-C, người dùng sẽ được trải nghiệm game ấn tượng hơn trên các thiết bị iOS.

Lập trình viên Swift có thể dành nhiều thời gian để thực hiện các bài test ở mức độ tích hợp cao hơn thay vì tập trung kiểm tra, thử nghiệm các tính năng nhỏ lẻ.

X Code runtime được thực hiện trong thời gian thực cho Swift ngoài sự đơn giản và phương thức sắp xếp hợp lý hơn cho việc sáng tạo ứng dụng.

4. Nhược điểm của Swift

Ngoài các ưu điểm trên thì Swift có hạn chế lớn nhất là tuổi đời non nớt, các nhà phát triển ứng dụng di động cần phải có thời gian dài để làm chủ được ngôn ngữ này. Cộng đồng coder cần thời gian trải nghiệm và đánh giá.

Tuy nhiên đây không hẳn là một mối lo ngại thực sự cho Apple và người dùng. Trải qua giai đoạn này, Swift sẽ khiến các ứng dụng iOS và Mac lên một tầm cao mới.

Hi vọng bài viết này sẽ giúp các bạn hiểu thêm về ngôn ngữ lập trình mới trước khi quyết định có nên tìm hiểu sâu hay không. Chúc các bạn thành công và đừng quên truy cập website của chúng tôi thường xuyên để biết thêm thông tin nhé.

Bài viết gốc được đăng tải tại smartjob.vn

Có thể bạn quan tâm:

Xem thêm Việc làm swift hấp dẫn trên TopDev

Search cha con trong wordpress tưởng không dễ mà dễ không tưởng

Search cha con trong wordpress tưởng không dễ mà dễ không tưởng

Bài viết được sự cho phép của tác giả Võ Quang Huy

Tiếp tục seri về search trong wordpress hôm nay mình sẽ hướng dẫn cho bạn một chức năng mới và được rất nhiều người yêu cầu đó là bộ search cha con trong wordpress.

Phong cách search này rất được nhiều người sử dụng để làm trong các site bất động sản ví dụ như chọn Tỉnh thành phố => show các huyện của tỉnh đó. Hay là chọn huyện => show ra xã phường…

  10 trang web hàng đầu để tìm hiểu WordPress

Chuẩn bị dữ liệu và phân tích bài toán

Mình sẽ sử dụng taxonomy để tạo ra danh mục gồm các quận huyện ở Đà Nẵng, trong quận huyện đó sẽ có các xã và phường nhé. Để biết cách tạo taxonomy các bạn xem vài viết: Tạo taxonomy trong wordpress

Search cha con trong wordpress tưởng không dễ mà dễ không tưởng

Mình sẽ tạo là một taxomony là khu-vuc có các Quận/Huyện trong Quận/Huyện thì là có các Xã/Phường. Chúng ta sẽ làm chức năng chọ quận huyện sẽ show ra xã phường 😀

Tạo form search cha con trong wordpress

Đây sẽ là pha xử lý đi vào lòng người kk

Tạo form search html

Các bạn dáng đoạn code html sau vào khu vực mà các bạn muốn hiện thì form search nha. Đây chỉ là code html thô chưa được css nên show ra ngoài giao diện sẽ không đẹp các bạn có thể css thêm để nó oke hơn nhé.

Form seach của chúng ta sẽ gôm các thành phần sau:

  • Dòng 2 => chỉ search với post type là bất động sản (value=”bat-dong-san”)
  • Dòng 3 đến 18 sử dụng thẻ select để cho phép chọn các Quận/Huyện (Chú ý trường‘parent’ => 0 đây là điều kiện để xác định chỉ lấy các quận huyện)
  • Dòng 17 đến dòng 21 dùng select để chọn Xã/Phường khi user chọn Quận huyện thì trường này mới show giá trị của xã phường tương ứng nên ngay lúc đầu sẽ không có giá trị ở trường này
  • Còn lại là thẻ input để nhập từ khóa và button thực hiển tìm kiếm

Làm chức năng chọn thằng cha show thằng con 😀

Các bạn copy đoạn code sau vào vị trí ngang hàng với form search trên nha. Nhớ là ngang hàng với  form search trên nha. Nhớ nha… Nhớ đó…

Sau khi chèn đoạn code này vào các bạn view-source sẽ thấy đoạn html được sinh ra như sau:

Search cha con trong wordpress

Mình đã copy nó vào sublime text để các bạn dễ nhìn.

Chúng ta sẽ được 1 list các thẻ div có class là datakhuvuc, phía trong nó chứa dữ liệu option value đây là các giá trị con của từng thằng cha.  Việc tiếp theo là viết 1 đoạn jquery khi chọn thằng cha trong form thì dựa vào slug mà lấy dữ liệu tương ứng ở đây để đẩy vào thẻ select Xã/Phường.

Chúng ta có đoạn jquery xử lý vấn đề này như sau: Các bạn chèn đoạn js vào footer.php, trên thẻ body đóng nha (</body>)

Bạn nào đã khai báo jquery rồi thì bỏ dòng đầu tiên nha.

Bây giờ chúng ta đã có thể chọn thằng cha và hiển thị thằng con rồi đó, các bạn có thê ra ngoài giao diện và test thử nha.

Xử lý dữ liệu chức năng search cha con trong wordpress

Sau khi hoàn thành phần front end chúng ta bắt tày vào xử lý phần backend nhé. Nếu các bạn có xem các bài trước thì biết trong wordpress file để hiển thị kết quả search là file search.php vì vậy chúng ta sẽ xử lý backend ở đây

Sau khi submit form thì website sẽ có đường dẫn như sau: domain.com/?post_type=bat-dong-san&quan-huyen=hai-chau&xa-phuong=binh-hien&s=nhà+đẹp

Chúng ta sử dụng phương thức GET để lấy dữ liệu và xử lý trong vòng lặp get post nha. Cắc bạn chèn đoạn code sau vào file search.php

Giải thích code: 

  • Dòng 2 lấy post type nếu không truyền thì mặc định là post
  • Dòng 3 lấy quận huyện nếu không truyền sẽ lấy giá trị rỗng tương đương với seach tất cả các quận huyện
  • Dòng 4 lấy khu vực đây là dữ liệu truyền vào để get bất động sản chính xác. Nếu không chọn xã phường thì mặc định nó sẽ lấy quận huyện, còn nếu chọn xã phương thì nó sẽ bỏ qua quận huyện và cho kết quả search chỉ ở xã phường đó thôi
  • Dòng 5 lấy từ khóa cần tìm kiếm
  • Từ dòng 13 đến hết là đoạn xử lý query get post

Tổng kết:

Như vậy hôm nay mình đã hướng dẫn cho các bạn cách để search cha con trong wordpress. Đây là một chức năng khá cần thiết cho các site bất động sản…

Nhưng nếu các bạn để ý sẽ thấy làm cách này chỉ thích hợp với nhưng dữ liệu vừa và nhỏ, những dữ liệu lớn và phần nhiều cấp thì dễ bị TOANG :)), vì thế mình sẽ cho ra một bài về chủ đề này nhưng sẽ dùng ajax trong wordpress để xử lý.

Nhớ like page và theo dõi blog huykira nhé. Ghé qua học wordpress nữa nha!

Chào cả nhà!

Bài viết gốc được đăng tải tại huykira.net

Có thể bạn quan tâm:

Xem thêm Tuyển dụng WordPress hấp dẫn trên TopDev

Các loại Design patterns

Các loại Design patterns

Bài viết được sự cho phép của tác giả Tino Phạm

Design patterns cung cấp các giải pháp cho những vấn đề thường gặp trong quá trình thiết kế phần mềm. Khi nói đến Design patterns nghĩa là chúng ta đang nói đến những thiết kế có thể tái sử dụng và tương tác của các đối tượng.

  Design pattern là gì? Tại sao nên sử dụng Design pattern?
  10 kênh Youtube học lập trình không thể bỏ qua dành cho Junior Web Developer / Designer

Các loại Design patterns

Có thể chia thành 4 nhóm patterns tùy  thuộc vào tính chất của vấn đề mà chúng muốn giải quyết

  1. Gang of Four Patterns
  2. Enterprise Patterns
  3. SOA and Messaging Patterns
  4. Model-View Patterns

Ưu điểm của Design Patterns

  1. Cung cấp các giải pháp cho các vấn đề phổ biến xảy ra trong thiết kế phần mềm.
  2. Cung cấp nền tảng chung cho các nhà phát triển. Có nghĩa là nhà phát triển có thể thực hiện những patterns này bằng bất kỳ ngôn ngữ nào.
  3. Cung cấp một thuật ngữ chuẩn và đặc trưng cho từng kịch bản cụ thể.

Bài viết gốc được đăng tải tại thangphampt.wordpress.com

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Golang toàn tập – Goroutines và Channels

Golang toàn tập – Goroutines và Channels

Bài viết được sự cho phép của tác giả Kiên Nguyễn

Được biết tới là một trong những ngôn ngữ hỗ trợ mạnh mẽ concurrency, Golang Goroutines và Channels thật ra có ý nghĩa như thế nào?. Có sự khác biệt nào giữa Golang Concurrency và Java Concurrency hay không?.

  Channel trong Golang là gì? So sánh Callback function và mutex lock với channel
  Golang là gì và tại sao bạn nên học Go?

Trước khi bắt đầu tìm hiểu sâu hơn, hãy cùng bắt đầu với hai khái niệm cơ bản nhất, Routines và Channels.

goroutines và channelsA hero – Goroutines with channel

Ngoài ra, golang cũng hỗ trợ functional programming. Có thể tìm hiểu qua về functional programming qua bài viết này.

Ok, bắt đầu ngay thôi!

1. Concurrency

Trước khi bắt đầu tìm hiểu Routines và Channels, hãy nắm bắt khái niệm về Concurrency (Tính toán đồng thời).

Making process on more than one task simultaneously is known as concurrency

Việc thực hiện nhiều hơn một task trên một process được biết tới là concurrency (đồng thời, cùng lúc)

Đã hiểu về Concurrency, tuy nhiên nhớ take note luôn là nó khác biệt hoàn toàn với Parallel. Thực hiện mọi việc đồng thời, nhưng có thể chỉ ở trên cùng một core, một process của CPU.

Parallel lại tận dụng đa lõi, thực hiện mọi việc đồng thời, nhưng trên nhiều tiến trình.

Sự khác biệt giữa concurrency và parallelNguồn ảnh / Source: ednsquare.com

2. Goroutines

Muốn một function có thể chạy đồng thời với function tất nhiên phải có khai báo. Không khai báo thì Go không thể biết được khi nào function đó được chạy Concurrency.

A goroutine is a function that is capable of running concurrently with other functions

Goroutine là function có thể chạy đồng thời với các function khác

Để khai báo một function sử dụng Routines, ta dùng từ khóa go.

// Function go f(0) được thực hiện đồng thời
package main
import "fmt"
func f(n int) { 
for i := 0; i < 10; i++ { 
fmt.Println(n, ":", i) 
} 
}
func main() { 
go f(0) 
var input string 
fmt.Scanln(&input) 
}

Đoạn code vừa viết phía trên có tới hai Goroutines. Cái đầu tiên tất nhiên là function main, tự bản thân nó đã là một Goroutines. Cái thứ hai sẽ được khởi tạo khi ta gọi function go f(0).

Ở các chương trình Java thông thường (hoặc Golang mà không có sử dụng từ khóa go). Dòng code số 11 sẽ được thực thi sau khi function f(0) hoàn tất. Nhưng với Routines, các dòng code từ dòng 11 trở đi vẫn được thực thi cùng lúc với function f (0)

// Chỉ với từ khóa go, đoạn code dưới đây tạo ra tới 10 Goroutines
func main() { 
for i := 0; i < 10; i++ { 
go f(i) 
} 
var input string 
fmt.Scanln(&input) 
}

Chốt hạ “The goroutines run simultaneously. – Goroutines chạy đồng thời”

3. Channels

Chỉ với từ khóa go, rõ ràng mà nói, tạo nhiều Goroutines không hề khó. Nhưng nếu các Goroutines muốn giao tiếp với nhau. Routines này chạy đồng bộ chờ kết quả routines khác?

Đấy, lúc đấy có ngay Channels.

Channels provide a way for two goroutines to communicate with each other and synchronize their execution

Channels cung cấp cách thức cho phép các goroutines giao tiếp với nhau và thực hiện đồng bộ hóa

Đối với channel, chiều gửi dữ liệu tuần theo chiều của mũi tên.

// Chỉ cần chú ý variable bên phải là bên gửi.
ch <- v // Gửi giá trị v tới channels ch
v := <-ch // Nhận giá trị từ channel ch, gán cho v.

Cũng giống như maps và slices, channels được khởi tạo ngay sao khi khai báo từ khóa chan.

ch := make(chan int)

Mặc định, việc gửi hay nhận ở goroutines này sẽ bị block cho tới khi goroutines khác thực hiện xong. Ví dụ dưới đây thực hiện tính toán đồng thời trên mảng s, cả hai routines sẽ thực hiện xong và cho kết quả cuối cùng.

package main

import "fmt"

func sum(s []int, c chan int) {
sum := 0
sum += s[0]
c <- sum // Gán tổng c cho sum
}

func main() {
s := []int{7, 2, 8, -9, 4, 0}

c := make(chan int)

// Mảng s ở routines này là [-9, 4, 0]
go sum(s[:len(s)/2], c)
// Mảng s ở routines này là [7, 2, 8, -9]
go sum(s[len(s)/2:], c)

x, y := <-c, <-c // Nhận giá trị từ c

fmt.Println(x, y, x+y)
}

Channels c sau khi chạy sẽ in ra kết quả là:

// Thực hiện tuần tự sum 1 cho tới sum 2
-9 7 -2

Program exited.

Xong, bài viết này cho thấy một cái nhìn tổng quan nhất về Concurrency trong Golang. Nếu có bất cứ câu hỏi hoặc phản hồi gì, vui lòng comment bên dưới bài viết.

4. Tham khảo

Cảm ơn vì đã đọc bài. Happy coding!

Bài viết gốc được đăng tải tại kieblog.vn

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Clean code – Tất cả từ một cái tên

Clean code – Tất cả từ một cái tên

Bài viết được sự cho phép của tác giả Kiên Nguyễn

Thông thường những bạn mới ra trường, thường những năm đầu code rầm rầm. Nếu được hướng dẫn bởi Senior thì còn được chỉ dạy về Clean code. Còn lại thì đa phần chưa quan tâm gì mấy tới clean code, hay tới design pattern, cứ code chạy là được.

Làm khoảng 1,2 năm thì bắt đầu có ý thức hơn, tìm hiểu về clean code để áp dụng. Nhưng đôi khi lại nghĩ clean code là cái gì đó phức tạp với các đoạn code dài loằng ngoằngthuật toán phức tạp.

  Viết code sạch (Clean code) được gì? Phần 1
  Clean Architecture: Đứng trên vai những gã khổng lồ

Thực tế không phải như vậy, clean ở đây đôi khi chỉ là cái cách đặt tên class, tên hàm, tên biến sao cho dễ hiểu. Hãy cùng Kieblog tìm hiểu Clean code từ những điều đơn giản nhất nha.

Clean code – Tất cả từ một cái tên
Luôn chú ý viết source sao cho người sau đọc dễ hiểu, không càm ràm. Đặc biệt là không chửi thề!

1. Clean code từ cái tên

Cùng xem một vài ví dụ dưới đây. Hãy tượng tượng bạn là leader và được giao review code. Các code nào sẽ được bạn đánh giá cao?. Cái code nào sẽ tiện để maintainance sau này?

// Khai báo biến tổng số ngày trong tháng
int d;
int totalDaysInMonth;
// Định nghĩa 2 biến start và end
class StartTimeEndTime {
private Date startmdhms;
private Date endmdhms;
}
và 
class StartTimeEndTime {
private Date startTimeStamp;
private Date endTimeStamp;
}

2. Don’t be cute – dễ thương làm gì

Nguyên tắc đặt tên cho bất cứ thứ gì khi lập trình tất nhiên là phải rõ nghĩ. Tuy nhiên, không phải rõ nghĩa nên viết thêm cho loằng ngoằng rắc rối cả ra.

Cuteness in code often appears in the form of colloquialisms or slang. For example, don’t use the name whack() to mean kill()Don’t tell little culture-dependent jokes like eatMyShorts() to mean abort().

Viết code cute sử dụng những từ như tiếng lóng hoặc không thông dụng gây ra hiểu lầm. Ví dụ, đừng sử dụng whack() để ám chỉ kill() process hay gì đó. Đừng sử dụng eatMyShorts() để ám chỉ abort()

Việc đặt tên tốt nhất theo quy chuẩn chung, để các lập trình viên khác có thể hiểu được. Môi trường làm việc bây giờ quốc tế hóa.

Source code commit lên git có thể cho nhiều người khác tham khảo nên chú ý phần Clean code.

// Định nghĩa 2 biến start và end
class StartTimeEndTime {
private Date startmdhms;
private Date endmdhms;
}
và 
class StartTimeEndTime {
private Date startTimeStamp;
private Date endTimeStamp;
}

Đừng sử dụng từ địa phương, cũng đừng sử dụng những từ ngữ không quá phổ thông.

3. Don’t pun – đừng chơi chữ

Chơi chữ ở đây không mang nặng tính chất như sử dụng nghĩa bóng, cũng không phải nói xiên xẹo, móc mỉa một số người.

Chơi chữ ở đây chỉ đơn giản được hiểu là:

Avoid using the same word for two purposes. Using the same term for two different ideas is essentially a pun.

Sử dụng cùng một từ cho hai mục đích khác nhau. Sử dụng cùng một thuật ngữ cho hai ý tưởng khác nhau thì gọi là chơi chữ.

Ví dụ dễ hiểu nhất với Pun – Chơi chữ là method add(). Giả sử ta viết method add để thêm một số phần tử vào array list đã có sẵn. Khi nào method này trở thành chơi chữ?

Cùng là method add nhưng lại insert một record mới vào database. Cùng method add nhưng lại dùng để thêm item vào một list (như thế không gọi là Clean code, vì sẽ khiến người đọc confuse)

// Insert thường dùng cho database
private void insert(RecordItem record) {
}

// Chú ý rõ nghĩa khi dùng, append dùng cho list, ...
private void append(String item) {
}

4. Class names và method names

Một số bạn bắt đầu quan tâm tới Clean code thường nghĩ về những đoạn code phức tạp, giải thuật phức tạp. Nhưng thực tế không phải vậy Clean code đôi khi chỉ đơn giản bắt nguồn từ một cái tên class, một tên biến.

Classes and objects should have noun or noun phrase names like Customer, WikiPage, Account, and AddressParser.

Classes và object nên là danh từ hoặc cụm danh từ. Ví dụ như Customer, WikiPage, Account và AddressParser

Clean code – Tất cả từ một cái tên
Đối với kĩ sư phần mềm, đôi khi nghĩ một cái tên mới là công việc chiếm nhiều thời gian nhất. Nguồn ảnh/ Source: Twitter

Một lưu ý khác là class name không bao giờ nên là động từ. Không ai viết class Flight, chỉ có interface Flightable, thay vào đó người ta viết class Bird.

Ngược lại với classes thì method lại nên là động từ hoặc cụm động từ.

Methods should have verb or verb phrase names like postPayment, deletePage, or save.

Method nên có động từ hoặc cụm động từ như postPayment, deletePage hoặc save.

Đối với các method thực hiện kiểm tra các điều kiện boolean, nên bắt đầu bằng is. Như ví dụ function isPosted dưới đây.

string name = employee.getName(); 
customer.setName("mike"); 
if (paycheck.isPosted())...

5. Tham khảo

Bài viết gốc được đăng tải tại kieblog.vn

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Top 10 ngôn ngữ lập trình giúp bạn kiếm bội tiền (Phần 1)

Top 10 ngôn ngữ lập trình giúp bạn kiếm bội tiền (Phần 1)

Bài viết được sự cho phép của smartjob.vn

Hiện nay, sự phát triển chóng mặt của công nghệ thông tin đã cho ra nhiều sản phẩm công nghệ khác nhau, từ những ứng dụng di động cho đến những website thương mại điện tử. Nhà đầu tư mạo hiểm  Marc Andreessen đã từng tuyên bố “Phần mềm đang nuốt dần thế giới”. Vậy ai sẽ là người viết ra các phần mềm?  Đó chính là các lập trình viên – những người luôn được các nhà tuyển dụng “trải thảm đỏ” săn đón. Ngôn ngữ lập trình có rất nhiều khiến bạn hoang mang nên học cái gì, bỏ cái gì? Dưới đây mình xin đưa ra một vài ngôn ngữ lập trình nổi trội hơn cả để giúp bạn dễ dàng định hướng trong việc học và làm về sau.

  10 lý do cho thấy tại sao bạn nên theo học ngôn ngữ lập trình Java
  4 ngôn ngữ phát triển game indie phổ biến

1. Python

Python – tên ngôn ngữ lập trình được đặt theo tên của nhóm hài kịch nổi tiếng, với cú pháp đơn giản và thanh lịch. Python luôn nằm trong top 10 ngôn ngữ lập trình phổ biến nhất ở tất cả các bảng xếp hạng lớn (TIOBE, RedMonk, PYPL), vậy tại sao Python được đánh giá cao như thế?

– Python là một trong những ngôn ngữ đáng tin cậy nhất hiện nay.

– Dễ dàng sử dụng vì có số lượng từ khóa ít, cấu trúc đơn gian và cú pháp được định nghĩa rõ ràng. Tất cả các điều này là Python thực sự trở thành một ngôn ngữ thân thiện với lập trình viên.

– Code của Python khá dễ đọc vì nó được định nghĩa khá rõ ràng và rành mạch.

Top 10 ngôn ngữ lập trình giúp bạn kiếm bội tiền (Phần 1)

Python là ngôn ngữ lập trình xây dựng các website nổi tiếng như YouTube, Google,…

– Python là một ngôn ngữ thông dịch. Trình thông dịch thực thi code theo từng dòng (và bạn không cần phải biên dịch ra file chạy), điều này giúp cho quá trình debug trở nên dễ dàng hơn và đây cũng là yếu tố khá quan trọng giúp Python thu hút được nhiều người học và trở nên khá phổ biến.

– Python có một thư viện chuẩn khá rộng lớn. Thư viện này dễ dàng tương thích và tích hợp với UNIX, Windows, và Macintosh.

Những website nổi tiếng được xây dựng bằng Python: YouTube, DropBox, Google, Yahoo Maps, Reddit, Bitly

Những công ty “trải thảm đỏ, đón nhân tài” Python: VNPT Software, Tập đoàn Zinna, Peacesoft group, Vega Corporation, Hanel Software,…

Tuyển dụng lập trình Python lương cao

2. Java

“Viết một lần, chạy mọi nơi” – câu khẩu hiệu nổi tiếng cộp mác ngôn ngữ lập trình Java đã cho thấy sự phổ biến của nó trong giới lập trình viên. Một số đặc điểm chính của Java “được lòng” lập trình viên.

– Tất cả các chương trình viết bằng Java đều chạy trong một máy ảo Java gọi và Java Virtual Machine (JVM)

– Độc lập nền: Nền tảng Java bao gồm 2 phần: JRE và API. Java code có thể chạy trên rất nhiều nền tảng như Windows, Linux, Sun Solaris, Mac/OS, …

– Lập trình hướng đối tượng giúp cho việc phát triển phần và bảo trì (năng cấp, sửa chữa) trở nên đơn giản theo một số luật nhất định.

– Công nghệ Java phát triển mạnh mẽ nhờ vào “đại gia Sun Microsystem” cung cấp nhiều công cụ, thư viện lập trình phong phú hỗ trợ cho việc phát triển nhiều loại hình ứng dụng khác nhau cụ thể như: J2SE (hỗ trợ phát triển những ứng dụng đơn, ứng dụng client-server), J2EE (hỗ trợ phát triển các ứng dụng thương mại), J2ME (hỗ trợ phát triển các ứng dụng trên các thiết bị di động, không dây,…).

Ứng dụng được xây dựng trên Java: Trò chơi, ứng dụng Android và ATM

Lập trình viên Java luôn được chào đón tại: VCCorp, FPT, VNPT, Công Ty Cổ Phần Công Nghệ Fuji, Công ty cổ phần truyền số liệu Việt Nam (DCV),…

3. PHP

Theo W3Techs, PHP được sử dụng trong 82% website trong thế giới Internet; đứng sau Java trong danh sách những ngôn ngữ lập trình phổ biến nhất, và nó đứng thứ 6 trên danh sách chỉ số cạnh tranh Tiobe. Dưới đây là lý do tại sao mà những người ủng hộ yêu mến PHP.

– Phổ biến vì nó được cài đặt trên một lượng lớn các máy chủ và dễ học vì có rất nhiều nguồn tài liệu trực tuyến.

– Đang tiếp tục phát triển: các tính năng hiện đại như closures và namespaces, cũng như hiệu suất cao và các framework mạnh mẽ. Trong phiên bản 7, PHP đã sử dụng Zend Engine hoàn toàn mới với tốc độ nhanh gấp hai lần,…

Top 10 ngôn ngữ lập trình giúp bạn kiếm bội tiền (Phần 1)

PHP đang là ngôn ngữ lập trình đứng thứ 6 trên danh sách chỉ số cạnh tranh Tiobe

Các website đang sử dụng PHP: Facebook, Twitter, Apple, Wikipedia, Blogs sites, Flickr

Lập trình viên Java luôn được chào đón tại: VCCorp, FPT, Công Ty TNHH Giải Pháp Brainos, Công Ty Cổ Phần Công Nghệ Fuji, Công ty cổ phần truyền số liệu Việt Nam (DCV),…

PHP jobs for Developer

4. Ruby

Trong danh sách những ngôn ngữ lập trình phổ biến nhất TIOBE tính đến hết tháng 1/2016 thì Ruby hiện đang là ngôn ngữ đứng thứ 10 trong bảng xếp hạng. Được phát triển bởi nhà khoa học máy tính người Nhật Bản -Yukihiro Matsumoto vào những năm 90s của thế kỷ trước, Ruby đã và đang trở thành một trong những ngôn ngữ lập trình tuổi đời còn ít nhưng lại được sử dụng rộng rãi. Nó cũng là một trong những ngôn ngữ tốt nhất để bắt đầu khi bạn mới học lập trình.

– Ruby là một trong những ngôn ngữ dễ học nhất

– Giống với Python, code của Ruby rất dễ đọc và viết mà không cần thiết phải học một số lượng lớn những dòng lệnh và những “từ điển” chuyên biệt khi mới bắt đầu.

– Ruby là một bước đệm để học Ruby on Rails – một framework để tạo ra các ứng dụng web.

Website dùng Ruby: Scribd, Yammer, Shopify, Github, Groupon

Những công ty có nhu cầu tuyển dụng lập trình viên Ruby, Ruby on rails: FPT Software, SoftTel, Tinhvan Group,…

5. Perl

Perl là là một ngôn ngữ lập trình được phát triển bởi một kỹ sư của NASA trong những năm cuối của thập niên 80. Đây là ngôn ngữ thông dụng trong lĩnh vực quản trị hệ thống và xử lí các trang Web do có các ưu điểm sau:

– Có các thao tác quản lí tập tin, xử lí thông tin thuận tiện

– Thao tác với chuỗi kí tự rất tốt

– Đã có một thư viện mã lệnh lớn do cộng đồng sử dụng Perl đóng góp (CPAN).

– Perl có cú pháp giống C và Shell, do đó những người đã có kinh nghiệm với C sẽ thấy Perl rất dễ học.

– Perl có thể chạy trên các môi trường khác nhau, như: Unix, Windows NT, Window 95/Window 98,..

Những công ty có nhu cầu tuyển dụng lập trình viên Perl: Fabrica Vietnam, Seta International, FPT,…

Để củng cố thêm niềm tin của các bạn về những ngôn ngữ trên, Smartjob xin đưa ra bảng mức lương trung bình của các lập trình (tính theo USD) được cập nhật vào ngày 27/4/2016.

Top 10 ngôn ngữ lập trình giúp bạn kiếm bội tiền (Phần 1)

Bài viết gốc được đăng tải tại smartjob.vn

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Top 8 xu hướng phát triển ứng dụng Web trong tương lai

Top 8 xu hướng phát triển ứng dụng Web trong tương lai

Bài viết được sự cho phép của tác giả Tino Phạm

Những chủ đề mình chia sẽ trong bài viết này không phải là những công nghệ mới. Chúng đã xuất hiện và được sử dụng từ trước đến giờ và đang có dấu hiệu tăng lên nhanh trong những năm gần đây.

Tuyển dụng web developer lương cao

  10 Java Web Framework tốt nhất
  10 trang web hàng đầu để tìm hiểu WordPress

1. Progressive Web Apps (PWA)

Xuất hiện vào năm 2015 và theo Wikipedia thì: Progressive Web Apps là những ứng dụng web mà nó được tải lên và làm việc như những trang web hoặc websites thông thường, nhưng nó còn cung cấp cho người dùng các tính năng như: working offline (làm việc khi không có internet), push notifications (gửi và nhận thông báo) và truy cập phần cứng của thiết bị mà điều này thường chỉ có thể làm với native applications.

Một vài ví dụ về Progressive Web Apps hiện nay: Tinder, Ola, Trivago, 9GAG, Alibaba, Aliexpress, 5 Miles,….

PWA là một chuẩn web mà nó mang lại cho người dùng cảm giác như sử dụng một native mobile application. Và đặc biệt hơn là người dùng không cần phải tải về và cài đặt nó từ app-store hay play-store.

Đã có rất nhiều công ty lớn đi đầu trong việc xây dựng ứng dụng Progressive Web Apps và nó đã giúp họ tăng lượt truy cập cũng như lượng khách hàng đáng kể. Chính vì thế trong những năm tới đây các ứng dụng web PWA sẽ trở nên phổ biến.

Bạn có thể tìm hiểu rõ hơn về Progressive Web Apps tại đây

2. Push Notifications

Một trong những xu hướng phát triển web trong những năm gần đây đó là website notifications.

Push notification giúp website của bạn tương tác với người dùng nhiều hơn. Họ có thể nhận các thông báo từ website của bạn như: các chương trình khuyến mại, giảm giá, thông báo về sản phẩm mới,… Bạn có thể kéo người dùng về website của bạn nhiều hơn và thường xuyên hơn nhờ vào các thông báo.

Khi truy cập một website nào đó bạn sẽ nhìn thấy một yêu cầu từ trình duyệt web dạng thế này:

Top 8 xu hướng phát triển ứng dụng Web trong tương lai

Nếu người dùng cho web nhận thông báo từ facebook. Vậy thì từ lúc này bất cứ khi nào bạn bè của bạn có đăng status mới, có comment nào liên quan tới bạn, hay có ai nhắn tin cho bạn thì bạn sẽ nhận được thông báo ngay lập tức (thực tế thì trễ vài giây) mặc dù lúc đó bạn không hề mở facebook trên máy tính hay trên thiết bị di động.

Điều tuyệt vời là với các ứng dụng web PWA như đã nói ở trên thì Push Notification khá là hữu ít, nó giúp mang lại cảm giác cho người dùng giống như đang dùng native app mobile, họ không cần truy cập vào website mà vẫn có thể nhận được các thông báo từ website mà họ đã cho phép nhận thông báo trươc đó.

Top 8 xu hướng phát triển ứng dụng Web trong tương lai

demo Push Notification

3. Chatbots and Artificial Intelligence(AI)

Chatbot là một chương trình máy tính cho phép cuộc hội thoại dựa trên văn bản hoặc cuộc gọi. Chatbots thường được sử dụng để tạo ra một hộp thoại với khách hàng như một phương tiện cung cấp thông tin hoặc hỗ trợ khách hàng.

Hầu hết các chatbots đều được truy cập thông qua các trợ lý ảo như Amazon Alexa, thông qua các ứng dụng nhắn tin như Facebook Messenger hoặc thông qua các ứng dụng và trang web của các tổ chức riêng lẻ.

Vì hiệu quả của chúng, các chatbots đang tạo nên sự thúc đẩy cho các tổ chức đang phát triển các chiến lược dịch vụ khách hàng của họ.

Hãy tưởng tượng một ngày nào đó khi các AI Chatbots đủ thông minh để có thể giao tiếp và hướng dẫn khách hàng của họ một cách tự động và giống như một nhân viên chăm sóc khác hàng online. Với một chatbot, họ có thể truy cập nhanh đến các dịch vụ và thông tin mà khách hàng đang quan tâm.

Top 8 xu hướng phát triển ứng dụng Web trong tương lai
AI Chatbot

Chatbots vẫn còn rất nhiều về sự gia tăng phổ biến và sử dụng, và được dự kiến ​​sẽ là chủ đạo cho một hoặc hai năm nữa. Bởi vì điều này, bây giờ sẽ là thời gian tốt nhất để tận dụng công nghệ vừa chớm nở này. Khách hàng của bạn sẽ thực sự đánh giá cao mức tăng dịch vụ và dễ dàng truy cập thông tin.

4. Blockchain Technology

Nhắc tới Blockchain chắc hẳn nhiều anh em sẽ nghĩ đến ngay “Bitcoin”. Một sự bùn nổ trong năm 2018. Vào thời gian đó vào các group chat trên Telegram thì thường xuyên thấy: “go to the moon”, “hold to die” các kiểu. Cuối cùng thì “go to the hell”, móa đau thiệt chứ. Thôi thì “ai cũng có một mơ ước mộng tưởng để mà ôm ấp ủ”.

Top 8 xu hướng phát triển ứng dụng Web trong tương lai
nguồn quora.com

Công nghệ Blockchain mở ra một xu hướng mới cho các lĩnh vực như tài chính ngân hàng, logistics, điện tử viễn thông, kế toán kiểm toán…

Không chỉ thế Blockchain còn là nòng cốt của Internet vạn vật (IoT). Các thiết bị điện tử có thể giao tiếp một cách an toàn và minh bạch, những nỗ lực bất chính trong thế giới Internet sẽ không thực hiện được, và còn nhiều điều nữa…

Hiện nay có rất nhiều công ty và tập đoàn lớn đang xây dựng mạng lưới Blockchain cho riêng mình. Vì thế chúng ta sẽ sớm thấy điều này có thể tạo ra một làn sóng cho tương lai.

5. Single page sites

Theo truyền thống, các trang web được tạo ra với mỗi chủ đề có trang riêng của nó. Đối với nhiều trang web, điều này có ý nghĩa hoàn hảo vì nó cho phép nội dung được nhóm theo các khối logic. Tuy nhiên, theo thời gian và sự phát triển của các ứng dụng web người thấy rằng ngày càng có nhiều người truy cập web trên thiết bị di động hơn là trên máy tính.

Với sự gia tăng về duyệt web trên thiết bị di động này, nhiều trang web đang chuyển sang thiết kế trang đơn, cho phép người dùng di động dễ dàng cuộn qua nội dung.

Top 8 xu hướng phát triển ứng dụng Web trong tương lai
nguồn electricsilk

Thiết kế tối giản và thời gian tải nhanh là xu hướng sẽ không biến mất sớm. Bởi vì các single page tải rất nhanh trên thiết bị di động, chúng được các công cụ tìm kiếm ưu tiên trên các trang nhiều trang… và chúng thuận tiện cho khách hàng truy cập trang web.

6. Static websites

Đối với các trang web không cần nhiều chuông và còi, chẳng hạn như trang web chỉ trình bày thông tin thì việc quay trở lại thiết kế HTML cơ bản có thể là lựa chọn thông minh. Loại trang web này tải ở tốc độ cực nhanh.

Các nhà thiết kế ngày nay đang sử dụng các trình tạo trang web tĩnh để kiểm tra nhiều khái niệm khác nhau. Các trang web như Jekyll cho phép người dùng thử các thiết kế tĩnh.

7. Typography

Về cơ bản Typography là sự kết hợp khéo léo nghệ thuật giữa typefaces, point size, line length, leading (line spacing), letter-spacing (tracking). Nhằm đem lại cho người xem cảm giác dễ đọc nhất, nổi bật nội dung, và truyền tải được ý đồ của người thiết kế tới người đọc.

Thiết kế typography là xu hướng nghệ thuật khá phổ biến trong thời gian gần đây khi mà sự phát triển của các hoạt động Marketing Online, chiến dịch Marketing trực tuyến, các thiết kế, hình ảnh đẹp trở thành yếu tố đóng vai trò quan trọng , hình thức thể hiện mới mẻ cho các con chữ thông thường.

Trong bối cảnh đó, Typography chính là một giải pháp hoàn hảo để thể hiện, biến hóa các nội dung chất lượng thành các sản phẩm thương mại hóa có khả năng thu hút người đọc hơn, nhiều sức hút hơn và tất nhiên tăng tương tác hơn trong các hoạt động Marketing truyền thống.

Top 8 xu hướng phát triển ứng dụng Web trong tương lai
nguồn merehead.com

8. Cyber security

An ninh mạng (Cyber security) chủ yếu tập trung vào việc bảo vệ hệ thống, mạng và dữ liệu khỏi các cuộc tấn công trên mạng. Hiệu quả an ninh mạng làm giảm nguy cơ tấn công mạng và bảo vệ các tổ chức và cá nhân khỏi việc khai thác trái phép hệ thống, mạng và công nghệ.

Top 8 xu hướng phát triển ứng dụng Web trong tương lai
nguồn Quora

Hy vọng với những thông tin trên sẽ giúp những người yêu thích lập trình web như bạn bắt đầu chuẩn bị và lập ra kế hoạch để phát triển các ứng dụng web phù hợp với xu hướng trong tương lai.

Hãy cho biết ý kiến của bạn bằng cách comment bên dưới nhé.

Tham khảo
1. https://inkbotdesign.com/web-development-trends/
2. http://merehead.com/blog/web-development-trends-2019/
3. https://www.coredna.com/blogs/web-development-trends
4. https://electricsilk.com/website-design-and-development-trends-for-2019/
5. http://merehead.com/blog/future-web-development-2019/
6. https://www.quora.com/What-will-be-the-latest-web-app-development-trends-in-2019
7. https://www.bluleadz.com/blog/web-design-theories-for-next-year

Bài viết gốc được đăng tải tại thangphampt.wordpress.com

Có thể bạn quan tâm:

Xem thêm Việc làm phát triển ứng dụng web hấp dẫn trên TopDev

Làm thế nào để trở thành một Technical Writer chuyên nghiệp? (Phần 2)

technical writer
Làm thế nào để trở thành một technical writer?

Tác giả: Edidiong Asikpo

Tiếp tục chuỗi bài chia sẻ thêm về những cách thức để có thể trở thành một Technical Writer chuyên nghiệp và tài năng hơn.

Nên bắt đầu từ đâu cho quá trình trở thành một Technical Writer?

“Bí mật của sự dẫn đầu là bắt đầu ngay từ bây giờ” – đây là một câu nói nổi tiếng của Mark Twain. Hãy bắt đầu ngay từ bây giờ để có thể trở thành một Technical Writer chất lượng và chuyên nghiệp nhất.

technical writer

Tham gia một số khóa học chuyên đào tạo kỹ thuật viết chuyên nghiệp

Technical writing là một vấn đề khó, yêu cầu người viết không chỉ cung cấp kiến thức mà còn cần diễn đạt nó một cách đơn giản và dễ hiểu nhất. Tham gia một khóa học chuyên nghiệp về kỹ thuật đôi khi có thể khiến bạn cảm thấy không cần, nhưng nó thật sự sẽ giúp bạn khám phá ra nhiều vấn đề hay ho và có những quyết định đúng đắn khi xây dựng thương hiệu blog của riêng mình.

Thường xuyên đọc sách và tin tức về công nghệ

Đọc sách là điều cần thiết vì nó sẽ giúp bạn làm giàu vốn từ vựng của mình, bắt kịp các xu hướng hiện tại, khám phá những gì đang diễn ra trong thế giới viết lách, và cũng giúp giữ cho tinh thần viết lách luôn sống động.

Đối với vấn đề này, bạn có thể tìm hiểu thêm các bài viết về công nghệ thông tin, xu hướng công nghệ cũng như kiến thức lập trình từ các trang web uy tín như trên freeCodeCamp, Hashnode, The Writing HTX và một số trang khác.

  Con đường để bạn trở thành tech lead
  CTO là gì - Những sự thật cần biết về Chief Technology Officer 

Bắt tay vào viết bài

Ngay cả khi bạn tham gia tất cả các khóa học viết về các vấn đề mang tính kỹ thuật và đọc tất cả các bài báo công nghệ bạn có thể tìm thấy, điều đó đương nhiên sẽ không khiến bạn trở thành một nhà văn hay một người sáng tạo bài viết chuyên nghiệp. Bạn cần thực sự viết để trở thành một nhà văn.

Bạn có thể tự hỏi làm thế nào để bạn thực sự bắt tay vào viết bài?

Đầu tiên, bạn cần nghĩ ra chủ đề mà bạn muốn viết. Sau đó, bạn nên thực hiện các nghiên cứu cần thiết, viết bản thảo của bài báo và đọc lại bài báo (nhiều hơn một lần). Khi bạn đã sẵn sàng, cuối cùng bạn có thể xuất bản bài viết trên blog của mình.

Bạn không cần phải xây dựng blog của mình từ đầu bởi vì nó tốn rất nhiều thời gian và sẽ khiến bạn mất tập trung thực sự, đó là viết. Sau khi bạn đã cảm thấy thoải mái với việc viết lách, bạn có thể đăng ký trở thành tác giả khách mời trên freeCodeCamp. Nếu được chấp thuận, bạn có thể đăng các bài viết của mình lên nền tảng này và thu hút được nhiều đối tượng độc giả hơn.

Duy trì việc viết và sáng tạo nội dung mới một cách đều đặn

Viết liên tục đóng một vai trò rất lớn trong việc giúp bạn trở thành một blogger giỏi hơn. Nó giúp tăng cao năng suất của bạn, thay đổi quan điểm và xây dựng sự tự tin của bạn.

Cũng giống như mọi kỹ năng khác, bạn sẽ viết tốt hơn khi bạn có thể viết một cách liên tục. Hãy đặt mục tiêu viết ít nhất một bài báo mỗi tháng, và bạn thật sự nhận ra sự thay đổi về cách kỹ năng viết của mình cải thiện nếu bạn tiếp tục thực hiện nó một cách nhất quán.

Nếu bạn cần một số trách nhiệm giải trình với sự nhất quán của mình với tư cách là một nhà văn kỹ thuật, bạn có thể thử tham gia cuộc thi #2Articles1Week Writing Challenge để đánh giá kỹ năng của mình.

Đóng góp cho các dự án Open Source

Tài liệu cho các dự án open source được cho là quan trọng như chính phần mềm. Vì vậy, nếu bạn mong muốn trở thành một technical writer chuyên nghiệp, bạn có thể đóng góp những gì mình biết cho một dự án bởi vì con người không thể sử dụng những gì họ không hiểu.

Nếu bạn đang làm việc trong một dự án hoặc cho một tổ chức open source miễn phí. Nhưng các đóng góp open source có thể giúp bạn cải thiện kỹ năng viết, mở rộng mạng lưới và giúp bạn nhận được các đề xuất và giới thiệu từ những người theo dõi mình. Nó cũng có thể giúp bạn tăng cơ hội được chấp nhận tham gia vào Google Season of Docs.

Xem thêm Lead Engineer trông như thế nào?

Google Season of Docs là gì và nó có tầm quan trọng như thế nào?

Google Season of Docs là chương trình thường niên do Google tổ chức. Mục tiêu của nó là tập hợp các technical writers và các tổ chức open sources lại với nhau để thúc đẩy sự hợp tác và cải thiện số lượng tài liệu trong nguồn dữ liệu open sources.

Sáng kiến ​​này được xem là cực kỳ quan trọng vì tài liệu của một dự án open source cung cấp lộ trình để người dùng không chỉ hiểu thêm về dự án mà còn đóng góp những gì mình biết cho nó.

Trong suốt chương trình, các technical writers được chấp nhận dành từ 3 – 5 tháng để xây dựng một bộ tài liệu mới, cải thiện cấu trúc của các tài liệu hiện có, phát triển các hướng dẫn cần thiết hoặc cải thiện các quy trình đóng góp và hướng dẫn của một tổ chức open sources.

Điểm thú vị của chương trình này là bạn có thể được trả từ 3000 – 15.000 USD để đóng góp cho các dự án open source với tư cách là một technical writer. Bạn cũng sẽ có nhiều cơ hội hơn khi tham gia vào Technical Writing Team và có thể được tổ chức open sources giữ lại để tiếp tục làm việc với tư cách là một technical writer sau khi chương trình kết thúc.

Những tips hay ho để bắt đầu quá trình trở thành Technical Writing

  • Làm theo hướng dẫn và xây dựng văn phong viết ổn định. Nó sẽ giúp bạn đi đúng hướng và tuân theo các nguyên tắc viết bài kỹ thuật, công nghệ một cách tốt nhất.
  • Làm cho các đoạn văn trong bài trở nên ngắn gọn hơn để chúng hỗ trợ các ý tưởng phát triển một cách gọn gàng và rõ ràng nhất. Đừng nhồi nhét mọi thứ vào một đoạn văn.
  • Viết những câu ngắn gọn, rõ ràng và chính xác bởi vì sự đơn giản luôn giúp cho mọi thứ trở nên dễ dàng hơn.
  • Sau khi viết bản nháp đầu tiên, hãy đọc to nội dung của bạn trong khi giả sử chính bản thân là người đọc. Điều này sẽ giúp bạn phát hiện ra những thứ có thể được diễn đạt lại theo một cách dễ hiểu hơn.
  • Chỉnh sửa bản nháp đầu tiên của bạn khi tập trung nhất.
  • Tìm kiếm phản hồi bằng cách tham khảo ý kiến ​​của các chuyên gia trong lĩnh vực đang viết vì không có ai có thể nắm được tất cả các vấn đề liên quan đến technical.

Phỏng dịch theo bài viết gốc tại freecodecamp.org

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev

Giới thiệu JMS – Java Message Services

Giới thiệu JMS – Java Message Services

Bài viết được sự cho phép của tác giả Giang Phan

Trong cuộc sống để có thể hiểu nhau thì chúng ta cần phải trao đổi thông tin với nhau, chúng ta có thể trao đổi thông tin bằng cách nói chuyện trực tiếp, qua điện thoại, email, zalo, skype, facebook, …

Trong phần mềm, các component của chương trình hoặc các chương trình trong một hệ thống cũng cần trao đổi thông tin với nhau để có thể chạy đồng nhất, việc trao đổi thông tin này thông qua message (tin nhắn).

Trong Java, nó cung cấp một số API cho phép các ứng dụng Java có thể tạo, gửi, nhận và đọc các message. Các API này gọi JMS (Java Message Service) API.

Tìm việc làm Java mới nhất lương up to 2000 USD

Giới thiệu JMS

Message là gì?

Message (Tin nhắn) là một phần thông tin. Nó có thể là một text, XML, JSON hoặc một Entity (đối tượng Java), … Message là dữ liệu rất hữu ích để giao tiếp giữa các hệ thống khác nhau.

Messaging là gì?

Messaging (nhắn tin) là việc trao đổi thông tin giữa các thành phần khác nhau trong cùng một hệ thống hoặc các hệ thống khác nhau. Nó có thể xảy ra theo cách đồng bộ hoặc không đồng bộ.

Ưu điểm của nhắn tin là khả năng tích hợp các nền tảng khác nhau, làm giảm tắc nghẽn hệ thống, tăng cường khả năng mở rộng và nâng cao độ tin cậy gửi nhận tin.

Có 2 mô hình nhắn tin: P2P (Point to Point) và Pub/Sub (Publisher/ Subscriber).

JMS là gì?

Java Message Service (JMS) API là một phần của đặc tả kỹ thuật Java Enterprice Edition (Java EE), là một API trung gian hướng thông báo Java (MOM) để gửi tin nhắn giữa hai hoặc nhiều client.

JMS mô tả các phương thức tạo bởi chương trình Java cho việc: tạo (Create), gửi (Send), nhận (Receive), đọc (Read) tin nhắn.

JMS cho phép giao tiếp giữa các thành phần khác nhau của một ứng dụng phân tán được kết nối lỏng lẻo, đáng tin cậy và hỗ trợ bất đồng bộ.

Giao tiếp giữa các client được tạo ra bởi message broker qua các tiêu chuẩn truyền tin bất đồng bộ như AMQP, MQTT.

JMS API là triển khai để xử lý vấn đề nhà sản xuất-người tiêu dùng.

JMS bao gồm 2 thành phần:

  • API : hỗ trợ chức năng cho người phát triển phần mềm.
  • SPI (Service Provider Interface) : cho phép các Provider tạo ra tool JMS tích hợp, định hướng cho mọi người sử dụng theo hướng chuẩn hóa.

Giới thiệu JMS – Java Message Services

Khi chúng ta phát triển Hệ thống nhắn tin Java với JMS API, thì chúng ta có thể triển khai cùng một ứng dụng trong bất kỳ JMS Provider software nào.

>>> Xem thêm: Học lập trình Java từ đâu và như thế nào?

MOM là gì?

MOM (Message-oriented middleware hay MQ – Message Queue) là một ứng dụng trung gian hỗ trợ gửi và nhận tin nhắn trong các ứng dụng phân tán.

Cơ chế MOM tương tự như database với việc nhận và gửi message, đảm bảo toàn vẹn dữ liệu, transaction và cân bằng cho việc gửi nhận dữ liệu.

Nơi lưu trữ dữ liệu và tương tác với MOM có tên gọi là Destination.

Một số MOM tiêu biểu:

# JMS PROVIDER ORGANIZATION
1. WebSphere MQ IBM
2. Weblogic Messaging Oracle Corporation
3. Active MQ Apache Foundation
4. Rabbit MQ Rabbit Technologies(acquired by Spring Source)
5. HornetQ JBoss
6. Sonic MQ Progress Software
7. TIBCO EMS TIBCO
8. Open MQ Oracle Corporation
9. SonicMQ Aurea Software

JMS Broker

Để gửi hoặc nhận tin nhắn, trước tiên, JMS Client phải kết nối với JMS message server (còn gọi là JMS Broker – nhà môi giới):

  • Một Connection mở ra một kênh liên lạc giữa client và broker.
  • Tiếp theo, client phải thiết lập một session để tạo, tạo và đọc tin nhắn. Bạn có thể nghĩ về session như một luồng thông báo xác định cho một cuộc trò chuyện cụ thể giữa client và broker. Bản thân client là producer hoặc consumer.
  • Transaction được tạo bởi client là transaction giữa producer và broker hoặc giữa broker và consumer, nhưng không bao giờ giữa producer và consumer.
  • Producer gửi tin nhắn đến destination (đích) mà broker quản lý. Consumer truy cập destination đó để lấy tin nhắn.
  • Tin nhắn bao gồm header (tiêu đề), optional properties (thuộc tính), và body (nội dung). Body chứa dữ liệu, header chứa thông tin broker cần định tuyến và quản lý tin nhắn và các thuộc tính có thể được xác định bởi các ứng dụng client hoặc bởi provider để phục vụ nhu cầu của chính họ trong việc xử lý tin nhắn.
  • Connection, Session, Destination, Message, Producer và Consumer là những đối tượng cơ bản tạo nên một ứng dụng JMS.

Giới thiệu JMS – Java Message Services

Các thành phần của JMS

  • JMS Provider :
    • JMS API là một tập hợp các interface, không chứa bất kỳ implementation nào. JMS Provider là một hệ thống bên thứ ba, chịu trách nhiệm implement JMS API để cung cấp các tính năng nhắn tin cho khách hàng.
    • JMS Provider còn được gọi là phần mềm MOM. JMS Provider cũng cung cấp một số thành phần UI để quản trị và kiểm soát phần mềm MOM này.
    • JMS Provider được viết trên chuẩn Java do đó sẽ chạy được trên đa nền tảng.
  • JMS Client : Là các chương trình độc lập hoặc các components (thành phần) của ứng dụng, được viết bằng Java có khả năng trao đổi message.
    • JMS producer/ publisher : là JMS client tạo và gửi tin nhắn.
    • JMS consumer/ subscriber : là JMS client nhận tin nhắn.
  • JMS Message : Là các object, định dạng trung gian chứa data để giao tiếp giữa JMS Client và Provider.
  • Administered object : hỗ trợ cơ chế quản lý và cấu hình cho JMS Object. Bao gồm:
    • ConnectionFactory Object: được sử dụng để tạo kết nối giữa ứng dụng Java và JMS Provider. Tương tự như khái niệm truy cập DataSource của kết nối dữ liệu.
    • Destination Object: là nơi lưu trữ cho message, là đối tượng JMS được JMS Client sử dụng để chỉ định đích của tin nhắn mà nó đang gửi và nguồn tin nhắn mà nó nhận được. Có hai loại Destination: Queue and Topic.
      • JMS Queue : Khu vực chứa các tin nhắn đã được gửi và đang chờ để đọc (chỉ bởi một consumer). Hàng đợi này đảm bảo các tin nhắn được nhận theo thứ tự gửi và mỗi tin nhắn chỉ được xử lý một lần.
      • JMS Topic : Một cơ chế phân phối để publisher gửi tin nhắn đến nhiều người đăng ký (subscriber).

Cơ chế giao tiếp JMS

JMS cung cấp cơ chế giao tiếp bao gồm:

  • Asynchronous: JMS tự động chuyển message đến người nhận khi message đến.
  • Reliable: một message chỉ được chuyển đến đúng một người nhận mà không có cơ chế nhân bản, do vậy, tín hiệu phản hồi hoàn tất nhận message từ người nhận sẽ gây nên xóa bỏ thông tin trên middleware object.

Các mô hình JMS

JMS hỗ trợ 2 mô hình trao đổi dữ liệu là P2P (Point to Point) và Pub/Sub (Publisher/ Subscriber). Các mô hình trao đổi này gọi là JMS message domain.

P2P (Point to Point)

Giới thiệu JMS – Java Message Services

  • Có ba thành phần chính là ứng dụng gửi (sender), Queue, ứng dụng nhận (receiver) tin.
  • Sử dụng Queue làm nơi lưu trữ. Queue giữ lại các tin nhắn cho đến khi client nhận hoặc đến thời gian timout thiết lập.
  • Định nghĩa 02 đối tượng cho việc gửi và nhận, đó là sender và receiver, và chỉ có một người gửi và một người nhận tin nhắn.
  • Mô hình này message chuyển đi tuần tự (FIFO).
  • Mô hình cho phép người nhận không cần active tại thời điểm gửi message.
  • Sử dụng tín hiệu acknowledge để kích hoạt cho việc nhận message ở người nhận hoàn tất.
  • Mô hình có tính bảo mật cao do một người gửi và một người nhận nhưng đôi lúc làm hệ thống bị block lại do chờ message đến.

Pub/ Sub (Publisher/ Subscriber)

Giới thiệu JMS – Java Message Services

  • Cũng có ba thành phần chính là phía gửi (sender), Topic, và phía nhận (receiver).
  • Mô hình sử dụng Topic làm nơi lưu trữ. Topic thực chất cũng là dạng queue nhưng có nhiều hơn một queue với các queue có đánh độ ưu tiên khác nhau.
  • Mô hình cho phép 1 người gửi và nhiều người nhận do vậy đối tượng được định nghĩa là Publisher và Subcriber.
  • Topic sẽ lưu lại toàn bộ tin nhắn mà không bị mất đi cho đến khi MOM được reset, hay xóa.
  • Mỗi Subscriber sẽ chỉ nhận được message từ topic sau khi đã subscription.
  • Không cần sử dụng thông tin acknowledge và message được chuyển đến các subscriber chỉ là bản copy.
  • Mô hình bảo mật không cao do gửi nhiều người nhận nhưng được ưu điểm đó là áp dụng thuận lợi cho hệ thống phân tán.
  • Mô hình Pub/Sub đòi hỏi đối tượng nhận phải active hay listener tại thời điểm gửi nhận message, nếu không message sẽ mất đi (non-durable). Do vậy, để message vẫn không mất đi nhưng được lưu trữ tạm thời trong MOM và cho phép người dùng truy cập vào MOM với tính xác thực thì chức năng durable phải được kích hoạt.

Cơ chế gửi nhận message trong JMS được chia thành hai thành phần:

  • Synchronous: đối tượng nhận và gửi message thông qua thực hiện phương thức receive và phương thức này giữ ứng dụng chờ đợi cho đến khi message tới.
  • Asynchronous: đối tượng nhận bắt buộc phải đăng ký cơ chế lắng nghe MessageListener để đón nhận message và phương thức được kích hoạt là onMessage để đón nhận và xử lý message.

Ưu điểm của JMS

  • Reliability (Độ tin cậy) : Tin nhắn trung gian (Messaging middleware) đảm bảo tin nhắc được phân phối đến người nhận (receiver). Nếu người nhận ngừng hoạt động vì một số lý do, hệ thống nhắn tin sẽ lưu trữ tin nhắn cho đến khi nó hoạt động trở lại. Đảm bảo một message chỉ được gửi một lần, tránh trường hợp bị mất message hoặc trùng lặp.
  • Asynchronous (Bất đồng bộ) : JMS Provider, client có thể gửi và nhận message không đồng bộ. Nghĩa là người gửi và người nhận không cần chờ nhau.
  • Ease of Integration (dễ tích hợp) : Nhiều ứng dụng có thể được viết bằng các ngôn ngữ lập trình khác nhau hoặc chạy trên các máy chủ khác nhau. Miễn là chúng sử dụng cùng một giao thức, một phần mềm trung gian nhắn tin có thể được sử dụng để thiết lập liên lạc giữa chúng.
  • Scalability (Khả năng mở rộng): Hệ thống nhắn tin giúp quảng bá tin nhắn đến nhiều receiver, giúp mở rộng.
  • Flexibility (Tính linh hoạt) : có thể gán các giao thức khác nhau cho các tin nhắn khác nhau, cho phép ta linh hoạt trong việc thiết kế kiến trúc của mình.
  • Loosely coupled (Kết nối lỏng lẻo) :
    • JMS API là đặc tả kỹ thuật nên được triển khai bởi tất cả các JMS Provider. Vì vậy chúng ta có thể thay đổi Provider hiện tại sang Provider mới với ít thay đổi (có nghĩa là chỉ cấu hình) hoặc không thay đổi mã ứng dụng JMS.
    • Tách biệt người gửi và người nhận, và người truyền tin trung gian sẽ lưu tin nhắn đến khi người nhận có thể xử lý.
  • Interoperability (Khả năng tương tác) : JMS API cho phép khả năng tương tác giữa các ngôn ngữ nền tảng Java khác như Scala và Groovy.

Nhược điểm JMS

JMS sẽ không bao gồm các tính năng sau, bởi vì JMS chỉ là hệ thống gởi nhận tin:

  • Load Balancing/Fault Tolerance
  • Error/Advisory Notification
  • Administration
  • Security
  • Wire Protocol
  • Message Type Repository

Vì một vài hạn chế của JMS nên đa phần trong các hệ thống distributed sẽ không sử dụng JMS mà sẽ sử dụng các libs được implement dựa trên JMS như Kafka, Zookeeper… các bạn có thể tham khảo thêm. Tuy nhiên, việc nắm được các khái niệm cơ bản của JMS sẽ giúp chúng ta nắm bắt được các third party nhanh chóng hơn.

JMS vs Socket

Ưu điểm của JMS:

  • Người gửi và người nhận không cần biết nhau.
  • Có thể dễ dàng đăng ký và hủy đăng ký
  • Hữu ích cho việc lưu trữ thông tin offline và cập nhật số lượng lớn. Vì vậy, người nhận có thể xử lý từng cái một.
  • Người gửi / người nhận có thể làm việc bất đồng bộ.

Ưu điểm Socket:

  • Socket cung cấp một kết nối trực tiếp.
  • Độ trễ thấp, vì không có máy chủ ở giữa (không có MoM)
  • Socket hoạt động ở lớp TCP để truyền dữ liệu ít hơn.

Trường hợp sử dụng JMS?

Một số trường hợp có thể sử dụng JMS:

  • Mong muốn các thành phần không phụ thuộc vào thông tin về interface của các thành phần khác, vì vậy các thành phần có thể dễ dàng thay thế.
  • Muốn ứng dụng chạy cho dù tất cả các thành phần có hoạt động hay không.
  • Ứng dụng cho phép một thành phần gửi thông tin cho người khác và tiếp tục hoạt động mà không cần chờ nhận được phản hồi ngay lập tức.

>>> Xem thêm: Class trong Java là gì? Object trong Java là gì?

AMQP là gì?

Giới thiệu JMS – Java Message Services

AMQP (Advanced Message Queuing Protocol – Giao thức xếp hàng tin nhắn nâng cao) là một giao thức internet mở và được chuẩn hóa để cho phần mềm trung gian hướng thông báo (MOM) truyền message tin cậy giữa các ứng dụng hoặc tổ chức. Các tính năng xác định của AMQP là định hướng tin nhắn, xếp hàng, định tuyến (bao gồm cả P2P và Publisher/Subscriber), độ tin cậy và bảo mật.

AMQP giúp các developer xây dựng một hệ sinh thái tin nhắn đồng nhất, đa dạng, kết nối các hệ thống một cách tương tác và hợp tác.

AMQP thường được so sánh với JMS (Java Message Service), hệ thống nhắn tin phổ biến nhất trong cộng đồng Java. Một hạn chế của JMS là các API được chỉ định, nhưng định dạng thông báo thì không. AMQP là một giao thức, nó mô tả về định dạng của dữ liệu được gửi qua mạng dưới dạng luồng byte dữ liệu truyền được chỉ định. Đặc tính này cho phép các thư viện được viết bằng nhiều ngôn ngữ và chạy trên nhiều hệ điều hành và kiến ​​trúc CPU, tạo nên một tiêu chuẩn nhắn tin đa nền tảng, có thể tương tác thực sự.

Một số điều quan trọng cần nhớ:

  • AMQP là một giao thức nhắn tin, không triển khai JMS API.
  • JMS là API và AMQP là một giao thức. Vì vậy, không có nghĩa gì khi nói rằng giao thức mặc định của JMS là gì, tất nhiên các ứng dụng client sử dụng HTTP/ HTTPS làm giao thức kết nối khi gọi Web Service.
  • JMS chỉ là một đặc tả API. Nó không sử dụng bất kỳ giao thức nào. JMS Provider như ActiveMQ có thể đang sử dụng bất kỳ giao thức cơ bản nào để làm JMS Transport cho JMS API, chẳng hạn: AMQP, MQTT, OpenWire, REST (HTTP), RSS và Atom, Stomp, …

Trong bài này, chúng ta đã tìm hiểu các khái niệm quan trọng của JMS. Trong các bài viết tiếp theo, chúng ta sẽ cùng hiểu hiểu về cách cài đặt và sử dụng JMS thông qua một số JMS Provider như Active MQ, Rabbit MQ, …

Tài liệu tham khảo:

Hướng dẫn cài đặt OpenSSL trên Windows 10

Hướng dẫn cài đặt OpenSSL trên Windows 10

Bài viết được sự cho phép của tác giả Trần Hữu Cương

Hướng dẫn cài đặt OpenSSL trên Windows 10.

Không giống như Ubuntu, Windows không tích hợp sẵn file thực thi openssl, ta cần phải cài đặt nó bằng tay để có thể generate được file .key.pem.crt

  Hướng dẫn tạo certificate SSL trên ubuntu (file key, pem)
  System Design Cơ Bản: HTTPS, SSL, AND TLS

Cách 1: download từ Shining Light Productions

Download từ địa chỉ https://slproweb.com/products/Win32OpenSSL.html

(tùy vào phiên bản windows đang sử dụng mà bạn tải bản 32bit hay 64bit nhé)

Hướng dẫn cài đặt OpenSSL trên Windows 10

Sau khi cài đặt ta sẽ tìm thấy file openssl.exe nằm trong folder bin mà mình vừa cài đặt:

Hướng dẫn cài đặt OpenSSL trên Windows 10

Cách 2: download từ Git For Windows

Download từ địa chỉ https://git-scm.com/download/win

Hướng dẫn cài đặt OpenSSL trên Windows 10

Ở đây mình tải bản Portable (bản không cần cài đặt)

Hướng dẫn cài đặt OpenSSL trên Windows 10

Click đúp vào file .exe nó sẽ giải nén ra folder PortableGit

File openssl.exe sẽ nằm trong folder usr/bin

Hướng dẫn cài đặt OpenSSL trên Windows 10

Sau khi cài đặt, chúng ta có thể chạy lệnh openssl trong commad line của folder chứa file openssl.exe, để có thể chạy lệnh openssl ở bất kỳ đâu, ta cần thêm folder chưa file openssl.exe vào enviroment của windows, ví dụ:

Hướng dẫn cài đặt OpenSSL trên Windows 10

Bây giở mở màn hình command line, ta có thể chạy lệnh openssl ở bất kỳ folder nào:

 Hướng dẫn cài đặt OpenSSL trên Windows 10

Okay, Done!

References:

https://zeropointdevelopment.com/how-to-get-https-working-in-windows-10-localhost-dev-environment/

Bài viết gốc được đăng tải tại stackjava.com

Có thể bạn quan tâm:

Xem thêm Việc làm ngành cntt hấp dẫn trên TopDev