Lập Trình
Tổng hợp các thông tin, kinh nghiệm hữu ích và mới nhất về lập trình cần học gì, phỏng vấn, mức lương trong ngành IT như thế nào, tìm hiểu ngay!
398 bài viết

Cách tôi nhân rộng một dự án trị giá 86 triệu đô la chỉ với 57 dòng code!
Tác giả: Tait Brown Cảnh sát Victoria là cơ quan thực thi pháp luật chính của Victoria, Úc. Với hơn 16.000 xe bị mất cắp ở Victoria trong năm qua – tổn thất khoảng 170 triệu đô – cơ quan này đang thử nghiệm nhiều giải pháp kỹ thuật nhằm giải quyết nạn trộm xe. Họ gọi open source project – hệ thống này là BlueNet. Để giúp ngăn chặn việc bán xe ăn cắp, đã có một dịch vụ dựa trên web tên VicRoads để kiểm tra tình trạng đăng ký xe. Bộ cũng đã đầu tư vào một máy quét tấm giấy cố định – một camera cố định quét qua lưu lượng để tự động xác định các xe bị đánh cắp. Đừng hỏi tôi tại sao, nhưng một buổi chiều tôi đã có mong muốn mẫu thử nghiệm một chiếc máy quét nhãn đĩa xe gắn máy sẽ tự động thông báo cho bạn nếu một chiếc xe đã bị đánh cắp hoặc đã không đăng ký. Hiểu rằng những thành phần cá nhân này tồn tại, tôi tự hỏi làm thế nào để kết hợp chúng với nhau khó khăn đến thế nào. Cảnh sát Victoria vừa mới tung ra bản thử nghiệm về một phần mềm tương tự, và chi phí phát hành ước tính đã ở đâu đó trong khoảng 86.000.000 đô. Một người bình luận đã chỉ ra rằng với 86 triệu đô để trang bị cho 220 chiếc xe thì sẽ tính ra trung bình 390,909 đô mỗi chiếc . Chắc chắn chúng ta có thể làm tốt hơn một chút. Các tiêu chí làm nên thành công Trước khi bắt đầu, tôi lên kế hoạch về yêu cầu chính cho thiết kế sản phẩm: #1: Việc xử lý hình ảnh...

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. 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: Ghi chú : Có...

24 code ES6 tân tiến để khắc phục các lỗi thực hành JavaScript
Tôi đích thân tự chọn vài trích đoạn những code hữu ích nhất từ trang ‘ 30secondsofcode ’, vốn đã là 1 nguồn tài nguyên tuyệt vời. Và bạn cũng đừng ngại chi mà hãy ủng hộ nó hết mình nhé. Trong đề tài này tôi đã cố sắp xếp dựa theo cách sử dụng các thực hành của chúng. Và trả lời các câu hỏi thường gặp mà bạn có thể phải đối mặt trong dự án của mình: Học Javascript 1: Syntax Parser, Execution Context, Lexical Environment là gì Những thứ kỳ quặc của Javascript? 1. Cách để ẩn hết các yếu tố quy định? const hide = (...el) => [...el].forEach(e => (e.style.display = 'none')); // Example hide(document.querySelectorAll('img')); // Hides all <img> elements on the page 2. Làm thế nào để kiểm tra nếu yếu tố đó có lớp quy định? const hasClass = (el, className) => el.classList.contains(className); // Example hasClass(document.querySelector('p.special'), 'special'); // true 3. Cách để chuyển đổi 1 lớp cho 1 yếu tố? const toggleClass = (el, className) => el.classList.toggle(className); // Example toggleClass(document.querySelector('p.special'), 'special'); // The paragraph will not have the 'special' class anymore 4. Làm thế nào để lấy vị trí cuộn của trang hiện tại? const getScrollPosition = (el = window) => ({ x: el.pageXOffset !== undefined ? el.pageXOffset : el.scrollLeft, y: el.pageYOffset !== undefined ? el.pageYOffset : el.scrollTop }); // Example getScrollPosition(); // {x: 0, y: 200} 5. Cách để cuộn-mượt hơn tới đầu trang? const scrollToTop = () => { const c = document.documentElement.scrollTop || document.body.scrollTop; if (c > 0) { window.requestAnimationFrame(scrollToTop); window.scrollTo(0, c - c / 8); } }; // Example scrollToTop(); 6. Làm thế nào để kiểm tra nếu yếu tố ‘parent’ đang mang yếu tố ‘child’? const elementContains = (parent, child) => parent !== child && parent.contains(child); // Examples...

