Công Nghệ
Review và giải thích sâu về framework, ngôn ngữ, AI, blockchain… ngắn gọn, dễ hiểu, cập nhật liên tục như git pull ‑‑rebase.
1826 bài viết

Golang toàn tập – Goroutines và Channels
Bài viết được sự cho phép của tác giả Kiên Nguyễn Được biết tới là một trong những ngôn ngữ hỗ trợ mạnh mẽ concurrency, Golang Goroutines và Channels thật ra có ý nghĩa như thế nào?. Có sự khác biệt nào giữa Golang Concurrency và Java Concurrency hay không?. Channel trong Golang là gì? So sánh Callback function và mutex lock với channel Golang là gì và tại sao bạn nên học Go? Trước khi bắt đầu tìm hiểu sâu hơn, hãy cùng bắt đầu với hai khái niệm cơ bản nhất, Routines và Channels . A hero – Goroutines with channel Ngoài ra, golang cũng hỗ trợ functional programmin g. Có thể tìm hiểu qua về functional programming qua bài viết này . Ok, bắt đầu ngay thôi! 1. Concurrency Trước khi bắt đầu tìm hiểu Routines và Channels, hãy nắm bắt khái niệm về Concurrency (Tính toán đồng thời) . Making process on more than one task simultaneously is known as concurrency Việc thực hiện nhiều hơn một task trên một process được biết tới là concurrency (đồng thời, cùng lúc) Đã hiểu về Concurrency, tuy nhiên nhớ take note luôn là nó khác biệt hoàn toàn với Parallel. Thực hiện mọi việc đồng thời, nhưng có thể chỉ ở trên cùng một core, một process của CPU . Parallel lại tận dụng đa lõi, thực hiện mọi việc đồng thời, nhưng trên nhiều tiến trình. Nguồn ảnh / Source: ednsquare.com 2. Goroutines Muốn một function có thể chạy đồng thời với function tất nhiên phải có khai báo. Không khai báo thì Go không thể biết được khi nào function đó được chạy Concurrency. A goroutine is a function that is capable of running concurrently with other functions Goroutine là function có thể chạy đồng thời...

Hướng dẫn mã nguồn Telegram IOS phần 2: SSignalKit là gì?
Bài viết được sự cho phép của tác giả Lê Xuân Quỳnh Tiếp theo bài viết số 1 , trong bài viết lần này chúng ta sẽ nghiên cứu SSignalKit. Bạn có thể tham khảo bản tiếng Anh tại đây: https://hubo.dev/2020-05-11-source-code-walkthrough-of-telegram-ios-part-2/ Telegram-iOS sử dụng Reactive programing trong hầu hết các modules của họ. Sau đây là 3 framework chính sử dụng rx trong dự án: MTSignal : Có thể được coi là reactive programing cho Objective-C. Nó chủ yếu sử dụng module MtProtoKit , implement MTProto – Telegram mobile protocol. SSignalKit : Nó là hậu duệ của MTSignal, với nhiều xử lý phức tạp và toán tử phong phú hơn. SwiftSignalKit : tương tự SSignalKit nhưng nó hỗ trợ cho swift. Hướng dẫn mã nguồn Telegram IOS phần 3: Các nền tảng sử dụng trong ứng dụng Build một ứng dụng Chat cho Android & iOS bằng Contus Fly như thế nào? Bài đăng này tập trung vào SwiftSignalKit để giải thích cách thiết kế với các trường hợp sử dụng. Về lập trình Rx là 1 mindset khá mới lạ so với lập trình hướng đối tượng mà đa số developer đã nắm rõ. Cho nên các bạn nên vào trang chủ của nó để hiểu về các toán tử của nó một cách sâu sắc, trực quan ở đây: https://rxmarbles.com/ Signal Signal là một lớp để giải thích khái niệm “change over time” – xử lý sự kiện theo thời gian thực. Nó được mô tả dưới đây: // pseudocode public final class Signal<T, E> { public init(_ generator: @escaping(Subscriber<T, E>) -> Disposable) public func start(next: ((T) -> Void)! = nil, error: ((E) -> Void)! = nil, completed: (() -> Void)! = nil) -> Disposable } Để cài đặt Signal, nó chấp nhận 1 closure, bao gồm kiểu...

