Today was a very eventful day. I finally got the chance to rectify a mistake which I made two months back, traveled a lot on foot and found the worst dining place in Mumbai.
I took a long walk through random spaces in Bandra. This is one habit which has done me lots of good. I enjoy it, learn from it. Saw a beautiful girl standing in a long queue to buy offerings for a temple; I was both amused and confused. Just a bit farther saw some really poor kids; crazily happy; blowing bubbles out of soap water. Was confused again but happy.
Mumbai must be the only city where one can see human habitation without even basic sanitation facilities next to bungalows, whose residents have so much money that they can buy anything they desire.
Finally reached "Cafe Seaside". Horrible food! If I hadn't skipped my lunch, I wouldn't had eaten that food even for free. It's a nice view from there though. But the food is so lousy that owner should stop offering it and simply start asking for money for the view. Later everyone decided to go to a different restaurant. Which in qualitative terms was at least 100 times better.
While returning back saw a vendor selling books in the train. At 1 AM!! Train was full and the very thought that someone is making money at this hour using best of his abilities with whatever resources accessible to him is very enterprising. He was offering good stuff and at good prices. I was happy with my decision to purchase a Cricket 2007 book and also found lots of respect for the guy selling them.
Sunday, September 21, 2008
Saturday, September 13, 2008
Disassembling The Coffee Maker
| Reactions: |
I first list down some reasons as to why I am so stupidly gung-ho for a new framework, which is not even mildly popular and have just one application to showcase its capabilities.
I expect following improvements taking place in the framework
Peeking inside the Frameworks (download starter kit) folder reveals three folders.
Look at the following snippet
import <Foundation/Foundation.j>
import <AppKit/AppKit.j>
import "AppController.j"
function main(args, namedArgs)
{
CPApplicationMain(args, namedArgs);
}
This is the code i.e. being called from the index file.
First two lines loads foundation and app classes. AppController.j is the file which contains a method, which hosts the code responsible for rendering the defined GUI. But as evident, nowhere this code is calling anything from AppController. What is even more baffling is that there is no class in the documentation named CPApplicationMain.
After digging the documentation for some time, I found CPApplication. This explains what's happening but still how is AppController coming in the picture.
App directory also contains a file Info.plist.
<dict>
<key>CPApplicationDelegateClass</key>
<string>AppController</string>
<key>CPBundleName</key>
<string>Hello World</string>
<key>CPPrincipalClass</key>
<string>CPApplication</string>
</dict>
</plist>
This explains everything apart from the fact as to how applicationDidFinishLaunching in AppController is getting called. This method hosts the rendering code. Well, as the name of the key suggests AppController is a delegate class for CPApplication. CPApplication defines a delegate method with the signature
-(void)
This clears everything. To put the flow in a picture.
Framework totally lacks documentation. Even the API classes are not properly documented. Lets see how and when power of open source starts showing its magic.
- Primary reason is the intent of the framework developers. Even if this framework fails in terms of mass adoption, going forward something similar will be in use. Failure would not be of the idea. Maybe they are ahead of time and therefore can face sloppy approval. I doubt that will happen though.
- Competition: Some people may be thinking that GWT, ZK etc makes Cappuccino obsolete. I disagree. ZK must be the best amongst the RAD RIA development frameworks but what I never liked about it and the likes is their dependency on the server components. GWT is better in that aspect but requires compiling and lacks rich user interface elements. Cappuccino is a complete UI authoring kit. One can easily (ahem!) develop desktop like applications using it. In fact, current UI elements are similar to Mac.
- Focus: Want to develop rich client side interfaces without getting into intricacies of Javascript, CSS and HTML; Use Cappuccino. Check out following similar applications. First one is written in Cappuccino and second in JQuery by a web enthusiast.
Developer of JQuery example claims to have written it in 45 lines of JQuery with 200 lines of CSS. At least for me, choice is apparent. One notable thing is that of speed. JQuery example is way too smooth as compared to Cappuccino one. But I am certain that these things will be taken care of as development using Cappuccino picks up pace.
I expect following improvements taking place in the framework
- Speed optimizations
- Availability of UI themes (Windows, Gnome etc)
- Tools for rapid development
- Better documenation/tutorials
Peeking inside the Frameworks (download starter kit) folder reveals three folders.
- Objective-J: Contains .js file which is Objective-C's implementation in Javascript.
- Foundation: This folder contains definitions for foundation classes i.e. core building blocks of the framework.
- AppKit: This folder contains classes that are built upon foundation classes. These are the classes that will primarily be used by a developer to create UI elements, event handlers, network calls(pretty much everything). AppKit contains a Resources folder, which hosts the theme elements. Replacing files here will change look and feel of whole application.
Look at the following snippet
import <Foundation/Foundation.j>
import <AppKit/AppKit.j>
import "AppController.j"
function main(args, namedArgs)
{
CPApplicationMain(args, namedArgs);
}
This is the code i.e. being called from the index file.
First two lines loads foundation and app classes. AppController.j is the file which contains a method, which hosts the code responsible for rendering the defined GUI. But as evident, nowhere this code is calling anything from AppController. What is even more baffling is that there is no class in the documentation named CPApplicationMain.
After digging the documentation for some time, I found CPApplication. This explains what's happening but still how is AppController coming in the picture.
App directory also contains a file Info.plist.
<dict>
<key>CPApplicationDelegateClass</key>
<string>AppController</string>
<key>CPBundleName</key>
<string>Hello World</string>
<key>CPPrincipalClass</key>
<string>CPApplication</string>
</dict>
</plist>
This explains everything apart from the fact as to how applicationDidFinishLaunching in AppController is getting called. This method hosts the rendering code. Well, as the name of the key suggests AppController is a delegate class for CPApplication. CPApplication defines a delegate method with the signature
-(void)
applicationDidFinishLaunching:(CPNotification)aNotificationThis clears everything. To put the flow in a picture.
Framework totally lacks documentation. Even the API classes are not properly documented. Lets see how and when power of open source starts showing its magic.
Wednesday, September 10, 2008
First Sip Of Cappuccino
| Reactions: |
"With Cappuccino, you don't need to know HTML. You'll never write a line of CSS. You don't ever have to interact with DOM. We only ask developers to learn one technology."
A lot of progress has been made in bridging the gap of dynamism and interactivity between desktop and web applications. If Ajax was the harbinger of RIA; Prototype and JQuery actuated a whole new set of applications which today constitutes so called web 2.0.
But as opposed to "desktop development" support in terms of tools and documentation had always been scarce for web applications. Which apart from making web application development difficult; increases the learning curve for a developer who had been developing desktop applications previously. Primary technologies which are essence of web i.e. HTML, Javascript and CSS are entirely different from ones which are used in desktop development.
Cappuccino is new kid on the block for web frameworks which totally alleviates a developer from learning most of the above mentioned technologies. 280slides is the first full fledged application developed using Cappuccino. It is pretty impressive what all can be done in fledgling state of this framework. Some noteworthy points:
var myPerson = [[Person alloc] init];
What's happening here is that for getting a new instance of Person, I am first calling a built in method alloc and calling init (which is another built in method) on the instance returned by previous call. How can it not be eliminated?
Similarly, keyword self can be used to represent this or class itself depending upon the context. You kidding me?
Update: I thought my reservations with syntax may not be right in context of making Objective-J similar to Objective-C. But that doesn't seem to be the case.
Links:
http://cappuccino.org/learn/tutorials/objective-j-tutorial.php
http://cappuccino.org/learn/documentation/
But as opposed to "desktop development" support in terms of tools and documentation had always been scarce for web applications. Which apart from making web application development difficult; increases the learning curve for a developer who had been developing desktop applications previously. Primary technologies which are essence of web i.e. HTML, Javascript and CSS are entirely different from ones which are used in desktop development.
Cappuccino is new kid on the block for web frameworks which totally alleviates a developer from learning most of the above mentioned technologies. 280slides is the first full fledged application developed using Cappuccino. It is pretty impressive what all can be done in fledgling state of this framework. Some noteworthy points:
- No compilation required (big plus)
- Have a language Objective-J based on Objective-C written on top of Javascript
- Comprehensive API
- Requires + or - sign before every method (??)
- All method parameters has to be labeled which becomes part of the method name
var myPerson = [[Person alloc] init];
What's happening here is that for getting a new instance of Person, I am first calling a built in method alloc and calling init (which is another built in method) on the instance returned by previous call. How can it not be eliminated?
Similarly, keyword self can be used to represent this or class itself depending upon the context. You kidding me?
- Cappuccino allows any Javascript object to act like Objective-J object at the same time. You can even use Javascript code inside the Objective-J code.
Update: I thought my reservations with syntax may not be right in context of making Objective-J similar to Objective-C. But that doesn't seem to be the case.
Links:
http://cappuccino.org/learn/tutorials/objective-j-tutorial.php
http://cappuccino.org/learn/documentation/
Sunday, September 7, 2008
Come October And I Will Fly
| Reactions: |
Update: Postponed to November :(
If this happens than my wish list will get shortened further. It is getting better and better. Band that I joined thinking of trekking is turning out to be a super adventure pack. I am not completely done with trekking but it is passe. I just learned that group is not taking any new members. I joined it in April end. What are the odds that I had missed them?
Last time I was this excited was at the time of last Bangalore trip. When I learned about bungee jumping there, I collected all the information available for it. Called up friends, cousin. Searched and read every page regarding bungee. Prepared myself mentally for it. Duh! Been to every place that supposedly was hosting it. Annoyed the whole troupe with my enthusiasm for it ;). But it turned out that it only happens in certain months and the month I was there wasn't one of those months. I was heartbroken literally. Someone asked me then if there is nothing more adventurous and my reply was "jumping from a plane".
But plans are being made for something even better than that. And I seriously pray they materialize. Pam has proposed for joining a gliding camp. I was making a plan for the same since quite some time. Some friends also expressed their interest for this. But things were far from getting into "conveyor belt mode".
Cost for gliding camp is equivalent to a stay in some random city for a week in some half decent hotel. Gliding camp is for three days. But instead of visiting yet another city, I be able to pay a visit to the skies :). Fingers crossed.
If this happens than my wish list will get shortened further. It is getting better and better. Band that I joined thinking of trekking is turning out to be a super adventure pack. I am not completely done with trekking but it is passe. I just learned that group is not taking any new members. I joined it in April end. What are the odds that I had missed them?
Last time I was this excited was at the time of last Bangalore trip. When I learned about bungee jumping there, I collected all the information available for it. Called up friends, cousin. Searched and read every page regarding bungee. Prepared myself mentally for it. Duh! Been to every place that supposedly was hosting it. Annoyed the whole troupe with my enthusiasm for it ;). But it turned out that it only happens in certain months and the month I was there wasn't one of those months. I was heartbroken literally. Someone asked me then if there is nothing more adventurous and my reply was "jumping from a plane".
But plans are being made for something even better than that. And I seriously pray they materialize. Pam has proposed for joining a gliding camp. I was making a plan for the same since quite some time. Some friends also expressed their interest for this. But things were far from getting into "conveyor belt mode".
Cost for gliding camp is equivalent to a stay in some random city for a week in some half decent hotel. Gliding camp is for three days. But instead of visiting yet another city, I be able to pay a visit to the skies :). Fingers crossed.
Wednesday, September 3, 2008
Impact of Google Chrome on Businesses, Users and Developers
| Reactions: |
Gmail. Does it sound like a domain for which people can readily give up their years old account which is known to very old friends to current colleagues? This was at a time when most of "with friends" communication used to take place over email as there were no social networking sites. Granted Gmail was a superior product as compared to its primary competitions of Yahoo! and Hotmail and was offering unheard of storage of 1GB. But that alone wasn't the reason because of which people left famous email services in drones.
Google had a superior marketing strategy together with a brilliant product. They made Gmail "invite only" and hence a status symbol. People were getting crazy for Gmail account. Overnight, there were sites to facilitate barter of Gmail invites with money to what not. Hotmail and Yahoo! truly lost the battle when they started acting unethically by blocking Gmail invites. And today, virtually everyone I know have Gmail as their personal email address.
Google Chrome. Google's dedication and enthusiasm towards this project can be estimated by
1) Their offering of a brilliant comic for the product description rather than a manual
2) Announcing the launch of Chrome within 48 hours when everyone was wondering if/when Google will be releasing this product
Today IE has 72% of the market share (it varies from 55% to 75% depending upon target audience of the site). Firefox has eaten up rest of the pie but further penetration for them from this point onwards will be very tough. But a browser which can offer everything that Firefox offers and more and promoted through your favorite search engine can do wonders.
Once Google have their very own window to user's desktop they can choose to market their Office replacement products more aggressively.
Google had a superior marketing strategy together with a brilliant product. They made Gmail "invite only" and hence a status symbol. People were getting crazy for Gmail account. Overnight, there were sites to facilitate barter of Gmail invites with money to what not. Hotmail and Yahoo! truly lost the battle when they started acting unethically by blocking Gmail invites. And today, virtually everyone I know have Gmail as their personal email address.
Google Chrome. Google's dedication and enthusiasm towards this project can be estimated by
1) Their offering of a brilliant comic for the product description rather than a manual
2) Announcing the launch of Chrome within 48 hours when everyone was wondering if/when Google will be releasing this product
So, what does Google have to gain by offering a web browser?
Google's primary cash generating channel had always been targeted advertisement. Imagine the level of targeted ads Google can serve to a user if it knows everything that user does on the Internet. As of now, Google displays ads based on the content of the web-page. Combine that with user's search and browse history with demographics and you can have a major boost in likelihood of advertisement being of value to the user.
Mozilla and Microsoft
People are thinking Mozilla Corporation will be a bigger loser than Microsoft. Which is true to certain extent but not entirely..
- Mozilla derives more than 70% of its revenue from its partnership with Google.
- Firefox is crazily famous with techies because it is a superior product than IE
- IE is in use only because it gets bundled with Windows
Now, Google has superior product than Firefox and have unparalleled respect of end users for a tech company combined with reach that Mozilla never had.
Today IE has 72% of the market share (it varies from 55% to 75% depending upon target audience of the site). Firefox has eaten up rest of the pie but further penetration for them from this point onwards will be very tough. But a browser which can offer everything that Firefox offers and more and promoted through your favorite search engine can do wonders.
Once Google have their very own window to user's desktop they can choose to market their Office replacement products more aggressively.
For Users:
Chrome's biggest advantage apart from having superior rendering engine, faster javascript execution by compiling javascript to machine code and many UI tweaks is that it segregates tabs into processes. This will primarily result in
- Virtually no memory leaks
- Tab crashes rather than browser crashes
For Developers:
For web developers Chrome shifts the blame of a crash from browser to poorly written application code. It provides monitors for tabs. So user can see how much CPU utilization, data transfer etc is being done by an individual web application.
Chrome is open source. If it becomes even mildly popular it will give real competition to Firefox. Nobody wants Firefox to become another IE in absence of an able contender.
For web developers Chrome shifts the blame of a crash from browser to poorly written application code. It provides monitors for tabs. So user can see how much CPU utilization, data transfer etc is being done by an individual web application.
Chrome is open source. If it becomes even mildly popular it will give real competition to Firefox. Nobody wants Firefox to become another IE in absence of an able contender.
Subscribe to:
Posts (Atom)