Skip to content

Commit fec5182

Browse files
authored
[skip netlify] PUBLISHER #127
* PUSH NOTE : Sự xuất hiện của language server giúp ta có thể bắt kiểu trước cả lúc biên dịch cho những ngôn ngữ chỉ bắt kiểu lúc chạy.md * PUSH NOTE : Ngôn ngữ và động cơ thường trùng tên.md * PUSH NOTE : Runtime là lúc chạy, runtime environment là môi trường thực thi. Nhưng nhiều lúc runtime environment được gọi tắt là runtime.md * PUSH NOTE : Kiểu động làm cho việc học lập trình dễ hơn. Kiểu yếu giúp ngôn ngữ được tự do ép kiểu để đoán ý người dùng dễ hơn.md * PUSH NOTE : Lỗi runtime là lỗi logic, khi chạy mới thấy. Lỗi compile time là lỗi cú pháp, khi biên dịch là thấy ngay.md * PUSH NOTE : Compile time là lúc chuyển từ ngôn ngữ lập trình mà người hiểu sang ngôn ngữ máy chỉ có máy mới hiểu. Runtime là lúc máy chạy mã máy.md * PUSH NOTE : Kiểu động là kiểu được kiểm tra vào lúc chạy. Kiểu tĩnh là kiểu được kiểm tra lúc biên dịch (trước lúc chạy).md * PUSH NOTE : Vật thể ngoài tự nhiên không chứa hướng dẫn để sử dụng nó. Vật thể trong máy tính có hướng dẫn sử dụng nó.md * PUSH NOTE : Vật thể là dạng dữ liệu có những thuộc tính thành phần.md * PUSH NOTE : Việc đóng gói (encapsulation) giúp ta không cần quan tâm vật thể lưu dữ liệu thế nào, mà chỉ cần quan tâm tới thuộc tính và phương thức của nó.md * PUSH NOTE : Thuộc tính nguyên thủy là những thuộc tính có sẵn mình không cần tạo.md * PUSH NOTE : Thay vì ta thao túng trực tiếp dữ liệu, ta điều khiển vật thể qua phần giao tiếp của nó với bên ngoài.md * PUSH NOTE : this, self là cách để nói rằng hành động mà phương thức sẽ làm sẽ phải gắn lên một vật thể cụ thể của lớp, thứ mà bây giờ chưa được tạo ra.md * PUSH NOTE : Phương thức phải gắn lên một vật thể cụ thể nào đó để có tác dụng.md * PUSH NOTE : Phương thức là một thuộc tính của vật thể.md * PUSH NOTE : Phương thức cho ta biết mình có thể làm gì với vật thể.md * PUSH NOTE : Các vật thể tương tác với nhau qua phương thức và không trực tiếp làm thay đổi giá trị của nhau.md * PUSH NOTE : Từ điển là vật thể được dùng để tra cứu dữ liệu theo từ khoá chứ không phải là để thao tác và thay đổi thuộc tính bằng phương thức.md * PUSH NOTE : Những vật thể đơn giản dùng để tra cứu dữ liệu theo từ khoá gọi là từ điển.md * PUSH NOTE : Mảng giống vật thể nhưng tất cả các thuộc tính đều là số. Từ điển giống vật thể nhưng tất cả các thuộc tính đều là chuỗi.md * PUSH NOTE : Lớp là một cái khuôn để tạo các vật thể cho nhanh.md * PUSH NOTE : Không cần biết vật thể chứa dữ liệu gì, chỉ cần quan tâm nó làm được gì.md * PUSH NOTE : Dùng lớp khi ta có logic nghiệp vụ thực sự cần được thực thi. Dùng giao diện để tạo ràng buộc kiểu cho biến.md * PUSH NOTE : Chưa rõ lý do vì sao lại dịch object ra thành đối tượng chứ không phải vật thể.md * PUSH NOTE : Việc hiển thị nội dung dữ liệu như thế nào là do công cụ quyết định, không phải ngôn ngữ quyết định.md * PUSH NOTE : Việc dùng export chính là đang tạo API. API là các vật thể được export.md * PUSH NOTE : Package và library là những cái tên khác nhau cho cùng một thứ.md * PUSH NOTE : Nên tách bạch code hỗ trợ cho client và server vào những mô đun khác nhau.md * PUSH NOTE : Khi import một hàm thì cả file chứa hàm đó sẽ được chạy. Các import của file đó cũng sẽ chạy theo, dù là để import vào một hàm khác mình không import.md * PUSH NOTE : Giao diện là cách để sử dụng vật thể mà không cần biết bên trong nó có gì.md * PUSH NOTE : API là giao diện của một chương trình.md * PUSH NOTE : Nên để dư một dấu phẩy ở phần tử cuối cùng khi tạo vật thể hoặc mảng.md * PUSH NOTE : Map, dictionary, associative array, hash, hash table là những cái tên cho cùng một thứ.md * PUSH NOTE : Để tránh phụ thuộc lòng vòng (circular dependency) có thể dùng hàm.md * PUSH NOTE : Ý tưởng của lập trình hướng vật thể là gom nhiều hàm và dữ liệu vào trong một đơn vị gọi là vật thể.md * PUSH NOTE : Việc tách một khối code thành một hàm khiến cho việc đọc từng dòng trở thành đọc từng bước.md * PUSH NOTE : Hàm vô danh, hàm mũi tên, lambda là những cái tên khác nhau cho cùng một thứ.md * PUSH NOTE : Hàm cũng là vật thể.md * PUSH NOTE : f(a)(b) để gọi hàm f(a) có chứa hàm con f1(b).md * PUSH NOTE : Hoạt động trung tâm của lập trình hướng vật thể là phân loại.md * PUSH NOTE : Biểu thức (expression) là những thứ trả lại một giá trị nào đó.md * PUSH NOTE : Biến là dữ liệu, hàm là thuật toán. Biến là danh từ, hàm là động từ.md * PUSH NOTE : 4 đặc điểm của lập trình hướng vật thể.md * PUSH NOTE : TypeScript là để thêm kiểu vào một ngôn ngữ từ đầu đã không muốn có kiểu. Rust được sinh ra với ý định có kiểu ngay từ đầu.md * PUSH NOTE : Ngôn ngữ dựa trên lớp định nghĩa hàm dựng và các thuộc tính của lớp trước khi tạo vật thể. Ngôn ngữ dựa trên nguyên mẫu thì tạo vật thể trước rồi mới định nghĩa các thuộc tính của nó.md * PUSH NOTE : Nếu compiler không làm cho lập trình viên thấy rõ lỗi của họ là gì, thì đó là lỗi của Rust, không phải của họ.md * PUSH NOTE : Python tập trung vào việc cung cấp một ngôn ngữ lập trình tổng quát, dễ đọc và dễ viết.md * PUSH NOTE : Python tách bạch từ điển và vật thể ngay từ đầu, còn JS mãi về sau mới có từ điển.md * PUSH NOTE : JavaScript vốn được sinh ra để chạy trên trình duyệt và không được dùng để làm việc với lượng code lớn.md * PUSH NOTE : JS là lập trình dựa trên prototype, Java là lập trình dựa trên lớp.md * PUSH NOTE : JavaScript cố gắng đoán ý định của người viết chứ không báo lỗi.md * PUSH NOTE : Mọi ngôn ngữ bậc cao đều là đường cú pháp của hợp ngữ.md * PUSH NOTE : Các ngôn ngữ lập trình tiến hoá dần để trở thành Lisp.md * PUSH NOTE : Ở JS, nếu một biến có giá trị là một chuỗi JSON thì nó sẽ được hiểu là vật thể. Ở Python, nó được hiểu là từ điển.md * PUSH NOTE : Trong JS, console.log() sẽ hiển thị toàn bộ nội dung vật thể mà không phải làm gì. Trong Python, print() sẽ chỉ hiển thị nội dung vật thể nếu __str__() đã được định nghĩa.md * PUSH NOTE : Từ điển dùng để chứa và thao tác với dữ liệu, trong khi JSON về bản chất dùng để mã hóa và giải mã dữ liệu.md * PUSH NOTE : Những phương thức có hai dấu gạch dưới hai bên được gọi là dunder (double underscore).md * PUSH NOTE : __init__.py nói cho Python biết folder chứa nó là một package.md * PUSH NOTE : IPython.md * PUSH NOTE : __init__() chỉ tạo giá trị cho lớp. __new__() mới thực sự là hàm tạo.md * PUSH NOTE : Python.md * PUSH NOTE : Tuple là mảng nhưng không thay đổi được số lượng phần tử.md * PUSH NOTE : shell=True cần cho.md * PUSH NOTE : venv tạo môi trường ảo để tránh trường hợp chồng chéo các gói và xung đột phiên bản giữa các thư viện.md * PUSH NOTE : Tên mô đun Python sẽ được dùng làm identifier. Identifier không được có dấu cách.md * PUSH NOTE : pip là chương trình quản lý package của Python.md * PUSH NOTE : Với những người chỉ cần dùng Python để làm dữ liệu chứ không lập trình, chỉ cần cài Anaconda là đủ. Không cần và không nên cài Python riêng.md * PUSH NOTE : Anaconda giống như một fork Python có bổ sung thêm nhiều công cụ cho khoa học dữ liệu.md * PUSH NOTE : venv chỉ tạo môi trường ảo cho phiên bản hiện tại. Miniconda tạo môi trường ảo cho nhiều phiên bản.md * PUSH NOTE : Conda là trình quản lý thư viện, không chỉ của Python mà còn của các ngôn ngữ khác.md * PUSH NOTE : Không thể thay đổi tuple một khi đã được tạo ra.md * PUSH NOTE : Jupyter notebook giúp chạy lệnh theo từng ô kèm diễn giải.md * PUSH NOTE : elif là để phân biệt else thuộc if nào.md * PUSH NOTE : Exception.md * PUSH NOTE : __repr__() trả về mô tả chi tiết để người lập trình bảo trì và sửa lỗi. __str__() trả về mô tả đơn giản cho người dùng sử dụng.md * PUSH NOTE : Nếu lớp không định nghĩa cả __repr__() và __str__() thì kết quả trả về có dạng __main__.Class_name object at 0x1025c4ed0.md * PUSH NOTE : Trong REPL, gọi trực tiếp vật thể ra thì kết quả là __repr__(). Nếu dùng print thì kết quả là __str__().md * PUSH NOTE : Map trong JS tương đương với dictionary trong Python.md * PUSH NOTE : Khác biệt giữa JS và Python.md * PUSH NOTE : JavaScript và Python là 2 ngôn ngữ điển hình cho việc dùng nguyên mẫu (prototype).md * PUSH NOTE : JS dùng {} cho vật thể, Python dùng nó cho từ điển và tập hợp.md * PUSH NOTE : TypeScript cung cấp kiểu cho JavaScript.md * PUSH NOTE : void là kết quả của những hàm không trả kết quả nào.md * PUSH NOTE : TypeScript.md * PUSH NOTE : tsc là TypeScript compiler, là thứ dịch TypeScript sang JavaScript.md * PUSH NOTE : DefinitelyTyped là nơi tổng hợp kiểu cho các thư viện viết thuận JS.md * PUSH NOTE : type-fest cung cấp thêm các kiểu cho TS.md * PUSH NOTE : tsconfig.md * PUSH NOTE : TS chỉ có thể bắt lỗi kiểu dữ liệu trong lúc viết code. Zod giúp bắt lỗi kiểu do người dùng trả về.md * PUSH NOTE : Thay vì dùng Copilot để gợi ý code, có thể dùng 30 seconds of TypeScript.md * PUSH NOTE : Người mới học TS thì nên cài extension Total TypeScript để bớt sợ.md * PUSH NOTE : Dùng ts-reset để sửa những lỗi kỳ lạ của TS.md * PUSH NOTE : Dùng string-ts để bắt kiểu cho chuỗi được tốt hơn.md * PUSH NOTE : dts hoặc siroc dùng để khởi tạo dự án mà không tốn quá nhiều thời gian config.md * PUSH NOTE : satisfied là để kiểm tra xem dữ liệu mình nhập bằng tay có thoả kiểu hay không.md * PUSH NOTE : Nếu dữ liệu không nhất thiết ở dạng vật thể thì type gọn hơn và linh hoạt hơn. Nếu đã xác định dữ liệu cần ở dạng vật thể thì interface sẽ thể hiện tốt ý tưởng của người viết hơn.md * PUSH NOTE : Nếu một thứ kêu như con vịt và đi như con vịt, thì nó là con vịt.md * PUSH NOTE : Index signature giúp khai báo kiểu của tên thuộc tính và giá trị của nó trong vật thể, dù không biết vật thể đó có cấu trúc thế nào.md * PUSH NOTE : Index signature và record là các cách khai báo kiểu vật thể.md * PUSH NOTE : Các ký hiệu trong TS.md * PUSH NOTE : generic là tính từ, không phải danh từ.md * PUSH NOTE : generic là cách để giữ được tính chung chung mà vẫn không bị mất thông tin.md * PUSH NOTE : generic là biến dành cho kiểu.md * PUSH NOTE : Branding là một thủ thuật để tạo kiểu cho kiểu.md * PUSH NOTE : Chỉ thị ba dấu gạch chéo cung cấp chỉ dẫn cho TS.md * PUSH NOTE : as, is là những cách để nói cho TS biết là mình hiểu nhiều hơn nó.md * PUSH NOTE : Buffer và stream.md * PUSH NOTE : Request.json() và Response.json() tương đương với JSON.parse(). Việc không dùng nó tương đương với việc dùng JSON.string().md * PUSH NOTE : Đa số code ở backend thì chỉ cần thời gian ở định dạng ISO, nhưng code ở frontend thì cần ở định dạng địa phương.md * PUSH NOTE : Instant nhấn mạnh về thời điểm. ZonedDateTime nhấn mạnh về vị trí địa lý.md * PUSH NOTE : Temporal được sinh ra để giải quyết các rắc rối của Date.md * PUSH NOTE : Giờ UTC là giờ luôn giống nhau ở bất cứ nơi đâu. Nó là phiên bản sau của giờ GMT.md * PUSH NOTE : Các quy chuẩn thời gian trong ISO và RFC.md * PUSH NOTE : VanillaJS chỉ là JS bình thường.md * PUSH NOTE : esbuild.md * PUSH NOTE : strict mode là chế độ code nghiêm ngặt, bắt buộc lập trình viên phải tuân thủ theo quy tắc mà JS đưa ra.md * PUSH NOTE : Lịch sử phát triển của JavaScript.md * PUSH NOTE : Namespace thực ra chỉ là các mô đun có sẵn.md * PUSH NOTE : Node với Deno là những môi trường thực thi của JavaScript.md * PUSH NOTE : npm, pnpm, yarn là các chương trình quản lý package cho Node.md * PUSH NOTE : package.json dùng để thiết lập Node.js.md * PUSH NOTE : npx là một gói mở rộng của npm giúp việc cài đặt dễ dàng hơn.md * PUSH NOTE : Cần thiết lập esm cho Node trước khi chạy.md * PUSH NOTE : Vì Node, Deno viết trên V8 chứ không phải Gecko, nên chỉ có Chrome mới debug được chứ Firefox thì không.md * PUSH NOTE : Trong JavaScript, khi nói đến runtime thường mọi người chỉ nghĩ đến Node hoặc Deno, và đối lập với trình duyệt. Dù tất cả đều không phải là runtime mà là runtime environment.md * PUSH NOTE : Những hàm của môi trường thực thi không chạy được trên trình duyệt.md * PUSH NOTE : Cứ 4kb thì tạo thành một read unit, chứ không phải là một lần chạy lệnh.md * PUSH NOTE : Thay vì phải tìm hiểu về awesome JS, có thể xem các thư viện std.md * PUSH NOTE : Sau một thập kỷ phát triển, tác giả của Node đã viết Deno để khắc phục những thiếu sót của Node.md * PUSH NOTE : Dùng Array.fromAsync để việc lấy dữ liệu từ KV không phải chờ tải về hết rồi mới bắt đầu lọc.md * PUSH NOTE : Nếu không chỉ định phiên bản mô đun thì thỉnh thoảng phải xoá cache để đảm bảo lấy được phiên bản mới nhất.md * PUSH NOTE : Deno đã loại bỏ bundler vì sự khác biệt giữa mong đợi của người dùng và của Deno.md * PUSH NOTE : deno info giúp thấy chỗ script được chuyển sang JS.md * PUSH NOTE : Các chương trình dùng Electron ngốn RAM.md * PUSH NOTE : for...in chỉ lấy vị trí trong mảng. for...of lấy giá trị ở vị trí đó.md * PUSH NOTE : Nếu cần tạo một mảng mới từ mảng cũ thì dùng map() tiện hơn dùng for.md * PUSH NOTE : value, writable, enumerable, configurable là các thuộc tính của các thuộc tính.md * PUSH NOTE : Dùng dấu cách cho tên thuộc tính cũng được, nhưng lúc destructure thì phải gõ nhiều sẽ mệt. Tốt nhất là không dùng dấu cách rồi lúc hiển thị viết lại cho đẹp.md * PUSH NOTE : Các hàm thường dùng cho mảng.md * PUSH ATTACHMENT : civilised_guide_to_javascript_array_methods.pdf * PUSH NOTE : Sự kiện.md * PUSH NOTE : Mọi sự kiện đều capture và target, nhưng không phải sự kiện nào cũng bubble.md * PUSH NOTE : Vì JS bắt cả lỗi đoán được và không bắt được, nên khi xử lý lỗi thì tốt nhất là trả về một kết quả.md * PUSH NOTE : Đáng lẽ typeof null phải là 'null'. Nhưng nó lại trả về là 'object' vì đây là một bug lúc JS mới được viết, và việc sửa nó sẽ làm hỏng nhiều script.md * PUSH NOTE : typeof NaN === number.md * PUSH NOTE : Mọi phép so sánh với NaN đều trả về false.md * PUSH NOTE : Luôn dùng ===. Nếu không có lý do hợp lý thì đừng dùng ==.md * PUSH NOTE : Dùng nullish coalescing operator thay cho toán tử OR khi 0, '', NaN cần được trả về true chứ không phải false.md * PUSH NOTE : Dùng null khi chắc chắn là người dùng chắc chắn nói là không có giá trị cho việc đó. Còn lại dùng undefined.md * PUSH NOTE : Khi một hàm được gọi với từ khoá new, nó sẽ được dùng như một constructor.md * PUSH NOTE : Có 2 loại kiểu - kiểu nguyên thuỷ và kiểu tham chiếu.md * PUSH NOTE : Dùng export default cho lớp, hàm của component, và export thường cho những thứ còn lại.md * PUSH NOTE : URL.toString() hoặc URL.href() sẽ luôn thêm dấu chéo vào sau.md * PUSH NOTE : String(x) giống x.tostring(), nhưng không gây ra lỗi nếu x là null hoặc undefined.md * PUSH NOTE : object Object xảy ra khi một vật thể bị chuyển sang dạng chuỗi.md * PUSH NOTE : Number(undefined) === NaN. Number(null) === 0.md * PUSH NOTE : MBR dùng cho BIOS, GPT dùng cho UEFI.md * PUSH NOTE : JSON.stringify(new Error()) trả về một vật thể rỗng.md * PUSH NOTE : Biến được tạo mà không có từ khoá khai báo (var, let, const) luôn là biến toàn cục, kể cả khi được tạo trong hàm.md * PUSH NOTE : Sự bất đồng bộ có tính lây lan. Bất kỳ hàm nào gọi hàm bất đồng bộ đều trở thành hàm bất đồng bộ.md * PUSH NOTE : Vật thể promise có 2 thuộc tính là state và result, và 3 phương thức là then, catch, và finally.md * PUSH NOTE : Để lấy được giá trị state và result của promise, cần dùng các phương thức then và catch.md * PUSH NOTE : Kết quả của promise chỉ có thể được lấy ở trong then, và phải ở dạng hàm.md * PUSH NOTE : Hàm được dùng làm đối số đầu tiên của then sẽ chạy khi hàm resolve được gọi. Hàm được dùng làm đối số thứ hai của then sẽ chạy khi hàm reject được gọi.md * PUSH NOTE : Nếu có nhiều then nối với nhau là bởi vì trong promise có promise khác.md * PUSH NOTE : Promise.md * PUSH NOTE : Promise được sinh ra là để không phải dùng if lồng quá nhiều.md * PUSH NOTE : Promise chỉ là một vật thể để việc lập trình được tiện hơn, không phải là một tính năng mà những phiên bản JS trước không làm được.md * PUSH NOTE : Đối số của Promise là một hàm. Nó được gọi là hàm thực thi (executor).md * PUSH NOTE : resolve, reject là hai hàm được JS cung cấp sẵn để làm đối số cho hàm thực thi.md * PUSH NOTE : Khi resolve được gọi, vật thể promise sẽ cập nhật kết quả trả về từ resolve, và hàm được dùng làm đối số đầu tiên của then sẽ được chạy.md * PUSH NOTE : Chạy nhiều promise song song và tuần tự.md * PUSH NOTE : Nếu không dùng hàm bất đồng bộ để gọi tiến trình khác, thì JS sẽ tiếp tục chạy các lệnh sau đó mà không chờ tiến trình chạy xong.md * PUSH NOTE : await với async là cách để viết hàm bất đồng bộ với tư duy khi viết hàm tuần tự.md * PUSH NOTE : Biến được so sánh với nhau bằng địa chỉ bộ nhớ, không phải giá trị thực sự của biến.md * PUSH NOTE : Cái tên ECMAScript là để tránh bị Oracle kiện.md * PUSH NOTE : Bundler dùng để gom hết tất cả các script lại vào làm một.md * PUSH NOTE : Viết chương trình bằng Rust giống như sống trong mối quan hệ bạo hành.md * PUSH NOTE : Rust.md * PUSH NOTE : Rust phù hợp khi code đã ổn định rồi.md * PUSH NOTE : Mỗi lần refactor là một cực hình.md * PUSH NOTE : Crate là file, package là tập hợp nhiều crate.md * PUSH NOTE : cargo giống npm hay pip.md * PUSH NOTE : Dùng sleep ở đầu loop tốt hơn là ở cuối loop.md * PUSH NOTE : AutoHotKey.md * PUSH NOTE : AutoHotkey combines 3 concepts into 1 built-in basic object type.md * PUSH NOTE : Windows rất lằng nhằng trong việc thiết lập cấu hình.md * PUSH NOTE : Windows không ship phiên bản dotnet Core mới nhất để tránh việc dotnet phải hỗ trợ phiên bản Windows đó cho tới khi nào phiên bản đó bị chính thức ngừng hỗ trợ.md * PUSH NOTE : Local app data.md * PUSH NOTE : Các lệnh để chạy khi cài win mới.md * PUSH NOTE : Dùng absolute path cho lành.md * PUSH NOTE : Đường dẫn đến tệp ngoài trong một script phụ thuộc vào cwd, không phải đường dẫn tới script mình đang viết.md * PUSH NOTE : Việc có khoảng trắng trong tên file sẽ khiến việc xử lý code phức tạp hơn.md * PUSH NOTE : Sự khác biệt giữa Windows và Android, Mac trong tên file.md * PUSH NOTE : pwd là thư mục mà tiến trình sẽ chạy. cwd là thư mục mà mình đang ở đó.md * PUSH NOTE : Những chương trình cũ sẽ dễ gặp vấn đề về dấu cách hơn những chương trình mới.md * PUSH NOTE : Cách các đường dẫn ở những nơi khác nhau xử lý dấu cách và ký tự phi ASCII.md * PUSH NOTE : Nên cài Linux hay dùng WSL.md * PUSH NOTE : Dùng chương trình Linux cho người không biết gì về nó.md * PUSH NOTE : Terminal, console, shell và command line thường được dùng lẫn lộn với nhau.md * PUSH NOTE : Terminal là cái chương trình để làm việc với shell.md * PUSH NOTE : Shell là cái vỏ bảo vệ nhân của hệ điều hành.md * PUSH NOTE : Windows Terminal có thể được kích hoạt trong Explorer.md * PUSH NOTE : Profile.md * PUSH NOTE : powershell.exe, PowerShell 5, Windows PowerShell là một. pwsh.exe, PowerShell 6, PowerShell Core là một.md * PUSH NOTE : PowerShell là một ngôn ngữ shell.md * PUSH NOTE : Các lệnh PowerShell thường dùng.md * PUSH NOTE : cmd vẫn được dùng để chạy exe.md * PUSH NOTE : -contains là giống hoàn toàn. -match mới là giống một nửa.md * PUSH NOTE : Lệnh con thì không có gạch. Cờ thì có gạch.md * PUSH NOTE : Chương trình là một đoạn mã được lưu trên ổ đĩa. Tiến trình là khi đoạn mã đó được nạp vào RAM và được CPU đọc.md * PUSH NOTE : Chương trình = Cấu trúc dữ liệu + thuật toán.md * PUSH NOTE : PATH là đường dẫn mặc định tới những tập tin nhị phân (binary).md * PUSH NOTE : env của người dùng được ưu tiên hơn env của hệ thống. Nhưng với biến path thì ngược lại.md * PUSH NOTE : Biến môi trường giúp ta điền những giá trị lặp đi lặp lại nhanh hơn.md * PUSH NOTE : Test trong VS Code.md * PUSH NOTE : Dễ xem kết quả các giá trị trong console debug hơn là ở Variables.md * PUSH NOTE : Dùng test khi muốn biết code chạy có đúng không. Dùng debug khi muốn biết code chạy sai chỗ nào.md * PUSH NOTE : Đường dẫn trong launch.json là cwd.md * PUSH NOTE : VS Code chỉ là code editor, không phải IDE.md * PUSH NOTE : Vim.md * PUSH NOTE : setting.json giúp tuỳ chỉnh thiết lập theo ý mình.md * PUSH NOTE : Phím tắt trong VS Code.md * PUSH NOTE : Language server là thứ khiến cho IDE hỗ trợ tốt hơn việc lập trình.md * PUSH NOTE : Hằng là xanh lợt, biến là xanh đậm.md * PUSH NOTE : Việc dựng image được thiết lập qua dockerfile.md * PUSH NOTE : Nếu dựng lại image mà đánh tag giống nhau thì image cũ sẽ thành dangling image.md * PUSH NOTE : Có vẻ như ngày xưa engine với daemon là một.md * PUSH NOTE : Làm quen Deno Deploy cho người mới.md * PUSH NOTE : Nơi này là nơi nào.md * DELETE FILE : docs/✍️Lập trình/CICD/GH action phải clone về trước.md * DELETE FILE : docs/✍️Lập trình/CICD/Lifecycle script.md * DELETE FILE : docs/✍️Lập trình/Hệ điều hành, path và terminal/Bạn không cần dùng GUI.md * DELETE FILE : docs/📊Tổ chức, phân tích dữ liệu/Phân tích dữ liệu/Cách để AI không bị ảo giác là kêu nó viết query cho Wikidata.md * DELETE FILE : docs/🔊Tiếp thị số/Kinh nghiệm.md * DELETE FILE : docs/🔊Tiếp thị số/Rút gọn link.md * DELETE FILE : docs/🔊Tiếp thị số/SEO.md * DELETE FILE : docs/🔊Tiếp thị số/Thiết kế web.md * DELETE FILE : docs/🔠Ký tự, văn bản. Quản lý, viết và xuất bản nội dung/Tạo website/Lume/Các template engine và processor sẽ kiếm trong thư mục _includes.md * DELETE FILE : docs/🔠Ký tự, văn bản. Quản lý, viết và xuất bản nội dung/Tạo website/Lume/Tất cả các đường dẫn đều bắt đầu từ src.md * DELETE FILE : docs/🔠Ký tự, văn bản. Quản lý, viết và xuất bản nội dung/Tạo website/Lume/Tất cả mọi thứ đều phải ở trong thư mục src.md * DELETE FILE : docs/🔠Ký tự, văn bản. Quản lý, viết và xuất bản nội dung/Tạo website/WordPress/phpMyAdmin là GUI để dùng MySQL.md * DELETE FILE : docs/🔠Ký tự, văn bản. Quản lý, viết và xuất bản nội dung/Đồng bộ, sao lưu/Git/Thăm dò, so sánh/log/git log --all chỉ hiện những commit nào tiếp cận được từ một ref.md * DELETE FILE : docs/🔠Ký tự, văn bản. Quản lý, viết và xuất bản nội dung/Đồng bộ, sao lưu/GitHub/Bấm dấu . để mở VS Code bản web ngay trên GitHub.md * DELETE FILE : docs/🖥️Mạng máy tính/Máy phục vụ (server)/CDN tạo ra điểm truy cập gần nhất dựa vào vị trí địa lý của người dùng, để thời gian tải web không chịu ảnh hưởng bởi việc nó được đặt ở đâu.md * DELETE FILE : docs/🖥️Mạng máy tính/Máy phục vụ (server)/Cloudflare đóng vai trò là một proxy và CDN.md * DELETE FILE : docs/🖥️Mạng máy tính/Máy phục vụ (server)/Cpanel là.md * DELETE FILE : docs/🖥️Mạng máy tính/Máy phục vụ (server)/Edge là sự kết hợp giữa CDN và serverless.md * DELETE FILE : docs/🖥️Mạng máy tính/Máy phục vụ (server)/Proxy làm trung gian để client lấy dữ liệu từ server.md * DELETE FILE : docs/🖥️Mạng máy tính/Máy phục vụ (server)/Reverse proxy chủ yếu bảo vệ server. Forward proxy chủ yếu bảo vệ client.md
1 parent 32c7400 commit fec5182

