OpenGL là gì?

0. Tại sao đi tìm hiểu OpenGL làm cái gì? Gần đây, phải quay sang làm 1 dự án có liên quan đến Computer Graphic, cụ thể là trong không gian 3 chiều (3D). Thực sự, đối với mình nó lại hoàn toàn mới. Ngoài chút kiến thức toán như: Vector, Ma trận (Matrix), vector đơn vị, vài phép cơ bản của Vector thì mình không còn tí kiến thức Đại số nào nữa. Vì thế, cũng mất khá nhiều thời gian để đọc lại các kiến thức đại số liên quan đến các phép biến đổi cơ bản : Tịnh tiến (translate), phép co giãn (scale), phép quay (rotation). Tuy không hiểu rõ, nhưng việc đọc lại, học lại cũng giúp ích rất nhiều trong việc debug. Tuy nhiên, khi động đến phần “Lighting” (tương tác với nguồn sáng) trong không gian 3D thì đọc lý thuyết thôi là không đủ. Vì thế, để hiểu kĩ hơn mình đã tìm hiểu về một vài Graphics Toolkit để chạy thử. Nổi tiếng nhất đó là : OpenGL. (Viết tắt từ: Open Graphic Library). Bài này sẽ nói về những thứ cơ bản khi tiếp cận với OpenGL. 1. OpenGL, GLUT, GLFW, GLEW, GLAD OpenGL: https://www.khronos.org/opengl/wiki/Main_Page ...

tháng 8 14, 2020

File locking trong linux

1. Giới thiệu File locking (khoá file) là cơ chế để đảm bảo việc đọc/ghi file giữa nhiều process cùng lúc một cách an toàn. Bài này chúng ta sẽ giới thiệu xem cơ chế Locking sinh ra giải quyết vấn đề gì và các ví dụ sử dụng của nó trên bash script và ngôn ngữ C. 2. Nếu vấn đề theo cách muôn thủa Ví dụ mô tả vấn đề cập nhật xen kẽ trong bất cứ hệ thống thông tin nào. Đó là vấn đề cập nhật số dư tài khoản (balance) được lưu trong file balance.dat thông quan 2 process là A và B, giả sử ban đầu trong tài khoản có 100 củ, thứ tự thực hiện đúng sẽ như sau: Process A: Đọc giá trị tài khoản hiện tại, trừ đi 20 củ và lưu kết quả vào số dư. Process B: Đọc giá trị tài khoản hiện tại, cộng vào 80 củ và cũng lưu kết quả vào số dư. Sau khi thực hiện xong, số dư tài khoản phải là : 100 - 20 + 80 = 160 củ. Tuy nhiên, nếu xảy ra vấn đề cập nhật xen kẽ, thứ tự thực hiện có thể như sau: Process A: Đọc giá trị balance hiện tại và chuẩn bị thực hiện tính toán. Process B: Đọc được cùng giá trị với Process A và cũng chuẩn bị thực hiện tính toán. Process A: Thực hiện trừ 20 củ và lưu kết quả (80 củ) vào balance Process B: Do không biết giá trị nó đọc lúc trước đã bị thay đổi (giá trị nó đang giữa là 100 củ trong khi giá trị của balance đã là 80 củ rồi), nên nó vẫn thực hiện cộng 80 củ và lưu kết quả 100 + 80 = 180 củ vào balance. Kết quả là 180 là giá trị cuối cùng chứ không phải là 160 như mong muốn. 3. Hai cơ chế Locking trong ứng dụng Linux File locking (ở đây là nói đến đơn vị File để phân biệt với memory locking) là cơ chế cho để hạn chế truy cập cùng 1 file của nhiều process. Có nghĩa là chỉ cho phép một process truy cập ở một thời điểm cụ thể nào đó, vì thế sẽ tránh được cập nhật xen kẽ. Ta hẳn đều biết câu lệnh được ví như ôm boom cảm tử trong linux: rm -rf / (Tuyệt đối đừng thử nếu không biết!!!!!). Nếu ta chạy nó, toà bộ hệ thống đang chạy sẽ bị xoá sạch không còn một cái gì, nên nhớ là không còn một cái gì hết. Tại sao lại kì quặc vậy, hệ thống đang chạy mà lại còn bị xoá đi là sao. Đó chính là vì : Linux thường không tự động thực hiện lock các file đang được mở. Cho nên cho dù hệ thống đang chạy với một tá file đang được mở đi nữa, thì nó vẫn có thể bị xoá sạch sẽ. Thực ra, Linux có hỗ trợ 2 cơ chế lock lock (gọi là 2 loại lock cũng được), đó là: Cơ chế khoá cộng tác (Advisory Locking) Cơ chế khoá độc quyền (Mandatory Locking) Chúng ta sẽ xem chi tiết thêm ở bên dưới. 3.1 Cơ chế khoá cộng tác (Advisory Locking) Nó không phải là một cách thức bắt buộc. ...

tháng 2 29, 2020

Sử dụng lệnh screen cơ bản

