Skip to main content

Posts

Showing posts from 2020

Kiến trúc Docker, phỏng vấn, best practice

Bài này không giới thiệu về docker, "lúc nào rảnh" chắc sẽ có bài đó. Bài này nói về kiến trúc của docker, các công nghệ liên quan phía dưới mà docker sử dụng - thường có tác dụng lớn khi 1) chém gió lên mặt 2) phỏng vấn. Ngoài ra có kèm theo một số best-practice khi build docker image để có size nhỏ/build nhanh hơn. Photo by Andy Li on Unsplash Kiến trúc của Docker Docker là một phần mềm viết bằng Golang, theo kiến trúc client-server. Nghe hình thức thì vậy, mô hình này nham nhảm khắp nơi khi dùng các database: mysql sẽ có mysqld và mysql client (cli, GUI) ... redis có redis-server và redis-cli... Docker có dockerd và docker-cli.

bash, shopt và =, **

bash là UNIX shell được dùng nhiều nhất hành tinh này. bash có ở khắp mọi hệ điều hành Linux based, hay kể cả OSX/MacOS cho tới tháng 10 năm 2019 (khi Apple quyết định thay zsh làm shell mặc định trên MacOS) .  Sự thay đổi này của Apple khiến cho bạn nếu vẫn "chày cối" dùng bash sẽ gặp phải một số bất lợi nhất định (tất nhiên là khắc phục được). Trên MacOS, phiên bản của bash có sẵn rất cũ, vẫn là bash 3.X. Trong khi Ubuntu 18.04 đã dùng 4.4, còn Ubuntu 20.04 thì dùng hẳn bash 5.0.    Photo by Clement Chai on Unsplash Chuyện này hoàn toàn không phải vấn đề nếu người dùng macOS chủ động cài phiên bản bash mới nhất bằng brew . Cho đến một ngày có người hỏi: câu lệnh ls nào trên bash để liệt kê ra tất cả file .pyc trong tất cả các thư mục con hiện tại? Việc này hoàn toàn làm được với ` find . -name '*.pyc' -type f `, nhưng với ls thì??? 

Không cần jq nếu đã có python/ruby

jq trở thành công cụ "làm tất cả" với các sysadmin. Trong khi jq được dùng để "query JSON" - truy cập dữ liệu trong 1 đoạn JSON thì nó cũng được dùng để kiểm tra syntax của 1 đoạn JSON. JQ là gì $ whatis jq jq (1)               - Command-line JSON processor   Photo by Thanh Soledas on Unsplash   Nhưng nếu máy đã có python/ruby, hay các ngôn ngữ trang bị sẵn stdlib JSON, sẽ không cần phải cài gì thêm cả: File bad.json ví dụ, thử dùng mắt thường tìm xem nó sai ở đâu: {   "name": "@exercism/typescript",   "description": "Exercism exercises in Typescript.",   "private": true,   "repository": {     "type": "git",     "url": "https://github.com/exercism/typescript"   },   "devDependencies": {   }, }

grep không hỗ trợ \d và 3 mode regex trong grep

grep là công cụ thiết yếu của sysadmin, tác dụng cơ bản là tìm một mẫu string trong 1 file text.  Cái tên grep bắt nguồn từ câu lệnh g/re/p của chương trình ed > Its name comes from the ed command g/re/p (globally search for a regular expression and print matching lines) Biết thêm một chút regex sẽ tăng thêm sức mạnh. Ví dụ in ra shell của các user trên máy: $ grep -o '/bin/.*sh' /etc/passwd /bin/bash /bin/sh Photo by Percy Pham on Unsplash Một "pattern" phổ biến là tìm số, nếu đã từng lập trình dùng regex, thì \d không còn lạ gì để tìm số - code Python ngay trên CLI : $ echo '123ab45' | python3 -c ' > import re, sys > print(re.findall("\d+", sys.stdin.read()))' ['123', '45'] Nhưng thật bất ngờ, grep trên Ubuntu 18.04 không hỗ trợ pattern này: $ echo '123ab45' | grep -o '\d+' # không in ra gì 

[CLI/Python] find prune path - cắt giảm bài toán tìm kiếm 10 lần

`find` là câu lệnh dùng để tìm file dựa theo tên, vốn không kém tiếng "khó dùng", nhưng vẫn được dùng, do nó được cài sẵn ở mọi hệ điều hành Unixoid (Unix/Linux). find - huyền thoại Một lệnh find đơn giản để tìm các file .py trong thư mục /usr $ time -p find /usr/ -name '*.py' | wc -l 11013 real 0,39 user 0,15 sys 0,24 11013 file này gồm file từ nhiều thư mục khác nhau. $ time -p find /usr/ -name '*.py' | cut -f-3 -d '/' | sort | uniq -c | sort -nr | head    9286 /usr/lib    1644 /usr/share      78 /usr/src       5 /usr/local real 0,39 user 0,17 sys 0,24

Kỹ năng phỏng vấn

