Tìm hiểu về Serverless dễ hiểu bằng trà sữa

1 kvYDcS71SZXcyP yeqQMww - quochung.cyou PTIT

Serverless là gì, IaaS, CaaS, FaaS là gì, ..

Trước tiên để tìm hiểu về cấu trúc Serverless, trước hết ta hãy xem thử các cấu trúc truyền thống thường được sử dụng, và một số từ khoá và định nghĩa của chúng.

Mô tả cấu trúc Monolithic truyền thống

Ví dụ với một cấu trúc như trên, toàn bộ ứng dụng của chúng ta sẽ được chứa chung trong 1 khối lớn, và cùng tương tác vào 1 database. Để dễ hiểu hơn, mình sẽ ví dụ chúng như sau:

Một cửa hàng bán trà sữa bán 4 loại trà sữa:

  • Trà sữa dâu
  • Trà sữa ô long
  • Trà sữa bạc hà
  • Trà sữa socola

Tất cả trà sữa này sẽ được nhân viên pha bằng cùng 1 chiếc máy, cái máy này có thể pha được cả 4 loại trà sữa trên, rất đa năng tiện dụng. Ngoài ra, để có thể pha trà sữa bằng máy, ta cần nhiên liệu pha trà sữa, các nhiên liệu cho 4 loại trà sữa thì khác nhau, và được để chung trong 1 thùng nhiên liệu.

  • Máy pha trà sữa – Code/Server xử lí Logic tính toán, ..
  • Thùng nhiên liệu – Database, cơ sở dữ liệu tổng
  • Nhiên liệu – Các dữ liệu

Vậy ta có thể thấy, với một lượng người dùng chưa lớn, xây dựng cấu trúc đưa toàn bộ các logic vào 1 server như trên có thể khả thi, tuy nhiên, khi người dùng ngày càng tăng lên, việc làm trà sữa nào cùng phải dùng chung 1 cái máy, và việc lấy nhiên liệu nào cũng phải lấy từ 1 thùng nhiên liệu lớn sẽ khiến cho 1 khối chung quá tải, một trong những cách tối ưu cho vấn đề này là chia nhỏ các công việc nhỏ ra.

Tối ưu: Chia nhỏ các vấn đề

Lúc này, ta sẽ chia nhỏ các vấn đề thành 4 luồng như sau, vẫn tại cùng 1 địa điểm, 1 server cửa hàng đó, ta chia cấu trúc thành:

  • Máy pha trà sữa 1, chỉ pha trà sữa dâu. Cùng 1 thùng nhiên liệu chỉ cho trà sữa dâu
  • Máy pha trà sữa 2, chỉ pha trà sữa ô long. Cùng 1 thùng nhiên liệu chỉ cho trà sữa ô long
  • Máy pha trà sữa 3, chỉ pha trà sữa bạc hà. Cùng 1 thùng nhiên liệu chỉ cho trà sữa bạc hà
  • Máy pha trà sữa 4, chỉ pha trà sữa socola. Cùng 1 thùng nhiên liệu chỉ cho trà sữa socola

Lúc này, với các khách order các trà sữa khác nhau, nhân viên có thể đến các máy pha và thùng nhiên liệu khác nhau, chia tách thành các luồng nên sẽ giảm tải hơn một chút. Tuy nhiên, lại có một số vấn đề như sau:

  • Các luồng sẽ không giống nhau. Ví dụ trà sữa dâu thường được gọi nhiều hơn trà sữa socola, nên đúng ra cái máy, hay tài nguyên server (cpu, ram,…) nên được phân bố nhiều hơn cho trà sữa socola
  • Nếu một máy trà sữa bị lỗi, ví dụ hãy tưởng tượng về code, dù lúc này đã chia nhỏ nhiều function ra, nhưng nếu hỏng cái gì thì thường ta phải khởi động lại cả server chung, đồng nghĩa các function khác đang chạy tốt cũng phải khởi động lại.

Lúc này, ta sẽ thử nói về một số từ khoá trong triển khai cấu trúc để xử lí vấn đề trên

image 1 - quochung.cyou PTIT

Lại tưởng tượng về cửa hàng bán trà sữa, hãy coi cả cửa hàng như một cái máy chủ, một cái máy tính để có thể chạy các code (các máy pha trà sữa). Chúng ta có thể mua một mặt bằng để đặt cửa hàng (mua đứt). Tương tự, ta có thể mua các server về nhà chúng ta, về công ty để tự triển khai, tự lắp đặt.

image 8 - quochung.cyou PTIT

Triển khai 1: Tự cài đặt server

Một server thì nhìn chung có cấu trúc tương tự như một máy tính, laptop bình thường. Tuy nhiên được thiết kế để chịu tải tốt hơn, chạy 24/7, chịu đựng các điều kiện như nhiệt độ, thời tiết, bụi, … tốt hơn, và một số đặc tính khác nữa.

image 2 - quochung.cyou PTIT

Việc tự mua một server về triển khai thường được các công ty lớn sử dụng, tuy nhiên lúc này ta sẽ phải lo các vấn đề như nhiệt độ, cần bật máy làm mát, điều hoà, quạt,… để server mát mẻ 24/7. Hay phải lo các vấn đề như điện để tải server, tránh các trường hợp mất điện thì server cũng hỏng, ….

Nó giống với việc bạn mua mặt bằng để làm cửa hàng trà sữa, sau khi mua xong thì không thể mở rộng đất ra nếu muốn mở rộng cửa hàng được, phải tự lo các vấn đề như vệ sinh mặt bằng, điện nước, …. Điều này không phù hợp nếu ta chỉ cần một dịch vụ nhỏ, hoặc muốn mở rộng lớn ra hơn sau này.

Tối ưu: Đưa các dịch vụ lên các nền tảng riêng

Triển khai 2: infrastructure as a service (IaaS) – Cơ sở hạ tầng như một dịch vụ

image 3 - quochung.cyou PTIT

Như tên của nó, cơ sở hạ tầng như một dịch vụ. Tức là ta sẽ thuê luôn một mặt bằng cho cửa hàng trà sữa, một cái máy chủ về để sử dụng. Các đơn vị cho thuê thường là các công ty lớn như nước ngoài có Amazon, Microsoft, Google. Trong nước thì có Viettel Cloud, … Các nhà cho thuê, đơn vị này sẽ bảo đảm vấn đề điện duy trì server ổn định, băng thông mạng cho server tốc độ cao, ….

Ngoài ra nếu server các bạn bị tấn công, ddos, các đơn vị này cũng sẽ có thể chuyển bạn sang một server, cụm network mạng khác để tránh, …

Nhìn chung việc cho thuê hay mua dịch vụ này đã giảm tải bớt rất nhiều sự đau đầu cho bạn. Lúc này bạn như có một cái máy tính ảo có thể truy cập từ xa, và đặt các code của mình lên đây để chạy.

Tối ưu: Các dịch vụ tự co giãn theo nhu cầu, tiết kiệm chi phí

Triển khai 3: Container as a Service (CaaS) – Một khối container như dịch vụ

image 7 - quochung.cyou PTIT

Để giải thích việc này thì khá trừu tượng, nhưng lúc này bạn sẽ được cung cấp dịch vụ như các container. Các container này thì gọn nhẹ hơn, tốn ít tài nguyên, tiền bạc để thuê, và có thể co giãn được (tức là có thể tự tăng ram, cpu khi nhu cầu nâng cao)

Bạn tưởng tượng thì nếu bạn chia nhỏ các phần của ứng dụng của mình đủ nhỏ, để chúng có thể triển khai độc lập trên 1 container nhỏ, lúc này các hệ thống container có thể tạo ra rất nhiều bản container của phần ứng dụng đó của bạn, tự nâng cấu hình khi nhu cầu sử dụng tăng cao, hoặc tự triển khai một container khác chạy thay thế nếu container hiện tại bị sập, …

image 4 - quochung.cyou PTIT

Triển khai 4: Function as a Service (FaaS) – Một hàm, chức năng như một dịch vụ

Với triết lý lập trình hàm (Function do only one thing), khi làm việc với kiến trúc Functions as a service, chỉ nên để function làm một việc duy nhất

Điểm mạnh nhất của FaaS là nó độc lập các function, nếu function chỉ thực thi một nhiệm vụ duy nhất. FaaS sẽ làm rất tốt công việc của nó được giao. Tuy nhiên, nếu gọi các function lồng nhau, rất dễ xảy ra vấn đề về performance.

