Daten|teiler
Kopieren als Kulturtechnik

PowerShell-Skript mit Doppelklick ausführen

3. Juni 2011 von Christian Imhorst

Wenn man im Windows-Explorer auf ein PowerShell-Skript doppelklickt, wird nicht das Skript ausgeführt, so wie man es von Batch-Dateien oder dem Windows Script Host (WSH) gewohnt ist, stattdessen öffnet sich Notepad und zeigt den Inhalt der Textdatei an. Um ein Skript mit einem Doppelklick auszuführen, ist etwas mehr Aufwand nötig.

Zum Testen kann man ganz gut folgendes Skript nehmen, das quasi ein erweitertes „Hallo Welt“-Skript darstellt. Das letzte Read-Host am Ende des Skripts dient dazu, dass das Konsolen-Fenster noch bis zum nächsten Tastendruck geöffnet bleibt und sich nicht gleich wieder schließt:

# HalloWelt.ps1
set-psdebug -strict
 
[string]$Name = Read-Host "Wie heißt Du? "
Write-Host "Hallo $Name!"
Read-Host

Das Skript kann man nun in seinen favorisierten Skript-Ordner speichern und eine Verknüpfung auf den Desktop erstellen. Danach muss man noch die Eigenschaften der Verknüpfung bearbeiten und folgendes eintragen:

powershell.exe -Command "& 'C:\Users\Christian\HalloWelt.ps1'"

Anstelle von C:\Users\Christian\ muss man natürlich den eigenen Pfad zum Skript wählen. Wichtig ist hier das kaufmännische Und (&-Zeichen), da die PowerShell den Pfad in den Anführungszeichen ansonsten als String interpretiert. Anstelle des &-Zeichens kann man auch einen Punkt (.) nehmen:

powershell.exe -Command ". 'C:\Users\Christian\HalloWelt.ps1'"

Ob man das kaufmännische Und wählt, oder den Punkt für das sogenannte dot sourcing, hängt davon ab, welchen Sichtbarkeitsbereich (Scope) die Variablen des Skripts haben sollen. Da der Sichtbarkeitsbereich aber beim direkten Start eines Skripts keine Bedeutung hat, ist es an dieser Stelle nicht wichtig, welcher der beiden Befehle eingesetzt wird. Der Scope spielt allerdings eine wichtige Rolle, wenn man ein Skript direkt aus der Konsole oder aus einem anderen Skript heraus startet.

Anschließend kann man das Skript mit einem Doppelklick auf den Link ausführen. Wenn man das Konsolen-Fenster vor dem nutzer verstecken möchte, kann man die Option -WindowStyle Hidden noch vor -Command einfügen.
Die Parameter im einzelnen findet man bei Microsofts TechNet.

Anstelle des Parameters -command kann man auch -noexit verwenden. Der Vorteil ist, dass die Konsole nach dem Ausführen des Skripts geöffnet bleibt:

powershell.exe -noexit &'C:\Users\Christian\HalloWelt.ps1'

Interessant wird die Geschichte, wenn man mit dieser Methode nicht nur ein einzelnes Skript aufruft, sondern stattdessen die PowerShell schon mit einem Befehl aus dem Ausführen-Dialog heraus startet.

Geschrieben in Powershell, Windows | Kommentare deaktiviert für PowerShell-Skript mit Doppelklick ausführen

Wie man die PowerShell mit Aliase personalisiert

26. Mai 2011 von Christian Imhorst

Die PowerShell ist nicht nur Microsofts Alternative zur cmd.exe und zum Windows Script Host, sie ist besonders inspiriert von Unix-Shells wie der Bash, von Perl, PHP, Python und C#. Mit ihr macht es jetzt auch unter Windows Spaß, zu skripten, was in der cmd.exe mit Batch-Programmen nur sehr rudimentär möglich war. Mit dem Windows Script Host kann man zwar mittels VBScript und CScript Programme für die Konsole schreiben, er ersetzt aber einfach kein richtiges Terminal mit Skriptsprache und Befehlen zum Ausführen.