Sự thật về 4.0, Trí tuệ nhân tạo & Robots
Hầu hết những gì bạn thấy trên báo chí đều là chiêu trò marketing và giật tít. Sự thật về 4.0 Những gì báo chí đang viết về CMCN4.0 hầu hết là không chính xác hay nói nhẹ là không đầy đủ về bức tranh toàn cảnh của CMCN4.0. Những gì CMCN4.0 đang hướng tới, là một CHUỖI các công nghệ mới cho phép con người làm việc và sản xuất hiệu quả hơn. Để có thể áp dụng thành công CMCN4.0, tất cả các công nghệ trong chuỗi đó cần phải được áp dụng. Hãy thử tưởng tượng một nhà máy X nào đó. Để bắt đầu tiến tới 4.0, toàn bộ các thiết bị,công cụ hay những phần quan trọng trong nhà máy đều phải gắn các chip cho phép đo lường các thông số cần thiết, cho phép lưu trữ những thông số này, đồng thời phải nối mạng để cho phép truy suất những thông số này từ xa. Chúng ta cần phải biết được tại một thời điểm hay trong một khoảng thời gian, những máy móc nào hoạt động, năng suất ra sao, công nhân nào sử dụng, hay hỏng những chỗ nào, bao lâu thì hỏng. Những dữ liệu này cần phải sẵn sàng mọi lúc, mọi nơi, và thời gian thực. Đây hay được gọi là Internet of Things (IoT). Để có thể bắt đầu CMCN4.0, IoT là công nghệ bắt buộc phải có, vì nó sẽ cung cấp nguyên liệu đầu vào cho những công nghệ tiếp theo trong chuỗi. Đó là DỮ LIỆU (Data). (Tất nhiên nó cũng cung cấp các tiện ích khác, như cho phép quản lý, điều hành nhà máy từ xa, giảm chi phí..v.v.) Những dữ liệu này được thu thập trên diện rộng và trong...

Gitlab CI
Bài viết được sự cho phép của tác giả Lê Chí Dũng Đến thời điểm hiện nay, tôi thường yêu cầu các dự án của mình phải có CI. Nếu viết bằng script như nodejs thì CI sẽ có nhiệm vụ check syntax, để các thành viên trong nhóm cùng một kiểu viết giống nhau, và chạy các mức test khác nhau như unit test, CDC test. Điểu tuyệt vời của gitlab là nó đi kèm với bộ CI miễn phí cho cả dự án private (yay). Blog này sẽ trình bày chiến lược để thiết lập ENV test trên Gitlab CI để build docker image, và upload nó lên gitlab registry. CI/CD là gì? Triển khai quy trình CI/CD với Gitlab 34 sản phẩm phần mềm Social Networking tốt nhất Gitlab runner Là nơi chương trình test của bạn sẽ được chạy. Bạn có thể có một PC riêng biệt cho việc build và test. Gitlab cung cấp một chương trình khá tiện https://gitlab.com/gitlab-org/gitlab-ci-multi-runner để thiết lập runner cục bộ. Cá nhân tôi chỉ sử dụng multi runner này khi chương trình cần tài nguyên lớn. Phần lớn thời gian tôi sử dụng shared runner https://about.gitlab.com/gitlab-com/settings/#shared-runners . Xin cảm ơn sự tử tế của Digital Ocean khi cho mỗi build một tài nguyên 4GB chạy trong mỗi máy ảo riêng biệt. Shared runner chạy trên docker, nên có thể khai báo các docker có sẵn khá tiện (yay). . gitlab-ci.yml Là file cấu hình cho gitlab CI. Dưới đây là một ví dụ trong đó khai báo một trạng thái của test pipeline là unit test. Phần sau dựa trên giả thuyết tôi đang xây dựng một web app với nodejs, và chạy unit test với npm run test . image: node:boron-alpine stages: - unit_test unit_test_job: stage: unit_test script:...

