Saturday, December 16, 2006

Thư giãn: Lời khuyên cho nam giới

Xì-trét quá nên lông bông thư giãn một chút. Và đây là một phát hiện:

Nam giới, nhất là nam thanh niên, không nên uống sữa tươi đóng hộp. Lý do là tất cả sữa tươi đóng hộp đều là sữa tiệt trùng! :D

Friday, December 15, 2006

Tạo menu tương tác với shell script

Tôi thường dùng shell script để làm vài việc lặt vặt với ... số lượng lớn, ví dụ: migrate account, convert addressbook, backup data. Dữ liệu thường được đọc từ file, họa hoằn lắm mới thêm vài option. Đơn giản là để giải quyết bài toán một hoặc hai lần nên làm sao cho nhanh nhất là được. Nếu script được dùng thường xuyên với input khác nhau buộc phải nghĩ đến cách chuyển sang dạng menu tương tác để hạn chế option cho ... chính shell script.

Cách đơn giản nhất để tạo menu tương tác là dùng vòng lặp vô tận: in menu, lấy lựa chọn, xử lý. Viết một vòng lặp như thế với bash không khó nhưng rườm rà, nghĩ tới là đã nản. May mắn thay bash có lệnh buillt-in select giúp việc tạo menu dễ như trở bàn tay. Dưới đây là một ví dụ Thực đơn quán bà Tám:
#!/bin/bash
# menu.sh
PS3="Mời bạn chọn thực đơn: "
select thucdon in "Sáng" "Trưa" "Tối" "Thoát"; do
case "$thucdon" in
"Sáng")
echo "Bún bò + cafê đá"
;;
"Trưa")
echo "Cơm tấm sườn"
;;
"Tối")
echo "Bún chả cá"
;;
"Thoát")
break
;;
esac
done
Kết quả:
$ sh menu.sh
1) Sáng
2) Trưa
3) Tối
4) Thoát
Mời bạn chọn thực đơn: 1
Bún bò + cafê đá
Mời bạn chọn thực đơn:
Chỉ có mấy lưu ý:
  • PS3: dùng để hiển thị dấu nhắc lựa chọn, nếu dùng select lồng nhau thì nhớ lưu và khôi phục giá trị này
  • Kết thúc vòng lặp select bằng break

Saturday, November 25, 2006

Xác thực LDAP cho ứng dụng web PHP

Mỗi khi triển khai một ứng dụng mới trong công ty, người dùng lại "rên" lên vì phải nhớ (lưu vào máy) thêm một password nữa. Triển khai một giải pháp Single Sign On (SSO) là hoàn toàn không đơn giản cả về chi phí lẫn kỹ thuật. Một giải pháp Single Password là khả thi và chấp nhận được. Thông tin cơ bản về user và password được lưu trên LDAP, các ứng dụng khác có thể truy cập database này cho mục đích xác thực (authentication), đồng thời cũng có thể import các thông tin cơ bản từ LDAP để tạo database user riêng cho mục đích phân quyền trên ứng dụng.

Các ứng dụng web dựa trên PHP cho doanh nghiệp ngày càng phổ biến: CRM, groupware, project management, ticket system, online training,... Hầu hết có hỗ trợ xác thực LDAP sẵn, tuy nhiên cũng có một số ứng dụng chưa có. Nhưng đó không phải là trở ngại lớn, chỉ với một đoạn mã đơn giản chèn vào trước phần xác thực của ứng dụng ta có thể duy trì mục tiêu single pasword cho người dùng. Đoạn mã này trích từ ASPN PHP Cookbook:
$ldapconfig['host'] = 'localhost';
$ldapconfig['port'] = NULL;
$ldapconfig['basedn'] = 'dc=localhost,dc=com';
$ldapconfig['authrealm'] = 'My Realm';

