Bạn cần tham gia dự án để viết bài hoặc đặt vấn đề mới (xem Help/Giúp đỡ).

Blog

tải nhạc ở woim.net

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

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 :)

squidGuard tricks firefox and squid 2.7

thêm bởi z cách đây 9 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 :))

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

thêm bởi z cách đây 11 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

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

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

Cập nhật (20/03/2010): Kịch bản có tại woim.

Biết http://woim.net/ đã lâu nhưng chưa nghe một bài nhạc nào trên trang này. Cách đây độ 2 năm.

Hôm nay tình cờ bắt gặp một bạn đang nghe dở dừng bài nhạc trên Woim.net (trình nghe nhạc đang ở trạng thái Pause.) Bài đấy là Afterlife love, trong tuyển tập New Element of Hi-Fi. Thật bất ngờ... về tiêu đề và cái u sầu trong bản nhạc. Khác với bản tiếng Việt vẫy hay nghe.

Tối nay về, tìm cách lọc hàng từ Woim.net. Cuối cùng đã tìm ra: như nhiều trang web khác, Woim.net dựa vào biến User-Agent để hạn chế băng thông không cần thiết từ bên ngoài trang web. Nhưng cách lọc User-Agent của Woim.net thật giản dị, so với chẳng hạn Facebook.com

$ curl                   -I http://woim.net/some_file_to_be_loaded.mp3  # ==> lỗi
# curl -A "I_am_Mozilla" -I http://woim.net/the_above_file.mp3          # ==> lượm hàng

Khởi đầu thuận lợi. Hy vọng là Woim.net sẽ không đóng hết các cửa, trước khi mình viết một client tốt để nghe nhạc từ nó ;) Thanks in advance :D

SquashFS

thêm bởi z cách đây 13 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!

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

thêm bởi z cách đây 13 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

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

thêm bởi z cách đây 14 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.

apache: kỳ lạ!

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

Xét cấu hình cho thư mục /err/ như sau đây trong Apache. Mục đích là hỗ trợ index và cho phép dùng symbolic link trong thư mục /var/www/htdocs/err/. Cấu hình này hoạt động tốt, không có bất kỳ trục trặc gì phát sinh.

<Directory "/var/www/htdocs/err">
Options +Indexes +FollowSymLinks
</Directory>

Bây giờ, ta bớt đi chút xíu (bỏ đi FollowSymLinks)

Options +Indexes

Vẫn chạy tốt. Nhưng nếu bỏ đi dấu trừ thì sẽ tiêu: khi truy cập vào /err/ sẽ gặp lỗi 403.

Options Indexes

Nếu bỏ đi dấu trừ trong cấu hình đầu tiên (tức là dùng Indexes +FollowSymLinks) thì mọi chuyện lại bình thường.

Thiệt quái đản, không hiểu nổi!

mysql join: left right inner

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

Bà con không hiểu thì xem ở wellho.net

A join B       : A\cap B
A left  join B : A\B + (A\cap B)   (all items in A are mentioned)
A right join B : (B\cap A) + B\A   (all items in B are mentioned)

Câu hỏi: B right join A có trùng với A left join B không?

VUE 3.0 (2 bình luận)

thêm bởi icy [G] cách đây khoảng 1 tháng  »  Bình chọn: 3/3

Mình dùng VUE được khoảng 2 năm, thấy ứng dụng này rất hay nên đã viết bài giới thiệu, nhưng dường như ít ai quan tâm :) Nên nhân dịp VUE phiên bản 3.0 ra mắt, mình viết lại đôi dòng về ứng dụng này. Hy vọng là có ích cho những ai dùng ... mind map.

VUE là một phần mềm mã nguồn mở, viết bằng Java nên có thể chạy trên nhiều hệ điều hành có hỗ trợ máy ảo Java. Nhưng đó không phải là điều quan trọng nhất. VUE được thiết kế để thể hiện các concept map, có thể nói là sau mind map một bậc.

Theo cách hiểu và sử dụng mind map của nhiều bạn trẻ mà mình gặp ở Sài Gòn, mind map là một cái cây với gốc lớn và nhiều rễ lá đâm ra tua tủa :D Nhiều bạn dùng giấy và bút, một số bạn khác dùng phần mềm Mind Manager để thể hiện các map này. Nhưng để ý thì các map thể hiện cấu trúc một chiều: muốn đi từ cành này qua cành khác, bạn phải leo xuống gốc rồi lại bò lên:D Thực tế, mind map thích hợp với việc phát triển các ý tưởng, theo phương pháp brain storming.

Trong khi đó, concept map thật sự cho thấy được mối quan hệ phức tạp, bằng cách mặc nhiên chấp nhận các mối quan hệ đa chiều giữa các đối tượng của nó. Chính vì thế, concept map vừa có thể dùng như mind map, vừa có thể dùng cho các minh họa phức tạp và hoàn chỉnh. Thực tế thì một chuẩn hóa của mind mapUML được dùng trong việc thiết kế phần mềm, hệ thống. Kinh nghiệm bản thân mình cho thấy, mình không thể sử dụng mind map thuần túy để minh họa cho các ý tưởng của mình.

Trái với giao diện màu mè và cả trăm nút điều khiển của Mind Manager, giao diện của VUE cực kỳ đơn giản, khiến bạn có thể shock khi so sánh giao diện với kết quả mà nó tạo ra. Ý tưởng là VUE có vài phím tắt và công cụ cơ bản, để bạn có thể tập trung vào concept map: thông thường, việc dùng các phím r (relation), n (node), l (link) là quá đủ để tạo một sơ đồ hàng khủng trong thời gian rất ngắn.

Và sau đó, VUE cho phép bạn: tạo một trình diễn sống động bằng chính VUE, xuất kết quả ra các dạng khác nhau, và đặc biệt là trong phiên bản 3.0, khả năng nạp các tài liệu bên ngoài được hỗ trợ rất tuyệt: nạp tin RSS, nạp các mô tả XML, CSV,...; VUE 3.0 cũng có hỗ trợ công cụ Exploration và cả các module để dùng với Firefox.

Quá nhiều và quá tuyệt với mình:) Còn bạn, nếu đã quen với mind map thì nên thử một lần dùng phần mềm VUE này. Một chút khó khăn khi thay đổi thói quen sẽ mang lại cho bạn những hiệu quả không ngờ :!

Ref.: Trang chủ của VUE: http://vue.tufts.edu/
Ref.: Ví dụ về VUE: http://vue.tufts.edu/gallery/index.cfm
Ref.: Video minh họa cho VUE: http://www.youtube.com/VUEProject
Ref.: Tải về VUE: http://vue.tufts.edu/download/index.cfm
Ref.: Tải về VUE 3: http://releases.atech.tufts.edu/vue/v3.0/
Ref.: Dùng Vue trên FreeBSD, Linux: http://viettug.org/blogs/177
Ref.: Mind map: http://en.wikipedia.org/wiki/Mind_map
Ref.: Concept map: http://en.wikipedia.org/wiki/Concept_map

1 2 3 ... 21 Sau »

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