Bắt đầu với API Win32

Posted in Lập trình VC++/MFC/ALT on Tháng Năm 6, 2009 by luongkhanh

Có thể nói API tuy đã cổ xưa nhưng tầm quan trọng của nó đối với hệ thống của Window thì vẫn vô cùng quan trọng. Hôm nay Khánh tôi xin giới thiệu với các bạn viết code để tạo ra ứng dụng của cửa sổ Windows cơ bản, qua đây mọi người có thể hiểu rõ hơn về mô hình hoạt động của Windows.

Thực tế mà nói lập trình API khó hơn Java hay C# một chút, theo đánh giá của cá nhân tôi, API nó giống theo kiểu HTML, viết để tạo thành các window, listbox, checkbox, menu, dialog, pen, Cursor, brush… và trong một ứng dụng mỗi đối tượng đều đi kèm một Handle, chúng ta cán Handle cho đối tượng là để thông báo với hệ điều hành rằng chúng ta sẽ sử dụng đối tượng nào, qua đó hệ điều hành sẽ cung cấp các thư viện và cấp phát bộ nhớ cho mỗi đối tượng.

Khánh tôi xin thông báo với các bạn một chút, đó là nếu các bạn thấy bài viết của tôi có ích cho các bạn thì mong các bạn để lại một lời cám ơn trong phần “Comment” để khánh tôi có động lực viết tiếp theo yêu cầu của các bạn. Xin chân thành cảm ơn.

Cuộc sống phụ thuộc vào cách nhìn của chúng ta

Posted in Cuộc sống & công nghệ on Tháng Năm 4, 2009 by luongkhanh

Cho dù đi đến bất kỳ nơi đâu, trải qua bất cứ chuyện gì và thời gian bao lâu thì bản chất con người bạn cũng vẫn thế. Điều này cũng đồng nghĩa với việc bạn hãy quên đi vọng tưởng rằng, nếu ở một hoàn cảnh khác, một nơi khác thì tính cách, cuộc đời mình sẽ thay đổi.
blog
Chúng ta thường có khuynh hướng tin rằng, nếu cuộc sống của mình giàu có, thu nhập cao, sống trong ngôi nhà to lớn… thì chắc rằng chúng ta sẽ không còn phiền muộn, than vãn nữa. Chúng ta sẽ hạnh phúc và hài lòng hơn với cuộc sống. Điều này hoàn toàn không hẳn là thế.

Thực tế, nếu có thói quen suy nghĩ tiêu cực như thế – ví dụ bạn là người hay bực bội, luôn cau có và khó chịu, hoặc luôn ước mong mọi việc sẽ khác đi so với tình trạng trước mắt – thì những suy nghĩ này sẽ luôn đi theo bạn, cho dù bạn đến bất cứ nơi đâu và ở vào hoàn cảnh khác tốt hơn.Và điều ngược lại cũng hoàn toàn đúng. Nếu bạn là người luôn vui vẻ, có cái nhìn bao dung với đời thì cho dù từ hoàn cảnh tốt rơi vào hoàn cảnh khó khăn, bạn cũng không hề than vãn hay thể hiện sự khó chịu.

Có một câu chuyện rất thú vị như sau. Một ông lão ngồi hóng mát trước cửa nhà. Trên đường có nhiều tốp người di cư đến. Người nào cũng mang theo nhiều túi xách và trên xe chở đầy vật dụng. Tốp người đầu tiên ghé lại hỏi ông lão: “Dân ở đây sống thế nào hở bác?”. Ông lão trả lời: “Thế người dân chỗ anh ở trước đây sống ra sao?”. Người mới đến trả lời: “Họ sống ích kỷ và rất tham lam”. Ông lão trả lời: “Người dân ở đây cũng vậy!”. Tiếp đến, tốp đi sau cũng ghé hỏi ông lão cùng một câu như thế. Ông lão cũng hỏi họ câu hỏi trên, nhưng nhận được câu trả lời rằng: “Người dân chỗ tôi ở trước đây sống rất tốt bụng, hiền lành và nhân ái”. Ông lão đã không ngần ngại trả lời rằng: “Người dân ở đây cũng hiền lành, tốt bụng và nhân ái như thế!”

Câu chuyện trên nhắn gửi đến bạn thông điệp rằng, bạn đã nhìn nhận cuộc sống thế nào, thì cuộc sống sẽ đối đãi lại bạn như thế đó. Khi cuộc sống hoà thuận và bằng lòng với những gì đang có, thay vì vọng tưởng về những điều tốt đẹp vượt qua tầm tay, cuộc sống của bạn chắc chắn sẽ được thanh thản và thoải mái. Và dù đi đến bất cứ nơi đâu, làm bất cứ việc gì, gặp gỡ bất cứ ai, bạn cũng sẽ mang theo cảm giác bình yên đó. Bạn sẽ nhận thấy rằng, dù hoàn cảnh thay đổi, bản chất của mình sẽ vẫn không hề thay đổi.

Công nghệ 3G

Posted in Cuộc sống & công nghệ on Tháng Tư 28, 2009 by luongkhanh

small_1222580173_nv
3G là thuật ngữ dùng để chỉ các hệ thống thông tin di động thế hệ thứ 3 (Third Generation). Đã có rất nhiều người nhầm lẫn một cách vô ý hoăc hữu ý giữa hai khái niệm 3G và UMTS (Universal Mobile elecommunications Systems).

1222580849_nv

Để hiểu thế nào là công nghệ 3G, chúng ta hãy xét qua đôi nét về lịch sử phát triển của các hệ thống điện thoại di động. Mặc dù các hệ thống thông tin di động thử nghiệm đầu tiên đựơc sử dụng vào những năm 1930-1940 trong trong các sở cảnh sát Hoa Kỳ nhưng các hệ thống điện thoại di động thương mại thực sự chỉ ra đời vào khoảng cuối những năm 1970 đầu những năm 1980. Các hệ thống điện thoại thế hệ đầu sử dụng công nghệ tương tự và người ta gọi các hệ thống điện thoại kể trên là các hệ thống 1G.
Khi số lượng các thuê bao trong mạng tăng lên, người ta thấy cần phải có biện pháp nâng cao dung lượng của mạng, chất lượng các cuộc đàm thoại cũng như cung cấp thêm một số dịch vụ bổ sung cho mạng. Để giải quyết vấn đề này người ta đã nghĩ đến việc số hoá các hệ thống điện thoại di động, và điều này dẫn tới sự ra đời của các hệ thống điện thoại di động thế hệ 2.
Ở châu Âu, vào năm 1982 tổ chức các nhà cung cấp dịch vụ viễn thông châu Âu (CEPT – Conférence Européene de Postes et Telécommunications) đã thống nhất thành lập một nhóm nghiên cứu đặc biệt gọi là Groupe Spéciale Mobile (GSM) có nhiệm vụ xây dựng bộ các chỉ tiêu kỹ thuật cho mạng điện thoại di động toàn châu Âu hoạt động ở dải tần 900 MHz. Nhóm nghiên cứu đã xem xét nhiều giải pháp khác nhau và cuối cùng đi đến thống nhất sử dụng kỹ thuật đa truy nhập phân chia theo mã băng hẹp (Narrow Band TDMA). Năm 1988 phiên bản dự thảo đầu tiên của GSM đã được hoàn thành và hệ thống GSM đầu tiên được triển khai vào khoảng năm 1991. Kể từ khi ra đời, các hệ thống thông tin di động GSM đã phát triển với một tốc độ hết sức nhanh chóng, có mặt ở 140 quốc gia và có số thuê bao lên tới gần 1 tỷ. Lúc này thuật ngữ GSM có một ý nghĩa mới đó là hệ thống thông tin di động toàn cầu (Global System Mobile).
Cũng trong thời gian kể trên, ở Mỹ các hệ thống điện thoại tương tự thế hệ thứ nhất AMPS được phát triển thành các hệ thống điện thoại di động số thế hệ 2 tuân thủ tiêu chuẩn của hiệp hội viễn thông Mỹ IS-136. Khi công nghệ CDMA (Code Division Multiple Access – IS-95) ra đời, các nhà cung cấp dịch vụ điện thoại di động ở Mỹ cung cấp dịch vụ mode song song, cho phép thuê bao có thể truy cập vào cả hai mạng IS-136 và IS-95.