Tức là lúc này bạn có thể chia các máy bán trà sữa này làm một tác vụ duy nhất như 1 hàm, trong đó có cả thùng nhiên liệu là database nhỏ của riêng loại trà sữa đó thôi. Lúc này các máy bán trà sữa này được đặt tại nhiều điểm khác nhau, (bạn chỉ đang thuê cái máy – một function như một dịch vụ). Do kết nối internet hạ tầng đủ nhanh, chúng vẫn có thể chấp nhận được với cửa hàng trà sữa của bạn. Và nếu 1 máy hỏng thì các máy khác vẫn không làm sao cả.

Các FaaS cũng có thể có các tính năng kế thừa như CaaS, tức là tự tạo một điểm khác nếu quá tải, tự tạo ra nhiều điểm vẫn là cùng 1 máy bán trà sữa và chia nhỏ luồng hơn nữa để xử lý tốt hơn, hay tự khởi động một điểm khác khi chỗ hiện tại bị sập, …

image 5 - quochung.cyou PTIT

Một số từ khoá

Auto-scaling: Các máy chủ nhỏ này sẽ tự động co giãn ssd, ram, cpu, …. để phù hợp với nhu cầu, ví dụ máy pha trà sữa này nhiều khách order thì tự tăng tài nguyên lên, còn nếu ít khách thì tự giảm xuống

Event-driven: Các máy pha trà sữa nếu không ai gọi thì tự tắt đi, và chỉ bật lên (cold-start), sẽ bật lên (đủ nhanh tuỳ theo độ nặng của code bạn) khi có khách gọi (một event – sự kiện)

pay-per-execution: Một số chỗ sẽ thu phí bạn thuê theo số lần gọi dịch vụ chứ không phải thời gian thuê. ví dụ máy bán trà sữa dâu khá ế, 1 tháng có đúng 4 khách gọi 4 thời điểm khác nhau, bạn không cần bật máy cả tháng, mà chỉ tính tiền thuê 4 lần đó thôi

pay-as-use: Một số chỗ thu phí theo thời gian, tuy nhiên nhỏ lẻ hơn. Kiểu theo tiếng, theo ngày, … khi đó nếu bạn chỉ cần dùng 1 thời gian ngắn rồi tắt đi thì sẽ tiết kiệm chi phí hơn nhiều

Tóm lại về serverless

image 6 - quochung.cyou PTIT

Hi vọng qua ví dụ trà sữa trên bạn sẽ có một cái nhìn tổng quan hoặc cơ bản về serverless.

Serverless – Không có server, không có nghĩa là sẽ không có cái server máy chủ nào chạy code cả. Mà cơ bản bạn sẽ không cần sở hữu một cái máy chủ, tự bảo quản và vận hành nó, mà có thể thuê các đơn vị khác đảm bảo dịch vụ và ổn định hơn để thực thi các tác vụ của mình.

Như lúc này cửa hàng trà sữa có thể đưa 4 máy pha trà sữa, 4 đoạn code độc lập này lên 4 điểm khác nhau. Lúc này ví dụ 1 điểm code bị bug, có vấn đề thì các nơi khác vẫn hoạt động bình thường.

Ngoài ra các điểm này có thể tự co giãn – (tham khảo thêm ở phần từ khoá bên trên) để phục vụ tốt hơn nếu có nhu cầu nhiều hơn ở một luồng nào đó.

image 9 - quochung.cyou PTIT

Ưu điểm của serverless

  • Tiết kiệm chi phí, không cần thuê/mua cả mặt bằng – cả 1 server để chứa mấy cái máy pha, mà chỉ cần thuê cái máy pha là được
  • Giảm bớt nỗi lo quản lý mặt bằng – server như điện, tiền mạng, ….

Nhược điểm của serverless hay FaaS

  • Test và debug khó hơn, do nó chỉ bật khi mình cần, hơn nữa bạn không nhìn được rõ chúng đang chạy như thế nào như code trên máy mình, vì lúc này toàn bộ code đang ở một điểm khác.
  • Vấn đề bảo mật, lúc này bạn đang để database và code ở một đơn vị khác cho thuê. Nhìn chung thì chắc chắn việc bảo mật không thể bằng tự mình quản lí được.
  • Không phù hợp cho các tác vụ chạy liên tục 24/7. Do điểm tốt của serverless là tiết kiệm tiền, tự tắt đi khi mà không cần sử dụng. Nhưng nếu bạn cần dùng liên tục thì nên thuê CaaS hoặc IaaS
  • Giảm hiệu năng. Do các máy pha chỉ bật khi ta cần đến, nên sẽ tốn thêm thời gian bật lên. Bạn cần chia nhỏ function nhất có thể để chúng độc lập, và bật đủ nhanh để không ảnh hưởng người dùng

Một số nguồn tài nguyên cho lập trình Game

I. itch.io

Itch.io là một nền tảng cung cấp cho các các lập trình viên game hàng ngàn tài nguyên chất lượng cao để tạo ra những tựa game độc đáo. Nền tảng này cho phép bạn tải xuống các tài liệu như texture nhân vật, item, phong cảnh, map (tile sets), các hiệu ứng kĩ năng (skill effect) và rất nhiều thứ khác nữa để giúp bạn xây dựng một thế giới game hoàn hảo của mình.

- quochung.cyou PTIT

II. Gamefresco.com 

Gamefresco, một nền tảng chia sẻ và tạo đồ họa game mới được tạo bởi các game artist, đã công bố ra mắt phiên bản beta vào ngày 1 tháng 2 năm 2023. Gamefresco cung cấp một cách mới để chia sẻ các bộ sưu tập tài sản game chất lượng cao, bao gồm icon, nhân vật, môi trường map và background, cùng nhiều thứ khác.

Với Gamefresco, các nhà phát triển game và thiết kế game có thể khám phá, thu thập và chia sẻ các tài nguyên game từ khắp nơi trên thế giới. Có thể tạo ra bộ sưu tập của riêng mình từ các tài nguyên của nhiều người khác nhau (Giống Pinterest).

745cbcaf666b48cc91941776b52126e5.Gamefresco The ultimate source for Free 2D game asset - quochung.cyou PTIT

III. GameDevMarket

GameDev Market là một marketplace tài nguyên lớn dành cho các nhà phát triển indie với nhiều tài nguyên game miễn phí và cả trả phí. Các nhà thiết kế đồ hoạ game khác nhau có thể đăng tải các gói tài nguyên theo chủ đề cùng với các tài nguyên game miễn phí mà bạn có thể tải về tham khảo. Tương tự như Itch.io, bạn có thể tìm thấy tất cả các loại tài sản game. Có các danh mục như 2D, 3D hoặc GUI, …. Có nhiều loại tài nguyên game khác nhau như background, nhân vật, xe cộ, quái, npc, môi trường, cây cối và nhiều hơn nữa.

Gamedevmarket free game art - quochung.cyou PTIT

IV. OpenGameArt

Open Game Art free game art 1024x569 1 - quochung.cyou PTIT
generic platformer mockup - quochung.cyou PTIT

Một trang có giao diện trông có vẻ hơi lỗi thời một chút, tuy nhiên tại đây có rất nhiều tài nguyên miễn phí để làm game. Đa số tài nguyên đều nằm trong bản quyền chung nên bạn có thể sử dụng trong các dự án mang tính thương mại mà không cần để lại credit. Ngoài ra cộng đồng trên đây cũng khá active và bạn có thể theo dõi và lọc theo đánh giá của cộng đồng. Thường thì các tài nguyên nổi tiếng và được đánh giá cao sẽ được hiện trước

V. CraftPix

Craftpix free game art 1024x488 1 - quochung.cyou PTIT

Cũng như đa số các trang bên trên. CraftPix là một marketplace chứa cả các tài nguyên miễn phí và trả phí. Tại đây bạn có thể tìm các asset 2D cho game arcade, chiến thuật, platform, rpg, … CraftPix có một đặc trưng là các asset đều mang một sắc màu độc đáo. Nếu bạn đang muốn tạo một con game mang tính sáng tạo và lạ thì có thể thử trang này

Cài đặt WSL2 Ubuntu trên Window ít lỗi không cần Microsoft Store

WSL là gì

tich hop nhan linux tren windows 10 1 - quochung.cyou PTIT