Hướng dẫn cấu hình Xdebug bằng PHPStorm cho Docker
Biên dịch: Trần Thanh Dân Docker đã làm thay đổi đáng kể cách chúng ta phát triển các ứng dụng. Docker thực sự dễ dàng cho bắt kỳ lập trình viên nào có thể chạy các ứng dụng phức tạp chỉ với 1 dòng lệnh mà không cần phải lo lắng về các thông tin chi tiết khác. Những lợi ích này rất tiện lợi khi sử dụng làm việc cùng team hoặc enterprise context. Tôi vẫn nhớ phải mất đến 3 ngày đầu tiên khi tham gia vào công ty hiện tại để cấu hình project và tất cả các thư viện,công cụ liên quan khác. Docker có thể giúp việc này dễ hơn, nhanh hơn và có tính nhất quán. Việc duy trì các công cụ của Docker khá phức tạp, ngoài ra một số thứ có thể sẽ dễ dàng hơn khi chạy ứng dụng trong môi trường phát triển ứng dụng bình thường như là debugging ứng dụng của bạn từ trình soạn thảo (IDE). Khi sử dụng docker thì cần một số cấu hình bổ sung. Và trong trường hợp này là Xdebug, đây không phải là một nhiệm vụ dễ dàng. Tôi không tìm thấy bất kỳ hướng dẫn nào từ lúc bắt đầu cho đến khi kết thúc. Đó là lý do tại sao tôi viết bài này. Nó sẽ hướng dẫn bạn từng bước thông qua quá trình cài đặt và cấu hình Xdebug bằng PHPStorm với một ứng dụng Dockerized Symfony 4. Chuẩn bị Chúng ta sẽ thực hiện nó trên một máy tính Ubuntu 18.04, PHPStorm 2018.1.4 và các phiên bản mới nhất của Docker, Docker Compose (Hướng dẫn này có thể không đúng khi thực hiện trên các hệ điều hành khác). Bạn cần có kiến thức cơ bản...

Những điểm mới của Java 8 (phần 3: Streams API – tiếp)
Bài viết được sự cho phép của smartjob.vn Streams API trong Java 8 là một bước tiến lớn của ngôn ngữ lập trình Java và liên quan đến nhiều khía cạnh khác nhau, nên chúng tôi cần kéo dài thêm chủ đề này. Nếu bạn là lập trình viên C# trên nền .NET framework vào năm 2008, có thể bạn từng háo hức tìm hiểu LINQ. Từ năm 2014 trở về sau, lập trình viên Java cũng được tận hưởng cảm giác tương tự với Java Streams API. Tôi đã từng rất say mê C#, trong ký ức xưa cũ, tôi tìm tên những nhân viên có chứa từ “Văn” sử dụng cú pháp LINQ: string[] employeeList = {"Nguyễn Văn Còn", "Phạm Văn Đoan", "Nguyễn Văn Minh", "Đoàn Minh Huệ"}; List filteredNames = employeeList.Where(c => c.Contains("Văn")).ToList(); Giờ đây với Java 8 Streams API: string[] employeeList = {"Nguyễn Văn Còn", "Phạm Văn Đoan", "Nguyễn Văn Minh", "Đoàn Minh Huệ"}; List filteredNames = employeeList.Where(c => c.Contains("Văn")).ToList(); Sự linh hoạt, hữu dụng của Streams API thể hiện ở số lượng “pattern” rất đa dạng. “pattern” tạm hiểu là cách dùng, cách thức tổ hợp, phối hợp các phương thức để mang đến kết quả mong muốn. Phần nội dung này để trình bày thêm về các “pattern”. Có nhiều cách để khởi tạo dòng nước (stream): // Khởi tạo dòng (stream) từ mảng (array). Arrays.stream(stringArray); // Khởi tạo dòng số nguyên (stream of integer numbers) từ khoảng giá trị. IntStream.range(9, 42); // Khởi tạo dòng (stream) từ List<T> employeeList.stream(); // Khởi tạo dòng nước (stream) từ tập hợp các file. Files.walks(); // Khởi tạo dòng nước (stream) từ Spliterator<T> - Một interface mới trong bộ Collections. java.util.Spliterator() // Khởi tạo dòng (stream) từ tập hợp hữu hạn giá trị. Streams.of("Nguyễn Văn Còn", "Đoàn...