Công nghệ 3G
Do có nhận thức rõ về tầm quan trọng của các hệ thống thông tin di động mà ở châu Âu, ngay khi quá trình tiêu chuẩn hoá GSM chưa kết thúc người ta đã tiến hành dự án nghiên cứu RACE 1043 với mục đích chính là xác định các dịch vụ và công nghệ cho hệ thống thông tin di động thế hệ thứ 3 cho năm 2000. Hệ thống 3G của châu Âu được gọi là UMTS. Những người thực hiện dự án mong muốn rằng hệ thống UMTS trong tương lai sẽ được phát triển từ các hệ thống GSM hiện tại. Ngoài ra người ta còn có một mong muốn rất lớn là hệ thống UMTS sẽ có khả năng kết hợp nhiều mạng khác nhau như PMR, MSS, WLAN… thành một mạng thống nhất có khả năng hỗ trợ các dịch vụ số liệu tốc độ cao và quan trọng hơn đây sẽ là một mạng hướng dịch vụ.
Song song với châu Âu, Liên minh Viễn thông Quốc tế (ITU – International Telecommunications Union) cũng đã thành lập một nhóm nghiên cứu để nghiên cứu về các hệ thống thông tin di động thế hệ 3, nhóm nghiên cứu TG8/1. Nhóm nghiên cứu đặt tên cho hệ thống thông tin di động thế hệ thứ 3 của mình là Hệ thống Thông tin Di động Mặt đất Tương lai (FPLMTS – Future Public Land Mobile Telecommunications System). Sau này, nhóm nghiên cứu đổi tên hệ thống thông tin di động của mình thành Hệ thống Thông tin Di động Toàn cầu cho năm 2000 (IMT-2000 – International Mobile Telecommunications for the year 2000).
Đương nhiên là các nhà phát triển UMTS (châu Âu) mong muốn ITU chấp nhận hệ thống chấp nhận toàn bộ những đề xuất của mình và sử dụng hệ thống UMTS làm cơ sở cho hệ thống IMT-2000. Tuy nhiên vấn đề không phải đơn giản như vậy, đã có tới 16 đề xuất cho hệ thống thông tin di động IMT-2000 (bao gồm 10 đề xuất cho các hệ thống mặt đất và 6 đề xuất cho các hệ thống vệ tinh). Dựa trên đặc điểm của các đề xuất, ITU đã phân các đề xuất thành 5 nhóm chính:
- IMT DS (trải phổ dãy trực tiếp). Người ta thường gọi các hệ thống này là UTRA FDD và WCDMA. Trong đó UTRA là từ viết tắt của UMTS Terrestrial Radio Access.
- IMT MC (nhiều sóng mang). Đây là phiên bản 3G của hệ thống IS-95 (hiện nay gọi là cdmaOne)
- IMT TC (mã thời gian). Về thực chất đây là UTRA TDD, nghĩa là hệ thống UTRA sử dụng phương pháp song công phân chia theo thời gian.
- IMT SC (một sóng mang). Các hệ thống thuộc nhóm này được phát triển từ các hệ thống GSM hiện có lên GSM 2+ (được gọi là EDGE).
- IMT FT (thời gian tần số). Đây là hệ thống các thiết bị kéo dài thuê bao số ở châu Âu.

Công nghệ 3G nào cho Việt Nam?

