Lập Trình
Duyệt các bài viết được gắn thẻ Lập Trình
1677 bài viết

Các thư viện web animation tốt nhất cho JavaScript
Biểu đồ miêu tả tình trạng web animation hiện nay với các thư viện, frameworks và plugins hay nhất dựa trên tính linh hoạt và hiệu suất hoạt động. Infographic 1: Biểu đồ Web Animation Infographic này được chia thành 3 phần. Phần đầu tiên gồm 1 vài thư viện animation cung cấp tất cả công cụ từ các hàm easing và callbacks đến timing control, có cả animation functions chung. Chúng tôi đã tách riêng các thư viện sử dụng CSS3 transition để các elements sinh động hơn , thay vì dùng các thư viện sử dụng Javascript . Chúng tôi cũng tách các thư viện hướng tới các animations dành cho SVG, WebGL hoặc HTML5 Canvas . Infographic 2: Danh sách các tools Phần thứ 2 tập trung vào nhiều methods khác nhau để các yếu tố UI và các đối tượng khác trong DOM sinh động hơn như animation cuộn, parallax, sprites, 3D transformations, physics engines và transitions. Infographic 3: Các mẹo hiệu suất Infographic cuối chỉ ra vài mẹo cơ bản giúp bạn lựa chọn giữa animation dựa trên CSS hoặc dựa trên Javascript tùy theo yêu cầu của mỗi dự án như các phiên bản của mỗi hệ điều hành, thiết bị… Bài viết tham khảo Giới thiệu bạn 1 số bài viết và ý kiến thú vị có thể giúp bạn đưa ra quyết định chính xác. Myth Busting: CSS Animation vs. JavaScript của Jack Doyle gần đây cho chúng ta cảm nhận chung về hiệu suất của animation dựa trên JavaScript, trong tương quan với các components CSSS được animate trực tiếp. CSS Animations and Transitions Performance: Looking inside the Browser của team Adobe Web Platform giải thích về các quy trình và vấn đề về browser rendering. Bài viết nổi tiếng thứ...

Lập trình IOS: Triển khai MVVM cho prject swift (phần 1)
Bài viết được sự cho phép của tác giả Lê Xuân Quỳnh Hôm nay chúng ta sẽ làm 1 ứng dụng nho nhỏ, hiển thị danh sách các loại động vật, như hình ảnh: Danh sách các loại động vật Đầu tiên là tải source code của tôi tại đây: https://github.com/codetoanbug/MVVMSample Tôi hướng dẫn các bạn tải code về bằng git 1 xíu nhé. Là git command line nha các bạn. Rx-MVVM(1): Cấu trúc project – lib manager Rx-MVVM(2): Cấu trúc project – quản lý thư viện sử dụng trong dự án Đầu tiên là bạn mở terminal và gõ: git clone https://github.com/codetoanbug/MVVMSample.git Sau đó bạn cd vào thư mục code MVVMSample. Mẹo là gõ cd MV, nhấn nút tab trên bàn phím nó cũng ra lệnh như sau: cd MVVMSample Tiếp theo gõ để show toàn bộ branch: git branch -a Bạn sẽ thấy branch master, bai1… Mỗi branch sẽ chứa code của 1 bài. Ở đây ta chỉ quan tâm code bài 1 nên bạn cần chuyển qua code của bài 1 bằng cách gõ như sau: git checkout bai1 Như vậy là bạn đã có code của bài hôm nay rồi đấy. Đơn giản đúng không? Để triển khai mô hình MVVM, chúng ta cần nắm qua mô hình này xem nó hoạt động như thế nào. Hãy tiếp cận 1 cách đơn giản nhất nhé. Mặc định khi bạn tạo 1 project thì Xcode nó tự render các file theo tiêu chuẩn MVC của họ. M là Model, V là View, còn C là Controller. Tuy nhiên, ở đây chúng ta sẽ hay xử lý logic để lấy dữ liệu cho view và hiển thị view chung vào ViewController. Nếu tiếp cận cách đơn thuần như thế, thì cái table của bạn muốn có dữ liệu...

