Endgeräte-Hightech-Friiieeeek

21. Mai 2012 - 20:52 Uhr

Bisher war ich nicht so der Typ, der sich für irgendwelche Endgeräte begeistern kann. Mit zunehmender Vernetzung wird das jetzt aber doch irgendwie interessant. Heute ist mein neuer BluRay-Player angekommen. Da ich schon einen Fernseher von Philips besitze, habe ich mich auch bei dem Player für Philips entschieden.
Zugegeben, ich hab noch keine Bluray oder DVD gesehen, weil ich immer noch von der Musikstreaming-Lösung über WLAN geflasht bin. Meine komplette Musiksammlung befindet sich nämlich mittlerweile auf meinem Smartphone (irgendein billiges Samsung). Sowohl Handy als auch Player (Fernseher auch, aber das spielt hier keine Rolle) sind ins WLAN eingebunden. Nun kann ich über die Philips-Remote-App mein Handy als Medienserver benutzen und die darauf befindliche Musik auf den Player streamen. Das begeistert mich dann doch ziemlich :-)
Morgen werde ich mich dann mal und die Beschaffung einer ordentlichen Menge an Test-BluRays machen. Muss ja alles durchgetestet werden. Heute Abend bleibt es bei einer oder zwei Folgen Battlestar Galactica zum Entspannen. Oder einfach nur Musik über WLAN. Die bezaubernde Björk klingt nämlich auch durch Funkwellen verlockend.

Kommentieren » | Musik

Der gefallene Engel: Eine Prognose

17. Mai 2012 - 19:00 Uhr

Er ist der gefallene Engel, der Gehörnte, der Pferdefüßige. Er bringt Menschen in Versuchung und stürzt sie in den Abgrund. Sein Name ist Belzebub, Luzifer und Diabolus. Seine Name ist Phil Collins.

Phil Collins? Oh ja. Ich habe für diese Erkenntnis auch lange benötigt und ich weiß, es klingt ein wenig … ungewohnt. Dennoch fordere ich euch auf, darüber nachzudenken, was passiert ist, als ihr das letzte Mal einen Song von ihm im Radio gehört habt. Dämmert es jetzt? Reifenplatzer, umstürzende Gegenstände, der Fall von der Leiter. Alles ist nun kein Zufall mehr. Für alle, die es immer noch nicht glauben: Setzt euch einen Helm auf, wickelt euch in Brandschutzfolie und begebt euch in einen Nebenraum wenn ihr auf Play drückt. Und lasst euch nicht verlocken: Der Antichrist singt verführerisch in fremden Zungen.

Zeit für Abhilfe, dachte ich mir. Wenn ich (gezwungenermaßen) Radio höre, ist es immer derselbe Sender. Die Playlist der gespielten Songs kann man bis zu eine Woche in die Vergangenheit auf der Internetseite des Senders abrufen. Unter Angabe der Uhrzeit und des Datums werden drei Songs angezeigt, die um den angegebenen Zeitpunkt gespielt wurden, jeweils mit Uhrzeit (hh:mm), Interpret und Titel des Songs. Ab hier ist es ein leichtes, diese Seite automatisiert Zehn-Minuten-Intervalle abzufragen. Startend vom ersten möglichen Zeitpunkt eine Woche zuvor bis zur Gegenwart ergeben sich 1008 Abfragen, die jeweils auf die Schlüsselworte “Phil Collins” und “Genesis” geprüft werden und der Zeitpunkt im Falle eines Treffers abgespeichert wird.
Aus dieser Liste ergeben sich meist ca. 20 Treffer, deren Abstände untereinander berechnet werden müssen um den Durchschnittsabstand zwischen den satanischen Versen zu ermitteln. Nun kann man anhand des letzten Eintrages der Liste (Zeitpunkt des letzten gespielten diabolischen Manifests), der aktuellen Zeit und ein bisschen Dreisatz ermitteln, wann in etwa der nächste Song des Fürsten der Finsternis gespielt wird.
Das Tool ist gerade fertig geworden. Ich werde es jetzt eine Woche lang testen und bewerten, ob es den Erwartungen entspricht und die Abspielzeitpunkt mit hinreichender Genauigkeit prognostiziert.
Als nächster Schritt ist dann eine Lösung mithilfe eines neuronalen Netzes geplant. Diese Anwendung ist dann hoffentlich in der Lage einzelne Titel zu prognostizieren. Denn wenn ich an einem Abend “Just one night” höre und am Folgetag “Tonight, tonight, tonight” wird es mir ehrlich gesagt Angst und Bange.
Schade, dass dieses Tool nur mich schützen kann. Eine Veröffentlichung käme wohl einem schwachen DDoS-Angriff gleich (bzw der Möglichkeit, einen solchen zu starten) und das möchte ich selbstverständlich nicht verantworten.

1 Kommentar » | Spaß und Ernst

Kluger Brocken Daten

