Skip to main content

13 posts tagged with "programming"

View All Tags

· One min read
Doko

Trong solidity, các hàm trong interface luôn phải có từ khoá external:

// SPDX-License-Identifier: Apache-2.0
pragma solidity 0.8.4;

import "./Library.sol";

interface IAccountVault {
function deposit(address account, uint256 amount) external;

function withdraw(address account, uint256 amount) external;
}

cũng có thể có thêm view:

function deposit(address account, uint256 amount) external;

nhưng không có internal:

// Sẽ bị compiler báo lỗi
function deposit(address account, uint256 amount) internal;

· 9 min read
Doko

Gần đây khi làm việc với Aegisub và các công cụ karaoke, tôi nhận thấy việc tạo ra các hiệu ứng phức tạp liên quan đến hình học không đơn giản.

Ví dụ nếu muốn tạo hiệu ứng vỡ chữ sang các mảnh tam giác, ta cần đến thuật toán Jarviss hoặc Graham và Delauney. Trong đó:

  • Jarviss hoặc Graham: Dùng để tìm ra convex hull - bao lồi - là hình bao ngoài chứa tất cả các điểm đầu vào.
  • Delauney: Thuật toán chia convex hull thành các mảnh tam giác sao cho không có tam giác nào chồng lên nhau.

· 3 min read

Chuyển Unicode thành ký tự UTF-8.

Trước tiên hãy xem bảng sau, bên trái là khoảng các kí tự unicode, bên phải là dạng nhị phân sau khi convert:

U-00000000 – U-0000007F:    0xxxxxxx
U-00000080 – U-000007FF: 110xxxxx 10xxxxxx
U-00000800 – U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 – U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 – U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 – U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

Và dĩ nhiên là tất cả tính toán đều phải đưa về dạng nhị phân. Các chữ cái x đều phải được điền bằng giá trị tương ứng.

· 8 min read
Doko
info

Đây là bài viết cũ, ở thời điểm hiện tại RxJava 3 đã ra mắt nhưng concept và các khái niệm cơ bản vẫn còn dùng được. Series gốc có thể tìm thấy tại đây.

Cách hoạt động của Observable và chuỗi observer

Chuỗi ObservableObserver rất quan trọng. Cần phải hiểu cách hoạt động của chúng để hiểu được RxJava hoạt động ra sao.

Để bắt đầu, chúng ta lấy một ví dụ đơn giản của đơn giản:

· 3 min read
Doko

Bull là một trong số các thư viện hỗ trợ message queue rất tốt trên NodeJS (bên cạnh RabbitMQ, Kafka, rsmq, agenda,...), và dựa trên Redis để lưu dữ liệu.

Message queue là giải pháp để giải quyết các vấn đề trong công nghệ, thường là backend:

  • Xử lý background.
  • Gửi thông tin theo hàng đợi.
  • Xử lý đồng bộ, concurrency.

Bull là thư viện có thể giúp cả 3 vấn đề trên, và bản thân cũng có 3 thành phần chính:

  • Producer: Thành phần tạo ra các công việc (job) và ném chúng vào queue (hàng đợi).
  • Consumer: Thành phần nhận việc từ queue.
  • Listener: Thành phần lắng nghe các sự kiện diễn ra trong hàng đợi (completed, failed, stalled).

· 2 min read
Doko
info

Đây là bài viết cũ, ở thời điểm hiện tại RxJava 3 đã ra mắt nhưng concept và các khái niệm cơ bản vẫn còn dùng được. Series gốc có thể tìm thấy tại đây.

Java 8+ với rất nhiều tính năng và cú pháp mới được giới thiệu, trong đó có Lambda Expression được sử dụng để viết anonymous class ngắn gọn hơn. Hiện nay Android Studio 3 đã hỗ trợ cú pháp Java 8 gần như hoàn chỉnh (đã hoàn chỉnh ở API 24) nhưng vì lý do nào đó mà các bạn không thể sử dụng Android Studio 3 thì Retrolambda chính là giải pháp.

· 8 min read
Doko
info

Đây là bài viết cũ, ở thời điểm hiện tại RxJava 3 đã ra mắt nhưng concept và các khái niệm cơ bản vẫn còn dùng được. Series gốc có thể tìm thấy tại đây.

Bất biến

Có 2 vấn đề mà lập trình viên luôn luôn phải giải quyết trong quá trình làm việc:

  • Xử lý vấn đề.
  • Giảm thiểu độ phức tạp của công việc.

Cái thứ nhất thì không phải bàn cãi.

· 7 min read
Doko
info

Lưu ý: Ở thời điểm hiện tại, CRA 3.0 đã hỗ trợ absolute import. Ta không cần phải dùng đến craco để import mà có thể dựa vào src/ làm alias gốc.

Kể từ phiên bản Create React App (CRA 2.0), ta đã có thể tạo project với TypeScript mà không cần dùng đến create-react-app-typescript. Và nhờ có Babel 7 với khả năng hỗ trợ TypeScript mạnh, việc migrate sang TypeScript trở nên dễ dàng hơn rất nhiều.

Tuy nhiên...