WSL (Windows Subsystem for Linux) là một tính năng có trên Windows x64 (từ Windows 10, bản 1607 và trên Windows Server 2019), nó cho phép chạy hệ điều hành Linux (GNU/Linux) trên Windows. Với WSL bạn có thể chạy các lệnh, các ứng dụng trực tiếp từ dòng lệnh Windows mà không phải bận tâm về việc tạo / quản lý máy ảo như trước đây. Cụ thể, một số lưu ý mà Microsoft liệt kê có thể làm với WSL:

  • Chọn sử dụng distro Linux từ Microsoft Store: Hiện giờ đang có các Distro Linux rất gọn nhẹ trên Store sử dụng được ngày như Ubuntu, Debian …
  • Chạy được từ dòng lệnh các lệnh linux như ls, grep, sed … hoặc bất kỳ chương trình nhị phân 64 bit (ELF-64) nào của Linux
  • Chạy được các công cụ như: vim, emacs …; các ngôn ngữ lập trình như NodeJS, JavaScript, C/C++, C# …, các dịch vụ như MySQL, Apache, lighthttpd …
  • Có thể thực hiện cài đặt các gói từ trình quản lý gói của Distro đó (như lệnh apt trên Ubuntu)
  • Từ Windows có thể chạy các ứng dụng Linux (dòng lệnh)
  • Từ Linux có thể gọi ứng dụng của Windows

Một số phần cần dựa vào WSL để chạy trên Win

  • Docker
  • Terminal (Konsole)
  • ZSH / Fish
  • VSCode
  • Git
  • PHP
  • Node.js
  • Golang

Cài đặt WSL2 Ubuntu không cần sử dụng Microsoft Store, tránh một số lỗi như Window tắt Update, …

Đầu tiên, bật Powershell lên, có thể dùng Window + S để tìm powershell

image - quochung.cyou PTIT


# Tải về Ubuntu 20.04, copy lệnh dưới vào powershell
Invoke-WebRequest -Uri https://aka.ms/wslubuntu2004 -OutFile Ubuntu.appx -UseBasicParsing

# Cài đặt file vừa tải xong, copy lệnh dưới vào powershell
Add-AppxPackage .\Ubuntu.appx

Sau khi thấy đã cài đặt hoàn tất, Window + S và tìm ubuntu để chạy các phần setup cơ bản

Sau khi hoàn thiện, bật powershell lần nữa và chạy thử lệnh sau để kiểm tra ubuntu đã lên chưa

wsl --list --verbose

//Sẽ in ra dạng
  NAME                   STATE           VERSION
  Ubuntu-20.04           Running         1
maxresdefault 1 - quochung.cyou PTIT

Nếu đã hiển thị như trên, gõ lệnh sau để sang WSL2

wsl --set-version Ubuntu-20.04 2

QLDT PTIT Enhancer – Tiện ích xếp TKB, bổ sung chức năng cho QLDT PTIT 2023

QLDT Enhancer

Bạn cũng có thể thử bản beta với nhiều chức năng hơn và nhiều lỗi hơn :v : https://github.com/quochung-cyou/QLDT_Enhancer/tree/beta

Author

Description

  • Script hỗ trợ việc xếp lịch TKB, đồng thời chỉnh lại giao diện QLDT một chút theo ý mình. Script được hoàn thành gấp rút trong nửa ngày vì yêu cầu của bạn bè mình, mình cũng chỉ mới học JavaScript nên nếu có lỗi hay vấn đề hi vọng các bạn có thể liên hệ mình qua [email protected]
  • Sử dụng script theo nhu cầu của bạn, mình không chịu trách nhiệm trước các vấn đề liên quan đến việc sử dụng script này.

Feature

  •  Tool xem xếp lịch TKB theo QLDT
  •  Chọn môn bằng dropdown nhanh chóng, đỡ phải tìm kiếm hay lướt như QLDT cũ
  •  Tự động cập nhật lịch thay đổi
  •  Chỉnh sửa giao diện thêm một chút
  •  Tự động giữ kết nối, tránh bị out session
  •  Danh sách môn đã đăng kí
  •  Tránh đăng kí trùng 1 môn

Prerequisites and Setup

Video hướng dẫn: https://www.youtube.com/watch?v=UYY8gMDWGD8

Technologies Used

  • JavaScript
  • JQuery

Demo image

demo1 - quochung.cyou PTIT
demo2 - quochung.cyou PTIT
demo3 - quochung.cyou PTIT
demo4 - quochung.cyou PTIT

License Information

  • This software is licensed under MIT License.
  • Read More on the license.

Giúp đỡ tôi bằng cách chia sẻ hoặc tặng sao

stars - quochung.cyou PTIT

Thông tin liên hệ

Nếu có bất kỳ nội dung nào liên quan còn thiếu,hãy tạo issues cho nó, tôi sẽ theo dõi và cải thiện。

MIT License

Copyright (c) 2023 QuocHung

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

[Web-Buổi 2] Tìm hiểu về CSS

  • Các cách style cho file HTML.
  • CSS selectors.
  • Độ ưu tiên, các loại đơn vị độ dài trong CSS.
  • Float, box model
  • Các loại position, z-index trong CSS.
  • Các loại display trong CSS.
  • Background style trong CSS.
  • Pseudo class và pseudo element.
  • Style cho text trong CSS.

I. Các cách style cho file HTML.

CSS
  • Có 3 cách để style cho file HTML:
    • Inline style: style được viết trực tiếp vào thẻ HTML.
    • Internal style: style được viết trong thẻ <style> của file HTML.
    • External style: style được viết trong file CSS riêng.
  • Inline style:
    • Cú pháp: <tag style="property: value">
    • Ví dụ: <p style="color: red">Hello World</p>
    • Ưu điểm: style được viết trực tiếp vào thẻ HTML nên có độ ưu tiên cao nhất.
    • Nhược điểm: khó quản lý, khó bảo trì, khó mở rộng.
  • Internal style:
    • Cú pháp: <style>selector {property: value}</style>
    • Ví dụ: <style> p { color: red; } </style>
    • Ưu điểm: style được viết trong file HTML nên có độ ưu tiên cao hơn so với external style.
    • Nhược điểm: khó quản lý, khó bảo trì, khó mở rộng.
  • External style:
    • Cú pháp: <link rel="stylesheet" href="path/to/file.css">
    • Ví dụ: <link rel="stylesheet" href="style.css">
    • Ưu điểm: style được viết trong file CSS riêng nên có thể tái sử dụng, quản lý, bảo trì, mở rộng dễ dàng.
    • Nhược điểm: style được viết trong file CSS riêng nên có độ ưu tiên thấp nhất.

II. CSS selectors.

CSS selectors
  • CSS selectors là các cách chọn phần tử HTML để style.
  • Có nhiều loại CSS selectors:
    • Element selectors: chọn phần tử HTML dựa vào tên thẻ.
    • Class selectors: chọn phần tử HTML dựa vào tên class.
    • ID selectors: chọn phần tử HTML dựa vào tên ID.
    • Universal selectors: chọn tất cả các phần tử HTML.
    • Grouping selectors: chọn nhiều phần tử HTML cùng lúc.
    • Descendant selectors: chọn phần tử HTML con của phần tử HTML khác.
    • Adjacent sibling selectors: chọn phần tử HTML anh em cùng cấp của phần tử HTML khác.
    • Child selectors: chọn phần tử HTML con của phần tử HTML khác.
    • Attribute selectors: chọn phần tử HTML dựa vào thuộc tính của phần tử HTML đó.
    • Pseudo-class selectors: chọn phần tử HTML dựa vào trạng thái của phần tử HTML đó.
    • Pseudo-element selectors: chọn phần tử HTML dựa vào phần tử HTML đó.
    • Combinators: kết hợp nhiều CSS selectors lại với nhau.
CSS selectors
  • Cú pháp: selector {property: value}
  • Ví dụ: p { color: red; }
  • Select phần tử HTML có tên thẻ là p và style cho nó màu đỏ.
  • Ví dụ selector element có id là id1 và style cho nó màu đỏ: #id1 { color: red; }
  • Ví dụ selector element có class là class1 và style cho nó màu đỏ: .class1 { color: red; }

III. Độ ưu tiên, các loại đơn vị độ dài trong CSS.

  • Độ ưu tiên trong CSS:
    • Inline style > Internal style > External style.
    • !important > inline style > internal style > external style.
    • Selector có độ dài dài hơn sẽ có độ ưu tiên cao hơn.
    • Selector có độ ưu tiên cao hơn sẽ được áp dụng.
  • Các loại đơn vị độ dài trong CSS:
    • px: pixel.
    • em: độ dài của phần tử HTML cha.
    • rem: độ dài của phần tử HTML root (thường là thẻ <html>).
    • %: phần trăm.
    • vw: độ dài của viewport theo chiều ngang.
    • vh: độ dài của viewport theo chiều dọc.

