Daten|teiler
Kopieren als Kulturtechnik

Python in der PowerShell

14. November 2013 von Christian Imhorst

Die PowerShell ist bekanntlich eine mächtige Kommandozeile unter Windows und ideal um administrative Skripte zu schreiben. Bei größeren Projekten, bei denen die Programme auch noch auf verschiedenen Plattformen laufen sollen, ist aber eine Programmiersprache wie zum Beispiel Python die bessere Wahl. In anderen Kommandozeilen, wie der Bash unter Gnu/Linux, kann man Python-Skripte aufrufen, indem man einfach den Namen des Skripts in die Kommandozeile eingibt, oder den Befehl python davor schreibt, eventuell noch mit dem Pfad. Das geht in der PowerShell im Prinzip auch:

PS> python .\HalloWelt.py
Hallo Welt!

Dazu muss allerdings der Pfad zur Python-Installation in die Umgebungsvariable PATH eingetragen werden, die man entweder unter Systemsteuerung -> System -> Erweiterte Systemeinstellungen bzw. Windows-Taste + Pause und danach unter Umgebungsvariablen… ändert. Oder man führt den folgenden Befehl in der PowerShell aus:

$env:Path = $env:Path + ";C:\Program Files (x86)\Python27\"

Der Pfad zur Python-Installation kann auch anders sein, das hängt von der Installation ab. Wenn man den Pfad dauerhaft nur für den jeweiligen Benutzer in der PowerShell haben möchte und sich den Umweg über die Erweiterten Systemeinstellungen sparen will, kann man die Zeile in das PowerShell-Profil eintragen. Das Profil öffnet man innerhalb der PowerShell mit notepad $profile. Um sich auch noch das Tippen des Befehls python zu sparen und Python-Skripte direkt zu starten, kann man auch noch die Dateinamenerweiterung “.PY” an die Umgebungsvariable PATHEXT anhängen:

$env:PATHEXT += ";.PY"

Die Zeile kann ebenfalls in das PowerShell-Profil gepackt werden. Hat man das alles erledigt, kann man Python-Programme aus der PowerShell heraus genauso starten,

PS> .\HalloWelt.py
Hallo Welt!

wie eine ein VBSkript oder eine Batch-Datei.

PowerShell

Geschrieben in Powershell, Python, Windows | Kommentare deaktiviert

Neues von IronPython

8. Oktober 2013 von Christian Imhorst

Mein Artikel Nicht nur für Zombies: Einstieg in IronPython aus freiesMagazin Ausgabe 07/2012 ist mittlerweile ein gutes Jahr alt, und es hat sich seit dem bei IronPython ein bisschen was getan.

Am 07. September 2013 erschien Version 2.7.4 der Sprache, mit der man sich weiter an die in C geschriebene Referenz von Python, CPython, annähert. Wer die neue Version einmal ausprobieren möchte, findet einen Link zum Installer für Windows auf der Homepage — ironpython.net. Unter Linux oder MacOS X ist die Installation ein wenig aufwendiger, da IronPython den .Net-Klon Mono benötigt. Während unter Ubuntu ein

sudo apt-get install ironpython

reichen sollte, benötigt man unter Debian zuerst das Mono-Framework,

apt-get install mono-complete

das es für MacOS X als Installationspaket gibt. Anschließend lädt man bei beiden Betriebssystemen das aktuelle IronPython von GitHub herunter und installiert es unter Mono:

git clone https://github.com/IronLanguages/main.git IronLanguages
cd IronLanguages/
xbuild Solutions/IronPython.sln /p:Configuration=Release

Ich habe allerdings eine Fehlermeldung beim Importieren des OS-Moduls unter Mono bekommen, in der IronPython-Konsole war es

>>> import os
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named os

und beim Aufrufen eines Skripts mit ipyw.exe war es:

~/IronLanguages/bin/Release$ mono ipyw.exe ~/bin/ipyHelloWorlp.py
Traceback (most recent call last):
  File "/home/christian/IronLanguages/bin/Release/Lib/site.py", line 62, in <module>
ImportError: No module named osTraceback (most recent call last)

Da ich nicht der einzige bin, konnte ich den Fehler durch folgenden Eintarg in meiner ~/.bashrc beheben:

# IronPython on Mono:
export IRONPYTHONPATH=~/IronLanguages/External.LCA_RESTRICTED/Languages/IronPython/27/Lib:$IRONPYTHONPATH
alias ipy="mono ~/IronLanguages/bin/Release/ipy.exe"