Date & Time trong Python
Bài viết được sự cho phép của tác giả Nguyễn Chí Thức Với Python, bạn có thể dễ dàng thu được Date và Time hiện tại. Chương này sẽ giới thiệu một số phương thức được phổ biến trong khi làm việc với Date và Time bởi sử dụng Python . Lấy Time hiện tại trong Python Để lấy Time hiện tại, bạn sử dụng hàm tiền định nghĩa localtime(). Hàm localtime() này nhận một tham số là time.time(). Ở đây, time là module, time() là một hàm mà trả về system time hiện tại được biểu diễn dưới dạng số tick (số tích tắc) từ 12:00 am, 1/1/1970. Về cơ bản, tick là một số thực. import time; localtime = time.localtime(time.time()) print "Thoi gian hien tai la :" , localtime Kết quả là: Thoi gian hien tai la : time.struct_time(tm_year=2015, tm_mon=11, tm_mday=29, tm_hour=19, tm_min=16, tm_sec=54, tm_wday=6, tm_yday=333, tm_isdst=0) Dưới đây là phần giải thích: Time được trả về là một cấu trúc gồm 9 thuộc tính. Như trong bảng sau: Thuộc tính Miêu tả tm_year Trả về năm hiện tại (ví dụ: 2015) tm_mon Trả về tháng hiện tại (1-12) tm_mday Trả về ngày hiện tại (1-31) tm_hour Trả về giờ hiện tại (0-23) tm_min Trả về phút hiện tại (0-59) tm_sec Trả về giây hiện tại (0-61 với 60 và 61 là các dây nhuận) tm_wday Trả về ngày trong tuần (0-6 với 0 là Monday) tm_yday Trả về ngày trong năm (1-366 kể cả năm nhuận) tm_isdst Trả về -1, 0 hoặc 1 tức là có xác định DST không Lấy Time đã được định dạng trong Python Bạn có thể định dạng bất kỳ time nào theo yêu cầu của bạn, nhưng phương thức đơn giản nhất là asctime(). Đây là một hàm đã được định...

Triển khai RPC đơn giản trong java
Bài viết được sự cho phép của tác giả Trần Văn Dem Gần đây mọi người hay so sánh REST với RPC nên chọn công nghệ nào để truyền tải dữ liệu qua các server. Với REST chúng ta có thể tìm thấy rất nhiều bài hướng dẫn trên internet. Các bài về tìm hiểu cơ chế chạy, cách truyền dữ liệu thông qua body,… Những bài viết đó khiến chúng ta quá quen thuộc với REST và nó không còn là hộp đen nữa. Trái ngược với điều trên thì RPC lại không nhiều bài viết hướng dẫn mọi người implement, mọi người thường tìm thấy cách sử dụng của một số framework như gRPC, thrift,… và các bài so sánh hiệu năng viết RPC nhanh hơn REST và thích hợp với truyền tải thông tin liên server hơn REST. Tại đây tôi có 1 implement nhỏ đơn giản về RPC hy vọng thông qua bài này mọi người sẽ không còn cảm thấy lạ với loại hình này và có thể giải thích được tại sao nó lại thích hợp giữa các server. Transport Cũng như các hệ thống client-server khác để giao tiếp giữa client và server chúng ta cần một network protocol . Các framework về RPC nổi tiếng họ dùng tầng transport sau: gRPC sử dụng http2 truyền tải dũ liệu dữa client – server . Với Java thì họ dùng netty để dựng server http2. Vì Netty là một Non Blocking IO Framework thrift sử dụng http1.1 truyền tải dữ liệu giữa client-server Trong lúc đi làm tôi thường thấy mọi người hay so sánh giữa http và rpc . Hai khái niệm này không thể so sánh với nhau được vì nó thuộc 2 phạm trù khác nhau. Hy vọng sau bài viết...

