Công cụ
Terminal Trove - The $HOME of all things in the terminal.
-
-:
-
Container (Docker):
- Bản chất của việc tắt container là tắt tiến trình PID 1
- Container chỉ là một tiến trình. Nó không có nhân hệ điều hành, mà lấy ở hệ điều hành gốc luôn
- Container là phù du
- exec để chạy lệnh cho một container đang chạy
- Docker mặc định sinh ra IP ngẫu nhiên cho container. Không có DNS hoặc static IP management thì service không thể biết nhau
- EXPOSE chỉ để cho mình biết là nên mở cổng nào, chứ không thực sự mở. Muốn mở phải dùng -p ở lệnh
- Mặc định là container sẽ chạy bằng quyền root. Dùng USER để chỉ định người dùng
- Container (Docker)
- Docker không dạy bạn cách network hoạt động. Nó chỉ giúp bạn trốn tránh việc phải hiểu nó
- Nếu nhân hệ điều hành trong container khác với nhân hệ điều hành dùng để chạy Docker, thì phải chạy trên máy ảo
- Volume là cách để đồng bộ dữ liệu giữa máy chủ và máy ảo
- Lớp là một ảnh tạm được sinh ra từ mỗi dòng trong dockerfile
- Mỗi một dòng trong dockerfile sẽ tương ứng với một bước khi dựng ảnh, cũng là một ảnh tạm
- Nếu dựng lại ảnh mà đánh tag giống nhau thì ảnh cũ sẽ thành ảnh treo (dangling image)
- Việc dựng ảnh được thiết lập qua dockerfile
- Nếu cần xóa các tệp tạm được tạo ra từ một lệnh khác thì dùng trong một lệnh RUN, đừng tách thành hai lệnh
- Ảnh là template để chạy container
- CLI client lúc thì được nói là nằm trong động cơ, lúc thì được nói là nằm ngoài
- Có vẻ như ban đầu động cơ Docker được hiểu là chính là daemon
- Docker Desktop tạo ra một máy ảo để chạy động cơ docker. Trên Windows thì WSL chính là máy ảo đó
- Động cơ bao gồm CLI client, API và daemon
- Trong trường hợp của Docker Desktop, CLI client nằm ở máy host, còn daemon nằm ở máy ảo
-
Dịch vụ đám mây:
- GitHub Action phải clone về trước
- GitHub Page không nhận ra các thư mục có dash phía trước, chỉ đọc được trong docs
- Website GitHub giống như là để teamview máy tính của GitHub
- Template và fork
- Tạo nhánh mới khi tạo PR sẽ dễ quản lý hơn
- App là một nhóm các máy ảo, không phải chương trình được chạy trong container. Mỗi máy ảo chỉ gắn với một app
- Autostop, autostart chỉ chạy ở máy ảo đang có, và không bao giờ tạo ra hay hủy máy ảo
- flyd chạy trên máy thực, tạo ra các máy ảo bằng Firecracker. Pilot là PID 1 của máy ảo đó, dùng để quản lý các container
- Các máy ảo đều có cùng IP, dù cho các máy thực chứa chúng ở những vùng địa lý khác nhau
- Nếu tạo một máy ảo mới bằng fly machine run mà không chỉ định rõ app nào, thì sẽ tự động có một app mới
- Máy ảo giống như pod trong Kubernetes
- Nếu để qua thời gian thử nghiệm mà không làm gì rồi xin lại thì sẽ được cấp $20
- Volume thuộc về một app, tồn tại trên một server, chỉ gắn với một máy ảo
- Volume và máy ảo được sinh ra để đi kèm với nhau, nhưng không phải lúc nào việc đó cũng xảy ra
- Các máy ảo không chia sẻ cùng volume được, cũng không tự động cập nhật volume cho nhau. Bản thân app phải tự xử lý việc đó
- Build service object
- GCP nhiều khi chặn IP Việt Nam
- Tài khoản thanh toán
- Làm quen Deno Deploy cho người mới
- Trong Oracle, tenancy namespace là chuỗi object storage namespace trong trang tenancy information
- Endpoint
- GraphQL phù hợp cho app điện thoại, gRPC phù hợp khi cần tốc độ cao với ít tài nguyên
- Node là một vật thể có ID riêng. Edge là vật thể liên kết giữa các node. Field là thuộc tính của vật thể
- Node với edge được gọi chung là endpoint
- API đưa thông tin là thụ động. Webhook đưa thông tin chủ động
- RESTful là REST không có hypermedia
- Tất cả web service là API, nhưng nó khác với web API của JS
- Webhook, web service
- Đám mây bản chất là đi thuê local của người khác
-
Git:
- Blob, tree, commit và annotated tag là các vật thể chính
- Bản chất của Git chỉ là những cặp giá trị key – value
- Chỉ có con trỏ là di chuyển, còn vật thể thì không bao giờ thay đổi
- Commitist và treeist
- Các commit được nối với nhau bằng hash
- Có thể xem nội dung file với hash là như nhau. Nhưng file thì có thể có kích thước vô cùng lớn, còn hash thì luôn chỉ có 40 ký tự
- Có thể hiểu blob là hash của một tệp, tree là hash của một thư mục, còn commit thực ra chỉ là hash của cả thư mục tổng
- Key là hash của object, value là nội dung object
- Lệnh sứ là các lệnh dành cho người dùng. Lệnh ống nước là các lệnh lõi để dùng kèm với các lệnh Unix khác
- [[✍️Lập trình/Công cụ/Git/Blob, tree, ref. Bên trong Git/Ref/Cái nào có ref thì
git gcsẽ không đụng tới.md|Cái nào có ref thìgit gcsẽ không đụng tới]] - amend sẽ squash cả đầu nhánh, chứ không chỉ commit cuối cùng
- Có 2 chỗ để lưu ref
- Dấu ngã và dấu mũ là để chỉ các commit trước đó
- git reflog là phao cứu sinh cho những lỗi lầm khi dùng Git
- HEAD là commit hiện tại
- Trạng thái mất đầu (detached HEAD) là khi HEAD chỉ trực tiếp vào commit chứ không phải vào nhánh
- @ là viết tắt của HEAD
- git reflog giúp xem lại các ref không có trong lịch sử commit
- Ref là hệ thống đặt tên các vật thể git
- origin, upstream là những cái tên thường dùng cho remote
- pull không lấy file mới về, mà lấy commit mới về
- Các lệnh Git thường dùng
- Các lỗi Git thường gặp
- Có thể xem Git là một dạng xích khối
- Facebook chuyển sang Mercurial vì nhóm phát triển Git năm 2012 không mặn mà với monorepo
- Git giúp ta du hành thời gian
- Git tốt cho lập trình, nhưng không tốt cho dữ liệu có cấu trúc
- Git được sinh ra để giải quyết nhu cầu của Linus, một người viết nhân hệ điều hành
- Git không biết gì về folder
- git status giúp xem những file nào đã được vào stage
- Khi amend, rebase, push force thì author date vẫn giữ nguyên, còn commit date mới cập nhật
- pathspecs giúp chọn đường dẫn một cách linh hoạt và tinh tế hơn
- Reset soft dùng để gộp nhiều commit lại với nhau. Reset hard dùng để xoá bỏ những gì đã ghi sau commit được chọn
- git add -A làm cho index giống như ở working directory. git commit -am chỉ áp dụng cho những file đã có sẵn trong index
- Untracked, staged, unchanged và unstaged là 4 trạng thái chính của một file
- Stage, cache, index là những cái tên khác nhau cho cùng một thứ
- Chỉ có duy nhất stash mới nhất là có ref, tất cả các stash còn lại thì không
- Stash là một commit, có cha là commit HEAD và mẹ là commit từ index
- Stash cung cấp các lệnh dễ chịu hơn cho những lưu trữ tạm thời, dù về mặt kỹ thuật thì dùng commit và branch có nhiều ưu điểm hơn
- Stash không lưu file chưa được stage
- Việc commit giúp ta phá code mà không sợ gì, giống như có đồ bảo hộ rồi thì tha hồ nghịch điện cao thế
- Thứ ta đang trực tiếp chỉnh sửa mà ta tưởng là dữ liệu của mình thực chất là thứ được vay mượn từ commit
- Git
- Real-time collaboration isn’t necessary in most cases, but asynchronous collaboration
- 2 chấm và 3 chấm trong log và diff
- Cây lịch sử có thể được dùng như là bản lưu những gì đã diễn ra, hoặc là một câu chuyện kể về chúng
- diff does not take into account untracked files
- git diff thường dùng
- git diff chỉ so sánh working tree với index, không phải HEAD. Muốn so sánh với HEAD phải dùng git diff HEAD
- git log –all chỉ hiện những commit nào tiếp cận được từ tất cả các ref
- git log giúp xem lịch sử các commit
- ls-files chỉ làm việc với index
- Fast forward
- Git tag
- git merge B nên được hiểu là git merge A with B. git rebase A nên được hiểu là git rebase B to A
- Khi merge, ours là branch hiện tại. Khi rebase, theirs là branch hiện tại
- Rebase thích hợp khi phải merge nhiều branch, do nó làm cây lịch sử gọn hơn
- Merge dùng để bảo lưu sự song song của các thay đổi đã xảy ra trên code. Rebase dùng để đảm bảo cây lịch sử phản ánh sự tuần tự trong quá trình thay đổi code của mình
- Khi viết tính năng mới nên tạo branch mới
- Tất cả những gì Git làm chỉ để làm một việc là điều khiển các đồ thị
-
IDE:
- Có những plugin chỉ có trên VS Code
- IDE
- Language server là thứ khiến cho IDE hỗ trợ tốt hơn việc lập trình
- Prettier là để làm cho dễ nhìn. Linter là để hạn chế dính bug khi dự án mở rộng
- Vim
- Bấm dấu . để mở VS Code bản web ngay trên GitHub
- Bấm F12 để biết thêm thông tin về biến
- Debugger
- Dùng logpoint thay cho console.log() khi debug
- Không cần viết hàm quản lý debug khi đã có logpoint
- Launch vs attach
- Các biểu tượng dùng trong VS Code
- Dùng snippet để viết tắt code
- Giao diện VS Code
- Hằng là xanh lợt, biến là xanh đậm
- launch.json dùng để thiết lập debugger
- Nhiều người có thể cùng chỉnh sửa cùng lúc như Google Docs
- Phím tắt trong VS Code
- setting.json giúp tuỳ chỉnh thiết lập theo ý mình
- VS Code nhiều khi không tìm hết file được do tên quá dài
- Video hướng dẫn
- Plugin hay cho người mới
- Đường dẫn trong launch.json là cwd
- Sự khác biệt giữa IDE và trình soạn thảo văn bản nằm ở việc compile code. Nên chính xác mà nói thì không có IDE để viết JS cho máy khách
- Vì lỗi compile time là lỗi cú pháp, và vì language server giúp bắt lỗi cú pháp, nên nó khiến cho code editor trở thành IDE mà không cần có compiler