<?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>Blog.Project13.pl &#187; webdeveloper</title>
	<atom:link href="http://www.blog.project13.pl/index.php/tag/webdeveloper/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.blog.project13.pl</link>
	<description>The Blog of a Coder</description>
	<lastBuildDate>Sun, 05 Feb 2012 02:28:52 +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>ip2cntry &#8211; ex-appengine app (mainly JAX-RS)</title>
		<link>http://www.blog.project13.pl/index.php/coding/727/ip2cntry-ex-appengine-app-mainly-jax-rs/</link>
		<comments>http://www.blog.project13.pl/index.php/coding/727/ip2cntry-ex-appengine-app-mainly-jax-rs/#comments</comments>
		<pubDate>Sat, 26 Jun 2010 15:13:04 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[appengine]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[jee]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[web dev]]></category>
		<category><![CDATA[webdeveloper]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=727</guid>
		<description><![CDATA[I&#8217;ve been coding an simple RESTful &#8220;ip to country&#8221; conversion service. I&#8217;ve decided to put it up to appengine &#8211; so that everybody may use it freely even if I&#8217;d change my server etc&#8230; And if looked quite nice the first day &#8211; buw when I got to do some &#8220;real stuff&#8221; app engine started [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;"><img title="appengine and duke" src="http://api.ning.com/files/mDJ*r0VXJVM5*LNj5uct5fwBIDcQH99SKTN-zzCVyDf306EuzF6lbwkJW6cGVJOUNtAen43aPLTd9HtdVcYgFuxB-d8SufPD/dukeongae.jpg" alt="" width="151" height="138" /></div>
<p>I&#8217;ve been coding an simple RESTful &#8220;ip to country&#8221; conversion service. I&#8217;ve decided to put it up to appengine &#8211; so that everybody may use it freely even if I&#8217;d change my server etc&#8230; And if looked quite nice the first day &#8211; buw when I got to do some &#8220;real stuff&#8221; app engine started to get in my way, here&#8217;s a quick rundown of the problems I&#8217;ve found with appengine:</p>
<ol>
<li>I need to download and update the ip&lt;-&gt;country database every few days. I&#8217;d use an <strong>GZIPInputStream</strong> and <strong>BufferedReader</strong> to get the file I was interested in and update the database. Did appengine allow me to use such an simple aparoach?
<ol>
<li><strong style="color: #03c300;">pro:</strong> appengine provides a very nice cron-like mechanism. So I just had to create an <strong>cron.xml in WEB-INF</strong> and this part was ready to go! This was in fact easier and more fun than in classic <strong>Spring + Open Symphony Quartz</strong>.</li>
<li><strong style="color: #cb0007;">con:</strong>I checked if this tactic was OK with the JRE whilelist and checked the Quotas &#8211; <a href="http://code.google.com/appengine/docs/quotas.html#UrlFetch" onclick="urchinTracker('/outgoing/code.google.com/appengine/docs/quotas.html_UrlFetch?referer=');">http://code.google.com/appengine/docs/quotas.html#UrlFetch</a>, &#8220;seems ok&#8221; &#8211; I thought &#8211; &#8220;nothing about per connection limits, only daily quotas.&#8221;. After writing the code, I discovered that even though on the main quota page there was no word about per connection limits, in fact there are such quotas, but a little more hidden: <a href="http://code.google.com/appengine/docs/java/urlfetch/overview.html" onclick="urchinTracker('/outgoing/code.google.com/appengine/docs/java/urlfetch/overview.html?referer=');">http://code.google.com/appengine/docs/java/urlfetch/overview.html</a> Max request/response sizes are capped at exactly 1MB.<br />
As my gzipped file is around 1.1MB,<strong> appengine killed my simple idea&#8230;</strong> I&#8217;d have to split the file into separate ones &#8211; on another server, and then fetch the separated files onto appengine.</li>
<li><strong style="color: #cb0007;">con:</strong>The<strong> </strong>mentione CRON mechanism is quite funny. You don&#8217;t call<strong> methods </strong>but URLs &#8211; and they are normally called as if one would launch them from the browser &#8211; thus, traffic and &#8220;max time&#8221; quotas do count there as well. So rather than calling an method, as you&#8217;d do with OpenSymphony &#8211; you create an Servlet that does all the work. This may me both good, and bad&#8230; You cound do all the CRON stuff by hand if it got out of sync etc&#8230; I didn&#8217;t really like it, and as mentioned&#8230; <strong>When doing my &#8220;big batch database update&#8221; the servlet would simply timeout&#8230;</strong></li>
</ol>
</li>
<li>Let&#8217;s talk about the <strong>dataStore</strong>. As you all probably know&#8230; AppEngine does not provide and &#8220;database&#8221; per se. It&#8217;s not relational and has quite some limitations. BUT!<strong> That&#8217;s quite ok, as it&#8217;s very quick and very very scalable!</strong> And most of the time&#8230; Do you really need all those fancy relations? ;-) It was an ideal place to hold my super simple data: &#8220;ip region = country&#8221; mapping in a persistent way. &#8220;Another nice thing on appengine for this application I&#8217;m going to write.&#8221; &#8211; I thought. Was I right?
<ol>
<li><strong style="color: #03c300;">pro/con:</strong> Not really&#8230; I used JPA but JDO (which is prefered by appengine from what I&#8217;ve seen) also works nice on GAE. The setup did run quite ok while I was running tests on my local machine. Deployment is also an breeze and <strong>I didn&#8217;t have to use any complicated dependencies to get it running &#8211; &#8220;yay, no maven!&#8221;. </strong>You just have to enchance the classes you want to make persistent (just as hibernate does).</li>
<li><strong style="color: #cb0007;">con:</strong>The problems started when I wanted to <strong>clear my datastore.</strong> Nothing easier than that, right&#8230;? &#8220;delete from BlaBla&#8221; and we&#8217;re done. Yeah, but not on GAE. As even the &#8220;max rows a query touches&#8221; are limited &#8211; to 500. So there I am, with my 100.000 rows, and I have to delete them in 500 rows per query&#8230; Of course I can&#8217;t call this in an loop &#8211; as  the timeout quota would get in my way and kill the app.From what I&#8217;ve seen, people do solve this using a CRON task that calls this &#8220;clearDatabase&#8221; servlet until it&#8217;s  done &#8211; ugh, not a nice solution but I can&#8217;t think of any other solution :\</li>
<li><strong style="color: #cb0007;">con:</strong>The only query I need to do in this app is basically:
<pre>SELECT range FROM RemoteIpData as range
             WHERE range.ipFrom &lt;= ?1
               AND range.ipTo &gt;= ?2
<em>#and this would always return 1 entry!</em>
</pre>
<p>And guess what&#8230; <strong>AppEngine does not support multiple &#8220;less/more than&#8221; operands in one query!</strong> If you think hard about what BigTable is, it does make some sense. More information about &#8220;<strong>GQL</strong>&#8221; can be found here: <a href="http://code.google.com/appengine/docs/python/datastore/gqlreference.html" onclick="urchinTracker('/outgoing/code.google.com/appengine/docs/python/datastore/gqlreference.html?referer=');">http://code.google.com/appengine/docs/python/datastore/gqlreference.html</a> All the <a href="http://code.google.com/appengine/docs/java/datastore/queriesandindexes.html" onclick="urchinTracker('/outgoing/code.google.com/appengine/docs/java/datastore/queriesandindexes.html?referer=');">restrictions about the Queries you can do are documented here</a> &#8211; some are really counter intuitive when you come from an RDBMS enviroment&#8230; Ah well ;-) Oh, and yet another <a href="http://blog.newsplore.com/2009/06/06/reviewing-google-appengine-for-java-part-2" onclick="urchinTracker('/outgoing/blog.newsplore.com/2009/06/06/reviewing-google-appengine-for-java-part-2?referer=');">great link about GAE limitations</a>.</p>
<p>Having this limitation, really sucks for my normally &#8220;super simple query&#8221;, and I&#8217;d have to change the data structure somehow or do some awful 2 queries and then combine them in Java (omg teh terrorr&#8230; :&lt;). So, while developing on appengine, keep in ming &#8211; simple things might turn out quite complicated due to the nature of BigTable. If you know all the limitations when designing the system and not while finishing it, you&#8217;ll be a happier man&#8230; ;-)</li>
<li><strong>neutral</strong>: Primary keys can&#8217;t be Integers etc, as AppEngine uses it&#8217;s own &#8220;Key&#8221; type. :-)</li>
</ol>
</li>
<li>Having that all said. Appengine&#8217;s administration panel is quite ok. And the not-so-newly-added log search etc are really fine tools. Something an plain old tomcat can not offer. On the other hand, the limitations can really be a deal breaker! My app was really fairly simple, and yet appengines quotas managed to really get in my way. Keep this in mind while thinking about using it. You may also try Amazon&#8217;s cloud or CloudForce from SalesForce etc&#8230; They all do offer a quite less restrictive enviroment.</li>
<li>If you&#8217;re interested, deployment does take about 5-7 minutes before the new version is visible on the web &#8211; so don&#8217;t panic if you&#8217;re still seeing the old version after deploying the new one.</li>
<li>My opinion about GAE&#8230;? <span style="text-size: xx-small;">(semi serious ;-))</span></li>
</ol>
<blockquote><p><em><strong>&#8220;Screw you clouds, I&#8217;m going /home!&#8221;</strong></em><br />
<span style="text-size: xx-small;">(<a href="http://www.youtube.com/watch?v=7oH5Qc2zTrs&amp;feature=related" onclick="urchinTracker('/outgoing/www.youtube.com/watch?v=7oH5Qc2zTrs_amp_feature=related&amp;referer=');">intended southpark pun</a>)</span><em><strong><br />
</strong></em></p></blockquote>
<p>I&#8217;ll finish this project using my ol&#8217; pal, <strong>Tomcat6</strong> which I&#8217;ve already got running for <a href="http://netbeans.edu.pl" onclick="urchinTracker('/outgoing/netbeans.edu.pl?referer=');">netbeans.edu.pl</a> (but that was an grails app).</p>
<p>I&#8217;ve also decided to use Spring, which I didn&#8217;t really need on appengine &#8211; as the only thing I was doing was so small that all the logic was around 10 lines in the servlets&#8230; But if using hibernate and all the other &#8220;real&#8221; JEE stuff, I felt I&#8217;d need to &#8220;do this right&#8221; so I&#8217;ve decided for Spring 3 and Maven2&#8230; I&#8217;ll try to build this project from gradle soon too!</p>
<p>ALSO! If interested in an more experienced programmers view on appengine (I&#8217;m still a novice), go and read <a href="http://art-of-software.blogspot.com/2010/04/goole-application-engine.html" onclick="urchinTracker('/outgoing/art-of-software.blogspot.com/2010/04/goole-application-engine.html?referer=');">this blog post about GAE on Sławek Sobótkas blog.</a> All in all we seem to agree that the limitations can be an pain in the a&#8230; ;-)</p>
<p>The source for the appengine version is on my github account. I&#8217;m porting it to an plain old tomcat environment and will post this version there too when it&#8217;s ready to run (<strong>tomcat deployment </strong>is somehow hell with such apps for me&#8230; Any tips are really welcome :-))</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/coding/727/ip2cntry-ex-appengine-app-mainly-jax-rs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GitHub Diff in Gmail</title>
		<link>http://www.blog.project13.pl/index.php/fun/724/github-diff-in-gmail/</link>
		<comments>http://www.blog.project13.pl/index.php/fun/724/github-diff-in-gmail/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 14:32:14 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[webdeveloper]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=724</guid>
		<description><![CDATA[Hi there, below is the (horribly trashy and chaotic &#8211; as it was hacked up in about 2/3 hours) source for my Google Gmail Contextual Gadget. It extends Gmail by parsing all links passed in an email, and if an github commit link is found it displays the diff for this commit. With coloring etc [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://github.com/ktoso/GitHubDiff/raw/master/screenshot.png" onclick="urchinTracker('/outgoing/github.com/ktoso/GitHubDiff/raw/master/screenshot.png?referer=');"><img class="aligncenter" title="github diff in gmail" src="http://github.com/ktoso/GitHubDiff/raw/master/screenshot.png" alt="" width="500" /></a></p>
<p style="text-align: left;">Hi there, below is the (horribly trashy and chaotic &#8211; as it was hacked up<strong> in about 2/3 hours</strong>) source for my <em>Google Gmail Contextual Gadget</em>.</p>
<p>It<strong> extends Gmail </strong>by <em>parsing all links passed in an email, and if an github commit link is found it displays the diff for this commit.</em> <strong>With coloring</strong> etc &#8211; just as github would. It&#8217;s really fairly easy to get this kind of things going, and if your working with Google Apps (using gmail in your domain etc) you can use this, and many more gadgets (though I didn&#8217;t find much of them really useful &#8211; that&#8217;s why I&#8217;ve written this one).</p>
<p>The source can be downloaded, and fixed (which I hopefuly will have time to do! As it&#8217;s a mess, let&#8217;s say, &#8220;proof of concept&#8221;): <a href="http://github.com/ktoso/GitHubDiff" onclick="urchinTracker('/outgoing/github.com/ktoso/GitHubDiff?referer=');">http://github.com/ktoso/GitHubDiff</a> (It&#8217;s on the <strong>MIT license</strong>).</p>
<p><span class="youtube">
<object width="425" height="355">
<param name="movie" value="http://www.youtube.com/v/bJIhKxNDNKg&amp;color1=3a3a3a&amp;color2=999999&amp;border=0&amp;fs=1&amp;hl=en&amp;autoplay=0&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0?rel=1" />
<param name="allowFullScreen" value="true" />
<embed wmode="transparent" src="http://www.youtube.com/v/bJIhKxNDNKg&amp;color1=3a3a3a&amp;color2=999999&amp;border=0&amp;fs=1&amp;hl=en&amp;autoplay=0&amp;showinfo=0&amp;iv_load_policy=3&amp;showsearch=0?rel=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="355"></embed>
<param name="wmode" value="transparent" />
</object>
</span><p><a href="http://www.youtube.com/watch?v=bJIhKxNDNKg" onclick="urchinTracker('/outgoing/www.youtube.com/watch?v=bJIhKxNDNKg&amp;referer=');"><img src="http://img.youtube.com/vi/bJIhKxNDNKg/default.jpg" width="130" height="97" border=0></a></p></p>
<p>Read the full story to see instalation instructions as well as documentation links&#8230;<br />
<span id="more-724"></span></p>
<p><strong>HOW TO INSTALL:</strong><br />
It can be installed by your own into gmail, if you&#8217;re running on Google Apps -just by creating an new Application on the Market and then adding it to your Account. If you&#8217;d like me to polish and publish this to the Google Enterprise Market &#8211; you&#8217;d have to fund me the publish fee, 100$&#8230; ;-)</p>
<p><strong>DOCUMENTATION:</strong><br />
Contextual Gadgets: <a href="http://code.google.com/apis/gmail/gadgets/contextual/" onclick="urchinTracker('/outgoing/code.google.com/apis/gmail/gadgets/contextual/?referer=');">http://code.google.com/apis/gmail/gadgets/contextual/</a></p>
<p>jQuery &#8211; getJSON: <a href="http://api.jquery.com/jQuery.getJSON/" onclick="urchinTracker('/outgoing/api.jquery.com/jQuery.getJSON/?referer=');">http://api.jquery.com/jQuery.getJSON/</a><br />
GitHub API &#8211; <a href="http://develop.github.com/p/commits.html" onclick="urchinTracker('/outgoing/develop.github.com/p/commits.html?referer=');">http://develop.github.com/p/commits.html</a></p>
<p><strong>LICENSE:</strong><br />
The source is MIT licensed, feel free to use it as a base for your own projects etc. It&#8217;s nothing particularly well written etc ;-)</p>
<p>Enjoy<strong> github</strong> in your <strong>gmail</strong> &#8211; two amazing webapps in one&#8230; :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/fun/724/github-diff-in-gmail/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Installing Git with Gitosis</title>
		<link>http://www.blog.project13.pl/index.php/project13/477/installing-git-with-gitosis/</link>
		<comments>http://www.blog.project13.pl/index.php/project13/477/installing-git-with-gitosis/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 15:22:40 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Project13]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[gitosis]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[terminal]]></category>
		<category><![CDATA[webdeveloper]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=477</guid>
		<description><![CDATA[Git is really simple and VERY powerfull. It makes svn look like an idiot &#8211; but that&#8217;s just my personal opinion ;-) Anyways, I&#8217;m using github most of the time, but now I&#8217;d like to hava a non public repository (yet remote) for some small project. I&#8217;ve been commiting to a local git instance from [...]]]></description>
			<content:encoded><![CDATA[<p>Git is really simple and VERY powerfull. It makes svn look like an idiot &#8211; but that&#8217;s just my personal opinion ;-)</p>
<p>Anyways, I&#8217;m using github most of the time, but now I&#8217;d like to hava a non public repository (yet remote) for some small project. I&#8217;ve been commiting to a local git instance from the begining of this project so just pushing it into a new repo will be really simple.</p>
<p>I wanted to have som easy to administer localozed git to serve hit hosting for my friends etc. So this is how I did it:</p>
<p>On server:</p>
<div class="geshi no bash">
<div class="head"># do this as root of course</div>
<ol>
<li class="li1">
<div class="de1"><span class="kw3">cd</span> ~<span class="sy0">/</span>src</div>
</li>
<li class="li1">
<div class="de1">git clone git:<span class="sy0">//</span>eagain.net<span class="sy0">/</span>gitosis.git</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">cd</span> gitosis</div>
</li>
<li class="li1">
<div class="de1">.<span class="sy0">/</span>setup.py <span class="kw2">install</span></div>
</li>
<li class="li1">
<div class="de1">useradd git</div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#end of obvious stuff</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">gitosis-init <span class="sy0">&lt;</span> <span class="sy0">/</span>location<span class="sy0">/</span>of<span class="sy0">/</span>administrators<span class="sy0">/</span>public<span class="sy0">/</span>id_rsa.pub <span class="co0">#this will allow you to administer gitosis remotely</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">sudo</span> <span class="kw2">chmod</span> <span class="nu0">755</span> <span class="sy0">/</span>home<span class="sy0">/</span>git<span class="sy0">/</span>repositories<span class="sy0">/</span>gitosis-admin.git<span class="sy0">/</span>hooks<span class="sy0">/</span>post-update <span class="co0"># in case gitosis-init didn&#39;t do this already</span></div>
</li>
</ol>
</div>
<p>Now we can do all the administration without being logged in into our server &#8211; just by using git!
</pre>
<div class="geshi no bash">
<div class="head">#all of the following is done LOCALLY!</div>
<ol>
<li class="li1">
<div class="de1">git clone git<span class="sy0">@</span>stratos:gitosis-admin.git</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">cd</span> gitosis-admin</div>
</li>
<li class="li1">
<div class="de1">vim gitosis.conf <span class="co0">#edit groups and repositories</span></div>
</li>
<li class="li1">
<div class="de1">writable = bla is responsible <span class="kw1">for</span> the repositories</div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#for example you could setup:</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#then just do the stuff you would normally do with git:</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#[group secret-group]</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#writable = bla</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#members = ktoso@homunculus ktoso@protos</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#here&#39;s how your dir structure should look like</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#├── gitosis.conf #repository configuration</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#└── keydir #put all (ssh) public keys of your users in here</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co0"># &nbsp; &nbsp;├── ktoso@homunculus.pub</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co0"># &nbsp; &nbsp;└── ktoso@protos.pub</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co0">#now just do what you would normally do with a git repository</span></div>
</li>
<li class="li1">
<div class="de1">git add .</div>
</li>
<li class="li1">
<div class="de1">git commit -m <span class="st0">&#39;new repo: bla&#39;</span></div>
</li>
<li class="li1">
<div class="de1">git push</div>
</li>
</ol>
</div>
<p>You can then just pull/clone this repo:</p>
<pre lang="bash">git clone git://stratos/bla.git</pre>
<p>Yeah, this post isn't much of an discovery - yet I wanted to show you how SIMPLE and SCALABLE a simple git repository can be. For mor information about git and gitosis see: <a href="http://www.google.com/search?q=google+gitosis" onclick="urchinTracker('/outgoing/www.google.com/search?q=google+gitosis&amp;referer=');">a simple google search</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/project13/477/installing-git-with-gitosis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>YES! Native Zen coding in Intellij IDEA EAP 9.0.2</title>
		<link>http://www.blog.project13.pl/index.php/fun/465/yes-native-zen-coding-in-intellij-eap-9-0-2/</link>
		<comments>http://www.blog.project13.pl/index.php/fun/465/yes-native-zen-coding-in-intellij-eap-9-0-2/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 21:30:52 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[IDEA]]></category>
		<category><![CDATA[intellij]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[webdeveloper]]></category>
		<category><![CDATA[zen]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=465</guid>
		<description><![CDATA[Zen points directly to the human heart, see into your nature and become Buddha. - Hakuin Ekaku (1685–1768) For those who don&#8217;t know about zen coding (where have you been guys?) here&#8217;s a little sample: Instead of writing: &#60;form class="form-comment" id="comment"&#62; &#60;fieldset&#62; &#60;input id="myid" name="name" type="" /&#62; &#60;input onclick="hideMe()" type="" /&#62; &#60;/fieldset&#62; &#60;/form&#62; You write [...]]]></description>
			<content:encoded><![CDATA[<blockquote>
<p style="text-align: right;"><em><strong>Zen points directly to the human heart,<br />
see into your nature and become Buddha.</strong><br />
</em>- Hakuin Ekaku (1685–1768)</p>
</blockquote>
<p>For those who don&#8217;t know about zen coding (where have you been guys?) here&#8217;s a little sample:</p>
<p>Instead of writing:<br />
<code>&lt;form class="form-comment" id="comment"&gt;<br />
&lt;fieldset&gt;<br />
&lt;input id="myid" name="name" type="" /&gt;<br />
&lt;input onclick="hideMe()"</code><code> type=""</code><code> /&gt;<br />
&lt;/fieldset&gt;<br />
&lt;/form&gt;</code></p>
<p>You write<br />
<code><br />
form.form-comment#comment&gt;fieldset&gt;input#myid[name=name]&gt;input[onclick=hideMe()]</code></p>
<p>and hit [TAB].</p>
<p><em><strong>To understand zen, you must understand yourself. </strong></em>(yet I also strongly suggest watching <a href="http://vimeo.com/7405114" onclick="urchinTracker('/outgoing/vimeo.com/7405114?referer=');">this video</a>)<em><strong><br />
</strong></em></p>
<p>Links:<a href="http://confluence.jetbrains.net/display/IDEADEV/Maia+EAP" onclick="urchinTracker('/outgoing/confluence.jetbrains.net/display/IDEADEV/Maia+EAP?referer=');"></a><br />
<a href="http://confluence.jetbrains.net/display/IDEADEV/Maia+EAP" onclick="urchinTracker('/outgoing/confluence.jetbrains.net/display/IDEADEV/Maia+EAP?referer=');">http://confluence.jetbrains.net/display/IDEADEV/Maia+EAP</a> &#8211; IntelliJ IDEA Early Access Program<br />
<a href="http://code.google.com/p/zen-coding/" onclick="urchinTracker('/outgoing/code.google.com/p/zen-coding/?referer=');">http://code.google.com/p/zen-coding/</a> &#8211; zen coding website</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/fun/465/yes-native-zen-coding-in-intellij-eap-9-0-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interesting talk with Sun Microsystems’ Director of Web Technologies Tim Bray</title>
		<link>http://www.blog.project13.pl/index.php/coding/438/interesting-talk-with-sun-microsystems%e2%80%99-director-of-web-technologies-tim-bray/</link>
		<comments>http://www.blog.project13.pl/index.php/coding/438/interesting-talk-with-sun-microsystems%e2%80%99-director-of-web-technologies-tim-bray/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 18:17:10 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[podcast]]></category>
		<category><![CDATA[sun]]></category>
		<category><![CDATA[webdeveloper]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=438</guid>
		<description><![CDATA[I just stumbbled uppon an very interesting talk with Sun Microsystems’ Director of Web Technologies Tim Bra, abour the future of the Java Platform. They also mention stuff about REST/SOAP, SOA, Grails/Grails/Django etc. Is&#8217;s interesting to see how &#8220;bigshots&#8221; view these technologies. Tkat said, if you have 30min to spare, or just want to play [...]]]></description>
			<content:encoded><![CDATA[<p>I just stumbbled uppon an very interesting talk with Sun Microsystems’ Director of Web Technologies Tim Bra, abour the future of the Java Platform. They also mention stuff about REST/SOAP, SOA, Grails/Grails/Django etc. Is&#8217;s interesting to see how &#8220;bigshots&#8221; view these technologies.</p>
<p>Tkat said, if you have 30min to spare, or just want to play it in the background while working as I did: <a href="http://itspice.net/cms/it-news/podcast/what-next-in-java-web-development-tim-bray-podcast" onclick="urchinTracker('/outgoing/itspice.net/cms/it-news/podcast/what-next-in-java-web-development-tim-bray-podcast?referer=');">http://itspice.net/cms/it-news/podcast/what-next-in-java-web-development-tim-bray-podcast</a></p>
<ul>
<li>The recodring is from 2009 &#8211; back ind the days with Sun still existent ;-)</li>
<li>Weird that they didn&#8217;t know about Symfony &#8211; the very awesome and scalable PHP Framework.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/coding/438/interesting-talk-with-sun-microsystems%e2%80%99-director-of-web-technologies-tim-bray/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaCamp #2</title>
		<link>http://www.blog.project13.pl/index.php/coding/405/javacamp-2/</link>
		<comments>http://www.blog.project13.pl/index.php/coding/405/javacamp-2/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 02:10:34 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[agh]]></category>
		<category><![CDATA[JavaCamp]]></category>
		<category><![CDATA[jee]]></category>
		<category><![CDATA[JUG]]></category>
		<category><![CDATA[study]]></category>
		<category><![CDATA[webdeveloper]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=405</guid>
		<description><![CDATA[Yup, it&#8217;s time for another JavaCamp &#8220;review&#8221;. This time I was able to attend the whole thing, and didn&#8217;t miss the pizza &#8211; well, I just got one slice since we were so busy talking about Google&#8217;s Android with other programmers&#8230; ;-) The agenda was shorter than last time, but it still &#8220;had it&#8217;s moments&#8221;: [...]]]></description>
			<content:encoded><![CDATA[<p>Yup, it&#8217;s time for another <a href="http://www.java.pl/?p=131" onclick="urchinTracker('/outgoing/www.java.pl/?p=131&amp;referer=');">JavaCamp</a> &#8220;review&#8221;.<br />
This time I was able to attend the whole thing, and didn&#8217;t miss the pizza &#8211; well, I just got one slice since we were so busy talking about Google&#8217;s Android with other programmers&#8230; ;-) The agenda was shorter than last time, but it still &#8220;had it&#8217;s moments&#8221;:</p>
<address style="text-align: center;"></address>
<h3><a href="http://www.lenart.org.pl/" onclick="urchinTracker('/outgoing/www.lenart.org.pl/?referer=');"><strong>Łukasz Lenart</strong></a> &#8211; “Google AppEngine &#8211; chmura na Ja(v)wie”</h3>
<p>Łukasz, from the Warsaw JUG, was talking about Google&#8217;s AppEngine &#8211; it&#8217;s baisically <em>Just Another Servlet Container</em> but since it&#8217;s in a Cloud, it&#8217;s (potentially) easy to scale an application deployed on it&#8230; But the biggest benefit of deploying to the AppEngine is in my opinion: free java hosting. If our app doesn&#8217;t exceed some <a href="http://code.google.com/intl/pl/appengine/docs/quotas.html" onclick="urchinTracker('/outgoing/code.google.com/intl/pl/appengine/docs/quotas.html?referer=');">specyfic quotas</a> (most importantly is smaller than 500MB &#8211; concerning the Data/Blob Stores) we don&#8217;t have to pay Google for the hosting. You could call this a free cloud for beginners, and if your app gets bigger, you&#8217;re kinda trapped in this clound, and then have to pay google some fees for the extra bandwidth etc.</p>
<p>Sadly not everything is &#8220;allowed&#8221; and we are restricted by a <a href="http://code.google.com/intl/pl/appengine/docs/java/jrewhitelist.html" onclick="urchinTracker('/outgoing/code.google.com/intl/pl/appengine/docs/java/jrewhitelist.html?referer=');">Java Class WhiteList</a>. Also, there is <strong>no </strong><strong>Relational Database</strong> available for us on the AppEngine &#8211; instead we can use the &#8220;DataStore&#8221; with <strong><abbr title="Google Query Language......">GQL</abbr></strong> (or JDO or <strong>JPA</strong>) and for files there is the (now in &#8220;beta&#8221; status) <strong>BlobStore</strong> &#8211; the name explaing everything I guess&#8230; ;-) Another <em>&#8220;restriction&#8221;</em> would be not being able to access the filesystem. I can only guess why, but it would seem that this would make the <strong>AppEngine</strong> easier to scale&#8230; (sadly I&#8217;m not an AppEngine Developer so that&#8217;s just my wild guess). Ok, but why did I put the word <em>&#8220;restriction&#8221;</em> in quotes? Because I don&#8217;t think this &#8220;restriction&#8221; is that much of a hurdle&#8230; We can always use resources from inside our WAR by using Class.getResource() <em>(I didn&#8217;t test this on the AE, but it sounds plausible and should work) </em>and for uploaded files there&#8217;s the BlobStore. There are some more &#8220;services&#8221; like simplified threading (normal java threads wouldn&#8217;t be easy to controll by the AppEngine I guess, so that&#8217;s why they introducet this option) and some more &#8211; there&#8217;s XMPP, Mailing support etc&#8230;</p>
<p>All in all, I wasn&#8217;t a big fan of cloud&#8217;s to begin with, and even though the AppEngine seems like a nice place to Deploy, I&#8217;m not really convinced to go with it. The presentation was all right and I did learn some thing&#8217;s about the AE I didn&#8217;t know before &#8211; and the &#8220;show what doesn&#8217;t work and not what does work out of the box&#8221; apparoch Łukasz took, was really nice much more interesting than just &#8220;click&#8230; yay it&#8217;s working&#8221; &#8211; as it doesn&#8217;t go like that IRL most of the time&#8230;<br />
That said, I&#8217;ll stick with a <strong>Tomcat</strong> server for my GWT-Crossword.</p>
<p>Oh, and the <a href="http://www.lenart.org.pl/pdf/WarszawaJUG-GoogleAppEngine.pdf" onclick="urchinTracker('/outgoing/www.lenart.org.pl/pdf/WarszawaJUG-GoogleAppEngine.pdf?referer=');">slides are available here</a> and the source code of the demo (&#8220;Struts2 on AppEngine&#8221;) he showed can be pulled from mercurial by:</p>
<pre>hg clone https://lukaszlenart-wjug.googlecode.com/hg/ gruuf-done</pre>
<h3><a href="http://miragemiko.wordpress.com/" onclick="urchinTracker('/outgoing/miragemiko.wordpress.com/?referer=');"><strong>Miroslav Kopecky</strong></a> &#8211; “Outlook to Android Application Development” <em>(yup, another Google product today)</em></h3>
<p>I own an Android powered (and there for Linux powered :-)) HTC Hero since two days, but am not &#8220;new&#8221; in the Android API as I&#8217;ve been reading quite a bit about it since it was announced alongside with the G1<em> (or was it announced before the phone..? hmm&#8230;)</em>. Mirek&#8217;s presentation was an introduction into the Android Platform, or as we noticed &#8220;Framework&#8221;, as coding Android apps feel&#8217;s very much like using an framework (yes, every API is more or less something like a framework, but the &#8220;feel&#8221; here is really framework-ish, with lot&#8217;s of method overriding etc.). After some introduction into an Android Apps structure, Mirek went on and showed 4 application demos. They were using simple layouting, Contact access and at the end event Google Maps. It may have been hard to follow for people not accustomed to Android and wasn&#8217;t all too in depth, but the overall idea most probably came through.</p>
<p>I&#8217;ll write some <strong>Android </strong>App for sure in some time &#8211; first I&#8217;ll have to quickly finish my GWT-Crossword&#8230; It&#8217;ll probably be a ContactMerger &#8211; something that&#8217;s clearly missing in all google apps and is constantly nagging me. That is, an app to easily merge contact duplicates into one contact. This could be really nicely automated, and when some conflicts are detected a normal 3-diff-like dialog would be enough to quickly merge a few contacts into one&#8230; Sadly my HTC Hero still has the uber-old Android 1.5 and the contact&#8217;s access API has significantly changed since then&#8230; I think that by the time I&#8217;m ready to code for android  the 2.1 ROM Upgrade for my Phone should be available&#8230; So I&#8217;m focusing just on the &#8220;Level 7&#8243; API (&#8220;level 7&#8243; means &#8220;android 2.1&#8243;, whereas &#8220;level 3&#8243; means &#8220;android 1.5&#8243;).</p>
<h3><a href="http://jdn.pl/blog/1" onclick="urchinTracker('/outgoing/jdn.pl/blog/1?referer=');"><strong>Piotr Maj</strong></a> &#8211; “Jak czerpać przyjemność z programowania w świecie krótkich terminów i parcia na słupki”</h3>
<p>This presentation really stood outfrom the rest, it was fun and while not really tech focused, quite interesting. Piotr started out with some awesome<span style="text-decoration: line-through;"> [plastelina]</span> figures that his wife made esspecially for this presentation: a &#8220;Garniturek&#8221; (Marketing Guy), an Programmer and an Evil Looking Tester. The figures were really hilarious&#8230; :-) Anyways, he started out with showing sources of <span style="text-decoration: line-through;">[depresion]</span> bad feelings in our day to day jobs, and pointing out that if we do something again and again, and still are doing it the same way &#8211; something&#8217;s not right, we don&#8217;t evolve if we code like that&#8230; Then he went on with introducing the Tester figure and some scenarios of a Tester humiliating Programmers. A few words about Selenium and then we were talking about how writing tests it both necessary and potentially really interesting. So in the end, we ended up talking about <strong>Unit/</strong><strong>Functional</strong> <strong>Testing</strong> and <strong>Test</strong> <strong>Coverage</strong> &#8211; who would have thought, by the title of the presentation I was expecting something else, but it was a really plesant presentation nonetheless, and the need of testing code can&#8217;t be stressed enough I guess &#8211; maybe I&#8217;ll start to have a major test coverage of my code thanks this constant nagging about them ;-)</p>
<h3><strong>Pizza Time</strong></h3>
<p>During the pizza-break we had a long talk with Miroslav, and people could play around with the Nexus One he brought especially for this presentation. It&#8217;s interesting to hear out other developers views on some API. I for example find the Android API quite nice. The &#8220;J2ME Hell&#8221; I have been coding some stuff for burns even fiercer now that I have the option to choose another Mobile Java Platform &#8211; at last with cool things like SQLite, Widgets and Easy Touch Responsiveness &#8211; oh an the BackGroundTasking is a great feature &#8211; something J2ME never had I think, on the other hand, what good stuff did basic J2ME have? Yeah there were some JSRs that made life not so painful on ME, but on most of my phones there always were problems with them &#8211; MMAPI for example, where you sometimes had to code something SE or NOKIA specific &#8211; so where is that &#8220;write once&#8221; gone on ME eh&#8230;? Later on we talked with Miroslav and it seems that he&#8217;ll be at our <a href="http://www.sfi.org.pl/" onclick="urchinTracker('/outgoing/www.sfi.org.pl/?referer=');">SFI</a> next month &#8211; yet another great conference&#8230; :-)</p>
<p>One of the developers had an Motorola DROID, which I have considered buying but decided for the HERO &#8211; for money reasons&#8230; The DROID&#8217;s (MILESTONE&#8217;s) phicical keyboard really sucks, by the way. That, plus the fact of how awesome the on-screen-keyboard of Android is made me not regret buying a phone without phisical keyboard&#8230; ;-)</p>
<h3><a href="http://javarsovia.mocna-kawa.com/index.php?option=com_content&amp;task=view&amp;id=96&amp;Itemid=65" onclick="urchinTracker('/outgoing/javarsovia.mocna-kawa.com/index.php?option=com_content_amp_task=view_amp_id=96_amp_Itemid=65&amp;referer=');"><strong>Marcin Kalas</strong></a> &#8211; “Java/JEE Performance Test Planning &#8211; How To Plan Successful Performance Tuning of Java/JEE applications”</h3>
<p>I had really high hopes for this presentation, as I&#8217;m currently doing JMeter Load Testing on MySQL engines at my University. Sadly this wasn&#8217;t a &#8220;practical&#8221; or &#8220;hands-on&#8221; presentation. Yeah, I understand that it&#8217;s really hard to show this kind of stuff in such a short period of time, nonetheless I hoped for some more &#8220;tricks and advices&#8221;. The some tips about the JVM and multiple GC Strategries were quite interesting, but that&#8217;s something I&#8217;ll need to lookup and read about when I&#8217;m going to need it as it&#8217;s clearly a very big topic.</p>
<p>Marcin surely has a lot of experience in <strong>performance tuning</strong> apps that&#8217;s clear and it was really interesting to see some people (Java Gurus) from the audience throw some interesting stuff into the presentation. Real JEE apps are really something amazing, I hope I&#8217;ll be able to code and work with such apps in my future, it&#8217;s an amazing world full of Gigantic DataCenters and Techniques no small app would ever find any use for&#8230; For now I&#8217;ll have to get good at the basic stuff I guess, I&#8217;ve still got some time. What I found very interesting were the Load/Stress &#8220;Patterns&#8221; Marcin displayed. For example if your application is always busy, or strangely idle &#8211; even with lots of request&#8217;s comming in etc. It&#8217;s something that really makes you think about the app/server and bottlenecks&#8230; Sadly I can&#8217;t seem to find anything similar about those online &#8211; maybe I&#8217;m just not searching well enough. I hope to see some of those behaviours while testing our databases, we don&#8217;t have multiple application layers in these tests and finding bottlenecks <em>should</em> be easy &#8211; it should be, right? ;-) Anyway, I hope to have some fun experiments with our mini-server.</p>
<h3><a href="http://2010.geecon.org/main/home" onclick="urchinTracker('/outgoing/2010.geecon.org/main/home?referer=');">GeeCON 2010</a></h3>
<p>The whole event was also a small GeeCON campain. People got some stickers and <span style="text-decoration: line-through;">[smycze]</span> with GeeCON branding. I&#8217;m planing to go there as it seems like an very amazing event&#8230; This year it&#8217;s in Poznań, and it&#8217;s being organized with cooperation of the Poznań and Polish JUGs. I&#8217;ll keep you up to date about upcomming Java Events &#8211; the next being SFI and then *something special* in April :-) Well then&#8230; <strong><span style="color: #f7d507;"><em>&#8220;Let&#8217;s move the Java World!&#8221;</em></span></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/coding/405/javacamp-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Current small project: GWT-Crossword</title>
		<link>http://www.blog.project13.pl/index.php/fun/383/current-small-project-gwt-crossword/</link>
		<comments>http://www.blog.project13.pl/index.php/fun/383/current-small-project-gwt-crossword/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 00:27:55 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[free software]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[gpl]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[jee]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[study]]></category>
		<category><![CDATA[webdeveloper]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=383</guid>
		<description><![CDATA[I am currently working on a simple but still quite fun/interesting (as is any project with a new framework :-)) webapp using Google Web Toolkit (it&#8217;s basically Google&#8217;s JEE framework for creating RIA). The webapp is an online crossword generator. The goal is to provide crosswords online and allow users solving them online with a [...]]]></description>
			<content:encoded><![CDATA[<p>I am currently working on a simple but still quite fun/interesting (as is any project with a new framework :-)) webapp using <a href="http://code.google.com/intl/pl/webtoolkit/" onclick="urchinTracker('/outgoing/code.google.com/intl/pl/webtoolkit/?referer=');"><strong>Google Web Toolkit</strong></a> (it&#8217;s basically Google&#8217;s JEE framework for creating <a href="http://en.wikipedia.org/wiki/Rich_Internet_application" onclick="urchinTracker('/outgoing/en.wikipedia.org/wiki/Rich_Internet_application?referer=');">RIA</a>). The webapp is an online crossword generator. The goal is to provide crosswords online and allow users solving them online with a nice and intuitive GUI etc&#8230; It would be cool if I&#8217;d manage to create this as an &#8220;embed on any website&#8221; script, but I can&#8217;t guarantee this functionality.</p>
<p>I&#8217;m coding this project to get used to some of the basic <strong><acronym title="Java Enterprise Edition">JEE</acronym></strong> stuff, such as <a href="https://www.hibernate.org/" onclick="urchinTracker('/outgoing/www.hibernate.org/?referer=');"><strong>Hibernate</strong></a> for example (it is quite amazing and very <em>elegant</em> &#8211; especially HQL), and to have a good time while coding in Java&#8230;</p>
<p>The source is avaiable under the AGPLv3 on github: <a href="http://github.com/ktoso/gwt-crossword" onclick="urchinTracker('/outgoing/github.com/ktoso/gwt-crossword?referer=');">http://github.com/ktoso/gwt-crossword</a><br />
At some places it is still a mess so please keep in mind that it&#8217;s still under initial development (and I&#8217;m having a tough time at the uni and can&#8217;t code gwt-crossword everyday :\), that aside, feel free to take a look on the source!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/fun/383/current-small-project-gwt-crossword/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery tricks 1: automatic-wslider</title>
		<link>http://www.blog.project13.pl/index.php/coding/345/jquery-tricks-1-automatic-wslider/</link>
		<comments>http://www.blog.project13.pl/index.php/coding/345/jquery-tricks-1-automatic-wslider/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 22:19:12 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[guide]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web dev]]></category>
		<category><![CDATA[webdeveloper]]></category>
		<category><![CDATA[webmaster]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=345</guid>
		<description><![CDATA[This time I&#8217;ll post some actual code. A client wanted me to write an &#8220;image slider&#8221;. You&#8217;ve probably seen lot&#8217;s of them online &#8211; and a whole lot of them is in flash &#8211; why? There is no need to involve flash in such a trivial task, and jQuery is more than up to the [...]]]></description>
			<content:encoded><![CDATA[<p>This time I&#8217;ll post some actual code. A client wanted me to write an &#8220;image slider&#8221;. You&#8217;ve probably seen lot&#8217;s of them online &#8211; and a whole lot of them is in flash &#8211; why? There is no need to involve flash in such a trivial task, and jQuery is more than up to the job :-) I used <strong>jQuery</strong> with the <strong>wslide plugin</strong>, it&#8217;s simple and quite neat. But it does not slide on it&#8217;s own. But thanks to it&#8217;s simplicity I was able add the functionality I needed in just a few lines of clean code. I used the <strong>timer</strong> plugin to &#8220;click&#8221; on the slider at some interval and voila &#8211; the birth of an automatic jquery image slider. Anyways, here&#8217;s thecode:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> canDo = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="coMULTI">/** plugin @author: http://www.webinventif.fr/wslide-plugin/ */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$<span class="br0">&#40;</span><span class="st0">&#39;#slidermenu, #slider, .cube&#39;</span><span class="br0">&#41;</span>.<span class="me1">mouseover</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; canDo = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">mouseout</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; canDo = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#39;#slider&#39;</span><span class="br0">&#41;</span>.<span class="me1">wslide</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width: <span class="nu0">900</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height: <span class="nu0">200</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pos: <span class="nu0">1</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fade: <span class="kw2">true</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; horiz: <span class="kw2">true</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; autolink: <span class="st0">&#39;slidermenu&#39;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; speed:<span class="nu0">300</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $.<span class="me1">timer</span><span class="br0">&#40;</span><span class="nu0">5000</span>, <span class="kw2">function</span> <span class="br0">&#40;</span>timer<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>canDo<span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="st0">&#39;#slidermenu a:last&#39;</span><span class="br0">&#41;</span>.<span class="me1">hasClass</span><span class="br0">&#40;</span><span class="st0">&#39;wactive&#39;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#39;#slidermenu a:first&#39;</span><span class="br0">&#41;</span>.<span class="me1">click</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#39;#slidermenu .wactive&#39;</span><span class="br0">&#41;</span>.<span class="me1">next</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">click</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/coding/345/jquery-tricks-1-automatic-wslider/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Toggle Syntax Highlighting in vim</title>
		<link>http://www.blog.project13.pl/index.php/coding/159/syntax-highlighting-in-vim/</link>
		<comments>http://www.blog.project13.pl/index.php/coding/159/syntax-highlighting-in-vim/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 15:42:14 +0000</pubDate>
		<dc:creator>Ktoso</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[gnu]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[terminal]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[webdeveloper]]></category>

		<guid isPermaLink="false">http://www.blog.project13.pl/?p=159</guid>
		<description><![CDATA[Just a quick vim tip today&#8230; Have you been coding/fixing stuff on the server over ssh using vim? I sure have, but was always wondering why the vim on my server wouldn&#8217;t highlight php&#8230; The solution is: :syntax on Whoa, 2 words, not 2 letters like usually! Thats pretty long for vim ain&#8217;t it? ;-)]]></description>
			<content:encoded><![CDATA[<p>Just a quick vim tip today&#8230; Have you been coding/fixing stuff on the server over ssh using vim? I sure have, but was always wondering why the vim on my server wouldn&#8217;t highlight php&#8230; The solution is:<strong><br />
</strong></p>
<p><strong>:syntax on</strong></p>
<p>Whoa, 2 words, not 2 letters like usually! Thats pretty long for vim ain&#8217;t it? ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blog.project13.pl/index.php/coding/159/syntax-highlighting-in-vim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

