Blog

FreeSoft: tải nhạc ở woim.net

thêm bởi z cách đây 40 phút

Lấy danh sách các tập tin .mp3 ở trang web nghe nhạc không lời http://woim.net/ bằng cách nào?

Tham khảo kịch bản Ruby: Woim :)

Tiếng Việt: Anh cả hay anh hai? sự sứt mẻ của lịch sử (2 bình luận)

thêm bởi tuonglientex cách đây 2 ngày  »  Bình chọn: 1/1

Bài viết này xin được làm rõ gốc tích, lai lịch sự khác biệt cách gọi người con đầu trong gia đình giữa hai miền Nam, Bắc. Vì liên quan đến nhiều vấn đề lịch sử nên nếu ai muốn nắm rõ hơn xin đọc thêm phần lai lịch Nam Bắc phân tranh trong lịch sử Việt Nam. Cũng nhân đây xin mạn phép trích tài liệu (chứ em độ này lười lắm) của cụ Trần Quốc Vượng - cuốn Trong Cõi (sách này chỉ ở Mỹ mới in, và có thể tìm được ở Việt Nam trong các web.):

"Lê - Trịnh - Nguyễn vốn đều quê xứ gốc Thanh:
  • Lê ở Thượng du (Nam Sơn),
  • Trịnh ở Trung du (Bồng Thượng), và
  • Nguyễn ở Hạ du (Gia Miên) của một lưu vực sông Mã.

Cả ba vốn là một ở buổi thịnh đầu Lê: Lê là ông chủ, là vua. Trịnh Nguyễn là đầy tớ, là bầy tôi, được nhà Lê cho nhiều quyền lợi, quyền hành và ruộng đất. Họ chành chọc nhau nhưng vẫn phò nhà Lê. Họ liên kết với nhau bằng quan hệ hôn nhân.

Rồi ở những "họ nhà quan" ấy, sự đời rất dễ biến "thông gia thành oan gia". Một cố đạo Tây sống ven biển xứ Thanh thế kỷ XVI đã viết trong một tài liệu rằng chính con rể (Trịnh Kiểm), đánh thuốc độc chết ông bố vợ (Nguyễn Kim) rồi đổ vạ đó cho một hàng tướng nhà Mạc là Dương Chấp Nhất. Bố vợ chết ít lâu thì con trai cả của bố vợ (Nguyễn Uông) cũng bị giết luôn.

Sự kiện sau càng góp phần khẳng định giả thuyết (của cố đạo) về cái chết của Thái Tổ Nguyễn Kim. Rút cục, ông Hai Nguyễn Hoàng phải cậy cục bà chị (Ngọc Bảo) xin với chồng (Trịnh Kiểm) cho mình vào làm trấn thủ Thuận Hoá (năm 1558).

Bắt đầu sự tách đôi Đàng Trong - Đàng Ngoài mà biểu tượng về mặt ngôn ngữ từ là sự tách phân Cả - Hai. Nửa nước phía Nam gọi người đứng đầu là "Hai" chứ không phải là "Cả", "Trưởng" như ngoài Bắc nữa, theo lời dẫn dụ của các cố đạo Tây, cũng bởi vì họ là chúa Chúa (Nguyễn) ở Đàng Trong mở đầu bằng ông Hai Hoàng vì ông Cả Uông đã bị giết và vì thế từ chúa đến quan rồi dân (đây là một ảnh hưởng "xuôi" từ dân "lên" triều đình) đều kiêng kỵ việc gọi tên ông "Cả", "anh Cả", "chị Cả"... và nhất thiết bắt đầu bằng "Hai", phong tục đó đến nay còn tồn tại theo quán tính.

Thoạt kỳ thuỷ, đấy chỉ là một sự trốn tránh, một sự chạy trốn để bảo toàn tính mạng của ông Hai Hoàng. Trốn từ xứ Thanh vào dinh Ái Tử, trị sở của xứ Thuận Hoá xưa."

Tiếng Việt: trình độ văn hóa / học vấn (5 bình luận)

thêm bởi z cách đây 4 ngày