Viết chương trình Xoá các File trùng lặp bằng Python
Bài viết được sự cho phép của tác giả AnonyViet Bạn quá lo âu vì có nhiều file bị trùng lặp trên ổ đĩa khiến chiếm dung lượng bộ nhớ? Nhưng khi tìm kiếm và xoá chúng theo cách thủ công lại quá tẻ nhạt. Tiếp tục Seri python , hôm nay, mình sẽ tiếp tục hướng dẫn các bạn cách xoá các File trùng lặp và giải phóng dung lượng ổ đĩa bằng python. Giải pháp Thay vì tìm kiếm khắp ổ đĩa để xoá các File trùng lặp, bạn có thể tự động hóa quy trình này bằng cách sử dụng script, bằng cách viết một chương trình để tìm kiếm đệ quy trong ổ đĩa và loại bỏ tất cả các File trùng lặp được tìm thấy. Nguyên lý hoạt động Nếu chúng ta đọc toàn bộ File và sau đó so sánh nó với các File còn lại bằng đệ quy thì sẽ mất rất nhiều thời gian, vậy chúng ta phải làm thế nào mới được? Câu trả lời là hashing (băm), với hashing chúng ta có thể tạo ra một chuỗi các chữ cái và số nhất định đóng vai trò là danh tính của một File nhất định và nếu chúng ta tìm thấy bất kỳ File nào khác có cùng danh tính, chúng ta sẽ xóa nó. Có rất nhiều thuật toán hashing khác nhau như: md5 sha1 sha224, sha256, sha384 và sha512 Tại sao phải chọn giữa R hay Python trong khi bạn có thể chọn cả 2? Code xoá các File trùng lặp bằng Python Hashing trong Python khá đơn giản, chúng ta sẽ sử dụng thư viện hashlib được mặc định với thư viện chuẩn của Python. Dưới đây là một ví dụ về cách chúng ta hashing nội...

