<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8076030733426004353</id><updated>2012-02-20T22:35:39.631+01:00</updated><category term='Sport'/><category term='WebService'/><category term='JPA'/><category term='Wordpress'/><category term='Captcha'/><category term='UI'/><category term='Berlin'/><category term='Model-Driven'/><category term='Software-Development'/><category term='Ajax'/><category term='Web'/><category term='Snippets'/><category term='Kulinarisches'/><category term='MDA'/><category term='plugin'/><category term='DSL'/><category term='Mac'/><category term='email'/><category term='Spring'/><category term='Persistence'/><category term='SE'/><category term='Mail'/><category term='Ulk'/><category term='JBoss'/><category term='Portal'/><category term='QA'/><category term='REST'/><category term='HCI'/><category term='iCal'/><category term='UML'/><category term='Java'/><category term='Web 2.0'/><category term='chart'/><category term='Google'/><category term='DDR'/><category term='PHP'/><category term='Drupal'/><category term='Synchronization'/><category term='Linux'/><category term='Operating Systems'/><category term='newsletter'/><category term='Eclipse'/><category term='HTML'/><category term='Tools'/><category term='DMS'/><category term='Patterns'/><category term='Form4'/><category term='automation'/><category term='writing'/><category term='widget'/><category term='LaTeX'/><category term='oaw'/><title type='text'>About Software Development</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>50</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-2702827859768355837</id><published>2012-01-08T22:32:00.001+01:00</published><updated>2012-01-08T22:32:42.536+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='email'/><category scheme='http://www.blogger.com/atom/ns#' term='automation'/><category scheme='http://www.blogger.com/atom/ns#' term='newsletter'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>How-to create individual HTML mass mailings</title><content type='html'>&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Ix7rh_0BT9o/TwnyMi4PfxI/AAAAAAAAAjo/tuf1rgmQO7A/s1600/preview.JPG" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-Ix7rh_0BT9o/TwnyMi4PfxI/AAAAAAAAAjo/tuf1rgmQO7A/s320/preview.JPG" width="228" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;HTML email example&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;You need to create individual &lt;b&gt;smart looking invitation emails&lt;/b&gt; e.g. for wedding or birthday or want to create an &lt;b&gt;individual mass mailing&lt;/b&gt;, but you don´t have a newsletter server neither want to pay for a service offering such a solution online?&lt;br /&gt;&lt;br /&gt;Solution described here requires only some &lt;b&gt;knowledge of HTML and CSS&lt;/b&gt;. But you have to notice that creating an html email can be a very hard work to get it working on most email clients. Some popular clients like GMail or Outlook have &lt;a href="http://www.campaignmonitor.com/css/" target="_blank"&gt;lack of support&lt;/a&gt; for several CSS definitions. Though there are several guidelines that help to achieve cross-email client support. So if your layout isn´t too wicked it won´t be magic to create an individual mass mailing.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: x-large;"&gt;Create HTML template&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;At first you have to create the HTML template code representing you mailing. You can use any editor of your choice e.g. notepad++, dreamweaver or any other.&lt;br /&gt;&lt;br /&gt;Please consider the very helpful guidelines to create markup of emails &lt;a href="http://www.campaignmonitor.com/resources/category-archive/cat/designing-and-building-emails/" target="_blank"&gt;http://www.campaignmonitor.com/resources/category-archive/cat/designing-and-building-emails/&lt;/a&gt;&amp;nbsp; as well as &amp;nbsp;comparison of css support on&amp;nbsp;different&amp;nbsp;mail clients&amp;nbsp;&lt;a href="http://www.campaignmonitor.com/css/" target="_blank"&gt;http://www.campaignmonitor.com/css/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Respecting that guidelines for email creation we'll use &lt;b&gt;tables for layout&lt;/b&gt; and limit it to a &lt;b&gt;width of 550px&lt;/b&gt;.We also respect &lt;b&gt;recommendation of rendering links&lt;/b&gt; with an additional span.&lt;br /&gt;&lt;br /&gt;Our example HTML email template:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;  &amp;lt;table cellspacing="0" cellpadding="0" border="0"&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;      &amp;lt;td width="550"&amp;gt;&lt;br /&gt;        &amp;lt;img alt="MES QUE UN CLUB" src="http://3.bp.blogspot.com/-Fsrp9BG5ygE/TwnvnvkpkhI/AAAAAAAAAjg/FPSBd2aJjBI/s1600/title.JPG" width="550" height="310" /&amp;gt;&lt;br /&gt;      &amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;      &amp;lt;td width="550" style="padding: 20px 0px 20px 0px;"&amp;gt;&lt;br /&gt;        &amp;lt;table&amp;gt;&lt;br /&gt;          &amp;lt;tr&amp;gt;&lt;br /&gt;            &amp;lt;td width="128" valign="top"&amp;gt;&amp;lt;img alt="Logo FC Barcelona" src="http://www.vflnet.com/infos/spain/fc_barcelona/fc_barcelona.gif" /&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;            &amp;lt;td width="422" style="font-family: Verdana, Arial, sans; padding: 0px 0px 0px 10px;"&amp;gt;&lt;br /&gt;              &amp;lt;p style="color: #08468D; font-size: 0.85em; line-height: 1.5em;"&amp;gt;Dear {{FirstName}} {{LastName}},&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Sit augue vel lectus! Cursus, purus vel pid pulvinar amet enim placerat aenean tempor pulvinar, proin, mid ac nisi parturient! Nisi elementum porttitor, porta, aliquet enim a? Sociis placerat platea! Proin facilisis dignissim nec sit et! Ridiculus egestas, magna, lorem, proin duis? Cras &amp;lt;a href="http://www.fcbarcelona.com/" style="color: #A61F51;"&amp;gt;&amp;lt;span style="color: #A61F51;"&amp;gt;nascetur sed penatibus&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt; turpis enim, nascetur nisi, tortor ac odio. Lectus, lacus, lectus, porttitor, amet proin eros, adipiscing magna ridiculus amet, aenean! In. Sed magnis augue amet, dictumst elit! Turpis adipiscing placerat nascetur pellentesque? Dolor eu nisi? Natoque mid et pulvinar, cursus ac, hac in! Facilisis elementum, nec, integer odio, nisi porttitor aliquet etiam cursus ultrices? Odio. Mid augue enim integer nascetur? Et! Sociis arcu aenean nec mattis nascetur dictumst eros cras nascetur a quis porttitor mattis.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Yours sincerely&amp;lt;br&amp;gt;Micha&lt;br /&gt;              &amp;lt;/p&amp;gt;&lt;br /&gt;            &amp;lt;/td&amp;gt;&lt;br /&gt;          &amp;lt;/tr&amp;gt;&lt;br /&gt;        &amp;lt;/table&amp;gt;&lt;br /&gt;      &amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;      &amp;lt;td width="550" align="center" style="font-family: Verdana, Arial, sans; padding: 10px 0px 0px 0px; border-top: 1px solid #08468D; color: #08468D;"&amp;gt;   &lt;br /&gt;         &amp;lt;p style="font-size: 0.6em;"&amp;gt;individual HTML mail template example created by mmrotzek.de&amp;lt;/p&amp;gt;&lt;br /&gt;      &amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Ix7rh_0BT9o/TwnyMi4PfxI/AAAAAAAAAjo/tuf1rgmQO7A/s1600/preview.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="640" src="http://3.bp.blogspot.com/-Ix7rh_0BT9o/TwnyMi4PfxI/AAAAAAAAAjo/tuf1rgmQO7A/s640/preview.JPG" width="456" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;span style="font-size: small; text-align: -webkit-auto;"&gt;Preview in web browser&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span id="goog_1386033799"&gt;&lt;/span&gt;&lt;span id="goog_1386033800"&gt;&lt;/span&gt;&lt;a href="http://www.blogger.com/"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Notes on creating email HTML template&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Images have to be linked to a web published source. Either you upload your referenced images to your web space or use a service where you can reference them like flikr or picasa.&lt;/li&gt;&lt;li&gt;You can use&amp;nbsp;&lt;a href="http://kuler.adobe.com/" target="_blank"&gt;http://kuler.adobe.com&lt;/a&gt;&amp;nbsp;to create a color theme. In this example used color theme has been &amp;nbsp;generated by uploading barca logo to kuler. Here´s a screenshot:&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-UVbLQwAWgUk/TwnzhuyVoVI/AAAAAAAAAjw/uRzXgs2pwDA/s1600/kuler.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="273" src="http://2.bp.blogspot.com/-UVbLQwAWgUk/TwnzhuyVoVI/AAAAAAAAAjw/uRzXgs2pwDA/s400/kuler.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: x-large;"&gt;Send individual emails&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Preparing HTML template&lt;/span&gt;&lt;br /&gt;There is a great service for preparing your created mailing template to ensure maximum cross email client compliance on&amp;nbsp;&lt;a href="http://premailer.dialect.ca/" target="_blank"&gt;http://premailer.dialect.ca/&lt;/a&gt;. It will cleanup your definitions e.g. it transforms css definitions to &amp;nbsp;inline style attributes. They´re offering an API too.&lt;br /&gt;&lt;br /&gt;After a cleanup with that service our example mailing html code is:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;  &amp;lt;table cellspacing="0" cellpadding="0" border="0"&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td width="550"&amp;gt;&lt;br /&gt;        &amp;lt;img alt="MES QUE UN CLUB" src="http://3.bp.blogspot.com/-Fsrp9BG5ygE/TwnvnvkpkhI/AAAAAAAAAjg/FPSBd2aJjBI/s1600/title.JPG" width="550" height="310"&amp;gt;&lt;br /&gt;&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td width="550" style="padding: 20px 0px;"&amp;gt;&lt;br /&gt;        &amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td width="128" valign="top"&amp;gt;&amp;lt;img alt="Logo FC Barcelona" src="http://www.vflnet.com/infos/spain/fc_barcelona/fc_barcelona.gif"&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;            &amp;lt;td width="422" style="font-family: Verdana, Arial, sans; padding: 0px 0px 0px 10px;"&amp;gt;&lt;br /&gt;              &amp;lt;p style="color: #08468D; font-size: 0.85em; line-height: 1.5em;"&amp;gt;Dear {{FirstName}} {{LastName}},&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Sit augue vel lectus! Cursus, purus vel pid pulvinar amet enim placerat aenean tempor pulvinar, proin, mid ac nisi parturient! Nisi elementum porttitor, porta, aliquet enim a? Sociis placerat platea! Proin facilisis dignissim nec sit et! Ridiculus egestas, magna, lorem, proin duis? Cras &amp;lt;a href="http://www.fcbarcelona.com/" style="color: #A61F51;"&amp;gt;&amp;lt;span style="color: #A61F51;"&amp;gt;nascetur sed penatibus&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt; turpis enim, nascetur nisi, tortor ac odio. Lectus, lacus, lectus, porttitor, amet proin eros, adipiscing magna ridiculus amet, aenean! In. Sed magnis augue amet, dictumst elit! Turpis adipiscing placerat nascetur pellentesque? Dolor eu nisi? Natoque mid et pulvinar, cursus ac, hac in! Facilisis elementum, nec, integer odio, nisi porttitor aliquet etiam cursus ultrices? Odio. Mid augue enim integer nascetur? Et! Sociis arcu aenean nec mattis nascetur dictumst eros cras nascetur a quis porttitor mattis.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;Yours sincerely&amp;lt;br&amp;gt;Micha&lt;br /&gt;              &amp;lt;/p&amp;gt;&lt;br /&gt;            &amp;lt;/td&amp;gt;&lt;br /&gt;          &amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td width="550" align="center" style="font-family: Verdana, Arial, sans; border-top-color: #08468D; border-top-width: 1px; padding: 10px 0px 0px; border-top-style: solid; color: #08468D;"&amp;gt;   &lt;br /&gt;         &amp;lt;p style="font-size: 0.6em;"&amp;gt;individual HTML mail template example created by mmrotzek.de&amp;lt;/p&amp;gt;&lt;br /&gt;      &amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size: large;"&gt;Sending individual emails with Thunderbird&lt;/span&gt;&lt;br /&gt;To create individual emails based on a template we need &lt;a href="http://www.getthunderbird.com/" target="_blank"&gt;Thunderbird&lt;/a&gt; email client and the &lt;a href="https://addons.mozilla.org/de/thunderbird/addon/mail-merge/" target="_blank"&gt;Mail Merge&lt;/a&gt; add-on.&lt;br /&gt;&lt;br /&gt;Note: In your Thunderbird preferences you have to enable composing of HTML messages.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;compose a new message&lt;/li&gt;&lt;li&gt;as recipient fill-in&amp;nbsp;&lt;code&gt;{{FirstName}} {{LastName}} &amp;lt;{{Mail}}&amp;gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;select a subject&lt;/li&gt;&lt;li&gt;copy your clean HTML mail template code&lt;/li&gt;&lt;li&gt;activate message body by clicking on it and select &lt;code&gt;Insert &amp;gt; HTML...&lt;/code&gt;&lt;/li&gt;&lt;li&gt;in the opening dialog paste your code&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ypYT0HLB6Q0/Twn9ctk4gGI/AAAAAAAAAkI/XLVCr7bCFYM/s1600/pasthtml.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="339" src="http://1.bp.blogspot.com/-ypYT0HLB6Q0/Twn9ctk4gGI/AAAAAAAAAkI/XLVCr7bCFYM/s640/pasthtml.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-hvuFdfiindA/Twn9kCdS39I/AAAAAAAAAkQ/jiLj16TFJkY/s1600/mailpreview.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="510" src="http://4.bp.blogspot.com/-hvuFdfiindA/Twn9kCdS39I/AAAAAAAAAkQ/jiLj16TFJkY/s640/mailpreview.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;select &lt;code&gt;File &amp;gt; Mail Merge&lt;/code&gt;&lt;/li&gt;&lt;li&gt;on opening dialog you can select options to fill you placeholder by contact from address book or by a special csv file (refer to &lt;a href="https://addons.mozilla.org/de/thunderbird/addon/mail-merge/" target="_blank"&gt;add-on documentation&lt;/a&gt; for details)&lt;/li&gt;&lt;li&gt;in this example we´ll use a csv file (note: replacement with a csv file has no limits, you can use any custom placeholder you like)&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-v_NPk30g1pQ/TwoAQxZS5XI/AAAAAAAAAkY/YcZR-73gYWw/s1600/csvdata.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/-v_NPk30g1pQ/TwoAQxZS5XI/AAAAAAAAAkY/YcZR-73gYWw/s400/csvdata.JPG" width="267" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;example csv data:&lt;br /&gt;&lt;pre class="prettyprint"&gt;FirstName,LastName,Mail&lt;br /&gt;Lionel,Messi,messi@fcbarcelona.com&lt;br /&gt;Charles,Puyol,puyol@fcbarcelona.com&lt;br /&gt;Josep,Guardiola,pep@fcbarcelona.com&lt;/pre&gt;&lt;br /&gt;As result three individual emails are generated by the add-on.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-kpnvkjvC4Mo/TwoBkjdYw2I/AAAAAAAAAkg/mvmKq75zaeY/s1600/individual.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="371" src="http://1.bp.blogspot.com/-kpnvkjvC4Mo/TwoBkjdYw2I/AAAAAAAAAkg/mvmKq75zaeY/s640/individual.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This example uses the 'Save As Draft' option for test purposes, because we don´t want to send emails to fc barcelona players ;). If you want to generate and send the mails use 'Send Now' or 'Send Later' option.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-2702827859768355837?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/2702827859768355837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2012/01/how-to-create-individual-html-mass.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/2702827859768355837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/2702827859768355837'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2012/01/how-to-create-individual-html-mass.html' title='How-to create individual HTML mass mailings'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-Ix7rh_0BT9o/TwnyMi4PfxI/AAAAAAAAAjo/tuf1rgmQO7A/s72-c/preview.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-6412672498541124940</id><published>2011-06-28T01:08:00.000+02:00</published><updated>2011-06-28T01:08:14.614+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Blog reloaded</title><content type='html'>Mein Blog war nun eine ganze Zeit nicht mehr erreichbar, aber nun habe ich es endlich geschafft mich für eine technische Lösung zu entscheiden.&amp;nbsp;Letztlich ist die Entscheidung auf Google Blogger gefallen, da hier mit wenig Aufwand viel erreicht/angepasst werden kann und das Ganze auch keine Kosten verursacht.&lt;br /&gt;&lt;br /&gt;Die alten Inhalte sind migriert&amp;nbsp;auch wenn einige Formatierungen suboptimal sind, aber es sollen hier demnächst natürlich auch wieder neue Posts erscheinen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-6412672498541124940?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/6412672498541124940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2011/06/blog-reloaded.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/6412672498541124940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/6412672498541124940'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2011/06/blog-reloaded.html' title='Blog reloaded'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-5363177045625621412</id><published>2010-02-10T03:58:00.001+01:00</published><updated>2011-06-28T01:00:09.955+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software-Development'/><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><category scheme='http://www.blogger.com/atom/ns#' term='DSL'/><category scheme='http://www.blogger.com/atom/ns#' term='Form4'/><category scheme='http://www.blogger.com/atom/ns#' term='MDA'/><category scheme='http://www.blogger.com/atom/ns#' term='Model-Driven'/><title type='text'>Best Practices für die Entwicklung von DSLs</title><content type='html'>Einen sehr interessanten Vortrag von &lt;a href="http://voelter.de/"&gt;Markus Völter&lt;/a&gt; auf der JAX 2009 gibt es jetzt als &lt;a href="http://it-republik.de/jaxenter/news/JAX-TV-DSL-Best-Practices-053744.html" target="_blank"&gt;Video Stream&lt;/a&gt;. Seine Ausführungen stimmen zu sehr großen Teilen mit meinen Erfahrungen/Erkenntnissen im Bereich der modellgetriebenen Softwareentwicklung überein.&lt;br /&gt;&lt;br /&gt;An dieser Stelle ein paar unsortierte Erkenntnisse, die mir nach dem Ansehen des Vortrags im Kopf herumschwirren. Für eine konkrete Einordnung in den Kontext sei an dieser Stelle nochmals das &lt;a href="http://it-republik.de/jaxenter/news/JAX-TV-DSL-Best-Practices-053744.html" target="_blank"&gt;Video&lt;/a&gt; empfohlen.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Verwendung von Standards ≠ Verständnis&lt;br /&gt;&lt;ul&gt;&lt;li&gt;gutes Beispiel UML + Profil was Standard (OMG) ist, aber durch die spezifische Stereotypen etc. nicht zwingend verständlich ist&lt;/li&gt;&lt;li&gt;eine klar definierte DSL mit begrenztem Scope ist meistens die bessere Alternative, da einfach auch die Toolunterstützung bzw. die Handhabung einfacher ist (z. B. &lt;a href="http://www.eclipse.org/Xtext/"&gt;Xtext&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;die Spezifikation eines UML Profils ist mühselig, komplex und unnötig aufwändig ebenso die Verwendung/Interpretation (bspw. in einem Generator)&lt;/li&gt;&lt;li&gt;die Verwendung von verschiedenen Tools ist problematisch, erzeugt inhaltliche Brüche und führt zu unnötigen/nervigen Problemen&lt;/li&gt;&lt;li&gt;Modell-zu-Modell (M2M) Transformationen sind sinnvoll um die Komplexität von Generatoren bzw. Templates zu reduzieren&lt;/li&gt;&lt;li&gt;Prozess von Entwicklung DSLs:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;siehe Bild rechts (Screenshot aus den Video)&lt;/li&gt;&lt;li&gt;viele, sehr kurze Iterationszyklen&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Textuelle DSLs sind eine pragmatische Lösung, die schnell zu ersten Ergebnissen führen&lt;br /&gt;&lt;ul&gt;&lt;li&gt;fühlt sich an sich wie Programmieren an&lt;/li&gt;&lt;li&gt;Benutzung von seit Jahren bewährten und ausgereiften Konzepten/Tools (z. B. Eclipse Editoren)&lt;/li&gt;&lt;li&gt;wenig Probleme hinsichtlich Zusammerarbeit, da bekannte Konzepte/Techniken für Quellcode verwendet werden können (CVS/SVN, Diff/Merge, ...) - das geht natürlich auch mit XMI (abstrakte Syntax), aber das ist wirklich nicht praxistauglich » bei textuellen DSLs funktioniert das auf der konreten Syntax!&lt;/li&gt;&lt;li&gt;einfache Skalierung, Partitionierung&lt;/li&gt;&lt;/ul&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.mmrotzek.de/blog/wp-content/uploads/2010/02/dsl_dev_process.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img alt="" class="size-thumbnail wp-image-577 " height="150" src="http://www.mmrotzek.de/blog/wp-content/uploads/2010/02/dsl_dev_process-150x150.png" title="DSL Entwicklungsprozess" width="150" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Teilschritte einer Iteration zur Entwicklung einer DSL&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-5363177045625621412?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/5363177045625621412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2010/02/best-practices-fur-die-entwicklung-von.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/5363177045625621412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/5363177045625621412'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2010/02/best-practices-fur-die-entwicklung-von.html' title='Best Practices für die Entwicklung von DSLs'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-2654702883792494467</id><published>2010-01-11T23:24:00.000+01:00</published><updated>2011-06-27T22:08:23.584+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='Software-Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Form4'/><category scheme='http://www.blogger.com/atom/ns#' term='Drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='Web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><title type='text'>Drupal: Benachrichtigung wird nur angemeldeten Benutzer angezeigt</title><content type='html'>&lt;!--:de--&gt;&lt;p&gt;Diese Phänomen stellte sich mir vor einger Zeit. Für angemeldete Benutzer, egal welcher Gruppe sie zugeordnet waren, wurden die Benachtigungen des Drupal Benachrichtigungssystems angezeigt. Allerdings tauchten diese unverständlicherweise für unangemeldete Besucher nicht auf.&lt;/p&gt;&lt;p&gt;&lt;br/&gt;Nach stundenlangem Debuggen und Suchen im Netz fand ich dann eine &lt;a class="externlink" href="http://stackoverflow.com/questions/1513289/drupal-drupalsetmessage-doesnt-display-a-message"&gt;triviale Lösung&lt;/a&gt;. Drupal erwartet einen Benutzer mit der uid 0 in seiner User-Datenbank. Anscheinend wird die Benutzer-Session von anonymen Besucher auf diesen Datensatz referenziert. Warum versteh ich zwar immer noch nicht, aber durch eine update-Funktion, die diesen Datensatz (User) anlegt, war das Problem gelöst.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-2654702883792494467?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/2654702883792494467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2010/01/drupal-benachrichtigung-wird-nur.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/2654702883792494467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/2654702883792494467'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2010/01/drupal-benachrichtigung-wird-nur.html' title='Drupal: Benachrichtigung wird nur angemeldeten Benutzer angezeigt'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-6688831859813664178</id><published>2009-12-02T02:48:00.002+01:00</published><updated>2011-06-28T22:15:02.861+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software-Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Form4'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='Model-Driven'/><category scheme='http://www.blogger.com/atom/ns#' term='SE'/><title type='text'>Spring Webanwendung generieren</title><content type='html'>Inspiriert durch den Artikel &lt;b&gt;Spring ROO - &lt;i&gt;Codegenerierung "the Spring Way"&lt;/i&gt;&lt;/b&gt; von Mike Wiesner in &lt;a href="http://it-republik.de/jaxenter/java-magazin-ausgaben/Spring-3.0-000325.html"&gt;Novemberausgabe&lt;/a&gt; des &lt;a href="http://www.javamagazin.de/"&gt;Java Magazins&lt;/a&gt;, probierte ich das neue Framework vor Kurzem mal aus. Der Ansatz CRUD-Anwendungen zu generieren ist zwar nicht neu, allerdings wirkt die Entwicklungsumgebung enorm leistungsstark. Zudem erscheinen mir die verwendeten Konzepte zur Organisation/Trennung von generierten und manuellen Artefakten recht praktikabel, so dass ein leichter Einstieg in die Domain-Driven Entwicklung von Anwendungen möglich ist.&lt;br /&gt;&lt;br /&gt;Mit &lt;a href="http://www.springsource.org/roo"&gt;Spring Roo&lt;/a&gt; können komplette CRUD-Webanwendungen inklusive Zugriff per REST erzeugt werden. Die umfangreiche Konfiguration, die dafür notwendig ist, wird einfach generiert. Das stellt natürlich eine enorme Erleichterung dar und die ersten Schritte zu einer minimalen Anwendung sind schnell erledigt. Wie aufwendig die manuelle Implementierung einer solchen einfachen Anwendung ist, musste ich bereits in &lt;a href="http://www.mmrotzek.de/software-development/java/rest-spring-3"&gt;diesem Posting&lt;/a&gt; feststellen.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;Hier nun kurz die Schritte zu ersten CRUD-Webanwendung mit Hilfe von Spring Roo.&lt;br /&gt;&lt;ol style="list-style: disc;"&gt;&lt;li&gt;Verwendete Software&lt;br /&gt;&lt;ol style="list-style: disc;"&gt;&lt;li&gt;Projekt initialisieren&lt;/li&gt;&lt;li&gt;Fachklassen mit Hilfe der Roo Shell generieren&lt;/li&gt;&lt;li&gt;WebController&lt;/li&gt;&lt;li&gt;Anwendung testen&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;Fazit&lt;/li&gt;&lt;/ol&gt;&lt;h3 id="VerwendeteSoftware"&gt;Verwendete Software&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.springsource.com/products/sts"&gt;SpringSource Tool Suite (STS)&lt;/a&gt; herunterladen und installieren&lt;/li&gt;&lt;li&gt;Maven herunterladen und installieren (entpacken + in Klassenpfad aufnehmen)&lt;/li&gt;&lt;/ul&gt;&lt;h4 id="Projektinitialisieren"&gt;Projekt initialisieren&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;STS starten und Neues &lt;i&gt;Roo Projekt&lt;/i&gt; anlegen&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.mmrotzek.de/blog/wp-content/uploads/2009/12/roo_shell.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img alt="Roo Shell Projekt hinzufügen" class="size-thumbnail wp-image-507 " height="150" src="http://www.mmrotzek.de/blog/wp-content/uploads/2009/12/roo_shell-150x150.png" title="Roo Shell Projekt" width="150" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Roo Shell Projekt hinzufügen&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;li&gt;Nachfrage nach Aktivierung von AspectJ Feature bestätigen&lt;/li&gt;&lt;li&gt;STS neu starten lassen&lt;/li&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.mmrotzek.de/blog/wp-content/uploads/2009/12/roo_shell_2.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img alt="Roo Shell" class="size-thumbnail wp-image-508 " height="150" src="http://www.mmrotzek.de/blog/wp-content/uploads/2009/12/roo_shell_2-150x150.png" title="Roo Shell" width="150" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Roo Shell&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;li&gt;&lt;i&gt;Roo Shell&lt;/i&gt; Window öffnen, sofern dies noch nicht geschehen ist und das neue Roo Projekt hinzufügen&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Fachklassen mit Hilfe der Roo Shell generieren&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;Anleitung ausgeben (&lt;code&gt;roo&amp;gt; hint&lt;/code&gt;)&lt;/li&gt;&lt;li&gt;die Roo Shell erzeugt lange und ausführliche Ausgaben, so dass die Limitierung der Konsolenausgabe in Eclipse deaktiviert werden sollte (&lt;i&gt;Limit console output&lt;/i&gt; abwählen)&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.mmrotzek.de/blog/wp-content/uploads/2009/12/setting_console.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img alt="Ausschalten der Limitierung der Konsolenausgabe" class="size-thumbnail wp-image-509 " height="150" src="http://www.mmrotzek.de/blog/wp-content/uploads/2009/12/setting_console-150x150.png" title="Eclipse Enstellungen Konsolenausgabe" width="150" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Ausschalten der Limitierung der Konsolenausgabe&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;li&gt;Persistenz einrichten (&lt;code&gt;roo&amp;gt; persistence setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY&lt;/code&gt;)&lt;/li&gt;&lt;li&gt;daraufhin werden die notwendigen Konfigurationen geschrieben (persistence.cml, database.properties) und alle notwendigen Pakete per Maven heruntergeladen&lt;/li&gt;&lt;li&gt;Anleitung für den nächsten Schritt ausgeben (&lt;code&gt;roo&amp;gt; hint&lt;/code&gt;)&lt;/li&gt;&lt;li&gt;Ticket Entität erzeugen (&lt;code&gt;entity --name ~.entity.Ticket --testAutomatically&lt;/code&gt;), wobei sogar ein Test-Setup gleich mit erzeugt wird (&lt;code&gt;--testAutomatically&lt;/code&gt;)&lt;/li&gt;&lt;li&gt;und wieder weiter mit (&lt;code&gt;roo&amp;gt; hint&lt;/code&gt;)&lt;/li&gt;&lt;li&gt;&lt;code&gt;roo&amp;gt; field string --fieldName name&lt;/code&gt; usw.&lt;/li&gt;&lt;li&gt;Enumeration TicketStatus per Hand erstellen&lt;/li&gt;&lt;li&gt;Ticketstatus im Ticket referenzieren: &lt;code&gt;roo&amp;gt; field reference --fieldName tstate --type ~.entity.TicketState&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4 id="WebController"&gt;WebController&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;Controller generieren (Anweisungen: &lt;code&gt;roo&amp;gt; hint controllers&lt;/code&gt;)&lt;/li&gt;&lt;li&gt;&lt;code&gt;roo&amp;gt; controller scaffold --name ~.web.TicketTrackerController --entity Ticket&lt;/code&gt;&lt;/li&gt;&lt;li&gt;das funktioniert nicht &lt;code&gt;Could not determine the plural name for the 'status' field in Ticket&lt;/code&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Suche im Internet schlägt die Verwendung der Annotation @RooPlural vor, doch das löst das Problem nicht&lt;/li&gt;&lt;li&gt;also erstmal die Referenz im Ticket entfernen (einfach in der Java Klasse)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;und nochmal &lt;code&gt;roo&amp;gt; controller scaffold --name ~.web.TicketTrackerController --entity Ticket&lt;/code&gt;, dass zahlreiche Dateien generiert&lt;/li&gt;&lt;/ul&gt;&lt;h4 id="Anwendungtesten"&gt;Anwendung testen&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;mit &lt;code&gt;roo&amp;gt; perform package&lt;/code&gt; ein Webpaket builden (dauert einen Moment, da eine Menge Libraries per Maven noch heruntergeladen werden)&lt;/li&gt;&lt;li&gt;Webanwendung starten (&lt;code&gt;roo&amp;gt; deploy --server "SpringSource tc Server v6.0"&lt;/code&gt;)&lt;/li&gt;&lt;li&gt;&lt;code&gt;http://localhost:8080/$eclipse_project_name&lt;/code&gt; aufrufen&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.mmrotzek.de/blog/wp-content/uploads/2009/12/roo_example_webapp_start.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img alt="Startseite der gernerierten Webanwendung" class="size-thumbnail wp-image-505 " height="150" src="http://www.mmrotzek.de/blog/wp-content/uploads/2009/12/roo_example_webapp_start-150x150.png" title="roo_example_webapp_start" width="150" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Startseite der gernerierten Webanwendung&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.mmrotzek.de/blog/wp-content/uploads/2009/12/roo_example_webapp_list.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img alt="Webanwendung - Ticketliste" class="size-thumbnail wp-image-503 " height="147" src="http://www.mmrotzek.de/blog/wp-content/uploads/2009/12/roo_example_webapp_list-150x147.png" title="roo_example_webapp_list" width="150" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Webanwendung - Ticketliste&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.mmrotzek.de/blog/wp-content/uploads/2009/12/roo_example_webapp_new.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img alt="Webanwendung - Ticket anlegen" class="size-thumbnail wp-image-504 " height="150" src="http://www.mmrotzek.de/blog/wp-content/uploads/2009/12/roo_example_webapp_new-150x150.png" title="roo_example_webapp_new" width="150" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Webanwendung - Ticket anlegen&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h3 class="clear"&gt;Fazit&lt;/h3&gt;Mit Hilfe von Spring Roo kann sehr schnell eine CRUD-Webanwendung erzeugt werden, die dann weiterentwickelt werden kann. Die Auslagerung von generierten Komponenten in Form von Aspekten erscheint praktikabel, da die restlichen Klassen sehr übersichtlich bleiben. Allerdings kann an dieser Stelle nicht beurteilt werden, wie einfach das initiale Gerüst anzupassen ist.&lt;br /&gt;&lt;br /&gt;Eine Einschränkung fiel im Rahmen dieses kurzen Tests auf. Die Referenzierung einer Enumeration führte bei der Erzeugung des WebControllers zu Problemen, weil die Pluralform des Attributs nicht abgeleitet werden konnte. Stellt sich die Frage, ob das ein allgemeines Problem bei Referenzen ist, oder es an der Enumeration liegt.&lt;br /&gt;&lt;br /&gt;Das zeigt allerdings, dass der Release Candidate mit Vorsicht eingesetzt werden sollte. Außerdem gibt es auch noch nicht einmal eine initiale Stable Version von Spring Roo, so dass man wahrscheinlich die ersten Releases abwarten sollte, so dass die üblichen Kinderkrankheiten überwunden werden. Dann könnte Spring Roo eine interessante Basis zur Entwicklung von CRUD-Anwendungen sein.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-6688831859813664178?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/6688831859813664178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2009/12/spring-webanwendung-generieren.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/6688831859813664178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/6688831859813664178'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2009/12/spring-webanwendung-generieren.html' title='Spring Webanwendung generieren'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-6886084749697449368</id><published>2009-11-25T00:00:00.001+01:00</published><updated>2011-06-27T23:22:10.214+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wordpress'/><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='Software-Development'/><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='widget'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><category scheme='http://www.blogger.com/atom/ns#' term='SE'/><category scheme='http://www.blogger.com/atom/ns#' term='chart'/><title type='text'>(English) Wordpress Plugin: Download Counter Visualization</title><content type='html'>&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.mmrotzek.de/blog/wp-content/uploads/2009/11/screenshot-3.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img alt="Widget Chart example" class="size-full wp-image-444" height="184" src="http://www.mmrotzek.de/blog/wp-content/uploads/2009/11/screenshot-3.png" title="wp-download-counter: widget output" width="197" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Widget Chart example&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: #3366ff;"&gt;last update: 2010-04-14&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This plugin adds a &lt;strong&gt;widget&lt;/strong&gt; to display download statistics based on the &lt;a href="http://wordpress.org/extend/plugins/wp-downloadcounter/"&gt;Download Counter&lt;/a&gt; plugin on your site. The sidebar widget will show a highly configurable chart based on the  &lt;a href="http://code.google.com/apis/chart/"&gt;Google Chart API&lt;/a&gt;. Furthermore it offers a &lt;strong&gt;dashboard widget&lt;/strong&gt; that summarizes your  downloads, to get information quick at a glance.&lt;br /&gt;&lt;br /&gt;The plugin supports following chart types:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Bar (horizontal)&lt;/li&gt;&lt;li&gt;Pie&lt;/li&gt;&lt;li&gt;Pie 3D&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;You can include a chart of your downloads on a &lt;strong&gt;page&lt;/strong&gt; or in a &lt;strong&gt;post&lt;/strong&gt; using the downloadcounterchart-&lt;strong&gt;&lt;em&gt;shortcut&lt;/em&gt;&lt;/strong&gt;.  Of course a download chart is includable in your &lt;strong&gt;theme&lt;/strong&gt;. See &lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=6886084749697449368&amp;amp;from=pencil#usage"&gt;extended documentation&lt;/a&gt; for detailed explanations for that.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://wordpress.org/extend/plugins/wp-downloadcounter-chart/"&gt;Download&lt;/a&gt; (from Wordpress Plugin site)&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-6886084749697449368?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/6886084749697449368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2009/11/english-wordpress-plugin-download.html#comment-form' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/6886084749697449368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/6886084749697449368'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2009/11/english-wordpress-plugin-download.html' title='(English) Wordpress Plugin: Download Counter Visualization'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-5054222508057750672</id><published>2009-08-21T10:50:00.001+02:00</published><updated>2011-06-27T23:23:05.369+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sport'/><category scheme='http://www.blogger.com/atom/ns#' term='Ulk'/><category scheme='http://www.blogger.com/atom/ns#' term='Berlin'/><title type='text'>Usain Bolts Auto?</title><content type='html'>Er läuft bei der Leichtathletik WM an diesen Tagen alles in Grund und Boden und stellt zwei neue Weltrekorde über 100 und 200 Meter auf. Aber wie bewegt sich der schnellste Mann der Welt im täglichen Leben von A nach B? Die Antwort fand ich heute zufällig auf der Straße vor meiner Wohnung...&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;img alt="Bolts Auto?" class="size-medium wp-image-402" height="500" src="http://www.mmrotzek.de/blog/wp-content/uploads/2009/08/Bolt-003-370x500.jpg" style="margin-left: auto; margin-right: auto;" title="Bolts Auto" width="370" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Bolts Auto?&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-5054222508057750672?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/5054222508057750672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2009/08/usain-bolts-auto.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/5054222508057750672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/5054222508057750672'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2009/08/usain-bolts-auto.html' title='Usain Bolts Auto?'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-9049529297575441994</id><published>2009-07-06T01:00:00.004+02:00</published><updated>2011-06-29T00:37:21.200+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='REST'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Spring'/><category scheme='http://www.blogger.com/atom/ns#' term='SE'/><category scheme='http://www.blogger.com/atom/ns#' term='WebService'/><title type='text'>REST-Anwendungen mit Spring 3.0</title><content type='html'>&lt;div class="chapter" lang="en"&gt;Die Interoperabilität zwischen heterogenen Softwaressystemen ist eine interessante Aufgabe. Zur Realisierung stehen heutzutage Web-Services über SOAP oder die Verwendung von REST zur Verfügung. Web-Services über SOAP sind unabhängig vom Übertragungsprotokoll und damit flexibler als REST, wobei HTTP verwendet wird. Außerdem sind für Web-Services ausführliche Definitionen der Schnittstellen (WSDL) und beim Austausch von Daten ein großer Anteil von Verwaltungsinformationen innerhalb der ausgetauschten XML-Nachrichten erforderlich. Das hat auch alles seine Vorteile, aber für eine einfache Anwendung, die lediglich Dienste/Informationen für andere Software zur Verfügung stellen möchte, scheint derzeit mit REST und der Verwendung des verbreiteten HTTP der pragmatischere Ansatz vorzuliegen.&lt;br /&gt;&lt;br /&gt;In diesem Beitrag soll es aber nicht über die Unterschiede oder Vor- und Nachteile von Web-Services über SOAP gegenüber REST gehen, sondern die einfache Implementierung von Funktionalität über REST mit Spring 3.0 aufgezeigt werden. Anzumerken in diesem Zusammenhang sei noch, dass zum jetzigen Zeitpunkt Spring 3.0 noch nicht fertiggestellt ist und der &lt;span class="bold"&gt;&lt;b&gt;Milestone 3&lt;/b&gt;&lt;/span&gt; Verwendung findet. Allerdings sollte sich an der Anwendung nichts Grundlegendes ändern, da das Release von Spring 3.0 für das zweite Halbjahr 2009 angekündigt ist.&lt;br /&gt;&lt;br /&gt;Zur Demonstration zeige ich in diesem und den folgenen Beiträgen die Implementierung einer rudimentären Webanwendung mit Sping MVC. Diese soll lediglich eine einfaches Ticketssystem abbilden, wobei lediglich Tickets angezeigt und die &lt;i class="glossterm"&gt;CRUD&lt;/i&gt;-Operationen unterstützt werden.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;ol type="1"&gt;&lt;li&gt;&lt;a class="link" href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil#RESTAnwendungenmitSpring3.0" title="Chapter 1. REST-Anwendungen mit Spring 3.0"&gt;REST-Anwendungen mit Spring 3.0&lt;/a&gt;&lt;br /&gt;&lt;ol type="a"&gt;&lt;li&gt;&lt;a class="link" href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil#SpringMVCAnwendung" title="Spring MVC Anwendung"&gt;Spring MVC Anwendung&lt;/a&gt;&lt;br /&gt;&lt;ol type="i"&gt;&lt;li&gt;&lt;a class="link" href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil#Entwicklungsumgebung" title="Entwicklungsumgebung"&gt;Entwicklungsumgebung&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="link" href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil#StepbyStepBeschreibung" title="Step-by-Step Beschreibung"&gt;Step-by-Step Beschreibung&lt;/a&gt;&lt;br /&gt;&lt;ol type="A"&gt;&lt;li&gt;&lt;a class="link" href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil#EclipseWebprojektanlegen" title="Eclipse Webprojekt anlegen"&gt;Eclipse Webprojekt anlegen&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="link" href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil#Geschftsklassen" title="Geschäftsklassen"&gt;Geschäftsklassen&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="link" href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil#controller" title="Controller"&gt;Controller&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="link" href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil#view" title="Darstellung"&gt;Darstellung&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="link" href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil#Konfiguration" title="Konfiguration"&gt;Konfiguration&lt;/a&gt;&lt;br /&gt;&lt;ol type="I"&gt;&lt;li&gt;&lt;a class="link" href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil#WebserverKonfigurationweb.xml" title="Webserver-Konfiguration web.xml"&gt;Webserver-Konfiguration web.xml&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="link" href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil#SpringAnwendungskontextapplicationContext.xml" title="Spring Anwendungskontext ( applicationContext.xml)"&gt;Spring Anwendungskontext&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="link" href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil#Servletkontextservletnameservlet.xml" title="Servletkontext ( ${servletname}-servlet.xml)"&gt;Servletkontext&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="link" href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil#Ergebnis" title="Ergebnis"&gt;Ergebnis&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="link" href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil#Appendix" title="Appendix"&gt;Appendix&lt;/a&gt;&lt;br /&gt;&lt;ol type="A"&gt;&lt;li&gt;&lt;a class="link" href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil#DAOMockImplementierung" title="DAOMock-Implementierung"&gt;DAOMock-Implementierung&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="link" href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil#projecttructure" title="Projektstruktur"&gt;Projektstruktur&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="section" lang="en"&gt;&lt;div class="titlepage"&gt;&lt;div&gt;&lt;div&gt;&lt;h2 class="title" style="clear: both;"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil" name="SpringMVCAnwendung"&gt;&lt;/a&gt;Spring MVC Anwendung&lt;/h2&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="itemizedlist"&gt;&lt;ul type="disc"&gt;&lt;li&gt;Entwicklung innerhalb von Eclipse und Ausführung innerhalb der WTP (Apache 5.5)&lt;/li&gt;&lt;li&gt;einfaches Ticketssystem mit per Annotation definierte Controller und URI-Mappings über Annotations (adaptiert vom PetClinic-Beispiel)&lt;/li&gt;&lt;li&gt;einfache Mock-Implementierung des Data Access Objects, dass ggf. einfach um “echte” Persistenz erweitert werden kann&lt;/li&gt;&lt;/ul&gt;&lt;h3 class="title"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil" name="Entwicklungsumgebung"&gt;&lt;/a&gt;Entwicklungsumgebung&lt;/h3&gt;&lt;ul type="disc"&gt;&lt;li&gt;Java 6 auf Mac OSX&lt;/li&gt;&lt;li&gt;Eclipse 3.5&lt;/li&gt;&lt;li&gt;Eclipse-Plugins:&lt;br /&gt;&lt;div class="itemizedlist"&gt;&lt;ul type="circle"&gt;&lt;li&gt;WTP&lt;/li&gt;&lt;li&gt;Subversive + Connectors&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Spring 3.0M3&lt;/li&gt;&lt;li&gt;Jakarta Standard Library&lt;/li&gt;&lt;li&gt;Apache Tomcat 5.5&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="section" lang="en"&gt;&lt;div class="titlepage"&gt;&lt;div&gt;&lt;div&gt;&lt;h3 class="title"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil" name="StepbyStepBeschreibung"&gt;&lt;/a&gt;Step-by-Step Beschreibung&lt;/h3&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="section" lang="en"&gt;&lt;div class="titlepage"&gt;&lt;div&gt;&lt;div class="itemizedlist"&gt;&lt;h4 class="title"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil" name="EclipseWebprojektanlegen"&gt;&lt;/a&gt;Eclipse Webprojekt anlegen&lt;/h4&gt;&lt;ul type="disc"&gt;&lt;li&gt;neues ‘Dynamic Web Projekt’ erstellen (Wizard)&lt;br /&gt;&lt;div class="itemizedlist"&gt;&lt;ul type="circle"&gt;&lt;li&gt;Schritt 1: Projektname eintragen&lt;/li&gt;&lt;li&gt;Schritt 2:‘ Default output folder’ auf webapp/WEB-INF/classes setzen&lt;/li&gt;&lt;li&gt;Schritt 3: ‘Content directory’ auf webapp setzen&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="section" lang="en"&gt;&lt;div class="titlepage"&gt;&lt;div&gt;&lt;div&gt;&lt;h4 class="title"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil" name="Geschftsklassen"&gt;&lt;/a&gt;Geschäftsklassen&lt;/h4&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="itemizedlist"&gt;&lt;ul type="disc"&gt;&lt;li&gt;Klasse &lt;code class="code"&gt;Ticket&lt;/code&gt; und eine Enumeration &lt;code class="code"&gt;TicketStatus&lt;/code&gt; anlegen&lt;/li&gt;&lt;li&gt;Attribute eines &lt;code class="code"&gt;Tickets&lt;/code&gt; anlegen (&amp;amp;raquo; nächstes Listing) und die Getter und Setter erstellen (lassen), die Enumeration can beliebige Enum-Literals enthalten (z. B. &lt;code class="code"&gt;OPEN, INPROGRESS, REOPENED, RESOLVED, CLOSED, WONTFIX&lt;/code&gt; )&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;pre class="prettyprint"&gt;public class Ticket {&lt;br /&gt;private long id;&lt;br /&gt;private String name;&lt;br /&gt;private String description;&lt;br /&gt;private String reporter;&lt;br /&gt;private String assignedTo;&lt;br /&gt;private TicketStatus status;&lt;br /&gt;&lt;br /&gt;/** Helper method to differentiate between new and existing tickets. */&lt;br /&gt;public boolean isNew() {&lt;br /&gt;return (this.id &amp;lt; 1);&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;div class="section" lang="en"&gt;&lt;div class="titlepage"&gt;&lt;div&gt;&lt;div&gt;&lt;h4 class="title"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil" name="controller"&gt;&lt;/a&gt;Controller&lt;/h4&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="itemizedlist"&gt;&lt;ul type="disc"&gt;&lt;li&gt;&lt;code class="code"&gt;TicketApplicationController&lt;/code&gt;, der als &lt;code class="code"&gt;MultiActionController&lt;/code&gt; fungiert; behandelt Anfragen an:&lt;br /&gt;&lt;div class="itemizedlist"&gt;&lt;ul type="circle"&gt;&lt;li&gt;&lt;code class="code"&gt;/&lt;/code&gt; - Initiale Anfrage (Startseite)&lt;/li&gt;&lt;li&gt;&lt;code class="code"&gt;/tickets&lt;/code&gt; - Liste von Tickets&lt;/li&gt;&lt;li&gt;&lt;code class="code"&gt;/tickets/{ticketId}&lt;/code&gt; - Detailansicht eines Tickets&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;pre class="prettyprint"&gt;@Controller&lt;br /&gt;public class TicketTrackerController {&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Data Access Object.&lt;br /&gt;*/&lt;br /&gt;private TicketTracker tickettracker;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Autowire Data Acces Object with id 'tickettracker' (defined in&lt;br /&gt;* application-context.xml)&lt;br /&gt;*&lt;br /&gt;* @param tickettracker&lt;br /&gt;*/&lt;br /&gt;@Autowired&lt;br /&gt;public TicketTrackerController(TicketTracker tickettracker) {&lt;br /&gt;this.tickettracker = tickettracker;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Custom handler for applications initial request.&lt;br /&gt;*&lt;br /&gt;* Relies on the RequestToViewNameTranslator to determine the logical view&lt;br /&gt;* name based on the request URL.&lt;br /&gt;*&lt;br /&gt;* @return&lt;br /&gt;*/&lt;br /&gt;@RequestMapping("/")&lt;br /&gt;public String indexHandler() {&lt;br /&gt;return "index";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Custom handler for displaying tickets.&lt;br /&gt;*&lt;br /&gt;* @return a ModelMap with the model attributes for the view&lt;br /&gt;*/&lt;br /&gt;@RequestMapping("/tickets")&lt;br /&gt;public ModelAndView ticketsHandler() {&lt;br /&gt;ModelAndView mav = new ModelAndView("tickets/list");&lt;br /&gt;mav.addObject("tickets", tickettracker.findTickets());&lt;br /&gt;return mav;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Custom handler for displaying an ticket.&lt;br /&gt;*&lt;br /&gt;* @param ticketId the ID of the ticket to display&lt;br /&gt;* @return a ModelMap with the model attributes for the view&lt;br /&gt;*/&lt;br /&gt;@RequestMapping("/tickets/{ticketId}")&lt;br /&gt;public ModelAndView ticketHandler(@PathVariable("ticketId") int ticketId) {&lt;br /&gt;ModelAndView mav = new ModelAndView("tickets/show");&lt;br /&gt;mav.addObject(this.tickettracker.findTicket(ticketId));&lt;br /&gt;return mav;&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;div class="itemizedlist"&gt;&lt;ul type="disc"&gt;&lt;li&gt;&lt;code class="code"&gt;AddTicketForm&lt;/code&gt; und &lt;code class="code"&gt;EditTicketForm&lt;/code&gt; als &lt;code class="code"&gt;SimpleFormController&lt;/code&gt; behandeln Anfragen an:&lt;br /&gt;&lt;div class="itemizedlist"&gt;&lt;ul type="circle"&gt;&lt;li&gt;&lt;code class="code"&gt;/tickets/new&lt;/code&gt; - GET liefert Eingabeformular / POST speichert das neue Ticket&lt;/li&gt;&lt;li&gt;&lt;code class="code"&gt;/tickets/{ticketId}/edit&lt;/code&gt; - GET liefert Bearbeitungsformular / PUT aktualisiert das Ticket&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;pre class="prettyprint"&gt;@Controller&lt;br /&gt;@RequestMapping("/tickets/new")&lt;br /&gt;public class AddTicketForm {&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Data Access Object.&lt;br /&gt;*/&lt;br /&gt;private TicketTracker tickettracker;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Autowire Data Acces Object with id 'tickettracker' (defined in application-context.xml)&lt;br /&gt;*&lt;br /&gt;* @param tickettracker&lt;br /&gt;*/&lt;br /&gt;@Autowired&lt;br /&gt;public AddTicketForm(TicketTracker tickettracker) {&lt;br /&gt;this.tickettracker = tickettracker;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Initializes the form.&lt;br /&gt;*&lt;br /&gt;* @param model&lt;br /&gt;* @return View path.&lt;br /&gt;*/&lt;br /&gt;@RequestMapping(method = RequestMethod.GET)&lt;br /&gt;public String setupForm(Model model) {&lt;br /&gt;Ticket ticket = new Ticket();&lt;br /&gt;model.addAttribute(ticket);&lt;br /&gt;return "tickets/form";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Handles form submits, to save the new Ticket.&lt;br /&gt;*&lt;br /&gt;* @param ticket&lt;br /&gt;* @param result&lt;br /&gt;* @param status&lt;br /&gt;* @return View path.&lt;br /&gt;*/&lt;br /&gt;@RequestMapping(method = RequestMethod.POST)&lt;br /&gt;public String processSubmit(@ModelAttribute Ticket ticket, BindingResult result, SessionStatus status) {&lt;br /&gt;&lt;br /&gt;this.tickettracker.saveOrUpdateTicket(ticket);&lt;br /&gt;status.setComplete();&lt;br /&gt;return "redirect:/tickets/" + ticket.getId();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Controller&lt;br /&gt;@RequestMapping("/tickets/{ticketId}/edit")&lt;br /&gt;public class EditTicketForm {&lt;br /&gt;&lt;br /&gt;// ... Autowired Data Access Object injection (see AddTicketForm)&lt;br /&gt;&lt;br /&gt;@RequestMapping(method = RequestMethod.GET)&lt;br /&gt;public String setupForm(@PathVariable("ticketId") int ticketId, Model model) {&lt;br /&gt;Ticket ticket = this.tickettracker.findTicket(ticketId);&lt;br /&gt;model.addAttribute(ticket);&lt;br /&gt;return "tickets/form";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@RequestMapping(method = RequestMethod.PUT)&lt;br /&gt;public String processSubmit(@ModelAttribute Ticket ticket,&lt;br /&gt;BindingResult result, SessionStatus status) {&lt;br /&gt;&lt;br /&gt;this.tickettracker.saveOrUpdateTicket(ticket);&lt;br /&gt;status.setComplete();&lt;br /&gt;return "redirect:/tickets/" + ticket.getId();&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;div class="section" lang="en"&gt;&lt;div class="titlepage"&gt;&lt;div&gt;&lt;div&gt;&lt;h4 class="title"&gt;Darstellung&lt;/h4&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="itemizedlist"&gt;&lt;ul type="disc"&gt;&lt;li&gt;die Ausgabe wird mittels JSPs beschreiben, die unter &lt;code class="code"&gt;webapp/WEB-INF/jsp/&lt;/code&gt; zu finden sind (siehe &lt;a class="link" href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil#projecttructure" title="Projektstruktur"&gt;Projektstruktur&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Exemplarisch sei hier die Darstellung aller Tickets ( &lt;code class="code"&gt;list.jsp&lt;/code&gt;) angeführt:&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;pre class="prettyprint"&gt;&amp;lt;%@ include file="/WEB-INF/jsp/includes.jsp" %&amp;gt;;&lt;br /&gt;&amp;lt;%@ include file="/WEB-INF/jsp/header.jsp" %&amp;gt;&lt;br /&gt;&amp;lt;%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;h2&amp;gt;Tickets:&amp;lt;/h2&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;table&amp;gt;&lt;br /&gt;&amp;lt;thead&amp;gt;&lt;br /&gt;&amp;lt;th&amp;gt;#&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;lt;th&amp;gt;Reporter&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;lt;th&amp;gt;Assigned To&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;lt;th&amp;gt;Status&amp;lt;/th&amp;gt;&lt;br /&gt;&amp;lt;/thead&amp;gt;&lt;br /&gt;&amp;lt;c:forEach var="ticket" items="${tickets}"&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;&lt;br /&gt;&amp;lt;spring:url value="/tickets/{ticketId}/edit" var="editUrl"&amp;gt;&lt;br /&gt;&amp;lt;spring:param name="ticketId" value="${ticket.id}"/&amp;gt;&lt;br /&gt;&amp;lt;/spring:url&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;spring:url value="/tickets/{ticketId}" var="ticketUrl"&amp;gt;&lt;br /&gt;&amp;lt;spring:param name="ticketId" value="${ticket.id}"/&amp;gt;&lt;br /&gt;&amp;lt;/spring:url&amp;gt;&lt;br /&gt;&lt;br /&gt;${ticket.id} &lt;br /&gt;&amp;lt;a href="${fn:escapeXml(editUrl)}"&amp;gt;Edit&amp;lt;/a&amp;gt; &lt;br /&gt;&amp;lt;a href="${fn:escapeXml(ticketUrl)}"&amp;gt;Show&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;${ticket.name}&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;${ticket.reporter}&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;${ticket.assignedTo}&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;${ticket.status}&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/c:forEach&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td colspan="5"&amp;gt;&lt;br /&gt;&amp;lt;a href="&amp;lt;spring:url value="/tickets/new" htmlEscape="true" /&amp;gt;"&amp;gt;New Ticket&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;%@ include file="/WEB-INF/jsp/footer.jsp" %&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="section" lang="en"&gt;&lt;div class="titlepage"&gt;&lt;div&gt;&lt;div&gt;&lt;h4 class="title"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil" name="Konfiguration"&gt;&lt;/a&gt;Konfiguration&lt;/h4&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="section" lang="en"&gt;&lt;div class="titlepage"&gt;&lt;div&gt;&lt;div&gt;&lt;h5 class="title"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil" name="WebserverKonfigurationweb.xml"&gt;&lt;/a&gt;Webserver-Konfiguration web.xml&lt;/h5&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="itemizedlist"&gt;&lt;ul type="disc"&gt;&lt;li&gt;Einbindung des Spring-Kontextes ( &lt;code class="code"&gt;ContextLoaderListener&lt;/code&gt;)&lt;/li&gt;&lt;li&gt;&lt;code class="code"&gt;DispatcherServlet&lt;/code&gt; mit entsprechendem Mapping&lt;br /&gt;&lt;div class="itemizedlist"&gt;&lt;ul type="circle"&gt;&lt;li&gt;definiert einen eigene Anwendungskontext, der in &lt;code class="code"&gt;${servletname}-servlet.xml&lt;/code&gt; zu definieren ist&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;code class="code"&gt;HiddenHttpMethodFilter&lt;/code&gt; der dazu dient, dass neben GET- und POST-Requests auch PUT- und DELETE-Anfragen über HTML-Formulare möglich sind&lt;br /&gt;&lt;div class="itemizedlist"&gt;&lt;ul type="circle"&gt;&lt;li&gt;dazu wird der Parameter &lt;code class="code"&gt;_method&lt;/code&gt; verwendet (siehe &lt;a class="link" href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil#view" title="Darstellung"&gt;Bsp. Darstellung&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;pre class="prettyprint"&gt;&amp;lt;listener&amp;gt;&lt;br /&gt;&amp;lt;listener-class&amp;gt;org.springframework.web.context.ContextLoaderListener&amp;lt;/listener-class&amp;gt;&lt;br /&gt;&amp;lt;/listener&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;&amp;lt;servlet-name&amp;gt;default&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;lt;url-pattern&amp;gt;/static/*&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;servlet&amp;gt;&lt;br /&gt;&amp;lt;servlet-name&amp;gt;tickettracker&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;lt;servlet-class&amp;gt;org.springframework.web.servlet.DispatcherServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;&amp;lt;load-on-startup&amp;gt;2&amp;lt;/load-on-startup&amp;gt;&lt;br /&gt;&amp;lt;/servlet&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;servlet-mapping&amp;gt;&lt;br /&gt;&amp;lt;servlet-name&amp;gt;tickettracker&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;lt;url-pattern&amp;gt;/&amp;lt;/url-pattern&amp;gt;&lt;br /&gt;&amp;lt;/servlet-mapping&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;filter&amp;gt;&lt;br /&gt;&amp;lt;filter-name&amp;gt;httpMethodFilter&amp;lt;/filter-name&amp;gt;&lt;br /&gt;&amp;lt;filter-class&amp;gt;org.springframework.web.filter.HiddenHttpMethodFilter&amp;lt;/filter-class&amp;gt;&lt;br /&gt;&amp;lt;/filter&amp;gt;&lt;br /&gt;&amp;lt;filter-mapping&amp;gt;&lt;br /&gt;&amp;lt;filter-name&amp;gt;httpMethodFilter&amp;lt;/filter-name&amp;gt;&lt;br /&gt;&amp;lt;servlet-name&amp;gt;tickettracker&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;&amp;lt;/filter-mapping&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="section" lang="en"&gt;&lt;div class="titlepage"&gt;&lt;div&gt;&lt;div&gt;&lt;h5 class="title"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil" name="SpringAnwendungskontextapplicationContext.xml"&gt;&lt;/a&gt;Spring Anwendungskontext ( &lt;code class="code"&gt;applicationContext.xml&lt;/code&gt;)&lt;/h5&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="itemizedlist"&gt;&lt;ul type="disc"&gt;&lt;li&gt;Einstellungen zur Persistenz der Anwendung&lt;/li&gt;&lt;li&gt;hier nur die Definition der Bean &lt;code class="code"&gt;tickettracker&lt;/code&gt;, die in den Controllern per &lt;code class="code"&gt;Autowired&lt;/code&gt; als DAO eingebunden wird (siehe &lt;a class="link" href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil#controller" title="Controller"&gt;Controller&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;pre class="prettyprint"&gt;&amp;lt;bean id="tickettracker" class="de.mmrotzek.spring.rest.simplerest.TicketTrackerMockImpl"/&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="section" lang="en"&gt;&lt;div class="titlepage"&gt;&lt;div&gt;&lt;div&gt;&lt;h5 class="title"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil" name="Servletkontextservletnameservlet.xml"&gt;&lt;/a&gt;Servletkontext ( &lt;code class="code"&gt;${servletname}-servlet.xml&lt;/code&gt;)&lt;/h5&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="itemizedlist"&gt;&lt;ul type="disc"&gt;&lt;li&gt;Definition des Packages in dem sich Klassen mit &lt;code class="code"&gt;Controller&lt;/code&gt;-Annotation befinden&lt;/li&gt;&lt;li&gt;Handler für die Behandlung der &lt;code class="code"&gt;RequestMapping&lt;/code&gt;-Annotation für Klassen und Methoden&lt;/li&gt;&lt;li&gt;&lt;code class="code"&gt;ViewResolver&lt;/code&gt; zur Bestimmung der JSP, die zur Darstellung verwendet wird&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;pre class="prettyprint"&gt;&amp;lt;!-- The controllers are autodetected POJOs labeled with the @Controller annotation. --&amp;gt;&lt;br /&gt;&amp;lt;context:component-scan base-package="de.mmrotzek.spring.rest.simplerest" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!-- Annotation Handler for Types and Methods. --&amp;gt;&lt;br /&gt;&amp;lt;bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/&amp;gt;&lt;br /&gt;&amp;lt;bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;bean id="internalResourceViewResolver" &lt;br /&gt;class="org.springframework.web.servlet.view.InternalResourceViewResolver"&lt;br /&gt;p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="section" lang="en"&gt;&lt;div class="titlepage"&gt;&lt;div&gt;&lt;div&gt;&lt;h4 class="title"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil" name="Ergebnis"&gt;&lt;/a&gt;Ergebnis&lt;/h4&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.mmrotzek.de/blog/wp-content/uploads/2009/07/ticketlist.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img alt="List of tickets" class="size-medium wp-image-388" height="366" src="http://www.mmrotzek.de/blog/wp-content/uploads/2009/07/ticketlist-500x366.png" title="REST_Spring3_screen_list-ticket" width="500" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Liste von Tickets&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.mmrotzek.de/blog/wp-content/uploads/2009/07/ticket_edit.png" style="margin-left: auto; margin-right: auto;"&gt;&lt;img alt="Edit ticket form" class="size-full wp-image-387" height="335" src="http://www.mmrotzek.de/blog/wp-content/uploads/2009/07/ticket_edit.png" title="REST_Spring3_screen_edit-ticket" width="251" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Formular zum Bearbeiten&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="section" lang="en"&gt;&lt;div class="titlepage"&gt;&lt;div&gt;&lt;div&gt;&lt;h3 class="title"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil" name="Appendix"&gt;&lt;/a&gt;Appendix&lt;/h3&gt;&lt;/div&gt;&lt;h4 class="title"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil" name="DAOMockImplementierung"&gt;&lt;/a&gt;DAOMock-Implementierung&lt;/h4&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="section"&gt;Formular zum Bearbeiten &lt;br /&gt;&lt;pre class="prettyprint"&gt;public class TicketTrackerMockImpl implements TicketTracker {&lt;br /&gt;&lt;br /&gt;public TicketTrackerMockImpl() {&lt;br /&gt;// add some dummy data&lt;br /&gt;for (int i = 1; i &amp;lt; = 10; i++) {&lt;br /&gt;Ticket t = new Ticket();&lt;br /&gt;t.setId(i);&lt;br /&gt;t.setName("Ticket " + i);&lt;br /&gt;t.setDescription("Description " + i);&lt;br /&gt;t.setReporter(StringGenerator.getUniqueID());&lt;br /&gt;t.setStatus(randomStatus());&lt;br /&gt;&lt;br /&gt;ticketsCache.add(t);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private List ticketsCache = new ArrayList();&lt;br /&gt;&lt;br /&gt;public List findTickets() {&lt;br /&gt;return Collections.unmodifiableList(ticketsCache);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public Ticket findTicket(long id) {&lt;br /&gt;if (ticketsCache.isEmpty()) {&lt;br /&gt;return null;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if (id &amp;gt; 0) {&lt;br /&gt;for (Ticket t : ticketsCache) {&lt;br /&gt;if (t.getId() == id) {&lt;br /&gt;return t;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;return null;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public boolean saveOrUpdateTicket(Ticket ticket) {&lt;br /&gt;// no tickets exist, so add it&lt;br /&gt;if (ticketsCache.isEmpty()) {&lt;br /&gt;ticket.setId(1);&lt;br /&gt;return ticketsCache.add(ticket);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// there are some tickets and the tickets to store has a valid id, try&lt;br /&gt;// to find the ticket to update&lt;br /&gt;final Ticket t = findTicket(ticket.getId());&lt;br /&gt;&lt;br /&gt;if(t != null) {&lt;br /&gt;BeanUtils.copyProperties(ticket, t);&lt;br /&gt;return true;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// add new ticket&lt;br /&gt;ticket.setId(getMaxId()+1);&lt;br /&gt;return ticketsCache.add(ticket);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected long getMaxId() {&lt;br /&gt;long max = 0;&lt;br /&gt;for (Ticket t : ticketsCache) {&lt;br /&gt;if(t.getId() &amp;gt; max) {&lt;br /&gt;max = t.getId();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;return max;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected TicketStatus randomStatus() {&lt;br /&gt;final int max = TicketStatus.values().length;&lt;br /&gt;final Random r = new Random();&lt;br /&gt;final int rand = r.nextInt(max);&lt;br /&gt;&lt;br /&gt;for(TicketStatus ts:TicketStatus.values()) {&lt;br /&gt;if(ts.ordinal() == rand) {&lt;br /&gt;return ts;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;return null;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected static class StringGenerator {&lt;br /&gt;private static final int NUM_CHARS = 6;&lt;br /&gt;private static String chars = "abcdefghijklmonpqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";&lt;br /&gt;private static Random r = new Random();&lt;br /&gt;&lt;br /&gt;public static String getUniqueID() {&lt;br /&gt;char[] buf = new char[NUM_CHARS];&lt;br /&gt;&lt;br /&gt;for (int i = 0; i &amp;lt; buf.length; i++) {&lt;br /&gt;buf[i] = chars.charAt(r.nextInt(chars.length()));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;return new String(buf);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;div class="section" lang="en"&gt;&lt;div class="titlepage"&gt;&lt;div&gt;&lt;div&gt;&lt;h4 class="title"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=9049529297575441994&amp;amp;from=pencil" name="projecttructure"&gt;&lt;/a&gt;Projektstruktur&lt;/h4&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;pre lang="xml"&gt;- src&lt;br /&gt;- de&lt;br /&gt;- mmrotzek&lt;br /&gt;- spring&lt;br /&gt;- rest&lt;br /&gt;- simplerest&lt;br /&gt;- TicketTracker.java&lt;br /&gt;- TicketTrackerMockImpl.java&lt;br /&gt;- entity&lt;br /&gt;- Ticket.java&lt;br /&gt;- TicketStatus.java&lt;br /&gt;- web&lt;br /&gt;- AddTicketForm.java&lt;br /&gt;- EditTicketForm.java&lt;br /&gt;- TicketTrackerController.java&lt;br /&gt;- webapp&lt;br /&gt;- WEB-INF&lt;br /&gt;- applicationContext.xml&lt;br /&gt;- tickettracker-servlet.xml&lt;br /&gt;- jsp&lt;br /&gt;- tickets&lt;br /&gt;- form.jsp&lt;br /&gt;- list.jsp&lt;br /&gt;- show.jsp&lt;br /&gt;- footer.jsp&lt;br /&gt;- header.jsp&lt;br /&gt;- includes.jsp&lt;br /&gt;- index.jsp&lt;br /&gt;- styles&lt;br /&gt;- style.css&lt;br /&gt;- lib&lt;br /&gt;- com.springsource.antlr-2.7.7.jar&lt;br /&gt;- com.springsource.org.antlr-3.0.1.jar&lt;br /&gt;- jstl.jar&lt;br /&gt;- org.springframework.aop-3.0.0.M3.jar&lt;br /&gt;- org.springframework.asm-3.0.0.M3.jar&lt;br /&gt;- org.springframework.aspects-3.0.0.M3.jar&lt;br /&gt;- org.springframework.beans-3.0.0.M3.jar&lt;br /&gt;- org.springframework.context-3.0.0.M3.jar&lt;br /&gt;- org.springframework.context.support-3.0.0.M3.jar&lt;br /&gt;- org.springframework.core-3.0.0.M3.jar&lt;br /&gt;- org.springframework.expression-3.0.0.M3.jar&lt;br /&gt;- org.springframework.instrument-3.0.0.M3.jar&lt;br /&gt;- org.springframework.instrument.classloading-3.0.0.M3.jar&lt;br /&gt;- org.springframework.jdbc-3.0.0.M3.jar&lt;br /&gt;- org.springframework.jms-3.0.0.M3.jar&lt;br /&gt;- org.springframework.orm-3.0.0.M3.jar&lt;br /&gt;- org.springframework.oxm-3.0.0.M3.jar&lt;br /&gt;- org.springframework.spring-library-3.0.0.M3.libd&lt;br /&gt;- org.springframework.test-3.0.0.M3.jar&lt;br /&gt;- org.springframework.transaction-3.0.0.M3.jar&lt;br /&gt;- org.springframework.web-3.0.0.M3.jar&lt;br /&gt;- org.springframework.web.portlet-3.0.0.M3.jar&lt;br /&gt;- org.springframework.web.servlet-3.0.0.M3.jar&lt;br /&gt;- standard.jar&lt;br /&gt;- web.xml&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-9049529297575441994?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/9049529297575441994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2009/07/rest-anwendungen-mit-spring-30.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/9049529297575441994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/9049529297575441994'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2009/07/rest-anwendungen-mit-spring-30.html' title='REST-Anwendungen mit Spring 3.0'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-2208649553747805437</id><published>2009-06-29T00:19:00.001+02:00</published><updated>2011-06-27T23:24:34.606+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software-Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Snippets'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Form4'/><title type='text'>Quellcodeschnipsel in Eclipse</title><content type='html'>Innerhalb des &lt;a class="externlink" href="http://www.eclipse.org/webtools/"&gt;WTP-Eclipse-Plugins&lt;/a&gt; gibt es eine &lt;strong&gt;Snippets-View&lt;/strong&gt;, die zur Verwaltung von häufig verwendeten Quellcode-Abschnitten fungiert. Standardmässig sind bereits einige JSP-Codeschnipsel, wie z. B. der Include-Direktive, enthalten. Allerdings kann die Auswahl um weitere &lt;em&gt;Kategorien&lt;/em&gt; (z. B. Java, PHP) und natürlich Codeschnipsel erweitert werden. Dabei lassen sich auch &lt;em&gt;Platzhalter&lt;/em&gt; definieren, die beim einfügen per Doppelklick oder Drag´n Drop mit konkreten Werten ersetzt werden.&lt;br /&gt;&lt;br /&gt;Interessant ist auch die &lt;em&gt;Aktivierung/Deaktivierung der Anzeige&lt;/em&gt; von bestimmten Schnipsel-Kategorien je nachdem, was für ein Dateityp gerade in einem Editor geöffnet ist. Beispielsweise werden so Java-Schnippsel nur bei Java-Quellcode-Dateien angezeigt. Ebenso ist für einen &lt;em&gt;Import&lt;/em&gt; und &lt;em&gt;Export&lt;/em&gt; der Schnipsel im XML-Format gesorgt, so dass man seine Schnipsel auch mit anderen teilen kann.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-2208649553747805437?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/2208649553747805437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2009/06/quellcodeschnipsel-in-eclipse.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/2208649553747805437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/2208649553747805437'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2009/06/quellcodeschnipsel-in-eclipse.html' title='Quellcodeschnipsel in Eclipse'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-7489468838535593175</id><published>2009-06-27T20:00:00.001+02:00</published><updated>2011-06-28T23:29:50.181+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software-Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><category scheme='http://www.blogger.com/atom/ns#' term='Form4'/><category scheme='http://www.blogger.com/atom/ns#' term='SE'/><title type='text'>Kurzevaluation Modellierungswerkzeuge (UML)</title><content type='html'>Auf der Suche nach einem &lt;b&gt;leichtgewichtigen&lt;/b&gt; UML-Werkzeug zur Modellierung eines Klassendiagramms probierte ich einige aus und möchte kurz meine Eindrücke beschreiben. Der Fokus lag dabei auf &lt;b&gt;kostenfreien&lt;/b&gt; Tools, die auch nur die &lt;b&gt;grafische Modellierung von Klassendiagrammen &lt;/b&gt;ermöglichen sollen. Genauer gesagt kann ich gut auf die ganzen CASE- bzw- MDA-Features verzichten, da diese die Modellierung nur unnötig verkomplizieren. Außerdem kann ein solches Modell immer noch mit anderen Tool, wie beispielsweise oAW, nach eigenen Anforderungen verarbeitet werden.&lt;br /&gt;&lt;h3 class="seperated"&gt;Betrachtete Features:&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Modellierung von Klassendiagrammen&lt;/li&gt;&lt;li&gt;Speicherung im XMI-Format bzw. Exportfunktion&lt;/li&gt;&lt;li&gt;Export für die Dokumentation (diverse Bildformate)&lt;/li&gt;&lt;/ul&gt;&lt;h3 class="seperated"&gt;Fazit:&lt;/h3&gt;Für meine wenigen Anforderungen scheint &lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=7489468838535593175&amp;amp;from=pencil#argouml"&gt;ArgoUML&lt;/a&gt; am besten geeignet. Es ist schlank, also schnell heruntergeladen. Eine Installation ist nicht notwendig, da es als Java JAR ausführbar ist und somit auch auf allen Betriebssystemen läuft. Vom Funktionsumfang nimmt sich ArgoUML grob überblickt eigentlich nichts gegenüber den grafischen Editoren der &lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=7489468838535593175&amp;amp;from=pencil#umltools"&gt;Eclipse UML Tools&lt;/a&gt;. Allerdings lässt sich ArgoUML meiner Meinung nach einfacher bedienen und arbeitet direkt auf XMI in Version 1.2. Die UML Tools arbeiten dagegen mit einem XMI-Dialekt, der zwar auf XMI 2.x aufsetzt, sich aber einfach etwas von der originalen XMI-Spezifikation unterscheidet. Inwiefern sich beide Tools hinsichtlich der Weiterverarbeitung der Modelle - Stichwort MDA - eignen, lässt sich von mir nicht beurteilen.&lt;br /&gt;&lt;br /&gt;Hinsichtlich der Komplexität der Handhabung der UML Tools könnte &lt;a class="externlink" href="http://topcased.org/"&gt;Topcased&lt;/a&gt; noch eine Alternative darstellen. Ich verwendete dieses Eclipse-Plugin, was auch auf dem Eclipse UML2-Projekt basiert vor zwei Jahren. Schon damals gab es eine reduzierte &lt;i&gt;Property View&lt;/i&gt;, nichtsdestotrotz stellte sich die Modellierung mit diesem Werkzeug als enorm schierig dar. Ich kann nicht sagen, ob das Topcased-Plugin seither verbessert wurde, da zur Zeit die Website offline ist.&lt;br /&gt;&lt;br /&gt;Die restlichen von mir kurz betrachteten Modellierungswerkzeuge sind hinsichtlich meiner Anforderungen schlichtweg ungeeignet, da meistens das XMI-Format nicht unterstützt wird oder eine Exportunktion für die Dokumentation fehlt.&lt;br /&gt;&lt;h3 class="seperated"&gt;Details zu verschiedenen Tools:&lt;/h3&gt;&lt;h4&gt;TinyUML&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;nur Klassendiagramme&lt;/li&gt;&lt;li&gt;kein XMI&lt;/li&gt;&lt;li&gt;benötigt Java 6&lt;/li&gt;&lt;li&gt;Export in SVG, PNG&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://sourceforge.net/projects/tinyuml"&gt;http://sourceforge.net/projects/tinyuml&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;UMLet&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;kein XMI&lt;/li&gt;&lt;li&gt;merkwürdige Auswahl und Bearbeitung von Diagramm-Elementen&lt;/li&gt;&lt;li&gt;Java Standalone, Eclipse Plugin&lt;/li&gt;&lt;li&gt;viele Diagrammartens&lt;/li&gt;&lt;li&gt;Export in SVG, PDF, EPS&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://www.umlet.com/"&gt;http://www.umlet.com/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;BeoModeler&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;Webbasiert, Speicherung im XMI-Format (aber nicht valide, evtl. führt ein wenig Bearbeitung im Texteditor zu validen Dateien?!)&lt;/li&gt;&lt;li&gt;nur einfache Klassendiagramme (z. B. keine Typisierung von Attributen)&lt;/li&gt;&lt;li&gt;Export: Rational Software Modeler, Topcased&lt;/li&gt;&lt;li&gt;kein Bildexport&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://www.beotic.org/"&gt;http://www.beotic.org/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Jink UML&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;absolut proprietär&lt;/li&gt;&lt;li&gt;nur "Klassendiagramm"&lt;/li&gt;&lt;li&gt;kein XMI, kein Export&lt;/li&gt;&lt;li&gt;Handhabung unter Mac OSX nicht klar/unfunktional&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://code.google.com/p/jink-uml/"&gt;http://code.google.com/p/jink-uml/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;&lt;a href="" name="argouml"&gt;&lt;/a&gt;ArgoUML&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;viele Diagrammarten&lt;/li&gt;&lt;li&gt;für den Funktionsumfang relativ schlank (8 MB)&lt;/li&gt;&lt;li&gt;Speicherung als komprimiertes XMI&lt;/li&gt;&lt;li&gt;Export und Import von XMI-Dateien&lt;/li&gt;&lt;li&gt;Bildexport: PNG, SVG, GIF, PS, EPS&lt;/li&gt;&lt;li&gt;Java, auch als Webstart Anwendung verfügbar&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://argouml.tigris.org/"&gt;http://argouml.tigris.org/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;&lt;a href="" name="umltools"&gt;&lt;/a&gt;Eclipse UML Tools&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;viele Diagrammarten&lt;/li&gt;&lt;li&gt;Modeling Distribution sehr groß (&amp;gt;300 MB)&lt;/li&gt;&lt;li&gt;arbeitet auf Basis vom Ecore UML2 XMI-Dialekt&lt;/li&gt;&lt;li&gt;Export: GIF, BMP, JPG, PNG, SVG, PDF&lt;/li&gt;&lt;li&gt;integriert in der Eclipse-IDE&lt;/li&gt;&lt;li&gt;Bearbeitung von Eigenschaften über die &lt;i&gt;Property View&lt;/i&gt; ist immer noch etwa gewöhnungsbedürftig - hier wünscht man sich die Möglichkeit die angezeigten Eigenschaften zu definieren/einzuschränken, wie es z. B. bei MagicDraw funktioniert&lt;/li&gt;&lt;li&gt;Speicherverbrauch erfahrungsgemäß sehr hoch&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://www.eclipse.org/downloads/"&gt;http://www.eclipse.org/downloads/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 class="seperated"&gt;Links&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a class="externlink" href="http://en.wikipedia.org/wiki/List_of_UML_tools#Comparison_of_some_selected_UML_tools"&gt;Comparison of some selected UML tools&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-7489468838535593175?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/7489468838535593175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2009/06/kurzevaluation-modellierungswerkzeuge.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/7489468838535593175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/7489468838535593175'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2009/06/kurzevaluation-modellierungswerkzeuge.html' title='Kurzevaluation Modellierungswerkzeuge (UML)'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-6288204386536121783</id><published>2009-04-15T10:35:00.000+02:00</published><updated>2011-06-27T22:08:23.585+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='DSL'/><category scheme='http://www.blogger.com/atom/ns#' term='MDA'/><category scheme='http://www.blogger.com/atom/ns#' term='Model-Driven'/><title type='text'>Kurzüberblick DSL-Frameworks</title><content type='html'>&lt;!--:de--&gt;Erschien schon vor einiger Zeit, bietet aber einen guten, &lt;a class="externlink" href="http://www.heise.de/developer/Werkzeuge-fuer-domaenenspezifische-Sprachen--/artikel/135246/"&gt;kurzen Überblick&lt;/a&gt; über das aktuelle Leistungsvermögen von Entwicklungsumgebungen zur Definition von &lt;abbr title="Domänenspezifischen Sprachen"&gt;DSLs.&lt;/abbr&gt;&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-6288204386536121783?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/6288204386536121783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2009/04/kurzuberblick-dsl-frameworks.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/6288204386536121783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/6288204386536121783'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2009/04/kurzuberblick-dsl-frameworks.html' title='Kurzüberblick DSL-Frameworks'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-6480647546339639440</id><published>2008-12-17T14:43:00.001+01:00</published><updated>2011-06-27T23:27:58.533+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software-Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='UI'/><category scheme='http://www.blogger.com/atom/ns#' term='HCI'/><title type='text'>HCI-Patterns</title><content type='html'>In meiner &lt;a href="http://www.mmrotzek.de/publications/masterthesis"&gt;Masterarbeit&lt;/a&gt; beschäftigte ich mich mit Patterns (dt. Muster) für den Bereich der &lt;em&gt;Human Computer Interaction (HCI)&lt;/em&gt;, also der Mensch-Computer-Interaktion und möchte in diesem kurzen Beitrag erörtern, was &lt;abbr title="Human Computer Interaction "&gt;HCI&lt;/abbr&gt;-Patterns charakterisiert und wie sich diese beispielsweise hinsichtlich der Software-Patterns einordnen.&lt;br /&gt;&lt;h3&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Patterns allgemein&lt;/span&gt;&lt;/h3&gt;Zunächst muss der Begriff des Pattern im Allgemeinen geklärt werden. So ist ein Pattern als eine Vorlage von Schritten zum Erreichen eines bestimmten Ziels beschrieben [&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=6480647546339639440&amp;amp;from=pencil#Crowther 1995"&gt;Crowther 1995&lt;/a&gt;]. Weiter wurde der Begriff grundlegend durch den Architekten Christopher Alexander, der 253 Patterns im Bereich der städtischen Architektur definierte, geprägt. Alexander [&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=6480647546339639440&amp;amp;from=pencil#Alexander 1977"&gt;1977&lt;/a&gt;] zufolge ist ein Pattern eine &lt;em&gt;dreiteilige Regel, die eine Beziehung zwischen einem bestimmten Kontext, einem Problem und einer Lösung ausdrückt&lt;/em&gt;, wobei es sich um ein wiederkehrendes Problem handelt, das mit der entsprechenden Lösung immer behoben werden kann.&lt;br /&gt;&lt;h3 style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Software-Patterns&lt;/span&gt;&lt;/h3&gt;&lt;div style="text-align: left;"&gt;Die Idee etabliert Lösungswege in Form von Patterns zu beschreiben, fand mit den &lt;em&gt;Design-Patterns&lt;/em&gt; der &lt;em&gt;Gang of Four (GoF) &lt;/em&gt;Einzug in das Software-Engineering. Allerdings sind diese Patterns lediglich von Sofwareentwicklern zu verstehen, da diese häufig technische Konstrukte umschreiben. Dies steht im Widerspruch zu der ursprünglichen Idee von Alexander [&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=6480647546339639440&amp;amp;from=pencil#Borchers 2000b"&gt;Borchers 2000b&lt;/a&gt;, &lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=6480647546339639440&amp;amp;from=pencil#van Welie 2001"&gt;van Welie 2001, 98f&lt;/a&gt;], da die Patterns von Alexander das Ziel verfolgen möglichst benutzerfreundliche Lösungen zu beschreiben. Diese können auch von Laien verstanden werden, so dass sie mit den Spezialisten besser kommunizieren können, wobei die Zusammenarbeit zwischen Bauherr und Architekt ein Beispiel darstellt.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Zwar verwenden die Software-Patterns die gleiche Form zur Beschreibung, aber im Unterschied zu den Architektur-Patterns verfolgen sie andere Ziele, wie Wiederverwendbarkeit, Flexibilität und Effizienz eines Systems [&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=6480647546339639440&amp;amp;from=pencil#van Welie u. a. 2000"&gt;van Welie u. a. 2000&lt;/a&gt;]. Obwohl die Patterns in der Softwaretechnik nicht dazu dienen, dass der Endbenutzer seine eigene Software-Architektur beschreiben kann, haben sie dennoch ihre Daseinsberechtigung: Sie schaffen ein Vokabular zur Kommunikation zwischen Softwareentwicklern [&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=6480647546339639440&amp;amp;from=pencil#Borchers 2000a"&gt;Borchers 2000a&lt;/a&gt;].&lt;/div&gt;&lt;h3 style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;HCI-Patterns&lt;/span&gt;&lt;/h3&gt;Die Patterns im Bereich &lt;abbr title="Human Computer Interaction "&gt;HCI&lt;/abbr&gt; unterstützen den ursprünglichen Gedanken von Alexander stärker, da diese Probleme des Endbenutzer lösen [&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=6480647546339639440&amp;amp;from=pencil#Borchers 2000b"&gt;Borchers 2000b&lt;/a&gt;, &lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=6480647546339639440&amp;amp;from=pencil#van Welie 2001"&gt;van Welie 2001, 98f&lt;/a&gt;]. Ein HCI-Pattern kann folgendermaßen definiert werden:&lt;br /&gt;&lt;blockquote&gt;„An HCI design pattern captures the essence of a successful solution to a recurring usability problem in interactive systems.“ [&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=6480647546339639440&amp;amp;from=pencil#Borchers 2001"&gt;Borchers 2001, S. 179&lt;/a&gt;]&lt;/blockquote&gt;&lt;br /&gt;Demnach fokussieren sich HCI-Patterns auf wiederkehrende Usability-Probleme, wobei Usability als die &lt;cite lang="de" title="Definition Usability"&gt;„Qualität eines Systems hinsichtlich der leichten Erlernbarkeit, Bedienbarkeit und der Benutzerzufriedenheit“&lt;/cite&gt; [&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=6480647546339639440&amp;amp;from=pencil#Rosson und Carroll 2000"&gt;Rosson und Carroll 2000, S. 9&lt;/a&gt;] dargestellt wird und als &lt;em&gt;Gebrauchstauglichkeit&lt;/em&gt; übersetzt werden kann. Deshalb findet sich auch häufig der Begriff des &lt;strong&gt;Usability-Patterns&lt;/strong&gt; [&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=6480647546339639440&amp;amp;from=pencil#Borchers u. a. 2001"&gt;Borchers u. a. 2001&lt;/a&gt;, &lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=6480647546339639440&amp;amp;from=pencil#Mahemoff und Johnston 2001"&gt;Mahemoff und Johnston 2001&lt;/a&gt;, &lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=6480647546339639440&amp;amp;from=pencil#Henninger und Ashokkumar 2005"&gt;Henninger und Ashokkumar 2005&lt;/a&gt;]. Einige Ausführungen konzentrieren sich besonders stark auf die Usability, wonach ein Pattern, das nicht mindestens eine Usability-Eigenschaft aus einer vorgegebenen Menge von Eigenschaften positiv beeinflusst, &lt;strong&gt;kein&lt;/strong&gt; HCI-Pattern ist [&lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=6480647546339639440&amp;amp;from=pencil#van Welie u. a. 2000"&gt;van Welie u. a. 2000&lt;/a&gt;]. Allerdings existiert keine Einigkeit über die Eigenschaften, so dass exemplarisch die von &lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=6480647546339639440&amp;amp;from=pencil#van Welie u. a. 2000"&gt;van Welie u. a. [2000]&lt;/a&gt; und &lt;a href="http://www.blogger.com/post-edit.g?blogID=8076030733426004353&amp;amp;postID=6480647546339639440&amp;amp;from=pencil#Mahemoff und Johnston 2001"&gt;Mahemoff und Johnston [1998]&lt;/a&gt; aufgelistet sind:&lt;br /&gt;&lt;table align="center" border="0" style="height: 144px;"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td&gt;&lt;em&gt;van Welie u. a. [2000] &lt;/em&gt;&lt;/td&gt; &lt;td&gt;&lt;em&gt;Mahemoff und Johnston [1998]&lt;/em&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;- Lernfähigkeit&lt;/td&gt; &lt;td&gt;- Aufgabeneffizienz (Einfacheit, Effizienz)&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;- Einprägsamkeit&lt;/td&gt; &lt;td&gt;- Wiederverwendung (Konsistenz)&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;- Geschwindigkeit der Durchführung&lt;/td&gt; &lt;td&gt;- Benutzer-Maschine Kommunikation (Rückmeldung)&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;- Fehlerhäufigkeit&lt;/td&gt; &lt;td&gt;- Robustheit&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;- Zufriedenheit&lt;/td&gt; &lt;td&gt;- Flexibilität&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;- Erledigung der Aufgabe&lt;/td&gt; &lt;td&gt;- Verständlichkeit (Einfachheit, Vertrautheit, Visueller Aufbau)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h3&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Beispiele für HCI-Patterns&lt;/span&gt;&lt;/h3&gt;Zum Abschluss sind einige Patterns aus dem Bereich der &lt;abbr title="Human Computer Interaction "&gt;HCI&lt;/abbr&gt; aufgeführt, so dass der Anwendungsbereich deutlicher erscheinen sollte. Des Weiteren sind zahlreiche Sammlungen angegeben, die HCI-Patterns beschreiben. Diese Liste ist allerdings nicht vollständig und bei der Verwendung sollte der Nutzen eines beschriebenen Patterns immer kritisch hinterfragt werden. Auch wenn ein Pattern in einer der Sammlungen aufgelistet ist, so ist das keine Garantie für die "Korrektheit" der beschriebenen Lösung.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a class="externlink" href="http://www.welie.com/patterns/showPattern.php?patternID=crumbs"&gt;Breadcrumbs&lt;/a&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;img alt="Breadcrumb" height="44" src="http://www.welie.com/patterns/images/crumbs-wf.png" style="margin-left: auto; margin-right: auto;" title="Breadcrumb" width="346" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Breadcrumb&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://designinginterfaces.com/Multi-Level_Undo"&gt;Multi-Level-Undo&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://www.welie.com/patterns/showPattern.php?patternID=login"&gt;Login&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://www.welie.com/patterns/showPattern.php?patternID=registration"&gt;Registration&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://www.welie.com/patterns/showPattern.php?patternID=wizard"&gt;Wizard&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://designinginterfaces.com/Overview_Plus_Detail"&gt;Overview Plus Detail&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://developer.yahoo.com/ypatterns/pattern.php?pattern=searchpagination"&gt;Pagination&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Sammlungen von HCI-Patterns:&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;img alt="Shopping Card" height="229" src="http://www.welie.com/patterns/images/shopping2.gif" style="margin-left: auto; margin-right: auto;" title="Shopping Card" width="337" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Shopping Card&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;ul&gt;&lt;li&gt;&lt;a class="externlink" href="http://www.welie.com/patterns/"&gt;Interaction Design Pattern Library&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://developer.yahoo.com/ypatterns/index.php"&gt;Yahoo! Design Pattern Library&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://ui-patterns.com/"&gt;UI-Patterns&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://designinginterfaces.com/"&gt;Designing Interface:&amp;nbsp;Patterns for Effective Interaction Design&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://groups.ischool.berkeley.edu/ui_designpatterns/webpatterns2/webpatterns/home.php"&gt;Web Patterns&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://c2.com/cgi/wiki?WebsitePatterns"&gt;Website Patterns&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://www.infovis-wiki.net/index.php?title=Visualization_Design_Patterns"&gt;Visualization Design Patterns&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://www.flickr.com/photos/factoryjoe/collections/72157600001823120/"&gt;Design Patterns (Flickr)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://www.cs.helsinki.fi/u/salaakso/patterns/"&gt;User Interface Design Patterns&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://patterns.littlespringsdesign.com/index.php/Main_Page"&gt;Mobile Design Patterns&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://www.wikipatterns.com/display/wikipatterns/Wikipatterns"&gt;WikiPatterns&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://www.helpyouplay.com/"&gt;Interaction Design Pattern Library for Games&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 class="seperated"&gt;Literatur&lt;/h3&gt;&lt;div class="externlink"&gt;[&lt;a href="" name="Alexander 1977"&gt;&lt;/a&gt;Alexander 1977] ALEXANDER, Christopher: A Pattern Language. Towns, Buildings, Construction. Oxford University Press, 1977&lt;/div&gt;&lt;br /&gt;[&lt;a href="" name="Borchers 2000a"&gt;&lt;/a&gt;Borchers 2000a] BORCHERS, Jan: A Pattern Approach to Interaction Design. In: ACM (Hrsg.): Proceedings of the 3rd conference on Designing interactive systems: processes, practices, methods, and techniques, 2000 (Symposium on Designing Interactive Systems.), S. 369–378&lt;br /&gt;&lt;br /&gt;[&lt;a href="" name="Borchers 2000b"&gt;&lt;/a&gt;Borchers 2000b] BORCHERS, Jan O.: Interaction Design Patterns: Twelve Theses. In: The CHI 2000 Conference on Human Factors in Computing Systems, ACM, 2000, S. 2–3&lt;br /&gt;&lt;br /&gt;[&lt;a href="" name="Borchers 2001"&gt;&lt;/a&gt;Borchers 2001] BORCHER S, Jan: A Pattern Approach to Interaction Design. John Wiley Sons, 2001. – ISBN 978-0-471-49828-5&lt;br /&gt;&lt;br /&gt;[&lt;a href="" name="Borchers u. a. 2001"&gt;&lt;/a&gt;Borchers u. a. 2001] BORCHERS, Jan 0. ; FINCHER, Sally ; GRIFFITHS, Richard N. ; PEMBERTON, Lyn ; SIEMON, Elke: Usability pattern language: Creating a community. In: AI Society 15 (2001), Nr. 4, S. 377–385&lt;br /&gt;&lt;br /&gt;[&lt;a href="" name="Crowther 1995"&gt;&lt;/a&gt;Crowther 1995] CROWTHER, Jonathan (Hrsg.): Oxford Advanced Learner ’s Dictionary of Current English. Bd. 5. Oxford University Press, 1995&lt;br /&gt;&lt;br /&gt;[&lt;a href="" name="Henninger und Ashokkumar 2005"&gt;&lt;/a&gt;Henninger und Ashokkumar 2005] HENNINGER, Scott ; ASHOKKUMAR, Padmapriya: &lt;a class="pdflink" href="http://cse.unl.edu/~scotth/papers/SWESE05-HenningerAshokkumar.pdf"&gt;An Ontology-Based Infrastructure for Usability Design Patterns&lt;/a&gt;. In: Semantic Web Enabled Software Engineering (SWESE), 2005, S. 41–45&lt;br /&gt;&lt;br /&gt;[&lt;a href="" name="Mahemoff und Johnston 2001"&gt;&lt;/a&gt;Mahemoff und Johnston 2001] MAHEMOFF, Michael ; JOHNSTON, Lorraine J.: Usability Pattern Languages: the ”Language” Aspect. In: HIROSE, M. (Hrsg.): Human-Computer Interaction: Interact ’01. Tokyo, Japan : IOS Press, 2001, S. 350–358&lt;br /&gt;&lt;br /&gt;[&lt;a href="" name="Rosson und Carroll 2000"&gt;&lt;/a&gt;Rosson und Carroll 2000] ROSSON, Mery B. ; CARROLL, John M.: Usability engineering : scenario-based development of human-computer interaction. Morgan Kaufmann, 2000. – ISBN 1558607129&lt;br /&gt;&lt;br /&gt;[&lt;a href="" name="van Welie 2001"&gt;&lt;/a&gt;van Welie 2001] WELIE, Martijn van: &lt;a class="pdflink" href="http://www.welie.com/papers/Welie-PhD-thesis.pdf"&gt;Task-based User Interface Design&lt;/a&gt;, Vrije Universiteit Amsterdam, Dissertation, 2001&lt;br /&gt;&lt;br /&gt;[&lt;a href="" name="van Welie u. a. 2000"&gt;&lt;/a&gt;van Welie u. a. 2000] WELIE, Martijn van ; VEER, Gerrit C. van der ; ELIENS, Anton: Patterns as Tools for User Interface Design. In: VANDERDONCKT, Jean (Hrsg.) ; FARENC, Christelle (Hrsg.): Tools for Working With Guidelines: Annual Meeting of the Special Interest Group, Springer Verlag, 2000&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-6480647546339639440?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/6480647546339639440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2008/12/hci-patterns.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/6480647546339639440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/6480647546339639440'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2008/12/hci-patterns.html' title='HCI-Patterns'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-2611424564227391534</id><published>2008-11-20T19:19:00.000+01:00</published><updated>2011-06-27T22:08:23.585+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kulinarisches'/><category scheme='http://www.blogger.com/atom/ns#' term='DDR'/><title type='text'>Weitere DDR-Begriffe im Bereich Essen &amp; Trinken</title><content type='html'>&lt;!--:de--&gt;&lt;img class="alignright" title="Konsum Logo" src="http://upload.wikimedia.org/wikipedia/commons/7/75/Konsum_logo.jpg" alt="Logo der Konsum Handelskette" width="157" height="206" /&gt;&lt;br/&gt;&lt;br/&gt;Als Rückmeldung auf die &lt;a href="http://www.mmrotzek.de/kulinarisches/antikapitalistische-alternativgerichte"&gt;Antikapitalistischen Alternativgerichte&lt;/a&gt; erhielt ich einige weitere Anregungen:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;Jägerschnitzel -  meistens das billigste auf der Karte, allerdings war für Nicht-DDR-ler die Überraschung groß als eine gebratene Scheibe Jagdwurst serviert wurde&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;LPG - neben der Bedeutung als Landwirtschaftliche Produktionsgenossenschaft wurde so auch ein Bauernfrühstück bezeichnet&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Creck - Süßtafel mit Sammelbild (Schokolade war da wirklich kaum drin)&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;AUBI - ein alkoholfreies Bier, eben das AUtofahrerBIer&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Konsum - genossenschaftlich organisierte Lebensmittelkette, wobei der Begriff in Form des "Dorf-Konsums" auf kleine Geschäfte übertragen wurde; größere Geschäfte wurden dagegen als &lt;em&gt;Kaufhalle&lt;/em&gt; bezeichnet, die am ehesten den heutigen Supermärkten entsprechen&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-2611424564227391534?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/2611424564227391534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2008/11/weitere-ddr-begriffe-im-bereich-essen.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/2611424564227391534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/2611424564227391534'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2008/11/weitere-ddr-begriffe-im-bereich-essen.html' title='Weitere DDR-Begriffe im Bereich Essen &amp;amp; Trinken'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-2567388265216689201</id><published>2008-09-17T01:20:00.000+02:00</published><updated>2011-06-27T22:08:23.585+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oaw'/><category scheme='http://www.blogger.com/atom/ns#' term='Model-Driven'/><title type='text'>(English) Generate HTML report of a model transformation tracing model</title><content type='html'>&lt;!--:en--&gt;A short while ago I created a &lt;a href="http://www.mmrotzek.de/software-development/model-driven/getting-oaw-tracecomponent-working"&gt;blog entry&lt;/a&gt; to get oaw's tracing extension to work. After achieving this I tried to generate a HTML report of my tracing model. Fortunately there is already a Xpand template that does this stuff. But it takes a while for me to get it running, so that I will show you the workflow. It expects to have the &lt;code&gt;org.openarchitectureware.util.stdlib&lt;/code&gt; project checked out from the CVS in your workspace, as &lt;a href="http://www.mmrotzek.de/software-development/model-driven/getting-oaw-tracecomponent-working"&gt;explained&lt;/a&gt; earlier.&lt;br/&gt;&lt;pre&gt;&amp;lt;workflow&amp;gt;&lt;br/&gt;  &amp;lt;property file="workflow.properties"/&amp;gt;&lt;br/&gt;  &amp;lt;component class='oaw.workflow.common.DirectoryCleaner' directories='${targetDir}/tracedoc'/&amp;gt;&lt;br/&gt;&lt;br/&gt;  &amp;lt;bean &amp;gt;&lt;br/&gt;    &amp;lt;platformUri value=".."/&amp;gt;&lt;br/&gt;    &amp;lt;registerEcoreFile value="../org.openarchitectureware.util.stdlib/&lt;br/&gt;       src/org/openarchitectureware/util/stdlib/trace.ecore" /&amp;gt;&lt;br/&gt;    &amp;lt;!-- register metamodels referenced by the tracing model --&amp;gt;&lt;br/&gt;    &amp;lt;registerGeneratedEPackage value="my.DataPackage" /&amp;gt;&lt;br/&gt;  &amp;lt;/bean&amp;gt;&lt;br/&gt;&lt;br/&gt;  &amp;lt;component&amp;gt;&lt;br/&gt;   &amp;lt;modelFile value="gen/tracing.trace"/&amp;gt;&lt;br/&gt;   &amp;lt;outputSlot value="tracemodel"/&amp;gt;&lt;br/&gt;  &amp;lt;/component&amp;gt;&lt;br/&gt;&lt;br/&gt;  &amp;lt;component&amp;gt;&lt;br/&gt;    &amp;lt;!-- important to get it working --&amp;gt;&lt;br/&gt;    &amp;lt;metaModel /&amp;gt;&lt;br/&gt;    &amp;lt;fileEncoding value="ISO-8859-1"/&amp;gt;&lt;br/&gt;    &amp;lt;expand value="org::openarchitectureware::util::stdlib::&lt;br/&gt;       tracing::templates::html::root FOR tracemodel"/&amp;gt;&lt;br/&gt;    &amp;lt;outlet&amp;gt;&lt;br/&gt;      &amp;lt;path value="gen/tracedoc"/&amp;gt;&lt;br/&gt;    &amp;lt;/outlet&amp;gt;&lt;br/&gt;  &amp;lt;/component&amp;gt;&lt;br/&gt;&amp;lt;/workflow&amp;gt;&lt;/pre&gt;&lt;br/&gt;&lt;div&gt;&lt;dl id="attachment_188" style="width: 510px;"&gt;&lt;dt&gt;&lt;img title="Sample oaw Tracing Report" src="http://www.mmrotzek.de/blog/wp-content/uploads/2008/09/bild-1-500x190.png" alt="Sample oaw Tracing Report" width="500" height="190" /&gt;&lt;/dt&gt;&lt;dd&gt;Sample oaw Tracing Report&lt;/dd&gt;&lt;/dl&gt;&lt;/div&gt;&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-2567388265216689201?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/2567388265216689201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2008/09/english-generate-html-report-of-model.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/2567388265216689201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/2567388265216689201'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2008/09/english-generate-html-report-of-model.html' title='(English) Generate HTML report of a model transformation tracing model'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-6062003458226012130</id><published>2008-09-16T23:17:00.000+02:00</published><updated>2011-06-27T22:08:23.585+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='oaw'/><category scheme='http://www.blogger.com/atom/ns#' term='Model-Driven'/><title type='text'>(English) Getting oaw TraceComponent working</title><content type='html'>&lt;!--:en--&gt;For &lt;a class="externlink" href="http://www.openarchitectureware.org/"&gt;openarchitectureware&lt;/a&gt; 4.3 there is a tracing extension available. It allows to create a tracing model of your model2model or model2text transformations. For example you can process this tracing model to generate a HTML, XML, ... documentation of your model transformations.&lt;br/&gt;&lt;br/&gt;Unfortunately the extension does not work out of the box for me. I'm using openarchitectureware 4.3.1 from the oaw-development &lt;a class="externlink" href="http://www.openarchitectureware.org/links/portal.php/link/pluginbuilder_oaw_build"&gt;pluginbuilder&lt;/a&gt; on a mac. Exactly I use 4.3.1.20080910-1400PRD. After a little time of debugging I found a solution to get it working:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;check out project &lt;em&gt;org.openarchitectureware.util.stdlib&lt;/em&gt; from the oaw CVS&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;switch that projet to branch B_v43 (Team - Switch to Another Branch or Version...)&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;hint: the project must be placed in the workspace where the oaw project is located that will use tracing, because a reference to the trace metamodel (trace.ecore) in the plugin is incorrect (it points to &lt;code&gt;${workspace}/org.openarchitectureware.util.stdlib/src/org/openarchitectureware/util/stdlib/trace.ecore)&lt;/code&gt;&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;workflow:&lt;br/&gt;&lt;pre&gt;&amp;lt;workflow&amp;gt;&lt;br/&gt;  &amp;lt;bean class="org.eclipse.mwe.emf.StandaloneSetup" &amp;gt;&lt;br/&gt;    &amp;lt;-- important to get the correct workspace path --&amp;gt;&lt;br/&gt;    &amp;lt;platformUri value=".."/&amp;gt;&lt;br/&gt;  &amp;lt;/bean&amp;gt;&lt;br/&gt;&lt;br/&gt;  &amp;lt;-- XtendComponent and/or Generator --&amp;gt;&lt;br/&gt;&lt;br/&gt;  &amp;lt;component class="org.openarchitectureware.util.stdlib.TraceComponent"&amp;gt;&lt;br/&gt;    &amp;lt;traceModelSlot value="tracemodel" /&amp;gt;&lt;br/&gt;    &amp;lt;traceName value="trace" /&amp;gt;&lt;br/&gt;  &amp;lt;/component&amp;gt;&lt;br/&gt;&lt;br/&gt;  &amp;lt;component id="traceWriter" class="org.openarchitectureware.emf.XmiWriter"&amp;gt;&lt;br/&gt;    &amp;lt;inputSlot value="tracemodel"/&amp;gt;&lt;br/&gt;    &amp;lt;modelFile value="gen/tracing.trace"/&amp;gt;&lt;br/&gt;  &amp;lt;/component&amp;gt;&lt;br/&gt;&amp;lt;/workflow&amp;gt;&lt;/pre&gt;&lt;br/&gt;An short example of tracing model2model transformation shows the following snippet:&lt;br/&gt;&lt;pre&gt;extension org::openarchitectureware::util::stdlib::tracing;&lt;br/&gt;&lt;br/&gt;create Class Class2Table(Class c) :&lt;br/&gt;  createTrace(c,this,"m2m") -&amp;gt;&lt;br/&gt;  setName(c.name);&lt;/pre&gt;&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-6062003458226012130?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/6062003458226012130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2008/09/english-getting-oaw-tracecomponent.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/6062003458226012130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/6062003458226012130'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2008/09/english-getting-oaw-tracecomponent.html' title='(English) Getting oaw TraceComponent working'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-8224400692733829416</id><published>2008-08-20T23:01:00.001+02:00</published><updated>2011-06-29T00:11:02.646+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kulinarisches'/><category scheme='http://www.blogger.com/atom/ns#' term='DDR'/><title type='text'>Antikapitalistische Alternativgerichte</title><content type='html'>&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://www.mmrotzek.de/blog/wp-content/uploads/2008/08/kettwurst.jpg" style="margin-left: auto; margin-right: auto;"&gt;&lt;img alt="Ketwurst" class="size-thumbnail wp-image-293" height="150" src="http://www.mmrotzek.de/blog/wp-content/uploads/2008/08/kettwurst-150x150.jpg" title="Ketwurst" width="150" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Ketwurst&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Vor einiger Zeit bin ich zufällig auf den Eintrag zu &lt;a class="externlink" href="http://de.wikipedia.org/wiki/Ketwurst"&gt;Ketwurst&lt;/a&gt; bei &lt;a class="externlink" href="http://wikipedia.org/"&gt;Wikipedia&lt;/a&gt; gestoßen. Schon damals zeigte sich bei mir eine gewisse Begeisterung für die antikapitalistischen Alternativen in der ehemaligen DDR. Leider konnte ich zu diesem Zeitpunkt mein Interesse daran nicht weiter verfolgen und beließ es dabei. Allerdings flammte die Neugier heute bei der Betrachtung einer Sendung zum &lt;a class="externlink" href="http://de.wikipedia.org/wiki/Toast_Hawaii"&gt;Toast-Hawaii&lt;/a&gt; erneut auf. Es wurde davon berichtet, dass dies in der DDR als Karlsbader Schnitte verzehrt wurde. Dies führt nun zu diesem etwas anderen Blogbeitrag - eine kleine Reise in die DDR-Küche:&lt;br /&gt;&lt;br /&gt;Die Liste zeigt links die sozialistische Bezeichnung und rechts daneben deren Entsprechung im "kapitalistischen Ausland." Bisher sind nur einige Begriffspärchen aufgeführt, aber ich führe diese gerne weiter, sofern ich auf weitere stoße. Der interessierte Leser soll auch bitte die Kommentarfunktion nutzen, um die Liste zu vergrößern ;)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ketwurst = Hot Dog&lt;/li&gt;&lt;li&gt;Karlsbader Schnitte = Toast Hawaii&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://de.wikipedia.org/wiki/Grilletta"&gt;Grilletta&lt;/a&gt; = Hamburger&lt;/li&gt;&lt;li&gt;(Gold)Broiler = Grillhähnchen&lt;/li&gt;&lt;li&gt;&lt;a class="externlink" href="http://de.wikipedia.org/wiki/Krusta"&gt;Krusta&lt;/a&gt; = Pizza&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-8224400692733829416?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/8224400692733829416/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2008/08/antikapitalistische-alternativgerichte.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/8224400692733829416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/8224400692733829416'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2008/08/antikapitalistische-alternativgerichte.html' title='Antikapitalistische Alternativgerichte'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-511378359161744431</id><published>2008-07-26T15:56:00.000+02:00</published><updated>2011-06-27T22:08:23.586+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wordpress'/><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><title type='text'>Überschrift des Related-Post Plugins ändern</title><content type='html'>&lt;!--:de--&gt;Das &lt;a class="externlink" href="http://wordpress.org/extend/plugins/wordpress-23-related-posts-plugin/"&gt;Related-Post&lt;/a&gt; Wordpress Plugin liefert zusätzliche Informationen für einen Beitrag. Allerdings kann der durch das Plugin erzeugte HMTL-Code nur durch eine Änderung am Plugin selber angepasst werden. Allerdings besteht eine weitere Möglichkeit das Rendering anzupassen: Reguläre Ausdrücke. Der folgende Code-Schnipsel zeigt die Veränderung der Überschrift, indem einfach das HTML-Markup darum ausgetauscht wird.&lt;br/&gt;&lt;pre&gt;&lt;code&gt;$related = wp_get_related_posts();&lt;br/&gt;&lt;br/&gt;$find = '/&amp;lt;h3&amp;gt;(.*)&amp;lt;\/h3&amp;gt;(.*)/i';&lt;br/&gt;$replace = '&amp;lt;h4 class="highlighted"&amp;gt;$1&amp;lt;/h4&amp;gt;$2';&lt;br/&gt;echo preg_replace($find, $replace, $related);&lt;br/&gt;&lt;/code&gt;&lt;/pre&gt;&lt;!--:--&gt;&lt;!--:en--&gt;The &lt;a href="http://wordpress.org/extend/plugins/wordpress-23-related-posts-plugin/"&gt;related posts&lt;/a&gt; plugin of wordpress generates nice additional information for a post. But to customize the generated HTML code you have to change the plugin code. Another solution is using a regular expression. Following this approach it is very easy to customize the header generated by the plugin. Here is the according PHP code snippet.&lt;br/&gt;&lt;pre&gt;&lt;code&gt;$related = wp_get_related_posts();&lt;br/&gt;&lt;br/&gt;$find = '/&amp;lt;h3&amp;gt;(.*)&amp;lt;\/h3&amp;gt;(.*)/i';&lt;br/&gt;$replace = '&amp;lt;h4 class="highlighted"&amp;gt;$1&amp;lt;/h4&amp;gt;$2';&lt;br/&gt;echo preg_replace($find, $replace, $related);&lt;br/&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;It simply extract the header text and wrap it into other HTML tags.&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-511378359161744431?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/511378359161744431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2008/07/uberschrift-des-related-post-plugins.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/511378359161744431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/511378359161744431'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2008/07/uberschrift-des-related-post-plugins.html' title='Überschrift des Related-Post Plugins ändern'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-471931448157969904</id><published>2008-07-25T18:45:00.000+02:00</published><updated>2011-06-27T22:08:23.586+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Neues Eclipse Release (Ganymede - 3.4)</title><content type='html'>&lt;!--:de--&gt;Ein neue Version  der Entwicklungsumgebung Eclipse ist nun verfügbar. Für mich sind immer die Neuerungen / Verbesserungen interessant, um zu entscheiden ob sich ein Wechsel auf die neue Version lohnt. Schließlich ist es zeitaufwendig wieder sämtliche Plugins zu installieren und zudem auch nicht zu wissen, ob die mit dem neuen Release einwandfrei funktionieren.&lt;br/&gt;&lt;br/&gt;Alle Neuerungen sind &lt;a class="externlink" href="http://download.eclipse.org/eclipse/downloads/drops/R-3.4-200806172000/whatsnew3.4/eclipse-news-all.html"&gt;hier&lt;/a&gt; nachzulesen. Nachfolgend meine kleine Highlights-Liste:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;Verbesserter Update-Manager&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Zuordnung eines neuen Projekt zu einem Working-Set während der Erstellung&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Tabs mit Klick auf die 3. Maustaste (Scrollrad) schließen - wie vom Firefox gewohnt ;)&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Import / Export von Ausführungskonfigurationen (Launch)&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Quick assists - z. B. zum erstellen von Getter / Setter für eine Atrribut ohne Rechtsklick und Navigation in Source Untermenü&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;"Fix Project Setup" quick fix: Versuch der Anwendung Pfadprobleme selber zu lösen&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Mark Occurrences (Alt+Shift+O): Markierung der Verwendung einer Variablen mit Unterscheidung von lesenden oder schreibenden Zugriff&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Verwendung von multi-threading beim Compilen&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-471931448157969904?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/471931448157969904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2008/07/neues-eclipse-release-ganymede-34.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/471931448157969904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/471931448157969904'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2008/07/neues-eclipse-release-ganymede-34.html' title='Neues Eclipse Release (Ganymede - 3.4)'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-4595359446684655570</id><published>2008-06-23T13:42:00.000+02:00</published><updated>2011-06-27T22:08:23.586+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='oaw'/><category scheme='http://www.blogger.com/atom/ns#' term='Model-Driven'/><title type='text'>Ready-to-run JSF-Cartridge Projekt</title><content type='html'>&lt;!--:de--&gt;Ein Benutzer berichtete mir über Probleme bei der Inbetriebnahme der &lt;a href="http://mmrotzek.de/diplomarbeit"&gt;JSF-Cartridge&lt;/a&gt;. Infolgedessen probierte ich es selber einmal aus und stieß ebenfalls auf Schwierigkeiten. Deshalb stelle ich nun ein &lt;a href="http://www.mmrotzek.de/blog/download-manager.php?id=6"&gt;Eclipse-Projekt&lt;/a&gt; bereit, dass alle Einstellungen beeinhaltet und nur noch in den eigenen Eclipse Workspace importiert werden muss.&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;&lt;a href="http://www.mmrotzek.de/blog/download-manager.php?id=6"&gt;JSF-Cartridge Projekt&lt;/a&gt;&lt;/li&gt;	&lt;br/&gt;&lt;li&gt;&lt;a href="http://www.mmrotzek.de/publications/diplomarbeit"&gt;Ausführungen zur Cartridge&lt;/a&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;a href="http://oaw.itemis.de/" class="externlink"&gt;Eclipse-oAW-Distributionen&lt;/a&gt;&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-4595359446684655570?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/4595359446684655570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2008/06/ready-to-run-jsf-cartridge-projekt.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/4595359446684655570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/4595359446684655570'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2008/06/ready-to-run-jsf-cartridge-projekt.html' title='Ready-to-run JSF-Cartridge Projekt'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-9071779086702340322</id><published>2008-06-03T01:17:00.000+02:00</published><updated>2011-06-27T22:08:23.586+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='oaw'/><category scheme='http://www.blogger.com/atom/ns#' term='MDA'/><category scheme='http://www.blogger.com/atom/ns#' term='Model-Driven'/><title type='text'>openarchitectureware 4.3</title><content type='html'>&lt;!--:de--&gt;Seitdem ich mich im Rahmen meiner Diplomarbeit intensiv mit openarchitectureware (oaw) 4.1.2 auseinandergesetzt habe, gab es mittlerweile zwei neue Releases. Demzufolge interessieren mich die Neuerungen bzw. Verbesserungen. Einige möchte ich nun hier in komprimierter Form wiedergeben:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;Konfiguration von Workflows (XVar)&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;XWeave zur aspektorientierten Modellierung&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Aspektorientiert Programmierung für Xtend (siehe &lt;a href="http://www.eclipse.org/gmt/oaw/doc/4.3/html/contents/core_reference.html#Xtend_language"&gt;Referenz&lt;/a&gt;)&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Veränderte Einbindung von Advices für Templates in der Generatorkomponente&lt;br/&gt;&lt;pre&gt;&amp;lt;advices value='example::Advices1, example::Advices2'/&amp;gt;&lt;/pre&gt;&lt;br/&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;neuer Editor zur Bearbeitung von Modellen (&lt;a href="http://www.eclipse.org/gmt/oaw/doc/4.3/html/contents/generic_editor.html"&gt;Generic Editor&lt;/a&gt;), der nur die wesentlichen Eigenschaften übersichtlich darstellt und anpassbar ist (Validierung, Icons &amp;amp; Labels, Vervollständigung)&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;a href="http://www.eclipse.org/gmt/oaw/doc/4.3/html/contents/r52.html"&gt;Validierung&lt;/a&gt; von Check-Regeln in Standard-EMF-Editoren&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Erzeugen von &lt;a href="http://www.eclipse.org/gmt/oaw/doc/4.3/html/contents/recipe.html"&gt;Recipe&lt;/a&gt;-Checks per Ant&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Integration der Recipe-Fehler in die Eclipse Entwicklungsumgebung&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Erweiterungen der textuellen Metamodellierung (Xtext)&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Speichern von temporären Eigenschaften an einem Objekt&lt;br/&gt;&lt;pre&gt;extension org::openarchitectureware::util::stdlib::elementprops;&lt;br/&gt;&lt;br/&gt;setProp(Object o) :&lt;br/&gt;  o.setProperty('myProp', 123);&lt;br/&gt;&lt;br/&gt;Object getProp(Object o) :&lt;br/&gt;  o.getProperty('myProp');&lt;/pre&gt;&lt;br/&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Globale Variablen&lt;br/&gt;&lt;pre&gt;org::openarchitectureware::util::stdlib::globalvar&lt;/pre&gt;&lt;br/&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Eindeutige Id eines Elements&lt;br/&gt;&lt;pre&gt;org::openarchitectureware::util::stdlib::uid&lt;/pre&gt;&lt;br/&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Tracing von Modell-zu-Text und Modell-zu-Modell Transformationen in einem Tracing-Modell, woraus ein HTML-Report erstellt werden kann&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-9071779086702340322?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/9071779086702340322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2008/06/openarchitectureware-43.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/9071779086702340322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/9071779086702340322'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2008/06/openarchitectureware-43.html' title='openarchitectureware 4.3'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-8560277917838070257</id><published>2008-03-29T15:10:00.000+01:00</published><updated>2011-06-27T22:08:23.586+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Web 2.0'/><title type='text'>Diagramme online erzeugen (Google Charts)</title><content type='html'>&lt;!--:de--&gt;In der letzten Wochen stieß ich auf die &lt;a class="externlink" href="http://code.google.com/apis/chart/"&gt;Google Chart API&lt;/a&gt;, wodurch sich einfach, schnell und &lt;em&gt;ohne zusätzliche Frameworks&lt;/em&gt; Diagramme erzeugen lassen. Dies kann mitunter für die eigene Webseite hilfreich sein, um beliebige Daten grafisch zu präsentieren. Die angebotenen Möglichkeiten sind durchaus umfangreich, da die API ebenso von &lt;a class="externlink" href="http://www.google.com/analytics/"&gt;Google Analytics&lt;/a&gt; verwendet wird.&lt;br/&gt;&lt;br/&gt;Nachfolgend ist ein Beispiel eines durch die API erzeugtes Diagramm dargestellt.&lt;br/&gt;&lt;img src="http://chart.apis.google.com/chart?cht=p3&amp;amp;chd=t:40,12,4,4&amp;amp;chs=550x150&amp;amp;chl=Diplomarbeit|JSF-Cartridge|BibTeX_Diploma|BibTeX_QM-Part&amp;amp;chtt=Download Statistics" alt="Downloadstatistik-Diagramm mit Google Chart generiert" /&gt;&lt;br/&gt;&lt;br/&gt;Die Anfrage dazu sieht folgendermaßen aus:&lt;br/&gt;&lt;pre&gt;http://chart.apis.google.com/chart?cht=p3&amp;amp;chd=t:40,12,4,4&lt;br/&gt;&amp;amp;chs=550x150&amp;amp;chl=Diplomarbeit|JSF-Cartridge|BibTeX_Diploma|BibTeX_QM-Part&lt;br/&gt;&amp;amp;chtt=Download Statistics&lt;/pre&gt;&lt;br/&gt;Zur detaillierteren Beurteilung der Fähigkeiten der API habe ich ein kleines &lt;em&gt;Wordpress Plugin&lt;/em&gt; geschrieben, welches in der Wordpress Sitebar eine Statistik der Downloads auf der Webseite darstellt. Das &lt;a href="#downloadchart"&gt;Ergebnis&lt;/a&gt; ist in der rechten Spalte zu sehen. Dabei greift das Plugin auf die Daten des Download-Verwaltungsplugins &lt;a class="externlink" href="http://www.stuff.yellowswordfish.com/download-counter-advanced/"&gt;Download Counter&lt;/a&gt; zurück.&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-8560277917838070257?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/8560277917838070257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2008/03/diagramme-online-erzeugen-google-charts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/8560277917838070257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/8560277917838070257'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2008/03/diagramme-online-erzeugen-google-charts.html' title='Diagramme online erzeugen (Google Charts)'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-8270781968635548936</id><published>2008-02-27T11:56:00.000+01:00</published><updated>2011-06-27T22:08:23.587+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Form4'/><category scheme='http://www.blogger.com/atom/ns#' term='Mail'/><title type='text'>HTML-Newsletter für diverse Mail-Clients</title><content type='html'>&lt;!--:de--&gt;Ein Newsletter im HTML-Format scheint eine gute Möglichkeit zu sein die &lt;em&gt;Corporate Identity (CI)&lt;/em&gt; auch auf der Ebene der E-Mail Kommunikation zu wahren. Allerdings entpuppt sich die Darstellung in diversen Mail-Anwendungen als kontraproduktiv, da das Design gar nicht oder falsch dargestellt wird. Folglich erweist sich die konsistente Darstellung der CI in E-Mails als schwierig.&lt;br/&gt;&lt;br/&gt;Eine Matrix untertsützter Design-Eigenschaften verscheidener Mail-Clients findet sich &lt;a href="http://www.mmrotzek.de/blog/wp-content/uploads/2008/02/guide_to_css_support_in_email_2007.pdf" class="pdflink"&gt;hier&lt;/a&gt; und stammt von diesem Blogeintrag: &lt;a href="http://www.campaignmonitor.com/blog/archives/2007/04/a_guide_to_css_support_in_emai_2.html" class="externlink"&gt;A Guide to CSS Support in Email: 2007 Edition&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;Nach Betrachtung dieser Feature-Untersuchung scheint ein Tabellen-Layout die einzig universal funktionale Design-Implementierung zu sein. Allerdings ist das ein klarer Rückschritt in punkto &lt;em&gt;Accessibility&lt;/em&gt;.&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-8270781968635548936?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/8270781968635548936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2008/02/html-newsletter-fur-diverse-mail.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/8270781968635548936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/8270781968635548936'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2008/02/html-newsletter-fur-diverse-mail.html' title='HTML-Newsletter für diverse Mail-Clients'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-7209662858974927095</id><published>2008-02-15T17:28:00.000+01:00</published><updated>2011-06-27T22:08:23.587+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DMS'/><category scheme='http://www.blogger.com/atom/ns#' term='Form4'/><title type='text'>Alfresco-Community-Tomcat-2.1 mit MySQL</title><content type='html'>&lt;!--:de--&gt;Das Setup von Alfresco mit MySQL als Datenbankbackend soll dem Alfresco Wiki zufolge die Standard-Einstellung sein. Dies ist auch so in der &lt;code&gt;repository.properties&lt;/code&gt; innerhalb des deployten Alfresco festgehalten, nur wird zusammen mit dem Tomcat auch noch eine angepasste Konfiguration deployed, so dass HSQL verwendet wird. Diese angepasste Konfiguration findet sich unter &lt;code&gt;shared/class/alfresco/extension&lt;/code&gt;, wobei folgende Dateien für die Verwendung von MySQL angepasst werden müssen:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;custom-repository.properties&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;custom-hibernate-dialect.properties&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-7209662858974927095?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/7209662858974927095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2008/02/alfresco-community-tomcat-21-mit-mysql.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/7209662858974927095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/7209662858974927095'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2008/02/alfresco-community-tomcat-21-mit-mysql.html' title='Alfresco-Community-Tomcat-2.1 mit MySQL'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-3622495458093637067</id><published>2008-01-28T11:03:00.000+01:00</published><updated>2011-06-27T22:08:23.587+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='LaTeX'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>LaTeX-Editor für MacOS</title><content type='html'>&lt;!--:de--&gt;Vor einiger Zeit schrieb ich bereits einen kleinen Artikel zu &lt;a href="http://www.mmrotzek.de/tools/windows-latex-editor"&gt;LaTeX-Editoren&lt;/a&gt; unter Windows. Da ich mittlerweile  auf einem Mac arbeite, benötigte ich auch dafür einen geeigneten Editor. Ich habe ihn gefunden: &lt;a href="http://www.uoregon.edu/~koch/texshop/" class="externlink"&gt;TeXShop&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Dieser Editor bietet wirklich das, was die anderen Editoren unter Windows versprachen. Allerdings muss nicht erst konfiguriert oder zusätzliche Software instlliert werden. So funktioniert das Springen an eine Stelle im Zieldokument und ebenso aus diesem zum LaTeX-Dokument (Apfel + Doppelklick).&lt;br/&gt;&lt;br/&gt;&lt;a href="http://www.mmrotzek.de/blog/wp-content/uploads/2008/01/bild-1.png" rel="lightbox[pics-1201506511]"&gt;&lt;img src="http://www.mmrotzek.de/blog/wp-content/uploads/2008/01/bild-1.thumbnail.png" alt="TeXShop-PDF&amp;gt;TeX" class="imageframe" height="66" width="180" /&gt;&lt;/a&gt;&lt;a href="http://www.mmrotzek.de/blog/wp-content/uploads/2008/01/bild-2.png" rel="lightbox[pics-1201506511]"&gt;&lt;img src="http://www.mmrotzek.de/blog/wp-content/uploads/2008/01/bild-2.thumbnail.png" alt="TeXShop-TeX&amp;gt;PDF" class="imageframe" height="39" width="180" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Für meine Ansprüche ist dieses Tool ideal, so dass es damit sogar richtig Spass macht Dokumente zu erstellen. Ich überlege auch nicht mehr, ob ich eine &lt;abbr title="What You See Is What You Get"&gt;WYSIWYG&lt;/abbr&gt;-Office Anwendung für kleinere Dokumente benutze oder doch LaTeX.&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-3622495458093637067?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/3622495458093637067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2008/01/latex-editor-fur-macos.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/3622495458093637067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/3622495458093637067'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2008/01/latex-editor-fur-macos.html' title='LaTeX-Editor für MacOS'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-2278027740360457669</id><published>2007-11-30T00:54:00.001+01:00</published><updated>2011-06-28T23:28:45.530+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='QA'/><category scheme='http://www.blogger.com/atom/ns#' term='Software-Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='Form4'/><title type='text'>Tools für (Web-)Entwickler: Firefox Add-ons</title><content type='html'>Geeignete Werkzeuge können die Entwicklung und das Testen von Webanwendungen erheblich erleichtern. Nachfolgend eine kurze Aufzählung von Add-ons, die jeder Entwickler installiert haben sollte:&lt;br /&gt;&lt;h4&gt;&lt;span style="font-size: large;"&gt;&lt;a class="externlink" href="https://addons.mozilla.org/de/firefox/addon/1843"&gt;Firebug&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt;Schon lange kein Geheimtipp mehr, dient dieses Tool zum Debugging von JavaScript. Vor allem untertützt es bei der Überprüfung von &lt;abbr title="Asynchronous Javascript and XML"&gt;AJAX&lt;/abbr&gt;-Funktionen, da es XMLHttpRequests anzeigen kann und zum Profiling von JavaScript geeignet ist. Daneben bietet Firebug ebenso Hilfestellung beim Debugging von &lt;abbr title="Extensible Hypertext Markup Language"&gt;XHTML&lt;/abbr&gt; und &lt;abbr title="Cascading Style Sheets"&gt;CSS&lt;/abbr&gt;.&lt;br /&gt;&lt;h4&gt;&lt;span style="font-size: large;"&gt;&lt;a class="externlink" href="https://addons.mozilla.org/de/firefox/addon/60"&gt;Web Developer&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt;Wie der Name schon sagt dient dieses Add-on dazu, die Erstellung von Webanwendungen zu erleichtern. Ebenso wie Firebug kann der XHTML-Code sowie das dazugehörige CSS inspiziert werden. Allerdings bietet es zusätzliche Funktionen, wie die Deaktivierung der Stylesheets oder JavaScript. Es können Webseiten und CSS validiert werden, Accessibility Tests angestoßen oder die Ansicht im &lt;abbr title="Personal Digital Assistant"&gt;PDA&lt;/abbr&gt; simuliert werden.&lt;br /&gt;&lt;h4&gt;&lt;span style="font-size: large;"&gt;&lt;a class="externlink" href="http://www.openqa.org/selenium-ide/"&gt;Selenium IDE&lt;/a&gt;&lt;/span&gt;&lt;/h4&gt;Der Test von Webseiten war bislang ein schwieriger Teil. Mittels Selenium gehört dies der Vergangenheit an, da Testszenarien einfach einmalig mit allen Klicks und Eingaben aufgenommen werden können und dann beliebig oft wiederholbar sind. So ist die Erstellung von Testfällen sehr einfach. Bezüglich der &lt;a class="externlink" href="http://de.wikipedia.org/wiki/Kontinuierliche_Integration"&gt;Continuous Integration&lt;/a&gt; sollen die Selenium Testfälle auch mit Ant ausführbar sein, was ich bisher noch nicht getestet habe.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-2278027740360457669?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/2278027740360457669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2007/11/tools-fur-web-entwickler-firefox-add.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/2278027740360457669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/2278027740360457669'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2007/11/tools-fur-web-entwickler-firefox-add.html' title='Tools für (Web-)Entwickler: Firefox Add-ons'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-8447259764379164074</id><published>2007-11-18T12:03:00.000+01:00</published><updated>2011-06-27T22:08:23.587+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><title type='text'>Google mag Wordpress</title><content type='html'>&lt;!--:de--&gt;Seitdem ich Wordpress für diese Seite verwende, stiegen die Page-Impressionen deutlich. Das bedeutet wohl, dass die vorherige selbst geskriptete Seite nicht gerade für Suchmaschinen optimiert war :)&lt;br/&gt;&lt;br/&gt;Die Statistik zeigt ein deutliches Ansteigen der Besucher nach Installation von Wordpress Mitte September. Allerdings wird das Ergebnis durch die neuen Blog-Einträge verfälscht.&lt;br/&gt;&lt;br/&gt;&lt;img src="http://www.mmrotzek.de/blog/wp-content/uploads/2007/11/stats.jpg" title="Website-Statistik" alt="Website-Statistik" /&gt;&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-8447259764379164074?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/8447259764379164074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2007/11/google-mag-wordpress.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/8447259764379164074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/8447259764379164074'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2007/11/google-mag-wordpress.html' title='Google mag Wordpress'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-4693943165469184870</id><published>2007-10-29T13:39:00.000+01:00</published><updated>2011-06-27T22:08:23.588+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Operating Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Synchronization'/><title type='text'>Synchronisation von Verzeichnissen mittels Unison</title><content type='html'>&lt;!--:de--&gt;Immer wieder stehe ich vor dem Problem, dass ich die Inhalte von zwei Verzeichnissen synchronisieren muss. Ob das die Synchronisation von einem USB-Stick und einem Rechner ist oder zwischen  zwei Rechnern. Diese Situationen stellen sich häufiger als man denkt. Die alte Lösung war die manuelle Synchronization, wobei man teilweise überhaupt keine Ahnung hat, was nun alles kopiert werden muss und vor allem von wo nach wo.&lt;br/&gt;&lt;br/&gt;Eine Lösung des Problems fand sich mit der Anwendung &lt;a href="http://www.cis.upenn.edu/~bcpierce/unison/" class="externlink"&gt;Unison&lt;/a&gt;. Das Tool ist für alle Plattformen verfügbar und wird über Profile gesteuert. So kann beispielsweise eine Profil zur Synchronisation mit einem USB-Stick erstellt werden. Unter Linux Systemen legt man diese Profildateien (&lt;code&gt;*.prf&lt;/code&gt;) im Ordner &lt;code&gt;.unison&lt;/code&gt; im Home-Verzeichnis ab.&lt;br/&gt;&lt;pre&gt;&lt;code&gt;# synchronization folders&lt;br/&gt;root = /home/micha&lt;br/&gt;root = /media/USB&lt;br/&gt;&lt;br/&gt;# Non-conflicting changes will be propagated; conflicts will be skipped&lt;br/&gt;batch = true&lt;br/&gt;&lt;br/&gt;# ignored sources&lt;br/&gt;ignore = Path tmp&lt;br/&gt;&lt;br/&gt;# needed for sync with FAT disks&lt;br/&gt;perms = 0&lt;br/&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;Eine Besonderheit bei FAT formatierten USB-Sticks ist die Konfigurationseinstellung &lt;code&gt;perms=0&lt;/code&gt;, da FAT keine Berechtigungsstrukturen unterstützt.&lt;br/&gt;&lt;br/&gt;Daneben lassen sich Verzeichnisse auch über &lt;em&gt;SSH&lt;/em&gt; synchronisieren.&lt;br/&gt;&lt;pre&gt;&lt;code&gt;# synchronization folders&lt;br/&gt;root = /Users/micha/Documents&lt;br/&gt;root = ssh://192.168.1.2//home/micha/&lt;br/&gt;&lt;br/&gt;# Non-conflicting changes will be propagated; conflicts will be skipped&lt;br/&gt;batch = true&lt;br/&gt;&lt;br/&gt;# ignored sources&lt;br/&gt;ignore = Path tmp&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;Gestartet wird Unison beispielsweise in der Konsole über &lt;code&gt;unison profilName&lt;/code&gt; (weitere Informationen in der &lt;a href="http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html" class="externlink"&gt;Manual&lt;/a&gt; von Unison).&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-4693943165469184870?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/4693943165469184870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2007/10/synchronisation-von-verzeichnissen.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/4693943165469184870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/4693943165469184870'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2007/10/synchronisation-von-verzeichnissen.html' title='Synchronisation von Verzeichnissen mittels Unison'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-8052110492871541743</id><published>2007-10-28T21:03:00.000+01:00</published><updated>2011-06-27T22:08:23.588+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Operating Systems'/><category scheme='http://www.blogger.com/atom/ns#' term='Mac'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>MP3 Server im lokalen Netz</title><content type='html'>&lt;!--:de--&gt;Möchte man &lt;a href="http://www.apple.com/de/itunes/" class="externlink"&gt;iTunes&lt;/a&gt; benutzen, aber seine Musikbibliothek nicht auf mehrere Rechner redundant speichern, ist der &lt;a href="http://www.fireflymediaserver.org/" class="externlink"&gt;Firefly Media Server&lt;/a&gt; die Lösung. Auf dem Rechner, der die Musik enthält, wird dieser einfach installiert und schon kann man mit anderen Rechner über iTunes darauf zugreifen.&lt;br/&gt;&lt;br/&gt;In meinem konkreten Anwendungsfall läuft der Server auf einem &lt;a href="http://www.ubuntu.com/" class="externlink"&gt;Ubuntu&lt;/a&gt; Rechner und als Clients laufen Windows und Mac Systeme. Die Installation unter Ubuntu verlief mittels &lt;code&gt;apt-get&lt;/code&gt; unkompliziert. Eine Anleitung findet sich &lt;a href="http://wiki.mt-daapd.org/wiki/Quickstart_Ubuntu#Installation" class="externlink"&gt;hier&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;Allerdings hatte ich einige kleine Schwierigkeiten, nachdem ich die Konfiguration (&lt;code&gt;/etc/mt-daapd.conf&lt;/code&gt;) angepasst hatte. So sollte der Benutzer, unter dem der Dienst ausgeführt wird auf &lt;code&gt;mt-daapd&lt;/code&gt; gesetzt bleiben. Ich hatte das Problem, dass ich diesen veränderte und somit der Dienst nicht gestartet werden konnte. Der Grund dafür waren wahrscheinlich Rechteprobleme.&lt;br/&gt;&lt;br/&gt;Soweit so gut. Der Server lief und ich konnte auch auf die Admin-Weboberfläche zugreifen (&lt;a href="http://localhost:3689"&gt;http://localhost:3689&lt;/a&gt;). Allerdings bekam ich keine Musik-Dateien im iTunes auf dem Client angezeigt. Ebenso war hier die Lösung nicht weit. Ein Blick in das Log-File brachte Aufschluss: Der User &lt;code&gt;mt-daapd&lt;/code&gt; hatte keine Leseberechtigung auf das Verzeichnis, worin sämtliche Musikdateien enthalten sind.&lt;br/&gt;&lt;br/&gt;Folglich legte ich eine neue Gruppe &lt;code&gt;mp3&lt;/code&gt; an und fügte diese dem Benutzer mt-daapd und meinem Benutzerkonto hinzu.&lt;br/&gt;&lt;pre&gt;&lt;code&gt;sudo addgroup mp3&lt;br/&gt;sudo adduser mt-daapd mp3&lt;br/&gt;sudo adduser micha mp3&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;Nun musste nur noch das Verzeichnis mit der entsprechenden Gruppe ausgestattet werden.&lt;br/&gt;&lt;pre&gt;&lt;code&gt;chgrp -R mp3 music/&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;Nach Neustart des Daemons (&lt;code&gt;sudo /etc/init.d/mt-daapd restart&lt;/code&gt;) indizierte der Dienst alle Musikdateien erfolgreich.&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-8052110492871541743?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/8052110492871541743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2007/10/mp3-server-im-lokalen-netz.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/8052110492871541743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/8052110492871541743'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2007/10/mp3-server-im-lokalen-netz.html' title='MP3 Server im lokalen Netz'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-8195739912540451109</id><published>2007-10-06T20:14:00.000+02:00</published><updated>2011-06-27T22:08:23.588+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iCal'/><category scheme='http://www.blogger.com/atom/ns#' term='Synchronization'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Lokalen iCal Kalender mit Google Calendar synchronisieren</title><content type='html'>&lt;!--:de--&gt;Seit geraumer Zeit nutze ich Googles Calendar zur Planung meiner Termine. Somit kann ich diese von jedem Rechner mit Internetanschluss einsehen und verwalten. Allerdings besteht trotzdem der Bedarf die Termine offline zur Verfügung zu haben. Dazu benutze ich die iCal-fähigen Kalender Evolution oder das Thunderbird Add-on &lt;a href="https://addons.mozilla.org/de/thunderbird/addon/2313" class="externlink"&gt;Lightning&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;Folglich bestand der Bedarf, Termine zwischen Google und lokalen iCal-Kalender-Dateien zu synchronisieren. Nach langer Suche stieß ich auf den &lt;a href="http://gcaldaemon.sourceforge.net/" class="externlink"&gt;GCALDaemon&lt;/a&gt;, der dies leistet. Ich verwende die &lt;a href="http://gcaldaemon.sourceforge.net/usage2.html" class="externlink"&gt;dateibasierte&lt;/a&gt; Synchronisation, so dass ich Termine offline verwalten kann und soweit eine Internetverbindung verfügbar ist, werden die Änderungen an den Google Kalender übertragen - funktioniert hervorragend.&lt;br/&gt;&lt;br/&gt;Als Alternative stieß ich auf ein zusätzliches &lt;a href="https://addons.mozilla.org/en-US/thunderbird/addon/4631" class="externlink"&gt;Google Calendar Provider Add-on&lt;/a&gt; für Thunderbird, das direkt mit dem Google Kalender synchronisiert. Allerdings muss dazu eine ständige Internetverbindung bestehen. Eine Anleitung, wie das Add-on installiert wird findet sich &lt;a href="http://bfish.xaedalus.net/?p=239" class="externlink"&gt;hier&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;Nun ist auch der Weg zur Synchronisation von Terminen mit dem Handy über eine Kabel-, Infrarot- oder Bluetoothverbindung nicht mehr weit, aber dazu später mehr.&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-8195739912540451109?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/8195739912540451109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2007/10/lokalen-ical-kalender-mit-google.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/8195739912540451109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/8195739912540451109'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2007/10/lokalen-ical-kalender-mit-google.html' title='Lokalen iCal Kalender mit Google Calendar synchronisieren'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-6718843702913433953</id><published>2007-10-02T20:51:00.000+02:00</published><updated>2011-06-27T22:08:23.588+02:00</updated><title type='text'>Website Änderungen</title><content type='html'>&lt;!--:de--&gt;Die vorherige Version der Website hatte als Kernelement einen Blog, so dass ich jetzt zur Verwaltung/Darstellung &lt;a href="http://wordpress.org/" class="externlink"&gt;wordpress&lt;/a&gt; einsetze. Zuvor war die Seite von Hand programmiert, was zwar Spaß machte und eine Menge Erfahrungen im Umgang mit PHP brachte. Allerdings habe ich mittlerweile kaum noch Zeit mich um solche Belange zu kümmern und möchte einfach schnell Informationen erstellen und präsentieren können. Das bietet wordpress.&lt;br/&gt;&lt;br/&gt;PS: Das Bild im Kopf der Seite ist übrigens von der Mountain-Bike Tour im Rahmen unserer Südamerika-Reise, als wir mit 15 Personen im und 20 Fahrrädern auf dem Bus zum Ausgangspunkt der Downhill "Todesstrecke" fuhren.&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-6718843702913433953?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/6718843702913433953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2007/10/website-anderungen.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/6718843702913433953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/6718843702913433953'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2007/10/website-anderungen.html' title='Website Änderungen'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-4287140696699313030</id><published>2007-08-22T02:19:00.000+02:00</published><updated>2011-06-27T22:08:23.588+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software-Development'/><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Verwendung vom Eclipse UML2 Projekt zur Bearbeitung von UML2-Modellen
und Profilen</title><content type='html'>&lt;!--:de--&gt;Das &lt;a class="externlink" href="http://www.eclipse.org/uml2/"&gt;Eclipse UML2 Projekt&lt;/a&gt; findet bereits in einigen Werkzeugen (z. B.   &lt;a class="externlink" href="http://topcased-mm.gforge.enseeiht.fr/website/index.html"&gt;Topcased UML Editor&lt;/a&gt;) Verwendung. Allerdings sind diese Tools zumeist Eclipse-Plugins die das Projekt innerhalb der Eclipse Umgebung verwenden. Möchte man UML2 in einer eigenständigen &lt;em&gt;Java-Anwendung&lt;/em&gt; oder im Rahmen eines &lt;em&gt;Unit-Tests&lt;/em&gt; verwenden, müssen einige Initialisierungen durchgeführt werden. Das nachfolgende Listing zeigt das erforderliche Setup:&lt;br/&gt;&lt;pre&gt;&lt;code&gt;protected static void registerResourceFactories(){&lt;br/&gt;  Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().&lt;br/&gt;    put(UMLResource.FILE_EXTENSION, new UML22UMLResourceFactoryImpl());&lt;br/&gt;  Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().&lt;br/&gt;    put("ecore", new EcoreResourceFactoryImpl());&lt;br/&gt;  Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().&lt;br/&gt;    put("ecore2xml", new EcoreResourceFactoryImpl());&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;protected static void registerPathmaps(URI uri) {&lt;br/&gt;  URIConverter.URI_MAP.put(URI.createURI(UMLResource.LIBRARIES_PATHMAP),&lt;br/&gt;    uri.appendSegment("libraries").appendSegment(""));&lt;br/&gt;  URIConverter.URI_MAP.put(URI.createURI(UMLResource.METAMODELS_PATHMAP),&lt;br/&gt;    uri.appendSegment("metamodels").appendSegment(""));&lt;br/&gt;  URIConverter.URI_MAP.put(URI.createURI(UMLResource.PROFILES_PATHMAP),&lt;br/&gt;    uri.appendSegment("profiles").appendSegment(""));&lt;br/&gt;  final String UML2_200_NS_URI = "http://www.eclipse.org/uml2/2.0.0/UML";&lt;br/&gt;  EPackage.Registry.INSTANCE.put(UML2_200_NS_URI,&lt;br/&gt;    EPackage.Registry.INSTANCE.get(UMLPackage.eINSTANCE.getNsURI()));&lt;br/&gt;  Ecore2XMLPackage.eINSTANCE.getEClassifiers();&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;private static void registerMapping(URI uri) {&lt;br/&gt;  final String ECORE2XML = "platform:/plugin/org.eclipse.uml2.uml/&lt;br/&gt;    model/UML2_2_UML.ecore2xml";&lt;br/&gt;  URIConverter.URI_MAP.put(URI.createURI(ECORE2XML),&lt;br/&gt;    uri.appendSegment("model").appendSegment("UML2_2_UML.ecore2xml"));&lt;br/&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br/&gt;Mit Hilfe der vorhergehenden Initialisierungen lässt sich ein UML2-Profil (XMI Version 2.x) laden und kann zur Modellierung verwendet werden.&lt;br/&gt;&lt;pre&gt;&lt;code&gt; private Profile loadProfile() {&lt;br/&gt;  registerResourceFactories();&lt;br/&gt;  URI uri = URI.createURI("resources");&lt;br/&gt;  registerPathmaps(uri);&lt;br/&gt;  registerMapping(uri);&lt;br/&gt;  URI profileFile = URI.createFileURI("MyProfile.profile.uml");&lt;br/&gt;  Resource r = new ResourceSetImpl().getResource(profileFile, true);&lt;br/&gt;  Profile p = (Profile) EcoreUtil.getObjectByType(r.getContents(),&lt;br/&gt;    UMLPackage.Literals.PROFILE);&lt;br/&gt;  return p;&lt;br/&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-4287140696699313030?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/4287140696699313030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2007/08/verwendung-vom-eclipse-uml2-projekt-zur.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/4287140696699313030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/4287140696699313030'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2007/08/verwendung-vom-eclipse-uml2-projekt-zur.html' title='Verwendung vom Eclipse UML2 Projekt zur Bearbeitung von UML2-Modellen&#xA;und Profilen'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-7069574096211052484</id><published>2007-07-31T00:25:00.000+02:00</published><updated>2011-06-27T22:08:23.589+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software-Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Portal'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><title type='text'>JBoss AS und Portal</title><content type='html'>&lt;!--:de--&gt;Mittlerweile gibt es von JBoss den Application Server in der Version 4.2.1. Zur vorherigen 4.0.x Version gab es umfangreiche Änderungen des Webcontainers. Zum einen wird nun ein Tomcat6 und zum anderen die &lt;abbr title="JavaServer Faces"&gt;JSF&lt;/abbr&gt; Implementierung von Sun verwendet. Möchte man trotzdem MyFaces einsetzen, kann der Servletkonfiguration (&lt;code&gt;web.xml&lt;/code&gt;) ein zusätzlicher Paramter übergeben werden, so dass die Bibliotheken des WARs benutzt werden.&lt;code&gt; &lt;/code&gt;&lt;br/&gt;&lt;br/&gt;&lt;p class="code"&gt;&amp;lt;context-param&amp;gt;&lt;br/&gt;&amp;lt;param-name&amp;gt;org.jboss.jbossfaces.WAR_BUNDLES_JSF_IMPL&amp;lt;/param-name&amp;gt;&lt;br/&gt;&amp;lt;param-value&amp;gt;true&amp;lt;/param-value&amp;gt;&lt;br/&gt;&amp;lt;/context-param&amp;gt;&lt;br/&gt;&lt;br/&gt;Auf Grund der Änderungen am Web Deployer kann das Portal in Version 2.4.1 nicht mehr verwendet werden, da es nicht korrekt geladen wird. Man erhält die Nachricht, dass die PortalWebApp nicht vom Web Deployer gehandhabt werden kann.&lt;br/&gt;&lt;br/&gt;Folglich muss eine aktuelle Version des Portals genutzt werden. Ab Version 2.6 ist das Portal wieder mit dem JBoss &lt;abbr title="Application Server"&gt;AS&lt;/abbr&gt; 4.2.x lauffähig. Allerdings sollte unbedingt 2.6.1 verwendet werden, da das Portal 2.6.0 einige Bugs enthält. Diese wirken sich auf andere Anwendungen, die &lt;a href="http://myfaces.apache.org" class="externlink"&gt;MyFaces&lt;/a&gt; verwenden, negativ aus, so dass diese nicht mehr lauffähig sind.&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-7069574096211052484?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/7069574096211052484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2007/07/jboss-as-und-portal.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/7069574096211052484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/7069574096211052484'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2007/07/jboss-as-und-portal.html' title='JBoss AS und Portal'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-2811835908553210717</id><published>2007-05-31T12:21:00.000+02:00</published><updated>2011-06-27T22:08:23.589+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LaTeX'/><title type='text'>Mehrere Literaturverzeichnisse in LaTeX</title><content type='html'>&lt;!--:de--&gt;Im Rahmen meiner Diplomarbeit stand ich vor dem Problem, dass ich gern mehrere Quellverzeichnisse je nach Typ haben wollte. Beispielsweise getrennt nach Büchern, Spezifikationen oder Webseiten.&lt;br/&gt;&lt;br/&gt;Dazu definiert man in LaTeX folgendes in der Präambel:&lt;br/&gt;&lt;p class="code"&gt;\usepackage[square,sectionbib]{natbib}&lt;br/&gt;\usepackage{bibtopic}&lt;br/&gt;\bibliographystyle{alphadin}&lt;/p&gt;&lt;br/&gt;Innerhalb des &lt;code&gt;document&lt;/code&gt; Blocks können nun mehrere Quellenverzeichnisse mittels &lt;code&gt;btSect&lt;/code&gt; Block definiert werden.&lt;br/&gt;&lt;p class="code"&gt;\begin{btSect}{bib/literature}&lt;br/&gt;\section{Literatur}&lt;br/&gt;\btPrintAll&lt;br/&gt;\end{btSect}&lt;/p&gt;&lt;br/&gt;\begin{btSect}{bib/specs}&lt;br/&gt;\section{Spezifikationen}&lt;br/&gt;\btPrintCited&lt;br/&gt;\end{btSect}&lt;br/&gt;&lt;br/&gt;\begin{btSect}[alpha]{bib/misc}&lt;br/&gt;\section{Sonstiges}&lt;br/&gt;\btPrintAll&lt;br/&gt;\end{btSect}&lt;br/&gt;&lt;br/&gt;Nach der Blockdefinition folgt die Angabe der BibTex Datei, die die Quellen eines bestimmten Typen enthalten. Innerhalb des Blocks kann noch die Bezeichnung des Verzeichnisses (&lt;code&gt;section&lt;/code&gt;} angegeben werden, sowie welche Quellen das Verzeichnis enthalten soll. Mögliche Anweisungen sind:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;&lt;strong&gt;btPrintAll&lt;/strong&gt; - alle Quellen&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;strong&gt;btPrintCited&lt;/strong&gt; - nur zitierte Quellen&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;strong&gt;btPrintNotCited&lt;/strong&gt; - &lt;em&gt;nicht&lt;/em&gt; zitierte Quellen&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-2811835908553210717?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/2811835908553210717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2007/05/mehrere-literaturverzeichnisse-in-latex.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/2811835908553210717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/2811835908553210717'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2007/05/mehrere-literaturverzeichnisse-in-latex.html' title='Mehrere Literaturverzeichnisse in LaTeX'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-4367036356251310987</id><published>2007-04-24T21:18:00.000+02:00</published><updated>2011-06-27T22:08:23.589+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Switch: Windows - Linux (Ubuntu)</title><content type='html'>&lt;!--:de--&gt;Über viele Jahre hinweg nutzte ich ausschließlich &lt;em&gt;Windows&lt;/em&gt; Betriebssysteme auf meinem PC. Nun ist es auch für mich an der Zeit den Wechsel auf ein &lt;em&gt;Linux&lt;/em&gt; zu vollziehen.&lt;br/&gt;&lt;br/&gt;Ausschlaggebend für mich ist eine bessere &lt;em&gt;Kontrolle&lt;/em&gt; über das System und die Möglichkeit es einfacher an meine Bedürfnisse &lt;em&gt;anzupassen&lt;/em&gt;. Zugegeben das geht mit Windows auch, trotzdem bin ich der Meinung, dass ich mit einem Linux System meine Ziele schneller und effektiver erreichen kann.&lt;br/&gt;&lt;br/&gt;Jedoch muss man sagen, dass nicht für jeden PC Nutzer ein Wechsel zu Linux sinnvoll ist. In meinem Fall nutzte ich den PC in allererster Linie als &lt;em&gt;Arbeitsmittel.&lt;/em&gt; Also zur Programmierung und Dokumentation. Für Benutzergruppen die den Computer hauptsächlich zur Unterhaltung (Spiele, etc.) nutzen, ist ein Wechsel eher unsinnig.&lt;br/&gt;&lt;br/&gt;Soweit so gut. Also begann ich damit alles auf &lt;a href="http://ubuntu.com" class="externlink"&gt;Ubuntu&lt;/a&gt;  umzustellen. Ubuntu hatte ich bereits als virtuelles Betriebssystem unter Windows laufen und fand mich mit dieser Linux Distribution gut zurecht. Außerdem finde ich die Mischung aus Design, Komfortabilität und Funktionalität dort optimal. Es ist auch ohne Kenntnis der Konsole benutzbar, zugleich hat man die volle Kontrolle mittels der Konsole. Gut das ist bei den meisten Linux Distributionen so ;)&lt;br/&gt;&lt;h5&gt;Erfahrungen und Tipps&lt;/h5&gt;&lt;br/&gt;&lt;img src="http://www.mmrotzek.de/images/_ubuntulogo.png" class="pic_right" alt="ubunto logo" /&gt;Ich habe mich für einen sanften Wechsel entschieden, d.h. ich machte eine Partition für das Ubuntu frei und installierte es. Der Vorteil liegt darin, dass man ggf. wieder Windows benutzen kann, falls es gravierende Schwierigkeiten gibt.&lt;br/&gt;&lt;h6&gt;Internet und Mail&lt;/h6&gt;&lt;br/&gt;Darum muss man sich nicht weiter kümmern. Ubuntu bringt gleich &lt;a href="http://www.mozilla-europe.org/" class="externlink"&gt;Firefox&lt;/a&gt;  und &lt;a href="http://www.gnome.org/projects/evolution/" class="externlink"&gt;Evolution&lt;/a&gt;  mit. Neben eMail senden und empfangen verfügt Evolution auch über einen Kalender und Kontaktverwaltung - es ähnelt Outlook. Jedoch habe ich es noch nicht weiter getestet.&lt;br/&gt;&lt;h6&gt;Office&lt;/h6&gt;&lt;br/&gt;Ubuntu kommt bereits mit &lt;a href="http://openoffice.org/" class="externlink"&gt;OpenOffice&lt;/a&gt;. Darin enthalten ist ein Schreibprogramm, Tabellenkalkulation, Präsentation und Datenbank. Alles was man von &lt;a href="http://office.microsoft.com/" class="externlink"&gt;Microsoft Office&lt;/a&gt; kennt.&lt;br/&gt;&lt;h6&gt;Messaging&lt;/h6&gt;&lt;br/&gt;Auch unter Linux kann mit &lt;a href="http://www.skype.com/intl/de/download/skype/linux/" class="externlink"&gt;Skype&lt;/a&gt;  telefoniert werden, da es das Programm auch für Linux Systeme gibt. Um auch fleißig &lt;abbr title="Instant Message"&gt;IM&lt;/abbr&gt;s zu schreiben kann das Programm &lt;a href="http://www.pidgin.im/" class="externlink"&gt;Gaim&lt;/a&gt;  genutzt werden. Gaim unterstützt verschiedene IM Protokolle (z.B. Yahoo, ICQ, AIM). Anscheinend wurde Gaim mittlerweile in &lt;strong&gt;Pidgin&lt;/strong&gt; umbenannt - unter Ubuntu 7.0.4 heißt es noch Gaim ;).&lt;br/&gt;&lt;h6&gt;Entwicklungs IDE&lt;/h6&gt;&lt;br/&gt;Hier ist für mich &lt;a href="http://www.eclipse.org" class="externlink"&gt;Eclipse&lt;/a&gt;  erste Wahl und ganz einfach über installiert.&lt;br/&gt;&lt;p class="code"&gt;sudo apt-get install eclipse&lt;/p&gt;&lt;br/&gt;&lt;br/&gt;&lt;h6&gt;Multimedia (Musik, TV, ..)&lt;/h6&gt;&lt;br/&gt;Eine große Herausforderung für Ubuntu als Alternative zum Windows, stellt die Verwaltung von Musik dar. Leider gibt es &lt;a href="http://itunes.com" class="externlink"&gt;iTunes&lt;/a&gt;  nicht für Linux. Auch ein Versuch es über &lt;a href="http://de.wikipedia.org/wiki/WINE_Is_Not_an_Emulator" class="externlink"&gt;wine&lt;/a&gt;  zu installieren gelang mir nicht. Doch ich habe eine gute Alternative gefunden: &lt;a href="http://banshee-project.org" class="externlink"&gt;Banshee&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Seit einiger Zeit besitze ich einen &lt;strong&gt;DVB-T&lt;/strong&gt; USB Stick von &lt;a href="http://freecom.com/ecProducts.asp" class="externlink"&gt;Freecom&lt;/a&gt;, um gelegentlich auf den PC als TV Ersatz zurückzugreifen, wenn meine Freundin kein Fußball schauen möchte :) Doch mitunter nutze ich es auch als &lt;em&gt;digitalen Videorekorder&lt;/em&gt;. Ich muss sagen, dass ich &lt;em&gt;nicht&lt;/em&gt; damit gerechnet habe den Stick unter dem neuen Ubuntu zum Laufen zu bekommen. Das es gehen würde da hatte ich keine Bedenken, aber ich dachte dazu ist ein riesiger Aufwand mit Kompilieren etc. notwendig. Glücklicherweise bin ich auf diese &lt;a href="http://linuxwiki.de/Freecom_DVB-T_USB_Stick" class="externlink"&gt;Anleitung&lt;/a&gt;  gestoßen.&lt;br/&gt;&lt;br/&gt;Das Vorgehen hat auch soweit wie beschrieben funktioniert, nur das ich bei der Firmware etwas &lt;em&gt;abweichen&lt;/em&gt; musste. Die Firmware musste in &lt;em&gt;/lib/firmware/$kernel&lt;/em&gt; kopiert werden und ich benötigte neben dvb-usb-wt220u-zl0353-01.fw auch dvb-usb-wt220u-fc03.fw von &lt;a href="http://www.chandlerfamily.org.uk/files/firmware/" class="externlink"&gt;http://www.chandlerfamily.org.uk/files/firmware/&lt;/a&gt;. Danach noch &lt;a href="http://kaffeine.sourceforge.net/" class="externlink"&gt;Kaffeine&lt;/a&gt;  und einige Codecs installiert und ich konnte DVB-T fernsehen.&lt;br/&gt;&lt;br/&gt;Wie gesagt unverhofft einfach. Außerdem ist Kaffeine deutlich &lt;em&gt;performanter&lt;/em&gt; als die Software, die mit dem DVB-T Stick für Windows mitgeliefert wird. Das Wechseln der Sender geht schneller und auch der Empfang scheint besser zu sein.&lt;br/&gt;&lt;br/&gt;Auch &lt;strong&gt;IPTV&lt;/strong&gt; ist möglich. Unter Windows nutzte ich zuletzt &lt;a href="http://www.sopcast.org/" class="externlink"&gt;Sopcast&lt;/a&gt; . Dieses Programm ist auch unter Linux verfügbar. Jedoch benötigte ich &lt;em&gt;gtk-sopcast_0.2.8-1_i386.deb&lt;/em&gt; (bei Google zu finden) und nicht die unter Downloads bei Sopcast angebotene Version (in Chinesisch). Dazu noch den &lt;a href="http://www.mplayerhq.hu/" class="externlink"&gt;mplayer&lt;/a&gt;  installiert und IPTV funktionierte.&lt;br/&gt;&lt;h6&gt;(Zwischen-)Fazit&lt;/h6&gt;&lt;br/&gt;Bis jetzt bin ich äußerst zufrieden mit Ubuntu. In den nächsten Wochen wird sich zeigen, ob es komplett alltagstauglich ist und werde hier über meine weiteren Erfahrungen berichten ;)&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-4367036356251310987?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/4367036356251310987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2007/04/switch-windows-linux-ubuntu.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/4367036356251310987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/4367036356251310987'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2007/04/switch-windows-linux-ubuntu.html' title='Switch: Windows - Linux (Ubuntu)'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-7483071968880021341</id><published>2007-04-13T11:39:00.000+02:00</published><updated>2011-06-27T22:08:23.589+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Captcha'/><title type='text'>Spamschutz für Formulare</title><content type='html'>&lt;!--:de--&gt;Das &lt;a href="../mKrempel/detail/33"&gt;Update des Captcha Codes&lt;/a&gt;  von letzte Woche hat die Spambots anscheinend nicht vor eine schwierige Aufgabe gestellt. Der Code kann Spameinträge nicht zuverlässig verhindern. Schließlich habe ich mich nun noch einmal mit dem Thema Spam Formulareinträge befasst.&lt;br/&gt;&lt;br/&gt;Dabei stieß ich diverse Seiten, die sich mit dem Thema Captcha "&lt;a href="http://sam.zoy.org/pwntcha/" class="externlink"&gt;knacken&lt;/a&gt;" befassen. Jedoch wird auf dieser Seite auch beschrieben, was notwendig ist, um es Spambots &lt;a href="http://www.brains-n-brawn.com/default.aspx?vDir=aicaptcha" class="externlink"&gt;schwer zu machen&lt;/a&gt;. Leider steht dies immer im Konflikt mit der &lt;em&gt;Lesbarkeit&lt;/em&gt;. Was nutzt schon ein sicheres Captcha, dass auch der Benutzer nicht entschlüsseln kann?&lt;br/&gt;&lt;br/&gt;Schließlich stieß ich auf einen anderen Ansatz. Dabei wird dem Benutzer eine &lt;a href="http://www.drweb.de/weblog/weblog/?p=599" class="externlink"&gt;Rechenaufgabe&lt;/a&gt; gestellt. Das verbunden mit einem Captcha Bild scheint nun die Spambots &lt;em&gt;zuverlässig &lt;/em&gt;zu hindern. Zumindest habe ich seitdem &lt;em&gt;keine &lt;/em&gt;Spameinträge mehr.&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;Captcha Code, der Spambots kaum hindern kann:&lt;br/&gt;&lt;img src="http://www.mmrotzek.de/config/captcha/codepic.php" title="Captcha" height="20" width="60" /&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Zuverlässiger Schutz vor Spambots:&lt;br/&gt;&lt;img src="http://www.mmrotzek.de/config/captcha/calcpic.php" title="Rechnungscaptcha" height="20" width="65" /&gt;&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;Das Prinzip ist einfach. Die Bots "wissen" nicht, dass die erkannten Zeichen zu einer Rechenaufgabe gehören und schreiben einfach alle Zeichen in das Textfeld, was natürlich zu einem falschen Ergebnis führt. Jedoch muss man sagen, dass dieser Variante auch &lt;em&gt;nicht 100%ig sicher&lt;/em&gt; ist, da es nur eine Frage der Zeit ist, bis die Bots auch versuchen den Captcha Code zu berechnen.&lt;br/&gt;&lt;br/&gt;Aber auch das lässt sich noch verbessern: Beispielsweise kann für die Angabe der Operation auch eine Zeichenkette, z.B. ADD für +, genutzt werden. Das würde es den Bots nochmals schwerer machen.&lt;br/&gt;&lt;h5&gt;Download&lt;/h5&gt;&lt;br/&gt;Das Skript (calcpic.php) zur Erstellung einer Captcha Rechenaufgabe liegt der aktuellen Version des Captcha Codes bei.&lt;a href="http://localhost:9999/blog/wp-content/uploads/2007/09/captcha_03.zip" title="captcha_03"&gt;&lt;br/&gt;&lt;/a&gt;&lt;a href="http://www.mmrotzek.de/blog/wp-content/uploads/2007/10/captcha_03.zip" title="captcha_03.zip"&gt;captcha_03.zip&lt;/a&gt;&lt;a href="http://localhost:9999/blog/wp-content/uploads/2007/09/captcha_03.zip" title="captcha_03"&gt;&lt;br/&gt;&lt;/a&gt;&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-7483071968880021341?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/7483071968880021341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2007/04/spamschutz-fur-formulare.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/7483071968880021341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/7483071968880021341'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2007/04/spamschutz-fur-formulare.html' title='Spamschutz für Formulare'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-7053277592676933449</id><published>2007-04-03T13:50:00.000+02:00</published><updated>2011-06-27T22:08:23.589+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Captcha'/><title type='text'>Verbesserter Spamschutz über Captcha Code</title><content type='html'>&lt;!--:de--&gt;Seit einiger Zeit erhalte ich wieder vermehrt Spam Einträge über Benutzerformulare. Zwar benutzte ich den von mir entwickelten &lt;a href="http://www.mmrotzek.de/software-development/php/spamschutz-fur-formulare"&gt;Captcha Bestätigungscode&lt;/a&gt;, jedoch scheint dieser mittlerweile zu einfach für die Spambots zu sein.&lt;br/&gt;&lt;br/&gt;Deshalb habe ich mich noch einmal hingesetzt und den &lt;a href="http://de.wikipedia.org/wiki/Captcha" title="Erläuterungen zu Captcha Codes" class="externlink"&gt;Captcha&lt;/a&gt;  Code &lt;em&gt;verbessert&lt;/em&gt;, um es den Bots schwerer zu machen, den Code zu erkennen.&lt;br/&gt;&lt;br/&gt;Die &lt;strong&gt;Veränderungen&lt;/strong&gt; sind:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;im Hintergrund des Captcha Codes wird ein zufälliges Polygon gezeichnet (kann auch deaktiviert werden)&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;alternierende Textfarbe&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;zufällige Drehung der Zeichen&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;Hier noch eine kleine &lt;strong&gt;Feature&lt;/strong&gt; Liste des Captcha Skripts:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;Auswahl welche Zeichentypen zur Generierung einer zufälligen Zeichenfolge benutzt werden sollen (Zahlen, Klein-, Großbuchstaben)&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;beliebige Länge an Zeichen&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Abmessungen des Captcha Bildes&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Farben frei definierbar&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;Das Skript läuft mit &lt;a href="http://php.net" class="externlink"&gt;PHP4&lt;/a&gt;  und &lt;a href="http://de.wikipedia.org/wiki/GD_Library" class="externlink"&gt;GDLib&lt;/a&gt; .&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-7053277592676933449?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/7053277592676933449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2007/04/verbesserter-spamschutz-uber-captcha.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/7053277592676933449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/7053277592676933449'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2007/04/verbesserter-spamschutz-uber-captcha.html' title='Verbesserter Spamschutz über Captcha Code'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-5811095703800373344</id><published>2007-03-23T17:58:00.000+01:00</published><updated>2011-06-27T22:08:23.590+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><title type='text'>Trac Eclipse Plugin</title><content type='html'>&lt;!--:de--&gt;Nachdem ich mich gestern mit einem Kommilitonen über unsere bevorstehenden Diplomarbeiten austauschte, kamen wir auf das Thema &lt;em&gt;Projektmanagement&lt;/em&gt;. Beide setzen wir das Tool &lt;a href="http://trac.edgewall.org/" class="externlink"&gt;Trac&lt;/a&gt;  ein, da wir es schon im Softwareprojekt erfolgreich eingesetzt haben.&lt;br/&gt;&lt;br/&gt;Eine kurze Liste der Features von &lt;strong&gt;Trac&lt;/strong&gt;:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;sehr gute Integration von &lt;a href="http://subversion.tigris.org/" class="externlink"&gt;Subversion&lt;/a&gt;&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;Subversion Changesets (Timeline)&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;Repository Inhalt über Webbrowser abrufbar&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Ticketsystem (Bugtracker)&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Wiki&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Milestones&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;Daraufhin kam bei mir der Wunsch nach einem &lt;em&gt;Eclipse Plugin&lt;/em&gt; auf, so dass ich die Tickets auch dort sehen kann. Und ein solches &lt;a href="http://www.trac-hacks.org/wiki/EclipseTracPlugin" class="externlink"&gt;Plugin&lt;/a&gt;  gibt es auch.&lt;br/&gt;&lt;br/&gt;So setzte ich mich sofort hin und wollte das Plugin installieren.&lt;br/&gt;&lt;br/&gt;Nach der &lt;a href="http://www.trac-hacks.org/wiki/EclipseTracPlugin" class="externlink"&gt;Anleitung&lt;/a&gt;  müssen erst zwei Trac-Plugins installiert werden. Das funktioniert auch ohne Probleme. Dann das Eclipse-Plugin per Update Manager installieren. Doch leider (mal wieder) Abhängigkeitsprobleme: Es fehlt &lt;em&gt;org.atl.eclipse.adt.debug. &lt;/em&gt;An sich sollte ich dieses Plugin installiert haben, weil die &lt;em&gt;Xtext&lt;/em&gt; Komponente von &lt;a href="http://www.openarchitectureware.org" class="externlink"&gt;openarchitectureware&lt;/a&gt;  &lt;a href="http://www.eclipse.org/m2m/atl/download/"&gt;ATL&lt;/a&gt;  ebenfalls benötigt. Heruntergeladen habe ich es bereits, anscheinend aber vergessen in den Eclipse Plugin Ordner zu kopieren ;).&lt;br/&gt;&lt;br/&gt;Na egal, &lt;abbr title="ATLAS Transformation Language"&gt;ATL&lt;/abbr&gt; dort rein und Eclipse neu starten. Und? Mist immer noch nicht. Auch&lt;em&gt; org.eclipse.gmf.runtime.diagram.ui&lt;/em&gt; fehlt. Kann dieser Update Manager nicht gleich &lt;strong&gt;alle Abhängigkeiten anzeigen&lt;/strong&gt;?! Dieses Prozedere geht mir jedes mal auf die Nerven und vor allem kostet es Zeit :(&lt;br/&gt;&lt;br/&gt;Also auch noch &lt;a href="http://download.eclipse.org/modeling/gmf/downloads/index.php" class="externlink"&gt;GMT&lt;/a&gt;  installieren. Eclipse Neustart. Und? Nee, schon wieder fehlendes &lt;em&gt;org.atl.eclipse.adt.debug&lt;/em&gt;. Hm, vielleicht ist meine Eclipse Installation kaputt? Einfach mal das Trac Plugin so herunterladen und installieren - ohne Update Manager. Neustart. Und? Läuft ohne Probleme!&lt;br/&gt;&lt;br/&gt;Nun noch einen neuen &lt;em&gt;Trac Server&lt;/em&gt; anlegen. &lt;em&gt;"Verbindung kann nicht hergestellt werden."&lt;/em&gt; Hä, warum das denn nicht?! Nach etwas stöbern in der &lt;a href="http://www.trac-hacks.org/wiki/XmlRpcPlugin" class="externlink"&gt;XmlRpcPlugin Dokumentation&lt;/a&gt;  kommt heraus, dass das Plugin nur mit dem BASIC-AUTH Authentifizierungsverfahren funktioniert. Ich benutze aber Digest. Das auch noch umstellen:&lt;br/&gt;&lt;p class="code"&gt;tracd.py -p8000 --basic-auth=*,C:...users.htbasic,trac C:...	rac	hesis&lt;/p&gt;&lt;br/&gt;Beim Neustart des Daemon erscheint die Meldung, dass das &lt;em&gt;crypt&lt;/em&gt; Modul zum entschlüsseln des Passworts nicht gefunden werden kann. Dieses Modul gibt es unter &lt;em&gt;Windows&lt;/em&gt; nicht.&lt;br/&gt;&lt;br/&gt;Daraufhin habe ich den Versuch Trac über das Eclipse Plugin zu bedienen ersteinmal eingestellt (hat schließlich schon 90 Minuten gekostet) :(&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-5811095703800373344?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/5811095703800373344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2007/03/trac-eclipse-plugin.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/5811095703800373344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/5811095703800373344'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2007/03/trac-eclipse-plugin.html' title='Trac Eclipse Plugin'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-605346002842004734</id><published>2007-03-14T00:04:00.000+01:00</published><updated>2011-06-27T22:08:23.590+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DMS'/><category scheme='http://www.blogger.com/atom/ns#' term='Software-Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Portal'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><title type='text'>Alfresco in JBoss 4.0.5 integrieren</title><content type='html'>&lt;!--:de--&gt;Seit Kurzem ist das &lt;em&gt;Document Manangement System&lt;/em&gt; &lt;a href="http://www.alfresco.com/"&gt;Alfresco &lt;/a&gt; in der Community Edition in Version 2.0 verfügbar. Leider gibt es einige Schwierigkeiten das neue Release mit &lt;a href="http://www.jboss.org"&gt;JBoss &lt;abbr title="Application Server"&gt;AS&lt;/abbr&gt;&lt;/a&gt;  in der Version &lt;strong&gt;4.0.5&lt;/strong&gt; lauffähig zu bekommen.&lt;br/&gt;&lt;br/&gt;Zwar erscheint Alfresco, man kann es aber nicht benutzen, da die Links JavaScript Fehler produzieren. So etwas zum Beispiel:&lt;br/&gt;&lt;p class="code"&gt; Error: document.forms.dashboard['dashboard:act'] has no properties&lt;/p&gt;&lt;br/&gt;Grund dafür scheint eine fehlerhafte MyFaces Bibliothek zu sein.&lt;br/&gt;&lt;br/&gt;Um Alfresco doch unter JBoss 4.0.5 zum Laufen zu bekommen, muss man unter &lt;em&gt;$JBOSS_HOME/server/default/deploy/jbossweb-tomcat55.sar/jsf-libs/&lt;/em&gt; die &lt;a href="http://myfaces.apache.org" title="MyFaces Website"&gt;MyFaces&lt;/a&gt;  Jars (in Version 1.1.4) gegen eine ältere Version &lt;strong&gt;(1.1.1&lt;/strong&gt;) austauschen. Mit dieser Version von MyFaces kann Alfresco auch unter JBoss AS 4.0.5 benutzt werden. Unter 4.0.4 ist ein Austausch nicht notwendig, da dort MyFaces eh in Version 1.1.1 vorliegt.&lt;br/&gt;&lt;br/&gt;Soweit so gut. Möchte man Alfresco 2.0 auch noch in einem &lt;strong&gt;Portlet &lt;/strong&gt;unter &lt;a href="http://labs.jboss.com/portal/jbossportal"&gt;JBoss Portal 2.4.1&lt;/a&gt; benutzen, wird es komplizierter. Doch es gibt eine Lösung, die &lt;a href="http://blog.meimberg.info/?p=210"&gt;hier &lt;/a&gt; beschrieben wird.&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-605346002842004734?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/605346002842004734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2007/03/alfresco-in-jboss-405-integrieren.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/605346002842004734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/605346002842004734'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2007/03/alfresco-in-jboss-405-integrieren.html' title='Alfresco in JBoss 4.0.5 integrieren'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-1002230759347255133</id><published>2007-02-25T20:25:00.000+01:00</published><updated>2011-06-27T22:08:23.590+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oaw'/><category scheme='http://www.blogger.com/atom/ns#' term='Model-Driven'/><title type='text'>Vortrag: openarchitectureware</title><content type='html'>&lt;!--:de--&gt;Bereits am 12.12.07 hielt ich einen Vortrag im Rahmen der &lt;em&gt;Special Interest Group "Model Driven Software-Engineering" (SIG-MDSE)&lt;/em&gt; über &lt;strong&gt;openarchitectureware&lt;/strong&gt;.&lt;br/&gt;&lt;br/&gt;Mit dem Generator Framework konnte ich mich während meines Praktikums bei &lt;a href="http://www.form4.de" class="externlink"&gt;Form4&lt;/a&gt; intensiv aueinandersetzen. Das Ziel des Vortrags war eine p&lt;em&gt;raktische Einführung&lt;/em&gt; in die Benutzung von openarchitectureware zur modellgetriebenen Softwareentwicklung zu geben.&lt;br/&gt;&lt;br/&gt;Die Präsentation, sowie der "live" entwickelte Generator steht auf den Seiten der &lt;a href="http://www.sig-mdse.org/sig-mdse/Treffen/Berlin3" class="externlink"&gt;SIG-MDSE&lt;/a&gt; zum herunterladen bereit.&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-1002230759347255133?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/1002230759347255133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2007/02/vortrag-openarchitectureware.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/1002230759347255133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/1002230759347255133'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2007/02/vortrag-openarchitectureware.html' title='Vortrag: openarchitectureware'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-3859643266637300982</id><published>2007-01-28T21:21:00.000+01:00</published><updated>2011-06-27T22:08:23.590+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='LaTeX'/><title type='text'>Windows LaTeX Editor</title><content type='html'>&lt;!--:de--&gt;Da ich mich langsam auf meine Diplomarbeit vorbereite, stellt sich mir die Frage, mit welchem Schreibwerkzeug ich die Arbeit anfertigen werde. Zur Auswahl steht &lt;em&gt;OpenOffice &lt;/em&gt;und &lt;em&gt;LaTeX&lt;/em&gt;.&lt;br/&gt;&lt;br/&gt;Sicher hat OpenOffice den Vorteil eines &lt;acronym title="What You See Is What You Get"&gt;WYSIWYG&lt;/acronym&gt; Editors, wo man gleich sieht, wie das Geschriebene aussieht. LaTeX mit seiner Syntax ist da schon kryptischer. Bisher habe ich noch keinen vernünftigen Editor für LaTeX unter &lt;em&gt;Windows &lt;/em&gt;gefunden, der diesen Nachteil gegenüber Office Programmen ausgleichen konnte.&lt;br/&gt;&lt;br/&gt;Jedoch bin ich vor einiger Zeit auf den Editor &lt;a href="http://www.latexeditor.org/" class="externlink"&gt;LEd&lt;/a&gt; gestoßen. LEd verfügt über eine integrierte DVI Vorschau. Zwar muss noch kompiliert werden, bevor das Dokument angezeigt wird, aber die paar Sekunden kann ich warten.&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-3859643266637300982?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/3859643266637300982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2007/01/windows-latex-editor.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/3859643266637300982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/3859643266637300982'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2007/01/windows-latex-editor.html' title='Windows LaTeX Editor'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-1237427469142941407</id><published>2007-01-22T20:24:00.000+01:00</published><updated>2011-06-27T22:08:23.590+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='WebService'/><title type='text'>Web Service mit Java 6</title><content type='html'>&lt;!--:de--&gt;Im neuen Java Release (&lt;em&gt;Mustang&lt;/em&gt;) besteht die Möglichkeit ohne weitere Zusatzmittel mit &lt;a href="http://de.wikipedia.org/wiki/Web_Service" class="externlink"&gt;Web Services&lt;/a&gt; zu arbeiten. Es ist sehr einfach einen solchen Service lokal zu testen. Lediglich die Klasse, die Services (Methoden/Funktionalität) bereitstellen soll, wird mit einigen &lt;em&gt;Annotations&lt;/em&gt; versehen.&lt;br/&gt;&lt;br/&gt;Um eine Klasse als Web Service zu kennzeichnen wird sie mit der  Annotation &lt;code&gt;javax.jws.WebService&lt;/code&gt; und Service Methoden mit &lt;code&gt;javax.jws.WebMethod&lt;/code&gt; markiert. Außerdem muss der Web Service veröffentlicht werden. Hier hilft die Klasse &lt;code&gt;javax.xml.ws.Endpoint&lt;/code&gt;, die eine statische Methode &lt;code&gt;publish(String address, Object implementor)&lt;/code&gt; zur Verfügung stellt.&lt;code&gt; &lt;/code&gt;&lt;br/&gt;&lt;br/&gt;&lt;code&gt;&lt;pre&gt;package webservicetest;&lt;br/&gt;import javax.jws.WebService;&lt;br/&gt;import javax.jws.WebMethod;&lt;br/&gt;import javax.xml.ws.Endpoint;&lt;br/&gt;&lt;br/&gt;@WebService&lt;br/&gt;public class CalculatorService{&lt;br/&gt;&lt;br/&gt;  @WebMethod&lt;br/&gt;  public int duplicate(int value){&lt;br/&gt;    return value * 2;&lt;br/&gt;  }&lt;br/&gt;&lt;br/&gt;  public static void main(String[] args) {&lt;br/&gt;    Endpoint.publish("http://localhost:8080/Calculator", new CalculatorService());&lt;br/&gt;  }&lt;br/&gt;}&lt;br/&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br/&gt;&lt;br/&gt;Startet man die &lt;code&gt;main&lt;/code&gt; Methode dieser Klasse, ist der Web Service unter der URL &lt;code&gt;http://localhost:8080/Calculator&lt;/code&gt; so lange verfügbar bis das Programm terminiert. Als Test kann die URL &lt;code&gt;http://localhost:8080/Calculator/rate?WSDL&lt;/code&gt; aufgerufen werden. Im Browser erscheint daraufhin eine Beschreibung des Services im &lt;acronym title="Web Services Description Language"&gt;WSDL&lt;/acronym&gt; Format.&lt;br/&gt;&lt;br/&gt;Mehr Informationen und weitere Möglichkeiten finden sich in der &lt;a href="http://java.sun.com/javase/6/docs/api/index.html?javax/jws/package-summary.html" class="externlink"&gt;Java 6 API&lt;/a&gt;.&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-1237427469142941407?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/1237427469142941407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2007/01/web-service-mit-java-6.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/1237427469142941407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/1237427469142941407'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2007/01/web-service-mit-java-6.html' title='Web Service mit Java 6'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-8473630036243441156</id><published>2007-01-07T20:38:00.000+01:00</published><updated>2011-06-27T22:08:23.591+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>[FeedCreator] RSS-Feed mit PHP</title><content type='html'>&lt;!--:de--&gt;Wie kann ich meinen Besuchern Inhalte per RSS-Feed zugänglich machen?&lt;br/&gt;&lt;br/&gt;Diese Frage stellte ich mir vor Kurzem auch. Nach etwas googeln, habe ich relativ schnell eine Antwort gefunden.&lt;br/&gt;&lt;br/&gt;Deshalb möchte ich die Implementierung des &lt;strong&gt;RSS 2.0&lt;/strong&gt; Feeds nicht im Einzelnen beschreiben, sondern das PHP Skript hier zum herunterladen bereitstellen.&lt;br/&gt;&lt;h5 id="Aufbau"&gt;Aufbau&lt;/h5&gt;&lt;br/&gt;&lt;a href="http://de.wikipedia.org/wiki/RSS" class="externlink"&gt;RSS&lt;/a&gt; verlangt eine bestimmte XML Struktur (siehe &lt;a href="http://blogs.law.harvard.edu/tech/rss" class="externlink"&gt;RSS 2.0&lt;/a&gt;). Die PHP Klasse setzt diese Struktur um.&lt;br/&gt;&lt;h5 id="Benutzung"&gt;Benutzung&lt;/h5&gt;&lt;br/&gt;Als Erstes muss ein neues Objekt mit den grundlegenden Informationen (Titel, URL, Beschreibung, Sprache) erstellt werden.&lt;br/&gt;&lt;code&gt; &lt;/code&gt;&lt;br/&gt;&lt;br/&gt;$feed = new FeedCreator("Feed Titel", "http://link/zum/feed", "Beschreibung des Feeds", "de-de");&lt;br/&gt;&lt;br/&gt;Zusätzlich können noch weitere Feedinformationen hinzugefügt werden. Mehr in der &lt;acronym title="Application Programming Interface"&gt;API&lt;/acronym&gt; (ethalten im zip Archiv - Ordner doc).&lt;br/&gt;&lt;br/&gt;Als nächstes werden dem Feed Artikel (Items) hinzugefügt. Das geht einfach über &lt;code&gt; &lt;/code&gt;&lt;br/&gt;&lt;br/&gt;$feed-&amp;gt;addItem("Artikel Titel", "Text des Artikels", "Link zum vollständigem Artikel");&lt;br/&gt;&lt;br/&gt;Die Länge des Textes wird standardmäßig &lt;em&gt;nicht&lt;/em&gt; beschränkt. Die maximale Anzahl von Wörtern kann über &lt;code&gt;$feed-&amp;gt;setSize(100);&lt;/code&gt; angepasst werden (bevor sie &lt;code&gt;addItem()&lt;/code&gt; benutzen).&lt;br/&gt;&lt;br/&gt;Nun muss nur noch der RSS-Feed als XML-Datei ausgegeben werden. Das geht mit Hilfe der Funktion &lt;code&gt;$feed-&amp;gt;getXML();&lt;/code&gt;.&lt;br/&gt;&lt;strong&gt;Wichtig&lt;/strong&gt;: Vor dem Aufruf dieser Methode darf noch nichts an den Browser gesendet worden sein. D. h. keine &lt;code&gt;print&lt;/code&gt; oder &lt;code&gt;echo&lt;/code&gt; Ausgaben vorher.&lt;br/&gt;&lt;h5 id="Erweiterungen"&gt;Erweiterungen&lt;/h5&gt;&lt;br/&gt;Den einzelnen Artikeln können noch mehr Informationen beigefügt werden.&lt;br/&gt;&lt;h6 id="Veröffentlichungsdatum"&gt;Veröffentlichungsdatum&lt;/h6&gt;&lt;br/&gt;Nützlich für den Abonnementen für die Sortierung im Feedreader. Das Format richtet sich nach RFC 2822. Nützlich erweist sich die &lt;a href="http://www.php.net/manual/de/function.date.php" class="externlink"&gt;&lt;code&gt;date("r")&lt;/code&gt;&lt;/a&gt; Funktion von &lt;em&gt;PHP.&lt;/em&gt;&lt;br/&gt;&lt;br/&gt;&lt;code&gt;addItem("Titel", "Text", "URL",&lt;/code&gt; &lt;strong&gt;&lt;code&gt;"Thu, 21 Dec 2000 16:01:07 +0200");&lt;/code&gt;&lt;/strong&gt;&lt;br/&gt;&lt;h6 id="Autor"&gt;Autor&lt;/h6&gt;&lt;br/&gt;Der Autor des Artikels.&lt;br/&gt;&lt;br/&gt;&lt;code&gt;addItem("Titel", "Text", "URL", "Thu, 21 Dec 2000 16:01:07 +0200",&lt;/code&gt; &lt;strong&gt;&lt;code&gt;"autor@mail.de (Autor Name)");&lt;/code&gt;&lt;/strong&gt;&lt;br/&gt;&lt;h6 id="Kategorie"&gt;Kategorie&lt;/h6&gt;&lt;br/&gt;Um dem Artikel eine Kategorie zuzuordnen, muss ein Hilfsobjekt (&lt;code&gt;Category&lt;/code&gt;) erstellt werden. Diesem Objekt werden die Kategorien getrennt durch einen &lt;strong&gt;/&lt;/strong&gt; und ein &lt;em&gt;optionaler&lt;/em&gt; Namespace angegeben.&lt;br/&gt;&lt;br/&gt;&lt;code&gt;$categorie = new Category("Technik/PC", "http://meinedomain.de");&lt;/code&gt;&lt;br/&gt;&lt;code&gt;addItem("Titel", "Text", "URL", "", "",&lt;/code&gt;&lt;strong&gt;&lt;code&gt; $category);&lt;/code&gt;&lt;/strong&gt;&lt;br/&gt;&lt;h6 id="Anhang"&gt;Anhang&lt;/h6&gt;&lt;br/&gt;Für einen Anhang gibt es auch eine Hilfsklasse (&lt;code&gt;Enclosure&lt;/code&gt;). Diesem Objekt muss die URL des Anhangs, die Größe in Bytes und der MIME-Typ mitgeteilt werden.&lt;br/&gt;&lt;br/&gt;&lt;code&gt;$enclosure = new Enclosure("http://image.png", 1536, "image/png");&lt;/code&gt;&lt;br/&gt;&lt;code&gt;addItem("Titel", "Text", "URL", "", "", null, &lt;/code&gt;&lt;strong&gt;&lt;code&gt; $enclosure);&lt;/code&gt;&lt;/strong&gt;&lt;br/&gt;&lt;h5 id="Download"&gt;Download&lt;/h5&gt;&lt;br/&gt;&lt;a href="http://www.mmrotzek.de/blog/wp-content/uploads/2007/10/feedcreator_03.zip" title="FeedCreator_0.3.zip"&gt;FeedCreator_0.3.zip&lt;/a&gt;&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-8473630036243441156?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/8473630036243441156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2007/01/feedcreator-rss-feed-mit-php.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/8473630036243441156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/8473630036243441156'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2007/01/feedcreator-rss-feed-mit-php.html' title='[FeedCreator] RSS-Feed mit PHP'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-6771986374627086749</id><published>2007-01-05T20:49:00.000+01:00</published><updated>2011-06-27T22:08:23.591+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Persistence'/><category scheme='http://www.blogger.com/atom/ns#' term='JPA'/><title type='text'>Persistenz für Desktop Anwendungen mit JPA und JavaDB</title><content type='html'>&lt;!--:de--&gt;Im neuen Java 6 Release wird eine Datenbank (&lt;em&gt;Java DB&lt;/em&gt;) gleich mitgeliefert, daher liegt es nahe diese für Desktop Anwendungen zu benutzen. Außerdem wurde innerhalb des &lt;a href="http://jcp.org/en/jsr/detail?id=220" class="externlink"&gt;JSR 220&lt;/a&gt; die sogenannte &lt;em&gt;Java Persistence API&lt;/em&gt; (JPA) spezifiziert. Die Persistierung von Objekten wird dadurch transparenter und ist nicht mehr vom Persistenz Framework (z.B. Hibernate) abhängig. Zudem ist das objektrelationale Mapping deutlich einfacher, da es anhand von &lt;em&gt;Annotations&lt;/em&gt; gesteuert wird.&lt;br/&gt;&lt;h5 id="Voraussetzungen"&gt;Voraussetzungen&lt;/h5&gt;&lt;br/&gt;In dieser Beschreibung benutze ich die &lt;a href="http://www.eclipse.org" class="externlink"&gt;Eclipse&lt;/a&gt; Entwicklungsumgebung und &lt;a href="http://www.hibernate.org" class="externlink"&gt;Hibernate&lt;/a&gt; als Implementierung der JPA. Es werden folgende Hibernate Komponenten benötigt: Hibernate &lt;em&gt;Core&lt;/em&gt;, Hibernate &lt;em&gt;Annotations&lt;/em&gt; und Hibernate &lt;em&gt;EntityManager&lt;/em&gt;. Außerdem ist ein installiertes Java 6 erforderlich.&lt;br/&gt;&lt;br/&gt;Aus den verschiedenen Hibernate Komponenten werden folgende Bibliotheken benötigt, die am besten in den Ordner &lt;code&gt;lib&lt;/code&gt; kopiert werden.&lt;br/&gt;&lt;br/&gt;&lt;p class="code"&gt;- lib&lt;br/&gt;+ antlr-2.7.6.jar&lt;br/&gt;+ asm-attrs.jar&lt;br/&gt;+ asm.jar&lt;br/&gt;+ c3p0-0.9.0.jar&lt;br/&gt;+ cglib-2.1.3.jar&lt;br/&gt;+ commons-collections-2.1.1.jar&lt;br/&gt;+ commons-logging-1.0.4.jar&lt;br/&gt;+ dom4j-1.6.1.jar&lt;br/&gt;+ ejb3-persistence.jar&lt;br/&gt;+ hibernate-annotations.jar&lt;br/&gt;+ hibernate-entitymanager.jar&lt;br/&gt;+ hibernate3.jar&lt;br/&gt;+ javassist.jar&lt;br/&gt;+ jboss-archive-browsing.jar&lt;br/&gt;+ jta.jar&lt;br/&gt;+ log4j-1.2.11.jar&lt;br/&gt;&lt;br/&gt;Diese Bibliotheken müssen im Klassenpfad eingetragen sein. Außerdem ist es notwendig, die &lt;code&gt;derby.jar&lt;/code&gt; (&lt;code&gt;$JAVA_HOME/db/lib/&lt;/code&gt;) ebenfalls in den Klassenpfad aufzunehmen.&lt;br/&gt;&lt;h5 id="Konfiguration"&gt;Konfiguration&lt;/h5&gt;&lt;br/&gt;Trotz Verwendung von Annotations für das objektrelationale Mapping ist eine Konfiguration mittels XML Datei erforderlich. Für JPA wird dazu im Verzeichnis &lt;code&gt;etc/META-INF/&lt;/code&gt; die Datei &lt;strong&gt;&lt;code&gt;persistence.xml&lt;/code&gt;&lt;/strong&gt; angelegt. Darin wird angegeben, welche JPA Implementierung genutzt wird. Außerdem werden Persistenz Framework spezifische Einstellungen vorgenommen. Da diese Datei, ebenso wie die Jar-Dateien, im Klassenpfad verfügbar sein muss, wird das &lt;code&gt;etc&lt;/code&gt; Verzeichnis zu den Quellverzeichnissen (Source Folder) hinzugefügt.&lt;code&gt; &lt;/code&gt;&lt;br/&gt;&lt;br/&gt;&lt;p class="code"&gt;&amp;lt;persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"&amp;gt;&lt;br/&gt;&amp;lt;persistence-unit name="hibernate"&amp;gt;&lt;br/&gt;&amp;lt;provider&amp;gt;org.hibernate.ejb.HibernatePersistence&amp;lt;/provider&amp;gt;&lt;br/&gt;&amp;lt;properties&amp;gt;&lt;br/&gt;&amp;lt;property name="hibernate.connection.driver_class" value="org.apache.derby.jdbc.EmbeddedDriver" /&amp;gt;&lt;br/&gt;&amp;lt;property name="hibernate.connection.url" value="jdbc:derby:TestDatabase;create=true" /&amp;gt;&lt;br/&gt;&amp;lt;property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect" /&amp;gt;&lt;br/&gt;&amp;lt;/properties&amp;gt;&lt;br/&gt;&amp;lt;/persistence-unit&amp;gt;&lt;br/&gt;&amp;lt;/persistence&amp;gt;&lt;br/&gt;&lt;br/&gt;Jeder &lt;em&gt;persistence-unit&lt;/em&gt; muss ein &lt;code&gt;provider&lt;/code&gt; zugeordnet werden. Außerdem können weitere Providerspezifische Eigenschaften definiert werden.&lt;br/&gt;Für das Beispiel mit Hibernate müssen Eigenschaften der Verbindung eingetragen werden. So z.B. der verwendete JDBC Treiber (&lt;code&gt;hibernate.connection.driver_class&lt;/code&gt;) und die URL zur Datenbank (&lt;code&gt;hibernate.connection.url&lt;/code&gt;). Die mitgelieferte JavaDB kann über &lt;code&gt;jdbc:derby:$database&lt;/code&gt; erreicht werden. Beispielsweise wird durch die URL &lt;code&gt;jdbc:derby:TestDatabase;create=true&lt;/code&gt; die Datenbank &lt;em&gt;TestDatabase&lt;/em&gt; benutzt. Sollte diese nicht existieren, wird sie angelegt. Das Hibernate auch mit der JavaDB arbeiten kann, muss zudem der zu verwendende Dialekt eingestellt werden.&lt;br/&gt;&lt;br/&gt;Diese drei Einstellungen sind notwendig, um mit der Hibernate auf JavaDB zu arbeiten. Es können aber noch viel mehr Einstellungen für Hibernate vorgenommen werden (siehe &lt;a href="http://www.hibernate.org/hib_docs/reference/en/html/session-configuration.html" class="externlink"&gt;Hibernate Konfiguration&lt;/a&gt;).&lt;br/&gt;&lt;h5 id="Verwendung"&gt;Verwendung&lt;/h5&gt;&lt;br/&gt;Nach der Erstellung der Konfiguration können nun Objekte dauerhaft gespeichert und wieder gelesen werden. Dazu müssen die zu persistierenden Beans (bzw. &lt;acronym title="Plain Old Java Object"&gt;POJOs&lt;/acronym&gt;) mit &lt;em&gt;Annotations&lt;/em&gt; versehen werden. Alle Klassen, die persistiert werden sollen, erhalten die Annotation &lt;code&gt;javax.persistence.Entity&lt;/code&gt;.&lt;br/&gt;&lt;br/&gt;&lt;code&gt;&lt;pre&gt;import javax.persistence.Column;&lt;br/&gt;import javax.persistence.Entity;&lt;br/&gt;import javax.persistence.GeneratedValue;&lt;br/&gt;import javax.persistence.GenerationType;&lt;br/&gt;import javax.persistence.Id;&lt;br/&gt;&lt;br/&gt;@Entity&lt;br/&gt;public class Person {&lt;br/&gt;&lt;br/&gt;@Id&lt;br/&gt;@GeneratedValue(strategy=GenerationType.IDENTITY)&lt;br/&gt;@Column(name = "PERSON_ID")&lt;br/&gt;private long id;&lt;br/&gt;&lt;br/&gt;@Column(name="DNAME")&lt;br/&gt;private String name;&lt;br/&gt;&lt;br/&gt;private String firstName;&lt;br/&gt;&lt;br/&gt;public String getFirstName() {&lt;br/&gt;return this.firtsName;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;public void setFirstName(final String firstName) {&lt;br/&gt;this.firstName = firstName;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;public long getId() {&lt;br/&gt;return this.id;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;public void setId(final long id) {&lt;br/&gt;this.id = id;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;public String getName() {&lt;br/&gt;return this.name;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;public void setName(final String name) {&lt;br/&gt;this.name = name;&lt;br/&gt;}&lt;br/&gt;}&lt;br/&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br/&gt;&lt;br/&gt;Daneben ist es notwendig, dass die Bean ein Attribut besitzt, über die das Objekt eindeutig identifiziert werden kann. Im Normalfall ist dieses Attribut vom Typ &lt;code&gt;long&lt;/code&gt;. Dieser Identifier muss mit einer entsprechenden Annotation markiert werden (&lt;code&gt;javax.persistence.Id&lt;/code&gt;). Weiterhin kann die Generierungsstrategie einer neuen Id festgelegt werden. Dazu wird die Annotation &lt;a href="http://java.sun.com/javaee/5/docs/api/javax/persistence/GeneratedValue.html" class="externlink"&gt;&lt;code&gt;javax.persistence.GeneratedValue&lt;/code&gt;&lt;/a&gt; benutzt.&lt;br/&gt;Neben der Deklaration der Id kann jeder Spalte der entsprechende Spaltenname in der Datenbank zugeordnet werden. Das geht über &lt;code&gt;javax.persistence.Colum&lt;/code&gt;. Diese Annotation ist optional. Ist ein Attribut nicht damit versehen, wird einfach der Attributname als Spaltenname benutzt.&lt;br/&gt;Dies sind nur ein paar wenige Einstellungen für eine JavaBean. Für weiterführende Informationen kann die &lt;a href="http://java.sun.com/javaee/5/docs/api/index.html?javax/persistence/package-summary.html" class="externlink"&gt;API&lt;/a&gt; zu Rate gezogen werden.&lt;br/&gt;&lt;h6&gt;Objekt speichern&lt;/h6&gt;&lt;br/&gt;Die zentrale Klasse zum speichern und laden von Objekten ist &lt;code&gt;javax.persistence.EntityManager&lt;/code&gt;. Eine Instanz kann über &lt;code&gt;javax.persistence.EntityManagerFactory&lt;/code&gt; erstellt werden.&lt;br/&gt;&lt;br/&gt;&lt;p class="code"&gt;final EntityManagerFactory emf = Persistence.createEntityManagerFactory("hibernate");&lt;br/&gt;final EntityManager em = emf.createEntityManager();&lt;br/&gt;&lt;br/&gt;Nachdem der &lt;code&gt;EntityManager&lt;/code&gt; verfügbar ist, wird eine &lt;code&gt;javax.persistence.EntityTransaction&lt;/code&gt; benötigt. Diese Klasse ist zur Steuerung der Transaktionen verantwortlich. Will man ein Objekt in die Datenbank schreiben, braucht es eine offene Transaktion.&lt;br/&gt;&lt;br/&gt;&lt;p class="code"&gt;final EntityTransaction tx = em.getTransaction();&lt;br/&gt;tx.begin();&lt;br/&gt;&lt;br/&gt;Innerhalb dieser Transaktion kann nun ein Objekt persistiert werden.&lt;br/&gt;&lt;br/&gt;&lt;p class="code"&gt;final Person person = new Person();&lt;br/&gt;person.setName("mrotzek");&lt;br/&gt;person.setFirstName("michael");&lt;br/&gt;em.persist(person);&lt;br/&gt;&lt;br/&gt;Letztendlich muss die Transaktion noch geschlossen werden, um Änderungen wirklich in die Datenbank zu schreiben.&lt;br/&gt;&lt;br/&gt;&lt;p class="code"&gt;tx.commit();&lt;br/&gt;em.close();&lt;br/&gt;emf.close();&lt;br/&gt;&lt;h6&gt;Objekt lesen&lt;/h6&gt;&lt;br/&gt;&lt;p class="code"&gt;final EntityManagerFactory emf = Persistence.createEntityManagerFactory("hibernate");&lt;br/&gt;final EntityManager em = emf.createEntityManager();&lt;br/&gt;final EntityTransaction tx = em.getTransaction();&lt;br/&gt;tx.begin();&lt;br/&gt;final List persons = em.createQuery("select p from Person p").getResultList();&lt;br/&gt;System.out.println(persons.size() + " person(s) found");&lt;br/&gt;for (final Object p : persons) {&lt;br/&gt;final Person lPerson = (Person) p;&lt;br/&gt;System.out.println(lPerson .getName()+", "+lPerson .getFirstName()+" : "+lPerson .getId());&lt;br/&gt;}&lt;br/&gt;tx.commit();&lt;br/&gt;em.close();&lt;br/&gt;emf.close();&lt;br/&gt;&lt;h5&gt;Referenzen&lt;/h5&gt;&lt;br/&gt;&lt;a href="http://developers.sun.com/prodtech/javadb/" class="externlink"&gt;Java DB&lt;/a&gt;&lt;br/&gt;&lt;a href="http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javadb/" class="externlink"&gt;Using Java DB in Desktop Applications&lt;/a&gt;&lt;br/&gt;&lt;a href="http://www.javaddicts.net/blog/index.php/2005/04/22/working-with-derby-and-hibernate/" class="externlink"&gt;Working with Derby and Hibernate&lt;/a&gt;&lt;br/&gt;&lt;a href="http://www.hibernate.org/397.html" class="externlink"&gt;Java Persistence with Hibernate&lt;/a&gt;&lt;br/&gt;&lt;a href="http://java.sun.com/developer/technicalArticles/J2EE/jpa/" class="externlink"&gt;The Java Persistence API&lt;/a&gt;&lt;br/&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/2006/05/17/standardizing-with-ejb3-java-persistence-api.html" class="externlink"&gt;Standardizing Java Persistence with the EJB3 Java Persistence API&lt;/a&gt;&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-6771986374627086749?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/6771986374627086749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2007/01/persistenz-fur-desktop-anwendungen-mit.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/6771986374627086749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/6771986374627086749'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2007/01/persistenz-fur-desktop-anwendungen-mit.html' title='Persistenz für Desktop Anwendungen mit JPA und JavaDB'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-3933559595440792775</id><published>2006-12-18T12:12:00.000+01:00</published><updated>2011-06-27T22:08:23.591+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='oaw'/><title type='text'>Eclipse Plugin patchen</title><content type='html'>&lt;!--:de--&gt;Bei der Arbeit mit dem &lt;a href="http://www.openarchitectureware.org/" class="externlink"&gt;openarchitectureware&lt;/a&gt; Framework entdeckte ich einen Bug im Plugin. Dieser Fehler war für mein Projekt so schwerwiegend, dass ich den Fehler sofort beheben musste - ich konnte nicht aufs nächste Update in ein paar Monaten warten. Also musste ich ersteinmal herausfinden, wie man ein Eclipse Plugin patcht.&lt;br/&gt;&lt;br/&gt;Zuerst beschafft man sich den Quellcode per CVS. Zwar ist die CVS Struktur von Eclipse Projekten im ersten Augenblick gewöhnungsbedürftig, aber dann doch recht schlüssig. Mehr Information zum Checkout gibt es &lt;a href="http://www.eclipse.org/gmt/oaw/download/cvs.php" class="externlink"&gt;hier&lt;/a&gt;. Nachdem die Quellcodes heruntergeladen sind, kann der Fehler gefunden und beseitigt werden. Soweit so gut. Aber wie seine Eclipse Installation aktualisieren?&lt;br/&gt;&lt;br/&gt;Für Eclipse Plugin Projekte gibt es immer eine &lt;code&gt;plugin.xml&lt;/code&gt; im Stammverzeichnis. Nach dem öffnen dieser startet man im Reiter &lt;em&gt;Overview &lt;/em&gt;unter &lt;em&gt;Exporting&lt;/em&gt; den &lt;em&gt;Export Wizard&lt;/em&gt;. Im Wizard können die benötigten Fragmente, die exportiert werden sollen, ausgewählt werden. Nach dem Export liegen die Fragmente als JAR Datei vor. Diese werden dann in den Eclipse Plugin Ordner (&lt;code&gt;eclipse/plugins&lt;/code&gt;) kopiert (&lt;abbr title="gegebenenfalls"&gt;ggf.&lt;/abbr&gt; noch alte Versionen des Plugins löschen). Zu guter Letzt Eclipse neu starten, fertig ist der Patch des Plugins.&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-3933559595440792775?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/3933559595440792775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2006/12/eclipse-plugin-patchen.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/3933559595440792775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/3933559595440792775'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2006/12/eclipse-plugin-patchen.html' title='Eclipse Plugin patchen'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-3396044353378490573</id><published>2006-12-15T21:49:00.000+01:00</published><updated>2011-06-27T22:08:23.591+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='WebService'/><title type='text'>Neue Funktionen von Java 6</title><content type='html'>&lt;!--:de--&gt;Anfang Dezember hat Sun Java 6 (Codename &lt;em&gt;Mustang&lt;/em&gt;) veröffentlicht. Im Gegensatz zum Sprung von Java 1.4.2 auf Java 5 (Tiger) sind die Veränderungen zwischen Tiger und Mustang nicht so tiefgreifend. Trotzdem bietet das Mustang Release einige sinvolle Neuerungen.&lt;br/&gt;&lt;br/&gt;Dazu gehört die intergrierte &lt;em&gt;Web Service&lt;/em&gt; API, die die Erstellung eines solchen so einfach wie nie zuvor macht. Außerdem wurden einige Verbesserungen im Bereich Datenbankenzugriff vorgenommen. So wird JDBC 4.0 unterstützt. Daneben kommt Java 6 jetzt auch mit einer eigenen Datenbank (&lt;em&gt;Java DB&lt;/em&gt;). Hier handelt es sich im wesentlichen um Apache Derby. Der Vorteil liegt darin, dass in einer Desktop Anwendung diese benutzt werden kann - es muss keine weitere Software eingebunden werden, um Daten persistent abzulegen.&lt;br/&gt;&lt;br/&gt;Weiterhin soll die &lt;em&gt;Performance &lt;/em&gt;bei Desktop Anwendungen verbessert worden sein, da einige Prüfungen nicht mehr zur Laufzeit sondern bereits beim Kompilieren durchgeführt werden. Auch das Look &amp;amp; Feel der Benutzeroberfläche (&lt;acronym title="Graphical User Interface"&gt;GUI&lt;/acronym&gt;) passt sich nun besser dem Betriebssystem an.&lt;br/&gt;&lt;br/&gt;Ein sehr guter Überblick &lt;a href="http://www.java-tutor.com/java/java-6-mustang-news.htm"&gt;hier&lt;/a&gt;&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-3396044353378490573?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/3396044353378490573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2006/12/neue-funktionen-von-java-6.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/3396044353378490573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/3396044353378490573'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2006/12/neue-funktionen-von-java-6.html' title='Neue Funktionen von Java 6'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-1335358763724118262</id><published>2006-09-26T22:47:00.000+02:00</published><updated>2011-06-27T22:08:23.591+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Captcha'/><title type='text'>Spamschutz (Captcha)</title><content type='html'>&lt;!--:de--&gt;Wer ein Gästebuch oder E-Mail Formular auf seiner Website hat, kennt die Belästigug durch &lt;a href="http://de.wikipedia.org/wiki/Bot" class="externlink"&gt;Bots&lt;/a&gt;. Mit Hilfe eines Bestätigungscodes kann dieses Problem reduziert werden.&lt;br/&gt;&lt;br/&gt;Das PHP Skript ist winzig klein und benötigt nur eine installierte GDLib. Auch die Integration ist einfach. Dazu wird dem Formular einfach ein zusätzliches Eingabefeld hinzugefügt, in das der Captcha Code eingetragen werden muss. Nach dem Abschicken des Formulars kann der eingegebene Code überprüft werden.&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-1335358763724118262?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/1335358763724118262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2006/09/spamschutz-captcha.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/1335358763724118262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/1335358763724118262'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2006/09/spamschutz-captcha.html' title='Spamschutz (Captcha)'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-2119375350941713638</id><published>2006-05-31T22:49:00.000+02:00</published><updated>2011-06-27T22:08:23.591+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software-Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='Web 2.0'/><title type='text'>Web 2.0 - Ajax</title><content type='html'>&lt;!--:de--&gt;Im Rahmen unseres Softwareprojekts streifte ich zum ersten mal die neue "Wundertechnik" &lt;a href="http://de.wikipedia.org/wiki/Ajax_(Programmierung)" class="externlink"&gt;Ajax&lt;/a&gt;. Schon beeindruckend was damit alles möglich ist (siehe &lt;a href="http://google.com/calendar" class="externlink"&gt;Googles Calendar&lt;/a&gt;, wenn man es bis auf die Spitze treiben möchte), aber eigentlich nur Javascript.&lt;br/&gt;&lt;br/&gt;Egal wie man darüber denkt, ich benötigte einige Zeit, um ein brauchbares und kostenloses Ajax / Javascript Framework zu finden. Nachdem ich Prototype gefunden hatte, musste ich mich nur noch auf die Suche nach einer geeigneten Dokumentation machen.&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;&lt;a href="http://prototype.conio.net/" class="externlink"&gt;Prototype&lt;/a&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;a href="http://wiki.script.aculo.us/scriptaculous/show/Prototype" class="externlink"&gt;Doku1&lt;/a&gt;&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;&lt;a href="http://www.sergiopereira.com/articles/prototype.js.html" class="externlink"&gt;Doku2&lt;/a&gt;&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;Außerdem bin ich auch auf &lt;a href="http://openrico.org/" class="externlink"&gt;Rico&lt;/a&gt; gestoßen. Rico setzt auf Prototype auf, bietet aber schon grafische Elemente (z. B. Accordeon) und etwas mehr Dynamik.&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-2119375350941713638?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/2119375350941713638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2006/05/web-20-ajax.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/2119375350941713638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/2119375350941713638'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2006/05/web-20-ajax.html' title='Web 2.0 - Ajax'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-8554399517647285231</id><published>2006-04-25T19:54:00.000+02:00</published><updated>2011-06-27T22:08:23.591+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Stripes Framework für Webanwendungen</title><content type='html'>&lt;!--:de--&gt;Entwickler stehen zu Beginn einer Webanwendung oft vor dem Problem, sich für ein &lt;strong&gt;Präsentationsframework&lt;/strong&gt; entscheiden zu müssen. Jeder der schon einmal mit Struts, JSF und Co. gekämpft hat, weiß wie schwer es ist, sich in diese einzuarbeiten.&lt;br/&gt;Doch mit &lt;a href="http://stripes.mc4j.org/confluence/display/stripes/Home" class="externlink"&gt;Stripes&lt;/a&gt; scheint eine Rettung in Sicht. Aus eigener Erfahrung kann ich behaupten, dass es &lt;strong&gt;einfach&lt;/strong&gt; ist sich in dieses Framework einzuarbeiten, um schnell (sichtbare) Ergebnisse zu produzieren. Das fiel mir bei den bisherigen Platzhirschen nicht so leicht.&lt;br/&gt;&lt;br/&gt;Dabei setzt &lt;em&gt;Stripes&lt;/em&gt; stark auf Annotations von Java 5, was die Konfiguration bequem macht.&lt;br/&gt;Einige Vorteile des Frameworks:&lt;br/&gt;&lt;ul&gt;&lt;br/&gt;	&lt;li&gt;&lt;strong&gt;keine&lt;/strong&gt; langen, unübersichtlichen Konfigurationsdateien (XML)&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Zentrales Exceptionhandling&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Mächtiges Validierung- und Typkonvertierungssystem&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;JUnit Testbarkeit&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Wiederverwendbares Layout&lt;/li&gt;&lt;br/&gt;	&lt;li&gt;Komplette Dokumentation; super Support&lt;/li&gt;&lt;br/&gt;&lt;/ul&gt;&lt;br/&gt;Für mich ein sehr gutes Framework, dass momentan sehr rege verbessert und erweitert wird.&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-8554399517647285231?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/8554399517647285231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2006/04/stripes-framework-fur-webanwendungen.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/8554399517647285231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/8554399517647285231'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2006/04/stripes-framework-fur-webanwendungen.html' title='Stripes Framework für Webanwendungen'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-1499358048011387966</id><published>2006-03-19T00:32:00.000+01:00</published><updated>2011-06-27T22:08:23.592+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QA'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Neue JUnit Version</title><content type='html'>&lt;!--:de--&gt;&lt;strong&gt;JUnit&lt;/strong&gt; gibt es nun in der Version 4.0. Das "revolutionär" neue an dieser Version ist, dass es mit &lt;em&gt;Annotations&lt;/em&gt; von Java 1.5 arbeitet. Um einen JUnit Test zu schreiben, muss man nun nicht mehr von &lt;code&gt;junit.framework.TestCase&lt;/code&gt; ableiten, sondern beschreibt das per Annotation. Die Testklassen sind dadurch auch deutlich kürzer und somit schneller zu erstellen.&lt;br/&gt;&lt;br/&gt;Wie das im Detail geht, erfährt man &lt;a href="http://www.instrumentalservices.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=45&amp;amp;Itemid=52" class="externlink"&gt;hier&lt;/a&gt; in 10 Minuten.&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-1499358048011387966?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/1499358048011387966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2006/03/neue-junit-version.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/1499358048011387966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/1499358048011387966'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2006/03/neue-junit-version.html' title='Neue JUnit Version'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8076030733426004353.post-4594540292351997936</id><published>2006-03-14T01:11:00.000+01:00</published><updated>2011-06-27T22:08:23.592+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software-Development'/><title type='text'>Prog: Best Practices</title><content type='html'>&lt;!--:de--&gt;Was sich jeder Programmierer anschauen sollte, ist da Refactoring von Code. Hier gibt es die gängigsten: &lt;a href="http://www.java-tutor.com/java/refactoring/catalog/" class="externlink"&gt;Refactoring&lt;/a&gt;&lt;!--:--&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8076030733426004353-4594540292351997936?l=mmrotzek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mmrotzek.blogspot.com/feeds/4594540292351997936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://mmrotzek.blogspot.com/2006/03/prog-best-practices.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/4594540292351997936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8076030733426004353/posts/default/4594540292351997936'/><link rel='alternate' type='text/html' href='http://mmrotzek.blogspot.com/2006/03/prog-best-practices.html' title='Prog: Best Practices'/><author><name>Michael Mrotzek</name><uri>https://profiles.google.com/102962068009649407035</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh3.googleusercontent.com/-6Q0B5JqUmSI/AAAAAAAAAAI/AAAAAAAAARU/nIbq-yUpuTE/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