screen là một phần mềm (chạy ở chế độ dòng lệnh) trên Linux rất hữu ích. 1. screen giải quyết vấn đề gì? Vấn đề: Khi bạn kết nối bằng SSH đến server qua 1 terminal, bạn có thể gặp các vấn đề sau: Chương trình bạn định chạy (train 1 con AI, down phim XXX) sẽ rất mất thời gian, bạn không thể đợi đến khi nó xong được. Bạn muốn nó vẫn chạy kể cả khi bạn tắt terminal đi về, hôm sau đến vẫn có cái terminal cũ. Bạn muốn chạy 2,3,… chương trình một lúc một lúc, chương trình nào cũng bắn lỗi ra STDOUT, và bạn phải kiểm tra được tình trạng lỗi của mỗi chương trình một cách riêng biệt để fix bug, điều chỉnh dựa trên LOG của nó. Bạn chán việc log lỗi chương trình bằng redirect chúng sang file. screen sinh ra để giải quyết các vấn đề ở trên. Chỉ với một câu lệnh, bạn có thể giữ lại toàn bộ trạng thái của terminal, giúp cho chương trình vẫn chạy bình thường, các terminal log vẫn được ghi lại. Chỉ với một kết nối SSH bạn có thể chạy bao nhiêu chương trình đồng thời tuỳ thích, mỗi chương trình sẽ có terminal (tức là STDIN,STDOUT,STDERR ) riêng. Chỉ bằng screen, bạn không cần mở Desktop lên để chỉ để mở một tab terminal mới để chạy chương trình của bạn. 2. Một số khái niệm khi sử dụng và install session: Tức là một terminal ảo do screen quản lý. Trên đó bạn làm được mọi thứ như trên terminal thật. Chỉ khác một điều, khi bạn thoát (bằng lệnh exit) thì nó sẽ huỷ terminal ảo thôi, và trở về terminal thật. ...

tháng 2 23, 2020

Cảm nhận về zsh sau 1 tháng sử dụng basic

Sau khi update chiếc máy MAC (máy công ty), terminal mặc định trong máy có recommend sang sử dụng zsh thay vì SHELL mặc định trước đó (bash thì phải) thì mới bắt đầu sử dụng thử zsh. Đọc qua một vài lời khen thấy nó khá hay nên quyết định chuyển sang dùng zsh xem sao. Xem có đúng như lời đồn không. Bài này xin tóm tắt một số ý đã tìm hiểu, cảm nhận được. ...

tháng 2 23, 2020

Chuyển HTML thành PDF cơ bản

1. Tại sao cần chuyển sang PDF Nhiều lý do để người ta sử dụng PDF thay vì các định dạng khác. Về cơ bản không thể edit nên đảm bảo thống nhất về nội dung hiển thị Ít bị lỗi FONT Tiện lợi khi gửi, nhận: bên nhận và bên gửi luôn thấy chung 1 dữ liệu và ít khi sửa được. Vì PDF gần như tiêu chuẩn để trao đổi dạng tài liệu read-only Đọc được ở trên hầu hết mọi nền tảng: máy tính, điện thoại.. Trình duyết Web như Firefox, Chrome còn cho phép đọc luôn mà ko cần cài thêm gì. 2. Công cụ hỗ trợ chuyển từ HTML sang PDF Về cơ bản, HTML là plan-text(các thẻ (tag) được kết hợp với nhau), chúng ta sẽ không thể có nội dung nếu không có Web Browser để mở nó. Vì thế, muốn chuyển : HTML sang PDF, ta cần 1 Web Browser để mở lên, sau đó dùng chính Web Browser đó để PDF hoá. Trên hầu hết trình duyệt web đều có chức năng này. Vậy khi lập trình thì sao? Có thư viện nào hỗ trợ không? Câu trả lời là : Có. Đó là wkhtmltopdf 2. Thử nghiệm và một số vấn đề 2.1 Thử xem Giả sử convert 1 post này $ wkhtmltopdf post/2015-08-02-cmake-cong-cu-ho-tro-viec-build-source-tren-nhieu-platform/index.html ./result.pdf Loading pages (1/6) Warning: Failed to load file:///css/style.css (ignore) Warning: Failed to load file:///js/menu.js (ignore) Warning: Failed to load file://https-blog-lazytrick-com.disqus.com/embed.js (ignore) Counting pages (2/6) Resolving links (4/6) Loading headers and footers (5/6) Printing pages (6/6) Done Và kết quả: result.pdf. Một file trắng xoá luôn. ...

tháng 11 3, 2019

Giải thích log của lệnh sendmail