IV. Float, box model

Float
  • Float: thuộc tính dùng để xác định vị trí của phần tử HTML.
  • Có 4 giá trị của float:
    • left: phần tử HTML sẽ nằm bên trái.
    • right: phần tử HTML sẽ nằm bên phải.
    • none: phần tử HTML sẽ không nằm bên trái hay bên phải.
    • inherit: phần tử HTML sẽ kế thừa giá trị float của phần tử HTML cha.

VD:

p {
    float: left;
}
Box model
  • Box model: mô hình hình hộp của phần tử HTML.
  • Có 4 thành phần của box model:
    • Content: nội dung của phần tử HTML.
    • Padding: phần đệm giữa content và border.
    • Border: viền của phần tử HTML.
    • Margin: phần đệm giữa border và phần tử HTML khác.

VD:

p {
    width: 100px;
    height: 100px;
    padding: 10px;
    border: 1px solid black;
    margin: 10px;
}

Các thuật ngữ trên có thể tạm giải thích như sau:

  • content (hay content area): là vùng chứa nội dung của một element, với chiều rộng/cao được xác định qua thuộc tính width và height. Vùng này thường chứa text, hình ảnh, video…
  • padding (hay padding area): cho biết độ rộng của vùng padding bao quanh vùng content.
  • border (hay border area): cho biết độ rộng (và style) của border bao quanh vùng padding.
  • margin (hay margin area): cho biết độ rộng của vùng margin bao quanh vùng border.

V. Các loại position, z-index trong CSS.

Position
Position
  • Có 5 loại position:
    • static: phần tử HTML sẽ được đặt theo thứ tự xuất hiện trong file HTML.
    • relative: phần tử HTML sẽ được đặt theo thứ tự xuất hiện trong file HTML, nhưng có thể dịch chuyển theo hướng top, bottom, left, right.
    • absolute: phần tử HTML sẽ được đặt theo thứ tự xuất hiện trong file HTML, nhưng có thể dịch chuyển theo hướng top, bottom, left, right, và sẽ được đặt theo phần tử HTML cha có position là relative hoặc absolute.
    • fixed: phần tử HTML sẽ được đặt theo thứ tự xuất hiện trong file HTML, nhưng có thể dịch chuyển theo hướng top, bottom, left, right, và sẽ được đặt theo phần tử HTML cha có position là relative hoặc absolute, và sẽ được đặt theo viewport.
    • sticky: phần tử HTML sẽ được đặt theo thứ tự xuất hiện trong file HTML, nhưng có thể dịch chuyển theo hướng top, bottom, left, right, và sẽ được đặt theo phần tử HTML cha có position là relative hoặc absolute, và sẽ được đặt theo viewport, và sẽ được đặt lại vị trí ban đầu khi scroll.

VD:

p {
    position: relative;
    top: 10px;
    left: 10px;
}
Z-index
  • Có 2 loại z-index:
    • auto: phần tử HTML sẽ được đặt theo thứ tự xuất hiện trong file HTML.
    • number: phần tử HTML sẽ được đặt theo thứ tự xuất hiện trong file HTML, nhưng có thể đặt lại vị trí bằng cách thay đổi giá trị number.

VD:

p {
    z-index: 1;
}

VI. Các loại display trong CSS.

  • Có 4 loại display:
    • block: phần tử HTML sẽ được hiển thị trên một dòng riêng biệt.
    • inline: phần tử HTML sẽ được hiển thị trên một dòng với các phần tử HTML khác.
    • inline-block: phần tử HTML sẽ được hiển thị trên một dòng với các phần tử HTML khác, nhưng có thể thay đổi kích thước.
    • none: phần tử HTML sẽ không được hiển thị.

VD:

p {
    display: inline-block;
}

VII. Background style trong CSS.

Background
  • Có 5 thuộc tính của background:
    • background-color: màu nền.
    • background-image: hình nền.
    • background-repeat: lặp lại hình nền.
    • background-position: vị trí hình nền.
    • background-attachment: cố định hình nền.

VD:

p {
    background-color: red;
    background-image: url("https://www.w3schools.com/cssref/img_tree.png");
    background-repeat: no-repeat;
    background-position: center;
    background-attachment: fixed;
}

VIII. Pseudo class và pseudo element.

Pseudo class
  • Pseudo class: lựa chọn phần tử HTML dựa vào trạng thái của phần tử HTML đó.
  • Có 4 loại pseudo class:
    • :active: phần tử HTML đang được click.
    • :hover: phần tử HTML đang được hover.
    • :focus: phần tử HTML đang được focus.
    • :visited: phần tử HTML đã được truy cập.

VD:

p:hover {
    color: red;
}
Pseudo element
  • Pseudo element: lựa chọn phần tử HTML dựa vào phần tử HTML đó.
  • Có 4 loại pseudo element:
    • ::after: thêm nội dung vào phần tử HTML sau.
    • ::before: thêm nội dung vào phần tử HTML trước.
    • ::first-letter: thêm nội dung vào phần tử HTML đầu tiên.
    • ::first-line: thêm nội dung vào phần tử HTML dòng đầu tiên.

VD:

p::after {
    content: "Hello World";
}

IX. Style cho text trong CSS.

Text
  • Có 4 thuộc tính của text:
    • color: màu chữ.
    • text-align: căn lề.
    • text-decoration: gạch chân.
    • text-transform: chuyển đổi chữ.

VD:

p {
    color: red;
    text-align: center;
    text-decoration: underline;
    text-transform: uppercase;
}

[Web-Buổi 1] Tìm hiểu về cách hoạt động của Web, HTML cơ bản

Mục lục:

  • Cách thức hoạt động của một trang web
  • Cấu trúc của HTML
  • Block, inline elements. Qua phân biệt div, span.
  • Các thẻ liên quan đến table trong HTML
  • Các thẻ: image, video, links, audio
  • Section elements: div, span, header, footer, nav, main, section, article
  • HTML text fundamentals: h1 -> h6, p, ul, li
  • Các thẻ liên quan đến form: form, input, button, label, textarea
  • Có thể tìm hiểu các thẻ khác ngoài các thẻ trên các thẻ trên

I. Cách thức hoạt động của một trang web

Khi máy tính nhà của mình kết nối đến một trang web trên mạng, ta có thể gọi chúng là các clients (máy khách) và servers (máy chủ).

Ảnh minh hoạ: ảnh minh hoạ 1

Client máy khách sẽ gửi các Requests (yêu cầu) về máy chủ, và máy chủ sẽ trả về Response (Phản hồi) tương ứng với yêu cầu của người dùng.

VD:

  • Người dùng gửi yêu cầu tìm trang bạn bè, server trả về trang banbe.html
  • Người dùng gửi yêu cầu nhắn tin, server trả về dữ liệu tin nhắn

Ở thời kì đầu của web, đa phần các web đều là web tĩnh. Tức là các trang web chỉ có thể hiển thị các nội dung cố định, không thể thay đổi được. Ví dụ như các trang web tin tức, các trang web thông tin, các trang web giới thiệu sản phẩm, …

Tuy nhiên, với sự phát triển của công nghệ, các trang web ngày nay có thể thay đổi được nội dung, có thể tương tác với người dùng. Ví dụ như các trang web mạng xã hội, các trang web thương mại điện tử, các trang web chơi game, … (Được gọi là web động). Các trang web động sẽ có dữ liệu hiển thị tuỳ theo người dùng khác nhau, và có thể thay đổi được dữ liệu hiển thị tuỳ theo người dùng. Ví dụ như trang web mạng xã hội, khi bạn đăng nhập vào trang web, bạn sẽ thấy các bài viết của bạn bè, và bạn có thể đăng bài viết của mình lên trang web.

ảnh minh hoạ 2

Vậy nhìn chung thì Web là một dữ liệu sẽ được server trả về khi người dùng yêu cầu. Tuy nhiên nếu đào sâu ra thì đây là một quá trình rất dài, tưởng tượng máy bạn là nhà bạn, và web bạn truy cập là một cửa hàng trên phố, lúc này để truy cập web, bạn cần đi qua một tuyến đường để đến cửa hàng đó.