Các thành phần trong hệ sinh thái .NET
Thật sự thì có rất nhiều bạn trong đó có mình đã và đang làm việc với .NET rất lâu năm và nhất nhiều. Tuy nhiên, khi được hỏi và giải thích cho một ai đó rõ về hệ sinh thái của .NET cũng như những khác biệt giữa .NET Framework , .NET Core và .NET Standard như thế nào thì thật sự mọi người thường bị lúng túng và ú ớ trả lời. Trong bài viết này chúng ta sẽ cùng nhau làm sáng tỏ những mù mờ về những khái niệm này. Qua đó cũng giúp chúng ta có được một kiến thức nền tảng tốt về những gì chúng ta đang sử dụng để có thể phát triển dự án tốt hơn, chất lượng hơn. Hệ sinh thái .NET .NET là nền tảng mã nguồn mở do Microsoft phát triển. Dùng để hỗ trợ cho các developers xây dựng các ứng dụng khác nhau và hỗ trợ ứng dụng chạy đa nền tảng (cross-platform). Các vị trí tuyển dụng .NET hấp dẫn online .NET là một hệ sinh thái do đó nó hỗ trợ developers nhiều ngôn ngữ lập trình (C#, VB, F#,… ), nhiều trình soạn thảo (VS Code, Visual Studio) và hàng loạt các thư viện để xây dựng các ứng dụng như: web, mobile app, desktop app, gaming và IoT. >> Xem thêm: TERAAPP.NET – Ứng dụng viết app mobile Các thành phần kiến trúc chính trong .NET .NET Implementations .NET Runtimes . NET Standard .NET Toolings and Common Infrastructure Trong bài này, chúng ta chỉ tập trung tìm hiểu về .NET Ecosystem. Thế nên, để hiểu rõ hơn code bên trong các ứng dụng .NET hoạt động thế nào chúng ta xem hình minh họa sau đây: Hình 3 Trong Hình 3 ,...

Cài đặt Spring Boot CLI
Bài viết được sự cho phép của tác giả Trần Thị Thu Hà Bài viết sẽ hướng dẫn bạn cách cài đặt Spring Boot CLI phiên bản mới nhất (1.4.0.RELEASE tại thời điểm viết bài) trên Mac OS X (El Captain 10.11.6). Bạn download file này: http://repo.spring.io/release/org/springframework/boot/spring-boot-cli/1.4.0.RELEASE/spring-boot-cli-1.4.0.RELEASE-bin.tar.gz Giao tiếp Client / Server bằng gRPC Button Bootstrap: Cách tạo các loại button trong Bootstrap THIẾT LẬP BIẾN MÔI TRƯỜNG Sau đó giải nén, các tập tin cài đặt sẽ nằm trong thư mục spring-1.4.0.RELEASE . Mở file INSTALL.txt để xem hướng dẫn. Giả sử, sau khi giải nén, thư mục chứa các tập tin cài đặt là: /Users/donhuvy/Downloads/spring-1.4.0.RELEASE thì bạn sẽ thiết lập biến môi trường như sau, gọi text editor Vim, sửa tập tin . bash_profile bằng lệnh: vi ~/.bash_profile Gõ phím i để bắt đầu chế độ insert trong Vim, chèn thêm nội dung sau vào cuối tập tin: export SPRING_HOME=/Users/donhuvy/Downloads/spring-1.4.0.RELEASE export PATH=$PATH:$SPRING_HOME/bin Để lưu tập tin và thoát khỏi Vim, bạn gõ esc , :wq! Để kiểm tra chắc chắn nội dung mới đã ghi vào đúng cách, gõ lệnh: tail -300f ~/.bash_profile Di chuyển đến cuối trang nội dung để thấy các nội dung thêm vào đã có. Để thoát khỏi lệnh tail , gõ control + C . Để biến môi trường kể trên có hiệu lực, có 2 cách: Cách 1: Gõ lệnh: source ~/.bash_profile Cách 2: Đóng tất cả các cửa sổ Terminal, thoát Terminal, sau đó mở lại. CÀI ĐẶT HỖ TRỢ AUTO-COMPLETE (khi gõ lệnh trong Spring Boot CLI) Di chuyển đến thư mục chứa tập tin cài đặt (ở bước này, trên mỗi máy khác nhau có thể sẽ khác nhau): cd /Users/donhuvy/Downloads/spring-1.4.0.RELEASE Kiểm tra chính xác thư mục hiện tại: pwd Kiểm tra các tập tin trong gói cài đặt:...

Cách học một công nghệ mới
Bài viết được sự cho phép của tác giả Tino Phạm Trong bài này, mình xin chia sẽ cách học của mình khi tiếp cận một công nghệ mới. Bạn có thể tham khảo và chia sẽ lại với mình về cách học của bạn. "Khi công nghệ không chỉ dành cho nam giới" - Lea Trúc, Founder của Women Meet Tech 10 bí kíp để startup và FinTech startup thành công đột phá Bước 1 : đọc và làm theo chính xác những gì người khác hướng dẫn. Làm đúng theo từng bước của họ. Đảm bảo chúng ta phải chạy được giống như những gì họ đã làm. Bước 2 : xem lại code đã viết và đặt câu hỏi tại sao? và nó có nghĩa gì? Từ đó đọc lại hướng dẫn và search google để tìm hiểu để giúp bạn hiểu rõ hơn những gì bạn đã làm. Bước 3 : đập hết mọi thứ và làm lại từ đầu. Lúc này bạn cần thống kê lại mình sẽ làm gì? , làm thế nào? . Liệt kê các bước thực hiện. Trong quá trình làm lại bạn sẽ gặp phải lỗi, bạn tìm cách fix nó, từ đó sẽ giúp bạn hiểu rõ hơn vấn đề và giúp bạn có thêm kinh nghiệm với công nghệ mới mà bạn đang học. Bước 4 : Lặp lại bước 1 tới bước 3 với nhiều projects khác nhau hoặc trên cùng một project càng nhiều càng tốt. Bước 5 : Tiến hành hoàn thiện và nâng cập cho những projects mà bạn đã thực tập (Refactor, optimize, improve code,…). Trên đây là các bước mà mình thường sử dụng khi học một công nghệ mới. Hy vọng được các bạn chia sẽ thêm về cách học của...

Khi ta kết hợp MotionLayout và ShapeOfView…
Tác giả: florent champigny Bằng cách sử dụng MotionLayout, bạn có thể đưa ra một cách thiết kế hoàn toàn khác biệt và linh hoạt cho ứng dụng của mình. Quên đi màn hình tĩnh không có bất kỳ animation nào, và hãy thêm một số chuyển động nào! MotionLayout MotionLayout là một class mới có sẵn trong thư viện ConstraintLayout 2.0 để giúp các lập trình viên Android quản lý animation của chuyển động và widget trong ứng dụng. Có thể định nghĩa các thay đổi từ layout xml. Chúng ta xác định một chuyển động: một Swipe trên nút màu đỏ, và một giá trị khởi đầu: nằm bên phải của nút đó. Sau đó, chúng ta cần xác định các ràng buộc ở vị trí điểm đầu và các ràng buộc ở vị trí điểm cuối. MotionLayout sẽ tự động tính toán chuyển động và xử lý các sự kiện và animation: ayout description (xml/scene_06) MotionLayout thực sự đang ở giai đoạn alpha, nhưng bạn có thể import vào để sử dụng trong gradle như sau: implementation ' androidx.constraintlayout:constraintlayout:2.0.0-alpha2 ' ShapeOfView ShapeOfView là thư viện UI dành cho Android hiện có trên Github, có thể thay đổi hình dạng của view. Ví dụ: bạn có thể thêm một số RoundRects, Arcs hoặc diagonals vào layout. Ví dụ: có thể tạo hiệu ứng cho view, tôi có thể tạo hiệu ứng động cho phần dưới cùng bên trái của RoundRectShape này: ShapeOfView đã đư ợc animated Bạn có thể import vào để sử dụng trong gradle như sau: implementation 'com.github.florent37:shapeofview:1.4.4' MotionLayout + ShapeOfViewanimated Hãy thiết lập lại screen dưới đây: Layout này chứa 3 view: 1) Một RecyclerView 2) Một ArcView , từ ShapeOfView, có chứa một ImageView (Tháp Eiffel) 3) Một TextView : “I Love Paris” Tôi...

