Home Blog Page 122

Map Platform: Giải pháp phát triển sản phẩm trong tương lai

map platform
Map Platform: Giải pháp phát triển sản phẩm trong tương lai

Hiện nay trong nhiều ứng dụng, từ xe ôm công nghệ đến tài chính fintech, chúng ta đều dễ dàng bắt gặp hình ảnh UI UX về bản đồ. Bản đồ là một phần không thể thiếu trong những phần mềm có liên quan đến địa điểm. Tuy nhiên, khi nói đến Map Platform thì không chỉ đơn thuần là những bản đồ nền như vậy mà phía sau đó còn rất nhiều tính năng khác như tìm kiếm địa điểm, đưa ra những đường đi phù hợp tới điểm đến được tìm kiếm. Cùng tìm hiểu về thêm về Map Platform trong phần chia sẻ của anh Lê Yên Thanh trong bài viết dưới đây.

Về diễn giả

  • Anh Lê Yên Thanh là CEO đồng thời là nhà sáng lập của BusMap – nền tảng công nghệ về giao thông công cộng.
  • Anh là cựu sinh viên Đại học Khoa học Tự nhiên – Đại học Quốc gia TP. HCM và từng là thực tập sinh tại Google với mức lương 6.000 USD/tháng.
  • Busmap là sản phẩm được anh Yên Thanh viết từ năm thứ hai đại học, đến nay mỗi ngày nền tảng này có hơn 400.000 người dùng thường xuyên mỗi tháng và đã có hơn 2 triệu lượt người dùng tải app.
  Giải đáp UX: User Empathy Mapping là gì? User Story được form như thế nào?
  Roadmap Frontend Developer - "Con đường tắt" để trở thành cao thủ Frontend Developer
map platform
Map Platform: Giải pháp phát triển sản phẩm trong tương lai

Sơ lược về nền tảng BusMap

BusMap là một ứng dụng chuyên về tìm kiếm lộ trình xe bus và những công nghệ liên quan đến giao thông công cộng thành phố. Một trong những công nghệ lõi của BusMap là công nghệ về bản đồ và thuật toán tìm đường. Đây là công nghệ đã được anh Yên Thanh nghiên cứu từ cách đây khoảng 7 năm. Trong sự kiện Vietnam Web Summit 2020 lần này, anh Thanh sẽ chia sẻ thêm về công nghệ bản đồ và những ứng dụng, những nền tảng map mà lập trình viên hay những nhà phát triển ứng dụng nên tìm hiểu để có thêm kiến thức và phát triển các loại bản đồ phù hợp với sản phẩm của mình.

Map Platform có những nhân tố chính nào?

Hiện tại, Map Platform đang có 3 nhân tố chính là: Base map SDK, Geocoding API, Routing API.

  • Base map SDK: là những UI UX liên quan đến bản đồ nền. Chẳng hạn khi vào một ứng dụng, bạn sẽ nhìn thấy bản đồ và tương tác với nó (zoom in, zoom out, di chuyển, tra cứu tên đường hiển thị), đó chính là bản đồ nền. Khi làm việc với những phần mềm có liên quan đến bản đồ thì bản đồ nền là sản phẩm bạn sẽ sử dụng nhiều nhất.
  • Geocoding API: sẽ liên quan đến những ứng dụng mà khi truy cập vào đó, bản đồ sẽ yêu cầu chúng ta nhập địa chỉ nhà để biết được vị trí ngôi nhà đấy ở đâu. Hoặc khi lấy được GPS trên điện thoại, bản đồ cũng có thể suy ngược lại người dùng đó đang ở đâu.
  • Routing API: làm việc với những ứng dụng liên quan đến logistics như hướng dẫn cho người giao hàng cần phải đi những cung đường nào, chạy như thế nào cho phù hợp,… Những vấn đề này liên quan đến Routing API.
map platform
Map Platform hiện có 3 nhân tố chính

Đây chính là 3 nhân tố chính mà Map Platform cung cấp cho lập trình viên để build những ứng dụng liên quan đến nền tảng này. Ngoài ra còn có những tính năng nâng cao hơn mà map platform cung cấp như phân tích dữ liệu về AI, big data,…

Xem thêm Kỹ thuật làm app bản đồ, tìm đường và tính năng bắt Pokemon GO

Hiện đang có mấy loại base map?

Hiện nay base map được chia thành 2 loại là Vector Map và Raster Map. Đây cũng là 2 công nghệ bản đồ được sử dụng nhiều nhất ở thời điểm hiện tại.

Vector map là loại bản đồ được build dựa trên các dữ liệu liên quan đến vector, mỗi cung đường sẽ là những đoạn thẳng. Những cung đường về việc xe cộ di chuyển như thế nào, những vòng cung, vòng xoay, giao lộ, vị trí nhà người dân, building,… tất cả các dữ liệu  như thế này sẽ được lưu dưới dạng dữ liệu digital. Ví dụ như một đoạn đường sẽ được biểu diễn bằng một đoạn thẳng từ A đến B, cung đường sẽ là các vector cong.

Raster Map ngược lại sẽ chia bản đồ thành từng bức ảnh, vì Raster lưu bản đồ dưới dạng hình ảnh. Nên khi chúng ta zoom bản đồ sẽ càng thấy rõ hơn thì nó sẽ lưu theo từng mức độ zoom khác nhau. Thông thường Raster sẽ chia làm 18 cấp độ zoom, độ zoom nhỏ nhất là 1 và lớn nhất là 18. Với mức độ zoom 1, bạn có thể nhìn thấy toàn bộ hình ảnh trái đất, còn với độ zoom 18 có thể nhìn thấy chi tiết một con đường trông như thế nào.

Ưu và nhược điểm của Vector Map và Raster Map

Chúng ta có thể so sánh Vector Map và Raster Map như 2 file ảnh png và file ảnh svg. Bằng cách so sánh này bạn sẽ không chỉ phân biệt được 2 base map mà còn biết được nắm được cả tính chất của 2 loại map này.

Vector Map: dữ liệu của Vector Map rất đơn giản, dễ lưu và có thể dễ dàng tùy biến. Những hình ảnh được lưu dưới dạng những vector nên khi đưa lên ứng dụng, nó có thể vẽ những cung đường khác nhau và apply những kiểu cách phù hợp mà dev lựa chọn. Khi zoom một bản đồ vector thì dù zoom bao nhiêu hình ảnh cũng không bị vỡ vì nó chỉ load vector đó ra và render cho vector chi tiết hơn mà thôi. Việc load dữ liệu lên cũng tốn ít băng thông, người dùng dữ liệu có thể xem bản đồ cả thành phố cùng một lúc. Vector Map đa phần được dùng trên những ứng dụng mobile.

Raster Map: vì dữ liệu được lưu dưới dạng những ô vuông hình ảnh nên điểm yếu của nó là chỉ có thể zoom đến mức độ 18 mà thôi. Nếu zoom hơn nữa hình ảnh bản đồ sẽ rất mờ. Thêm vào đó, vì là ảnh nên raster map sẽ tốn rất nhiều băng thông. Do những lý do này nên Raster Map không được dùng phổ biến, nó được sử dụng chủ yếu trên những nền tảng web. Tuy nhiên, dù tốn băng thông nhưng raster map lại tốn rất ít resource của web browser và vẽ lên trang web cũng dễ dàng hơn. Trong một số trường hợp nhất định, lập trình viên bắt buộc phải dùng Raster Map như với những hình ảnh chụp vệ tinh chẳng hạn.

Ngoài ra, còn có những loại base map khác, được xem là hybrid của 2 loại này, như Google Map,…

  6 lý do khiến cho nền tảng kết nối (platform) thất bại - Dành cho các founder đang xây dựng platform

Một số Map Platform hiện nay và giá cả

Google Map

Google Map là nền tảng uy tín và được sử dụng nhiều nhất ở thời điểm hiện tại. Với Dynamic Maps, Google cho phép người dùng sử dụng miễn phí trên mobile hoặc tốn 7 USD cho website có trên 1000 request. Nếu tính trung bình 1 user có 1 request thì website có hơn 100.000 lượt truy cập mỗi tháng sẽ tốn khoảng 700 USD cho chi phí hiển thị map. Bên cạnh Dynamic Maps, sẽ còn có nhiều dạng thông tin khác nhau với nhiều mức giá nên các công ty sẽ phải tốn kha khá kinh phí cho việc sử dụng Map Platform của Google Map. Nhưng API liên quan đến Geocoding và Direction của Google Map được đánh giá là một trong những nguồn tốt nhất hiện nay, vì Google Map có nguồn dữ liệu lớn, user sẽ tìm được mọi điểm trên website công ty bạn như khi tìm trên Google Map. Nên đây vẫn là lựa chọn của nhiều công ty.

MapBox

MapBox cũng là một trong những nguồn mà người dùng có thể sử dụng thay thế hiện nay. Nền tảng này hỗ trợ Map SDK trên mobile và web, nó không hỗ trợ nhiều về Geocoding hay Routine. Chi phí khi sử dụng MapBox sẽ rẻ hơn Google Map với mức giá rơi vào khoảng 250 USD mỗi tháng. Đặc điểm nổi trội của MapBox là dev có thể tùy biến, customize về kiểu bản đồ tương ứng với định hướng của công ty mình.

OpenStreetMap

Đây là nền tảng mà mọi người đều có thể đóng góp dữ liệu, nhận được bản đồ thay thế hoàn toàn miễn phí và tốt hơn. Vì mọi thứ đều có trên OpenStreetMap và đều là open source nên bạn cần dành thời gian để xem xét kỹ hơn về những giải pháp mà mình có thể sử dụng để đảm bảo chất lượng tốt nhất.

Ngoài ra, hiện tại cũng có khá nhiều Map Platform khác trên thị trường như Apple Map, Here Map, Vietbando, Vietmap, bMap,… Trong đó bMap là công nghệ bản đồ đang được xây dựng trực tiếp bởi BusMap. bMap cũng dựa trên một phần dữ liệu từ OpenStreetMap và phát triển nó lên để có những platform ở giữa như customize dữ liệu để có thể tùy chỉnh hóa dữ liệu đó.

Làm gì để tiết kiệm chi phí khi triển khai Map Platform?

Cân nhắc Map Platform phù hợp với nguồn dữ liệu hiện có

Nếu hiện nay sản phẩm của công ty bạn đang ở giai đoạn test thì có thể đăng ký sử dụng dữ liệu của Google Map vì Google đang có chính sách miễn phí 200 USD mỗi tháng cho người dùng. Nên nếu bạn chưa sử dụng đến 200 USD một tháng thì sẽ được sử dụng những dữ liệu chất lượng của Google Map hoàn toàn miễn phí.

Còn cách tối ưu hóa chi phí tốt nhất vẫn là sử dụng OpenStreetMap. OpenStreetMap hỗ trợ xây dựng dữ liệu dựa trên cả 3 nhân tố chính là Base Map, GeoCoding API, Routing API. BusMap ban đầu cũng sử dụng OpenStreetMap là chủ yếu. Điểm mạnh của nó là mình có thể tiết kiệm được khá nhiều chi phí cho công ty. Bạn sẽ chỉ tốn chi phí về máy chủ, băng thông để host dữ liệu bản đồ. Tuy nhiên không có giải pháp nào thật sự hoàn hảo. Với OpenStreetMap, bạn sẽ phải tốn khá nhiều thời gian và công sức để có thể setup và customize nên một hệ thống hoàn chỉnh. Chẳng hạn với những địa chỉ liên quan đến chủ quyền đất nước, chúng ta phải customize rất chặt chẽ để không bị ảnh hưởng đến các yếu tố khác. Các ứng dụng của người Việt càng phải chú trọng đến chuyện này hơn.

Hiện nay, bMap ngoài được sử dụng hỗ trợ dữ liệu cho BusMap, cũng đã dần được triển khai nhiều hơn cho các giải pháp liên quan đến bản đồ của những đơn vị khác. bMap hỗ trợ Base Map với đầy đủ vector map và raster map, có SDK sử dụng trên điện thoại khá nhẹ nên hỗ trợ tốt cho những ứng dụng và thiết bị điện thoại yếu hơn. Ngoài ra, bMap cũng hỗ trợ cả chế độ offline mode, người dùng chỉ cần tải về là có thể sử dụng kể cả khi không có mạng.

map platform
Cần có giải pháp hợp lý để tiết kiệm chi phí cho Map Platform

So sánh chi phí và workload để tìm giải pháp phù hợp

Đây là hai yếu tố có vai trò quyết định đến việc lựa chọn Map Platform phù hợp và tối ưu chi phí nhất. Nếu bạn đang phát triển một ứng dụng mang tính demo, thử nghiệm thì có thể sử dụng những platform như Google Map hay MapBox. Nó giúp tiết kiệm khá nhiều thời gian, công sức. Nhưng khi scale lớn hơn bạn sẽ phải chi rất nhiều tiền.

Khi ứng dụng đã phát triển hơn, bạn có thể chọn những platform khác như OpenStreetMap để tự build hoặc có thể sử dụng bMap để đỡ tốn workload. Khi đã có một lượng người dùng lớn rồi thì Thanh vẫn khuyên các bạn nên tìm hiểu thêm nhiều công nghệ bản đồ khác để tiết kiệm kinh phí nhất.

Xem thêm Docker to Serverless (Google Cloud Platform)

Chẳng hạn như BusMap hiện nay có khoảng 400.000 monthly active user, nếu không sử dụng công nghệ bản đồ riêng của mình mà sử dụng hoàn toàn dữ liệu của Google Map thì BusMap sẽ phải trả khoảng 50.000 USD/tháng chỉ riêng cho chi phí về bản đồ.

Với sự phổ biến và quan trọng của bản đồ, việc sử dụng dữ liệu bản đồ trong các ứng dụng của công ty sẽ còn tiếp tục phát triển hơn trong thời gian tới. Nếu muốn tiết kiệm chi phí ở giai đoạn scale các công ty nên nghiên cứu nhiều hơn các công nghệ bản đồ để vừa giúp tiết kiệm chi phí cho platform vừa đưa ra những tính năng tùy biến hơn, có thể kiểm soát tốt hơn về mặt công nghệ bản đồ, dữ liệu cho người dùng.

Bài viết được trích dẫn từ phần trình bày của anh Lê Yên Thanh tại sự kiện Vietnam Web Summit 2020 LIVE do TopDev tổ chức

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

Xem thêm các việc làm Developer hấp dẫn tại TopDev

Run test với trình duyệt Chrome Headless

Run test với trình duyệt Chrome Headless

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

Headless Browser là gì?

  • Headless browser là trình duyệt web không có giao diện đồ họa người dùng (GUI). Tương tác với trang web trong môi trường giống như các trình duyệt web phổ biến khác, được thực hiện thông qua giao diện dòng lệnh
  • Hữu ích cho việc kiểm thử các trang web vì có thể render cấu trúc HTML (DOM) giống như các trình duyệt thông thường, bao gồm cả style như: layout/ font/ colour và có thể thực thi cả javascript/ ajax
  Biện hộ: Vì sao các Developer không test phần mềm của họ?
  Các công cụ hữu ích hỗ trợ bạn trong việc tạo testdata
  • Được sử dụng cho các mục đích:
    • Kiểm thử tự động các ứng dụng web (thường sử dụng với Nodejs application)
    • Chụp ảnh màn hình 1 web page
    • Tạo file pdf
    • Thu thập (Crawl) dữ liệu trên các website
    • Tấn công DDOS tới các website

  • Danh sách headless browser:
    • Google Chrome
      • Linux/ MacOS: version >= 59
      • Windows: version >=60
    • Mozilla Firefox
      • Linux: version >=55
      • Windows/ MacOS: 56
    • PhantomJS
    • HtmlUnit
    • Ghost
  • Ưu/ nhược điểm của headless browser trong automation testing:
    • Ưu điểm: Tốc độ nhanh, kết quả kiểm thử sẽ có sớm hơn so với sử dụng các non-headless browser
    • Nhược điểm: Độ ổn định và chính xác không cao/ nhiều trường hợp xảy ra bug trên headless browser nhưng ko tìm thấy trên non-headless browser

Run test với Chrome Headless

  • Để chạy được chrome headless thì trước khi khởi tạo browser, cần thêm 2 tham số vào ChromeOptions
    • headless: trình duyệt sẽ thực thi ở chế độ headless
    • window-size: cần set trình duyệt với 1 resolution cố định (nếu ko thì nó có thể hiển thị kích thước như phiên bản web mobile hoặc ở 1 độ phân giải ko cố định) – có thể sử dụng tính năng này để test responsive
ChromeOptions options = new ChromeOptions();
options.addArguments("headless");
options.addArguments("window-size=1366x768");
driver = new ChromeDriver(options);
  • So sánh tốc độ chạy của headless và non-headless, kịch bản như sau:
    • Step 1: Open url https://automationfc.com
    • Step 2: Wait for page loaded successfully
    • Step 3: Verify homepage url and title matching with requirement
    • Step 4: Close browser
  • Code demo:
@Test
public void TC_01_ChromeHeadless() {
System.setProperty("webdriver.chrome.driver", ".\\driver\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("headless");
options.addArguments("window-size=1366x768");
driver = new ChromeDriver(options);
System.out.println("Run with Chrome Headless");

driver.get("https://automationfc.com");
System.out.println("Step 01 - Open Automation FC site");

driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(15, TimeUnit.SECONDS);
System.out.println("Step 02 - Wait for page loaded successfully");

Assert.assertEquals("Automation FC", driver.getTitle());
Assert.assertEquals("https://automationfc.com/", driver.getCurrentUrl());
System.out.println("Step 03 - Verify HomePage url and title");
}

@Test
public void TC_02_ChromeGUI() {
System.setProperty("webdriver.chrome.driver", ".\\driver\\chromedriver.exe");
driver = new ChromeDriver();
System.out.println("Run with Chrome GUI");

driver.get("https://automationfc.com");
System.out.println("Step 01 - Open Automation FC site");

driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(15, TimeUnit.SECONDS);
System.out.println("Step 02 - Wait for page loaded successfully");

Assert.assertEquals("Automation FC", driver.getTitle());
Assert.assertEquals("https://automationfc.com/", driver.getCurrentUrl());
System.out.println("Step 03 - Verify HomePage url and title");
}
  • Kết quả:
    • Chrome headless: 3.554 s
    • Chrome non-headless: 5.168 s

  • Như hình trên thì tốc độ chạy nhanh hơn gần 2s (1 testcase) so với chạy chế độ non-headless, điều này cực kì hữu ích khi số lượng kịch bản test trong dự án lớn (vài trăm/ vài ngàn testcases), giảm thiểu thời gian run regression test và nhận được kết quả phản hồi sớm hơn
  • Hiện tại mình đang sử dụng chrome headless trong dự án cho việc kiểm thử tự động (unit test/ e2e testing)

Nguồn bài viết: https://automationfc.com/2017/11/16/java-webdriver-13-run-test-voi-trinh-duyet-chrome-headless/

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

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

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

Cách ẩn icon mũi tên xanh trên tập tin, thư mục Windows 10

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

Microsoft đã thêm vào Windows 10 rất nhiều những biểu tượng, những icon để giúp người dùng có thể xác định được rất nhiều thứ hơn.

Ví dụ như mũi tên màu xanh trên biểu tượng ứng dụng cho bạn biết đó chỉ là một Shortcut, hay là cái khiên bên cạnh icon thì có nghĩa là ứng dụng đó yêu cầu quyền Administrator….

  10 điều bạn có thể làm với Linux mà bạn không thể làm với Windows
  40 phím tắt dành cho người dùng Windows

Và nếu bạn vừa làm theo bài hướng dẫn nén ổ đĩa trên Windows của mình thì trên các tập tin, thư mục đã nén sẽ có thêm biểu tượng 2 mũi tên bên cạnh biểu tượng ban đầu.

Vậy làm thế nào để có thể ẩn được biểu tượng mũi tên màu xanh trên Folder đi? Vâng, nếu bạn đang quan tâm thì hãy cùng mình tìm hiểu câu trả lời trong bài viết này nhé !

cach-an-icon-mui-ten-xanh-tren-tap-tin-thu-muc (1)

#1. Tại sao lại có icon mũi tên màu xanh ở cạnh Folder?

Biểu tượng 2 mũi tên xanh trên icon của thư mục như hình ảnh ở trên được Microsoft thêm vào nhằm thể hiện thư mục, tập tin đó đã được nén lại bằng cách sử dụng chức năng Compress this drive to save disk space của Windows.

Vì chỉ khi kích hoạt 2 mũi tên này thì nó mới xuất hiện, vậy nên cách đơn giản nhất để ẩn đi đó chính là tắt tính năng nén ổ cứng của Windows 10 đi là xong.

Nhưng tất nhiên là bạn không nên làm như vậy, và nếu đơn như vậy thì đã chẳng có bài viết này 🙂 Đây mới là cách mình muốn giới thiệu cho các bạn.

#2. Cách ẩn biểu tượng mũi tên màu xanh trên tập tin, thư mục trong Windows 10

Chúng ta sẽ sử dụng Registry Editor để thay thế 2 mũi tên màu xanh bằng một biểu tượng khác trong suốt, từ đó sẽ loại bỏ đi được 2 mũi tên kia khỏi biểu tượng của thư mục, tập tin..

+ Bước 1: Đầu tiên, bạn mở dùng tổ hợp Windows + R để mở hộp thoại Run lên, bạn nhập vào lệnh regedit => và ENTER để mở Registry Editor trên Windows.

cach-an-icon-mui-ten-xanh-tren-tap-tin-thu-muc (2)

+ Bước 2: Trong cửa sổ Registry Editor này, bạn copy đường dẫn mình để ở bên dưới và dán vào ô địa chỉ xong ENTER để truy cập nhanh vào thư thẻ Explorer trong Regedit.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer

cach-an-icon-mui-ten-xanh-tren-tap-tin-thu-muc (3)

+ Bước 3: Tiếp theo, bạn kích chuột phải lên khóa Explorer => chọn New => Key để tạo một khóa con mới trong thẻ Explorer.

Bạn hãy đặt tên cho nó là Shell Icons, nếu không đặt kịp lúc tạo thì có thể kích chuột phải lên New Folder, chọn Rename nhé !

cach-an-icon-mui-ten-xanh-tren-tap-tin-thu-muc (4)

+ Bước 4: Tạo xong bạn bấm vào Shell Icons, click chuột phải vào khoảng trống ở phía bên phải, chọn New => chọn String Value trong menu New vừa mới hiện ra, đặt tên cho khóa String Value mới tạo là 179.

cach-an-icon-mui-ten-xanh-tren-tap-tin-thu-muc (5)

+ Bước 5: Cuối cùng, bạn double-click lên giá trị 179, cửa sổ sửa giá trị hiện ra bạn nhập vào ô Value Data bằng địa chỉ mình để ở dưới đây => và bấm vào nút OK để hoàn tất việc sửa chữa.

Bây giờ hãy khởi động lại máy thôi, 2 mũi tên màu xanh kia sẽ biến mất. Để khôi phục 2 mũi tên về ban đầu thì chỉ cần quay lại đây và xóa khóa Shell Icons đi là xong.

Lưu ý : Nếu bạn muốn thay icon này bằng icon bạn muốn, hay tải nó về sau đó copy đường dẫn của icon đó rồi quay lại dán vào ô Value Data là xong.

Dán vào ô Value Data : C:\Windows\system32\BlankIcon.ico

cach-an-icon-mui-ten-xanh-tren-tap-tin-thu-muc (6)

#3. Lời kết

Trên đây là bài viết hướng dẫn chi tiết cách loại bỏ 2 mũi tên xanh cạnh biểu tượng của tệp tin, thư mục trong File Explorer trên Windows 10 rồi nhé.

Bạn cũng có thể thay nó thành bất cứ icon nào mà bạn thích, nhưng mình nghĩ cứ để mặc định là được rồi 🙂 Hy vọng bài viết này sẽ có ích cho các bạn. Chúc các bạn thành công !

Bài viết gốc được đăng tải 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

Cách thiết lập JIT trong PHP 8

Cách thiết lập JIT trong PHP 8

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

PHP 8: Cách thiết lập JIT

PHP 8 bổ sung một trình biên dịch JIT vào lõi của PHP có khả năng tăng tốc hiệu suất đáng kể. Có một số chú thích được thực hiện về tác động thực tế đối với các ứng dụng web trong thực tế.

Tôi cũng muốn dành một bài đăng trên blog về cách thiết lập JIT, vì có một số điều cần chia sẽ.

  10 điều bạn cần biết về PHP7
  10 Frameworks tốt nhất hiện nay cho PHP

Thành thật mà nói, thiết lập JIT là một trong những cách cấu hình tiện ích mở rộng PHP khó hiểu nhất mà tôi từng thấy. May mắn thay, có một số phím tắt cấu hình có sẵn để dễ thiết lập hơn. Vẫn tốt để biết sâu về cấu hình JIT.

Trước hết, JIT sẽ chỉ hoạt động nếu opcache được bật, đây là mặc định cho hầu hết các cài đặt PHP, nhưng bạn nên đảm bảo rằng nó opcache.enableđược đặt thành 1 trong php.initệp của bạn . Việc kích hoạt bản thân JIT được thực hiện bằng cách chỉ định opcache.jit_buffer_sizetrong php.ini.

Việc kích hoạt bản thân JIT được thực hiện bằng cách chỉ định opcache.jit_buffer_sizetrong php.ini.

Lưu ý nếu bạn đang chạy PHP qua dòng lệnh, bạn cũng có thể chuyển các tùy chọn này qua cờ -d, thay vì thêm chúng vào php.ini:

php -dopcache.enable=1 -dopcache.jit_buffer_size=100M

Nếu chỉ thị này bị loại trừ, giá trị mặc định được đặt thành 0 và JIT sẽ không chạy. Nếu bạn đang thử nghiệm JIT trong tập lệnh CLI, bạn sẽ cần sử dụng opcache.enable_clithay thế để bật opcache:

php -dopcache.enable_cli=1 -dopcache.jit_buffer_size=100M

Sự khác biệt giữa opcache.enablevà opcache.enable_clilà cái đầu tiên nên được sử dụng nếu bạn đang chạy, chẳng hạn như máy chủ PHP tích hợp sẵn. Nếu bạn đang thực sự chạy một tập lệnh CLI, bạn sẽ cần opcache.enable_cli.

Xem thêm php tuyển dụng nhiều vị trí trên TopDev

Trước khi tiếp tục, hãy đảm bảo JIT thực sự hoạt động, tạo một tập lệnh PHP có thể truy cập thông qua trình duyệt hoặc CLI (tùy thuộc vào nơi bạn đang thử nghiệm JIT) và xem đầu ra của opcache_get_status():

var_dump(opcache_get_status()['jit']);

Đầu ra sẽ giống như sau:

array:7 [
  "enabled" => true
  "on" => true
  "kind" => 5
  "opt_level" => 4
  "opt_flags" => 6
  "buffer_size" => 4080
  "buffer_free" => 0
]

Nếu enabledvà onđúng, bạn nên đi!

Tiếp theo, có một số cách để định cấu hình JIT (và đây là nơi chúng ta sẽ đi vào mớ hỗn độn cấu hình). Bạn có thể cấu hình khi JIT nên chạy, bao nhiêu nó nên cố gắng tối ưu hóa, vv Tất cả các tùy chọn này được cấu hình sử dụng một mục cấu hình duy nhất (!): opcache.jit. Nó có thể trông giống như sau:

opcache.enable=1 
opcache.jit=1255

Bây giờ, con số đó có nghĩa là gì? Các RFC liệt kê các nghĩa của mỗi trong số họ. Xin lưu ý bạn: đây không phải là một mặt nạ bit, mỗi số chỉ đơn giản là đại diện cho một tùy chọn cấu hình khác. RFC liệt kê các tùy chọn sau:

#O – Mức độ tối ưu hóa

0 đừng JIT
1 JIT tối thiểu (gọi trình xử lý VM tiêu chuẩn)
2 nội tuyến trình xử lý VM chọn lọc
3 JIT được tối ưu hóa dựa trên suy luận kiểu tĩnh của chức năng riêng lẻ
4 JIT được tối ưu hóa dựa trên suy luận kiểu tĩnh và cây cuộc gọi
5 JIT được tối ưu hóa dựa trên suy luận kiểu tĩnh và phân tích quy trình bên trong

#T – kích hoạt JIT

0 JIT tất cả các chức năng khi tải tập lệnh đầu tiên
1 Hàm JIT trong lần thực thi đầu tiên
2 Hồ sơ theo yêu cầu đầu tiên và biên dịch các chức năng nóng theo yêu cầu thứ hai
3 Hồ sơ nhanh chóng và biên dịch các chức năng nóng
4 Biên dịch các hàm với thẻ @jit trong doc-comments
5 Truy tìm JIT

#R – phân bổ đăng ký

0 không thực hiện phân bổ đăng ký
1 sử dụng bộ cấp phát thanh ghi quét lớp lót cục bộ
2 sử dụng trình phân bổ thanh ghi quét lớp lót toàn cầu

#C – cờ tối ưu hóa CPU cụ thể

0 không ai
1 cho phép tạo lệnh AVX

Dù sao, nội bộ đề xuất 1255là mặc định tốt nhất, nó sẽ hoạt động tối đa, sử dụng JIT theo dõi, sử dụng bộ cấp phát thanh ghi quét lớp lót toàn cầu – bất kể điều gì có thể – và cho phép tạo lệnh AVX.

Vì vậy, cài đặt ini (hoặc cờ -d) của bạn phải có các giá trị sau:

opcache.enable=1 
opcache.jit_buffer_size=100M
opcache.jit=1255

Nhân tiện, hãy nhớ rằng đó opcache.jitlà tùy chọn. JIT sẽ sử dụng một giá trị mặc định nếu thuộc tính đó bị bỏ qua.

Bạn hỏi mặc định nào? Đó sẽ là opcache.jit=tracing.

Chờ đã, đó không phải là cấu trúc giống như bitmask kỳ lạ mà chúng ta đã thấy trước đó? Đúng vậy: sau khi RFC ban đầu được thông qua, nội bộ nhận ra rằng các tùy chọn giống như bitmask-like không phải là tất cả đều thân thiện với người dùng, vì vậy họ đã thêm hai bí danh được dịch thành bitmask-like. Có opcache.jit=tracingvà opcache.jit=function.

Sự khác biệt giữa hai chức năng này là Function JIT sẽ chỉ cố gắng tối ưu hóa mã trong phạm vi của một chức năng duy nhất, trong khi Tracing JIT có thể xem xét toàn bộ dấu vết ngăn xếp để xác định và tối ưu hóa mã nóng.

Internals khuyến nghị sử dụng Tracing JIT vì nó có thể hầu như luôn cho kết quả tốt nhất.

Vì vậy, tùy chọn duy nhất bạn thực sự cần đặt để kích hoạt JIT với cấu hình tối ưu của nó là opcache.jit_buffer_size, nhưng nếu bạn muốn rõ ràng, danh sách opcache.jitsẽ không phải là một ý tưởng tồi:

opcache.enable=1 
opcache.jit_buffer_size=100M
opcache.jit=tracing
Bài viết gốc được đăng tải tại lcdung.top
Có thể bạn quan tâm:
Xem ngay những tin đăng tuyển dụng IT mới nhất trên TopDev

Automation testing: Một số công cụ hữu ích cho tester

Automation testing: Một số công cụ hữu ích cho tester

Bài viết được sự cho phép của tác giả Vân Anh

Bạn là một tester, mỗi lần có một bản build mới, ngày qua ngày bạn vẫn cặm cụi test đi test lại những case mà hết round này đến round khác mà bạn đã check mỏi cả tay. Mặc dù bản build lần này chỉ là fix một vài lỗi, nhưng mà bạn cũng không thể tự tin chắc chắn là cái việc fix lỗi này của đám dev nó không làm ảnh hưởng đến mấy chức năng đã chạy ngon lành ở round trước, do đó mà bạn cứ phải tay – mắt check lại những case đó. Rất tốn thời gian.

Tuyển tester làm việc online

  04 Điều Cần Chú Ý Cho Người Mới Làm Automation Test
  Cách Engineer Nhật Bản thực hiện test như thế nào

regrestion_test


Hoặc là khi sản phẩm của mình cũng đến tầm giai đoạn mà release đến nơi rồi, bỗng dưng nhận được yêu cầu của khách hàng là thêm một ít chỗ này, hay bỏ một ít chỗ kia. Thế rồi khi xong công đoạn của Dev thì việc của bạn lại là test lại chỗ thêm,chỗ bớt đó có ảnh hưởng đến những cái đã ngon lành trước đó hay không, và rồi bạn lại cặm cụi test như những người nông dân chăm chỉ.

Test-Retest

Không làm thế thì làm thế nào được?

Tất nhiên là có cách rồi, nhiều cách là đằng khác. Người ta à thực ra là người tây họ cũng gặp phải vấn đề như bạn thôi, thế rồi họ nghĩ ra cái cách mà đỡ tốn công sức ‘manual’ cho họ, đó là tạo ra một công cụ tự động làm cho họ công việc ấy. Nhưng mà lưu ý rằng, automate không thay thế hoàn toàn 100% manual được, nhưng nó sẽ giúp tiết kiệm được rất rất nhiều chi phí cho việc retest và regression test.

Có rất nhiều tool hỗ trợ automate testing, được phần đông cộng đồng tester biết đến như là Selenium, HP QTP/UFT, TestComplete, IBM Rational Functional Tester, Ranorex, Jmetter, SoapUI, Appium, … rất nhiều, chỉ với từ khóa đơn giản là ‘automation testing tools’ thì google sẽ tìm ra cho bạn cả lô xích xông các link, bạn tha hồ tìm hiểu, vấn đề của bạn chỉ là làm thế nào để dùng được nó thôi.

Tuy nhiên, các tool đều là các tool thương mại cả, và vì là tool thương mại nên chi phí bạn bỏ ra để sử dụng tool đó khá là đắt đỏ, nhưng đổi lại thì bạn sẽ  được sử dụng một công cụ rất mạnh mẽ, thêm nữa là bạn sẽ luôn nhận được sự hỗ trợ nhiệt tình từ các supporter của nhà cung cấp.

Ngoài ra, nếu vấn đề ở mặt chi phí, thì yên tâm, hiện nay cũng có nhiều tool free để dùng, tính năng vẫn nhiều, cũng mạnh mẽ, cũng có các cộng đồng hỗ trợ rất đông đảo trên toàn cầu. Tiêu biểu như:

1. Selenium

Công cụ open source + free, ngoài việc bạn có thể lấy về để sử dụng thoải mái, thì bạn còn có thể đóng góp xây dựng để nó mạnh mẽ hơn nữa thông qua Official SeleniumHQ Github page . Selenium – công cụ hỗ trợ functional automation testing cho các ứng dụng web, bạn có thể execute script trên nhiều trình duyệt và các hệ điều hành khác nhau, Selenium tương thích với nhiều ngôn ngữ lập trình và các automation testing framework.

26594-QA-2-selenium-webdriver

Với selenium, bạn có thể tạo ra các script để thực hiện kiểm thử tự động trên các trình duyệt, và trên các môi trường test khác nhau.

Cùng với đó, bạn cũng có thể tạo ra các sript với selenium, giải pháp hỗ trợ tuyệt vời cho bạn trong việc tái hiện các bug, thực hiện kiểm thử hồi quy (regression testing), và exploratory testing.

2. Jmetter

apachejmeter_0

Jmetter là ứng dụng desktop được sử dụng nhiều trong kiểm thử hiệu năng ứng dụng web, đây cũng là một tool free cùng với sự hỗ trợ đông đảo từ cộng đồng người sử dụng. Về mặt giao diện người dùng, theo ý kiến chủ quan của mình thì nó thực sự có vẻ không được đẹp lắm nhưng lại khá là dễ sử dụng. Jmetter hỗ trợ nhiều loại ứng dụng, server và protocol như Web, SOAP, FTP, TCP, LDAP, SOAP, MOM, Mail Protocols, shell scripts, java objects, và cả database.

3. Appium

Mobile-App-Testing-1

Appium là một test automation framework, được sử dụng nhiều trong kiểm thử ứng dụng mobile. Tất nhiên là trong list này thì nó cũng là một tool free.

Appium hỗ trợ automation cho các ứng dụng native, hybrid và mobile web – những ứng dụng được build trên cả iOS và Android. Appium được đánh giá công cụ khá dễ dàng cài đặt cũng như sử dụng, và được cho là một trong những tool tốt nhất cho mobile automation testing.

4. SoapUI

SoapUI_0

Cuối cùng thì có SoapUI, đây cũng là một tool open source, được sử dụng trong API testing cho cả SOAP và REST APIs. SoapUI cung cấp OAP Web Services functional testing, REST API functional testing, WSDL coverage, message assertion testing và test refactoring.

Chúng ta đều biết rằng tool hỗ trợ thì rất nhiều, tuy nhiên việc quan trọng ở đây là làm sao lựa chọn được cái nào đó phù hợp với project, có thể áp dụng và mang lại giá trị nhất định cho project đó.

Bản thân mình đã có thời gian được – tự học về mấy tool trên này, và mình cũng áp dụng vào project của mình rồi, chỉ có điều chưa official, thế rồi cũng để ngỏ vì mình chuyển qua công ty khác. Tuy vậy thì mình vẫn muốn lại dành thời gian để tìm hiểu sâu hơn về mảng này. Viết được auto cho website book vé online của trang https://www.airasia.com hay là trang mua hàng nào đó, kiểu kiểu như vậy.

Vì thế tiếp theo bài này sẽ là những kiến thức basic để có thể bắt đầu với automation testing với Selenium, Jmetter, SoapUI, và Appium. Đầu tiên thì là để tổng hợp lại kiến thức đã học được, sau là để ôn lại những ngày tháng mình đã bắt đầu làm quen với automation. Hi vọng, những bài học mà mình đã đi qua, có thể là những bài học sau này mình lại có thể cần đến, hoặc có thể giúp ích được cho ai đó đang tự bắt đầu như mình.

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

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

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

App User Centricity: Làm sao tăng tỷ lệ duy trì lên 66%?

mobile app
App User Centricity: Làm sao tăng tỷ lệ duy trì lên 66%?

Accesstrade là đơn vị chuyên về Performance Marketing. Công ty đã có 21 năm kinh nghiệm trong việc vận hành và triển khai các dịch vụ performance cho nhiều doanh nghiệp trong và ngoài nước. Theo thống kê gần đây của AppsFlyer – đơn vị chuyên về hệ thống tracking SDK số 1 trên thế giới, trong nửa năm 2020, Accesstrade là đơn vị đứng thứ 2 trong top những đơn vị non-game cung cấp các dịch vụ về traffic và user cho các doanh nghiệp muốn phát triển về mobile app.

  5 app dù bị đánh giá thấp nhưng không nên bỏ qua
  5 bài học từ việc phát triển app cho web

Tổng quan về nội dung chia sẻ

Ở sự kiện Vietnam Web Summit 2020 lần này, Accesstrade muốn đóng góp thêm về những giải pháp mà Accesstrade cung cấp giúp các doanh nghiệp giữ chân người dùng sau khi đã mang được người dùng đến với app của mình. Cũng như chia sẻ thêm về việc làm sao tăng tỉ lệ retention rate từ 10% – một tỉ lệ trung bình lên 50 – 60%. Hi vọng rằng qua bài chia sẻ này mọi người sẽ hiểu rõ hơn cũng như tìm ra giải pháp cho kênh mobile app của sản phẩm mình.

Sơ lược về tình hình thị trường Mobile App hiện tại

Hoạt động của doanh nghiệp

Thị trường Việt Nam hiện đang phát triển rất nhanh nhờ lượng dân số trẻ cao hơn, dẫn đến tỉ lệ người dùng thích nghi với công nghệ mới hay muốn trải nghiệm công nghệ mới cũng cao hơn. Độ trẻ hóa của user trong việc dùng mobile app cũng ngày càng trẻ hóa nên hầu như các doanh nghiệp đều đang build những sản phẩm dạng mobile app. Mobile app đang phát triển rất mạnh và được đầu tư nguồn lực rất lớn.

Hiện tại các nhà mạng đã bắt đầu triển khai mô hình 5G tại Việt Nam, 5G là công nghệ mới đầy hứa hẹn và Việt Nam là một trong những nước tiên phong triển khai công nghệ này. Sắp tới khi 5G được triển khai rộng khắp, lượng người dùng mobile cũng như cách họ trải nghiệm sản phẩm trên mobile sẽ khác hơn rất nhiều. Trước đây khi mọi người còn dùng mạng 3G hay những mạng yếu hơn thì việc xem livestream trên app, video YouTube và những content nặng trên mobile app gần như rất hạn chế. Nhưng khi 4G đã phổ biến, sắp tới là 5G, 6G thì những content trên mobile app sẽ ngày càng phát triển.

Vậy chúng ta phải đi trước đón đầu xu hướng này như thế nào? Các doanh nghiệp nên cân nhắc đến việc lên những phương án phát triển content và mobile app trong thời gian tới ra sao? Doanh nghiệp muốn thành công trong triển khai mobile app cần giải quyết được các vấn đề này.

mobile app
Nhạy bén với xu hướng giúp tăng cơ hội phát triển cho mobile app

Tình hình users

Theo báo cáo mới nhất của Appota năm 2020 thì người dùng Việt Nam đang ngày càng trẻ hóa. Họ rất thích những trend mới và thường chọn lựa trend. Nhưng việc này lại không có một quy chuẩn nhất định mà chỉ đơn thuần là người dùng thấy xu hướng nào đang hot, hấp dẫn thì tìm hiểu và sử dụng mà thôi. Tiktok là một case study điển hình cho trường hợp này. Sự tăng trưởng của Tiktok trong thời gian qua là minh chứng cho việc giới trẻ Việt Nam và thế giới đang thích nghi rất nhanh với xu thế.

Vậy nên để bắt kịp xu thế đó, có được sự chuẩn bị trước để điều hướng người dùng theo xu thế các công ty mong muốn để phát triển app của mình là bài toán mà các doanh nghiệp cần cân nhắc và giải quyết.

Doanh nghiệp đang đối diện với những thách thức nào?

Nắm bắt xu hướng khách hàng

Những khó khăn vướng mắc có thể gặp phải ở thời điểm hiện tại là về xu hướng của khách hàng. Dù khách hàng rất thích trend mới, họ dùng app rất nhiều, thời gian dành cho mobile app đang ngày càng nhiều hơn so với cùng content đó trên PC. Nhưng để đưa khách hàng đến với action cuối cùng là mua hàng trên mobile app vẫn còn rất thấp. Người dùng vẫn muốn thanh toán offline hoặc bằng những hình thức khác, tỉ lệ thanh toán trực tiếp trong app vẫn còn rất thấp. 46% người dùng vẫn thích hình thức thanh toán thông thường hơn.

Tỷ lệ trung thành của khách hàng (retention rate) thể hiện qua việc họ tiếp tục sử dụng app trong vòng 1 tháng hay 3 tháng tới sẽ giảm rất nhanh và tỷ lệ chung hiện tại đang nằm trong khoảng dưới 10%. Tỷ lệ retention rate thấp như vậy dẫn đến việc doanh nghiệp đầu tư rất nhiều budget cho việc lôi kéo khách hàng về, sau đó đổ khách hàng “vào phễu” và cứ thế trôi đi. Không có gì đọng lại, không chuyển đổi và họ cũng không trở thành khách hàng trung thành. Điều này khiến chi phí đầu tư bị lãng phí và tỉ lệ return on investment của các doanh nghiệp sẽ ngày càng thấp.

Xem thêm 5 tips cải tiến chất lượng phát triển Mobile App

Xây dựng core value cho doanh nghiệp

Một khó khăn nữa là khi các doanh nghiệp cân nhắc đến việc phát triển app, tất cả các giá trị đều dựa trên core value. Với doanh nghiệp vận chuyển thì công ty phải phát triển app dành cho việc vận chuyển hay trong lĩnh vực tài chính cũng tương tự. Việc phát triển app dù ở bất kỳ lĩnh vực nào cũng đều tập trung vào việc làm thế nào để khách hàng sử dụng dịch vụ của họ một cách dễ dàng và thuận tiện nhất.

Đấy là suy nghĩ hoàn toàn đúng, tuy nhiên chính điều này cũng dẫn đến việc khi khách hàng sử dụng xong dịch vụ, core value mà họ mong muốn rồi thì app không còn giá trị hay mục tiêu gì tiếp tục lôi cuốn họ sử dụng nữa. Với những mô hình super app đang được build như Grab chẳng hạn thì có thể thấy, Grab đang có đội partnership riêng, họ đang kết nối với rất nhiều đơn vị ở ngoài thị trường để cung cấp những giải pháp, promotion, sản phẩm đáp ứng nhu cầu của tệp khách hàng công ty họ. Đội partnership phải làm việc với từng khách hàng để lấy promotion về. Phải tốn khá nhiều chi phí, nguồn lực để mang những promotion này về. Và không phải doanh nghiệp nào cũng triển khai mô hình này được. Đây là vấn đề mà các doanh nghiệp khi muốn build hệ sinh thái mở rộng nhiều hơn sẽ gặp phải.

mobile app
Xác định đúng nhu cầu khách hàng là yếu tố quan trọng

Cũng như khi chúng ta muốn mở rộng thị trường, muốn phát triển những mảng dịch vụ mới trong khi các bạn không có những con người đủ hiểu về sản phẩm đó để build được quy trình vận hành đủ tốt. Dẫn đến việc dù mình có đủ nguồn lực, tài nguyên, tài chính để làm nhưng trải nghiệm của khách hàng với dịch vụ đó không thật sự tốt, khiến khách hàng không muốn sử dụng app nữa.

Những yếu tố này khiến cho việc phát triển app, kể cả với những người đã biết cách làm hay chưa rất khó khăn vì không có key chủ chốt để giữ chân khách hàng lại. Với kinh nghiệm của mình, Accesstrade đã build một mô hình giúp khách hàng giải quyết những công việc này một cách dễ dàng hơn.

Giải pháp tăng tỷ lệ người dùng trung thành

Triển khai các mô hình content mới

Cần tạo ra những content mới, những mục đích sử dụng mới cho khách hàng để khi khách hàng vào trải nghiệm, sử dụng sản phẩm, họ có thể thấy được thông điệp mà công ty muốn gửi đến với người dùng. Để thực hiện điều này chúng ta phải customize theo chân dung khách hàng, nắm bắt được hành vi của họ, khách hàng hay vào app lúc nào, sử dụng dịch vụ gì, với chân dung khách hàng A nên cung cấp những notification gì, chân dung khách hàng B khác gì với khách hàng A.

Phải customize theo từng chân dung khách hàng như vậy thì tỉ lệ chuyển đổi từ notification của app mới cao hơn được. Nếu với bất cứ khách hàng nào mình cũng gửi chung một thông điệp, offer một dịch vụ thì chắc chắn tỉ lệ chuyển đổi sẽ rất thấp vì không chắc là họ có nhu cầu với dịch vụ đó hay không. Và khi thông điệp đó xuất hiện quá nhiều lần sẽ khiến khách hàng cảm thấy rất phiền và không thích app đó nữa. Việc đẩy thông điệp nếu làm không khéo nhiều khi còn khiến mình bị mất khách hàng. Đó là những vấn đề mà khi build app chúng ta cần lưu ý.

mobile app
Streaming và Gamification là hai mô hình phát triển ở thời điểm hiện tại

Tận dụng xu hướng streaming để quảng cáo sản phẩm

Ngoài ra thì với trend của người dùng hiện tại, mô hình streaming, KOLs, influencers livestream giới thiệu về sản phẩm, dịch vụ đang ngày càng nhiều, rất nhiều mô hình đang thêm streamer vào mô hình của họ như Shopee, Lazada, Tiki,… Đây cũng là cách tốt để quảng bá những thông điệp, sản phẩm mình đang có cũng như tạo ra cách tiếp cận về content theo một hướng mới, sinh động hơn, đa dạng hơn, hấp dẫn hơn.

Để khi khách hàng xem những thông điệp này, họ dễ hình dung về sản phẩm hơn và dễ đưa ra các quyết định thực hiện hành vi mua hàng hơn. Liên tục có những content mới sẽ giúp giữ chân khách hàng vì họ có được những trải nghiệm mới mẻ hơn và quay lại sử dụng sản phẩm của bạn nhiều hơn.

Phát triển gamification

Gamification cung cấp các tính năng về game. Người dùng, nhất là người dùng trẻ ở Việt Nam rất thích chơi game, thích trải nghiệm, thích những thứ hơi mang tính may rủi một chút. Hiện tại đã có khá nhiều các app lớn đang build mô hình gamification. Như vào app Shopee mỗi ngày luôn có những nhiệm vụ thu thập xu hay vòng quay may mắn. Những gamification này sẽ tạo ra động lực, sức hút để khách hàng liên tục quay lại và trải nghiệm app mỗi ngày. Đó là những cách giúp bạn build một content hấp dẫn, liên tục thay đổi và mới mẻ để thu hút khách trải nghiệm và quay lại mỗi ngày.

Những mô hình được cung cấp bởi ACCESSTRADE

Còn đối với những công ty như Grab đang triển khai mô hình về partnership lấy các promotion, các deal về thì sao? Thực tế thì các doanh nghiệp vừa và nhỏ sẽ khó làm được điều này vì nó tốn khá nhiều chi phí cũng như cần có đội ngũ để triển khai mô hình này. Bên cạnh đó, nếu brand công ty chưa đủ lớn thì việc gặp gỡ đối tác có cùng sản phẩm mà khách hàng của bạn mong muốn để lấy deal hay promotion đó về thật sự không phải là vấn đề dễ dàng.

Accesstrade sẽ cung cấp một nền tảng sinh thái, cho phép thêm toàn bộ các dịch vụ liên quan vào app của công ty bạn hoàn toàn miễn phí. Ngay lập tức app sẽ có tầm 73.000.000 SKUs và mỗi ngày Accesstrade có 1000 vouchers liên tục update từ những đối tác lớn trên thị trường như ecommerce, travel, dịch vụ,… Khách hàng khi vào app sẽ kiểm tra xem hôm nay có những mã giảm giá gì, có những deal gì hấp dẫn.

Ngoài ra nếu như khách hàng đã vào app rồi nhưng vẫn đang cân nhắc về giá hay chất lượng sản phẩm,… thì Accesstrade cung cấp thêm một giải pháp nữa đó là Service Cashback. Cashback có thể hiểu là khi bạn mua một sản phẩm dịch vụ thì sẽ được hoàn tiền. Đây là một service rất hấp dẫn có thể thúc đẩy mong muốn mua hàng của khách hàng thành hành động ngay lập tức. Như service mà Accesstrade đang thực hiện với một đối tác là ngân hàng lớn hiện nay, mỗi tháng trên app phát sinh 30000 đơn hàng.

Những giải pháp này sẽ cho bạn thấy giá trị mà mobile app có thể mang lại. Không chỉ là  retend khách hàng, tăng lượng khách hàng trung thành mà còn bán được hàng, bán được rất nhiều đơn hàng chứ không chỉ là một vài đơn. Đấy là lợi thế khi mình thêm hệ sinh thái vào. Đó là giải pháp giúp doanh nghiệp tăng trưởng bền vững, vừa tăng khách hàng vừa tăng sale.

  7 Tip tăng tương tác hiệu quả trên mobile

Ngoài ra, Accesstrade cũng cung cấp các dịch vụ để bạn verify thông tin khách hàng, social trusting, performance tracking, quản lý hoàn toàn các thông tin như đang có bao nhiêu publisher, bao nhiêu đối tác promote cho sản phẩm, dịch vụ của mình. Và một số tính năng như sau khi đã có những khách hàng trung thành rồi thì cũng có thể ngay lập tức trở thành các đại sứ thương hiệu cho sản phẩm cho dịch vụ của công ty. Chính những đại sứ thương hiệu này sẽ mang thông tin sản phẩm đi chia sẻ trong network quan hệ của họ để các khách hàng tiềm năng trải nghiệm. Khi đã đổ thêm được lượng traffic vào trong cái phễu rồi thì họ sẽ trải nghiệm từ core service của bạn, trải nghiệm hệ sinh thái của Accesstrade, tính năng cashback và lại tiếp tục trở thành những đại sứ thương hiệu mới. Đó là cách giúp growth hack rất nhanh thông qua việc đẩy khách hàng vào kênh mobile app của mình.

Sử dụng nền tảng hỗ trợ

Như đã chia sẻ, các bạn KOLs, influencers livestream trên nền tảng của app thì Accesstrade cũng cung cấp giải pháp KOC performance, tức là các bạn KOLs hay influencers của Accesstrade khi các bạn promote cho các doanh nghiệp thì không chỉ họ đang branding mà còn bán được các sản phẩm, bán được service, tăng list khách hàng cho doanh nghiệp. Đây là mô hình khá mới trên thị trường và đang hoạt động rất hiệu quả.

Accesstrade hiện cũng sở hữu đội ngũ chuyên customize để cùng các công ty vận hành campaign xem có những vấn đề gì không hay trở thành cầu nối, giúp cho việc tối ưu performance của campaign một cách tốt nhất. Bên cạnh đó, Accesstrade cũng có những dịch vụ về customer support, bất cứ khi nào bạn có những câu hỏi, vướng mắc hay những vấn đề gì cần giải quyết thì team support sẵn sàng hỗ trợ bạn trong quá trình triển khai dịch vụ.

Bài viết được trích dẫn từ phần trình bày của anh Dũng Bùi tại sự kiện Vietnam Web Summit 2020 LIVE do TopDev tổ chức

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

Xem thêm các việc làm Developer hấp dẫn tại TopDev

Hãy theo đuổi đam mê thành công sẽ theo đuổi bạn

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

Đã rất lâu rồi không có một bài viết nào mới trên Allaravel, do thời gian không cho phép. Hôm nay có chút thời gian kiểm tra lại đứa con cưng ngày nào thấy kết quả thật tuyệt vời.

  10 tips để trở thành Java Developer xịn hơn
  20 trường hợp sử dụng lệnh Docker cho developer
Hãy theo đuổi đam mê thành công sẽ theo đuổi bạn

Allaravel sau hơn 3 năm hoạt động đã có một thứ hạng kha khá 361k trên toàn cầu. Với gần 500 bài viết, 2 khóa học hoàn chỉnh: Khóa học Laravel từ A đến Z và Khóa học Vue.js thần thánh. Với tôn chỉ chia sẻ để tiến bộ, Allaravel đã định hình lại toàn bộ kiến thức về lập trình web là nơi giao lưu của nhiều thành viên. Cũng nhờ đó, mình biết thêm về rất nhiều công nghệ mới giúp ích rất trong công việc quản trị CNTT hiện tại.

Nhìn cái thành quả 361k Alexa, mình muốn chia sẻ với các bạn trẻ, đặc biệt các bạn trong lĩnh vực CNTT – Hãy cứ cháy hết mình, bạn sẽ thấy cuộc sống thật tươi đẹp.

Hãy theo đuổi đam mê thành công sẽ theo đuổi bạn

Cách đây tròn chục năm, được một người bạn giới thiệu bộ phim 3 Idiots (Ba chàng ngốc), một bộ phim của Ấn Độ – thể loại mà mình không thật sự khoái lắm nhưng sau khi xem 15 phút đầu mình đã xem bộ phim dài gần 3 giờ trong đêm với nhiều cảm xúc.

“Hãy theo đuổi đam mê, thành công sẽ theo đuổi bạn”. Câu nói rất đơn giản của chàng Rancho – nhân vật chính trong phim – nhưng nó lại là chìa khóa cho những ai đang đi tìm kiếm sự thành công thật sự trong cuộc sống.

Mình là Kiên ĐC, đây là facebook của mình https://www.facebook.com/kien.dangchung rất mong được kết bạn, giao lưu, học hỏi chia sẻ kiến thức với tất cả mọi người. Cảm ơn anh em đã cổ vũ động viên tinh thần qua những comment để lại, cảm ơn sự ủng hộ của mọi người.

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

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 CloudAMQP – Một RabbitMQ server trên Cloud

Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud

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

Trong các bài viết trước, tôi đã giới thiệu với các bạn cách tự cài đặt RabbitMQ. Trong bài này, tôi sẽ giới thiệu với các bạn CloudAMQP – một RabbitMQ Server trên nền tảng Cloud.

  Bí kíp tạo website nhờ vào GitHub và Cloudflare
  Cloud Computing - Xu hướng toàn cầu đang thâm nhập và thống trị tại thị trường Việt Nam

CloudAMQP là gì?

CloudAMQP cung cấp một RabbitMQ Server trên nền tảng Cloud. CloudAMQP tự động hóa toàn bộ quá trình thiết lập, vận hành và mở rộng quy mô của các RabbitMQ Cluster. CloudAMQP cung cấp giao diện quản lý trực quan, cung cấp hệ thống giám sát, thông báo RabbitMQ thông qua email, webhook, external service.

Khi sử dụng CloudAMQP, chúng ta không cần quan tâm về hạ tầng để quản lý RabbitMQ serrver, chúng ta chỉ tập trung vào phần business của mình. Giá thành của CloudAMQP khá linh động tuỳ thuộc vào nhu cầu sử dụng của bạn.

Trong bài viết này, tôi sẽ hướng dẫn các bạn đăng ký gói dịch vụ miễn phí của CloudAMQP. Gói này thích hợp cho các bạn developer, muốn tìm hiểu về RabbitMQ nhưng không muốn setup server RabbitMQ riêng.

Đăng ký tài khoản miễn phí CloudAMQP

Vào trang đăng ký: https://www.cloudamqp.com/plans.html

Kéo về cuối trang chọn gói FREE:

Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud

Các bạn điền các thông tin đăng ký.

Sau khi hoàn thành đăng ký, ở trang kế tiếp, chúng ta sẽ điền các thông tin để đăng ký RabbitMQ instance mà chúng ta sẽ sử dụng.

Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud

Chọn Region là Singapore hay HongKong. Ở đây mình chọn HongKong –> chọn Review.

Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud

Kiểm tra lại thông tin đăng ký, và chọn Create instance.

Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud

Chọn RabbitMQ Manager để vào trang quản lý RabbitMQ.

Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud

Chúng ta có một trang quản lý RabbitMQ như tự setup RabbitMQ Server ở các bài viết trước.

Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud

Tại trang danh sách Instance, các bạn click vào tên của instance để vào trang thông tin chi tiết instance của bạn trên CloudAMQP.

Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud

Sử dụng CloudAMQP

Các khái niệm và cách sử dụng RabbitMQ tôi đã giới thiệu với các bạn ở các bài viết trước hoàn toàn có thể sử dụng với CloudAMQP.

Đầu tiên, chúng ta cần thêm thư viện RabbitMQ AMQP client:

<dependency>   <groupId>com.rabbitmq</groupId>   <artifactId>amqp-client</artifactId>   <version>5.8.0</version> </dependency>

Tôi sẽ sử dụng lại ví dụ ở bài viết “Kết nối AMQP Client với RabbitMQ Server” để thử kết nối đến CloudAMQP.

Producer

package com.gpcoder.cloudamqp; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import java.io.BufferedReader; import java.io.InputStreamReader; public class Producer {     private static final String CLOUDAMQP_URL = "amqps://evncuivu:<your_secret_url>.rmq.cloudamqp.com/evncuivu";     private static final String QUEUE_NAME = "gpcoder-queue";     public static void main(String[] argv) throws Exception {         System.out.println("Create a ConnectionFactory");         ConnectionFactory factory = new ConnectionFactory();         factory.setUri(CLOUDAMQP_URL);         factory.setRequestedHeartbeat(30);         factory.setConnectionTimeout(30000);         System.out.println("Create a Connection");         System.out.println("Create a Channel");         try ( Connection connection = factory.newConnection();               Channel channel = connection.createChannel() ) {             System.out.println("Create a queue " + QUEUE_NAME);             channel.queueDeclare(QUEUE_NAME, false, false, false, null);             System.out.println("Start sending messages ... ");             try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in));) {                 String message;                 do {                     System.out.print("Enter message: ");                     message = br.readLine().trim();                     channel.basicPublish("", QUEUE_NAME, null, message.getBytes());                     System.out.println(" [x] Sent: '" + message + "'");                 } while (!message.equalsIgnoreCase("close"));             }         } finally {             System.out.println("Close connection and free resources");         }     } }

