Technik, Gothic und Anderes

Technik ist Spiel, Gothic ist ernst und Zeit hat man zuviel

  • Kategorien

  • Tags

  • Archiv

  • Links

    zu Bee5

    blog.oncode.info läuft bei Cyon und ich bin sehr glücklich damit.

Upload und Speichern von Dateien in einer DB mit einer C# ASP.NET MVC Applikation

Geschrieben von skaldrom am 1. February 2012

uploadMVC mit C# macht ja grundsätzlich Spass (obwohl für einige Leute ja auch Auspeitschen angenehm ist :)). Ich habe ein paar spezielle Aufgaben zum Realisieren gefasst und gebe hier ein paar Weisheiten von mir, die wahrscheinlich allgemein bekannt sind und ich einfach nur nicht finden kann.

In diesem Beitrag wird beschrieben, wie man verschiedene Medien (Bilder, Filme, Audio) hochladen, in einer Datenbank speichern und (mit HTML 5) wieder darstellen kann. Ich gehe aus von einer frisch erstellten und herausgeputzten MVC 3 Webapplikation.

Am Schluss sollte die Liste in etwa so aussehen:

Liste der Medien

Lesen Sie den Rest des Beitrags »

Eingeordnet in Theorie und Schnipsel, Webapplikationen | 8 Kommentare »

Programmierquiz: Kürzesten, nicht passenden String finden, auf dass ein RegExp nicht passt

Geschrieben von skaldrom am 15. October 2011

Hier mal eine lustige Aufgabe, mit der ich vor Kurzem konfrontiert war: Gegeben sei ein Alphabet Σ mit Symbolen und eine Regular Expression, wie etwa (0*|1*)(0*|1*)(0*|1*). Nun ist dar kürzeste String mit Symbolen aus dem Alphabet gesucht, auf dass der gegebene RegExp nicht passt.

…Hier würde etwas Musik gespielt und ein Countdown eingeblendet werden, damit der interessierte Leser eine Lösung erarbeiten kann :)

Meine Lösung funktioniert, sofern die Symbole im Alphabet einem Symbol in UTF-8 entsprechen und ist trivial: Zuerst werden alle Permutationen gebildet und der RegExp daran getestet. Aus reinem Masochismus habe ich versucht, dies in Python 3.2 zu implementieren. Und nein, itertools packt das nicht!

Ein Testdurchgang könnte folgendermassen aussehen (Das Alphabet besteht aus 0 und 1):

$ python3.2 msfr.py -v '(0*|1*)(0*|1*)(0*|1*)' 0 1
Σ: {0, 1}
  Testing: '^(0*|1*)(0*|1*)(0*|1*)$' with ε MATCH
  Testing: '^(0*|1*)(0*|1*)(0*|1*)$' with 0 MATCH
  Testing: '^(0*|1*)(0*|1*)(0*|1*)$' with 1 MATCH
  Testing: '^(0*|1*)(0*|1*)(0*|1*)$' with 00 MATCH
[...]
  Testing: '^(0*|1*)(0*|1*)(0*|1*)$' with 0011 MATCH
  Testing: '^(0*|1*)(0*|1*)(0*|1*)$' with 0100 MATCH
  Testing: '^(0*|1*)(0*|1*)(0*|1*)$' with 0101 NOMATCH
  Testing: '^(0*|1*)(0*|1*)(0*|1*)$' with 0110 MATCH
[...]
  Testing: '^(0*|1*)(0*|1*)(0*|1*)$' with 1010 NOMATCH
  Testing: '^(0*|1*)(0*|1*)(0*|1*)$' with 1011 MATCH
[...]
  Testing: '^(0*|1*)(0*|1*)(0*|1*)$' with 1111 MATCH
Found nonmatching strings with length 4: 0101, 1010

Klappt also nicht schlecht. ε ist übrigens der leere String :).

Dies ist mein erstes Script in Python überhaupt. Für Anregungen und Verbesserungsvorschläge bin ich mehr als dankbar:

#!/usr/bin/env python
'''
Find a minimal non-matching string for a given regular expression and an alphabet.
Created on Oct 1, 2011

@author: Skaldrom Y. Sarg
'''

import argparse
import re
import sys

def allstrings(alphabet, length):
    """Find the list of all strings of 'alphabet' of length 'length'"""
   
    if length == 0:
        return [""]
    c = []
    for i in range(length): # @UnusedVariable
        c = [[x] + y for x in alphabet for y in c or [[]]]

    return c


