Posts

Google App Engine - First impressions * It is free, but with quotas. The business model is probably to get others to build apps so that Google can get users, searchable data & then eventually offer a business edition. * You don't have to worry about hosting, load balancing & scaling which is indeed huge since writing the web application is the easiest among all of the above. * The initial release is not ready for business apps, it doesn't have an SLA nor does it have a good support for authentication & authorization. * You need to learn Python if you haven't already, but future support for ruby or php could be expected soon. * There are no issues in hosting flash or flex application except for the login to google account issue. * Python frameworks like Django are natively supported, but you can use your own framework as well. * It is possible to do GQL queries and Google full text search support. * And there is the full offline sdk for those who can't get an...
iPhone SDK - First impressions. This is probably the most comprehensive SDK released for a mobile OS, even though Windows Mobile probably is similar. It must have been easy for Apple since most of the functionality was already in in Mac OS, throw in a different UI framework & a bunch of innovations on touch, acclerometer and location sensing you have the mobile SDK. RIM's blackberry SDK is many years old but is so immature compared to this. It is not without it's own set of problems though. The reliance on old Mac tools means you need a Mac computer running Leopard to use it. The support for favorites like Java(upcoming from Sun)/C# is minimal and programming in Objective C is closest to programming in Win32. So, developer productivity takes a hit and would automatically reduce the number of developers who can produce business applications for example. It also doesn't expose some of the phone & SMS functionality to prevent misuse unlike similar offerings from compet...
Parallels vs VMWare Just a mental note to myself to keep off Parallels on Mac if I have a choice, it wasted almost my entire weekend since it had trouble after I upgraded the OS to Leopard & installed new parallels trial. XP image kept on crashing after a Windows update. Finally, I switched to VMWare and had to reinstall all OSes. Hopefully, it is just a problem with the trial copy, but I found VMWare to be trouble free. I had a great opinion about Parallels, but all that changed this weekend. My vote - VMWare!
Ruby on Rails It is hard to be excited over a new language nowadays, but recently I came across one which seemed to make web & database development fun again. I am referring to the combination of Ruby & Rails (RoR). This was a framework built for real world development problems rather than for 'building a framework' as per it's founder. It has several interesting features: 1. Lack of strong typing & support for 'duck typing' - it works even though you feel lost sometimes if you have been a C/C++/Java/C# programmer. 2. Configuration by convention - no need to configure stuff if you follow the convention, but you can configure if you need to as well. 3. Brevity of expression - introduced by C which can easily get you a cult following. eg. one line to write a program which prints itself. 4. Dynamic nature - ability to add methods or redefine methods on the fly - to any class in the system, even built-in ones. 5. script/console - a hidden gem, difficult to l...
The end of SOAP webservices. It is probably a bit early to say this, but SOAP webservices doesn't have a future. I had been a myopic fan of SOAP webservices and one of the early adopters of the technology in various implementations - .NET 1.0, axis, xfire, JAX-WS, BPEL, JSR 180 etc. It is a great example of how excitement about a new technology can blind your judgment. It failed the single most important test - it was just not _simple_ enough to succeed in the long term. 1. complexity meant few stable implementations. eg. jboss changed their webservice implementation twice or thrice already. 2. complexity meant inherent concerns about it's security after deployment. eg. how does it handle a malformed request? 3. it needed client & server support which meant changing platforms as your clients change. eg. javascript, actionscript, java, .NET clients. 4. it was supposed to be cross platform, but it required another standard (ws-i profile xx) to standardize the standard. Still,...
Future of the web. The answer is right in front of you even if you don't see it already: The web started with simple HTML. Then came the dynamic web where content is dynamically generated for the users. Then came the wikis which enabled editable webs. Then web applications got more interactive with AJAX. The next level of interactivity is where applications execute and behave like Desktop applications within the browser. Then there will be the web OS where you store all the important data in the web and access the same from everywhere. * The web OS sounds grand but the closest we have today for the client is Flash/Flex & Silverlight & XUL to a lesser extent. * This will blur the line between desktop apps & web apps further. * Making toy applications for web will no longer fly & traditional players might get another shot. (MSFT vs GOOGL) * The recent acquisition of 'Parakey' by Facebook is an indication of where the future is goi...

Importance of "keeping it simple".

Sometimes you have to keep repeating a message so that everyone gets it, at the risk of sounding like a broken record. There was a quote in this month's Popular science which applies to  software world as I had been trying to say in earlier posts- "good engineers find solutions to hard problems that are complex and hard to understand, but great engineers find solutions to hard problems that are so simple that you wonder why you didn't think about it in the first place" Simplicity is not only important in software design but also to the user. I remember working on a product  which had a versioning scheme which was so complex that even the QA required several days of training to understand it. You can imagine the frustration for the customer and how long the feature existed in the product! The next level of simplicity is in the user interface, Microsoft Office 2007 UI is a great example of how to scare the user by showing all options. 37 signals has some good example...
ABCs of good design Good design and architecture has always been identified as a key requirement for a product to succeed in the long term. But how how can you measure the quality of a design or identify the recipe to come up with the best design always? These are not questions with easy answers, but help to illustrate the challenges in the area. There have been many approaches to improve the quality of design in computer software over the course of time: 1. Functions & subroutines - This helped improve the design of monolithic programs by separating commonly used functionality into functions & subroutines. This improved the maintenance and reuse of code by having less duplication etc. 2. OOP - This was another major step forward in design in which we tried to model the objects in real world using classes having methods & properties. This was more natural to humans than working with procedures. eg. Rumbaugh & Booch. 3. CASE - 'Computer aided software engineering...

OS Review

I have always been a Windows admirer, but a newly converted Mac fan, so it is probably time to see the OS world in a more 'objective' way! Today Linux It is great as a server - controlled environment and free software without support works just fine. It is not a good home machine OS - at least not yet for the typical person who need driver support for his peripherals and who needs to run PC software. Mac OS X It is technically & visually the best OS for a home machine OS out there though a bit expensive & have limited peripherals - great usability & innovation. I expect to see the iSync+.mac integration in the next version of Windows ! It is good as a server - the unix background gives it the required skills, but it is still not acceptable for many businesses as desktop due to lack of support for Outlook etc. Windows It is a good OS for a home machine - the sheer volume of software & peripherals is good. Security is more of a challenge as ...

ABCs of product development