function ldap_authenticate() {
global $ldapconfig;
global $PHP_AUTH_USER;
global $PHP_AUTH_PW;

if ($PHP_AUTH_USER != "" && $PHP_AUTH_PW != "") {
$ds=@ldap_connect($ldapconfig['host'],$ldapconfig['port']);
$r = @ldap_search( $ds, $ldapconfig['basedn'], 'uid=' . $PHP_AUTH_USER);
if ($r) {
$result = @ldap_get_entries( $ds, $r);
if ($result[0]) {
if (@ldap_bind( $ds, $result[0]['dn'], $PHP_AUTH_PW) ) {
return $result[0];
}
}
}
}
header('WWW-Authenticate: Basic realm="'.$ldapconfig['authrealm'].'"');
header('HTTP/1.0 401 Unauthorized');
return NULL;
}

if (($result = ldap_authenticate()) == NULL) {
echo('Authorization Failed');
exit(0);
}
echo('Authorization success');
print_r($result);
?>

Đơn giản là dùng ldap_bind với username/password của người dùng, nếu OK là xác thực thành công. Cũng nên lưu ý là ldap_bind đơn giản không mã hóa thông tin, nếu muốn an toàn hơn thì dùng LDAP+SSL hoặc LDAPS.

Tuesday, November 07, 2006

Họp mặt cựu học sinh Buôn Ma Thuột khóa 1994

Nội dung thông báo từ Võ Đại Phố:
------------------------------------
Thế là đã mười hai năm, nếu thực hiện phép trừ 2006-1994. Mười hai năm, chúng ta đã trải qua một con giáp. Được sự đồng ý của hầu hết các bạn, các thành phần lưu vong tại Saigon trước đây cũng như hiện tại muốn tổ chức một buổi gặp mặt các bạn để ôn lại 12 năm - 1 chặng đường lịch sử với bao gian nan, vất vả, buồn vui lẫn lộn. Mới ngày nào với những khuôn mặt búng ra sữa thì nay đã già nua.........tàn tạ:)) Ke ke:))
Mỗi người hiện nay đã có 1 "mảnh đời" riêng, đã/ đang làm việc ở khắp nơi trong thành phố, đã trở lại làm việc ở BMT và có người đi về Lâm Đồng, Quy Nhơn, Phan Thiết,....có bạn còn độc thân, kẻ đã xây dựng tổ ấm nhưng nhìn chung thì ai ai cũng dễ thương và rất đáng mến. Mỗi sáng, từng người đều len lỏi, chen lấn trên các con đường, các ngã ba/ ngã tư đèn xanh-đèn đỏ chật hẹp của thành phố để đến công sở / hội sở hay nơi làm việc đúng giờ. Đôi khi sự chen lấn đó như chính cuộc sống của mỗi chúng ta hôm nay.:))
Cuộc gặp gỡ vui chơi này hy vọng phần nào các bạn sẽ quên đi bớt những nhọc nhằn, những mưu toan thường nhật của cuộc sống. Hầu như các bạn không cần có một thần tượng của mình là các ca sỹ, nhạc sỹ / nghệ sỹ nào đó, các bạn cũng không hẳn là một fan của một câu lạc bộ bóng đá với nhiều lời về cái đầu gối, cái gót chân của từng cầu thủ, các bạn cũng chả rỗi hơi để tham gia hay về nhà bật tivi lên coi các chương trình gameshow đang phát đầy rẫy khắp nơi suốt ngày, và cũng chẳng có thì giờ bông đùa lang thang nhàn rỗi vô vị.
Vậy thì các bạn hãy bỏ một bữa kiếm tiền, một cuộc họp làm ăn, một buổi riêng tư vợ chồng hay gia đình của bạn, một buổi đi shoping, đi massage hay spa,.... để đến tham gia vui chơi ít ỏi ngắn ngủi chớp nhoáng cùng chúng mình. Để khỏi hối tiếc/ hối hận, các bạn có thể tự nghĩ ra những điều mà mình cảm thấy vui trong buổi gặp gỡ này, ai trong chúng ta cũng đều là "thành viên của ban tổ chức", cứ tự nhiên như chúng ta là những người bạn đồng trang lứa! Ke ke ke:)).
Vâng, xin lỗi các bạn đã đọc từ đầu tới đây!
Thân mời các bạn đến tham dự buổi gặp mặt theo chương trình chi tiết như sau:
Thành phần tham gia:
- Tất cả các bạn đã từng sống, học tập tại BMT khóa 1994 và đã có khoảng thời gian học tập/ làm việc tại SG.
- Vợ, chồng, con cái của các cá nhân trên có liên quan.
- Đóng góp theo đầu người. Những ai có hoàn cảnh khó khăn sẽ được miễn hoặc giảm (phải có đơn)
Thời gian:
- Bắt đầu lúc 14h30 (ai đến sớm hơn cứ việc enjoy trước). Chiều thứ Bảy ngày 11/11/2006
Địa điểm:
- Khu Du lịch Văn Thánh (48/10 Điện Biên Phủ, P22, Q. Bình Thạnh, TP. HCM)
Chương trình:
- 14h30 - 17h : , Tennis, Bơi lội, Bida, Bi lắc, dạo chơi, chụp hình,…
- 17h – khi nào tàn thì thôi: Hỏi han nhau, uống bia (hoặc nước suối/ nước ngọt), ăn uống,...
------------------------------------