Consumer:

package com.gpcoder.cloudamqp; import com.rabbitmq.client.*; public class Consumer {     private static final String CLOUDAMQP_URL = "amqps://evncuivu:<your_secret_url>.rmq.cloudamqp.com/evncuivu";     private static final String QUEUE_NAME = "gpcoder-queue";     public static void main(String[] argv) throws Exception {         System.out.println("Create a ConnectionFactory");         ConnectionFactory factory = new ConnectionFactory();         factory.setUri(CLOUDAMQP_URL);         factory.setRequestedHeartbeat(30);         factory.setConnectionTimeout(30000);         System.out.println("Create a Connection");         System.out.println("Create a Channel");         Connection connection = factory.newConnection();         Channel channel = connection.createChannel();         System.out.println("Create a queue " + QUEUE_NAME);         channel.queueDeclare(QUEUE_NAME, false, false, false, null);         System.out.println(" [*] Waiting for messages. To exit press CTRL+C");
         System.out.println("Start receiving messages ... ");         DeliverCallback deliverCallback = (consumerTag, delivery) -> {             String message = new String(delivery.getBody(), "UTF-8");             System.out.println(" [x] Received: '" + message + "'");         };         CancelCallback cancelCallback = consumerTag -> { };         String consumerTag = channel.basicConsume(QUEUE_NAME, true, deliverCallback, cancelCallback);         System.out.println("consumerTag: " + consumerTag);     } }

