<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Cerebrawl &#187; software</title>
	<atom:link href="http://www.cerebrawl.com/tag/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.cerebrawl.com</link>
	<description></description>
	<lastBuildDate>Sun, 24 Jul 2011 18:05:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>On iPhone app inputs</title>
		<link>http://www.cerebrawl.com/2010/10/on-iphone-app-inputs/</link>
		<comments>http://www.cerebrawl.com/2010/10/on-iphone-app-inputs/#comments</comments>
		<pubDate>Sat, 02 Oct 2010 08:15:54 +0000</pubDate>
		<dc:creator>Gargs</dc:creator>
				<category><![CDATA[iPhone/Mac Dev]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[validation]]></category>

		<guid isPermaLink="false">http://www.cerebrawl.com/?p=342</guid>
		<description><![CDATA[This question statement often comes up.
We&#8217;re developing an iOS application, and of course, the user would have to input some personal information before he/she can start using the application. What kind of validations should be implement on the device? Which ones on the server?
Most people, especially when starting out on a new project, consider input validation to be a fairly trivial problem statement with fixed states. But, as the application matures, they fairly quickly realize that every input has its own set of error and valid states. The validation problem ...]]></description>
			<content:encoded><![CDATA[<p>This question statement often comes up.</p>
<p>We&#8217;re developing an iOS application, and of course, the user would have to input some personal information before he/she can start using the application. What kind of validations should be implement on the device? Which ones on the server?</p>
<p>Most people, especially when starting out on a new project, consider input validation to be a fairly trivial problem statement with fixed states. But, as the application matures, they fairly quickly realize that every input has its own set of error and valid states. The validation problem grows exponentially with the number of user inputs on the device, as every combination needs its own validation, more or less.</p>
<p>I firmly believe that validation should never be done on the client, unless that&#8217;s the only place you need to do it. If there&#8217;s even a single server side validation component in the project, the team is better off delegating it entirely to the servers. This makes life much more easier for the front end developers and also makes testing easier. If your application depends on a web service (as most iOS apps do), chances are that the web service would in the near future completely rewrite its required inputs specs and then you will find yourself in a situation where instead of adding new features to your iOS app, you are spending valuable time in trying to get all the client side validations in place. This, until the next time this repeats itself.</p>
<p>That said, there is also a need to think about whether that input is really required. Let&#8217;s not forget that iOS devices are mostly mobile gadgets where the users are generally in a hurry to complete a particular task. Even if it&#8217;s their first time using the application, forcing them to input personal data which is only partially required is detrimental to the entire user experience. It adds unnecessary validation.</p>
<p>Conversely, if you have an input component in your app, then you necessarily HAVE to validate it. If you&#8217;re not validating it, it&#8217;s not important, and hence, must be disposed off.</p>
<p>Lessons: Abide by the Apple Human Interface Guidelines, always. Don&#8217;t force your users to input more information than is logically necessary for the application to do its job. If you have to perform input validations, do them all at one place, and that place is the server where you have the necessary processing cycles.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cerebrawl.com/2010/10/on-iphone-app-inputs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Should you use Interface Builder?</title>
		<link>http://www.cerebrawl.com/2009/10/should-you-use-interface-builder/</link>
		<comments>http://www.cerebrawl.com/2009/10/should-you-use-interface-builder/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 02:48:14 +0000</pubDate>
		<dc:creator>Gargs</dc:creator>
				<category><![CDATA[iPhone/Mac Dev]]></category>
		<category><![CDATA[interface builder]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[startup]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://www.cerebrawl.com/?p=290</guid>
		<description><![CDATA[Ever since I started out with iPhone development, I have seen a lot of debate online about the pros and cons of using the Interface Builder tool that comes as a part of the developer toolkit for Mac and iPhone development. In this post, I put forward my opinion that I believe is also the opinion of seasoned Mac developers. And that is - try to use Interface Builder for your Mac/iPhone apps as much as possible. There is a reason Apple has spent so many years perfecting it. 

The article rebukes certain ill-conceived notions and aims to encourage the reader to seek out the pros and cons of using IB on their own on a case by case basis.]]></description>
			<content:encoded><![CDATA[<p>Ever since I started out with iPhone development, I have seen a lot of debate online about the pros and cons of using the Interface Builder tool that comes as a part of the developer toolkit for Mac and iPhone development. For a lot of people, the tool comes across as basic, limited in scope, and sometimes entirely useless. For the developers at the other extreme, IB is an invincible tool without which there is no app development.</p>
<p>This Wednesday, I got the chance to debate just this with the CTO of an iPhone startup here in Washington, DC. While I am short on the person&#8217;s technical background, he did mention that his previous programming experience was doing website development using Flash and Dreamweaver.</p>
<p><span id="more-290"></span></p>
<p>The seed for the debate was laid last week when I met with their co-founder and while going over my experience with the SDK, briefly mentioned how elegant the app development workflow on the iPhone was, thanks due in large part to IB and the way it stores object information. I was then told that the company only believes in handcoding every single UI element for an iPhone app, and that it should be good reasoning out the benefits of each approach (hand coding vs. designing using the IB) with the company&#8217;s smartest person.</p>
<p>Having moved to Cocoa from a Java background, I can understand why a developer would not like the elegance and, arguably, added development steps mandated by the Interface Builder. Almost every programmer has been badly burnt by such tools in the past. And, almost all of these developers are only just now making a foray into Mac development because of how hot the market is right now. Every other programming framework has taught developers that it&#8217;s not the design that matters, rather the end product. Very few developers adhere to the keep it simple principle, and countless volumes have been written on why too much abstraction is actually a bad programming practice. While reusing code is a novel concept, there is a tradeoff with simplicity.</p>
<p>In the Mac world, such a conundrum does not exist. The tools for development are provided by the company that also happens to be the only company working on the Mac hardware and software ecosystem. They have a vested interest in making sure that development is consistently a wonderful experience for both the programmers as well as the testers. And, with a company that has such an academic backdrop of excellence, as Apple, chances are that they have spent a good amount of time in making sure that the development toolkit adheres to best practices in development.</p>
<p>Below are the points raised by the person and my reactions.</p>
<blockquote><p>Interface Builder makes the project unwieldy and hard to understand.</p></blockquote>
<p>This is absolutely not the case if you&#8217;re a good developer. One of the best practices I mentioned above is that application design is a separate task from application coding. Interface Builder lets you do the design work without worrying about what the code is going to look like. In almost all instances, it also provides you with a good way to enumerate the object and view interfaces that you would like to expose to other classes in your application. Design comes before coding, and by mixing the two, you&#8217;re absolutely laying the groundwork for making your application a terrible failure prone to App store rejection from the get go.</p>
<p>The reason your apps are difficult to understand is that the developer did not follow established norms when it comes to using IB. From Apple&#8217;s own documentation: &#8216;A very simple application might be able to store all of its user interface components in a single nib file, but for most applications, it is better to distribute components across multiple nib files&#8217;. The mainwindow.xib should be just that&#8230;the main window minus any views. This way, you minimize load times. Also, I follow the convention of having every view complex or custom view in its own nib. The formula I follow says that an nib should only have views that are needed at that particular application lifecycle state. This way, I know which nib to look at if I want to clarify some connections.</p>
<p>Basically, IB would only make the project unwieldy if a bad developer worked on it.</p>
<blockquote><p>IB cannot do most customizations needed by apps</p></blockquote>
<p>This argument lacks a backbone in 95% of the cases. You can perform almost all kinds of customizations using IB. Want a bunch of labels inside a UITableViewCell? How about a combination of labels and images? How about controls inside a UIScrollView? All this can be done using just the IB. Well, there are a lot of cases where you might want to handle customizations by code (complex composite cells for example), it doesn&#8217;t negate the fact that, even then, in the interest of keeping the design process consistent, you&#8217;re better off having an NIB before you customize. In fact, Apple recommends doing so because there is a lot of framework code that stands the chance of being over-ridden if you decide to do everything from container allocation to adding to a view programmatically.</p>
<p>That said, I would argue that over-customizing almost always leads to bad application sales. Almost all the best-selling apps for the iPhone maintain the signature look and feel of the preliminary pre-installed applications. There are no performance or behavioral gains from using non-native UI elements.</p>
<blockquote><p>IB is for newbies; you learn with it, but give it up</p></blockquote>
<p>Not unless you want to enforce bad design principles for the lifetime of all your subsequent Mac projects. As mentioned earlier, IB is a design as well as coding tool. It serializes objects in a file that is lazy loaded in a perfect order and with well-tested memory management in place. Also, doing so involves the use of a lot of frameworks that not only make life easier, but also reduce chances of code defects.</p>
<blockquote><p>We have used design tools in the past, and UI development using code trumped all</p></blockquote>
<p>This is just the side effect of using bad tools for a long time. Such thinking has to go. Apple developers have been working with IB for a few years now. The toolkit keeps on expanding and getting better. Don&#8217;t let your previous bad experiences let you make bad design decisions. Do it the right way. This is not an Adobe framework.</p>
<p>I am very interested in doing a followup to this post on a more technical level, but I really wanted to share with other fellow iPhone developers the importance of working with the IB, not against it. The tool is there for a reason. Learn to use it. Apple recommends IB for every project.</p>
<p>Remember, when it comes to software engineering, it&#8217;s not always the end result that matters, but also how much future proof that solution is. Being engineers, we&#8217;re also designers &#8211; software architects, and it is upto us to engineer something beautifully, or make our product look like a patchwork of sorts.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cerebrawl.com/2009/10/should-you-use-interface-builder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It&#8217;s been a while&#8230;</title>
		<link>http://www.cerebrawl.com/2009/10/its-been-a-while/</link>
		<comments>http://www.cerebrawl.com/2009/10/its-been-a-while/#comments</comments>
		<pubDate>Sun, 11 Oct 2009 22:17:31 +0000</pubDate>
		<dc:creator>Gargs</dc:creator>
				<category><![CDATA[Life and Personal]]></category>
		<category><![CDATA[consulting]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[engineering]]></category>
		<category><![CDATA[iPhone/Mac Dev]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.cerebrawl.com/?p=252</guid>
		<description><![CDATA[Marking my return to blogging after more than a year. It has been an eventful 2008/09, and this also marks a move from my older domain to cerebrawl.com.

I have gained more understanding of how small business in America works. I have seen the economy take one of the worst nosedives in my lifetime, and seen desperate efforts to bring it back on track. I have been humbled. I have come out stronger.]]></description>
			<content:encoded><![CDATA[<p>&#8230;and how times have changed. The last time I blogged, I was on a train, commuting to DC on a daily basis for a federal project that everyone was in just to rake in utilization hours (bonuses) and bide time. I was single. I had a roommate. And, I was careless.</p>
<p>Now for the exciting part. I am married, drive a hybrid, don&#8217;t have roommates, and no longer commute 2.5 hours to and from the client site to work on some of the most technologically backward and ill-designed projects ever. I am now a more serious iPhone and Mac developer, thanks to the commute time saved, and have actually gained enough experience to put out apps (albeit small ones for now) on the App store.</p>
<p>I have gained more understanding of how small business in America works. I have seen the economy take one of the worst nosedives in my lifetime, and seen desperate efforts to bring it back on track. I have seen people responsible for the mess make it big, and I have seen people suffer. I have been humbled. I have come out stronger.</p>
<p>For those wondering what I am up to now, I am still the good old me, although with the wisdom of two. I am still diffident, so much so that I sometimes sell myself short, but it doesn&#8217;t matter. The people who are smart enough to realize my strengths are the ones that mean something. I am now, however, spending a lot of time pursuing my passion &#8211; learning to become a diligent software engineer, working on mobile services, next generation entertainment and communication software, and of course ECM. You can teach a violinist how to use their long fingers to type fast, but you can&#8217;t teach them how to compose poetry with their keyboards. Being able to do just that is something I am proud of. Thank you, school!</p>
<p>I am back, and hope to make this blog mine once again. Thanks for being a reader.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cerebrawl.com/2009/10/its-been-a-while/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Age and Competition</title>
		<link>http://www.cerebrawl.com/2008/06/age-and-competition/</link>
		<comments>http://www.cerebrawl.com/2008/06/age-and-competition/#comments</comments>
		<pubDate>Mon, 16 Jun 2008 17:58:32 +0000</pubDate>
		<dc:creator>Gargs</dc:creator>
				<category><![CDATA[Economy]]></category>
		<category><![CDATA[India]]></category>
		<category><![CDATA[Life and Personal]]></category>
		<category><![CDATA[Tech and Culture]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://phoenix.gargs.com/blog/?p=210</guid>
		<description><![CDATA[It&#8217;s not uncommon to run into a blog belonging to a very young software whizz these days and just not being amazed at how kids these days are able to get up to speed with what took us ages. Of course, this sort of generational gap is always going to exist. As we advance our knowledge of science and technology, the baseline for mere awareness is only going to keep rising. For example, a few decades ago, calculus was an advanced topic, but now it is a staple ingredient in ...]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s not uncommon to run into a blog belonging to a very young software whizz these days and just not being amazed at how kids these days are able to get up to speed with what took us ages. Of course, this sort of generational gap is always going to exist. As we advance our knowledge of science and technology, the baseline for mere awareness is only going to keep rising. For example, a few decades ago, calculus was an advanced topic, but now it is a staple ingredient in the Mathematics curriculum of an average middle school student.</p>
<p>The point of this post is to mull over how age and experience really play a role in how you look at these things. For example, I saw <a href="http://www.bluestatic.org/" target="_blank">this site</a> today. It belongs to a passionate 18 year old open source software developer who is most probably a college student. From a technical standpoint, he is definitely more than qualified to do the jobs of some very experienced people I have met. He is on the cutting edge of his technical spectrum, so to speak. When I was growing up and in college, I was like that, too. I used to work on websites as a hobby, write interesting C programs in my summers, and just generally mess around with a lot of software code. With the rise of the Internet, though, it has become all too easy, and sometimes expected of you, to showcase your passion and talent for the rest of the world. This is an example of the raised threshold/baseline I mentioned earlier. So, is the kid exceptional? In comparison to some other peers in college, sure, but being on the cutting edge and passionate is expected from you. When you are grown up, this is how you look at it.</p>
<p>When you&#8217;re 18 years old, you just want to do things because they&#8217;re fun, and not because you realize that being passionate is ultimately going to help your overall perception of your future career. Youngsters these days have this wonderful opportunity to be taken seriously, to be able to start open source projects that have the potential to be used by a lot of people, to be able to contribute in the same vein as other more experienced people, thanks to the Internet. So, for someone like me, while it was considered exceptional to just be passionate about programming languages or writing hobby programs, I think the bar has been raised quite a bit in the last two decades.</p>
<p>So, do you compete with these youngsters? Feel threatened? No.</p>
<p>These are just signs that the technology landscape is changing so quickly, and that is very good. What we could do, though, is align our passion with theirs and create synergies that would ultimately advance future technologies.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cerebrawl.com/2008/06/age-and-competition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