Sẵn dịp tạo luôn một cái mailing list trên Google để tiện liên lạc về sau:
http://groups.google.com/group/bmt94

Updated: video quay trên máy của mình đã được upload lên YouTube: http://youtube.com/my_playlists?p=1FE948DCFEF7B3CF


OpenNMS: "báo cháy" cho hệ thống mạng

OpenNMS là một công cụ quản lý hệ thống mạng nguồn mở với định hướng sử dụng ở mức độ enterprise. OpenNMS cung cấp khả năng dò tìm các dịch vụ, thu thập thông tin để báo cáo, phát sinh cảnh báo từ các cảnh báo thu thập thập được, nâng cấp mức độ của cảnh báo (escalation) . Có không ít phần mềm nguồn mở nổi tiếng trong lĩnh vực giám sát hoạt động mạng và dịch vụ (network/service monitoring) như Nagios, Zenoss, Zabbix, mỗi phần mềm đều có những ưu điểm nổi bật riêng. Các phần mềm giám sát thường dựa trên cơ chế agent/server hoặc passive polling. Với cơ chế đầu khả năng giám sát toàn diện hơn nhờ có agent, có thể giám sát được tài nguyên trên từng máy. Với cơ chế sau, việc giám sát được thực hiện thông qua dữ liệu thu thập được với tư cách một client bình thường (tài nguyên có thể được giám sát qua SNMP nhưng không đầy đủ), cách này dễ dàng hơn do không phải cài đặt agent trên các máy muốn giám sát. OpenNMS thuộc loại sau.

OpenNMS có thể được sử dụng như một thiết bị "báo cháy" cho hệ thống mạng. Mặc dù được viết bằng Java, việc cài đặt và cấu hình OpenNMS khá đơn giản và dễ dàng (dễ hơn nhiều so với Nagios). Sau khi cài đặt, OpenNMS có thể tự động dò trên các subnet định trước để xác định tất cả các máy với tất cả các dịch vụ đang mở port, người quản trị chỉ cần chọn máy/dịch vụ để giám sát từ danh sách này. OpenNMS cung cấp sẵn các định nghĩa cho sự kiện như "node down/node up" khi kiểm tra bằng ping, "lost service/gain service" khi kiểm tra bằng cách mở kết nối đến cổng của dịch vụ. Các sự kiện này có thể được dùng để phát sinh cảnh báo (email/SMS/pager) đến những người quản trị tương ứng. Tính năng nâng cấp mức độ của sự kiện có thể dùng để cảnh báo đến cấp quản lý cao hơn nếu máy/dịch vụ bị ngừng quá lâu. Nhược điểm của OpenNMS khi dùng ping để kiểm tra tình trạng chạy/ngừng của máy là dễ bị sai nếu tải mạng cao, hơn nữa nếu một gateway/router bị ngừng thì tất cả các máy đứng sau gateway/router ấy đều bị báo ngừng (sẽ được khắc phục trong phiên bản kế).

Với một hệ thống "báo cháy" hiệu quả, hệ thống mạng đã được chuyển sang giám sát chủ động, quản trị mạng có thể được thông báo ngay bằng SMS khi có sự cố thay vì chỉ biết khi người dùng báo. Tất nhiên, hệ thống đó phải được tối ưu để loại bỏ các báo động giả, nếu không máy điện thoại của bạn có nguy cơ "cháy" vì tin nhắn :).