CLOUDAMQP_URL: các bạn lấy từ trang thông tin chi tiết instance của CloudAMQP.

Chạy thử ứng dụng để kiểm tra kết quả. Tham khảo bài viết trước: https://gpcoder.com/6885-ket-noi-amqp-client-voi-rabbitmq-server/#Chay_ung_dung

Chạy Producer và gửi một vài message:

Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud

Chạy Consumer, các bạn sẽ thấy các Message được Consume:

Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud

Vào trang quản lý RabbitMQ, bạn có thể thấy một Queue được tạo và các Message được gửi đến Queue này.

Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud

Trên đây là hướng dẫn cơ bản về CloudAMQP, các bạn có thể nhanh chóng tìm hiểu RabbitMQ mà không cần setup RabbitMQ server riêng. Còn rất nhiều tính năng khác được hỗ trợ bởi CloudAMQP, các bạn có thể tìm hiểu thêm ở link bên dưới.

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

10 năm đã qua, tại sao vẫn chưa có một ứng dụng nổi bật nào dành cho Blockchain?

Cơ hội nào cho blockchain

Bài viết được sự cho phép của tác giả Edward Thiên Hoàng

Là một fan của Blockchain nhưng cũng phải thừa nhận rằng chưa thấy đường tiến cho công nghệ này.

Cho đến nay, danh tiếng của blockchain chủ yếu vẫn xuất hiện trong các hoạt động đầu cơ tiền tệ và đôi khi cả các giao dịch bất hợp pháp, vẫn chưa có ứng dụng thực sự nào nổi bật trong thực tiễn cho nền tảng công nghệ mới này.

Mọi người đều nói về blockchain, công nghệ nền tảng cho các loại tiền mã hóa như Bitcoin, sẽ thay đổi MỌI THỨ. Tuy nhiên, sau nhiều năm nỗ lực không mệt mỏi và hàng tỷ USD đầu tư, vẫn không có gì thực sự nổi bật lên từ việc ứng dụng blockchain – ngoại trừ hoạt động đầu cơ tiền tệ và các giao dịch bất hợp pháp.

Mỗi mục đích sử dụng của blockchain – từ thanh toán tới các tài liệu pháp lý, từ việc giao kèo tới các hệ thống bỏ phiếu – cuối cùng chỉ xoay quanh việc bổ sung dữ liệu vào một sổ cái phân tán, mã hóa, hoặc ẩn danh nào đó, những thứ mà chẳng ai cần. Phải chăng chẳng có ứng dụng thực sự nào cho sổ cái phân tán? Phải chăng 10 năm sau khi được phát minh ra, nguyên nhân của việc chẳng ai chấp nhận sổ cái phân tán ở một quy mô hợp lý là vì chẳng ai muốn nó cả?

Tham khảo tuyển dụng blockchain lương cao tại đây

Thanh toán và ngân hàng

Ý tưởng ban đầu của blockchain là cung cấp cho các tiền mã hóa như Bitcoin một cách để lưu trữ và trao đổi giá trị như các loại tiền tệ khác. Giờ đây mọi người sẽ có trong tay một cách để trao đổi giá trị tức thời, không mất phí và không có bên trung gian, cũng như không phải dựa trên một hệ thống tiền tệ do các chính phủ kiểm soát. Một cuộc cách mạng về ngân hàng và tiền tệ.

Thế nhưng rất nhanh sau đó, giấc mơ tan vỡ. Trên thực tế, đã có một cách để trao đổi giá trị tức thời, không mất phí cũng như không có bên trung gian: tiền mặt. Trong khi đó, các dịch vụ thanh toán như Visa hay MasterCard, dù mất phí, nhưng đi kèm là hàng loạt dịch vụ gia tăng như giúp các ngân hàng lần theo các bên lừa đảo và xác định danh tính bên mua và bên bán.

Không những vậy, đây cũng không phải một hệ thống thanh toán tốt. Trong khi Visa có thể xử lý 60.000 giao dịch mỗi giây, còn mức cao lịch sử của Bitcoin chỉ là 7 giao dịch mỗi giây. Dù có nhiều chỉnh sửa về mặt kỹ thuật để cải thiện hiệu quả của Bitcoin, nhưng vẫn không đủ. Ngoài ra, tốc độ 7 giao dịch Bitcoin mỗi giây này còn tiêu tốn năng lượng gấp 35 lần so với Visa. Nếu bạn đẩy khối lượng giao dịch Bitcoin lên ngang với Visa, nó sẽ ngốn một lượng năng lượng bằng cả phần còn lại của thế giới cộng lại.

  Blockchain cơ bản - Học về Solidity (P2)
  Blockchain là gì? Nguyên lý hoạt động và ưu điểm nổi bật của Blockchain

Tự do giao dịch không có sự giám sát của chính phủ

Trong ý nghĩ của rất nhiều người, khả năng che giấu một số thứ khỏi sự giám sát của chính quyền có thể làm thế giới tốt đẹp hơn. Nhưng vẫn còn có hai lý do quan trọng làm điều này không hoàn toàn tuyệt vời như người ta tưởng: đó là các lợi ích của chính phủ với cá nhân và các lợi ích của chính phủ với xã hội.

Sàn giao dịch bitcoin, Mt. Gox đã phải đóng cửa khi làm mất tiền của nhà đầu tư.

Các ngân hàng nhà nước do chính phủ hỗ trợ có thể đưa ra các khoản bảo hiểm tiền gửi, đảo ngược lại các thanh toán bù trừ tự động (hệ thống ACH), xác định danh tính, phát hành các tiêu chuẩn kiểm toán, và điều tra khi có sai lầm xẩy ra. Trong khi đó, theo thiết kế của Bitcoin, nó không thể có được những điều này.

Những câu chuyện về việc người dùng mất sạch số Bitcoin của mình khi email bị hack và mật khẩu bị đánh cắp đầy rẫy trên mặt báo. Không những thế, vào năm 2014, khi sàn giao dịch Bitcoin số một lúc đó, Mt. Gox bị mât 400 triệu USD tiền của nhà đầu tư do các lỗ hổng bảo mật, không ai lấy lại được tiền cho đến gần đây. Tương tự như vậy là trường hợp của Bitfinex.

Ngoài ra, các chính sách của chính phủ cũng được thiết kế để phá vỡ các hoạt động tài trợ khủng bố và tội phạm có tổ chức, ngăn chặn đường đi của các hàng hóa bất hợp pháp. Ưu tiên chính của điều này là đảm bảo tính riêng tư của giao dịch nhưng vẫn có thể phát hiện ra nếu có lệnh của tòa. Sự tự do của Bitcoin sẽ bớt thú vị đi rất nhiều nếu 100% băng thông của nó dùng cho các hàng hóa và dịch vụ bất hợp pháp.

Thanh toán nhỏ (micropayment) và chuyển khoản liên ngân hàng

Đây là hai ứng dụng thanh toán làm mọi người đặc biệt phấn khích về các loại tiền mã hóa dựa trên blockchain. Mọi người kỳ vọng rằng, với blockchain, các giao dịch Bitcoin sẽ miễn phí và tức thời. Vì vậy, nhiều người đề xuất sử dụng nó trong các khoản thanh toán nhỏ, ví dụ, 2 cent cho một bài hát họ nghe trên internet hay 4 cent để đọc một bài báo.

Trên thực tế, mỗi giao dịch Bitcoin mất khoảng 8 phút để hoàn thành và chi phí 4 cent để xử lý. Và thay vì các khoản thanh toán nhỏ như trên, những nhà cung cấp nội dung đã đưa ra các gói thuê bao trả phí, và người dùng không phải đợi đến 8 phút để đọc bài báo mình muốn nữa, họ chỉ việc click chuột, và nội dung họ yêu cầu sẽ hiện ra.

Còn đối với chuyển tiền liên ngân hàng, cái tên Ripple thường được nhắc đến như một cái tên đầy hứa hẹn. Thế nhưng sau ba năm có mặt tại các ngân hàng chiếm đến 90% lượng ngoại tệ giao dịch trên toàn thế giới, trong 30 ngày cuối năm 2017, mạng lưới Ripple mới chỉ xử lý khoảng 2 tỷ USD – quá nhỏ bé so với quy mô mạng lưới liên ngân hàng SWIFT hiện tại.

Tại sao các ngân hàng không mặn mà với công nghệ mới này? Câu trả lời nằm ở việc cổng thanh toán Ripple Gateway thực ra không khác nhiều so với hệ thống tài khoản đối ứng hiện tại – ngoại trừ việc mất mật khẩu hay token bảo mật sẽ gây ra các thiệt hại lớn hơn nhiều. Ngoài ra các ngân hàng cũng đã có sổ cái, và không cần phải phân tán chúng, ẩn danh, mã hóa, công bố chúng, và làm chúng không thể đảo ngược để hoạt động hiệu quả.

Hợp đồng thông minh

Các hợp đồng thông minh là những hợp đồng được viết bằng phần mềm, thay vì các ngôn ngữ pháp lý. Vì bạn có thể mã hóa chúng trực tiếp trên blockchain, chúng có thể truyền giá trị dựa trên sự đồng thuận về mã hóa của các bên liên quan. Về mặt lý thuyết, các hợp đồng viết bằng phần mềm sẽ rẻ hơn khi diễn giải – bởi vì hoạt động của chúng hoàn toàn là toán học và tự động. Điều này cũng có nghĩa là các cuộc chiến pháp lý đắt đỏ sẽ không còn cần đến nữa.

Những nhà đầu tư và các startup trong lĩnh vực hợp đồng thông minh hứa hẹn rằng, blockchain sẽ cho phép việc thực thi và thanh toán diễn ra siêu nhanh. Ví dụ trong việc mua bảo hiểm y tế, “thay vì phải chờ đến 90-180 ngày để xử lý yêu cầu, hay chờ hàng giờ trên điện thoại để thanh toán hóa đơn, về lý thuyết nó có thể được thực hiện chỉ trong nháy mắt.”

Thế nhưng, điều này cũng đúng đối với bất kỳ hệ thống mua hàng dựa trên phần mềm nào. Ví dụ việc mở rộng sức mạnh máy chủ đám mây Amazon có thể diễn ra tự động dựa trên lượng truy cập vào website và tính phí trên những gì người mua sử dụng.

Ý tưởng cho rằng hợp đồng thông minh có thể thay đổi điều này là một sự ngộ nhận – họ cho rằng mình có thể dùng để thực thi hợp đồng pháp lý trong khi bản thân hợp đồng pháp lý đó đã được lập trình như phần mềm.

Điều khoản dịch vụ của Amazon không phải là hợp đồng thông minh, nhưng hệ thống thanh toán của họ đã thực thi các điều khoản đó như hợp đồng thông minh. Điều tương tự cũng đúng với việc thanh toán bảo hiểm y tế. Có lẽ ý tưởng của hợp đồng thông minh để tự động hóa việc thực thi rất thú vị nhưng nó giống như việc phát minh lại bánh xe vậy, mọi thứ đã có sẵn rồi.

Lưu trữ, điện toán và nhắn tin phi tập trung

Một ý tưởng đáng chú ý khác của blockchain là sử dụng nó như một cơ chế lưu trữ phân tán. Về cơ bản, bạn sẽ đặt tài liệu của mình vào các block, mã hóa chúng và đặt chúng vào một sổ cái phân tán … Nó sẽ được sao lưu ở nhiều nơi, bảo mật và dễ theo dõi xem điều gì đang xảy ra.

Nhưng cũng như các ứng dụng về hợp đồng thông minh hay khả năng chuyển khoản trực tiếp giữa các ngân hàng, các tác vụ về lưu trữ và điện toán này đã được các công ty cung cấp dịch vụ đám mây như Dropbox, Box.com, Microsoft, Google, Amazon hay thậm chí Apple, đều đang làm rất tốt. Không những thế, các công ty này còn đang cung cấp nhiều tính năng bổ sung khác rất có giá trị, hiệu quả hơn nhiều so với việc lưu trữ trên blockchain.

Ngoài ra, vẫn còn các vấn đề về bảo mật của blockchain. Đầu tiên, bạn dựa vào một lớp mã hóa duy nhất – mã khóa của riêng bạn – và nó sẽ kém hơn các hệ thống tinh vi với xác thực hai lớp, phát hiện xâm nhập, tường lửa và điều khiển IP từ xa, cũng như khả năng ngắt kết nối hệ thống trong trường hợp khẩn cấp xảy ra.

Hơn nữa, việc vận hành các chuỗi blockchain đang cho thấy hoạt động này thiểu hiệu quả năng lượng đến mức nào. Chuỗi blockchain Bitcoin tiêu tốn đến hàng tỷ USD tiền điện chỉ để mã hóa một lượng dữ liệu mà với 6 USD phí thuê bao hàng tháng, bạn có thể có được chúng từ các công ty dịch vụ lưu trữ đám mây kể trên.

Lập luận tương tự cũng đúng với các ứng dụng nhắn tin bảo mật hay điện toán phân tán trên blockchain. Việc mã hóa dữ liệu, lưu trữ và đồng bộ nó trên toàn bộ mạng lưới kéo theo vô số chi phí liên quan so với những gì bạn nhận được. Các giải pháp hữu hiệu và tuyệt vời cho các tác vụ này đã có sẵn trên thị trường, cũng như có khả năng mã hóa và đồng bộ mà mọi người cần và còn nhiều tính năng hữu ích khác nữa – tốt hơn nhiều so với giải pháp dựa trên blockchain.

Xác thực danh tính

Một ý tưởng khác cho tiềm năng blockchain là sử dụng khả năng đưa ra các tuyên bố công khai nhưng không thể chỉnh sửa hay xóa bỏ để ghi lại số phiếu bầu, xác nhận nguồn gốc của hàng hóa có thương hiệu, xác thực danh tính người dùng, giải quyết vấn đề về sở hữu tên miền, tiết lộ bằng sáng chế tạm thời, hoặc công chứng tài liệu, ….

Nhưng cũng như các ứng dụng trên của blockchain, lý do cho đến nay chúng chưa trở nên nổi bật trong thực tế là vì nó không thực sự là một bước đột phá so với những giải pháp truyền thống. Đối với việc bỏ phiếu, để đảm bảo tính ẩn danh của người bỏ phiếu cũng như lá phiếu bầu và người bỏ phiếu là một và chỉ một, các tờ giấy làm tốt hơn nhiều so với blockchain.

Còn với việc xác thực danh tính ư, công nghệ mã khóa công khai PGP đã có sẵn cho điều này. Còn nếu bạn muốn xác thực viên kim cương hay chiếc túi da bạn mua có nguồn gốc hợp pháp, công ty sản xuất chỉ cần đính kèm một chứng nhận xác thực online, như cách họ đã làm trong quá khứ.

Đối với việc sở hữu tên miền, dù lời hứa hẹn về một bản ghi kỹ thuật số cho các hợp đồng thông minh có vẻ hấp dẫn, nhưng trong thực tế, vẫn có khả năng các tên miền giá trị bị lọt vào tay các tên trộm do vấn đề về bảo mật, lúc này người ta thực sự cần ghi đè lên sổ cái để lấy lại tên miền đó. Việc chấp nhận blockchain có thể làm cho việc mạo danh hoặc trộm cắp còn nhiều hơn nữa chứ không ít đi.

Vậy còn lại gì cho blockchain?

Như đã thấy ở trên, với đại đa số các ý tưởng ứng dụng đáng chú ý nhất của blockchain cho đến thời điểm này, chúng đều đang được triển khai trên thực tiễn. Không chỉ vậy, chúng còn đều đang được thực hiện hiệu quả hơn hẳn so với việc triển khai trên blockchain, với chi phí thấp hơn hẳn so với khối lượng công việc nó triển khai được.

Vấn đề không chỉ nằm ở phía các ý tưởng ứng dụng blockchain, mà còn xuống sâu hơn khi nó đụng đến vấn đề bản chất của nền tảng này. Trong khi các chuỗi blockchain đều phụ thuộc vào mạng lưới phân tán từ người dùng với các máy tính có phần cứng hạn chế, các công ty cung cấp dịch vụ điện toán tập trung lại có ưu thế hơn hẳn về sức mạnh phần cứng và phần mềm tối ưu.

Bất chấp những lời hứa hẹn về tiềm năng của một nền tảng phân tán, việc chi phí quá lớn và hiệu năng thấp so với các giải pháp hiện tại khi thực hiện một tác vụ nào đó làm các ý tưởng ứng dụng cho blockchain vẫn cứ mãi nằm ở dạng tiềm năng. Việc đánh đổi quá lớn giữa chi phí lớn cho các lợi ích mơ hồ càng khiến nó trở nên xa cách hơn với người dùng thông thường.