Phỏng vấn là hai từ mang yếu tố quyết định, nhưng ít khi được nhắc đến. Nó thường bị xem như sự may mắn, hay do "giỏi", hay quan hệ tốt ... Bài viết này giải đáp các thắc mắc thầm kín khi đi phỏng vấn xin việc, đặc biệt dành cho những người kiếm công việc lập trình đầu tiên. Phỏng vấn là gì? Khi muốn đi làm, một lập trình viên sẽ liên hệ với một công ty để "xin việc" nhằm có một công việc, được trả lương tại công ty đó, ở đây ví dụ là PAMA corp. PAMA corp sẽ cử một hoặc một nhóm người thực hiện việc "kiểm tra đầu vào". Sau quá trình kiểm tra, nếu phía PAMA corp đồng ý, phía lập trình viên đồng ý, sẽ ký một hợp đồng lao động, rồi lập trình viên đi làm, và được trả lương. Nộp "đơn xin việc" thế nào? Thông thường, tức không phải các trường hợp ngoại lệ như bị "săn" đón đi làm, hay có quan hệ được "giới thiệu" vào làm, thì: lập trình viên sẽ lên các trang tuyển dụng/tìm việc ( như PyJobs )/trang chủ của công ...

Luyện Linux command line với wargames Overthewire.org bandit

Các CLI (chương trình giao diện dòng lệnh) trên *NIX-OS vốn rất nhiều , mỗi câu lệnh cũng hàng đống các option khác nhau, khi tìm hiểu khó mà kiếm được "bài tập" để làm, luyện, hầu hết biết được đều do "kinh nghiệm từng trải" có được khi cần sử dụng mà ra. Trang web overthewire.org là 1 trang "wargames" để luyện chơi CaptureTheFlag (CTF) - một trò chơi ưa thích/phổ biến của giới hacker. Image by Gerd Altmann from Pixabay Trong các wargame trang này cung cấp, có mục bandit, vốn là phần dễ nhất, rất thích hợp làm bài tập luyện command line. Mỗi bài đều có hướng dẫn cần dùng câu lệnh gì (option cụ thể phải tự đọc manpage hay search mà tìm hiểu). https://overthewire.org/wargames/bandit/ Qua mỗi bài sẽ làm nhiệm vụ tìm ra password dể SSH vào bài sau. Yêu cầu duy nhất là biết SSH vào server. Ví dụ với bài 'bandit0', gõ:

disown, reptyr, nohup, tmux, screen - chạy job ở background

Khi chạy các câu lệnh command line, đặc biệt khi đang SSH vào server, ta thường nảy ra nhu cầu: cho câu lệnh tiếp tục chạy nhưng không cần phải kết nối vào server, hay tắt terminal đi. Cách làm truyền thống là dùng lệnh `nohup` (no hang up) khi gọi câu lệnh. Câu lệnh sẽ tiếp tục chạy dù tắt terminal hay thoát khỏi server. Cú pháp: nohup câu_lệnh_như_bình_thường Vấn đề ở chỗ: dùng nohup yêu cầu ta phải tính trước chuyện này, phải gõ nohup trước câu lệnh cần chạy, nếu nhỡ quên nohup mà đang chạy dở chừng thì làm sao? disown là giải pháp tmux/screen là giải pháp gián tiếp. disown là gì?

Grep, SilverSearcher (ag), RipGrep (rg) và file ẩn

Trên *NIX, một file được gọi là file ẩn (hidden file) khi tên của nó bắt đầu với dấu chấm (.). Các file phổ biến thường gặp là các file để cấu hình các phần mềm, ví dụ: .vimrc .bashrc .gitignore .gitlabci,yml ... Image by OpenClipart-Vectors from Pixabay Khi muốn tìm một từ khóa bất kỳ trong các file ở thư mục hiện tại, ta có thể dùng grep: grep -Rin noi_dung .  # dấu chấm đại diện cho thư mục hiện tại $ mkdir testdir; echo pika > testdir/.filepassword $ cd testdir/ $ grep -Rin pika . ./.filepassword:1:pika Một nhược điểm của grep so với các chương trình "hiện đại" hơn như SilverSearcher (ag) hay RipGrep (rg) là

Cài Unbound làm caching DNS resolver trên máy ảo OpenBSD 6.6

 DNS Server ( recursive name server) Người dùng máy tính đặc biệt ở Việt Nam đã từng biết đổi DNS để vào Facebook những ngày mạng còn "chậm". Những con số như 8.8.8.8 (Google DNS), 208.67.222.222 (OpenDNS) hay 1.1.1.1 (Cloudflare DNS) không còn lạ gì. Những địa chỉ IP này có chạy 1 DNS server làm nhiệm vụ trả lời IP tương ứng của các domain được hỏi. Ví dụ facebook.com có (những) IP là gì? $ nslookup facebook.com 8.8.8.8 Server:        8.8.8.8 Address:    8.8.8.8#53 Non-authoritative answer: Name:    facebook.com Address: 31.13.95.36 Name:    facebook.com Address: 2a03:2880:f102:83:face:b00c:0:25de authoritative name server vs recursive resolver Chương trình chạy ở 8.8.8.8 sẽ tìm địa chỉ IP tương ứng với domain facebook.com như bạn đã yêu cầu. Đây là một dịch vụ "trung gian", nó sẽ đi hỏi các "root nameservers" (.com, .org...) để tìm câu trả lời, bản thân nó không có câu trả lời. ...