Sử dụng aria trên site eCommerce, vấn đề accessibility cần quan tâm
Accessible là một thuật ngữ ít bạn làm web quan tâm, không có nghĩa là nó không tồn tại, cùng tham khảo những aria nào cần bổ sung cho trang ecommerce aria là gì ARIA (Accessible Rich Internet Applications) là một attribute trên thẻ HTML, chúng ta gắn thẻ nào cũng được, nội dung này thông tin và tác dụng của thẻ element đó. Với user bình thường thì nó sẽ không có ý nghĩa mấy, nhưng với người sử dụng web thông qua một thiết bị đọc màn hình (cho những người khiếm khuyết) thì nó vô cùng quan trọng. <div aria-label="button click me">Click Me</div> Một vài aria phổ biến aria-label và aria-labelledby Chức năng tương tự như attribute alt của thẻ <img/> , nhưng có thể gắn cho bất kỳ element nào. <button aria-label="menu" class="hamburger" > </button> Thay vì thêm aria-label trực tiếp, aria-labelledby trỏ đến id một element khác để làm label <span id="rg-label"> Drink options </span> <div role="radiogroup" aria-labelledby="rg-label" > ... </div> role Không bắt đầu bằng aria , dùng để khai báo công dụng của từng element search banner presentation toolbar status menuitem log dialog link <div src="questionmark.png" role="tooltip" /> aria-live Thông báo đến user ngay khi nội dung bên trong element gắn thuộc tính này có thay đổi. Có 2 giá trị có thể thêm cho thuộc tính aria-live : polite , assertive polite : user không cần tương tác gì, nội dụng tự động cập nhập bởi server, ví dụ như bài viết mới được push lên assertive : user thực hiện một tương tác làm thay đổi giá trị nào đó, ví dụ như tăng số lượng sản phẩm muốn mua aria-owns Nó cung cấp thông tin “tui là ba của đứa bé”. Trường hợp nào chúng ta cần dùng? Ví dụ...

Xây dựng phương thức với thuộc tính methods trong Vue instance
Bài viết được sự cho phép của tác giả Kien Dang Chung 1. Tại sao cần có phương thức trong thuộc tính method? Trong lập trình, chúng ta thường gặp các thuật ngữ hàm (function – có trả về dữ liệu), thủ tục (procedure – chỉ thực thi một số công việc), phương thức (method là hàm hoặc thủ tục gắn với class). Các khái niệm này rất cần thiết do mấy lý do: Thứ nhất nó giúp mô đun hóa trong ứng dụng, xây dựng các khối code không phải lặp đi lặp lại, giảm kích thước ứng dụng, dễ quản lý mã nguồn hơn. Thứ hai, nó giúp định nghĩa cấu trúc logic của ứng dụng. 10 kinh nghiệm khi làm việc với các dự án lớn viết bằng Vue.js API Authentication trong Laravel-Vue SPA sử dụng Jwt-auth Như vậy, với việc sử dụng các method trong Vue.js giúp tạo ra các function Javascript (trong Javascript hàm và thủ tục là một và là function). Trong Vue instance có thể khai báo nhiều các phương thức trong thuộc tính methods. Với cú pháp {{ }} cho phép một biểu thức Javascript bên trong nhưng chỉ được duy nhất một câu lệnh đơn và nếu có quá nhiều logic nằm dải rác khắp ứng dụng khiến cho việc duy trì mã nguồn là rất khó khăn. Phương thức trong thuộc tính methods của thực thể Vue có thể đưa vào các logic hoặc những công việc như lấy dữ liệu từ một nguồn ở xa… Ví dụ về việc sử dụng biểu thức Javascript <!DOCTYPE html> < html > < head > < title > Ví dụ về phương thức trong Vue.js - allaravel.com </ title > < link rel = " stylesheet " href = " https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css "...

