Ngọn nến hy vọng

Tháng Một 31, 2009

Có một người rất nghèo, chuyên làm nến và bán nến. Tuy nhiên chẳng mấy ai mua nến cả. Ông cũng ít giao thiệp nên càng ngày càng sống khép kín với mọi người. Cứ mỗi buổi tối ông đóng cửa, tắt đèn, tự giam mình trong nhà và than thầm về số phận.

Dần dần ông đi tới tuyệt vọng. Ông nghĩ rằng, ông nên kết liễu đời mình là hơn cả. Một buổi tối, ông quyết định thực hiện suy nghĩ đó. Đột nhiên có tiếng nói:

– Ông làm nến, sao không tự thắp cho mình một ngọn nến…

Nghe giọng nói không biết từ đâu, ông hoảng sợ:

– Ai đó…

– Ta là một vị thần. Nếu ngươi muốn, ta có thể thắp sáng ngọn nến hy vọng cho ngươi. Ngọn nến ấy có thể đem lại hạnh phúc cho ngươi đó.

Ông lưỡng lự và cuối cùng thì ông ta cũng đồng ý.

Ông ta cảm thấy yêu đời hơn. Suốt ngày ông ta chỉ chăm chút cho ngọn nến đó cháy sáng mãi. Tuy nhiên, ngọn nến cũng tàn dần theo quy luật tất yếu.

Ngày một ngày hai, niềm tin yêu cuộc sống của ông lụi dần, rồi một ngày hoàn toàn ông cảm thấy chán đời và mệt mỏi vì phải sống như thế này. Ông lại tự giam mình trong nhà, khóc lóc. Dĩ nhiên, vị thần giấu mặt kia lại cất tiếng nói.

– Ngươi khóc lóc điều gì… Ngươi đã không dùng ngọn nến đó để thắp sáng những ngọn nến khác trong ngươi. Đó là lỗi của nhà ngươi.
– – –
Hy vọng là một chuyện nhưng phải biến hy vọng ấy thành hiện thực bằng những việc làm hành động thiết thực, đó mới là điều đáng phải bàn.

Source: http://www.rubyinside.com/wicked-cool-ruby-scripts-by-steve-pugh-1462.html

Wicked Cool Ruby Scripts (or Amazon.com link – currently $19.77) is a new Ruby book by Steve Pugh that has just one goal: to share a bunch of “wicked, cool” Ruby scripts in various categories with readers. The publisher is No Starch and they offered to send me a copy for review.

First, No Starch Press is an independent technical book publisher (a rare entity nowadays) and if this book is any indicator, they have a real passion for producing books that are delightful to own. It’s so rare that you get nice paper in a book – here it’s thick and textured (and certified by the Sustainable Forestry Initiative). The binding is something called “RepKover” which makes it more flexible and easier to lie flat without the pages rebounding. The overall presentation is excellent – a well designed covered, nice typography, and great paper. The quality of the finished item almost makes me want to come up with a new book idea just so I can work with them.

The Content: The Good

Enough about the paper and the typography.. what about the content!? Well, it’s a bit hit and miss to me. I’ll start off with the good.

I like Steve’s style. The foreword and introduction are succinct and to the point. His style and tone are very accessible and the book is informative throughout. The structure of the book itself is mostly strong. There are nine chapters covering general scripting areas such as “Website Scripting”, “Linux System Administration”, “Picture Utilities”, and “Games and Learning Tools” – followed by a single chapter dedicated entirely to writing a module for Metasploit 3.1..

The presentation of the individual scripts is also good. A task is outlined – such as “Check for Changed Files” – and then it’s straight into the code. The code is sprinkled with numbers that are then referenced in an explanatory section that delves into how the code operates. On a pedagogical level, it’s a smart move and I had no problems understanding what Steve was trying to demonstrate. If you want to see it for yourself, you can download a PDF of Chapter 1 “General Purpose Utilities.”

The Content: The Bad