Hôm trước, mình dự một buổi nói chuyện nhỏ, trong đó người tham gia phải điền các thông tin đăng ký, trong đó lại có mục trình độ văn hóa. Người hướng dẫn nói một chặp, bảo ghi vào đó nào là lớp 6/12, hoặc ghi Đại học,...; nói chung, là có nhầm lẫn giữa "trình độ học vấn" và "trình độ văn hóa".

Bởi vì có một quy ước mình rút ra từ việc điền các mẫu đơn, tờ kê khai, danh hiệu thi đua, là: trình độ văn hóa thì ghi 6/12, 9/12 và tối đa là 12/12, còn trình độ học vấn là: Đại học, Thạc sỹ, Cao đẳng,... Nếu bạn ghi "Đại học" vào chỗ trình độ văn hóa, thì có người có thể cự lại bạn. Bởi đó là quy ước, phải tuân theo.

Còn thực tế, phân biệt giữa hai cụm từ đó ra sao?

Tìm kiếm trên mạng một chặp, có một ví dụ rất dễ hiểu thế này: một anh chàng bảnh bao, tốt mã, một cụ già và một anh công nhân trên cùng một xe buýt. Cụ già là người lên xe sau cùng trong chuyến xe chật chội. "Anh chàng" thì ngoảnh mặt quay lơ, còn anh "công nhân" thì đứng lên nhường chỗ cho cụ. Nhận xét: Anh "công nhân" là người có văn hóa.

"Trình độ văn hóa" không thể nào lượng hóa được, trong khi "học vấn" thì có thể đong đếm bằng con số, bằng cấp. Tôi học hết 12/12, 16/16 (đại học),...; nhưng tôi vẫn có thể có "trình độ văn hóa" thấp. Hai khái niệm đó, như là "chất" và "lượng" trong một con người vậy. Và trên giấy tờ thì chỉ nên khai cho mục "trình độ học vấn".

Còn bạn, bạn hiểu thế nào về sự phân biệt giữa hai khái niệm đó?

FreeSoft: squidGuard tricks firefox and squid 2.7

thêm bởi z cách đây 7 ngày

I have a local caching proxy that uses Squid 2.7. I also use squidGuard to block http://ssl.google-analytics.com and https://ssl.google-analytics.com because I don't want Google to track my activities.

The problem was that I couldn't access to https://gmail.com/. Using Firefox's tool, I found that when Firefox loaded https://gmail.com/, it waited for the file https://ssl.google-analytics.com/ga.js until the session's expired. Please note that the accessing to non-secure file (http://ssl.google-analytics.com/ga.js) was normal.

--

I used curl to get the following verbose information

$ curl -v --proxy localhost:3128 https://ssl.google-analytics.com/

* About to connect() to proxy localhost port 3128 (#0)
*   Trying 127.0.0.1... connected
* Connected to localhost (127.0.0.1) port 3128 (#0)
* Establish HTTP proxy tunnel to ssl.google-analytics.com:443
> CONNECT ssl.google-analytics.com:443 HTTP/1.1
> Host: ssl.google-analytics.com:443
> User-Agent: curl/7.19.7
> Proxy-Connection: Keep-Alive
>
< HTTP/1.0 504 Gateway Time-out
< Server: squid
< Date: Sat, 13 Mar 2010 10:27:24 GMT
< Content-Type: text/html
< Content-Length: 1112
< X-Squid-Error: ERR_DNS_FAIL 0
<
* Received HTTP code 504 from proxy after CONNECT
* Closing connection #0
curl: (56) Received HTTP code 504 from proxy after CONNECT

As reported, this was a DNS problem. This was so strange as my dns resolver works well and it can resolve ssl.google-analytics.com within 1 seconds. I tried to modify dns settings in squid.conf but I still got the same problem.

I used a special log_format in Squid setting and found that Squid was tricked:

127.0.0.1 - - [13/Mar/2010:17:29:44 +0700] "(127.0.0.2) CONNECT localhost:443 HTTP/1.1" 200 3954 TCP_MISS:DIRECT
127.0.0.1 - - [13/Mar/2010:17:29:54 +0700] "(-) CONNECT ssl.google-analytics.com:443 HTTP/1.1" 404 0 TCP_MISS:DIRECT
                                            ^^^
                                      squid was tricked

The first line shows that Squid connected successfully to my site https://localhost/ (IP: 127.0.0.1), and the second line shows that ssl.google-analytics.com was mapped to an undefined address. Because - isn't an valid IP address, Squid failed to fetch contents. And Firefox was tricked too.

I don't know much how SquidGuard and squid work together, but I think that squidGuard fed squid with a very bad stuff :P. I also think that there's a problem with Firefox (the buggy 3.5.7). I mean it would have understood the proxy error's code.

Firefox ----> squid --> squidGuard --> bad IP address ---->\
  \                                                         |
   \<--- squid returns ERR_DNS_FAIL <-- squid dnscache <---/

How to solve this problem? I just removed google-analytics from squidGuard setting and changed my DNS resolver so that ssl.google-analytics was mapped to 127.0.0.1 :))

