<?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>5ise</title>
	<atom:link href="http://5ise.quanxinquanyi.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://5ise.quanxinquanyi.de</link>
	<description>Andreas Graf&#039;s Software Engineering Blog</description>
	<lastBuildDate>Tue, 01 May 2012 18:15:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Git on Windows is extremely slow (Wingit/msysgit)</title>
		<link>http://5ise.quanxinquanyi.de/2012/04/19/git-on-windows-is-extremely-slow-wingitmsysgit/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=git-on-windows-is-extremely-slow-wingitmsysgit</link>
		<comments>http://5ise.quanxinquanyi.de/2012/04/19/git-on-windows-is-extremely-slow-wingitmsysgit/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 06:36:43 +0000</pubDate>
		<dc:creator>Andreas Graf</dc:creator>
				<category><![CDATA[PMT-Processes,Methods,Tools]]></category>

		<guid isPermaLink="false">http://5ise.quanxinquanyi.de/?p=793</guid>
		<description><![CDATA[<p>Git is a great tool. The Windows implementation msysgit makes me unhappy: It is extremely slow on my machine, and if you search on the web, this is not an uncommon problem. Usually I use egit directly from Eclipse, however &#8230; <a href="http://5ise.quanxinquanyi.de/2012/04/19/git-on-windows-is-extremely-slow-wingitmsysgit/">Continue reading <span class="meta-nav">&#8594;</span></a></p>
 ]]></description>
			<content:encoded><![CDATA[<p>Git is a great tool. The Windows implementation msysgit makes me unhappy: It is extremely slow on my machine, and if you search on the web, this is not an uncommon problem. Usually I use egit directly from Eclipse, however in one project I have to use git-svn and want more control over whats going on from the command line. (see update below)</p>
<p>But git kills my turnaround time. I found a somewhat bloated, but fast solution: I have a Linux-virtual machine (Ubuntu) that mounts my git directory as a shared directory. Now I am using the Linux shell in the vm. That is actually much faster than the windows git command line.</p>
<p>So if you are suffering from a slow Windows git, you might want to try this approach.</p>
<p><strong>Update</strong></p>
<p><strong></strong>It seem that the reasons for a slow msysgit are manyfold. I was able to fix it somewhat by commenting out the dynamic prompt in /etc/profile<br />
<code>#Comment the lines below<br />
#PS1='\[33]0;$MSYSTEM:\w07<br />
#33[32m\]\u@\h \[33[33m\w$(__git_ps1)33[0m\]<br />
#$ ' </code><br />
However, git svn rebase is still faster in my VM.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://5ise.quanxinquanyi.de/2012/04/19/git-on-windows-is-extremely-slow-wingitmsysgit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tools for the business  nomad  &#8211; mobile wifi hotspots</title>
		<link>http://5ise.quanxinquanyi.de/2012/03/23/tools-for-the-business-nomad-mobile-wifi-hotspots/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=tools-for-the-business-nomad-mobile-wifi-hotspots</link>
		<comments>http://5ise.quanxinquanyi.de/2012/03/23/tools-for-the-business-nomad-mobile-wifi-hotspots/#comments</comments>
		<pubDate>Fri, 23 Mar 2012 06:44:52 +0000</pubDate>
		<dc:creator>Andreas Graf</dc:creator>
				<category><![CDATA[Allgemeines]]></category>

		<guid isPermaLink="false">http://5ise.quanxinquanyi.de/?p=789</guid>
		<description><![CDATA[<p>Today’s business is global and the Internet plays an important role in bringing all the parties together. However, when you actually travel physically around the world, access to the internet for business purposes can still be a problem. If you &#8230; <a href="http://5ise.quanxinquanyi.de/2012/03/23/tools-for-the-business-nomad-mobile-wifi-hotspots/">Continue reading <span class="meta-nav">&#8594;</span></a></p>
 ]]></description>
			<content:encoded><![CDATA[<p>Today’s business is global and the Internet plays an important role in bringing all the parties together. However, when you actually travel physically around the world, access to the internet for business purposes can still be a problem. If you want to be online will traveling abroad, at business meetings or at customer sites, the horrendous roaming costs can easily spoil the fun. In your home country, you are used to permanent access, but just crossing one border can spoil it all.</p>
<p>Luckily, today it is very easy to get prepaid Internet access in many countries (postpaid / subscription is most often not an option if you are flying in and out temporarily). However, putting a prepaid Internet SIM into your phone stops you from calling and then you might not have a SIM slot in your PC our you might want to have several devices connected to the net at the same time.</p>
<p>One of the most useful inventions to me are the mobile Wifi hotstpots. You just put in a SIM card with an internet access and then that connection is shared through a WLan hotspot in a radius of several meters. And they are small enough to be carried.</p>
<p>So on your way to your business partner, you might find your way with the navigation software on your mobile phone, while still being able to accept and send phone calls. At the site, you open your notebook and are again instantly connected.</p>
<p>I found it easy to get a prepaid Internet in several countries, but you usually have to walk in to a store of one of the providers, because they usually require registration with an official ID (e.g.a passport). In most cases it took me around 15 to 30minutes to actually get my SIM card. Prices vary from country to country, e.g. around 15€ for 1,2GB in Bulgaria or 9€ for 48hours flat in France.</p>
<p>Some tips:</p>
<ul>
<li>Bring your passport. Some countries require a local address: Bring your hotel address</li>
<li>Make sure that your name is correctly written on the application, otherwise you might not be able to recharge on the Internet (difficult in countries with alphabets different from yours)</li>
<li>Some providers do not support recharge with foreign credit cards through the web</li>
<li>Most important: Check the available tariffs before you leave, and print them out. The staff at the store might not fully understand your English or whatever and have a hard time figuring out what you want. Do not expect that they have English material available for you to just point at.</li>
<li>Check several providers  at your destination. Their tariffs and plan differ.</li>
<li>Some SIM card’s validity is limited. You might have to throw away the application procedure again with some providers the next time you visit the country. Some SIM cards are not limited, only the booked Internet access might be limited and you have to recharge it sometime.</li>
<li>Check the APN before (the address that the phone connects to) on the providers website or google for it – you’ll find the APNs on the web. If you buy a SIM card to put into an UMTS router, you have to configure it with the APN. As stores often sell cards mainly bundled with USB sticks, the staff might not understand what you are asking or they might not even know.</li>
</ul>
<p>Enjoy. I have often found the bandwidth of my prepaid plans to be superior to the WLan of hotels.</p>
]]></content:encoded>
			<wfw:commentRss>http://5ise.quanxinquanyi.de/2012/03/23/tools-for-the-business-nomad-mobile-wifi-hotspots/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>European Job Crisis &#8211; Where is everyone?</title>
		<link>http://5ise.quanxinquanyi.de/2012/03/22/european-job-crisis-where-is-everyone/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=european-job-crisis-where-is-everyone</link>
		<comments>http://5ise.quanxinquanyi.de/2012/03/22/european-job-crisis-where-is-everyone/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 14:44:29 +0000</pubDate>
		<dc:creator>Andreas Graf</dc:creator>
				<category><![CDATA[Allgemeines]]></category>

		<guid isPermaLink="false">http://5ise.quanxinquanyi.de/?p=787</guid>
		<description><![CDATA[<p>German media is full with news about bad conditions on south European job markets. Young qualified people cannot find jobs. Meanwhile, in Germany, we are facing the opposite situation: Companies are desperately looking for new hires and have difficulties filling &#8230; <a href="http://5ise.quanxinquanyi.de/2012/03/22/european-job-crisis-where-is-everyone/">Continue reading <span class="meta-nav">&#8594;</span></a></p>
 ]]></description>
			<content:encoded><![CDATA[<p>German media is full with news about bad conditions on south European job markets. Young qualified people cannot find jobs. Meanwhile, in Germany, we are facing the opposite situation: Companies are desperately looking for new hires and have difficulties filling their vacancies. That makes me wonder why I don’t see a stronger pull generated from that imbalance. Some German cities are actively promoting their jobs, e.g. in Portugal.</p>
<p>However, I am not seeing a lot of applications for software development positions. That makes me wonder:</p>
<ul>
<li>What is the situation of computer science graduates or young professionals in these countries? Maybe the situation is not that bad?</li>
<li>Do you know that German companies are having a lot of vacancies?</li>
<li>Does the company I work for, itemis, just not have enough visibility there?</li>
<li>Are you afraid of the language barrier? German is probably not one of the easiest languages to learn, but depending on the company, a lot of communication is done in English. Obviously, in consulting jobs, you’d have to learn the language sooner or later (Actually, I hear that German language classes are increasingly popular in Italy right now).</li>
<li>Heard bad things about the weather? Well, we are not Sicily, Crete or the Canary Islands. True.</li>
<li>Afraid that Germans are sullen careerists that work hard and don’t laugh the entire day? Think again. Actually, obviously we like to work for good results, but most companies I have worked for or consulted at had a very agreeable atmosphere and there was a good share of fun and laughter. And, contrary to what you might expect, we are not that hierarchically inclined. Actually, at BMW, I met an Italian colleague who quit his job in France to go to work in Germany, because he thought that German work culture fits his mentality better. That really surprised me (I like France very much). But then Munich likes to think of itself as “Italy’s northern-most city” ….</li>
</ul>
<p>&nbsp;</p>
<p>Use the reply button below. If you are from Germany, what is your experience. If you are from one of the not-so-well-off countries, what is the situation, what is holding you back?</p>
]]></content:encoded>
			<wfw:commentRss>http://5ise.quanxinquanyi.de/2012/03/22/european-job-crisis-where-is-everyone/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Trac with Java and XML RPC</title>
		<link>http://5ise.quanxinquanyi.de/2012/02/23/trac-with-java-and-xml-rpc/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=trac-with-java-and-xml-rpc</link>
		<comments>http://5ise.quanxinquanyi.de/2012/02/23/trac-with-java-and-xml-rpc/#comments</comments>
		<pubDate>Thu, 23 Feb 2012 10:24:37 +0000</pubDate>
		<dc:creator>Andreas Graf</dc:creator>
				<category><![CDATA[Allgemeines]]></category>
		<category><![CDATA[PMT-Processes,Methods,Tools]]></category>

		<guid isPermaLink="false">http://5ise.quanxinquanyi.de/?p=772</guid>
		<description><![CDATA[<p>Trac can be a pragmatic and extensible issue tracking system. There is a large number of additional plugins. However, when it comes to reporting, I could not find a plugin that would create statistics as I needed them.One option would &#8230; <a href="http://5ise.quanxinquanyi.de/2012/02/23/trac-with-java-and-xml-rpc/">Continue reading <span class="meta-nav">&#8594;</span></a></p>
 ]]></description>
			<content:encoded><![CDATA[<div>
<p>Trac can be a pragmatic and extensible issue tracking system. There is a large number of additional plugins. However, when it comes to reporting, I could not find a plugin that would create statistics as I needed them.One option would be to extend existing plugins – however, that has to be done in Python and creating charts and statistics is very nice todo in Excel. A pure CSV export didn’t help, because it would have required too much processing of the data in Excel.</p>
<p>So one approach is to extract the data with Java and the XML RPC interface. Since I could not find any real code templates for that on the web, here is an example that might be help others:</p>
<div>
<div>
<pre class="crayon-plain-tag">import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.Charset;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.Vector;

import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.*;
import org.lustin.trac.xmlprc.Ticket;
import org.lustin.trac.xmlprc.TrackerDynamicProxy;

public class Main {

&nbsp;&nbsp; &nbsp;public static void main(String [] args)
&nbsp;&nbsp; &nbsp;{
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;XmlRpcClientConfigImpl conf = new XmlRpcClientConfigImpl();

&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;conf.setBasicUserName(&quot;xxxx&quot;);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;conf.setBasicPassword(&quot;xxxx&quot;);

&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;try {
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;conf.setServerURL(new URL(&quot;https://xxx.de/trac/xxx/login/xmlrpc&quot;));
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;} catch (MalformedURLException e) {
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// TODO Auto-generated catch block
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;e.printStackTrace();
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;XmlRpcClient client = new XmlRpcClient();
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;client.setConfig(conf);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Object o = null;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;try {
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;o = client.execute(&quot;ticket.getTicketFields&quot;, new Object[]{});
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;} catch (XmlRpcException e) {
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// TODO Auto-generated catch block
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;e.printStackTrace();
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println(o);

&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;TrackerDynamicProxy tdp = new TrackerDynamicProxy(client);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Ticket t = (Ticket)tdp.newInstance(Ticket.class);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Vector query = t.query(&quot;type=defect&quot;);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println(query);

&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; SimpleDateFormat dfm = new SimpleDateFormat(&quot;yyyy-MM-dd&quot;);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; Date start = null;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; Date now = null;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;try {
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;start = dfm.parse(&quot;2011-12-16&quot;);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;now = dfm.parse(&quot;2012-02-21&quot;);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;} catch (ParseException e) {
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// TODO Auto-generated catch block
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;e.printStackTrace();
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}

&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;List&amp;lt;Entry&amp;gt;entries = new ArrayList&amp;lt;Entry&amp;gt;();
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;for(int i = 0; i&amp;lt; query.size(); i++)
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;int id = (Integer)query.get(i);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Vector vector = t.get(id);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Date created =&nbsp; (Date)vector.get(1);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Date modified = (Date)vector.get(2);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;HashMap two = (HashMap) vector.get(3);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;created.setHours(0);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;created.setMinutes(0);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;created.setSeconds(0);

&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;modified.setHours(0);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;modified.setMinutes(0);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;modified.setSeconds(0);

&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Object statusob = two.get(&quot;status&quot;);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;String status = (String)statusob;

&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Object resolutionob = two.get(&quot;resolution&quot;);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if(resolutionob == null || !(&quot;duplicate&quot;.contentEquals((String)resolutionob)) ){
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;entries.add(new Entry(id,created,modified,status));
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}

&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println(start+ &quot; &quot;+now);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Date current = start;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;while(!(current.compareTo(now)&amp;gt;0))
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;int opened_count=0;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;int open_count=0;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;int closed_count=0;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;for(Entry e: entries)
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{
&nbsp;&nbsp; &nbsp;//&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println(&quot;&nbsp;&nbsp;&nbsp; &quot;+e.id+e.created+ &quot; &quot;+ e.modified+&quot; &quot;+e.status);
&nbsp;&nbsp; &nbsp;//&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println(!e.status.equals(&quot;closed&quot;) +&quot;:&quot;+current.compareTo(e.created));
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if(e.created.compareTo(current) == 0) {
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;opened_count ++;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if(e.status.equals(&quot;closed&quot;) &amp;amp;&amp;amp; e.modified.compareTo(current) == 0) {
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;closed_count ++;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if(!e.status.equals(&quot;closed&quot;) &amp;amp;&amp;amp; !(current.compareTo(e.created)&amp;lt;0)) {
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;open_count++;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if(e.status.equals(&quot;closed&quot;) &amp;amp;&amp;amp; !(current.compareTo(e.created)&amp;lt;0) &amp;amp;&amp;amp;&nbsp; current.compareTo(e.modified)&amp;lt;0) {
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;open_count++;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}&nbsp;&nbsp; &nbsp;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}

&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;System.out.println(current+&quot;;&quot;+open_count+&quot;;&quot;+opened_count+&quot;;&quot;+closed_count);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;Calendar c = Calendar.getInstance();
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;c.setTime(current);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;c.add(Calendar.DATE, 1);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;current = c.getTime();
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}

&nbsp;&nbsp; &nbsp;}

}</pre>
</div>
</div>
</div>
<p>This can be used to create images like this:</p>
<p><a href="http://5ise.quanxinquanyi.de/wp-content/uploads/2012/02/2012-02-22-18h57_26.png"><img class="alignright size-medium wp-image-779" src="http://5ise.quanxinquanyi.de/wp-content/uploads/2012/02/2012-02-22-18h57_26-300x192.png" alt="" width="300" height="192" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://5ise.quanxinquanyi.de/2012/02/23/trac-with-java-and-xml-rpc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xtext End User / Domain Experts Cheat Sheet</title>
		<link>http://5ise.quanxinquanyi.de/2012/01/13/xtext-end-user-domain-experts-cheat-sheet/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=xtext-end-user-domain-experts-cheat-sheet</link>
		<comments>http://5ise.quanxinquanyi.de/2012/01/13/xtext-end-user-domain-experts-cheat-sheet/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 07:51:23 +0000</pubDate>
		<dc:creator>Andreas Graf</dc:creator>
				<category><![CDATA[Allgemeines]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[PMT-Processes,Methods,Tools]]></category>
		<category><![CDATA[Xtext]]></category>

		<guid isPermaLink="false">http://5ise.quanxinquanyi.de/?p=747</guid>
		<description><![CDATA[<p>The basic idea of domain specific languages is to provide domain experts with an easy to use language for their modeling needs. However, a domain specific language is always tied to a tool for editing the model. With Xtext, this &#8230; <a href="http://5ise.quanxinquanyi.de/2012/01/13/xtext-end-user-domain-experts-cheat-sheet/">Continue reading <span class="meta-nav">&#8594;</span></a></p>
 ]]></description>
			<content:encoded><![CDATA[<p><span>The basic idea of domain specific languages is to provide domain experts with an easy to use language for their modeling needs. However, a domain specific language is always tied to a tool for editing the model. With <span>Xtext</span>, this is obviously Eclipse. Eclipse provides some rich editing features, especially for navigating in models.</span></p>
<p>Most existing cheat sheets refer to the Java IDE of Eclipse, which you cannot give to domain experts because it contains elements not relevant to them (debugging) or have a slightly different meaning.</p>
<p><span>So here is an attempt of a small cheat sheet for <span>Xtext</span> end users (domain experts):</span></p>
<p>&nbsp;</p>
<h1>Editing</h1>
<table border="0" align="left">
<tbody>
<tr>
<td valign="top"><code>ALT-Left and ALT-Right</code></td>
<td valign="top"><code>Back / forward</code></td>
<td valign="top">Go back and forward in history of where you were in editors</td>
</tr>
<tr>
<td valign="top"><code><span>CTRL-<span>PgUp</span> and CTRL-<span>PgDown</span></span></code></td>
<td valign="top">Cycle tabs</td>
<td valign="top"> Cycle through tabs of open editors</td>
</tr>
<tr>
<td valign="top"><code>CTRL-Up and CTRL-Down</code></td>
<td valign="top">Scroll</td>
<td valign="top"> Scroll line up and down</td>
</tr>
<tr>
<td valign="top"><code>CTRL-M</code></td>
<td valign="top">Maximize</td>
<td valign="top"> Maximize / Restore current editor window</td>
</tr>
<tr>
<td valign="top"><code>CTRL-W</code></td>
<td valign="top">Close</td>
<td valign="top">Close Current Editor</td>
</tr>
<tr>
<td valign="top"><code>CTRL-D</code></td>
<td valign="top">Delete Line</td>
<td valign="top">Delete Current Line</td>
</tr>
<tr>
<td valign="top"><code>CTRL-/</code></td>
<td valign="top">Toggle Comment</td>
<td valign="top">Toggle Comment for line / selection</td>
</tr>
<tr>
<td valign="top"><code>CTRL+SHIFT-F</code></td>
<td valign="top">Format</td>
<td valign="top">Auto format</td>
</tr>
<tr>
<td valign="top"><code>ALT-UP / ALT-Down</code></td>
<td valign="top">Move</td>
<td valign="top">Move current line / selection one line up / down</td>
</tr>
<tr>
<td valign="top"><code>CTRL-Q</code></td>
<td valign="top">Last Edit</td>
<td valign="top"><span>Go to last edit location</span></td>
</tr>
<tr>
<td valign="top"><code>CTRL-L</code></td>
<td valign="top"><span><span>Goto</span></span></td>
<td valign="top"><span>Go to line</span></td>
</tr>
</tbody>
</table>
<h1>Model Editing</h1>
<table border="0" align="left">
<tbody>
<tr>
<td valign="top"><code><span><span>Ctrl</span>-Shift-G</span></code></td>
<td valign="top">Find References</td>
<td valign="top">Find all elements that refer to the current element</td>
</tr>
<tr>
<td valign="top"><code>F3</code><span> or CTRL-<span>MouseClick</span></span></td>
<td valign="top">Follow Link</td>
<td valign="top">Follow reference under cursor</td>
</tr>
<tr>
<td valign="top"><code><span><span>Ctrl</span>-O</span></code></td>
<td valign="top">Pop up Outline</td>
<td valign="top">Pops up an outline for easy navigation / filtering</td>
</tr>
<tr>
<td valign="top"><code>CTRL-1</code></td>
<td valign="top">Quick Fix</td>
<td valign="top">Quick Fix of Errors (where provided by DSL designer)</td>
</tr>
<tr>
<td valign="top"><code>CTRL-SPACE</code></td>
<td valign="top">Content Assist</td>
<td valign="top">Get suggestions of possible values</td>
</tr>
<tr>
<td valign="top"><code>ALT-SHIFT-R</code></td>
<td valign="top">Rename</td>
<td valign="top">Rename current element (will rename other occurrences as well.</td>
</tr>
<tr>
<td valign="top"><code>CTRL-SHIFT-F3</code></td>
<td valign="top">Open Model element</td>
<td valign="top">Locate a model element in your workspace (only exported elements are listed)</td>
</tr>
<tr>
<td valign="top"><code>ALT-SHIFT-Up / Down</code></td>
<td valign="top">Expand selection</td>
<td valign="top">Expand selection to containing element</td>
</tr>
</tbody>
</table>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://5ise.quanxinquanyi.de/2012/01/13/xtext-end-user-domain-experts-cheat-sheet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xtext Global and Local Scoping &#8211; overview</title>
		<link>http://5ise.quanxinquanyi.de/2012/01/05/xtext-global-and-local-scoping-overview/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=xtext-global-and-local-scoping-overview</link>
		<comments>http://5ise.quanxinquanyi.de/2012/01/05/xtext-global-and-local-scoping-overview/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 14:50:21 +0000</pubDate>
		<dc:creator>Andreas Graf</dc:creator>
				<category><![CDATA[Allgemeines]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[MDSD]]></category>

		<guid isPermaLink="false">http://5ise.quanxinquanyi.de/?p=732</guid>
		<description><![CDATA[<p>Just recently I posted a small article with an overview on the Xtext scoping architecture. One of the things that took me a while to understand is the difference of global and local scoping. Several people I discussed this had &#8230; <a href="http://5ise.quanxinquanyi.de/2012/01/05/xtext-global-and-local-scoping-overview/">Continue reading <span class="meta-nav">&#8594;</span></a></p>
 ]]></description>
			<content:encoded><![CDATA[<p>Just recently I posted a <a title="My mental Xtext high-level model" href="http://5ise.quanxinquanyi.de/2012/01/04/my-mental-xtext-high-level-model/">small article with an overview on the Xtext scoping architecture</a>. One of the things that took me a while to understand is the difference of global and local scoping. Several people I discussed this had their own ways to explain these. Here is my current way of explaining some types of scoping in Xtext.</p>
<p>Assume that we have a language that supports defining classes, much like in UML: A class can have a name, attributes and it can inherit from another class. And we want to support models that consist of several Xtext files.</p>
<p>Suppose we have the following two files:</p>
<p><a href="http://5ise.quanxinquanyi.de/wp-content/uploads/2012/01/2012-01-05-15h01_06.png"><img class="alignright size-full wp-image-735" src="http://5ise.quanxinquanyi.de/wp-content/uploads/2012/01/2012-01-05-15h01_06.png" alt="" width="177" height="69" /></a><a href="http://5ise.quanxinquanyi.de/wp-content/uploads/2012/01/2012-01-05-15h01_00.png"><img class="alignright size-full wp-image-734" src="http://5ise.quanxinquanyi.de/wp-content/uploads/2012/01/2012-01-05-15h01_00.png" alt="" width="185" height="66" /></a></p>
<p>A simple definition of two classes, with B inheriting from A. So, obviously we are having a reference from B to A (inheritance). In the grammar that could look like</p><pre class="crayon-plain-tag">Class: 'class' name=ID ('inherits' general=[Class|FQN])?</pre><p>and Xtext supports us by providing all the automatic linking when it sees &#8220;inherits&#8221;. But how does it know what to link? If all our models were restricted to be contained in one single file / resource, it would be easy: Just get the current resource and traverse all the contained model elements to find one that matches &#8220;A&#8221; and set up the link.</p>
<h1>Global Scoping</h1>
<p>But now, with models split over several files, what do we have to do:</p>
<ol>
<li>First, find all the model files candidates that could be relevant for our search</li>
<li>Define a strategy to decide if a model file is really considered for traversal</li>
<li>Traverse the model file and find all the candidates that could match our reference to &#8220;A&#8221;</li>
</ol>
<p>We wouldn&#8217;t want to to this manually. Luckily, Xtext does it for you &#8211; actually, it does it a little different, since the approach above would be inefficient &#8211; traversing all the model files for each reference would be slow.</p>
<p>So, every time a file changes, Xtext collects the objects and the names that they are known by and puts this information into the index. So instead of traversing all models in all candidate files, Xtext just has to have a look if there is a matching entry in the index. Assuming that the classes above would be contained in a package called &#8220;P&#8221;. The index could contain:</p>
<table>
<tbody>
<tr>
<th>name</th>
<th>Object</th>
</tr>
<tr>
<td>P</td>
<td>Package &#8220;P&#8221;</td>
</tr>
<tr>
<td>P.A</td>
<td>Class A</td>
</tr>
<tr>
<td>P.A.a</td>
<td>Attribute b</td>
</tr>
<tr>
<td>P.B</td>
<td>Class B</td>
</tr>
<tr>
<td>P.B.b</td>
<td>Attribute b</td>
</tr>
</tbody>
</table>
<p>But would we want to see all the possible candidate elements in our reference (types are automatically checked). In most cases no. So Xtext provides several mechanisms to &#8220;restrict&#8221; the search. Please the the Xtext documentation for details:</p>
<ul>
<li>URI imports: You can have import statements, that actually reference the full URIs of the other files to be considered.</li>
<li>Namespace import: You can define a namespace import. If you than provide something like &#8220;import P.*&#8221; in your grammar, the search will be restricted to those elements whose fully qualified name starts with &#8220;P.&#8221;</li>
<li>Java class path based</li>
</ul>
<p>There is additional ways to tweak and modify Xtext behavior and there is more data stored in the index (references) etc. But I hope this gives you the general idea. However, the story is not finished.</p>
<h2> Local Scoping</h2>
<p>Now suppose we want to have a second grammar, where we define instances of the classes and values for their attributes, just like this:</p>
<p><a href="http://5ise.quanxinquanyi.de/wp-content/uploads/2012/01/2012-01-05-15h26_43.png"><img class="alignright size-full wp-image-742" src="http://5ise.quanxinquanyi.de/wp-content/uploads/2012/01/2012-01-05-15h26_43.png" alt="" width="141" height="168" /></a>Since the classes are in a separate file, it is obvious that the link from the instance to its defining class is done in the way described above. But also the attributes values are linked to the attribute definition in the class model, so how is this done?</p>
<p>Obviously, we could also just use the index. But we have to restrict the possible references as well, since in instance &#8220;a&#8221;, a reference to attribute &#8220;b&#8221; would not be valid. So what we could do is to get the list of possible references from the index, traverse the class hierarchy and filter out all attributes that are not valid.</p>
<p>But, for finding all valid attributes, we are traversing all attributes in the class hierarchy anyway. So why not forget about the index, and just build up the list of possible references while we traverse the model? This is done by local scoping, which you can easily customize to modify the list of reference candidates. See the Xtext documentation on how to do that.</p>
<p>So, then why do we need the attributes in the index? Simple, we don&#8217;t. The list of possible attribute values is calculated by us, so we don&#8217;t need them there. For our own Xtext grammars, we can override the strategy of what is put into the index and what not. So we decide to not put attributes in the index. Xtext per default cannot know what you want to put in the index, so it puts in everything from your model that has a &#8220;name&#8221; attribute. It might be worthwhile customizing this behavior, since it could save us a lot of CPU and memory.</p>
<h1> Summary</h1>
<p>For me, it is useful to divide scoping in two different aspects:</p>
<ol>
<li>I can find out the possible candidates of a link by traversing references in my model. The traversal can easily span multiple resources/files, as long as the traversal can be done by standard EMF means.</li>
<li>To find the possible candidates, I would have to think about a strategy on which model files to load etc. I cannot access these candidates by traversing the references that I already have, because I might not even reach those models &#8211;&gt; <strong>global scoping</strong>.</li>
</ol>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://5ise.quanxinquanyi.de/2012/01/05/xtext-global-and-local-scoping-overview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My mental Xtext high-level model</title>
		<link>http://5ise.quanxinquanyi.de/2012/01/04/my-mental-xtext-high-level-model/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=my-mental-xtext-high-level-model</link>
		<comments>http://5ise.quanxinquanyi.de/2012/01/04/my-mental-xtext-high-level-model/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 15:43:52 +0000</pubDate>
		<dc:creator>Andreas Graf</dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[MDSD]]></category>

		<guid isPermaLink="false">http://5ise.quanxinquanyi.de/?p=728</guid>
		<description><![CDATA[<p>While Xtext is a powerful tool, it is sometimes easy to loose the big picture of the linking, scoping, global scope etc. For my own mental relief, I have made a little diagram, which might be useful for others (no &#8230; <a href="http://5ise.quanxinquanyi.de/2012/01/04/my-mental-xtext-high-level-model/">Continue reading <span class="meta-nav">&#8594;</span></a></p>
 ]]></description>
			<content:encoded><![CDATA[<p>While Xtext is a powerful tool, it is sometimes easy to loose the big picture of the linking, scoping, global scope etc. For my own mental relief, I have made a little diagram, which might be useful for others (no guarantee for correctness or level of detail). It applies only to a specific configuration (using Xbase and Imported Namespace Aware Scoping).</p>
<p><a href="http://5ise.quanxinquanyi.de/wp-content/uploads/2012/01/2012-01-04-16h27_53.png"><img class="alignright  wp-image-729" style="border: none" src="http://5ise.quanxinquanyi.de/wp-content/uploads/2012/01/2012-01-04-16h27_53.png" alt="" width="1024" height="779" /></a></p>
<p>&nbsp;</p>
<p>So basically what happens is:</p>
<ol>
<li><strong>Parsing</strong>: The framework parses the model files (Xtext-files). Links between elements are not resolved yet.</li>
<li><strong>Index Building</strong>: The model is traversed, and basically everything reachable that has a name attribute is packed into an EObjectDescription and that is put into an index. What is put there can be customized. <strong>Caveat</strong>: EObjectDescription allows you to have some user data stored with your description in the index. Often the first thought is, to store e.g. some type information or, e.g. in case of class models, some inheritance information. However, references are not yet set up / linked. So you cannot put anything in the user data that would traverse link references!</li>
<li><strong>Lazy Linking / Scoping</strong>: This is where the actual linking is done. In our case (Xbase-based language), this scoping is based on XbaseScopeProvider. This actually delegates to some Guice-configured class, which in our case is an ImportedNamespaceAwareLocalScopeProvider. This looks for model elements with the attribute &#8220;importedNamespace&#8221; in your model and pulls the objects from the index, that match any of the importedNamespace values (you can specify wildcards in the imports).<br />
In addition, in these classes you can add your own scopes, the local scopes, which are derived from the existing model information.</li>
<li><strong>Content assist</strong>: Uses the scoping data for suggesting alternatives.</li>
</ol>
<p>The index is transient in memory and is loaded from / stored to disk on start / stop of Eclipse. During run-time there is no up-to-date representation on disk. The org.eclipse.xtext.ui.shared.Access class can be used as a handle to index data.</p>
<p>&nbsp;</p>
<p><img src="image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAK8AAAAyCAIAAAClCBy/AAAC90lEQVR4nO2Zv9HyMAyHXdFQMQAZAjoWoOIuLWtkgUySmkGoWIIB0lFwFBT5Ct1n6SQ7sUMS3jt+T8UFR1bkJ/4DrgPgP+7bCYA/BGwADGwADGwADGwADGwADGwADGwADGwADGwADGwADGwADGwADGwYw+12W61Wp9Pp/X5/OxfN8/nc7XabzeZ+v+fe+6M20HCOK1kHG+bOY+HIsCHIj9rwIbBh3jy+FXkcsKGr69o5p0pQlqVzrmka+qC4Xq++JVXQf1VV1VSRJcFxsgVq23a9XhdF8Xq9eh75crn4HmVM2YtMr2kaFYG6lpmrNtRF0zS+PrajYNFiST4ejyVs8A/mnydWFDtmNN4K/9ifRFZMaIOsshpI6mW/38uhsoNtI8TaHA4HW5b+ohHB4jjnllgpqApURFvi2Bwl75ItbX1zI8cy/NwGe0td1yrboPEyJo20nSBtG3VjVtFkF/7KQvsGeuaqquiD1Dw2ZmVZxhSx60VWZMt8Nthe1LcUsz9JG5ZssJmkFM0WajDzfrJtkAvhYNG70MIZm/dyIweZY6Wwq3ViL4Sd8K0NqovEotEyoRbNpc8UvkwpVqbbkBs5yPK7yJ5e1B5wWhtiNVnUBqqjfapYHunJ5UYOMq0NKjEfNrEXenft/JdoQ8qi8+W5wc9OfpkfzCM4oU0S2WI3X8Hbs2ywEVJsSHw3gjZ0aUXzh/CeVLPIs4FSlzOVyjiYn59vZUsaD39lXGS7m/Pvsa9vcJttbVCh2rbdbrex9uk2yJz9lRQb0ovmvnKmsHtmux9WOyafZexYTA1GR7ZHLNuSSnM+n1NsUCmpOMqwwZUi9ntDig2DRYu1KYrieDzObkPw7aSL8mF8fiohVRq7vo6IHPvzSfZFEeq6zpobOrMHlOmlnylkEPpKZdJjQ3/RPNJ+ihM8nabwo/9ogyCwATCwATCwATCwATCwATCwATCwATCwATCwATCwATCwATCwATCwATCwATCwATCwATCwATCwATCwATD/ACVFr3r10TqYAAAAAElFTkSuQmCC" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://5ise.quanxinquanyi.de/2012/01/04/my-mental-xtext-high-level-model/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Learning foreign software terminology with Anki</title>
		<link>http://5ise.quanxinquanyi.de/2011/12/30/learning-foreign-software-terminology-with-anki/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=learning-foreign-software-terminology-with-anki</link>
		<comments>http://5ise.quanxinquanyi.de/2011/12/30/learning-foreign-software-terminology-with-anki/#comments</comments>
		<pubDate>Fri, 30 Dec 2011 18:53:41 +0000</pubDate>
		<dc:creator>Andreas Graf</dc:creator>
				<category><![CDATA[Allgemeines]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://5ise.quanxinquanyi.de/?p=725</guid>
		<description><![CDATA[<p>Despite English being the lingua franca of software engineering, there are still good reasons to learn to talk in foreign languages if you are doing international business. Locals will often communicate in their mother tongue and not all languages use &#8230; <a href="http://5ise.quanxinquanyi.de/2011/12/30/learning-foreign-software-terminology-with-anki/">Continue reading <span class="meta-nav">&#8594;</span></a></p>
 ]]></description>
			<content:encoded><![CDATA[<p>Despite English being the lingua franca of software engineering, there are still good reasons to learn to talk in foreign languages if you are doing international business. Locals will often communicate in their mother tongue and not all languages use so many English technical terms like German. France&#8217;s académie fran<cite>ç</cite>aise makes sure that there are technical terms in French and the sheer amount of Chinese speakers and their language structure calls for chinese words.</p>
<p>So, if you are going abroad and want to learn a language, memorizing the vocabulary is one of the most important parts. But instead of writing vocab lists on sheets of paper or on cards, there is a very nice software that supports you in learning: It is called &#8220;Anki&#8221; and it is available for PC, Android, iPhone and others.</p>
<p>It is a software supporting a <a href="http://en.wikipedia.org/wiki/Spaced_repetition">spaced repetition system (SRS)</a>, which essentially means that you&#8217;ll see those entries that you are not good at more often than those which you know well. And you can sync all your cards between PC, Android, iPhone comfortably. A large number of word lists are available for several languages and you can easily define your own deck of cards, e.g. with software terminology or sentence patterns.</p>
<p>And you are not limited to using Anki for learning languages. You can use it for all kinds of studying: physics formulas, law, business, etc.</p>
<p>Anki has become one of my favourite tools.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://5ise.quanxinquanyi.de/2011/12/30/learning-foreign-software-terminology-with-anki/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ReqIF and Word Import</title>
		<link>http://5ise.quanxinquanyi.de/2011/11/29/reqif-and-word-import/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=reqif-and-word-import</link>
		<comments>http://5ise.quanxinquanyi.de/2011/11/29/reqif-and-word-import/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 15:44:20 +0000</pubDate>
		<dc:creator>Andreas Graf</dc:creator>
				<category><![CDATA[MDSD]]></category>
		<category><![CDATA[PMT-Processes,Methods,Tools]]></category>
		<category><![CDATA[Requirements]]></category>

		<guid isPermaLink="false">http://5ise.quanxinquanyi.de/?p=717</guid>
		<description><![CDATA[<p>About a week ago we&#8217;ve uploaded the initial code contribution to  Requirements Modeling Framework (RMF). In addition, we&#8217;ve been using the tool and created some additional (not published) utilities. Word documents are one popular way to document requirements. We too &#8230; <a href="http://5ise.quanxinquanyi.de/2011/11/29/reqif-and-word-import/">Continue reading <span class="meta-nav">&#8594;</span></a></p>
 ]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full " style="border: none" src="http://5ise.quanxinquanyi.de/wp-content/uploads/2011/07/1312270647_Symbol-Refresh.png" alt="" width="128" height="128" />About a week ago we&#8217;ve uploaded the initial code contribution to  Requirements Modeling Framework (RMF). In addition, we&#8217;ve been using the tool and created some additional (not published) utilities.</p>
<p>Word documents are one popular way to document requirements. We too have some requirements in Word format to be imported into ReqIF format. It takes about one page of source code to implement a tool that takes a Word document and converts it to ReqIF (although we are currently not handling text formatting).</p>
<p>ReqIF uses xhtml to store formatted text. So quite some functionality of a Word to ReqIF conversion would go into this transformation.</p>
<p>We have been asked for a PDF to ReqIF conversion as well. However, my experience with commercial pdf to word conversion tools does not make me too optimistic about the feasibility, because the information in the .pdf is probably too low-level.</p>
<p>It turns out that our framework is a powerful tool to provide tools and functionality around ReqIF.</p>
<address>Icon from: &lt;A href=&#8221;http://www.vistaico.com&#8221;&gt;VistaICO.com&lt;/A&gt;</address>
]]></content:encoded>
			<wfw:commentRss>http://5ise.quanxinquanyi.de/2011/11/29/reqif-and-word-import/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Links for the ReqIF Talk at Eclipse Con Europe 2011</title>
		<link>http://5ise.quanxinquanyi.de/2011/11/03/links-for-the-reqif-talk-at-eclipse-con-europe-2011/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=links-for-the-reqif-talk-at-eclipse-con-europe-2011</link>
		<comments>http://5ise.quanxinquanyi.de/2011/11/03/links-for-the-reqif-talk-at-eclipse-con-europe-2011/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 07:15:48 +0000</pubDate>
		<dc:creator>Andreas Graf</dc:creator>
				<category><![CDATA[Allgemeines]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[PMT-Processes,Methods,Tools]]></category>
		<category><![CDATA[Requirements]]></category>
		<category><![CDATA[VERDE]]></category>

		<guid isPermaLink="false">http://5ise.quanxinquanyi.de/?p=710</guid>
		<description><![CDATA[<p>If you attended my talk at Eclipse Con Europe on the RMF project, here are a few links that might be useful: http://eclipse.org/rmf/ - The project home page http://pror.org/ &#8211; Until RMF has passed the IP review, you might want &#8230; <a href="http://5ise.quanxinquanyi.de/2011/11/03/links-for-the-reqif-talk-at-eclipse-con-europe-2011/">Continue reading <span class="meta-nav">&#8594;</span></a></p>
 ]]></description>
			<content:encoded><![CDATA[<p>If you attended my talk at Eclipse Con Europe on the RMF project, here are a few links that might be useful:</p>
<ul>
<li><a href="http://eclipse.org/rmf/">http://eclipse.org/rmf/ </a>- The project home page</li>
<li><a href="http://pror.org/">http://pror.org/</a> &#8211; Until RMF has passed the IP review, you might want to look at a predecessor, based on RIF (not ReqIF!)</li>
<li><a href="http://www.omg.org/spec/ReqIF/">http://www.omg.org/spec/ReqIF/</a> &#8211; The official spec for ReqIF</li>
<li><a href="http://www.automotive-his.de/rif/doku.php?id=welcomeeng">http://www.automotive-his.de/rif/doku.php?id=welcomeeng</a> &#8211; The predecessor to ReqIF: RIF</li>
<li><a href="http://www.prostep.org/fileadmin/user_upload/ProSTEPiViP/Telegramm/2011/ProSTEP_iViP_Newsletter_July_2011.pdf">http://www.prostep.org/fileadmin/user_upload/ProSTEPiViP/Telegramm/2011/ProSTEP_iViP_Newsletter_July_2011.pdf</a> &#8211; Information on the Implementor&#8217;s Forum</li>
<li><a href="http://www.itea-verde.org/">http://www.itea-verde.org/</a> &#8211; Sponsoring project for RMF core</li>
<li><a href="http://www.deploy-project.eu/">http://www.deploy-project.eu/</a> &#8211; Sponosring project for RMF GUI</li>
</ul>
<h2>Additional Topics</h2>
<ul>
<li><a href="http://www.guersoy.net/knowledge/crema">http://www.guersoy.net/knowledge/crema </a>- Screencast on our traceability framework</li>
</ul>
<h2>Next Chance to see:</h2>
<ul>
<li><a href="http://www.tdse.org/">http://www.tdse.org/</a> &#8211; Talk with more focus on Requirements and DSLs, with Eclipse technologies</li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://5ise.quanxinquanyi.de/2011/11/03/links-for-the-reqif-talk-at-eclipse-con-europe-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

