Mein Timetracker

An der Uni habe ich ja nun einen Hiwi-Job, und da sollte man natürlich die Stunden aufschreiben, die mal so arbeitet. Seit ich vor zwei Monaten dort angefangen habe, hatte ich vor, mir dafür ein „kleines“ PHP-Script zu schreiben, damit sich von jedem Rechner aus meine Stunden aufschreiben kann. Nun ist das ganze fertig, und ich finde, es ist gar nicht so schlecht geworden:

Das meiste sind natürlich fertige Sachen, im Hintergrund ist jede Menge jQuery, die Tabelle ist ein jQuery Plugin, Der Datumswähler und der Button unten stammt aus jQuery UI. Das ganze läuft über PHP und MySQL, und ist schön „ajaxifisiert“, sprich kein Neuladen der Seite 😉

Weiterlesen

.NET Tipps 4: Test auf mehrere Werte

Naja, so richtig ist meine „Serie“ nicht in Fahrt gekommen… Der letzte Teil ist auch schon wieder etwas her 😉

Diesmal geht es um etwas, das mich immer richtig nervt: Ab und zu muss man einen Wert auf jede Menge Möglichkeiten testen. Doch dummerweise muss man den Wert immer wieder hinschreiben:

if(meinTollerWert == "mglk1" || meinTollerWert == "mglk2" ||meinTollerWert == "mglk3")
{
MessageBox.Show("1,2 oder 3!");
}

Ziemlich nervig sowas…

Doch es geht einfacher, wie mir vor kurzem aufgefallen ist, den implizit typisierten Arrays sei Dank:

if(new[] {"mglk1", "mglk2", "mglk3" }.Contains(meinTollerWert))
{
MessageBox.Show("1,2 oder 3!");
}

Weiterlesen

Aprilscherz: Post-mortem

Ja, schon wieder ein dummer Titel, ich weiß…

Nach dem ja nun wohl jeder begriffen hat, das mein letzter Post ein Aprilscherz war, interessiert den einen oder anderen ja vielleicht auch die Technik dahinter. Die ist nämlich ziemlich interessant.

Die erste Frage war, wie komme ich an die Posts meines Blogs. Als erstes hatte ich überlegt einfach die letzten fünf fest in die Seite einzubauen, aber das fand ich dann doch langweilig. Dann erinnerte ich mich daran, das ich mal etwas über die wp-load-php gelesen hatte. Wenn man diese Datei in ein PHP-Script einbaut, wird WordPress komplett geladen, aber ohne eine Ausgabe zu erzeugen. Jetzt kann man quasi ein WordPress Theme nachbauen. Der folgende Code steckt hinter der Seite:

Weiterlesen

Dropbox-Backup ohne Client

Der offizielle Dropbox Client unter Linux hat ja ein paar kleine Speicherprobleme (und auch andere Probleme), daher hab ich mich nach einer anderen Lösung umgesehen, meine Backups in die Dropbox zu schieben. Den ersten Ansatz habe ich auf der Seite von Andrea Fabrizi gefunden: Dort gibt es ein Script, mit dem Uploads in die Dropbox auch ohne Client möglich sind.

Das Script lädt die Datei mit cURL über die offzielle Website hoch. Nicht wirklich eine saubere Lösung, funktioniert aber perfekt. Naja, fast: Über die Website sind nur Uploads bis 150MB möglich, meine Backup-Zips sind aber inzwischen schon 188MB groß (ich blogge zu viel ;)). Daher habe ich mir ein kleines Script gebastelt, das die Dateien durchgeht, und alle die größer als 100MB sind, mit Hilfe von split in Teile á 100MB schneidet. Dabei wird dann einfach ein fortlaufender Buchstabe an den Dateinamen angehängt. Dazu habe ich das Upload Script noch so modifiziert, das es Dateien, die größer als 100MB sind, gar nicht erst hoch lädt (da sie eh nicht verarbeitet werden).

Weiterlesen

Warnung vor func_instance_origin

Nur ein kleiner Tipp für alle Portal 2 Mapper, die mit Hammer (dem Editor) eigene Instances bauen wollen: Laut dem Wiki soll man ein func_instance_origin benutzen, um die Mitte der Instance anzugeben. Offensichtlich beachtet aber entweder Hammer oder VBSP (der Compiler), das Ding nicht richtig, wodurch die Instance im Spiel dann gegenüber der Anzeige in Hammer verschoben ist. Kann ziemlich nervig sein 😉

Lösung: Einfach alle so verschieben, dass der Koordinatenursprung in der Instance da ist, wo man ihn haben will…

DynamicLua

So, ich denke es ist Zeit, die Katze aus dem Sack zu lassen, und mein neues Projekt vorzustellen: DynamicLua