Other than the awkwardly placed tenth chapter that covers writing a module for Metasploit 10, the scripts chosen are very hit and miss. It feels like a bran tub experience where only 58 scripts could be chosen out of a whole universe of scripts and those 58 are rather quirkily random. The general purpose scripts, for example, are made up of 7 file handling scripts, a mortgage calculator, and a Windows process viewer.

The book feels a bit short (under 200 pages) and random overall. It’s like a far shorter, more casual version of the 900 page Ruby Cookbook. Being so short, it fails to cover a lot of ground and instead rapidly dives from place to place.

So Who’s This For..?

This book would make a good gift for almost any Rubyist – just because of the quality of the book’s presentation, if not its content. That said, the content, despite the randomness, is great for a novice to intermediate developer and Wicked Cool Ruby Scripts would be a good book to pick up if you’ve just learned the language and want to see some practical examples in print-form.

The problems with the book feel like editorial problems to me. Steve’s writing is good and No Starch’s production quality (in terms of the actual product) are strong. I just don’t feel that someone (and this would usually be the editor) demanded a reason for the book’s existence. The market for it is vague. Steve’s style will shine through and win over many readers, but I find it hard to know who’d enjoy this book if recommended it, and who would find it a waste of time. If you have $20 spare in your book budget though, I’d suggest you buy a copy and find out – you can always pass it on!

At the very least, I’ve been won over by No Starch’s approach to book making and I’d certainly suggest you have a look at their catalog. They have books covering subjects from Java and Python through to GIMP, SCSI, and even a Manga Guide to Calculus (forthcoming)!

Source: http://www.rubyinside.com/why-using-require-rubygems-is-wrong-1478.html

Ryan Tomayko, currently known as one of the lead developers of Sinatra, was definitely not mincing his words yesterday when he posted Why “require ‘rubygems'” In Your Library/App/Tests Is Wrong:

You should never do this in a source file included with your library, app, or tests:

require ‘rubygems’

The system I use to manage my $LOAD_PATH is not your library/app/tests concern. Whether rubygems is used or not is an environment issue. Your library or app should have no say in the matter. Explicitly requiring rubygems is either not necessary or misguided.

But.. why?

When I use your library, deploy your app, or run your tests I may not want to use rubygems. When you “require ‘rubygems'” in your code, you remove my ability to make that decision. I cannot unrequire rubygems, but you can not require it in the first place.

I hadn’t thought of it this way before, but Ryan makes a lot of sense. The choice of library management system should be down to the environment and not enforced by a library or a single portion of a larger application.

Check out Ryan’s post for the deeper rationale and see what you think. He’s definitely got me thinking twice about using require ‘rubygems’ in my own scripts, although as the slow migration over to Ruby 1.9 begins, perhaps it will become a non-issue, since RubyGems is included with Ruby 1.9 and loaded by default. Thoughts?

Đấu tranh

Tháng Một 29, 2009

Một cậu bé nhìn thấy một cái kén của con bướm. Một hôm cái kén mở ra một khe nhỏ, cậu bé ngồi yên và lặng lẽ quan sát con bướm trong vòng vài giờ khi nó gắng sức để chui qua cái khe nhỏ ấy. Nhưng có vẻ như nó không đạt được gì cả. Dường như nó đã gắng hết sức và không thể đi xa hơn, nên nó dừng lại.

Do đó, cậu bé quyết định giúp con bướm. Cậu ta lấy cái kén và cắt cái khe của cái kén cho to hẳn ra.
Con bướm chui ra được ngay. Nhưng cơ thể nó bị phồng lên và bé xíu, cánh của nó lại co lại. Cậu bé tiếp tục xem con bướm, hy vọng rồi cái cánh sẽ đủ lớn để đỡ được cơ thể nó. Nhưng chẳng có chuyện gì xảy ra cả.

Thực tế, con bướm đó sẽ phải bỏ ra suốt cả cuộc đời nó chỉ để bò trườn với cơ thề sưng phồng và đôi cánh co lại. Nó không bao giờ bay được.

Cậu bé , dù tốt bụng nhưng vội vàng, đã không hiểu rằng chính cái kén bó buộc làm cho con bướm phải cố gắng đấu tranh để thoát ra kia chính là điều kiện tự nhiên để chất lưu trong cơ thể nó chuyển vào cánh, để nó có thể bay được khi nó thoát ra ngoài kén.