Các hàm xử lý chuỗi thường dùng trong PHP
Bài viết được sự cho phép của tác giả Mai Đông Giang Cắt hay nối chuỗi trong PHP, kiểm tra từ tồn tại trong một chuỗi trong PHP. Hay như đếm số ký tự trong một chuỗi bằng PHP, độ dài của chuỗi,…. Có rất nhiều thao tác với chuỗi trong PHP chúng ta sẽ gặp thường xuyên trong lập trình. Bài này mình xin được chia sẻ với các bạn về một số hàm xử lý chuỗi thường dùng trong PHP. Trước hết, chúng ta xem qua nguyên tắc dùng chuỗi trong php: Nếu chuỗi được đặt trong dấu nháy kép “” thì các ký tự nháy kép ” bên trong chuỗi phải thêm dấu gạch chéo đằng trước nó. Trước hết, chúng ta xem qua nguyên tắc dùng chuỗi trong php: Nếu chuỗi được đặt trong dấu nháy kép “” thì các ký tự nháy kép ” bên trong chuỗi phải thêm dấu gạch chéo đằng trước nó. echo "Phân tích câu tục ngữ "Uống nước nhớ nguồn" "; Nếu chuỗi được đặt trong dấu nháy kép “” thì trong chuỗi ta có thể truyền biến mà không cần dùng phép nối chuỗi. $foo = 100; echo "Số foo có giá trị là $foo"; Nếu chuỗi được đặt trong dấu nháy đơn ” thì các ký tự nháy đơn ‘ bên trong chuỗi phải thêm dấu gạch chéo đằng trước nó. Thường dùng với câu chữ trong tiếng Anh. echo 'I'm fine'; Bây giờ chúng ta đến với các hàm xử lý chuỗi hay dùng: addcslashes($str, $char_list) Hàm này có tác dụng chèn vào trước các ký tự trong chuỗi $str với các ký tự được liệt kê ở $char_list echo addcslashes(" PHP là ngôn ngữ lập trình Web", 'g'); // output: PHP là ngôn ngữ lập trình...

Format (Làm đẹp) code php trong VS Code
Bài viết được sự cho phép của tác giả Phạm Bình Chào các bạn, Đây là bài viết tiếp theo của bài Code PHP chuẩn convention với PHP CodeSniffer . Trong bài này, mình sẽ hướng dẫn các bạn auto check lỗi và format code PHP trong Vs Code – một trong những code editor được yêu thích nhất hiện nay. Lưu ý, để hiểu bài viết này hơn, thì bạn cần đảm bảo các yêu cầu sau: Máy tính đã cài composer ở dạng global. Máy tính đã cài PHP CodeSniffer ở dạng global. Bạn hiểu ý nghĩa của 2 công cụ phpcs và phpcbf. Bạn hiểu ý nghĩa của file cấu hình phpcs.xml trong dự án. Nếu không, hãy đọc phần trước của bài viết này , tại đó mình có cung cấp các nội dung hữu ích về các yêu cầu trên. 10 Frameworks tốt nhất hiện nay cho PHP 4 lý do để VS Code là Text Editor ưa thích của mọi lập trình viên I. GIỚI THIỆU VỀ TÍNH NĂNG FORMAT CODE TRONG VS CODE Giống như nhiều editor khác, VS Code có tính năng tự động format code của bạn cho chuẩn hơn. Hình ảnh mượn tạm từ một nguồn khác phambinh.net Phím tắt để format code trên VS Code tương ứng với từng hệ điều hành như sau: Trên Windows: Shift + Alt + F. Trên Mac: Shift + Option + F. Trên Linux: Ctrl + Shift + I. Tuy nhiên, mặc định thì VS Code không tích hợp sẵn việc format code PHP , mà chúng ta phải cài thêm từ extension bên ngoài, và mình sẽ hướng dẫn các bạn cài ở ngay mục phía dưới đây. II. FORMAT CODE PHP TRONG VS CODE VỚI PHP SNIFFER & BEAUTIFIER Mình đã...

