Chuyển đến nội dung chính

Bài đăng

Canvas: Vẽ hình đơn giản trong Canvas - Day 2

Trong bài viết này, chúng ta sẽ tìm hiểu cách sẽ một số hình đơn giản trong Canvas: hình chữ nhật, hình tam giác. Hình chữ nhật Ở bài viết trước, chúng ta đã vẽ 1 hình chữ nhật viền đỏ, phía trong tô màu vàng: ctx.fillStyle = '#F0DB4F'; ctx.strokeStyle = 'red'; // draw a rectangle with fill and stroke ctx.fillRect(50, 50, 150, 100); ctx.strokeRect(50, 50, 150, 100); The CanvasRenderingContext2D.fillRect() method of the Canvas 2D API draws a rectangle that is filled according to the current fillStyle. Cú pháp: fillRect(x, y, width, height) fillStyle: Thuộc tính này biểu diễn màu hoặc phong cách để sử dụng bên trong shape. Để thay đổi màu tô, mẫu tô sử dụng thuộc tính fillStyle của context để thiết lập trước khi vẽ strokeStyle: Thuộc tính này biểu diễn màu hoặc phong cách để sử dụng cho các đường xung quanh shape. VD 2: Vẽ 2 hình chữ nhật chồng xéo lên nhau Ở hàm draw(), bạn thay thế bằng đoạn code sau: ctx.strokeStyle = 'red'; ctx.strokeRect(100, 100, 15...

Canvas: Giới thiệu về Canvas - Day 1

Ngày 11-11 là ngày lễ độc thân, người người săn sale. Còn mình thì dùng tí thời gian học làm sửu nhi. Học một tí về Canvas để vẽ trái tim, đu theo mạng xã hội. Lúc đầu mình tưởng dễ nhưng không dễ tí nào. Copy code cũng cần có fundamental nên mình sẽ học 1 tí để tùy biến code có sẵn. HTML5 Canvas là gì? Canvas là một phần tử của HTML5, cho phép thực hiện lập trình kết xuất đồ họa các đối tượng hai chiều trên trang web. Canvas chiếm một khu vực trong trang web với chiều rộng và chiều cao định trước. Sau đó sử dụng Javascript có thể truy cập vào khu vực này để vẽ thông qua một tập các hàm đồ họa tương tự như các API 2D khác. Canvas là một vùng hình chữ nhật trên trang HTML. Theo mặc định, canvas không có đường viền và không có nội dung. Setup project Cơ bản một website sẽ gồm có 3 thành phần chính: HTML, CSS, và javascript. 📁 heart     └──index.html     └──📂 lib         ├──style.css       ...

Optimize Container Image: Tránh copy thủ công file project

Có nhiều cách để optimize container images: Sử dụng Minimal Base Image: mình sẽ viết 1 bài này trong tương lai. Cơ bản là sẽ sử dụng Alpine với Distroless Image. Trước tiên, bạn cần khám phá bên trong một images: https://nhatkyhoctap.blogspot.com/2022/09/docker-kham-pha-qua-trinh-build-1-image.html Multistage image: https://nhatkyhoctap.blogspot.com/2022/09/docker-kham-pha-qua-trinh-build-1-image_14.html Giảm số lượng layer Caching DockerIgnore: https://nhatkyhoctap.blogspot.com/2022/09/docker-kham-pha-qua-trinh-build-1-image_14.html Sử dụng Volume để lưu trữ Applicition Data Trong bài viết này, mình sẽ hướng dẫn các bạn cách copy tự động file *.csproj thay vì phải manually. Một là để tránh việc tạo nhiều layer. Hai là hạn chế sai sót trong quá trình copy. Bạn có thể tham khảo bài viết: https://nhatkyhoctap.blogspot.com/2022/08/docker-tao-docker-file-cho-nhieu.html để lấy source code Bài toán Cấu trúc thư mục Project như sau: 📁 containerize-a-net-app     └──DockerizeMul...

Sử dụng RowVersion giải quyết cho giải pháp Optimistic Locking