Monday, November 06, 2006

RCA: giúp giảm thiểu các sự cố một cách hệ thống

Root cause analysis (RCA) là 3 từ thời thượng được các sếp ưa dùng khi có bất kỳ vấn đề, trục trặc gì. Hệ thống mạng bị gián đoạn thời gian dài, email không truy cập được nhiều giờ liền,... lập tức sếp nói "Tôi muốn có RCA". Bắt đầu là "nỗi kinh hoàng" khi khách hàng "lệnh" làm RCA về một sự cố "nhỏ nhặt" (theo cách mình vẫn nghĩ) liên quan đến các lập trình viên không sử dụng được công cụ lập trình. Làm lại đến lần thứ 3 mới được họ tạm chấp nhận, nhưng cũng nhờ đó mà vỡ ra một điều mới học hỏi được. Thế rồi liên tục, server bị mất điện nguồn, phần mềm bị lỗi, mạng bị trục trặc, điện thoại không gọi được,... là lập tức có mail "Bao giờ thì tao có thể có RCA cho chuyện này?". Làm riết rồi quen, chừng chục lần thì thấy sự cố giảm hẳn, "tự giác" làm RCA khi có sự cố.

RCA được dùng để phân tích nguyên nhân gốc gây ra một vấn đề, sự cố nào đó liên quan đến kỹ thuật hoặc không. Một bản RCA cho vấn đề kỹ thuật thường gồm các phần chính:
  • Mô tả vấn đề
  • Kết luận về nguyên nhân, hậu quả
  • Nguyên nhân gốc (root causes)
  • Cách xử lý, khắc phục
  • Checklist để xử lý nếu sự cố lặp lại trong tương lai
  • Giải pháp/hành động để ngăn chặn sự cố xảy ra trong tương lai (nếu có)
RCA là một công cụ hữu hiệu giúp giảm thiểu các sự cố kỹ thuật một cách có hệ thống bởi:
  • Nguyên nhân gốc được làm rõ giúp vấn đề được sáng tỏ
  • Cách xử lý, khắc phục được ghi lại và chia sẻ giúp việc xử lý vấn đề được nhanh chóng nếu có lặp lại
  • Giải pháp để ngăn chặn việc tái diễn được nêu ra/lưu ý và có thể được hiện thực khi điều kiện cho phép
  • Lỗi do con người sẽ được giảm thiểu thông qua việc truyền thông các RCA liên quan đến nhân viên
RCA còn là phương tiện truyền thông (communicate) hiệu quả với khách hàng (bên ngoài/bên trong) bởi thông qua RCA cho thấy:
  • Bạn thực sự tìm hiểu nguyên nhân sâu xa của vấn đề
  • Bạn biết cách để khắc phục vấn đề một cách nhanh nhất nếu có lặp lại
  • Bạn cam kết cải thiện, ngăn chặn vấn đề tái diễn
  • Bạn đã tiếp cận vấn đề một cách có hệ thống
RCA thường là yêu cầu bắt buộc đối với các sự cố có mức độ nghiêm trọng cao nhất (Severity - 1) có tác động/ảnh hưởng lớn lên nhiều người dùng. Đối với các vấn đề kỹ thuật, có sự liên quan của con người, phương pháp đơn giản để làm RCA là 5 Whys. Tuy phương pháp này khá cơ bản và hạn chế nhưng kết quả của nó là chấp nhận được.

Sunday, November 05, 2006

Một số kinh nghiệm chuyển sang mã nguồn mở