Quá trình xảy ra khi bạn kết nối một trang web:

  • Đầu tiên tưởng tượng, để đến một cửa hàng (web), ta cần địa chỉ của nó. Các máy chủ hay máy người dùng khi kết nối đến hệ thống internet toàn cầu đều được cấp một địa chỉ, thường là Ipv4 (ví dụ 98.139.180.149)
  • Tuy nhiên, số lượng ipv4 là có hạn. Vì vậy thông thường các máy tính sẽ nằm trong một mạng cục bộ, và chỉ có một ipv4 bên ngoài quyết định chúng. VD: Toàn bộ máy tính của 1 toà nhà sẽ đều kết nối vào một modem mạng có Ipv4 là (98.139.180.149). Đây sẽ là địa chỉ để bên ngoài có thể kết nối tới. Tuy nhiên khi có yêu cầu gửi tới, ta có thể cài đặt nó sẽ được đi vào máy tính nào trong toà nhà đó, các máy tính lúc này sẽ có một ipv4 cục bộ kiểu: 192.168.0.1, 192.168.0.2, ….. Tưởng tượng: Các cửa hàng nằm trong phố Nguyễn Trãi, ta đi đến Nguyễn Trãi và nó sẽ là số 100 Nguyễn Trãi, số 101 Nguyễn Trãi, …
ảnh minh hoạ 3
  • Như vậy ta đã biết là bằng cách trên. Một server có thể truy cập bằng một địa chỉ Ipv4. Kiểu ta có thể truy cập bằng http://98.139.180.149. Tuy nhiên người dùng không thể nhớ hết số IP này, vì vậy ta cần một hệ thống định dang (tên miền – domain) để biến ip số này thành các tên miền dễ nhớ. VD: http://google.com, http://facebook.com, http://youtube.com, …
  • Để có thể biết được địa chỉ ip của một tên miền, ta cần một hệ thống DNS (Domain Name System). Hệ thống này sẽ lưu trữ các tên miền và địa chỉ ip tương ứng của nó. VD: google.com -> 20.002.003.149
  • Các hệ thống DNS như một cuốn từ điển và cho biến tên miền nào chỉ đến ip nào. Thông thường khi kết nối, đầu tiên máy tính sẽ tìm lại vào cache của chính máy mình để xem tên miền đã được lưu chưa, nếu chưa có thì máy tính sẽ tìm đến các dns server của ISP (nhà mạng, ví dụ Viettel, VNPT). Nếu vẫn chưa tìm thấy, máy tính sẽ tìm đến các DNS Server khác như của Google (8.8.8.8), Cloudflare (1.1.1.1), …
  • Khi người dùng gõ tên miền vào trình duyệt, trình duyệt sẽ gửi yêu cầu tới DNS để lấy địa chỉ ip của tên miền đó. Sau đó trình duyệt sẽ gửi yêu cầu tới địa chỉ ip đó, và server sẽ trả về dữ liệu tương ứng với yêu cầu của người dùng.
ảnh minh hoạ 4

II. Cấu trúc của HTML

ảnh minh hoạ 5
ảnh minh hoạ 6
  • HTML là một ngôn ngữ đánh dấu siêu văn bản (HyperText Markup Language). Nó được sử dụng để xây dựng các trang web. HTML được sử dụng để đánh dấu các phần tử trong một trang web. Các phần tử này được đánh dấu bằng các thẻ HTML. Mỗi thẻ HTML bắt đầu bằng một ký tự đặc biệt và kết thúc bằng một ký tự đặc biệt. Nội dung giữa các thẻ HTML là nội dung của phần tử đó. Ví dụ: <p> This is a paragraph </p>
  • Các thẻ HTML có thể được phân thành hai loại: thẻ đóng và thẻ không đóng. Thẻ đóng có một thẻ đóng tương ứng, trong khi thẻ không đóng không có thẻ đóng tương ứng. Ví dụ: <p> This is a paragraph </p> là một thẻ đóng, trong khi <br> là một thẻ không đóng.

III. Thẻ khối và thẻ nội tuyến

Các thẻ HTML có thể được nhóm thành các thẻ khối và các thẻ nội tuyến. Các thẻ khối bắt đầu trên một dòng mới và chiếm toàn bộ chiều rộng của trình duyệt, trong khi các thẻ nội tuyến không bắt đầu trên một dòng mới và chỉ chiếm một phần của chiều rộng của trình duyệt. Ví dụ: <p> là một thẻ khối, trong khi <b> là một thẻ nội tuyến.

Có 2 kiểu giá trị hiển thị chính : block và inline.

Block-level elements (thẻ khối) :

Một block-elements luôn bắt đầu trên một dòng mới và Browser tự động thêm khoảng trắng (margin) và trước và sau phần tử đó. Nó luôn chiếm toàn bộ chiều rộng có sẵn. 2 block-elements thường dùng là : <p> và <div>.

Inline elements (thẻ nội tuyến) :

Một Inline elements không bắt đầu trên một dòng mới. Nó chỉ chiếm chiều rộng cần thiết. Một phần tử inline không thể chưa phần tử block.

  • <div> là một thẻ khối, nó được sử dụng để nhóm các phần tử HTML lại với nhau. Nó không có bất kỳ ý nghĩa đặc biệt nào. Nó thường được sử dụng để tạo các nhóm phần tử CSS để áp dụng các kiểu CSS cho các phần tử đó. Ví dụ: <div> This is a div </div>
  • <span> là một thẻ nội tuyến, nó được sử dụng để nhóm các phần tử HTML lại với nhau. Nó không có bất kỳ ý nghĩa đặc biệt nào. Nó thường được sử dụng để tạo các nhóm phần tử CSS để áp dụng các kiểu CSS cho các phần tử đó. Ví dụ: <span> This is a span </span>

IV. Các thẻ liên quan đến table trong HTML

  • <table> là một thẻ khối, nó được sử dụng để tạo một bảng. Nó có thể chứa một hoặc nhiều thẻ <tr>. Ví dụ: <table> This is a table </table>
  • <tr> là một thẻ khối, nó được sử dụng để tạo một hàng trong bảng. Nó có thể chứa một hoặc nhiều thẻ <td>. Ví dụ: <tr> This is a table row </tr>
  • <td> là một thẻ nội tuyến, nó được sử dụng để tạo một ô trong bảng. Nó có thể chứa một hoặc nhiều thẻ <p>. Ví dụ: <td> This is a table cell </td>
  • <th> là một thẻ nội tuyến, nó được sử dụng để tạo một ô trong bảng. Nó có thể chứa một hoặc nhiều thẻ <p>. Nó khác với thẻ <td> ở chỗ nó được sử dụng để tạo một ô tiêu đề trong bảng. Ví dụ: <th> This is a table header </th>
ảnh minh hoạ 7

  • <img> là một thẻ nội tuyến, nó được sử dụng để chèn một hình ảnh vào trang web. Nó không có thẻ đóng tương ứng. Ví dụ: <img src="image.jpg" alt="Image">
<img src="url" alt="alternatetext">
  • <video> là một thẻ khối, nó được sử dụng để chèn một video vào trang web. Nó có thể chứa một hoặc nhiều thẻ <source>. Ví dụ: <video> This is a video </video>
  • <source> là một thẻ nội tuyến, nó được sử dụng để chỉ định một nguồn video. Nó không có thẻ đóng tương ứng. Ví dụ: <source src="video.mp4" type="video/mp4">
  • <audio> là một thẻ khối, nó được sử dụng để chèn một âm thanh vào trang web. Nó có thể chứa một hoặc nhiều thẻ <source>. Ví dụ: <audio> This is an audio </audio>
  • <source> là một thẻ nội tuyến, nó được sử dụng để chỉ định một nguồn âm thanh. Nó không có thẻ đóng tương ứng. Ví dụ: <source src="audio.mp3" type="audio/mp3">
  • <a> là một thẻ nội tuyến, nó được sử dụng để tạo một liên kết đến một trang web khác. Nó có thể chứa một hoặc nhiều thẻ <img>. Ví dụ: <a href="https://www.google.com"> This is a link </a>
<a href="url">link text</a>
  • attributes quan trọng nhất của thẻ là “href”, nó cho biết đích đến của link.
  • Target attribute :
    • _self : mở tài liệu cùng cửa sổ khi nhấn link.
    • _blank : mở tài liệu ở cửa sổ mới.
    • _parent : mở tài liệu trong khung chính.
    • _top : mở tài liệu trong toàn bộ cửa sổ.

VI. Section elements: div, span, header, footer, nav, main, section, article