Der Installationspfad von IronPython liegt in meinem Home-Verzeichnis unter ~/IronLanguages. Das ist vermutlich suboptimal, aber zum Testen geht es. Darunter habe ich noch einen Alias ipy auf den Aufruf mono ~/IronLanguages/bin/Release/ipy.exe gesetzt, um mir Tipparbeit zu sparen.

Im August diesen Jahres hat Scott Hanselman im The Hanselminuts Podcast mit Dino Viehland einen Gast, der mehrere Jahre bei Microsoft mit Python gearbeitet hat. Mit seinem Team entwickelte er die Python Tools for Visual Studio. Die Frage ist, warum sollte Microsoft etwas mit Python machen wollen? Weil man mit Python Django-Webseiten erstellen kann, die unter Azure gehostet werden können.

Geschrieben in Python | Kommentare deaktiviert

Das neue Yahoo!

8. September 2013 von Christian Imhorst

Ich habe es heute endlich geschafft, den spannenden, aber auch langen Artikel The Truth About Marissa Mayer: An Unauthorized Biography zu lesen. Der erste Teil des Artikels behandelt, wie man von einer Biografie erwarten kann, von Mayers Jugend irgendwo in der US-Provinz und ihre Aufnahme und Studienjahre in Stanford. Spannend wird es mit ihrem Einstieg bei Google, wo sie von einer Programmierin bis zu einer Chefposition für die Suchmaschine aufstieg.

Unter anderem war sie für das Design der Web-Oberfläche der Suchmaschine und anderen Google Produkten zuständig. Nachdem Larry Page anstelle von Eric Schmidt an die Spitze des Unternehmens wechselte, begann ihr “Abstieg” in die Google Maps-Abteilung. Als Verantwortliche für Google Maps geriet sie immer wieder in Streit mit für Google wichtigen Ingenieuren, wobei klar wurde, dass sich aufgrund der Auseinandersetzungen bei Google etwas ändern müsse. In dieser Situation wurde Mayer vom Yahoo-Vorstand 2012 an die Spitze des Konzerns geholt. Davor diskutierte der Vorstand von Yahoo, wie es mit der Firma weitergehen soll: Die eine Seite des Vorstandes wollte Yahoo zu einem Medien-Konzern umbauen, die andere sich wieder auf das besinnen, was Yahoo groß gemacht hat, die Entwicklung spannender Internet-Produkte. Ein Besuch beim Silicon Valley-Weisen Marc Andreessen bestätigte die Seite, die wieder ein cooles Technologie-Unternehmen werden wollte. Laut Andreessen produzieren “normale” Firmen Produkte wie Autos, Schuhe, Lebensversicherungen etc. Das Produkt von technologisch orientierten Firmen ist Innovation. Was immer sie heute verkaufen würden, in fünf Jahren sei es etwas völlig anderes. Wenn sie damit aufhören, Neuerungen einzuführen, würden sie sterben, so Andreessen. An der Spitze von Yahoo benötige man daher jemanden, der Innovationen den Weg bereiten und sie am laufenden Band produzieren kann, um mit Google, Facebook und Apple konkurrieren zu können. Anstatt also die Anzeigen-Technologie von Google und die Suchmaschine von Microsoft zu lizensieren und Medieninhalte von MSN.com anzubieten, um dabei eigene Entwicklungen aufzugeben, entschied sich der Yahoo-Vorstand dazu, wieder ein bedeutender Produzent von Internet-Technologien werden zu wollen und engagierte dafür Marissa Mayer. Seitdem verfolgt Mayer bei Yahoo verschiedene Strategien.

Mayer brachte die vermisste Führung zurück und es kehrte wieder soetwas wie Disziplin ein. Die Mitarbeiter erscheinen wieder pünktlich zur Arbeit und bleiben lang. Wobei fraglich ist, ob es so erstrebenswert ist, lange im Büro zu bleiben. Sie strich die Heimarbeitsplätze, vermutlich eher um auszusieben, wer ihren neuen Kurs mitgeht, und wer nicht. Wobei man fairerweise auch sagen muss, dass der Umbau Yahoos zu einem Medien-Unternehmen wahrscheinlich mehr Arbeitsplätze gekostet hätte. Nach den Plänen eines Befürworters des Umbaus hätte Yahoo mit etwa 11.000 Angestellten weniger auskommen können.

