Home Blog Page 58

Python và cách tiết kiệm dung lượng cho phần mềm nhúng

Python và cách tiết kiệm dung lượng cho phần mềm nhúng

Bài viết được sự cho phép của tác giả Nguyễn Hồng Quân

Khi tôi bắt đầu bước chân vào mảng IoT đầu năm 2016, tôi bắt đầu lân la tiếp xúc với cộng đồng làm IoT Việt Nam (trên Facebook là chính). Ở Việt Nam, lực lượng tech làm IoT đa phần là dân điện tử đi lên, thế nên tôi hay gặp những câu hỏi như “nên dùng ngôn ngữ nào để lập trình nhúng” từ những bạn sinh viên mới. Tôi cũng ngạc nhiên khi thấy các bạn kháo nhau dùng NodeJS, theo phong trào.

Nếu cần dùng các ngôn ngữ biên dịch như C++, Go thì không nói. Nhưng nếu dùng ngôn ngữ thông dịch thì Python nên được dùng hơn NodeJS/JavaScript. Một khía cạnh nên tính đến là độ lớn file cần lưu trữ. Các board máy tính nhúng chạy Linux thường dùng thẻ nhớ, hoặc bộ nhớ flash trong (còn có cách gọi khác là NAND Flash, SPI Flash, eMMC) để thay thế ổ cứng (HDD) nên có dung lượng khiêm tốn. Nếu cách lưu trữ không phù hợp, có khi thư viện đã ngốn hết không gian lưu trữ đáng lẽ phải dành cho chương trình và dữ liệu (data).

  Để học tốt Python

Thứ nhất, cách quản lý các gói thư viện phụ thuộc của NodeJS cực kỳ tốn dung lượng, với sự trùng lắp các file thư viện.

node_modules

Hình bên trên là ví dụ về cách lưu trữ thư viện khi cài bằng yarn. Tình hình còn tệ hơn nếu cài bằng npm, vốn có truyền thống không thèm phân giải mối ràng buộc phiên bản (dependency version resolve) mà cứ lồng các gói phụ thuộc vào nhau, dẫn đến câu châm biếm sau:

heaviest

Ghi chú: Có vẻ, gần đây, sau khi nhận nhiều châm biếm thì npm đang cải thiện vụ quản lý thư viện này.

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

Thứ hai, NodeJS không hỗ trợ phân phối gói thư viện ở dạng binary. Đối với cả Python và NodeJS, có nhiều thư viện được viết bằng C/C++. Khi cài đặt những thư viện này thì phải có bước biên dịch mã nguồn C/C++ đó thành file binary (*.so hay *.dll). Nếu ngôn ngữ đó không có quy chuẩn về phân phối thư viện biên dịch trước ở dạng binary, thì trình quản lý gói, sẽ phải download source code và tiến hành biên dịch ngay trên máy người dùng cuối. Và để làm việc đó thì máy người dùng cuối phải cài trước trình biên dịch, code generator (như Swig), các source code của thư viện C/C++ mà gói thư viện Python/NodeJS kia phụ thuộc vào. Như vậy là dung lượng khiêm tốn của máy tính nhúng lại phải dành chỗ cho những thứ nặng nề này.

  Viết ứng dụng tra số điện thoại thuộc Quốc gia nào bằng Python