These should be obvious to anyone who has developed a real software product before. But, recently I had talked to a few people who were working on their first large scale projects on their own but were making some basic mistakes without realizing it. 1. If you are developing a new product or technology, prototyping and research is a must. Agile development methodologies are good, but for a large scale product use agile methodologies after your research phase. 2. Prototyping and research often takes longer than developing the actual product itself. Someone should actually write a prototype which acts as the prototype for modularization & abstraction as well if possible. 3. Always separate your UI code from your non-UI code. Often, the non UI code will be implemented as services in the windows platform. Develop a fool proof mechanism to keep the software upto-date as well. 4. Never try to automate your UI testing first. It should be done only after automating tests for the non-UI...
Story of a website being hacked Hosting a website at home is one thing, but hosting one on the live internet is a whole different ballgame. Yesterday, I decided to expose one of my Xen virtual machines at home to the internet just to see if it works. I wasn't expecting to be hacked in less than an hour though with just 2 ports open. It brought down my jboss server(did a security no-no by running as root- hey, I was running it on XP before! :-), no ssh access etc. It helped that it was a Xen guest, I deleted the disk image and restored my backup. I just had to have more control if someone did attempt to break in again. So, put the machine back live again with more security tools & help from Google. Eg. apache with mod_jk instead of jboss, host FW rules in addition to h/w firewall rules, snort with upto-date rules, did a portscan with nmap, chkrootkit, backed up the system profile with tripwire and checks running every hour with automatic emails to me. I thought this was a good s...
Customers & managing complexity The only reason you should ever be solving a complex problem is if it makes your customer's life so much more simpler. But again, all complexity can be put into this category, so think twice before you do that!
Finding the simpler problems to solve and focusing on the right things. This is one of those common sense things where most big corporations and even many smart people go wrong. It is not good enough if you found a tough problem and then solved it. Many smart people often fall in this trap because they love solving tough problems. It is more important to find the simpler problem and then solve it. Quite often, simpler problems would have simpler solutions and in the end the everyone including the product, the customer and the company wins. Another related thinking is to focus on what you are offering your customer, the focus should be on the core strength your company is bringing to the customer. All other peripheral stuff shouldn't be where the bulk of the energy gets spent. These are seemingly simple things, but people still keep getting them wrong. eg. a banking application developing a cross platform UI framework because the generic solutions out there are 'buggy' or n...
Web 2.0 companies Signed for accounts at some of the promising Web 2.0 startups, Omnidrive looked useful and had rave reviews. Unfortunately, it seems to have starting troubles. This weekend I tried to drag and drop my photos over and it failed without copying even one file after some kind of wierd xml error message. Moreover, it always keep complaining about not being able to contact the server. Even if it is beta quality, these are basic things that shouldn't have been overlooked before a public release. Sharpcast seems to have gotten the basics right. Rich client backed by effective synchronization is their goal. And hey, the upload of over 300 photos using their XP client seems to be working fine so far. But, the web UI was well hidden, probably because it didn't work properly yet? TimeBridge was useless at least to me. iScrybe might be more useful as an organizer(Flash + offline is interesting), but seems vaguely similar to 37 signals software.
Ruby on Rails The good - quick and easy way to develop a basic db application, esp with InstantRails. The bad - No i10n, no EJB, UI code looks a bit like ASP 1.0 after a while. Grails - has EJB support using Groovy, screenshots looked good. But, the .x download didn't match tutorial onsite and hence probably won't be ready for a while.
These links matter if you are serious about Java/J2EE. Jvmstat is pretty cool, but similar to some of the excellent tools which was already available in .NET world. http://wiki.jboss.org/wiki/Wiki.jsp?page=JBossASTuningSliming http://java.sun.com/performance/jvmstat/
Predicting the future... Writing some personal thoughts on what happens after 5 years, so that I can check back later! - .NET has more penetration, still everyone hasn't switched to Vista/.NET 3.0. But WPF/E is getting popular, even though Flash is still strong due to better cross platform support. - Java/J2EE is for server side development, as a way to reduce costs in distributed server farms running Linux. The innovation curve is down for the language and it is in a stage similar to what C++ is today. - Linux is no longer seen as a desktop OS, open source continues to thrive but the quality & innovation of open source contributions is debated more as the good stuff get polluted by mediocre contributions. - Virtualization & multicore CPUs are ubiquitous and is used to provision such farms in real time with zero downtime. Xen & Linux forms the basis of many such servers in the cloud. Some users have started to subscribe to personal virtual machines. Corporations widely ...
Troubleshooting memory issues. If private bytes continue to grow without leveling off, then you probably have a private bytes leak. If private bytes levels off while while virtual bytes continue to grow then you probably have a virtual memory leak or fragmentation. If the committed bytes counter follows the virtual bytes counter, then you probably have a virtual bytes leak. If the virtual bytes grow at a faster rate than committed bytes, then you will need to verify if this is virtual memory fragmentation. NOTE: Virtual memory leaks where the caller is committing memory will also cause private bytes to grow. Hence privates bytes could increase due to both NT heap leaks or virtual memory leaks.
Creating a symbol server 1. Share out a folder eg. \\mymachine\symbols 2. symstore add /r /f [path-to-symbols] /s \\mymachine\symbols /t "[app-name]" /v "[version]" Replace [path-to-symbols], [app-name] & [version] as appropriate.
Linux or Windows Just reminding myself again that I should not install Linux in my home machines. HP PSC 1510 - linux drivers are present but I was forced to do a source compile. Macromedia or Adobe design tools doesn't work. Cannot download pictures from my Canon powershot. Again, these may be present somewhere in some form. I am just not a Linux fanatic to work harder to use things I paid for. But, Linux is good as a server or on VMWare for my experiments. Can run all kinds of servers for free.