Đôi khi, những sự cố gắng hoặc đấu tranh chính là những gì chúng ta cần trong cuộc sống. Nếu chúng ta sống mà không có một trở ngại nào, chúng ta có thể bị làm hỏng, cả về thể xác lẫn tinh thần. Chúng ta sẽ không bao giờ mạnh mẽ như chúng ta có thể. Và chúng ta sẽ chẳng bao giờ bay cao được!.

Vậy thì, mỗi ngày bạn hãy cố gắng một chút. Khi bạn phải chịu sự căng thẳng, hãy nhớ rằng bạn đang trở thành con người tốt hơn nếu bạn vượt qua nó.

Chìa khóa của hạnh phúc không phải là ở chỗ bạn không bao giờ giận, không bao giờ buồn. Mà là bạn thoát khỏi hay chữa khỏi những điều đó nhanh đến mức nào

Không thể nhìn từ một phía

Tháng Một 29, 2009

Mặt trăng và Mặt Trời tranh cãi với nhau về Trái Ðất. Mặt Trời nói : “Lá và cây cối, tất cả đều màu xanh”. Nhưng Mặt Trăng thì lại cho rằng, tất cả chúng mang một ánh bạc lấp lánh. Mặt Trăng nói rằng, con người trên Trái Ðất thường ngủ. Còn Mặt Trời lại bảo con người luôn hoạt động đấy chứ.
– Con người hoạt động, vậy tại sao trên Trái Ðất lại yên ắng đến vậy ? Mặt Trăng cãi.

– Ai bảo là trên Trái Ðất yên lặng ?- Mặt Trời ngạc nhiên- Trên Trái Ðất mọi thứ đều hoạt động, và còn rất ồn ào, náo nhiệt nữa.

Và họ cãi nhau rất lâu, cho đến khi Gió bay ngang qua.

– Tại sao các bạn lại cãi nhau về chuyện này chứ ? Tôi đã ở bên cạnh Mặt Trời khi Mặt Trời nhìn xuống Trái Ðất, và tôi cũng đi cùng Mặt Trăng khi Mặt Trăng xuất hiện. Khi Mặt Trời xuất hiện, mọi thứ là ban ngày, cây cối màu xanh, con người hoạt đông. Còn khi Trăng lên, đêm về, mọi người chìm vào giấc ngủ.

Nếu chỉ nhìn mọi việc dưới con mắt của mình, thì mọi thứ chẳng có gì là hoàn hảo, trọn vẹn cả. Không thể đánh giá Trái Ðất chỉ bằng con mắt của Mặt Trời hoặc Mặt trăng được.

Cũng vậy khi đánh giá một con người, một sự việc nào đó, không thể nhìn từ một phía được…

Source: http://www.rubyinside.com/whats-hot-on-github-january-2009-1450.html

GitHub LogoWhat’s Hot on Github is a monthly post highlighting interesting projects that are new or updated this month, within the Ruby community that are hosted on Github. Github has become an extremely popular place for Ruby and Rails developers to congregate over the last year, so I wanted to list some of the new projects, and some of the updated ones that I have found interesting.

This month’s picks:

Have any projects to add or want to recommend a project for next month’s post? Please leave a comment.

Source: http://www.rubyinside.com/rhodes-develop-full-iphone-rim-and-symbian-apps-using-ruby-1475.html

Rhodes – developed by Rhomobile – is an intriguing framework of Ruby interpreters that can be used to develop native applications for the iPhone, Windows Mobile, RIM (Blackberry) and Symbian smartphone platforms (with Android support to come). Last month, Werner Schuster (of InfoQ) wrote a basic roundup of how Rhodes works.

Essentially, Rhomobile has put together a set of technologies that each work on each mobile platform supported, including a Ruby interpreter, a synchronization library, an object mapper, and functions that enable developers to gain access to features like GPS, accelerometers, and contact storage. Rhodes is not yet at version 1.0 and while some developers are beginning to submit Rhodes-powered apps to the iPhone App Store – none have yet been accepted (although Rhomobile claim that there’s no reason why they shouldn’t be).