Do vậy không lạ khi cho đến nay, ứng dụng phổ biến nhất của blockchain vẫn chỉ là các hoạt động đầu cơ tiền tệ và đôi khi đi kèm với nó là các giao dịch bất hợp pháp. Có lẽ tiềm năng của nó sẽ trở nên rõ ràng hơn khi năng lực phần cứng mạnh mẽ hơn trong tương lai, nhưng cho đến lúc đó, có lẽ hai ứng dụng này vẫn sẽ là những gì người ta nhắc đến nhiều nhất khi nói về blockchain.

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

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

Xem thêm tuyển dụng ngành cntt hấp dẫn trên TopDev

Cài đặt Elasticsearch trên CentOS

Cài đặt Elasticsearch trên CentOS

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

Trong bài viết này, TopDev sẽ hướng dẫn các bạn cách cài đặt Elasticsearch trên CentOS các bạn nhé. Elasticsearch, từ tên gọi của nó, các bạn cũng có thể đoán nó liên quan đến tìm kiếm phải không? Nó là một công cụ tìm kiếm được xây dựng từ Apache Lucene, giúp chúng ta tìm kiếm nhanh chóng sử dụng RESTful Web Service. Nó được phát triển bằng ngôn ngữ Java và là một hệ thống phân tán, có thể dễ dàng mở rộng.

  Cách cài đặt Android Studio phiên bản năm 2020
  Cài đặt Laravel

Đầu tiên, bởi vì mặc định các repository của CentOS không chứa package cài đặt của Elasticsearch nên chúng ta cần phải add repository của Elasticsearch vào.

Để làm được điều này, các bạn hãy chạy câu lệnh sau để thêm Elasticsearch public signing key vào máy của mình để package manager trust package từ Elasticsearch repository:

Kết quả của mình như sau:

Cài đặt Elasticsearch trên CentOS

Tiếp theo, các bạn cần tạo mới một tập tin để thêm Elasticsearch repository:

rồi thêm vào tập tin này nội dung như sau:

[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

Bây giờ thì các bạn có thể bắt đầu cài đặt Elasticsearch rồi,

Hãy chạy câu lệnh sau các bạn nhé:

Các bạn sẽ thấy Elasticseach được cài đặt như sau:

Cài đặt Elasticsearch trên CentOS

Nhập “Y” để tiếp tục các bạn nhé!

Kết quả cài đặt:

Cài đặt Elasticsearch trên CentOS

Mặc định thì Elasticsearch sẽ chạy ở port 9200 và chỉ truy cập được bằng localhost. Các bạn có thể chỉnh sửa cấu hình của Elasticsearch ở /etc/elasticsearch/elasticsearch.yml để thay đổi những điều này.

Sau khi chỉnh sửa xong thì có thể start Elasticseach service sử dụng câu lệnh:

Chạy Elasticsearch lúc khởi động máy:

Bây giờ, nếu các bạn mở trình duyệt rồi đi đến địa chỉ http://localhost:9200, các bạn sẽ thấy kết quả như sau:

Cài đặt Elasticsearch trên CentOS

Bài viết gốc được đăng tải tại huongdanjava.com
Có thể bạn quan tâm:
Xem thêm Việc làm Developer hấp dẫn trên TopDev

50+ tiêu đề tuyển dụng nhân sự cực ấn tượng, thu hút lượng tương tác cao

tiêu đề tuyển dụng
tiêu đề tuyển dụng

Nhu cầu về tuyển dụng ngày cao. Do vậy, các thách thức đặt ra là liệu làm thế nào để lập kế hoạch truyền thông cho việc tuyển dụng. Hiểu được nhu cầu đó, một trong số những cách thức được tối ưu chính là tập trung truyền tải thông điệp tuyển dụng thông qua các tiêu đề tuyển dụng.

Tiêu đề tin tuyển dụng thật sự có ý nghĩa quan trọng; góp phần không nhỏ đến việc thu hút các ứng viên tiềm năng. Cùng TopDev điểm qua Top 50+ tiêu đề viết bài tuyển dụng cực thu hút; giúp tạo ấn tượng mạnh đối với ứng viên.

Một số lưu ý khi viết tiêu đề tuyển dụng

Đối tượng bạn hướng đến là rất quan trọng. Cụ thể bạn cần xác định rõ các users của mình là ai: những người tìm việc, nền tảng tuyển dụng, mô hình web trung gian kết nối công ty tuyển dụng trực tuyến,…

tiêu đề tuyển dụng
tiêu đề tuyển dụng

Từ cơ sở đó, bạn mới biết rõ và nắm được các đặc tính để thiết lập nên những tiêu đề  tin tuyển dụng hấp dẫn. Việc bạn cần làm sau này chỉ là thu hút, tạo điểm nhấn để các ứng viên có thể tìm kiếm, khai thác thông tin từ các bài tin tiêu đề tuyển dụng.

Những tips giúp tiêu đề tuyển dụng cực thu hút

Trước khi đến với những tiêu đề tuyển dụng cụ thể, chúng ta cùng checklist các tip sau đây để có những hiểu biết cơ bản về cách thức tiếp cận; viết một tiêu đề tuyển dụng gây “thương nhớ” các ứng viên.

Làm CV Online tại đây

1. Chú trọng dùng các thuật ngữ phổ biến – thông dụng

Thuật ngữ thông dụng có tính phổ quát, dễ hiểu và dễ tiếp cận nhất với đa số mọi đối tượng người đọc. Sử dụng thuật ngữ chuyên biệt tạo ra một  rào cản lớn trong việc hiểu và tiếp cận chính xác thông tin người đăng tin tuyển dụng muốn truyền tải.

Do vậy, bạn nên sử dụng các thuật ngữ thông dụng, có tính chất đại chúng. Đừng dùng thuật ngữ riêng vì bản chất thực tế, bạn còn không hiểu chính xác về nghĩa của chúng.

Tùy từng vấn đề, các trường hợp và vị trí cụ thể, việc dùng thuật ngữ sẽ tự linh động đáp ứng. Tuy nhiên, vẫn phải đảm bảo mọi thông điệp phải đúng trọng tâm, không gây mơ hồ.

2. Quy ước chung về việc sử dụng bộ từ ngữ để mô tả công việc  

Ở đây, chúng ta có thể hiểu là việc sử dụng các từ ngữ có tính chất kết nối; được xác lập trong một bộ từ ngữ chung nhằm áp dụng để giải quyết các vấn đề trọng tâm xoay quanh nội dung và tiêu đề tuyển dụng.

Các từ ngữ cần chung một trường từ vựng và không bị lạc quá xa so với phạm vi nghĩa chung được sử dụng đối với lĩnh vực tuyển dụng nhân sự.

Hãy lọc ra các bộ từ ngữ quan trọng, phù hợp và rồi triển khai chúng trong từng bài viết, tiêu để tin tuyển dụng. Như thế, nội dung và thông điệp sẽ đều được tối ưu hóa một cách tốt nhất.

3. Tập trung vào tiêu đề viết bài tuyển dụng nhưng đừng đặt áp lực vào nó!

Tiêu đề tuyển dụng cần bạn tập trung để tạo nên các điểm nhấn. Tức mặt hình thức, gây ấn tượng thẩm mỹ và kích thích sự tò mò. Đó là những lý do tại sao có nhiều tiêu đề giật tít ra đời.

Tuy nhiên, nếu một chiến lược tuyển dụng có thể đạt được hiệu quả, bạn cần quan tâm đến việc cân bằng giữa hình thức lẫn nội dung bên trong. Đừng cố gắng sáng tạo các tiêu đề tin tuyển dụng; quên đi trọng tâm nội dung tuyển dụng phải được ứng viên nắm rõ.

4. Truyền thông và duy trì tính ổn định về khả năng tìm kiếm của tiêu đề tuyển dụng

Khi đã có những tiêu đề chuẩn – hấp dẫn ứng viên. Việc bạn cần làm là đặt ra các giải pháp để truyền thông cho nó. Có thể chia sẻ bài bài viết, tiêu đề tuyển dụng trên các nền tảng khác nhau.

tiêu đề tuyển dụng
tiêu đề tuyển dụng

Từ những hướng đi đó, bạn cần đạt được sự ổn định và khả năng tìm kiếm của tiêu đề tuyển dụng. Đo lượng mức độ, phân tích chúng để có một chiến lược nâng cao hơn cho những định hướng phát triển tiếp theo.

5. Thông tin tuyển dụng chính xác, phù hợp

Chính xác ở đây được hiểu là việc bạn tiếp cận, xây dựng, hoàn thiện và phát triển nội dung tiêu đề lẫn nội dung về vị trí tuyển dụng.

Nếu tuyển dụng về các vị trí như tuyển dụng data scientist, senior developer,… thì tiêu đề cần phải rõ ràng, tránh mơ hồ chung chung. Ngành IT có rất nhiều vị trí, bạn cần tối ưu chuẩn các vị trí. Đồng thời, nội dung tuyển dụng cũng cần phải trình bày cụ thể, để không khiến các ứng viên có sư nhầm lẫn đến các vị trí khác có liên quan.

Tiêu để tin tuyển dụng và nội dung tuyển dụng cần có sự phụ ứng, đồng nhất với nhau. Đó là điều thật sự quan trọng và bạn cần phải lưu tâm. 

Top 50+ tiêu đề tuyển dụng nhân sự cực thu hút cho ứng viên tài năng

Làm CV Online tại đây

tiêu đề tuyển dụng

Tiêu đề tuyển dụng thông dụng nhất

  1. Việc làm Nhân sự lương cao
  2. Top việc làm nhân sự, tuyển dụng nhân sự cực hot
  3. Tổng hợp các vị trí việc làm Nhân sự hot nhất hiện này
  4. Tuyển dụng Nhân sự – Việc tốt & Lương cao
  5. Cơ hội phát triển nghề nghiệp cho các vị trí Nhân sự hấp dẫn
  6. Tuyển dụng Nhân sự đi làm ngay
  7. Nhiều vị trí nhân sự tuyển dụng – Lương thưởng tốt
  8. Tuyển dụng – Tìm việc lương cao cực kỳ hấp dẫn
  9. Cơ hội cho sinh viên mới ra trường – Nhiều vị trí Nhân sự chất lượng
  10. Gấp – Tuyển dụng nguồn lực Nhân sự tiềm năng
  11. Tuyển dụng việc làm Nhân sự tại Hồ Chí Minh
  12. Ngành Nhân sự – Tuyển dụng các vị trí hấp dẫn lao động trẻ
  13. Tuyển dụng nhân sự đa ngành nghề – Thu nhập cao
  14. Tuyển dụng Nhân viên Nhân sự  – Việc tốt & Lương cao
  15. Nhân viên Nhân sự  – Cơ hội trải nghiệm từ các Tập đoàn đa quốc gia
  16. Tuyển dụng các vị trí Nhân sự đa ngành
  17.  Tìm việc, tuyển dụng Nhân sự lương cao uy tín nhất
  18. Tuyển dụng hàng trăm vị trí Nhân sự với mức lương cực kỷ hấp dẫn
  19.  Cơ hội trở thành ứng viên nhân sự tiềm năng cho các Tập đoàn lớn
  20. Tuyển dụng vị trí Nhân sự cấp cao – Cơ hội lớn dành cho các bạn trẻ
  21.  Tuyển dụng việc làm Nhân sự không yêu cầu kinh nghiệm
  22.  Cập nhật 20 vị trí tuyển dụng nhân sự tại….
  23.  Tuyển dụng nhân sự Part-time và Full-time (Toàn thời gian)
  24.  Nhiều vị trí tuyển dụng nhân sự với mức lương cao
  25. Tuyển dụng nhân sự mới  – Nhiều vị trí Nhân sự hot
  26. Các việc làm nhân sự mới nổi – Thu nhập ổn định
  27. Tổng hợp việc làm Nhân sự nổi bật nhất

Tiêu đề có yếu tố sáng tạo trong câu từ

  1. Chiêu mô anh tài Nhân sự 
  2. Tuyển dụng CTV, Part-time, Toàn thời gian cho các vị Nhân sự mới
  3. Phỏng vấn đi làm ngay – Tuyển dụng lương offer cao
  4. Tuyển Nhân sự cho các vị trí 
  5. Tuyển đồng đội Cộng tác viên, Intern, Part-Time, Full-time, Freelancer 
  6. Job nhân sự mới – Apply liền tay, chớp ngay cơ hội
  7. Hot Job tuyển dụng các vị trí Nhân sự  – Apply ngay kẻo lỡ
  8. Bạn sẽ là ứng viên tiềm năng? – Tuyển dụng Nhân sự cho các vị trí mới
  9. Truy tìm đồng đội nhân sự mới, lương thưởng hấp dẫn
  10. Cơ hội lớn để bước vào ngành Nhân sự 
  11. O tròn như quả trứng gà; Ô thì đội mũ; Ơ thì Job ngon – Tìm đông đội nhân sự, trải nghiệm tại các tập đoàn tiềm năng
  12. Tuyển dụng vị trí nhân sự – phúc lợi ổn định
  13. Các cơ hội tuyển dụng nhân sự hot nhất
  14. Tuyển dụng lương hấp dẫn, môi trường năng động – thăng tiến nhanh
  15. Việc làm Hot cho các bạn đam mê ngành Nhân sự
  16. Gió đưa cành trúc la đà – Ai chưa có việc thì vào Apply
  17. Nếu là tín đồ của ngành Nhân sự  – Đừng bỏ qua Job này!
  18. Ứng tuyển Job HR ngon  – Pass phỏng vấn – Đi làm ngay!
  19. Tìm đồng đội Nhân sự cùng chiến với các Project
  20. Apply tiền tay – Có ngay việc mới
  21. Cơ hội cho các bạn yêu thích ngành Nhân sự
  22. Tuyển gấp các đồng đội Nhân sự  – Lương up to hấp dẫp
  23. Truy tìm ứng viên Nhân sự tiềm năng cho các dự án
  24. Top những vị trí nhân sự hot nhất
  25. Đi đầu mà vội mà vàng  – Dừng chân đứng lại một hàng Job ngon
  26. Thách thức mới với vị trí Nhân sự – Bạn có dám thử không

Lời kết

Mỗi tiêu đề được đặt ra đều có ý nghĩa. Bạn cần nắm rõ những lưu ý về việc tổ chức xây dựng nội dung tiêu đề sao cho thu hút. TopDev hi vọng, bài viết đã có những chia sẻ bổ ích cho bạn đọc.


Tuyển Dụng Nhân Tài IT Cùng TopDev
Đăng ký nhận ưu đãi & tư vấn về các giải pháp Tuyển dụng IT & Xây dựng Thương hiệu tuyển dụng ngay!
Hotline: 028.6273.3496 – Email: contact@topdev.vn
Dịch vụ: https://topdev.vn/page/products

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

Xem thêm việc làm ngành it hàng đầu tại TopDev

Những chứng chỉ cần có của một quản lý công nghệ thông tin

chứng chỉ it
Những chứng chỉ cần có của một quản lý công nghệ thông tin

Tác giả: Ryan Vergara

Giới thiệu

Chúng ta đang sống trong thời kỳ công nghệ 4.0 chính vì vậy nên các vị trí công việc dành cho lĩnh vực công nghệ thông tin ngày một nhiều hơn. Và để vươn lên vị trí là một quản lý công nghệ thông tin, bên cạnh kỹ năng và kiến thức, bạn cần có những bằng cấp liên quan để chứng minh năng lực của mình với nhà tuyển dụng.

lập trình
Có thêm những chứng chỉ này giúp việc thăng tiến phần nào “nhẹ nhàng” hơn

Những chứng chỉ IT cần có một quản lý công nghệ thông tin

Cisco Certified Network Associate (CCNA)

CCNA có lẽ là bằng phổ biến và quen thuộc nhất hiện tại dành cho các chuyên gia CNTT. Đây là một khóa học cấp chứng chỉ trung cấp. Người sở hữu bằng CCNA là người có năng lực trong việc định cấu hình, vận hành và khắc phục sự cố mạng được định tuyến.

Để có được chứng chỉ này, bạn phải vượt qua kỳ thi CCNA 200-301. Trong đó bài kiểm tra này đề cập đến các nguyên tắc cơ bản về bảo mật mạng, giao thức internet, tự động hóa và các kỹ năng liên quan đến bảo mật khác.

Xem thêm các việc làm tại Gear Inc tuyển dụng hấp dẫn với TopDev

Kỳ thi bao gồm 120 câu hỏi trong đó mỗi câu hỏi có một điểm liên quan. Để vượt qua kỳ thi, bạn phải có số điểm ít nhất là 800 (điểm cao nhất có thể đạt được là 1.000). Chi phí cho kỳ thi này là 300 USD.

Chứng chỉ IT Cisco Certified Network Professional (CCNP)

Trong khi CCNA là chứng chỉ bao gồm các cấp độ kỹ năng từ cơ bản đến trung cấp, chứng chỉ Cisco Certified Network Professional là chứng chỉ dành cho những người muốn đạt được trình độ cao hơn, có tính chuyên môn sâu hơn.

Để sở hữu chứng chỉ CCNP, ứng viên phải trải qua hai kỳ thi: kỳ thi cốt lõi bao gồm các khái niệm mạng cơ bản và kỳ thi tập trung trong bất kỳ lĩnh vực trọng tâm dự định (thiết kế mạng, tự động hóa, v.v.).

Tốt nhất bạn nên lấy chứng chỉ CCNP sau ít nhất ba năm kinh nghiệm trong ngành này. Bạn không cần phải thi CCNA trước khi thi CCNP. Chi phí cho các kỳ thi CCNP nằm trong khoảng từ 900 – 1200 USD.

Xem thêm các việc làm tuyển dụng Tester chưa có kinh nghiệp hấp dẫn tại TopDev

Secure Access Service Edge (SASE)

SASE là một công nghệ mới (được giới thiệu trong “Tương lai của An ninh mạng là trong đám mây” của tác giả Gartner). Kiến trúc này tích hợp Mạng diện rộng (WAN) và một số giao thức bảo mật riêng của đám mây.

Cato Networks là một công ty cung cấp nền tảng SASE dựa trên đám mây và họ cũng cung cấp một khóa học cấp chứng chỉ cho SASE để bạn có thể làm quen với công nghệ mới này. Đối với kiến ​​trúc cụ thể này, trung tâm truy cập mạng của một công ty là các trung tâm dữ liệu vật lý của nó. Đối với SASE, trung tâm đó chuyển qua đám mây.

Xem thêm 15 chứng chỉ “vàng” đáng giá trong ngành lập trình

Tóm lại, SASE giúp các Nhà quản lý CNTT quản lý mạng hiệu quả hơn vì nó loại bỏ một số phức tạp liên quan đến thiết lập trung tâm dữ liệu vật lý truyền thống. Để được cấp chứng chỉ SASE, bạn cần tham gia khóa học SASE Expert Level 1 và vượt qua bài kiểm tra liên quan (điểm tối thiểu phải là 85%).

chứng chỉ IT
Có nhiều loại chứng chỉ IT khác nhau để các dev tham khảo

Chứng chỉ CompTIA cloud+

CompTIA’s cloud+ của CompTIA dành cho những người muốn tìm hiểu việc quản trị hệ thống, bảo trì dịch vụ đám mây cũng như các kiến ​​thức và kỹ năng liên quan đến hệ thống mạng khác.

Hiện tại, để có thể lấy chứng chỉ này bạn phải tham gia hai kỳ thi với điều kiện cần có là ít nhất 2 năm kinh nghiệm làm việc trong ngành.

CV0-002 (ra mắt vào tháng 2 năm 2018) được thiết kế cho các ứng viên bao gồm tích hợp các giải pháp khác nhau vào một hệ thống dành riêng cho doanh nghiệp. Nó có tối đa 90 câu hỏi và có thể được thực hiện trong 90 phút. Điểm đậu (từ 100 đến 900) là 750. Chi phí để tham dự kỳ thi này là 329 USD.

CV0-003 (vẫn đang ở chế độ beta) được thiết kế để các ứng cử viên không có khả năng tạo ra các giải pháp cho tổ chức của họ. Nó có 110 câu hỏi có thể được trả lời trong 165 phút. Hiện tại, không có bất kỳ điểm vượt qua cuối cùng nào và vì nó đang ở giai đoạn thử nghiệm, chi phí để có chứng nhận cụ thể này chỉ là 50 USD.

  AWS, Azure và Google Cloud là gì? Chứng chỉ nào tốt nhất cho sự nghiệp của bạn?

AWS Certified Solutions Architect

Chứng chỉ này của AWS dành cho các chuyên gia thiết kế kiến ​​trúc mạng liên quan đến AWS. Nó yêu cầu ứng viên có ít nhất hai năm kinh nghiệm trong việc vận hành và quản lý các ứng dụng AWS.

Đây là một trong những chứng chỉ được tìm kiếm nhiều hiện nay vì Amazon là nhà cung cấp hàng đầu cho các dịch vụ điện toán đám mây. Do đó, ngày càng nhiều tổ chức thuê các chuyên gia có thể điều hướng thông qua cơ sở hạ tầng này.

Với mức giá 300 USD để tham gia kỳ thi, bạn nên chuẩn bị cho kỳ thi thật kỹ lưỡng. Điều tuyệt vời là Amazon cung cấp một số tài liệu chuẩn bị cho những người quan tâm đến việc đạt được chứng nhận được đánh giá cao này.

Xem thêm các việc làm tuyển dụng Tester HCM hấp dẫn tại TopDev

Salesforce Certified Development Lifecycle and Deployment

Vì Salesforce là một giải pháp quan trọng của các doanh nghiệp CRM nên các tổ chức thường dựa vào nền tảng SaaS này để quản lý mối quan hệ của họ với khách hàng cũng như cung cấp quyền truy cập tập trung cho các bộ phận liên quan.

Kỳ thi này cũng có một mức giá khá cao 400 USD. Đề thi có 60 câu hỏi trắc nghiệm và yêu cầu thí sinh trả lời đúng ít nhất 60% trong số đó. Những người không đạt kỳ thi được phép thi lại với lệ phí 200 USD.

Xem thêm các việc làm tại Gear Inc tuyển dụng hấp dẫn với TopDev

Kết luận

Những chứng chỉ này hoàn toàn không phải là những chứng chỉ duy nhất có thể nâng cao kỹ năng của Người quản lý CNTT mà còn có nhiều chứng chỉ khác để bạn tham khảo thêm. Việc có thêm các chứng chỉ chuyên môn không chỉ giúp bạn làm việc hiệu quả hơn mà còn là cơ hội cho triển vọng nghề nghiệp tương lai của mình.

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

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

Xem thêm việc làm tuyển dụng Tester hấp dẫn tại TopDev

JavaScript Executor trong Selenium Webdriver

JavaScript Executor trong Selenium Webdriver

Bài viết được sự cho phép của tác giả Vân Anh

Hôm nay sẽ cùng các bạn tóm lược về thành phần khá là mạnh mẽ trong Selenium Webdriver như tiêu đề bài viết. Hi vọng rằng bài viết sẽ giúp các bạn biết hơn về Javascript Executor còn có hiểu hơn không thì chưa biết. :v

1. Tổng quan về Javascript Executor

Javascript Executor là một interface của Selenium Webdriver, nó có chức năng tương tự như của Java Script và có thể tương tác với các phần tử HTML DOM. Thay vì sử dụng method driver.findElement của Selenium Webdriver thì chúng ta có thể sử dụng JavaScriptExecutor Interface để thực hiện những thao tác tương tự trên trang ứng dụng.

Javascript Executor cho phép chúng ta có thể chạy mã Javascript thuần túy bất kể là chúng ta đang sử dụng ngôn ngữ nào với Selenium như Java, C# hay Python…

Thường thì chúng ta sẽ chỉ sử dụng Javascript Executor trong những trường hợp mà khi sử dụng các method thông thường khác với Selenium nó không thể thực thi được như mong muốn.

Để sử dụng được Javascript Executor, không nhất thiết bạn phải có kiến thức và hiểu biết quá sâu về Javascript mới làm được, một thực tế là bạn chỉ cần tìm kiếm Google là ra cả tá :v từ Stackoverflow cho đến Guru99 hay ToolSQA … sau đó copy về dùng thôi. Nhưng sẽ tốt hơn nếu bạn hiểu về nó, để có thể linh hoạt sử dụng trong nhiều những trường hợp có thể gặp sau này! 

Như đã nói phía trên, Javascript là một interface thuộc package org.openqa.selenium trongSelenium Webdriver. Có hai abstract method là:

  1. executeScript()
  2. executeAsyncScript()

Để sử dụng các method trong Javascript Executor interface ta phải ép đối tượng driver thành kiểu Javascript Executor, theo cú pháp dưới đây:

// chuyển kiểu của đối tượng driver thành JavascriptExecutor
JavascriptExecutor js = (JavascriptExecutor) driver;

// sử dụng các methods
js.executeScript("javascript command");
js.executeAsyncScript("javascript command");

Hầu như là chúng ta sẽ sử dụng method executeScript() còn về executeAsyncScript() mình cũng chưa dùng và chưa tìm hiểu nên sẽ không nhắc đến ở đây – nên cũng đừng thắc mắc mình nha. :v

Tham khảo tin đăng tuyển Javascript mới nhất trên TopDev

Bên cạnh cú pháp trên, cũng có một cách khác ngắn hơn để sử dụng Javascript Executor, nhưng theo khuyến cáo đây không phải là cách hoàn hảo nhất, tuy nhiên khi tìm kiếm từ Google lại ra rất nhiều kết quả hướng dẫn giống như này và mình cũng chưa hiểu tại sao mà nó lại không phải là một cách hoàn hảo nhất như lời khuyến cáo  :

((JavascriptExecutor) driver).executeScript("javascript command");
  Giới thiệu về Reactive Programing trong javascript

2. Sử dụng Javascript Executor

2.1. Tìm 1 phần tử với Javascript Executor (Find an element)

Ở ví dụ phía dưới, mình sử dụng ID để tìm một phần tử trên một trang, chúng ta cũng có thể thay bằng các thuộc tính khác tương ứng của phần tử cần tìm như Name, hay CSS.

Cú pháp:

JavascriptExecutor js = (JavascriptExecutor) driver;
Object searchTextbar = js.executeScript
                       ("return document.getElementById('lst-ib')");
((WebElement) searchTextbar).sendKeys("abc");

2.2. Click vào một phần tử nào đó (Click an element)

Tương tự như khi tìm kiếm một phần tử, với Javascript Executor ta cũng có thể thực hiện thao tác click vào một phần tử dựa trên thông tin của phần tử đó. Ở ví dụ phía dưới đây mình thực hiện lấy phần tử dựa theo tên của nó, ta có cú pháp như sau:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementsByName('btnI')[0].click()");

2.3. Thực hiện sendKey

Ta có thể sử dụng Javascript Executor để thực hiện truyền giá trị cho các phần tử cho phép nhập dữ liệu là textbox hay text area trong Selenium Webdriver. Các bạn có thể tham khảo cú pháp dưới đây:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementById('lst-ib').value='chercher tech'");

2.4. Thực hiện scroll webpage (cuộn trang)

Trường hợp này có lẽ là quen thuộc hơn cả, đó là khi mà trang ứng dụng quá dài, và không thể hiển thị hết chiều dài nội dung trong khung màn hình được, do vậy mà ta sẽ cần phải thực hiện cuộn trang để có thể di chuyển đến vị trí tọa độ cụ thể mong muốn trên trang ứng dụng. Đây là công việc mà ta sẽ không thể dùng Selenium webdriver để thực hiện được. Lúc này, Javascript Executor sẽ giúp bạn làm việc này một cách dễ dàng, với cú pháp:

JavascriptExecutor js = (JavascriptExecutor)driver;
js.executeScript("window.scrollBy(0,300)");

Giải thích một chút chỗ js.executeScript(“window.scrollBy(0,300)”);

scrollBy(horizontalDistance,verticalDistance): ta có hai tham số đầu vào là:

  1. horizontalDistance – Là khoảng cách được cuộn theo chiều ngang
  2. verticalDistance – Khoảng cách được cuộn theo chiều dọc

Như ví dụ phía trên mình có scrollBy(0, 300) có nghĩa là cuộn xuống phía dưới 300px theo chiều dài của trang web. Tương tự bạn có thể thay bằng các giá trị khác tùy theo yêu cầu và mong muốn.

  Javascript ES6 – Đôi điều thú vị có thể bạn chưa biết

2.5. Scroll into view

Vốn từ mình hơi ít nên không biết dùng từ diễn đạt sang Tiếng Việt như nào cho dễ hiểu, ở đây có thể hiểu nôm na rằng là cuộn trang đến một vùng cụ thể hoặc một phần tử cụ thể nào đó trên trang. Ví dụ: ta có thể gặp trường hợp như muốn tương tác đến một trường A nào đó trên trang ứng dụng, nhưng vì có nhiều thông tin nên trường này không thể hiển thị được trên một màn hình mà phải cuộn  trang web xuống phía dưới trường này để nhập thông tin, lúc này sử dụng “scroll into view” để cuộn xuống phía dưới, ta sẽ nhìn thấy trường này ở trên màn hình hiển thị, và cho đến thời điểm này bạn mới thực hiện tương tác được với trường A thông qua Selenium.

Không biết với ví dụ trên các bạn đã hình dung được chưa, nhưng tóm váy lại là Javascript Executor có thể giúp bạn làm cái công việc mô tả loằng ngoằng phía trên kia.

Ta sử dụng hàm scrollIntoView() – tên gọi đúng như mục đích sử dụng, và có cú pháp như sau:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("document.getElementById('default').scrollIntoView(true)");

2.6. Một số việc khác mà Javascript Executor có thể làm được

Bên cạnh những công việc bên trên Javascript Executor có thể xử lý ngon lành thì cũng còn có rất nhiều những tác vụ khác mà ta có thể “lợi dụng” Javascript Executor làm nếu thấy “thích” như:

1. Lấy ra thông tin title của ứng dụng web với cú pháp:

js.executeScript("return document.title");

2. Lấy ra thông tin địa chỉ URL của ứng dụng:

js.executeScript("return document.URL");

3. Kiểm tra trạng thái của trang web đã được tải về hay chưa:

js.executeScript("return document.readyState");

4. Điều chỉnh mức độ phóng to thu nhỏ hiển thị của nội dung trang web:

js.executeScript("document.body.style.zoom='90");

5. Lấy ra thông tin về kích thước của ứng dụng web:

// Độ cao
js.executeScript("window.innerHeight");
// Độ rộng
js.executeScript("window.innerWidth");

6. Lấy ra thông tin về kích thước của trình duyệt:

js.executeScript("window.outerHeight");
js.executeScript("window.outerWidth");

7. Điều hướng đến một địa chỉ URL nào đó:

js.executeScript("window.location="https://google.com";");

Và còn kha khá những thứ hay ho khác nữa. Tuy nhiên chắc chẳng mấy khi dùng đến đâu ấy, liệt kê ra cho mọi người biết được là Javascript Executor đích thị là một “soái ca” hay ho và đa năng :v. Có cái gì mà anh không làm được đâu? Chỉ là các em không biết tận dụng anh thôi =))