FreeSoft: microcore linux: phần 3: tạo một gói của bạn

thêm bởi z cách đây 9 ngày

Phần 2: cài đặt, thêm gói

Trong phần 2, ta biết cách cài đặt microcode lên một máy ảo, cách thêm một gói có sẵn bằng lệnh tce-load. Điều cần nhớ,
  1. Lệnh này chỉ được dùng khi bạn đang ở tài khoản tc, chứ không phải tài khoản root. Đây là thiết kế an toàn của microcore;
  2. Lệnh này có tham số -w -i được dùng để nạp gói từ mạng internet, nhưng bạn hãy bỏ tham số -w đi khi muốn nạp gói từ ổ cứng của bạn.

Trong bài này, bạn sẽ cách tạo một gói riêng, có thể nạp bằng lệnh tce-load. Hướng dẫn ở đây chỉ nêu lên ý chính, còn chi tiết hơn bạn phải coi ở tài liệu gốc1.

Định dạng. Nơi lưu trữ

Gói của bạn sẽ có đuôi là .tcz, .tczl (thư viện) hoặc .tczm (mô-đun cho nhân). Định dạng tập tin là SquashFS, sau khi kết nối vào hệ thống rồi thì chịu chết, không sửa được (nghĩa là đinh dạng read-only).

Các gói này có thể lưu trữ bất kỳ đâu cũng có thể nạp bởi tce-load. Tuy nhiên, mặc định tce-load sẽ tìm kiếm trong /mnt/hda1/tce/optional. Đường dẫn /mnt/hda1/ có thể thay đổi nhờ tham số của nhân khi khởi động, như trong phần thiết lập cho Grub ở phần 1.

Nếu bạn nạp một gói từ internet, nó sẽ tự động nạp ở lần khởi động tiếp theo. Thật ra, danh sách các gói được nạp khi hệ thống khởi động được cho trong danh sách /mnt/hda1/tce/onboot.lst, và bạn có thể điều chỉnh dễ dàng. Khi một gói đã có trong /mnt/hda1/tce/optional/ nhưng chưa có trong onboot.lst, bạn có thể nạp từ dòng lệnh nhờ tce-load -i tên_gói.

Tạo một gói

Cách thực hiện giống như các gói .tar.gz (trên Slackware, Arch,...). Trước hết, cần liệt kê tất cả các tập tin của gói. Ví dụ, ta có gói gogo với các tập tin sau:

/usr/local/bin/gogo
/usr/local/share/doc/gogo
/usr/local/lib/gogo.so

Ta chỉ việc tạo một thư mục tạm thời, ví dụ /tmp/gogo.now chứa các tập tin của gói, theo đúng cấu trúc ở trên

/tmp/gogo.now/usr/local/bin/gogo
/tmp/gogo.now/usr/local/share/doc/gogo
/tmp/gogo.now/usr/local/lib/gogo.so

Sau đó, bạn dùng lệnh mksquashfs để đóng gói. Nếu chưa có lệnh này, bạn cần nạp gói squashfs-tools-4.0.tcz trước khi tiếp tục