Python giúp cắt bỏ những thứ nặng nề kia bằng cách định ra một phương pháp đóng gói và phân phối qua file wheel, trong đó các thư viện viết bằng C/C++ sẽ được biên dịch trước, file nhị phân thành phẩm (cùng các file metadata phụ trợ) sẽ được đóng gói và xuất bản trên kênh phân phối chính thức của Python (https://pypi.org/). Khi cài đặt trên máy người dùng cuối thì pip (trình quản lý gói của Python) chỉ việc download file đã dịch này, không phải download bộ source code C/C++, người dùng cũng không phải cài trình biên dịch và mớ mã nguồn. Vừa tiết kiệm không gian lưu trữ, vừa tiết kiệm thời gian biên dịch. Đặc biệt, vì các máy tính nhúng dùng CPU ARM, hơi yếu nên thời gian biên dịch cực kỳ lâu. Nếu bạn triển khai cho nhiều khách hàng, tức là phải cài phần mềm trên nhiều board, thì thời gian tiêu phí cho quá trình biên dịch càng lớn.

Ghi chú: Có một vài thư viện NodeJS cũng thấy nỗi nhức nhối này và họ đã workaround, bằng cách phân phối một script “installer” chứ không phân phối bản thân thư viện. Khi người dùng cài gói, script này sẽ chạy và download file binary biên dịch sẵn từ website của tác giả thư viện về. Nguồn download là website của tác giả chứ không phải kho chính thức của NodeJS (https://www.npmjs.com/).

Tham khảo tuyển dụng python Hà Nội lương cao trên TopDev

Gần đây, khi tham gia vào dự án SUSI.AI Smart Speaker, một nhiệm vụ của tôi là giảm tổng dung lượng của phần mềm trên Raspberry Pi. Tổng dung lượng ở đây là tính tất cả những thứ phải cài đặt trên Raspperry Pi (bao gồm cả hệ điều hành). Trước khi tôi tham gia, dự án đã có một script install.sh để tiến hành cài tự động các phần mềm cần thiết, cho phép người mới vào dự án có thể bắt tay lập trình luôn. Có điều, do thiếu người mạnh dẫn dắt từ đầu nên dự án trở nên lộn xộn, ngay cả file install.sh cũng không chạy thành công. Trước khi file install.sh đó được sửa (mà người phụ trách là tôi) thì một bạn thành viên đề xuất sẽ copy thẻ nhớ (chạy Raspberry Pi) của anh ta ra một file image. Tất cả những thành viên mới chỉ việc nạp image đó vô thẻ nhớ của mình rồi bắt đầu công việc. Thế nhưng, khi copy ra xong thì file đó nặng tới 16GB! Cho dù có nén kiểu gì thì dung lượng đó quá lớn một cách lố bịch. Đóng góp vào con số khủng khiếp đó là một đống những phần mềm công cụ, mã nguồn thư viện. Dó có liên quan đến AI nên phải dùng đến một số thư viện tính toán đại số, và ở dạng mã nguồn thì nó rất lớn. Chưa kể, thành viên đó lại không thạo Linux, nên dùng một công cụ Windows để tạo image thẻ nhớ, khiến không có một phương pháp tạo image tối ưu (đục bỏ phần dữ liệu rơi rớt của những file đã xóa). Đây cũng là một trong các lí do mà tôi luôn khuyên các bạn làm IoT, lập trình nhúng phải chuyển sang Linux. Sau vài tháng miệt mài sửa file install.sh, chuyển các thư viện sang dạng đóng gói binary, thậm chí đóng góp code vào cho một thư viện bên thứ ba, viết script để build hệ điều hành một cách tự động (khi chúng tôi cập nhật code mới) thì dung lượng image đã giảm đáng kể, nay còn 781MB sau khi nén.

Ngoài ra, trong quá trình làm việc tại AgriConnectFOSSASIA thì tôi cũng build trước một số ứng dụng và thư viện thành dạng binary cho ARM, để tiết kiệm thời gian cài đặt, triển khai trên BeagleBone, Raspberry Pi. Các kho này là public nên ai có nhu cầu tương tự cũng có thể tận dụng: https://repo.fury.io/agriconnect, https://repo.fury.io/fossasia.

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

Xem thêm các bài viết liên quan:

Tuple Python là gì? Tìm hiểu về tuple python

Hướng dẫn từng bước lập trình web với Python

Chuyển đổi Unicode dựng sẵn & tổ hợp với Python

Tìm việc làm lập trình mới nhất trên TopDev

Cài đặt và sử dụng Storybook cho ReactJS

cai dat va su dung Storybook

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

Trong bài viết trước đây mình đã giới thiệu về Storybook, các bạn chưa đọc có thể xem lại ở link dưới đây:

Giới thiệu về StoryBook cho dự án FrontEnd

Hôm nay mình tiếp tục hướng dẫn các bước để cài đặt và sử dụng Storybook trong dự án ReactJS.

Cài đặt Storybook

Storybook có thể cài đặt dễ dàng bằng cách chạy dòng lệnh dưới đây ở thư mục root của project (lưu ý là sử dụng với project đã có, lệnh dưới sẽ không tạo ra 1 project mới)

# Add Storybook:
npx sb init

Storybook sẽ check các dependencies sẵn có trong project của bạn (file package.json) và thực hiện cài đặt để cung cấp cho bạn 1 cấu hình tốt nhất có thể. Dòng lệnh trên sẽ thực hiện các công việc sau:

  • Cài đặt các dependencies cần thiết
  • Cài đặt những mã (scripts) cần thiết cho việc build và chạy Storybook
  • Thêm cấu hình mặc định cho Storybook
  • Tạo ra 1 số stories mẫu để bạn có thể xem và chạy thử

Sau khi chạy xong thì 1 thư mục stories chứa các stories mẫu sẽ được tạo ra nằm trong thư mục src trong project của bạn.

 

  React là gì? Lộ trình trở thành lập trình viên ReactJS
  Những câu hỏi phỏng vấn React thường gặp

Chạy Storybook

# Starts Storybook in development mode
npm run storybook

Chạy storybook cho project của bạn bằng lệnh trên, kết quả nhận được sẽ như hình dưới đây nếu mọi thứ làm việc ok.

Setup Storybook

Giờ chúng ta sẽ tìm cách hiển thị component trong project của mình lên storybook. Ví dụ chúng ta có 1 component là YourComponent, tạo các file .stories.js.stories.mdx dùng để hiển thị component đó lên storybook và hướng dẫn cách sử dụng chúng.

// YourComponent.stories.js|jsx

import { YourComponent } from './YourComponent';

// This default export determines where your story goes in the story list
export default {
  /*  The title prop is optional.
  * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading
  * to learn how to generate automatic titles
  */
  title: 'YourComponent',
  component: YourComponent,
};

// We create a “template” of how args map to rendering
const Template = (args) => <YourComponent {...args} />;

export const FirstStory = {
  args: {
    // The args you need here will depend on your component
  },
};
<!-- YourComponent.stories.mdx -->

import { Meta, Story } from '@storybook/addon-docs';

import { YourComponent } from './YourComponent';

<!-- The title prop determines where your story goes in the story list -->
<Meta title="YourComponent" component={YourComponent} />

<!-- We create a “template” of how args map to rendering -->
export const Template = (args) => <YourComponent {...args} />;

<!--  The args you need here will depend on your component -->
<Story
  name="FirstStory"
  args={{}}>
  {Template.bind({})}
</Story>

Lưu lại và xem kết quả trên storybook của chúng ta (storybook hỗ trợ hot reload nên không cần chạy lại nhé các bạn)

Các bạn có thể xem full source code demo storybook ở đây nhé.

https://github.com/Akishina/reactjs-storybook

Cảm ơn mọi người đã đọc bài.

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

Theo dõi những bài viết mới nhất của TopDev nhé:

Học ReactJS trong 15 phút

Xây dựng một ứng dụng trò chuyện bằng ReactJS trong 10 PHÚT (Phần 1)

Hướng dẫn sử dụng ReactJS Props và State

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

 

Nên đăng tin tuyển dụng ở đâu? Cần lưu ý gì khi đăng tin tuyển dụng

Nên đăng tin tuyển dụng ở đâu

Nên đăng tin tuyển dụng ở đâu cho hiệu quả khi nhu cầu của doanh nghiệp ngày càng gia tăng? Làm thế nào để vừa tuyển được người tài vừa tiết kiệm chi phí nhất? Có thể thấy, việc tìm được một ứng viên chất lượng thì nhà tuyển dụng cần phải lên chiến lược cụ thể. Chọn đúng nơi, đúng nền tảng để đăng tin tuyển dụng là bước đầu tiên giúp nhà tuyển dụng tiếp cận được đối tượng cần tuyển. Bài viết này, TopDev sẽ giải đáp cho bạn tất cả các vấn đề trên.

Nhu cầu đăng tin tuyển dụng chất lượng ngày càng cao

Sau hơn 2 năm đại dịch, nhu cầu tuyển dụng nhân sự của các doanh nghiệp đã bắt đầu tăng trở lại. Các ngành nghề như: Thương mại điện tử, Công nghệ thông tin, Thiết kế đồ họa, Kỹ thuật ô tô, Logistic & Quản lý chuỗi cung ứng,… đang rất khát nhân lực. Đặc biệt, trong thời điểm cuối năm nay khi tình hình kinh tế đang có nhiều biến động thì vấn đề tuyển dụng nhân sự chất lượng cao lại càng cấp thiết.

Nhiều công ty, doanh nghiệp đã phải bỏ ra một ngân sách rất lớn để giải quyết vấn đề tìm kiếm và đào tạo nhân sự. Có thể thấy, việc tìm được một kênh tuyển dụng chất lượng với tiềm năng nhân sự dồi dào, sẽ giúp ích rất nhiều cho quá trình tuyển dụng của doanh nghiệp. Vậy các doanh nghiệp nên đăng tin tuyển dụng ở đâu cho hiệu quả?

nhu cầu tuyển dụng

Nên đăng tin tuyển dụng ở đâu? Tham khảo 5 kênh tuyển dụng chất lượng

Những ưu nhược điểm của các kênh này là gì? Lựa chọn kênh nào sẽ phù hợp với nhu cầu tuyển dụng của bạn? Mời bạn tiếp tục theo dõi các thông tin dưới đây.

Đăng trên các trang tuyển dụng

Website tuyển dụng là một trong các kênh hiệu quả nhất giúp doanh nghiệp tuyển dụng nhân sự. Một website tuyển dụng chất lượng sẽ thu hút hàng triệu lượt truy cập mỗi ngày, bạn sẽ dễ dàng tiếp cận được với các ứng viên tiềm năng.

Việc để đăng tuyển trên các website này cũng không quá khó, chỉ vài thao tác đơn giản là bạn đã có thể đăng ký thành công. Bên cạnh đó, tùy vào trang web mà sẽ tính phí đăng tuyển hoặc là miễn phí. Nhưng với những trang tính phí thì nguồn nhân sự thường sẽ chất lượng hơn, các ứng viên giàu kinh nghiệm chuyên môn và các kỹ năng cần thiết.

  Trang web tuyển dụng IT uy tín - Cầu nối nhà tuyển dụng và người tìm việc

Đăng tin tuyển dụng trên Facebook

tuyển dụng trên facebook

Facebook là một mạng xã hội với lượng người dùng cực khủng và cũng là nơi tuyệt vời dành cho các nhà tuyển dụng nhân sự. Để tiếp cận đúng đối tượng ứng viên, các nhà tuyển dụng thường đăng tin tuyển ở các hội nhóm việc làm. Hoặc xây dựng trang tuyển dụng cho công ty và chạy quảng cáo tiếp cận ứng viên.

Một ưu điểm khi đăng tin tuyển dụng trên Facebook là sự đa dạng về hình thức đăng. Bạn có thể đăng bài ở dạng tin tức, hình ảnh, video ngắn,… Khi đăng bài trên đây bạn cần đầu tư chỉn chu về mặt nội dung và hình ảnh để thu về nguồn ứng viên chất lượng.

Đăng tin tuyển dụng trên LinkedIn

Nên đăng tin tuyển dụng ở đâu? Tuyển dụng trên LinkedIn là lựa chọn tốt dành cho bạn. LinkedIn sẽ giúp bạn xây dựng profile công ty một cách chuyên nghiệp và miễn phí. Bạn có thể tham gia vào các hội nhóm thảo luận để đăng bài tuyển dụng ứng viên. Các ứng viên trên LinkedIn thường rất chất lượng, sẽ phù hợp với các doanh nghiệp cần tuyển nhân sự có nhiều kinh nghiệm chuyên môn.

Thông qua các sự kiện tuyển dụng, sự kiện chuyên ngành

Các sự kiện tuyển dụng, sự kiện chuyên ngành là cơ hội tuyệt vời cho các nhà tuyển dụng để tiếp cận đúng nguồn ứng viên. Bởi đa phần những người tham gia sự kiện này đều đang có nhu cầu tìm kiếm cơ hội việc làm. Nếu doanh nghiệp của bạn có thể chia sẻ những chính sách đãi ngộ hấp dẫn, môi trường làm việc tốt thì chắc chắn sẽ thu hút được nhiều ứng viên.

  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

Tuyển dụng thông qua các trường đại học

Mỗi năm có một số lượng lớn sinh viên ra trường, đây là nguồn nhân lực dồi dào cho các doanh nghiệp. Vậy nên, các chương trình liên kết với các trường đại học để tuyển dụng nhân tài được rất nhiều doanh nghiệp áp dụng. Bạn có thể đưa ra yêu cầu tuyển dụng các sinh viên có mức điểm tốt nghiệp tốt để dễ dàng đào tạo.

Cần lưu ý gì khi đăng tin tuyển dụng?

Để quá trình tuyển dụng đạt hiệu quả cao, thu hút được nhiều ứng viên chất lượng thì nhà tuyển dụng cần lưu ý những vấn đề sau:

Xác định đúng đối tượng

Xác định đúng đối tượng ứng viên giúp bạn chọn đúng kênh tuyển dụng, đáp ứng được các yêu cầu của vị trí đang tuyển. Việc này giúp bạn tiết kiệm được thời gian và chi phí tuyển dụng.

Trau chuốt nội dung đăng tuyển, cần rõ ràng và chính xác

Khi đăng một tin tuyển dụng, bạn cần cung cấp đầy đủ thông tin mà một ứng viên cần biết. Nếu đăng bài trên các website thì nên điền đầy đủ thông tin của công ty. Điều này thể hiện được sự chuyên nghiệp và sự quan tâm của doanh nghiệp đến quá trình tuyển dụng.

Thông tin liên lạc chính xác

Nhà tuyển dụng cần cung cấp các thông tin về số điện thoại, email, tên doanh nghiệp, địa chỉ doanh nghiệp,… để ứng viên dễ dàng gửi CV và tìm hiểu kỹ về doanh nghiệp trước khi đến phỏng vấn.

TopDev – Nền tảng tuyển dụng IT hàng đầu

TopDev.vn là một nền tảng tuyển dụng CNTT hàng đầu Việt Nam với trung bình 30,000+ lượt truy cập mỗi ngày. Đây sẽ là nơi tuyệt vời để đăng tin tuyển dụng cho các doanh nghiệp chuyên về ngành IT.

Tại TopDev, bạn sẽ dễ dàng tiếp cận đúng đối tượng ứng viên khi có đến 90% traffic là từ các lập trình viên. Thêm nữa, độ phủ sóng thương hiệu của bạn sẽ tăng cao khi các tin tuyển dụng được chia sẻ qua những trang mạng xã hội như Facebook, LinkedIn, hay Email do TopDev quản lý. Quá trình đăng tuyển cũng rất dễ dàng và nhanh chóng, TopDev sẽ luôn hỗ trợ bạn trên con đường tìm kiếm ứng viên tiềm năng.

Bạn có thể tham khảo dịch vụ và ưu đãi tại đây!

Tóm lại

Việc chọn kênh tuyển dụng nào cho phù hợp còn phụ thuộc vào vị trí tuyển dụng, đối tượng tuyển dụng, ngân sách và nhiều yếu tố khác nữa. Hy vọng rằng với những chia sẻ trên đã giúp các bạn biết được nên đăng tin tuyển dụng ở đâu cho hiệu quả và những vấn đề cần lưu ý khi đăng tin tuyển dụng.

Nếu bạn đang có nhu cầu tuyển dụng lập trình viên FrontEnd chất lượng thì đừng quên truy cập TopDev nhé. Đăng ký ngay hôm nay để nhận các ưu đãi cực hấp dẫn.

Xem thêm:

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

Ngôn ngữ lập trình PHP là gì? Tất tần tật những điều bạn cần biết về PHP

PHP là một ngôn ngữ lập trình rất phổ biến với dân IT, vậy ngôn ngữ lập trình PHP là gì? Vai trò của PHP trong việc phát triển các phần mềm? Những ưu, nhược điểm của ngôn ngữ PHP? Bài viết này chúng ta hãy cùng tìm hiểu kỹ hơn về ngôn ngữ lập trình PHP cũng như các kiến thức liên quan đến loại ngôn ngữ này nhé!

Ngôn ngữ lập trình PHP là gì?

Ngôn ngữ PHP là từ viết tắt của Personal Home Page nay đã chuyển thành Hypertext Preprocessor. Thuật ngữ này là một dạng mã lệnh hoặc một chuỗi ngôn ngữ kịch bản được dùng để phát triển các ứng dụng web chạy trên máy chủ.

Khi các lập trình viên PHP viết chương trình, chuỗi lệnh sẽ được xử lý trên server sau đó sinh ra mã HTML trên client. Dựa vào đó, các ứng dụng trên website sẽ hoạt động một cách dễ dàng.

Ngôn ngữ lập trình PHP

Ngôn ngữ PHP thường được dùng trong việc xây dựng và phát triển website bởi nó có thể kết nối dễ dàng với các website khác có sử dụng HTML. PHP cũng là ngôn ngữ lập trình có mã nguồn mở, tương thích với nhiều nền tảng khác nhau như MacOS, Linux, Windows,… PHP được nhiều người dùng đánh giá là dễ đọc nên đa số các lập trình viên sẽ lựa chọn học PHP trước khi bắt đầu vào nghề.

  Những câu hỏi thường gặp khi đi phỏng vấn lập trình php

Ứng dụng của ngôn ngữ PHP trong lập trình

Ngôn ngữ lập trình PHP thường tập trung vào việc thiết lập chương trình cho máy chủ, tạo các cơ sở dữ liệu, xây dựng nội dung website, nhận dữ liệu cookie. Chưa hết, bạn còn có thể thực hiện được nhiều thao tác, công năng khác khi sử dụng ngôn ngữ này.

Một số ứng dụng phổ biến của PHP trong ngành IT:

  • Thiết lập chương trình cho hệ thống máy chủ: Đây là một ứng dụng chủ yếu nhất của PHP. Các PHP Developer sẽ phải thực hiện các thao tác như phân tích ngôn ngữ lập trình PHP, xây dựng máy chủ web và trình duyệt web.
  • Tạo các dòng tập lệnh: Các lập trình viên sẽ tạo ra một dòng tập lệnh để vận hành chương trình PHP mà không cần đến máy chủ. Kiểu lập trình này được sử dụng trên các hệ điều hành phổ biến như Linux hay Windows.
  • Xây dựng các ứng dụng làm việc: Bạn có thể ứng dụng những điểm mạnh vốn có của PHP để xây dựng ứng dụng phần mềm. Các lập trình viên thường dùng PHP – GTK làm nền tảng xây dựng phần mềm vì đây là nhánh mở rộng của ngôn ngữ lập trình này và không có sẵn trong các bản phân phối chính thức hiện nay.
  • Hỗ trợ cho mọi loại cơ sở dữ liệu khác nhau: Khi một website có hỗ trợ cơ sở dữ liệu tốt sẽ giúp ích cho việc vận hành, sao lưu và đặc biệt là backup dữ liệu đề phòng trường hợp xảy ra an ninh mạng.

Ưu nhược điểm của ngôn ngữ lập trình PHP

Ưu điểm

PHP được sử dụng phổ biến bởi nhiều lợi ích mà nó mang lại. Dưới đây là một số ưu điểm cơ bản của ngôn ngữ PHP:

  • Mã nguồn mở và miễn phí: PHP sử dụng miễn phí nên giúp tiết kiệm đáng kể ngân sách dự án. Việc cài đặt và sử dụng ngôn ngữ này cũng rất dễ dàng, bạn chỉ cần học chăm chỉ trong 3 – 6 tháng là đã có thể sử dụng thuần thục.
  • Tính linh hoạt: PHP là một ngôn ngữ đa nền tảng, có thể hoạt động trên bất kỳ hệ điều hành nào (Windows, Linux, macOS,…). Hơn nữa, PHP còn có thể kết hợp với nhiều ngôn ngữ lập trình khác để xây dựng các tính năng công nghệ một cách hiệu quả nhất.
  • Hệ thống thư viện phong phú, tính cộng đồng cao: Do sự phổ biến của ngôn ngữ PHP nên việc tìm các thư viện code hay hàm liên quan đến PHP sẽ cực kỳ đơn giản. Chưa kể, bạn sẽ nhận được sự trợ giúp từ các diễn đàn, đội nhóm chuyên sâu của PHP giúp việc học tập hay làm việc trở nên dễ dàng.
  • Cơ sở dữ liệu đa dạng: PHP cho phép kết nối với hầu hết các cơ sở dữ liệu khác như mySQL, SQLite, PostgreSQL, MS-SQL,…

ưu nhược điểm của ngôn ngữ lập trình php

Nhược điểm 

Mặc dù sở hữu nhiều lợi ích nhưng ngôn ngữ PHP vẫn có một số hạn chế nhất định, trong đó vấn đề bảo mật được nhiều người quan tâm nhất. Bởi bản chất của PHP có mã nguồn mở nên các lỗ hổng của mã nguồn sẽ bị công khai ngay sau khi chúng được tìm thấy. Và các lỗ hổng này có thể bị khai thác cho các mục đích xấu trước khi chúng ta kịp sửa chữa.

Bên cạnh đó, ngôn ngữ lập trình PHP chỉ hoạt động được trên các website và giao diện không được gọn gàng, đẹp mắt. Độ bảo mật và hiệu suất của ngôn ngữ này cũng chưa tốt.

Đừng bở lỡ việc làm PHP Hồ Chí Minh

Sự khác biệt giữa PHP với các ngôn ngữ lập trình khác

Ngôn ngữ lập trình PHP không chạy trên một trình duyệt mà chủ yếu tương thích với một máy chủ web. Nếu bạn mở một trang web bất kỳ, máy chủ sẽ chạy tập lệnh PHP được liên kết sau đó trả lại website cho bạn.

Với HTML: Ngôn ngữ này được dùng để tạo cấu trúc cơ bản của một trang web. Hầu hết các trang web hiện nay đều cần sử dụng ngôn ngữ này để xây dựng website.

Với CSS: Sử dụng với mục đích trang trí cho website thêm sinh động, đẹp mắt. Các lập trình viên sử dụng nhiều hiệu ứng khác nhau giúp website bạn trở nên ấn tượng và thu hút người dùng.

Với Javascript: Các lập trình viên sẽ sử dụng ngôn ngữ này đặt các phép tính, điều kiện khác nhau để kiểm tra khả năng phản ứng của website trong điều kiện thực tế.

Thu nhập của lập trình viên PHP là bao nhiêu?

Mức lương của các lập trình viên tại Việt Nam khá cao so với các ngành nghề khác. Nếu bạn là một lập trình viên PHP chưa có nhiều kinh nghiệm thì mức lương sẽ dao động từ 14 – 16 triệu đồng/tháng. Còn đối với những người đã trên 1 năm kinh nghiệm, mức lương trung bình có thể hơn 24 triệu đồng/tháng.

mức lương lập trình viên php

Có thể thấy, mức lương của nghề lập trình PHP là vô cùng hấp dẫn, bạn sẽ được trả lương rất cao nếu như thật sự có năng lực tốt. Các nhà tuyển dụng sẵn sàng bỏ ra số tiền lớn để chiêu mộ được nhân tài về lập trình PHP. Tuy nhiên, đây chỉ là mức lương để bạn tham khảo, mức lương này có thể tăng cao hơn hoặc thấp hơn tùy vào quy mô công ty, vị trí, yêu cầu công việc,…

Kết bài

Như vậy, bài viết này đã giúp bạn trả lời được câu hỏi ngôn ngữ lập trình PHP là gì và những kiến thức xoay quanh ngôn ngữ này. Với PHP bạn có thể dễ dàng xây dựng bất kỳ loại trang web nào một cách hiệu quả và nhanh chóng.

Nhu cầu tuyển lập trình viên PHP vẫn đang rất cao, mức thu nhập khá hấp dẫn. Nếu bạn quan tâm đến công việc này, hãy truy cập TopDev để lựa chọn cho mình công việc phù hợp nhé!

Xem thêm:

Kết nối DB ORACLE từ PHP trên CENTOS 7, 8

Thói quen viết code an toàn trong khi xây dụng ứng dụng PHP

Giới thiệu framework Vue.js

Truy cập ngay việc làm IT đãi ngộ tốt trên TopDev

Trích xuất thông tin khác nhau từ hai Entity

trích xuất thông tin 2 entity

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

Trong quá trình phát triển các sản phẩm phần mềm, việc kiểm thử là bước vô cùng quan trọng. Không có kiểm thử thì phần mềm phát triển không đủ sự tin tưởng.

Hiện nay với sự phức tạp của các nghiệp vụ do đó các Entity trong các sản phẩm phần mềm ngày càng trở lên phức tạp :

  • Có rất nhiều trường (field) > 20 fields
  • Lưu trữ vật lý tại nhiều bảng khác nhau hoặc nhiều loại DB khác nhau
  • Cấu trúc của một Entity thường sẽ phức tạp: chứa nhiều object khác, array object,…

Khi viết iteration test thông thường chúng ta sẽ chỉ thực hiện assert cho một vài trường nghĩ là sẽ thay đổi sau khi gọi qua API điều này là đúng nhưng chưa đủ.

Ví dụ khi ta lập trình gọi API cho phép thay đổi giá của sản phẩm nhưng không may trong quá trình đó lại thực hiện cập nhật nhầm một thuộc tính nào đó như số lượng tồn kho. Việc này là rất nguy hiểm thường sảy ra khi code của project đã quá lớn và là người mới join vào quá trình phát triển chưa nắm rõ. Khi thực hiện testing nếu chỉ thực hiện việc assert cho trường giá thì vẫn chưa đủ.

Một cách dễ dàng có thể khắc phục là thực hiện compare toàn bộ 2 entity dưới dạng jsonExpected sẽ được query từ DBactual sẽ được lưu trong 1 file text. Nếu 2 object này giống nhau hoàn toàn thì có thể chắc chắn được API chúng ta đang hoạt động đúng.

Thư viện sử dụng có thể là:

        <dependency>
            <groupId>org.skyscreamer</groupId>
            <artifactId>jsonassert</artifactId>
            <version>1.5.0</version>
        </dependency>

Hoặc dùng chính project để thực hiện compare này.

Cách này khá dễ thực hiện nhưng sẽ có một số nhược điểm :

  • Khi ta thêm, xóa trường trong Entity thì tất cả các file json sẽ bị ảnh hưởng và bắt buộc phải thay đổi theo.
  • Khi đọc test thì người đọc sẽ rất khó biết được API thực sự thay đổi điều gì

Project này đề xuất phương pháp compare 2 json object, trích xuất sự khác biệt và lưu nó dưới dạng một cấu trúc json để dễ đọc hiểu.

Cấu trúc json được đề xuất như sau:

{
  "updated": {
  },
  "inserted" : {
  },
  "deleted": {
  }
}

Project sẽ sử dụng thuật toán DFS để duyệt qua và thực hiện compare 2 Json. Project sử dụng Json thay vì reflection vì Json sẽ dễ đọc hơn khi thực hiện lưu kết quả của compare.

  Kiểm thử ứng dụng Web – Ứng dụng Web là gì?
  Thực thi phương thức kiểm thử NUnit với Command Line

Chứa các field mang giá tri nguyên thủy, có thay đổi giá trị trước và sau updated.

Chứa các field mang giá trị là object hoặc array được thêm mới vào object

Các field mới xuất hiện tại object sau khi thực hiện action, trước đó object không tồn tại field này.

Chứa các field mang giá trị là object hoặc array được xóa đi trong object sau khi update

Chi tiết về cách sử dụng tham khảo các test được viết sẵn :

Ví dụ ta có object sau :

Entity trước khi thực hiện action.

{
  "employee":
  {
    "id": "1212",
    "fullName":"John Miles",
    "age": 35
  },
  "dem" : 16
}

Entity sau khi thực hiện action

{
  "employee": {
    "employId": "12122",
    "fullName": "John 1",
    "age": 35,
    "contact": {
      "email": "john@xyz.com",
      "phone": "9999999"
    }
  }
}

Sau khi thực hiện compare sẽ được kết quả như sau :

 var diffJson = new DDiffJsonBuilder()
                .insertBuilder( new InsertObjectBuilder())
                .updateBuilder(new UpdateObjectBuilder())
                .deleteBuilder(new DeleteFlattenKeyBuilder())
                .build();

diffJson.diffScan(beforeObject, afterObject);

var output = diffJson.toJsonFormatString();
{
  "updated": {
    "employee": {
      "fullName": "John 1"
    }
  },
  "inserted": {
    "employee": {
      "employId": "12122",
      "contact": {
        "email": "john@xyz.com",
        "phone": "9999999"
      }
    }
  },
  "deleted": {
    "employee.id": 1,
    "dem": 1
  }
}

Với Object nhỏ thì việc thực hiện chạy qua DiffJson thì không nhận thấy được ưu điểm nhưng nếu là một Object lớn và phức tạp, khi thực hiện API chỉ thay đổi vài trường thì sẽ thấy được lợi ích.

Tìm ngay việc làm Tester Hồ Chí Minh HOT tại TopDev!

2.3. Exclude fields

Khi thực hiện API có một số trường chúng ta không muốn compare như updated timestamp, trường timestamp này có thể có ở tất cả object nên việc loại trừ được các trường này cũng rất cần thiết.

Before Object :

{
  "employee":
  {
    "id": "1212",
    "updateTime" : 132245124312,
    "fullName":"John Miles",
    "age": 35
  },
  "dem" : 16,
  "createTime" : 12412412412
}

After Object :

{
  "employee": {
    "employId": "12122",
    "fullName": "John 1",
    "updateTime" : 13225124312,
    "age": 35,
    "contact": {
      "email": "john@xyz.com",
      "phone": "9999999"
    }
  },
   "createTime" : 1241312412
}

Code excludes timestamp

JsonNode beforeObject = DJacksonCommon.loadJsonFromFile("before_timestamp.json");
        JsonNode afterObject = DJacksonCommon.loadJsonFromFile("after_timestamp.json");
        var diffCompare = new DDiffJsonBuilder()
                .insertBuilder( new InsertObjectBuilder())
                .updateBuilder(new UpdateObjectBuilder())
                .excludeCompareFieldPath("createTime")
                .excludeCompareFieldPath("employee.updateTime")
                .deleteBuilder(new DeleteFlattenKeyBuilder())
                .build();

        diffCompare.diffScan(beforeObject, afterObject);

        String output = diffCompare.toJsonFormatString();
        System.out.println(output);

Output Object :

{
  "updated": {
    "employee": {
      "fullName": "John 1"
    }
  },
  "deleted": {
    "employee.id": 1,
    "dem": 1
  },
  "inserted": {
    "employee": {
      "employId": "12122",
      "contact": {
        "email": "john@xyz.com",
        "phone": "9999999"
      }
    }
  }
}

Một tính năng nữa của DDiff là có thể xác định được object nào đã bị xóa, thêm vào, update trong json array

Before Object :

{
  "plants": [
    {
      "plantId": "1",
      "name": "plant1"
    },
    {
      "plantId": "2",
      "name": "plant2"
    },
    {
      "plantId": "3",
      "name": "plant3"
    }
  ],
  "demtv": 11
}

After Object :

{
  "plants": [
    {
      "plantId": "1",
      "name": "plant11"
    },
    {
      "plantId": "3",
      "name": "plant3"
    },
    {
      "plantId": "4",
      "name": "plant4"
    }
  ],
  "demtv": 11
}

Code for object have array:

        JsonNode beforeObject = DJacksonCommon.loadJsonFromFile("array_json_sample/before_have_array_plant.json");
        JsonNode afterObject = DJacksonCommon.loadJsonFromFile("array_json_sample/after_have_array_plant.json");

        diffJson.registerObjectKeyInArrayByPath("plants","plantId");
        diffJson.diffScan(beforeObject, afterObject);

        String output = diffJson.toJsonFormatString();

Output Object :

{
  "updated": {
    "plants": [
      {
        "plantId": "1",
        "name": "plant11"
      }
    ]
  },
  "inserted": {
    "plants": [
      {
        "plantId": "4",
        "name": "plant4"
      }
    ]
  },
  "deleted": {
    "plants.plantId.2": 1
  }
}

3. Tổng kết

Các cách dùng kỹ hơn về thư viện này vui lòng tham khảo tại thư mục test. Test của Project đạt đến 83% line vậy nên có thể tin tưởng để sử dụng.

Bài viết gốc được đăng tải tại demtv.hashnode.dev

Xem thêm:

Hàng loạt việc làm IT hấp dẫn trên TopDev đang chờ bạn ứng tuyển.

Hướng dẫn xây dựng chức năng thay đổi avatar người dùng WordPress

Hướng dẫn xây dựng chức năng thay đổi avatar người dùng WordPress

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

Chào mọi người! Ở trong bài viết trước mình đã hướng dẫn các bạn xây dựng được trang thông tin người dùng. Trong bài viết này, mình sẽ hướng dẫn các bạn code thêm chức năng thay đổi avatar người dùng WordPress.

Chức năng upload hình ảnh

Khi người dùng muốn thay đổi hình ảnh đại diện, thì trước tiên người dùng phải upload được hình ảnh.

Bạn hãy thêm đoạn code upload hình ảnh dưới đây của mình vào file functions.php của theme bạn nhé.

Bạn có thể đọc qua đoạn và tìm hiểu trên tài liệu của WordPress các hàm mình đã sử dụng.

Nếu bạn không hiểu, bạn chỉ cần quan tâm function trên sẽ hỗ trợ người dùng upload hình ảnh ở bên ngoài giao diện. Và giá trị trả về của function trên là một array gồm:

  • url: Đường dẫn của hình ảnh sau khi đã được tải lên thư viện media của WordPress
  • id: ID của hình ảnh
  Hướng dẫn viết theme WordPress toàn tập - phần 1
  Chia sẻ kinh nghiệm sử dụng trình duyệt web an toàn

Tạo trang thay đổi avatar người dùng

Phần này sẽ giống như những bài viết trước trong series Custom tài khoản WordPress. Mình sẽ tạo một page có tiêu đề là Thay đổi avatar và đường dẫn là domain/thay-doi-avatar. Sau khi tạo page xong mình sẽ tạo một file PHP trong theme của mình có tên là page-thay-doi-avatar.

Sau khi hoàn thành các bước trên, các bạn hãy copy đoạn code dưới đây vào file PHP các bạn vừa mới tạo nhé.

Đây là giao diện các bạn sẽ nhận được khi sử dụng đoạn code trên. Bạn có thể sử dụng CSS để thay đổi lại sao cho đẹp hơn tuỳ vào bạn nhé.

Như mọi khi, mình đang sử dụng theme twentytwenty nên giao diện có thể sẽ khác bạn. Đừng lo lắng nhé.

giao diện thay đổi avatar người dùng

Giải thích một chút

Giống như các bài viết cũ. Ở đây mình cũng sử dụng câu lệnh điều kiện ở dòng 7 để kiểm tra người dùng đã đăng nhập chưa. Và ở dòng 19, mình vẫn tiếp tục sử dụng hàm wp_nonce_field với mục đích bảo mật.

Ở dòng 24, mình sử dụng hàm wp_get_current_user để lấy ra được thông tin của người dùng hiện tại đang đăng nhập. Từ đó mình sẽ lấy đựa ID người dùng và truyền vào trong hàm get_avatar_url. Hàm này sẽ trả về địa chỉ URL avatar mặc định của người dùng ở dòng 29.

Còn ở dòng 25, mình sẽ sử dụng một hàm đó là get_user_meta. Hàm này sẽ trả về một dữ liệu mà mình sẽ tạo ở phần tiếp theo, cụ thể mình sẽ tạo một user meta mới để lưu trữ URL avatar mà người dùng đã upload.

Từ dòng 26 đến 30 là mình sẽ dùng câu lệnh if else kiểm tra xem người dùng đã upload dữ liệu avatar mới chưa? Nếu chưa up thì sẽ hiển thị avatar mặc định của WordPress.

Còn lại chỉ là các thẻ HTML cơ bản. Các bạn có thể thay đổi lại layout cho phù hợp nhé.

Gửi dữ liệu lên server

Sau khi người dùng chọn ảnh từ máy tính và xác nhận, thì chúng ta phải gửi hình ảnh đó lên server. Như những bài viết trước, mình sẽ sử dụng AJAX để xử lý việc này. Nếu các bạn chưa tìm hiểu qua AJAX là gì thì có thể thao khảo các bài viết AJAX trong WordPress nhé.

Đoạn code dưới đây sẽ hỗ trợ bạn gửi dữ liệu lên server bằng AJAX. Hãy thêm vào file footer.php của theme bạn, nếu đã khai báo jQuery rồi thì xoá dòng đầu tiên đi.

Đừng bỏ lỡ việc làm Front-End hấp dẫn trên TopDev!

Xử lý dữ liệu trên server

Khi dữ liệu đã gửi lên server, thì tiếp theo chúng ta phải xử lý chúng. Các bạn hãy thêm đoạn code bên dưới đây vào file functions.php nhé.

Giải thích một chút

Đầu tiên mình sẽ khai báo 3 biến. $file_upload là biến mình dùng để nhận file mà người dùng đã upload lên server. $user_id là biến mình dùng để lấy được ID của người dùng hiện tại dang đăng nhập. Ở đây mình sử dụng hàm get_current_user_id để làm điều đó. Còn biến $avatar_data sẽ là một mảng, nó sẽ nhận giá trị trả về của chức năng upload hình ảnh mà mình đã đề cập ở phần đầu tiên.

Ở dòng 7 sau khi mình kiểu tra biến $file_upload tồn tại và có giá trị, thì mình sẽ gán dữ liệu đã nhận được từ hàm mình đã viết là hk_user_upload_image vào biến $avatar_data.

User meta là gì?

Để các bạn có thể hiểu sâu hơn, mình sẽ giải thích về user meta một chút. Mặc định profile của người dùng sẽ có các trường dữ liệu như Họ, Tên, Tên hiển thị, Trang web, Tiểu sử,… Tuy nhiên nếu bạn muốn thêm các trường dữ liệu mới cho người dùng thì phải làm thế nào? Lúc này các trường dữ liệu mới cho người dùng được gọi là user meta.

Bạn có thể thêm một user meta mới bằng hàm add_user_meta. Cập nhập lại user meta bằng hàm update_user_meta. Và lấy giá trị của user meta ra sử dụng bằng hàm get_user_meta. User meta sẽ là một cặp meta_key và meta_value. Với meta_value sẽ lưu trữ giá trị dựa trên meta_key.

Áp dụng user meta

Ý tưởng của mình là sẽ tạo một user meta mới có key là custom_avatar, và custom_avatar này sẽ truyền vào giá trị là địa chỉ URL của hình ảnh mà người dùng đã tải lên.

Từ dòng 12, mình sẽ kiểm tra xem custom_avatar đã tồn tại chưa? Nếu đã tồn tại rồi thì mình sẽ sử dụng hàm update_user_meta để cập nhập lại dữ liệu. Nếu chưa tồn tại thì mình sẽ tạo một user meta mới, có key chính là custom_avatar để lưu trữ giá trị URL hình ảnh mà người dùng đã upload.

Vì khi gửi dữ liệu lên server mình dùng dataType là json. Nên cuối cùng mình sử dụng hàm wp_send_json_success để trả về dữ liệu cho phía client.

Thay đổi avatar mặc định của người dùng WordPress

Mặc định WordPress sử dụng Gravatar để cho phép người dùng cập nhập avatar. Mình không phủ nhận sự tiện lợi của Gravatar nhưng không phải người dùng nào cũng biết và sử dụng nó.

Để thay đổi avatar mặc định của WordPress thành avatar mà người dùng đã upload, bạn hãy thêm đoạn code dưới đây vào file functions.php

Đây là kết quả mà bạn sẽ nhận được tại giao diện quản trị của WordPress. Hình ảnh người dùng sẽ được thay đổi dựa trên upload của họ.

custom avatar admin wordpress

Lời kết

Vậy là bài viết của mình đã kết thúc rồi. Đây là một chủ đề theo mình nghĩ là khá phức tạp. kết hợp nhiều kiến thức lại với nhau.

Hy vọng rằng qua bài viết này các bạn có thể hiểu được và tự code được cho mình một tính năng tương tự như vậy. Không chỉ dừng lại ở việc upload ảnh đại diện cho người dùng, mà có thể là upload ảnh cho bất kì nơi nào, tuỳ thuộc vào nhu cầu hoặc ý tưởng của bạn.

Nếu bạn đang tìm kiếm cơ hội việc làm, hãy tham khảo ngay việc làm IT mọi cấp độ trên TopDev nhé!

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

Xem thêm:

Tạo kho lưu cho các gói thư viện Python

tạo kho lưu cho thư viện python

Bài viết được sự cho phép của tác giả Nguyễn Hồng Quân

Python là ngôn ngữ chính cho hệ thống backend của AgriConnect. Với đội ngũ giàu kinh nghiệm về Python, luôn đẩy sự khai thác, “bóc lột” Python đến mức cao nữa, cao nữa, nên quá trình vận hành của AgriConnect thường dẫn đến những nhu cầu “không giống ai”. Một trong số đó là nhu cầu dựng một kho chứa gói thư viện Python “tại nhà”. Bài dưới đây xin chia sẻ kinh nghiệm như thế.

Khi hệ thống của AgriConnect vận hành, tác vụ cài đặt các gói thư viện Python được thực hiện lặp đi lặp lại rất nhiều lần. Chúng đến từ:

  • Hệ thống chạy test tự động, kích hoạt mỗi khi có code mới được đẩy lên Git.
  • Việc deploy bản cập nhật đến các server nội bộ đặt rải rác ở các trang trại khách hàng.

Đa số các máy mà quá trình cài đặt thư viện Python diễn ra, đều nằm ở Việt Nam, nên việc để pip kéo phần mềm từ kho chính thức của Python (https://pypi.org/) làm tôi thấy chưa được tối ưu. Không những phí thời gian truyền tải (đường xa), làm chật chội đường truyền đi ra nước ngoài mà còn tạo áp lực lên hạ tầng của PyPI. Tôi không muốn tạo gánh nặng về chi phí bảo trì lên họ, khi tôi đã được sử dụng dịch vụ miễn phí của họ. Ngoài ra còn có một lý do thiết thực khác là nhu cầu về sự đa dạng nền tảng cần hỗ trợ, ví dụ:

  • Quá trình test tự động, được chạy trong các Docker container, build từ Alpine Linux. Khác với các bản Linux phổ biến khác (Ubuntu, RedHat v.v..), bản Linux này sử dụng thư viện chuẩn C musl. Các gói thư viện Python build sẵn (dưới dạng file *.whl) có trên PyPI đều dành cho thư viện chuẩn C glibc nên không sử dụng được. Nếu build lại từ source trong container luôn thì cực tốn thời gian. Một host riêng là cần thiết để chứa các gói build sẵn này, nhưng dành cho musl.
  • Cloud server phục vụ các khách hàng không có nhu cầu dùng server nội bộ. Server này dùng Ubuntu thông thường nên không có vấn đề gì.
  • Các server nội bộ triển khai cho khách hàng, sử dụng BeagleBone, một loại máy tính Linux nhúng với CPU ARM. Phần lớn các gói thư viện Python build sẵn trên PyPI cũng đều không có bản dành cho ARM. Build các gói ngay trên BeagleBone, trong lúc deploy, là việc không thể, đơn giản vì quá tải (Tôi phải thuê server bare metal với CPU ARM từ Scaleway để làm công đoạn build, trước khi phân phối đến các board nhúng này).
  Sự khác nhau giữa Method và Function trong Python

Trước đây tôi tận dụng một số dịch vụ cloud, để chứa các gói Python này. Các dịch vụ gồm có: PackageCloudGemfuryCloudSmith. Ưu điểm của chúng:

  • Nhanh gọn, không phải setup server này nọ. Đăng ký là dùng được ngay thôi. Tất nhiên vẫn cần cài phần mềm client để upload gói lên.
  • Giao diện Admin để quản lý các gói (đang chứa các gói nào, phiên bản bao nhiêu, dành cho nền tảng nào, nội dung bên trong gồm file gì).
  • Có tài khoản miễn phí

Thế nhưng dần dần tôi thấy những dịch vụ kia vẫn còn trở ngại nhỏ:

  • PackageCloud có giới hạn dung lượng download mỗi tháng cho tài khoản miễn phí, và với hoạt động của AgriConnect thì chúng hết rất nhanh.
  • Gemfury không cho chia nhỏ các kho ra. Mỗi tài khoản chỉ có một kho để tống hết tất cả các gói vào, không tiện quản lý. Mỗi lần upload một gói mới lên (không trùng tên với gói đã có) thì phải vào website để chuyển gói đó sang chế độ public.
  • CloudSmith tốc độ upload gói rất chậm, khi upload một gói trùng với phiên bản đã có trên kho thì nó coi là lỗi và hiện rất nhiều báo lỗi trên trang quản lý.

Nên tôi quyết định tận dụng các server sẵn có (hầu hết đặt trong nước) đề làm kho lưu luôn.

  Flask python là gì? - Những điều cần biết

Tôi không có nhu cầu setup một trang với chức năng đầy đủ, y xì như PyPI. Cái tôi cần là:

  • Setup nhanh, không cần tạo database, người dùng, xác thực.
  • Upload bằng công cụ dòng lệnh sẵn có (ví dụ scplftp).
  • Có thể upload cùng lúc nhiều file (công cụ của CloudSmith không có chức năng này nên tôi phải dùng mẹo, kết hợp với fd-find).

Sau một lúc rà qua các phần mềm khác nhau thì tôi thấy dumb-pypi gần với ý đồ của tôi nhất. Đặc điểm của dump-pypi:

  • Dùng phương thức host file tĩnh để phục vụ download các gói. Điều đó có nghĩa tôi chỉ cần một web server thông thường, như Nginx. Chỉ đối xử các gói như file tĩnh nên không cần ngôn ngữ lập trình gì hết (không cần chạy một trang PHP chẳng hạn).
  • Để tạo một trang danh sách các gói mà pip có thể hiểu được thì dump-pypi sẽ giúp sinh ra một trang HTML tĩnh. Không cần có một trang web động, ví dụ PHP, để sinh ra danh sách này.
  • Vì chỉ host file tĩnh nên chỉ cần dùng bất cứ công cụ nào để upload file lên server, đặt vô đúng thư mục. Tức là tôi có thể dùng scp, tận dụng SSH để xác thực.

Chỉ có điều, trái với mong đợi của tôi, cách setup ban đầu của nó không nhanh tí nào. Lí do là tác giả ưu tiên tình huống lưu file trên S3 nên tài liệu tập trung vào nó hơn. Hướng dẫn với Nginx thì sơ sài, thậm chí cũ, chẳng biết dành cho Nginx đời nào mà đem cho Nginx mới (trên Ubuntu 19+) thì bị báo lỗi. Đó là lí do tôi phải ghi ra bài này.

Tham khảo việc làm Python Hồ Chí Minh hấp dẫn!

Giả sử tôi dùng thư mục /srv/PyPI làm kho lưu các gói. Do nhu cầu “hỗ trợ đa nền tảng” ở trên mà trong thư mục này tôi lại chia ra thêm 2 thư mục con:

  • glibc: Dành cho các gói *.whl được build cho hệ thống nào dùng glibc làm thư viện C chuẩn. Áp dụng cho cả CPU x86_64 và armhf.
  • musl: Dành cho các gói *.whl được build cho hệ thống nào dùng musl làm thư viện C chuẩn, tức là trong Docker container. Chỉ cần tương thích CPU x86_64.

Do tên các gói của Python không phân biệt - và _ nên ta phải cấu hình cho Nginx sao cho khi pip yêu cầu gói vietnam_provinces thì Nginx vẫn trả về vietnam-provinces. Để thực hiện được tính năng này thì ta sẽ viết một hàm Lua ngắn phụ trợ cho Nginx. Trước tiên, cần cài module Lua cho Nginx. Trên Ubuntu/Debian thì cài bằng lệnh sau:

sudo apt install libnginx-mod-http-lua

Tạo một file cấu hình virtual host cho Nginx. Ví dụ, trên Ubuntu thì tạo file /etc/nginx/sites-available/pypi.conf với nội dung như sau:

server {
    server_name pypi.agriconnect.vn;

    root /srv/PyPI;
    index index.html;
    sendfile on;
    autoindex on;

    location / {
        set_by_lua_block $canonical_uri {return string.gsub(string.lower(ngx.var.uri), '[-_.]+', '-')}
        try_files $uri $uri/index.html $uri/ $canonical_uri $canonical_uri/index.html =404;
    }

    location ~*  /.+/json$ {
        default_type "application/json; charset=utf-8";
    }

    listen 80;
    listen 443 ssl http2;
    ssl_certificate /etc/letsencrypt/live/pypi.agriconnect.vn/fullchain.cer;
    ssl_certificate_key /etc/letsencrypt/live/pypi.agriconnect.vn/pypi.agriconnect.vn.key;
}

Lưu ý rằng cấu hình này cũng bật HTTPS cho kho lưu của chúng ta (ví dụ pypi.agriconnect.vn), không thì sẽ phải nghe pip càm ràm khi tải gói qua HTTP trần.

Trong mỗi thư mục trên, ta lại sẽ bố trí các file như sau:

/srv/PyPI/glibc$ tree -L 1
.
├── gen.sh
├── packages/
├── packages.txt

Trong đó thư mục packages là nơi ta sẽ upload các file *.whl lên. File gen.sh là script mà ta sẽ chạy để sinh ra cấu trúc thư mục tương tự nhìn thấy trên PyPI qua con mắt của pip, để nó biết có thể download được gói nào từ server này.

Nội dung của gen.sh như sau:

#!/bin/sh

dumb-pypi --package-list packages.txt --packages-url ../../packages --output-dir .

Không biết vì lý do gì mà tác giả của dumb-pypi không cho nó tự nhìn vào thư mục packages để tự lập danh sác các gói, mà phải nhận đầu vào là một file chứa sẵn danh sách các gói, là file packages.txt. Mặc dù dumb-pypi hơi ngu (đúng với cái tên dumb) nhưng ta có thể sinh ra file đó rất dễ dàng như sau:

$ cd packages
$ ls > ../packages.txt

Mỗi lần upload gói mới, ta sẽ cần tạo lại file packages.txt, chạy lại ./gen.sh để sinh ra các thư mục như sau:

$ broot
/srv/PyPI/glibc
├──gen.sh
├──index.html
├──packages
│  ├──asyncpg-0.18.3-cp37-cp37m-linux_armv7l.whl
│  ├──Brotli-1.0.7-cp37-cp37m-linux_armv7l.whl
│  ├──cchardet-2.1.5-cp37-cp37m-linux_armv7l.whl
│  ├──cffi-1.13.2-cp37-cp37m-linux_armv7l.whl
│  └──60 unlisted
├──packages.txt
├──pypi
│  ├──aiohttp …
│  ├──asyncpg …
│  ├──brotli …
│  ├──cchardet …
│  ├──cffi …
│  └──30 unlisted
└──simple
   ├──aiohttp …
   ├──asyncpg …
   ├──brotli …
   ├──cchardet …
   ├──cffi …
   └──32 unlisted

Từ đây trở đi, mỗi lần sử dụng pip, ta thêm tham số như sau:

pip install --extra-index-url=https://pypi.agriconnect.vn/glibc/simple

thì pip sẽ ưu tiên dò tìm và tải gói từ kho riêng của chúng ta.

Nếu ta không trực tiếp dùng pip, mà quản lý gói phụ thuộc bằng công cụ khác, như Poetry chẳng hạn, thì ta truyền cấu hình kho riêng qua biến môi trường, ví dụ:

export PIP_EXTRA_INDEX_URL=https://pypi.agriconnect.vn/glibc/simple
poetry add asyncpg
poetry install --no-root

Hình ảnh cho thấy pip đang download gói từ kho riêng:

pip_custom_repo

Nhân đây, pypi.agriconnect.vn là một địa chỉ kho thật và bạn có thể dùng chung nó với chúng tôi (chỉ được download thôi nhé) nếu có cùng đam mê với Python.

Cập nhật

Để đỡ công nhảy ra nhảy vào tạo danh sách gói, có thể đưa bước đó vào script gen.sh như sau:

#!/bin/bash

pushd packages
ls > ../packages.txt
popd
rm -rf pypi simple
dumb-pypi --package-list packages.txt --packages-url ../../packages --output-dir .

Hy vọng qua bài viết này sẽ giúp bạn biết cách tạo kho lưu cho các gói thư viện Python. Đừng quên truy cập Topdev để cập nhật các tin tuyển dụng IT mới nhất bạn nhé!

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

Chuyển đổi Unicode dựng sẵn & tổ hợp với Python

chuyển đổi Unicode dựng sẵn

Bài viết được sự cho phép của tác giả Nguyễn Hồng Quân

Dạo này các ứng dụng với dữ liệu tiếng Việt đang ngày một nhiều, trong đó vấn đề sai khác giữa Unicode dựng sẵn và tổ hợp, tuy nhỏ, nhưng cũng gây mất chút kha khá thời gian debug cho những người mới vào nghề. Mình chia sẻ xíu kinh nghiệm này, để việc phát triển ứng dụng tiếng Việt trở nên trơn tru hơn, và cũng để “khoe hàng” về hệ sinh thái giàu mạnh của Python.

Tưởng tượng một tình huống sau. Ứng dụng của bạn cho người dùng nhập vào một chuỗi tiếng Việt, khi nhận được chuỗi, phần mềm sẽ dò trong cơ sở dữ liệu để chọn ra bản ghi nào ăn khớp với chuỗi đó. Cơ sở dữ liệu này được một người khác nhập liệu. Bạn đã chắc chắn rằng chuỗi đó có tồn tại trong cơ sở dữ liệu, nhưng không hiểu sao phần mềm so sánh, dò tìm không ra. Hóa ra là người nhập liệu, khi gõ chuỗi vào thì dùng Unicode tổ hợp (decomposed), trong khi người dùng lúc nhập chuỗi tìm kiếm vào thì dùng Unicode dựng sẵn (composed). Dưới dạng chuỗi byte thì hai chuỗi này không giống nhau, nên bằng biện pháp so sánh chuỗi unicode thông thường, phần mềm sẽ không nhận ra.

  Tại sao bạn nên sử dụng Python Generator

Lấy ví dụ một chuỗi sau, “Tiếng Việt bão táp”, nếu là Unicode dựng sẵn, khi thể hiện dưới dạng chuỗi byte, dàn theo bảng mã UTF-8, thì là chuỗi byte này:

b'Ti\xe1\xba\xbfng Vi\xe1\xbb\x87t b\xc3\xa3o t\xc3\xa1p'

Trong khi nếu là Unicode tổ hợp, khi thể hiện ở dạng chuỗi byte UTF-8, thì sẽ thành:

b'Tie\xcc\x82\xcc\x81ng Vie\xcc\xa3\xcc\x82t ba\xcc\x83o ta\xcc\x81p'

Vậy muốn so sánh hai chuỗi, phải đưa chúng về cùng một kiểu Unicode trước. Cách làm ra sao?

Trên mạng có lưu truyền một cách thô thiển là tạo một bảng đối chiếu, chuyển đổi từng chữ cái một, như ví dụ này.

Đây rõ ràng là một phương án “vai u thịt bắp”. Có một giải pháp đơn giản hơn nhiều. Trong thư viện chuẩn của Python, có module unicodedata đã có sẵn chức năng này. Ví dụ:

>>> import unicodedata

>>> to_hop = 'Tiếng Việt bão táp'                                               

>>> dung_san = unicodedata.normalize('NFC', to_hop)

>>> to_hop.encode()
b'Tie\xcc\x82\xcc\x81ng Vie\xcc\xa3\xcc\x82t ba\xcc\x83o ta\xcc\x81p'


>>> dung_san.encode()
b'Ti\xe1\xba\xbfng Vi\xe1\xbb\x87t b\xc3\xa3o t\xc3\xa1p'

Như vậy, bí quyết là dùng hàm unicodedata.normalize(), truyền vào tham trị “NFC” nếu muốn chuyển đổi thành dựng sẵn, truyền vào “NFD” nếu muốn chuyển đổi thành tổ hợp. Mẹo nhớ: Chữ “C” trong “NFC” nghĩa là “composed”, tức là “Unicode dựng sẵn”.

Thông tin sâu thêm một chút về kĩ thuật. Lấy ví dụ chữ “ế”, nếu ở kiểu “dựng sẵn” thì chữ này sẽ được dành riêng một vị trí (U+1EBF) trong bảng Unicode luôn, trong khi nếu ở kiểu “tổ hợp” thì các dấu thanh sẽ được tách ra (decomposed), đại diện bằng các ô khác trong bảng Unicode.

e unicode

Để phát triển giải pháp này lên một bước nữa, ta sẽ làm cho việc chuyển đổi này xảy ra một cách tự động, vô hình trong phần mềm. Quay về tình huống kể trên, đó là tình huống trong một dự án cũ mà tôi tham gia. Tôi đã làm thêm một lớp validation để làm sạch dữ liệu đầu vào, ở cả hai khâu: khâu nhập liệu và khâu người dùng tìm kiếm, chuyển đổi chúng về Unicode dựng sẵn hết. Với mục đích kiểm tra sự hợp lệ (validate) dữ liệu ở các dự án Python thì tôi thường chọn thư viện Pydantic. Công dụng của nó là: kiểm tra sự hợp lệ dữ liệu đầu vào, nếu không hợp lệ thì hoặc là báo lỗi, hoặc là tự gò nắn cho đúng rồi nhận vào. Công dụng này tương tự như Django form.

  Python: Sự khác nhau giữa List và Tuple?

Lấy ví dụ, ứng dụng của ta cần tiếp nhận dữ liệu bên ngoài truyền vào với cấu trúc như sau:

class Person:
    name: str
    age: int

và dữ liệu truyền vào có thể là một chuỗi JSON:

{"name": "Ếch Xanh", "age": 11}

Ta luôn cần bước kiểm tra hợp lệ, vì không thể đảm bảo lúc nào dữ liệu truyền vào cũng đúng ý, nó có thể thiếu một vài field, chuỗi dư kí tự lạ, hoặc không đúng kiểu dữ liệu (cần integer nhưng lại truyền vào string):

{"name": "Mèo Đen   ", "age": "09"}

Khi dùng Pydantic thì tôi sẽ implement cấu trúc trên như sau:

from pydantic import BaseModel                                              

class Person(BaseModel):
    name: str 
    age: int 

Dùng thử:

>>> Person.parse_obj({"name": "Mèo Đen   ", "age": "09"})                       
Person(name='Mèo Đen   ', age=9)

Để đảm bảo dữ liệu của field “name” sẽ được tự động chuyển đổi thành Unicode dựng sẵn, tôi sẽ định nghĩa một kiểu field mới cho Pydantic:

from pydantic import ConstrainedStr


class VinaStr(ConstrainedStr):
    '''
    A constrained string type which automatically normalizes Vietnamese Unicode string.

    It converts from decomposed ("tổ hợp") to composed ("dựng sẵn") Unicode.
    '''
    strip_whitespace = True

    @classmethod
    def validate(cls, value: str):
        cleaned = super().validate(value)
        if cleaned:
            return unicodedata.normalize('NFC', cleaned)
        return cleaned

Áp dụng vào class Person bên trên:

class Person(BaseModel):
    name: VinaStr
    age: int

Thử lại với dữ liệu hơi không sạch:

>>> p = Person.parse_obj({'name': ' Hoẵng Con ', 'age': '04'})

>>> p
Person(name='Hoẵng Con', age=4)

>>> p.name.encode()
b'Ho\xe1\xba\xb5ng Con'

Có thể thấy rằng ở field name, chuỗi đầu vào vừa được xóa sạch kí tự khoảng trắng dư, vừa được chuyển đổi Unicode, và field age thì chuỗi được biến thành số nguyên.

Xem lại code từ đầu với hình động cho đỡ chán:

animation

Như vậy tôi đã trình bày xong cách chuyển đổi Unicode tổ hợp dựng sẵn trong Python, tặng kèm bí quyết về xử lý dữ liệu nói chung trong công việc. Mong rằng cộng đồng lập trình viên Việt Nam sẽ áp dụng các thói quen thực hành tốt để nâng cao chất lượng sản phẩm hơn nữa.

Đừng quên theo dõi TopDev để cập nhật các việc làm Python mới nhất nhé!

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

Xem thêm:

Python Là Gì? Các Bước Tự Học Lập Trình Python

Lộ trình từng bước trở thành Machine Learning Engineer

Lập Trình với Game Flappybird Python

Ứng tuyển ngay hàng loạt IT Job Hot trên TopDev!

Thông não về các khái niệm Web1, Web2, Web3

web1 web2 web3 là gì

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

Gần đây, từ khóa Web3 đã không còn quá xa lạ với một lập trình viên website; nó được mô tả như là 1 tương lai của Internet. Thực tế thì khi có tên gọi Web3 ra đời thì người ta mới định nghĩa lại những cái tên Web1 hay Web2 một cách cụ thể hơn. Bài viết này mình sẽ cùng các bạn tìm hiểu, thông não về những khái niệm trên để đi nghe chém gió có hiệu quả hơn nhé.

khái niệm về web 3

World Wide Web (WWW) là gì?

WWW, mạng lưới toàn cầu là một không gian thông tin toàn cầu mà mọi người có thể truy cập thông qua các thiết bị kết nối Internet. Web là 1 dịch vụ chạy trên Internet cùng với các dịch vụ khác như Email, FTP, …

Cuộc cách mạng World Wide Web bắt đầu từ những năm 1991 được xem như là thời điểm đánh dấu sự ra đời của Web1 – 1 mạng lưới liên kết toàn cầu bằng Internet. Ở thời điểm này, Web được tạo ra đa phần với các nội dung đơn giản, thường chỉ có số và chữ hoặc ảnh tĩnh. Người dùng tiếp nhận thông tin 1 cách thụ động 1 chiều, hiểu đơn giản như 1 cách đọc báo giấy hàng ngày qua Internet. Giai đoạn của Web1 kéo dài đến những năm đầu của thế kỷ 21 với hạn chế về giới hạn tốc độ truyền tải của Internet cũng như các thiết bị có khả năng truy cập Internet.

  Web3 tất cả những điều cần biết

Sự ra đời của Web2

Năm 2004, Internet đã được các nhà phát triển định nghĩa lại như một nền tảng nơi mà ai cũng có thể tham gia sáng tạo nội dung và xây dựng cộng đồng. Và đây chính là thời kỳ của chúng ta hiện nay, Web2 ra đời với sự phát triển chóng mặt của Facebook, Youtube; từ iPhone đến Macbook; và các khái niệm Youtuber, Tiktoker cũng ra đời. Nhờ hệ thống hạ tầng Internet phát triển đáp ứng được khả năng truyền tải nội dung, ngày nay chúng ta dễ dàng tham gia vào các group trên mạng xã hội Facebook; xem video 4K trên youtube hay ngồi nhà làm việc remote hoặc học online.

Đến nay thì Web2 vẫn đang phát triển và còn nhiều tiềm năng được khai thác, tuy nhiên cùng có những lo ngại với Web2 đã được đưa ra và bàn luận. Cụ thể là sự lo ngại cho vấn đề bảo mật thông tin người dùng, sự thao túng thông tin đến từ các tập đoàn lớn, sở hữu lượng người dùng khủng trong nền tảng ứng dụng của họ. Hãy thử tưởng tượng rằng Facebook đã có đến hơn 1 tỷ người dùng trên toàn thế giới, nếu như Facebook muốn tìm ra bạn thì đâu có quá khó khăn; hoặc nghiêm trọng hơn khi Facebook đăng 1 tin tức về sự kiện nào đó đến 1 tỷ người, liệu có sự xác thực nào đã được kiểm duyệt hay chưa?

  Xu hướng phát triển của IoT hiện nay

Web3 giải quyết vấn đề trên

Từ bài toán trên, ta có thể mường tượng ra vấn đề ở chỗ dữ liệu của chúng ta – những người dùng Internet đang không thực sự thuộc về chúng ta, nó đang được lưu trữ vào 1 nơi mà chỉ những ứng dụng đó mới có toàn quyền quyết định. Với sự phát triển của 1 công nghệ khác có tên là Blockchain, Web3 ra đời để giải quyết bài toán đã đặt ra.

web 3 giải quyết các vấn đề gì?

Web3 xây dựng 1 hệ thống xử lý dữ liệu phi tập trung khổng lồ bằng Blockchain, AI và sức mạnh xử lý phần cứng. Có thể hiểu đơn giản là khi bạn tham gia vào Web3, bạn sẽ được định danh là duy nhất, không ai thay thế được bạn bằng cách ghi đè lên định danh của bạn.

Với dữ liệu bạn sở hữu và lưu trữ, nó được lưu trữ 1 cách phân tán, không tồn tại ở 1 ổ cứng, 1 đám mây lưu trữ cụ thể nào cả; từ đó việc lấy cắp thông tin khi không được phép là điều có thể xem là bất khả thi.

Xem thêm tuyển dụng việc làm Web Design 

Vẫn còn nhiều tranh cãi về Web3

Mang trong mình 1 lý tưởng khá tốt đẹp, tuy nhiên hiện nay thì Web3 vẫn còn vấp phải nhiều sự nghi ngờ đến từ các chuyên gia công nghệ hay các tập đoàn lớn. Elon Musk – tỷ phú công nghệ CEO Tesla có phát biểu kém thân thiện với Web3 khi cho rằng đó là 1 khái niệm viển vông, mang tính tiếp thị nhiều hơn thực tế. Ngoài ra 1 số chuyên gia khác cũng cho rằng, thực chất Web3 vẫn đang và sẽ nằm dưới sự kiểm soát của các nhà đầu tư lớn, không có sự đảm bảo tính bình đẳng về dữ liệu trong hệ thống này.

tranh cãi về web3

Rõ ràng còn nhiều tranh cãi về tương lai và tính hữu ích của Web3. Với người dùng hiện nay, đã có quá nhiều công nghệ mới cần phải tìm hiểu học cách sử dụng. Hy vọng bài viết này đã mang đến cho các bạn cái nhìn cơ bản nhất về Web3.

Đừng quên truy cập TopDev để cập nhật các thông tin mới nhất về việc làm Web Developer bạn nhé. Hẹn gặp lại các bạn trong các viết sau của mình.

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

Theo dõi những bài viết mới nhất của TopDev nhé:

Tìm kiếm việc làm IT mới nhất tại TopDev!

Làm thế nào để tối ưu chi phí vận hành doanh nghiệp dưới tác động của đại dịch Covid-19

Zoho - Giải pháp phần mềm tích hợp

Hiện nay, khi nền kinh tế đang dần bước sang giai đoạn thích ứng với những tác động kéo dài của đại dịch Covid-19, việc chuyển đổi số và áp dụng các giải pháp số mang tầm quan trọng về chiến lược. Chủ doanh nghiệp, đặc biệt là ở quy mô vừa và nhỏ, mong muốn các khoản đầu tư vào giải pháp công nghệ sẽ tạo ra giá trị cao hơn số tiền bỏ ra ban đầu, đồng thời tiết kiệm được chi phí trong giai đoạn dịch bệnh còn diễn biến phức tạp.

Quyết định giải pháp nào phù hợp với doanh nghiệp thật sự là bài toán khó khi trên thị trường có quá nhiều sự lựa chọn.

Trong bối cảnh đó, Giải pháp phần mềm tích hợp – nhiều phần mềm chức năng cùng hoạt động trên một nền tảng duy nhất – đang là xu hướng được thế giới quan tâm. Đây cũng là đáp án phù hợp nhất mà các doanh nghiệp Việt cần ở thời điểm hiện tại. Giải pháp phần mềm tích hợp có thể đơn giản hóa quá trình thích ứng của doanh nghiệp và giảm thiểu đáng kể chi phí đầu tư công nghệ trên mỗi nhân viên.

Doanh nghiệp tìm kiếm giải pháp tiết kiệm chi phí

zoho - tối ưu chi phí vận hành doanh nghiệp

Các khoản đầu tư về phần mềm và công nghệ rất khó tính toán do có nhiều yếu tố ảnh hưởng đến chi phí trên mỗi nhân viên (cost per employee). Một số phần mềm tính chi phí dựa trên số lượng tài khoản truy cập mà công ty sử dụng. Một số khác tính dựa trên đơn vị tổ chức, khiến cho chi phí trên mỗi nhân viên của doanh nghiệp nhỏ cao hơn so với doanh nghiệp lớn. Hơn nữa, khi doanh nghiệp muốn mua thêm các tài khoản phần mềm phục vụ những mục đích kinh doanh khác, chi phí đầu tư công nghệ trên mỗi nhân viên dễ dàng tăng phi mã.

Theo đó, doanh nghiệp thường phải trích ra 6-10% doanh thu để đầu tư cho công nghệ. Tuy nhiên, mức chi phí đầu tư có thể thay đổi phụ thuộc vào hiệu quả và tỷ suất lợi nhuận của việc kinh doanh.

Đối mặt với những thách thức này, doanh nghiệp phải làm gì để kiểm soát chi phí đầu tư cho công nghệ?

Giải pháp tích hợp tính năng cho người dùng

Nhiều công ty phát triển ứng dụng di động (mobile app) trực tiếp cho người dùng đã tìm cách phát triển để giải quyết vấn đề tương tự. Những công ty này tạo ra giá trị bằng cách cung cấp dịch vụ tích hợp theo chiều dọc nhằm giảm các chi phí trực tiếp và gián tiếp, đồng thời nâng cao hiệu quả sử dụng.

Một ví dụ điển hình của sản phẩm công nghệ tích hợp dịch vụ khách hàng là sự nổi lên của các siêu ứng dụng như WeChat (Trung Quốc), Grab (Singapore), GoJek (Indonesia) và Kakao (Hàn Quốc). Điểm chung của những ứng dụng này là cung cấp rất nhiều dịch vụ tích hợp trên một giao diện di động, từ dịch vụ vận tải, nhắn tin, giao hàng, bán vé, đến dịch vụ tài chính. Thông thường, toàn bộ dịch vụ đều được thanh toán từ một ví chung, đảm bảo trải nghiệm liền mạch và thuận tiện cho khách hàng. Do đó, nền tảng giải pháp tích hợp theo chiều dọc sẽ làm tăng giá trị cho khách hàng.

Giải pháp tích hợp tính năng cho doanh nghiệp

Câu hỏi đặt ra ngay lúc này là các nhà cung cấp phần mềm cho doanh nghiệp có thể làm gì để giải quyết vấn đề chi phí đầu tư cho công nghệ trên mỗi nhân viên, đồng thời vẫn mang lại giá trị thông qua những dịch vụ tích hợp.

Dù chưa có công ty nào hiện nay có thể cung cấp toàn bộ phần mềm cùng một lúc, nhiều tên tuổi lớn đang hướng đến mục tiêu này. Kể từ năm 2018, đã có một số thương vụ mua lại nổi tiếng trong lĩnh vực SaaS (phần mềm dạng dịch vụ), tạo tiền đề cho các nhà cung cấp phần mềm bổ sung nhiều dịch vụ tích hợp vào nền tảng có sẵn của họ. Điều này có nghĩa là càng nhiều dịch vụ được tích hợp vào nền tảng chung, chi phí đầu tư cho hệ điều hành doanh nghiệp càng tiết kiệm và thuận tiện.

Hiện nay, khách hàng doanh nghiệp yêu cầu phần mềm có khả năng đảm đương nhiều chức năng trong doanh nghiệp hơn, từ quản lý khách hàng đến tài chính và nhân sự. Bên cạnh đó, phần mềm cũng cần hỗ trợ sâu về chuyên môn, từ giao diện người dùng, lưu trữ dữ liệu, đến tự phát triển ứng dụng và truy cập mọi lúc mọi nơi.

Dự đoán được xu hướng này, Zoho chính thức ra mắt Zoho One vào năm 2017, cho phép doanh nghiệp quản lý công ty thông qua bộ ứng dụng của Zoho chỉ với một lần đăng nhập. Trải qua 5 năm phát triển và cải tiến, Zoho One đã đạt được những con số ấn tượng: 45 phần mềm làm việc hiệu quả trên một nền tảng chung, tin dùng bởi hơn 48.000 doanh nghiệp trên khắp thế giới, trong đó khách hàng lớn nhất có hơn 46.000 nhân viên. Zoho định vị là nhà cung cấp các ứng dụng tích hợp được phát triển bởi chính Zoho, hứa hẹn mang lại trải nghiệm liền mạch cho người dùng.

Không những dễ sử dụng, việc tích hợp đa dạng các ứng dụng đóng vai trò quan trọng giúp giảm thiểu những chi phí ẩn mà nhiều công ty đang gặp phải do sử dụng các phần mềm rời rạc không tích hợp. Sự thiếu liên kết này có thể gây ra tình trạng chồng chéo tính năng khi sử dụng và làm tăng gấp đôi khối lượng công việc nhập liệu vào từng nền tảng.

Bên cạnh những ưu điểm kể trên, việc Zoho tiếp tục phát triển theo hướng tích hợp nhiều giải pháp sẽ giúp trả lời câu hỏi tưởng chừng như đơn giản: Chi phí đầu tư cho công nghệ trên mỗi nhân viên của công ty này là bao nhiêu? Trong lúc đó, doanh nghiệp nên cân nhắc và đánh giá những phần mềm hiện tại liệu có xứng đáng với ngân sách đầu tư.

Xem thêm:

Giải pháp cho phần lưu, quản lý log hiệu quả và cực kỳ tiết kiệm chi phí

PangoCDP – Giải pháp cho trải nghiệm khách hàng đặc biệt

Google Cloud hướng tới hỗ trợ tất cả dữ liệu phi cấu trúc

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

Trí tuệ nhân tạo (Artificial Intelligence) và cơn đau tim (Heart Attack)

trí tuệ nhân tạo

Tiêu đề giật tít ư, ồ không, bài viết này đề cập tới Trí tuệ nhân tạo và áp dụng trí tuệ nhân tạo trong y tế, cụ thể ở đây là giúp đỡ trong điều trị trong phòng chống bệnh đau tim.

Thế mới nói, là kỹ sư, bản thân có thể đóng góp một phần lớn vào rất rất nhiều lĩnh vực trong đời sống.

Bệnh đau tim

CAD – Coronary Artery Disease (bệnh mạch vành) là bệnh tim mạch phổ biến nhất và là nguyên nhân hàng đầu dẫn tới các cơn đau tim (heart attack). Bản thân bệnh mạch vành tiến triển âm thầm, việc dự đoán một người có khả năng bị bệnh mạch vành đã có từ lâu.

Đồng nghĩa với việc nếu có thể dự đoán một người có các vấn đề mạch vành từ sớm, ta có thể thực hiện can thiệp, giảm thiểu các rủi ro. Cụ thể là giảm lượng mỡ trong máu, vốn là nguyên nhân dẫn tới tắc mạch vành. Việc phát hiện sớm cũng góp phần ngăn ngừa bệnh, hướng tới sức khoẻ tích cực (positive health).

Quy trình dự đoán cần có độ chính xác cao để tránh đánh giá sai nguy cơ. Việc xét nghiệm tới lui nhiều lần không những gây lãng phí thời gian, công sức của người bệnh, nó còn gây áp lực nặng nề lên hệ thống y tế, gánh nặng cho xã hội.

Mô hình đánh giá nguy cơ bệnh mạch vành hiện tại chủ yếu dựa trên các yếu tố rủi ro truyền thống. Tức là những yếu tố đã được đánh giá và phát hiện trước đó. Cụ thể như lipid trong máu, hút thuốc, huyết áp, tiểu đường). Ngoài ra các thông tin khác cũng sẽ được xem xét như giới tính, tuổi, tiền sử gia đình) cũng là một yếu tố cần xem xét.

Trí tuệ nhân tạo trong y tế (Artificial Intelligence) đã được xem xét để ứng dụng, vậy nó có thể giúp đỡ gì trong trường hợp này?

  Hiểu sâu về trí tuệ nhân tạo & Machine Learning tại Apple
  Sự khác nhau giữa AI, Machine Learning và Deep Learning

Cá nhân hoá thuốc

Về đánh giá rủi ro cũng như các yếu tố có thể gây ra bệnh mạch vành thì anh em đã rõ rồi. Nhưng rủi ro thì như nhau nhưng có người thì đi sớm, người thì đi muộn. Rõ ràng là cho dù có nhiều yếu tố nguy cơ, nhưng cách phản ứng của mỗi người lại khác nhau.

Ví dụ như lipid trong máu, nguy cơ lipid trong máu hình thành từ chế độ ăn không lành mạnh. Nhưng tuỳ vào sự biến đổi của hệ vi sinh vật trong đường ruột mà việc chuyển hoá cũng như làm trầm trọng thêm các yếu tố nguy cơ trở nên khác đi.

Chính vì vậy, y tế ngày nay hướng tới thuốc, nhưng cá nhân hoá cho từng đối tượng. Giúp quản lý và chăm sóc sức khoẻ tối ưu hơn, đạt hiệu quả cao hơn. Đó cũng là một trong những yếu tố thúc đẩy ứng dụng trí tuệ nhân tạo trong y tế.

Vấn đề khi ứng dụng trí tuệ nhân tạo trong y tế

Rồi, qua 1 và 2 thì ta nắm được bệnh mạch vành, các yếu tố nguy cơ dẫn tới bệnh. Nhưng ứng dụng trí tuệ nhân tạo vào trong y tế (Artificial Intelligence) bao gồm các tiêu chí cần quan tâm.

Bản thân bệnh mạch vành lại có rất nhiều yếu tố nguy cơ. Đơn cử như ngoài dữ liệu lâm sàng, các yếu tố bổ sung bao gồm (căng thẳng, giấc ngủ, không khí ô nhiễm, chế độ ăn, hệ vi sinh đường ruột). Quá nhiều dữ liệu đầu vào biến thành tập dữ liệu đầu vào rất lớn (big data).

Lúc này Trí tuệ nhân tạo trong ý tế sẽ kết hợp với Machine Learning để đưa ra những đánh giá về nguy cơ bệnh mạch vành.

trí tuệ nhân tạo trong y tế

Mục đích

Sau khi đã có mục tiêu ứng dụng trí tuệ nhân tạo vào y tế. Để giải quyết vấn đề bệnh và tìm ra các yếu tố quan trọng để dự đoán rủi ro. 6 nhà nghiên cứu ở Latvia đã xuất bản một bài báo nghiên cứu bao gồm các mục tiêu sau:

  • Tìm các phương pháp AI/ML được sử dụng nhiều nhất và trường hợp sử dụng khác nhau của chúng để dự đoán rủi ro CAD
  • Mô hình hóa nội dung, lựa chọn và tác động của các yếu tố chế độ ăn uống đối với dự đoán rủi ro CAD
  • Phân loại các cá nhân theo thành phần hệ vi sinh vật đường ruột của họ thành các trường hợp CAD so với các biện pháp kiểm soát
  • Mô hình hóa các tương tác giữa hệ vi sinh vật đường ruột và chế độ ăn uống và tác động của chúng đối với rủi ro CAD Cung cấp một triển vọng để kết hợp tất cả các yếu tố rủi ro và thông qua việc sử dụng AI/ML để cải thiện khả năng phán đoán.

Phương pháp thu thập và xử lý dữ liệu

Thu thập dữ liệu, việc thu thập dữ liệu cho hồ sơ sức khoẻ từ lâu đã được hỗ trợ bởi các thiết bị thông minh. Anh em giờ nào xài đồng hồ thông minh có thể cung cấp dữ liệu nhịp tim, dinh dưỡng sức khoẻ cho ứng dụng.

Các dữ liệu này cũng được tích hợp vào hồ sơ sức khoẻ điện tử. Y tế hiện nay còn có thể lập hồ sơ hệ vi sinh vật đường ruột. Việc phân loại, dự đoán và giải thích dữ liệu thông qua AI/ML có thể được thực hiện theo ba cách:

  • Được giám sát (tận dụng dữ liệu được dán nhãn)
  • Không giám sát (sử dụng dữ liệu không được gắn nhãn)
  • Bán giám sát (sử dụng cả dữ liệu được gắn nhãn và không được gắn nhãn)

Đối với dữ liệu được giám sát (có gán nhãn) và được chia ra cụ thể rõ ràng, một số phương pháp được sử dụng để sử dụng dữ liệu bao gồm:

  • Random Forest(RF)
  • Decision Tree(DT)
  • Support Vector Machine(SVM)
  • Gradient Boosting(GB)
  • Artificial Neural Network(ANN)

Kết quả

Trước đây, các nghiên cứu về bệnh mạch vành chủ yếu dựa trên dữ liệu lâm sàng (bao gồm hình ảnh chẩn đoán, xét nghiệm lipid, …). Với trí tuệ nhân tạo trong y tế, kết hợp với machine learning.

Dữ liệu thu thập giúp dự đoán rủi ro CVD (xem xét 473 biến số khác bao gồm các yếu tố chế độ ăn uống) tốt hơn so với phương pháp thông thường. Nó cũng cải thiện đáng kể dự đoán rủi ro tử vong CVD so với mô hình tiêu chuẩn chỉ với các yếu tố rủi ro truyền thống.

Trí tuệ nhân tạo và học máu đã đóng góp nhiều hơn vào các lĩnh vực khác nhau, y tế là một trong số đó. 

Tham khảo

Tóm lại, trí tuệ nhân tạo đã mang lại nhiều lợi ích và cơ hội cho sự phát triển của xã hội trong nhiều lĩnh vực. Hiện nay, nguồn nhân lực AI tại Việt Nam như “muối bỏ bể”, vẫn chưa đủ đáp ứng được “cơn khát” nhân lực cho các doanh nghiệp. Vậy nên, nếu anh em đam mê lĩnh vực này thì đây là một cơ hội rất lớn và đầy tiềm năng. 

Cảm ơn anh em đã chú ý – Thank you for your attenion – Happy coding!

Tác giả: Kiên Nguyễn

Đừng quên, thường xuyên theo dõi TopDev để cập nhật các thông tin tuyển dụng AI mới nhất được cập nhật liên tục anh em nhé!

Xem thêm:  

Xem thêm tuyển dụng it mới nhất tại TopDev

Không phải keys của bạn, không phải crypto của bạn

Blockchain

Dạo gần đây anh em nếu theo dõi vụ FTX, lướt mạng báo nước ngoài sẽ thấy cụm từ “Not your keys, not your crypto”.

Rõ ràng vụ bể banh xà lành của FTX gây shock cho thị trường tiền số, có thể nói là cú sốc lớn nhất cho thị trường tiền số năm nay. Sau Luna, FTX trở thành cú vấp lớn nhất trong ngành. Ảnh hưởng rõ ràng là lớn, nhưng cụ thể thì “Not your keys, not your crypto” được hiểu là gì?

Nghe not not và sợ rồi, kiểu tiền trong ví tao nhưng lại không phải là của tao. Ủa ủa, chuyện gì đã xảy ra và tại sao lại như vậy?

Non-custodial wallet – ví không giữ

Dịch vậy chả biết đúng không nhưng Non-custodial thì đúng nghĩa là cái ví đó trên sàn và sàn không hề kiểm soát chuyện anh em chuyển tiền đi đâu, làm gì.

Đi kèm với Non tất nhiên là ngược lại, hiện nay trên thị trường tiền số tồn tại 2 loại ví tiền chính bao gồm:

  • Non-custodial wallet (ví không giữ)
  • Custodial wallet (ví giữ)

Cũng có thể dùng từ lưu ký (lưu ký ở đây anh em có thể hiểu là lưu lại, ký gửi lại). Vậy nếu có lưu ký lại, có ký gửi lại thì private key vẫn thuộc về anh em, nhưng anh em không toàn quyền kiểm soát tiền của mình. Vậy thực sự là tiền của anh em chỉ có chuyển đi chuyển lại, mua đi bán lại nhưng không hề rời khỏi sàn.

Có chạy tới chạy lui vài ba chục vòng thì tiền vẫn nằm đâu đó trên sàn và do sàn kiểm soát.

Private keys – thứ quan trọng nhất

Khi đăng ký một ví điện tử, sàn sẽ tạo ra cho anh em 2 cặp khoá. Public keys và private keys. Public thì rõ rồi, anh em muốn cho ai, muốn công khai như nào cũng được.

Việc chia sẻ public key không ảnh hưởng tới tiền trong ví của anh em. Nhưng nếu private keys mà mất thì xác định. Lúc đó là not your keys.

Hiểu đơn giản thì public keys của anh em như là email, muốn chia sẻ với ai cũng được, công khai chỗ nào cũng được. Private keys thì như là mật khẩu, chỉ nên là một mình mình biết mà thôi.

Tham khảo việc làm blockchain tại Hà Nội

Đừng bao giờ chia sẻ private keys

“Not your keys, not your crypto”, chìa khoá không còn, tiền điện tử cũng không còn.

Nếu một sàn hoặc một bên thứ ba có quyền truy cập hoặc sở hữu private keys của anh em, lúc đó tiền không còn là của anh em nữa. Nếu FTX tạo ra tiền, điều gì đảm bảo rằng FTX không có một bản sao public và private keys của anh em. Rõ ràng là họ rút được tiền từ sàn để đem đi thế chấp, sau đó tạo thêm tiền đem vào thị trường.

Chia sẻ private keys đó về cơ bản giống như đưa cho ai đó chìa khóa két an toàn hoặc nhà của anh em. Vì lý do đó, anh em tuyệt đối không bao giờ nên chia sẻ khóa riêng của mình.

Sự mong manh của thị trường và sàn

Nhìn lại, sàn tiền số lớn thế hai thế giới. Rõ ràng sàn đang có quá nhiều quyền lực, họ kiểm soát gần như mọi thứ.

Giá đang cao chót vót nhưng tiền trong ví của anh em có thật sự đang còn trên sàn. Sàn trở thành như một gã huy động vốn lớn, tự tạo ra thứ bán được, anh em bỏ tiền vào. Sau khi đã bỏ tiền vào, liệu sàn có giữ lại một số tiền cần thiết để anh em có thể rút ra hay không?

Binance sau sự sụp đổ của FTX, CEO đã ra tuyên bố nếu tất cả mọi người đồng loạt rút tiền, sàn Binance vẫn có thể đáp ứng được yêu cầu đó.

Nhưng câu hỏi đặt ra là ai giám sát? Anh em đi vay tiền ở ngân hàng chắc chắn hiểu điều này, vô cùng mong manh. Tại sao? Ngân hàng được ngân hàng nhà nước giám sát và quy định số tiền phải giữ lại ngân hàng. Đi huy động được 10 đồng thì cho vay ra chỉ được 8 đồng. Lượng tiền giữ lại phải tuyệt đối tuân thủ số tiền mà ngân hàng nhà nước quy định.

Tổng số tiền cho vay cũng được quy định (trong giới gọi là room), hết room thì tiền trong ngân hàng còn cả đống cũng phải để yên, chứ không phải bản thân anh chỉ có 10 đồng mà đi cho vay 15 đồng.

Vậy với tiền số, ai là người kiểm soát? Public và privates nếu sàn biết thì đã đành, đằng này cũng không có bất cứ một tổ chức, một chính phủ nào đứng ra kiểm soát lượng tiền đó.

Không thể kiểm soát

Với blockchain, mọi người trong mạng có quyền giám sát tiền ra tiền vào. Nhưng sàn bằng một cách vi diệu nào đó vẫn rút hoặc chuyển tiền ra ngoài cho một công ty phụ.

Không có sự kiểm soát rõ ràng là điểm yếu chí mạng của tiền điện tử. Nhà sáng lập Luna có thể lập tức cất cánh bay xa, ôm theo số tiền khổng lồ. Một đồng tiền được tạo ra được thừa nhận bởi mọi người, nhưng lại không có ai đứng ra đảm bảo rằng đồng tiền sẽ được lưu thông.

Bài toán cân bằng giữ kiểm soát bởi cộng đồng và sự tin tưởng của đồng tiền chưa bao giờ là dễ. Mà nói thẳng ra, tương lai có thể còn là điểm yếu chí mạng của tiền điện tử. 

Cảm ơn anh em đã đón đọc – Thank you for your reading – Happy coding!

Tác giả: Kiên Nguyễn

Anh em có thể đón đọc thêm các bài viết khác về tiền điện tử tại TopDev. Đừng quên, các việc làm mới về Blockchain sẽ được liên tục cập nhật.

Xem thêm:

5 giai đoạn trong kế hoạch tiếp theo của Ethereum sau The Merge

Tối ưu ứng dụng React bằng Code-Spliting

Khắc phục tình trạng VPN WireGuard bị treo

Xem thêm tuyển dụng it mới nhất tại TopDev

Lộ trình từng bước để trở thành Data Analyst

Lộ trình từng bước để trở thành Data Analyst

Anh em đang muốn trở thành Data Analyst?. Ngành với vốn hoá thị trường lên tới 300 tỷ Biden trong năm 2022.

Ôi, thế thì bài viết này đích thị là dành cho anh em. Học Data Analyst rõ ràng là không dễ, nhưng nếu có đủ quyết tâm và nghị lực, anh em có thể thoải mái thử sức với ngành này.

À, bài viết dựa trên quan điểm của cá nhân tác giả, đường thì có nhiều đường nên có khúc nào không hợp hoặc anh em đã từng đi qua thì cứ bypass nha. Feel free to do, Data ở đây cũng bao gồm nhiều vị trí và chức vụ, nào là Data Analyst, Data Scientist, Data Engineer, Data Architect. Các công ty thì khỏi phải bàn, đỏ mắt tìm người có kỹ năng về Data, mà toàn các tập đoàn lớn hoặc các công ty đã thành công trên thị trường.

Nội dung bài viết này sẽ cập tới những skill anh em cần có, một số tools cần học để trở thành một Data Analyst xuất sắc. OK bắt đầu thôi anh em.

Data Analyst là gì?. Họ thường làm gì?

Chưa bao giờ vào thẳng vấn đề mà quên đi định nghĩa. Roadmap road mủng gì khi mà chưa biết Data Analyst họ làm gì cơ chứ?

Vậy chính xác thì Data Analyst sẽ làm công việc gì?

“A data analyst is responsible for collecting data, processing it, and analyzing it to find sensible insights for decision making.” Nói một cách đơn giản thì Data Analyst sẽ chịu trách nhiệm cho việc thu nhập dữ liệu, xử lý dữ liệu và tìm ra những thứ có giá trị trong data để ra quyết định.

Quyết định ở đây có thể là quyết định về chính sách, nhưng đôi khi cũng có thể là những quyết sách lớn liên quan tới business của cả một tập đoàn. Điều đó cho thấy vị trí Data Analyst quan trọng tới nhường nào.

Hầu hết những dữ liêu mà data analyst tiếp cận và xử lý ban đầu đều là dữ liệu dạng thô (raw), các nhà phân tích dữ liệu sẽ bóc tách để tìm ra dữ liệu có giá trị. Đôi khi anh em nhầm là Data Analyst thì làm luôn cả Machine Learning và Deep Learning, nhưng thực ra không phải. Dữ liệu thì chỉ work với dữ liệu, bóc tách ra thôi.

  Phỏng Vấn Data Analyst: TOP 5 Câu Hỏi Bạn Không Nên Bỏ Qua!
  Những điều cần biết về nghề Data Analytics và Business Analytics

Thống kê (Statistics)

Đối với tất cả những ông làm data chuyên nghiệp, thống kê và toán và hai thứ không thể thiếu. Vì sao, vì nếu thiếu thống kê và xác suất, anh em không thể bóc tách những gì tinh cmn tuý từ trong dữ liệu.

Raw nó là một cái gì đó rất là thô, vừa nhiều, vừa ít có ý nghĩa, hoặc có ý nghĩa đi thì cũng phải kết nối thống kế được với nhau mới đẻ ra được ý nghĩa. Chính vì vậy, kỹ năng thống kê và phân tích là hai kỹ năng quan trọng cần của Data Analyst.

Data Analyst

Một số khoá học anh em có thể tham khảo.

Excel

Excels, không phải là để tính lương hay viết code macro để dịch chuyển vài sheet . Đối với Data Analyst, Excel là công cụ vô cùng hữu ích để xử lý dữ liệu. Thật ra thì không phải chỉ mỗi Excel có thể giúp ích được cho các nhà phân tích dữ liệu. Mà thực ra excel là cái ông có thể làm được nhiều việc nhất. Excel cung cấp nhiều các tính năng quan trọng như:

  • VBA
  • Filters
  • Formulas
  • Hàm pivot table
  • VLOOKUP

Chính vì Excel được nhiều các nhà phân tích dữ liệu sử dụng nên pro excel là một kỹ năng cần thiết và thật sự có giá trong mắt nhà tuyển dụng. Có một vài khoá học anh em tham khảo để có thể pro excel trong lĩnh vực Data analyst.

Data Analyst

Một số thứ hay ho anh em có thể học hoặc tham khảo:

Việc làm Data Analytics HOT tại TP. Hồ Chí Minh

SQL

Không ai trong số những ông dùng SQL hoặc làm việc với SQL nói cho ta biết tầm quan trọng của SQL bằng ông Data Analyst, dữ liệu raw thường được lưu trong các bảng. Các điều kiện WHERE, JOIN, … chính là thứ phương tiện đầu tiên được sử dụng để làm việc với dữ liệu dạng raw.

Không những SQL, các ông DA còn khá là thông thạo một vài hệ cơ sở dữ liệu. Có thể là Oracle, có thể là Postgres, …

Data Analyst

Nói chung là SQL là thứ bắt buộc phải biết đối với anh em muốn bắt đầu để trở thành Data Analyst

Một số thứ hay ho anh em có thể học hoặc tham khảo:

Business Intelligence Tools

Business Intelligence Tools hay còn gọi là BI, BI là các công cụ được sử dụng phục vụ cho mục đích phân tích mô hình kinh doanh. Các ngôn ngữ chính được sử dụng để làm việc với BI bao gồm R, Python và SQL.

Những tính năng thường được sử dụng trong BI là dashboarding, report making, và data visualization (trực quan hoá dữ liệu). Một số công cụ phổ biến là Tableau, PowerBL, và Looker.

Data Analyst

Một số chứng chỉ anh em có thể tham khảo:

Programming Language

Rồi, nói tới nói lui tưởng làm Data Analyst không phải code. Thực chất là nghề nào liên quan tới IT mà biết code cũng tốt anh em ạ. Đôi khi chỉ với SQL là không đủ để giải quyết vấn đề

Hai ngôn ngữ được suggest nhiều nhất là R và Python. Có nhiều thư viện được sử dụng anh em cũng có thể tham khảo dplyr, ggplot in R.

Một số khoá học để bắt đầu anh em có thể tham khảo:

Kết luận

Lộ trình, công cụ liệt kê ở đây hầu hết là các kĩ năng cần có, kỹ năng chung nhất của một Data Analyst. Bước vào thế giới của data luôn là điều hứng thú với tất cả anh em. Để tránh lạc trôi không tìm thấy đường ra.

Đây cũng là một số kỹ năng cơ bản, khi đã được nhận vào, anh em có cơ hội làm việc với data thực tế, chính đó mới là kinh nghiệm quý báu nhất mà anh em có thể tích luỹ được. Thông qua bài viết này, chúc anh em đi đúng đường, đúng hướng, trở thành Data Analyst trong tương lai.

Cảm ơn anh em đã đọc – Thank you for your time to read – Happy coding!

Tác giả: Kiên Nguyễn

Anh em có thể tham khảo tin tuyển dụng Data Analyst tại đây nha. Việc làm HOT liên tục được cập nhật tại TopDev!!

Xem thêm:

Data Analyst là gì? Chuyện nghề của một Data Analyst

Data scientist vs data analyst: những khác biệt mà bạn cần biết

Lộ trình cho mọi lập trình viên web trong năm 2022 – TopDev

Tìm kiếm việc làm IT mới nhất tại TopDev!

 

Factory Method Pattern – Giải thích đơn giản, dễ hiểu

Factory Method Pattern

Đã lâu không quay trở lại với series design pattern. Tiếp tục với Creational Pattern (pattern khởi tạo), đi cho hết luôn cả luồng. Bài viết này giới thiệu với anh em pattern Factory Method, một pattern khá nổi tiếng, được nhiều anh em biết tới.

Anh em ready chưa, bắt đầu ngay thôi!

1. Định nghĩa Factory Method pattern

Rất chi là khó hiểu nhưng luôn luôn là định nghĩa về pattern. Nếu anh em mới tìm hiểu về pattern này lần đầu thì đừng lo. Cứ lướt qua định nghĩa, đi xuống ví dụ, từng từng một sẽ rõ ràng ra.

Sau khi đọc hết và có cái hiểu cơ bản về pattern, quay lại đọc khái niệm đôi khi lại vỡ lẽ ra nhiều điều.

Factory Method is a creational design pattern that provides an interface for creating objects in a superclass, but allows subclasses to alter the type of objects that will be created. Factory method là design pattern khởi tạo cung cấp interface để khởi tạo các đối tượng (object) ở superclass, nhưng cho phép class phụ (subclasses) thay đổi kiểu của object sẽ được tạo ra.

Nghe ảo ma canada chưa, khởi tạo ở superclass nhưng lại cho phép thay đổi được kiểu của object cho phù hợp với subclass của mình. Vậy Factory Method pattern đã làm điều đó như thế nào?

  Các loại Design patterns
  Adapter Pattern – Xoá nhoà khác biệt

2. Đặt vấn đề

Giả sử như anh em đang khởi tạo một ứng dụng liên quan tới giao vận (cũng có thể gọi là hệ thống quản lý giao vận – logistics management application). Đầu tiên, tiền còn ít nên anh em chỉ cố gắng xoay xở gom góp mua được con xe tải.

Quản lý giao vận bằng xe tải (truck), anh em sẽ tạo Truck class.

Một thời gian sau, các nhà đầu tư bần bần nhảy vô (nhầm, các agents) nhảy vào, ứng dụng của anh em trở nên phổ biến hơn cả Ahamove, Ninja Van. Một ông khách hàng to bự, bay vào nhờ anh em quản lý thêm giao vận trên biển (sea logistics).

Ngon, business phát triển rồi, nhưng giờ code thì sao?. Truck class thì viết đầy vào rồi, mà thêm Ship vào thì thay đổi mất code base. Mà không chỉ có mỗi sea, sau này còn có mở thị trường giao vận hàng không thì sao?.

factory method

3. Giải quyết với Factory Method pattern

Với Factory Method pattern, với bài toán ở trên, anh em mong muốn xây dựng một class sao cho cả Truck, Sea hoặc Airplane sau này có thể kế thừa. Mỗi lần xử lý đơn hàng là mỗi lần tạo transport.

Vậy phương thức createTransport sẽ tạo ra object chính xác cho từng loại hình vận chuyển.

  • createTransport ở RoadLogistics sẽ return new Truck()
  • createTransport ở SeaLogistics sẽ return new Ship()

Phương thức createTransport sẽ nằm ở SuperClass, subclass (Road, Sea) lúc này trả về các kiểu khác nhau.

factory method

Constructor khởi tạo lúc này di chuyển về Factory Method class (superclass), các class con thực hiện override lại, tất cả các phương thức vận chuyển đều sử dụng chung một interface, cái khác là kiểu trả về cho từng class

factory method

Ví dụ, cả Truck (xe tải) và Ship (thuyền) đều implement chung Transport interface. Trong interface rõ ràng khai báo method deliver(). Nhưng mỗi class lai hiện thức method này ở class của mình khác nhau. Truck thì di chuyển trên đường bộ, Ship thì di chuyển trên đường sông.

Factory Method lúc này, sau khi khởi tạo constructor ở class RoadLogistics sẽ trả về truck object, còn ShipLogistics sẽ trả về ship object. Rõ ràng nếu làm được vậy thì sau này có airplane hay hàng không vũ trụ gì cũng không là vấn đề.

factory method Tất cả các class đều implement chung một common interface, với Factory Method, ta pass các object cho đúng đối tượng nhưng không làm phá vỡ đi code base của Factory.

4. Thực tế giải quyết bài toán

Rồi, giờ triển khai cụ thể với class diagram

factory method
  • Số 1: Product sẽ khai báo interface, cái này là common interface tất cả các class đều sử dụng. doStuff() đây anh em có thể hiểu là vận chuyển, xác nhận đơn, giao thành công hoặc bất cứ thứ gì khác. Nói chung là có giao vận bằng hình thức nào thì nó cũng có các phương thức cần implement.
  • Số 2: Concrete ProductA và Concrete ProductB sẽ implement inferface common, cụ thể làm gì thì viết vào đây. Ví dụ thuyền thì số km tính bằng hải lý, còn đường bộ thì tính bằng km
  • Số 3: Class Creator sẽ khai báo các factory method trả về new product objects. Kiểu trả về ở đây khớp với Product interface là ok
  • Số 4: Concrete Creators sẽ override các method base ở Factory với các kiểu trả về khác nhau.

5. Code ví dụ

Ví dụ giờ mình dùng cái Factory Method pattern để tạo một cái UI cross platform (đi qua nhiều platform). Cái UI này có một nút nhấn, từ đó mở được 2 loại:

  • Web dialog
  • Windows dialog
factory method

Lúc này ở interface sẽ có 2 method là render(), show cái button ra. Cái thứ hai là ấn vào để mở dialog.

Ở GUIFactory.java ta define interface tạo button và click. Render đổi qua thành createButton nha anh em. Đây là 2 common interface.

package refactoring_guru.abstract_factory.example.factories;

import refactoring_guru.abstract_factory.example.buttons.Button;
import refactoring_guru.abstract_factory.example.checkboxes.Checkbox;

/**
 * Abstract factory knows about all (abstract) product types.
 */
public interface GUIFactory {
    Button createButton();
    Button onClick();
}

Kế đến là MacOS (giả cái sử như là MacOS) có đi nha. Cái này sẽ implement GUIFactory.

package refactoring_guru.abstract_factory.example.factories;

import refactoring_guru.abstract_factory.example.buttons.Button;
import refactoring_guru.abstract_factory.example.buttons.MacOSButton;
import refactoring_guru.abstract_factory.example.checkboxes.Checkbox;
import refactoring_guru.abstract_factory.example.checkboxes.MacOSCheckbox;

/**
 * Each concrete factory extends basic factory and responsible for creating
 * products of a single variety.
 */
public class MacOSFactory implements GUIFactory {

    @Override
    public Button createButton() {
        return new MacOSButton();
    }

    @Override
    public function onClick() {
        return smt with click event
    }
}

Phía Windows factory cũng tương tự

package refactoring_guru.abstract_factory.example.factories;

import refactoring_guru.abstract_factory.example.buttons.Button;
import refactoring_guru.abstract_factory.example.buttons.WindowsButton;
import refactoring_guru.abstract_factory.example.checkboxes.Checkbox;
import refactoring_guru.abstract_factory.example.checkboxes.WindowsCheckbox;

/**
 * Each concrete factory extends basic factory and responsible for creating
 * products of a single variety.
 */
public class WindowsFactory implements GUIFactory {

    @Override
    public Button createButton() {
        return new WindowsButton();
    }

    @Override
    public function onClick() {
        return smt with click event
    }
}
Footer

Xong phần Factory, giờ là lúc hiện thực Button cho từng class. Button là common interface có method paint() để render button.

package refactoring_guru.abstract_factory.example.buttons;

/**
 * Abstract Factory assumes that you have several families of products,
 * structured into separate class hierarchies (Button/Checkbox). All products of
 * the same family have the common interface.
 *
 * This is the common interface for buttons family.
 */
public interface Button {
    void paint();
}
Footer

Lúc này ở MacButton thì khoẻ rồi. Override method và implement những gì mình thích thôi

package refactoring_guru.abstract_factory.example.buttons;

/**
 * All products families have the same varieties (MacOS/Windows).
 *
 * This is a MacOS variant of a button.
 */
public class MacOSButton implements Button {

    @Override
    public void paint() {
        System.out.println("You have created MacOSButton.");
    }
}

Xong xuôi đâu vào đấy thì ở application còn làm gì nữa đâu. Cứ gọi factory là trả ra đúng object của button cần tạo, thích button thì button, thích checkbox thì có checkbox. Rồi từ đó cứ gọi ra các method implement là xong thôi.

package refactoring_guru.abstract_factory.example.app;

import refactoring_guru.abstract_factory.example.buttons.Button;
import refactoring_guru.abstract_factory.example.checkboxes.Checkbox;
import refactoring_guru.abstract_factory.example.factories.GUIFactory;

/**
 * Factory users don't care which concrete factory they use since they work with
 * factories and products through abstract interfaces.
 */
public class Application {
    private Button button;
    private Checkbox checkbox;

    public Application(GUIFactory factory) {
        button = factory.createButton();
        checkbox = factory.createCheckbox();
    }

    public void paint() {
        button.paint();
        checkbox.paint();
    }
}
Footer

6. Ưu nhược điểm

  • Đầu tiên là với Factory pattern anh em sẽ hạn chế đụng độ giữa các class.
  • Mỗi product giờ nằm ở một nơi, chia ra rõ ràng, dễ dàng hơn để maintain sau này.
  • Open,close principles: Anh em thoải mái tạp thêm creator mới mà không cần đụng tới các methods, class cũ đã implement. ít bug hơn.
  • Sử dụng Factory pattern đôi khi làm cho code trở nên khó hiểu hơn, phức tạp. Trường hợp có nhiều subclass.

7. Tham khảo

Thank you for your time – Happy coding!

Tác giả: Kiên Nguyễn

Cảm ơn anh em đã dành thời gian để đọc bài. Anh em có thể tham khảo thêm tin tuyển dụng IT trên TopDev để phát triển sự nghiệp.

Xem thêm:

Một số custom hooks hay sử dụng cho React

AngularJS Là Gì? Khác Biệt Nào Giữa Angular Và Frontend Framework Khác

Mediator Design Pattern – Collaborate via me

RPA Career Talk: Triển vọng và công việc của RPA Developer

RPA Developer

Tổng quan về RPA

RPA là gì?

RPA là từ viết tắt của Robotic Process Automation, nghĩa là tự động hoá quy trình bằng robot. Đây là công nghệ phần mềm được tạo ra để bắt chước hành động của con người, thực hiện các tác vụ lặp đi lặp lại nhằm tăng hiệu quả công việc.

Tự động hóa quy trình bằng Robot
Tổng quan về RPA

Cách thức hoạt động: RPA hoạt động trên tầng giao diện của trình duyệt, phần mềm… Hiểu một cách đơn giản, con người sẽ “dạy” cho robot ảo các quy trình làm việc với nhiều bước, trên nhiều ứng dụng khác nhau như: nhận form, gửi tin nhắn xác nhận, sắp xếp form vào folder, nhập dữ liệu trên form..

RPA thường được ứng dụng cho những tác vụ thủ công lặp đi lặp lại có tính quy luật, thao tác trên những dữ liệu đã được cấu trúc hoá.

Triển vọng của công nghệ RPA

Thị trường RPA được dự đoán sẽ đạt 2,9 tỷ USD vào năm 2021 theo Forrester. Đây cũng là top 10 công nghệ hot nhất trên thị trường trong những năm 2020, theo Gartner.

Con đường sự nghiệp của RPA Developer

Vì sao RPA là ngành tiềm năng?

  • Công việc không những ít bị ảnh hưởng mà còn có tiềm năng phát triển mạnh do sự tác động của COVID-19
  • Công nghệ có tốc độ tăng trưởng nhanh những năm gần đây: 2020 tăng 11.94%, 2021 tăng 19.53%… (Gartner, tháng 9/2020)
  • Cơ hội làm việc với khách hàng enterprise-level (tầng ứng dụng công nghệ cao nhất): Gartner dự đoán tới 2022, 90% công ty, tập đoàn lớn trên toàn cầu sẽ ứng dụng RPA. 2024, họ sẽ x3 năng lực ứng dụng RPA của doanh nghiệp

Từ góc độ của người trong ngành, bạn Thịnh Nguyễn đã chia sẻ rằng: Thực tế nhu cầu tự động hóa phát sinh từ chính các doanh nghiệp, họ đang trong cuộc đua chuyển đổi số và tìm giải pháp tối ưu vận hành, nhất là trong mùa dịch. Một tổ chức/ doanh nghiệp có thể ‘đặt hàng’ lên đến hàng trăm quy trình tự động hóa. Vì thế, những nhân sự công nghệ trong ngành RPA có rất nhiều tiềm năng để làm việc, hỏi học tại nhiều lĩnh vực khác nhau cùng một lúc.

Tiêu chí tuyển dụng phổ biến đối với RPA Developer là gì?

Theo anh Vũ Tùng:

RPA Solution Architect Leader – người quản lý tất cả RPA Developer của akaBot cho biết, tiêu chí tuyển dụng được phân biệt rõ ràng với hai đối tượng: Chưa có kinh nghiệm và đã có kinh nghiệm làm việc

Với người chưa có kinh nghiệm như các bạn sinh viên mới ra trường hoặc Fresher có ít hơn 1 năm kinh nghiệm thì yêu cầu bao gồm:

  • Học vấn: Tốt nghiệp các ngành liên quan đến công nghệ hoặc đã từng học qua các khóa đào tạo về lập trình & ngôn ngữ lập trình.
  • Tinh thần & thái độ: Ham học hỏi, sẵn sàng tiếp thu cái mới, tiếp thu nhanh và không ngại khó. Ngoài ra, sự tự tin, năng động và chủ động cũng là yếu tố cần thiết.
  • Khả năng ngoại ngữ: Đây là yêu cầu bắt buộc vì Developer phải nắm bắt được ý nghĩa của thuật ngữ cũng như yêu cầu từ khách hàng. Bạn có thể chuẩn bị trước tối thiểu là chứng chỉ TOEIC từ 500-600 điểm.
  • Tư duy logic: Với Fresher, trong quan điểm của nhà quản lý, các bạn cần phải tự chủ trong quá trình làm việc để bất cứ khi nào gặp vấn đề, bạn phải tư duy được cách giải quyết, từ đó đẩy nhanh công việc hơn.

Đối với những bạn đã có kinh nghiệm trong ngành RPA, có thêm các yêu cầu cao hơn:

  • Sở hữu ít nhất 1 chứng chỉ Nâng cao/ Advanced lĩnh vực RPA, được cấp bởi UiPath hoặc các nền tảng RPA khác. Càng có nhiều chứng chỉ RPA, bạn càng có lợi thế.
  • Đã có kinh nghiệm ‘chế tạo’ ít nhất 05 robot ảo. Điều này đảm bảo bạn đã có kinh nghiệm thực tế trong quá trình xây dựng, triển khai và giải quyết vấn đề với bot.
  • Về các mặt học vấn, tinh thần, tư duy và khả năng ngoại ngữ vẫn được yêu cầu tương tự như nhóm fresher, vì đây là điểm chung mà các RPA Developer phải có trong quá trình làm việc.

>> Xem thêm: Câu hỏi phỏng vấn RPA Engineer nhất định bạn phải biết!

Điểm tích cực mà các RPA Developer cải thiện được nhiều nhất sau khi gia nhập ngành là gì?

Kiến thức và kỹ năng chuyên môn là điều chắc chắn được cải thiện đầu tiên. Tuy nhiên, các kỹ năng mềm cũng được thay đổi khá đáng kể. Nếu các bạn nghĩ Developer chỉ là người ẩn mình sau các màn hình máy tính thì với RPA, các bạn Developer dần trở nên năng động, linh hoạt hơn, kỹ năng giao tiếp cũng tốt hơn rất nhiều. Cơ bản vì các bạn phải tiếp xúc với khách hàng liên tục, để cho ra những trợ lý Robot ảo đáp ứng yêu cầu tốt nhất và hoàn thiện nhất. Ngược lại, nếu các bạn thụ động, ít va chạm & giao tiếp, thì chắc chắn Robot ảo sẽ phải làm đi làm lại rất nhiều lần.

Lộ trình thăng tiến của RPA Developer

Các RPA Developer sẽ trải qua những ‘title’ sau:

Intern/Fresher > RPA Junior Developer > RPA Senior Developer > Technical Leader > Solution Architecture

Cấp bậc thăng tiến của RPA Developer

Người mới bắt đầu cần học gì để gia nhập ngành RPA?

Hiện nay có rất nhiều khóa học trên các nền tảng khác nhau như Udemy hay từ chính các RPA Platform phổ biến. Bạn có thể tìm hiểu thêm về các khóa học tại đây.

Sự phát triển của công nghệ đã và đang đem lại nhiều cơ hội rộng mở cho các bạn trẻ. Thông qua RPA Career Talk, khán giả đã phần nào hình dung rõ hơn về đặc thù công việc RPA Developer. Tuy nhiên, sẽ còn rất nhiều các câu hỏi liên quan đến lĩnh vực này, mời các bạn cùng trao đổi tại RPA Vietnam Community.

Cùng khám phá thêm những thông tin hữu ích về công việc RPA Developer và các vị trí khác với Hành Trình Nhập Môn RPA – Cuốn e-book dành riêng cho những “người ngoại đạo” yêu thích và muốn thử sức với ngành RPA, đúc kết những kinh nghiệm thực chiến từ chính đội ngũ nhân sự tại akaBot. Download e-book ngay!

Nguồn: akaBot

Xem thêm:

Thông não về các khái niệm Web1, Web2, Web3

Trí tuệ nhân tạo (Artificial Intelligence) và cơn đau tim (Heart Attack)

Java Developer là gì? Lộ trình để trở thành Java Developer

Khám phá thêm các việc làm IT hấp dẫn tại TopDev

Why Your Data is Safest in a Cloud ERP System

Businesses in today’s digital economy are struggling to protect their data from the continuous onslaught of cyberattacks. This makes many wonder: “Is cloud ERP safer than other options?” Acumatica’s VP of Product Management says the answer is “yes,” and he’ll explain why today.

Is Your Data Safe in Cloud ERP_Acumatica

Data safety is a common concern for today’s businesses—and it should be. According to an article by Tech.co, data breaches in 2022 were prolific, forcing US businesses to pay millions in damages. Combatting such data disasters is challenging, but it is possible. It all begins with implementing a secure and comprehensive ERP solution.

But businesses have a choice to make. Should they select an on-premises or a cloud-based ERP solution? Which is the safest home for their data?

Understanding the differences between the two software options can help answer these important questions.

Data Safety: Cloud Vs. On-Premises ERP Systems

Let’s start by looking at an on-premises ERP solution. It requires that a business physically purchase, maintain, and store in its own facility the hardware on which the ERP system runs. Substantial upfront and recurring costs go into storing the technology and hiring the IT staff needed to manage required operating system and database upgrades and to mitigate security/access risks. For some businesses, an on-premises ERP system causes tremendous stress, as their IT teams are constantly striving to keep the system secure and to stay ahead of incessant and increasingly elaborate cyberattacks.

In comparison, cloud-based ERP solutions allow businesses to relinquish their maintenance and security concerns to the ERP vendor. The vendor maintains the servers in its own datacenters, provides automatic software updates, upgrades the hardware as needed, and ensures that all data stored in the system is safe from today’s newest cyberattacks and most ingenious hackers. With a cloud ERP system, businesses pay a subscription fee that covers these services, which eliminates the considerable initial costs associated with on-premises ERP solutions.

Cloud ERP’s Security Capabilities

A cloud ERP solution ensures end-to-end cloud data security—from authentication to data entry, from transmitting the data to protecting it in the database. For example, cloud ERP solutions are hosted on secure platforms, like Amazon Web Services (AWS), which automatically encrypt the data that enters their global networks. They also give customers the tools to set up the processes and controls needed to comply with industry regulations (e.g., PCI DSS, HIPPA, and GDPR).

Cloud-based solutions are also designed to identify and immediately address security threats using tried-and-true methods, such as constant monitoring, frequent testing, and automatic—and regular—backups. If vulnerabilities and weaknesses do occur, the ERP vendor is responsible for finding and fixing them. For the vendor, failing to protect a business’s data results in huge monetary payouts, significant reputational damage, or both. So, it’s in the vendors’ best interest to ensure that their users’ data is safe and protected.

How Businesses Can Help Safeguard Their Own Data

Once a company has implemented a cloud ERP solution, it has taken the first and biggest step toward unrivaled security. However, even with the many cloud data security features and functionalities provided by a cloud ERP solution, businesses can—and should—play a role in safeguarding their own data.

For instance, companies should have an established access management system and protocols that help them manage employee permissions. As new users are added to the ERP system, the business must set the right permissions for these new users, thoroughly train them in proper data etiquette, and teach them to recognize cyber threats. When employees change jobs, they immediately should be assigned a new role so they get the data they need and cannot see data outside their job area. And when employees leave the company, their access permissions to the ERP system should be cancelled immediately.

Passwords are still the most common way to securely access accounts, but passwords have also become the weakest single point of security over time. Attackers have developed new ways to breach passwords much faster than ever before. Even if long, complex passwords are used, relying on a single authentication method isn’t enough. A password can be mismanaged and subsequently stolen or guessed through a specialized cyberattack.

Using multiple-factor authentication (MFA) enhances account security. According to Microsoft, 99.9% of account compromise cyberattacks can be prevented by just enabling MFA for company or personal accounts. From a corporate point of view, MFA can and should be enforced for all the accounts in an organization.

Beyond internal considerations, businesses must also remember that, as Forrester predicted for 2022, “Sixty percent of security incidents will result from issues with third parties.” Data breaches may stem from the third-party applications a company uses to manage its business operations and extend the functionality of its cloud ERP system. Or they may come through different links in the company’s supply chain—links with which the business has had to share proprietary information.

Unfortunately, though all inbound and outbound data does go through the cloud ERP system’s business logic, the ERP vendors themselves do not control all these third-party integrations or supply chain links. Businesses must regularly review the safety of their applications and establish protocols for carefully sharing information with their supply chains.

How Acumatica Can Help

To recap, on-premises ERP systems are popular with many businesses, but the data stored in these systems is vulnerable to sophisticated cyberattacks or insider mistakes. Maintaining an on-premises ERP solution’s hardware and software, managing upgrades, and researching and battling the latest viruses and malware concerns requires more time and money than most businesses can provide—particularly because these things rest squarely on the shoulders of already overextended IT teams.

But, with Acumatica’s modern cloud ERP solution, businesses can rest easy knowing their information is in the best hands and is well protected by Acumatica’s dependable layers of cloud data security. These layers are described in detail below.

  1. Access Security
    • Object-level access controls allow you to set up role-based access to specific screens, inquiries, fields, and reports.
    • Your data is protected by federated security through the use of Single-Sign-On (SSO) and Multifactor Authentications options (MFA).
  2. Data Security and Integrity
    • For every screen, inquiry, and report, you control the setup of access permissions for user accounts, sub-accounts, customers, financial accounts and much more. These permissions are automatically enforced by every screen and report.
    • Any data entered by a user, whether it is in the main program or via an API integrated function, is neither trusted nor accepted until it has been processed through every facet of Acumatica’s business logic.
  3. Application Security
    • Application code and verification logic are entirely managed on the Acumatica server. New code is introduced via highest-quality, industry-standard procedures, and regular audits ensure these processes are followed and maintained.
    • Acumatica’s hosted SaaS environment utilizes a NextGen Web Application security solution that continuously monitors and protects your information from malicious attacks that could result in a data breach.
  4. Transmission Security
    • To ensure the integrityof data packets during transmission, Acumatica encrypts all connectivity via web browser and through all API integrations.
    • For network data transmissions, Acumatica utilizes the following encryption algorithms:
      • Advanced Encryption Standard (AES) 128, 192 or 256-bit encryption
      • TLS 1.2
  5. Storage Security
    • Data stored in your Acumatica Database instance, whether on hosted SaaS or an on-premise server, is encrypted.
    • Sensitive data is only accessible through the Acumatica business logic.
  6. Physical Security
    • All application code runs on Acumatica servers, which are maintained in a professionally secured datacenter.

Acumatica customer Elena Mheidze (CFO, Erickson International) experienced firsthand the relief Acumatica’s safeguards and security layers provide.

Mheidze and her team were relying on Sage 100, which was difficult to implement and ran slowly on Erickson International’s on-premises servers. Mheidze says, “With Sage 100, we had to maintain a server, and that server had a lot of associated costs. So, removing the headache to maintain the on-premises system was the number one reason we chose to go with Acumatica.”

Today, Erickson International relies on Acumatica and AWS for automatic back up and security procedures. Says Mheidze, “Before, there were a lot of costs, maintenance, and roadblocks about security. I was constantly worried. Now, all I need is a solid internet connection to get to the ERP [solution] from anywhere.”

To learn more about how Acumatica and our hosting partners ensure 24/7 cloud data security for businesses like Erickson International, contact our experts with any questions and/or to schedule a demonstration.

Is cloud ERP safe? The answer is a resounding “yes” with Acumatica.

Get the latest cloud ERP insights, advice, and best practices all in one place to empower your mid-sized business. Click here to read more https://www.acumatica.com/blog/

Source: https://www.acumatica.com/

 Khám phá các việc làm IT hấp dẫn tại TopDev

5 giai đoạn trong kế hoạch tiếp theo của Ethereum sau The Merge

5 giai đoạn trong kế hoạch tiếp theo của Ethereum sau The Merge

Sau sự kiện The Merge diễn ra vào giữa tháng 9 vừa rồi, đội ngũ kỹ thuật của Ethereum đã đưa ra các thông tin quan trọng liên quan đến sự thay đổi trong kế hoạch phát triển của hệ sinh thái này. Trên trang Twitter của mình ngày 5/11, founder của Ethereum là Vitalik Buterin đã đưa ra bản roadmap mới của Ethereum cùng với 5 giai đoạn mới trong quá trình nâng cấp, cải tiến về khả năng mở rộng hậu The Merge. Bài viết này chúng ta cùng nhau tìm hiểu sâu hơn về các giai đoạn được CEO này nhắc đến nhé.

5 giai đoạn trong kế hoạch tiếp theo của Ethereum sau The Merge

Quá trình nâng cấp hiệu suất và khả năng mở rộng của Ethereum gồm 6 giai đoạn: The Merge, The Surge, The Scourge, The Verge, The Purge và The Splurge. Với việc The Merge đã diễn ra đánh dấu thay đổi đầu tiên của Ethereum là chuyển đổi cơ chế đồng thuận từ POW (proof-of-work) sang POW(proof-of-state).

  Web3 techstack - Hành trang cho anh em developer

The Surge – Tăng trưởng

Giai đoạn The Surge đề cập đến việc bổ sung công nghệ sharding – một giải pháp mở rộng quy mô mà theo như đội ngũ Founder Ethereum tuyên bố sẽ tiếp tục cho phép các giao thức Layer 2 hoạt động hiệu quả hơn, giảm chi phí và giúp người dùng vận hành các node bảo mật mạng dễ dàng hơn. Một khi giai đoạn tăng trưởng này hoàn tất, mạng Ethereum cũng được hứa hẹn sẽ xử lý các giao dịch nhanh hơn.

Về mặt tốc độ giao dịch, hiện nay Ethereum có thể xử lý khoảng 15-20 giao dịch mỗi giây; sau cải tiến tốc độ kỳ vọng mang lại sẽ là con số 100.000 giao dịch mỗi giây. The Surge dự kiến sẽ được diễn ra vào năm sau 2023.

The Surge – Tăng trưởng

The Scourge – Rủi ro, tai họa

Đây là 1 giai đoạn mới được thêm vào trong roadmap lần này, mục đích của giai đoạn này là nhằm đảm bảo tính trung lập và công bằng của các giao dịch Ethereum. Như chúng ta đã biết trong các mạng lưới như Bitcoin hay Ethereum, Miner chịu trách nhiệm tổng hợp và đưa giao dịch lên block, sau đó block sẽ được xác thực bởi toàn bộ mạng lưới. Từ đó nảy sinh vấn đề liên quan đến thứ tự các giao dịch được submit on-chain, Miner lúc này được toàn quyền quyết định và họ sẽ chọn những giao dịch trả phí gas cao nhất để tối đa lợi nhuận. MEV là thuật ngữ dành để chỉ cho lợi nhuận của các thợ đào trong trường hợp này, tuy nhiên MEV hiện tại lại đến hầu hết từ các bots của bên thứ 3. Điều này tác động xấu làm trượt giá ảnh hưởng đến giao dịch Ethereum, khiến người dùng mất hàng triệu USD vì phí gas tăng.

Có lẽ nhận thức được rủi ro từ vấn đề trên mà giai đoạn The Scourge mới được thêm vào trong lần công bố này, nhằm giải quyết triệt để vấn đề MEV, tạo ra sự công bằng cho các giao dịch Ethereum.

The Scourge – Rủi ro, tai họa

Hiện tại chưa có thêm thông tin về giải pháp được đưa ra cho giai đoạn này. Tuy nhiên hiện nay có 1 số đề xuất nổi bật cho vấn đề MEV bot như: đề xuất EIP-1559, Flash bots hay Chainlink FSS. Đây thực tế là 1 trong những vấn đề nan giải nhất của blockchain, hãy chờ thêm thông tin cho giải pháp đến từ đội ngũ phát triển của hệ sinh thái này.

The Verge – Giới hạn

The Verge là giai đoạn nâng cấp mở rộng nhằm tối ưu hóa dung lượng lưu trữ trên mạng và giảm kích thước nút. Cụ thể The Verge sẽ giới thiệu Verkle Trees – 1 bản nâng cấp mạnh mẽ cho Merkle proofs, cho phép kích thước proof trở nên nhỏ hơn rất nhiều. 

Merkle proof là 1 gói các nút trên Merkle Tree cần để sử dụng cho việc kiểm tra xem dữ liệu đầu vào có thuộc Merkle Tree hay không mà không cần phải tiết lộ tất cả các dữ liệu tạo thành cây đó. Trong blockchain, Merkle Tree được sử dụng rất phổ biến nhằm xác minh các giao dịch. Verkle Tree được xem như 1 cải tiến của Merkle Tree do John Kuszmaul giới thiệu vào năm 2018, nó giúp giảm từ 6-8 lần kích thước Verkle proof so với Merkle proof. 

The Verge – Giới hạn

Các bạn có thể tham khảo trên chính blog của Vitalik Buterin để hiểu sâu hơn về thuật toán này ở đường link dưới đây:

https://vitalik.ca/general/2021/06/18/verkle.html

Hậu The Merge, sự chuyển đổi từ cơ chế PoW sang PoS đòi hỏi người dùng có 32 ETH trở lên để tham gia stake và nhận phần thưởng từ giao dịch. The Verge sẽ giúp hỗ trợ tốt hơn cho các nhà đầu tư tìm cách trở thành nhà xác thực giao dịch nhưng sở hữu ít hơn 32 ETH. Cùng với việc giới thiệu Verkle trees giúp hỗ trợ ETH trở nên mở rộng hơn. Về cơ bản thì điều này cho phép người dùng trở thành nhà xác thực mạng mà không cần phải lưu trữ lượng lớn dữ liệu trên máy của họ. 

Bạn có thể xem thêm việc làm Blockchain tại TopDev

The Purge – Thanh lọc

Đúng như tên gọi của nó, đây này là giai đoạn dọn dẹp nhằm loại bỏ một số dữ liệu lịch sử để hợp lý hóa việc lưu trữ và giảm tắc nghẽn mạng. Thông qua đề xuất EIP-4444 (đề xuất cho phép thêm bớt lịch sử cho các khách hàng Ethereum) yêu cầu các node lưu trữ ít lịch sử hơn. Điều này đang là vấn đề nóng được đưa ra bàn luận và tranh cãi khi nó sẽ loại bỏ một số chức năng cho khách hàng cũng như không còn có thể hiển thị lịch sử dữ liệu và hành vi người dùng trong quá khứ. 

The Purge – Thanh lọc

Nếu như đề xuất này chính thức được áp dụng, nó có thể tác động không nhỏ đến tổng thể mạng lưới Ethereum trong quá trình vận hành và mở rộng. Nhưng theo Buterin thì điều này là cần thiết, đòi hỏi sự hy sinh trong ngắn hạn để đạt được lợi ích lâu dài trong quá trình xây dựng 1 hệ sinh thái phi tập trung.

The Splurge – Bùng nổ

Đây là giai đoạn cuối cùng để nâng cấp Ethereum 2.0 với hàng loạt các nâng cấp và tinh chỉnh nhỏ hơn khác nhằm đảo bảo mạng hoạt động và vận hành tốt hơn so với 4 giai đoạn trước. Một số từ khóa công nghệ liên quan được đề cập đến trong giai đoạn này như: công nghệ mật mã học ZKP (Zero-knowledge proof), cơ chế đốt token EIP-1559, … Trong những dòng tweet của mình, Buterin cũng chia sẻ về sự sẵn sàng tích hợp các công nghệ mới bổ sung, đáp ứng cho sự phát triển của Ethererum nói riêng và blockchain nói chung trong tương lai.

Lời kết

Như lời của founder Buterin lưu ý đến với các nhà phát triển rằng: “sự khác biệt giữa Bitcoin và Ethereum là các Bitcoiners xem Bitcoin đã đạt 80% mức hoàn thiện, còn người Ethereans xem Ethereum đang ở mức 40%”; sẽ còn nhiều vấn đề cần hoàn thiện hơn nữa trong hệ sinh thái blockchain này. 5 giai đoạn hậu The Merge cũng sẽ chỉ là những bước đi mang tính định hướng cho tương lai do sự phức tạp của mạng và tốc độ thay đổi nhanh chóng trong không gian blockchain. Cùng chờ đợi và kỳ vọng đội ngũ phát triển Ethereum có thể hoàn thành lộ trình đề ra đáp ứng kỳ vọng mong chờ từ cộng đồng. Cảm ơn các bạn đã theo dõi bài viết của mình.

Tác giả: Phạm Minh Khoa

Xem thêm:

The Merge – Bước tiến quan trọng của blockchain Ethereum

Ethereum là gì? Tìm hiểu cơ bản về Blockchain (P1)

Web3 techstack – Hành trang cho anh em developer

Xem thêm những việc làm IT hấp dẫn tại TopDev

 

 

TINOHOST – ĐƠN VỊ CUNG CẤP HOSTING GIÁ RẺ HÀNG ĐẦU VIỆT NAM

TINOHOST - Đon vi cung cap hosting

Được thành lập chính thức vào năm 2019, trực thuộc Công ty Cổ phần Tập đoàn Tino, TinoHost là đơn vị cung cấp dịch vụ cho thuê hosting, máy chủ cũng như tên miền với giá thành phải chăng, phù hợp với đại đa số nhu cầu sử dụng của người dùng website tại Việt Nam. 

TINOHOST - Don vi cung cap hosting gia re

Những dịch vụ được đánh giá cao tại TinoHost

Dịch vụ hosting

TinoHost cung cấp các dịch vụ Hosting như: Hosting EPYC, Business Hosting EPYC, Cloud Hosting, Unlimited Hosting, SEO Hosting và Reseller Hosting. Trong đó, Hosting EPYCBusiness Hosting EPYC là hai sản phẩm độc quyền được cung cấp bởi TinoHost vừa “trình làng” vào tháng 8/2022.

Với nền tảng hosting cao cấp được phần cứng vượt trội: AMD EPYC thế hệ mới, ổ cứng NVMe Raid 10, Hosting EPYC và Business Hosting EPYC – hai sản phẩm do đội ngũ TinoHost thiết kế tự tin đưa website của bạn chạm mốc tốc độ nhanh nhất với hiệu suất cao nhất giúp tăng trưởng tối đa doanh thu qua website. 

TINOHOST - don vi cung cap Hosting gia re

Không chỉ chọn phần cứng cao cấp hàng đầu CPU E5 2683/2699 v3/4 – Cloud Storage 100% SSD Enterprise, Litespeed Web Server, backup hàng ngày, TinoHost còn sử dụng giải pháp bảo vệ website khỏi mã độc số 1 thế giới – Imunify360, hỗ trợ Memcached và Redis cache service thông qua giao thức Unix socket.

Dịch vụ máy chủ

Các dịch vụ máy chủ tại TinoHost là: Cloud VPS, VPS Pro, Dedicated server, …

Với hệ thống được xây dựng theo trải nghiệm riêng của người sử dụng, TinoHost đã tạo ra những chức năng gần như là tự động và dễ dàng cho các quản trị viên. Tất cả dịch vụ máy chủ tại TinoHost.com có giá rẻ nhất với cấu hình mạnh mẽ, ứng dụng công nghệ hiện đại nhất. 

Dịch vụ tên miền

TinoHost cung cấp tên miền quốc gia .VN và tên miền quốc tế với mức phí ưu đãi nhất thị trường nhưng vẫn đảm bảo đầy đủ các dịch vụ đi kèm. Ở đâu rẻ hơn, liên hệ ngay với TinoHost để nhận ưu đãi. 

Sản phẩm của TinoHost bán được trên toàn cầu, không giới hạn ở Việt Nam. Bạn sẽ toàn quyền quản lý, hệ thống bảo mật 2 lớp xác thực qua điện thoại. 

Để hỗ trợ tốt nhất cho anh chị SEO-ER chuyên nghiệp, TinoHost có dịch vụ Mua domain theo gói. Khi mua một lúc nhiều Extension (tld) khác nhau, người dùng sẽ được nhận mức giá siêu ưu đãi.

7 lý do bạn nên chọn TinoHost

  1. Với đội ngũ nhân sự với nhiều năm kinh nghiệm trong lĩnh vực cung cấp dịch vụ hosting, máy chủ, tên miền và email doanh nghiệp, TinoHost sẽ tặng thêm một tháng sử dụng dịch vụ cho khách hàng nếu ticket hỗ trợ trên 5 phút. Đây là cam kết tuyệt đối mà chưa có nhà cung cấp nào dám đảm bảo. 
  2. 7 ngày dùng thử không cần thanh toán. Cam kết hoàn tiền 100% trong 30 ngày nếu quý khách không hài lòng.
  3. Cơ hội sử dụng VPS giá rẻ: sở hữu thông số VPS có IOPS lớn đi kèm DirectAdmin với giá thành thấp nhất thị trường. 
  4. Gói Unlimited Hosting cung cấp nền tảng lưu trữ không giới hạn mang đến những khả năng vượt trội cho website. Quản lý lưu trữ hiệu quả sẽ giúp doanh nghiệp phát huy tối đa tiềm năng và nội lực sẵn có.
  5. Tên miền giá thấp nhất Việt Nam.
  6. Cấu hình mạnh mẽ, ứng dụng công nghệ hiện đại nhất.
  7. Liên tục đưa ra nhiều giải pháp sáng tạo mang lại giá trị tốt nhất cho người dùng: phát triển dựa trên nền tảng Cloud Storage, giải quyết hoàn toàn vấn đề lây lan mã độc trên cùng 1 hệ thống máy chủ với Imunify360 và Cloudlinux, tối ưu tốc độ khi hỗ trợ Memcached/Redis qua Unix socket, … 

TINOHOST - don vi cung cap Hosting gia re

Sau hơn 3 năm hoạt động, đến nay, Tino Host đã trở thành một trong những nhà cung cấp hosting hàng đầu Việt Nam, nhận được đánh giá cao từ phía người dùng nhờ những điểm sáng về dịch vụ. Với mong muốn mang đến cho người dùng website cảm giác trải nghiệm tốt nhất, TinoHost được xây dựng trên nền tảng những giá trị cốt lõi: đặt khách hàng ở vị trí trung tâm, chú trọng đào tạo nhân sự “có tâm và có tầm”. Không ngừng cải thiện để nâng cao chất lượng dịch vụ, TinoHost tự tin mang lại những giải pháp công nghệ tiên tiến, tạo ra những giá trị kinh doanh nhất định cho các công ty, doanh nghiệp hàng đầu hiện nay trong hành trình vươn mình ra thế giới.

———————

CÔNG TY CỔ PHẦN TẬP ĐOÀN TINO

Trụ sở chính: L17-11, Tầng 17, Tòa nhà Vincom Center, Số 72 Lê Thánh Tôn, Phường Bến Nghé, Quận 1, Thành phố Hồ Chí Minh

Văn phòng đại diện: 42 Trần Phú, Phường 4, Quận 5, Thành phố Hồ Chí Minh

Điện thoại: 0364 333 333

Tổng đài miễn phí: 1800 6734

Email: sales@tino.org

Website: www.tino.org

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

Xem thêm:

Chuyển Hosting bao lâu thì mới cập nhật?

13 hosting miễn phí dành cho lập trình viên

Tạo website với Firebase Hosting

PangoCDP – Giải pháp cho trải nghiệm khách hàng đặc biệt

Giai phap PangoCDP

Thấu hiểu hành vi người dùng qua dữ liệu là một điều quan trọng để giúp bạn tạo ra sự khác biệt cho sản phẩm, dịch vụ của mình. PangoCDP – Nền tảng dữ liệu khách hàng mạnh mẽ chính là một trong những giải pháp mà bạn cần để mang lại những trải nghiệm đặc biệt cho người dùng dựa trên định hướng dữ liệu.

Con người là yếu tố quan trọng của một sản phẩm

Con người chính là yếu tố trung tâm của bất kỳ sản phẩm nào bởi nó được tạo ra để cho con người sử dụng. Vì vậy, dù là ai, trong vai trò nào, đặc biệt là những kỹ thuật viên, IT hay UX-UI giúp góp phần xây dựng, phát triển và duy trì một sản phẩm công nghệ cũng cần quan tâm đến nhu cầu và trải nghiệm người dùng.

Chính vì thế, việc hiểu người dùng là ai, họ đến từ đâu, họ mong muốn gì dựa trên định hướng dữ liệu là một điều quan trọng đối với những người nghiên cứu và tạo ra sản phẩm.

Tuy nhiên, vấn đề lớn mà mọi người đều đang gặp phải trong việc thu thập và phân tích dữ liệu người dùng đó là: Nguồn dữ liệu lớn thường bị phân mảnh và lưu trữ rời rạc từ nhiều hệ thống riêng biệt, dữ liệu hỗn độn và không đồng nhất khiến chúng ta mất nhiều thời gian trong việc xử lý để hiểu được hành vi của người dùng và đánh giá nhằm tối ưu sản phẩm.

PangoCDP – Nền tảng dữ liệu mạnh mẽ giúp xây dựng trải nghiệm khách hàng tối ưu

Giải pháp tối ưu giúp doanh nghiệp giải quyết được những rắc rối về dữ liệu từ đó hiểu hơn về người dùng, chính là Pango CDP – Nền tảng dữ liệu khách hàng mạnh mẽ.

PangoCDP là gì?

Thuật ngữ Customer Data Platform hay CDP được David Raab đặt ra vào năm 2013. Đến năm 2018, thuật ngữ này đã được chấp nhận và sử dụng rộng rãi, đặc biệt là trong giới Marketing và Công nghệ.

PangoCDP là nền tảng giúp thống nhất dữ liệu khách hàng (Unify Customer) trên tất cả các điểm tiếp xúc từ Online đến Offline (Touchpoints) vào một nền tảng duy nhất (All Data One Place). Từ đó cung cấp những thông tin chi tiết và có ý nghĩa, giúp mang đến trải nghiệm nhất quán, có mục tiêu, phù hợp với ngữ cảnh và từng đối tượng khách hàng trên các kênh. Đây là cơ sở để doanh nghiệp phát triển bền vững dựa trên định hướng dữ liệu (Data-Driven).

PangoCDP - Nền tảng dữ liệu khách hàng mạnh mẽ
PangoCDP – Nền tảng dữ liệu khách hàng mạnh mẽ

PangoCDP giúp sử dụng và tối ưu dữ liệu khách hàng như thế nào?

  1. Tập hợp toàn bộ dữ liệu về mọi tương tác của khách hàng từ Online đến Offline vào một nơi an toàn duy nhất.
  2. Chuẩn hóa và chuyển đổi dữ liệu đó bằng cách đối sánh danh tính khách hàng cá nhân từ mỗi hệ thống (định danh khách hàng) và kết hợp chúng lại để tạo thành một hồ sơ khách hàng nhất quán, chính xác. Cung cấp bức tranh toàn cảnh 360 độ về hồ sơ khách hàng.
  3. Phân khúc khách hàng mạnh mẽ theo thời gian thực. Từ đó, bạn có thể xây dựng trải nghiệm sản phẩm phù hợp cho từng phân khúc khách hàng chỉ với vài thao tác đơn giản trên giao diện mà không phải phụ thuộc vào các phòng ban khác.
  4. Tích hợp sẵn hơn 20 kết nối tới các kênh Digital phổ biến nhất, giúp bạn hoàn toàn chủ động trong việc tương tác trực tiếp với khách hàng.

Tóm lại, PangoCDP sẽ giúp doanh nghiệp mang đến giá trị trải nghiệm cao cho khách hàng theo ngữ cảnh tức thì. Hơn hết, PangoCDP sẽ cho phép bạn tạo ra những trải nghiệm đáng nhớ cho khách hàng (Customer Experience) một cách hiệu quả.

Đăng ký sử dụng dịch vụ PangoCDP ở đâu?

VietGuys sẽ là người đồng hành đáng tin cậy nhất dành cho bạn khi lựa chọn sử dụng dịch vụ PangoCDP –  Nền tảng dữ liệu khách hàng mạnh mẽ.

Theo đó, VietGuys hiện đang là đối tác được đầu tư chiến lược từ công ty Accrete, Nhật Bản và là đơn vị cung cấp các Giải pháp Tiếp thị trên Di động (Mobile Marketing Solutions) toàn diện cho hơn 5,000 nhãn hàng trong và ngoài nước như Pharmacity, Concung, Vietnam Airlines, Thegioididong, CGV, Garena, Grab, Shopee, Samsung, LG,…

PangoCDP là giải pháp được hợp tác thương mại giữa VietGuys và ByteTech. Trong đó, ByteTech giữ vai trò sở hữu và phát triển hệ thống sản phẩm. VietGuys giữ vai trò phát triển thương mại, hỗ trợ giới thiệu và kết nối khách hàng quan tâm sử dụng giải pháp PangoCDP, một trong những giải pháp trong hệ sinh thái của ByteTech.

Trải qua hơn 15 năm đồng hành cùng doanh nghiệp, VietGuys sẽ biết cách giúp bạn tạo ra trải nghiệm khách hàng đặc biệt với giải pháp PangoCDP. Từ đó giúp củng cố và phát triển thương hiệu, tạo mối quan hệ gắn kết bền vững với khách hàng.

Xem thêm:

9 câu hỏi phỏng vấn Frontend Developer có thể bạn chưa biết

Ứng dụng thuật toán và cấu trúc dữ liệu lúc đi làm

Cách tuần tự hóa dữ liệu trong Java như Protobuf

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

Google Cloud hướng tới hỗ trợ tất cả dữ liệu phi cấu trúc

Google Cloud hướng tới hỗ trợ tất cả dữ liệu phi cấu trúc

Điện toán đám mây (Cloud Computing) được xem như là 1 giải pháp toàn diện cho các chủ doanh nghiệp trong việc xây dựng cơ sở hạ tầng về CNTT thông qua Internet. Hiện nay lĩnh vực này đang là cuộc cạnh tranh khốc liệt giữa các ông lớn như Google, Amazon hay Microsoft. Trong nỗ lực cải thiện chất lượng lưu trữ dữ liệu của mình, mới đây Google đã giới thiệu công cụ Big Lake cùng với những cam kết hỗ trợ tất cả các định dạng dữ liệu phi cấu trúc trên nền tảng Google Cloud.

Vậy nên, việc liên tục update những cải tiến mới về Google Cloud sẽ là một lợi thế cho các Devops Engineer. Ở bài viết này chúng ta cùng đi tìm hiểu về những nội dung cập nhật trên để xem Google đã có bước tiến thế nào trong lĩnh vực điện toán đám mây này nhé.

GCP, GCB, Big Lake là gì?

Google Cloud Platform (GCP) là một nền tảng điện toán đám mây (Cloud Computing) do Google cung cấp, bao gồm gần 100 dịch vụ được lưu trữ để tính toán, lưu trữ và phát triển ứng dụng chạy trên phần cứng của Google.

GCP cho phép các doanh nghiệp, tổ chức xây dựng và chạy các ứng dụng của mình trên chính hệ thống mà Google cung cấp, đồng thời được sử dụng tất cả các dịch vụ thiết yếu của Google bao gồm Big Data, Storage, Compute Engine, Networking, Developer Tool, …

Cùng với Azure của Microsoft và AWS của Amazon, GCP là 1 trong 3 nền tảng điện toán đám mây hàng đầu hiện nay cho việc phân phối các tài nguyên CNTT theo nhu cầu thông qua Internet.

Google Cloud Big Query (GCB) là 1 công cụ nội bộ của Google dùng để truy vấn một khối lượng dữ liệu khổng lồ trên nền tảng hạ tầng của chính Google. GCB được xem như 1 data warehouse có khả năng mở rộng cao, Google thiết kế chúng để giúp các nhà phân tích dữ liệu làm việc nhanh và hiệu quả hơn với 1 chi phí hợp lý, thay vì việc phải tự xây dựng 1 cơ sở hạ tầng có sẵn cho riêng từng doanh nghiệp.

Trong hội nghị dữ liệu đám mây diễn ra vào tháng 4/2022 vừa qua, Google đã công bố bản phát hành của Big Lake, 1 công cụ lưu trữ hợp nhất mới giúp hỗ trợ các doanh nghiệp trong việc phân tích dữ liệu trong kho data warehouse và data lake của họ 1 cách dễ dàng hơn. Khái niệm Data Lake dùng để chỉ hình thức lưu trữ dữ liệu bao gồm cả loại dữ liệu phi cấu trúc và có cấu trúc từ nhiều nguồn khác nhau; phân biệt với hình thức Data Warehouse trong bài toán lưu trữ dữ liệu lớn (Big Data). 

Ý tưởng cốt lõi của Google là việc tận dụng khả năng hoạt động và quản lý dữ liệu kho (warehouse) Big Query mở rộng sang data lakes trên Google Cloud Storage để có thể kết hợp thành 1 dịch vụ duy nhất. 

GCP, GCB, Big Lake là gì?

BigLake hỗ trợ chính thức Apache Iceberg

BigLake lúc ra mắt đã hỗ trợ người dùng lưu trữ dữ liệu ở các định dạng file mở, chẳng hạn như Apache Parquet – 1 định dạng dữ liệu theo cột.

Trong nỗ lực tiếp tục hỗ trợ các loại dữ liệu phi cấu trúc của mình, cuối tháng 10 vừa rồi trong 1 thông báo tại hội nghị Google Cloud Next, Google chính thức thông báo hỗ trợ định dạng Apache Iceberg – 1 định dạng hiệu suất cao mã nguồn mở cho các bảng phân tích khổng lồ. Ice berg là 1 định dạng mã nguồn mở phổ biến cho khách hàng đang tìm cách xây dựng các Data Lakes, nó cung cấp nhiều tính năng sẵn có trong kho dữ liệu (data warehouse). 

Link bài thông báo của Google Cloud:

https://cloud.google.com/blog/products/data-analytics/announcing-apache-iceberg-support-for-biglake

BigLake hỗ trợ chính thức Apache Iceberg

Đặc điểm kỹ thuật mở của Iceberg cho phép khách hàng chạy nhiều công cụ truy vấn trên 1 bản sao dữ liệu duy nhất được lưu trữ. Với sự hỗ trợ từ cộng đồng thì định dạng Apache Iceberg đang trở thành 1 tiêu chuẩn cho data lakes, mang lại khả năng tương tác trên các cloud cho công việc phân tích dữ liệu kết hợp với các hệ thống trao đổi dữ liệu.

Tiếp theo sẽ là Hudi và Delta Lake

Cũng trong thông báo trên của mình, Google Cloud cũng đã hứa hẹn việc sẽ hỗ trợ thêm các định dạng dữ liệu Hudi và Delta Lake trên công cụ Big Lake trong tương lai, mặc dù chưa có kế hoạch chính thức cho thời điểm hỗ trợ. Apache Hudi là 1 framework quản lý dữ liệu mã nguồn mở được sử dụng để đơn giản hóa quá trình xử lý dữ liệu gia tăng và phát triển dữ liệu pipeline. Delta Lake là 1 lớp định dạng lưu trữ mã nguồn mở mang lại độ tin cậy, bảo mật và hiệu suất tốt hơn trên data lake, bao gồm cả các xử lý streaming. Theo như số liệu của viện nghiên cứu Ventana, có hơn 57% những người sử dụng data lakes đang sử dụng ít nhất một trong những định dạng dữ liệu bảng Iceberg, Hudi hay Delta. Việc BigLake GCP hỗ trợ được cả 3 định dạng dữ liệu trên hứa hẹn mang đến nhiều tiện ích cho người sử dụng trong việc xử lý dữ liệu. Các đối thủ của Google Cloud cũng đã hoặc đang có kế hoạch về việc công bố hỗ trợ các định dạng trên trong hội nghị thường niên CloudWorld sắp tới.

Định dạng dữ liệu Hudi và Delta Lake trên công cụ Big Lake

Big Query hỗ trợ dữ liệu phi cấu trúc

Một điểm cập nhật đáng chú ý nữa từ Cloud Next, Google cũng đã thêm các tính năng mới vào kho dữ liệu doanh nghiệp được quản lý của mình – Big Query – bao gồm việc bổ sung hỗ trợ cho dữ liệu phi cấu trúc. Theo Google, chỉ 10% dữ liệu mà các doanh nghiệp sử dụng và tạo ra là nhóm dữ liệu có cấu trúc – đấy là các dữ liệu hoạt động, các ứng dụng SaaS hay dữ liệu bán cấu trúc lưu dưới dạng JSON. Dữ liệu phi cấu trúc chiếm đa số gồm các video, âm thanh và các tài liệu ở định dạng khác nhau, do đó các doanh nghiệp phải đối mặt với việc nhu cầu làm việc với dữ liệu phi cấu trúc ngày càng tăng. Động thái này của Google được xem như 1 sự khác biệt với các nền tảng Cloud khác, nó giúp tạo ra 1 nền tảng duy nhất hứa hẹn đơn giản hóa mọi thứ cho các nhà khoa học dữ liệu và phát triển khi sử dụng.

Kết bài

Trong lĩnh vực điện toán đám mây Cloud Computing hiện nay, thị phần của Google Cloud vẫn đang xếp sau khá nhiều so với Azure của Microsoft và đặc biệt là AWS của Amazon.

AWS vs Azure vs Google Market Share

Với những động thái tích cực, cải tiến việc hỗ trợ nhiều định dạng dữ liệu phi cấu trúc trên, hy vọng sẽ là bước phát triển tốt của Google Cloud nhằm chiếm lấy thị phần trong thị trường Cloud hiện nay. Điều quan trọng là người sử dụng ngày càng có nhiều công cụ và tiện ích hơn trong việc phát triển hạ tầng và phân tích dữ liệu trên các nền tảng đám mây. Hy vọng bài viết này đã mang lại cho các bạn những thông tin hữu ích, hẹn gặp lại các bạn trong các bài viết sau của mình.

Anh em có thể tham khảo tin tuyển dụng IT để phát triển sự nghiệp nhé!

Tác giả: Phạm Minh Khoa

Xem thêm:

Java Developer là gì? Lộ trình để trở thành Java Developer

AngularJS Là Gì? Khác Biệt Nào Giữa Angular Và Frontend Framework Khác

8 Bước Trong Lộ Trình Trở Thành DevOps Engineer