Notably, Rhodes is open source (GNU GPL) and is available directly from Github. Rhomobile has put together a solid tutorial on how to get started. They’ve also launched a mobile application “Development Challenge” with a top prize of $10,000 in order to promote the framework.

Rhodes is a pretty exciting technology and opening up the iPhone to Ruby developers is a big deal, so we’ll be catching up with Rhodes again when it hits its 1.0 release next month.

Check out the great book for beginner at: http://book.merbist.com/

Merb, DataMapper and RSpec are all open source projects that are great for building kick-ass web applications. They are all in active development and although it can be hard, we’ll try our best to keep up-to-date.

Merb

Merb is a relatively new web framework with an initial 0.0.1 release in October 2006. Ezra Zygmuntowicz is Merb’s creator, and continues to actively develop Merb along with a dedicated development team at Engine Yard and many other community contributors.

Merb has obvious roots and inspiration in the Ruby on Rails web framework. If you know Ruby and have used Rails you’re likely to get the hang of Merb quite easily.

While there are similarities, Merb is not Ruby on Rails. There are core differences in design and philosophy. In many areas that Rails chooses to be opinionated, Merb is agnostic – with respect to the ORM, the JavaScript library and template language. The Merb philosophy also disbelieves in having a monolithic framework. Instead, it consists of a number of modules distributed as Ruby gems. This means that it is possible to pick and choose the functionality you need, instead of cluttering up the framework with non-essential features.

The merb gem installs merb-core, a series of plugins as well as a default ORM (DataMapper); all you need in order to get started straight away. The benefit of this modularity is that the framework remains simple and focused with additional functionality provided by gems.

Thanks to Merb’s modularity, you are not locked into using any particular libraries. For example, Merb ships with plugins for several popular ORMs and provides support for both Test::Unit and RSpec.

merb-core alone provides a lightweight framework (a la camping) that can be used to create a simple web app such as an upload server or API provider where the functionality of an all-inclusive framework is not necessary.

DataMapper

DataMapper is an Object-Relational Mapper (ORM) written in Ruby by Sam Smoot. We’ll be using DataMapper with Merb. As previously mentioned, Merb does not require the use of DataMapper. You can just as easily use the same ORM as Rails (ActiveRecord) if you prefer.

We have chosen to use DataMapper because of it’s feature set and performance. One of the differences between it and ActiveRecord that I find useful is the way database attributes are handled. The schema, migrations and attributes are all defined in one place: your model. This means you no longer have to look around in your database or other files to see what is defined.

While DataMapper has similarities to ActiveRecord, we will be highlighting the differences as we go along.

RSpec

RSpec is a Behaviour Driven Development framework for Ruby. It consists of two main pieces, a Story framework for integration tests and a Spec framework for object tests. Both these components are implemented as Domain Specific Languages which help to make the stories and specs created more readable.

Merb currently supports the Test::Unit and RSpec testing frameworks. Both Merb and Datamapper use the RSpec testing frameworks and so we will be covering some aspects so that you may use it for your own applications.

What About Ruby On Rails?

[Merb is] Harder, Better, Faster, Stronger, to quote Daft Punk – Max Williams

So what’s the big deal? We have Ruby on Rails and that’s enough, isn’t it? There is little doubt that Ruby on Rails has rocked the web application development world. You have to give credit where credit’s due, and Ruby on Rails is definitely a great web framework. However, there is no such thing as a one-size fits all solution. Ruby on Rails is opinionated software which provides many benefits such as Convention over Configuration. On the other hand, this also means that Ruby on Rails can be unforgiving if you don’t want to do things ‘the Rails way’.

Where Rails is opinionated, Merb is agnostic. For example, you can easily use your favourite ORM (ActiveRecord, DataMapper, Sequel) or none at all.
Similarly, you can choose the Javascript library and template language that you are most comfortable with, or that best meets the requirements of your specific project.

If performant were a word, Merb would be it. One of Merb’s design mantras is “No code is faster than no code”. Merb has super-fast routing and is thread-safe. The core functionality is kept separate from the other plugins and it uses less Ruby ‘magic’, making it easier to understand and hack.