Vagrant - vẫn là công cụ quản lý máy ảo tuyệt vời ở năm 2020

- What??? - Yeah!!! Vagrant không phải mới, không phải lạ, ra đời cỡ 10 năm trước hay hơn. Vagrant là gì / ˈveɪɡr(ə)nt/ A person without a settled home or regular work who wanders from place to place and lives by begging. Vagrant là công cụ để quản lý (tạo/bật/tắt) máy ảo, chạy ngon lành trên các hệ điều hành phổ biến. Vagrant là công cụ không thể thiếu của developer thời trước khi có Docker. Bạn có thể tạo một máy ảo nhanh nhất trong bao nhiêu phút? - Tải file ISO , vd Ubuntu - Cài Virtualbox, hay KVM hay VMWare - Cài máy ảo, format ổ đĩa, next next next ..., tùy vào từng hệ điều hành sẽ phải thao tác khác nhau. Hoặc đơn giản với vagrant: - Cài KVM hay Virtualbox hay VMWare - Chạy lệnh: vagrant init - Sửa file Vagrantfile vừa được tạo, thay box "base" bằng box mong muốn, ví dụ  "generic/ubuntu1804" (tìm các "box" trên https://vagrantcloud.com/search) - Chạy lệnh: vagrant up - Vagrant sẽ tải "box" về máy trong lần đ...

Service Discovery với Consul - từ con tới sồ

### Consul là gì https://www.consul.io/ Cách đọc: / ˈkänsəl/ /ˈkɑnsəl / - không phải con sun ``` $ apt-cache search consul | grep ^consul consul - tool for service discovery, monitoring and configuration ``` Consul là một phần mềm còn khá mới (bản 1.0 từ 2017 https://github.com/hashicorp/consul/tree/v1.0.0), được ra đời ban đầu như một giải  pháp cho "Service Discovery", kèm KeyValue storage. Sau này phát triển thêm nhiều tính năng khác như Service Mesh.   #### Service Discovery là gì

Gỡ các phần mềm cài sẵn trên điện thoại SamSung Galaxy - với Ubuntu

Nếu lỡ có mua một máy điện thoại SamSung, bạn sẽ chịu một cảm giác cực kỳ khó chịu khi máy có cài "giúp sẵn" một đống phần mềm mà thậm chí không có lựa chọn để gỡ (uninstall) trên máy: - Facebook: yup, không phải ai cùng muốn cài facebook trên điện thoại cả. - MS Office - MS LinkedIn - SamSung Bixby  thậm chí có cả Zalo hay Lazada mà mình chưa từng dám bấm vào, cũng không có option để gỡ đi. Không có sẵn không có nghĩa là không thể, và ta lại phải thò tay vào chọc. Trên Ubuntu 18.04, cài adb ( Android Debug Bridge) - một phần mềm không thể thiếu của lập trình viên Android, và cài rất dễ dàng qua apt-get: $ sudo apt-get install -y android-tools-adb android-tools-fastboot Cài xong sẽ gõ được lệnh adb:

Popular posts from this blog

Tài liệu và hướng dẫn học Python

Để tiết kiệm thời gian, tốt nhất là đi học PyMI Updated: 130617 Sau đây là các tài liệu khuyên dùng: Vì nhiều lý do, nên học python2.7 tại thời điểm hiện tại (giờ là tháng 6/2013 - muốn biết tại sao thì tự tìm hiểu) python 3.5+ (giờ là tháng 2/2017) Chuẩn bị: 1. biết bật tắt máy 2. biết cài python 3. tập gõ 10 ngón - gõ 2 ngón hay 1 ngón cũng không sao, nhưng 10 ngón là cách dễ nhất để gõ nhanh nhất. Tài liệu - Nên dùng tài liệu tại trang chủ của Python làm chính, tham khảo thêm các tài liệu khác tại http://www.familug.org/2016/12/free-ebook.html Căn bản, mới học 1.1 Python PyMI.vn https://pymi.vn/tutorial/ 1.2. Python offical tutorial kết hợp làm bài tập trên HackerRank  (đề bài bằng tiếng Anh, nhưng Google translate 1 lúc cũng ra vì có nhiều ví dụ mẫu đi kèm). Học viên của Pymi.vn có rất nhiều học viên đã tự học với Learn Python the hard way nhưng chưa thấy ai thành công cả. Hai link dưới nên đọc sau khi đã nắm được những phần cơ bản của ngôn ngữ pytho...

The PyMiers

New FAMILUG