<?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>Bartlomiej Frackiewicz</title>
	<atom:link href="http://www.jbart.eu/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jbart.eu</link>
	<description>Selbstständiger Senior Softwareentwickler / -architekt</description>
	<lastBuildDate>Mon, 17 Oct 2011 20:32:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Passwortmanager für Linux/Android</title>
		<link>http://www.jbart.eu/2011/10/passwortmanager-fur-linuxandroid/</link>
		<comments>http://www.jbart.eu/2011/10/passwortmanager-fur-linuxandroid/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 20:30:51 +0000</pubDate>
		<dc:creator>jbart</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[GPass]]></category>
		<category><![CDATA[KeePass]]></category>
		<category><![CDATA[Passwort Manager]]></category>

		<guid isPermaLink="false">http://www.jbart.eu/?p=165</guid>
		<description><![CDATA[Sichere Zugangsdaten erreicht man nur durch verschiedene Passwörter (und am besten durch verschiedene Benutzer) für jede geschützte Seite. Um hier nicht den Überblick zu verlieren, verwende ich bisher GPass von Gnome, denn ich einfach mit Rsync auf meinen zwei Rechnern synchron halten kann. Neuerdings ist ein Android Tablet dazu gekommen und ich musste mich nach [...]]]></description>
			<content:encoded><![CDATA[<p>Sichere Zugangsdaten erreicht man nur durch verschiedene Passwörter (und am besten durch verschiedene Benutzer) für jede geschützte Seite. Um hier nicht den Überblick zu verlieren, verwende ich bisher GPass von Gnome, denn ich einfach mit Rsync auf meinen zwei Rechnern synchron halten kann. Neuerdings ist ein Android Tablet dazu gekommen und ich musste mich nach einer neuen Lösung umsehen, da es kein GPass für Android gibt.</p>
<p>Fündig bin ich bei <a href="http://keepass.info/" title="KeePass" target="_blank">KeePass</a> geworden, dass es für alle wichtigen Plattformen gibt. Die Synchronisation lässt sich weiterhin mit Rsync via USB-Kabel vornehmen, einfach die *.kbd Datei in die Synchronisation aufnehmen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jbart.eu/2011/10/passwortmanager-fur-linuxandroid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unit-Test Tools: Apache FTP Server</title>
		<link>http://www.jbart.eu/2011/03/unit-test-tools-apache-ftp-server/</link>
		<comments>http://www.jbart.eu/2011/03/unit-test-tools-apache-ftp-server/#comments</comments>
		<pubDate>Fri, 11 Mar 2011 13:08:47 +0000</pubDate>
		<dc:creator>jbart</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Unit-Tests]]></category>
		<category><![CDATA[JEE]]></category>
		<category><![CDATA[JUnit]]></category>
		<category><![CDATA[Mock FTP Server]]></category>

		<guid isPermaLink="false">http://www.jbart.eu/?p=154</guid>
		<description><![CDATA[Weiter aus der Serie &#8220;nützliche Unit-Test Tools&#8221;: der Apache FTP Server. Mit wenigen Zeilen Code kann man einen lokalen FTP Server starten, der dann für Tests verwendet werden kann. Wie üblich reicht für das Einbinden vom Apache FTP Server ein Eintrag in maven: Aus Performancegründen bietet es sich an, den FTP Server nicht generell zu [...]]]></description>
			<content:encoded><![CDATA[<p>Weiter aus der Serie &#8220;nützliche Unit-Test Tools&#8221;: der Apache FTP Server. Mit wenigen Zeilen Code kann man einen lokalen FTP Server starten, der dann für Tests verwendet werden kann. </p>
<p>Wie üblich reicht für das Einbinden vom Apache FTP Server ein Eintrag in maven:</p>
<pre class="qoate-code">
&lt;dependency&gt;
    &lt;groupId&gt;org.apache.ftpserver&lt;/groupId&gt;
    &lt;artifactId&gt;ftpserver-core&lt;/artifactId&gt;
    &lt;version&gt;1.0.4&lt;/version&gt;
&lt;/dependency&gt;
</pre>
<p>Aus Performancegründen bietet es sich an, den FTP Server nicht generell zu speichern, sondern den Start in eine statische Methode auszulagern, sodaß pro Test entschieden werden kann, ob ein FTP Server benötigt wird.</p>
<pre class="qoate-code">
File ftpDirectory = new File("ftproot");
ftpDirectory.mkdirs(); // create target/ftproot

FtpServerFactory serverFactory = new FtpServerFactory();
ListenerFactory factory = new ListenerFactory();
factory.setPort(2121); // FTP Port, unter Linux &gt; 1024

try {
    serverFactory.addListener("default", factory.createListener());

    PropertiesUserManagerFactory userFactory = new PropertiesUserManagerFactory();
    File userFile = new File("ftpusers.properties");
    userFactory.setFile(userFile);
    serverFactory.setUserManager(userFactory.createUserManager());

    ftpServer = serverFactory.createServer();
    ftpServer.start();
} catch (Exception e) {
    LOGGER.log(Level.SEVERE, "Unable to start test ftpserver", e);
}
</pre>
<p>Um dann das Verhalten von Komponten zu testen, die einen FTP Up- oder Download durchführen, kann simpler Verwendung von java.io.File prüfen, ob Dateien vorhanden sind bzw. diese dann weitergehend verarbeiten.</p>
<p>Beispiel für das überprüfen einer hochgeladenen Datei:</p>
<pre class="qoate-code">
assertTrue(new File(ftpDirectory, path).exists());
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.jbart.eu/2011/03/unit-test-tools-apache-ftp-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Best practices für Struts2</title>
		<link>http://www.jbart.eu/2011/03/best-practices-fur-struts2/</link>
		<comments>http://www.jbart.eu/2011/03/best-practices-fur-struts2/#comments</comments>
		<pubDate>Thu, 03 Mar 2011 11:42:53 +0000</pubDate>
		<dc:creator>jbart</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Struts2]]></category>

		<guid isPermaLink="false">http://www.jbart.eu/?p=143</guid>
		<description><![CDATA[Sinnvolle Plugins für Struts2 (basierend für 2.2.1.1) struts2-tiles-plugin.jar struts2-json-plugin.jar (für Ajax) struts2-jquery-plugin-2.5.3.jar (für JQuery Integration) Alle Formularfelder pro Action in einer dafür entsprechenden Formular-Bean gruppieren. Dies vereinfacht die Lesbarkeit und macht die Struts2-Applikation für jemanden aus der JEE Welt deutlich lesbarer. Desweiteren lässen sich so View und Model auch für anderen Frameworks (JSF) wiederverwenden. Wenn [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li>Sinnvolle Plugins für Struts2 (basierend für 2.2.1.1)
<ul>
<li>struts2-tiles-plugin.jar</li>
<li>struts2-json-plugin.jar (für Ajax)</li>
<li>struts2-jquery-plugin-2.5.3.jar (für JQuery Integration)</li>
</ul>
</li>
<li>Alle Formularfelder pro Action in einer dafür entsprechenden Formular-Bean gruppieren. Dies vereinfacht die Lesbarkeit und macht die Struts2-Applikation für jemanden aus der JEE Welt deutlich lesbarer. Desweiteren lässen sich so View und Model auch für anderen Frameworks (JSF) wiederverwenden.</li>
<li>Wenn Formuale vorausgefüllte Select-Boxen oder ähnliches haben sollen, dann diese in der entsprechendne prepare-Methode (siehe Preparable Interface) vorbereiten. Achtung: unbedingt: paramsPrepareParamsStack verwenden, damit auch Parameter zur Verfügung stehen.</li>
<li>AJAX-Requests: das json-Plugin verwenden und den entsprechenden Result-Type &#8220;org.apache.struts2.json.JSONResult&#8221; verwenden. Weiterhin am besten ein eigenes Formular-Bean schrieben, daß aus einem Status-property und eines Ergebnis-Properties vom Typ HashMap<String, Object> besteht. Dies ermöglicht eine Abfrage, ob der Request generell erfolgreich war. </li>
<li>Bei Validierung darauf achten, daß die zu validierende Seite über die Standard-Outcome &#8220;input&#8221; sichtbar ist. Ansonsten wird zwar validiert, aber Struts2 findet den View nicht wieder</li>
<li>Weiterhin ist bei Validierung darauf zu achten, daß das UI Theme &#8220;simple&#8221; keine Feldfehler darstellt. Man muss hier nicht das Template überschreiben, sondern es reicht aus, selbstständig im entsprechenden Bereich mit dem s:fielderror den Fehler darzustellen.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.jbart.eu/2011/03/best-practices-fur-struts2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nie wieder Getter/Setter schreiben&#8230;</title>
		<link>http://www.jbart.eu/2011/01/nie-wieder-gettersetter-schreiben/</link>
		<comments>http://www.jbart.eu/2011/01/nie-wieder-gettersetter-schreiben/#comments</comments>
		<pubDate>Tue, 11 Jan 2011 18:49:50 +0000</pubDate>
		<dc:creator>jbart</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[JEE]]></category>

		<guid isPermaLink="false">http://www.jbart.eu/?p=132</guid>
		<description><![CDATA[Getter/Setter haben ja ihre Daseinsberechtigung, aber manchmal nervt es schon, vor allem wenn man die Entitäten per Hand schreibt und nicht generieren lässt. Ich habe gerade die Bibliothek Lombok (http://projectlombok.org) empfohlen bekommen und frage mich, warum nicht früher? Ich hätte mir so viel Tipparbeit sparen können. Mit Hilfe von verschiedenen Annotations werden Getter/Setter, aber auch [...]]]></description>
			<content:encoded><![CDATA[<p>Getter/Setter haben ja ihre Daseinsberechtigung, aber manchmal nervt es schon, vor allem wenn man die Entitäten per Hand schreibt und nicht generieren lässt. Ich habe gerade die Bibliothek Lombok (<a href="http://projectlombok.org/">http://projectlombok.org</a>) empfohlen bekommen und frage mich, warum nicht früher? Ich hätte mir so viel Tipparbeit sparen können. Mit Hilfe von verschiedenen Annotations werden Getter/Setter, aber auch Equals und Hashcode von Lombok generiert, und zwar noch in der IDE, so erscheinen Sie direkt in der Outline und können auch sofort verwendet werden. Eine Integration gibt es momentan für Eclipse und Netbeans, und die Verwendung ist auch super einfach:</p>
<pre class="qoate-code">
@Data
public class Test {
  private long id;

  private String text;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.jbart.eu/2011/01/nie-wieder-gettersetter-schreiben/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wie machen es die anderen?</title>
		<link>http://www.jbart.eu/2010/12/wie-machen-es-die-anderen/</link>
		<comments>http://www.jbart.eu/2010/12/wie-machen-es-die-anderen/#comments</comments>
		<pubDate>Thu, 23 Dec 2010 12:26:46 +0000</pubDate>
		<dc:creator>jbart</dc:creator>
				<category><![CDATA[Architektur]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[JEE]]></category>

		<guid isPermaLink="false">http://www.jbart.eu/?p=125</guid>
		<description><![CDATA[ZeroTurnaround, Hersteller von JRebel, veröffentlicht auch dieses Jahr wieder seine Umfrage unter JAVA-Entwicklern über Framework, Tools und Entwicklungs-Vorgehensweisen (Redeploy, Wartezeit etc.). Sehr lesenswert!]]></description>
			<content:encoded><![CDATA[<p>ZeroTurnaround, Hersteller von JRebel, veröffentlicht auch dieses Jahr wieder seine <a href="http://www.zeroturnaround.com/java-ee-productivity-report-2011/">Umfrage</a> unter JAVA-Entwicklern über Framework, Tools und Entwicklungs-Vorgehensweisen (Redeploy, Wartezeit etc.). Sehr lesenswert!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jbart.eu/2010/12/wie-machen-es-die-anderen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unit-Test Tools: Dumbster (Fake Mailserver)</title>
		<link>http://www.jbart.eu/2010/12/unit-test-tools-dumbster-fake-mailserver/</link>
		<comments>http://www.jbart.eu/2010/12/unit-test-tools-dumbster-fake-mailserver/#comments</comments>
		<pubDate>Fri, 17 Dec 2010 11:35:31 +0000</pubDate>
		<dc:creator>jbart</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Unit-Tests]]></category>
		<category><![CDATA[Dumbster]]></category>
		<category><![CDATA[JEE]]></category>
		<category><![CDATA[JUnit]]></category>
		<category><![CDATA[Mock Mailserver]]></category>

		<guid isPermaLink="false">http://www.jbart.eu/?p=82</guid>
		<description><![CDATA[In meinem Projekten begegne ich oft den gleichen Phänomenen: Unit-Tets sind vorhanden, aber sehr rudimentär (paar Tests für irgendwelche statischen Methoden, wenn man Glück hat werden noch Datenbankzugriffe getestet). Eine Erklärung dafür könnte sein, daß das Aufbauen eines entsprechenden Test-Environments nicht richtig durchgeführt wurde und es im Nachhinein zu komplex ist, wenn mehr als eine [...]]]></description>
			<content:encoded><![CDATA[<p>In meinem Projekten begegne ich oft den gleichen Phänomenen: Unit-Tets sind vorhanden, aber sehr rudimentär (paar Tests für irgendwelche statischen Methoden, wenn man Glück hat werden noch Datenbankzugriffe getestet). Eine Erklärung dafür könnte sein, daß das Aufbauen eines entsprechenden Test-Environments nicht richtig durchgeführt wurde und es im Nachhinein zu komplex ist, wenn mehr als eine Datenbank benötigt wird, z. B. Testdaten müssen vorhanden sein, FTP oder E-Mailserver werden verwendet uws. Hier hat der Architekt versagt, aber auch solche Umgebungen lassen sich langsam erweitern. Dazu möchte ich hier ein paar Tools vorstellen, die ich im letzten Projekt einsetzen konnte. Wir beginnen mit Dumbster (<a href="http://quintanasoft.com/dumbster/">http://quintanasoft.com/dumbster/</a>), einem Fake Mailserver unter der Apache License 2.0.</p>
<p>Dumbster ist im Maven Repository und kann mittels pom.xml eingebunden werden</p>
<pre class="qoate-code">
&lt;dependency&gt;
  &lt;groupId&gt;dumbster&lt;/groupId&gt;
  &lt;artifactId&gt;dumbster&lt;/artifactId&gt;
  &lt;version&gt;1.6&lt;/version&gt;
  &lt;scope&gt;test&lt;/scope&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
  &lt;groupId&gt;javax.mail&lt;/groupId&gt;
  &lt;artifactId&gt;mail&lt;/artifactId&gt;
  &lt;version&gt;1.4.3&lt;/version&gt;
  &lt;scope&gt;test&lt;/scope&gt;
&lt;/dependency&gt;
</pre>
<p>Er wird einfach über einen Konstruktor in der setUp-Methode erstellt und dem Container (in meinem Fall JEE mit OpenEJB) mitgeteilt:</p>
<pre class="qoate-code">
mockMailServer = SimpleSmtpServer.start(2525);

// mail resource
p.put("mail/postman", "new://Resource?type=javax.mail.Session");
p.put("mail/postman.mail.smtp.host", "localhost");
p.put("mail/postman.mail.smtp.port", "2525");
p.put("mail/postman.mail.transport.protocol", "smtp");
p.put("mail/postman.mail.smtp.auth", "false");
</pre>
<p>Entsprechende Unit-Tests könnten dann so aussehen:</p>
<pre class="qoate-code">
... JAVA Code, der E-Mails via @Resource(name = "mail/postman") verschickt

assertEquals(3, mockMailServer.getReceivedEmailSize());
Iterator iter = mockMailServer.getReceivedEmail(); // get first email
SmtpMessage smtpMessage = (SmtpMessage) iter.next();
assertEquals("Test", smtpMessage.getHeaderValue("Subject"));
assertEquals("Test User &lt;from@localhost&gt;", smtpMessage.getHeaderValue("From"));
assertEquals("Hallo Welt!", smtpMessage.getBody());
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.jbart.eu/2010/12/unit-test-tools-dumbster-fake-mailserver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>postgresql2mysql Teil 2</title>
		<link>http://www.jbart.eu/2010/12/postgresql2mysql-teil-2/</link>
		<comments>http://www.jbart.eu/2010/12/postgresql2mysql-teil-2/#comments</comments>
		<pubDate>Wed, 15 Dec 2010 08:34:31 +0000</pubDate>
		<dc:creator>jbart</dc:creator>
				<category><![CDATA[Datenbanken]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://www.jbart.eu/?p=69</guid>
		<description><![CDATA[Im ersten Teil zu &#8220;postgresql2mysql&#8221; habe ich ja gezeigt, wie man aus einem Schema-Dump ein einigermassen MySQL kompatibles Schema per Linux-Tools machen kann. Je nach eingesetzten Features (Constraints, Indexe) muss man hier aber evtl. noch anpassen. Inzwischen bin ich ein bisschen weiter und habe die Daten übertragen. Dies klappt erstaunlicherweise ganz gut mit COPY TO [...]]]></description>
			<content:encoded><![CDATA[<p>Im ersten Teil zu &#8220;postgresql2mysql&#8221; habe ich ja gezeigt, wie man aus einem Schema-Dump ein einigermassen MySQL kompatibles Schema per Linux-Tools machen kann. Je nach eingesetzten Features (Constraints, Indexe) muss man hier aber evtl. noch anpassen. </p>
<p>Inzwischen bin ich ein bisschen weiter und habe die Daten übertragen. Dies klappt erstaunlicherweise ganz gut mit COPY TO auf PostgreSQL Seite und LOAD DATA INFILE auf MySQL Seite. Sieht konkret so aus:</p>
<pre class="qoate-code">
psql -h$PSQL_HOST -U$PSQL_USER $PSQL_DB -c "\COPY export.$table TO '/tmp/$table.csv'"
mysql --default-character-set=latin1 -h$MYSQL_HOST -u$MYSQL_USER --password="$MYSQL_PASSWORD" $MYSQL_DB -e "LOAD DATA LOCAL INFILE '/tmp/$table.csv' INTO TABLE $table"
</pre>
<p>Das klappt wahrscheinlich nicht mit binären Spalten (habe keine) und leider auch nicht mit Booleans, die bei MySQL mit TINYINT(1) dargestellt werden. Um dieses Problem zu umgehen, konvertiere ich die Spalten vorher in der PostgreSQL ebenfalls zu SMALLINT. Dabei kommt CREATE CAST in PostgreSQL zum Einsatz.</p>
<pre class="qoate-code">
CREATE OR REPLACE FUNCTION export.bool2smallint(value boolean) RETURNS smallint AS $$
BEGIN
        IF value = false THEN
                return 0;
        ELSIF value = true THEN
                return 1;
        ELSE
                return NULL;
        END IF;
END;
$$ LANGUAGE plpgsql;

DROP CAST IF EXISTS (boolean AS smallint);

CREATE CAST (boolean AS smallint) WITH FUNCTION export.bool2smallint(boolean) AS IMPLICIT;

CREATE OR REPLACE FUNCTION export.convert_boolean_column_to_int(tabelle varchar(255), feld varchar(255)) RETURNS void AS $$
BEGIN
        EXECUTE 'ALTER TABLE ' || tabelle || ' ALTER ' || feld || ' TYPE smallint';
END;
$$ LANGUAGE plpgsql;
</pre>
<p>Anschliessend muss nur jede Boolean-Salte konviertiert werden:</p>
<pre class="qoate-code">
SELECT export.convert_boolean_column_to_int('export.kunde', 'mwstausweisbar');
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.jbart.eu/2010/12/postgresql2mysql-teil-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Architecture Open Space 2010 am 10. und 11. Dezember in Dortmund</title>
		<link>http://www.jbart.eu/2010/12/architecture-open-space-2010-am-10-und-11-dezember-in-dortmund/</link>
		<comments>http://www.jbart.eu/2010/12/architecture-open-space-2010-am-10-und-11-dezember-in-dortmund/#comments</comments>
		<pubDate>Wed, 08 Dec 2010 09:45:24 +0000</pubDate>
		<dc:creator>jbart</dc:creator>
				<category><![CDATA[Architektur]]></category>

		<guid isPermaLink="false">http://www.jbart.eu/?p=66</guid>
		<description><![CDATA[Am 11. Dezember (ich kann leider nur Samstags) nehme ich an meiner ersten &#8220;Open Space&#8221; Konferenz teil: http://archnet.mixxt.de/. Ich bin mal gespannt, wie diese Moderationstechnik funktioniert. Ich bin mir aber sicher, daß man bei dem Stil die Menschen besser kennen lernt, als wenn ein Moderator vorn alles via Powerpoint präsentiert.]]></description>
			<content:encoded><![CDATA[<p>Am 11. Dezember (ich kann leider nur Samstags) nehme ich an meiner ersten &#8220;Open Space&#8221; Konferenz teil: <a href="http://archnet.mixxt.de/">http://archnet.mixxt.de/</a>.</p>
<p>Ich bin mal gespannt, wie diese Moderationstechnik funktioniert. Ich bin mir aber sicher, daß man bei dem Stil die Menschen besser kennen lernt, als wenn ein Moderator vorn alles via Powerpoint präsentiert. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.jbart.eu/2010/12/architecture-open-space-2010-am-10-und-11-dezember-in-dortmund/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nützliche Tools: watch</title>
		<link>http://www.jbart.eu/2010/12/nutzliche-tools-watch-bash/</link>
		<comments>http://www.jbart.eu/2010/12/nutzliche-tools-watch-bash/#comments</comments>
		<pubDate>Wed, 01 Dec 2010 12:40:28 +0000</pubDate>
		<dc:creator>jbart</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://www.jbart.eu/?p=61</guid>
		<description><![CDATA[Schonmal 20x hintereinander &#8220;ls -la&#8221; eingegeben, um zu schauen ob eine Datei geschrieben wird bzw. wächst? Genau das macht watch, es führt einen Befehl periodisch aus. Beispiele: Mit dem Schalter -n 1 kann man die Updatezeit einstellen (hier eine Sekunde, default ist auf zwei Sekunden). Besonders hilfreich ist der Schalter -d, der Änderungen in der [...]]]></description>
			<content:encoded><![CDATA[<p>Schonmal 20x hintereinander &#8220;ls -la&#8221; eingegeben, um zu schauen ob eine Datei geschrieben wird bzw. wächst? Genau das macht <strong>watch</strong>, es führt einen Befehl periodisch aus. Beispiele:</p>
<pre class="qoate-code">
watch -n  1 ls -la
</pre>
<p>Mit dem Schalter -n 1 kann man die Updatezeit einstellen (hier eine Sekunde, default ist auf zwei Sekunden). Besonders hilfreich ist der Schalter -d, der Änderungen in der Ausgabe grafisch anzeigt.</p>
<pre class="qoate-code">
watch -d ls -la
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.jbart.eu/2010/12/nutzliche-tools-watch-bash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>postgresql2mysql</title>
		<link>http://www.jbart.eu/2010/11/postgresql2mysql/</link>
		<comments>http://www.jbart.eu/2010/11/postgresql2mysql/#comments</comments>
		<pubDate>Sat, 20 Nov 2010 20:13:44 +0000</pubDate>
		<dc:creator>jbart</dc:creator>
				<category><![CDATA[Datenbanken]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PostgreSQL]]></category>

		<guid isPermaLink="false">http://www.jbart.eu/?p=10</guid>
		<description><![CDATA[Mit folgendem Skript lässt sich ein Postgresql Schema Dump in ein MySQL Dump verwandeln:]]></description>
			<content:encoded><![CDATA[<p>Mit folgendem Skript lässt sich ein Postgresql Schema Dump in ein MySQL Dump verwandeln:</p>
<pre class="qoate-code">
pg_dump --schema=public -s &lt;datenbank&gt;| grep -v "^--" | grep -i "CREATE TABLE" -A 999999 | \
	grep -v "ALTER SEQUENCE" |  \
	awk -v lines=6 '/^CREATE SEQUENCE/ {for (i=0; i&lt;lines; i++) {getline}; next} 1'  | \
	grep -v "OWNER TO &lt;db_user&gt;;" | \
	awk -v lines=2 '/^CREATE VIEW/ {for (i=0; i&lt;lines; i++) {getline}; next} 1' | \
	grep -v "SET DEFAULT nextval" | \
	sed -e "s/integer DEFAULT nextval('.*'::regclass)/SERIAL/g" | \
	sed -e "s/ without time zone//g" | \
	more # &gt; schema-1.sql
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.jbart.eu/2010/11/postgresql2mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

