Python – Tạo timer count down với urwid (curses)

Từ khi sử dụng vim, ranger, mc,… và các ứng dạng TUI khác .Tôi bắt đầu yêu thích các ứng dụng dạng Text-base User Interface. Vì thế tôi quyết tìm hiểu về chủ để này.
Trong Python cung cấp cho ta thư viện chuẩn là curses. Thư viện này khá hay. Nhưng tất cả các widget bạn đều phải tự xây dựng lấy, cho nên hôm nay tôi xin giới thiệu urwid. urwid được xây dựng dựa trên curses, cung cấp cung cho bạn một số widget cần thiết. Nói cách khác urwid chính là bộ widget dành cho curses. Ngoài urwid còn có npyscreen.
Bạn có thể tham khảo trang chủ tại đây: http://urwid.readthedocs.org

Ở đây tôi sẽ tạo một chương trình đếm ngược thời gian đơn giản.

Ý tưởng:
– Tham số đầu vào tôi sẽ sử dụng tổng số giây.
– Sử dụng gtime và strftime của module time để convert từ giây -> dạng ‘H:M:S’
– Mỗi giây sẽ update và gọi 2 bước trên.
countdown
Continue reading “Python – Tạo timer count down với urwid (curses)”

Advertisements

myhtop – Monitor Mysql server status and process list

Chương trình này khá đơn giản, được viết bằng ngôn ngữ Python và sử dụng urwid để làm giao diện.

Chương trình dùng để theo dõi tình trạng của Mysql server và các process list. Các bạn có thể nhấn phím K để tắt process mình muốn.

Nếu bạn quan tâm đến ứng dụng nhỏ này thì hãy góp ý với mình nhé 🙂 .

  myhtop [option,]
        -h, --help      Show this message
        -p, --port      mysql port, default 3306
        -u, --user      Default root
        -p, --passwd    Default None
        -H, --host      Default localhost

Bạn có thể download tại: github.

Cài đặt bộ font Microsoft trên Ubuntu

Bạn có thể cài đặt bộ MS core font bằng lệnh:

sudo apt-get install ttf-mscorefonts-installer

Cách này khá đơn giản. Tôi xin giới thiệu thêm 1 trong 1001 cách khác :). Cách này cũng đơn giản thôi.

Chuẩn bị 1 máy ảo windows, bạn có sử dụng VirtualBox hoặc là VMWare đều được.

Fonts windows được chứa trong thư mục %systemroot%\Fonts. Bạn cần copy những file có đuôi *.ttf.

Video hướng dẫn:

Binary Search Using Bash Script

Chắc hẳn dân IT đều biết thuật toán tìm kiếm nhị phân rồi. Thay vì viết bằng C hay Python, tôi quyết định viết bằng bash cho nó máu 😀

#!/bin/bash

bsearch(){
    array=("$@")
    last_idx=$((${#array[@]} - 1))
    item=${array[last_idx]}
    unset array[last_idx]
    end=$((${#array[@]} - 1))
    _start=0
    mid=$(( (_start+end)/2  ))
    while [ $_start -le $end ];do
        if [ ${array[mid]} -eq $item ];then
            echo  $(( $mid+1 ))
            exit 1
        elif [ ${array[mid]} -gt $item  ];then
            end=$(( mid  - 1 ))
        else
            _start=$(( mid + 1 ))
        fi
        mid=$(( (_start+end)/2  ))
    done
    echo "-1"
}


arr=(1 4 6 8 9 10)
target=8
bsearch ${arr[@]} $target

Checksum md5 sha1 using Python

Khi các bạn download 1 tập tin gì đó về. Các trang web thường cung cấp cho chúng ta 1 checksum. Checksum đó có thể là md5 hoặc sha1. Việc kiểm tra checksum khá quan trọng, để kiểm tra xem tập tin có bị thay đổi gì không. Tối hôm qua tôi quyết định viết 1 script md5-checker hỗ trợ cả md5 và sha1 bạn có thể download tại github.com.

Các bạn cần import các thư viện cần thiết:

import hashlib
import threading

Một số hàm trong hashlib mà bạn cần chú ý:
hashlib.update() : cập nhật hash object với argv string.
hashlib.hexdigest() : băm ra dạng cơ số 16

Tiến hành băm tập tin, ở đây tôi sử dụng module threading nên tôi quyết định cho tất cả vào 1 class. Các bạn không nên sử hàm readlines bời vì nó sẽ đưa toàn bộ data trong file lên ram, làm hao tổn bộ nhớ, giảm hiệu suất. Để đọc file an toàn khuyến cáo nên dùng ‘with’, nó sẽ tự động đóng tập tin khi công việc kết thúc. Class HashFile trả về mã băm trong biến result. Ta lấy biến result đó so sánh với checksum nếu trùng nhau sẽ trả về True ngược lại trả về False.

class HashFile(threading.Thread):
    def __init__(self, fname, hash_type):
        super(HashFile, self).__init__()
        self.fname = fname
        self.hash_type = hash_type
        self.result = None
    def run(self):
        self.result =  self.hash_file().hexdigest()

    def hash_file(self):
        BLOCKSIZE = 65536
        hasher = getattr(hashlib, self.hash_type)()
        with open(self.fname, 'rb') as fin:
            buf = fin.read(BLOCKSIZE)
            while len(buf) > 0:
                hasher.update(buf)
                buf = fin.read(BLOCKSIZE)
        return hasher

Continue reading “Checksum md5 sha1 using Python”

WSUS On Windows Server 2008 R2

Trong hệ thống mạng chuyên nghiệp, nhu cầu cập nhật các bản vá lỗi cho Windows và các ứng dụng là hết sức cần thiết để hệ thống có thể hoạt động ổn định nhất có thể. Trên các phiên bản Windows đều có chức năng Automatic Update cho phép tự động tải và cài đặt các bản vá lỗi (hotfix) từ Server Microsoft Update. Tuy nhiên trong trường hợp hệ thống lớn có rất nhiều máy tính đề cập nhật từ Server Microsoft Update sẽ gây ra hiệu ứng xấu cho đường truyền Internet như tốn băng thông và chậm chạp. Giải pháp sử dụng một Server cập nhật các hotfix từ Server Microsoft Update để cung cấp cho tất cả các máy tính trong mạng là hết sức cần thiết. Vì thế mà WSUS ra đời.
Lab WSUS: