biệt kích, bộ binh & cảnh sát

ừ lâu tôi có một suy nghĩ, ẩn dụ vui vui về software engineering. Nay tìm được một bài viết tương tự ở đây, người ta cũng nghĩ như mình, và diễn đạt tốt hơn. Không có cách nào khác hơn là dịch lại nguyên văn bên dưới.

Có ba “lực lượng” hoàn toàn khác biệt có liên quan đến những giai đoạn hình thành và phát triển của một công ty, đó là: “biệt kích”, “bộ binh” và “cảnh sát”.

Biệt kích

Khi xâm chiếm một vùng lãnh thổ (hay thị trường), lực lượng tham chiến đầu tiên thường là các nhóm biệt kích. Như Stephen WozniakSteve Jobs của Apple, Don Estridge của IBM PC, Mitch KaporJonathan Sachs của Lotus 1-2-3… là những nhóm biệt kích. Nhảy dù vào sau lưng địch, đổ bộ bí mật lên bờ, gây ra thật nhiều thiệt hại cho đối phương, đặt đầu cầu cho những cuộc tấn công tiếp theo là công việc của biệt kích. Họ làm điều đó bằng cách tạo ra những mẫu hình sản phẩm mà ý tưởng sáng tạo của chúng xuất sắc đến nỗi những sản phẩm tương tự không có cách nào khác hơn là thua cuộc và bị đào thải.

Với hầu hết các loại sản phẩm, “biệt kích” là nhóm duy nhất có quyền sáng tạo: đẩy công nghệ tới những giới hạn mới, tìm ra những khách hàng tiềm năng, và xem quá trình phát triển như một cuộc phiêu lưu. Tuy vậy, cái họ làm ra được còn lâu mới có thể gọi là sản phẩm, chúng thường có những điểm yếu chết người mà cá tính “biệt kích” khó lòng nhận ra được.

“Biệt kích” thường chóng chán. Tôi (ND: tác giả) nhớ lại cuộc phỏng vấn đội trưởng một đội biệt kích Hoa Kỳ sau khi đổ bộ vào Panama: Chẳng có gì thần kỳ! Chúng ta vẫn còn đang ở đây! Một đôi khi nhóm biệt kích đâm chán nản ngay cả khi mẫu sản phẩm đầu tiên vẫn chưa xuất hiện, lúc đó đành phải chờ đến khi họ có hứng thú trở lại (hay là thuê một nhóm biệt kích khác). Một ví dụ: Ron Crane, trưởng nhóm “biệt kích” tại 3COM Corp, công ty sản xuất card Ethernet trước tiên, khi đang thiết kế card này, Crane phát chán và bỏ đi nghiên cứu hiệu ứng phản xạ âm thanh trên trần nhà công ty. Mọi người đành phải chờ cho đến khi Crane kết thúc việc nghiên cứu, thiết lập nên chuẩn nội thất mới cho công ty, tiếp tục với card mạng và đưa 3COM lên mức lợi nhuận 900 triệu.

BỘ BINH

Biệt kích là người tạo bước đột phá đầu tiên, tuy vậy hầu hết mọi cuộc chiến (hay thương vụ) đều là chiến tranh quy ước. Tiếp theo sau biệt kích, lực lượng bộ binh tấn công với số lượng lớn để phát triển hơn nữa những lợi thế có được ban đầu. Thử nghiệm, cải tiến, sản xuất, tiếp thị sản phẩm dựa trên nguyên mẫu ban đầu và bắt đầu thu về lợi nhuận. Nếu biệt kích sáng tạo những cách mới đề làm bị thương đối thủ, bộ binh mới thực sự là người kết liễu hoặc đẩy lùi đối phương, chiếm lĩnh trận địa và cắm cờ chiến thắng. Đôi khi, bộ binh cũng phải sửa chữa những sai lầm mà nhóm biệt kích mắc phải. Vì là một tập thể số đông, nhiều người, nhiều loại, bộ binh cần có một cơ chế quản lý, luật lệ phức tạp mà những tay biệt kích giỏi đều cảm thấy không thích hợp.

Cảnh sát

Khi các lực lượng biệt kích và bộ binh đã tiến được về Berlin (hay Baghdad 😀), những vùng đất bị bỏ lại phía sau cũng cần được bình định, quản lý. Lúc đó cần có một đội ngũ cảnh sát: thiết lập cuộc sống dân sự, xây dựng phát triển kinh tế. Cảnh sát thường xem công việc là công việc hơn là một cuộc phiêu lưu, họ ngại thay đổi, chấp nhận phần thưởng ít hơn với những vị trí ít rủi ro hơn. IBM, AT&T… những công ty lâu đời, đa phần thuộc lực lượng thứ 3 này, nhiều khi họ còn không nhớ những thành viên “biệt kích” hay “bộ binh” đầu tiên là những ai.