15. Mai 2012 - 19:28 Uhr

Hö? Das wird dem Ministerium für Wahrheit aber gar nicht gefallen :-)

Ich bin heute über die Suchmaschine Wolfram|Alpha gestolpert. Die Suche dort erfolgt semantisch, d. h. das Ergebnis von “Birthday of Prince Harry” lautet 15.9.1984 und wird direkt in die Seite eingebunden. Google listet dazu 32,8 Mio. Treffer auf, von denen der erste (Wikipedia) noch am treffendsten ist.

Semantische Suchen sind nicht immer die sinnvollsten und die Pflege und Aggregation der Quelldaten ist wesentlich aufwändiger als bei einer normalen Crawler-Suche, wie Google sie durchführt. In bestimmten Fällen ist das Ergebnis allerdings wesentlich aussagekräftiger, wie z. B. eben gezeigt bei der Suche nach Hard-Facts, also unumstößlichen Tatsachen.
Aber auch da muss man vorsichtig sein. Zum einen liefert Wolfram|Alpha selten Quellen, geschweige denn deren Alter. Zum anderen darf die Faszination eines augenscheinlich wahren, schnell gelieferten Datums nicht dazu führen, es nicht erst einmal in Frage zu stellen. Die Anfrage “elevation of Brocken, Germany” liefert in Nullkommanichts die Antwort 1142 Meter. Nach neusten Erkenntnissen stimmt das aber gar nicht, auch wenn die Differenz nur -1 Meter ist. Der Spiegel hat einen ganz kurzweiligen Artikel über die Stärken und Schwächen von Wolfram|Alpha geschrieben und den Vergleich zu Google auf die Spitze getrieben. Trotz des Alters (2009) bleibt der Artikel sachlich aktuell. Zumal einige Abfragen immer noch das gleiche Ergebnis liefern, wie ich stichprobenartig testete.

Wo Wolfram|Alpha sowas von am Abglänzen ist, ist die Rechenfähigkeit. Die ganze Engine ist auf einer Mathematik-Library von Stephen Wolfram aufgesetzt, die sogar Differenzialgleichungen lösen kann. Für Studenten lohnt sich also definitiv auch die Mobile-App von Wolphram|Alpha ;-)

Kommentieren » | Computer

VBA-Erkenntnisse

3. April 2012 - 20:32 Uhr

In letzter Zeit schreibe ich öfter als mir lieb ist in Sprachen, die ich nicht mag. Lehrreich ist das ja trotzdem immer. Mein Ziel war es, in Excel einen Filter für eine Tabelle zu schreiben, der sich über mehrere Zellen erstreckt. Dabei sollte eine Zeile angezeigt werden, wenn in einer Zelle ein Teil der Zeichenkette ein bestimmtes Argument enthält. Der Autofilter hilft einem da wenig weiter (glaube ich jedenfalls).
Meine Grundidee war eine doppelt verschachtelte For-Schleife, die das Argument sucht und bei Nicht-finden die vollständige Zeile ausblendet.
Der erste Versuch hat zwar auch gleich funktioniert, war allerdings nicht unbedingt der Performanteste. Milde ausgedrückt, denn die Verarbeitung von gut 400 Zeilen über acht Spalten dauerte gut 90 bis 100 Sekunden. Dabei flackerte der Bildschirm lustig vor sich hin und man hörte sämtliche Lüfter der Maschine anspringen, was ja irgendwie auf eine erhöhte Prozessortätigkeit hindeutet :-)
Ein kurzer Besuch bei Onkel Google brachte mir die Erkenntnis, dass alleine die Zeilen


Application.ScreenUpdating = False
//komplizierter Algorithmus
Application.ScreenUpdating = True

Wunder bewirken können. Von anfänglichen 100 Sekunden blieben noch - je nach Konstellation - 30 bis 40 Sekunden übrig. Natürlich ist das auch nichts für den alltäglichen Gebrauch und so kam ich auf die Idee, mal zu prüfen, warum der verbleibende Code eigentlich so langsam ist, bzw. wo sich das Bottleneck befindet.
Es handelte sich eindeutig um die Ausblende-Funktion von einzelnen Zeilen oder Spalten, die bei mir direkt in der Schleife ausgeführt wurde. Als ich diese Zeile auskommentierte, verblieben etwa 0,7 Sekunden, die es zur Bearbeitung des vollständigen Codes bedurften.
Ohne das Ausblenden ist allerdings die vollständige Routine überflüssig, so dass ich auf die Idee kam, die auszublendenden Zeilen alle vorzuselektieren um sie anschließend auf einen Schlag auszublenden. Dazu musste ich nur verstehen, wie man eine Range (Excel-VBA-Kenner wissen, was gemeint ist) erstellt, die keinen zusammenhängenden Bereich beinhaltet, sondern mehrere Insel-Bereiche vereint. Also in etwa einer Mehrfach-Selektion gleichend.