Bài này sẽ dịch lại một phần của trang: http://sendmail.org/~ca/email/doc8.12/op-sh-2.html Về nội dung liên quan đến format log của sendmail cũng ý nghĩa của từng trường. 0. Sendmail là gì Một phần mềm chạy trên hệ thống Linux (hoặc là *Nix). Có nhiệm vụ gửi mail - ta nên dùng từ phân phối (delivery) thì sẽ chuẩn xác hơn. Gửi mail (hay phân phối mail) nói đơn giản là sử dụng kết nối mạng (có thể là internet hoặc không) thực hiện gửi nội dung có định dạng bằng giao thức như SMTP,… đến máy chứa tài khoản người nhận. Nội dung mail sẽ được máy chủ phía nhận phân phối đến đúng user ta đã gửi. Nó chẳng khác gì một ứng dụng mạng bằng Socket mà nhiều người vẫn học. Nó chỉ khác là có các giao thức cụ thể để gửi dữ liệu (là các mail) đi thôi. Thường sẽ có 2 hình thức: Gửi trực tiếp và Gửi gián tiếp. Gửi trực tiếp: Gửi mạil từ máy đang chạy phần mềm sendmail đến máy chủ của người nhận mail, một phát đến luôn. Gửi gián tiếp: Chuyển mail đến một máy khác và nhờ máy đó đại diện gửi đến máy chủ của người nhận mail. Ví dụ: ta có thể gửi mail thông qua server của Google mail (tất nhiên là có thông tin tài khoản Google rồi) đến một địa chỉ bất kì ta muốn. Khi đó, mail đó sẽ giống như ta gửi trực tiếp từ tài khoản Google Mail trên web thôi. Tức là gửi 1 mail từ máy chạy sendmail đến máy chủ của người nhận thông qua Google Mail server. 1. Nói về syslog Hệ thống log hệ thống trong Linux được quản ly (thực ra là được vận chuyển) bởi phần mềm có tên syslog. Sẽ có một chương trình chạy ngầm (dạng daemon) gọi là syslogd. Chương trình này sẽ tiếp nhận hầu hết các log được đẩy ra từ các phần mềm hệ thống đang chạy rồi đẩy ra một đầu ra khác (thường luôn là file) Log của phần mêm sendmail cũng vậy. 2. Format Mỗi dòng log cho ứng dụng sendmail trong hệ thống gôm : timestamp, tên của máy đã tạo ra nó (để phân biệt với trường hợp log được tạo từ máy khác trong mạng), từ sendmail:, và một message đi kèm. Hầu hết các message bao gồm một dãy các cặp name = value. ...

tháng 11 2, 2019

Tensorflow và AVX

1. Lỗi liên quan đến CPU instruction của tensorflow Định cài đặt tensorflow-gpu trên con máy già chạy Intel Xeon X5672 và có gắng GTX 1060 3G để nghịch chút. Nhưng khi kiểm tra xem có chạy được không: >>> import tensorflow as tf Illegal instruction (コアダンプ) Vâng, là lỗi run-time - chỉ xảy ra khi chạy, chứ cài thì chưa xuất hiện vấn đề. 2. AVX là gì Ta tìm hiểu một chút về lỗi kể trên, thì hầu hết đề nói rằng: máy sử dụng CPU không hỗ trợ đầy tập lệnh mà tensorflow đang dùng. Phổ biến là thiếu là AVX - Advanced Vector Extension. Theo wikipedia: Advanced Vector Extension là phần mở rộng cho bộ vi xử lý kiến trúc x86 (cả Intel và AMD), được Intel đề xuất năm 2008. Lần đầu tiên được hỗ trợ trên bộ xử lý Sandy Bridge năm Q1/2011. Sau đó đến Q3/2011 thì AMD cũng hỗ trợ. AVX cung cấp tính năng mới cùng các lệnh mới và cấu trúc thực hiện cũng khác. ...

tháng 10 31, 2019

Chuyển sang site mới, tên miền mới

1. Lý do chuyển sang Wordpress hỗ trợ không tốt việc viết bằng markdown Cần một site nhẹ hơn Cần một cách quản lý bài viết dễ hiểu và rõ ràng hơn Chuyển hẳn sang một domain mới để dễ dang 2. Nền tảng sử dụng Lưu trữ: Github page Bộ sinh HTML : Hugo Tên miền: AWS 53

tháng 10 24, 2019

Bắt đầu về Docker

Docker, là công nghệ rất nổi và có ảnh hưởng đến hầu hết developer. Được coi là một công nghệ ảo hóa ở mức hệ điều hành khi so với các phương pháp ảo hóa phần cứng khác. Theo mình hỏi, kĩ thuật để làm việc này không mới, nó dựa trên kĩ thuật chroot có được sử dụng từ khá lâu trong linux. Nói là vậy, nhưng học để sử dụng thì cần bài bản chút, bài này mình sẽ tóm tắt lại trang Overview từ trang của Docker ...

tháng 2 6, 2019

Pickle - Thư viện Serialization/Deserialization trong Python

Gần đây khi chạy thử một vài thuật toán Deep Learning, đặc biệt là các thuật toán cung cấp source code sử dụng thư viện Caffe, có gặp một vài vấn đề liên quan đến module Pickle trong Python. Thực ra, bình thường cũng không định viết gì cả. Nhưng chợt nhớ ra mình cũng quan tâm đến chủ đề Serialization/Deserialization này. Nó có vai trò giống như ASN.1 mà có tìm hiểu hồi trước, hay phổ biến nhất của thể loại này là Protocol Buffer của Google, hay Apache Thrift. Thế là note lại cái để quên nó đi. ...

tháng 5 24, 2018