Functional Interface là gì? Functional Interface API trong Java 8
Bài viết được sự cho phép của tác giả Trần Hữu Cương 1. Functional Interface là gì? Functional Interface là interface có duy nhất 1 method trừu tượng (có thể có thêm các method không trừu tượng bằng từ khóa default trong Java 8) Ví dụ: Comparable là 1 Functional Interface với method trừu tượng duy nhất compareTo ; Runnable là 1 Functional Interface với method trừu tượng duy nhất run … Về annotation @FunctionalInterface: nó được dùng ở trước mỗi interface để khai báo đây là 1 functional interface. @FunctionalInterface public interface Runnable { public abstract void run ( ) ; } Việc dùng annotation @FunctionalInterface là không bắt buộc nhưng nó giúp đảm bảo cho quá trình compile. Ví dụ bạn khai báo @FunctionalInterface nhưng trong interface lại có nhiều hơn 2 method trừu tượng thì nó sẽ báo lỗi. Giới thiệu về GraphQL. Cách giải quyết những hạn chế của RESTful API Refactoring Design Pattern với tính năng mới trong Java 8 2. Functional Interface API trong Java 8 Java 8 xây dựng sẵn một số functional interface và nó được dùng nhiều trong các biểu thức lambda: 2.1. java.util.function.Consumer package java. util . function ; import java. util . Objects ; @FunctionalInterface public interface Consumer<T> { // Phương thức chấp nhận một tham số đầu vào // và không trả về gì cả. void accept ( T t ) ; } consumer thường được dùng với list, stream để xử lý với các phần tử bên trong. Ví dụ: đoạn code dưới đây in ra tất cả các giá trị của 1 list List< String > list = Arrays. asList ( "stack" , "java" , "stackjava.com" ) ; // Sử dụng List.forEach(Consumer) để in ra giá trị của các phần tử trong list list. forEach (...

Vẽ đồ thị trong Python với thư viện Matplotlib
Bài viết được sự cho phép của tác giả Kien Dang Chung Trước khi bắt đầu với câu hỏi Tại sao Matplotlib là một thư viện phổ biến trong Python? chúng ta đến với vài câu nói đúc kết của người xưa mà còn nguyên giá trị đến nay. A picture is worth a thousand words – Một bức tranh hơn ngàn lời nói Ngạn ngữ Anh Như chúng ta đã biết Python được sử dụng nhiều nhất trong lĩnh vực phân tích dữ liệu, mà trong khoa học dữ liệu, việc trực quan hóa thông qua các đồ thị, biểu đồ giúp cho chúng ta hiểu được các mối quan hệ trong dữ liệu dễ dàng hơn rất nhiều. Matplotlib là một thư viện sử dụng để vẽ các đồ thị trong Python, chính vì vậy nó là thư viện cực phổ biến của Python. Bạn thử tưởng tượng một file dữ liệu khoảng 20MB, khi vẽ ra đồ thị từ dữ liệu này bạn sướng như phát điên vì có thể hiểu được ngay 20MB đó nói lên cái gì? Ngày nay, khi Big data đang trở thành thực tế, hàng ngày có quá nhiều dữ liệu, việc trực quan hóa dữ liệu càng trở nên cấp thiết và càng thúc đẩy những thư viện như Matplotlib phát triển hơn. Mục đích của bài hướng dẫn này giúp bạn hiểu được cách vẽ các đồ thị, biểu đồ với thư viện matplotlib và từ đó bạn có thể sử dụng thành thạo nó cho trực quan hóa dữ liệu. Tìm việc làm python lương cao các vị trí cho bạn PyLab – Matplotib Cơ Bản Matplotlib là một thư viện vẽ đồ thị trong Python, cho phép bạn tạo ra các biểu đồ và hình ảnh chất lượng...

Tìm hiểu về lớp Scanner trong ngôn ngữ lập trình Java
Lớp Scanner trong java là một công cụ quan trọng cho việc đọc dữ liệu đầu vào từ người dùng hoặc các nguồn khác như tệp hoặc luồng. Điều này giúp cho việc nhập liệu trở nên dễ dàng và thuận tiện hơn đối với các lập trình viên. Hãy cùng Station D hiểu rõ hơn về lớp Scanner trong Java qua nội dung bài viết. Cách sử dụng Scanner trong Java Để sử dụng lớp Scanner trong Java , bạn cần import gói java.util và sau đó tạo đối tượng Scanner được liên kết với nguồn dữ liệu. Ví dụ: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // Đọc dữ liệu từ bảng điều khiển } } Bạn cũng có thể liên kết đối tượng Scanner với một tệp hoặc luồng: Scanner scanner = new Scanner(new File("input.txt")); // Đọc dữ liệu từ tệp Scanner scanner = new Scanner(new FileInputStream("input.txt")); // Đọc dữ liệu từ FileInputStream Sau khi tạo đối tượng Scanner, bạn có thể sử dụng các phương thức của lớp này để đọc dữ liệu. Phương thức phổ biến nhất là nextInt(), nextDouble() và nextLine(), lần lượt đọc các số nguyên, số thực và chuỗi ký tự từ nguồn. Xem ngay tin tuyển dụng Java tại Station D Ví dụ về việc sử dụng Scanner trong Java Để minh họa cho việc sử dụng lớp Scanner trong Java, hãy cùng xem xét một ví dụ đơn giản về việc nhập vào thông tin của một sinh viên và hiển thị ra màn hình: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Nhập tên sinh viên: "); String name = scanner.nextLine(); System.out.print("Nhập tuổi sinh viên: "); int age = scanner.nextInt();...