kiếp ve sầu

Kiếp ve sầu này không phải là của Mr. Lam Trường, Mr. Đan Trường đâu nhé! Mọi thứ đều có lai lịch của mình, vậy cái tên Kiếp ve sầu từ đâu mà ra? Là từ một bài hát của nhạc sĩ Lam Phương – tác giả ca khúc nổi tiếng Bài tango cho em (từ ngày có em về, nhà mình toàn tiếng chửi thề, vừa đủ người chơi tiến lên, xong rồi mình đặt bàn binh xập xám…).

Kiếp ve sầu - Ánh Tuyết 

Và Ánh Tuyết trong post này cũng không phải là Ánh Tuyết sau 1975. Cũng cùng một giọng soprano như nhau nhưng hai người là hai ca sĩ nổi tiếng của hai giai đoạn khác nhau. Tôi đã có giới thiệu giọng ca Ánh Tuyết (pre 1975) qua một post trước đây.

Nữ danh ca tài sắc này làm mưa làm gió Sài thành một thời, trước cả khi giọng ca Thái Thanh lên ngôi! Tiếc rằng bản thu âm này chất lượng quá xấu. Một thời chẳng hiểu vì sao bị ám ảnh bởi ca khúc này, cuộc đời mình hẳn có gì đó ràng buộc với những duyên kiếp cầm ca…

one day when we were young

Từ đó khi xuân tái hồi,
Cho bùi ngùi thương nhớ tới xa xôi.
Nhớ tới câu thương yêu người,
Một ngày tuổi mới đôi mươi.

Ca khúc thứ 4 trong chuỗi những giai điệu valse chào xuân! Rất nhớ ca khúc này, những năm cấp 2, cấp 3, mỗi lần đi cắm trại, trong tiếng guitar bập bùng, bạn bè lại hát cho nhau nghe. Đến tận bây giờ cảm xúc rộn ràng vẫn còn đọng lại: you told me, you love me, when we were young one day. Lúc ấy cứ ngỡ đây là country music, nhưng bây giờ thì biết rất nhiều bài “popular song” được trích ra từ kho tàng nhạc cổ điển. Như bài này được trích từ vở operetta Der Zigeunerbaron (The Gypsy Baron) của Johann Strauss II. Trích đoạn mang tên Wer uns getraut (tiếng Đức, nghĩa là: Ai thành hôn cho chúng ta).

Wer Uns Getraut - Johann Strauss 
When we were young - Miliza Korjus 
Khúc hát thanh xuân - Hà Thanh 

Bài nhạc trở thành “popular song” qua phim The Great Waltz (1938), bộ phim hư cấu về cuộc đời của chính Johann Strauss. Mời các bạn nghe OST của phim này qua giọng ca của diễn viên / ca sĩ Miliza Korjus. NS Phạm Duy đã đặt lời Việt cho ca khúc (tựa đề mới: Khúc hát thanh xuân), giới thiệu ở đây qua giọng ca ngọt ngào của Hà Thanh. Chúng ta cũng có thể nghe trích đoạn trong vở nhạc kịch (tiếng Đức), nghe rồi mới thấy rằng chính bộ phim The Great Waltz đã trình bầy lại bản nhạc dưới dạng valse như chúng ta biết hiện nay. Những giai điệu đã quá phổ biến và quen thuộc này, lâu lâu nghe lại, vẫn như có thêm chút adrenaline trong huyết quản, nhất là khi gió mùa xuân đang tới.

mùa xuân đầu tiên

Thêm một bài trong chuỗi những điệu valse chào xuân. Một bài hát mà ai cũng biết: Mùa xuân đầu tiên. Mùa xuân đầu tiên là mùa xuân nào? Xin thưa đó là mùa xuân 1976, 20 năm kể từ sau vụ án Nhân Văn Giai Phẩm, nhạc sĩ Văn Cao mới sáng tác trở lại. Và cũng mất chừng ấy thời gian nữa để bài hát được chính thức công bố với công chúng (năm 1996 với tiếng hát Thanh Thuý).

Mùa xuân đầu tiên - Thanh Thuý 