Function-Score trong Elasticsearch
Bài viết được sự cho phép của tác giả Nguyễn Hữu Đồng function_score Khi search trong elasticsearch, đôi khi chúng ta mong muốn sẽ chấm điểm dựa trên những điều kiện đã đặt ra để lấy ra một danh kết quả chính xác. Ví dụ khi bạn search những người có tên có chứa cụm từ “ste” và mong muốn nếu first_name tên đó là “steph ” thì + thêm 3 điểm hoặc nếu first_name của tên đó là “stephen” thì + 5 điểm, …vv, lúc này bạn chắc hẳn sẽ dùng đến function-score để custom hàm chấm điểm. GET /_search { "query": { "function_score": { "query": { "match_all": {} }, "boost": "5", "functions": [ { "filter": { "match": { "test": "bar" } }, "random_score": {}, "weight": 23 }, { "filter": { "match": { "test": "cat" } }, "weight": 42 } ], "max_boost": 42, "score_mode": "max", "boost_mode": "multiply", "min_score" : 42 } } } Như hình trên m ỗi function-score là một kiểu “query”, chỉ là nó hơi đặc biệt, trong function-score, field “query” quy định điều kiện để mỗi index được chấm điểm như đoạn code trên. "query": { "match_all": {} } Điều này có nghĩa là mọi index sẽ được chấm điểm dựa, hoặc nếu như đoạn code đưới thì nếu index đáp ứng điều kiện là first_name hoặc last_name là “do” thì index sẽ được chấm điểm. Function-Score sẽ kết hợp điểm của query và điểm của function. "query": { "bool":{ "should":[ { "match":{ "first_name":"do" } }, { "match":{ "last_name":"do" } } ] } } Trong mỗi “function-score” những thông số như score_mode : định nghĩa các kết quả điểm được tạo ra bằng query và điểm tạo ra trong function (function trong function-scrore) sẽ được kết hợp như thế nào, có 6 kiểu nhân, cộng ,...

Mình đã học kotlin như thế nào?: Phần 1: từ 1 dev IOS nhảy sang dev android
Bài viết được sự cho phép của tác giả Lê Xuân Quỳnh Mình làm việc với IOS, cụ thể là dev objective-c và swift cũng được một thời gian, nên các kiến thức về IOS cũng kha khá. Một ngày đẹp trời giữa bão COVID-19, ở nhà làm việc remote, nên có nhiều thời gian để ngồi đọc và ngâm cứu các công nghệ khác hơn, mình quyết định “giao lưu” với Android 1 chút, cụ thể là Kotlin. Lý do chọn Kotlin là vì nó hao hao giống Swift, nên việc tiếp cận có vẻ dễ dàng hơn khi dùng java. Tất nhiên java vẫn được, mình cũng đã code nó trước đây. Có nên học Kotlin? Phát triển lập trình Android cùng Kotlin Đầu tiên là thằng bạn nhờ dev hộ 1 con App trên mobile, và mình tự thiết kế giao diện bằng figma như sau: Trông khá “sexy” với 1 người không chuyên designer đúng không App thì có cả IOS và android, và sau đó mình quyết định làm cho android trước. Vì cơ bản mình muốn thử sức với cái “chưa biết gì”, như tờ giấy trắng trước. Cuộc sống mà, tính mình lại thích cái mới mẻ. Vậy bên android công nghệ cái gì là “ngon” nhất bây giờ? Sau một hồi nghiên cứu, google, mình phát hiện ra “Ồ, ông google này chăm sóc dev kỹ thế ” Cụ thể như sau: Google hỗ trợ MVVM tận mồm luôn, khác với bên IOS thì chỉ tận giường thôi. Google viết hẳn ra tài liệu kiến trúc, các lớp base sẵn cho dev để họ happy hơn trong việc coding. đọc thêm tài liệu ở đây: https://developer.android.com/topic/libraries/architecture/viewmodel Mô hình kiến trúc như sau: Nhìn vào hình, ta chuyển thành cấu trúc thư mục...