Statt Arbeitsplatzabbau im großen Stil holt Mayer junge, interessante und innovative Programmiere an Bord, indem sie kleine Startups aufkauft, das Startup schließt und die Programmierer anheuert. Sie weiß, dass zukünftige Internet-Technologien vorallem auf Smartphones funktionieren müssen. Hier war Yahoo schlecht aufgestellt, was verwundert. Bei einer Analyse, was Menschen mit ihrem Smartphone hauptsächlich machen, neben jemanden anzurufen, Kurznachrichten zu schreiben oder Kartendienste zu nutzen, stellt man fest, dass sie vorallem E-Mails abrufen, das Wetter abfragen, Boulevard-, Sport, und andere Nachrichten lesen, Aktienkurse prüfen, Fotos teilen und Sozialkontakte pflegen. Das sind alles wesentliche Geschäftsfelder von Yahoo im Internet. Bislang wurde es allerdings versäumt, sie für Smartphones und Tablets zu optimieren. Mayer begann mit der E-Mail-App, der mittlerweile viel gelobten Wetter-App und der Flickr-App. Trotzdem verließen talentierte Entwickler weiter Yahoo und wechselten zu Google, Amazon oder gründeten eigene Startups. Mit dem Tumblr-Deal konnte Mayer gleich zwei Fliegen mit einer Klappe schlagen: Sie holte neue, junge, talentierte Entwickler zu Yahoo, die besonders gut darin sind, Apps für Smartphones zu entwickeln, und konnte auf der anderen Seite mit den Tumblr-Nutzern die Kundschaft von Yahoo verjüngen und eine neue Zielgruppe dazu gewinnen.

Ohne Mayer wären Yahoo vermutlich nicht nur einige gute Software-Entwickler abhanden gekommen, die nicht ersetzt worden wären, auch die Website hat beständig Nutzer verloren. Mit dem Re-Design der Internet- und App-Angebote bleibt es spannend, wie es bei Yahoo weiter geht und welche künftigen Innovationen noch kommen werden.

Geschrieben in Allgemein | Kommentare deaktiviert

Datenpulen mit PowerShell: HTML-Dateien bearbeiten

12. August 2013 von Christian Imhorst

Daten aus einer HTML-Datei herauszupulen ist meistens sehr fehleranfällig und sollte immer nur Plan C sein. Die Funktion Get-MarkupTag von James Brundage macht es aber etwas leichter. Zu Get-MarkupTag gehört auch noch Get-Web, um den Quelltext der Seite herunterzuladen, bevor man ihn mit Get-MarkupTag parst. Da Get-Web ein relativ kurzes Skript ist, das hauptsächlich um das .NET-Objekt Net.Webclient gebaut wurde, kann man es sich auch leicht selber basteln. Das Skript Get-Web.ps1 von Brundage habe ich aber noch um folgende Zeilen ergänzt,

$webclient.Encoding = [System.Text.Encoding]::UTF8    # set UTF8 encoding
$webclient.UseDefaultCredentials = $true              # Default Credentials
$webclient.Proxy.Credentials = $webclient.Credentials # Proxy Credentials

damit die Umlaute von Websiten richtig dargestellt werden und damit sich das Skript mit den Anmeldeinformationen des gegenwärtig angemeldeten Benutzers authentifiziert, wenn der Server das verlangt.

Bei meiner Arbeit benutze ich Get-MarkupTag um Informationen wie Zählerstände, Tonerstatus, Fehlermeldungen etc. von Netzwerkdruckern auf deren eigenen HTML-Seiten auszulesen, und um Daten aus SharePoint-Seiten herauszufiltern. Was ich bislang noch nicht genutzt habe, ist die Möglichkeit, die HTML-Ausgabe eines Cmdlts nach XML zu parsen, da mir dafür noch kein Anwendungsfall untergekommen ist:

$text = Get-ChildItem | Select Name, LastWriteTime | ConvertTo-HTML | Out-String
Get-MarkupTag "tr" $text

Das sind aber alles Skripte, die ich hier schlecht als Beispiele zeigen kann, um Get-MarkupTag vorzustellen. Daher habe ich das kleine Cmdlet Get-Wetter geschrieben, das die aktuelle Wetterlage in der PowerShell anzeigt. Die Daten dafür bekommt es von der Website Wetter.de.

Den restlichen Eintrag lesen »

Geschrieben in Powershell | 3 Kommentare »

Bluetooth Dongel ANYCOM USB-200 in Fedora 19 aktivieren

26. Juli 2013 von Christian Imhorst