Mà tại sao lại gọi là Mùa xuân đầu tiên, tại sao lại là năm 1976, tại sao lại có những lời ca: từ đây người biết yêu người, mùa xuân mơ ước ấy xưa có về đâu…? Thật tội nghiệp con người nghệ sĩ Văn Cao, ông mong mỏi rằng mọi khổ đau đã qua đi, trong khi thực sự chúng mới bắt đầu!

Một vài bìa nhạc Văn Cao:

domino

Domino, Domino, le printemps chante en moi, Dominique.
Le soleil s’est fait beau, J’ai le coeur comme un’boite à musique.

Năm mới nghe nhạc gì cho tâm hồn sảng khoái đây… tốt nhất là thêm một bản valse trẻ trung, sang trọng nữa. Chợt nghĩ ngay đến Domino của Louis Ferrari. Bản nhạc này được cho nghe lần đầu tiên hơn 15 năm trước, người đánh đàn đã quên lâu rồi, nhưng bản nhạc thì ở lại.

Domino - Daniele Vidal 
Domino - Tony Martin 
Khúc nhạc muôn đời - Thái Thanh 
Hội mùa hoa - Tam ca Áo trắng 

Hãy nghe lại bản nhạc quá đáng yêu của những năm 50 này qua 4 phần lời khác nhau: phần lời gốc tiếng Pháp, phần trình bày tiếng Anh của Tony Martin (rất đặc biệt), và 2 phiên bản “Việt hoá”: Khúc nhạc muôn đời do Thái Thanh trình bày và một bản mới hơn: Hội mùa hoa do Tam ca Áo trắng thể hiện.

xuân và tuổi trẻ


Thế là đã qua một năm mới, đã bước qua cái tuổi mà Khổng Tử gọi là “tam thập nhi lập”. 30 ta đã gọi là già chưa nhỉ? Chưa đâu, mình còn trẻ lắm. Vẫn còn nhiều cảm hứng khi nghe được một khúc ca hay, vẫn xao xuyến ngây ngô trước các cô gái đẹp! Chừng nào vẫn còn thấy Ánh Tuyết hát dở tức là mình chưa già! NS Văn Cao từng khóc khi nghe Ánh Tuyết hát, nhưng đấy là vì suốt mấy chục năm XHCN ở miền Bắc, người ta chỉ toàn hát “nhạc đỏ” mà quên đi, không biết cách hát một bản nhạc ngũ cung Việt Nam cho ra hồn. Ánh Tuyết theo tôi có chất giọng rất tốt, cảm được cái hồn của nhạc ngũ cung nhưng đôi chỗ vẫn còn xử lý vụng về chưa đạt. Nói thì nói vậy, bài Xuân và tuổi trẻ này Ánh Tuyết trình bày thật tuyệt, với bài này ca sĩ mới thể hiện được hết chất giọng soprano của mình.

Xuân và tuổi trẻ - Thái Thanh 
Xuân và tuổi trẻ - Ánh Tuyết 
Xuân và tuổi trẻ - Quỳnh Giao 

青年与青春 - Thanh niên dữ thanh xuân 
作曲:罗允正 作词:叶传华 歌手:张贴由

Trong một post trước của mình, tôi đã có đề cập đến tác giả La Hối của ca khúc Printemps et Jeunesse này. Trong post đó, tôi có ý muốn tìm bản lời tiếng Hoa của ca khúc, mặc dù đã được nghe trên TV, đến nay vẫn chưa thể tìm ra (xin xem phần update dưới đây). Về phần lời tiếng Việt mà chúng ta hiện đang hát: năm 1946, nhà thơ – đạo diễn Thế Lữ cùng đoàn ca múa nhạc Anh Vũ đến biểu diễn nghệ thuật tại Hội An đã hết sức yêu mến giai điệu Xuân và tuổi trẻ… Thế Lữ đã xin phép gia đình người cố nhạc sĩ viết lời cho nhạc phẩm nói trên. Sau đó, Nguyễn Xuân Khoát phối nhạc, Văn Chung soạn múa… nhóm hát Nguyễn Hữu Thiết, Tố Nga, Duy Liễu…

Update, Jan 4th, 2009

