<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Python on zefanjas.de - Open Source &amp; Education</title>
    <link>https://zefanjas.de/tags/python/</link>
    <description>Recent content in Python on zefanjas.de - Open Source &amp; Education</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>de-DE</language>
    <lastBuildDate>Wed, 18 Dec 2013 11:00:22 +0000</lastBuildDate><atom:link href="https://zefanjas.de/tags/python/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Build a Robot #1 – Motoren ansteuern</title>
      <link>https://zefanjas.de/build-a-robot-1-motoren-ansteuern/</link>
      <pubDate>Wed, 18 Dec 2013 11:00:22 +0000</pubDate>
      
      <guid>https://zefanjas.de/build-a-robot-1-motoren-ansteuern/</guid>
      <description>&lt;p&gt;Wie ich in meinem [letzten Beitrag][1] erwähnte, möchte ich gern den Roboter mit dem Raspberry Pi steuern. Da man mit einem Pi Motoren nicht direkt ansteuern kann, benutze ich das L298N Chip als Motor Driver.  Nach folgendem Video habe ich alles zusammengesteckt bzw. alle fehlenden Kabel noch angelötet. Im Video wird nur ein Motor angeschlossen, aber die restlichen 4 GPIO Pins habe ich genutzt, um den zweiten Motor zu steuern.&lt;/p&gt;
&lt;p&gt;Ich habe das im Video verwendet Testskript für den zweiten Motor erweitert, um die Motoren zu testen.&lt;/p&gt;
&lt;pre class=&#34;brush:py&#34;&gt;import RPi.GPIO as gpio
import time

gpio.setmode(gpio.BOARD)
gpio.setup(7, gpio.OUT) 
gpio.setup(11, gpio.OUT) 
gpio.setup(13, gpio.OUT) 
gpio.setup(15, gpio.OUT) 
gpio.setup(12, gpio.OUT) 
gpio.setup(16, gpio.OUT) 
gpio.setup(18, gpio.OUT) 
gpio.setup(22, gpio.OUT)

gpio.output(7, True) 
gpio.output(11, True) 
#Enable B für den 2. Motor 
gpio.output(12, True) 
gpio.output(22, True) 

#Motor 1 
gpio.output(13, True) 
gpio.output(15, False) 
#Motor 2 
gpio.output(16, True) 
gpio.output(18, False) 
time.sleep(2) 

gpio.output(13, False) 
gpio.output(15, True) 
gpio.output(16, False) 
gpio.output(18, True) 
time.sleep(2) 

gpio.output(13, False) 
gpio.output(15, False) 
gpio.output(16, False) 
gpio.output(18, False)   