if __name__ == '__main__':
    scriptHelp= "msfr: Find a minimal non-matching string for a given regular expression and an alphabet.\n\
\n\
Example: python3 msfr.py '(0*|1*)(0*|1*)(0*|1*)' 0 1"

   
    parser = argparse.ArgumentParser(description=scriptHelp, epilog='Written by Michael Schneider.')
    parser.add_argument('-v, --verbose', dest='verbose', action='store_true', default=False, help='output more verbose')
    parser.add_argument('-m, --maxlength', dest='maxlength', default=10, help='max number of symbols to test (default: 10)')
    parser.add_argument('regexp', type=str, nargs=1, help='the regular expression')
    parser.add_argument('alphabet', metavar='S', type=str, nargs='+', help='a symbol of the alphabet')
    args = parser.parse_args()

    # Start
    if(args.verbose):
        print('Σ: {' + ", ".join(args.alphabet)+'}')
       
    foundNonMatch = []
    for wordlength in range(0, args.maxlength):
        for string in allstrings(args.alphabet, wordlength):
            testString = "".join(string)
            testRegexp = args.regexp[0]
            if args.verbose:
                print("  Testing: '^" + testRegexp + "$' with " + (testString if len(testString) != 0 else 'ε'), end="")
            try:
                result = re.match('^' + testRegexp + '$', testString)
            except re.error as exc:
                if args.verbose:
                    print("\n")
                print("ERROR - Invalid regexp: " + str(exc))
                sys.exit(0)
                   
                   
            if(result != None):
                if args.verbose:
                    print(" MATCH")
            else:
                foundNonMatch.append(testString)
                if args.verbose:
                    print(" NOMATCH")
        if(foundNonMatch):
            break
    if not foundNonMatch:
        print("No nonmatching strings found until length " + args.maxlength + ".")
    else:
        foundStingsLength = str(len(foundNonMatch[0]))
        foundStrings = ", ".join(foundNonMatch) if len(foundNonMatch[0]) > 0 else 'ε'
        print("Found nonmatching string" + ("s" if len(foundNonMatch) else "") + " with length " + foundStingsLength +": " +foundStrings)

Eingeordnet in Theorie und Schnipsel | Keine Kommentare »

Dynamische Mailsignaturen in Apple 10.7 (Lion)

Geschrieben von skaldrom am 13. October 2011

Dynamisches MailWie man in verschiedenen, schon geschriebenen Blogeinträgen sehen kann, ist es mir ein Anliegen, die Welt mit etwas Dynamik zu versehen, zumindest was Mailsignaturen betrifft. Ja, auch in Mac OSX ist das möglich!

Von Haus aus bringt OSX keine Möglichkeit mehr mit, dynamische Signaturen zu erstellen. Entweder, weil es so gedacht war, weil diese Funktion in die Cloud ausgelagert wurde :) oder wegen eines Bugs. Ich habe so ziemlich alles durchprobiert, was dieser Artikel über fortunes und andere Websites beschrieben haben, doch leider läuft es nicht – oder nicht mehr – so.

Erkenntnisse:

  • AppleScripts möchten nicht einfach so mit Tastaturkürzeln versehen werden.
  • Das AppleScript Utility gibt es nicht mehr. Um AppleScripts zu aktivieren muss der AppleScript-Editor geöffnet werden und das Skriptmenü in den Einstellungen aktiviert werden (siehe Abbildung).

Skript-Menü im neuen AppleScript-Editor

Will man doch mittels fortune dynamische Signaturen erzeugen, muss man wie Folgt vorgehen:

  1. Zuerst braucht man fortune. Dies kann man sich beispielsweise per MacPorts beschaffen. Damit MacPorts läuft, muss XCode vom AppStore installiert werden.
  2. Dann sollte man sich eine Zitatsammlung bereit legen, wie im Blogeintrag zu dynamischen Signaturen beschrieben.
  3. Dann muss man den Automator starten und einen neuen Service erstellen.
  4. Grundeinstellung: “Dienst empfängt keine Eingabe in Mail.app
  5. Als Aktion AppleScript ausführen suchen und einfügen.
  6. Das AppleScript:
    on run {input, parameters}
       
        tell application "Mail"
            activate
            make new outgoing message with properties ¬
                {content:do shell script "/Users/linux/Documents/sigs/psignature-mac", visible:true}
        end tell
        return input
    end run

    Natürlich muss der Pfad angepasst werden. psignature-mac ist ein Script mit folgendem Inhalt:

    #! /bin/bash
    echo "  Viele Grüsse"
    echo "     Skaldrom"
    echo "-=-=-=-=-=-=-=-=-"
    /opt/local/bin/fortune `dirname "$0"`/quotes/shorties

    Dann alles speichern und einen Kaffee trinken oder Kekse backen gehen.

  7. Um den Tastaturkürzel festzulegen, muss die Systemeinstellungen geöffnet werden. Dort auf TastaturTastaturkurzbefehle gehen. Der Dienst sollte irgendwo erscheinen und ein Klick auf den leeren Platz rechts davon ermöglicht es, einen Tastaturkurzbefehl einzugeben.
  8. Mail öffnen, Tastaturkurzbefehl (ja, ich mag dieses Wort) drücken und sich freuen.