Und siehe da: So etwas gibt es wirklich. Die fehlende Funktion heißt Union() und nimmt mehrere Ranges entgegen und vereinigt diese zu einer großen Range. Etwa so


Dim tmpRange1 as Range
Dim tmpRange2 as Range
Dim gesRange As Range

Set tmpRange1 = Range("A3")
Set tmpRange2 = Range("A17")
Set gesRange = Union(tmpRange1, tmpRange2)
gesRange.Select

Schaut man sich nun das Excel-Sheet an, sind die Zellen A3 und A17 selektiert. Der große Vorteil ist natürlich im Beispiel nicht erkennbar. Die temporären Ranges kann man sich hervorragend in einer Schleife setzen und zur großen Range hinzufügen. Das geht ohne markante Zeitverzögerung.
Am Ende außerhalb der Schleife habe ich dann die Range selektiert und die enthaltenen Zeilen ausgeblendet, also die zeitkritische Funktion. Die Zeit für die vollständige Verarbeitung liegt am Ende bei etwa 1 bis 2 Sekunden.
Ich hatte bisher nie großen Spaß an Code-Optimierung, aber in diesem Fall macht die Erkenntnis und das Ergebnis sehr glücklich.

Für alle, die bis zu diesem Punkt durchgehalten haben: Hut ab! Zur Belohung der vollständige Funktions-Code als Sahnehäubchen. Wer noch mehr Verbesserungen findet, ab in die Kommentare damit.

digit ist übrigens die Zahl, die in die Funktion als Suchparameter eingegeben wurde.


    Set Bereich = Range(Cells(StartZeile, StartSpalte), Cells(EndZeile, EndSpalte))

    For Each Zelle In Bereich
        txt = Zelle.Value
            If Len(txt) > 0 Then
                If InStr(txt, "-") Then
                    aTXT = Split(txt, "-")
                    found = False
                    For u = 0 To UBound(aTXT)
                        If (aTXT(u) = digit) Then
                            found = True
                            Exit For
                        End If
                    Next

                    If Not found Then
                        'Die temporäre Adresse wird zum Ausblenden vorgemerkt
                        Set rTmp = Range(Zelle.Address)
                    End If
                Else
                    vorhTXT = CInt(Trim(txt))
                    If (vorhTXT  digit) Then
                        'Wenn die Zahl in der Zelle nicht der gesuchten Zahl entspricht, wird die
                        'Zeile zum Ausblende vorgemerkt
                        Set rTmp = Range(Zelle.Address)
                    End If
                End If

                'Auswertung der vorgemerkten Zellen:
                'Wenn eine solche existiert, dann
                If Not rTmp Is Nothing Then
                    If Not rGes Is Nothing Then
                        'füge sie der GesamtRange zu
                        Set rGes = Union(rGes, rTmp)
                        Set rTmp = Nothing
                    Else
                        Set rGes = rTmp
                    End If
                End If
            End If
    Next Zelle

    'Markiere die GesamtRange
    rGes.Select
    'Blende ihre Zeilen aus
    rGes.EntireRow.Hidden = True
    'Bildschirmaktualisierung wieder an
    Application.ScreenUpdating = True

    'Speicher freigeben
    Set Bereich = Nothing
    Set rGes = Nothing

Der Code-bewanderte Leser sieht, dass der Text in den Zellen, in denen gesucht wird, entweder als einzelne Zahl vorkommt oder in der Form 4-67-23 vorliegt. Jeweils als String formatiert. Anstelle einer For-Schleife habe ich mich aus Performance-Gründen für eine For-Each-Schleife entschieden. Diese soll in VBA schneller als While- oder (klassische) For-Schleifen sein.
Ich hoffe jenen damit zu helfen, die vor einem ähnlichen Problem stehen und dadurch vielleicht auf diesen Artikel stoßen. An alle anderen: ja, mir geht es gut :-)

Kommentieren » | Computer

All is full of … RECHTECKE!

23. März 2012 - 18:38 Uhr

Leute mit Kreativ-Tiefs und/oder Aggressionsproblemen sollten Javascript aktivieren und auf das bunte Bild klicken. Ab dann ist alles nur noch eine Frage der Mausbewegung und alles wird ruhig.

 
Eigentlich wollte ich ja nur ein bisschen in Javascript rumspielen, auch wenn es irgendwie eine blöde Sprache ist (eigene Meinung). Heraus kam dann dieses grandiose Ergebnis.

Es ist auf eine Pixelzahl von 1920×1080 eingestellt. Das beste Ergebnis wird mit aktuellem Firefox und in Fullscreen-Mode erzielt (F11).

Viel Spass!

PS: Aufgabe für besonders motivierte Rechteck-Liebhaber: Probiert, alles in einer Farbe hinzukriegen.

Kommentieren » | Spaß und Ernst

« Ältere Einträge