Nhưng mà có phải Javascript Executor thực sự không có nhược điểm gì? Đọc tiếp để xem “soái ca” này cuối cùng có phải là “Mr. Right” với Selenium Webdriver không nhé!

  JavaScript là gì? Làm thế nào để trở thành lập trình viên JavaScript?

3. Javascript Executor có phải là “soái ca” đích thực?

Đầu tiên phải nhắc lại một lần rằng, Selenium Webdriver hoạt động tương tự như một người dùng cụ thể của ứng dụng. Selenium Webdriver thực thi những thao tác mà một người dùng thực sự có thể làm đối với một phần tử nào đó trên ứng dụng web.

Nếu như trên thực tế, Selenium Webdriver không thể tương tác với một phần tử nào đó trên trang ứng dụng thì ta cũng cần phải cân nhắc xem liệu rằng đó có phải là một lỗi hay không trước khi sử dụng Javascript Executor để ép buộc nó phải chạy theo ý mình. Biết đâu lỗi thật thì có phải là nguy hiểm không? :v

Bạn nên kiểm tra kỹ trên tất cả các trình duyệt với code Selenium Webdriver thông thường (các trình duyệt mà ứng dụng được yêu cầu cần phải được test), có thể phần tử đó chỉ có thể hoạt động đúng trên một trình duyệt nào đó – thì có thể cân nhắc sử dụng Javascript Executor, còn nếu như trên tất cả trình duyệt bạn kiểm tra, phần tử đó không hoạt động đúng thì cần đánh False testcase thay vì sử dụng Javascript Executor.

Điều này sẽ đảm bảo rằng bạn không bị lọt bug, trong trường hợp sử dụng Javascript Executor thì có thể chạy ngon lành nhưng trên thực tế thì phần tử đó lại không hiển thị, (do một vài lỗi trong quá trình phát triển) và đối với người dùng thực tế bằng xương bằng thịt lại chẳng thể thao tác được.

[[ Tất nhiên sẽ không tính những trường hợp đặc biệt khác – mà bắt buộc phải sử dụng Javascript Executor mới làm được. ]]

Thế nên đã trả lời cho các bạn rằng, đây cũng có thể là một “sói ca” và các bạn cần hết sức cẩn trọng nhé! 

Hi vọng rằng bài viết sẽ giúp các bạn có thêm thông tin hữu ích về Javasript Executor trong Selenium Webdriver.

Các bạn cũng có thể tham khảo thêm tại link:

https://chercher.tech/java/javascript-executor-selenium-webdriver#sendkeys

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

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

Phân biệt các thuật ngữ trong Distributed System (Tập 2)

distributed system

Bài viết được sự cho phép của tác giả Edward Thiên Hoàng

SCALABILITY – KHẢ NĂNG MỞ RỘNG

Scalability hay gọi tắt là scale là yếu tố đầu tiên mà architect sẽ consider khi thiết kế hệ thống. Làm sao để hệ thống sẽ scale được với kiến trúc và công nghệ đã chọn. Một hệ thống được gọi là có khả năng scale nếu có thiết kế để làm sao có thể add/remove thêm tính năng, module vào một cách dễ dàng, hay làm sao để có thể tiếp nhận một lượng lớn các request tăng đột biến do nhu cầu sử dụng của user tăng lên.

  Giải mã bí ẩn "system load" trên Linux
  Phân biệt các thuật ngữ trong Distributed System (Tập 1)

Về vấn đề thêm thắt module vào hệ thống, chúng ta có thể quay về với nguyên lý thiết kế Open-Closed trong SOLID, một hệ thống cần phải được thiết kế để có thể dễ dàng, open cho sự thay đổi mà vẫn close, không được đập đi làm lại. Ở mức độ coding thì có thể hiểu là sử dụng interface, abstract class để isolate, tách bạch detail implementation và các quy tắc, contract. Hoặc sử dụng các message queue để loose coupling giữa các components.

Còn về việc đáp ứng lưu lượng request lớn thì đòi hỏi system phải có các tính chất eslasticity, giúp co giãn kích thước hợp lý. Khi có nhiều request thì cần scale out hoặc scale up các component để tăng tải, còn khi nhàn rỗi thì lại scale in hoặc down để tiết kiệm chi phí. Hoặc áp dụng các kỹ thuật caching, CQRS, non-blocking để tăng performance

RESILIENCY – KHẢ NĂNG PHỤC HỒI

Resiliency cũng là một yếu tố để bảo đảm tính Reliability của hệ thống. Resiliency đề cập đến các kỹ thuật để giúp khắc phục các lỗi trong quá trình vận hành. Một số kỹ thuật được nhắc đến như health check, monitoring và self healing (tự chữa bệnh, một component tự nhiên lăn ra chết thì phải tự mà sống dậy), circuit breaker and retry (bộ ngắt mạch, để tránh xảy ra sự cố dây chuyền), fail-over (chuyển sang node khác để tiếp tục vận hành)

Dự phòng và khả năng phục hồi thường bị nhầm lẫn với nhau. Tuy cả hai đều có liên quan với nhau nhưng chúng không thể hoán đổi cho nhau. Dự phòng có thể hiểu là việc thực hiện để ngăn chặn thất bại, ngụ ý rằng nó sẽ xảy ra trước khi một vấn đề xảy ra. Khả năng phục hồi liên quan đến việc tìm giải pháp sau khi một vấn đề đã xảy ra. Tóm lại, dự phòng là trước khi vấn đề xảy ra, ngược lại phục hồi là sau khi vấn đề xảy ra.

Ví dụ, cơ sở dữ liệu dự phòng với khả năng replication có thể được tận dụng. Nhiều thành phần và bản sao của dữ liệu tạo ra một redundant design. Nếu primary side của cặp cơ sở dữ liệu không thành công, primary side sẽ đẩy mạnh đến primary và bắt đầu nhận tải trong lúc bên failed side tự sửa lỗi. Chức năng failover và self-healing chính là khả năng phục hồi. Cả hai đều có liên quan, nhưng không thể hoán đổi cho nhau.

DISASTER RECOVERY – KHÔI PHỤC SAU THẢM HỌA

Disaster recovery cũng giống như Resiliency đều là những phương pháp để khắc phục lỗi, nhưng khác ở chỗ Resiliency chỉ giải quyết các vấn đề về vận hành và lỗi ứng dụng, hoặc sự cố cục bộ. Còn disaster recovery nó ở đẳng cấp khác, đẳng cấp của thảm họa như động đất, sóng thần, bom đạn. Rõ ràng không ai muốn có thảm họa xảy ra. Tuy nhiên trong thực tế, đã có case như vậy, đơn cử là vụ sập điện tại bang Virginia của Mỹ khiến do bão gây ra khiến cho các data center của AWS ở đó sập hoàn toàn, trên phạm vi toàn region, khiến rất nhiều website sử dụng dịch vụ này bao gồm Pinterest, Netfilx, Heroku… “tắt điện” nhiều giờ liền.

Thật ra thì mình cũng chưa đạt đến tầm phải consider đến các thảm họa khi thiết kế hệ thống, vì chi phí cho việc dự phòng rủi ro thảm họa là không nhỏ. Bạn phải deploy, backup các server ở nhiều region địa lý khác nhau để khi 1 region sập thì có thể fail-over sang region khác. Thôi thì đợi có deal to như của Netflix rồi tính cũng không muộn, chứ Multi-AZ cũng đủ xài đối với đa số hệ thống.

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

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

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

Chương Trình Giả Lập trong kiểm thử di động

Chương Trình Giả Lập trong kiểm thử di động

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

Theo thống kê, trong kiểm thử di dộng, chúng ta phải kiểm thử các phần mềm trên khoảng 30-40 thiết bị trên thị trường, và 30% trong số đó bị lỗi thời trong vòng một quí. Ôi… $$$$. Bên cạnh đó, sử dụng thiết bị thật sẽ gặp phải các vấn đề về bảo mật như mở cổng USB để chia sẻ dữ liệu hay nguy cơ mất thiết bị trong môi trường làm việc.

  Biện hộ: Vì sao các Developer không test phần mềm của họ?
  Các công cụ hữu ích hỗ trợ bạn trong việc tạo testdata