An den Umstieg muss ich mich trotzdem erstmal gewöhnen. Damit die Lernkurve nicht ganz so steil wird, habe ich damit angefangen, die PowerShell mit Aliase zu personalisieren. Wenn man schon mal etwas mehr mit einer modernen Shell wie der Bash zu tun hatte, weiß man die Möglichkeit zu schätzen, häufig benutzte Befehle mit einem Alias abzukürzen. Die PowerShell bringt von Haus aus schon Aliase mit, z.B. cd für Set-Location oder dir für Get-ChildItem. Um einen Alias in der PowerShell zu erstellen, benutzt man den Befehl Set-Alias:

PS C:\> Set-Alias np notepad
PS C:\> np

Der Befehl Set-Alias np notepad setzt das Alias np um den Editor Notepad aufzurufen. Nur wer benutzt schon gerne Notepad als Editor, wenn es so gute Alternativen wie Notepad++ gibt. Zum Einrichten dieses Aliases sollte man allerdings eine Umgebungsvariable für den Programmpfad verwenden. Eventuell benötigt man auch eine Funktion, um ein Alias für ein Programm oder ein CmdLet zu erstellen, da man sich ansonsten mit Fehlermeldungen herum ärgern darf:

PS C:\> function fnp++{
>> Set-Location $env:ProgramFiles\notepad++
>> .\notepad++.exe
>> }
>>
PS C:\> Set-Alias np++ fnp++
PS C:\> np++

Dummerweise ist das Alias wieder Verschwunden, wenn man die PowerShell schließt. Um länger etwas vom benutzerdefinierten Alias zu haben, muss man es im Benutzerprofil speichern. Um zu schauen, ob ein Profil schon vorhanden ist, benötigt man folgenden Befehl:

PS C:\> Test-Path $profile
False

Erhält man so wie hier ein False zurück, muss man das Profil mit New-Item erstellen:

PS C:\> New-Item -path $profile -type file -force
 
    Verzeichnis: C:\Dokumente und Einstellungen\Christian\Eigene Dateien\WindowsPowerShell
 
Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        26.05.2011     21:31          0 Microsoft.PowerShell_profile.ps1

Jetzt kann man das Profil mit einem Editor bearbeiten, in dem man es mit notepad $profile öffnet, und trägt folgende Zeilen ein:

function fnp++{
    Set-Location $env:ProgramFiles\notepad++
    .\notepad++.exe
}
Set-Alias np++ fnp++

Das Alias ist nun dauerhaft gespeichert und steht auch nach einem Neustart der PowerShell zur Verfügung. Allerdings kann es passieren, dass nach den Änderungen beim Start der PowerShell folgende Meldung erscheint:

‚Die Datei „[…] WindowsPowerShell\Microsoft.PowerShell_profile.ps1“ kann nicht geladen werden, da die Ausführung von Skripts auf diesem System deaktiviert ist. Weitere Informationen erhalten Sie mit „get-help about_signing“.‘

Um eigene PowerShell-Skripte auf dem System grundsätzlich ausführbar zu machen, gibt man in die PowerShell selbst folgenden Befehl ein:

Set-ExecutionPolicy RemoteSigned

Man kann auch Unrestricted oder AllSigned anstatt RemoteSigned als Argument übergeben. Das erste Argument Unrestricted ist aber zu unsicher, da es die Ausführung jedes Skripts erlaubt, und das zweite Argument AllSigned ist für eigene Scripte zu umständlich, da es nur die Ausführung von signierten Skripten erlaubt. RemoteSigned ist da ein guter Mittelweg, da aus dem Netz heruntergeladene Skripte nur ausgeführt werden, wenn sie signiert sind.

Anstelle des Befehls Set-ExecutionPolicy kann man auch den Eintrag in der Registry direkt ändern. Entweder geht man dabei über das gute alte Regedit und ruft zu Fuß folgenden Schlüssel auf,

HKLM\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell

um anschließend Name und Wert einzutragen:

Das kann man aber auch schon selbst in der PowerShell erledigen:

New-ItemProperty -path "hklm:\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell" -name "ExecutionPolicy" -value "RemoteSigned"

Nun sollte man nicht nur das Skript für das Profil, sondern auch andere eigene Skripte ausführen können. Wer wissen will, wie es um die Richtlinien zur Ausführung von Skripten auf dem Rechner überhaupt bestellt ist, sollte sich Get-ExecutionPolicy -List näher anschauen.

Geschrieben in Powershell, Windows | Kommentare deaktiviert für Wie man die PowerShell mit Aliase personalisiert

1Live Sendung über Linus Torvalds

11. Mai 2011 von Christian Imhorst

Der Radio-Sender 1Live bringt heute am 11. Mai 2011 einen Beitrag über Linus Torvalds. Die Sendung heißt PlanB, läuft immer ab 20 Uhr und am heutigen Abend gibt es wohl einen Beitrag „Wahre Helden: Linus Torvalds“. Da bin ich mal gespannt. ;-)

Das Ganze schreit doch geradezu nach einem Script, um die Sendung anzuhören und gleichzeitig aufzuzeichnen, da ich nicht weiß, ob es den Beitrag anschließend zum Download gibt, bzw. wann er während der drei Stunden PlanB versendet wird (vermutlich läuft er aber erst nach 22 Uhr). Voraussetzung ist, dass MPlayer und VLC installiert sind:

#!/bin/bash
# Script:   1LiveRecorder
#
# Usage: 1Live-Radiostream aufzeichnen und gleicheitig
# anhoeren. Benoetigt die Pakete MPlayer und VLC
 
mplayer -dumpstream mplayer -dumpstream http://gffstream.ic.llnwd.net/stream/gffstream_stream_wdr_einslive_a -dumpfile radio.mp3 &
sleep 1 
cvlc radio.mp3

Wer die Sendung nur hören möchte, klickt entweder in den Livestream auf 1Live.de, oder benutzt nur den MPlayer,

mplayer http://gffstream.ic.llnwd.net/stream/gffstream_stream_wdr_einslive_a

oder dieses Skript:

#!/bin/sh
# Skript: 1live
#
# Usage: Radio-Stream von 1live mit MPlayer hoeren
 
PLAYER=$(which mplayer)
URL="http://gffstream.ic.llnwd.net/stream/gffstream_stream_wdr_einslive_a"
 
if [ ! -f "$(echo $PLAYER)" ] ; then
	echo "MPlayer nicht gefunden."
        exit 1
fi
 
ping -n -c 1 www.w3.org >/dev/null
if [ $? -ne 0 ]; then
  echo "Kein Internet!"
  exit 1
fi
 
echo
echo "*********************************************"
echo "* Druecke die Tasten 'Strg + c' zum beenden *"
echo "* Mit '0' lauter und mit '9' leiser stellen *"
echo "*********************************************"
echo 
 
$PLAYER $URL
 
exit 0

Geschrieben in Gnu/Linux | Kommentare deaktiviert für 1Live Sendung über Linus Torvalds

ASP.NET-Applikationen unter Ubuntu testen

3. Mai 2011 von Christian Imhorst

Mit den Active Server Pages .NET (ASP.NET) kann man Webanwendungen auf Basis des .NET-Frameworks von Microsoft mit Sprachen wie C# oder VB.NET entwickeln. Dabei kann man theoretisch auch andere Sprachen verwenden, sie müssen nur zur Common Language Runtime (CLR), der Laufzeitumgebung von .NET, kompatibel sein.