Chuyển sang sử dụng mã nguồn mở (opensource migration) là chuyện chẳng có gì mới, "biết rồi khổ lắm...", nhưng thực tế tỉ lệ thành công ở VN là (rất) thấp. Có mấy lý do "duy ý chí" khiến việc chuyển sang nguồn mở thất bại khi còn trên ... dự án:
  • Qúa chú trọng vào phần hệ điều hành: chăm chăm thay thế Windows trong vẫn khó khăn không biết lựa chọn bản Linux nào dành cho người dùng, chi phí để chuyển đổi, huấn luyện người dùng là chưa thể ước tính.
  • Quá chú trọng vào phần Việt hóa: đa số các dự án Việt hóa phần mềm nguồn mở không đến được với người dùng, lý do đối tượng sử dụng máy tính phần lớn là dân (ngày càng) có trình độ quen thuộc với bản tiếng Anh, các dự án Việt hóa lại rất dở dang, không cập nhật thường xuyên, thuật ngữ không chuẩn.
  • Thiếu đào tạo, huấn luyện: đây là nguyên nhân chính khiến người dùng "ngoảnh mặt" với nguồn mở, không được huấn luyện, hướng dẫn với một phần mềm mới trong khi "đồ chùa" vẫn xài được nên không không ai muốn tự đầu tư thời gian để sử dụng phần mềm mới. Nhân viên khi vào làm việc ở bất kỳ công ty nào cũng phải biết sử dụng MS Office và sẽ không có công ty nào dạy lại cả. OpenOffice thì khác, họ muốn phải được "hướng dẫn trước khi dùng", đó cũng là điều hợp lý. Đặc biệt đối với các bộ phận phi kỹ thuật như nhân sự không huấn luyện thì cầm chắc họ không thể làm được.
  • Thiếu ủng hộ, cam kết từ cấp lãnh đạo: nghe thì tưởng dễ nhưng không đơn giản. Lãnh đạo gật đầu nhưng cứ nghĩ nguồn mở là không phải tốn tiến thế nên chi phí cho đào tạo, nghiên cứu, triển khai không được cam kết. Dù khẳng định phải chuyển sang nguồn mở, bắt buộc nhân viên sử dụng nhưng khi yêu cầu công việc lại "làm lơ" để tiếp tục sử dụng phần mềm cũ, hiệu quả rõ ràng là nửa vời.
  • Thiếu thời gian: không thể nhấn nút là mọi thứ sẽ thay đổi ngay, cần phải có thời gian để phần mềm nguồn mở "thấm" vào được người dùng. Thực tế, dự án chuyển đổi khó thành công dưới một năm, chưa kể nhân viên còn phải lo hoàn thành mục tiêu công việc, các dự án khác có ưu tiên cao hơn như ISO, CMMI sẵn sàng chen ngang.
Dưới đây là một số kinh nghiệm triển khai và ứng dụng phần mềm nguồn mở trong doanh nghiệp sản xuất phần mềm, dù chưa đạt mục tiêu đề ra nhưng cũng có thể được dùng để tham khảo:
  • Chuyển các phần mềm máy chủ sang nguồn mở: việc này đã được thực hiện khá tốt và rộng khắp, LAMP hiện khá phổ biến. Việc thay thế Active Directory Domain Controller khó khăn hơn khi Samba chưa theo kịp để tương thích và thay thế Windows 2003 AD hiện đã được sử dụng rộng rãi.
  • Triển khai OpenOffice: cài đặt OpenOffice song song với MS Office để người dùng làm quen, dần sử dụng các tài liệu theo chuẩn Open Document. Thay thế được bộ MS Office đã là một thành công (và có khả năng hiện thực lớn) vì tính phổ dụng của nó trong công việc hàng ngày của doanh nghiệp cũng như giá không phải là ít. Cho đến thời điểm này vẫn chưa có phần mềm nào thay thế được MS Outlook, ứng cử viên sáng là Evolution vẫn chưa đủ ổn định để sử dụng trên Windows.
  • Thay thế các tiện ích phổ dụng bằng phần mềm nguồn mở: thay Winzip bằng IZArc (7-zip), Lạc Việt MTD bằng Stardict, IE bằng Firefox, ...
  • Đào tạo, huấn luyện sử dụng các phần mềm nguồn mở: cần có các khá huấn luyện ngắn cho người dùng đối với bộ OpenOffice hay Evolution.
  • Chuyển những người không nhất thiết phải sử dụng Windows sang dùng Linux: cần phải khẳng định ngay từ đầu mục tiêu không phải là thay thế hoàn toàn Windows bằng Linux vì sẽ không thực tế. Những người không nhất thiết phải sử dụng Windows sẽ được lên danh sách để chuyển sang dùng Linux. Phiên bản Linux cho người dùng nên tương đối đơn giản, được hỗ trợ mạnh như Fedora Core hay Ubuntu.
  • Đội ngũ hỗ trợ phải sẵn sàng và đi trước một bước: người dùng sẽ mất niềm tin và phương hướng nếu trục trặc với phần mềm mới không được giải quyết kịp thời.
  • Thời gian triển khai: tối thiểu là một năm. Thực tế cho thấy dự án chuyển sang nguồn mở có thể kéo dài hơn hai năm mà kết quả vẫn rất khiêm tốn.