Es gibt auch eine Lösung für existierende Mails:

on run {input, parameters}
   
    tell application "Mail"
        activate
        get do shell script "/Users/linux/Documents/sigs/psignature-mac"
        copy return & the result ¬
            to theFortune
       
        tell application "System Events"
            tell process "Mail"
                keystroke theFortune
            end tell
        end tell
    end tell
    return input
end run

Eingeordnet in Applikationen, Theorie und Schnipsel | Keine Kommentare »

Klauen ist auch nicht mehr wie früher…

Geschrieben von skaldrom am 2. June 2011

Das Arsenal an Geräten, die ein durchschnittlicher Geek heutzutage mit sich herumschleppt, hat bald den Gegenwert eines kleinen Autos. Wenn früher ein Rucksack geklaut wurde (oder, hmm, ehrlich gesagt, zerstreut wie immer “irgendwo liegen gelassen” wurde), dann war der Rucksack selbst oftmals das teuerste Ding des ganzen Verlustes. Heutzutage – mit Laptop, Pad, Phone, … – geht ein ganzer Serverraum verloren. Meine Wenigkeit ist so was von Monotasking, dass ich oftmals mit atmen, laufen, verdauen und transpirieren schon an die Grenze komme (darum spreche ich so wenig, weil dann mein Herz aussetzen würde!), wie soll ich dann noch an die 1001 Geräte denken, die ich irgendwie zusammen wischen und mitnehmen sollte? Da ich körperlich auch nicht unbedingt einem Standard-Hulk entspreche, muss ich wohl gegen Diebstahl andere Massnahmen ergreifen.

Vorsorge ist besser als Heulen und Therapie im Nachhinein, darum habe ich jetzt, wo alle Geräte noch um mich herum sind, ein paar Dinge überlegt. Ich kann das nicht genug gewichten: Man sollte etwas tun, bevor die Geräte weg sind.

Lesen Sie den Rest des Beitrags »

Eingeordnet in Desktop, Web | 1 Kommentar »

Experimentelle Analysen von PHP Code für Enthusiasten

Geschrieben von skaldrom am 7. March 2011

Während ich im vorhergehenden Artikel die “Standardtools” für die Analyse von PHP verwendet habe, möchte ich hier einen Schritt weitergehen. Wenn ich schon meine Programme analysieren lasse, dann richtig :)! Darum hier ein paar nicht-standard Analysetools für PHP, die ich als eher experimentell bezeichnen würde:

  • doxygen
  • phuml
  • php-lint
  • PHP Callgraph

Lesen Sie den Rest des Beitrags »

Eingeordnet in Theorie und Schnipsel | 2 Kommentare »

PHP Code-Analyse mit Ant

Geschrieben von skaldrom am 2. March 2011

Graph LeadIch mag Code. Nicht jeden natürlich, “Douchebag” Code nervt, Code der aussieht wie ein schreiender Quasimodo oder Code der von einem Dr. Frankenstein in Ausbildung erstellt wurde sind bemitleidenswert und sehr viel Code stinkt. Code, der gefällt (wie beispielsweise der von Frigidor) ist clever ohne zu bluffen, kurz aber nicht kryptisch, tut etwas, ist lesbar und hat einige Wows drin.

Diese Bewunderung sollte in Zahlen gefasst werden: mit Statistiken, Diagrammen, Balken und Graphen. Dies dient zur Vorbereitung der “Continuous Integration” mit Jenkins/Hudson, die in dieser Serie behandelt wird. Als Quellen haben vor allem jenkins-php und ein äusserst Lesbarer Artikel im Entwickler Magazin 01/11 gedient.