Der Beitrag OpenSuse mit ASP.NET-Unterstützung von Patrick Schmid (compr00t) hat mich auf die Idee gebracht, ASP.NET-Anwendungen, die ich z.B. in VB.NET entwickel, unter Ubuntu zu testen. Der Aufbau der Testumgebung ist Dank Mono recht einfach:

sudo apt-get install mono-xsp2 asp.net2-examples mono-vbnc

XPS2 ist ein einfacher in C# geschriebener Webserver für ASP.NET 2.0, die ASP.NET2-Beispiele installiere ich, um zu schauen, ob die Testumgebung läuft, und Mono-vbnc als VB.NET-Compiler. Will man den C#-Compiler in Mono installieren, benötigt man mono-gmcs. Um den Webserver mit den soeben installierten Demos zu starten, gibt man folgenden Befehl im Terminal ein:

xsp2 --root /usr/share/asp.net2-demos/

Wenn alles glatt läuft, erhält man folgende Ausgabe:

xsp2
Listening on address: 0.0.0.0
Root directory: /usr/share/asp.net2-demos
Listening on port: 8080 (non-secure)
Hit Return to stop the server.

Jetzt kann man im Web-Browser schauen, ob bei der Installation wirklich alles gut gegangen ist, in dem man die Adresse http://localhost:8080/ aufruft, und das Beispiel hoffentlich betrachten kann.

Um eigene Anwendungen zu testen, legt man einen Ordner an, z.B. ASP.NET im Home-Verzeichnis, und speichert die Datei index.aspx mit folgendem Inhalt im Unterordner HalloWelt ab:

<!-- index.aspx -->
<%@ Page Language="VB" Debug="True" Strict="True"  %>
<script runat="server">
Sub Page_Load (ByVal Sender As Object, ByVal E As EventArgs)
   Dim strText As String 
   strText = "Hallo Welt!"
   myTitle.InnerText = strText
   myP.InnerText = strText
End Sub
</script>
<html>
<head>
    <title id="myTitle" runat="server" ></title>
</head>
<body>
    <p id="myP" runat="server"></p>
</body>
</html>

Dabei muss man auf die genaue Schreibweise, sowie Groß- und Kleinschreibung achten, ansonsten hat man am Ende eine Fehlermeldung wie „Server Error in ‚/‘ Application“:

Der Webserver XPS2 wird jetzt mit einem anderen Wurzelverzeichnis gestartet:

xsp2 --root /home/christian/ASP.NET/HalloWelt

Nach einem erneuten Aufruf der Adresse http://localhost:8080/ sollte im Webbrowser „Hallo Welt!“ stehen und das richtige Testen kann beginnen.

Geschrieben in Gnu/Linux | Kommentare deaktiviert für ASP.NET-Applikationen unter Ubuntu testen

Wissenswertes über Python: String-Formatierung

29. April 2011 von Christian Imhorst

Bekannterweise sind Verkettungen von Strings in Python, mit dem Plus-Operator (+) sehr einfach zu machen. Man kann auch eine Zahl mit einem String verketten, wenn man die Zahl vorher explizit mit str() in einen String umwandelt:

>>> s = 'Ich bin ein String'
>>> i = 123
>>> type(s)
<type 'str'>
>>> type(i)
<type 'int'>
>>> str(i) + ' ' + s + '!'
'123 Ich bin ein String!'

So praktisch sie auch sind, man sollte solche Verkettungen von Zeichenketten mit dem +-Operator vermeiden, da sie zu Lasten der Performance gehen. In Python sind Strings unveränderliche (immutable) Objekte, daher werden außer dem Ergebnis-String temporär weitere Strings angelegt, die hinterher von der Laufzeitumgebung wieder entsorgt werden müssen (garbage collection). In meinem Beispiel wird inklusive Ergebnis-String dreimal ein neuer String konstruiert und die beiden temporär erstellten Vorgänger werden wieder freigegeben. Dabei muss jedes Mal der Inhalt des alten Strings in den neuen kopiert werden, was alles zusammen Performance frisst.