Rails (and consequently Ruby) has received a lot of criticism for not being suitable for large scale web applications, which isn’t necessarily true. Merb has been built from the outset to prove that Ruby is a viable language for building fast and scalable web applications.

At the end of the day it’s about choice. There are many new Ruby frameworks springing up, undoubtedly encouraged by the success of Rails. In our opinion, Merb shows the most promise of these.

If you’d like to take a look at some other frameworks these links should get you started:

Ba & nó

Tháng Một 27, 2009

Mẹ hay kể, ngày nó ra đời, ba chạy đi khoe khắp xóm làng. Lúc đó, dù mệt mẹ vẫn phì cười, ba thật là trẻ con.

Nó lớn lên, lầm lì khó bảo, ba buồn lắm.

Ngày nó thi đỗ vào trường danh tiếng bậc nhất thành phố, nhìn ba chạy đi khoe khắp xóm làng, nó phì cười, ba thật là trẻ con.

Nhìn những giọt mồ hôi vương trên trán ba, nó chợt thấy sống mũi cay cay

Chiếc vòng

Tháng Một 27, 2009

Một ngày nọ, Vua Salomon bỗng muốn làm bẽ mặt Benaiah, một cận thần thân tín của mình. Vua bèn nói với ông: “Benaiah này, ta muốn ông mang về cho ta một chiếc vòng để đeo trong ngày lễ Sukkot và ta cho ông sáu tháng để tìm thấy chiếc vòng đó. ”

Benaiah trả lời: “Nếu có một thứ gì đó tồn tại trên đời này, thưa đức vua, tôi sẽ tìm thấy nó và mang về cho ngài, nhưng chắc là chiếc vòng ấy chắc phải có gì đặc biệt? ”

Nhà Vua đáp: “Nó có những sức mạnh diệu kỳ. Nếu kẻ nào đang vui nhìn vào nó, sẽ thấy buồn, và nếu ai đang buồn, nhìn vào nó sẽ thấy vui”.

Vua Salomon biết rằng sẽ không đời nào có một chiếc vòng như thế tồn tại trên thế gian này, nhưng ông muốn cho người cận thần của mình nếm một chút bẽ bàng. Mùa xuân trôi qua, mùa hạ đến nhưng Benaiah vẫn chưa có một ý tưởng nào để tìm ra một chiếc vòng như thế.

Vào đêm trước ngày lễ Sukkot, ông quyết định lang thang đến một trong những nơi nghèo nhất của Jerusalem. Ông đi ngang qua một người bán hàng rong đang bày những món hàng trên một tấm bạt tồi tàn. Benaiah dừng chân lại hỏi “Có bao giờ ông nghe nói về một chiếc vòng kỳ diệu làm cho người hạnh phúc đeo nó quên đi niềm vui sướng và người đau khổ đeo nó quên đi nỗi buồn không? “. Người bán hàng lấy từ tấm bạt lên một chiếc vòng giản dị có khắc một dòng chữ. Khi Benaiah đọc dòng chữ trên chiếc vòng đó, khuôn mặt ông rạng rỡ một nụ cười.

Đêm đó toàn thành phố hân hoan, tưng bừng đón mừng lễ hội Sukkot. “Nào, ông bạn của ta, ” Vua Salomon nói, “Ông đã tìm thấy điều ta yêu cầu chưa? “. Tất cả những cận thần đều cười lớn và cả chính vua Salomon cũng cười. Trước sự ngạc nhiên của mọi người, Benaiah đưa chiếc vòng ra và nói: “Nó đây thưa đức vua”. Khi vua Salomon đọc dòng chữ, nụ cười biến mất trên khuôn mặt vua. Trên chiếc vòng đó khắc dòng chữ: “Điều đó rồi cũng qua đi” Vào chính giây phút ấy, vua Salomon nhận ra rằng tất thảy những sự khôn ngoan, vương giả và quyền uy của ông đều là phù du, bởi vì một ngày nào đó, ông cũng chỉ là cát bụi.