Sau một thời gian tìm kiếm, tôi đã có được kết quả như mong muốn. Đầu tiên là qua blog Nguyễn Nga mà tôi biết được tên bài hát trong tiếng Hoa là 青年与青春 (Thanh niên dữ thanh xuân). Tìm kiếm tựa đề tiếng Hoa này, tôi tìm được đến blog TyHongAu. Đây hầu như là địa chỉ duy nhất trên web có đề cập đến phần lời Hoa bài hát (ngay cả baidu.com cũng không tìm thấy trang này). Điều rất thú vị là chủ nhân blog là một ông già 99 tuổi, tên là 张贴由 (Trương Thiếp Do), người Việt gốc Hoa, định cư tại Canada. Cũng tại blog này, tôi tìm được 2 tư liệu quý giá: một là file mp3 chủ nhân blog (xin các bạn nhớ cho là đã 99 tuổi!) tự đàn guitar và hát bài này, hai là bản scan tờ nhạc với phần lời tiếng Hoa (nhấn vào ảnh bên để xem phiên bản phóng to). Mời các bạn nghe Xuân và tuổi trẻ của tác giả La Hối – La Doãn Chánh tiên sanh qua phần trình bày của “lão sư phụ” Trương Thiếp Do!

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

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 đỏ

Bà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 đều chỉ là Việt cả mà thôi!

the show must go on


Queen 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.

season greeting

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

Tự 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…

math expression on www

I 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

Từ 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


Có 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)

Muố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

The 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.

signals and slots

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

I 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

Bộ 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.

ôi những dòng sông nhỏ…

Một trong những bài hát hiếm hoi của Trịnh Công Sơn mà tôi thích, nhất là khi nghe không lời. Một trong số ít ỏi những bản nhạc của ông ăn sâu vào tâm hồn tôi như là kỷ niệm… Những trình bày khác nhau của bản nhạc, một hòa tấu piano, một độc tấu guitar (Võ Tá Hân), và một qua giọng hát khá thuyết phục của Trần Thu Hà (với guitar đệm thật đáng yêu). Một vài bìa nhạc Trịnh Công Sơn:

Tình xa - Piano (?) 
Tình xa - Guitar (Võ Tá Hân) 
Tình xa - Trần Thu Hà 

lucky luke – 1

Một bộ truyện tranh theo tôi là hay nhất trong tất cả những truyện tranh, Lucky Luke, hay hơn cả những truyện nổi tiếng khác như Asterix & Obelix hay Tintin. Truyện có không gian đa dạng, nhiều vị trí địa lý, nhiều thời điểm lịch sử, nhiều nhân vật của miền viễn Tây nước Mỹ thời gian đầu. Những tình huống được nhìn dưới các quan điểm khác nhau, đôi khi có vẻ “ngớ ngẩn”, nghề nghiệp và các nguyên tắc “bất di bất dịch” của nó… Những ẩn dụ trong Lucky Luke vẫn tiếp tục được trích dẫn rộng rãi trong nhiều tình huống của cuộc sống.

Tài bắn súng của Lucky Luke.

Trở ra từ phòng đánh bài.

Billy the Kid đi ăn cướp.

Anh em nhà Dalton, và thái độ khi bị gọi là “công dân lương thiện”.

Khi tàu sắp mắc cạn, thuyền trưởng không muốn bớt một chút nước nào từ dòng sông.

Thị trấn cờ bạc, nơi thị trưởng, con trai và cả con chó đều bị trét hắc ín và lông chim.

Trong tù, có được khẩu súng thật, Averell Dalton.. đi làm khẩu súng giả.

Mỗi thị trấn đều có một câu slogan và lòng hiếu khách khác nhau.

Về tính khí thất thường của con sông Mississipi.

Lão thợ sắp chữ nhà in và lời chào viết ngược theo đúng tác phong nghề nghiệp.

bang bang

Bang Bang (My baby shot me down) is quite a special song: written by Sonny Bono, performed by Cher (1966), covered by Nancy Sinatra (1967), and has been translated to various languages since then. Younger people would recognize the the music as main soundtrack in the film Kill Bill (2003).

Bang bang - Sheila 
Khi xưa ta bé - Mỹ Tâm 
My baby shot me down - Nancy Sinatra 

I actually did thought it was a French song, until I listened to the gentle My baby shot me down, the original soundtrack is really simple, and moving, compared the glamourous French version.