$ cd /tmp/
$ mksquashfs gogo.now/     gogo-1.0.tcz
$ mv         gogo-1.0.tcz  /mnt/hda1/tce/optional

Bây giờ, bạn đã có thể nạp chính gói của mình, nhờ

$ tce-load -i gogo-1.0.tcz@  # không dùng tham số -w

Danh sách tập tin

Việc tạo gói rất đơn giản như trên, nhưng bù lại, việc khó khăn nhất là lấy danh sách các tập tin của một gói. Việc này tùy vào kỹ năng của bạn. Dưới đây là vài gợi ý có thể có ích:

  1. Nếu gói có ít tập tin, có thể chép trực tiếp bằng cách lệnh
  2. Nếu gói được cài bằng make install, hãy thay đổi đích khi cài đặt, ví dụ make install PREFIX=/tmp/gogo.now/
  3. Nếu gói cài bằng make, setup,... nhưng không thể đổi đích cài đặt, có thể sử dụng đánh dấu thời gian, và dùng lệnh tar để gom hàng
$ touch ~/my_marker                                           # tạo đánh dấu
$ make, setup,...                                             # tiến hành cài đặt
$ find /usr/local -not -type d -newer ~/my_mark > ~/file.list # liệt kê các tập tin mới cài
$ tar -T ~/file.list -czvf ~/my_package.tar.gz                # dùng tar để gom hàng
$ mkdir /tmp/gogo.now                                         # tạo thư mục tạm
$ tar -xzvf ~/my_package.tar.gz -C /tmp/gogo.now              # xả hàng vào /tmp/gogo.now
$ cd /tmp && mksquashfs gogo.now/  gogo-1.0.tcz               # đã hướng dẫn ở trên

--

1 Ref.: TincyCore Linux: HOWTO creating extensions

bronzeboyvn: What is pipe in Linux ? (7 bình luận)

thêm bởi bronzeboyvn cách đây 10 ngày  »  Bình chọn: 1/1

Tôi viết một đoạn script thế này

 1 #!/bin/bash
 2 
 3 max=-1
 4 
 5 ls -lo | awk '{print $4}' |
 6 while read size
 7 do
 8     if [ "$size" -gt "$max" ]
 9     then
10         max=$size
11     fi
12 done
13 
14 echo "max size of file in current directory $max" 

Mục đích rất rõ ràng, tôi muốn in ra dung lượng của file lớn nhất trong thư mục hiện hành. Kết quả đoạn script trên cho $max bằng -1. Đây không phải là kết quả tôi mong đợi.

Lỗi lầm đã mắc ở đâu? (hướng dẫn: xem định nghĩa pipe)

Đưa ra giải pháp của bạn (chỉ cần 1 giải pháp)

Trả lời đúng 2 câu trên, tôi mời bạn cuối tuần một chầu cafe. Còn chờ gì nữa!

FreeSoft: woim.net: i'm your killer! (5 bình luận)

thêm bởi z cách đây 11 ngày

Contents protected

FreeSoft: SquashFS

thêm bởi z cách đây 11 ngày  »  Bình chọn: 1/1

SquadshFS là gì mình cũng chẳng hiểu nữa. Giải thích dài lòng thòng ở đây http://en.wikipedia.org/wiki/Squashfs :))

Dưới đây là vài lệnh có ích

$ mksquashfs ./some_dir/ output.tcz
$ unsquashfs -l output.tcz

Lệnh đầu tiên sẽ tạo tập tin output.tcz theo định dạng squashfs, sử dụng các tập tin trong ./some_dir/. Khi tạo như vậy, thư mục some_dir sẽ được coi là thư mục gốc và thay thế bởi squashfs-root.

Làm thế nào để kết nối tập tin .tcz vào hệ thống như là một thiết bị loop-back? Từ từ tìm hiểu vậy!

FreeSoft: microcore linux: phần 2: cài đặt, thêm gói

thêm bởi z cách đây 11 ngày

Phần 1: nhìn sơ qua một phát
Phần 3: tạo một gói của bạn