Top 20 công cụ Hack được Hacker và Chuyên gia bảo mật sử dụng
Bài viết được sự cho phép của tác giả AnonyViet Các Hacker hay chuyên gia bảo mật đều phải có trong tay những công cụ hổ trợ. Các bạn đã nắm được 20 công cụ Hack mà bất cứ ai cũng cần phải có chưa? Trong bài viết này, chúng ta sẽ được khám phá 20 công cụ Hack được Hacker và Chuyên gia bảo mật sử dụng mà bạn cần phải có trong kho vũ khí của mình. Top 20 công cụ bảo mật mà bạn nên có Nmap Scanning là một trong những bước bắt buộc trong mọi cuộc tấn công. Sau khi thu thập thông tin của mục tiêu, bạn cần chuyển sang bước khác là scanning. Nếu bạn quan tâm đến bảo mật thông tin, bạn nên có Nmap trong kho vũ khí của mình. Nmap (viết tắt của Network mapper) là trình quét mạng mạnh nhất. Nó là mã nguồn mở và hoàn toàn miễn phí. Nmap cung cấp cho bạn khả năng thực hiện các kiểu quét mạng khác nhau bên cạnh các khả năng khác nhờ các tập lệnh được cung cấp. Ngoài ra, bạn có thể viết các tập lệnh NSE của riêng mình. Cái hay của NMAP là quét mục tiêu xong là có thể thực thi lệnh tấn công luôn. Metasploit Metasploit là công cụ khai thác được biết đến nhiều nhất trong giới bảo mật. Dự án Metasploit là một dự án bảo mật tích hợp nhiều công cụ hack máy tính cung cấp thông tin về các lỗ hổng bảo mật, hỗ trợ kiểm tra thâm nhập và phát triển chữ ký IDS. Nó là công cụ khai thác mã nguồn mở được phát triển bởi HD Moore. Nếu bạn đang sử dụng bản phân phối Kali Linux...

Những cách thay đổi giá trị fill của SVG khi hover
Bài viết được sự cho phép của tác giả Lưu Bình An File SVG < svg class = " icon " > < path /> </ svg > Thay đổi bằng giá trị fill Cách dễ nhất, 1 dòng css duy nhất .icon :hover { fill : #DA4567 ; } Tuy nhiên cái này chỉ làm được khi chúng ta sử dụng file svg dạng inline , nếu dùng thẻ <img src='duong-dan-file.svg''/> , để tách riêng file svg ra cho nó sạch sẽ file html, cached lại hình này trên trình duyệt, thì coi như chúng ta không thực hiện được cách ở trên. 11 công cụ hữu ích để kiểm tra và tối ưu hóa các file CSS Hoán đổi hai giá trị mà không cần biến phụ trong JavaScript? CSS Filters Với CSS filters chúng ta có trong tại kha khá đồ chơi như trong photoshop để vẽ hoa vẽ lá trên trình duyệt. Filter cũng sẽ được thực hiện sau khi trình duyệt render xong DOM, thực hiện xong bước paint (cái này các bạn phải xem lại critical render path để rõ hơn), nghĩa là nếu ko được hỗ trợ bởi trình duyệt thì cũng ko tới mức bể layout brightness(); contrast(); grayscale(); invert(); opacity(); saturate(); sepia(); hue-rotate(); blur(); drop-shadow(); Chúng ta ko có filter nào để thay đổi cụ thể một giá trị màu, chỉ có hue-rotate để chỉnh nhẹ cái màu đang hiển thị. May mắn là chúng ta có thể kết hợp nhiều giá trị filter cùng một lúc .icon :hover { filter : grayscale ( 100 % ) sepia ( 100 % ) ; } Nếu một trong số các filter ko được hỗ trợ, thì nó nhẹ nhàng cho qua, chứ ko bỏ hết thuộc tính filter. Nếu bạn dùng photoshop...

Kiểu Enum trong C/C++ (Code ví dụ Enumeration trong C/C++)
Bài viết được sự cho phép của tác giả Trần Hữu Cương Kiểu Enum trong C/C++ (Code ví dụ Enumeration trong C/C++) (Xem thêm: Tự học lập trình C, C++ qua code ví dụ ) Enum là gì? Trong lập trình C/C++, Enum hay Enumeration là kiểu dữ liệu cố định, chỉ cho phép biến nhận số số giá trị nhất định nào đó. Các giá trị enum có thể coi là một hằng số. Việc sử dụng enum giúp đảm bảo giá trị các biến chỉ nhận các giá trị mong đợi. Ví dụ: Mình định nghĩa kiểu Enum là dayOfWeek và chỉ nhận các giá trị là ngày trong tuần (từ thứ 2 đến chủ nhật). Mỗi lần có tính toán tới ngày trong tuần thì mình dùng dayOfWeek sẽ giúp tránh các giá trị nằm ngoài khoảng từ thứ hai đến chủ nhât. Kiểu enum trong TypeScript: làm việc như thế nào, sử dụng ra sao 1001 Tips: Con trỏ và hàm (Pointer & Function) trong C++ Tạo Enum trong C/C++ Để tạo enum trong C/C++ ta dùng từ khóa enum với cú pháp sau: enum ten_enum { trang_thai_1: gia_tri_1, trang_thai_2: gia_tri_2,... } Ví dụ: #include<stdio.h> enum dayOfWeek { Mon= 2 , Tue= 3 , Wed= 4 , Thur= 5 , Fri= 6 , Sat= 7 , Sun= 8 } ; int main ( ) { enum dayOfWeek day; day = Wed; printf ( "Wednesday: %d n" ,day ) ; printf ( "All day of week: %d - %d - %d - %d - %d - %d - %d" , Mon, Tue, Wed, Thur, Fri, Sat, Sun ) ; return 0 ; } Kết quả: C++ tuyển dụng nhiều vị trí, lương cao, ứng tuyển ngay! Trường hợp bạn không truyền giá trị cho các trạng thái...

“Luộc bài” đã giúp tôi trở thành 1 QA
Bài viết được sự cho phép của vntesters.com Chia sẻ của bạn Nguyễn Dương Hải về quá trình trở thành một QA chuyên nghiệp. Từ chỗ không biết QA là gì đến yêu nó và gắn bó với nó lúc nào không hay. Nhìn lại bản thân Trước tiên mình xin nói là mình chẳng tự hào gì về chuyện này :D. Nhưng sau 6 năm làm việc như 1 QA, mình muốn thẳng thắng nhìn lại bản thân mình. Rất nhiều người từng hỏi “Sao bạn học CNTT không làm Dev mà làm QA?”. Mình chưa bao giờ dám trả lời lý do thực sự vì sao mình lại chọn nghề này. Và mình thấy bây giờ là lúc thích hợp. "Ở Việt Nam, cơ hội để thực sự làm về Trí tuệ nhân tạo còn quá ít, trong khi những thứ mang hình thù và dáng dấp AI thì quá nhiều" Nhất quỷ nhì ma thứ ba học trò Lúc ở trường đại học, có những nhóm thường hay học theo kiểu chia nhau ra làm bài tập. Tức là mình sẽ làm đồ án của môn này, bạn tập trung làm đồ án của môn kia rồi chuyền tay nhau bài giải. Thầy cô cũng biết chuyện này, nên rất nghiêm trong việc xử phạt những đứa chép bài nhau. Mình nhớ có một môn “Lý thuyết đồ thị”, mình làm bài tập và share cho bạn. Cuối cùng cả 2 bị 0 điểm. Bạn mình copy “hiền” quá :(. Lúc ấy mình không thể fail môn đó được nên phải nói nó confirm với cô rằng nó chép bài mình rồi xin cô. Cuối cùng mình 9.5 nó thì vẫn 0 điểm. Nói chung mình là đồ HÈN! “Luộc bài” cũng cần kỹ năng Lúc mình...