Để khắc phục các vấn đề này, chúng ta có thể sử dụng các Chương Trình Giả Lập thiết bị – Emulator/Simulator – trong việc kiểm thử của chúng ta.

Phân biệt Emulator – Simulator

Về cơ bản, cả hai Emulator/Simulator đều chỉ về các chương trình Giả Lập thiết bị di động, nhưng bên cạnh đó, hai thứ có những khác biệt rất đặc trưng.

Simulator:

  • Các chương trình thuộc về Simulator hướng về giả lập các hành vi của thiết bị.
  • Các chương trình thuộc về Simulator chỉ có thể giả lập được phần mềm – Software.

Emulator:

  • Các chương trình thuộc về Emulator hướng về giả lập các công việc bên trong của thiết bị.
  • Các chương trình thuộc về Emulator giả lập cả phần cứng lẫn phần mềm – Hardware/Software.

Chúng ta sử dụng Simulator khi chúng ta chỉ quan tâm đến phần mềm hoạt động như thế nào, còn Emulator sẽ cho chúng ta biết hệ thống làm việc như thế nào.

Điềm mạnh của việc sử dụng các chương trình Giả Lập:

  • Tiết kiệm: Các chương trình Emu/Sim đều miễn phí và được cung cấp như một phần của bộ phát triển phần mềm.
  • Đơn giản: Chúng ta chỉ cần download phần mềm, cài đặt vào máy và mọi thứ đã sẵn sàng để sử dụng.
  • Nhanh chóng: Một chương trình Giả Lập Emu/Sim cũng chỉ là một phần mềm hoạt động trên máy PC, cho nên nó sẽ không tốn quá nhiều thời gian để kết nối với hệ thống như một thiết bị thật.

Điểm yếu của việc sử dụng các chương trình Giả Lập:

  • Tăng độ rủi ro: Với việc sử dụng các chương trình Giả Lập, chúng ta không kiểm thử chương trình với cùng một nền tảng của người dùng cuối. Chúng ta không thể đảm bảo 100% rằng chương trình làm việc với thiết bị thật như cách chương trình làm việc trên Emu/Sim
  • Khác biệt về môi trường mạng: Khi sử dụng Emu/Sim, chúng ta kết nối Internet thông qua các đường truyền cáp, trong khi thiết bị thật lại sử dụng kết nối thông qua sóng radio.
  • Mạng viễn thông: Không có biện pháp kiểm thử mạng viễn thông.

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

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

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

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

Khái niệm về OOD – Object oriented design
Bài viết được sự cho phép của tác giả Lê Chí Dũng
Trong việc Design Parttern cho OOP  người ta bàn về vấn đề thiết kế một pattern làm sao để lớp con kế thừa lớp cha nhưng tự loại bỏ những method mà nó không mong muốn. Điều đó có nghĩa là lớp con không tuân thủ nguyên tắc định trước, tức là nó không tuân thủ một trong những nguyên tắc cơ bản của thiết kế hướng đối tượng (OOD – Object oriented design) là Liscov substitution principle.
Điều đó cho thấy khi thiết kế, tìm giải pháp cho một vấn đề nào đó, việc nắm rõ các nguyên lí cơ bản của OOD là vô cùng quan trọng. Bài này xin giới thiệu về 5 nguyên tắc cơ bản của OOD là:
  1. Open closed
  2. Liskov substitution
  3. Dependency inversion
  4. Interface segregation
  5. Single responsibility

Open closed

Ivar Jacobson từng nói: “Để thiết kế các hệ thống lâu dài, cần luôn tâm niệm rằng các hệ thống luôn thay đổi trong quá trình sử dụng”. (All systems change during their life cycles. This must be borne in mind when developing systems expected to last longer than the first version.”). Năm 1988, Bertrand Meyer đưa ra mục tiêu để thực hiện điều mà Ivar Jacobson nói trên mà sau này trở thành nguyên lí open-closed nổi tiếng. Đó là: SOFTWARE ENTITIES (CLASSES, MODULES, FUNCTIONS, ETC.) SHOULD BE OPEN FOR EXTENSION, BUT CLOSED FOR MODIFICATION.

Các chương trình áp dụng nguyên lí open-close được thay đổi bằng cách thêm code mới chứ không phải sửa code có sẵn. Bằng cách này, tránh được thay đổi dây chuyền trong toàn bộ chương trình. Tuy nhiên, mỗi entity của chương trình có thể đóng với thay đổi này nhưng lại không đóng với thay đổi nào đó khác. Do đó, tính đóng này chỉ là tương đối và nhiệm vụ của người thiết kế là với mỗi đặc thù của chương trình, ưu tiên đóng các thuộc tính dễ thay đổi nhất.

Để “đóng” các entity của chương trình, có thể sử dụng giải pháp abstraction, data driven, ..
Open-closed là nguyên li trung tâm, rất quan trọng trong thiết kế hướng đối tượng vì chính nguyên lí này làm cho lập trình hướng đối tượng có tính tái sử dụng (reusability) và dễ bảo trì (maintainability).

Liskov substitution

Nguyên lí này được phát biểu như sau:

FUNCTIONS THAT USE POINTERS OR REFERENCES TO BASE CLASSES MUST BE ABLE TO USE OBJECTS OF DERIVED CLASSES WITHOUT KNOWING IT.

Tức là hoạt động của các function có sử dụng reference hay pointer tới object của lớp cha cần được đảm bảo là không bị ảnh hưởng khi thay thế reference hay pointer tới object của lớp cha bởi reference hay pointer tới object của lớp con và function đó không cần biết về sự tồn tại của lớp con. Khi đó, các virtual member functions ở lớp cha cũng phải có ở lớp con, và phải thực hiện một công việc có nghĩa.

Nếu nguyên lí này bị vi phạm, function có sử dụng reference hay pointer tới object của lớp cha phải kiểm tra kiểu của object để đảm bảo chương trình có thể chạy đúng, và việc này vi phạm nguyên lí open-closed nhắc đến ở trên.

Dependency inversion

Việc áp dụng hai nguyên lí open-closed và Liskov substitute một cách chặt chẽ có thể tổng quát hóa thành nguyên lí depndency inversion được phát biểu như sau:

  1. HIGH LEVEL MODULES SHOULD NOT DEPEND UPON LOW LEVEL MODULES. BOTH SHOULD DEPEND UPON ABSTRACTIONS.
  2. ABSTRACTIONS SHOULD NOT DEPEND UPON DETAILS. DETAILS SHOULD DEPEND UPON ABSTRACTION.

Thực hiện một bằng cách dùng abstract layer như hình dưới.

Interface segregation

Nguyên lí này được phát biểu như sau:

CLIENTS SHOULD NOT BE FORCED TO DEPEND UPON INTERFACES THAT THEY DO NOT USE
Khi một client bị ép phải phụ thuộc vào những interface mà nó không sử dụng thì nó sẽ bị lệ thuộc vào những thay đổi của interface đó. Chúng ta cần phải tránh điều này nhiều nhất có thể bằng cách chia nhỏ interface.

Single responsibility

Nguyên lí này được phát biểu như sau:

THERE SHOULD NEVER BE MORE THAN ONE REASON FOR A CLASS TO CHANGE.
Chú ý: để hiểu bài này, cần có kiến thức cơ bản về lập trình hướng đối tượng, nhất là các khái niệm encapsulation, inheritance, polimorphism.
Bài viết gốc được đăng tải tại lcdung.top
Có thể bạn quan tâm:

Freelancing Tips: Làm sao để tự tin kiếm tiền hơn?

freelancing tips
Freelancing Tips: Làm sao để tự tin kiếm tiền hơn?

Tác giả: Thomas Weibenfalk

Giới thiệu

Cá nhân tôi đã có nhiều năm kinh nghiệm làm freelance và đã tư vấn cho rất nhiều bạn trẻ về công việc này như thế nào cũng như nên làm gì để làm việc hiệu quả hơn. Trong bài viết này tôi muốn giới thiệu với bạn cách để tự tin hơn và kiếm tiền tốt hơn với công việc freelancing của mình.

thói quen của freelancer
Freelancing tips giúp bạn tự tin kiếm tiền hơn

Vậy freelancing tips gồm những gì?

1. Nuôi dưỡng suy nghĩ làm chủ chính mình

Tôi nghĩ nhiều người bỏ lỡ điểm này. Tôi đã thấy rất nhiều người muốn trở thành một freelancer để được “tự do” hoặc được “là của riêng họ”. Thành thật mà nói, đó cũng là những điều thúc đẩy tôi đến với công việc freelance này. Tôi yêu sự tự do và có thể tạo ra cuộc sống của riêng mình và kiểm soát nó tốt hơn. Nhưng làm nghề tự do cũng rất vất vả dù thật sự khá vất vả.

  Freelancer IT là gì? Những điều thú vị về Freelancer lập trình
  Học lập trình tới khi nào có thể làm freelancer?

Tôi luôn thích tạo ra mọi thứ. Và tôi luôn muốn có công ty của riêng mình (không chỉ là một freelancer). Sự thật là khi bạn làm việc tự do, bạn sẽ phải tự điều hành công việc của riêng mình. Bạn phải học cách yêu thích việc điều hành công việc của mình như trong một công ty và cố gắng tạo ra nhiều giá trị nhất có thể.

Xem thêm các việc làm tại Gear Inc tuyển dụng hấp dẫn với TopDev

2. Freelance có phải là một khía cạnh khác của sale?

Tôi luôn ghét việc bán hàng và coi đó là một từ xấu. Nhưng trên thực tế, chúng ta luôn bán mình – thông qua việc khi chúng ta giao tiếp, làm việc trong các dự án và trong cuộc sống của chúng ta. Mỗi người đều là nhân viên bán hàng cho chính mình. Cách chúng ta nói chuyện, cách chúng ta nhìn và cách chúng ta thể hiện bản thân.

Hãy chấp nhận sự thật rằng khi bạn là một freelancer, bạn cũng chính là một người bán hàng. Bạn phải “bán bản thân” và thuyết phục khách hàng nhìn nhận về giá trị của bạn và những gì bạn có thể mang lại. Điều này là hoàn toàn hợp lý. Nhưng đây cũng có thể trở thành trở ngại với nhiều người.

Xem thêm các việc làm tuyển dụng Tester HCM hấp dẫn tại TopDev

Nhiều người rất dễ mất niềm tin khi những sản phẩm mà họ bán được quá ít. Nỗi sợ bán hàng thực sự đã trì hoãn quyết định bắt đầu làm freelancer của tôi. Tôi sợ không đủ doanh số để có thu nhập kha khá. Nhưng cuối cùng tôi đã “thành lập công ty” của mình và kể cả khi doanh số bán hàng đôi khi chậm, tôi vẫn quyết định đối mặt với mọi thứ và tiếp tục công việc freelance của mình.

3. Học cách đối mặt với những khó khăn

Khi quyết định dấn thân cho lối sống tự do, bạn cần biết rằng sẽ có những khoảng thời gian bạn không có một dự án nào. Có nghĩa là không có thu nhập!

Điều này có thể đáng sợ và thật sự khó khăn với những người đã quen với việc nhận tiền lương vào mỗi tháng. Tôi hoàn toàn hiểu điều đó. Nhưng đây thực sự cũng là một cơ hội để bạn học cách quý trọng tiền bạc hơn. Tôi đã luôn cố gắng tiết kiệm cho mình một khoản riêng vào những lúc không thể kiếm thêm thu nhập.

Xem thêm Là Freelance Developer, bạn nên “định giá” bản thân như thế nào?

Tôi cũng đã nhận thức được một quan điểm khác về giá trị của đồng tiền. Đối với tôi, thu nhập mà tôi kiếm được với tư cách là một freelancer thực sự có giá trị hơn một khoản lương thông thường. Chỉ vì tôi biết tôi có thể mất nó dễ dàng như thế nào.

Tôi cũng biết rằng tôi đã làm việc chăm chỉ hơn để có được khoản thu nhập đó so với việc tôi nhận lương hàng tháng thông thường. Điều đó làm cho số tiền đó có giá trị hơn đối với tôi. Nó cũng giúp bù đắp cho nỗi sợ không có tiền. Vì vậy, bạn phải học cách sống chung với những thăng trầm, những khó khăn khi là freelancer để làm việc tốt hơn.

freelancer
Sử dụng những mẹo này khi làm việc giúp freelancer thoải mái hơn

4. Quen dần với việc làm việc độc lập

Ít nhất với cá nhân mình tôi nghĩ đây là điều tốt. Là một freelancer, bạn có thể không tham gia vào mọi khía cạnh của dự án như một nhân viên toàn thời gian. Một số dịch giả tự do cảm thấy thất vọng vì điều này nhưng tôi nghĩ nó tốt, vì đôi khi bạn sẽ cảm thấy rất tệ nếu tham gia vào các quy trình của dự án và nhận ra các vấn đề bên trong nó.

Một freelancer thường được thuê như một “phương sách cuối cùng”, nghĩa là bạn tham gia dự án khá muộn trong quá trình này. Vì vậy, bạn đã bỏ lỡ phần đầu của dự án. Nhưng thực ra điều này có thể khá tốt vì bạn không cần phải tham gia tất cả các cuộc họp và làm tất cả các công việc hành chính. Tất nhiên, sẽ có những dự án kéo dài trong thời gian dài. Đối với những dự án này, bạn có thể sẽ được đối xử như một nhân viên bình thường.

Xem thêm các việc làm tại Gear Inc tuyển dụng hấp dẫn với TopDev

5. Cống hiến bản thân bằng cách không ngừng học hỏi

Tôi tin vào việc học hỏi những điều mới mỗi ngày trong cuộc sống của tôi. Vì vậy, ngay cả khi tôi không làm việc tự do, tôi vẫn sẽ học mọi lúc. Nhưng học tập đặc biệt quan trọng hơn với tư cách là một freelancer.

Nếu bạn liên tục học hỏi những điều mới, bạn có thể đảm nhận nhiều nhiệm vụ hơn. Là một nhân viên bình thường, bạn thường có thể tránh xa việc không học những thứ mới trong một thời gian dài trước khi bất cứ điều gì xảy ra. Bạn có thể ngồi và làm công việc của bạn như bạn thường làm từ ngày này qua ngày khác.

Nhưng một freelancer thường được thuê vì chuyên môn của họ trong một số lĩnh vực nhất định. Ví dụ, tôi thường được thuê làm việc với vai trò là React Developer. Không ngừng học hỏi những thứ mới chắc chắn sẽ giúp bạn thu hút được bất kỳ nhà tuyển dụng tiềm năng nào.

Xem thêm các việc làm tuyển dụng Tester chưa có kinh nghiệp hấp dẫn tại TopDev

Kết luận

Để trở thành một freelancer thành công và kiếm được nhiều tiền hơn, bạn cần biết cách tự tin với chính mình và dám đối mặt với những khó khăn. Hi vọng bài viết trên đây sẽ phần nào giúp các bạn có thêm thông tin về công việc freelance và cách tận dụng công việc này tốt nhất.

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

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

Xem thêm việc làm tuyển dụng Tester hấp dẫn tại TopDev

Top lý do xin nghỉ việc sếp không thể từ chối

lý do xin nghỉ việc
lý do xin nghỉ việc

Quyết định nghỉ việc không phải là một quyết định đơn giản. Và dường như, mỗi nhân viên đều đã suy nghĩ và cân nhắc rất kỹ lưỡng trước mọi quyết định nghỉ việc. Thế nhưng, lá đơn xin nghỉ việc của bạn liệu có được chấp thuận bởi một lý do thuyết phục? Hay sẽ bị từ chối bời những lý do xin nghỉ việc chưa chính đáng? Vậy làm thế nào để có cho mình những lý do xin nghỉ việc thật sự hợp lý? Cùng TopDev xem bài viết sau đây để điểm qua những lý do xin nghỉ việc thuyết phục nhất nhé!

Câu hỏi thực tế – Tại sao nhân viên lại nghỉ việc?

Không khó để đưa ra những nguyên nhân khiến các nhân viên nghỉ việc. Có rất nhiều lý do dẫn đến việc các nhân viên rời đi. 

lý do xin nghỉ việc
Đâu là những lý do khiến nhân viên nghỉ việc?

Đó có thể là những lý do khách quan như: việc dịch chuyển đến một chỗ ở mới, ảnh hưởng từ việc học thêm các khóa học – kỹ năng phát triển chuyên môn nghề nghiệp, môi trường làm việc tốt hơn,…

Hoặc có thể là những lý do cảm tính (bị chi phối bởi yếu tố cảm xúc): nghỉ việc vì có lý do riêng; những mâu thuẫn bất đồng – tranh chấp trong các mối quan hệ với cấp trên lẫn đồng nghiệp; chế độ phúc lợi còn bị giới hạn, cơ hội thăng tiến dường như bằng không,… 

  "Vì sao nghỉ việc tại công ty cũ?": 5 lý do thuyết phục nhà tuyển dụng

Dù bất kế lý do là gì, bạn vẫn phải giữ một tâm thế sẵn sàng. Việc tiếp theo của bạn sau khi có một lý do hợp lý là viết một lá đơn xin nghỉ việc chuyên nghiệp. Hãy đảm bảo rằng đơn xin nghỉ việc của bạn đúng chuẩn.

Đặc biệt, dù kỹ năng giao tiếp thường ngày của bạn không tốt. Nhưng khi viết đơn xin nghỉ việc với một lý do xin nghỉ việc chính đáng, bạn cần phải lưu tâm:

  • Nên bày tỏ thái độ vui vẻ và sự trân trọng đối với tổ chức của mình.
  • Đừng nhắc đến những điều tiếng tiêu cực! Thay vào đó là hãy gợi nhắc những thành quả mà bạn và tổ chức đã trải qua.
  • Tính chuyên nghiệp và chuẩn mực phải được đặt lên hàng đầu.

Những lý do nghỉ việc thuyết phục nhà quản lý nhất

1. Lý do cá nhân

Lý do xin nghỉ việc cá nhân thường là lý do phổ biến nhất. Việc lựa chọn cách thức truyền tải nào sẽ phụ thuộc vào bạn. Tuy nhiên, hãy trình bày rằng vì một số lý do riêng, bạn không thể tiếp tục đồng hành cùng công ty trong thời gian sắp tới. Tất nhiên, bạn sẽ hứa hẹn hoàn tất nốt các công việc còn lại trong thời gian sớm nhất. Đồng thời, bàn giao nhiệm vụ để không làm ảnh hưởng tiến độ chung của công ty.

lý do xin nghỉ việc
lý do xin nghỉ việc

Đây thật sự là một lý do nghỉ việc chính đáng. Bởi lẽ, đã đến lúc bạn suy nghĩ đến những dự định khác cho bản thân. Đâu là nơi thật sự phù hợp với bạn và năng lực của bạn. Cách truyền tải cũng rất quan trọng và là điều bạn nên lưu tâm.

2. Trải nghiệm học tập cao hơn

Ngày này, việc trau dồi nhiều kỹ năng khác nhau như kỹ năng giao tiếp, phân tích vấn đề, kỹ năng đàm phán,… đều quan trọng. Không những thế, nhiều người đã lựa chọn học lên cao hơn để giúp cho sự nghiệp của mình thăng tiến hơn sau này.