Inversion of Control nguyên lý của các nguyên lý
Bài viết được sự cho phép của tác giả Kien Dang Chung 1. Nguyên lý Inversion of Control là gì? Trước khi đến với định nghĩa Inversion of Control là gì? bạn hãy cùng tôi làm vài cốc trà đá chém gió tí. Trong ghế nhà trường có lẽ ai cũng sợ nhất môn Triết học bởi mấy lý do, khó hiểu (trìu tượng), nhiều định nghĩa cần học thuộc. Thế nhưng Triết học lại là khoa học của mọi khoa học bởi nó trìu tượng ở một tầng cao nhất. Bản thân tôi cũng đã quên tất cả những gì học được (nói đúng hơn là thuộc được) trong Triết học ngay sau khi thi xong môn này, thế nhưng sau một thời gian khá dài bộn bề lo toan với công việc và cuộc sống, những khái niệm, quy luật ngày xưa thuộc trong Triết học tự nhiên cứ lẩn vẩn trong đầu và rồi ngẫm lại, đúng thật! Điểm lại chút về 2 nguyên lý, 3 quy luật và 6 cặp phạm trù trong Triết học , có thể trong phạm vi hiểu biết của mình và những trải nghiệm đến hiện tại nó đã làm nên tất cả những gì đang diễn ra xung quanh ta. Sở dĩ viết vài câu chuyện phiếm ở đây hầu chuyện các bạn vì các khái niệm mà chúng ta bàn thảo trong bài viết này khá là trìu tượng, nó cũng như triết học là nguyên lý của các nguyên lý. Một trong những quy luật mà tôi hay chiêm nghiệm nhất là quy luật lượng chất: Những thay đổi đơn thuần về lượng, đến một mức độ nhất định, sẽ chuyển hóa thành những sự khác nhau về chất. Friedrich Engels Bạn học một cái gì đó, hoặc...

