<?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/"
	xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
>

<channel>
	<title>Dariusz Łuksza &#187; Dariusz Łuksza</title>
	<atom:link href="http://luksza.org/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://luksza.org</link>
	<description>myśli luźno zebrane ... ja i moja jaźń w intenecie</description>
	<lastBuildDate>Wed, 29 Feb 2012 10:11:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>

   <image>
    <title>Dariusz Łuksza</title>
    <url>http://0.gravatar.com/avatar/ed2d261ca5db36a17e690dc736dcd9ef.png?s=48</url>
    <link>http://luksza.org</link>
   </image>
		<item>
		<title>CodingDojo and gentle introduction into Fantom</title>
		<link>http://luksza.org/2012/codingdojo-and-gentle-introduction-into-fantom/</link>
		<comments>http://luksza.org/2012/codingdojo-and-gentle-introduction-into-fantom/#comments</comments>
		<pubDate>Wed, 29 Feb 2012 10:11:35 +0000</pubDate>
		<dc:creator>Dariusz Łuksza</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[CodingDojo]]></category>
		<category><![CDATA[fantom]]></category>

		<guid isPermaLink="false">http://luksza.org/?p=1000</guid>
		<description><![CDATA[Last Saturday I was participating in  CodingDojo organized by Szczecin JUG. Our task was to write simple parser that will take a text representation of minefield like &#8220;.*..*&#8221; (asterisk are mines, dots are empty fields) and transform it into string like this &#8220;1*11*&#8221;. In other words we was creating heart of the Saper game). It was [...]]]></description>
			<content:encoded><![CDATA[<p>Last Saturday I was participating in  CodingDojo organized by<a href="http://szczecin.jug.pl/" target="_blank"> Szczecin JUG</a>. Our task was to write simple parser that will take a text representation of minefield like &#8220;.*..*&#8221; (asterisk are mines, dots are empty fields) and transform it into string like this &#8220;1*11*&#8221;. In other words we was creating heart of the Saper game). It was unusual task because there was only one laptop and one projector, each of participants has 5 minutes to write some code (tests or implementation, of course we use TDD). After few hours of coding and discussions about approaches, <em>data structures</em> and algorithm that would be used we manage to write fully functional parser.</p>
<p>This was really strange experience for me, and to be honest I was little bit scared of &#8230; from one point of view this is strange, because I shared lots of code in EGit and other open source project and for sure I&#8217;m not scared by showing my code to other developers &#8230; but writing it in front of other people, and this filling that they are watching while I&#8217;m typing was really strange! But honestly I really like this and can recommend such experiment to everyone!</p>
<p>On my way back I&#8217;ve started thinking how same <em>quasi-aplication </em>could be implemented in <a href="http://fantom.org/" target="_blank">Fantom</a>. I&#8217;m almost sure that you are wondering &#8220;what the heck is Fantom&#8221;. Fantom is (yet another) JVM language &#8230; but it is quite different from others (at least from that I&#8217;ve herd about). What is different ? First of all it uses each own byte code; yes, this has some performance penalty, but with such approach its binaries can run on JVM, CLR, browser (yes its compile to JavaScript) and <a href="http://llvm.org/" target="_blank">LLVM</a>. Secondly it has build in test framework, build framework, modularity support, actors, <em>truly</em> immutable objects, object-to-string serialization etc. Last but not least, it distinguish <em>nullable</em> and <em>not-nullable</em> objects therefore you have null-contract build in in language syntax, compiler and documentation.  And of course it has support for functional programming and is statically typed &#8230; more information you  can find on fantom.org</p>
<p>Now when you know what is Fantom, we can dive into some code samples. My example application would be mentioned above minefield-parser. I would start from tests, and then move to implementation.</p>
<p>As I mentioned before Fantom has build in test framework, just create a file with fan extension, you can call it how you want but by convention file name is same as class name that would be inside (but this isn&#8217;t a hard rule). Yours test class need to extend Test (to be more specific <a href="http://fantom.org/doc/sys/Test.html" target="_blank">sys::Test</a>, <em>sys</em> is name of <a href="http://fantom.org/doc/docLang/Pods.html" target="_blank"><em>pod</em></a> (<em>pod</em>s are more or less equivalent with <em>jar</em>s)).</p>
<pre class="brush: java; highlight: [1,3,11]; title: ; notranslate">
class SaperTest : Test {

  Void testEmptyInput() {
    // given
    input := &quot;&quot;

    // when
    result := Parser().parse(input)

    // then
    verifyEq(result, &quot;&quot;)
  }
</pre>
<p>Test methods must return <em>Void</em> type (notice uppercased notation) and name must start from &#8216;test&#8217; (same as in JUnit3). To assert use <a href="http://fantom.org/doc/sys/Test.html#verify" target="_blank"><em>verify</em></a>XY methods, simple as that. Below you will see full test suite for my Parser.parse method, you don&#8217;t need to scan/read all of them just look on first two.</p>
<pre class="brush: java; first-line: 15; highlight: [20]; title: ; notranslate">
  Void testTrowErrWhenIllegalCharactedIsPresent() {
    // given
    input := &quot;.a&quot;

    // when
    verifyErr(ArgErr#) {
      Parser().parse(input)
    }
  }
</pre>
<p>As you can notice,  first test has a strange notation in &#8216;then&#8217; section, there is <em><a href="http://fantom.org/doc/sys/Test.html#verifyErr" target="_blank">verifyErr</a>(ArgErr#) { Parser().parse(input) }</em>, what it means ? This is an assertion method that check does given line throws and <a href="http://fantom.org/doc/sys/ArgErr.html" target="_blank"><em>ArgErr</em></a> (with is an argument exception). <em>ArgErr#</em> is more or less equivalent to <em>ArgErr.class</em> (or <em>IllegalArgumentException.class</em>) in java. Second parameter for <em>verifyErr</em> method (yes, statement in curly brackets is an parameter) is actually code that should throw given exception. This actually example of passing function as a parameter and when it last (or single parameter) it can be passed as a block statement after method non-functional parameters.</p>
<p>Another thing that you can notice is that there is no <em>new</em> keyword or equivalent. Fantom constructors are some how similar to factory methods, you just mark them with &#8216;<em>new</em>&#8216; keyword in class definition fallowed with unique name (make is default one) and you have yours constructor.</p>
<p>Same as in other modern JVM languages default access level to method/constructor/class is &#8216;public&#8217; and you don&#8217;t need to type it explicitly, also semicolons are not required at end of the line. Another commonly used feature in new JVM language is type inference, but comparing to Scala&#8217;s type inference, one used in Fantom is really simple, it can only infer variable types, you must explicitly declare return type and parameters types.</p>
<p><a href="https://gist.github.com/1939503/c18af2f9ea0ae516a929e14069c946858223397a#file_saper_test.fan">Rest of test test code</a> is pretty much the same, so lets move to more interesting part &#8230; <a href="https://gist.github.com/1939503/c18af2f9ea0ae516a929e14069c946858223397a#file_saper.fan" target="_blank">the implementation</a>! Method <em>parse</em> should be understandable for every one since it is only calling private methods.</p>
<pre class="brush: java; highlight: [8,9]; title: ; notranslate">
class Parser {

  Str parse(Str input) {
    lines := input.splitLines
    validateInput(lines)
    result := createMatrix(lines.size, lines[0].size)

    lines.each |line, i| {
      parseLine(line, result, i);
    }

    return convertToStr(result)
  }
</pre>
<p>Only code in line 8 and 9 could be little bit strange. So <em>lines</em> variable is an <a href="http://fantom.org/doc/sys/List.html" target="_blank"><em>List</em></a> of <a href="http://fantom.org/doc/sys/Str.html" target="_blank"><em>Str</em></a>&#8216;s (yes it is shorten notation of String), and we are calling <a href="http://fantom.org/doc/sys/List.html#each" target="_blank"><em>each</em></a> method on this array (when method takes no arguments or one function argument brackets can be skip); <em>each</em> method takes function with two parameters first is value of element, second is it position. Notation <em>|value, i| { parseLine(&#8230;) }</em> is declaration of function that takes two parameters with name <em>value</em> and <em>i</em> , types of those parameters are infer from <em>each</em> method parameter signature. So, this simple two line notation calls <em>parseLine</em> method on each input line, it is that simple! Lets move with rest of the code!</p>
<pre class="brush: java; first-line: 15; highlight: [17,18]; title: ; notranslate">
  private Void validateInput(Str[] lines) {
    firstLineSize := lines[0].size
    if (!lines.all |line| {
      line.size == firstLineSize &amp;&amp; line.all |c| { c == '.' || c == '*' }
    })
      throw ArgErr(&quot;Line size mismatch or illegal character was used&quot;)
  }
</pre>
<p>Another strange notation can be found on line 17 and 18. In both lines we are calling <a href="http://fantom.org/doc/sys/Str.html#all" target="_blank"><em>all</em></a> method that is defined on <em>Str</em> and <em>List</em> classes. In both cases it checks does all elements matches given boolean condition. This &#8220;simple&#8221; if statement checks does each line have same number of elements and don&#8217;t contain other chars then dots and asterisk. Yet another hint, if yours function/closure/method has only one statement you don&#8217;t need to use <em>return</em> keyword.</p>
<pre class="brush: java; first-line: 23; highlight: [24,25,26]; title: ; notranslate">
  private Int[][] createMatrix(Int row, Int cols) {
    Int[][] result := [,]
    row.times {
      result.add([,].fill(0, cols))
    }

    return result
  }
</pre>
<p>Next <em>strange</em> notation you can find in line 24. What the heck is that <em>[,]</em> ? This is sort cut for creating empty <em>List</em>. As you can notice type inference in Fantom works both ways, now it figures out that this empty list should be type of <em>List[][]</em>.</p>
<p>In Fantom you don&#8217;t need to use for loops to repeat some code X times. There is <a href="http://fantom.org/doc/sys/Int.html#times" target="_blank"><em>times</em></a> method on Int type, it takes function as a argument and it will call this function X times. Example of using this method can be found in line 25.</p>
<p>In line 26 you  can find example usage of <a href="http://fantom.org/doc/sys/List.html#fill" target="_blank"><em>fill</em></a> method defined on <em>List</em> class. An empty list is created and then filled with zeros. So method <em>createMattrix</em> will return matrix with given size filled in with zeros. Simple as that .. and it only has 4 lines of code!</p>
<pre class="brush: java; first-line: 32; highlight: [33,42]; title: ; notranslate">
  private Void parseLine(Str input, Int[][] result, Int i) {
    input.each |c, j| {
      if (c == '*') {
        prevCol := j - 1
        nextCol := j + 1
        result[i][j] = -10
        if (j &gt; 0)
          result[i][prevCol]++
        if (j &lt; input.size - 1)
          result[i][nextCol]++
        range := prevCol.max(0)..nextCol.min(result[i].size - 1)
        if (i &gt; 0)
          incrementInRange(result[i - 1], range)
        if (i &lt; result.size -1)
          incrementInRange(result[i + 1], range)
      }
    }
  }
</pre>
<p>In line 33 we meet once again <em>each</em> method, I hope that you already know what it does <img src='http://luksza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Another interesting thing can be found in line 42; double dot operator. This is a code sugar for creating <a href="http://fantom.org/doc/sys/Range.html" target="_blank"><em>Range</em></a> objects (it will be used in line 52), they are simplifying iterating over only range of elements. You just pass bottom boundary double-dots upper boundary and Fantom generates everything in between. There is also &#8216;<em>..&lt;</em>&#8216; operator  for exclusive range.</p>
<pre class="brush: java; first-line: 51; highlight: [52]; title: ; notranslate">
  private Void incrementInRange(Int[] row, Range range) {
    row.eachRange(range) |value, p| {
      row[p]++
    }
  }
</pre>
<p><a href="http://fantom.org/doc/sys/List.html#eachRange" target="_blank"><em>eachRange</em></a>, yet another useful and interesting method in <em>List</em> class! I&#8217;m using it in line 52 to increment values in neighbourhood of filed with mine. Here I&#8217;m only interested in position of element (the <em>p</em> variable), but because position is second parameter of function I also need declare variable that will hold element value.</p>
<p>This is pretty much it, now rest of code in this <a href="https://gist.github.com/1939503" target="_blank">gist</a> should be understandable for you, if not (or you have further questions) leave me comment under this post.</p>
 <img src="http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=1000" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://luksza.org/2012/codingdojo-and-gentle-introduction-into-fantom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Automatic Screen Detection And Configuration Under Awesome WM</title>
		<link>http://luksza.org/2012/automatic-screen-detection-and-configuration-under-awesome-wm/</link>
		<comments>http://luksza.org/2012/automatic-screen-detection-and-configuration-under-awesome-wm/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 18:37:40 +0000</pubDate>
		<dc:creator>Dariusz Łuksza</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[awesome]]></category>
		<category><![CDATA[lua]]></category>
		<category><![CDATA[screen detect]]></category>
		<category><![CDATA[udev]]></category>

		<guid isPermaLink="false">http://luksza.org/?p=995</guid>
		<description><![CDATA[Recently I&#8217;m mainly interested in automating my day-to-day tasks on Linux laptop. I&#8217;ve started with automating back-up process, now come time to automate external screen detection (and configuration). For couple of months I was struggling with ZSH history to find XRandR commands that enables and disables external screen. During that time I was almost sure [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I&#8217;m mainly interested in automating my day-to-day tasks on <em>Linux</em> laptop. I&#8217;ve started with <a href="http://luksza.org/2011/automatic-backup-in-linux/" target="_blank">automating back-up process</a>, now come time to automate external screen detection (and configuration).</p>
<p>For couple of months I was struggling with <em>ZSH</em> history to find <a href="http://www.x.org/wiki/Projects/XRandR" target="_blank"><em>XRandR</em></a> commands that enables and disables external screen. During that time I was almost sure that there is another way of handling this task &#8230; since eg. <a href="http://www.gnome.org/" target="_blank">Gnome</a> was doing it automatically. First idea was to find part of <a href="http://www.gnome.org/" target="_blank">Gnome</a> that is responsible for this feature and simply just integrate it with <a href="http://awesome.naquadah.org/" target="_blank"><em>Aersome WM</em></a>. But my from-time-to-time raw searches didn&#8217;t snow any interesting resources. Therefore I&#8217;ve decided that I must done it by my self &#8230; this is how <a href="https://github.com/dluksza/screenful" target="_blank"><em>screenful</em></a> project was born.</p>
<p>What is <a href="https://github.com/dluksza/screenful" target="_blank"><em>screenful</em></a> ?</p>
<p>It is simple extension to <a href="http://awesome.naquadah.org/" target="_blank"><em>Awesome WM</em></a> that allows you (with little knowledge of Lua and <a href="http://www.x.org/wiki/Projects/XRandR" target="_blank"><em>XRandR</em></a> params) automatically configure connected screen. It integrates <a href="https://en.wikipedia.org/wiki/Udev" target="_blank"><em>udev</em></a> <em>drm/change</em> event with <a href="http://awesome.naquadah.org/" target="_blank"><em>Awesome</em></a> and <a href="http://www.x.org/wiki/Projects/XRandR" target="_blank"><em>XRandR</em></a>. First of all there is <a href="https://en.wikipedia.org/wiki/Udev" target="_blank"><em>udev</em></a> rule that when <em>drm/change</em> event appears inform <a href="https://github.com/dluksza/screenful" target="_blank"><em>screenful</em></a> about output change in particular card. Then <a href="https://github.com/dluksza/screenful" target="_blank"><em>screenful</em></a> will &#8220;<em>calculate</em>&#8221; which card output was connected/disconnected, <em>computes</em> screen id based on <a href="https://en.wikipedia.org/wiki/EDID" target="_blank"><em>EDID</em></a> and finally run configured action. When configuration file doesn&#8217;t have specified configuration for this id then screenles will append commented configuration for it and run default action.</p>
<p>What is unique in <a href="https://github.com/dluksza/screenful">screenful</a> ?</p>
<p>Same as <a href="http://awesome.naquadah.org/doc/api/" target="_blank"><em>Awesome WM</em></a> config file, the <a href="https://github.com/dluksza/screenful" target="_blank"><em>screenful</em></a> config file is a Lua script! Therefore you can do <strong>anything you can imagine</strong> when external monitor is connected/disconnected. For example you can switch mplayer default audio output when you HD TV set is connected using HDMI cable then change it back when you disconnecting HDMI cable. Also you can reorganize yours tags and windows using <a href="http://awesome.naquadah.org/doc/api/" target="_blank">Awesome Lua API</a> &#8230; and more &#8230; Honestly I doubt that you can achieve similar behaviour in any different Window Manager <img src='http://luksza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Project is<a href="https://github.com/dluksza/screenful" target="_blank"> hosted on github</a> if you encounter any issues or have ideas about new functionalities in <a href="https://github.com/dluksza/screenful" target="_blank">screenful</a> feel free to fork me, fill a bug or mail me <img src='http://luksza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
 <img src="http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=995" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://luksza.org/2012/automatic-screen-detection-and-configuration-under-awesome-wm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Automatic backup in Linux</title>
		<link>http://luksza.org/2011/automatic-backup-in-linux/</link>
		<comments>http://luksza.org/2011/automatic-backup-in-linux/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 18:06:49 +0000</pubDate>
		<dc:creator>Dariusz Łuksza</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[back up]]></category>
		<category><![CDATA[dbus]]></category>
		<category><![CDATA[udev]]></category>

		<guid isPermaLink="false">http://luksza.org/?p=974</guid>
		<description><![CDATA[Some time ago I&#8217;ve started backing up my laptop hard drive in any case of failure. Until today I was simply connecting external back-up-drive and manually launching mount &#38;&#38; rsync command from zsh history. But this requires that always after connecting this special device I need to go to terminal, log in as root then [...]]]></description>
			<content:encoded><![CDATA[<p>Some time ago I&#8217;ve started backing up my laptop hard drive in any case of failure. Until today I was simply connecting external back-up-drive and manually launching <em>mount &amp;&amp; rsync</em> command from zsh history. But this requires that always after connecting this special device I need to go to terminal, log in as root then find this back up command and run it.</p>
<p>Recently I was wondering how this process could be improved or even done automatically. I had few requirements:</p>
<ul>
<li>it should be fully automated</li>
<li>system should inform me that back up process was started and that it ends</li>
<li>this notification should be done as some system pop up in X windows</li>
</ul>
<p>So I&#8217;ve come with a solution that connects <em>udev</em>, <em>DBus notification</em> and <a href="http://awesome.naquadah.org/" target="_blank">awesome wm</a> <a href="http://awesome.naquadah.org/wiki/Naughty" target="_blank">naughty library</a> &#8230; and it is really simple <img src='http://luksza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>How it works ? When you connects back-up-device <em>udev</em> will pick up this event, create a symbolic link to <em>/dev/backup</em>, then launch backup script. This script will send a notification through <em>DBus</em>, this event will be received by <em>naughty</em> and displayed as a simple notification in <em>Awesome WM</em>. After sending notification signal the backup script will mount given device and launch <em>rsync</em> command. After successful synchronization backup device will be unmonted and another notification signal will be send to inform you that you can now disconnect it.</p>
<p>How to achieve this ?</p>
<p>First of all we need to figure out UUID of our back up device (I assume that <em>/dev/sdb2</em> is yours back-up-partition) :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># blkid /dev/sdb2</span>
<span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>sdb2: <span style="color: #007800;">UUID</span>=<span style="color: #ff0000;">&quot;97377fed-edaf-407b-9e02-5c6cecd6dceb&quot;</span> <span style="color: #007800;">SEC_TYPE</span>=<span style="color: #ff0000;">&quot;ext2&quot;</span> <span style="color: #007800;">TYPE</span>=<span style="color: #ff0000;">&quot;ext3&quot;</span></pre></div></div>

<p>Then we need to create new udev rule in <em>/etc/udev/rules.d</em> we can call it <em>99-backup.rules</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="udev" style="font-family:monospace;">ENV{ID_FS_UUID}==&quot;97377fed-edaf-407b-9e02-5c6cecd6dceb&quot;, SYMLINK+=&quot;backup&quot;
ACTION==&quot;add&quot;, ENV{ID_FS_UUID}==&quot;97377fed-edaf-407b-9e02-5c6cecd6dceb&quot;, RUN+=&quot;backup&quot;</pre></div></div>

<p>Of course you need to replace my UUID with one you get from <em>blkid</em> command. Those two lines are responsible for creating symbolic link called <em>backup</em> in /dev directory to device with given UUID; second line will launch <em>backup</em> script when device with given UUID is added.</p>
<p>Finally we need to create our backup script and put it into <em>/lib/udev</em> directory. Here is content of this script:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/sh</span>
&nbsp;
<span style="color: #666666; font-style: italic;">### CONFIGURATION ###</span>
<span style="color: #007800;">USER</span>=<span style="color: #ff0000;">&quot;lock&quot;</span>
<span style="color: #007800;">MSG_TIMEOUT</span>=-<span style="color: #000000;">1</span>
&nbsp;
<span style="color: #666666; font-style: italic;">### DO NOT MODIFY ###</span>
<span style="color: #000000; font-weight: bold;">function</span> show_notification<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span>
	<span style="color: #c20cb9; font-weight: bold;">su</span> <span style="color: #007800;">$USER</span> <span style="color: #660033;">-c</span> <span style="color: #ff0000;">&quot;export DISPLAY=':0.0'; <span style="color: #000099; font-weight: bold;">\
</span>		export XAUTHORITY='/home/<span style="color: #007800;">$USER</span>/.Xauthority'; <span style="color: #000099; font-weight: bold;">\
</span>		/usr/bin/dbus-send --type=method_call --dest=org.freedesktop.Notifications <span style="color: #000099; font-weight: bold;">\
</span>			/org/freedesktop/Notifications  org.freedesktop.Notifications.Notify string:'' <span style="color: #000099; font-weight: bold;">\
</span>			uint32:0 string:'' string:'$1' string:'' array:string:'' array:string:'' int32:<span style="color: #007800;">$MSG_TIMEOUT</span>&quot;</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> backup<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#123;</span>
	show_notification <span style="color: #ff0000;">&quot;Backup process started! Do NOT disconnect backup device.&quot;</span>
	<span style="color: #c20cb9; font-weight: bold;">mount</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>backup <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>backup
	ionice <span style="color: #660033;">-c</span> <span style="color: #000000;">3</span> rsync <span style="color: #660033;">-az</span> <span style="color: #660033;">--delete</span> <span style="color: #660033;">--exclude</span>=<span style="color: #000000; font-weight: bold;">/</span>dev <span style="color: #660033;">--exclude</span>=<span style="color: #000000; font-weight: bold;">/</span>mnt <span style="color: #660033;">--exclude</span>=<span style="color: #000000; font-weight: bold;">/</span>media <span style="color: #660033;">--exclude</span>=<span style="color: #000000; font-weight: bold;">/</span>run <span style="color: #660033;">--exclude</span>=<span style="color: #000000; font-weight: bold;">/</span>proc <span style="color: #660033;">--exclude</span>=<span style="color: #000000; font-weight: bold;">/</span>tmp <span style="color: #660033;">--exclude</span>=<span style="color: #000000; font-weight: bold;">/</span>sys <span style="color: #660033;">--exclude</span>=<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>log <span style="color: #660033;">--exclude</span>=<span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>run <span style="color: #000000; font-weight: bold;">/</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>backup
	<span style="color: #c20cb9; font-weight: bold;">umount</span> <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>backup
	show_notification <span style="color: #ff0000;">&quot;Backup process successed! You can disconnect backup device.&quot;</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
backup <span style="color: #000000; font-weight: bold;">&amp;</span></pre></div></div>

<p>In this file you only need to change <em>USER</em> variable to yours <em>UNIX</em> user name, also you can adjust <em>MSG_TIMEOUT</em> to your needs (-1 means that default value will be taken). Most difficult part in this script was to figure out how to send <em>DBus</em> notification from <em>root</em> to regular user, since all window managers create and listen on theirs own session scoped buses. As you can notice we can force <em>dbus-send</em> command to send signal to proper bus instance by executing this command on behalf of  given user and with exported <em>DISPLAY</em> and <em>XAUTHORITY</em> variables.</p>
<p>Full source code is available on <a href="https://github.com/dluksza/automatic-back-up" target="_blank">github</a>. Have a nice and pleasant back up&#8217;s <img src='http://luksza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
 <img src="http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=974" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://luksza.org/2011/automatic-backup-in-linux/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>EGit Iteractive Adding</title>
		<link>http://luksza.org/2011/egit-iteractive-adding/</link>
		<comments>http://luksza.org/2011/egit-iteractive-adding/#comments</comments>
		<pubDate>Tue, 04 Oct 2011 23:03:43 +0000</pubDate>
		<dc:creator>Dariusz Łuksza</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[compare editor]]></category>
		<category><![CDATA[egit]]></category>
		<category><![CDATA[interactive adding]]></category>
		<category><![CDATA[synchronize view]]></category>

		<guid isPermaLink="false">http://luksza.org/?p=958</guid>
		<description><![CDATA[So what is &#8220;interactive adding&#8221; in git? Imagine situation when you change two or three lines in file (this could be also two or three blocks/methods), then you realize that you will want to commit those changes in two (three or more) separate commits. Here is Al Blue&#8217;s description how interactive adding works in native [...]]]></description>
			<content:encoded><![CDATA[<p>So what is &#8220;interactive adding&#8221; in git? Imagine situation when you change two or three lines in file (this could be also two or three blocks/methods), then you realize that you will want to commit those changes in two (three or more) separate commits.</p>
<p>Here is Al Blue&#8217;s description how <em>interactive adding</em> works in native git: <a style="font-size: 15px; font-weight: bold;" href="http://alblue.bandlem.com/2011/10/git-tip-of-week-interactive-adding.html">Git Tip of the Week: Interactive Adding</a></p>
<p>What about EGit? Honestly this is currently supported &#8230; but it isn&#8217;t really straight forward to access. You need to select a file then choose from context menu <em>Team</em> &gt; <em>Compare With</em> &gt; <em>Git Index</em> and then you can easily move changes around, finally when you are happy with both versions (left is working tree and right is one that will be staged/added to index) just save compare editor contents. Version from right hand side will be added to index as it is in this editor.</p>
<p>OK, so now you can easily stage and unstage partial changes &#8230; maybe you would also like to partial replace staged changes by version in HEAD? Currently in version 1.1 you can compare version from git index with HEAD version using context menu <em>Team</em> &gt; <em>Compare With</em> &gt; <em>Git Index with HEAD</em>, but you cannot overwrite anything &#8230; yet, because (hopefully) in 1.2 such option will be available. <a href="http://egit.eclipse.org/r/#change,4239" target="_blank">Here is patch</a> that adds this functionality (to be honest this is a side effect&#8230;).</p>
<p>And what about (my favorite) Synchronize View? Unfortunately EGit 1.1 don&#8217;t allow to move any changes in compare editors launched from Synchronize View &#8230; but with change mentioned above and with <a href="http://egit.eclipse.org/r/#change,4196" target="_blank">this one</a> both features would be available from <em>Git Commits</em> model (before it was named as <em>Git Change Set</em> model)</p>
<p>Here is a short screen cast that shows how this work:</p>
<p style="text-align: center;"> <object width="500" height="281"><param name="movie" value="http://www.youtube.com/v/d94RI9QA-RU?version=3"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/d94RI9QA-RU?version=3" type="application/x-shockwave-flash" width="500" height="281" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
 <img src="http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=958" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://luksza.org/2011/egit-iteractive-adding/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>End of Google Summer of Code 2011</title>
		<link>http://luksza.org/2011/end-of-google-summer-of-code-2011/</link>
		<comments>http://luksza.org/2011/end-of-google-summer-of-code-2011/#comments</comments>
		<pubDate>Wed, 24 Aug 2011 21:32:37 +0000</pubDate>
		<dc:creator>Dariusz Łuksza</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[soc11]]></category>
		<category><![CDATA[egit]]></category>
		<category><![CDATA[gsoc11]]></category>

		<guid isPermaLink="false">http://luksza.org/?p=951</guid>
		<description><![CDATA[Officially coding period in Google Summer of Code was closed last Monday (August 22nd) , so this is good time to sum up last three months of my work on EGit project. During that time I&#8217;ve manage to contribute 32 commits (29 of them are already merged into master, rest is pending for review). I [...]]]></description>
			<content:encoded><![CDATA[<p>Officially coding period in Google Summer of Code was closed last Monday (August 22nd) , so this is good time to sum up last three months of my work on EGit project.</p>
<p>During that time I&#8217;ve manage to contribute 32 commits (29 of them are already merged into master, rest is pending for review). I have also two not finished changes in my local git repository. First is about supporting non-workspace files in <em>Workspace</em> presentation model in sync-view, second is refactoring of current Git Change Set implementation.</p>
<p>Here is detailed list of things that was done during GSoC and are available in current nightly build:</p>
<ul>
<li>improved synchronize wizard</li>
<li><em>Workspace</em> presentation model will refresh after repository change</li>
<li>pushing from sync view to multiple repositories is now possible</li>
<li><em>Git Change Set</em> presentation model will be refreshed after workspace change</li>
<li>context menu in synchronize view was cleaned up and git actions are shown for multiple selections</li>
<li>synchronization on folder level is now possible and it will narrow results just for selected folder (when synchronization is launched for project then results will show changes in whole repository)</li>
<li>local changes can be drag and dropped between <em>&lt;working tree&gt;</em> and <em>&lt;staged changes&gt;</em> nodes in Git Change Set presentation model</li>
</ul>
<p>Performance improvements for Workspace presentation model are still awaiting for review in Gerrit. Some part of performance and memory usage improvements for <em>Git Change Set</em> are also pending in Gerri, I&#8217;m currently working on rest of required refactoring in <em>Git Change Set</em> presentation model.</p>
<p>I want to thank my mentor Matthias Sohn for his commitment in GSoC, for reviewing my patches and his feedback. It was a great pleasure working  with him! <img src='http://luksza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
 <img src="http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=951" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://luksza.org/2011/end-of-google-summer-of-code-2011/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Progress on non-workspace files in Workspace presentation model</title>
		<link>http://luksza.org/2011/progress-on-non-workspace-files-in-workspace-presentation-model/</link>
		<comments>http://luksza.org/2011/progress-on-non-workspace-files-in-workspace-presentation-model/#comments</comments>
		<pubDate>Mon, 15 Aug 2011 22:13:37 +0000</pubDate>
		<dc:creator>Dariusz Łuksza</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[soc11]]></category>
		<category><![CDATA[egit]]></category>
		<category><![CDATA[non-workspace]]></category>
		<category><![CDATA[synchronize view]]></category>

		<guid isPermaLink="false">http://luksza.org/?p=940</guid>
		<description><![CDATA[For last three weeks I was working on including non-workspace files in Workspace presentation model in Synchronize View. This idea can sounds weird since the Workspace presentation model was designed to show only changed files that are in Eclipse workspace &#8230; but there are some use cases in which such behavior seams to be reasonable (eg. [...]]]></description>
			<content:encoded><![CDATA[<p>For last three weeks I was working on including non-workspace files in <em>Workspace</em> presentation model in Synchronize View. This idea can sounds weird since the <em>Workspace</em> presentation model was designed to show only changed files that are in Eclipse workspace &#8230; but there are some use cases in which such behavior seams to be reasonable (eg. EGit and JGit projects doesn&#8217;t import repository root into workspace only projects are imported and files like master pom.xml, README, LICENCE and so on are left outside workspace).</p>
<p>If you don&#8217;t import all data into Eclipse workspace you won&#8217;t see any incoming nor outgoing changes. Even more, after merge/rebase actions changes in non-workspace files will magically appear in those resources and can even brake something (eg. massed up in master pom.xml file).</p>
<p>So, what is current status ? First of all I want to point that I&#8217;m describing here current situation in my <strong>working copy</strong>, described here changes currently are <strong>not</strong> available in public. After hours of debugging, code analysis and rewriting my code I&#8217;ve manage to show some indication in synchornize view that there are some non-workspace chagnes. The next step will be to show what particular file was changed and then enable all operations like <em>overwrite</em>, <em>mark as merged</em>, etc.</p>
<p>Here is a screenshot showing current status:</p>
<p style="text-align: center;"><a href="http://luksza.org/wp-content/uploads/2011/08/egit-non-workspace1.png"><img class="aligncenter size-thumbnail wp-image-942" title="Non-workspace files in Workspace presenation model" src="http://luksza.org/wp-content/uploads/2011/08/egit-non-workspace1.png" alt="Non-workspace files in Workspace presenation model" width="433" height="411" /></a><a href="http://luksza.org/wp-content/uploads/2011/08/egit-non-workspace.png"><br />
</a>As you can see there is <em>home</em> folder in sync results. It even have expand indicator (but after expanding it there is nothing inside). I suppose that on windows this folder will correspond to drive letter, but I&#8217;m not sure here.  Now I only need to <em>tell</em> Team Framework that there are some files inside <em>home</em> node &#8230;</p>
<p>This seams to be quite easy task, since parent folder is already included in view &#8230; but this isn&#8217;t that easy. First of all <em>Workspace</em> model is based on <em>IResource</em>&#8216;s with are manageable by Eclipse platform. Of course I can create such resource using <em>IWorkspaceRoot.getFolder()</em> and <em>IWorkspaceRoot.getFile()</em>. Unfortunately non-workspace resources created by those two methods will return theirs first segment (on unix system it will be usually /home) as theirs project. Of course such project doesn&#8217;t exist in workspace therefore this node is empty.</p>
<p>Honestly speaking I currently don&#8217;t have any good ides how to move things forward &#8230; as usually I&#8217;ll dive into debugging and code analysis &#8230;</p>
<p>Any hints and ideas from the community are <strong>kindly welcome</strong>!</p>
 <img src="http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=940" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://luksza.org/2011/progress-on-non-workspace-files-in-workspace-presentation-model/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Android workshops in Szczecin</title>
		<link>http://luksza.org/2011/android-workshops-in-szczecin/</link>
		<comments>http://luksza.org/2011/android-workshops-in-szczecin/#comments</comments>
		<pubDate>Sat, 23 Jul 2011 02:34:20 +0000</pubDate>
		<dc:creator>Dariusz Łuksza</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[szczecin]]></category>
		<category><![CDATA[SzJUG]]></category>
		<category><![CDATA[worksjop]]></category>

		<guid isPermaLink="false">http://luksza.org/?p=932</guid>
		<description><![CDATA[Recently we have huge moments in Java oriented area in Szczecin. W had JDK7 launch party &#8230; and now we (as a Szczecin Java User Group) are organizing all day long Android workshops. More information you can found on our mailing list and registration page.]]></description>
			<content:encoded><![CDATA[<p>Recently we have huge moments in Java oriented area in Szczecin. W had <em><a href="http://luksza.org/2011/java7-launch-party-szczecin/" target="_blank">JDK7 launch party</a></em> &#8230; and now we (as a <a href="http://szczecin.jug.pl/" target="_blank">Szczecin Java User Group</a>) are organizing all day long Android workshops. More information you can found <a href="https://groups.google.com/group/szczecin-jug/browse_thread/thread/a27a0a29c3dc3208" target="_blank">on our mailing list</a> and <a href="http://www.eventbrite.com/event/1921742985" target="_blank">registration page</a>.</p>
 <img src="http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=932" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://luksza.org/2011/android-workshops-in-szczecin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Huge performance boost for EGit sync-view</title>
		<link>http://luksza.org/2011/huge-performance-boost-for-egit-sync-view/</link>
		<comments>http://luksza.org/2011/huge-performance-boost-for-egit-sync-view/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 20:20:30 +0000</pubDate>
		<dc:creator>Dariusz Łuksza</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[english]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[soc11]]></category>
		<category><![CDATA[egit]]></category>
		<category><![CDATA[gsoc11]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[synchronize view]]></category>

		<guid isPermaLink="false">http://luksza.org/?p=927</guid>
		<description><![CDATA[For last few days I was working on EGit Synchronize View performance, especially on Workspace presentation model (the Git Change Set is next on my list ). My starting point was 1m 40s to compare two linux kernel versions, v2.6.36 versus v2.6.38-rc2. Such result seams to be very good, but you need to know that [...]]]></description>
			<content:encoded><![CDATA[<p>For last few days I was working on EGit Synchronize View performance, especially on <em>Workspace</em> presentation model (the <em>Git Change Set</em> is next on my list <img src='http://luksza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ). My starting point was 1m 40s to compare two linux kernel versions, v2.6.36 versus v2.6.38-rc2. Such result seams to be very good, but you need to know that it was achived on SSD hard drive and comparing to regular HDD it would be much worst (maybe more then 3 or 4 minutes).</p>
<p>What can be improved ? Fist of all, current implementation whenever it is asked for members of particular folder it <em>opens repository</em><span style="color: #ff9900;">*</span> and read data directly from it. Of course there is a cashing mechanism, but it is only on single resource level. Therefore when you are launching synchronization on repository that have about 300 folders, current implementation will create and configure 300 <em>connections<span style="color: #ff9900;">*</span></em> to repository to read data and then will cache it.</p>
<p>So, my idea was to create only one <em>connection<span style="color: #ff9900;">*</span>,</em> read all data at once and put them into global cache. This cache will be used whenever any list of members for given folder will be required. This approach gives about 2.5x performance boost to synchronization (from 1m 40s down to 40s). This result looks much better and maybe on HDD this action will take less then 2 minutes &#8230; but this isn&#8217;t over <img src='http://luksza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Reading members of folder is one thing, but getting information about particular file (it is changed, added or removed and does this change is incoming, outgoing or conflicting) is another. Currently we are reusing default implementation of SyncInfo class from Team Framework. This is really good implementation &#8230; when you cannot obtain such information from version control system. In Git  we have SHA-1 for each file and folder version and we didn&#8217;t have to compare file contents to check they are similar or not, comparing SHA-1 is sufficient. This should save lots of CPU time, disk IO&#8217;s and developer time waiting for synchronization to finish <img src='http://luksza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>Now when I already have cache that contains list of all changed resources it was natural thing to add information about change type to it. Then whenever Team Framework need to know change type it can be easily obtained from this cache &#8230; no IO&#8217;s are needed, no comparison just read from in-memory-cache and return proper value.</p>
<p>I&#8217;m sure that you are wondering how fast synchronization can be now &#8230; I can only that it is <strong>REALLY</strong> fast &#8230; as you can remember my stating point was <strong>1m 40s,</strong> now same comparison will finish in less than <strong>7s</strong>!! This means that now synchronization will be <strong>14 times</strong> faster then before! What this means for a regular user? Well, it meas that you will get results of &#8216;<em>Synchronize Workspace</em>&#8216; action almost instantly.</p>
<p>Unfortunately, mentioned above changes are sill awaiting for review in <a href="http://egit.eclipse.org/r/" target="_blank">gerrit</a>, you can grab them from change <a href="http://egit.eclipse.org/r/#change,3891" target="_blank">#3891</a> and build it locally. I hope this will be included in 1.1 release &#8230;</p>
<p><span style="color: #ff9900;">*</span> jgit uses concept of walks (with filters) through repository, but I&#8217;ve used more commonly recognized terminology here</p>
 <img src="http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=927" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://luksza.org/2011/huge-performance-boost-for-egit-sync-view/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Java7 Launch Party @Szczecin</title>
		<link>http://luksza.org/2011/java7-launch-party-szczecin/</link>
		<comments>http://luksza.org/2011/java7-launch-party-szczecin/#comments</comments>
		<pubDate>Fri, 15 Jul 2011 15:36:00 +0000</pubDate>
		<dc:creator>Dariusz Łuksza</dc:creator>
				<category><![CDATA[english]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jdk7]]></category>
		<category><![CDATA[szczecin]]></category>
		<category><![CDATA[SzJUG]]></category>

		<guid isPermaLink="false">http://luksza.org/?p=917</guid>
		<description><![CDATA[Szczecin Java User Group is organizing a Launch Party event for JDK7. There would be a short introduction of new features in Java lanuage and API&#8217;s presented by Filip &#8216;Filus&#8217; Pająk. Filip will be also speaking about Java7 syntax support in popular IDE&#8217;s like InteliJ Idea and Eclipse IDE. As usually on ours meeting there [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://luksza.org/wp-content/uploads/2011/07/java7-tshirt-front.jpg"><img class="size-thumbnail wp-image-915 alignleft" style="margin: 5px;" title="Java7 T-Shirt front" src="http://luksza.org/wp-content/uploads/2011/07/java7-tshirt-front-150x150.jpg" alt="Java7 T-Shirt front" width="150" height="150" /></a><a href="http://luksza.org/wp-content/uploads/2011/07/java7-tshirt-back.jpg"><img class="size-thumbnail wp-image-916 alignleft" style="margin: 5px;" title="Java7 T-Shirt back" src="http://luksza.org/wp-content/uploads/2011/07/java7-tshirt-back-150x150.jpg" alt="Java7 T-Shirt back" width="150" height="150" /></a><a href="http://szczecin.jug.pl" target="_blank">Szczecin Java User Group</a> is organizing a Launch Party event for JDK7. There would be a short introduction of new features in Java lanuage and API&#8217;s presented by <a href="http://pacykarz.blogspot.com/" target="_blank">Filip &#8216;Filus&#8217; Pająk</a>. Filip will be also speaking about Java7 syntax support in popular IDE&#8217;s like InteliJ Idea and Eclipse IDE.</p>
<p>As usually on ours meeting there would be drawing of licenses for JRebel and InteliJ Idea. This time we have also cool Java7 T-Shirts for all attendees.</p>
<p>Registration isn&#8217;t required but it would be nice if you can join <a href="https://www.facebook.com/pages/Java4people/176202629066350" target="_blank">this event on facebook</a> (here you can also find mode details about this event).</p>
 <img src="http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=917" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://luksza.org/2011/java7-launch-party-szczecin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
		<item>
		<title>Drag-and-Drop staging/un-staging in Git Change Set model</title>
		<link>http://luksza.org/2011/drag-and-drop-stagingun-staging-in-git-change-set-model/</link>
		<comments>http://luksza.org/2011/drag-and-drop-stagingun-staging-in-git-change-set-model/#comments</comments>
		<pubDate>Wed, 08 Jun 2011 23:59:44 +0000</pubDate>
		<dc:creator>Dariusz Łuksza</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[soc11]]></category>
		<category><![CDATA[drag and drop]]></category>
		<category><![CDATA[egit]]></category>
		<category><![CDATA[git change set]]></category>
		<category><![CDATA[staging area]]></category>
		<category><![CDATA[synchronize view]]></category>

		<guid isPermaLink="false">http://luksza.org/?p=900</guid>
		<description><![CDATA[The EGit 1.0 will be officially released in upcoming days, but I&#8217;ve already started to working on version 1.1. Today I would like to demonstrate you a feature that I was recently working on. To be honest the main idea of this functionality comes from my GSoC 2010 proposal, but I didn&#8217;t manage to implement [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">The EGit 1.0 will be officially released in upcoming days, but I&#8217;ve already started to working on version 1.1. Today I would like to demonstrate you a feature that I was recently working on. To be honest the main idea of this functionality comes from my GSoC 2010 proposal, but I didn&#8217;t manage to implement it &#8230; until now <img src='http://luksza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> , so what it is?</p>
<p style="text-align: left;">The post title should told you everything about it &#8230; but (if not) I&#8217;ve also prepared a screencast that is embedded above where you can clearly see how it works in real <em>environment</em>.</p>
<p style="text-align: center;"><object width="500" height="400"><param name="movie" value="http://www.youtube.com/v/gBWQjXfDXbQ?version=3"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/gBWQjXfDXbQ?version=3" type="application/x-shockwave-flash" width="500" height="400" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p style="text-align: left;">I know that in version 1.0 the <em>Staging view</em> was introduced, to be honest, I don&#8217;t think that separate view for staging is really needed. But I don&#8217;t have anything against it, it looks cool and works properly <img src='http://luksza.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . Also I don&#8217;t see anything bad with having this functionality doubled in <em>Git Change Set</em> model and give users possibility to choose between both of them.</p>
<p style="text-align: left;">I&#8217;ve pushed this feature (and all dependent changes) yesterday. This is quite huge change so I think that we&#8217;ll iterate few times with it before it will be merged into master, but I hope it will be included in 1.1.</p>
<p style="text-align: left;">As always feel free to share any ideas and comments!</p>
 <img src="http://luksza.org/wp-content/plugins/wordpress-feed-statistics/feed-statistics.php?view=1&post_id=900" width="1" height="1" style="display: none;" />]]></content:encoded>
			<wfw:commentRss>http://luksza.org/2011/drag-and-drop-stagingun-staging-in-git-change-set-model/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>
	</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: basic
Database Caching 10/20 queries in 0.034 seconds using disk: basic

Served from: luksza.org @ 2012-05-22 05:07:58 -->