Ich habe noch meinen Bluetooth Dongel ANYCOM USB-200 und wollte ihn gleich einmal unter Fedora 19 an meinem Netbook ausprobieren, das nämlich sonst kein Bluetooth hat. Also habe ich den Dongel in den USB-Port gesteckt und es passiert — genau, nichts. Auch die Terminal-Befehle hcitool dev und lsusb gaben über den Dongel nichts preis. Eine kurze Internet-Suche ergab, dass in dem USB-Dongel der Broadcom-Chip BCM2046 steckt, der unter Gnu/Linux normal keine Probleme bereiten sollte. Der Befehl systemctl status bluetooth.service hat außerdem auch noch vor und nach dem Neustart des Bluetooth-Dienstes behauptet, dass Bluetooth an und aktiv sei, während die Bluetooth-Einstellungen von Gnome 3 kein Bluetooth-Gerät gefunden haben. Im Blog Linux und ich von Christoph habe ich dann zufällig gesehen, dass er den Bluetooth-Dienst vor dem Start noch mit der Option enable freigeschaltet hat:

systemctl enable bluetooth.service
systemctl start bluetooth.service

Also habe ich das auch probiert, man muss dazu Root sein, und anschließend den Dongel am USB-Port ab- und wieder angesteckt, damit er erneut vom System erkannt wird. Das der Tipp von Christoph geklappt hat, zeigt schon das kleine blaue Lämpchen am USB-Stick an. Aber auch die Befehle

hcitool dev
Devices:
	hci0	11:13:42:A8:67:42

und — mit gekürzter Ausgabe

lsusb
[...]
Bus 005 Device 009: ID 0a5c:4500 Broadcom Corp. BCM2046B1 USB 2.0 Hub (part of BCM2046 Bluetooth)
[...]
Bus 005 Device 010: ID 0a5c:2111 Broadcom Corp. ANYCOM Blue USB-UHE 200/250

zeigen sich jetzt endlich gesprächiger. Ich kann meine Androiden jetzt auch über Bluetooth verbinden, um Daten auszutauschen, oder um sie als Modem zu verbinden.

Geschrieben in Gnu/Linux | 1 Kommentar »

PowerShell: Finde n-te Position in einem String

24. Juli 2013 von Christian Imhorst

Telefonnummern werden häufig in den verschiedensten Formen erfasst. Es gibt sie einmal mit einem Schrägstrich nach der Vorwahl, oder mit einem Bindestrich. Außerdem wird der Bindestrich gerne genommen, um die Durchwahl von der restlichen Nummer zu trennen. Das Ergebnis sind dann häufig Telefonnummern, die in etwa so aussehen: “01234/5555-678″, oder “01234-5555-678″, oder “01234-5555678″. Um Ordnung zu schaffen, habe ich zuerst bei allen Rufnummern den zweiten Bindestrich entfernt und dann den Schrägstrich duch einen Bindestrich ersetzt. Vielleicht geht das auch noch einfacher, aber geholfen hat mir dabei die Funktion Get-NthIndexOf, die mit Hilfe einer RegEx anzeigt, an welcher Stelle ein Zeichen in einem String auftaucht, also erster, zweiter oder n-ter Stelle:

function Get-NthIndexOf($s,$c,$i){
    $r = ([regex]$c).Matches($s) | foreach {$_.Groups[0].Index}
    $i = $i-1
    return $r[$i]
}
 
 
$s = "0123-456-789"
$c = "-"
$i = 2
 
$index = Get-NthIndexOf $s $c $i
$s.Remove($index,1)

Geschrieben in Powershell, Windows | Kommentare deaktiviert

Fedora auf einem Samsung Netbook

14. Juli 2013 von Christian Imhorst

Da ich Fedora auf meinem Samsung Netbook N145 Plus installiert habe, brauche ich auch hier die Samsung-Tools von Linux On My Samsung (voria.org), damit die Hardware vollständig unterstützt wird. Für Ubuntu gibt es ein PPA, das man in das Paketsystem einbinden kann, unter Fedora muss man die Tools kompilieren.

Im ersten Schritt habe ich mit yum, dem Paketmanagement-System von Fedora, die Werkzeuge installiert, die ich zum Kompilieren brauche, und zusätzlich noch die Versionsverwaltung bzr (Bazaar), um den Quellcode herunterzuladen:

yum groupinstall "Development Tools"
yum install bzr

Nachdem ich mit dem Befehl bzr den Code heruntergeladen habe, bin ich in das Quellcode-Verzeichnis mit den Samsung-Tools gewechselt und habe sie mit den Befehlen make und make install installiert.

bzr branch lp:samsung-tools
cd samsung-tools/
make
make install

Geschrieben in Gnu/Linux | Kommentare deaktiviert

Mein Wechsel zu Fedora

13. Juli 2013 von Christian Imhorst