gpio.cleanup()
```

Mit diesem kleinen Testskript kann man den Roboter vor und zurück fahren lassen. Das mitgelieferte Batteriefach hat Platz für 3 AA Batterien. Diese liefern insgesamt zu wenig Spannung für die Motoren, sodass das Fahrzeug zwar fährt, aber nicht genügend Drehmoment (&amp;#8222;Kraft&amp;#8220;) hat. Ich werde ein neues besorgen, welches Platz für vier oder mehr AA Batterien hat.

Und hier noch ein Bild:&lt;figure id=&#34;attachment_1911&#34; aria-describedby=&#34;caption-attachment-1911&#34; style=&#34;width: 300px&#34; class=&#34;wp-caption aligncenter&#34;&gt;

[&lt;img loading=&#34;lazy&#34; decoding=&#34;async&#34; class=&#34;size-medium wp-image-1911&#34; alt=&#34;Der aktuelle Stand - Raspberry Pi mit L298N&#34; src=&#34;http://zefanjas.de/wp-content/uploads/2013/12/IMG_0787.geaendert-300x225.jpg&#34; width=&#34;300&#34; height=&#34;225&#34; srcset=&#34;https://zefanjas.de/wp-content/uploads/2013/12/IMG_0787.geaendert-300x225.jpg 300w, https://zefanjas.de/wp-content/uploads/2013/12/IMG_0787.geaendert.jpg 1024w&#34; sizes=&#34;(max-width: 300px) 100vw, 300px&#34; /&gt;][2]&lt;figcaption id=&#34;caption-attachment-1911&#34; class=&#34;wp-caption-text&#34;&gt;Der aktuelle Stand &amp;#8211; Raspberry Pi mit L298N&lt;/figcaption&gt;&lt;/figure&gt;

 [1]: http://zefanjas.de/2013/12/18/build-a-robot-0-ziele-und-material/
 [2]: http://zefanjas.de/wp-content/uploads/2013/12/IMG_0787.geaendert.jpg</description>
    </item>
    
    <item>
      <title>Zugriff auf das DOM mit Python in webkitgtk</title>
      <link>https://zefanjas.de/zugriff-auf-das-dom-mit-python-in-webkitgtk/</link>
      <pubDate>Sat, 06 Nov 2010 20:36:33 +0000</pubDate>
      
      <guid>https://zefanjas.de/zugriff-auf-das-dom-mit-python-in-webkitgtk/</guid>
      <description>&lt;p&gt;Während der Entwicklung von &lt;a href=&#34;http://zefanjas.de/2010/11/05/salez-your-ebay-listing-tool-betatester-gesucht/&#34;&gt;SaleZ&lt;/a&gt; stand ich vor dem Problem, dass ich Werte aus dem &lt;a href=&#34;http://de.wikipedia.org/wiki/Document_Object_Model&#34;&gt;Document Object Model (DOM)&lt;/a&gt; auslesen wollte. In Webkit gibt es zwar die Funktion &lt;strong&gt;get_dom_document&lt;/strong&gt;, allerdings ist sie noch nicht in der Version von Webkit enthalten, welche mit Ubuntu 10.04 mitgeliefert wird. Nach einiger Suche im Netz habe ich dann eine &lt;a href=&#34;http://code.google.com/p/pywebkitgtk/issues/detail?id=4#c5&#34;&gt;Lösung&lt;/a&gt; für das Problem gefunden.&lt;/p&gt;
&lt;p&gt;Mit Hilfe des folgenden Codes kann man sich den Inhalt eines bestimmten Elements ausgeben:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;import jswebkit

ctx = jswebkit.JSContext(webView.get_main_frame().get_global_context())
text = ctx.EvaluateScript(&amp;#34;document.getElementById(&amp;#34;fooBar&amp;#34;).innerHTML&amp;#34;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Möchte man hingegen das DOM manipulieren, kann man die  &lt;strong&gt;execute_script&lt;/strong&gt; Funktion eines WebViews nutzen:&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;webView.execute_script(&amp;#39;document.getElementById(&amp;#34;foobar&amp;#34;).innerHTML = &amp;#34;foo bar&amp;#34;&amp;#39;)
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    
    <item>
      <title>SaleZ – your eBay Listing Tool: Betatester gesucht</title>
      <link>https://zefanjas.de/salez-your-ebay-listing-tool-betatester-gesucht/</link>
      <pubDate>Fri, 05 Nov 2010 15:30:58 +0000</pubDate>
      
      <guid>https://zefanjas.de/salez-your-ebay-listing-tool-betatester-gesucht/</guid>
      <description>&lt;p&gt;Ein neues Projekt ist geboren: &lt;a href=&#34;https://launchpad.net/salez&#34;&gt;SaleZ&lt;/a&gt;. Es handelt sich hierbei um ein Verkaufstool für eBay, welches sich derzeit aber noch im Alpha Status befindet (deshalb kann ich auch keine Haftung für irgendwelche entstehenden Schäden übernehmen – klar) . Vor einigen Monaten habe ich angefangen ein wenig mit &lt;a href=&#34;https://wiki.ubuntu.com/Quickly&#34;&gt;Quickly&lt;/a&gt; zu experimentieren (ich &lt;a href=&#34;http://zefanjas.de/2010/10/30/quickly-widgets-dictionarygrid/&#34;&gt;berichtete&lt;/a&gt;) und herausgekommen ist jetzt &lt;strong&gt;SaleZ&lt;/strong&gt;.&lt;/p&gt;
&lt;p style=&#34;text-align: center;&#34;&gt;
  &lt;a href=&#34;http://zefanjas.de/wp-content/uploads/2010/11/screenshot_003.png&#34;&gt;&lt;/a&gt;&lt;a href=&#34;http://zefanjas.de/wp-content/uploads/2010/11/screenshot_003.png&#34;&gt;&lt;img loading=&#34;lazy&#34; decoding=&#34;async&#34; class=&#34;aligncenter size-full wp-image-1044&#34; title=&#34;SaleZ - your eBay Listing Tool&#34; src=&#34;http://zefanjas.de/wp-content/uploads/2010/11/screenshot_003.png&#34; alt=&#34;SaleZ - your eBay Listing Tool&#34; width=&#34;481&#34; height=&#34;342&#34; srcset=&#34;https://zefanjas.de/wp-content/uploads/2010/11/screenshot_003.png 1002w, https://zefanjas.de/wp-content/uploads/2010/11/screenshot_003-300x213.png 300w&#34; sizes=&#34;(max-width: 481px) 100vw, 481px&#34; /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p style=&#34;text-align: left;&#34;&gt;
  Folgende Features sind enthalten:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Artikel können als SofortKaufen oder Auktion eingestellt werden&lt;/li&gt;
&lt;li&gt;WYSIWYG Editor für Auktionsbeschreibung&lt;/li&gt;
&lt;li&gt;Unterstützung für Auktionstemplates (näheres schreibe ich später dazu)&lt;/li&gt;
&lt;li&gt;übersichtliches UI&lt;/li&gt;
&lt;li&gt;bis zu 10 Bilder können kostenlos eingebunden werden&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Um SaleZ zu testen, muss zunächst das PPA hinzugefügt und danach SaleZ installiert werden:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo add-apt-repository ppa:salez/salez-ppa
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install salez
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ich hab SaleZ nur unter Ubuntu Lucid (10.04) getestet; das Paket für Ubuntu 10.10 ist das gleiche, es sollte aber auch unter 10.10 laufen. Bugs können auf &lt;a href=&#34;https://bugs.launchpad.net/salez&#34;&gt;Launchpad&lt;/a&gt; gemeldet werden oder hier in den Kommentaren (für die, die keinen Launchpad Account haben).&lt;/p&gt;
&lt;p&gt;In diesem Sinn viel Spaß beim Testen!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>quickly-widgets: DictionaryGrid</title>
      <link>https://zefanjas.de/quickly-widgets-dictionarygrid/</link>
      <pubDate>Sat, 30 Oct 2010 07:57:42 +0000</pubDate>
      
      <guid>https://zefanjas.de/quickly-widgets-dictionarygrid/</guid>
      <description>&lt;p&gt;Seit einiger Zeit gibt es ein Tool zum Erstellen von Anwendungen für Ubuntu welches sich &lt;a href=&#34;https://wiki.ubuntu.com/Quickly&#34;&gt;Quickly&lt;/a&gt; nennt. Quickly nimmt einem eine ganze Menge an Arbeit ab, sodass man mehr Zeit hat sich um die eigentliche Anwendung zu kümmern. Vor ca. einem halben Jahr bin ich durch einen &lt;a href=&#34;http://my.opera.com/freedo/blog/2010/05/24/mal-schnell-was-programmieren&#34;&gt;Blogpost&lt;/a&gt; im ubuntuusers Planeten darauf aufmerksam geworden und hab seit dem immer wieder mal ein wenig damit rumgespielt. Eine praktische Erweiterung für Quickly sind die &lt;a href=&#34;https://launchpad.net/quidgets&#34;&gt;Quickly Widgets&lt;/a&gt; (ehemals Quidgets).&lt;/p&gt;
&lt;p&gt;Installieren lässt es sich mit&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-get install quickly-widgets
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Heute möchte ich das DictionaryGrid vorstellen. Wer sich schon einmal mit einem Gtk.Treeview beschäftigt hat, weiß, dass dieser sehr flexibel ist und man viele Dinge darin abbilden kann. Doch diese Vielfalt führt auch zu einer gewissen Komplexität, sodass man für eine einfache Tabelle einige Zeilen an Code schreiben muss (Columns, CellRenders, …). An dieser Stelle setzt DictionaryGrid an. Wie der Name schon vermuten lässt, braucht man nur noch eine Liste von Dictionaries und kann aus dieser, mit ein paar wenigen Zeilen Code, eine Tabelle erzeugen.&lt;/p&gt;
&lt;p&gt;Beispiel:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;from quickly.widgets.dictionary_grid import DictionaryGrid
#unsere Dictionaries
dicts = [{&amp;quot;ID&amp;quot;: 0, &amp;quot;key2&amp;quot;: 5, &amp;quot;tags&amp;quot;: &amp;quot;aaa bbb ccc&amp;quot;},
      {&amp;quot;ID&amp;quot;: 1, &amp;quot;key2&amp;quot;: 6, &amp;quot;tags&amp;quot;: &amp;quot;bbb ccc ddd&amp;quot;},
      {&amp;quot;ID&amp;quot;: 2, &amp;quot;key2&amp;quot;: 7, &amp;quot;tags&amp;quot;: &amp;quot;ccc ddd eee&amp;quot;},
      {&amp;quot;ID&amp;quot;: 3, &amp;quot;key2&amp;quot;: 8, &amp;quot;tags&amp;quot;: &amp;quot;ddd eee fff&amp;quot;},
      {&amp;quot;ID&amp;quot;: 4, &amp;quot;key2&amp;quot;: 9, &amp;quot;tags&amp;quot;: &amp;quot;eee fff ggg&amp;quot;}]
grid = DictionaryGrid(dicts)
grid.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Und so sieht das ganze dann aus:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://zefanjas.de/wp-content/uploads/2010/10/screenshot_001.png&#34;&gt;&lt;img loading=&#34;lazy&#34; decoding=&#34;async&#34; class=&#34;alignnone size-full wp-image-1033&#34; title=&#34;DictionaryGrid&#34; src=&#34;http://zefanjas.de/wp-content/uploads/2010/10/screenshot_001.png&#34; alt=&#34;&#34; width=&#34;153&#34; height=&#34;172&#34; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In DictionaryGrid kann man noch mehr Paramter angeben, so z.B. in welcher Reihenfolge die Spalten erscheinen sollen. Dazu legt man eine List von keys an, welche die Reihenfolge repräsentieren.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;keys=[&amp;quot;tags&amp;quot;, &amp;quot;ID&amp;quot;]
grid = DictionaryGrid(dicts, keys=keys)
grid.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Und hier wieder der Screenshot:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://zefanjas.de/wp-content/uploads/2010/10/screenshot_002.png&#34;&gt;&lt;img loading=&#34;lazy&#34; decoding=&#34;async&#34; class=&#34;alignnone size-full wp-image-1034&#34; title=&#34;DictGrid2&#34; src=&#34;http://zefanjas.de/wp-content/uploads/2010/10/screenshot_002.png&#34; alt=&#34;&#34; width=&#34;111&#34; height=&#34;172&#34; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Wie man sieht kann man nicht nur die Reihenfolge der Spalten anhand der keys bestimmen, sondern auch welche Spalten angezeigt werden sollen oder nicht. Neben DictionaryGrid gibt es noch weitere interessante Widgets in quickly-widgets zu entdecken.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