Sống chung với ngập!

Chống không được thì phải sống chung với ngập thôi chứ sao. Thế nên mới có cảnh chiều ngày triều cường có anh chàng áo cài măng-set, đóng thùng nhưng quần xắn tới gối, đi dép nhựa phóng xe vèo vèo. Đến công viên anh ta tấp vào, lôi đôi giày tây trong bọc ra, mang vào rồi đường hoàng ... đi dự đám cưới. Những nhà ở vùng ngập nặng thì xây kè, đắp "công sự" bao cát, làm chắn nước di động bằng sắt hoặc gỗ, rồi sắm máy bơm để bơm nước ra. Các bà buôn bán ở chợ phải sắm ủng để còn lo hàng họ sớm. Khổ là các bà nội trợ thì không có ủng nên những ngày nước ngập chồng con đành thông cảm ăn rau hay cơm bụi.

Sunday, October 22, 2006

Dùng VNC cho online confrence, training nội bộ

Với các công ty đa quốc gia việc sử dụng dịch vụ online conference, training như WebEx, MeetMe, Centra không có gì xa lạ. Nhưng theo đánh giá của cá nhân, ở Việt Nam hình thức đó vẫn còn khá ... xa lạ đối với các công ty trong nước. Cứ họp là phải tập hợp lại hoặc dùng cầu truyền hình (trình diễn là chính), học từ xa là ... xem video quay sẵn. Không được "hoành tráng" như các service nói trên, nhưng chỉ với VNC + điện thoại là đã có thể triển khai được chuyện online conference, training cho nội bộ công ty.

Công ty có vài chi nhánh rải rác trong thành phố, mỗi lần có training là phải chạy về một nơi (có phòng rộng đủ cho hàng trăm người) trong khi ở mỗi nơi đều có phòng họp. Thay vì như thế có thể tổ chức training/conference theo nhóm nhỏ, các nhóm kết nối với nhau qua mạng điện thoại nội bộ cho phần thoại (conference bridge), phần hình ảnh trình bày được chia sẻ qua VNC. Cách này có mấy lợi điểm:
  • Tiết kiệm được thời gian di chuyển của nhân viên
  • Tiết kiệm thời gian ... đợi cho đủ người
  • Thuận tiện, cá nhân có thể ngồi tại chỗ làm việc để theo dõi
  • Cho phép số lượng lớn người tham gia
  • Có thể thu lại được để xem offline
  • Thích hợp với các loại hình training không bắt buộc, demo, conference/meeting
Tất nhiên cách làm này cũng có những nhược điểm:
  • Không áp dụng được với training bắt buộc (có điểm danh), thi tại chỗ và workshop
  • Tương tác người nghe và người trình bày thấp
  • Phụ thuộc hạ tầng mạng và điện thoại
  • Tốc độ hình ảnh có thể chậm khi có nhiều người kết nối (nhược điểm của VNC)
Thực tế cho thấy sử dụng online training để hướng dẫn sử dụng các phần mềm hoặc demo sẽ hiệu quả hơn rất nhiều so với dùng slide và projector truyền thống vì slide không thể chuyển tải hết các chi tiết hoặc quá nhỏ để theo dõi.

KeyJnote - để presentation bớt nhàm chán

Tình cờ chộp được KeyJnote trên #vietlug@freenode, đem về thử áp dụng ngay vào bài giảng thấy cũng bớt nhàm được tí. Muốn nhấn mạnh mục nào đó trên slide chỉ cần dùng chuột vẽ khung chữ nhật lên mục đó, phần còn lại của slide sẽ tự động mờ đi, hoặc dùng "đèn pin" để hướng sự chú ý của người nghe vào phần nào đó trên slide. Nhấn Tab sẽ liệt kê tất cả các slide để có thể nhảy đến slide bất kỳ. Đơn giản mà hiệu quả!