Hỏi khó – Java Clone hoạt động như thế nào?
Bài viết được sự cho phép của tác giả Kiên Nguyễn Java Clone là một trong 5 cách khởi tạo mới một Object. Tại sao chúng ta lại cần nó?. Hãy cùng tìm hiểu qua bài viết dưới đây: 1. Từ câu chuyện của reference variable. Không cần quá phức tạp, ngay từ ban đầu, ta sẽ tự đặt câu hỏi rằng: “Nếu muốn sao chép một Object A, chẳng phải cứ gán A = B là được sao?, cần gì tới Java Clone” 10 lý do cho thấy tại sao bạn nên theo học ngôn ngữ lập trình Java 10 tips để trở thành Java Developer xịn hơn Xem thêm các việc làm Java lương cao trên Station D Rất tiếc, câu trả lời là không. Đối với C++, phép gán này sẽ cho ra một Object mới, hoàn toàn độc lập với Object cũ. Nhưng Java thì không làm được, nếu sử dụng phép toán ==, java sẽ tạo ra một biến tham chiếu (reference variable) -> không tạo ra một object mới. Thực chất, trường hợp sử dụng Operator equal hay toán tử New, Java đều trỏ tới cùng một địa chỉ trên memory. Object được tạo ra có thể bị thay đổi nếu object mà nó reference trước đó thay đổi. Để dễ hiểu hơn, ta cùng xem xét ví dụ dưới đây: import java.io.*; // Class Test, nơi chưa object ta muốn clone. class Test { int x, y; Test() { x = 10; y = 20; } } // Main Class class Main { public static void main(String[] args) { // Tạo object ob1 Test ob1 = new Test(); System.out.println(ob1.x + " " + ob1.y); // Tạo mới reference variable cho ob2 // Thực chất Object ob2 trỏ tới cùng một địa chỉ với...