Die Erzeugung des Ergebnis-Strings sollte man daher an einen String-Formatierer übergeben:

>>> '%d %s!' % (i, s)
'123 Ich bin ein String!'

Dabei sind %d und %s Platzhalter für den Inhalt der Variablen i und s. Die Platzhalter sind aber nicht frei wählbar, so steht %d für Dezimalzahlen, %s für Strings, %x für Hexadezimalzahlen, %e, %f und %g für Gleitkommazahlen. Bei der String-Formatierung entfällt nicht nur das Kopieren der String-Inhalte in neue Strings und das anschließende Aufräumen, sondern auch die explizite Typumwandlung der Ganzzahl in i in einen String mit str(), was einfach performanter ist.

Geschrieben in Python | Kommentare deaktiviert für Wissenswertes über Python: String-Formatierung

Das iPhone und die VirtualBox

22. April 2011 von Christian Imhorst

Gerade ist mir mal wieder aufgefallen, was das Problem war, wenn man versucht, einem iPhone mit iTunes über ein bekanntes Betriebssystem in der VirtualBox ein Update zu verpassen. Es funktioniert nämlich nicht so ohne weiteres. Dank eines „ID Change“ im Wiederherstellungsmodus wird die USB-Schnittstelle der VirtualBox während des Updates nicht mehr erkannt und man erhält folgende Fehlermeldung: „Ein unbekannter Fehler ist aufgetreten. Fehler 1604“

Um das Problem zu beheben, habe ich die aktuellste Version von VirtualBox installiert, indem ich unter Ubuntu 10.04 Lucid Lynx folgende Zeile in die Datei /etc/apt/sources.list eingefügt habe:

deb http://download.virtualbox.org/virtualbox/debian lucid contrib non-free

Anschließend habe ich den öffentlichen Schlüssel von Oracle heruntergeladen und VirtualBox installiert:

wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -
sudo apt-get update
sudo apt-get install dkms virtualbox-4.0

Bevor man die virtuelle Maschine wieder startet, muss man nach einem Rechtsklick auf die Maschine unter „Ändern“ und „USB“ noch einen USB-Filter hinzufügen, der im Feld „Hersteller“ die Zeichenfolge „Apple Inc.“ enthält. Dann wird die USB-Schnittstelle trotz „ID Change“ während des Updates wieder gefunden.

Mit diesen Vorbereitungen klappt das Update des iPhones über die VirtualBox ohne Probleme, so als würde man einen richtigen PC benutzen.

Geschrieben in Gnu/Linux, MacOS X und iPhone | Kommentare deaktiviert für Das iPhone und die VirtualBox

Wie man in Python ein App für SHR schreibt

19. April 2011 von Christian Imhorst

Für Python-Fans bieten die beiden Module Python-Elementary und Python-Evas eine schnelle und einfache Möglichkeit, grafische Oberflächen für den Enlightenment-Fenstermanager E17 und damit auch für das OpenMoko Betriebssystem SHR zu schreiben. Wer damit unter E17 experimentieren möchte, für den sind die beiden Module in Debian Sid (Unstable) bzw. in Experimental enthalten und unter Ubuntu ab 10.10 Maverick Meerkat, bzw. ab Linux Mint 10. In SHR sind sie schon dabei.

Für eine erste Hallo-Welt-Gui habe ich mich an das Elementary-Beispiel im Wiki von Enlightenment gehalten, das in C geschrieben ist, bzw. an das Beispiel im Wiki von SHR, das allerdings in VALA geschrieben wurde.

#!/usr/bin/python
#
# Example for a GUI written with Python-Elementary.
 
import elementary
import evas
 