Canonical wird mit Ubuntu auch in nächster Zeit weiter einen Weg einschlagen, bei dem es darum geht, Geld mit der Gnu/Linux-Distribution zu verdienen. Geld verdienen zu wollen, ist für mich erstmal nichts Verwerfliches, mich stört allerdings, wie Canonical der Gewinnseite endlich näher kommen will: Mit Werbung — zum Beispiel für Amazon, obwohl es gute Gründe gibt, dort nichts zu kaufen, mit dem Music Store und Ubuntu One, mit Spy-Ware, mit Verletzung der Privatsphäre der Nutzer von Ubuntu, und mit proprietärer Software als Dreingabe zur Distribution. Dazu habe ich ähnlich wie Roman “ein bisschen das Gefühl, dass das Herzblut nicht mehr da ist, wo es mal war”. Aus diesen Gründen mag ich die Distribution nicht mehr nutzen und auch nicht mehr uneingeschränkt weiterempfehlen. Abgesehen davon beschäftige ich mich schon beruflich jeden Tag mit einem unfreien Betriebssystem, weshalb ich mich in meiner Freizeit lieber mit einem freien Betriebssystem auseinandersetzen möchte und nicht mit einem, das den unfreien immer ähnlicher werden will.
Den restlichen Eintrag lesen »

Geschrieben in Gnu/Linux | Kommentare deaktiviert

PowerShell: Umlaute ersetzen

10. Juli 2013 von Christian Imhorst

Es gibt einen kleinen Haken, wenn man mit Hilfe einer Hashtable Umlaute in der PowerShell ersetzen möchte — Hashtables sind standardmäßig case insensitive. Das heißt, die Groß- oder Kleinschreibung wird nicht beachtet und Buchstaben wie Ä und ä werden als derselbe Wert behandelt. Oder wie es die PowerShell sagt:

Doppelte Schlüssel "Ä" sind in Hashliteralen nicht zulässig.

Eine Lösung, wie sie bei Powergui.org vorgestellt wird, hilft also nicht weiter. Dazu benötigt man ein neues Hashtable-Objekt, das die nötige case sensitivity mitbringt:

function Replace-Umlaute ([string]$s) {
    $UmlautObject = New-Object PSObject | Add-Member -MemberType NoteProperty -Name Name -Value $s -PassThru
 
    # hash tables are by default case insensitive
    # we have to create a new hash table object for case sensitivity 
 
    $characterMap = New-Object system.collections.hashtable
    $characterMap= "ae"
    $characterMap= "oe"
    $characterMap= "ue"
    $characterMap= "ss"
    $characterMap= "Ae"
    $characterMap= "Ue"
    $characterMap= "Oe"
 
 
    foreach ($property  in 'Name') { 
        foreach ($key in $characterMap.Keys) {
            $UmlautObject.$property = $UmlautObject.$property -creplace $key,$characterMap[$key] 
        }
    }
 
    $UmlautObject
} # Replace-Umlaute 
 
$res = Replace-Umlaute "Übermaß"
$res.Name

Geschrieben in Powershell, Windows | Kommentare deaktiviert

Ein alter Androide? Ein neues Küchenradio!

26. Juni 2013 von Christian Imhorst

Es gibt vermutlich mehr als 17 tolle Dinge, die man mit einem alten Android-Smartphone noch machen kann, in der Hauptfunktion ersetzt mein alter Androide aber das Küchenradio. Wer selbst ein Internet-Radio mit einem SSH- oder einem anderen Server in seiner Küche haben möchte, benötigt ein altes Android-Handy, in meinem Fall ein gerootetes LG Optmus GT 540 mit Cyanogenmod 7.1, einen portablen Lautsprecher, zum Beispiel von Intenso, eine Universal Dockinstation, meine ist von System-S.com, und ein Dual USB-Ladegerät wie das von Hama. Dabei handelt es sich aber nur um Vorschläge. Am besten macht man sich selber auf die Suche nach Komponenten, die einem gefallen.

IMAG0516

IMAG0519

IMAG0523

Mit Klett zusammengesetzt ergeben die Bauteile mit TuneIn ein portables kleines Internet-Radio, das mit der App UKW-Radio, die bei Cynogenmod 7.1 dabei ist, sogar zum UKW-Empfänger wird. In Hannover empfange ich damit immerhin NDR 1. Mit Dropbear wird das Radio dann noch um einen SSH-Server ergänzt, mit der YouTube-App kann man Videos gucken und sich mit BeyondPod den neusten Podcast anhören. Zukünftig kann ich auch noch Torrents herunterladen, einen FTP-Server aufsetzen, Medien über DLNA streamen, den Computer fernbedienen und mal schauen, was sonst noch so geht.

Geschrieben in Android | Kommentare deaktiviert

« Previous Entries Next Entries »