Hier wird nun gezeigt, wie mit einem Befehl:

  • Die Unittests durchführt.
  • Qualitative Softwaremetriken mit PHP Depend misst: Hierarchietiefe, Komplexität, …
  • Unschöne Teile mit PHPMD identifiziert.
  • Copy-Paste-Verbrecher aufspührt mit phpcpd.
  • Den Coding-Style prüft mit dem PHP Code Sniffer.
  • Quantitative Softwaremetriken mit phploc misst.
  • Die PHPDoc-Doku erstellt.
  • Die Resultate mit dem PHP Code Browser schön darstellt.

Lesen Sie den Rest des Beitrags »

Eingeordnet in Theorie und Schnipsel | 3 Kommentare »

Ich weiss (nicht mehr) ob Du im Facebook bist…

Geschrieben von skaldrom am 24. January 2011

Update 27.01.2011: *übel_fluch*! Facebook hat ein Captcha eingebaut, dass diese Detection momentan nicht mehr funktionieren lässt. Das Prinzip bleibt ok, die Realisierung brauchte nun etwas mehr Zeit.

Big BrotherEigentlich hätte ich ja ganz Anderes zu tun, aber per Zufall bin ich über den genialen Blogartikel von Mike Cardwell gestolpert. Er hat eine Idee gehabt, wie es möglich wird herauszufinden, ob Benutzer auf Facebook und Konsorten eingeloggt sind oder nicht.

Umgesetzt in eine kleine Library läuft es als Proof-of-Concept auf Firefox und sieht folgendermassen aus:

Loggen Sie in Gmail, Facebook, Twitter oder Digg ein um Resultate zu sehen.
Sind Sie nicht abgelenkt?

Neuer Check

Grundsätzlich wäre es ja ganz einfach: Man schaut vom Client-Browser aus, ob man Zugriff auf Bilder oder Seiten hat, die nur für Eingeloggte zur Verfügung stehen. Leider gestaltet sich dieser simple Ansatz nicht so einfach, weil mit Ajax nur zur Domain der Website verbunden werden darf und nicht an einen x-beliebigen Ort. Ein Proxy hilft auch nicht weiter, da es die Cookies des Browsers braucht, und die werden nur an Facebook, etc direkt abgeliefert.

Wie kann man also diese Restriktion umgehen?

Lesen Sie den Rest des Beitrags »

Eingeordnet in Webapplikationen | 9 Kommentare »

Der UPnP Medienserver mit dem “Wow”

Geschrieben von skaldrom am 24. December 2010

Während Andere von ihren Liebsten eine Kravatte geschenkt bekommen, habe ich heute eine Playstation 3 vom Kristkind erhalten *freu*. Ein unglaubliches Teil, das mich schon voll in den Bann gezogen hat. Das Gamen damit ist psychisch: Man schwankt zwischen “Wow, ist das realistisch”, einem epileptischen Anfall und einem Amoklauf. Auf jeden Fall habe ich alle meine Pendenzen ein paar Tage nach hinten verschoben.

Die PS3 kann auch als UPnP-Client dienen und Filmchen, etc streamen. Über das Problem habe ich schon mal geschrieben. Auch hier ist man eingeschränkt mit den Formaten und das Pladden hin- und hertragen geht auf den Senkel. Ausserdem sind die HD-Filmchen auf Grund ihrer Grösse nicht mehr auf die Festplatte zu kriegen und das MKV-Format ist gar konvertierunfreundlich.

Per Zufall bin ich nun auf einen Medienserver gestossen, der on-the-fly konvertiert und die Filmchen nicht nur auf die PS3 streamt, sondern auch den Sony Bravia bedienen kann: Der PS3 Mediaserver. Kein Gekonfiguriere, kein Decodergewurschtel, kein Bittebitte: Starten und er läuft. Auf dem Bild sieht man sogar, dass er alle meine anderen Gerätchen auch aufführt. Der “Unknown Renderer” ist übrigens mein Archos 101, der ebenfalls ganz willig die Filmchen abspielt, überall im Haus. Einfach genial!

So, ich muss jetzt was kuckn gehn und die Zeit, die ich durch das nicht-Transcoden gespart habe sinnvoll einsetzen :)…

Eingeordnet in Hardware, Linux | 6 Kommentare »

Swisscom Labs mit (beta) Apps und Technik-Infos

Geschrieben von skaldrom am 19. December 2010