Wednesday, August 16, 2006

Visual SourceSafe to Subversion migration - part 2

Lỗi "Invalid copy source path"

Để không phải load các thư mục cũ được tạo ra trong quá khứ nhưng không còn tồn tại, dumpfile được lọc qua lệnh svndumfilter. Lỗi thường gặp khi chạy lệnh này là "Invalid copy source path" có nguồn gốc tương tự như trên. Hậu quả là "rác" từ dumpfile không thể bỏ đi được mà cũng không thể xài được.

svndumpfilter3 tương tự như svndumpfilter nhưng được viết bằng python (2.4) cho phép ignore lỗi "Invalid copy source path" để chạy tiếp. Xem như lọc được bớt "rác" không cần thiết từ dữ liệu cũ.

Lỗi "File not found"

Khi load dumpfile kết quả của vss2svn với lệnh "svnadmin load" lỗi thường gặp là: "File not found: transaction ...". Lỗi này thường gây ra do một node được tạo ra với action "change" nhưng lại không được "add" trong một revision trước đó. Hậu quả là lệnh load bị hỏng giữa chừng.

Lỗi "File not found" thì phải xử lý bằng tay, mẹo là thay action "change" thành "add" đối với node gây ra lỗi. Cách làm là tìm ra số thứ tự của dòng (line number) mô tả action cho node gây lỗi (Node-action), thay thế "change" bằng "add", tiếp tục lệnh load. Để tìm ra số thứ tự dòng của node gây lỗi có thể dùng "grep -n" hoặc "less -N", sau đó có thể pipe trực tiếp qua sed để xử lý. Ví dụ:

# cat vss2svn-dumpfilter.txt | sed -e '12345678s/change/add' | svnadmin load /var/svn/project

Hơi thủ công tí nhưng rốt cuộc cũng load được hết dumpfile, kết quả còn hạ hồi phân giải.

Sunday, August 13, 2006

Visual SourceSafe to Subversion migration - part 1

Chuyển sang sử dụng OSS để giảm chi phí bản quyền, Subversion được lựa chọn là SCM chuẩn để thay thế cho Visual SourceSafe. Người dùng yêu cầu data phải được "di dời" (migrate) hoàn toàn từ VSS sang SVN, giữ được toàn bộ history. Yêu cầu hoàn toàn chính đáng nhưng lại gây đau khổ cho nhóm phụ trách "di dời".

Công cụ để migrate ngó qua ngó lại cũng chỉ có vss2svn là tốt nhất. vss2svn làm việc rất tốt với các VSS database "sạch", nguyên vẹn (không có file data nào bị hư hỏng). Nhưng với database có file data bị hỏng, quá trình load ngược vào SVN repository hầu như chắc chắn sẽ bị lỗi. Nếu lỗi xảy ra ở các revision "xa xưa" thì cơ hội để sửa được càng ... xa vời. Hiện có một VSS database 2GB với 4600 revision load được một nửa thì bị lỗi. Chẳng lẽ bó tay sao?

Mẹo xài proxy với Perl CPAN

Có những lúc cần phải cài ngay CPAN module để thử những tool viết bằng Perl. Search CPAN rồi download thì ... thủ công quá, xài shell của PAN thì proxy công ty không cho FTP nên không lấy được MIRROR list, thế là đứng ngắc. May quá, có Life with CPAN hướng dẫn cách thêm các site xài HTTP vào urllist để có thể chạy với proxy không cho FTP. Cách làm như sau:
  • Vào http://www.cpan.org/SITES.html chọn một số site chạy HTTP ở đâu đó gần gần với ISP của mình
  • Thêm site vào trong urllist của cấu hình CPAN
# perl -MCPAN -eshell
cpan> o conf urllist push http://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/
cpan> o conf urllist push http://ftp.cpan.jp/
cpan> o conf commit


Giờ đây có thể install CPAN module ào ào với proxy.