<?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-3796968729938659925</id><updated>2012-05-19T08:08:38.558+02:00</updated><category term='Best Practice'/><category term='test'/><category term='flash'/><category term='QueryModule'/><category term='CPS'/><category term='OXOMI'/><category term='SHC'/><category term='Java'/><category term='plugin'/><category term='SellSite'/><category term='installed'/><title type='text'>scireum</title><subtitle type='html'>Neues von &lt;a href="http://www.scireum.de"&gt;scireum&lt;/a&gt;.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://labs.scireum.de/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default'/><link rel='alternate' type='text/html' href='http://labs.scireum.de/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Andreas Haufler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-3sPZxyMzrDA/AAAAAAAAAAI/AAAAAAAAAFM/109VZ3QeGSI/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3796968729938659925.post-8201830701709778375</id><published>2012-01-09T11:54:00.003+01:00</published><updated>2012-01-09T15:44:00.285+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SHC'/><title type='text'>CL. BERGMANN zeigt, wie's geht</title><content type='html'>&lt;div class="" style="clear: both; text-align: justify;"&gt;Die Firma &lt;b&gt;CL. BERGMANN&lt;/b&gt; aus Kassel ist Großhändler für Haustechnik. Auf &lt;a href="http://berbis24.de/"&gt;berbis24.de&lt;/a&gt;&amp;nbsp;befindet sich das BERGMANN Bestell- und Informationssystem – dort können die Kunden auf alle Funktionen zugreifen, die man mit dem Begriff E-Commerce verbindet.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Für diese Plattform haben wir bei scireum eine Mobilversion für iPhone und Co. entwickelt: &lt;b&gt;BERBIS24 to go &lt;/b&gt;auf der Basis von &lt;a href="http://www.scireum.de/mobile"&gt;Kibes mobile&lt;/a&gt;.&amp;nbsp;Die Zielgruppe dieser WebApp sind in erster Linie Handwerker, die auch unterwegs auf der Baustelle Zugriff auf ihr BERBIS24 haben möchten. "Ist meine Bestellung schon unterwegs? Was kostet ein bestimmter Artikel?" Solche Infos hat man als Kunde von CL. BERGMANN in Zukunft immer zur Hand – im wahrsten Sinne des Wortes.&lt;br /&gt;&lt;div&gt;&lt;br class="Apple-interchange-newline" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-mfDwXEzyloE/TwrF1sCdyJI/AAAAAAAAAAk/Bdf0Z2Zv4Ys/s1600/DSC_6011.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/-mfDwXEzyloE/TwrF1sCdyJI/AAAAAAAAAAk/Bdf0Z2Zv4Ys/s400/DSC_6011.jpg" width="266" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-8d8UyhymuGg/TwrFypPbQEI/AAAAAAAAAAc/DUKEGr714j8/s1600/DSC_5994.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://3.bp.blogspot.com/-8d8UyhymuGg/TwrFypPbQEI/AAAAAAAAAAc/DUKEGr714j8/s320/DSC_5994.jpg" width="320" /&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://1.bp.blogspot.com/-AzW42IRd1Fc/TwrF4qdoPrI/AAAAAAAAAAs/KxpI9GWX6mk/s1600/DSC_6015.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://1.bp.blogspot.com/-AzW42IRd1Fc/TwrF4qdoPrI/AAAAAAAAAAs/KxpI9GWX6mk/s320/DSC_6015.jpg" width="320" /&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://1.bp.blogspot.com/-6X-FUAYullA/TwrF85KBSaI/AAAAAAAAAA0/VcUIih3qrGk/s1600/DSC_6018.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="212" src="http://1.bp.blogspot.com/-6X-FUAYullA/TwrF85KBSaI/AAAAAAAAAA0/VcUIih3qrGk/s320/DSC_6018.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796968729938659925-8201830701709778375?l=labs.scireum.de' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labs.scireum.de/feeds/8201830701709778375/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://labs.scireum.de/2012/01/wer-mobil-ist-spielt-ganz-vorne-mit.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default/8201830701709778375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default/8201830701709778375'/><link rel='alternate' type='text/html' href='http://labs.scireum.de/2012/01/wer-mobil-ist-spielt-ganz-vorne-mit.html' title='CL. BERGMANN zeigt, wie&apos;s geht'/><author><name>Stefan Bubeck</name><uri>http://www.blogger.com/profile/15400742354430288170</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-mfDwXEzyloE/TwrF1sCdyJI/AAAAAAAAAAk/Bdf0Z2Zv4Ys/s72-c/DSC_6011.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3796968729938659925.post-7742338124883366801</id><published>2011-12-16T14:08:00.006+01:00</published><updated>2011-12-19T16:54:45.193+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SHC'/><title type='text'>Wir bringen Ihren Shop aufs Smartphone</title><content type='html'>&lt;b&gt;Ab jetzt gibt es &lt;a href="http://www.scireum.de/mobile"&gt;KIBES Mobile&lt;/a&gt; – eine WebApp, mit der Kunden nun auch mobil auf viele Inhalte in iKIBES zugreifen können. &lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Xyk-cmx03PU/Tus_pld4_hI/AAAAAAAAAAM/wZPfqG2Cxko/s1600/Bildschirmfoto+2011-11-22+um+17.55.29.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-Xyk-cmx03PU/Tus_pld4_hI/AAAAAAAAAAM/wZPfqG2Cxko/s320/Bildschirmfoto+2011-11-22+um+17.55.29.jpg" width="170" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Das B2B-Portal &lt;a href="http://www.shcom.de/?pageid=69" target="_blank"&gt;iKIBES&lt;/a&gt; ist die Online-Komponente des ERP-Systems SHCWare der &lt;a href="http://www.shcom.de/" target="_blank"&gt;SHComputersysteme GmbH, Speyer&lt;/a&gt;. Ein Softwarehaus, mit dem wir schon seit einiger Zeit erfolgreich zusammenarbeiten – nun haben wir uns ins Zeug gelegt und&lt;b&gt; &lt;a href="http://www.scireum.de/mobile"&gt;KIBES Mobile&lt;/a&gt;&lt;/b&gt; entwickelt. So sind KIBES-Onlineshops auf Smartphones und Tablets perfekt dargestellt. Und das natürlich &lt;b&gt;plattformunabhängig&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Die wichtigsten Funktionen im Überblick: &lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Angebote, Lieferungen, Rückstände und Rechnungen in Echtzeit verfügbar &lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Übernahme von Angebotspositionen in den Warenkorb &lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Zuständige Ansprechpartner &lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Artikelsuche im ganzen Sortiment, inkl. Nettopreis und Verfügbarkeit &lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Warenkorb füllen, editieren und bestellen&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Plattformübergreifend&lt;/b&gt;.&lt;br /&gt;KIBES Mobile ist an kein Betriebssystem oder Gerät gebunden und läuft ohne Anpassungen auf iOS (iPhone / iPAD), Android, WebOS, Windows Phone, Blackberry, Meego und Kindle. Damit ist Ihre Investition unabhängig der Entwicklungen im Mobilmarkt gesichert, da alle großen Plattformen unterstützt werden.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Keine Kompromisse.&lt;/b&gt;&lt;br /&gt;KIBES Mobile läuft auf den nativen Schnittstellen von SHC iKIBES. Durch diese tiefe und direkte Integration erreichen wir ohne Kompromisse optimale Geschwindigkeit und höchste Aktualität.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Erweiterbar.&lt;/b&gt;&lt;br /&gt;Durch den modularen Aufbau ist KIBES Mobile einfach und zukunftssicher erweiterbar. Somit steht zukünftigen Anpassungen nichts im Wege und wir können flexibel auf Ihre Anforderungen und Wünsche reagieren.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796968729938659925-7742338124883366801?l=labs.scireum.de' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labs.scireum.de/feeds/7742338124883366801/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://labs.scireum.de/2011/12/wir-bringen-ihren-shop-aufs-smartphone.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default/7742338124883366801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default/7742338124883366801'/><link rel='alternate' type='text/html' href='http://labs.scireum.de/2011/12/wir-bringen-ihren-shop-aufs-smartphone.html' title='Wir bringen Ihren Shop aufs Smartphone'/><author><name>Stefan Bubeck</name><uri>http://www.blogger.com/profile/15400742354430288170</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-Xyk-cmx03PU/Tus_pld4_hI/AAAAAAAAAAM/wZPfqG2Cxko/s72-c/Bildschirmfoto+2011-11-22+um+17.55.29.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3796968729938659925.post-8515720694028256613</id><published>2011-12-16T10:19:00.003+01:00</published><updated>2011-12-17T12:06:28.184+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OXOMI'/><title type='text'>Besser denn je: OXOMI bekommt das erste große Update</title><content type='html'>&lt;span style="  line-height: 115%;font-family:'Open Sans', sans-serif;font-size:10pt;"  &gt;&lt;a href="http://www.scireum.de/oxomi"&gt;OXOMI 1.1&lt;/a&gt; bringt für die über 170 Informationsportale, die aktuell bei Handel, Industrie und Verbänden genutzt werden, neue Features für Front- und Backend. Unter anderem eine optimierte Navigationsleiste, eine verbesserte Anzeige von Suchergebnissen, mehrsprachige Portale und Instant Search.&lt;/span&gt;&lt;br /&gt;&lt;span style="  line-height: 115%;font-family:'Open Sans', sans-serif;font-size:10pt;"  &gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="  line-height: 19px;font-family:'Open Sans', sans-serif;font-size:13px;"  &gt;Die neuen &lt;a href="http://www.scireum.de/oxomi/technologie"&gt;OXOMI-Features&lt;/a&gt; werden auf unserem youtube-Kanal in einem Screencast vorgestellt. &lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" src="http://2.gvt0.com/vi/kyP7vPE4nR4/0.jpg" width="320" height="266"&gt;&lt;param name="movie" value="http://www.youtube.com/v/kyP7vPE4nR4&amp;amp;fs=1&amp;amp;source=uds"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;embed src="http://www.youtube.com/v/kyP7vPE4nR4&amp;amp;fs=1&amp;amp;source=uds" type="application/x-shockwave-flash" width="320" height="266"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style=" ;font-family:'Open Sans', sans-serif;font-size:x-small;"  &gt;&lt;span class="Apple-style-span" style="line-height: 19px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796968729938659925-8515720694028256613?l=labs.scireum.de' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labs.scireum.de/feeds/8515720694028256613/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://labs.scireum.de/2011/12/besser-denn-je-oxomi-bekommt-das-erste.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default/8515720694028256613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default/8515720694028256613'/><link rel='alternate' type='text/html' href='http://labs.scireum.de/2011/12/besser-denn-je-oxomi-bekommt-das-erste.html' title='Besser denn je: OXOMI bekommt das erste große Update'/><author><name>Stefan Bubeck</name><uri>http://www.blogger.com/profile/15400742354430288170</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3796968729938659925.post-2789041601039122303</id><published>2011-07-02T17:29:00.005+02:00</published><updated>2011-12-16T14:54:17.535+01:00</updated><title type='text'>Upgrade Ubuntu 9.04 Jaunty to 10.04 Lucid LTS</title><content type='html'>&lt;span style="font-family: verdana;"&gt;Heute Mittag haben wir uns dazu durchgerungen, unsere &lt;/span&gt;&lt;span style="font-family: verdana; font-style: italic;"&gt;„Silvia“&lt;/span&gt;&lt;span style="font-family: verdana;"&gt; (Workgroup-Server) endlich mal auf 10.04 LTS zu bringen.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Eigentlich geht das ja recht einfach durch Eingabe von:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;do-release-upgrade&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Leider verweigerte das Upgrade aber den Dienst mit der Meldung:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana; font-weight: bold;"&gt;An upgrade from 'jaunty' to 'lucid' is not supported with this tool.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;So - was nun?&lt;br /&gt;Die netten Empfehlungen der „Linux-Profis“ in diversen Foren: „Alles Platt machen und sauber neu aufsetzen“ scheiterten an dem Interesse, neben dem Upgrade auch noch etwas anderes am Wochenende zu tun (Stichwort Sozialleben).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Im Netz gibt es aber auch noch Artikel über „Installationen per Alternativ CD“. D.h. der Updatemanager zieht nicht alles aus dem Netz, sondern macht das schön 90er Jahre-Style übers CD-ROM.&lt;br /&gt;Nachteil: Man muß erst von 9.04 auf 9.10 (von 9.10 kann man dann per Release-upgrade auf 10.04 LTS)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Das Image kann man sich im Netz schnell holen und dann einfach direkt Mounten:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;64 bit:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana; font-weight: bold;"&gt;wget http://swtsrv.informatik.uni-mannheim.de/pub/linux/distributions/ubuntu-release/9.10/ubuntu-9.10-alternate-amd64.iso&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;32 bit:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana; font-weight: bold;"&gt;wget http://swtsrv.informatik.uni-mannheim.de/pub/linux/distributions/ubuntu-release/9.10/ubuntu-9.10-alternate-i386.iso&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;(Man kann natürlich auch einen beliebigen anderen Mirror nehmen… google is your friend ;-) )&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana; font-weight: bold;"&gt;mount -o loop ./ubuntu-9.10-alternate-i386.iso /media/cdrom0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Danach das Update Programm starten (Benötigt X)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana; font-weight: bold;"&gt;sh /media/cdrom0/cdromupgrade&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Wichtig ist jetzt: &lt;span style="font-weight: bold;"&gt;Nicht nach aktualisierten Quellen im Internet suchen lassen&lt;/span&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Dann bügelt es einem das Release drauf (Hat bei uns anstandslos geklappt, ab und an muß man mal bestätigen, ob man eine Konfig behalten will oder nicht)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Sobald das Update auf 9.10 fertig ist, die Kiste einmal rebooten und dann gleich wieder den Updatemanager anwerfen (Wichtig: Hier nicht das 9.10 updaten sondern gleich ein Upgrade auf 10.04 anfahren)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana;"&gt;Voila - that‘s it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana; font-style: italic;"&gt;Vielleicht noch eines: Support Ende von 10.04 LTS in den Kalender eintragen (Desktop April 2013, Server: April 2015) und rechtzeitig auf die neue LTS hoch, damit man so ein Drama nicht gleich wieder hat.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796968729938659925-2789041601039122303?l=labs.scireum.de' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labs.scireum.de/feeds/2789041601039122303/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://labs.scireum.de/2011/07/upgrade-ubuntu-904-jaunty-to-1004-lucid.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default/2789041601039122303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default/2789041601039122303'/><link rel='alternate' type='text/html' href='http://labs.scireum.de/2011/07/upgrade-ubuntu-904-jaunty-to-1004-lucid.html' title='Upgrade Ubuntu 9.04 Jaunty to 10.04 Lucid LTS'/><author><name>Michael Haufler</name><uri>http://www.blogger.com/profile/06054356362482419437</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_1H8eg7w78OU/TJeSe56lj_I/AAAAAAAAACQ/uyciDEp0sds/s1600-R/mha.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3796968729938659925.post-5724165934316444653</id><published>2011-01-28T16:23:00.007+01:00</published><updated>2011-12-16T10:34:13.179+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='installed'/><category scheme='http://www.blogger.com/atom/ns#' term='test'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><title type='text'>Welche Version des Flashplugins ist installiert?</title><content type='html'>Wenn man eine Applikation in Flash anbietet, ist es immer wieder hilfreich, einfach zu testen ob ein Kunde X in seinem Browser Y ein Flashplugin installiert hat und wenn ja, in welcher Version.&lt;br /&gt;&lt;br /&gt;Die einfachste Möglichkeit das herauszufinden, egal ob FireFox, Chrome, Opera oder Internet Explorer (IE) bietet der Aufruf von: &lt;a href="http://www.adobe.com/software/flash/about/" target="_blank"&gt;http://www.adobe.com/software/flash/about/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796968729938659925-5724165934316444653?l=labs.scireum.de' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labs.scireum.de/feeds/5724165934316444653/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://labs.scireum.de/2011/01/welche-version-des-flashplugins-ist.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default/5724165934316444653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default/5724165934316444653'/><link rel='alternate' type='text/html' href='http://labs.scireum.de/2011/01/welche-version-des-flashplugins-ist.html' title='Welche Version des Flashplugins ist installiert?'/><author><name>Michael Haufler</name><uri>http://www.blogger.com/profile/06054356362482419437</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_1H8eg7w78OU/TJeSe56lj_I/AAAAAAAAACQ/uyciDEp0sds/s1600-R/mha.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3796968729938659925.post-5716081893541381960</id><published>2010-11-17T16:32:00.013+01:00</published><updated>2010-11-17T17:22:51.889+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Best Practice'/><category scheme='http://www.blogger.com/atom/ns#' term='QueryModule'/><title type='text'>Mit dem Query Module die richtgen Tabellen und Felder auf einer i5 finden</title><content type='html'>&lt;span style=";font-family:arial;font-size:100%;"  &gt;Wie heißt das Feld für die Kundennummer im Kundenstamm, wie heißt überhaupt die Tabelle Kundenstamm?!&lt;br /&gt;VKKUND, KDSTPF, KUND, KUNDE?&lt;br /&gt;Gerade in RPG-lastigen Umgebungen wird man häufig mit netten 6-Stelligen Abkürzungen verwöhnt.  Wie also soll man sich hier zurechtfinden. Die Profis auf der i5 greifen kurzerhand zu den DDS Sourcen, oder auch zum Operations Navigator wenn es etwas länger dauern darf.&lt;br /&gt;&lt;br /&gt;Was aber wenn man vor DDS Sourcen Angst hat und der Operations Navigator einem zu langsam ist?&lt;br /&gt;&lt;br /&gt;Da gibts doch auch was von Ratio... äh scireum.....&lt;br /&gt;&lt;br /&gt;Richtig!&lt;br /&gt;&lt;br /&gt;Sämtliche Tabellennamen und auch die Spaltennamen sind in zwei Systemtabellen abgelegt.&lt;br /&gt;Tabellen in:  QSYS2.SYSTABLES&lt;br /&gt;Spalten in: QSYS2.SYSCOLUMNS&lt;br /&gt;&lt;br /&gt;Also zaubern wir einfach ein kleines SQL Statement:&lt;br /&gt;&lt;pre class="brush:sql"&gt;SELECT C.TABLE_SCHEMA, C.TABLE_NAME, t.TABLE_TEXT, &lt;br /&gt;       C.COLUMN_NAME, C.COLUMN_TEXT, C.DATA_TYPE &lt;br /&gt;FROM QSYS2.SYSCOLUMNS C &lt;br /&gt;JOIN QSYS2.SYSTABLES T ON C.TABLE_SCHEMA=T.TABLE_SCHEMA AND  &lt;br /&gt;     C.TABLE_NAME=T.TABLE_NAME &lt;br /&gt;WHERE t.table_type='P' &lt;br /&gt;      AND c.table_schema = upper(${Bibliothek}) &lt;br /&gt;      [and lower(c.DATA_TYPE) LIKE #{Datentyp}] &lt;br /&gt;      [and lower(c.TABLE_NAME) LIKE #{Tabelle}]&lt;br /&gt;      [and lower(T.TABLE_TEXT) LIKE #{Bez Tabelle}]&lt;br /&gt;      [and lower(C.COLUMN_NAME) LIKE #{Feld}]&lt;br /&gt;      [and lower(C.COLUMN_TEXT) LIKE #{Bez Feld}]&lt;br /&gt;fetch first 300 rows only&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;  &lt;span style="font-family:arial;"&gt;Einige Anmerkungen&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Bei LIKE Operatoren verwenden wir als Parameter nicht ${Parameter} sondern #{Parameter} dadurch wird am Ende des Strings automatisch ein '%' angefügt. Möchte man auch zu Beginn ein % haben gibt man einfach '*Suchbegriff' an.&lt;/li&gt;&lt;li&gt;Durch die Funktion upper() im Bibliotheksnamen ersparen wir uns das Problem mit Groß/Kleinschreibung. (Bibliotheksnamen auf der AS400 sind immer in Großbuchstaben).&lt;/li&gt;&lt;li&gt;Durch die eckigen Klammern sind bis auf den Bibliotheksnamen alles optionale Parameter.&lt;/li&gt;&lt;li&gt;Das 'fetch first 300 rows only' liefert lediglich 300 Datensätze egal wie groß das Resultset ist. Damit können wir das Ganze gefahrlos als HTML Tabelle bereitstellen.&lt;/li&gt;&lt;li&gt;Als Parameter habe ich TEXT verwendet. Theoretisch könnte man bspw. für Tabellen und Felder auch Parameter anlegen (Datenquelle s.o.)&lt;/li&gt;&lt;/ul&gt;Das ganze habe ich als HTML Tabelle konzipiert und somit kann man nun gemütlich nach den passenden Feldern bzw. Tabellen suchen.&lt;br /&gt;&lt;br /&gt;So sieht das dann aus:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_1H8eg7w78OU/TOP_uHktpXI/AAAAAAAAAC0/FVZhACgqfRA/s1600/qm_fields.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 272px;" src="http://3.bp.blogspot.com/_1H8eg7w78OU/TOP_uHktpXI/AAAAAAAAAC0/FVZhACgqfRA/s400/qm_fields.png" alt="" id="BLOGGER_PHOTO_ID_5540553134367942002" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796968729938659925-5716081893541381960?l=labs.scireum.de' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default/5716081893541381960'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default/5716081893541381960'/><link rel='alternate' type='text/html' href='http://labs.scireum.de/2010/11/mit-dem-query-module-die-richtgen.html' title='Mit dem Query Module die richtgen Tabellen und Felder auf einer i5 finden'/><author><name>Michael Haufler</name><uri>http://www.blogger.com/profile/06054356362482419437</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://2.bp.blogspot.com/_1H8eg7w78OU/TJeSe56lj_I/AAAAAAAAACQ/uyciDEp0sds/s1600-R/mha.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_1H8eg7w78OU/TOP_uHktpXI/AAAAAAAAAC0/FVZhACgqfRA/s72-c/qm_fields.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-3796968729938659925.post-2505198553881572197</id><published>2010-09-28T09:11:00.001+02:00</published><updated>2010-09-28T09:11:50.372+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CPS'/><category scheme='http://www.blogger.com/atom/ns#' term='Best Practice'/><title type='text'>CPS: Aufbau eines Testportals mit &gt; 1000 Katalogen in weniger als 2 Stunden</title><content type='html'>Die Aufgabe ist eigentlich relativ einfach: Ein Interessent aus der Dental-Branche hat über 1000 PDF-Dokumente (Sicherheitsdatenblätter) auf seiner Website fein säuberlich verlinkt. Ziel ist es nun, auf Basis dieser Daten ein Testportal aufzubauen.&lt;br /&gt;&lt;br /&gt;Die Lösung mit dem CPS ist genau so einfach. Nach dem Anlegen des Portals, haben wir unseren &lt;b&gt;"Autoloader"&lt;/b&gt; verwendet. Darüber kann man zum einen große Mengen von PDF-Dokumenten direkt per FTP einstellen. Zum anderen können wir auch direkt eine Website durchsuchen und alle gefundenen PDF-Dateien automatisch verarbeiten.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_0oufLrkZ4rI/TKGSo4Iv4eI/AAAAAAAAAAo/ydwXVlCupWY/s1600/autoloader.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="247" src="http://2.bp.blogspot.com/_0oufLrkZ4rI/TKGSo4Iv4eI/AAAAAAAAAAo/ydwXVlCupWY/s400/autoloader.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Nun werden vom System alle gefundenen Kataloge eingelesen und verarbeitet. Nach ungefähr zwei Stunden war das Portal fertig aufgebaut:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_0oufLrkZ4rI/TKGTeiuKD5I/AAAAAAAAAAs/LA6qbGliMyM/s1600/portal.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="202" src="http://2.bp.blogspot.com/_0oufLrkZ4rI/TKGTeiuKD5I/AAAAAAAAAAs/LA6qbGliMyM/s400/portal.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Diese Funktion ist nebenbei bemerkt auch nützlich, wenn Sie nur ein einzelnes PDF-Dokument einstellen möchten welches sich auf einer Website befindet. Durch Angabe der URL, also der "Adresse" des Dokuments wird dieses automatisch auf unseren Server geladen und kann von Ihnen verarbeitet werden. Dies ist oftmals schneller als ein erneutes Hochladen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796968729938659925-2505198553881572197?l=labs.scireum.de' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labs.scireum.de/feeds/2505198553881572197/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://labs.scireum.de/2010/09/cps-aufbau-eines-testportals-mit-1000.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default/2505198553881572197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default/2505198553881572197'/><link rel='alternate' type='text/html' href='http://labs.scireum.de/2010/09/cps-aufbau-eines-testportals-mit-1000.html' title='CPS: Aufbau eines Testportals mit &gt; 1000 Katalogen in weniger als 2 Stunden'/><author><name>Andreas Haufler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-3sPZxyMzrDA/AAAAAAAAAAI/AAAAAAAAAFM/109VZ3QeGSI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_0oufLrkZ4rI/TKGSo4Iv4eI/AAAAAAAAAAo/ydwXVlCupWY/s72-c/autoloader.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3796968729938659925.post-365094481317667464</id><published>2010-09-17T10:39:00.001+02:00</published><updated>2010-09-17T10:39:59.925+02:00</updated><title type='text'>Unsere Software in Zahlen</title><content type='html'>Da Google freundlichweise das Analyse-Tool "&lt;a href="http://code.google.com/intl/de-DE/webtoolkit/tools/codepro/doc/index.html"&gt;CodePro Analytix&lt;/a&gt;" nun kostenlos zum Download anbietet, haben wir gleich mal unsere Code-Basis damit auf den Kopf gestellt.&lt;br /&gt;&lt;br /&gt;Interessant sind für uns vor allem die "Mertics", also bestimmte Kennzahlen die aus dem Code berechnet werden. Statische Code-Analysen, die automatisch auf Fehler hinweisen, haben wir schon von Beginn an in unseren Build-Prozess fest eingebaut. Hierfür setzen wir einen &lt;a href="http://hudson-ci.org/"&gt;Hudson-Buildserver&lt;/a&gt; ein, der jede Nacht zahllose &lt;a href="http://www.junit.org/"&gt;Unittests&lt;/a&gt;, &lt;a href="http://cobertura.sourceforge.net/"&gt;Coverargereports&lt;/a&gt; und &lt;a href="http://findbugs.sourceforge.net/"&gt;Findbugs-Analysen&lt;/a&gt; durchführt. Ein gutes und stabiles Metics-Tool fehlte aber bisher noch. &lt;br /&gt;&lt;br /&gt;Nun jedoch zu den Zahlen. Die Liste zeigt den "Stammtisch-Klassiker" &lt;b&gt;Lines of Code&lt;/b&gt;. Die Anzahl von Code-Zeilen lässt zwar keine direkte Aussage über Umfang und Komplexität einer Software zu, gibt aber immerhin einen Anhaltspunkt in welchen Größenordnungen man sich bewegt. Für uns intern ist vor allem der zeitliche Verlauf interessant. So können wir stets abschätzen wann und an welchen Stellen unsere Software wächst, bzw. gewachsen ist. Über unser &lt;a href="http://subversion.tigris.org/"&gt;SVN-System&lt;/a&gt; können wir solche Analysen auch im Nachhinein durchführen.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Basissystem&lt;/b&gt;: 62.457 LOC&lt;/li&gt;&lt;li&gt;&lt;b&gt;QueryModule&lt;/b&gt;: +17.633 LOC = 80.090 LOC&lt;/li&gt;&lt;li&gt;&lt;b&gt;CatalogPortalSystem&lt;/b&gt;: +40.955 LOC = 103.412 LOC&lt;/li&gt;&lt;li&gt;&lt;b&gt;SellSite&lt;/b&gt;: +28.107 LOC = 90.564 LOC &lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #666666;"&gt;(JSPX-Code zum Erstellen des Frontends wird hier nicht berücksichtigt)&lt;/span&gt;&lt;/span&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/3796968729938659925-365094481317667464?l=labs.scireum.de' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labs.scireum.de/feeds/365094481317667464/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://labs.scireum.de/2010/09/unsere-software-in-zahlen.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default/365094481317667464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default/365094481317667464'/><link rel='alternate' type='text/html' href='http://labs.scireum.de/2010/09/unsere-software-in-zahlen.html' title='Unsere Software in Zahlen'/><author><name>Andreas Haufler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-3sPZxyMzrDA/AAAAAAAAAAI/AAAAAAAAAFM/109VZ3QeGSI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3796968729938659925.post-8432278410696540025</id><published>2010-09-16T11:32:00.011+02:00</published><updated>2010-09-16T15:26:59.305+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Best Practice'/><category scheme='http://www.blogger.com/atom/ns#' term='QueryModule'/><title type='text'>Query Module: Prüfen ob Rechnungsnummern lückenlos sind</title><content type='html'>Ein Kunde hat uns angesprochen, da er sicherstellen möchte, dass seine vergebenen Rechnungsnummern lückenlos aufsteigend (mathematisch: streng monoton aufsteigend) sind.&lt;br /&gt;&lt;br /&gt;Mit dem &lt;a href="http://www.scireum.de/qm"&gt;QueryModule &lt;/a&gt;ist so eine Prüfung natürlich kein Problem, es gibt jedoch mehrere Ansätze:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Der Ansatz des Informatikers &lt;/b&gt;&lt;br /&gt;Um zu prüfen ob die Rechnungsnummern zwischen X und Y lückenlos vergeben sind, addiert man einfach alle Rechnungsnummern auf und prüft ob dies der Summe aller Zahlen zwischen X und Y entspricht. (Dies reicht als Beweis aus, da die Datenbank selbst prüft, das keine Nummer doppelt vergeben wird).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Das folgende SQL berechnet die Summe:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: sql"&gt;SELECT SUM(rechnungsnummer) FROM rechnungen &lt;br /&gt;WHERE rechnungsnummer &amp;gt;= X AND rechnungsnummer &amp;lt;= Y &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Um die Summe der Zahlen zwischen X und Y aufzurechnen, bedient man sich der Gauss-Formel:&lt;br /&gt;$\sum_{n=X}^{Y} (n) = \left ( \frac{Y*(Y+1)}{2} \right ) - \left ( \frac{X*(X-1)}{2} \right )$&lt;br /&gt;&lt;br /&gt;Leider zeigt dieser Ansatz nicht an, welche Nummern genau fehlen (wo Lücken wären).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Der Ansatz des Pragmatigers&lt;/b&gt;&lt;br /&gt;Es ist zu prüfen, ob es für jede Nummer N (zwischen X und Y-1) auch eine Nummer X+1 gibt. Alle Lücken kann man somit mit einem "self-join" wie folgt ausgeben:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: sql"&gt;SELECT ro.rechnungsnummer + 1 FROM rechnungen ro&lt;br /&gt;WHERE ro.rechnungsnummer &amp;gt;= X &lt;br /&gt;AND ro.rechnungsnummer &amp;lt;= Y &lt;br /&gt;AND NOT EXISTS(&lt;br /&gt;    SELECT * FROM rechnungen ri &lt;br /&gt;    WHERE ri.rechnungsnummer = ro.rechnungsnummer-1&lt;br /&gt;) &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Mit der QueryModule-Option "Keine leeren eMails versenden" kann man sich so einen geplanten Task einrichten, der die Prüfung regelmäßig ausführt und nur dann eine eMail schickt, wenn eine Rechnungsnummer fehlt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796968729938659925-8432278410696540025?l=labs.scireum.de' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labs.scireum.de/feeds/8432278410696540025/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://labs.scireum.de/2010/09/query-module-prufen-ob-rechnungsnummern.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default/8432278410696540025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default/8432278410696540025'/><link rel='alternate' type='text/html' href='http://labs.scireum.de/2010/09/query-module-prufen-ob-rechnungsnummern.html' title='Query Module: Prüfen ob Rechnungsnummern lückenlos sind'/><author><name>Andreas Haufler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-3sPZxyMzrDA/AAAAAAAAAAI/AAAAAAAAAFM/109VZ3QeGSI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3796968729938659925.post-9037449007100742196</id><published>2010-09-15T17:50:00.002+02:00</published><updated>2010-09-15T20:35:34.078+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SellSite'/><title type='text'>Neuer Indizierungsalgorithmus</title><content type='html'>Die Produkte von scireum zeichnen sich durch eine exzellente Suchqualität und Suchperformance aus. Dafür bauen wir auch in SellSite pro Shop einen speziellen Suchindex auf. Hierbei müssen natürlich alle Artikel des Shops aus der Datenbank geladen und verarbeitet werden.&lt;br /&gt;&lt;br /&gt;Nun zu unserem Problem. Obwohl wir bereits einen optimierten Tiefendurchlauf (durch die Produktgruppen) implementiert haben, wurde der Java-Heap währen dem Indizieren größer und größer. Bei 50.000 Artikeln waren da schnell 1,5 GB Speicher verbraucht. Etwas Profiling mit Visual VM brachte die Erkenntnis: Die von uns verwendete JPA-Bibliothek EclipseLink von Oracle speichert alle Objekte die "Lazy" nachgeladen werden in einer "Unit of Work". Das bedeutet in unserem Fall: Die vollständigen Artikeldaten.&lt;br /&gt;&lt;br /&gt;Die Lösung brachte ein einfacher Trick: Jedes Produkt wird in einer eigenen "Unit of Work" vollständig vorbefüllt. Dadurch muss das "Lazy-Loading" von EclipseLink keine Daten nachladen und der Garbage-Collector kann die verarbeiteten Produktdaten sehr schnell wieder freigeben. Das Ergebnis: 50.000 Artikel verbrauchen weniger als 200 MB Heap. Zusätzlich läuft der Prozess nun 30% schneller, da der Heap weniger ausgelastet wird:&lt;br /&gt;&lt;br /&gt;Hier die Speicherauslastung mit dem ursprünglichen Algorithmus. Deutlich zu erkennen: Nach der Indizierung, wird die "Unit of Work" abgeschlossen und eine große Menge Speicher freigegeben: &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_0oufLrkZ4rI/TJDpQRnvXCI/AAAAAAAAAAM/YoU7i1YfFtg/s1600/old_index_heap.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="250" src="http://3.bp.blogspot.com/_0oufLrkZ4rI/TJDpQRnvXCI/AAAAAAAAAAM/YoU7i1YfFtg/s400/old_index_heap.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Der neue Algorithmus zeigt das übliche Sägezahnmuster einer "gesunden" VM:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_0oufLrkZ4rI/TJDpSR0wxGI/AAAAAAAAAAU/VP9-zynRbwI/s1600/new_index_heap.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="251" src="http://4.bp.blogspot.com/_0oufLrkZ4rI/TJDpSR0wxGI/AAAAAAAAAAU/VP9-zynRbwI/s400/new_index_heap.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Die 30% Performance-Gewinn sind auf den Garbage-Collector zurückzuführen. Dieser hatte beim ursprünglichen Ansatz einiges zu tun:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_0oufLrkZ4rI/TJDqEuuX4UI/AAAAAAAAAAc/ByZEuFlOGcA/s1600/old_index_cpu.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="249" src="http://4.bp.blogspot.com/_0oufLrkZ4rI/TJDqEuuX4UI/AAAAAAAAAAc/ByZEuFlOGcA/s400/old_index_cpu.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Mit dem neuen Algorithmus kann SellSite nun auch wesentlich größere Datenmengen performant und stabil verarbeiten. Die Suche selbst kann ja "von Haus aus" (sprich: CatalogPortalSystem) problemlos mehrere Millionen Artikel im Millisekundenbereich durchsuchen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796968729938659925-9037449007100742196?l=labs.scireum.de' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labs.scireum.de/feeds/9037449007100742196/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://labs.scireum.de/2010/09/neuer-indizierungsalgorithmus-java-und.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default/9037449007100742196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default/9037449007100742196'/><link rel='alternate' type='text/html' href='http://labs.scireum.de/2010/09/neuer-indizierungsalgorithmus-java-und.html' title='Neuer Indizierungsalgorithmus'/><author><name>Andreas Haufler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-3sPZxyMzrDA/AAAAAAAAAAI/AAAAAAAAAFM/109VZ3QeGSI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_0oufLrkZ4rI/TJDpQRnvXCI/AAAAAAAAAAM/YoU7i1YfFtg/s72-c/old_index_heap.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3796968729938659925.post-4136932430583065573</id><published>2010-09-15T17:30:00.001+02:00</published><updated>2010-09-15T17:31:23.823+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>Neue Version von VisualVM</title><content type='html'>Nach dem wir letztens unsere Entwicklungsplattform auf JDK 1.6.0u21 aktualisiert haben (um den G1-Garbage-Collector zu testen (&lt;a href="http://openjdk.java.net/projects/jdk7/features/#f230"&gt;http://openjdk.java.net/projects/jdk7/features/#f230&lt;/a&gt;) haben wir eine erfreuliche Entdeckung gemacht: Die neue Version von VisualVM (&lt;a href="http://download.oracle.com/javase/6/docs/technotes/tools/share/jvisualvm.html"&gt;http://download.oracle.com/javase/6/docs/technotes/tools/share/jvisualvm.html&lt;/a&gt;) hat nicht nur das Oracle-Branding verpasst bekommen, es kann sich jetzt auch mit lokal laufenden Prozessen verbinden (ohne Umweg über JMX). Dadurch läuft das Monitoring wesentlich flüssiger und angenehmer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3796968729938659925-4136932430583065573?l=labs.scireum.de' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://labs.scireum.de/feeds/4136932430583065573/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://labs.scireum.de/2010/09/neue-version-von-visualvm.html#comment-form' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default/4136932430583065573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3796968729938659925/posts/default/4136932430583065573'/><link rel='alternate' type='text/html' href='http://labs.scireum.de/2010/09/neue-version-von-visualvm.html' title='Neue Version von VisualVM'/><author><name>Andreas Haufler</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-3sPZxyMzrDA/AAAAAAAAAAI/AAAAAAAAAFM/109VZ3QeGSI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