https://www.w3schools.com/html/img_sem_elements.gif
  • <div> là một thẻ khối, nó được sử dụng để nhóm các phần tử HTML lại với nhau. Nó không có bất kỳ ý nghĩa đặc biệt nào. Nó thường được sử dụng để tạo các nhóm phần tử CSS để áp dụng các kiểu CSS cho các phần tử đó. Ví dụ: <div> This is a div </div>
  • <span> là một thẻ nội tuyến, nó được sử dụng để nhóm các phần tử HTML lại với nhau. Nó không có bất kỳ ý nghĩa đặc biệt nào. Nó thường được sử dụng để tạo các nhóm phần tử CSS để áp dụng các kiểu CSS cho các phần tử đó. Ví dụ: <span> This is a span </span>
  • <header> là một thẻ khối, nó được sử dụng để tạo một tiêu đề cho trang web hoặc một phần của trang web. Ví dụ: <header> This is a header </header>
  • <footer> là một thẻ khối, nó được sử dụng để tạo một chân trang cho trang web hoặc một phần của trang web. Ví dụ: <footer> This is a footer </footer>
  • <nav> là một thẻ khối, nó được sử dụng để tạo một thanh điều hướng cho trang web hoặc một phần của trang web. Ví dụ: <nav> This is a nav </nav>
  • <main> là một thẻ khối, nó được sử dụng để tạo một phần chính của trang web. Ví dụ: <main> This is a main </main>
  • <section> là một thẻ khối, nó được sử dụng để tạo một phần của trang web. Ví dụ: <section> This is a section </section>
  • <article> là một thẻ khối, nó được sử dụng để tạo một bài viết. Ví dụ: <article> This is an article </article>

VII. HTML text fundamentals: h1 -> h6, p, ul, li

ảnh minh hoạ 8
  • <h1> là một thẻ khối, nó được sử dụng để tạo một tiêu đề lớn nhất cho trang web hoặc một phần của trang web. Ví dụ: <h1> This is a heading </h1>
  • <h2> là một thẻ khối, nó được sử dụng để tạo một tiêu đề lớn hơn <h1> cho trang web hoặc một phần của trang web. Ví dụ: <h2> This is a heading </h2>
  • …
  • <p> là một thẻ khối, nó được sử dụng để tạo một đoạn văn bản. Ví dụ: <p> This is a paragraph </p>
  • <ul> là một thẻ khối, nó được sử dụng để tạo một danh sách không có thứ tự. Nó có thể chứa một hoặc nhiều thẻ <li>. Ví dụ: <ul> This is an unordered list </ul>
  • <li> là một thẻ khối, nó được sử dụng để tạo một mục trong danh sách. Nó có thể chứa một hoặc nhiều thẻ <p>. Ví dụ: <li> This is a list item </li>
  • <ol> là một thẻ khối, nó được sử dụng để tạo một danh sách có thứ tự. Nó có thể chứa một hoặc nhiều thẻ <li>. Ví dụ: <ol> This is an ordered list </ol>
ảnh minh hoạ 9

VIII. Các thẻ liên quan đến form: form, input, button, label, textarea

  • <form> là một thẻ khối, nó được sử dụng để tạo một biểu mẫu. Nó có thể chứa một hoặc nhiều thẻ <input>, <button>, <label>, <textarea>. Ví dụ: <form> This is a form </form>
  • <input> là một thẻ nội tuyến, nó được sử dụng để tạo một trường nhập liệu. Nó không có thẻ đóng tương ứng. Ví dụ: <input type="text">
  • <button> là một thẻ nội tuyến, nó được sử dụng để tạo một nút. Nó có thể chứa một hoặc nhiều thẻ <img>. Ví dụ: <button> This is a button </button>
  • <label> là một thẻ nội tuyến, nó được sử dụng để tạo một nhãn cho một trường nhập liệu. Nó có thể chứa một hoặc nhiều thẻ <input>. Ví dụ: <label> This is a label </label>
  • <textarea> là một thẻ khối, nó được sử dụng để tạo một trường nhập liệu dài. Nó không có thẻ đóng tương ứng. Ví dụ: <textarea> This is a textarea </textarea>
  • <select> là một thẻ khối, nó được sử dụng để tạo một trường nhập liệu dạng danh sách thả xuống. Nó có thể chứa một hoặc nhiều thẻ <option>. Ví dụ: <select> This is a select </select>
  • <option> là một thẻ khối, nó được sử dụng để tạo một mục trong danh sách thả xuống. Nó không có thẻ đóng tương ứng. Ví dụ: <option> This is an option </option>
ảnh minh hoạ 11

IX. Có thể tìm hiểu các thẻ khác ngoài các thẻ trên các thẻ trên

  • <br> : Xuống dòng
  • <hr> : Thẻ ngang
  • <i> : In nghiêng
  • <b> : In đậm

Review VPS tại Hosthatch.com, VPS chất lượng tốt giá rẻ gần Việt Nam

Link trải nghiệm

Sau khi trải nghiệm nhiều dịch vụ VPS có location ở gần Việt Nam, mình thấy đa số giá cả khá đắt, không phù hợp với budget sinh viên của mình lắm. Sau một thời gian tìm hiểu, và xem đánh giá tại https://www.vpsbenchmarks.com/, mình có tìm thấy một bên mới có giá cả khá oke với location Hongkong là Hosthatch

image 5 - quochung.cyou PTIT

Giá cả phải chăng cho chất lượng

Hosthatch có cả server Sing, Tokyo ngoài HongKong.

image 8 - quochung.cyou PTIT

Với mức giá khá phải chăng, khoảng 270-280k cho gói NVME 12G ram, 4 Core và 50GB NVMe (Không phải ssd nhé). Với mức giá này ở một số bên tại Việt Nam như Ftech, Vietnix chỉ có khoảng 2G ram, 1 core với cấu hình tương tự.

VPS hiếm hoi có location ở Hong Kong

Như bạn đã biết location Hong Kong rất gần Việt Nam. Do vậy không có gì ngạc nhiên khi website lưu trữ ở vị trí này có tốc độ truy cập từ Việt Nam rất tốt. Thậm chí không kém gì với location trong nước.

Một lợi thế khác của Location Hong Kong: 

Tính ổn định cao khi đứt cáp xảy ra.

Khi sử dụng dịch vụ hosting của các nhà cung cấp nước ngoài, bạn luôn lo lắng về đứt cáp xảy ra phải không?

Location Hong Kong thường ít bị ảnh hưởng bởi sự cố đứt cáp. Location Nhật Bản, Singapore thường bị ảnh hưởng nhiều hơn. 

image 6 - quochung.cyou PTIT

​Setup sử dụng, cài đặt VNC Server để điều khiển như Remote Desktop

hosthatch console - quochung.cyou PTIT
Hosthatch cung cấp một trang điều khiển dạng như trên

Có vài option hdh sẵn để lựa chọn, đa số là các bản phổ biến như Ubuntu, Debian, ….

Hosthatch sẽ cung cấp root password, sau đó bạn có thể ssh vào vps theo lệnh

ssh root + @ + ipaddress

Thông thường mình sẽ cài luôn vnc lên vps để tiện điều khiển, nếu muốn một giao diện để sử dụng VPS cho dễ, các bạn có thể làm theo các bước sau sau khi ssh

Cài đặt Desktop và VNC Server

Desktop: xfce4

sudo apt update 
sudo apt install xfce4 xfce4-goodies
sudo apt install tightvncserver
vncserver

Lúc này bạn sẽ được hỏi đặt mật khẩu, bạn tạo mật khẩu nữa là xongật

Output
You will require a password to access your desktops.

Password:
Verify:

Mật khẩu chỉ được dài 6-8 kí tự, nếu bạn nhập dài hơn nó sẽ tự động cắt ngắn

Output
Would you like to enter a view-only password (y/n)? n
xauth:  file /home/sammy/.Xauthority does not exist

New 'X' desktop is your_hostname:1

Creating default startup script /home/sammy/.vnc/xstartup
Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log

Sau khi xong sẽ có thông báo dạng như sau

Bây giờ bạn có thể dùng một số phần mềm như https://www.realvnc.com/en/connect/download/viewer/ để kết nối với IP:5901 và sử dụng

xfce vnc - quochung.cyou PTIT

Đánh giá chung

Ưu điểm

  • Giá cả phải chăng, rẻ so với thị trường. Cấu hình cũng khá mạnh tương xứng
  • Có nhiều server gần Việt Nam như Hongkong, Sing với đường truyền tốt
  • Cài đặt nhanh, dễ dùng, ít downtime

