<?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>Adrian Kosmaczewski &#187; Software</title> <atom:link href="http://kosmaczewski.net/category/software/feed/" rel="self" type="application/rss+xml" /><link>http://kosmaczewski.net</link> <description></description> <lastBuildDate>Sat, 05 May 2012 22:16:45 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.2</generator> <item><title>Size matters</title><link>http://kosmaczewski.net/size-matters/</link> <comments>http://kosmaczewski.net/size-matters/#comments</comments> <pubDate>Thu, 29 Mar 2012 08:54:25 +0000</pubDate> <dc:creator>Adrian</dc:creator> <category><![CDATA[Opinion]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[cheap philosophy]]></category> <category><![CDATA[computers]]></category> <category><![CDATA[economy]]></category> <category><![CDATA[physics]]></category> <category><![CDATA[scalability]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/</guid> <description><![CDATA[One of the facts I vividly remember of studying physics in university (this was in the mid 90&#8242;s in Geneva, Switzerland) was a certain disconnection between Relativity and Quantum Mechanics. The former is a theory used to describe phenomena at &#8230; <a
href="http://kosmaczewski.net/size-matters/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>One of the facts I vividly remember of studying physics in university
(this was in the mid 90&#8242;s in Geneva, Switzerland) was a certain
disconnection between Relativity and Quantum Mechanics. The former is a
theory used to describe phenomena at macro level, like galaxies,
planets, stellar systems, while the latter describes the interactions at
micro level, the atoms, light, particles, energy at microscopic levels.</p><p>When you apply some relativity equations to atoms, you get results that
are not supported by experimentation; and the same happens when you
apply some quantum theory equations to objects like planets. It is not
that <em>all</em> the relativistic facts do not apply at micro level, or that <em>all</em> quantum facts do not apply in macro level; it is that there is no
unifying theory that explains everything, and this quest is the graal of
modern physics.</p><p>Fast-forward 5 years.</p><p>One of the facts I vividly remember of studying Economics in university
(this time in Buenos Aires) was a certain disconnection between
Microeconomy and Macroeconomy. The models that describe the behavior of
the consumer (which is the heart of the study of Microeconomy) yield
wrong conclusions when applied to issues like unemployment, foreign
trade or other matters that are usually better explained by
Macroeconomy; and similarly, well, you get the picture.</p><p>As a matter of fact, my Macroeconomics teacher would say that whatever
we learnt in Microeconomics class was wrong, and that he had the right
answers; of course, the Micro teacher told us the same the year before.</p><p>Fast-forward 5 years.</p><p>One of the facts that I vividly remember of studying Computer Science
during my master degree program was a certain disconnection between
small and big software projects. What works in small, simple
applications and systems, including human and technical factors, does
not usually work in bigger, more complex projects.</p><p>It is not the same to work on a startup project with some friends in a
garage to create the next social networking site, where coordination is
easy, most of the tools required are available for free, where the
projects rarely have any dedicated quality assurance team, than working
in, say, a bigger organization like Microsoft, together with other 1500
engineers and testers, all dedicated full time to writing and testing
the next version of Windows.</p><p>The hardware requirements are not the same, either; in small projects
you could use a couple of Mac Minis and a cloud hosting service and you
are done; at Google they have <em>MapReduce</em> and a couple hundred thousand
computers in a datacenter with air conditioning and security 24/7, and
they still require more infrastructure every day.</p><p>However, and this is my main point, there is no proven recipe that can
help a company grow from 10 to 10&#8217;000 people and from 10 to 10 million
customers in a snap; there are some good techniques and principles, here
and there, to make your software grow; but nobody actually knows of a
generic recipe for every software company.</p><p>There are so many factors in macro problems, that the <em>interaction</em> of
those factors has to be taken into account; not only the factors
themselves, but also their interdependencies. I guess you see where I am
going with this. This problem is usually called <em>scaling</em> in computer
circles, and I think that the word can be applied to economy and
physics.</p><p>As humans, we have trouble scaling. Scale is important in our eyes,
because we tend to think that bigger is better. Bigger is more money, in
general, but not necessarily better; we have trouble going from small to
big and vice versa. Not only in facts; also in concepts. We cannot
foresee the implications of scaling. At least, not completely, and not
so far.</p><p>This disconnection creates lots of problems in our society. Politicians
forget the human being altogether, buried beneath tons of numbers and
statistics. Voters do not understand that managing a country <em>is not</em> like managing your household economy. Schools do not teach how to solve
scalability problems; heck, they do not even properly teach kids how to
work in teams to solve small, micro problems.</p><p>Small companies do not understand that scaling is neither automatic nor
a required process, and that not all companies should grow; some
companies work better when small than when they grow up, and that&#8217;s why
they sometimes fail. Venture capitalists that are not familiar with
technology cannot understand this fact, and will sometimes sacrifice
good working teams for just making more money or for getting into the
stock market.</p><p>The knowledge we have about the problem of scaling is limited; I
actually sometimes ask myself whether there is a solution to it, that
would justify the search of a global theory in physics, a unified theory
in economics, or a generic scaling procedure for companies and software
systems.</p><p>I do not have the answer; the fact is that size matters, and that this
pattern has to do with the world we are living in; it does not matter
whether you are a physicist, an economist or a programmer; this is how
the world works.</p> ]]></content:encoded> <wfw:commentRss>http://kosmaczewski.net/size-matters/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>MoMA and Software as an Art</title><link>http://kosmaczewski.net/moma-and-software-as-an-art/</link> <comments>http://kosmaczewski.net/moma-and-software-as-an-art/#comments</comments> <pubDate>Wed, 01 Feb 2012 21:59:50 +0000</pubDate> <dc:creator>Adrian</dc:creator> <category><![CDATA[Software]]></category> <category><![CDATA[Whatever]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/</guid> <description><![CDATA[What would be the place, in a museum like MoMA, of a collection of art dedicated to software? If there is something that MoMA can make, is to boost your imagination. Anything is possible; the myriad of options for the &#8230; <a
href="http://kosmaczewski.net/moma-and-software-as-an-art/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>What would be the place, in a museum like <a
href="http://www.moma.org/">MoMA</a>, of a collection of
art dedicated to software?</p><p>If there is something that MoMA can make, is to boost your imagination.
Anything is possible; the myriad of options for the expression of human
creativity has no end, the mind boggles.</p><p>My dream has been, for years, to explain software, its intricacies, to
make this part of our world accessible to anyone. Software rules our
world, it is one of the most complex creations of man, yet it remains
understood (albeit partly) by just a few.</p><p>There are many dimensions to software; the first to explore is size.
When you tell anyone outside of the field that <a
href="http://www.usenix.org/events/usenix-win2000/invitedtalks/lucovsky.ppt">Windows 2000 took 5
years to a team of 1400 developers to complete</a>, and that the whole
thing is about 29 millions lines of code, it is still not enough;
however, if you printed the whole code of Windows and put it in a series
of books, how many books would it be?</p><p><a
href="http://en.wikipedia.org/wiki/On_Kawara">On Kawara</a> has created a piece called &#8220;One Million Years&#8221;, <a
href="http://www.moma.org/collection/object.php?object_id=88213">on display at
MoMA</a>; the whole thing is a series of books where the pages show, one
after the other, as the name implies, one million years.</p><p><a
href="http://www.flickr.com/photos/akosma/6803496685/"
title="IMG_1696 by akosma, on Flickr"><img
src="http://farm8.staticflickr.com/7141/6803496685_77841e2934.jpg"
width="500" height="375" alt="IMG_1696"></a></p><p>At 80 lines per page, at 1000 pages per volume, the source code of Windows 2000 would take&#8230; 363
volumes. Given that the Encyclopædia Universalis or the Encyclopædia
Britannica consist of 20 or 30 volumes each, we are talking that a
single company has been able to pull 12 encyclopædias out of the hat for
a single version of a product. I&#8217;m not talking about quality or other
characteristics; just size, raw and simple.</p><p>That&#8217;s the magnitude of software. Now we can begin to understand the
magnitudes, the cost, the implications.</p><p>Another magnitudes worth exploring would be cost, number of people
involved, number of errors&#8230; Infographies would explain in detail the
interconnections and the different dimensions, their relations, their
impact. But again, the whole thing remains so virtual, so out of reach,
so different of anything else, that we just run out of analogies in no
time.</p><p>What other dimensions could be used?</p> ]]></content:encoded> <wfw:commentRss>http://kosmaczewski.net/moma-and-software-as-an-art/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Learning one new language every year</title><link>http://kosmaczewski.net/learning-one-new-language-every-year/</link> <comments>http://kosmaczewski.net/learning-one-new-language-every-year/#comments</comments> <pubDate>Sat, 04 Jun 2011 13:08:16 +0000</pubDate> <dc:creator>Adrian</dc:creator> <category><![CDATA[Opinion]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[language]]></category> <category><![CDATA[Open Source]]></category> <category><![CDATA[profession]]></category> <category><![CDATA[programming]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=2302</guid> <description><![CDATA[Here&#8217;s an update of the current status of my &#8220;one language per year&#8221; lifelong initiative: 1992: QBasic 1993: Turbo Pascal 1994: C 1995: Delphi 1996: Java 1997: JavaScript 1998: VBScript 1999: Transact-SQL 2000: C# + Prolog 2001: C++ 2002: PHP &#8230; <a
href="http://kosmaczewski.net/learning-one-new-language-every-year/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Here&#8217;s an update of the current status of my &#8220;one language per year&#8221; lifelong initiative:</p><ol><li>1992: QBasic</li><li>1993: Turbo Pascal</li><li>1994: C</li><li>1995: Delphi</li><li>1996: Java</li><li>1997: JavaScript</li><li>1998: VBScript</li><li>1999: Transact-SQL</li><li>2000: C# + Prolog</li><li>2001: C++</li><li>2002: PHP</li><li>2003: Objective-C</li><li>2004: Visual Basic.NET</li><li>2005: Ruby</li><li>2006: LINQ</li><li>2007: Erlang</li><li>2008: Python</li><li>2009: Go</li><li>2010: Lisp</li><li><strong>2011: Haskell</strong></li></ol><p>The trend has roughly been an evolution from procedural during the 90&#8242;s, to object-oriented ones at the beginning of the 2000&#8242;s, and finally to functional languages right now.</p><p>And thus I realize, I&#8217;ve been programming for 20 years this year, 15 of which for a living.</p> ]]></content:encoded> <wfw:commentRss>http://kosmaczewski.net/learning-one-new-language-every-year/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Reflexions on the Software Business</title><link>http://kosmaczewski.net/reflexions-on-the-software-business/</link> <comments>http://kosmaczewski.net/reflexions-on-the-software-business/#comments</comments> <pubDate>Tue, 15 Dec 2009 07:54:21 +0000</pubDate> <dc:creator>Adrian</dc:creator> <category><![CDATA[Opinion]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[business]]></category> <category><![CDATA[consulting]]></category> <category><![CDATA[economy]]></category> <category><![CDATA[products]]></category> <category><![CDATA[projects]]></category> <category><![CDATA[Switzerland]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=2141</guid> <description><![CDATA[There are basically two things you can do to earn a living when you write code: Consulting Products When doing consulting, you write code, and somebody else owns it; you are blamed for its bugs, rarely praised for its benefits, &#8230; <a
href="http://kosmaczewski.net/reflexions-on-the-software-business/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>There are basically two things you can do to earn a living when you write code:</p><ol><li>Consulting</li><li>Products</li></ol><p>When doing <strong>consulting</strong>, you write code, and somebody else owns it; you are blamed for its bugs, rarely praised for its benefits, and usually you only sell one copy of your work. When working on <strong>products</strong>, you write code, and you actually own it; you can brag about it on your blog without pissing anyone, and if you are lucky you sell as many copies of it as you want, all for basically the same production cost.</p><p>Now, here&#8217;s an insider tip: if your objective is living a nightmare, tearing yourself apart and swear never touching a keyboard again, choose option 1. If your objective is enjoying a healthy life, making money and living long and prosper, choose option 2.</p><p>This fact is explained by economists as a <a
target="_blank" href="http://www.softwaremetrics.com/se.htm">&#8220;diseconomy of scale&#8221;</a>: this means that fixed costs are very low relative to variable costs, which means that the cost of creating a new copy of your finished product is virtually zero. You only have to invest in the building, not on the replication. Actually this is not 100% true, because you should spend on marketing anyway, and you might as well add new features on the way, but the truth is that well-run software companies make more money than drug dealers, and guess what: software is an activity usually considered legal.</p><p>However, there is a tacit consensus in Switzerland, apparently, by which there can&#8217;t be successful companies doing software in this side of the world. And most companies choose option 1 above. Which has interesting side effects. <span
id="more-2141"></span></p><h2>Consulting</h2><p>Consulting, just like the airline industry, succeeds in one particular point: it pisses off everyone involved in it. Let&#8217;s be frank; clients are seldom happy of the end result, while consultants have to deal with horrible working environments (read: open spaces). The only ones actually enjoying this market are the (usually non-technical) owners of consulting companies, who take pride in the fact of selling an &#8220;expert&#8221; to a company for around CHF 1000 per day (much more in the case of SAP), while they pay less than CHF 300 to the same consultant. The remaining 700 go to &#8220;operational costs&#8221;, of course, including the bonuses paid to managers of these companies on the backs of the workers.</p><p>Welcome to &#8220;Capitalism 101&#8243;. You have to afford that new Porsche somehow.</p><p>Not only are consultants screwed from day one, with the typical speech of &#8220;we are a human company, people is our first priority&#8221;, they also get fired first whenever the market shrinks. They have to beg for training and to be sent to conferences, while their managers go to corporate retreats in Davos or Zermatt. Heck, sometimes consultants even have to ask for a proper computer to do their jobs, or are cynically asked to use their own personal equipment.</p><p>Oh, and consultants have to fill timesheets, and get punished if they don&#8217;t do it. Timesheets are worth an article of their own, in the sense that they are only used as command-and-control tools, and not, as one would think, as the basis for future estimations of upcoming projects. Timesheets are just black holes of information, where you might as well log 8 hours in the &#8220;whatever&#8221; category and nobody would really care. And estimations are usually done by your non-technical boss, anyway, so screw those historical data.</p><p>(Sometimes consultants not only have to fill their employer&#8217;s timesheet, but also the customer&#8217;s. I remember that at one time I had to fill 3 different timesheets. I could easily spend 2 hours a week making sure everything was right and coherent. And no, there wasn&#8217;t any &#8220;timesheet filling&#8221; entry in the timesheet software. And even worse, timesheet software &#8211; web based or not &#8211; usually sucks big time.)</p><p>OK, I&#8217;m probably being unfair here. There are a couple of benefits to being a consultant. I suppose. I hope. But this is not my point.</p><h2>Products</h2><p>As shown, the consulting landscape does not look very promising; on one side, many companies try to eat a small consulting market using the same shitty practices. On the other side, thankfully, <a
target="_blank" href="http://akosma.com/2009/10/23/roundup-of-swiss-companies-writing-mac-apps/">there are companies</a> who have understood that you can earn a very decent living by creating a nice product and selling licenses (or subscriptions) of it.</p><p>As previously, there are interesting side effects to choosing this strategy:</p><ul><li>Creating products has the ultimate goal of generating a steady income stream. This frees up energy and resources in your team to build new products, which generate more revenue, which you can spend creating new products&#8230; and so on and so forth. You get the idea.</li><li>Having to maintain a few products means that you can afford knowing its quirks by heart; you don&#8217;t have to context switch from project to project like most consultants do, and you can continuously fix bugs and add new features to it. You feel like the product is your child, and you help it grow and become stronger, more resilient, more powerful. Which helps you sell more copies, etc, etc (see the previous point).</li><li>Google&#8217;s much touted &#8220;20% project time&#8221; becomes, in the case of owning your own products, a &#8220;100% project time&#8221;. You enter a state of continuous creation. You don&#8217;t have to explain your choices to a non-technical (read: incompetent) boss: you respond, at most, to what your market demands (read: your customers).</li><li>You can create a product suite; the synergy created from one product to the other might suffice to drive sales up of both products all by itself.</li><li>You can have a direct contact with your clients, answering their requests and problems, instead of relying on a (usually non-technical) man-in-the-middle strategy.</li><li>You acknowledge the fact that 8 hours of coding work is an illusion. I know no developer capable of sitting for 8 hours in front of a computer and writing coherent code, which is what most consultants are expected to get for CHF 1000 per day (the customer doesn&#8217;t usually know that a consultant only gets 30% of that sum). A maximum of 5 or 6 hours of pure concentration is already a big win, and the rest should be spent doing paperwork, playing Wii Sports or doing the groceries. Freeing your mind helps you have more ideas, which in turn become products that generate new revenue streams. When you are in consulting mode, you cannot have this liberty. Actually you have no liberty at all.</li><li>You can have a real quality strategy. I know no consulting firm which really pays attention to quality (even if most fill their mouths with the Q word). Refactoring, unit testing, user testing, writing requirements and specs are just nonexistent tasks in most consulting companies. When you are creating products, you can take time to do them with the depth that you want; and actually, you do it, and you enjoy it.</li></ul><p>Again, I&#8217;m really being unfair here. I am concentrating maybe too much into this &#8220;circle of virtue&#8221; called &#8220;product -> revenue -> freedom -> product -> rinse and repeat&#8221;. Things are never that easy; when you create a product, you have to choose a platform, find a market for it, invest in the creation part, advertise it, maintain it, support your customers, update your website, burn the CD-ROMs, write in your blog, test your product in the next version of the operating system (or browser), fix that weird Unicode bug, set up the eShop for selling your product, troubleshoot PayPal issues, add entries to the FAQ, participate in trade shows, send demos to magazines, fix the damn coffee machine, and many, many other things.</p><p>However hard it might seem, the underlying truths are fundamental: when you own the product, your commitment to quality and your enthusiasm will be unparalleled. And your code will be better just because of that.</p><h2>Conclusion</h2><p>I would say that consulting is a viable option to start up, as a short term strategy. There&#8217;s a lot of demand for custom software out there, and using your brain to generate cash that way can be used as a quick entry point to bootstrap your own company.</p><p><strong>However, in the medium and long term, the only viable strategy for sustained growth in the software industry is the creation and sale of software products.</strong> This is the only way to create true value in your own company, helping you create a healthy environment for your staff, fostering creativity, engaging customers with a real experience, and creating a win-win situation for you and your customers.</p><p>Of course, creating and managing a product requires skills and objectives which are not the same as your usual consulting project; this is the reason why most consulting companies fail when trying to jump on a product mindset. This will be the subject of a future article.</p> ]]></content:encoded> <wfw:commentRss>http://kosmaczewski.net/reflexions-on-the-software-business/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>Thoughts about Google&#8217;s &#8220;Go&#8221; Programming Language</title><link>http://kosmaczewski.net/thoughts-about-googles-go-programming-language/</link> <comments>http://kosmaczewski.net/thoughts-about-googles-go-programming-language/#comments</comments> <pubDate>Thu, 12 Nov 2009 10:40:51 +0000</pubDate> <dc:creator>Adrian</dc:creator> <category><![CDATA[Code]]></category> <category><![CDATA[Open Source]]></category> <category><![CDATA[Software]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=2081</guid> <description><![CDATA[Historically, we can distinguish really big software companies for providing, at least, four major kinds of products: an operating system (sometimes open sourced at a certain level), a web browser (with various degrees of standard compliance), a suite of office &#8230; <a
href="http://kosmaczewski.net/thoughts-about-googles-go-programming-language/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Historically, we can distinguish really big software companies for providing, at least, four major kinds of products: an operating system (sometimes open sourced at a certain level), a web browser (with various degrees of standard compliance), a suite of office applications (slightly compatible with everyone else&#8217;s), and a programming language with curly brackets (generally incompatible with everything else). In that particular order, we have:</p><ul><li><strong>Microsoft:</strong> Windows, Internet Explorer, Microsoft Office, and C#.</li><li><strong>Sun:</strong> Solaris, HotJava (sic), StarOffice, and Java.</li><li><strong>Apple:</strong> Mac OS X, Safari, iWork, and Objective-C.</li><li><strong>Google:</strong> Chrome OS, Chrome, Google Docs, and&#8230; Go.</li></ul><p>Precisely, <a
href="http://golang.org/">Go</a> was the last piece that Google had to create in order to fit into the framework above. And it did, with a bright team including Ken Thompson (of Unix and C fame) and Rob Pike (of Plan 9 and UTF-8 fame). With names like that, and with Google&#8217;s own funding and infrastructure, it is normal that the media went into a hype frenzy yesterday.</p><p><img
src="http://kosmaczewski.net/wp-content/uploads/2009/11/bumper480x270.png" alt="bumper480x270" title="bumper480x270" width="480" height="270" class="alignnone size-full wp-image-2093" /></p><p>I think, however, that Google&#8217;s engineers got tired of what the current and upcoming versions of their &#8220;official&#8221; programming languages (Java 7, C++0x and Python 3.0) had to offer, and simply came up with a programming language that fits better their needs and expectations. As <a
href="http://golang.org/doc/go_talk-20091030.pdf">one of the slides</a> of the <a
href="http://www.youtube.com/watch?v=rKnDgT73v8s">TechTalk</a> says, with current languages &#8220;You can be productive or safe, not both.&#8221;</p><p>Features like built-in support for concurrency or garbage collection hide the real true feature behind the language: faster build times with static typing support. This is important for Google from a software economy point of view: they want more productivity from their developers, or, in other words, more bang for their buck, all together with verifiable quality and speed of execution. Go seems to be designed to deliver in these areas. However, Rob Pike is careful to say that the language is experimental, so time will tell if their efforts were worth it.</p><p>In any case, it is worth noting that there was a <a
href="http://en.wikipedia.org/wiki/Go!_(programming_language)">previous programming language called Go!</a> (whose author even wrote a <a
href="http://www.lulu.com/content/paperback-book/lets-go/641689">book about it</a>), and after an <a
href="http://www.informationweek.com/news/software/web_services/showArticle.jhtml?articleID=221601351">InformationWeek article</a> revealed this, <a
href="http://code.google.com/p/go/issues/detail?id=9">a petition has started in the Go bug tracking</a>, asking Google to change the name of the language, all in the name of Google&#8217;s own &#8220;Don&#8217;t be evil&#8221; motto.</p> ]]></content:encoded> <wfw:commentRss>http://kosmaczewski.net/thoughts-about-googles-go-programming-language/feed/</wfw:commentRss> <slash:comments>7</slash:comments> </item> <item><title>On the Importance of Yerba Mate in the Software Development Process</title><link>http://kosmaczewski.net/on-the-importance-of-yerba-mate-in-the-software-development-process/</link> <comments>http://kosmaczewski.net/on-the-importance-of-yerba-mate-in-the-software-development-process/#comments</comments> <pubDate>Mon, 26 Oct 2009 06:20:56 +0000</pubDate> <dc:creator>Adrian</dc:creator> <category><![CDATA[Argentina]]></category> <category><![CDATA[Humour]]></category> <category><![CDATA[Papers]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[America Latina]]></category> <category><![CDATA[creation]]></category> <category><![CDATA[process]]></category> <category><![CDATA[productivity]]></category> <category><![CDATA[programming]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=1986</guid> <description><![CDATA[This paper will highlight the results of an extensive research conducted since the mid 90&#8242;s, on the effects of the consumption of beverages based in the plant known as Ilex paraguariensis, in the framework of software development process activities in &#8230; <a
href="http://kosmaczewski.net/on-the-importance-of-yerba-mate-in-the-software-development-process/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p><img
src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/5d/Mate_02.jpg/180px-Mate_02.jpg" alt="mate" width="180" height="232" align="right" />This paper will highlight the results of an extensive research conducted since the mid 90&#8242;s, on the effects of the consumption of beverages based in the plant known as <em>Ilex paraguariensis</em>, in the framework of software development process activities in South America and some small parts of Europe.</p><p>This paper will provide an introduction to the herb commonly referred to as &#8220;Yerba Mate&#8221;, and will later delve into the advantages and disadvantages of such practice, in the context of the creation of software products.</p><h3>Introduction</h3><p>Yerba Mate <a
href="http://en.wikipedia.org/wiki/Yerba_maté">is defined by Wikipedia</a> as follows:</p><blockquote> Yerba mate or yerba-mate (Br.) (Spanish: yerba mate, Portuguese: erva-mate), Ilex paraguariensis, is a species of holly (family Aquifoliaceae) native to subtropical South America in northeastern Argentina, eastern Paraguay and southern Brazil. It was first scientifically classified by Swiss botanist Moses Bertoni, who settled in Paraguay in 1895.</blockquote><p><span
id="more-1986"></span></p><p>The Yerba Mate (usually and wrongly spelled as &#8220;Yerba Maté&#8221; in English-speaking texts) is used in the preparation of a caffeinated beverage <a
href="http://en.wikipedia.org/wiki/Mate_(beverage)">described by Wikipedia</a> as follows:</p><blockquote> Mate (Spanish pronunciation: [ˈmate]), also known as chimarrão (Portuguese: [ʃimaˈxɐ̃ũ]) or cimarrón, is a traditional South American infused drink. It is prepared from steeping dried leaves of yerba mate (llex paraguariensis, known in Portuguese as erva mate) in hot water. It is the national drink in Argentina, Paraguay, and Uruguay, and drinking it is a common social practice in parts of Brazil, Chile, eastern Bolivia, Lebanon and Syria. In Brazil, it is considered to be a tradition typical of the “Gaúchos”, name given to those born in Rio Grande do Sul. The drink contains caffeine.
(&#8230;)
The multicultural Yerba Mate Association of the Americas states that it is always improper to accent the second syllable, since doing so confuses the word with the unrelated Spanish word meaning &#8220;I killed.&#8221;</blockquote><p>One of the phrases in the quoted paragraphs from Wikipedia brings to mind the importance of such a drink in the creation of software products (no, not the phrase about killing, the previous one). Caffeine is known for its capabilities in waking up inert areas of the brain, particularly during  brain-damaging activities.</p><p
align="center"><a
href="http://dilbert.com/strips/comic/2009-10-12/"><img
src="http://kosmaczewski.net/wp-content/uploads/2009/10/70675.strip.gif" alt="70675.strip" title="70675.strip" width="500" height="155" class="alignnone size-full wp-image-1988" /></a></p><p>We consider unfortunate to qualify software development as a brain-damaging activity (although some research arrives to this particular conclusion), however, it is certainly a brain-intensive one, and as such, Yerba Mate has proven, in our tests, to be a particularly interesting option to coffee.</p><h3>Preparation</h3><p>To prepare &#8220;Mate&#8221; (the beverage), three basic elements are required:</p><ol><li>A recipient, usually also referred to as &#8220;mate&#8221; (to add to the confusion), but also called &#8220;guampa&#8221;, &#8220;cuia&#8221;, &#8220;calabaza&#8221;, and other names without any translation to English whatsoever. Among these names appears also &#8220;porongo&#8221;, as it is known in Uruguay; this word is usually avoided in Argentina, for the exact same reason the name <a
href="http://en.wikipedia.org/wiki/Mitsubishi_Pajero">&#8220;Mitsubishi Pajero&#8221;</a> has been a commercial failure there. This element can be made of wood, metal or even be the hollow shell of a dried <a
href="http://en.wikipedia.org/wiki/Calabash">calabash</a>.</li><li><img
src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/5f/Bombilla.jpg/200px-Bombilla.jpg" width="200" height="98" alt="The straw" align="right">A metallic straw, usually also referred to as &#8220;bombilla&#8221; or less commonly, &#8220;bomba&#8221;. This element can be made out of metal or wood, and is used to drink the infusion, avoiding to swallow the leaves of Yerba Mate at the same time. The best ones have their top part covered in gold, which protects the lips from the intense heat generated by the water in the metal, and also provides a sense of luxury into an otherwise rather humble activity.</li><li>Hot water, never boiled, at around 70 to 80 degrees Celsius (160 &#8211; 180 degrees Fahrenheit). It is very, very, <strong>VERY</strong> important to serve the water at the exact temperature, without boiling the water inadvertently. Usually, the best way to keep the water hot is with a <a
href="http://en.wikipedia.org/wiki/Vacuum_flask">thermos or vacuum flask</a>, of which the latest industry benchmarks highlight the Uruguayan brand <a
href="http://www.lumilagro.com/">&#8220;Lumilagro&#8221;</a> as the most reliable, competitive and durable in the market. European customers are best served by the <a
href="http://www.flickr.com/photos/gahjr2000/5796110/">standard thermos provided by Ikea</a>.</ol><p>Once all the elements are ready, the preparation process is fairly simple:</p><ol><li>Add the Yerba Mate leaves in the mate (the recipient);</li><li>Put the right hand on top of the mate (recipient) covering the entrance, and using your left hand, turn the recipient upside down and shake it a little; then return the recipient to its normal position and dust the mate powder from your hand (it is strongly recommended <strong>not</strong> sniffing it);</li><li>Insert the straw in the recipient, creating a small hole in the Yerba at the same time;</li><li>Pour in hot water, very slowly, in the hole caved in the previous step; on the first serve it is best to avoid filling the mate completely, to leave time to the yerba to get moist and release the flavor slowly;</li><li>Drink the mate, by sipping at the straw, taking care not to burn your mouth or throat;</li><li>Pass the mate around, which helps create and spread a sense of teamwork, to bring an ambience of relaxation and self-contemplation, and also to spread many known viruses.</li></ol><h3>Advantages</h3><p>In the context of software engineering, such a practice has the following advantages:</p><ul><li><strong>Health benefits:</strong> The ingestion of mate (the beverage) contributes positively to the recommended daily intake of water (at least around 2 or 3 liters a day), and thus to the maintenance of a convenient hydration level in the brain, which is recognized by several studies as a major contribution to its productivity. Some recent papers even indicate that the habit of Mate drinking can reduce the risks of cancer, but in any case, Yerba Mate is also a major source of <a
href="http://en.wikipedia.org/wiki/Mate_(beverage)#Health_Effects">many important elements</a> for a healthy daily diet:<blockquote>It contains vitamins A, C, E, B1, B2, Niacin (B3), B5, B&#8230; and complex minerals like Calcium, Manganese, Iron, Selenium, Potassium, Magnesium, Phosphorus, and Zinc. It also contains Carotene, Fatty Acids, Chlorophyll, Flavonols, Polyphenols, Inositol, Trace Minerals, Antioxidants, Tannins, Pantothenic Acid, and 15 Amino Acids.</blockquote></li><li><strong>Prolonged working hours:</strong> Instead of having to leave the desk to get yet another cup of coffee, the knowledge worker can sit in front of his computer for hours, particularly when using thermos with a capacity of at least 1 or 1.5 liters (around half a gallon). Mate (the beverage) is also known for reducing appetite, which helps reduce costs in the case of companies providing food to their employees.</li><li><strong>Teamwork benefits:</strong> Given the inherent social origins of the habit of drinking mate, in the case of teams, or in the case of agile practices such as <a
href="http://en.wikipedia.org/wiki/Pair_programming">pair programming</a>, sharing the mate (the recipient) helps team managers to create a sense of unity and common goal.</li><li><strong>Increased sensitivity:</strong> As with all caffeinated drinks, the intake of mate can lead to an improvement in the <a
href="http://www.youtube.com/watch?v=Vi5JyCYKZws">overall awareness</a> of the mate drinker.</li></ul><h3>Disadvantages</h3><p>The following disadvantages of Mate (the herb, the beverage and the recipient) are worth considering:</p><ul><li><strong>Cold water effects:</strong> Although common practice in Paraguay (where the infusion of Yerba Mate with cold water is known as <a
href="http://en.wikipedia.org/wiki/Tereré">Tereré</a>), this variant is known for causing violent reactions in the digestive system of the person drinking it, and it is strongly recommended to never drink it more than 20 meters away from the nearest toilet.</li><li><strong>Bitterness:</strong> The strong taste of Yerba Mate is also a factor of considerable debate. Most mate drinkers usually start drinking it with sugar (some even with saccharine or other sweeteners), while most experienced drinkers will dismiss this practice and downplay those doing it as amateurish or otherwise ignorant. It is strongly recommended to have everyone agree on a mate variant beforehand to avoid shallow discussions on the relative merits of different approaches to mate drinking.</li><li><strong>Mate lavado:</strong> When the same Yerba has been poured several times (usually above 10 or 12 servings, depending on the quality of the Yerba), it loses part of its taste and must be replaced with new Yerba. Depending on how many people share the same mate (the recipient), this can be a significant problem, leading to reduced productivity and major anxiety and dismay.</li><li><strong>&#8220;Matetiquette&#8221;:</strong> Mate (the beverage) is linked with a complete language, tied up to the history of the southern part of South America. As such, please be aware of the fact that serving a &#8220;mate lavado&#8221; (see previous item for an explanation of the concept) is considered rude practice, and is strongly discouraged. Serving mate with cold water, as explained above, can also be seen negatively, particularly if the person preparing the mate is not from Paraguay. Finally, talking in front of your recently-filled mate instead of drinking it, is also frowned upon, as you might be greeted with a &#8220;it&#8217;s not a microphone&#8221; protest if you do it.</li></ul><h3>Conclusion</h3><p>The importance of the Yerba Mate in the process of creation of software has been greatly dismissed by major research efforts, and we think that more research and mate drinking is needed. In our tests, Yerba Mate has been proven to foster creativity, teamwork, overall happiness, and trips to the toilets.</p> ]]></content:encoded> <wfw:commentRss>http://kosmaczewski.net/on-the-importance-of-yerba-mate-in-the-software-development-process/feed/</wfw:commentRss> <slash:comments>11</slash:comments> </item> <item><title>Roundup of Swiss Companies Writing Mac Apps</title><link>http://akosma.com/2009/10/23/roundup-of-swiss-companies-writing-mac-apps/</link> <comments>http://akosma.com/2009/10/23/roundup-of-swiss-companies-writing-mac-apps/#comments</comments> <pubDate>Fri, 23 Oct 2009 09:57:17 +0000</pubDate> <dc:creator>akosma software</dc:creator> <category><![CDATA[Apple]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Switzerland]]></category> <category><![CDATA[Technology]]></category> <category><![CDATA[business]]></category> <category><![CDATA[Cocoa]]></category> <category><![CDATA[Mac OS X]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=1978</guid> <description><![CDATA[A lot has been said and done about the iPhone, but there&#8217;s much more to Cocoa and Objective-C than our beloved pocket device. During a chat session with Stefan Fürst from Media Atelier we put together a quick list of &#8230; <a
href="http://akosma.com/2009/10/23/roundup-of-swiss-companies-writing-mac-apps/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p><a
href="http://www.apple.com/universal/"><img
src="http://kosmaczewski.net/wp-content/uploads/2007/01/logo_universal.png" align="right" hspace="5" vspace="5" /></a> A lot has been said and done about the iPhone, but there&#8217;s much more to Cocoa and Objective-C than our beloved pocket device.</p><p>During a chat session with Stefan Fürst from <a
href="http://mediaatelier.com/">Media Atelier</a> we put together a quick list of significant Mac applications created in Switzerland (and southern Germany), and indeed the list (in no particular order) is nothing short of impressive; check it out:</p><ul><li><a
href="http://zattoo.com/">Zattoo</a>, a really great TV player (cross-platform, actually, but the Mac version works really well);</li><li><a
href="http://www.zennaware.com/">Cornerstone</a>, one of the best Subversion clients for the Mac OS X operating system (the other being <a
href="http://versionsapp.com/">Versions</a>);</li><li><a
href="http://www.grandtotal.biz/TimeLog4/">TimeLog</a> and <a
href="http://www.grandtotal.biz/GrandTotal/">GrandTotal</a>, the two applications used by independent contractors (like me) to keep track of the time spent in projects, and then to generate invoices out of that data &#8211; and which I personally prefer and strongly recommend over <a
href="http://www.billingsapp.com/">Billings</a>;</li><li><a
href="http://www.sevenlakessoftware.com/">Distribute</a> by Seven Lakes Software, dubbed the best ERP software available in the Mac, with an impressive feature list and lots of positive reviews;</li><li><a
href="http://www.snowtape.com/">Snowtape</a>, an application I&#8217;ve become addicted to lately, which allows you not only to listen to internet radio stations&#8230; but also to record them as MP3 or AAC files, which are automatically imported into iTunes!</li><li><a
href="http://www.getwaveboard.com/">Waveboard</a>, a Google Wave client for Mac (and iPhone soon, too!);</li><li><a
href="http://mailplaneapp.com/">Mailplane</a>, a native Gmail clients with awesome capabilities;</li><li><a
href="http://zykloid.com/posterino">Posterino</a>, <a
href="http://zykloid.com/proxymind">Proxymind</a> and <a
href="http://zykloid.com/snippetmind">Snippet Mind</a> from <a
href="http://zykloid.com/">Zykloid</a>;</li><li><a
href="http://infoatelier.com/site/">Background Music</a> by infoAtelier, currently in a promising beta test phase;</li><li><a
href="http://www.grapefruit.ch/iBackup/">iBackup</a>;</li><li><a
href="http://www.arizona-software.ch/graphclick/">GraphClick</a>, <a
href="http://www.arizona-software.ch/ilocalize/">iLocalize</a>, <a
href="http://www.arizona-software.ch/provoc/">ProVoc</a>, <a
href="http://www.arizona-software.ch/xs/fr/?ref=en">XS</a> and <a
href="http://www.arizona-software.ch/audioxplorer/">AudioXplorer</a> by <a
href="http://www.arizona-software.ch/">Arizona Software</a> (even if they aren&#8217;t in Switzerland anymore I think, they are definitely worth including in this list);</li><li><a
href="http://www.foxtrot.ch/powermail/">PowerMail</a> and <a
href="http://www.foxtrot.ch/foxtrot/">FoxTrot</a> by <a
href="http://www.foxtrot.ch/">CTM Development</a>;</li><li><a
href="http://www.maconnect.ch/">LiquidCD</a> by Maconnect</li><li><a
href="http://www.coriolis.ch/en/products.html">Several Mac products</a> by Stephan Burlot&#8217;s <a
href="http://www.coriolis.ch/">Coriolis Technologies</a>;</li><li>Don&#8217;t forget that most Cocoa apps are unit-tested with <a
href="http://www.sente.ch/">Sen:te</a>&#8216;s original <a
href="http://www.sente.ch/s/?p=535&#038;lang=en">OCUnit unit testing framework</a> bundled with Xcode since 2005!</li><li>And last but not least, the <a
href="http://meninsilicium.com/fr/achievements.html">diverse suite of Logitech drivers and control panels</a> written by <a
href="http://meninsilicium.com/">Men in Silicium</a> in Geneva!</li></ul><p>It really looks like the Swiss enjoy writing Mac apps (I certainly do and will publish mine soon!). Have I forgotten anyone? Please don&#8217;t be upset, and feel free to leave your links in the comments below. I&#8217;d love to know who else is creating killer apps for the Mac in a radius of 300 km around Zürich!</p><p><strong>Disclaimer:</strong> I&#8217;m not affiliated with any of these companies (I&#8217;m just a friend of Stefan). And if you&#8217;re more into &#8220;enterprisey&#8221; stuff, here&#8217;s the <a
href="http://swissmadesoftware.org/">&#8220;Swiss-Made Software&#8221; label site</a> that you migth find more interesting ;)</p><p><strong>Update, 2009-10-23:</strong> Some more applications added after the publication of this post:</p><ul><li><a
href="http://www.luscious-sms.net/">Luscious SMS</a>, the SMS client for the Mac;</li><li>Special mention for <a
href="http://cyberduck.ch/">Cyberduck</a>, an open source FTP, SFTP, WebDAV, Cloud Files &#038; Amazon S3 Browser for Mac OS X, or &#8220;the poor man&#8217;s version of <a
href="http://www.panic.com/transmit/">Transmit</a>&#8221; :)</li></ul><p><strong>Update, 2009-10-24:</strong> <a
href="http://www.sophiestication.com/">Sophie Teuschler</a> tells me not to forget the multiple Apple Design Award winners <a
href="http://www.codingmonkeys.de/subethaedit/index.html">SubEthaEdit</a> and <a
href="http://boinx.com/boinxtv/overview/">BoinxTV</a> by <a
href="http://www.codingmonkeys.de/">The Coding Monkeys</a>, not far from Switzerland, in Bavaria&#8230;!</p><p><strong>Update, 2009-10-25:</strong> I&#8217;ve just received an e-mail from Cyril Pavillard about his company <a
href="http://www.mnemis.com/">Mnemis</a> and their product <a
href="http://getuniboard.com/">Uniboard</a> which looks absolutely awesome by any standards. Be sure to check out this cool Swiss project!</p><p><strong>Update, 2009-11-12:</strong> <del
datetime="2009-11-12T11:47:03+00:00">Just found out about <a
href="http://www.noidentity.ch/">noidentity</a> and their MoneyBook iPhone application.</del> It seems that this application is just a copy from <a
href="http://designbyaknife.com/pennies/">another one called &#8220;pennies&#8221;</a>. Shame on you noidentity.</p> ]]></content:encoded> <wfw:commentRss>http://akosma.com/2009/10/23/roundup-of-swiss-companies-writing-mac-apps/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Muchas Notitas, Muchas!</title><link>http://akosma.com/2009/08/11/muchas-notitas-muchas/</link> <comments>http://akosma.com/2009/08/11/muchas-notitas-muchas/#comments</comments> <pubDate>Tue, 11 Aug 2009 13:33:49 +0000</pubDate> <dc:creator>akosma software</dc:creator> <category><![CDATA[iPhone]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[akosma software]]></category> <category><![CDATA[App Store]]></category> <category><![CDATA[Notitas]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=1840</guid> <description><![CDATA[Notitas is available at an App Store near you! Notitas means &#8220;small notes&#8221; in Spanish, and it&#8217;s the fourth iPhone application under the akosma brand, and the first based on an original idea of my dear wife! As the name &#8230; <a
href="http://akosma.com/2009/08/11/muchas-notitas-muchas/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p><a
href="http://muchasnotitas.com/">Notitas</a> is available at an <a
href="http://itunes.com/apps/notitas">App Store near you</a>! Notitas means &#8220;small notes&#8221; in Spanish, and it&#8217;s the fourth iPhone application under the <a
href="http://akosma.com/">akosma</a> brand, and the first based on an original idea of <a
href="http://twitter.com/claukosma">my dear wife</a>!</p><p
align="center"><a
href="http://muchasnotitas.com/"><img
src="http://kosmaczewski.net/wp-content/uploads/2009/08/smiley.png" alt="smiley" title="smiley" width="261" height="261" class="alignnone size-full wp-image-1841" border="0" /></a></p><p>As the name implies, it&#8217;s a simple and easy way to create, keep and find notes in your iPhone, with some bonus: geographical awareness, so that each note remembers where it was created; the ability to publish notes in Twitter (for the moment, only if you have Twitterriffic installed in your iPhone) and send them via e-mail, too. I&#8217;m particularly happy of the Twitter integration (which prompted a <a
href="/2009/08/04/discovering-a-hidden-iphone-url-scheme/">whole article in this blog</a>) so that I can use Notitas a lot as a &#8220;draft Twitter&#8221; client.</p><p>I&#8217;m already preparing version 1.1 with TwitterFon + Tweetie support, as well as a German localization thanks to <a
href="http://www.sophiestication.com/">Sophie from Sophiestication</a>! Stay tuned for more goodies :)</p><p>PS: oh, and while you&#8217;re using Notitas, try shaking the board a bit and you&#8217;ll see what happens ;)</p> ]]></content:encoded> <wfw:commentRss>http://akosma.com/2009/08/11/muchas-notitas-muchas/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>New iPhone Apps: RooiFonts and DeviceDNA</title><link>http://akosma.com/2009/08/07/new-iphone-apps-rooifonts-and-devicedna/</link> <comments>http://akosma.com/2009/08/07/new-iphone-apps-rooifonts-and-devicedna/#comments</comments> <pubDate>Fri, 07 Aug 2009 07:21:21 +0000</pubDate> <dc:creator>akosma software</dc:creator> <category><![CDATA[iPhone]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[akosma software]]></category> <category><![CDATA[App Store]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=1815</guid> <description><![CDATA[Let me introduce to you RooiFonts and DeviceDNA, the latest iPhone apps by akosma software on the App Store! RooiFonts is an evolution of my previous Font Browser application (still open source, still in Github). RooiFonts builds upon that application &#8230; <a
href="http://akosma.com/2009/08/07/new-iphone-apps-rooifonts-and-devicedna/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Let me introduce to you <strong>RooiFonts</strong> and <strong>DeviceDNA</strong>, the latest iPhone apps by <a
href="http://akosma.com/">akosma software</a> on the App Store!</p><p><a
href="http://rooifonts.com/">RooiFonts</a> is an evolution of my previous <a
href="/2008/11/12/iphone-font-browser/">Font Browser application</a> (still open source, <a
href="http://github.com/akosma/fontbrowser/">still in Github</a>). RooiFonts builds upon that application bringing some more new features, like the ability to send a screenshot of a sample of text in the selected font via e-mail, or being able to compare two fonts side by side. <a
href="http://itunes.com/apps/rooifonts">RooiFonts is available in the App Store</a> for USD 3.99 (CHF 4.40, EUR 2.99).</p><p
align="center"><img
src="http://kosmaczewski.net/wp-content/uploads/2009/08/rooifonts.png" alt="rooifonts" title="rooifonts" width="250" height="464" class="alignnone size-full wp-image-1817" /><img
src="http://kosmaczewski.net/wp-content/uploads/2009/08/devicedna.png" alt="devicedna" title="devicedna" width="250" height="464" class="alignnone size-full wp-image-1816" /></p><p>On the other hand, <a
href="http://itunes.com/apps/devicedna">DeviceDNA</a> is a free application for all of my clients, to send me their iPhone device information (including their UDID) via e-mail in a convenient way. No more explaining &#8220;open iTunes, click here, paste there&#8230;&#8221;, just install this, and you&#8217;re done.</p><p>As usual, both are available in English, French and Spanish.</p> ]]></content:encoded> <wfw:commentRss>http://akosma.com/2009/08/07/new-iphone-apps-rooifonts-and-devicedna/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>Discovering a Hidden iPhone URL Scheme</title><link>http://kosmaczewski.net/discovering-a-hidden-iphone-url-scheme/</link> <comments>http://kosmaczewski.net/discovering-a-hidden-iphone-url-scheme/#comments</comments> <pubDate>Tue, 04 Aug 2009 05:55:09 +0000</pubDate> <dc:creator>Adrian</dc:creator> <category><![CDATA[Code]]></category> <category><![CDATA[iPhone]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[project]]></category> <category><![CDATA[Twitter]]></category> <category><![CDATA[Xcode]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=1779</guid> <description><![CDATA[As an iPhone developer, one of the simplest and easiest mechanisms you have to interact with other applications is through the use of iPhone URL Schemes. These are so important that I&#8217;ve created a wiki page where I keep track &#8230; <a
href="http://kosmaczewski.net/discovering-a-hidden-iphone-url-scheme/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>As an iPhone developer, one of the simplest and easiest mechanisms you have to interact with other applications is through the use of iPhone URL Schemes. These are so important that <a
href="http://wiki.akosma.com/IPhone_URL_Schemes">I&#8217;ve created a wiki page</a> where I keep track of those I come across, including code samples that help me exchange data with them.</p><p
align="center"><img
src="http://kosmaczewski.net/wp-content/uploads/2009/08/xcode.png" alt="xcode" title="xcode" width="256" height="256" class="alignnone size-full wp-image-1801" /></p><p>However, not all editors document the URL schemes they support in their apps, and this blocks reuse and collaboration. I recently came into such a problem, trying to use <a
href="http://twitterfon.net/">TwitterFon</a> from my own apps, to post messages to Twitter. The TwitterFon site <a
href="http://twitterfon.net/how-to-use.html">only specifies</a> the following iPhone URL scheme:</p><p><code>twitterfon:///post?this%20is%20a%20test</code></p><p>The problem is, this URL scheme does not perform an URL-decoding on the message parameter, which means that a phrase like &#8220;this is a test&#8221; will appear in TwitterFon URL-encoded, that is, as &#8220;this%20is%20a%20test&#8221;. Clearly not acceptable.</p><p>However, thanks to <a
href="http://twitter.com/ashleymills/status/3104409559">Ashley Mills</a>, I learnt that the <a
href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=300669003&#038;mt=8">USA Today</a> iPhone app is able to use TwitterFon to share articles via Twitter, and does this properly, without URL-encoded characters. How do they do that? Obviously, they are using an URL scheme exported by TwitterFon, but not documented anywhere (*). I finally discovered that the URL scheme sought is the following (&#8220;message&#8221; instead of &#8220;post&#8221;!):</p><p><code>twitterfon:///message?some%20text%20here</code></p><p>This is how I found out: I impersonated TwitterFon in my own iPhone with an ad-hoc app created in Xcode, that shows me the URL used by USA Today to launch TwitterFon. <span
id="more-1779"></span> These are the steps required:</p><ol><li>Open iTunes and look for the application whose URL schemes you&#8217;re interested in (in my case, TwitterFon Pro); right click on it and select &#8220;Show in Finder&#8221;;</li><li>Duplicate the .ipa file in the Finder and change its extension to .zip &#8211; yes, .ipa applications are simply compressed .zip files;</li><li>Uncompress the .zip file and open the folder; inside, navigate to the &#8220;Payload&#8221; folder, and right-click on the .app file inside; select &#8220;Show Package Contents&#8221;;</li><li>Browse inside the package and open the Info.plist file; inside, you&#8217;ll find two keys that are interesting for us: <strong>CFBundleURLTypes</strong> (&#8220;URL types&#8221;) and <strong>CFBundleIdentifier</strong> (&#8220;Bundle identifier&#8221;). Select them and copy them to your clipboard;</li><li>Create a new Xcode application, using the &#8220;iPhone OS / View-based application&#8221; template;</li><li>Open the Info.plist file corresponding to the default target and remove the existing CFBundleIdentifier (&#8220;Bundle identifier&#8221;) key; paste the two items you&#8217;ve copied in the previous step &#8211; this means we&#8217;re creating an application that will &#8220;impersonate&#8221; itself as the &#8220;real&#8221; one;</li><li>Modify the new Xcode project&#8217;s app delegate adding the following method:
[source:c]
- (BOOL)application:(UIApplication *)application
handleOpenURL:(NSURL *)url
{
viewController.viewer.text = [url absoluteString];
return YES;
}
[/source]</li><li>Add a UITextView to your viewController (you can do this easily in Interface Builder, editing the .xib file), and expose it through a public property (called &#8220;viewer&#8221; above) so that the app delegate can access it;</li><li>Prepare your Xcode project for ad-hoc deployment: add a &#8220;distribution&#8221; configuration, an entitlements.plist file, etc;</li><li>Plug your iPhone, select &#8220;Distribution / iPhone OS Device&#8221;, and &#8220;Run&#8221; your application; the application will build and Xcode will install it into your device. <strong>ATTENTION: this application will overwrite the original one!</strong> This is because it has the same bundle identifier. Be sure to backup your data before doing this, as it will be lost completely;</li><li>Now run the application calling the one you impersonate (in this case, the USA Today one) and force it to call the &#8220;impersonated&#8221; application (in this case, by &#8220;sharing&#8221; an article via Twitter). This will trigger the launch of the impersonated application, the call to application:handleOpenURL:, which itself will display the calling URL on the iPhone screen.</li></ol><p>You can download a <a
href='http://kosmaczewski.net/wp-content/uploads/2009/08/Fake.zip'>zip file with the Xcode project</a> created above if you want. Be careful if you run it on your own device!</p><p>Voilà! Finally, delete your own impersonated app, go to the App Store, re-install the application you&#8217;ve impersonated (normally it&#8217;s a free download, even for non-free apps), and you are done. The same mechanism could be used to find out similar, hidden URL mechanisms in other apps.</p><p>(*) Actually this URL scheme is <a
href="http://twitterfon.net/changes.html">only shortly mentioned in the changelog</a> of the application&#8230;</p> ]]></content:encoded> <wfw:commentRss>http://kosmaczewski.net/discovering-a-hidden-iphone-url-scheme/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> </channel> </rss>