Có người lựa chọn vì đam mê ngành học. Có người muốn đổi mới trong quỹ thời gian phát triển cá nhân mỗi ngày. Chẳng hạn như việc, một Junior hay Senior Developer mong muốn tìm kiếm các cơ hội học lên Thạc sĩ, Tiến sĩ,… nhằm theo đuổi những mục tiêu mới. Do vậy, đơn xin nghỉ việc cho developer giúp họ gửi lời đến tổ chức; thông báo về việc kết thúc quá trình dài làm việc của mình.

Tất nhiên đơn xin nghỉ việc cho developer vẫn phải đảm bảo những tiêu chí quan trọng về nội dung, hình thức và một lý do xin nghỉ việc chính đáng.

Cụ thể hơn, bạn sẽ học thêm các khóa học chuyên sâu để nâng cao trình độ. Đó cũng là lúc bạn hướng đến mục tiêu là một bằng cấp khoa học nào đó. Đây thật sự là một điều tốt. Vì ai cũng có quyền trải nghiệm và update bản thân mỗi ngày. Do thực hiện kế hoạch học tập, nghiên cứu sắp tới, bạn khó có thể tiếp tục công việc hiện tại. Chọn 1 trong 2 là điều kiện tiên quyết bắt buộc để vạch ra định hướng phát triển tiếp theo của mình.

3. Một môi trường làm việc mới tốt hơn

Khi đã có những trải nghiệm đủ nhiều tại một tổ chức/doanh nghiệp, bạn chợt nhận ra một yếu tố quan trọng – chính là sự phù hợp. Môi trường hiện tại không còn phù hợp với bạn. Hoặc bạn muốn tìm kiếm một môi trường khác năng động hơn, với nhiều tính cạnh tranh hơn.

Bạn muốn làm việc trong một tập đoàn đa quốc gia; học hỏi và tiếp thu những điều mới; tiếp cận văn hóa và tác phong làm việc của các thị trường quốc tế,…

Hãy chuẩn chị một lá đơn xin nghỉ việc thật hợp chuẩn; trình bày đầy đủ các ý muốn cá nhân để gửi đến nhà quản lý của bạn.

4. Nghỉ việc vì lý do sức khỏe

Sức khỏe luôn là một vấn đề quan trọng đối với một nhân viên. Có sức khỏe, bạn sẽ thật sự ổn định hơn về tinh thần. Đồng thời, sẵn sàng hoàn thành nhiệm vụ một cách tốt nhất. Do vậy, mà bên cạnh các yếu tố về phúc lợi, lương bổng,… sức khỏe là một tiêu chí quan trọng ảnh hưởng đến việc xác lập lý do xin nghỉ việc.

lý do xin nghỉ việc
lý do xin nghỉ việc

Thực tế cho thấy, đây cũng là một lý do xin nghỉ việc chính đáng. Bởi lẽ, ai cũng cần có sức khỏe. Nếu tình hình sức khỏe hiện tại không cho phép bạn tiếp tục công việc, nghĩ đến việc dừng lại đúng lúc. Chưa kể nếu bạn gặp phải những vấn có tính chất phức tạp hơn, bạn lại cần thời gian để nghỉ ngơi.

Đừng lo sợ mà hãy bày tỏ chân thành với nhà quản lý. Họ sẽ hiểu và thông cảm cho bạn. Đồng thời chấp thuận nếu bạn có một lá đơn xin nghỉ việc hợp lý kèm một lý do xin nghỉ việc phù hợp.

Hãy nhớ rằng việc quan trọng lúc này của bạn là thời gian dành cho bản thân. Việc đưa ra quyết định dừng việc sớm sẽ tốt hơn cho công tác quản lý và tiến độ phát triển công việc chung của tổ chức.

5. Nghỉ việc vì muốn phát triển kinh doanh

Nhiều nhân sự khi họ làm được một thời gian, họ nhân sự nhiều sự chuyển hướng khác nhau thích hợp với mình hơn. Sự chuyển hướng trong ngành nghề ấy dựa trên các cơ sở về cá tính, sở thích và quan trọng nhất là việc họ muốn mình trở thành ai.

Không có một giới hạn nào cho sự thay đổi phạm vị nghề nghiệp. Họ có thể thay đổi sang các ngành cũng lĩnh vực. Và thậm chí một số khác thì không. Việc theo đuổi phát triển kinh doanh riêng là một trong số đó. Khi họ thật sự mong muốn và đó là thời điểm thích hợp, họ sẽ bắt tay thực hiện. Nếu có ước mơ, đủ thời gian và tâm sức; các yếu tố vật chất cộng hưởng, đó là lúc chín muồi để họ lựa chọn đưa ra quyết định chuyển mình khác hơn.

Phát triển kinh doanh có thể là: mở quán cà phê, nhà hàng; hoặc chính các công ty startup, agency riêng của họ. Họ đã có đủ những trải nghiệm cơ bản trong một hoặc nhiều tổ chức doanh nghiệp. Họ đã nắm được việc tổ chức vận hành và thiết lập hệ thống nhân sự thì khi cơ hội đến, việc của họ là nắm bắt chúng. Song, dù thế nào, bạn vẫn phải trình bày lý do này trên một lá đơn xin nghỉ việc thật chỉn chu nhất.

Mọi công ty sẽ hiểu và thông cảm vì đây thật sự là lý do xin nghỉ việc chính đáng. Điều quan trọng chính là bạn hãy cố gắng để lại ấn tượng đẹp sau cùng nơi tổ chức mà mình đã đồng hành.

Những lý do xin nghỉ việc không nên dùng

Lý do xin nghỉ việc chính đáng rất quan trọng. Vì nó là cơ sở giúp lá đơn xin nghỉ việc của bạn có được thông qua hay không? Hãy cân nhắc những lý do thật sự phù hợp. Dưới đây là list các lý do bạn nên tránh dùng khi viết đơn xin nghỉ việc.

1. Lương thấp

Thật sự đây là một lý do hợp lý. Tuy nhiên, không ai lại viết trong đơn một cách trực tiếp như vậy. Nếu là một nhân viên chuyên nghiệp, bạn cần có cách trình bày vấn đề với sắc thái nhẹ nhàng hơn. Không nên đi nhanh vào trọng tâm và nhấn mạnh việc lương tại tổ chức quá thấp. Bạn hãy phủ đầu bằng một loạt các lý do về điều kiện phát triển, những vấn đề khó khăn bạn gặp phải,… Đó là những minh chứng rõ nhất khiến họ có hình dung cụ thể hơn về tình hình hiện tại của bạn.

Lúc đó, bạn mới cần liên hệ qau vấn đề phúc lợi chưa thật sự làm bạn hài lòng. Và đây là lúc phù hợp để bạn rời đi. Bạn ra đi không vì công ty có môi trường làm việc không tốt; mà là cuộc sống của bạn còn nhiều thứ phải lo. Vì vậy, hãy thật tế nhị, thể hiện sự tôn trọng với tổ chức thông qua lá đơn xin nghỉ việc nhé!

2. Tôi bị giới hạn về chuyên môn phát triển

Mỗi công ty có một quy trình phát triển khác nhau. Do đó mà cách thức tổ chức, vận hành cũng khác. Bạn có thể được chỉ đạo làm tốt các nhiệm vụ, trách nhiệm thông qua phần tasks được giao. Hoặc bạn cũng được hỗ trợ và làm chung các kế hoạch, dự án khác để có thể học hỏi thêm các kinh nghiệm.

Tuy vậy, mọi vấn đề nảy sinh đều từ bạn. Nếu bạn cảm nhận rằng mọi thứ hiện tại vượt ra khỏi giới hạn sự chịu đựng; bạn không học thêm được cái mới thì tốt nhất, bạn nên kết thúc mọi việc càng sớm càng tốt.

Hãy tìm kiếm một môi trường phù hợp hơn với mình. Đó là nơi cho bạn nhận thấy mình có thể trải nghiệm và tiếp thu, phát triển năng lực bản thân lên những trình độ cao hơn.

Lời kết

Tóm lại, việc bạn đưa ra một lý do xin nghỉ việc hợp lý sẽ giúp là đơn xin nghỉ việc trở nên thuyết phục hơn. Hãy quan tâm đến bản thân, hiểu mình muốn gì để xác định một lý do xin nghỉ việc chính đáng nhất. Bạn chỉ cần có cách truyền tải chân thật và bày tỏ sự tôn trọng, thì chắc chắn lý do xin nghỉ việc của bạn sẽ được phê duyệt. TopDev hi vọng, thông qua bài viết, các bạn sẽ có những thông tin thật sự hữu ích.

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

Xem thêm việc làm Developers hàng đầu tại TopDev

Xác định bug dựa vào “nấc cục”

Xác định bug dựa vào “nấc cục”

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

“Bug” một trong những mối bận tâm lớn của kỹ sư kiểm thử. Nó mang lại niềm vui cho kỹ sư kiểm thử khi tìm được bug, nó gieo rắc nỗi sầu cho kỹ sư lập trình, nó cũng là cội nguồn của “cuộc chiến giữa các…kỹ sư kiểm thử và kỹ sư lập trình”. Tìm bug đã khó, để thuyết phục mọi người “đó là bug” lại càng đau đầu hơn. Các bạn cùng xem đoạn hội thoại sau:

  Bài học cho các Developer sau lỗi bug video từ Facebook
  Debug là gì?

– Kỹ sư kiểm thử: “Yeah, chỗ này có bug nè sư huynh”

– Kỹ sư lập trình: “Đâu, chỉ anh bug coi”

– Kỹ sư kiểm thử mô phỏng con bug…

– Kỹ sư lập trình:”Đâu phải bug đâu, tài liệu đặc tả có đề cập cái này đâu”

– (Kỹ sư kiểm thử liền đi lục tài liệu)…“Anh nói đúng, tài liệu không có đề cập nhưng em thấy nó vẫn không ổn lắm.”

– Kỹ sư lập trình (giọng hơi bực rồi): “Không ổn là không ổn làm sao? Tại liệu có đề cập đâu, anh chỉ code theo đặc tả…”.

– Kỹ sư kiểm thử có vẻ đuối lý và bỏ cuộc (dù vẫn còn ấm ức).

Xác định bug dựa vào “nấc cục”

Có những tình huống mà rõ ràng kỹ sư kiểm thử biết là “có gì đó không ổn” nhưng vẫn không biết gọi mặt đặt tên nó như thế nào để thuyết phục mọi người đó là bug. Nếu rơi vào tình huống trên thì kỹ sư kiểm thử hãy khoan bỏ cuộc (kỹ sư kiểm thử giỏi không bỏ cuộc dễ vậy), hãy dựa vào những chỉ dẫn về “nấc cục” để tìm thêm lý lẽ để thuyết phục mọi người.

“Nấc cục” mà mình đang nói đến là “HICCUPPS”. HICCUPPS là chữ viết tắt của “History – Image – Comparable products – Claims – User’s expectation – Product itself – Purpose – Statutes“ là một tập hợp của những nguyên tắc/chỉ dẫn (oracle heuristics) được giới thiệu bởi James Bach (sau đó được Michael Bolton giới thiệu trong blog của ông với bài viết “Testing without a map”). Những nguyên tắc/chỉ dẫn này được định ra dựa trên kinh nghiệm thực tế đúc kết cũng như được nhiều người nhìn nhận là có hiệu quả (nhưng vẫn có thể sai). Về cơ bản nếu có một chức năng nào của sản phẩm đi ngược lại những nguyên tắc của HICCUPPS đều có thể được xem là bug. Chúng ta hãy cùng tìm hiểu xem những nguyên tắc này là gì nhé.

Lịch sử – History

Những chức năng của sản phẩm hiện tại nên nhất quán so với quá khứ (giả định rằng chẳng có lí do gì chính đáng để chức năng đó được thay đổi). Chúng ta nên lưu ý đặc điểm này khi kiểm thử trên một phiên bản mới của ứng dụng.

Nếu trong quá trình kiểm thử, chúng ta thấy một chức năng hoạt động bình thường nhưng trí nhớ mách bảo rằng “lúc trước nó đâu có chạy như vậy”. Nếu trong tài liệu không đề cập đến sự thay đổi đó thì rất có thể chức năng đã vô tình bị thay đổi. Dĩ nhiên, sự thay đổi đó có thể tốt hơn hoặc xấu hơn nhưng vấn đề là nó đã thay đổi và nhiệm vụ của kỹ sư kiểm thử là phải cung cấp thông tin đó.

Hình ảnh – Image

Hình ảnh của sản phẩm (giao diện và chức năng) nên nhất quán với hình ảnh mà sản phẩm thực sự muốn đem tới cho người dùng. Sản phẩm trông có vẻ “dỏm” thì rất có thể là nó “dỏm” thiệt.

Chẳng hạn, một website bán hàng trực tuyến tuyên bố hỗ trợ 24/7 cung cấp hỗ trợ qua Yahoo messenger nhưng người dùng chẳng bao giờ thấy người hỗ trợ đó online. Dĩ nhiên đó không phải là thông điệp “hỗ trợ 24/7” mà sản phẩm đang hướng đến.

Sản phẩm cùng loại – Comparable product

Chúng ta cũng có thể dựa vào sản phẩm cùng loại đang có trên thị trường để làm tiêu chuẩn đánh giá về sản phẩm của mình

Cùng một chức năng nhưng sản phẩm của ta làm không tốt bằng sản phẩm đối thủ. Đó là bug. Chẳng hạn như đa phần những website tin tức ngày nay đều chạy tốt trên cả điện thoại di động và PC nhưng sản phẩm của chúng ta chỉ có có thể chạy tốt trên PC trong khi giao diện trên di động thì bị “hỏng nặng”.

Tuyên bố – Claims

Sản phẩm nên hoạt động giống như những gì đã được tuyên bố hoặc định ra. Những tuyên bố này có thể được định ra trong tài liệu đặc tả, tài liệu hỗ trợ, thông cáo, thư điện tử hay trong một cuộc nói chuyện ở ngoài hành lang bởi những người “có tiếng nói” đối với những tuyên bố đó.

Nếu như bạn thấy sản phẩm chạy giống như đặc tả nhưng bạn nhớ lại rằng trong một cuộc họp với giám đốc sản phẩm trước đó, ông ta muốn sản phẩm chạy khác mà…Hãy viết ngay một email để xác nhận lại vấn đề. Bạn có thể nghe nhầm nhưng cũng rất có thể là người viết tài liệu đã nhầm và không loại trừ khả năng tất cả đều nhầm.

Mong đợi của người dùng – User expectation

Những chức năng của sản phẩm nên hoạt động giống như cách mà người dùng mong đợi nó hoạt động.

Một số con bug thường xuất hiện khi người dùng sử dụng bàn phím thay vì dùng chuột thao tác trên các chức năng. Một số người dùng thích dùng chuột, một số khác thì thích sử dụng bàn phím khi thao tác. Hãy luôn để ý quan sát xem người dùng sẽ dùng sản phẩm của mình như thế nào.

Sản phẩm – The Product itself

Các tính năng giống nhau trên cùng một sản phẩm nên hoạt động nhất quán với nhau trừ khi nó được thiết kế để chạy khác nhau.

VD: Trong cùng một trang tin điện tử, khi người dùng click vào mục trang tin “Xã hội “ thì ứng dụng sẽ hiển thị nội dung ra Tab mới trong khi click vào trang tin “Thể thao” thì nội dung chỉ hiển thị trong cùng một Tab. Đó là bug nếu như không có một yêu cầu nào mô tả ứng dụng phải hoạt động như vậy.

Mục đích – Purpose

Tính năng của sản phẩm nên hoạt động giống với mục đích của tính năng đó bao gồm mục đích tường minh hay hàm ý.

VD: Nhấn nút Add để thêm, Edit để chỉnh sửa, Delete để xóa. Nếu như có tính năng nào của sản phẩm hoạt động không như mục đích mong đợi của nó thì nó có thể là bug.

Qui định về Pháp luật, Tiêu chuẩn – Statutes and Standards

Qui định về pháp luật, tiêu chuẩn khác với Tuyên bố (Claims) được giới thiệu bên trên. Qui định về pháp luật, tiêu chuẩn thường là những quy định không được định nghĩa trong phạm vi của dự án – chẳng hạn như RFC (Request for Comments), FDA (Food and Drug administration), ADA (Americans with Disabilities Act) – nhưng bắt buộc phải tuân theo. Có những sản phẩm đặc thù ngoài việc phải tuân theo đặc tả còn bắt buộc phải tuân theo những quy định về pháp lí. Việc sản phẩm không tuân thủ những quy định pháp lí không chỉ đơn thuần là bug mà nó còn mang đến những rắc rối về pháp lí.

Đó là những nguyên tắc/chỉ dẫn về “HICCUPPS”. Mình cũng xin lưu ý là những nguyên tắc được giới thiệu bên trên là những phát hiện dựa trên kinh nghiệm của cá nhân và được nhiều người đồng tình. Những nguyên tắc này không mang giá trị đúng tuyệt đối. Vì lí do đó, sau này nhiều người đã bổ sung thêm những nguyên tắc khác như: HICCUPPS(F) hay FEW HICCUPPS.

Là kỹ sư kiểm thử, bạn sẽ không muốn và không nên giới hạn mình với những nguyên tắc đã được định ra. Bạn hoàn toàn có thể định ra những nguyên tắc của mình để làm việc vì chỉ có bạn mới biết điều gì là mang lại hiệu quả cho công việc của bạn. Tuy nhiên, nếu bạn rơi vào những tình huống khẩn cấp thì hãy nhớ “nấc cục” (HICCUPPS) nhé.

Lược dịch từ http://www.developsense.com

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

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

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

View Hierarchy, Optimize Layout và Custom View (Phần 2)!

View Hierarchy, Optimize Layout và Custom View (Phần 2)!

Bài viết được sự cho phép của tác giả Nguyễn Trương Trung Tín

Tiếp tục với bài viết ở phần 1, sau khi đã hiểu được View là gì, cách android vẽ giao diện lên màn hình, cách tổ chức màn hình. Thì chúng ta sẽ đi đến phần kế tiếp, làm sao để tổ chức layout được tốt, ít tốt thời gian vẽ, 1 số mẹo để cái thiện tốc độ vẽ giao diện của ứng dụng.

Optimize layout.

Nhắc lại tí nội dung của bài trước thì layout trên màn hình sẽ được tổ chức theo dạng cây, và việc đo kích thước cũng như vẽ các view lên màn hình đều là các phép duyệt cây từ cao xuống thấp. Nên tốc độ vẽ 1 màn hình có thể được xem là tổng tốc độ các lần duyệt cây layout. Nên trong phần này mình sẽ nói về cách làm PHẴN 1 cây giao diện, tổ chức 1 cây giao diện theo cách RỘNG và CẠN, thay vì HẸP mà SÂU.

Relative Layout hay Linear Layout??

Chắc hẵn một android developer không thể không biết tới 2 loại ViewGroup – Layout này. Nói sơ qua thì LinearLayout tổ chức và sắp xếp các view con theo 1 CHIỀU CỐ ĐỊNH và có thể căn chỉnh theo tỉ lệ từng thành phần. Còn RelativeLayout thì tổ chức và sắp xếp các view con theo vị trí của view cha hoặc các view con trước đó.

(Bổ sung hình)

Vậy nếu một người mới lập trình android sẽ dễ dàng chọn LinearLayout làm layout chính cho các màn hình của ứng dụng, vì nó rất dễ căn chỉnh các view theo tỉ lệ, dễ dàng sắp xếp các thành phần theo từng thành phần riêng lẽ và dễ quản lí lẫn cài đặt. Còn Relative layout rất khó cho việc căn tỉ lệ, ví trị của từng view, phải xác định vị trí của từng view đối với các view còn lại, nên sẽ rất khó trong việc cài đặt. Thử xét ví dụ với màn hình sau:

Đang viết…

Bài viết gốc được đăng tải tại tinntt.github.io

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

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