Kể từ bài này, ta đổi chủ đề từ tinycore thành microcore để chỉ rõ rằng, ta bắt đầu mọi việc với bản phân phối 6MB có tên microcore.

Chuẩn bị

Để cài đặt microcore, bạn dùng một máy ảo (trong VirtualBox chẳng hạn), với

  1. Ổ cứng dạng fixed-size1 và dung lượng khoảng 2000MB. Con số 2000 gấp nhiều lần so với 6, là bởi bạn sẽ phải tải và biên dịch rất nhiều gói khác nhau trong quá trình thử nghiệm. Tất nhiên, bạn có thể bổ sung các ổ cứng khác khi cần thiết;
  2. Một thiết bị mạng chạy ở bridge-mode, để bạn có thể truy cập máy qua ssh (nhờ đó, công việc sẽ dễ dàng hơn); và tất nhiên, máy ảo này sẽ được nối mạng internet để có thể cài thêm các gói;
  3. Hỗ trợ ACPI được bật, vì nếu không thì quá trình khởi động của microcore sẽ lâu hơn một tí (như vậy, hỗ trợ này chẳng qua là vì lý do tiện lợi)
  4. Lần đầu tiên, máo ảo sẽ được khởi động từ tập tin microcore-current.iso được tải về từ trang chủ của TinyCore

Các bước cài đặt hoàn toàn tương tự như hướng dẫn ở http://tinycorelinux.com/install.html, nhưng vì không có tài liệu chính thức cho cài đặt không đồ họa, ta ghi lại mọi thứ như sau đây

Cơ sở

  1. Sau khi khởi động từ microcore-current.iso, bạn sẽ đăng nhập tự động vào tài khoản tc của hệ thống
  2. Từ tài khoản này, thi hành lệnh tce-load -w -i cfdisk.tcz để nạp gói cfdisk
  3. Tương tự, chạy lệnh tce-load -w -i grub-0.97-splash.tcz để cài đặt grub
  4. Vào tài khoản root của hệ thống bằng chìa khóa root và lệnh sudo

Phân vùng đĩa

(bạn có thể dùng fdisk đã có sẵn trong microcore)

  1. Sử dụng cfdisk để phân vùng đĩa /dev/hda và tạo ra một partion /dev/hda1. Lưu ý rằng, nếu ổ đĩa ảo của bạn đã có phân vùng sẵn, với định dạng ext3, thì coi như tiêu, bạn không khó có cơ hôi định dạng lại do hệ thống báo lỗi bận (chỗ nào có lẽ là lỗi của tinycore).
  2. Xác định rằng hệ thống có thể khởi động được từ phân vùng /dev/hda1
  3. Sau khi thoát cfdisk, thi hành lệnh mkfs.ext3 /dev/hda1 để áp định dạng ext lên phân vùng đã chọn
  4. Cuối cùng, thi hành lệnh rebuildfstab và sau đó là mount /dev/hda1 để kết nối phân vùng vào /mnt/hda1.

Cài đặt grub

Các bước sau được chép nguyên xi từ hướng dẫn http://tinycorelinux.com/install.html. Do đó, về chi tiết, bạn hãy tham khảo ở địa chỉ vừa nêu. Riêng phần thiết lập cho grub có hiệu chỉnh để phù hợp với các ảnh mới.

Chuẩn bị các thư mục cần thiết