Thành lập và phát triển một công ty, hay điều hành một dự án phần mềm lớn đều cần dùng đến cả 3 lực lượng này. Dùng sai người (như “biệt kích”) vào sai vị trí (như bảo trì) là một thảm họa. Làm một “biệt kích” nghe thật hấp dẫn, tuy nhiên cũng còn tùy vào tình huống, “biệt kích” cũng có thể gây hại nghiêm trọng cho chính dự án anh ta đang phục vụ.

nhạc vàng – nhạc đỏ

ài Lời người ra đi này sáng tác năm 1949 trong kháng chiến 9 năm, của tác giả Trần Hoàn, nguyên bộ trưởng Bộ Văn hoá Thông tin. Thời gian ấy, lòng người còn lý tưởng, tâm hồn còn tươi trẻ, những Lời người ra đi, Sơn nữ ca… là những ca khúc đẹp, để rồi sau 1975, tác giả không còn sáng tác được một bài hát nào cho ra hồn nữa.

Khí nhạc: Nguyễn Đình Nghĩa 
Thanh nhạc: Ngọc Cẩm & Nguyễn Hữu Thiết 

Hãy nghe lại dáng nhạc ca khúc này, qua hai phần trình bày, phần thanh nhạc của cặp song ca Ngọc Cẩm & Nguyễn Hữu Thiết (tôi rất thích những phong cách trình bày rất Vietnamese – native như thế này), và nhất là phần khí nhạc của sáo thần Nguyễn Đình Nghĩa. Nhạc vàng, nhạc đỏ, dù vàng hay đỏ cũng là hai mầu của lá cờ, dù là cờ của bên nào ( hay , bên thì ít vàng nhiều đỏ, bên thì đỏ ít vàng nhiều – Việt cộng, Việt kiều, hai Việt cũng chỉ đều là Việt cả mà thôi! 😬

the show must go on


ueen có lẽ là band nhạc vĩ đại nhất qua mọi thời đại. Xét về mức độ phổ biến trong đại chúng thì The Beatles vẫn là số một, nhưng nếu xét về âm nhạc, Queen là đỉnh cao vời vợi mà nhiều band nhạc thế hệ sau vẫn phải ngước nhìn ngưỡng mộ. Nhạc của họ phần nhiều không phải thuộc loại easy – listening, và được gọi bằng cái tên music for musicians – âm nhạc dành cho nhạc sĩ.

The show must go on - Queen 
The show must go on 
(Moulin Rouge’s version)

Có một trilogy trong các tác phẩm của Queen mà tôi thường nghe, bộ ba bài hát: Bohemian rhapsody, We’re the champions, và Love of my life, một trilogy thể hiện quan điểm về cuộc sống, khởi đầu với một cái nhìn hiện sinh hoài nghi về thân phận con người (Bohemian rhapsody), tiếp diễn với việc chiến thắng định mệnh (We’re the champions) và kết thúc với một tình yêu xứng đáng (Love of my life).

Nhưng ca khúc hay nhất của Queen (nhất là phần vocal của Freddie Mercury) theo tôi là The show must go on, ca khúc được viết những năm cuối đời khi biết đã đối diện cái chết. Phần lời ca đã nói lên tất cả… trước những bi hài của sân khấu cuộc đời, tấn tuồng vẫn phải tiếp diễn thôi, tâm hồn tôi phong phú đầy mầu sắc như những cánh bướm, những ước mơ xưa vẫn còn đấy chưa chết đâu, và tôi, tôi có thể bay đấy các bạn ạ!

Những thính giả trẻ hơn sẽ nhận ra ca khúc này trong musical tuyệt vời Moulin Rouge, trong phim này, mọi diễn viên đều hát bằng giọng thật của mình. Đây là một phim tôi rất thích, nhiều trường đoạn âm nhạc hiện đại được lồng ghép hoàn hảo vào bối cảnh cổ điển, nhất là đoạn bên trong quán rượu Moulin Rouge với bài hát Smells like teen spirit.

career’s funs – 2

ver the years C and C++ programmers have devised many ways of making their writing clearer. As a result program are much more readable than ever before. I’ve often wondered if the lessons learned by programming could be applied to English as well. Take Microsoft notation (aka. Hungarian notation) for example. It puts a prefix on each variable name telling us what the type of the variable. Wouldn’t English be much clearer if we identified each verb with “v”, each noun with “n” and so on.

pAfter avAll aMany nEnglish nWords vCan vHave aMore cThan nOne nMeaning. pFor nExample “mall” vIs prBoth aA nVerb cAnd aA nNoun. pWith pnOur aNew nNotation pYou vCan vWrite nSomething aLike: aThere vWas aSuch aA nCrowd pAt arThe nMall aThat pnWe vWere vMalled cAnd nPeople vCan aEasily vUnderstand pYou.

avNext pnWe vTurn pnOur nAttention pTo nSentence vGrouping. pIn nC pnWe vUse avCurly nBraces “{}” pTo vGroup nStatements. pIn nEnglish pnWe vUse arThe nParagraph. aA nStart pOf nParagraph vIs vIndicated pBy aA aBlank nLine cOr aA nIndent. aBut pnThis nConstruct vIs aRather vLimited cAnd vConfusing.

😬😬

career’s funs – 1

ome fun warning stickers for use in software industry! 😀 We have tons of these kind of software, especially on Windoze. They make me remember a trial some years ago, in which a company had admitted that its optimization software does nothing at all but just slow down the installing machine a bit!

Warning: bloat-ware! This software will eat up half your hard drive. This software comes loaded with all sorts of fancy screens which require tons of bitmapped graphics. Of course we could have used simpler screens, but the the product wouldn’t look as good in the advertising brochure.
Warning: ad-ware! This product contains advertisements for all of our other products. The software you paid for is 20% software and 80% multi-media presentations designed to get you to buy our upgrade. Some of our best programmers worked on these demos so you’d better take a look at them.
Warning: version numbers ends in .0! The version number of this software ends with a .0. That means that we’ve added a lot of new features and tested none of them. If you really want software that works, wait for the maintenance release due out in about three months.
Warning: fritter-ware inside! This software has thousands of options allowing you to customize it extensively. In fact, without much trying, you can spend all your time customizing the software and none doing real work.
Warning: nag-ware! If you don’t register this program, it will nag you every five minutes until you do.
Warning: air-ware! This box contains a single floppy, a two page manual and 352 cubic inches of air. The reason the box is so big is that we wanted you to feel good about shelling out $250 for this product.
Warning: manual written by engineer! The manual has been written by our engineering staff. Our engineers understand lots of languages such as C, Java, C++ and FORTRAN. Unfortunately one of the ones the don’t understand is English. But we let them write manuals anyway. They’ve created a master work containing a lengthy description of the theory of operation, the algorithms design, the data structures, and the new technology used. Oh, and at the last minute they’ve even added a few pages at back on how to use the thing.
Warning: nothing-ware! We don’t guarantee that this software will do anything. When you pay us money you don’t even get a copy of the software to own. Instead you get a single license to use it. If it fails to work, crashes, or wipes out data, we absolve ourselves of any responsibility. Basically, we have all the rights, you have no rights, and you pay us money.

dell mini 9 hacks

collective compile of various hacks on the Dell Inspiron Mini 9. People has found lots of things to play around with this tiny toy. The fact that though a compact machine, the Dell Mini 9 still has some space and slots (power, data) inside to embed a few more devices internally. These hacks range from little enhancements to very useful features for someone. I would really want to try adding a touch screen to my Dell mini sometimes.

1.   Add HDD LED

One member of the My Dell Mini forums decided to add a “hard drive activity” indicator. He managed to do this without replacing either the low battery indicator or the power LED by placing a new blue LED near the battery light. So when the SSD is in use (the Dell Mini doesn’t actually have a hard drive, but rather a solid state disk), the blue light glows. When your battery light gets below 10%, it will blink orange.

2.   Add wireless mouse

Wireless mouse is very handy, I would always want to get rid of mouse cable. In this hack, the “hacker” mount the Nano Receiver for Logitech VX Nano laser mouse into the Mini 9 without breaking down the receiver or soldering it in. That way it can be removed or replaced easily in the future.

3.   Add GPS receiver

Today, a GPS receiver chip is quite cheap (and small). We can solder an (USB) GPS chip onto the toy’s board, and turn the machine into a GPS – enabled device, on which various interesting applications can be deployed. This is really a brilliant idea! (besides: GPS receiver chip with size of a small dime). Well, if you don’t have a car with GPS navigation, you can carry the Dell Mini with you! But don’t blame it if the navigation software tells you about the safe road ahead while you’re at bottom of a lake!

4.   Add 3G modem

You can also turn your Dell mini 9 into a 3G mobile phone by adding a PCIe WWAN card. In this simple hack, you replace the machine’s wireless card by the WWAN card, plug a SIM in, and using software like MobiLink to make telephone calls. Of course with 3G, you can have Internet and other things come with WWAN.

5.   Add touch screen

With the 8.9″ LCD (quite small), a point and click device like touch screen is very neccessary. I found this hack the greatest one on Dell Mini 9, you can leave your mouse at home, browsing (web, file…) and other various tasks can be done by touching directly onto your screen. Imagine we can install an (online) handwriting recognition package and input Chinese directly on the screen (though we’d had SCIM which does the job quite well). Packages for Chinese handwriting recognition are available in some Chinese Linux distros.

6.   Install Mac OS X

Mac OS X (10.5 – Leopard) run smoothly on Dell Mini 9. This is perfect for ones who adore Mac look and feel. Just download the Leopard ISO file, burn a DVD, boot up the machine with an external DVD drive and proceed with the installation. However, to take, you have to give somethings, ethernet simply won’t work, however, you can manage to get through with wifi and sound.

season greeting

Lạy Chúa, Chúa cứu thế,
Non nước con ngàn dâu bể…

ự hỏi giáng sinh năm nay có mầu gì, chắc là mầu… Lê Uyên Phương. Ngày trước, mọi năm, ở nhà đều có tổ chức Giáng sinh nho nhỏ, cũng có cây thông Noel (dù nhà tôi là một nhà thuần Phật giáo). Giáng sinh là mùa đoàn tụ, nhưng e rằng Giáng sinh năm nay là mùa biệt ly lớn lao!

Mùa hoa tuyết - Lê Uyên Phương 

Về mặt nhạc, bài hát này không có gì đặc biệt, một số nguyên tắc của hợp âm vòng, như the circle of fifth. Phần lời cũng không có gì nhiều để nói, Xuân Điềm vốn là một nhạc sĩ tuyên truyền của quân đội VHCH. Tuy vậy, thi thoảng vẫn thích nghe bài nhạc này giống như một kỷ niệm…

like father like… daughter

ou’re listening to Your eyes by Anoushka Shankar, daughter of Ravi Shankar. Since first heard, I’ve been listening extensively to his music, and later on his daughter’s music. It may be hard to perceive at fist, but you would soon be addicted to it, sound of the heavenly sitar. You could also find on youtube clips of Anoushka, co – work with Norah Jones (Shankar), the half – sister of Anoushka.

miền thùy dương

Về miền Trung, miền thuỳ dương bóng dừa ngàn thông.
Thuyền ngược xuôi suốt một dòng sông dài…

Về miền Trung - Thái Thanh 

gắt một cọng rau muống biển, cột hai chiếc dép lại với nhau và quàng qua cổ, đi chân trần qua những trảng cát. Một bước tới cát lại đẩy lùi hai bước, không cần biết đi đâu, bầu trời lác đác vài ánh sao le lói. Len lỏi giữa đám dương liễu, đi qua những ánh đom đóm và lửa ma trơi thoi thóp. Quá động cát này, xuống triền dốc thoi thỏi là đến mép nước.

Đêm nay biển rút ra xa bờ, để lại hàng cây số nước mênh mông xâm xấp đến gối. Vừa đi hắn vừa nghĩ, những mảnh đời Polynesia dân xứ này, mặn chát như tinh thể muối ngấm lâu năm trong sớ gỗ mạn thuyền. Những điều gì khác ngoài kia, nếu có điều gì tồn tại ngoài cái không gian bao la này, thảy đều chỉ là ảo vọng…

math expression on www

rarely need to write mathematics expressions on the web, but the last time I did, it took me some times to figure out just how to do. It’d turned out to be pretty easy, there’s a free LaTeX rendering server at yourequations.com. Excellent site! Just feed it with a LaTeX expression, it would render an image for you to put on your web page. This may be the best solution for now, while waiting for an workable HTML version that supports math.

There’s also a guide to embed this feature onto Blogger blogs (and also WordPress, and some PHP forums…) Just insert your LaTeX code between the pre (or code) tags as below and the jsTeXrender JavaScript would do the rest for you. This works fine for any browser with JavaScript support (mouse over the expressions and you would see the underlying LaTeX code). You may also need this LaTeX Reference Card for a list of LaTeX’s symbols.

Update, Otc 1st, 2010

Due to heavy traffic, yourequations.com has ceased the service. Please see this new post on how to run a LaTeX rendering server of your own!

trăng chiều

ừ trước đến nay có xu hướng giới thiệu nhiều nhạc miền Nam trước 75, đôi lúc còn khẳng định: CNXH làm băng hoại con người và cảm quan nghệ thuật. Đó có phải là một cái “confirmation bias” hay không thì tùy các bạn nghĩ. Cùng thời gian đó, sự xuống cấp không cứu vãn nổi của một bộ phận lớn âm nhạc ở miền Nam, kiểu nhạc Chế Linh – Lính chê, cũng chẳng phải là không hiển nhiên !?!?

Trăng chiều - Đặng Hữu Phúc - Ái Vân 

Để xoá bỏ những định kiến nếu có, mời các bạn nghe một đoản khúc thơ nho nhỏ dưới đây (nho nhỏ hàm ý là dễ thương nhưng có phần đơn giản). Để quay lại một không gian Hà Nội trong mắt ai, những năm đầu 80, có một mối tình đơn phương tuổi học trò, lãng mạn và sâu lắng. Có một chàng nhạc sĩ (tương lai) thầm yêu một cô ca sĩ (tương lai), tên cả hai người được ghi ra bên đây, bên dưới tiêu đề bài hát.

sáo thần nguyễn đình nghĩa


ó lẽ tôi phải dùng những ngôn từ tốt đẹp nhất để ngợi ca tiếng sáo thần Nguyễn Đình Nghĩa, tiếng sáo trúc Việt mê hồn này là thành qủa của một đời nghiên cứu và diễn tấu. Sinh ra và lớn lên tại Đà Nẵng, cựu học sinh trường Phan Châu Trinh, từ nhỏ được học khai tâm về sáo với một nghệ nhân gốc Hoa, tiếng sáo đã theo ông suốt một đời nghệ sĩ.

Polonaise (M.K. Oginsky) 
Badinerie (J.S. Bach) 
Tình ca (Phạm Duy) 
Nhạc sầu tương tư (Hoàng Trọng) 

Từ đầu những năm 60, tiếng sáo của ông đã nổi tiếng và được gọi là tiếng sáo thần. Ông dạy trường Quốc gia Âm nhạc và phụ trách môn Quốc nhạc tại Đại học Vạn Hạnh. Ông cũng tham gia nhiều liên hoan âm nhạc ở nước ngoài và thường được Hoàng gia các nước Thái Lan, Lào… mời trình diễn. Sau 1975, bị cấm trình diễn, ông chuyển qua nghiên cứu âm nhạc và nhạc cụ dân tộc. Ông là người đã cải tiến đàn T’rưng, mở rộng âm vực từ 1 octave lên 4 octave, cải tiến sáo trúc Việt Nam từ 6 lỗ thành 11 lỗ (rồi 16 lỗ).

Các nhạc cụ cải tiến đó đã có khả năng trình tấu nhạc cổ điển Tây phương, mà vẫn không mất đi âm sắc nguyên thủy của nhạc cụ truyền thống. Năm 1984 ông sang Mỹ, cùng với gia đình (vợ và 5 người con) tham gia trình diễn trên đài phát thanh, tham gia giảng dạy nhiều khoá học. Ông được nhiều giải thưởng của chính quyền Mỹ. Người Mỹ trong quá trình đi tìm những cái gọi là “complementary music” đã đánh giá những công trình của Nguyễn Đình Nghĩa rất cao. Nhiều thông tin về người cố nghệ sĩ có thể tìm thấy ở đây.

Xin giới thiệu đến các bạn hai bản nhạc Việt và hai bản cổ điển Tây phương qua tiếng sáo Nguyễn Đình Nghĩa. Phần nhạc cổ điển là hai bản nhạc tôi rất ưa thích và thường nghe, phần nhạc Việt là hai tác phẩm, một của Phạm Duy và một của Hoàng Trọng. Nghe tiếng sáo này rồi mới hiểu tại sao trong văn hóa Tây phương, danh từ The piper lại ám chỉ một “thế lực” quyến rũ ma quái đến vậy. Cũng xin nói thêm là chính nhờ bản trình tấu sáo này mà tôi nhận ra và cảm thấy dáng nhạc thượng du miền Bắc rất duyên dáng trong Nhạc sầu tương tư, một bản nhạc tôi đã nghe nhiều nhưng vẫn không cảm được cho dù là qua sự trình diễn của nhiều giọng ca nổi tiếng.

đêm ngắn tình dài

Theo tôi tân nhạc Việt Nam phải thể hiện rõ cá tính Việt Nam. Để đạt được điều này, người sáng tác phải hiểu rõ nhạc Việt qua cách học nhạc cụ cổ truyền cũng như hát được các điệu hát cổ truyền. (Dương Thiệu Tước)

Dương Thiệu Tước thật tình muốn dùng nhạc pháp Tây Phương để soạn nhạc Việt mới, nhưng ông bị nhạc ngũ cung Việt Nam trói ông lại… Nhạc Dương Thiệu Tước, theo tôi, là loại nhạc tình tứ, nhưng cũng rất sang trọng. Ðó là những ca khúc tình ái thốt lên từ con tim của một nghệ sĩ dòng dõi nhà quan. ( Hồi ký Phạm Duy, tập 1, chương 12)

uốn mượn bài hát Đêm ngắn tình dài này như phần mở đầu cho bài viết giới thiệu về một nhạc sĩ đặc biệt: Dương Thiệu Tước. Lúc nhỏ, đây gần như là bài nhạc duy nhất của Dương Thiệu Tước gây được dấu ấn sâu đậm trong tôi, một phần vì lúc ấy tôi còn chưa hiểu và cảm được những giai điệu ngũ cung, chỉ biết về ông qua một số ca khúc mang tính Tây phương: Đêm ngắn tình dài, Bóng chiều xưa, Ngọc lan, Chiều… Phần nữa vì nét nhạc vừa cổ kính, vừa tân kỳ của bài hát, ca tụng khát vọng tình yêu đôi lứa trong một không gian phảng phất Đường-thi: có trăng, có rượu hoàng hoa… và lại có anh và em, có người con trai và con gái, điều rất ít thấy trong thơ cổ.

Đêm ngắn tình dài - Thái Thanh 
Tiếng xưa - Hà Thanh 

Còn một tối gần bên nhau… cái lời nhạc nói lên khát vọng tình yêu vừa mãnh liệt, vừa êm đềm, đối với tôi lúc ấy đã đủ để nói lên một tâm hồn nhạc đặc biệt mà chỉ sau này tôi mới hiểu rõ được. Khi viết nhạc thất cung theo kiểu Tây phương, nhạc của ông “rất Tây”, điển hình như bài Ngọc lan, nghe bài này chúng ta tưởng như đang nghe Chopin hay Schumann. Ngay từ khi mọi người còn phải vay mượn nhạc điệu Tây phương để soạn lời ca tiếng Việt và gọi nó là bài ta theo điệu tây thì ông đã soạn những bài có thể gọi là bài tây theo điệu ta.

Còn khi viết nhạc ngũ cung, nhạc của ông lại “quá ngũ cung”. Nếu như nhạc ngũ cung của Phạm Duy là thoát thai từ dân ca, khi hát cần luyến láy một chút thì mới tìm thấy được dáng nhạc, thì của Dương Thiệu Tước tự nó đã có đậm đặc chất ngũ cung rồi, cứ hát lên là như tìm lại được những nét dân ca miền Thùy Dương xứ Huế. Tuy là người Hà Nội nhưng nhạc của Dương Thiệu Tước thể hiện một sự thẩm âm đặc biệt mẫn cảm với dân ca Huế, phải chăng chính là nhờ mối tình say đắm với một người con gái sông Hương núi Ngự, nữ ca sĩ Minh Trang (thân mẫu ca sĩ Quỳnh Giao).

Một vài bìa nhạc Dương Thiệu Tước:

la bohème

he only song posted twice on my blog, my previous post is here (this version is performed when Charles was still young, a much higher tempo). I’d listened to both the vocal & instrumental versions of this song long before, but didn’t recognize that they are actually one same song. Just by a sudden special chance in Dalat made me realise that it is Paul Mauriat who was covering Charles Aznavour.

La Bohème - Charles Aznavour 
La Bohème - Paul Mauriat 

Charles Aznavour is a very big name in American & French music, but much more popular in his French audience. Till now, he still go to stage and have many performance at the age of 83, and still attract and seduce a lot of listeners. He is called by the title French Frank Sinatra, but to me Charles Aznavour is much more different however, Frank Sinatra didn’t wrote the song himself.

dell inspiron mini 9



y new Dell Inspiron mini 9 notebook: the company laptop is far too heavy to carry back and forth daily, and this is really a cute tiny toy to have. Having dimensions briefly larger than a pencil, the notebook is really light, its display is bright and clear, sound is pretty good, and the external speaker is amazing for such a mini notebook.

This is a laptop with no moving part: hard disk is solid – state (16GB), no ventilating fan (the temperature is just right after long use). The disadvantage with the toy is that keyboard is quite small and strange, which may take times to get familiar with. Ubuntu (Hardy Heron) came pre-installed, and every softwares work out-of-the-box: graphics, sound, wifi, webcam…

The distro is a customized version for Dell called Netbook Remix, however, after a while, I get bored with that and switch to the default Gnome view. The good point is that mp3, Acrobat Reader, Adobe Flash, Sun Java… licenses come with the distro, there’s no need to hack for these stuffs. Please see below for some GUI screenshots.

signals and slots

C makes U hang yourself;
C++ even gives U a rope object to hang;
C# scourges U using a rope wrapper!

rarely talk about programming unless it comes to some new idea or something fun. However, in this article, I’m going to summarize a part of experiences in my career, about important concepts that I’ve learned and used: signals and slots. First appear and remain as fundamental concepts in the Qt library (“Qt” pronounced “cute” – which is so cute as a cross-platform application framework), the concepts has been adapted and developed into some other libraries (such as boost) and are being proposed as next standards for C++ language.

Please note that we’re talking C/C++ here, although signals & slots has been brought to many other languages (Java, Python, Ruby, JavaScript, etc.) Every coin has two sides and C/C++ is no exception, it has its own advantages and disadvantages (depend on types of applications). But the thing I like about C/C++ is that its half – civilized nature made it a strong language: the balance between abstraction and comprehensiveness has always been considered as core factor.

Noone want to build general applications using Assembly, and noone want to write lengthy code just for some simple features. To adhere the doctrine, strong – abstraction concepts must be introduced to capture grammar of the language, and simple, clear syntax that would make the code concise and comprehensive.

I came to signals & slots as solution to problems I’ve met when leading the CMS project, a DVRs managing software (client & server) with complicated GUI: a few screens, each screen can have a dozen tabs, each tabs can have hundreds of controls. Events on one control can affect other controls on other tab or screen, events can be user inputs as well as various signals come from dozens of (managed) network client machines.

The overwhelmingly – complicated communications surpass every MPM (message passing method), then signals & slots appeared as a saviour solution. To be simple, signals & slots is a very efficient mean of interaction between objects within a process space. I personally think it would be the next metaphor extension added to C/C++ language. Structure of this post would be as follow:

1. Introduction to signals & slots, from raw to abstract concepts.

2. ISO C++ compliant and cross – compiler, cross – flatform problems (would discuss about delegate and how function pointer has evolved from C to C++).

3. Different implementations of signals & slots: Qt, boost, sigslot, libsigc++

1.   INTRODUCTION

Flow of code is no more than a series of function call, and to perform asynchronous function call, traditional C programming use callback. A callback is a pointer to a function, so if you want a processing function to notify you about some event, you pass a pointer to another function (the callback) to the processing function. Callbacks have two fundamental flaws: firstly, they are not type-safe, we can never be certain that the processing function will call the callback with the correct arguments. Secondly, the callback is strongly coupled to the processing function since the processing function must know which callback to call. In C, to define function pointer, you would write something like this:

float (*my_func_ptr)(int, char *);
typedef float (*MyFuncPtrType)(int, char *);
MyFuncPtrType my_func_ptr;

When move to C++, things are a bit more complicated (note the weird syntax ->* to call a member function through pointer).

float (SomeClass::*my_memfunc_ptr)(int, char *);
my_memfunc_ptr = &SomeClass::some_member_func;
SomeClass *x = new SomeClass;
(x->*my_memfunc_ptr)(6, "Another Arbitrary Parameter");

Though a very strong concept in C, function pointer add little to the language C++. The only two uses of member function pointer in C++ are:

  • Demonstrate the tricky syntax of the language.

  • Help in implementation of delegate.

Now, imagine slots as invisible communication channels, every object can register to listen to some channels by providing delegates (pointer to a member function). The delegate would be invoked when slot is “filled” with a signal. The signals and slots mechanism is type safe: signature of a signal must match signature of the receiving slot. Signals and slots are loosely coupled: a class which emits a signal neither knows nor cares which slots receive the signal. To summarize the benifits:

  • Syntactically neater: signals & slots make for very readable code: you define the signals, you define the slots, then you wire them up.

  • Inherently robust: when either end of a signal/slot connection is destroyed, the connection is automatically removed. It is therefore impossible to emit a signal and have it arrive at a class that has already been deleted. Best of all, you don’t need to write any cleanup code.

  • Easier code reuse: since the thing that has to type-agree is the signal and the slot, not the whole class interface, it is much easier to plug together disparate classes that had never initially been intended to work in that way.

2.   DELEGATE

To summarize section 1: pointer is the root of all evils. Function pointer is the physical of callback method traditionally used in C programming. When evolved to C++, the C++ standard committee failed to address how to define function pointer to a single C++ object. With common-sense knowledge, we know that it take two elements to represent the thing: first is the address of the object itself (the implicit pointer this), second is pointer to the object’s member functions. The undefined land leads to different implementations across various compilers.

Contrary to common belief, the actual physical storage of pointer differs between various compilers, and even differs between types of pointer, e.g: pointer to a single – inheritance object, an multiple – inheritance one or virtual inheritance. The table below shows how many bytes it take to store pointers on different compilers (just make use of the operator sizeof). Then to calculate the actual member function’s address, each compiler uses one kind or another of offset:

struct BorlandMFP
{
        CODEPTR m_func_address;
        int delta, vindex;
};
if (vindex==0) adjustedthis = this + delta;
else adjustedthis = *(this + vindex –1) + delta;
C++
compiler
void*
pointer
function
pointer
single
inheritance
multiple
inheritance
virtual
inheritance
MS VC++ 4 4 4 8 12
GNU G++ 4 4 8 8 8
Borland C++ 4 4 12 12 12

So, delegate is just the new name for pointer to (an object’s) member function. The hard part really is that: since each compiler stores different type of pointers differently, there’s need for a way to store delegate in a universal manner: cross compilers and cross flatforms. Various techniques have been proposed by excellent programmers. Please refer to the articles below for specific techniques. I personally would prefer the method of Quynh Nguyen, an engineer at Global Cybersoft (Vietnam) Ltd.

3.   IMPLEMENTATIONS

To make those obscured concepts above clearer, I would go into some detailed implementations of signals & slots with the emphasize on the sigslot library, for this is really a compact lib: everything is contained in just one header file. Suppose you have a server that would receive some signal from network (tcp socket), then parse the received data and trigger some processing (display on GUI, store to disk…). We would define the “network signal” as follow (please note any number of parameters can be defined, we use an int and a char* here just for the example):

// the temmplate ‘signal2’ denote for
// a signal with 2 parameters

signal2<int, char*>m_netSig;

Then, at the place you want to process that event, e.g some class CDisplayForm, you would need to provide a function to process the signal:

DisplayForm::OnNetSig (int cmd, char* data)
{
  // the delegate would be invoked
  // when the signal is recieved

}

Please note that multiple objects can register to a same signal slot (and vice versa), e.g some class CRecordThread would also need to log that event to database. Then the listening objects would just register with the signal slot using a connect function:

// we pass the function pointer
// here to be called later

m_netSig.connect (this, &CDisplayForm::OnNetSig);

When the network signal arrive, e.g in some class CAsyncSocket, we would fire the signal and get it populated to all connected objects:

// emit the signal with it’s data
m_netSig.emit (NETSIG_DATA_RECEIVE, xmlStr);

Then the CDisplayForm and CRecordThread object would both receive the signal. Please note that when either end of the communication channel go out of scope, the connection is automatically removed, you don’t have to write any cleanup code. Just define the signal, the slot and wire them up! Any unrelated classes can be wired up in this type-safe manner without any pre-defined relation within them.

Speaking as an ex-hardware designer, I’d like software components to have pins around their edges, like ICs, so they can be ‘wired up’, but otherwise should be well behaved… I don’t want to know how that pin is wired internally – I just want to know that it will work when I send a signal into it.
(Sarah Thompson – sigslot library)

lucky luke – 2

ộ truyện tranh Lucky Luke thú vị trong từng chi tiết nhỏ: một lão thợ hớt tóc người Ý (thợ hớt tóc luôn phải là người Ý) mang cái tên Baldini (chẳng phải đã có câu thành ngữ: Never trust a bald barber đó sao) 😀, một tay tướng cướp lấy biệt hiệu là Po-8 (đọc như poet – nhà thơ)… Những nét cá tính và văn hoá Mỹ được mô tả một cách cô đặc, cường điệu và đầy tính hài hước.

Quá khiếp sợ vì 4 anh em nhà Dalton…

Và sáng kiến sửa chữa bánh xe độc đáo…

Ngay cả tiếng ngáy của những con người khác nhau cũng sẽ khác nhau.

Cuộc sống của những cao-bồi, lúc nào cũng canh chừng nhau thế này, ai đó hắt hơi thì sẽ có đổ máu.

Con sư tử mang tên đô đốc Nelson, và những chế giễu trên cái tên.

Thức uống của người và ngựa.

Lập trường nghề nghiệp của tay nhà đòn.

Đạo đức của người và ngựa.

Vận mệnh lớn lao của nước Mỹ qua việc treo cổ một người khác.