Viết blog sử dụng markdown, pelican, github pages
Bài viết được sự cho phép của tác giả Nguyễn Việt Hưng I. Markdown Markdown được nói trong bài này là cú pháp để phục vụ việc chuyển text thành HTML. Tức là khi viết bằng cú pháp markdown, đưa qua 1 chương trình xử lý, nó sẽ cho ra kết quả là HTML. 25 blogger IT nổi tiếng mà dân lập trình ai cũng phải biết Câu chuyện về cái comment tại một blog nọ Một số cú pháp hay dùng: Headers # H1 ## H2 ### H3 #### H4 ##### H5 ###### H6 Kết quả: (lưu ý, xem source html của kết quả để biết chính xác, việc trình bày có thể bị ảnh hưởng bới template của blog) H1 H2 H3 H4 H5 H6 Định dạng chữ: Chữ nghiêng: *nghiêng* hoặc _nghiêng_. (*: asterik, _: underscore) Chữ đậm: **đậm** hoặc __đậm__. Nghiêng đậm: **_nghiêng đậm_** hoặc *__nghiêng đậm__* Gạch ngang chữ: <s>gạch ngang</s> Kết quả: Chữ nghiêng: nghiêng hoặc nghiêng . (*: asterik, _: underscore) Chữ đậm: đậm hoặc đậm . Nghiêng đậm: nghiêng đậm hoặc nghiêng đậm Gạch ngang chữ: gạch ngang Link [I'm an inline-style link](http://fml.vn) [I'm an inline-style link with title](http://fml.vn "FML Academy") [I'm a reference-style link][Arbitrary case-insensitive reference text] [I'm a relative reference to a repository file](../blob/master/LICENSE) [You can use numbers for reference-style link definitions][1] Or leave it empty and use the [link text itself]. [arbitrary case-insensitive reference text]: http://fml.vn [1]: http://fml.vn [link text itself]:http://fml.vn Kết quả: I’m an inline-style link I’m an inline-style link with title I’m a reference-style link I’m a relative reference to a repository file You can use numbers for reference-style link definitions Or leave it empty and use the link text itself. Image Here's our logo (hover to see the title text): Inline-style: 
Xây dựng nội dung trang HTML
Bài viết được sự cho phép của tác giả Kien Dang Chung Nội dung là phần quan trọng nhất của trang HTML, đây chính là phần người dùng có thể đọc được khi xem các trang web trên trình duyệt. Trong nội dung trang HTML có thể có rất nhiều các thành phần như các tiêu đề, các đoạn nội dung, hình ảnh, liên kết, các bảng thông tin… Trước khi bắt đầu tìm hiểu kiến thức các thành phần của nội dung trang HTML bạn cần nắm được cấu trúc chung của một trang HTML , vì trong bài viết này chúng ta sẽ xoay quanh nội dung nằm trong thẻ . Các thẻ HTML được giới thiệu trong bài viết này phần lớn đã có từ các phiên bản trước HTML5, chúng thường xuyên được sử dụng vì vậy bạn cần ghi nhớ chúng. Dùng Emmet để Code HTML/CSS nhanh hơn HTML cơ bản toàn tập cho người mới phần 1 1. Tiêu đề trong HTML Tiêu đề là những dòng văn bản đầu tiên bạn đọc được, nó rất quan trọng trong nội dung trang web. Một tin tức có được người dùng nhấp vào xem chi tiết hay không là ở tiêu đề. Trong HTML tiêu đề được chia thành 6 cấp độ: h1, h2, h3, h4, h5, h6. Tiêu đề h1 sẽ là quan trọng nhất và mức độ quan trọng sẽ giảm dần cho đến h6. [jsfiddle url=” https://jsfiddle.net/allaravel/r4s1jvxf/ ” height=”300px” include=”result,html,js” font-color=”39464E” menu-background-color=”FFFFFF” code-background-color=”f3f5f6″ accent-color=”1C90F3″] Mỗi thẻ tiêu đề có một kích thước mặc định khác nhau, thẻ h1 có kích thước chữ là lớn nhất và h6 là nhỏ nhất. Bạn có thể thay đổi kích thước chữ mặc định này bằng cách thiết lập thuộc tính CSS font-size thông qua thuộc...
![Tại sao nên dùng [SerializeField] thay vì biến public?](https://img-cdn.stationd.blog/w800-h600/featured/blog1-2-218x150_20250424065742_6d269073.jpg)
Tại sao nên dùng [SerializeField] thay vì biến public?
Cách đây độ hơn một năm, mình có viết một bài giải thích về thẻ [ SerializeField ] trong Unity C# hoạt động như thế nào. Trong bài đó, mình có nói rằng các trường dữ liệu public có thể là những mối nguy tiềm ẩn trong chương trình của bạn. Với các lập trình viên có kinh nghiệm, việc này khá là hiển nhiên, như kiểu trái đất quay quanh mặt trời vậy. Tuy nhiên, với các bạn newbie hoặc các bạn tự học lập trình tại nhà, nguy cơ đến từ các biến public có vẻ chẳng đáng lo ngại lắm. Trong bài viết này mình sẽ giải thích kỹ hơn quan điểm của mình, và bạn sẽ thấy vì sao nhiều lập trình viên khác cũng có chung quan điểm đó. “Em thấy hai cách chả khác quái gì nhau cả.” Nhìn qua thì việc dùng một biến public và một biến private + [SerializeField] có vẻ không khác gì nhau. Cả hai cách đều cho phép mọi người trong project của bạn chỉnh sửa trực tiếp giá trị của biến trong Unity Inspector. Nghĩa là dù bạn làm như thế này: public class Character : MonoBehaviour { [SerializeField] private int healthPoint; } … hay như thế này: public class Character : MonoBehaviour { public int healthPoint; // Đừng làm theo, mình khuyên thật } … thì ai cũng có thể mở script Character ra và sửa giá trị HP của nhân vật đó, ví dụ như từ 5 lên 10. Sự khác biệt có vẻ không rõ ràng lắm? Giờ thì hãy nhìn theo hướng của lập trình viên. Tưởng tượng một ngày thằng Dũng ngồi cạnh bạn sẽ dùng đám code trên cho tính năng mà nó đang xử lý. Nếu bạn dùng biến public,...