Kurz ein paar Worte zum Hintergrund: Mit .NET 4.0 wurde die sog. Dynamic Language Runtime (DLR) eingeführt. Die dient zum einen dazu, es Entwicklern einfacher zu machen, neue Sprache auf .NET Basis zu entwickeln (wie IronPython/IronRuby), hat aber auch ein paar tolle andere Features zu bieten. Eines davon ist das neue Schlüsselwort „dynamic“. Es funktioniert ähnlich wie „var“ kann also jeden Typ annehmen. Wenn man darin aber ein Objekt speichert, das von System.Dynamic.DynamicObject abgeleitet ist, kann man bestimmen was passiert, wenn etwas „nicht erlaubtes“ passiert, also wenn z.B. eine Methode aufgerufen wird, die es gar nicht gibt. Solche Aufrufe landen dann bei der Methode TryInvokeMember, und die kann dann entscheiden, was passieren soll.

Dieses Konzept habe ich jetzt genutzt, um einen Wrapper für das LuaInterface zu schreiben. Das Lua Interface ist eine Library für .NET, die es erlaubt, Lua in C# zu benutzen. Dabei kümmert sie sich auch darum, .NET Objekte in Lua abzubilden und vieles mehr. Diese Library ist wirklich unglaublich, man denkt wirklich, Lua hätte was mit Objekten am Hut.

Weiterlesen

Fischertecknik mit C# steuern

Im Zuge eines Schulprojektes muss ich mit einem PC die Spannungswerte eines Helligkeitssensors aufzeichnen. Also brauche ich in irgendeiner Form eine Messkarte mit Verbindung zum PC. Meine erste Idee war das mein altes Fischertechnik ROBO-Interface, dass mir früher immer treue Dienste geleistet hat. Natürlich wollte ich es jetzt nicht in ROBO-Pro programmieren, der grafischen Sprache von Fischertechnik (auch wenn die wirklich gut ist!), denn die hat keine Möglichkeit Daten auf dem PC dauerhaft zu speichern.

Also habe ich mich mal etwas im Netz umgesehen, und bin auf der Seite von Ulrich Müller gelandet, der sich die Mühe gemacht hat, allen möglichen Sprachen Bibliotheken zu schreiben. So gibt es auch ein in C#. Leider ist die Benutzung grade mit Windows 7 etwas kompliziert, daher will ich hier mal kurz erklären, wie es funktioniert. An dieser Stelle noch mal einen Dank an Ulrich Müller, der mit per Mail weiter geholfen hat.

Weiterlesen

Spiel den Profi Coder! [Update]

Uhh… Schon wieder langen nichts geschrieben. Ich habe wirklich zu viel zu tun 😉

Naja, etwas kleines neues gibt es doch: Ein Freund fragte mich, ob ich noch diese Website kenne, wo man beliebigen Text eingeben kann, und er dann zum Linux Quelltext würde. Scheinbar hat er das was verwechselt, ich kann mich jedenfalls nicht daran erinnern eine solche Seite gekannt zu haben 😯

Jedenfalls hat er mich auf die Idee gebracht sowas mal zu programmieren, und das ist dabei herausgekommen:

Geht einfach auf diese Website, und zeigt allen, dass ihr den Linux Kernel aus dem Kopf schreiben könnt:

Update: Neue Version: Be a Pro Coder/Hacker

Be a Linux Coder/Hacker

Weiterlesen

Zufälliges Wort mit .NET

Für eine kleine Spielidee brauchte ich ein rein zufälliges Wort. Klingt im ersten Moment etwas trivial, doch woher soll man die Wörter nehmen? Es geht nicht um zufällige Buchstabenkombinationen, sondern um sinnvolle Wörter, am besten Substantive.

Die Lösung war dann das Wikitionary: Das hat, wie jedes auf MediaWiki basierendes Wiki eine API. Dort kann man zwar auch eine zufällige Seite (=Wort) abrufen, aber eben nicht aus einer bestimmten Kategorie. Ich wollte nun aber nur deutsche Substantive. Durch etwas rumsurfen bin dann auch folgende Lösung gekommen:

Weiterlesen

Freien Speicher mit Munin überwachen

So, zurück aus dem Urlaub, da kann es ja weitergehen mit dem bloggen 😉

Wer Munin zum überwachen seine(r/s) Server(s) benutzt (wie ich) kennt wahrscheinlich auch den Graph, der die Speicherauslastung anzeigt. Der sieht ungefähr so aus:

Aber ganz ehrlich: Ich steige da nicht durch… Zum einen ist der Graph blöd skaliert (ich habe nur 200MB RAM, aber er geht bis 25GB), und man kann auch nicht wirklich erkennen, ob man nun noch Speicher hat oder nicht.

Also dachte ich mir, bauen ich doch mein altes Skript etwas um, und integriere es in Munin. Das ist gar nicht schwer, denn es gibt natürlich eine passende Anleitung.

Weiterlesen