Nhược điểm

  • Ít được biết đến, lúc mới mua xong mình loay hoay mãi mới cài được các thứ. Trong khi ở bên khác thì cài đặt và làm tiện nhanh hơn
  • Customer Support khá vô dụng, nhắn kĩ thuật có khi 1 tuần mới rep. Và theo nhiều review thì nếu nhắn quá gắt có thể bị khoá tài khoản luôn

Khắc phục lỗi Encryption unsuccessful của Android Emulator trong Android Studio

Screenshot 2023 03 13 233119 - quochung.cyou PTIT

Đây là một lỗi xảy ra khi phân vùng /data của Android không thể được giải mã bởi hệ thống khiến dữ liệu không truy cập được.

Cách 1: Xoá dữ liệu hệ thống của máy

  • Truy cập vào Tools -> Android -> AVD Manager -> Actions (triangle down) -> Wipe Data
  • Cách này sẽ xoá toàn bộ dữ liệu gốc của máy, nên các dữ liệu được mã hoá sẽ bị xoá hết và việc truy cập máy sẽ hoàn toàn mới và bình thường
image 8 - quochung.cyou PTIT

Cách 2: Cold Boot

Một số trình Android Studio mới hỗ trợ Quick Boot – Một cách bật máy ảo nhanh và chạy lại tiến trình trước đó nhanh chóng giúp quá trình lập trình ứng dụng diễn ra nhanh hơn. Cold Boot là một cách bật máy từ ban đầu và có thể khắc phục một số lỗi như trên

  • Khởi chạy Cold Boot chay: AVD Manager -> Select device -> Cooled Boot Now
  • Đặt mặc định Cold Boot: AVD Manager -> Select device -> Edit -> Advanced -> Boot option: Cool Boot

Khắc phục Arch Manjaro KDE bị giật lag, đơ màn hình và tác vụ

Sơ lược về Linux

Ten reasons why we should use Linux - Open Source For You

Mô hình Linux hệ điều hành có thể được tìm thấy trong mọi thứ, từ điện thoại thông minh đến ô tô, siêu máy tính đến thiết bị gia dụng, máy tính gia đình cho đến máy chủ doanh nghiệp. Kể từ giữa những năm 1990, Linux đã phát triển thành cơ sở người dùng toàn cầu. Nó cũng cung cấp phần lớn Internet, 500 siêu máy tính hàng đầu và thị trường chứng khoán thế giới. Ngoài việc là nền tảng được lựa chọn để chạy PC, máy chủ và hệ thống nhúng trên toàn thế giới, Linux còn là một trong những hệ điều hành đáng tin cậy, an toàn và không lo lắng nhất có thể truy cập được. Giống như Windows, iOS và Mac OS, Linux là một hệ điều hành. Trên thực tế, một trong những nền tảng phổ biến nhất thế giới, Android, được hỗ trợ trên hệ điều hành Linux. Linux có nhiều loại để đáp ứng mọi nhu cầu của người dùng. Bạn sẽ tìm thấy một “biến thể” của Linux phù hợp với nhu cầu của mình, cho dù bạn là người dùng mới bắt đầu hay người dùng thành thạo. Các phiên bản như vậy được gọi là bản phân phối (hoặc “bản phân phối”). Hầu hết mọi bản phân phối Linux đều có thể được tải xuống miễn phí, ghi vào đĩa (hoặc cài đặt trên ổ đĩa flash USB) và sử dụng trên bao nhiêu máy tùy thích. Chúng tôi sẽ nói về Manjaro Linux trong bài đăng này.

Manjaro Linux là gì

Manjaro - Wikipedia

Manjaro thân thiện với người dùng, mã nguồn mở hệ điều hành. Manjaro lý tưởng cho cả người mới và người dùng máy tính có kinh nghiệm, cung cấp tất cả các lợi ích của phần mềm tiên tiến kết hợp với việc nhấn mạnh vào việc bắt đầu nhanh chóng, các công cụ tự động ít cần tương tác thủ công và hỗ trợ dễ dàng khi cần thiết. Ngược lại với các hệ điều hành độc quyền, bạn có toàn quyền kiểm soát phần cứng của mình. Do đó, Manjaro là một hệ điều hành mạnh mẽ, tuyệt vời để sử dụng tại nhà, tại doanh nghiệp và trong các môi trường phát triển. Nhiều chương trình Windows phổ biến có thể được chạy qua Steam bằng phần mềm tương thích như Wine, PlayonLinux hoặc Proton. Các mẫu được cung cấp ở đây không có nghĩa là đầy đủ! Manjaro là sự thỏa hiệp lý tưởng cho những người tìm kiếm hiệu suất cao, khả năng kiểm soát hoàn toàn và phần mềm tiên tiến đồng thời duy trì một mức độ ổn định phần mềm nhất định.

Sửa lỗi giật lag

1. Ananicy

https://aur.archlinux.org/packages/ananicy-cpp

Anacity là một daemon sẽ điều chỉnh độ ưu tiên của các tác vụ để đem lại cảm giác mượt mà hơn cho các tác vụ mà người dùng thường dùng.

2. Tăng độ phản hồi của hệ thống khi ở ram hết

Trên các máy Linux truyền thống, khi hệ thống bắt đầu sử dụng hết ram của máy tính, khả năng phản hồi của toàn bộ hệ thống sẽ bị giảm dần và sẽ đến mức gần như đơ cứng và không thể sử dụng được. Lúc này các trình diệt OOM (OOM-Killer) sẽ xuất hiện và tự động đóng các ứng dụng cho đến khi giải phóng một bộ nhớ đủ lớn để hệ thống bình thường trở lại.

Một số trình OOM-Killer:

  • systemd-oomd — Provided by systemd as systemd-oomd.service that uses cgroups-v2 and pressure stall information (PSI) to monitor and take action on processes before an OOM occurs in kernel space.
https://github.com/systemd/systemd, systemd-oomd(8) || systemd
  • earlyoom — Simple userspace OOM-killer implementation written in C.
https://github.com/rfjakob/earlyoom || earlyoom
  • oomd — OOM-killer implementation based on PSI, requires Linux kernel version 4.20+. Configuration is in JSON and is quite complex. Confirmed to work in Facebook’s production environment.
https://github.com/facebookincubator/oomd || oomdAUR
  • nohang — Sophisticated OOM handler written in Python, with optional PSI support, more configurable than earlyoom.
https://github.com/hakavlad/nohang || nohang-gitAUR
  • low-memory-monitor — GNOME developer’s effort that aims to provides better communication to userspace applications to indicate the low memory state, besides that it could be configured to trigger the kernel OOM-killer. Based on PSI, requires Linux 5.2+.
https://gitlab.freedesktop.org/hadess/low-memory-monitor/ || low-memory-monitor-gitAUR
  • uresourced — A small daemon that enables cgroup based resource protection for the active graphical user session.
https://gitlab.freedesktop.org/benzea/uresourced || uresourcedAUR

3. Sử dụng bộ nhớ swap

Swap hay còn được gọi là RAM ảo được sử dụng để hỗ trợ lưu trữ dữ liệu khi bộ nhớ vật lý (RAM) đã đầy. Đôi khi SWAP cũng được dùng song song để tăng dung lượng bộ nhớ đệm. SWAP thường dùng trên các hệ điều hành Linux, Ubuntu hoặc CentOS. 

Trường hợp đầy RAM, Swap sẽ được hệ thống dùng làm bộ nhớ thay thế. Tuy nhiên, tốc độ của nó chậm hơn rất nhiều so với ổ cứng vật lý.

Swap là gì? Tổng quan về swap - CloudCraft

Một trong những trường hợp quan trọng cần đến Swap là khi RAM đầy. Theo đó, Swap sẽ hạn chế các sự cố liên quan đến vấn đề bảo mật thông tin, nhất là trong hệ thống điều hành Linux.Có thể hiểu một cách đơn giản là: bạn không bao giờ có thể lường trước được dung lượng bộ nhớ cho tất cả chương trình trên hệ điều hành. Vì vậy, khi sự cố xảy ra (đầy RAM), Swap sẽ làm nhiệm vụ duy trì tất cả các hoạt động bình thường dù tốc độ có phần chậm hơn thay vì dừng cả hệ thống khiến thông tin dễ bị rò rỉ.

Swap rất cần thiết trong các hệ điều hành phổ biến hiện nay. Tuy nhiên khi nào bạn cần đến nó?

  • Khi dùng một phần mềm yêu cầu hệ thống có hỗ trợ bộ nhớ Swap trong phần cài đặt (ví dụ: Oracle).Khi muốn hoạt động của hệ thống ổn định hơn, đặc biệt quan trọng đối với các hệ thống không có nhiều dung lượng RAM.Nếu bạn đang dùng Ubuntu, hệ điều hành này sẽ yêu cầu Swap cho chế độ ngủ đông.

