- OS and Browsers
- Windows XP-- It's still my OS of choice after 7 years. Windows XP is stable, and faster than Windows Vista. It's a good thing that Microsoft rebranded a major Vista upgrade as Windows 7. Rebranding is a good way to get out of a colossal failure, really.
- VMWare Workstation-- I do WAMP development sometimes, and I don't want the Apache to interfere with IIS, and I don't want to clutter my PHP development with my .Net one. A virtualization technology is therefore a must. VMWare workstation is much more intuitive than Sun VirtualBox.
- Google Chrome. Google Chrome took away my heart the moment it was introduced. It's simple, and it's blazing fast! At the time when Firefox is becoming more and more bloat, Google Chrome makes browsing fun again.
- Firefox. I still have some use for Firefox-- although not for browsing. I use Firefox in conjunction with Firebug, for development purpose.
- Software Development
- VS 2008-- If you are doing .Net development, there can be only one IDE of your choice, and that's VS 2008. Forget about SharpDevelop-- it's no match even for VS 2008 Express ( which is also free). But if you are serious into development, you should always get at least a professional edition. Microsoft doesn't allow plugins for Express edition, and without plugins, the VS appeal drops instantly at least by half.
- Reflector. Reflector is a class browser tool for .Net. Ever wonder how .Net code looks like? Get a Reflector, pull in the dll, and you can decompile the code. Sometimes the third party component you use is buggy and you can't figure out why. Looking into the source is the only way out. It gives you ammunition to curse the stupid developers who can't even get the simple things right.
- NUnit. NUnit is my choice of unit testing. It's less bloat than MBUnit, and it has more feature that MSTest.
- Typemock. Have a difficulty in isolating the dependencies? Typemock is the choice of mocking framework. You don't need to rewrite your code to make it testable. Typemock makes unit testing easy, especially for beginners who neither know anything nor bother about TDD.
- testdriven.net. Testdriven.net makes unit testing frictionless. From your IDE, you can execute the tests directly. One of the reasons why unit test has a hard time gaining acceptance from the developers, is because Microsoft-- through its Visual Studio offering-- doesn't make unit testing a first class citizen. With testdriven.net barrier entry to unit testing is lowered.
- FarPoint. That's a .Net component for spreadsheet. It's a must if you have to do heavy number crunching and presentation job.
- ReSharper. .Net's Intellisense is seriously retarded-- and Resharper is the cure! Not only that ReSharper analyzes your code, it also suggests improvements and best practices. You can seriously learn a thing or two about .Net out of the ReSharper suggestion.
- Zend Studio. Zend Studio Eclipse is, by far, the best IDE for PHP.
- CliSecure. .Net code is easy to decompile. CliSecure aims to stop (or at least make) the decompilation hard by obfuscation, encryption and anti-reverse-engineering technologies. Hard to comprehend? Then just take away this: CliSecure stops Reflector, and protects you from the self-righteous developers who like to criticize.
- Balsamiq. The mockup tool, second to none.
- Software Management
- Tortoise SVN. The default client application for SVN source control on Windows platform. It's free, and open source.
- Code Coop. A source control system. The interesting part about it is that it is distributed; there is no central server.
- Automated Build Studio. Tired of XML based build tools? Try Automated Build Studio. It's a GUI build tool. For common operations, all you need to do is to drag and drop those operations to the task panel and you can automated your workflow.
- Advanced Installer. An easy to use Windows Installer authoring tool. That's the tool I use to package my Windows applications.
- FogBugz. The famous bug tracking tool, thanks to JoelOnSoftware. I use a self-host version of FogBugz in my day job, and the SaaS version for my own personal tasks.
- Gmail. The best email system. Enough said.
- Gmail voice and video chat. A serious contender to Skype, this is my favorite voice and video chat tool.
- Google Calendar. One thing I prefer Google Calendar over MS Outlook is that it's web app; meaning nothing to install, accessible from anywhere, easy collaboration and sharing. The fact that it's tightly integrated with Gmail makes it even more appealing.
- TeamViewer. This is the tool I use when I have to support my relative remote on computers issue.
- Skype-- Skype 4.0 has a screen sharing feature; this is the feature I like most, and this is the only reason I have not uninstall it.
- FastStone. Screen capture tool. It was free once, but now no more.
- Blogger. My blogging platform. This is where my blog posts are hosted.
- Google Adsense. All of the advertisements you see on this blog, are served by Google Adsense. Oh, I have just recently got my first cheque from Google.
- Google Analytics. A web analytics application that gives me insight into my website traffic.
- Information Source
- Google Search. That's the first place I hit upon when I need to find something out. And I bet it's also the choice of many as well.
- StackOverflow. A clone of Expert Exchange-- minus all the annoyance. And for system admins and computer enthusiasts, your ServerFault and SuperUser is available as well.
- Google Reader. The aggregator for me to keep up with latest news and blog updates from my friends, families and fellow developers.
- Reddit.com. I like Reddit, because the comments there are usually more insightful than the links posted, and less civilized, too.
- Hacker News. A great place to learn about tech news, startup and entrepreneurship.
- Life Organizers
- Google Docs. Who needs Microsoft Word? I compose and store my documents online, on Google Docs. Although by comparison the editing capabilities are still quite primitive, but the fact that I can easily access and edit my documents, spreadsheets, slides and pdfs everywhere is enough to make up for this ( and hundreds more, if there is any) deficiency(ies).
- Buxfer. Mint may get the money and eyeballs recently, but it is this online personal financial management system, backup by Y Combinator that wins my heart. The reason? It has OpenID support and Mint doesn't have ( or doesn't need to have).
- VLC Media Player. The all-in-one, lightweight alternative to Windows Media Player and Real Player.
- Google Maps. I couldn't remember when was the last time when I looked at a real, physical map. The best way for me to get from one place to another, unfamiliar place is to read the Google Maps, memorize it, and then drive there.
- Picasa. Picasa comes in two edition, desktop one, and the online one. I use it to organize my photos and videos. And sorry, they are not available for public viewing.
- Facebook. The No. 1 time waster in the world. Thanks to Facebook, now I can reconnect back with my long-lost friends.
Saturday, September 19, 2009
Inspired by Scott Hanselman's 2009 Ultimate Developer and Power Users Tool List for Windows, I think would also like to share a list of applications ( desktop or web) that I use frequently.
Wow, that's a very long list. What's your favorite tool? Share with me!
I stumbled upon an interesting question from StackOverflow: Philisophical Questions about Test-Driven Development
This is my approach: For database applications, I
don't use mockfor my unit test. Instead, I run the tests on a real database, albeit a different one than the production database. So in this sense you can say that I don't run unit test on database. For NHibernate applications, I maintain two databases with same schema, but different database type (ORM makes this easy). I use sqlite for my automated testing, and a real MySQL or SQL server database for ad-hoc testing.
Only once did I use mock for unit testing the DAL; and that's when I was using strongly typed dataset as the ORM ( a big mistake!). The way I did this was to have Typemock returned me a mocked copy of the complete table so that I can perform
select *on it. Later as I looked back I wished I never do this, but that was long time ago, and I wished I used a proper ORM.
As for the GUI, to unit test the GUI interaction. The way I did this was to use the MVP pattern to separate out the Model, View and Presenter. Actually for this type of application I test on the Presenter and the Model, in which I use Typemock ( or dependency injection) to isolate the different layers so that at one time I can concentrate on only one layer. I don't test the view, but I do test Presenter ( where the majority of interaction and bugs are happening) a lot .