class HelloWorldGui(object):
 
	def destroy(self, obj):
		# quit the window (mainloop)
		elementary.exit()
 
	def __init__(self):
		elementary.init()
 
		# new window - do the usual and give it a name, title and delete handler
		self.win = elementary.Window("HelloWorld", elementary.ELM_WIN_BASIC)
		self.win.title_set("Hello")
		# when the user clicks "close" on a window:
		self.win.callback_destroy_add(self.destroy)
 
		# add a standard background
		self.bg = elementary.Background(self.win)
		self.win.resize_object_add(self.bg)
		# do not allow bg to expand
		self.bg.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
		# add object as a resize object for the window
		self.win.resize_object_add(self.bg);
		self.bg.show()
 
		# add a box object - default is vertical. a box holds children 
		# in a row, either horizontally or vertically. nothing more.
		self.mainBox = elementary.Box(self.win)
		# do not allow box to expand
		self.mainBox.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
		# add object as a resize object for the window
		self.win.resize_object_add(self.mainBox)
		self.mainBox.show()
 
		# add a label widget 
		self.lbl = elementary.Label(self.win)
		# set text of the label
		self.lbl.label_set("Hello World!")
		# do not allow label to expand 
		self.lbl.size_hint_weight_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
		# pack the label at the end of the box 
		self.mainBox.pack_end(self.lbl)
		self.lbl.show()
 
		# add a quit button
		self.btnquit = elementary.Button(self.win)
		# set label for button
		self.btnquit.label_set("Quit")
		# do not allow button to expand 
		self.btnquit.size_hint_align_set(evas.EVAS_HINT_EXPAND, evas.EVAS_HINT_EXPAND)
		# pack the button at the end of the box
		self.mainBox.pack_end(self.btnquit)
		# when button is clicked
		self.btnquit.callback_clicked_add(self.destroy)
		self.btnquit.show()
 
		# size of the window
		self.win.resize(150,80)
		# now we are done, show the window
		self.win.show()
 
		# run the mainloop
		elementary.run()
		elementary.shutdown()	
 
# endof class HelloWorldGui
 
gui = HelloWorldGui()

Die Datei habe ich dann auf das OpenMoko kopiert und dort im Terminal ausgeführt. Das Ergebnis sieht zwar nicht sehr schön aus, kann sich aber sehen lassen.

Geschrieben in Gnu/Linux, Python, SHR | Kommentare deaktiviert für Wie man in Python ein App für SHR schreibt

Flash-Streams mit MPlayer hören (mit Update)

5. März 2011 von Christian Imhorst

Um mein Spanisch zu verbessern, möchte ich nebenbei spanische Radiosender hören. Blöderweise benutzen die meisten Flash-Player und verstecken die Live-Streams dazu zwischen Java-Script und HTML. Gibt es also keine Chance, die URL zum Stream zu ermitteln, damit ich diese Radiosender auch mit dem MPlayer hören kann? Doch gibt es, man muss sich die URL nur aus dem Quellcode der Seite und der Ausgabe eines Netzwerk-Sniffers wie tcpdump zusammenpuzzeln. Vermutlich gibt es mehrere Wege, die hier zum Ziel führen, ich habe es folgendermaßen gemacht:

Zuerst bin ich auf die Hompage des Radiosenders gesurft, in diesem Fall Cadena Dial. Um den Sender zu hören, klickt man auf den Link „Escucha en directo“. Auf dieser Seite befindet sich der Flash-Player. Um sie zu analysieren, habe ich sie mit dem Befehl wget heruntergeladen:

$ wget http://www.cadenadial.com/multimedia/radios.html
--2011-03-05 14:02:58--  http://www.cadenadial.com/multimedia/radios.html
Auflösen des Hostnamen www.cadenadial.com... 194.169.201.138
Verbindungsaufbau zu www.cadenadial.com|194.169.201.138|:80... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 6416 (6,3K) [text/html]
In »radios.html« speichern.
 
100%[===================================================================>] 6.416       --.-K/s   in 0,08s   
 