73 files changed

Lines changed: 1011 additions & 797 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/index.md

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -8,33 +8,33 @@ alias:
88
- Trang chủ
99
title: Nơi này là nơi nào
1010
---
11-
## Tiếp thị số, xử lý dữ liệu và lập trình
12-
Đây là kho thông tin bổ sung cho kho [Obsidian, quản lý dự án và công cụ nghĩ](https://obsidian.quảcầu.cc/?utm_source=Vault+C+Tiếp+thị+số%2C+xử+lý+dữ+liệu+và+lập+trình+(Trang+chủ)&utm_medium=Vault&utm_campaign=&utm_content=&utm_term=), tập trung vào việc xử lý dữ liệu và lập trình. Nó được sinh ra trong quá trình bọn mình viết [Trấn Kỳ](https://tranky.deno.dev/?utm_source=Vault+C+Tiếp+thị+số%2C+xử+lý+dữ+liệu+và+lập+trình+(Trang+chủ)&utm_medium=Vault&utm_campaign=&utm_content=&utm_term=), và cũng được sử dụng như tài liệu hướng dẫn cho nó. Nếu bạn muốn tìm một nguồn tài liệu để học một cách bài bản thì không nên vào đây. Nhưng nếu mục tiêu của bạn là làm xong những công việc khác, mà để làm được chúng trôi chảy bạn phải học lập trình, và bạn muốn tìm những bài viết thật ngắn nhưng đủ để hiểu khái niệm để còn làm việc được tiếp (như khi bọn mình cần phải học để còn viết xong Trấn Kỳ), thì có thể một số thứ trong đây sẽ hữu ích cho bạn.
13-
14-
> [!IMPORTANT] Những thứ được ghi lại trong đây
15-
> - **Những khái niệm thiết yếu trong việc xây dựng mental model, đặc biệt là:**
16-
> - Những khái niệm cơ bản mà nếu không được giải thích thì không thể tự đoán ra được. Công việc ta cần làm đòi hỏi ta phải làm theo những hướng dẫn mặc định rằng ta đã hiểu được chúng rồi, và không cung cấp thêm lời giải thích hoặc xây dựng đủ bối cảnh để ta có thể đoán ý nghĩa của nó. Thường để hiểu được các khái niệm cơ bản này ta sẽ phải quay lại học bài bản, nhưng lúc đó việc học bài bản lại phân tán sự tập trung của ta khỏi công việc cần làm
17-
> - Các so sánh, ẩn dụ tới một cái gì đó dễ hiểu, dễ liên tưởng hơn
18-
> - Sự khác biệt, tương phản hoặc tăng tiến về cường độ của những thứ có vẻ na ná nhau hoặc mâu thuẫn nhau. Phân biệt những cái tên khác nhau cho cùng một thứ, và những thứ khác nhau có cùng một cái tên
19-
> - Những thuật ngữ dùng không được chuẩn xác. Có những cách dùng từ mà với người đã hiểu rồi thì sự thiếu chính xác cũng không thành vấn đề, thậm chí còn tiện lợi, nhưng người mới học thì thấy loạn (các [misnomer](https://en.wikipedia.org/wiki/Misnomer))
20-
> - Ý đồ thiết kế ([design rationale](https://en.wikipedia.org/wiki/Design_rationale "Design rationale - Wikipedia")) để hiểu được điểm mạnh, điểm yếu của các giải pháp khác nhau cho cùng một vấn đề, và vì sao các tác giả của chúng chấp nhận những đánh đổi đó
21-
> - **Các lỗi thường gặp mà việc tìm hiểu đòi hỏi phải có hiểu biết sâu về vấn đề (pitfall)**
22-
> - **Những nguồn tốt dể học một cách bài bản**
23-
> - **Những lĩnh vực, hướng tư duy ít được để ý**
24-
> - **Những cách dịch tốt hơn cách dịch đã phổ biến.** Xem thêm:: [Các vấn đề về dịch thuật ngữ](C%C3%A1c%20v%E1%BA%A5n%20%C4%91%E1%BB%81%20v%E1%BB%81%20d%E1%BB%8Bch%20thu%E1%BA%ADt%20ng%E1%BB%AF.md)
25-
>
26-
> Chúng là những thứ mà bạn ước rằng ngày xưa có ai nói với mình như vậy để mình hiểu ra nhanh. Chúng thể hiện được sự vận động, chuyển động của khái niệm.
27-
28-
Những thứ không được ghi lại:
29-
- Các giới thiệu chi tiết (về công cụ, ngôn ngữ, khái niệm, v.v.) đặc biệt là nếu có nguồn tốt hơn
30-
- Những thứ bạn có thể khám phá ra về sau, mà sự khám phá đó không làm bạn nhức đầu
31-
- Các khái niệm mà chỉ cần nhìn mặt chữ cũng có thể đoán ra được mà không cần tra cứu
32-
33-
Những mẹo vặt tiện lợi thì có lẽ có cái sẽ được ghi lại, có cái không.
34-
35-
Cách sắp xếp thư mục tuỳ vào việc lúc đó não bạn cần gì nhất. Cấu trúc cây thư mục có thể là:
36-
- Những thứ cùng chủ đề, hoặc nếu khác chủ đề thì cũng hay liên hệ với nhau
37-
- Những thứ người mới học hay gặp nó
38-
- Cấu trúc phân loại học thuật
39-
40-
Bài chi tiết: [Hướng dẫn đọc code cho người thấy việc biết lập trình là quan trọng nhưng không thể biến nó trở thành ưu tiên cao nhất - Obsidian, quản lý dự án và công cụ nghĩ](https://obsidian.quảcầu.cc/📐%20Dự%20án/Các%20buổi%20đáp%20ứng%20nhu%20cầu%20học%20cách%20sử%20dụng%20công%20cụ%20và%20tư%20duy%20lập%20trình%20cho%20nhu%20cầu%20công%20việc/9%20Blog/Theo%20kỹ%20thuật/Hướng%20dẫn%20đọc%20code%20cho%20người%20thấy%20việc%20biết%20lập%20trình%20là%20quan%20trọng%20nhưng%20không%20thể%20biến%20nó%20trở%20thành%20ưu%20tiên%20cao%20nhất?utm_source=Vault+C+Tiếp+thị+số%2C+xử+lý+dữ+liệu+và+lập+trình+(Trang+chủ)&utm_medium=Vault&utm_campaign=C1+Các+buổi+đáp+ứng+nhu+cầu+học+cách+sử+dụng+công+cụ+và+tư+duy+lập+trình+cho+nhu+cầu+công+việc&utm_content=&utm_term=)
11+
## Tiếp thị số, xử lý dữ liệu và lập trình
12+
Đây là kho thông tin bổ sung cho kho [Obsidian, quản lý dự án và công cụ nghĩ](https://obsidian.quảcầu.cc/?utm_source=Vault+C+Tiếp+thị+số%2C+xử+lý+dữ+liệu+và+lập+trình+(Trang+chủ)&utm_medium=Vault&utm_campaign=&utm_content=&utm_term=), tập trung vào việc xử lý dữ liệu và lập trình. Nó được sinh ra trong quá trình bọn mình viết [Trấn Kỳ](https://tranky.deno.dev/?utm_source=Vault+C+Tiếp+thị+số%2C+xử+lý+dữ+liệu+và+lập+trình+(Trang+chủ)&utm_medium=Vault&utm_campaign=&utm_content=&utm_term=), và cũng được sử dụng như tài liệu hướng dẫn cho nó. Nếu bạn muốn tìm một nguồn tài liệu để học một cách bài bản thì không nên vào đây. Nhưng nếu mục tiêu của bạn là làm xong những công việc khác, mà để làm được chúng trôi chảy bạn phải học lập trình, và bạn muốn tìm những bài viết thật ngắn nhưng đủ để hiểu khái niệm để còn làm việc được tiếp (như khi bọn mình cần phải học để còn viết xong Trấn Kỳ), thì có thể một số thứ trong đây sẽ hữu ích cho bạn.
13+
14+
> [!IMPORTANT] Những thứ được ghi lại trong đây
15+
> - **Những khái niệm thiết yếu trong việc xây dựng mental model, đặc biệt là:**
16+
> - Những khái niệm cơ bản mà nếu không được giải thích thì không thể tự đoán ra được. Công việc ta cần làm đòi hỏi ta phải làm theo những hướng dẫn mặc định rằng ta đã hiểu được chúng rồi, và không cung cấp thêm lời giải thích hoặc xây dựng đủ bối cảnh để ta có thể đoán ý nghĩa của nó. Thường để hiểu được các khái niệm cơ bản này ta sẽ phải quay lại học bài bản, nhưng lúc đó việc học bài bản lại phân tán sự tập trung của ta khỏi công việc cần làm
17+
> - Các so sánh, ẩn dụ tới một cái gì đó dễ hiểu, dễ liên tưởng hơn
18+
> - Sự khác biệt, tương phản hoặc tăng tiến về cường độ của những thứ có vẻ na ná nhau hoặc mâu thuẫn nhau. Phân biệt những cái tên khác nhau cho cùng một thứ, và những thứ khác nhau có cùng một cái tên
19+
> - Những thuật ngữ dùng không được chuẩn xác. Có những cách dùng từ mà với người đã hiểu rồi thì sự thiếu chính xác cũng không thành vấn đề, thậm chí còn tiện lợi, nhưng người mới học thì thấy loạn (các [misnomer](https://en.wikipedia.org/wiki/Misnomer))
20+
> - Ý đồ thiết kế ([design rationale](https://en.wikipedia.org/wiki/Design_rationale "Design rationale - Wikipedia")) để hiểu được điểm mạnh, điểm yếu của các giải pháp khác nhau cho cùng một vấn đề, và vì sao các tác giả của chúng chấp nhận những đánh đổi đó
21+
> - **Các lỗi thường gặp mà việc tìm hiểu đòi hỏi phải có hiểu biết sâu về vấn đề (pitfall)**
22+
> - **Những nguồn tốt dể học một cách bài bản**
23+
> - **Những lĩnh vực, hướng tư duy ít được để ý**
24+
> - **Những cách dịch tốt hơn cách dịch đã phổ biến.** Xem thêm:: [Các vấn đề về dịch thuật ngữ](C%C3%A1c%20v%E1%BA%A5n%20%C4%91%E1%BB%81%20v%E1%BB%81%20d%E1%BB%8Bch%20thu%E1%BA%ADt%20ng%E1%BB%AF.md)
25+
>
26+
> Chúng là những thứ mà bạn ước rằng ngày xưa có ai nói với mình như vậy để mình hiểu ra nhanh. Chúng thể hiện được sự vận động, chuyển động của khái niệm.
27+
28+
Những thứ không được ghi lại:
29+
- Các giới thiệu chi tiết (về công cụ, ngôn ngữ, khái niệm, v.v.) đặc biệt là nếu có nguồn tốt hơn
30+
- Những thứ bạn có thể khám phá ra về sau, mà sự khám phá đó không làm bạn nhức đầu
31+
- Các khái niệm mà chỉ cần nhìn mặt chữ cũng có thể đoán ra được mà không cần tra cứu
32+
33+
Những mẹo vặt tiện lợi thì có lẽ có cái sẽ được ghi lại, có cái không.
34+
35+
Cách sắp xếp thư mục tuỳ vào việc lúc đó não bạn cần gì nhất. Cấu trúc cây thư mục có thể là:
36+
- Những thứ cùng chủ đề, hoặc nếu khác chủ đề thì cũng hay liên hệ với nhau
37+
- Những thứ người mới học hay gặp nó
38+
- Cấu trúc phân loại học thuật
39+
40+
Bài chi tiết: [Hướng dẫn đọc code cho người thấy việc biết lập trình là quan trọng nhưng không thể biến nó trở thành ưu tiên cao nhất - Obsidian, quản lý dự án và công cụ nghĩ](https://obsidian.quảcầu.cc/📐%20Dự%20án/Các%20buổi%20đáp%20ứng%20nhu%20cầu%20học%20cách%20sử%20dụng%20công%20cụ%20và%20tư%20duy%20lập%20trình%20cho%20nhu%20cầu%20công%20việc/9%20Blog/Theo%20kỹ%20thuật/Hướng%20dẫn%20đọc%20code%20cho%20người%20thấy%20việc%20biết%20lập%20trình%20là%20quan%20trọng%20nhưng%20không%20thể%20biến%20nó%20trở%20thành%20ưu%20tiên%20cao%20nhất?utm_source=Vault+C+Tiếp+thị+số%2C+xử+lý+dữ+liệu+và+lập+trình+(Trang+chủ)&utm_medium=Vault&utm_campaign=C1+Các+buổi+đáp+ứng+nhu+cầu+học+cách+sử+dụng+công+cụ+và+tư+duy+lập+trình+cho+nhu+cầu+công+việc&utm_content=&utm_term=)

docs/✍️Lập trình/CICD/GH action phải clone về trước.md renamed to docs/✍️Lập trình/CICD/GitHub Action phải clone về trước.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
22
share: true
33
created: 2023-10-30T14:29
4-
updated: 2025-03-03T18:48
4+
updated: 2025-06-10T11:18
55
---

docs/✍️Lập trình/CICD/Lifecycle script.md renamed to docs/✍️Lập trình/CICD/Script vòng đời là những script dùng để chạy những sự kiện.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
---
22
share: true
33
created: 2023-10-30T14:29
4-
updated: 2025-04-30T11:58
4+
updated: 2025-06-10T11:19
55
---
6-
they're scripts run in the lifecycle of a project
7-
the lifecycle being events like installing deps, deps changing, publishing the package, bumping the version, running or stopping the project
6+
the lifecycle being events like installing deps, deps changing, publishing the package, bumping the version, running or stopping the project
87
Nguồn::

docs/🔠Ký tự, văn bản. Quản lý, viết và xuất bản nội dung/Đồng bộ, sao lưu/GitHub/Bấm dấu . để mở VS Code bản web ngay trên GitHub.md renamed to docs/✍️Lập trình/Công cụ/IDE (VS Code)/Bấm dấu . để mở VS Code bản web ngay trên GitHub.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
share: true
33
created: 2023-10-30T14:29
4-
updated: 2025-05-01T16:34
4+
updated: 2025-05-02T17:21
55
---
66
Nguồn::

docs/✍️Lập trình/Hệ điều hành, path và terminal/Bạn không cần dùng GUI.md

Lines changed: 0 additions & 7 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
share: true
3+
created: 2023-10-30T14:29
4+
updated: 2025-05-10T15:06
5+
---
6+
This table is labeled CPU Usage (Precise) to distinguish it from the CPU Usage (Sampled) data. The _sampled_ data comes from interrupting the CPU frequently – sampling – and seeing what it is doing. The _precise_ data that is discussed here comes from instrumenting the context switch code in the kernel. Every time a thread starts or stops running the precise time of this activity is recorded, with optional call stacks. This means that the CPU Usage (Precise) data can tell _exactly_ how much CPU time each thread consumes, and what the call stack looked like when a thread lost/gained the CPU. However the CPU Usage (Precise) data can’t tell you what a thread is doing between context switches – that is the job of the CPU Usage (Sampled) data. Understanding this difference is crucial.
7+
8+
Nguồn:: [The Lost Xperf Documentation–CPU Usage (Precise) \| Random ASCII – tech blog of Bruce Dawson](https://randomascii.wordpress.com/2012/05/11/the-lost-xperf-documentationcpu-scheduling/)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
share: true
3+
created: 2023-10-30T14:29
4+
updated: 2025-05-09T23:36
5+
---
6+
<iframe width="560" height="315" src="https://www.youtube.com/embed/Cw4d3pyZwX4?si=8QXCKmM6OL5EhWCY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
7+
Bên phải đường thẳng xanh là những thông tin sẽ hiển thị trên tooltip
8+
Ready là những tiến trình đã sẵn sàng chạy nhưng CPU quá bận không chạy được
9+
10+
11+
[ETW Training Videos Available Now \| Random ASCII – tech blog of Bruce Dawson](https://randomascii.wordpress.com/2014/08/19/etw-training-videos-available-now/)
12+
Nguồn::
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
share: true
3+
created: 2023-10-30T14:29
4+
updated: 2025-05-10T15:46
5+
---
6+
Nguồn:: [WPA–Xperf Trace Analysis Reimagined \| Random ASCII – tech blog of Bruce Dawson](https://randomascii.wordpress.com/2012/06/19/wpaxperf-trace-analysis-reimagined/)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
share: true
3+
created: 2023-10-30T14:29
4+
updated: 2025-05-09T16:41
5+
---
6+
Nguồn:: [windows - Troubleshoot High CPU usage by the "System" process - Super User](https://superuser.com/a/1164299/301042)

0 commit comments

Comments
 (0)