<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>weitlandt.</title>
	<atom:link href="http://weitlandt.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://weitlandt.com</link>
	<description></description>
	<lastBuildDate>Thu, 06 May 2010 08:56:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Wir Djangonauten: CSV-Export nach Excel mit Umlauten</title>
		<link>http://weitlandt.com/theme/2010/05/wir-djangonauten-csv-export-nach-excel-mit-umlauten/</link>
		<comments>http://weitlandt.com/theme/2010/05/wir-djangonauten-csv-export-nach-excel-mit-umlauten/#comments</comments>
		<pubDate>Wed, 05 May 2010 20:19:05 +0000</pubDate>
		<dc:creator>ks</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[csv]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[excel]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://weitlandt.com/?p=567</guid>
		<description><![CDATA[Über das Web-Framework Django (djangoproject.com) ist alles wesentliche vielfach schon gesagt, wobei dieser Beitrag  hier ein paar wesentliche praktische Aspekte aus der Sicht eines Webworkers flüssig darstellt. Lesenswert!
Nun zum Problem und eigentlichen Thema dieses Artikels, nämlich der Export von Datenbanken bzw. Tabellen aus dem Django-Admin-Backend in ein CSV-verarbeitendes Programm, also Openoffice Calc oder eben Microsoft [...]]]></description>
			<content:encoded><![CDATA[<p>Über das Web-Framework Django (<a title="Django Project: Home" href="http://www.djangoproject.com" target="_blank">djangoproject.com</a>) ist alles wesentliche vielfach schon gesagt, wobei dieser Beitrag  <a title="Stefan Imhoff über Django" href="http://stefanimhoff.de/notiz/django-relaunch-von-kogakure-de/" target="_blank">hier</a> ein paar wesentliche praktische Aspekte aus der Sicht eines <em>Webworkers</em> flüssig darstellt. Lesenswert!</p>
<p>Nun zum Problem und eigentlichen <strong>Thema dieses Artikels</strong>, nämlich der Export von Datenbanken bzw. Tabellen aus dem Django-Admin-Backend in ein <strong>CSV</strong>-verarbeitendes Programm, also <strong>Openoffice Calc</strong> oder eben <strong>Microsoft Excel</strong>. Auf <em>djangosnippets.org</em> findet sich ein vernünftiger Ansatz von einem gewissen &#8220;<strong>Dek</strong>&#8220;, nur leider funktioniert er <strong>nicht mit Umlauten</strong>:  <a title="djangosnippets: generic csv export action" href="http://www.djangosnippets.org/snippets/1697/" target="_blank">http://www.djangosnippets.org/snippets/1697/</a></p>
<p>Ein Kollege,<strong> Anatoly Ivanov</strong> hat das Problem auch erkannt und präsentiert <a title="http://rocketscience.itteco.org/2009/12/18/django-dealing-with-unicode-in-csv/" href="http://rocketscience.itteco.org/2009/12/18/django-dealing-with-unicode-in-csv/" target="_blank">hier drei Codeschnipsel</a>: Sein Ansatz benutzt folgerichtig das Unicode-fähige Template-System, aber er schreibt auf eine Datei.</p>
<p>Im Code am Ende des Artikels habe ich die beiden Ansätze kombiniert und hinsichtlich der drei kritischen Punkte bereinigt:</p>
<ul>
<li>direktes Herunterladen und Speichern aus dem Django-Admin-Backend</li>
<li>Berücksichtung von Quotations und Textfeldern (mehrzeilig) aus der Datenbank</li>
<li>Ausgabeformat Excel-kompatibel (ISO-8859-1)</li>
</ul>
<p>So sieht eine Ausgabe beispielhaft aus:</p>

<div class="wp_syntax"><div class="code"><pre class="csv" style="font-family:monospace;">id;bundesland;name;statflag
1;Hamburg;Hamburg;0</pre></div></div>

<div id="attachment_589" class="wp-caption alignleft" style="width: 420px"><a href="http://weitlandt.com/media/files/django-csvexport.jpg"><img class="size-full wp-image-589" title="django-csvexport" src="http://weitlandt.com/media/files/django-csvexport.jpg" alt="Django Admin: CSV-Export mit Umlauten." width="410" height="202" /></a><p class="wp-caption-text">Django Admin: CSV-Export mit Umlauten.</p></div>
<p>Wem das | Zeichen als Ersatz für die Hochkomma nicht gefällt, oder der Stern (*) für ein Newline, kann dies selbst austauschen oder weiter ergänzen (replace_dc).</p>
<p>Sinn der .replace()-Funktion ist hier schlicht,  die CSV-Struktur nicht zu zerschießen, womit die ganze Datei ab der betreffenden Zeile unbrauchbar würde.</p>
<p>Hier der Code, mit Dank an Dek und Anatoly:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">### models.py (App-Verzeichnis)</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">from</span> testprojekt.<span style="color: black;">actions</span> <span style="color: #ff7700;font-weight:bold;">import</span> export_als_csv
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> Testmodell <span style="color: black;">&#40;</span>admin.<span style="color: black;">ModelAdmin</span><span style="color: black;">&#41;</span>:
  actions = <span style="color: black;">&#91;</span>export_als_csv<span style="color: black;">&#93;</span>
&nbsp;
...
&nbsp;
<span style="color: #808080; font-style: italic;">### actions.py (in der Projekt-Root)</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">csv</span>, <span style="color: #dc143c;">codecs</span>
<span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">core</span>.<span style="color: #dc143c;">exceptions</span> <span style="color: #ff7700;font-weight:bold;">import</span> PermissionDenied
<span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">http</span> <span style="color: #ff7700;font-weight:bold;">import</span> HttpResponse
<span style="color: #ff7700;font-weight:bold;">from</span> django.<span style="color: black;">template</span> <span style="color: #ff7700;font-weight:bold;">import</span> Context, Template
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> get_csv_from_dict_list<span style="color: black;">&#40;</span>field_list, data<span style="color: black;">&#41;</span>:
  csv_line = <span style="color: #483d8b;">&quot;;&quot;</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'{{ row.%s|addslashes }}'</span> <span style="color: #66cc66;">%</span> field <span style="color: #ff7700;font-weight:bold;">for</span> field <span style="color: #ff7700;font-weight:bold;">in</span> field_list<span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
  template = <span style="color: #483d8b;">&quot;{% for row in data %}&quot;</span> + csv_line + <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>{% endfor %}&quot;</span>
  <span style="color: #ff7700;font-weight:bold;">return</span> Template<span style="color: black;">&#40;</span>template<span style="color: black;">&#41;</span>.<span style="color: black;">render</span><span style="color: black;">&#40;</span>Context<span style="color: black;">&#40;</span><span style="color: black;">&#123;</span><span style="color: #483d8b;">&quot;data&quot;</span> : data<span style="color: black;">&#125;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> export_als_csv<span style="color: black;">&#40;</span>modeladmin, request, queryset<span style="color: black;">&#41;</span>:
  <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> request.<span style="color: #dc143c;">user</span>.<span style="color: black;">is_staff</span>:
    <span style="color: #ff7700;font-weight:bold;">raise</span> PermissionDenied
&nbsp;
  replace_dc = <span style="color: black;">&#123;</span> <span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\n</span>'</span> : <span style="color: #483d8b;">'* '</span>, <span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\r</span>'</span> : <span style="color: #483d8b;">''</span>, <span style="color: #483d8b;">';'</span> : <span style="color: #483d8b;">','</span>, <span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\&quot;</span>'</span> : <span style="color: #483d8b;">'|'</span>, <span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\'</span>'</span> : <span style="color: #483d8b;">'|'</span><span style="color: black;">&#125;</span>
  opts = modeladmin.<span style="color: black;">model</span>._meta
  response = HttpResponse<span style="color: black;">&#40;</span>mimetype=<span style="color: #483d8b;">'text/csv'</span><span style="color: black;">&#41;</span>
  response<span style="color: black;">&#91;</span><span style="color: #483d8b;">'Content-Disposition'</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">'attachment; filename=%s.csv'</span> <span style="color: #66cc66;">%</span> <span style="color: #008000;">unicode</span><span style="color: black;">&#40;</span>opts<span style="color: black;">&#41;</span>.<span style="color: black;">replace</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'.'</span>, <span style="color: #483d8b;">'_'</span><span style="color: black;">&#41;</span>
  w = <span style="color: #dc143c;">csv</span>.<span style="color: black;">writer</span><span style="color: black;">&#40;</span>response, delimiter=<span style="color: #483d8b;">';'</span><span style="color: black;">&#41;</span>
  field_names = <span style="color: black;">&#91;</span>field.<span style="color: black;">name</span> <span style="color: #ff7700;font-weight:bold;">for</span> field <span style="color: #ff7700;font-weight:bold;">in</span> opts.<span style="color: black;">fields</span><span style="color: black;">&#93;</span>
  w.<span style="color: black;">writerow</span><span style="color: black;">&#40;</span>field_names<span style="color: black;">&#41;</span>
  ax = <span style="color: black;">&#91;</span><span style="color: black;">&#93;</span>
  <span style="color: #ff7700;font-weight:bold;">for</span> obj <span style="color: #ff7700;font-weight:bold;">in</span> queryset:
    acc = <span style="color: black;">&#123;</span><span style="color: black;">&#125;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> field <span style="color: #ff7700;font-weight:bold;">in</span> field_names:
      uf = <span style="color: #008000;">unicode</span><span style="color: black;">&#40;</span><span style="color: #008000;">getattr</span><span style="color: black;">&#40;</span>obj, field<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
      <span style="color: #ff7700;font-weight:bold;">for</span> i, j <span style="color: #ff7700;font-weight:bold;">in</span> replace_dc.<span style="color: black;">iteritems</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
        uf = uf.<span style="color: black;">replace</span><span style="color: black;">&#40;</span>i,j<span style="color: black;">&#41;</span>
        acc<span style="color: black;">&#91;</span>field<span style="color: black;">&#93;</span> = uf
        ax.<span style="color: black;">append</span><span style="color: black;">&#40;</span>acc<span style="color: black;">&#41;</span>
  response.<span style="color: black;">write</span> <span style="color: black;">&#40;</span>get_csv_from_dict_list<span style="color: black;">&#40;</span>field_names, ax<span style="color: black;">&#41;</span>.<span style="color: black;">encode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;iso-8859-1&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
  <span style="color: #ff7700;font-weight:bold;">return</span> response
&nbsp;
export_als_csv.<span style="color: black;">short_description</span> = <span style="color: #483d8b;">&quot;Markierte Daten als Excel (CSV) speichern&quot;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://weitlandt.com/theme/2010/05/wir-djangonauten-csv-export-nach-excel-mit-umlauten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WWAN am Thinkpad X100(e) defekt? Eine mögliche Lösung.</title>
		<link>http://weitlandt.com/theme/2010/03/wwan-am-x100-thinkpad-geht-nicht-mehr-moegliche-losung/</link>
		<comments>http://weitlandt.com/theme/2010/03/wwan-am-x100-thinkpad-geht-nicht-mehr-moegliche-losung/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 22:54:03 +0000</pubDate>
		<dc:creator>ks</dc:creator>
				<category><![CDATA[howto]]></category>
		<category><![CDATA[lenovo]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[1.20a]]></category>
		<category><![CDATA[bios]]></category>
		<category><![CDATA[defekt]]></category>
		<category><![CDATA[gobi2000]]></category>
		<category><![CDATA[thinkpad]]></category>
		<category><![CDATA[umts]]></category>
		<category><![CDATA[wwan]]></category>
		<category><![CDATA[x100]]></category>
		<category><![CDATA[x100e]]></category>

		<guid isPermaLink="false">http://weitlandt.com/?p=539</guid>
		<description><![CDATA[Eine Reihe Thinkpad X100 bzw &#8220;X100e&#8221; &#8211; Besitzer der ersten Serie können nach einem BIOS-Update das WWAN (UMTS) Modem Gobi2000 nicht mehr aktivieren. Siehe u.a hier und in diversen deutschsprachigen Foren.
Es werden diverse &#8220;Tips&#8221; von kompletter Neuinstallation bis zum Support Call bei Lenovo und Austausch der Modemkarte gegeben; bei einigen Geräten scheint das Schrotflintenprinzip aber [...]]]></description>
			<content:encoded><![CDATA[<p>Eine Reihe <strong>Thinkpad X100</strong> bzw &#8220;X100e&#8221; &#8211; Besitzer der ersten Serie können nach einem BIOS-Update das WWAN (UMTS) Modem Gobi2000 nicht mehr aktivieren. Siehe u.a <a title="X100e WWAN problems.." href="http://forums.lenovo.com/t5/X-Series-ThinkPad-Laptops/X100e-BIOS-Problems-with-WWAN-Device-Gobi-2000/m-p/216724" target="_blank">hier</a> und in diversen deutschsprachigen Foren.</p>
<p>Es werden diverse &#8220;<strong>Tips</strong>&#8221; von kompletter Neuinstallation bis zum Support Call bei Lenovo und Austausch der Modemkarte gegeben; bei einigen Geräten scheint das Schrotflintenprinzip aber wohl funktioniert zu haben &#8211; man hat <strong>alles</strong> ausprobiert, und &#8220;irgendetwas&#8221; hat dann geholfen. Offenbar aber nicht immer.</p>
<p>Hier die <strong>Ausgangssituation</strong> und eine (mögliche) <strong>Lösung</strong> aus der Praxis <em>ohne Garantie</em>.</p>
<p>Nach einem <strong>BIOS-Update</strong> auf 1.20a (ECP: 1.16) war das WWAN-Modul nicht mehr sichtbar, weder in der Systemsteuerung noch in den Access Connections. Mit FN+F5 war zwar der (Soft)-Schalter sichtbar, hatte aber keine Funktion. Ich hatte im Rahmen eines Treiberupdates in Windows XP Professional die EXE-Datei benutzt,  <em><strong>6xuj05us.exe</strong></em>.</p>
<p>Einige Quellen, die sich auch auf die Lenovo-Hotline beziehen, nennen als &#8220;Trick&#8221; das Deaktivieren und erneute Aktivieren der WIMAX- und WWAN-Geräte im BIOS, was aber so keinen Erfolg zeigte. Ein BIOS-Downgrade auf 1.11 (eine weitere Empfehlung aus den diversen Foren) war auch nicht mehr möglich, weder von einer Boot-CD noch via Programm.</p>
<p><strong>Folgendes hat dann aber funktioniert: </strong></p>
<p>Erneuter Aufruf von <em><strong>6xuj05us.exe</strong></em> -&gt; <strong>UPDATE SYSTEM BIOS</strong> -&gt; logische und korrekte Meldung: &#8220;<em>Dieses BIOS haben wir schon, Update nicht notwendig</em>&#8220;.  Dann Punkt 2: <strong>UPDATE MODEL NUMBER</strong>. Angezeigt wird der vierstellige Typcode des Geräts, und die dreistellige ID. Bestätigen <strong>ohne</strong> die ID zu ändern.</p>
<p>Interessanterweise läuft dann doch der BIOS-Flash durch,die 32 Blocks werden geschrieben, danach Aufforderung zum Boot. <strong>Bestätigen</strong>.</p>
<p><strong>Jetzt</strong> im BIOS die WIMAX- WLAN und WWAN-Steuerung deaktivieren, speichern, und während das Gerät wieder neu startet hart abschalten. Ladegerät ggf. abziehen und <strong>10 Sekunden warten</strong>. Neustart, mit F1 ins BIOS, WLAN, WIMAX und WWAN wieder an.</p>
<p>Speichern und booten &#8211; das sollte es gewesen sein, unter der Voraussetzung, dass Powermanagement, der aktuelle Gobi2000-Treiber und die neusten Access Connections korrekt installiert sind. Einen Versuch ist es wert.</p>
<p>Viel Erfolg. <img src='http://weitlandt.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://weitlandt.com/theme/2010/03/wwan-am-x100-thinkpad-geht-nicht-mehr-moegliche-losung/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Redaxo 4.x aus Wordpress-Feeds speisen</title>
		<link>http://weitlandt.com/theme/2010/01/redaxo-rss-wordpress/</link>
		<comments>http://weitlandt.com/theme/2010/01/redaxo-rss-wordpress/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 14:01:48 +0000</pubDate>
		<dc:creator>ks</dc:creator>
				<category><![CDATA[howto]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Feed]]></category>
		<category><![CDATA[Redaxo]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://weitlandt.com/?p=474</guid>
		<description><![CDATA[Das CMS Redaxo in der Version 4.2.x reklamiert für sich, &#8220;Einfach, flexibel und Sinnvoll&#8221; zu sein. Dem kann ich so zustimmen &#8211; das System ist schlank und überschaubar, der Trainingsaufwand für die Administration im Backend bleibt deutlich unterhalb dem, was für größere und komplexere Systeme veranschlagt werden muss, benötigte Zusatzmodule sind schnell programmiert &#8211; all [...]]]></description>
			<content:encoded><![CDATA[<p>Das CMS <a title="Redaxo CMS" href="http://redaxo.de" target="_blank">Redaxo</a> in der Version 4.2.x reklamiert für sich, &#8220;<em><strong>Einfach, flexibel und Sinnvoll</strong></em>&#8221; zu sein. Dem kann ich so zustimmen &#8211; das System ist schlank und überschaubar, der Trainingsaufwand für die Administration im Backend bleibt deutlich unterhalb dem, was für größere und komplexere Systeme veranschlagt werden muss, benötigte Zusatzmodule sind schnell programmiert &#8211; all in all eine intelligente Alternative in Projekten bis vielleicht 1000&#8230;2000 Seiten Content.</p>
<h3>Die Aufgabenstellung</h3>
<p><a title="http://de.wikipedia.org/wiki/Feedreader" href="http://de.wikipedia.org/wiki/Feedreader" target="_blank">Feedreader</a>, die fremden Content einbetten gibt es für jedes CMS zuhauf, natürlich auch für <a title="Über Redaxo: Wikipedia" href="http://de.wikipedia.org/wiki/Redaxo" target="_blank">Redaxo</a> &#8211; hier am Beispiel eines <a title="http://forum.redaxo.de/sutra75576.html" href="http://forum.redaxo.de/sutra75576.html" target="_blank">importierten Google-Kalenderfeeds</a>.  Fast allen ist aber gemein, dass sie &#8211; zu Wahrung des <strong>Copyrights</strong> und des Anstands &#8211; die eingebetteten Artikel zurück auf die<strong> Quelle</strong> verlinken, d.h. ein Klick auf den jeweilgen Artikel öffnet in der Regel die Quellenseite, womit die ursprüngliche (Redaxo) Site verlassen wird.</p>
<p>Was ist aber, wenn die Feed-Quelle eine exklusiv eigene Site ist, die nur dazu dient, extern Content für Redaxo zu generieren?</p>
<h3>Das Modul: &#8220;Feed Hijack&#8221;</h3>
<p>Module in Redaxo bestehen aus einer &#8220;Eingabe&#8221; -  (optionale) Parameter, die mit übergeben werden,  und der &#8220;Ausgabe&#8221;, üblicherweise ein Stück PHP-Code, der das Content-Fragment ausgibt.<br />
Weitere Bibliotheken werden hier nicht benötigt; Feed Hijack läuft ohne externe Anhängigkeiten.</p>
<p>Das Modul steht aktuell auf der REDAXO-Addon-Seite zum <a title="http://www.redaxo.de/165-0-moduldetails.html?module_id=517" href="http://www.redaxo.de/165-0-moduldetails.html?module_id=517" target="_blank">download</a> bereit; die erste Version 1.0 als ZIP gibt es vorläufig hier:   <a href="http://weitlandt.com/media/files/feedhijack-1.0.zip">feedhijack-1.0</a></p>
<p>Bitte Copyrights und README -Hinweise beachten!</p>
]]></content:encoded>
			<wfw:commentRss>http://weitlandt.com/theme/2010/01/redaxo-rss-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>X100e unter Ubuntu</title>
		<link>http://weitlandt.com/theme/2010/01/x100e-unter-ubuntu-backtrack-lnux/</link>
		<comments>http://weitlandt.com/theme/2010/01/x100e-unter-ubuntu-backtrack-lnux/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 22:20:25 +0000</pubDate>
		<dc:creator>ks</dc:creator>
				<category><![CDATA[howto]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[BackTrack]]></category>
		<category><![CDATA[Realtek]]></category>
		<category><![CDATA[rtl8192se]]></category>
		<category><![CDATA[thinkpad]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[WLAN]]></category>
		<category><![CDATA[x100e]]></category>

		<guid isPermaLink="false">http://weitlandt.com/?p=426</guid>
		<description><![CDATA[WLAN
Wenn schon eine schnelle g/n 300 Mbit-Wirelesskarte eingebaut ist, könnte man diese vielleicht auch unter einer Linux-Installation nutzen? Eine kleine Testumgebung ist schnell aufgebaut, Plattform ist die Alphaversion von Ubuntu 10.04 in der AMD-64 Bit-Version. Wenn schon, denn schon 
Die WLAN-Karte kommt von Realtek &#8211; RTL8192SE (PCI) und wird in diesem Pre-Release (noch) nicht mit [...]]]></description>
			<content:encoded><![CDATA[<h3>WLAN</h3>
<p>Wenn schon eine schnelle <strong>g/n</strong> 300 Mbit-Wirelesskarte eingebaut ist, könnte man diese vielleicht auch unter einer Linux-Installation nutzen? Eine kleine Testumgebung ist schnell aufgebaut, Plattform ist die Alphaversion von Ubuntu 10.04 in der AMD-64 Bit-Version. Wenn schon, denn schon <img src='http://weitlandt.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /><br />
Die WLAN-Karte kommt von Realtek &#8211; <strong>RTL8192SE</strong> (PCI) und wird in diesem Pre-Release (noch) nicht mit bedacht. <strong>Realtek</strong> stellt allerdings den Treiber im Quellcode zur Verfügung, z.B. <a title="Realtek RTL8192SE" href="http://www.realtek.com.tw/downloads/downloadsView.aspx?Langid=1&amp;PNid=48&amp;PFid=48&amp;Level=5&amp;Conn=4&amp;DownTypeID=3&amp;GetDown=false&amp;Downloads=true#RTL8192SE" target="_blank">hier</a> (nur der SE-Typ ist richtig!), der ohne Probleme kompiliert und als Modul eingehängt werden kann.</p>
<p>Eine etwas umfassendere Diskussion der möglicherweise auftretenden Fehler und Patches gibt es <a title="https://bugs.launchpad.net/ubuntu/+source/linux/+bug/401126" href="https://bugs.launchpad.net/ubuntu/+source/linux/+bug/401126" target="_blank">hier</a> und <a title="https://bugs.launchpad.net/ubuntu/+source/linux/+bug/457872" href="https://bugs.launchpad.net/ubuntu/+source/linux/+bug/457872" target="_blank">hier</a>.</p>
<p>Szenario #2: Die bekannte Security-Suite <strong>BackTrack</strong> <strong>4</strong> läuft auf der Ubuntu 8.10 Plattform. Das Modul funktioniert auch hier in einem ersten Test offenbar richtig, die Karte läßt sich einwandfrei in den <strong>Monitor-Mode</strong> und zurück versetzen. Erfreulich!</p>
<p>Nicht ganz so erfreulich &#8211; aus einem Kommentar von Fabian Schmid:</p>
<div id="attachment_442" class="wp-caption alignright" style="width: 212px"><a href="http://weitlandt.com/media/files/bgboys.jpg"><img class="size-full wp-image-442" title="Zwei Junior Develeoper beim Evaluieren" src="http://weitlandt.com/media/files/bgboys.jpg" alt="" width="202" height="116" /></a><p class="wp-caption-text">Zwei Junior-Entwickler beim Evaluieren</p></div>
<h6>&#8220;Das letzte Problem, dass ich unter Ubuntu 10.04 noch habe ist, dass der  Soundchip nicht zwischen Klinkenausgang und Lautsprechern umschaltet,  wenn Kopfhörern eingesteckt sind. Bei mir hilft es auch nicht, am Ende  der /etc/modprobe.d/alsa-config die Zeile &#8220;options snd-hda-intel  model=&#8221;olpc-xo-1_5&#8243; anzufügen. Das integrierte Mikrofon funktioniert  leider auch nicht.&#8221;</h6>
<p>Aus meiner Sicht derzeit keine Lösung. (5.5.2010)</p>
]]></content:encoded>
			<wfw:commentRss>http://weitlandt.com/theme/2010/01/x100e-unter-ubuntu-backtrack-lnux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Erste Eindrücke vom Thinkpad X100e</title>
		<link>http://weitlandt.com/theme/2010/01/erste-eindrucke-vom-thinkpad-x100e/</link>
		<comments>http://weitlandt.com/theme/2010/01/erste-eindrucke-vom-thinkpad-x100e/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 02:49:12 +0000</pubDate>
		<dc:creator>ks</dc:creator>
				<category><![CDATA[hardware]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[FN+F5]]></category>
		<category><![CDATA[gobi]]></category>
		<category><![CDATA[lizenz]]></category>
		<category><![CDATA[qualcomm]]></category>
		<category><![CDATA[simyo]]></category>
		<category><![CDATA[tastatur]]></category>
		<category><![CDATA[thinklight]]></category>
		<category><![CDATA[thinkpad]]></category>
		<category><![CDATA[umts]]></category>
		<category><![CDATA[wwan]]></category>
		<category><![CDATA[x100e]]></category>

		<guid isPermaLink="false">http://weitlandt.com/?p=288</guid>
		<description><![CDATA[Heute morgen kam das brandneue Thinkpad X100e in der für DE aktuell einzig verfügbaren Konfiguration an, nämlich mit Windows 7 Professional (32 Bit), 2 GB RAM, 250 GB S-ATA-Festplatte, Bluetooth, einem aktuellem WLAN-Adapter von Realtec und Gobi2000-UMTS/WWAN (welcher in späteren Fassungen eventuell durch eine Huawei-Karte ersetzt wird).
Die Positionierung des Gerätchens ist klar: Höherwertiger als das [...]]]></description>
			<content:encoded><![CDATA[<p>Heute morgen kam das brandneue Thinkpad<strong> X100e</strong> in der für DE aktuell einzig verfügbaren Konfiguration an, nämlich mit <strong>Windows 7 Professional</strong> (32 Bit), 2 GB RAM, 250 GB S-ATA-Festplatte, Bluetooth, einem aktuellem WLAN-Adapter von Realtec und Gobi2000-UMTS/WWAN (welcher in späteren Fassungen eventuell durch eine Huawei-Karte ersetzt wird).</p>
<p>Die Positionierung des Gerätchens ist klar: Höherwertiger als das einfache <strong>IdeaPad</strong>-Netbook, aber aus Sicht der Thinkpad-Welt ganz klar <strong>Einsteigerklasse</strong>. Dennoch ist der Preis mit etwas über 500€ als durchaus attraktiv zu bezeichnen.</p>
<p>Erster Eindruck: Positiv. Die Tastatur ist wirklich ordentlich, das <em>look &amp; feel</em> stimmt auch. Aber wo sind denn die Status-LEDs für Festplatte, Bluetooth, WLAN und WWAN geblieben, die wir von den &#8216;richtigen&#8217; Thinkpads kennen? Diese hat man sich leider gespart, ebenso das <strong>ThinkLight</strong>. Einzig ein kleiner Indikator vorne ist für den Standby übriggeblieben. Schade eigentlich.</p>
<p>Das vorinstallierte Windows 7 wirkt etwas zäh. Ein Think-Tool generiert zügig 3 DVDs von der Recovery-Partition, warum also nicht die Platte (Seagate) formatieren und ein paar andere Betriebsysteme ausprobieren, z.B. das gute alte XP Professional?</p>
<p>Trotz anderslautender Info des Händlers ist keine XP-Recovery-CD dabei. Das bedeutet Handarbeit, denn wenn ein USB-Floppy-Laufwerk gerade nicht greifbar ist, muß zunächst eine Windows-CD mit integriertem Treiber angefertigt werden.</p>
<p>Dieser steht auf der Lenovo-Seite zum Download bereit (&#8220;<strong>AMD AHCI Compatible RAID Controller</strong>&#8221; floppy driver) und läßt sich mit <a title="http://www.nliteos.com/" href="http://www.nliteos.com/" target="_blank">nLite</a> problemlos in eine XP Professional 2002 SP2 CD integrieren. Sollte man sich eines Tages doch wieder für Windows 7 entscheiden, findet man den (winzigen) Lizenzaufkleber übrigens <strong>unter dem Akku</strong> &#8211; bitte nicht zornig den Lieferanten anrufen und Lizenzbetrug unterstellen <img src='http://weitlandt.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>So weit, so gut &#8211; XP läuft nach diversen Updates relativ flott, vorausgesetzt, die ganze lange Treibersammlung auf dem <a title="http://lenovo.com/de/de/index.html" href="http://lenovo.com/de/de/index.html" target="_blank">Lenovo-Portal</a> wird vollständig installiert. Dies ist zunächst natürlich Netzwerk/WLAN und Video, aber auch Sound, USB-Filter und Key-Features sind wichtig, da sonst die <strong>FN</strong>-Funktionstasten nicht erreichbar sind.</p>
<p>Für <strong>WWAN</strong> und <a title="Thinkpad Access Connections - Profilmanager für Verbindungen " href="http://www.heise.de/software/download/access_connections/49611" target="_blank">Access Connections</a> <em>on top</em> wird zusätzlich zwingend der Power-Manager <strong>und</strong> das Power-Interface benötigt, sonst können die Funk-Karten nicht via <strong>FN+F5</strong> an- bzw. ausgeschaltet werden, und ohne diese Funktion läuft Access Connections nicht richtig.</p>
<p>Logischerweise kann entweder mit &#8220;WiFi&#8221; <strong>oder</strong> &#8220;mobilem Breitband&#8221; verbunden werden; beides zusammen ist nicht aktivierbar. Bereit also für einen kleiner Test mit einer <a title="SIMYO UMTS Flat Prepaid im E+ Netz" href="http://simyo.de" target="_blank">SIMYO</a>-Prepaidkarte? Wir suchen den Slot für die SIMcard, der sich laut Installations-Faltblättchen unter dem abschraubbaren Bodendeckel befindet. Naja.</p>
<p>Auch da hätte man vielleicht 1€ mehr ausgeben können und eine etwas elegantere Lösung finden können. Aber immerhin, &#8220;E Plus&#8221; wird zwar nicht in der Liste der vorkonfigurierten Verbindungen angezeigt (hier dominieren wie üblich amerikanische Provider, &#8220;vodafone&#8221; und die niederländische E+ Mutter KPN) aber das richtige Standortprofil läßt sich schnell konfigurieren:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">Serviceprovidername: SIMYO
APN: internet.eplus.de
Benutzername: eplus
Authentifizierung: PAP
Kennwort: GPRS</pre></div></div>

<p>Access Connections aktiviert die Gobi-Karte, verlangt die PIN und wir sind <strong>&#8220;drin&#8221;</strong> !<br />
Das funktioniert also inzwischen sauber, hat man doch in der Vergangenheit öfters von Problemen mit der Qualcomm-Hardware auf Thinkpads gelesen.</p>
<p>Die kleine Kamera über dem &#8211; übrigens unerwartet angenehmen &#8211; Display ist gefühlt besser als die im Netbook S10e, heißt: Vor allem Lichtstärker, und weniger Verzerrungen des Gesichts <img src='http://weitlandt.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Fazit: Angenehmes Gerätchen zwischen dem IdeaPad und dem großen X200, mit kleinen Einschränkungen. Wie es sich bei ca. 3 Stunden Akkulaufzeit im Dauerbetrieb schlägt, werden wir beobachten, und evtl. berichten.</p>
<p><strong>Update</strong>: Eine Reihe von X100e-Benutzern kann nach einem BIOS-Update das WWAN/UMTS-Modem nicht mehr aktivieren. Lösungsansatz hier:</p>
<p>http://weitlandt.com/theme/2010/03/wwan-am-x100-thinkpad-geht-nicht-mehr-moegliche-losung/</p>
]]></content:encoded>
			<wfw:commentRss>http://weitlandt.com/theme/2010/01/erste-eindrucke-vom-thinkpad-x100e/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Die Crux mit dem NumLock und dem Ziffernblock</title>
		<link>http://weitlandt.com/theme/2010/01/die-crux-mit-dem-numlock-und-dem-ziffernblock/</link>
		<comments>http://weitlandt.com/theme/2010/01/die-crux-mit-dem-numlock-und-dem-ziffernblock/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 01:03:25 +0000</pubDate>
		<dc:creator>ks</dc:creator>
				<category><![CDATA[hardware]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[numlock]]></category>
		<category><![CDATA[r52]]></category>
		<category><![CDATA[steuerberatung]]></category>
		<category><![CDATA[t500]]></category>
		<category><![CDATA[tastatur]]></category>
		<category><![CDATA[thinkpad]]></category>
		<category><![CDATA[ziffernblock]]></category>

		<guid isPermaLink="false">http://weitlandt.com/?p=271</guid>
		<description><![CDATA[Leute, die von Berufs wegen viele Zahlen eingeben müssen &#8211; z.B.  im Umfeld von Steuerberatung oder Rechnungswesen Tätige &#8211; arbeiten auf einer Standard-104-Tasten-PC-Tastatur gerne mit dem Nummernblock rechts. Die traditionell als &#8220;NumLock&#8221; benannte Taste schaltet vom Cursor- in den Ziffernmodus und zurück.
Soweit, so gut. Aber was, wenn man ein Notebook einsetzen möchte, das nicht über [...]]]></description>
			<content:encoded><![CDATA[<p>Leute, die von Berufs wegen viele Zahlen eingeben müssen &#8211; z.B.  im Umfeld von <a title="Steuerkanzlei Rittmeier (Erlangen)" href="http://steuerkanzlei-rittmeier.de" target="_blank">Steuerberatung</a> oder Rechnungswesen Tätige &#8211; arbeiten auf einer Standard-104-Tasten-PC-Tastatur gerne mit dem Nummernblock rechts. Die traditionell als<strong><em> &#8220;NumLock&#8221;</em></strong> benannte Taste schaltet vom Cursor- in den Ziffernmodus und zurück.</p>
<p>Soweit, so gut. Aber was, wenn man ein Notebook einsetzen möchte, das nicht über diesen abgesetzen Ziffernblock verfügt? Man kauft sich einen separate <strong>Ziffernblock-Minitastatur</strong> (erhältlich  ab 8,&#8211; € mit USB-Anschluß  <a title="http://www.google.de/products?q=ziffernblock+tastatur&amp;oe=utf-8&amp;rls=org.mozilla:de:official&amp;client=firefox-a&amp;um=1&amp;ie=UTF-8&amp;ei=PFpSS5pAjMf-Bsf0xKUK&amp;sa=X&amp;oi=product_result_group&amp;ct=title&amp;resnum=3&amp;ved=0CCoQrQQwAg" href="http://www.google.de/products?q=ziffernblock+tastatur&amp;oe=utf-8&amp;rls=org.mozilla:de:official&amp;client=firefox-a&amp;um=1&amp;ie=UTF-8&amp;ei=PFpSS5pAjMf-Bsf0xKUK&amp;sa=X&amp;oi=product_result_group&amp;ct=title&amp;resnum=3&amp;ved=0CCoQrQQwAg" target="_blank">z.b. hier</a>) und glaubt, das Problem gelöst zu haben.</p>
<p>Unschöner Nebeneffekt: Der NumLock-Status der separaten Zifferntastatur ist an den Status der Notebook-Tastatur <strong>gekoppelt</strong>, mit dem Ergebnis, dass dort die Buchstabentasten im rechten Bereich (I O P JK L N M) ebenfalls mit Ziffern belegt sind. Also nur der halbe Nutzen, denn um sinnvoll Text einzugeben, muß man doch wieder umschalten.</p>
<p>Wie so oft zeigt sich auch hier, dass die Macher der legendären <strong><a title="http://de.wikipedia.org/wiki/ThinkPad" href="http://de.wikipedia.org/wiki/ThinkPad" target="_blank">IBM Thinkpads</a> </strong>einen Schritt weiter gedacht haben und dies auch noch aller Unkerei zum Trotz unter der neuen Flagge <a title="http://www.lenovo.com/de/de/index.html" href="http://www.lenovo.com/de/de/index.html" target="_blank"><strong>Lenovo</strong></a> fortsetzen.</p>
<p>Die <strong>Thinkpads</strong> der Serien <strong>R52</strong>, T60, T61 und das aktuelle <a title="http://www.thinkwiki.org/wiki/Category:T500" href="http://www.thinkwiki.org/wiki/Category:T500" target="_blank"><strong>T500</strong></a> haben im BIOS eine Option versteckt, mit der die beiden Tastaturen entkoppelt werden können: <em>INDEPENDENT NUMLOCK KEYBOARD</em> auf &#8220;An&#8221;.</p>
<p>Resultat: Text eingeben über die normale Notebooktastatur (NumLock aus), Ziffern eingeben über den separaten USB-Ziffernblock (NumLock an)</p>
<p>Keine zeitraubenden Hacks. Einfach nur das richtige Notebook.</p>
]]></content:encoded>
			<wfw:commentRss>http://weitlandt.com/theme/2010/01/die-crux-mit-dem-numlock-und-dem-ziffernblock/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dokumente einfach aus Sharepoint 2001 und 2003 extrahieren</title>
		<link>http://weitlandt.com/theme/2009/11/dokumente-aus-sharepoint-2001-und-2003-extrahieren/</link>
		<comments>http://weitlandt.com/theme/2009/11/dokumente-aus-sharepoint-2001-und-2003-extrahieren/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 15:35:00 +0000</pubDate>
		<dc:creator>ks</dc:creator>
				<category><![CDATA[howto]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[2003 Server]]></category>
		<category><![CDATA[Dokumente exportieren]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[sharepoint]]></category>
		<category><![CDATA[sps]]></category>
		<category><![CDATA[W2K Server]]></category>

		<guid isPermaLink="false">http://weitlandt.com/?p=140</guid>
		<description><![CDATA[Werkzeuge für die Microsoft Sharepoint Portal Server (SPS) gibt es viele: Ausgefeilte, durchdachte, professionelle usw. Für die einfache Aufgabe, einen Dokumentenbaum auszulesen, genügen Grundkenntnisse der Struktur und ein paar Zeilen Programmcode. Wir betrachten im folgenden die beiden ersten Versionen von Microsoft Sharepoint Server, also 2001 und 2003:
Exportieren mit einer einzigen Zeile Shellscript: Sharepoint Portal Server [...]]]></description>
			<content:encoded><![CDATA[<p>Werkzeuge für die <strong>Microsoft Sharepoint Portal Server</strong> (SPS) gibt es viele: Ausgefeilte, durchdachte, professionelle usw. Für die einfache Aufgabe, einen Dokumentenbaum auszulesen, genügen Grundkenntnisse der Struktur und ein paar Zeilen Programmcode. Wir betrachten im folgenden die beiden ersten Versionen von Microsoft Sharepoint Server, also 2001 und 2003:</p>
<h3>Exportieren mit einer einzigen Zeile Shellscript: Sharepoint Portal Server 2001</h3>
<p><span>Der SPS 2001 war für die <strong>Windows 2000 &#8211; Serverumgebung</strong> zugeschnitten; schon unter Windows 2003 Server läuft er nicht mehr. Microsoft hat aber neben HTTP und DAV einen Zugang per IFS (installable file system) vorgesehen, um lesenden Zugriff auf die Dokumentenstruktur eines Arbeitsbereichs zu erhalten. Das gleiche Verfahren wird übrigens auch noch von Exchange 2000 angewandt, sodaß man durch die &#8220;Hintertür&#8221; Zugriff auf die Dateistrukturen hat. </span><br />
<span>Mit diesem Shell-Kommando auf dem W2K-Server selbst (via cmd.exe) wird ein Laufwerksbuchstabe zugeordnet:<br />
</span></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">&nbsp;
subst M: \\.\backofficestorage</pre></div></div>

<p><span>Arbeitet man mit dem Windows-Explorer, müssen <em>versteckte Ordner und Dateien</em> angezeigt werden, sonst sieht man den Ordner <strong><em>WORKSPACES</em> </strong>nicht, der die eigentlichen Dateien enthält; der Arbeitsbereich  <strong><em>TESTDOCS</em> </strong>unter <strong>&#8220;Anwendungen&#8221;</strong> ist leer (Dokumentenverzeichnis grün markiert)<br />
</span></p>
<p><a href="http://weitlandt.com/media/files/explorer-sharepoint2001.jpg"><img class="alignright size-full wp-image-150" title="explorer-sharepoint2001" src="http://weitlandt.com/media/files/explorer-sharepoint2001.jpg" alt="explorer-sharepoint2001" width="284" height="188" /></a></p>
<p>Eine Zusammenfassung  zum IFS drive und dem Microsoft Web Storage System finden sich hier: <a title="Microsoft docs: IFS, Web storage system..." href="http://support.microsoft.com/kb/294312/en-us/" target="_blank">http://support.microsoft.com/kb/294312/en-us/</a></p>
<p>Der Artikel betont auch noch einmal, daß diese Methode zwar zum Extrahieren von Dokumenten geeignet ist, nicht aber zum Zurückschreiben, denn man wird aller Wahrscheinlichkeit nach die darunterliegende Autoren-/Rechtestruktur kompromittieren.</p>
<h3>Sharepoint Server 2003 alias Sharepoint 2: Dokumentenexport mit IronPython</h3>
<p>IronPython, Microsofts Python-Implementierung in der Version 2.6 bei codeplex ( <a title="IronPython" href="http://ironpython.codeplex.com/ ">http://ironpython.codeplex.com/ </a>) ermöglicht, Dotnet-Assemblies auf einfachste Weise einzuhängen, z.B. mit clr.AddReference(&#8216;Microsoft.SharePoint&#8217;)</p>
<p>Hier ist der Code, um eine einzelne Dokumentenbibliothek auszulesen und auf eine lokale Platte unter Beibehaltung der <em>timestamps</em> zu spiegeln:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># --------------------------------------------------------------------------------------</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Dokumentenimport von MS SharePoint.</span>
<span style="color: #808080; font-style: italic;"># Die originale Ordnerstruktur wird abgebildet; Zeitstempel der Dokumente bleibt erhalten.</span>
<span style="color: #808080; font-style: italic;"># Autor: weitlandt. Klaus Stein 29.10.09</span>
<span style="color: #808080; font-style: italic;">#</span>
<span style="color: #808080; font-style: italic;"># Umgebung: Ironpython 2.6+ (www.ironpython.com bzw. codeplex.com)</span>
<span style="color: #808080; font-style: italic;">#</span>
&nbsp;
SAVE_TO = <span style="color: #483d8b;">&quot;C:/SHP2&quot;</span>
SITEURL = <span style="color: #483d8b;">&quot;http://localhost&quot;</span>
DOCROOT = <span style="color: #483d8b;">&quot;Shared Documents&quot;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># -----------------------------</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>,<span style="color: #dc143c;">sys</span>,<span style="color: #dc143c;">stat</span>,<span style="color: #dc143c;">array</span>,io,clr
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">datetime</span> <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #66cc66;">*</span>
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">time</span> <span style="color: #ff7700;font-weight:bold;">import</span> mktime <span style="color: #ff7700;font-weight:bold;">as</span> mktime
&nbsp;
clr.<span style="color: black;">AddReference</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Microsoft.SharePoint'</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">from</span> Microsoft.<span style="color: black;">SharePoint</span> <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #66cc66;">*</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> storefile<span style="color: black;">&#40;</span>f,basedir,relpath<span style="color: black;">&#41;</span>:
  ptmp,ntmp = <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">split</span><span style="color: black;">&#40;</span>relpath<span style="color: black;">&#41;</span>
  <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">isdir</span><span style="color: black;">&#40;</span>basedir + ptmp<span style="color: black;">&#41;</span>:
    <span style="color: #dc143c;">os</span>.<span style="color: black;">mkdir</span><span style="color: black;">&#40;</span>basedir + ptmp<span style="color: black;">&#41;</span>
  a = f.<span style="color: black;">ModifiedBy</span>.<span style="color: black;">ToString</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
  d = f.<span style="color: black;">OpenBinary</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
  m = <span style="color: #dc143c;">datetime</span><span style="color: black;">&#40;</span>f.<span style="color: black;">TimeLastModified</span><span style="color: black;">&#41;</span>
  <span style="color: #ff7700;font-weight:bold;">print</span> f.<span style="color: black;">Name</span>+<span style="color: #483d8b;">&quot; (&quot;</span> + d.<span style="color: black;">Length</span>.<span style="color: black;">ToString</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>+<span style="color: #483d8b;">&quot;), Letzte Speicherung von &quot;</span>+a+<span style="color: #483d8b;">&quot;: &quot;</span>+m.<span style="color: black;">ToString</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
  fullpath = basedir + relpath
  b = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span>fullpath,mode=<span style="color: #483d8b;">&quot;w+b&quot;</span><span style="color: black;">&#41;</span>
  <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> d: <span style="color: #808080; font-style: italic;">#</span>
    b.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #008000;">chr</span><span style="color: black;">&#40;</span>i<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
  b.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
  ts = <span style="color: #008000;">int</span><span style="color: black;">&#40;</span>mktime<span style="color: black;">&#40;</span>m.<span style="color: black;">timetuple</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
  <span style="color: #dc143c;">os</span>.<span style="color: black;">utime</span><span style="color: black;">&#40;</span>fullpath,<span style="color: black;">&#40;</span>ts,ts<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># timestamp setzen</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># main()</span>
&nbsp;
tstart = <span style="color: #dc143c;">datetime</span>.<span style="color: black;">now</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">isdir</span><span style="color: black;">&#40;</span>SAVE_TO<span style="color: black;">&#41;</span>:
  <span style="color: #dc143c;">os</span>.<span style="color: black;">mkdir</span><span style="color: black;">&#40;</span>SAVE_TO<span style="color: black;">&#41;</span>
&nbsp;
S = SPSite<span style="color: black;">&#40;</span>SITEURL<span style="color: black;">&#41;</span>
W = S.<span style="color: black;">OpenWeb</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Importieren von: &quot;</span> + W.<span style="color: black;">Title</span> + <span style="color: #483d8b;">&quot; (&quot;</span> + W.<span style="color: black;">Url</span> + <span style="color: #483d8b;">&quot;)&quot;</span>
&nbsp;
R = W.<span style="color: black;">GetListsOfType</span><span style="color: black;">&#40;</span>SPBaseType.<span style="color: black;">DocumentLibrary</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span>DOCROOT<span style="color: black;">&#93;</span> <span style="color: #808080; font-style: italic;"># nur diesen Ordner</span>
skip = <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>DOCROOT<span style="color: black;">&#41;</span>
cnt = <span style="color: #ff4500;">0</span>
<span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> R.<span style="color: black;">Items</span>:
  relpath = i.<span style="color: black;">File</span>.<span style="color: black;">ToString</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span>skip:<span style="color: black;">&#93;</span> <span style="color: #808080; font-style: italic;"># Das Startverzeichnis abgeschneiden</span>
  storefile<span style="color: black;">&#40;</span>i.<span style="color: black;">File</span>,SAVE_TO,relpath<span style="color: black;">&#41;</span>
  cnt = cnt + <span style="color: #ff4500;">1</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>Fertig. Angelegt: &quot;</span> + cnt.<span style="color: black;">ToString</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot;, Zeit: &quot;</span> + <span style="color: #008000;">str</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">datetime</span>.<span style="color: black;">now</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> - tstart<span style="color: black;">&#41;</span>
W.<span style="color: black;">Dispose</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
S.<span style="color: black;">Dispose</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;"># ----</span></pre></div></div>

<p>&#8230;das ist alles! Für Erweiterungen bietet sich an, die Objekteigenschaften von &#8216;Items&#8217; einmal genauer anzusehen &#8211; da ist noch etliches nützliches dabei.</p>
]]></content:encoded>
			<wfw:commentRss>http://weitlandt.com/theme/2009/11/dokumente-aus-sharepoint-2001-und-2003-extrahieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Monitoring von Netware-Servern in Nagios mit NWNAGMON</title>
		<link>http://weitlandt.com/theme/2009/04/nwnagmon/</link>
		<comments>http://weitlandt.com/theme/2009/04/nwnagmon/#comments</comments>
		<pubDate>Sat, 18 Apr 2009 16:33:51 +0000</pubDate>
		<dc:creator>ks</dc:creator>
				<category><![CDATA[tools]]></category>
		<category><![CDATA[agent]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[nagios]]></category>
		<category><![CDATA[netware]]></category>
		<category><![CDATA[novell]]></category>

		<guid isPermaLink="false">http://s.weitlandt.com/?p=1</guid>
		<description><![CDATA[Für die letzten im Dienst stehenden Novell-Server bieten wir hier ein kleines natives NLM an, das ein paar Eckdaten an einen NAGIOS 3 &#8211; Host übermittelt.
NAGIOS, ein freies Monitoring-System, ist eine Überlegung wert, wenn man mehr als eine Handvoll Server betreut. Für Novell Netware existiert der Ansatz, mit MRTGEXT diverse Betriebsparameter auszulesen, der in unserem [...]]]></description>
			<content:encoded><![CDATA[<p>Für die letzten im Dienst stehenden <strong>Novell-Server</strong> bieten wir hier ein kleines <em>natives</em> <strong>NLM</strong> an, das ein paar Eckdaten an einen NAGIOS 3 &#8211; Host übermittelt.</p>
<p><strong>NAGIOS</strong>, ein freies Monitoring-System, ist eine Überlegung wert, wenn man mehr als eine Handvoll Server betreut. Für <strong>Novell Netware</strong> existiert der Ansatz, mit <strong>MRTGEXT</strong> diverse Betriebsparameter auszulesen, der in unserem Augen aber die Tücken der Plattform nicht vollständig berücksichtigt, und außerdem nicht ganz einfach aufzusetzen ist.</p>
<p>Wir haben &#8211; mit dem Hintergrund aus 10 Jahren NLM-Programmiererfahrung &#8211; einen einfachen Nagios-<strong>Agenten</strong> geschrieben, der auf <strong>Netware 5.0 bis 6.5</strong> läuft und die Untiefen des Servers direkt zum Nagios-Host kommuniziert:</p>
<ul>
<li>Tote Partitionen</li>
<li>Reboot (ein Netware-Server bootet nicht!)</li>
<li>Anzahl der ABENDS (verunglückte oder &#8220;Zombie&#8221;-Prozesse)</li>
<li>SYS: Volume vollgelaufen (der Server startet nicht mehr, wenn der freie Plattenplatz tatsächlich 0 oder nahe 0 MB ist)</li>
<li>Remirror gespiegelter Partitionen wird erkannt</li>
<li>Verdächtige CPU-Last &gt; 96% für länger als eine Minute</li>
</ul>
<p><strong>NWNAGMON</strong> läuft dauerhaft im Hintergrund, anstatt als CRON-Script starr zur vollen Stunde/Tag etc. aufgerufen zu werden. Warum? Zum einen kann der Agent schneller reagieren, wenn z.B. eine Partition ausfällt, wird der neue Status sofort signalisiert und nicht erst zum nächsten CRON-Event.</p>
<p>Zum anderen hat sich gezeigt, daß manchmal &#8211; wenn das System schon einmal kompromittiert ist &#8211; es schwierig oder sogar unmöglich ist, einen weiteren Prozeß zu starten. In diesem Fall verharrt der Server bei 99% CPU-Last und diversen ABENDS und läßt keinen erneuten CRON-Jobs zu, was dem Admin dann wenig Chancen läßt &#8211; außer dem internen Netware-Debugger bleibt dann nur noch die RESET-Taste.</p>
<p><a title="NWNAGMON.NLM" href="http://weitlandt.com/media/files/nwnagmon.nlm" target="_blank">Download hier</a>, Aufruf sollte weitgehend selbsterklärend sein. So sieht der Konsolenbildschirm aus:</p>
<p><a href="http://weitlandt.com/media/files/nwnagmon1.jpg"><img class="alignright size-full wp-image-28" title="nwnagmon1" src="http://weitlandt.com/media/files/nwnagmon1.jpg" alt="nwnagmon1" width="506" height="329" /></a></p>
<p>Das NLM ist mit <strong>15KB</strong> klein und sehr resourcenschonend. Verschlüsselung zum NAGIOS-Host hin wird unterstützt, allerdings nur XOR/Password (NSCA 3 Protokoll)</p>
<p>NWNAGMON generiert weiterhin eine Mini-HTML Seite  mit dem aktuellen Status (siehe <em>screenshot</em>)</p>
<p>Das Programm ist und bleibt kostenlos, eine kleine Spende via Paypal (5€) wird aber gerne <a href="http://weitlandt.com/nwnagmon-paypal" target="_self">entgegengenommen</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://weitlandt.com/theme/2009/04/nwnagmon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