2011-03-05 14:02:58 (83,4 KB/s) - »radios.html« gespeichert [6416/6416]

Alternativ kann man sich den Quellcode der Seite natürlich auch im Browser anschauen. Der Link zum Stream befindet sich in der Regel zwischen den iframe-Tags im HTML-Code, muss aber nicht. Eventuell muss man ein grep auf callsign selbst absetzen, oder man nimmt player als Suchwort.

grep iframe radios.html
<iframe src="http://player.streamtheworld.com/_players/unionradio/?callsign=CADENADIAL" ...</iframe>

Ich habe die Ausgabe auf den wichtigsten Teil reduziert, nämlich auf den Link für den Flash-Player. Hier muss man sich den Wert hinter callsign= merken, in diesem Fall also „CADENADIAL“.

Während der Radiosender im Flash-Player des Browsers vor sich hin spielt, startet man tcpdump, um herauszufinden, von welcher IP-Adresse der Player seinen Stream eigentlich bezieht.

# tcpdump -i wlan0 -n

Man kann tcpdump nur als Root starten. Hinter der Option -i gibt man das Interface an, auf dem gesnifft werden soll, die Option -n löst keine Hostnamen auf, sondern gibt die IP-Adressen zurück. Die Ausgabe sieht dann etwa wie folgt aus:

listening on wlan0, link-type EN10MB (Ethernet), capture size 96 bytes
14:21:20.622711 IP 77.67.34.21.80 > 192.168.178.22.59240: Flags [.], seq 3400577045:3400578485, ack 2642445401, win 1723, options [nop,nop,TS val 1395385741 ecr 1233879], length 1440
14:21:20.675395 IP 192.168.178.22.59240 > 77.67.34.21.80: Flags [.], ack 1440, win 947, options [nop,nop,TS val 1233930 ecr 1395385741], length 0
14:21:20.719510 IP 77.67.34.21.80 > 192.168.178.22.59240: Flags [.], seq 1440:2880, ack 1, win 1723, options [nop,nop,TS val 1395385837 ecr 1233879], length 1440

Sie zeigt vor allem zwei IP-Adressen, nämlich 192.168.178.22, das ist in diesem Fall die eigene, und 77.67.34.21, die Adresse des Servers mit dem Live-Stream. Genau genommen steht in der Ausgabe von tcpdump ja 77.67.34.21.80. Die letzte Zahl, zeigt die Portnummer an, in diesem Fall Port 80, hinter dem HTTP als Dienst steht. Jetzt haben wir alle notwendigen Infos, um den Link für den MPlayer in der Kommandozeile zusammenzusetzen:

mplayer http://77.67.34.21/CADENADIAL

Oder im AAC-Format:

mplayer http://77.67.34.21/CADENADIALAAC

Zuerst kommt der Befehl, um den Musikplayer zu starten, mplayer, dann der Dienst, über den kommuniziert werden soll, http://, dann die IP-Adresse des Servers 77.67.34.21 und zum Schluss kommt mit CADENADIAL das Verzeichnis zum Stream.

Auf dem Server sind übrigens noch weitere Streams von spanischen Radios beheimatet. Unter anderem auch von Los40. Während Cadena Dial fast ausschließlich spanisch sprachige Musik spielt, ist bei Los40 der Mix mit aktueller Musik aus den Charts etwas internationaler.

mplayer http://77.67.34.21/LOS40

Oder im AAC-Format:

mplayer http://77.67.34.21/LOS40AAC

Update:

Willie gibt in den Kommentaren einen Hinweis auf den chilenischen Sender Futuro, den man lieben wird, wenn man auf Heavy Metal und Hard Rock steht. Es könnte der Lieblingssender von Jara aus dem Film Gigante sein, wobei der Film in Uruguay spielt, nicht in Chile, er passt aber zur Musik im Film. Etwas abgewandelt bekommt man mit der hier beschriebenen Methode dann diesen Befehl zustande:

mplayer http://208.80.54.28/FUTURO

Die Qualität ist allerdings nicht so berauschend. Der Screenshot mit Firebug von Johannes in den Kommentaren zeigt, dass zumindest Cadena Dial auch im AAC-Format gestreamt wird, was die Qualität verbessern sollte. Und potz blitz, bei Futuro funktioniert dieser Stream auch:

mplayer http://208.80.54.28/FUTUROAAC

Die Qualität hört sich richtig gut an. Die anderen MPlayer-Befehle habe ich deshalb entsprechend erweitert. Vielen Dank für diese Hinweise und viel Spaß beim Hören.

Geschrieben in Gnu/Linux | Kommentare deaktiviert für Flash-Streams mit MPlayer hören (mit Update)

Freerunner Revolution

2. März 2011 von Christian Imhorst

Nach meiner Woche mit Android auf dem Freerunner bin ich jetzt dank des Tipps von Lukas zu SHR gewechselt. Android Cupcake funktioniert auf dem Openmoko Freerunner reibungslos, soweit ich das in einer Woche beurteilen kann. Nervig ist bloß, dass man es innerhalb von 24 Stunden mindestens einmal aufladen muss, auch wenn man nicht wirklich viel damit gemacht hat. Der Stromverbrauch ist einfach recht hoch. Da scheint SHR etwas länger durchzuhalten, wenn man Dienste wie WLAN, Bluetooth oder GPS wirklich nur dann aktiviert, wenn man sie braucht, den Freerunner immer fleißig in den Suspend schickt und die Helligkeit des Displays standardmäßig etwas herunter dreht. Das Stable Hybrid Release (SHR) ist eine freie GNU/Linux-Distribution, die es nicht nur für das OpenMoko, sondern auch für andere Smartphones wie dem N900 von Nokia, dem HTC Dream, oder dem Palm Pre gibt. Außerdem ist es wirklich eine Distribution für Frans von Gnu/Linux und Freier Software, weil man von Anfang an viel selber machen darf. Die Installation ist zwar ein bisschen komplizierter als bei Android, klappt aber trotzdem sehr gut.

Den restlichen Eintrag lesen »

Geschrieben in Gnu/Linux, SHR | Kommentare deaktiviert für Freerunner Revolution

Freerunner reloaded

20. Februar 2011 von Christian Imhorst

Im Juni 2009 hatte ich bei P|U|L|S|T|E|R ein Openmoko Freerunner gekauft. Damals war ich fest entschlossen, mehr für Maemo bzw. MeeGo und mit Qt zu programmieren, um abgefahrene spezialisierte Anwendung für Smartphones zu entwickeln. Dabei hatte ich besonders Nokia-Smartphones ins Auge gefasst, die dann mit MeeGo als Betriebssystem laufen, und der Freerunner sollte die Plattform zum Entwickeln werden. Diese Pläne sind aus mehreren Gründen gescheitert. Auf der einen Seite habe ich wenig Zeit, C++ und Qt zu vertiefen, weil ich auf der Arbeit Visual Basic-Dialekte benötige und mich in meiner Freizeit einfach viel zu gerne mit Python beschäftige. Auf der anderen Seite hatte mein Freerunner von Anfang an ein Hardware-Problem: Der Earspeaker hat nicht funktioniert. Anfangs dachte ich ja noch, dass ich einfach zu blöd sei, oder die Distributionen, die ich geflasht hatte, zu abwegig für das Gerät wären. Wie ich auch herumgeschraubt habe, ich konnte einfach nicht telefonieren. Mein Gegenüber hat mich zwar verstanden, ich ihn aber nicht. Mit einem Headset konnte ich das Problem leider nicht testen, weil ich keins für den Freerunner hatte.

Den restlichen Eintrag lesen »

Geschrieben in Gnu/Linux | Kommentare deaktiviert für Freerunner reloaded

« Previous Entries Next Entries »