swisscom logo[Trigami-Review]
Wie klingt das: “Eine Schweizer Website für Technikaffine mit News, der Möglichkeit als “Early Adopter” Services, Apps und Neues zu testen, Erfahrungen auszutauschen sowie eine Plattform für Entwickler.”? Passt doch wie die Faust aufs Auge! Und dahinter steht niemand geringerer als die Swisscom selbst: Sie hat die Swisscom Labs ins Leben gerufen. Beim Schmökern merkt man, dass die Site noch neu ist, aber mit sehr viel Enthusiasmus und Aufwand gefördert wird. Mit Wettbewerben, Aktionen wie “Ask the CEO” und verschiedenen Events wird das Community-Building vorangetrieben. Das lasse ich mir als “Zielpublikum” natürlich gerne gefallen.

Was gibts auf den Swisscon Labs?

News

Die News, die auf der Site präsentiert werden, sind zum Einen aus der vordersten Front (Beispielsweise “Ein gebogener Multi-Touch-Arbeitstisch“), geekig (“Antikes mit «Lego Technic» nachgebaut“) oder aus dem Hause Swisscom selbst (wie “Swisscom und ICTnet prämieren beste Diplomarbeit im ICT-Bereich“). Alles in Allem eine gute und interessante Mischung von Themen, die in einem angenehmen Rhythmus publiziert werden.

Apps

DAS könnte spannend werden: Ein interessantes Sammelsurium aus Android, I-Phone und Web-Applikationen. Hier finden sich Apps von Swisscom und auch von anderen Anbietern. Einige der Apps sind gebrauchsfertig, andere wiederum sind eher Betas. Laut FAQ könnte man hier auch eigene Entwicklungen publizieren, wenn sie gewissen Anforderungen genügen. Diese App-Abteilung hat das Potential, ein Platz für lokale/nationale Applikationen zu werden, die in erster Linie die Schweiz betreffen. In den Markets findet man diese sonst leider eher schlecht, weil sie in der Masse untergehen. Ich glaube nicht, dass die Swisscom einen eigenen, ausgewachsenen App-Market hochziehen möchte, aber vielleicht erhält sie auf diese Art und Weise befruchtende Ideen oder Apps, die das Netz ausnutzen….

Forum

Ein Forum zum Laufen zu kriegen – vorallem wenn die Inhalte nicht sehr kontrovers sind – ist schwer. Die Swisscom hat hier richtig gehandelt und ein einzelnes Forum (ohne Unterthemen) aufgeschaltet. Ich schätze den freundlichen und höflichen Umgangston der in diesem Forum herrscht sehr. Ein sehr angenehmer Gegensatz zu anderen Fach-Plattformen.

Technisch ist es etwas verwunderlich, dass die Links im Forum nicht mit “nofollow” gekennzeichnet werden. Einige Spammer haben bereits Witterung aufgenommen. Ich bin aber fest davon überzeugt, dass die Admins das bald im Griff haben werden.
Lesen Sie den Rest des Beitrags »

Eingeordnet in Web | Keine Kommentare »

Mehr Glück als Verstand: Der Linux-Magazin Wettbewerb ist ausgefochten

Geschrieben von skaldrom am 14. December 2010

Viele haben nicht mehr daran geglaubt, aber der Wettbewerb des Linuxmagazins ist durchgeführt worden: Im neusten Heft (01/11) sind die Gewinner abgedruckt. Siehe da, ich habs als einziger PHP-Frickler in die Top-20 geschafft:

Das gute an Programmierwettbewerben ist, dass man mit einer solchen Rangierung für die Zukunft ausgesorgt hat: Reichtum, Jugend, Schönheit, Wein, willige Weiber und einen offiziellen Schutz vor Alterskurzsichtigkeit sind das Minimum das es zu gewinnen gab. Ähhm, nein, sorry, ich hab da was verwechselt.

Auf jeden Fall: Heeeeeeeeeeerzliche Gratulation den Gewinnern! Gut gemacht! Die Turnierergebnisse und Bots sollen laut Heft alsbald downgeloaded werden können. Ganz im Sinne der Durchführung ist aber bis Dato noch nichts sichtbar. Ich werde sicher analysieren, warum der Frigidor nicht weheheit vor mir liegt. Unter uns gesagt, ist er nämlich viel der bessere Programmierer (der liebe Gott hat mir dafür eine grosse Klappe geschenkt).

Lesen Sie den Rest des Beitrags »

Eingeordnet in Uncategorized | Keine Kommentare »