Như tôi đã trình bày ở trên, hiện nay trên thế giới có tới 5 nhóm công nghệ được đề xuất cho các hệ thống thông tin di động thế hệ thứ 3 vậy con đường nào là hợp lý cho Việt Nam? Để trả lời câu hỏi này chúng ta cần phải xem xét đến 2 khía cạnh, đó là hiện trạng mạng viễn thông Việt Nam và xu thế phát triển công nghệ của thế giới.
Hiện tại Việt Nam có 3 công ty cung cấp dịch vụ thông tin di động đã/chuẩn bị hoạt động. Đó là công ty VMS (GSM), VinaPhone (GSM) và Saigon Postel (cdmaOne). Tổng số thuê bao của hai nhà cung cấp dịch vụ GSM khoảng hơn 1 triệu (rất khó tính chính xác con số này bởi vì hiện tại có tới 70% số thuê bao sử dụng dịch vụ trả tiền trước). Hầu hết các trạm gốc đều sử dụng dải tần 900 MHz. Saigon Postel sẽ cung cấp dịch vụ thông tin di động CDMA vào tháng 7 (số thuê bao hiện tại = 0). Để tiến tới mạng 3G từ mạng GSM thì con đường hợp lý nhất, theo hầu hết các nhà phân tích là từ GSM -> GPRS -> WCDMA. Theo như quảng cáo của hầu hết các nhà cung cấp giải pháp viễn thông thì đây là con đường hiệu quả nhất vì nó cho phép tận dụng tối đa cơ sở hạ tầng của mạng hiện có. Nhưng theo quan điểm của cá nhân tôi thì để thực hiện bước chuyển đổi như vậy là rất tốn kém và lãng phí. Xin lấy ví dụ, khi tiến hành chuyển đổi từ GSM sang GPRS thì cần phải nâng cấp toàn bộ phần giao diện vô tuyến, các khối điều khiển truy nhập và lắp đặt thêm các khối hỗ trợ dịch vụ chuyển mạch gói trong mạng (ví dụ GGSN, SGSN…). Tương tự như vậy khi chuyển đổi từ GPRS sang WCDMA ta lại phải tiến hành một bước nâng cấp và … vứt bỏ. Bản thân tôi cũng đã được tham dự khá nhiều hội thảo về tiến trình chuyển đổi lên 3G. Tôi rất thích một câu nói của một nhà cung cấp dịch vụ (người trình bày hội thảo): “Tiến trình chuyển đổi (GSM->WCDMA) chẳng qua chỉ là cách vẽ trên sơ đồ mà thôi. Còn về thực chất cái mà bạn có thể tận dụng được chẳng qua chỉ là… cái nhà chứa thiết bị mà thôi”.
Do CDMA có rất nhiều ưu điểm so với các phương thức đa truy nhập khác như hiệu suất sử dụng phổ tần cao, có khả năng chuyển giao mềm, đơn giản hoá việc phân chia và quản lý tần số… nên dù ở châu Âu hay châu Mỹ người ta cũng đều ngầm hiểu với nhau rằng mạng 3G trong tương lai sẽ là mạng sử dụng công nghệ CDMA. Những mạng sử dụng công nghệ CDMA hiện tại (ví dụ mạng của Saigon Postel) sẽ có khả năng chuyển đổi dễ dàng sang mạng 3G hơn. Con đường là cdmaOne ->cdma2000 1X ->cdma2000 3X. hoặc cdma2000 RTT1X ->cdma2000RTT3X. Việc chuyển đổi cho phép tận dụng hầu như toàn bộ các thiết bị sẵn có của mạng mà không cần phải nâng cấp, lắp đặt thêm nhiều khối chức năng như đối với các hệ thống GSM.
Như vậy, đối với các nhà cung cấp dịch vụ thông tin di động CDMA như Saigon Postel thì chắc chắn họ sẽ chọn con đường cdmaOne->cdma2000 1x ->cdma2000 3x hoặc cdmaOne ->cdma2000 3x.
Còn đối với VNPT (nhà cung cấp dịch vụ viễn thông lớn nhất Việt Nam thì sao?. Có hai lựa chọn cho họ. Thứ nhất, phát triển mạng GSM hiện tại lên GPRS rồi lên WCDMA -> Cách này tương đối tốn kém. Cách thứ 2: hiện tại mạng GSM mới chỉ dùng các băng tần 900 MHz và số lượng các thuê bao chưa phải là rất lớn, có thể triển khai song song dịch vụ CDMA ở dải tần 1800 MHz – 1900 MHz. Cùng với thời gian, mạng này sẽ nở dần ra và cung cấp các dịch vụ 3G trong tương lai. Đề xuất cụ thể: triển khai ngay mạng CDMA sử dung công nghệ cdma2000 1X (2.5G).

Các nhà cung cấp dịch vụ VNPT sẽ chọn con đường nào?
Từ xưa đến nay có một nguyên tắc quan trọng nhất trong việc điều hành công việc ở Việt Nam, đó là nguyên tắc ổn định là trên hết. Với tâm lý trên thì dường như các nhà lãnh đạo VNPT thiên về giải pháp an toàn tức là phát triển mạng 3G từ mạng GSM hiện tại và tất nhiên con đường đi sẽ là GSM ->GPRS->WCDMA. Với cách đi này thì khả năng đổ vỡ sẽ thấp nhưng hiệu quả đương nhiên cũng sẽ không cao. Nhưng không ai lai muốn bị cắt chức như tổng giam đốc Vietxo Petro.

Khi nào triển khai công nghệ 3G là hợp lý?
Một lần nữa vấn đề chính sách lại được đặt ra. Hiện tại, giá cước viễn thông Viêt Nam do Bộ Bưu chính Viễn thông quy định. Giá cước như hiện nay là quá cao so với hầu hết các nước trong khu vực cũng như là quá cao so với chi phí sản xuất thực tế bỏ ra. Nếu triển khai dịch 3G thì mức giá chắc chắn sẽ phải cao hơn giá các dịch vụ 2G hiện tại và như thế là quá cao so với mức thu nhập của người Việt Nam. Theo một số tài liệu mà tôi có thì hiện nay nêu triển khai dịch vụ 3G, chỉ cần thu mỗi thuê bao tối thiểu từ $15-$20 là nhà cung cấp dịch vụ đã có lãi, vấn đề là cần có cơ chế hợp lý (tự do hoá thì tốt quá). Ngoài ra, vấn đề về nội dung dịch vụ cũng không kém phần quan trọng. Ở Nhật Bản, khi triển khai dịch vụ iMode (dịch vụ sử dụng màn hình màu cho phép người sử dụng truy cập vào các trang Web đặc biệt cung cấp các thông tin về thời tiết, giao thông…) chỉ sau 1 năm triển khai người ta đã thu hút được tới 13 triệu thuê bao. Dịch vụ 3G là dịch vụ gắn liền với các dịch vụ số liệu, đặc biệt là Internet vì vậy vấn đề phát triển nội dung là vấn đề hết sức quan trọng (chẳng hạn Việt hoá các trang Web, cung cấp thêm nhiều thông tin…). Bên cạnh đó còn có một yếu tố hết sức quan trọng nữa quyết định đến sự thành công của việc triển khai, đó là nâng cao nhận thức của người sử dụng. Có một thực trạng đáng buồn trong xã hội Việt Nam, đó là thực trạng sợ công nghệ cao, điều này đặc biệt xảy ra ở lớp những người cao tuổi (nhưng đây chính là những người nhiều tiền, có khả năng chi trả cho dịch vụ 3G). Để việc triển khai dịch vụ thành công thì cần phải có chiến lược marketing thích hợp, nâng cao nhận thức của người sử dụng đối với các dịch vụ công nghệ cao, làm cho họ thấy được 3G chỉ mang đến cho họ sự thuận tiện chứ không phải phiền toái.

Thiết kế giao diện cho phần mềm

Posted in Cuộc sống & công nghệ on Tháng Ba 4, 2009 by luongkhanh

Mỗi sản phẩm phần mềm đều có một yếu tố quyết định sự lựa chọn của khách hàng, góp phần không nhỏ vào sự thành công của sản phẩm, đó là Giao diện Người dùng Đồ họa (GUI – Graphic User Interface) – bộ mặt của sản phẩm

Giao diện đồ họa
pic1_largeÝ tưởng về việc thao tác trực tiếp các chức năng trên màn hình ứng dụng đã mang trong nó khái niệm về giao diện đồ họa. Đây là sự chuyển đổi nội dung từ ngữ sang hình ảnh, biểu tượng, ký hiệu, màu sắc và là sự bố trí sắp xếp có thứ tự các thành phần chính, phụ sao cho chúng được xuất hiện một cách hợp lý, thuận tiện cho người dùng.

Hình ảnh và biểu tượng có tác động đến nhận thức và ghi nhớ của con người dễ dàng hơn nhiều so với những dòng văn bản. Hãy thử hình dung những biển báo giao thông chỉ có thông báo văn bản thì quả thật rắc rối vì khó quan sát từ xa; và bạn sẽ nhận ra những dấu hiệu, hình ảnh, màu sắc đã xuất hiện bấy lâu bên cạnh mình, quen thuộc đến độ bạn vô tình không nhận thấy, có ý nghĩa và thiết thực biết bao nhiêu.

Giao diện người dùng đồ họa (GUI) trong sản phẩm phần mềm như một bảng chỉ dẫn không lời, thực hiện sứ mạng mang lại sự tiện lợi, đơn giản và hiệu quả cho người dùng. Một giao diện có sự bố trí các yếu tố nội dung và hình thức kết hợp nhau một cách liền lạc, màu sắc hài hòa, tính năng thân thiện, hiển thị nhanh và dễ sử dụng không những đáp ứng được tính thẩm mỹ mà còn thỏa mãn được các yêu cầu đặc thù của người dùng. Bên cạnh đó, GUI giúp người dùng nhanh chóng nắm rõ cách sử dụng, thích ứng và giảm thời gian làm quen với ứng dụng mới. Như vậy, giao diện hấp dẫn là một lợi thế đã và đang dần chứng tỏ hiệu quả của nó trong lĩnh vực phần mềm nói riêng và trong cuộc sống hàng ngày nói chung.

Bất kỳ nhà sản xuất phần mềm chuyên nghiệp nào cũng đều chú trọng đến GUI trong qui trình sản xuất và phát triển sản phẩm của mình. Một số đặc điểm của GUI mang lại lợi ích cho người dùng như:

Thân thiện: người sử dụng sẽ không có cảm giác lúng túng, mất tự tin khi sử dụng chương trình vì mọi công cụ đã được hiển thị rõ ràng và sắp xếp có thứ tự theo quy trình nghiệp vụ.
Dễ sử dụng: mọi danh mục, thanh công cụ, biểu tượng và chữ minh họa được thiết kế gần gũi với nhận thức của người dùng, giúp họ tiếp cận nhanh mọi chức năng của chương trình.
Tín nhiệm: một giao diện với màu sắc, đường nét sắc sảo, nội dung rõ ràng, mạch lạc và bố trí hợp lý sẽ tạo cảm giác thoải mái và tin tưởng cho người sử dụng.
Sản phẩm đến được với người dùng, thỏa mãn nhu cầu sử dụng của họ, là tiêu chí chính của nhà sản xuất. Tuy nhiên, để đạt được điều đó, một sản phẩm phần mềm phải là tổng hợp của những nhân tố cấu thành: người lập trình, người thiết kế giao diện và cả người sử dụng.

Thiết kế GUI và bộ ba người lập trình – người thiết kế giao diện – người sử dụng Hình 1 cho khái niệm về mối quan hệ giữa người thiết kế GUI với người lập trình (coder) và người sử dụng (user). Từ người thiết kế GUI, sản phẩm được đưa ra hoạt động thông qua người lập trình sao cho dung hòa các đặc tính kỹ thuật cũng như thẩm mỹ, với mục đích cuối cùng là người dùng hoàn toàn hài lòng khi sử dụng. Như vậy, trong mỗi một thiết kế GUI có mang theo những đặc tính, yêu cầu riêng của từng chủ thể.

Người lập trình: Họ thường đặt sự tiến bộ về kỹ năng của mình lên hàng đầu bằng cách áp dụng những kỹ thuật mới vào chương trình, họ muốn nhanh chóng hoàn thành chương trình kể cả dùng những giải pháp có sẵn của các công ty khác.

Họ thường ít quan tâm đến những chi tiết như: giao diện người dùng như thế nào người sử dụng sẽ làm việc, tương tác ra sao trên sản phẩm?

Người sử dụng: Nói chung, họ không sử dụng phần mềm chỉ vì thích (game là một ngoại lệ) mà chỉ muốn hoàn thành công việc của mình một cách nhanh chóng, không phải đọc những tài liệu hướng dẫn sử dụng dài dòng hoặc luôn nhờ giúp đỡ, chí ít khi cần giúp đỡ thì phần hướng dẫn phải rõ ràng, đi ngay vào vấn đề cần giải quyết một cách nhanh chóng. Ngoài ra, chương trình cũng phải dễ cài đặt và gỡ cài đặt.

Người thiết kế giao diện: Họ phải tìm hiểu xem người sử dụng muốn gì và như thế nào (trực giác, học nhanh, dễ sử dụng) bằng ngôn ngữ của người sử dụng rồi truyền đạt tới người lập trình bằng ngôn ngữ kỹ thuật thông qua bảng thiết kế mẫu thăm dò (GUI prototype), đồng thời cũng quan tâm đến mặt mỹ thuật, màu sắc, quyết định sử dụng những hiệu ứng âm thanh, phim, hình ảnh, thông tin… phù hợp với đặc thù của dự án.

Điều này cho thấy người thiết kế giao diện gặp những khó khăn và thử thách không nhỏ trong việc thiết kế dung hòa sản phẩm để vừa dễ dàng thực hiện người lập trình, vừa thỏa mãn yêu cầu của người sử dụng.

Những thử thách đối với người thiết kế GUI
pic2
Lệ thuộc vào người lập trình: Thông thường người thiết kế sẽ tạo bố cục và sắp xếp các thành phần như hình ảnh, nút lệnh, khung, bảng… trong chương trình như Corel Draw, Photoshop, Flash, Illustrator… và hội ý với người lập trình về khả năng thực hiện. Đôi khi bản thiết kế rất đẹp, hấp dẫn nhưng không thể hiện thực được do hạn chế của công cụ xây dựng phần mềm đang thực hiện, nên đành phải chỉnh sửa lại cho phù hợp. Vì vậy, người thiết kế GUI cũng phải am hiểu phần nào về ngôn ngữ lập trình, giải pháp, cách bố trí các thành phần như theo dạng khung (frame), dạng bảng (table) hay chia cột, đồng thời cũng đưa ra giải pháp thảo luận với người lập trình để có thể đạt được giải pháp tốt nhất, hấp dẫn, dễ thực hiện, dễ sử dụng với thời gian hợp lý nhất.

Thiết kế không đúng băng thông: Đây là điểm đặc trưng của ứng dụng trên Internet. Mỗi khu vực, mỗi nước đều có băng thông khác nhau nên khi thiết kế cũng phải nghĩ đến điều này. Vì việc sử dụng quá nhiều hình ảnh, hiệu ứng, kỹ xảo… tuy hấp dẫn nhưng sẽ làm hạn chế tốc độ hiển thị. Thời gian hiển thị lâu người sử dụng sẽ cảm thấy mệt mỏi, không thích dùng và sẽ không phát huy được hết khả năng. Ngược lại, hạn chế quá nhiều hình ảnh, hiệu ứng, kỹ xảo… giao diện sẽ trở nên buồn tẻ và nhàm chán. Trước khi bắt tay vào thiết kế bạn phải tìm hiểu kỹ khách hàng của mình sẽ sử dụng ở băng thông nào để có giải pháp thật hợp lý.

Di chuyển giữa các trang màn hình trong chương trình: Bạn nên quan tâm đến cách thức trình bày những nút lệnh, menu, menu phụ (sub menu) ở vị trí hợp lý để người dùng dễ dàng thực hiện và theo dõi chúng một cách nhanh chóng và nhất quán.
Yêu cầu của khách hàng không đủ, không rõ ràng: Khách hàng của bạn đa số là người không chuyên về lập trình và kỹ thuật. Họ có thể là một doanh nghiệp hay tổ chức đoàn thể, nên khi họ đưa ra yêu cầu phần lớn là không đầy đủ, không rõ ràng, và thậm chí không biết rõ họ sẽ cần gì trong dự án mà họ muốn làm. Nên vai trò của người quan hệ với khách hàng cũng không kém phần quan trọng trong việc tư vấn, tìm hiểu và đưa ra được những giải pháp khả thi và làm thỏa mãn khách hàng. Việc phối hợp giữa người quan hệ khách hàng (Business Analist), người thiết kế giao diện đồ họa (GUI Designer) với khách hàng để lấy thông tin và đưa ra giải pháp, hình ảnh, màu sắc… ngay tại chỗ cũng là một giải pháp tốt và đáng được quan tâm.

Minh hoạ một giao diện thành công

So sánh 2 giao diện sau trên cùng một dự án:
Hình a: Rối và không phân biệt rõ phần chính, phần phụ, danh mục nhiều nơi khó điều khiển.
Hình b: Rõ ràng, thấy được mục đích và nội dung cần chuyển tải, khắc phục được những nhược điểm ở hình a.

Visual C++ 2008 Feature Pack: Tăng cường sức mạnh cho Visual C++

Posted in Lập trình VC++/MFC/ALT on Tháng Hai 13, 2009 by luongkhanh

Microsoft đã công bố chính thức Visual C++ 2008 Feature Pack – gói công cụ bổ sung tính năng cho VC++ 2008. Đây thật sự là món quà đáng giá cho các lập trình viên trong việc phát triển ứng dụng trên nền VC++. Bài viết xin giới thiệu tổng quan về gói công cụ này cũng như việc sử dụng nó nhằm lập trình VC++ hiệu quả hơn.

Cài đặt

Gói công cụ bổ sung này chỉ dành riêng cho Visual C++ 2008 từ bản Standard trở lên (không hỗ trợ bản Express, tuy nhiên Microsoft hứa hẹn sẽ hỗ trợ trong tương lai). Bạn có thể tải về bộ cài đặt từ địa chỉ http://www.microsoft.com/downloads/details.aspx?FamilyId=D466226B-8DAB-445F-A7B4-448B326C48E7&displaylang=en (hoặc đường link rút gọn http://tinyurl.com/34n52u), dung lượng 322.84MB. Hiện tại, gói bổ sung này mới chỉ làm việc với phiên bản tiếng Anh (ENU) của VS 2008. Việc hỗ trợ cho các phiên bản khác sẽ được bổ sung trong bản vá VS2008 SP1 (đang trong giai đoạn beta).

Cần chú ý, bạn phải cài đặt Windows SDK phiên bản 6.1 trước khi cài đặt gói bổ sung này. Nếu làm ngược lại, có thể bộ SDK sẽ cài đè và làm mất một số tính năng của VC++ Feature Pack. Trong trường hợp đã lỡ cài gói bổ sung này trước, cài SDK sau, bạn có thể cài lại VS 2008 theo chế độ “repair”.

Gói bổ sung này chủ yếu tập trung vào việc tăng cường hỗ trợ cho lập trình giao diện của ứng dụng, cụ thể như:

- Hỗ trợ các giao diện như “ribbon” của Office 2007, giao diện kiểu “look and feel” của Office 2003/XP hay phong cách “docking toolbar” và “pane” trong Visual Studio…

- Tùy biến tối đa thanh công cụ và menu

- Hỗ trợ các điều khiển nâng cao

Một điều cần chú ý là khi phân phối các ứng dụng được phát triển trên nền VC++ feature pack, bạn nên đính kèm bộ cài đặt của Visual C++ 2008 Feature Pack Redistributable Package thay vì VC++ 2008 Redistritable Package như thông thường. Tải về gói cài đặt này tại địa chỉ http://www.microsoft.com/downloads/details.aspx?familyid=D5692CE4-ADAD-4000-ABFE-64628A267EF0&displaylang=en (http://tinyurl.com/6p3gxm, phiên bản x86) hoặc http://www.microsoft.com/downloads/details.aspx?familyid=7B50FDDF-4798-4FCE-8A8B-A8DFE556C8E4&displaylang=en (http://tinyurl.com/6bd45b, phiên bản x64), dung lượng khoảng hơn 4MB.

Sử dụng VC++ feature pack trong lập trình ứng dụng MFC

Từ trước đến nay MFC – Microsoft Foundation Classes vẫn được coi là bộ thư viện dành cho C++ đơn giản, thuận tiện và dễ dùng. MFC giảm bớt đáng kể công sức của lập trình viên so với lập trình Win32 API truyền thống. Tuy nhiên, so với các công cụ thuộc dạng RAD – Rapid application development như Visual Basic, Delphi hay gần đây là .NET thì MFC vẫn còn nặng nề trong việc xây dựng giao diện, đặc biệt là giao diện không theo chuẩn của Windows. Bạn có thể sử dụng một số gói mã nguồn bổ sung, như The Ultimate Toolbox (http://www.codeproject.com/KB/MFC/index.aspx?#MFC%20-%20Open%20Source%20Ultimate%20Toolbox), nhưng việc tạo ra một giao diện thống nhất, hợp lý vẫn tốn nhiều công sức.

VC++ feature pack đã khắc phục thiếu sót này bằng cách bổ sung tính năng sử dụng những giao diện bắt mắt một cách dễ dàng mà bạn hầu như không phải gõ thêm dòng mã lệnh nào cả.

Bạn chỉ việc chọn giao diện thích hợp trong khi tạo một dự án – project mới. Cần chú ý giao diện mới này chỉ sử dụng được với dạng project là SDI và MDI, cùng một kiểu mới được bổ sung vào là Multiple top-level documents, chứ không dùng được cho dạng Dialog-based.

Ngay sau khi tạo dự án xong, bạn có thể tiến hành biên dịch và chạy thử ngay, kết quả cho ra thật sự ấn tượng với giao diện theo phong cách mà bạn lựa chọn.
01Để làm được điều này, VC++ feature pack đã bổ sung thêm 3 lớp mới:

• CWinAppEx thừa kế từ lớp CWinApp được dùng làm base class cho ứng dụng.

• CFrameWndEx thừa kế từ lớp CFrameWnd được dùng làm base class cho cửa sổ trong SDI – Single Document Interface.

• CMDIFrameWndEx thừa kế từ lớp CMDIFrameWndEx được dùng làm base class cho cửa sổ trong MDI – Multi Document Interface.

Chúng ta thấy sự thiếu vắng của lớp CDialog, và đó là lý do mà gói bổ sung này không hỗ trợ cho các ứng dụng dạng dialog – based. Đây quả thực là điều đáng tiếc vì hiện các ứng dụng dạng dialog vẫn được dùng rất phổ biến và việc tạo dựng một ứng dụng dialog với một giao diện “bắt mắt” không đơn giản.

Mặc dù đã được VC++ hỗ trợ sinh mã một cách toàn diện, nhưng chúng ta nên nhìn qua xem điều gì đã thực sự xảy ra. Một đoạn mã khởi tạo ứng dụng thông thường có dạng như sau:
class CMFCFeaturePackApp : public CWinAppEx

{

public: CMFCFeaturePackApp();

// Overrides

public: virtual BOOL InitInstance();

};

BOOL CMFCFeaturePackApp::InitInstance()

{

CWinAppEx::InitInstance();

// CWnd* m_pMainWnd; được định nghĩa trong file .h

SetRegistryKey(_T(“DeltaX/MFCFeaturePack”));

CSingleDocTemplate* pDocTemplate;

pDocTemplate = new CSingleDocTemplate(

IDR_MAINFRAME, RUNTIME_CLASS(CMFCFeaturePackDoc),

RUNTIME_CLASS(CMainFrame),

// main SDI frame window

RUNTIME_CLASS(CMFCFeaturePackView));

if (!pDocTemplate)

return FALSE;

AddDocTemplate(pDocTemplate);

m_pMainWnd->ShowWindow(SW_SHOW);

m_pMainWnd->UpdateWindow();

return TRUE;
}

Cần chú ý, theo mặc định, VC++ sẽ tạo ra rất nhiều mã phục vụ cho các mục đích khác nhau, chẳng hạn như quản lý keyboard, menu, hiển thị tooltip,… Tùy theo yêu cầu của mình và để giảm kích thước của file thực thi .exe, bạn có thể xóa bớt những đoạn mã không cần thiết (điều này được khuyến cáo trong comment do chính VC++ tạo ra). Đoạn mã ở trên đã lược bỏ những thứ “thêm vào”, chỉ giữ lại những gì cơ bản nhất. Bạn có thể thấy không có nhiều thay đổi nếu như so sánh với mã nguồn cũ mà MFC tạo ra.

Tuy nhiên, phần mà bạn cần thực sự quan tâm nằm ở MainFrm.cpp. Ở đây, bạn có thêm, bớt button vào ribbon, điều chỉnh lại panel,… Chúng ta hãy cùng nhìn qua cách thực hiện các công việc này, các đoạn mã minh họa dưới đây được dùng cho các ứng dụng sử dụng ribbon:

Khai báo biến RibbonBar:

CMFCRibbonBar m_wndRibbonBar;

Khởi tạo trong hàm OnCreate:

m_wndRibbonBar.Create(this);

Điều chỉnh Ribbon Button

Thiếu vắng menu quen thuộc trong giao diện ribbon, thành phần mới Ribbon Button đã được bổ sung để giúp người dùng nhanh chóng truy cập vào những chức năng quan trọng. Gắn với nó là Ribbon Panel, thường được thiết lập tương đương với menu File, nhưng bóng bẩy và trực quan hơn nhiều.

//khai báo các biến

CMFCRibbonApplicationButton m_MainButton;

//thiết lập Ribbon button:

m_wndRibbonBar.SetApplicationButton(&m_MainButton, CSize (45, 45));

//45 là kích thước hợp lý cho Ribbon Button

CMFCRibbonMainPanel* pMainPanel = m_wndRibbonBar.AddMainCategory(_T(“File”), IDB_FILESMALL, IDB_FILELARGE);

//khởi tạo Panel và gán 2 imagelist lớn – nhỏ cho Panel này

//Bổ sung thêm chức năng vào Panel

pMainPanel->Add(new CMFCRibbonButton(ID_FILE_NEW, “New File”, 0, 0));
a2Hàm khởi tạo của CMFCRIbbonButton như sau (còn một hàm overloading của hàm này, thay vì sử dụng Imagelist thì sử dụng một biến HICON để làm biểu tượng cho nút, tuy nhiên, cách dùng như dưới đây vẫn là phổ biến hơn):

CMFCRibbonButton(UINT nID, LPCTSTR lpszText, int nSmallImageIndex=-1, int nLargeImageIndex=-1, BOOL bAlwaysShowDescription=FALSE );

Trong đó nID là ID của nút, lpszText là nhãn của nút, nSmallImageIndex và nLargeImageIndex lần lượt là chỉ số index trong 2 imagelist nhỏ và lớn đã được gán cho biến pMainPanel.
Một Ribbon Button lại có thể có những chức năng nhỏ hơn, chẳng hạn, như đối với chức năng Save as trong Microsoft Word 2007.

Để thực hiện điều này, bạn có thể sử dụng method AddSubItem của Ribbon Button.

Chẳng hạn:

pBtnPrint->AddSubItem(new CMFCRibbonButton(ID_FILE_PRINT_DIRECT, “Quick Print”, 7, 7, TRUE));

Cuối cùng, là bổ sung nút Close và danh sách những file mới được mở gần đây:

pMainPanel->Add(new CMFCRibbonButton(ID_FILE_CLOSE, _T(“Close”), 9, 9));

pMainPanel->AddRecentFilesList(_T(“Recent Files List:”));a3Điều chỉnh thanh ribbon

Thanh ribbon mới thật sự là điểm nhấn quan trọng trong phong cách dải “duy băng” của Office 2007, nơi cung cấp tất cả những chức năng quan trọng nhất cho chương trình. Thanh ribbon cho phép tạo nhiều tab, mỗi tab lại có thể chứa nhiều nút nhấn, tương ứng với nhiều chức năng khác nhau.

Đoạn mã dưới đây minh họa việc thêm một “Category” vào thanh ribbon. Mỗi Category sẽ tương ứng một tab, và gồm các phần nhỏ hơn là panel, mỗi panel lại gồm các ribbon button phục vụ các chức năng cụ thể:

CMFCRibbonCategory* pCategoryHome = m_wndRibbonBar.AddCategory(“Home”, IDB_WRITESMALL, IDB_WRITELARGE); // 2 tham số sau tương ứng 2 imagelist nhỏ – lớn cho Category

Bổ sung thêm panel, ở đây là Panel Clipboard (phục vụ việc copy-paste…)

CMFCRibbonPanel* pPanelClipboard = pCategoryHome->AddPanel(“Clipboard”, m_PanelImages.ExtractIcon(27));

Ở đây, m_PanelImages là một biến kiểu CMFCToolBarImages lưu trữ imagelist dành cho panel. Việc khởi tạo nó thực hiện như sau:

m_PanelImages.SetImageSize(CSize(16, 16));

m_PanelImages.Load(IDB_BUTTONS);

Công việc cuối cùng là thêm các ribbon button thực hiện chức năng vào panel:

CMFCRibbonButton* pBtnPaste = new CMFCRibbonButton(ID_EDIT_PASTE, strTemp, 0, 0);

pPanelClipboard->Add(pBtnPaste);

Trong khuôn khổ bài viết này, chúng tôi chỉ giới thiệu sơ bộ những nét chính trong việc tùy biến giao diện mang phong cách ribbon. Visual C++ feature pack còn đem đến nhiều kiểu giao diện khác và việc tùy biến chúng tương đối dễ dàng. Phong cách lập trình MFC quen thuộc sẽ giúp các lập trình viên nhanh chóng làm quen và nắm bắt được các class, method và property mới. Mặc dù VC++ đã làm phần lớn công việc cho bạn, nhưng bạn vẫn có thể điều chỉnh lại cho thích hợp, thậm chí tự viết mã để toàn quyền xử lý giao diện.

Visual C++ Feature Pack còn đi kèm TR1, thư viện bổ sung cho C++ runtime và hiện đang được phát triển như là mở rộng cho chuẩn C++ 2003. Hy vọng sẽ có dịp giới thiệu về thư viện này.

Cygwin – Giả lập hệ điều hành Linux trên Windows

Posted in Operating System Linux on Tháng Hai 3, 2009 by luongkhanh

cygwin1Bạn vẫn gắn bó với Windows nhưng cần dùng Linux để gia tăng hiệu suất công việc, hoặc đơn giản chỉ để làm quen với hệ điều hành mã nguồn mở nhiều hứa hẹn này? Có nhiều giải pháp, nhưng xét về nhiều mặt thì dùng Cywin
để giả lập Linux trên Windows chính là giải pháp tối ưu, nhất là cho
nhu cầu chuyển đổi file giữa hai hệ điều hành.

Cygwin là một môi trường giả lập hệ điều hành Linux chạy trên Windows, giúp người sử dụng Windows có thể làm việc y như trên Linux mà không cần phải cài đặt hệ điều hành này vào máy tính. Với Cygwin, bạn có thể soạn thảo và biên dịch các đoạn mã C++ trên hệ điều hành Linux, biên dịch và cài đặt các gói phần mềm trên hệ điều hành Linux, làm quen với hệ điều hành Linux bằng cách thực hành các lệnh cơ bản của hệ điều hành này trong khi vẫn tiếp tục làm việc với Windows…
cygwin2

1. Cài đặt Cygwin
Để cài đặt Cygwin, trước tiên bạn truy cập vào trang web htttp://www.cygwin.com, bấm vào dòng Install Cygwin now (có biểu tượng Cygwin bên trên) ở góc trên bên phải của trang web, hoặc bấm vào dòng Install or update now (có biểu tượng Cygwin bên trên) ở chính giữa của trang web, hoặc bấm vào dòng chữ Install Cygwin now (có biểu tượng Cygwin bên trên) ở góc dưới bên phải của trang web, để tải file cài đặt về (file có dạng setup.exe), có dung lượng 572 KB. Sau khi tải về máy tính (đặt ở thư mục C:\Testing\Cygwin), bấm đôi vào file để bắt đầu cài đặt.

Xuất hiện cửa sổ cài đặt đầu tiên Cygwin Net Release Setup Program, bấm Next qua cửa sổ Choose A Download Source. Từ cửa sổ này, thấy có 3 tùy chọn:
cygwin3
- Install from Internet (downloaded files will be kept for future re-use): cài đặt từ Internet, các file tải về sẽ được sử dụng cho các lần sau.

- Download Without Installing: chỉ tải các file về mà không cài đặt.

- Install from Local Directory: cài đặt từ thư mục trên máy tính.

Ở đây ta chọn Install from Internet, yêu cầu máy tính lúc này phải có kết nối Internet. Bấm Next qua cửa sổ Select Root Install Directory. Từ cửa sổ này, ở ô Root Directory mặc định xuất hiện là C:\cygwin, ta nên để nguyên ô này (có thể điều chỉnh thư mục cài đặt Cygwin bằng cách bấm vào nút Browse ngay bên cạnh), ở phía bên dưới trong khung bên trái Install For có 2 tùy chọn: All Users và Just Me. Chọn All Users, ở khung ngay bên phải Default Text File Type chọn UNIX / binary. Bấm Next qua cửa sổ Select Local Package Directory. Từ cửa sổ này, ở ô Local Package Directory mặc định đang xuất hiện là C:\Testing\ Cygwin (thư mục chứa
cygwin4file cài đặt setup.exe). Ta để nguyên ô này, bấm Next qua cửa sổ Select Your Internet Connection. Từ cửa sổ này, chọn Direct Connection (nếu đang dùng Internet qua proxy server thì chọn Use HTTP/FTP Proxy và nhập vào các thông số ngay bên dưới ở ô Proxy Host và ô Port). Bấm Next qua cửa sổ Progress, chương trình cài đặt tải về danh sách các site phục vụ cho việc cài đặt Cygwin từ địa chỉ http://cygwin.com rồi tự động chuyển qua cửa sổ Choose A Download Site. Từ cửa sổ này, chọn một site bất kỳ (ví dụ, chọn http://cygwin.mirrors.hoobly.com) từ khung danh sách Available Download Sites, bấm Next qua cửa sổ Progress. Chương trình cài đặt tải về danh sách các gói cài đặt hiện hữu của cygwin5Cygwin từ site vừa chọn nói trên rồi tự động chuyển qua cửa sổ Select Packages.
Từ cửa sổ này, có thể để nguyên để cài đặt mặc định theo đề xuất của chương trình, nhưng ở đây nên chọn thêm các gói để phục vụ cho việc giải quyết các vấn đề bạn cần làm trong Linux. Ví dụ ta sẽ cài đặt thêm gói xemacs (giao diện khá giống Notepad) để giúp soạn thảo code C++,
bằng cách tìm đến Category Editors, bấm vào dấu cộng bên trái để bung ra các gói bên trong, tìm đến gói xemacs: A powerful, highly customizable open source text editor and application development system. Bấm vào chữ Skip ở cột New ngay bên trái để kích hoạt cài đặt gói này, khi đó chữ Skip đổi thành 21.4.21-1 và ở cột Bin? bên phải có dấu chọn X. Cũng từ cửa sổ này, ta chọn thêm gói gcc-g++: C++ compiler (bộ biên dịch các đoạn code viết bằng C++ trên Linux) trong Category Devel. Chương trình cài đặt sẽ tự động chọn thêm các gói liên quan gcc-g++ vào. Cũng ở đây, có thể chọn hết các gói của Category Devel, cách chọn các gói tương tự như khi chọn gói xemacs. Sau khi chọn xong hết, bấm Next qua cửa sổ Progress. Từ cửa sổ này, chương trình tiến hành cài đặt Cygwin cho đến khi hoàn tất. Khi hoàn tất sẽ xuất hiện cửa sổ Create Icons. Ta để nguyên các tùy chọn Create icon on Desktop (tạo một biểu tượng trên màn hình desktop) và Add icon to Start Menu (thêm biểu tượng vào menu Start) và bấm Finish để hoàn tất việc cài đặt Cygwin.

2. Làm quen với Cygwin bằng một số lệnh cơ bản của Linux

Sau khi cài đặt xong, để chạy Cygwin, bấm vào biểu tượng Cygwin trên màn hình desktop (hoặc vào menu Start, chọn Programs, chọn Cygwin, chọn Cygwin Bash Shell). Xuất hiện cửa sổ Cygwin (giống cửa sổ DOS của Windows) với dấu nhắc lệnh Administrator@webserver ~ (với Administrator là tên tài khoản, có thư mục là C:\cygwin\home\ Administrator, còn webserver là tên của máy tính). Từ dấu nhắc lệnh này, để chuyển qua ổ đĩa C làm việc, gõ lệnh cd C: và nhấn Enter. Từ ổ đĩa C, để tạo thư mục (ví dụ tạo thư mục lbvmvt), gõ lệnh mkdir lbvmvt. Để xem thư mục này đã được tạo ra chưa và nội dung ổ đĩa C có chứa gì, gõ lệnh ls hoặc ls-la. Cũng từ cửa sổ này, ta có thể thực hành nhiều lệnh khác của Linux để làm quen với Cygwin. Sau khi thực hành xong, gõ lệnh logout hoặc exit để đóng cửa sổ chương trình Cygwin.

3. Soạn thảo và biên dịch một chương trình viết bằng C++ trên Linux

Như chúng ta biết, trên Windows, để soạn thảo code và biên dịch các chương trình viết bằng C++, có thể sử dụng Borland C++ Builder, Turbo C++…
Còn trên hệ điều hành Linux, ta có thể soạn thảo code bằng xemacs và
biên dịch bằng bộ biên dịch g++ (2 gói này đã được cài đặt bên trên).
Từ dấu nhắc lệnh của ổ đĩa C bên trên, ta chuyển vào thư mục lbvmvt bằng cách gõ lệnh cd lbvmvt, và từ đây ta gõ lệnh xemacs xinchaolbvmvt.cpp để mở trình soạn thảo xemacs ra soạn thảo file xinchaolbvmvt.cpp. Ở cửa sổ soạn thảo này, soạn thảo code bằng C++, ví dụ soạn thảo chương trình đơn giản sau là xuất câu “Xin chao mung ban den voi blog cua toi!” ra màn hình khi thực thi. Đoạn code gồm 6 dòng như sau:

#include”iostream”

using namespace std;

int main(void){

cout<<“Xin chao mung ban den voi blog cua toi!”<

return 0;

}

Sau khi soạn thảo xong, bấm nút Save (nút thứ 3 từ trái qua) trên thanh công cụ để lưu lại đoạn code vừa nhập. Vào menu File, chọn Exit XEmacs để đóng cửa sổ này lại. Trở về cửa sổ Cygwin, ta gõ lệnh g++ -o xinchaolbvmvt xinchaolbvmvt.cpp để biên dịch file này. Sau khi biên dịch xong, thực hiện lệnh ls, ta thấy trong thư mục lbvmvt có thêm file thực thi xinchaolbvmvt.exe. Để kiểm tra kết quả, tại dấu nhắc lệnh của thư mục lbvmvt trong ổ đĩa C, gõ lệnh ./xinchaolbvmvt hoặc ./xinchaolbvmvt.exe.
Nếu chương trình xuất ra câu chào như bên trên là việc soạn thảo và
biện dịch một chương trình viết bằng C++ trên hệ điều hành Linux đã
thành công. Sau khi làm xong, gõ lệnh logout hoặc exit để đóng cửa sổ Cygwin.

4. Biên dịch và cài đặt các gói phần mềm trên Linux

Với các gói phần mềm dành cho Linux chưa được đóng gói thành dạng .rpm (dạng file .rpm được cài đặt bằng lệnh rpm -ivh), mà cung cấp dưới các dạng nén như .tar.gz, .tgz, tar.bz2, vv…, quy trình biên dịch và cài đặt được thực hiện y như trên Linux. Đầu tiên tải về các file dạng nén trên, sau đó chép các file nén này vào thư mục C:\cygwin\home\Administrator, rồi mở Cygwin ra, thực hiện lệnh tar –zxvf (để giải nén các file có dạng .tar.gz, tgz) hoặc bunzip2 và tar xvf (để giải nén các file dạng .tar.bz2), sau đó dùng lệnh cd để chuyển vào các thư mục vừa giải nén. Khi ở trong các thư mục này, thực hiện tiếp các lệnh ./configure (cấu hình các gói phần mềm), make (biên dịch các gói phần mềm) và make install (cài đặt các gói phần mềm).

Cách tạo file DLL trong Visual C++ 2005

Posted in Lập trình VC++/MFC/ALT on Tháng Một 17, 2009 by luongkhanh

Hôm nay Khánh tôi xin giới thiệu với mọi người về cách tổ chức chương trình bằng cách tạo ra file DLL trong Visual C++ 2005.

I. Dynamic Link Library – DLL (Thư viện liên kết động)

DLL là một thư viện chứa các hàm và dữ liệu mà có thể sử dụng bởi nhiều ứng dụng khác nhau ở cùng một thời điểm. Khi đã được viết và đóng gói trong một DLL, một hàm có thể được sử dụng ở bất cứ ứng dụng nào dưới dạng mã máy của nó mà không phải quan tâm đến mã nguồn nó được viết chi tiết ra sao.
Các DLL là một hay nhiều module được chia ra từ một chương trình, nhằm mục đích reuse code.

1. Ưu điểm

 Giảm không gian sử dụng bộ nhớ:
Do hàm và dữ liệu trong các DLL được chia sẻ bởi các ứng dụng dùng nó. Ví dụ: Các ứng dụng Winword, Excel, Internet Explorer sẽ chia sẻ chung một phương thức print() đã được biên dịch thành mã máy để trong một dll nào đó. Điều đó dẫn đến các ứng dụng sẻ chỉ phải các hàm này khi nào cần dùng đến (giảm được dung lượng bộ nhớ của chương trình).
Hơn nữa mã trong dll nằm trong khu vực chỉ cho đọc và được nạp(load) vào các trang được đánh dấu chỉ đọc (read-only). Nó cho phép hệ thống tham chiếu DLL vào không gian địa chỉ nhớ của các tiến trình sử dụng nó. Và như vậy, DLL chỉ cần nạp một lần, và nếu một tiến trình sử dụng nó, hệ thống chỉ việc tham chiếu tới không gian lưu trữ địa chỉ nhớ của DLL (Giảm không gian sử dụng bộ nhớ).

 Lập trình module
Khi được xây dựng một DLL với các chức năng hợp lý, ta có thể sử dụng nó trong bất cứ ứng dụng nào mà ta cảm thấy thích hợp. Thay vì sẽ phải viết lại hay copy and paste code của cùng một chức năng ở các chương trình khác nhau ta chỉ cần tạo ra chức năng đó 1 lần sau đó build thành dll để cho các chương trình tham chiếu đến để sử dụng. Ví dụ như chức năng MessageBox trong windows chẳng hạn, thay vì mỗi chương trình trong windows ta phải tạo ra MessageBox thì lúc này ta chỉ cần tham chiếu đến thư viện user32.dll và thực thi hàm MessageBox.

 Dễ dàng trong quá trình triển khai ứng dụng
Trong quá trình triển khai ứng dụng việc phải sửa lại chương trình do yêu cầu của khách hàng hay do lỗi hệ thống hoặc lập trình là điều rất dễ xảy ra. Nhất là với những chương trình đã cài đặt được một thời gian và cung cấp cho những khách hàng ở xa. Thì việc đóng gói và phân phối lại toàn bộ sản phẩm cho khách hàng là điều hết sức khó khăn. Tuy nhiên nếu chương trình của chúng ta phát triển theo hướng xây dựng các module và build trong các dll thì chúng ta chỉ cần phát hiện module nào bị lỗi. Sau đó thay đổi và đóng gói dll chứa module đó và gửi tới cho khách hàng cập nhập.

2. Hạn chế của DLL
Mặc dù DLL có khá nhiều ưu điểm như trên tuy nhiên nó cũng tồn tại khá nhiều hạn chế.
 DLL Hell
Địa ngục DLL là khó khăn lớn nhất thỉnh thoảng gặp khi dùng dll. Các lỗi có thể xảy ra như một số chương trình đã nạp lên nhưng không thể khởi động được hoặc một số chương trình đang hoạt động bình thường bỗng nhiên bị trục trặc khi ta cài đặt mới một ứng dụng. Nguyên nhân cơ bản của sự cố trên là do chương trình cài đặt không kiểm tra phiên bản của các DLL trước khi sao lưu nó vào trong thư mục hệ thống. Khi một DLL mới thay thế một DLL cũ đã có sẵn, nếu DLL này có nhiều thay đổi hoặc không tương thích với các chương trình sử dụng phiên bản cũ nó sẽ gây ra lỗi ở chương trình đó.

 Cài đặt, gỡ bỏ
Do một chương trình có thể được chia thành nhiều component nên thay vì ta chỉ phải đăng ký với hệ thống 1 lần duy nhất nay ta sẽ phải đăng ký thành nhiều lần với hệ thống. Hơn nưa khi gỡ bỏ phần mềm cũng sẽ gặp khó khăn rất nhiều do một dll có thể chia sẻ bởi nhiều ứng dụng.

Có bạn nào mà đang sử dụng WMP 11 ko? Nếu như máy của bạn là đời cổ, mà khi đang sử dụng WMP11 sẽ có thông báo lỗi là: wmsetup.dll bị lỗi. Đó là do không đúng phiên bản hoặc là do nó bị lỗi về Dll đấy. Còn những bạn sử dụng máy đời mới thì đương nhiên mình không nói làm gỉ cả. Nhưng sau khi đọc bài viết này, chắc các bạn sẽ biết rõ hơn về DLL.

Bây giờ tôi sẽ thử viết một chương trình về DLL.

Trên Menu vào File->New->Project. Chọn Win32 Console Application, trong Solution Name điền DynamicLibrary. Tiếp theo trong Overview chọn Next. Đến Application Settings chọn DLL và chọn Empt project. Bấm Finish.

Thêm class vào DLL

Bên trái của workspace kích chuột phải vào Header file chọn Add new Item… xuất hiện hộp thoại chọn Header file(.h) và điền tên: MathFuncsDll.h. Đưa thử đoạn code sau đây:

// MathFuncsDll.h
namespace MathFuncs
{
class MyMathFuncs
{
public:
// Returns a + b
static __declspec(dllexport) double Add(double a, double b);

// Returns a – b
static __declspec(dllexport) double Subtract(double a, double b);

// Returns a * b
static __declspec(dllexport) double Multiply(double a, double b);

// Returns a / b
// Throws DivideByZeroException if b is 0
static __declspec(dllexport) double Divide(double a, double b);
};
}

Tiếp tục như vậy, chọn Add new Item ở phần Source File và chọn C++ file(.cpp) có tên là MathFuncsDll.cpp

thêm đoạn code sau:

// MathFuncsDll.cpp
// compile with: /EHsc /LD

#include “MathFuncsDll.h”

#include

using namespace std;

namespace MathFuncs
{
double MyMathFuncs::Add(double a, double b)
{
return a + b;
}

double MyMathFuncs::Subtract(double a, double b)
{
return a – b;
}

double MyMathFuncs::Multiply(double a, double b)
{
return a * b;
}

double MyMathFuncs:: Divide(double a, double b)
{
if (b == 0)
{
throw new invalid_argument(“b cannot be zero!”);
}

return a / b;
}
}

Đây chính là File DLL, để biên dịch chọn Project->MathFuncs DLL Properties. Chọn Configuration Properties->General. Thay đổi Configuration Type là Dynamic Library (.dll) ->OK. Lưu lại, chọn built->built solution.

Cài đặt SDK and IDE cho Symbian

Posted in Nokia Series by Symbian on Tháng Mười Hai 4, 2008 by luongkhanh

leo_s60_iphone

Lợi ích của cà phê

Posted in Cafe Tối on Tháng Mười Hai 1, 2008 by luongkhanh

cafeUống cà phê sẽ có lợi cho trí nhớ bởi cà phê có tác dụng thúc đẩy hoạt động của não bộ. Các nhà khoa học thuộc Đại học Y tế Innsbruck (Áo) đã rút ra kết luận trên sau khi nghiên cứu trên 15 nam giới tuổi từ 26-47 bằng cách cho mỗi người dùng 100 mg cà phê/ngày (tương đương 2 cốc cà phê/ngày) liên tiếp trong 2 ngày.

Sau khi uống cà phê được 20 phút, những người tham gia đã làm rất tốt các bài kiểm tra trí nhớ. Nguyên do là cà phê đã làm tăng hoạt động trong một khu vực của bộ não ở thùy trán – nơi chứa hệ thống trí nhớ và quản lý sự chú ý. Tuy nhiên, các nhà khoa học cảnh báo không nên uống quá nhiều cà phê vì lạm dụng cà phê sẽ gây bồn chồn, lo lắng.

(Theo thienduongcafe)

Ngày 30/10: Ra mắt phiên bản mới của Ubuntu Linux

Posted in Cuộc sống & công nghệ on Tháng Mười 30, 2008 by luongkhanh

Các phương tiện truyền thông đưa tin, vào ngày 30/10, phiên bản Ubuntu Linux 8.10 sẽ chính thức được giới thiệu tới người dùng trên toàn cầu.

Đặc điểm then chốn trong phiên bản mới Ubuntu Linux 8.10 là được hỗ trợ khả năng kết nối mạng không dây, bao gồm cả khả năng hỗ trợ mạng di động 3G. Bên cạnh đó, phiên bản mới này còn được nhà sản xuất tích hợp sẵn các nội dung đa phương tiện chất lượng cao.

“Ubuntu 8.10 đặt nền tảng cho một môi trường làm việc ổn định, linh hoạt cho mọi đối tượng sử dụng, bất kể là cá nhân hay các tổ chức doanh nghiệp”, bà Jane Silber, Giám đốc Điều hành và người đứng đầu dịch vụ trực tuyến tại Canonical cho biết.

Phiên bản mới lần này cũng bao gồm tính năng tạo tài khoản “Guest”, cho phép người dùng có thể cho người khác mượn máy tính của mình để check mail hay làm một số công việc của họ mà không thể can thiệp vào các chương trình được cài đặt lên hệ thống.

Những người sử dụng cũng có thể cài đặt hệ điều hành này trên thẻ nhớ USB và lưu dữ liệu trên đó, vì thế, họ có thể mang hệ điều hành này đi cùng họ và sử dụng nó ở bất kỳ một chiếc máy nào.

Phiên bản Ubuntu 8.10 được tăng cường việc quản lý hệ thống. Những tính năng mới sẽ góp phần rất lớn vào việc tăng cường tính ổn định, khả dụng và linh hoạt cho cả người dùng cá nhân và người dùng doanh nghiệp.

Những phiên bản mới này sẽ chính thức có mặt trên thị trường vào ngày 30/10. Người dùng có thể download miễn phí tại website của Ubuntu.
Follow

Get every new post delivered to your Inbox.