<?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>Glimsoft</title>
	<atom:link href="http://www.glimsoft.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.glimsoft.com</link>
	<description>Blog</description>
	<lastBuildDate>Sat, 29 Sep 2012 20:18:37 +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>How to create a zip file in GAEJ servlet</title>
		<link>http://www.glimsoft.com/09/29/how-to-create-zip-file-in-gaej-servlet/</link>
		<comments>http://www.glimsoft.com/09/29/how-to-create-zip-file-in-gaej-servlet/#comments</comments>
		<pubDate>Sat, 29 Sep 2012 19:27:35 +0000</pubDate>
		<dc:creator>Lukas</dc:creator>
				<category><![CDATA[App Engine]]></category>
		<category><![CDATA[blobstore]]></category>
		<category><![CDATA[commons-io]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[servlet]]></category>
		<category><![CDATA[zip]]></category>

		<guid isPermaLink="false">http://www.glimsoft.com/?p=330</guid>
		<description><![CDATA[It’s been already almost seven months since my last post, and I have to admit that I am really ashamed of it. Another one from the infinite pool of people [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://imageshack.us/a/img832/5972/gaejwithzip.png" alt="GAEJ with zip icon" width="150" height="150" align=left style="float: left; margin-right: 10px; margin-top: 5px" />It’s been already almost seven months since my last post, and I have to admit that I am really ashamed of it. Another one from the infinite pool of people who don’t stand up to their promises, huh? But enough of this, you’ve most likely came here to learn something about creating zip files in Google App Engine / Java servlets, and that’s what this post is (from now on) all about. So, let&#8217;s get started, shall we?<br />
<span id="more-330"></span></p>
<p><strong>What will you learn here</strong><br />
I am going to explain what you need to access your web app’s static files and/or files stored in Blobstore in your servlet; how to pack these files using standard java.util.zip library into one zip file, and how to serve this file in HttpServletResponse of your servlet.</p>
<p><strong>Prerequisites</strong><br />
This tutorial provides example of servlet running on Google App Engine for Java, and is dependent on Apache commons IO library, so you need to be familiar with adding jar files to your project, and you should know the basics of how servlet works (though it&#8217;s not required). I am using Eclipse Juno IDE with the App Engine plugin, and I advise you to use it too (it can really save you a lot of troubles). The servlet also expects the following files to be present in the <em>war directory</em> of your App Engine project.<br />
<img src="http://imageshack.us/a/img513/5079/warcontentsineclipse.png" alt="Image Hosted by ImageShack.us"/><br/><br/></p>
<p><strong>What will you create</strong><br />
<img src="http://imageshack.us/a/img802/7469/myzipfilecontents.png" alt="Image Hosted by ImageShack.us"/><br />
[1] Structure of zip file created by our servlet<br />
<br/><br />
<strong>Here comes the servlet class itself</strong></p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><pre class="de1"><span class="kw2">package</span> yourpackagehere<span class="sy0">;</span>
&nbsp;
<span class="kw2">import</span> java.<span class="me1">io</span>.<span class="me1">ByteArrayOutputStream</span><span class="sy0">;</span>
<span class="kw2">import</span> java.<span class="me1">io</span>.<span class="me1">IOException</span><span class="sy0">;</span>
<span class="kw2">import</span> java.<span class="me1">io</span>.<span class="me1">InputStream</span><span class="sy0">;</span>
<span class="kw2">import</span> java.<span class="me1">util</span>.<span class="me1">zip</span>.<span class="sy0">*;</span>
&nbsp;
<span class="co1">// We are using this utility for converting InputStreams into byte arrays</span>
<span class="co1">// You can get the jar at http://commons.apache.org/io/</span>
<span class="kw2">import</span> org.<span class="me1">apache</span>.<span class="me1">commons</span>.<span class="me1">io</span>.<span class="me1">IOUtils</span><span class="sy0">;</span>
&nbsp;
<span class="kw2">import</span> javax.<span class="me1">servlet</span>.<span class="me1">ServletException</span><span class="sy0">;</span>
<span class="kw2">import</span> javax.<span class="me1">servlet</span>.<span class="me1">http</span>.<span class="me1">HttpServlet</span><span class="sy0">;</span>
<span class="kw2">import</span> javax.<span class="me1">servlet</span>.<span class="me1">http</span>.<span class="me1">HttpServletRequest</span><span class="sy0">;</span>
<span class="kw2">import</span> javax.<span class="me1">servlet</span>.<span class="me1">http</span>.<span class="me1">HttpServletResponse</span><span class="sy0">;</span>
&nbsp;
<span class="sy0">@</span>SuppressWarnings<span class="br0">&#40;</span><span class="st0">&quot;serial&quot;</span><span class="br0">&#41;</span>
<span class="kw2">public</span> <span class="kw2">class</span> MyZipServlet <span class="kw2">extends</span> HttpServlet <span class="br0">&#123;</span>
&nbsp;
   <span class="kw2">public</span> <span class="kw1">void</span> doGet<span class="br0">&#40;</span>HttpServletRequest req<span class="sy0">,</span> HttpServletResponse res<span class="br0">&#41;</span> throws ServletException<span class="sy0">,</span> IOException <span class="br0">&#123;</span>
&nbsp;
      <span class="co1">// We will use this stream as output stream of our ZipOutputStream</span>
      <span class="co1">// and later we'll get the data from it by calling toByteArray() method</span>
      ByteArrayOutputStream zipBaos <span class="sy0">=</span> <span class="kw2">new</span> ByteArrayOutputStream<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
      <span class="kw1">try</span> <span class="br0">&#123;</span>	
         <span class="co1">// Create the ZIP file output stream (we will write our zip entries (= files) into it)</span>
         ZipOutputStream zipOut <span class="sy0">=</span> <span class="kw2">new</span> ZipOutputStream<span class="br0">&#40;</span>zipBaos<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp;
         String pathOfFile1InWarDirectory <span class="sy0">=</span> <span class="st0">&quot;/images/markers/OrangeMarker.png&quot;</span><span class="sy0">;</span>
&nbsp;
         <span class="co1">// The name doesn't have to be the same as the name of the input file</span>
         String nameOfFile1InZipFile <span class="sy0">=</span> <span class="st0">&quot;MyOrangeMarker.png&quot;</span><span class="sy0">;</span>
&nbsp;
         <span class="co1">// You can access static files located in your war folder using the following statement</span>
         <span class="co1">// (Basic File IO is generally not allowed in App Engine, except of reading static files, </span>
         <span class="co1">// which is exactly what we are doing here.)</span>
         InputStream file1InputStream <span class="sy0">=</span> getServletContext<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getResourceAsStream</span><span class="br0">&#40;</span>pathOfFile1InWarDirectory<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
         <span class="co1">// We are using Apache commons-io jar for getting all bytes from an inputStream</span>
         <span class="co1">// (learn more about it at http://commons.apache.org/ )</span>
         byte<span class="br0">&#91;</span><span class="br0">&#93;</span> file1Contents <span class="sy0">=</span> IOUtils.<span class="me1">toByteArray</span><span class="br0">&#40;</span>file1InputStream<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
         ZipEntry zipEntry1 <span class="sy0">=</span> <span class="kw2">new</span> ZipEntry<span class="br0">&#40;</span>nameOfFile1InZipFile<span class="br0">&#41;</span><span class="sy0">;</span>     <span class="co1">// Create new zip entry																	 // the constructor parameter is filename of the entry</span>
         zipOut.<span class="me1">putNextEntry</span><span class="br0">&#40;</span>zipEntry1<span class="br0">&#41;</span><span class="sy0">;</span>            <span class="co1">// add the zip entry to the ZipOutputStream</span>
         zipOut.<span class="kw1">write</span><span class="br0">&#40;</span>file1Contents<span class="br0">&#41;</span><span class="sy0">;</span>			   <span class="co1">// write contents (byte array) to the ZipOutputStream</span>
         zipOut.<span class="me1">closeEntry</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>					   
&nbsp;
&nbsp;
         String pathOfFile2InWarDirectory <span class="sy0">=</span> <span class="st0">&quot;/images/markers/GreenMarker.png&quot;</span><span class="sy0">;</span>
&nbsp;
         <span class="co1">// You can specify folder in which you want the file to be added in the file's name</span>
         <span class="co1">// (in our case, the folder is named 'markers')</span>
         String nameOfFile2InZipFile <span class="sy0">=</span> <span class="st0">&quot;markers/MyGreenMarker.png&quot;</span><span class="sy0">;</span>
&nbsp;
         InputStream file2InputStream <span class="sy0">=</span> getServletContext<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getResourceAsStream</span><span class="br0">&#40;</span>pathOfFile2InWarDirectory<span class="br0">&#41;</span><span class="sy0">;</span>
         byte<span class="br0">&#91;</span><span class="br0">&#93;</span> file2Contents <span class="sy0">=</span> IOUtils.<span class="me1">toByteArray</span><span class="br0">&#40;</span>file2InputStream<span class="br0">&#41;</span><span class="sy0">;</span>
         zipOut.<span class="me1">putNextEntry</span><span class="br0">&#40;</span><span class="kw2">new</span> ZipEntry<span class="br0">&#40;</span>nameOfFile2InZipFile<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
         zipOut.<span class="kw1">write</span><span class="br0">&#40;</span>file2Contents<span class="br0">&#41;</span><span class="sy0">;</span>
         zipOut.<span class="me1">closeEntry</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp;
         <span class="co1">// Add another file to the 'markers' directory</span>
         InputStream file3InputStream <span class="sy0">=</span> getServletContext<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getResourceAsStream</span><span class="br0">&#40;</span><span class="st0">&quot;/images/markers/RedMarker.png&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
         byte<span class="br0">&#91;</span><span class="br0">&#93;</span> file3Contents <span class="sy0">=</span> IOUtils.<span class="me1">toByteArray</span><span class="br0">&#40;</span>file3InputStream<span class="br0">&#41;</span><span class="sy0">;</span>
         <span class="co1">//zipOut.putNextEntry(new ZipEntry(&quot;markers/MyRedMarker.png&quot;));</span>
         zipOut.<span class="kw1">write</span><span class="br0">&#40;</span>file3Contents<span class="br0">&#41;</span><span class="sy0">;</span>
         zipOut.<span class="me1">closeEntry</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
         zipOut.<span class="kw3">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
      <span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span>IOException e<span class="br0">&#41;</span> <span class="br0">&#123;</span>
         e.<span class="me1">printStackTrace</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
         <span class="co1">// Creation of the zip file failed; inform the browser about it</span>
         res.<span class="me1">sendError</span><span class="br0">&#40;</span><span class="nu0">500</span><span class="sy0">,</span> <span class="st0">&quot;Creation of the zip file failed with exception:<span class="es0">\n</span><span class="es0">\n</span>&quot;</span> <span class="sy0">+</span> e.<span class="me1">getLocalizedMessage</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
         <span class="kw1">return</span><span class="sy0">;</span>
      <span class="br0">&#125;</span>
&nbsp;
      <span class="co1">// Get the zip data from the ByteArrayOutputStream</span>
      byte<span class="br0">&#91;</span><span class="br0">&#93;</span> zipData <span class="sy0">=</span> zipBaos.<span class="me1">toByteArray</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp;
      <span class="co1">// Serve the data to response's stream</span>
      String filename <span class="sy0">=</span> <span class="st0">&quot;MyZipFile.zip&quot;</span><span class="sy0">;</span>
&nbsp;
      <span class="co1">// following header statement instructs the web browser </span>
      <span class="co1">// to treat the file as attachment (= to download the file)</span>
      res.<span class="me1">setHeader</span><span class="br0">&#40;</span><span class="st0">&quot;Content-Disposition&quot;</span><span class="sy0">,</span> <span class="st0">&quot;attachment; filename=&quot;</span> <span class="sy0">+</span> filename<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
      res.<span class="me1">setContentType</span><span class="br0">&#40;</span><span class="st0">&quot;application/x-download&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      res.<span class="me1">setContentLength</span><span class="br0">&#40;</span>zipData.<span class="me1">length</span><span class="br0">&#41;</span><span class="sy0">;</span>
      res.<span class="me1">getOutputStream</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="kw1">write</span><span class="br0">&#40;</span>zipData<span class="br0">&#41;</span><span class="sy0">;</span>	
   <span class="br0">&#125;</span>
&nbsp;
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>[2] MyZipServlet.java<br/></p>
<p>The source code is commented in almost pedantic manner, so everything should be clear, but if you don’t understand something, you are welcome to ask me in the comments section below.<br />
In order to have access to your servlet with a user-friendly url, you need to add the following declarations to your project’s web.xml descriptor</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><pre class="de1"><span class="sy0">&lt;</span>servlet<span class="sy0">&gt;</span>
   <span class="sy0">&lt;</span>servlet<span class="sy0">-</span>name<span class="sy0">&gt;</span>MyZipServlet<span class="sy0">&lt;/</span>servlet<span class="sy0">-</span>name<span class="sy0">&gt;</span>
   <span class="sy0">&lt;</span>servlet<span class="sy0">-</span>class<span class="sy0">&gt;</span>yourpackagehere.<span class="me1">MyZipServlet</span><span class="sy0">&lt;/</span>servlet<span class="sy0">-</span>class<span class="sy0">&gt;</span>
<span class="sy0">&lt;/</span>servlet<span class="sy0">&gt;</span>
<span class="sy0">&lt;</span>servlet<span class="sy0">-</span>mapping<span class="sy0">&gt;</span>
   <span class="sy0">&lt;</span>servlet<span class="sy0">-</span>name<span class="sy0">&gt;</span>MyZipServlet<span class="sy0">&lt;/</span>servlet<span class="sy0">-</span>name<span class="sy0">&gt;</span>
   <span class="sy0">&lt;</span>url<span class="sy0">-</span>pattern<span class="sy0">&gt;/</span>createZip<span class="sy0">&lt;/</span>url<span class="sy0">-</span>pattern<span class="sy0">&gt;</span>
<span class="sy0">&lt;/</span>servlet<span class="sy0">-</span>mapping<span class="sy0">&gt;</span></pre></div></div></div></div></div></div></div>


<p>Now, when you run your app on the local development server, you can access the servlet using <strong>http://localhost:8888/createZip</strong> . If you have it right, the MyZipFile.zip will be immediately downloaded. If not, you will be presented with error message similar to this one:<br />
<img src="http://imageshack.us/a/img641/7659/serverexceptionerrorsma.png" alt="Image Hosted by ImageShack.us"/><br />
Also, if you are using Safari, don’t be surprised that the folder will be unzipped immediately upon download.<br/><br/></p>
<p><strong> Bonus &#8211; adding files from Blobstore to the zip file</strong><br />
I promised to show you how to add files from Blobstore to the zip file, and that’s exactly what’s this section about. The main point is fetching all the blob’s data using the fetchData method. You can view how it is done right here:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><pre class="de1"><span class="co1">// Add these to your import section</span>
<span class="kw2">import</span> com.<span class="me1">google</span>.<span class="me1">appengine</span>.<span class="me1">api</span>.<span class="me1">blobstore</span>.<span class="me1">BlobInfo</span><span class="sy0">;</span>
<span class="kw2">import</span> com.<span class="me1">google</span>.<span class="me1">appengine</span>.<span class="me1">api</span>.<span class="me1">blobstore</span>.<span class="me1">BlobInfoFactory</span><span class="sy0">;</span>
<span class="kw2">import</span> com.<span class="me1">google</span>.<span class="me1">appengine</span>.<span class="me1">api</span>.<span class="me1">blobstore</span>.<span class="me1">BlobKey</span><span class="sy0">;</span>
<span class="kw2">import</span> com.<span class="me1">google</span>.<span class="me1">appengine</span>.<span class="me1">api</span>.<span class="me1">blobstore</span>.<span class="me1">BlobstoreService</span><span class="sy0">;</span>
<span class="kw2">import</span> com.<span class="me1">google</span>.<span class="me1">appengine</span>.<span class="me1">api</span>.<span class="me1">blobstore</span>.<span class="me1">BlobstoreServiceFactory</span><span class="sy0">;</span>
&nbsp;
   <span class="co1">// ... And this into the try block before closing the zipOut ....</span>
&nbsp;
   BlobstoreService blobstoreService <span class="sy0">=</span> BlobstoreServiceFactory.<span class="me1">getBlobstoreService</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
   BlobInfoFactory bif <span class="sy0">=</span> <span class="kw2">new</span> BlobInfoFactory<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
   BlobKey blobKey <span class="sy0">=</span> <span class="kw2">new</span> BlobKey<span class="br0">&#40;</span><span class="st0">&quot;&lt;your-blob-key-string-here&gt;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
   BlobInfo blobInfo <span class="sy0">=</span> bif.<span class="me1">loadBlobInfo</span><span class="br0">&#40;</span>blobKey<span class="br0">&#41;</span><span class="sy0">;</span>
   long contentSize <span class="sy0">=</span> blobInfo.<span class="me1">getSize</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
   byte<span class="br0">&#91;</span><span class="br0">&#93;</span> blobContents <span class="sy0">=</span> blobstoreService.<span class="me1">fetchData</span><span class="br0">&#40;</span>blobKey<span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> contentSize<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
   <span class="co1">// add the blobContents the same way we added the previous files</span>
   zipOut.<span class="me1">putNextEntry</span><span class="br0">&#40;</span><span class="kw2">new</span> ZipEntry<span class="br0">&#40;</span><span class="st0">&quot;MyBlobFileName&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
   zipOut.<span class="kw1">write</span><span class="br0">&#40;</span>blobContents<span class="br0">&#41;</span><span class="sy0">;</span>
   zipOut.<span class="me1">closeEntry</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


]]></content:encoded>
			<wfw:commentRss>http://www.glimsoft.com/09/29/how-to-create-zip-file-in-gaej-servlet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The only true failure is wasted opportunity</title>
		<link>http://www.glimsoft.com/03/04/the-only-true-failure-is-wasted-opportunity/</link>
		<comments>http://www.glimsoft.com/03/04/the-only-true-failure-is-wasted-opportunity/#comments</comments>
		<pubDate>Sun, 04 Mar 2012 20:08:07 +0000</pubDate>
		<dc:creator>Lukas</dc:creator>
				<category><![CDATA[Life Ideas]]></category>

		<guid isPermaLink="false">http://www.glimsoft.com/?p=320</guid>
		<description><![CDATA[It’s been already a month I posted here something, and I really feel like it’s time to correct it. In this article, I am going to write from my naive [...]]]></description>
			<content:encoded><![CDATA[<p>    It’s been already a month I posted here something, and I really feel like it’s time to correct it. In this article, I am going to write from my naive and unskilled perspective what does the fear of failure mean for me, and how I am dealing with it. Make yourself comfortable, and perhaps get a cup of coffee, in case you would start to fall asleep. Oh, I really do hope you took this one as a joke, because I am not sure if it won’t be more of a reality..<br />
<span id="more-320"></span></p>
<p><em>[Disclaimer: This article was written almost 3 weeks ago. I wasn’t quite in the best mood, and the overall tone might sound angry now (though it wasn’t intended that way). I was having some ‘personal difficulties’ that kept me from publishing it right away, just to explain the reason for the delay. Also, the article wasn’t checked by any English professional, so I want to apologize for all the mistakes I couldn’t get right. I have quite some ideas for further articles, so just hope I’ll have enough determination to write them and publish them.]</em></p>
<p>It may not appear so from my dumb-looking look, but I spend a lot of time thinking. In fact, my brain somehow needs to be busy all the time, so when I am doing some mind-insensitive tasks, my mind is running through all kind of ideas and thoughts. Sometimes it seems like I am really getting into something, most of the times it’s thinking about something (or someone) I really like, and the other times the thoughts are some sort of ghosts that scare me off. Funny fact indeed is that one of the things that I came up with and consider it to be good whether I am in bad mood or in good mood is to: ‘<strong>think less, and do more</strong>’. So I am trying to, I am doing what I think I could be good at, and what could keep me from thinking about things that don’t go well in my life. And that’s why I have been working on my own product (app) for several last months.</p>
<p>It may not seem like a hard thing to do for some people who don’t know what does it take, but it really is. I have to think-through so many details, solve so many problems, learn so many new things; and most of the work can’t be seen in the results at all. And I am asking myself various questions from time to time: Is it worth it? Am I doing the right thing? What it is that I am trying to do? Am I chasing the right thing? What is it that makes me continue despite all these doubts? And I have to admit, I still don’t have answers for most of these questions. However, I am starting to feel that I am getting the last one answered. Despite all these doubts, I continue because of my passion for it. And I believe that <em>all the greatest things in life originate from passion</em>. The passion for people we care about, and the passion for things we do. For what is worth, the passion for beloved people is by far the most important one, but also the trickiest, and in my opinion goes well only in few cases. But in this post, I am going to focus on the “work” one. So as I said, I am sometimes being bothered by all these doubtful questions, and I have consistent answer for just one of them. And as it turns out, this one answer often isn’t enough. So what else is it that still bothers me? Well, I am afraid that my work won’t appeal to public once it’s published. And from this I could formulate a statement that pretty much defines what attitude I am trying to achieve: <strong>“Give all the best you can and let other people evaluate for what’s it worth”</strong>. If you think about it, you will find out that acting to it is a big risk. What if people won’t like it? What if they’ll consider it to be just a piece of useless [*beep*] not worth attention? That would turn out to be a big disappointment, the bigger the more energy you invested in it, right? So what people do about it? They are trying to reduce the possibility of failing as much as possible. Or at least reduce size of the possible disappointment. And that means either to invest less energy, or follow less the passion and more the logical sense. But I realized something: Both of these “solutions” will just make the chance of failure bigger. It’s better to think of it more in terms of what scares us about the failure. <em>Is it the possibility of loosing faith in ourselves? Or the possible embarrassment? Or the injustice of the invested work not returning back in the way we deserve?</em> Do you see it too? All these questions deal with human’s pride in some way. That’s nice, but you are probably asking something like this: “But what should I do with it? My pride makes me feel comfortable with my life, and I am not going to give up that.” And that’s very true. Pride indeed does provide us with good feeling, and that’s something worth preserving. But pride also has to be fed somehow from what we do. And that really depends on each of us. But whatever it is, most people will try to find something that will feed them pride while avoiding getting their hands dirty. And that’s where I see the weak spot. And I realized something: The best thing to do is to get rid of this “pride feeding” and “pride chasing” as much as possible. And I don’t have much problems with it.</p>
<p>Ever since I remember, I had been struggling with my low self-esteem. Sometimes it was really bad, but fortunately in last few years it’s better. By “better” I mean that I don’t have such paranoid imaginations of everybody else laughing me off in their minds the moment they see me, and similar things. Actually, it’s way better than just “better”, and for most of the time I am just fine with myself. I don’t want to dig into this deeper in this post, because it’s really irrelevant for the topic, but I am planning to write a whole post about it, and I think that if my fear of consequences will allow me to do it, it could be really interesting. But what I wanted to say: I don’t have to worry about my pride too much, because there is really not that much to loose.</p>
<p>And it’s not only pride. I can’t think of the right English words for all the human qualities that I would mention here at the moment, but pretty much every quality that makes us feel that if we lost it, it would break us; is counterproductive. So in terms of this, my low self esteem is really doing me a favor, because I don’t have to worry about “loosing myself” as much as other people have to.</p>
<p>However, I don’t want to make it sound like having a good faith in yourself isn’t a good thing. It’s just something you have to restrain in the tough beginnings if you are to follow your passion, because otherwise, the fear of loosing it will control you, and fear is certainly not something that will guide you well. There is another thing that is very important, and it’s regarding mistakes. I don’t know how does it go in other fields, but as far as my situations is concerned, the second most significant problem I had been struggling with is “What to do”. I am doing something I had never done before, I am making decisions based on my pure hope that “this could be the right one”. And one of the things that I have become really aware of in the last time is this: I am going to make a lot of mistakes. Lots of failures are going to happen, lots of missteps and generally lots of broken beliefs will occur. Now there is two ways that someone can choose to take: Either try to avoid all mistakes as much as possible, or prepare for them and learn from them every time they happen. I would sum it up like this: <strong>“Make all the decisions as best as you can. Even if a decision turns out to be the bad one, don’t be sad. Failures of all sorts are natural parts of the process, the ones that push us forward the most if we can take advice from them.”</strong>.</p>
<p>And finally the third thing, less relevant to this article, but rather to myself, is this: I need to really commit myself to all these ideas. A famous quote from the movie “The Matrix” is appearing in my mind: <em>“I&#8217;m trying to free your mind, Neo. But I can only show you the door. You&#8217;re the one that has to walk through it. ”</em>. My endless thoughts showed me something, but now it’s up to my determination whether I will be able to follow it.</p>
<p>At the end, I would like to say something which will wrap this post up: <strong>“Mistakes are natural part of the process. You’ve got to depend on your passion, because there will be moments when you’ll have nothing else left. Failure is bad only if it makes you stop. If it doesn’t, it’s the next step forward”</strong>.</p>
<p><em>Last words: Everything written in here is just my opinion, and even if some sentences may sound like I am stating it to be the truth, it’s just what I think of it. Don’t get the impression that I am trying to sound like the one who “figured it all out”, because I know I didn’t. You are welcome to comment on this in any way you like.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.glimsoft.com/03/04/the-only-true-failure-is-wasted-opportunity/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How to inspect subviews hierarchy of any UIView</title>
		<link>http://www.glimsoft.com/01/07/how-to-inspect-subviews-hierarchy-of-any-uiview/</link>
		<comments>http://www.glimsoft.com/01/07/how-to-inspect-subviews-hierarchy-of-any-uiview/#comments</comments>
		<pubDate>Sat, 07 Jan 2012 18:02:26 +0000</pubDate>
		<dc:creator>Lukas</dc:creator>
				<category><![CDATA[iOS development]]></category>
		<category><![CDATA[category]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[recursive]]></category>
		<category><![CDATA[subviews]]></category>

		<guid isPermaLink="false">http://www.glimsoft.com/?p=266</guid>
		<description><![CDATA[In this programming tutorial (or guide, if you want so), I am going to explain a simple way of printing out the entire subviews hierarchy of any UIView (subclass). We [...]]]></description>
			<content:encoded><![CDATA[<p>In this programming tutorial (or guide, if you want so), I am going to explain a simple way of printing out the entire subviews hierarchy of any UIView (subclass). We are going to accomplish this by creating a Category on UIView, and adding a single recursive method which will do its job of going down through the entire tree-structure of the view.<br />
<span id="more-266"></span><br />
Now for those of you who are wondering what a ‘category’ is: It’s a neat Obj-C way of adding methods to classes without any need to subclass them. For more details see the Apple’s <a href="http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/chapters/occategories.html" title="documentation">documentation</a>.</p>
<p>There are several cases when you are in need of finding out some underlaying stuff, for example what the MKMapView consist of; in order to modify certain labels, etc. I think there is really no need to talk about it more.</p>
<p>Here is what the <strong>header of our category</strong> (file <em>UIView+printSubviews.h</em>) looks like:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="objc"><pre class="de1">&nbsp;
<span class="co1">#import &lt;Foundation/Foundation.h&gt;</span>
&nbsp;
&nbsp;
<span class="kw1">@interface</span> UIView <span class="br0">&#40;</span>PrintSubviews<span class="br0">&#41;</span>
&nbsp;
<span class="sy0">-</span> <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>printSubviewsWithIndentation<span class="sy0">:</span><span class="br0">&#40;</span><span class="kw4">int</span><span class="br0">&#41;</span>indentation;
&nbsp;
<span class="kw1">@end</span></pre></div></div></div></div></div></div></div>


<p>The way of declaring a Category in Objective-C is just great and simple, isn’t it? What’s even better is that our method will work with any subclass of UIView (UIScrollView, MKMapView, UITableView, UIButton &#8211; to name a few). Now here comes the actual <strong>implementation file</strong> (<em>UIView+printSubviews.m</em>):</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="objc"><pre class="de1"><span class="co1">#import &quot;UIView+printSubviews.h&quot;</span>
&nbsp;
&nbsp;
<span class="kw1">@implementation</span> UIView <span class="br0">&#40;</span>PrintSubviews<span class="br0">&#41;</span>
&nbsp;
<span class="sy0">-</span> <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span>printSubviewsWithIndentation<span class="sy0">:</span><span class="br0">&#40;</span><span class="kw4">int</span><span class="br0">&#41;</span>indentation <span class="br0">&#123;</span>
&nbsp;
    <span class="co2">// Get all the subviews of the current view</span>
    <span class="kw5">NSArray</span> <span class="sy0">*</span>subviews <span class="sy0">=</span> <span class="br0">&#91;</span>self subviews<span class="br0">&#93;</span>;   
&nbsp;
    <span class="co2">// Loop through the whole subviews array. We are using the plain-old C-like for loop,</span>
    <span class="co2">// just for its simplicity and also to be provided with the iteration number</span>
    <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy0">=</span> <span class="nu0">0</span>; i &lt; <span class="br0">&#91;</span>subviews count<span class="br0">&#93;</span>; i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
        <span class="co2">// Get the subview at current index</span>
        UIView <span class="sy0">*</span>currentSubview <span class="sy0">=</span> <span class="br0">&#91;</span>subviews objectAtIndex<span class="sy0">:</span>i<span class="br0">&#93;</span>;   
&nbsp;
        <span class="co2">// We will create our description using this mutable string</span>
        <span class="kw5">NSMutableString</span> <span class="sy0">*</span>currentViewDescription <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#91;</span><span class="kw5">NSMutableString</span> alloc<span class="br0">&#93;</span> init<span class="br0">&#93;</span>;
&nbsp;
        <span class="co2">// Indent the actual description to provide visual clue of  how deeply is the current view nested</span>
        <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> j <span class="sy0">=</span> <span class="nu0">0</span>; j &lt;<span class="sy0">=</span> indentation; j<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
            <span class="br0">&#91;</span>currentViewDescription appendString<span class="sy0">:</span><span class="co3">@</span><span class="st0">&quot;   &quot;</span><span class="br0">&#93;</span>;
        <span class="br0">&#125;</span>
&nbsp;
        <span class="co2">// Construct the actual description string. Note that we are using just index of the current view</span>
        <span class="co2">// and name of its class, but it's up to you to print anything you are interested in</span>
        <span class="co2">// (for example the frame property using the NSStringFromCGRect(currentSubview.frame) )</span>
        <span class="br0">&#91;</span>currentViewDescription appendFormat<span class="sy0">:</span><span class="co3">@</span><span class="st0">&quot;[%d]: class: '%@'&quot;</span>, i, NSStringFromClass<span class="br0">&#40;</span><span class="br0">&#91;</span>currentSubview class<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#93;</span>;
&nbsp;
        <span class="co2">// Log the description string to the console</span>
        NSLog<span class="br0">&#40;</span><span class="co3">@</span><span class="st0">&quot;%@&quot;</span>, currentViewDescription<span class="br0">&#41;</span>;
&nbsp;
        <span class="co2">// Be good memory citizen</span>
        <span class="br0">&#91;</span>currentViewDescription release<span class="br0">&#93;</span>;
&nbsp;
        <span class="co2">// the 'recursiveness' nature of this method. Call it on the current subview, with greater indentation</span>
        <span class="br0">&#91;</span>currentSubview printSubviewsWithIndentation<span class="sy0">:</span>indentation<span class="sy0">+</span><span class="nu0">1</span><span class="br0">&#93;</span>;
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw1">@end</span></pre></div></div></div></div></div></div></div>


<p>I guess there is nothing more to explain, really. It’s that simple. Now I will show you an example of usage, along with the output that this method produces. I will call it on an instance of MKMapView with some annotations, one of them selected (therefore displaying the callout view). </p>
<p>Just a note for the less experienced of you: You need to import the header file of this category in each class where you are going to use it, like this:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="objc"><pre class="de1"><span class="co1">#import &quot;UIView+printSubviews.h&quot;</span></pre></div></div></div></div></div></div></div>


<p>then call the -printSubviewsWithIndentation: method on the view you wish to inspect:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="objc"><pre class="de1">NSLog<span class="br0">&#40;</span><span class="co3">@</span><span class="st0">&quot;*** Printing out all the subviews of MKMapView ***&quot;</span><span class="br0">&#41;</span>;
<span class="br0">&#91;</span>mapView printSubviewsWithIndentation<span class="sy0">:</span><span class="nu0">0</span><span class="br0">&#93;</span>;</pre></div></div></div></div></div></div></div>


<p>and that’s what the <strong>output</strong> looks like (in my case):</p>
<p><img src="http://img6.imageshack.us/img6/5136/mkmapviewsubviewshierar.png" alt="Subviews-tree of MKMapView" /></p>
<p>Now you can see all the behind-the-scenes views that the mapView consists of. And the numbers in square brackets in front of every line are exactly what they suggest to be &#8211; indexes of the subviews in its superview’s subview array.</p>
<p>You can for example retrieve the MKAnnotationContainerView using the following statement:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="objc"><pre class="de1">UIView <span class="sy0">*</span>annotationContainerView <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#91;</span><span class="br0">&#91;</span><span class="br0">&#91;</span><span class="br0">&#91;</span><span class="br0">&#91;</span>mapView subviews<span class="br0">&#93;</span> objectAtIndex<span class="sy0">:</span><span class="nu0">0</span><span class="br0">&#93;</span> subviews<span class="br0">&#93;</span> objectAtIndex<span class="sy0">:</span><span class="nu0">0</span><span class="br0">&#93;</span> subviews<span class="br0">&#93;</span> objectAtIndex<span class="sy0">:</span><span class="nu0">1</span><span class="br0">&#93;</span>;</pre></div></div></div></div></div></div></div>


<p>This is of course not very safe. It’s generally not a good idea to depend on the particular order of subviews. So you should always test if the [subviews count] > 0, and perhaps use the NSClassFromString() in a similar manner like this:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="objc"><pre class="de1">    <span class="kw1">for</span> <span class="br0">&#40;</span>UIView <span class="sy0">*</span>subview <span class="kw1">in</span> subviews<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#91;</span>subview isKindOfClass<span class="sy0">:</span>NSClassFromString<span class="br0">&#40;</span><span class="co3">@</span><span class="st0">&quot;NameOfTheClass&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
            <span class="co2">// We found the subview that we want</span>
        <span class="br0">&#125;</span>
    <span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>The last thing I wanted to do is to warn you: Apple discourages developers from doing this, because subviews of an UIKit class are considered to be private, and therefore they can change in future updates of the framework. So if you decide to modify or alter any of the subview, you should do it only when there is no other choice. And you should retrieve the view as defensively as possible, and be prepared for the scenarios when the code doesn’t get the view it wanted.</p>
<p>I hope this post was helpful to you guys. You are welcome to point out any weaknesses or suggest any improvements using the comment section below.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.glimsoft.com/01/07/how-to-inspect-subviews-hierarchy-of-any-uiview/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>^Happy New year 2012!^</title>
		<link>http://www.glimsoft.com/12/31/happy-new-year-2012/</link>
		<comments>http://www.glimsoft.com/12/31/happy-new-year-2012/#comments</comments>
		<pubDate>Sat, 31 Dec 2011 18:41:35 +0000</pubDate>
		<dc:creator>Lukas</dc:creator>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[end of the world]]></category>
		<category><![CDATA[new year]]></category>
		<category><![CDATA[wish]]></category>

		<guid isPermaLink="false">http://www.glimsoft.com/?p=257</guid>
		<description><![CDATA[The year 2011 is just about to end, so I would like to wish you guys all the best for the upcoming year. Mainly, I wish you health and love, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.thisisnorthumberland.com/wp-content/uploads/2011/10/fireworks1.jpg" alt="Firework" width="150" height="150" align=left style="float: left; margin-right: 10px; margin-top: 5px"/>The year 2011 is just about to end, so I would like to wish you guys all the best for the upcoming year. Mainly, I wish you health and love, because I think these two are the most important sources of happiness in life. Initially, I wanted to sort of sum up this year, consider what I’ve learned and what I’ve missed, what I’ve accomplished and what I didn’t manage to do; and things like these, but I am not in the right mood for this right now. I am ill, and I have been ill for last week+. Even though I did what I could to get well, it didn’t improve much. And I know that if I tried to write something meaningful at this moment, it would end up as just a bunch of pesimistic and self-defeating gibbering. Perhaps I’ll try to do this somewhen in January, but again: I do not promise it.<br />
So enjoy the new year as much as you can, and don’t forget to pursue things that matters most in life. Also keep in mind that this is our last year ever, because Earth is set to expire on 21th December, 2012; right?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.glimsoft.com/12/31/happy-new-year-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The driving force behind our work</title>
		<link>http://www.glimsoft.com/12/20/the-driving-force-behind-our-work/</link>
		<comments>http://www.glimsoft.com/12/20/the-driving-force-behind-our-work/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 15:05:56 +0000</pubDate>
		<dc:creator>Lukas</dc:creator>
				<category><![CDATA[Life Ideas]]></category>
		<category><![CDATA[me]]></category>
		<category><![CDATA[thoughts]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.glimsoft.com/?p=245</guid>
		<description><![CDATA[We all do what we do because there is something that makes us to do it. Among the most common factors would definitely be money, recognition from our relatives or [...]]]></description>
			<content:encoded><![CDATA[<p>We all do what we do because there is something that makes us to do it. Among the most common factors would definitely be money, recognition from our relatives or friends, the feeling of being successful or the joy of the work itself. I&#8217;ve spent awfully lot of time thinking about what is the most important force that makes me do what what I&#8217;m doing, and I believe I&#8217;ve found the answer. In this post, I am going to explain why.<br />
<span id="more-245"></span><br />
When I started with programming 3 years ago, it was tough. Beginnings are always hard, but I think in the case of programming it&#8217;s &#8220;slightly&#8221; harder. Usually, when you start to do something new, you want to see the results of your work. But when I started with the C language, there were almost no results for several months. I kept learning because I believed that steady basics are tremendously important for any future progress.</p>
<p>But hey, I was a kid. I needed someone to encourage me. And as stupid as it might now sound, I was used to be praised by my parents. But this time, it was obvious they were just being polite, and they didn&#8217;t understand from my results what should I be proud of. They did, however, supported me (not only) by buying me a MacBook, which enabled me to start developing apps for iPhone (the thing I was secreatly dreaming of ever since I started with programming). And I want to thank them here, really. Dad and mum, I much appreciate it.</p>
<p>After two and a half months of learning Objective-C, Cocoa and developing my first app <a href="http://glimsoft.com/apps/" title="Quadratic Master">Quadratic Master</a>, I&#8217;ve finished it and released it. What came next was a freezing-cold shower. The sales were way below my expectations, and I was really disappointed and desperate. A part of me wanted to show others that I am good, and I can accomplish something, but this made me think I am a looser. So what should I do? Stop with it? After getting over the initial deep disappointment, I realized that it would be stupid of me to give up. I still loved programming, there was just a question: What to do next?</p>
<p>In June 2010, I attended iDevcamp, a conference for iPhone developers held by Czech iOS development company <a href="http://tapmates.com/" title="Tapmates" target="_blank">Tapmates</a>. Apart from my app being showed as an example of bad design during a presentation (without clarifications why they did so), I&#8217;ve met there a guy from Czech television who was looking for an iPhone developer for his business projects. This moment started a work partnership between us that lasted for almost a year and led to two iPhone apps and both of us disappointed, but I&#8217;m getting ahead of myself.</p>
<p>As I said, we have done two apps together. There were a lot of complications and birth pains, but we managed to complete both projects (the apps were finished and I got paid). We both then agreed that the partnership wasn&#8217;t worth preserving. When I look back at it now, with clear mind, there were two major problems. On his side: he did it mostly for money and the projects we were working on were somewhere near bottom of his priority list; and on my side: I was completely new and inexperienced in this kind of &#8220;business&#8221; (gosh, why do I hate this word so much?), and therefore making a lot of mistakes mostly in communicating what had to be solved and how. There were a lot more things I disliked about it and I could talk about them for hours, but this article is already awfully long and I haven&#8217;t got to the point yet.</p>
<p>So here I was, having a decently topped account but still without a clue what project should I start working on. And now I am finally getting to the point: Even though I managed to earn this money, which I think would make most of the same-aged-as-me people quite proud of themselves, I didn&#8217;t consider it a big achievement. And although the very few people I told about it seemed to be impressed, I realized that this is not the reason I am doing it, and it didn&#8217;t bring me any particular rewarding feeling. I thought of it just as a useful advantage for my future projects. In the summer holiday 2011, I finally got an idea for app which seemed challenging yet achievable, and I started working on it (and still am working on it at the time of writing this). I am giving it months of my free time, and although the resulting effect is very uncertain, I am working on it because I am passionate about it, and because my instincts are telling me that it is the right thing for me to do. And even if it ends up badly, and I won&#8217;t become successful of it, I won&#8217;t earn money from it and my friends won&#8217;t admire me for it, I will still be happy I managed to finish it. My father sometimes says: &#8220;The way is the target&#8221;, and I can nothing but agree.</p>
<p>To sum it up, I simply believe that the only way to be truly happy with your work is to love what you do. Success, recognition and money are fine, and everyone likes them, but being dependent on them will eventually lead to disappointment. There won&#8217;t be ever enough money or success, because we, human beings, tend to be always dissatisfied with what we currently have. On the other hand, if you realize that you love what you do, you will become much happier with your work, because doing what you love is great, isn&#8217;t it? And I believe these enjoyable results of your work will eventually come; just stop chasing them, be patient and love what you do.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.glimsoft.com/12/20/the-driving-force-behind-our-work/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>The Blog post Universe has been waiting for</title>
		<link>http://www.glimsoft.com/12/11/the-blog-post-universe-has-been-waiting-for/</link>
		<comments>http://www.glimsoft.com/12/11/the-blog-post-universe-has-been-waiting-for/#comments</comments>
		<pubDate>Sun, 11 Dec 2011 20:33:50 +0000</pubDate>
		<dc:creator>Lukas</dc:creator>
				<category><![CDATA[Other]]></category>
		<category><![CDATA[intro]]></category>
		<category><![CDATA[me]]></category>
		<category><![CDATA[thoughts]]></category>

		<guid isPermaLink="false">http://www.glimsoft.com/?p=232</guid>
		<description><![CDATA[Well, that’s of course nonsense. In fact, the only person who has been waiting for it is me. This is my first blog post ever, and I am full of [...]]]></description>
			<content:encoded><![CDATA[<p>Well, that’s of course  nonsense. In fact, the only person who has been waiting for it is me. This is my first blog post ever, and I am full of expectations of how it’s going to take off. If you are curious why, carry on reading, if not, that’s ok too. I promise I won’t be crying long for the lost reader.<br />
<span id="more-232"></span><br />
	•  Who is that weird guy on the right?<br />
Oh, glad you’ve asked. That’s me, in full glory (Haha, not very funny..). Ok, enough of fooling around. My name is Lukas Petr, I am 18 years old, I live in the Czech Republic and study at a secondary school (final year). But, I am an iOS developer in the first place, often thinking of how to make it in the App world. The reason for this blog is mostly that I wanted to express my ideas, which are running through my mind eager to get out. But not only that. I strongly believe that formulating ideas and sharing them can improve my personality, and sort of calm down spikes in my mood (both upwards and downwards). This means that I am not only going to share my ideas and opinions, but also my feelings. Some of you might argue that blog shouldn’t be a place for confessions, but you know what? I don’t care. That’s another feature I find extremely interesting about blogs &#8211; there are no rules, no boundaries. Nowadays, the world is full of restrictions, and I am tired of it. I can’t get rid of the feeling that society wants us to live in a very restricted manner (to name some of them: study until you are 25, get a  university degree, find a proper 9-to-5 job, start a family, do not even try to think about doing something extraordinary, etc.). Now let me ask you something: what did you were you doing last week? Was it something you are passionate about, or just a duty you “have to do”? Your answer to this should explain it pretty well. This was a little off-topic, but you get the idea..</p>
<p>	•  What’s the purpose of this blunt design?<br />
I am going to be totally honest with this one. I had been looking for a designer several times over the last year and a half, but my expectations were high and my budget was low. And even after I managed to earn some money by coding an app for local Czech water company, I still was too busy doing other things and therefore still putting off the actual searching for a talented designer. Another problem is that great designers often don’t choose clients based on offered money, but based on their interest in the particular project. Now if you think that these ‘reasons’ are nothing but plain excuses for my laziness, you are probably right. I’ve decided for this simple ‘design’ mostly because I couldn’t wait to start writing any longer.</p>
<p>	•  What’s next?<br />
I have plenty of interesting ideas I want to share with you guys, so don’t forget to add this blog to your RSS reader. On the other hand, I don’t want to make any promises regarding the frequency, length or topics of the upcoming posts. I’ve learned over the time that making promises often leads to breaking them, so it’s usually better to not promise at all. I do, however, want to make a commitment here to one rule: I won’t alter the blog posts once they are published (except  correcting grammar mistakes). Opinions tend to change over time, but changing their past is definitely not a good idea. After all, you can’t change your life decisions either.<br />
	The last thing I would like to say is “Thank you”. Really, it’s astonishing you made it through the whole text without getting bored and leaving. I am open to any kind of constructive criticism, just please keep in mind when choosing the tone of your language that you are a human being. (No offense).<br />
	I don’t know what you think of it, but speaking for myself I have a special feeling that this is the beginning of a wonderful journey..</p>
]]></content:encoded>
			<wfw:commentRss>http://www.glimsoft.com/12/11/the-blog-post-universe-has-been-waiting-for/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