Để kiểm tra bạn đang có bộ nhớ swap nào hoạt động không

$ swapon --show 

Tạo một partition mới để làm swap

Bạn có thể dùng GParted hoặc một số trình partition để tạo một partition mới. Bộ nhớ của partition sẽ là dung lượng ram của swap, thông thường bạn có thể dùng 4G-10G.

sudo mkswap /dev/sda3
//Chuyển partition /dev/sda3 thành partition sử dụng cho swap 

sudo swapon /dev/sda3
//Bật swap cho /dev/sda3

sudo bash -c "echo UUID=$(lsblk -no UUID /dev/sda3) none swap defaults 0 0 >> /etc/fstab"
//Bật swap tự động khi hệ thống lên

Tìm hiểu về Java Swing

  1. Java Swing
  1. Định Nghĩa
  • Swing trong Java là một bộ công cụ Giao diện Người dùng Đồ họa (GUI) bao gồm các thành phần GUI. Swing cung cấp một bộ widget và gói phong phú để tạo ra các thành phần GUI tinh vi cho các ứng dụng Java. Swing là một phần của Java Foundation Classes (JFC), là một API để lập trình Java GUI cung cấp GUI.
  • Thư viện Java Swing được xây dựng dựa trên Bộ công cụ tiện ích con trừu tượng Java ( AWT ), một bộ công cụ GUI phụ thuộc vào nền tảng cũ hơn. Bạn có thể sử dụng các thành phần lập trình GUI đơn giản của Java như nút, hộp văn bản, v.v., từ thư viện và không phải tạo các thành phần từ đầu. Tuy nhiên, nó lại khác với AWT ở chỗ bộ công cụ này thuộc loại nền tảng độc lập, bao gồm các thành phần nhẹ và phức tạp hơn AWT.
  • Gói javax.swing cung cấp các lớp cho java swing API như JButton, JTextField, JTextArea, JRadioButton, JCheckbox, JMenu, JColorChooser, etc..
  1. Sử dụng
  • Java Swing được dùng để hỗ trợ tạo giao diện đồ hoạ người dùng (với Java).
  • Bộ công cụ này cung cấp các bộ điều khiển nâng cao như thanh trượt, colorpicker, Tree, TabbedPane và bảng điều khiển,..
  • Swing có những đặc điểm:
    • Độc lập với thiết bị.
    • Có thể tuỳ chỉnh, mở rộng.
    • Khá nhẹ.
    • Có thể cấu hình.

Các lớp và phân tầng Java Swing

EuTjh3a 8PoWdTXJVM4T2SEgYdJ1TqZVyiul2rMB 43nq 2PRiquBGzFlJd7sY yrMfU QK4oV37CjX16dP8xoG4Vu80hbre9sEWncuHmQU 7ji6LV ciPzBeM8PCz07txDiiaj6 D6 - quochung.cyou PTIT
  1. Các phương thức thường gặp ở lớp Component
Phương thứcMô tả
public void add(Component c)thêm một thành phần vào thành phần khác.
public void setSize(int width, int height)thiết lập kích thước của thành phần.
public void setLayout(LayoutManager m)thiết lập trình quản lý bố cục (layout) cho thành phần.
public void setVisible(boolean b)thiết lập khả năng hiển thị của thành phần. Nó theo mặc định là false (ẩn)
  1. Một số thành phần cơ bản
  1. JButton – Nút bấm
  • Nó được dùng để tạo ra một nút (button) có tên.
  • Việc sử dụng ActionListener sẽ dẫn đến một số hành động khi nút được nhấn.
  • Nó kế thừa lớp AbstractButton và độc lập với nền tảng.
I3sqx7ZizTt9ffnn0TVuacA2U1IMvRKhl ElXMr7fufQX6mu5fvImqgoTcK yGrHhvabR VBjDAL33B9qfE5r3ljqII676mn4RggTzYc0yRp - quochung.cyou PTIT
aKLIgPeLYlZzwA7WHFkLFOAO0uevX9mTYj237Ekjv18xPM QXIT0GBjt1FG9kBwQMQ ZO30H O2xehKKJvdX7rrNxuAxZV1ivVLkMU6uZ8o - quochung.cyou PTIT
  1. JTextField – Ô nhập
  • Nó kế thừa lớp JTextComponent và dùng để cho phép chỉnh sửa dòng đơn.
lQifr0kdtWBN8HY8S2cEUUWgKSOgr2 UyjfM6 rwmB6FThsklWGYS4xTBlmj kF9Vo3qXzl3 - quochung.cyou PTIT
UQScS xfvadwIljc0eawqsj3K5ME8upslkJRu7bXWWr6r5oWNSsh65XdgiRfulyu7jcIEWvNTrmLGzuHb1Q6V1qQf Q5fDshLF - quochung.cyou PTIT
  1. JScrollBar – Thanh cuộn
stM3 A6A04IhjAcpgFUJ37DPtzgFBRwHa gRpGtsKdVWt0b pHRF8ROR PdUsGUH ch0P2jyd91vR5eLBLgKEshklJG9dQge h3mgLGHIQBRn9wamYJF5cyI7mEimfqKjbTPiUdfEkNC - quochung.cyou PTIT
6zUcf5EZ0 kVtwUwUtHhMkTJRJMTDT8YQ7suA Ll6NDfHGOF0w4KcSjm4 - quochung.cyou PTIT
  1. JPanel – Thành phần chứa
  • Kế thừa lớp JComponent, cung cấp không gian cho một ứng dụng (có thể đính kèm bất kỳ thành phần nào khác).
QDeyI0HLhpiJQ0e87sttI34thu3F9DQH06 B2139HWnYjyGcMNx7XphboGbigmj8VAzkpRfOVsfV3QinM3oHmoBPlvPQzrayNw3AHzll6OnCFkHf67DaGl5uufA0 Q4IM8HWT0qlDZ5a - quochung.cyou PTIT
N b7R WACr JXwBGSqHd5KQOM8 s FCWysliktl1riOaEAiEBalFrlYYnkA7PEi r ZEL XL7M6 ff8f dNR6bLLDWu4PIVtVbmA8 TxLcRzFHUv K1iSfbmpw7PJFmhWwctCQuDQz5u - quochung.cyou PTIT
  • JMenu – Tạo menu
- quochung.cyou PTIT
Ac 89GgO1kGNni6rmV8Xw s7i2z5EPpIT34gEaELgDEnF0M5zolv7Xw 2hm9KWnS3q2 Ie1mm2Hm GNA3I4SSZGt61ikpCevEPLk8QRgO8VW At5DcRbL4wpoH1zpdYPkPRSvHorje - quochung.cyou PTIT
  • JList – Chứa danh sách
0pZpCe72qd7ylCDwqw5AW8OF37 p89nB0SoN74C9V6G6j02tsNvSJMqoKn4e6kaBApOU26u4 Zs1XpLoRpP I3v0yjUopIfBVCJRvdI4XwKN 0kdPsMB8qh7Wars3kWKy - quochung.cyou PTIT
BAnymKZ8nExl3pbZu5nN5V3odcCt frK0wqzoUd0 - quochung.cyou PTIT
  • JLabel – Vùng tiêu đề, chứa văn bản
- quochung.cyou PTIT
RA9XjSro1CdjqFw50fwWm3lDiS6BGp7e7UFOhF1kdhZRdTUFYbnZmpSC 4PnAjbKMr ki82BQzPkCoPQ1m M0QCuy96HEZbCpMZZZj72Au5x pqKwpaSEzJn6YYS35JLPgp8zON3HYlU - quochung.cyou PTIT
  • JComboBox – Menu lựa chọn
atRjeVfpNmYxmpwoEDcw4EJQP336OZtTeBWOqH8Mbf2Ic9IcR2IPC4wsd9H4AHEJgxsQjdDuKcCtqJ7wifjd7l7RxxZ2QVda1NE - quochung.cyou PTIT
kS lTUfDTWwP8WsDZtOoqdHzwv zrdLiu4SFBT TWoaIjCEoRrdXcegQbysqru1lAWNd7hnTxXYrAkPSmXMzCyXE5BDav XiJw1z3vVUGK4Lm zKSmd HHBGRmg5Cg0u 0AY GUqyeI3 - quochung.cyou PTIT