$ su       root                # thực ra, ở trên đã thực hiện
$ mount    /mnt/hda1           # thực ra, ở trên đã thực hiện
$ mkdir -p /mnt/hda1/boot/grub
$ mount    /mnt/hdc
$ cp -p    /mnt/hdc/boot/*     /mnt/hda1/boot/
$ mkdir -p /mnt/hda1/tce
$ touch    /mnt/hda1/tce/mydata.tgz 

Cài đặt và thiết lập cho grub.

$ cp -p    /usr/lib/grub/i386-pc/*        /mnt/hda1/boot/grub/
$ cat >    /mnt/hda1/boot/grub/menu.lst   <<EOF
  default  0
  timeout  10
  title    microcore
  kernel   /boot/bzImage quiet tce=hda1 home=hda1 opt=hda1 max_loop=256
  initrd   /boot/microcore.gz
EOF
$ grub --batch <<EOF
  root     (hd0,0)
  setup    (hd0)
EOF

Kết quả của lệnh grub có thể xem mẫu tại http://gx.viettug.org/zen/kyanh/jobs/microcore_e1.jpg.html.

Xong rồi đấy!

Xong, sau lệnh cuối cùng (grub) ở trên, bạn có thể khởi động lại máy ảo, bỏ đi kết nối máy ảo với tập tin micro-current.iso và nếu may mắn, bạn sẽ vào được hệ thống microcore đã cài thành công trên ổ cứng ảo /dev/hda1 :)

Trong hướng dẫn trên, bạn cũng thấy sử dụng lệnh tce-load -w -i cfdisk.tcz để nạp gói cfdisk từ mạng internet. Lệnh này không thể chạy với quyền root, do đó, có thể trước khi dùng, bạn phải chuyển qua tài khoản tc.

Danh sách tất cả các gói đã có sẵn có thể được tìm thấy ở địa chỉ phần Repository of Extensions của trang Download của tinycore.

--

1 Ổ cứng với kích cỡ cố định theo quy ước của VirtualBox. Xem vấn đề liên quan: http://tinycorelinux.com/forum/index.php?topic=5284.0

FreeSoft: tinycore linux: phần 1: nhìn sơ qua một phát

thêm bởi z cách đây 12 ngày

Phần 2: cài đặt, thêm gói

TinyCore Linux là một phiên bản Linux bé tí teo. Phiên bản mới nhất là 2.9.

Sau khi tải về tập tin .iso chỉ khoảng 10MB, chỉ với vài bước tạo một máo ảo trong VirtualBox (hoặc các VM tương tự), bạn có một hệ thống đồ họa, với chuột, hình nền, thanh công cụ (taskbar),... Tất nhiên, chỉ với 10MB thì bạn chỉ được miếng “bùi nhùi” đầu tiên có thể bén lửa.

“Miếng bùi nhùi”
đó là công cụ cài đặt các gói trực tiếp từ internet. Điều này thể hiện một trong các ý tưởng thiết kế cơ bản của tinycore“đám mây”. Sau khi khởi động, toàn bộ hệ thống cơ bản sẽ được nạp lên bộ nhớ RAM, và người dùng có thể tải thêm về các gói từ “mạng internet”, từ trình duyệt firefox cho đến chương trình nhắn tin pidgin, trình soạn thảo geany,... để sử dụng. Các gói tải về này có thể được lưu trữ trên ổ cứng địa phương (local hard disk) và nhờ đó, lần khởi động tiếp theo bạn sẽ không phải mất công tải lại.

Mỗi gói của tinycore được đóng gói ở dạng squashfs, và đã được lượt bỏ đi những thứ không cần thiết. Việc đóng gói cũng rất đơn giản, gần như là “sao chép” từ máy này sang máy khác. Không gì dễ hơn. Có phần giống với kiểu đóng gói .tar.gz, nhưng ở đây là định dạng squashfs không phụ thuộc vào hệ thống tập tin của máy. Việc dùng định dạng nói này quả là một ý tưởng thông minh :)

Như vậy, tinycore thích hợp với cả người dùng "mì ăn liền" (ồ, tất nhiên là phải biết chế nước sôi), và người phát triển.

tinycore được công bố với hai bản: một bản có đồ họa, và một bản còn nhỏ hơn nữa, gọi là microcore (chỉ có hơn 6MB). Bản sau này rất thích hợp để nghiên cứu hoạt động của hệ thống Linux và đóng gói các phần mềm.

Tạm thời vậy, phần 2 sẽ nói về cài đặt một gói cho tinycore từ chế độ dòng lệnh, bên trong microcore. Với phiên bản thông thường, đã có chuột, màn hình màu sắc xanh đỏ rồi, thì công việc đơn giản hơn và bạn có thể tự tiến hành được.

1 2 3 ... 30 Sau »

Định dạng khác của trang này: Atom