Bài viết này là tổng hợp từ các nguồn từ ViBlo, lập trình VB,...  Và 1 chút kinh nghiệm của mình về việc xử lý khóa dữ liệu Ở bài viết hôm nay mình sẽ nói về cơ chế Locking RDBMS trong database sqlserver nhằm ngăn chặn nhiều transaction từ người dùng khác nhau gây ra data conflicts. Có 2 chiến lược lock là: Optimistic Locking và Pesimistic Locking Trong bài viết này mình sẽ sử dụng RowVersion trong Sqlserver để giải quyết cho chiến lược Optimistic Locking . Trước tiên, mình sẽ tìm hiểu về Transaction Basic, Lock type, Kỹ thuật lock. Transaction Basic Một transaction là 1 tập các câu lệnh thực thi tới CSDL, các câu lệnh được thực thi 1 cách tuần tự, nếu có bất kỳ lệnh nào bị lỗi, transaction sẽ dừng lại và roll back DB tất cả các câu lệnh đã thực thi, trả lại DB như lúc start transaction. Transaction có 4 tính chất (ACID): Atomicity (Tính nguyên tử): 1 transaction phải như 1 đơn vị công việc, hoặc tất cả các thay đổi dữ liệu được thực thi, hoặc không thay đổi nào được thực hiện. ...

Các công cụ lập trình thời đại - Phần 2

Trên số trước tôi đã giới thiệu một số bộ công cụ lập trình (CCLT) thời đại của các Nhà sản xuất Borland, Microsoft và IBM. Theo cách phân loại này, tôi xin tiếp tục giới thiệu với các bạn một số Nhà sản xuất khổng lồ khác là Sun, Oracle, MacroMedia và một số công cụ mã nguồn mở. Những cái tên này dường như rất quen thuộc với mọi người, nhưng những công cụ của họ nói riêng và lĩnh vực hoạt động của họ nói chung chưa được biết đến nhiều ở Việt Nam. Cũng xin nói thêm rằng việc gọi một chương trình phần mềm là Công cụ lập trình chỉ có tính tương đối, có thể vừa đúng vừa sai. Một người quen dùng Paint hay Notepad hỗ trợ cho việc lập trình, anh ta có thể gọi đó là CCLT. Nhưng chúng ta hiểu với nhau rằng CCLT là những “thứ” hỗ trợ ta trong quá trình tạo nên sản phẩm phần mềm, từ các khâu thiết kế - lập trình - kiểm thử và thường có sự gắn kết với các ngôn ngữ lập trình (NNLT) cụ thể. Sẽ là không thật chính xác khi nói C++ là một CCLT nhưng với các ngôn ngữ hiện đại ngày nay ngư...

Các bộ công cụ lập trình thời đại

(Trích bài viết cũ hơn 15 năm trước) I. Thảo luận Trước những năm 1990 người ta cho rằng ngôn ngữ lập trình quyết định kết quả lập trình. Chẳng hạn, trong một tình huống cụ thể nào đó, chương trình viết bằng C++ thì tốt hơn Pascal, viết bằng Pascal thì tốt hơn Fortran… Khi các công cụ lập trình còn thô sơ và các yêu cầu phần mềm chưa cao thì nhận định này là khá chính xác. Sau đó người ta cho rằng công nghệ lập trình mới ảnh hưởng lớn nhất đến sản phẩm cuối cùng, sự thống trị trong thập kỷ 90 của lập trình hướng đối tượng và RAD (viết tắt của Rapid Application Development nghĩa là Công cụ phát triển ứng dụng nhanh, thường gọi là lập trình trực quan hay Visual Programming) đã cho thấy tư duy của người lập trình bị ảnh hưởng bởi nền tảng phát triển phần mềm. Không ai phê phán Delphi - phiên bản phát triển từ ngôn ngữ Pascal là kém hơn Java hay Visual C++. Tuy mới có 1/20 thời gian của thế kỷ 21 trôi qua nhưng từ đầu thế kỷ đến nay Công nghệ thông tin đã có những bước phát triển mạnh mẽ t...