Dienstag, 3. Februar 2015

JSON mimeType in WebMatrix (IIS-Express)

Ich arbeite in letzter Zeit viel mit der WebMatrix.
Zu test-Zwecken verwende ich gerne ajax-Requeste, die lokal abgelegte json-Daten abrufen anstatt einer echten API.
Der Zugriff auf eine solche json-Datei schlägt (standardmäßig) fehl, mit der Meldung:
HTTP-Fehler 404.3 - Not Found
und der Erklärung:
Die angeforderte Seite kann aufgrund einer Konfigurationserweiterung nicht angezeigt werden. Wenn es sich bei der Seite um ein Skript handelt, müssen Sie einen Handler hinzufügen. Wenn die Datei heruntergeladen werden soll, müssen Sie eine MIME-Zuordnung hinzufügen.

Um die genannte MIME-Zuordnug dem Projekt hinzuzufügen erstellt man eine Web.config im Wurzelverzeichnis des Projektes mit folgendem Inhalt:

<?xml version="1.0"?>

<configuration>
    <system.webServer>
        <staticContent>
            <mimeMap fileExtension=".json" mimeType="application/json" />
        </staticContent>
    </system.webServer>
</configuration>

Anschließend werden vom IIS-Express (den die WebMatrix startet) auch json-Files korrekt ausgeliefert.

JavaScript Countdown mit jQuery

Folgende Fragestellung:
Wie kann man auf einer Seite mehrere Datums-Conuntdowns mit JavaScript realisieren, die unabhängig von einander laufen und gleichzeitig nicht komplett auf dem (möglicherweise falsch gesetztem) Client-Datum basieren?
Als Idee/Grundlage wurde http://trulycode.com/bytes/easy-countdown-to-date-with-javascript-jquery/ genannt.

Nach kurzer Prüfung habe ich den Code für unstrukturiert (und ungeeignete als Grundlage) befunden. Die Idee dies als jQuery-Plugin zu realisieren halte ich aber für gut.

Mein erster Wurf benötigt sicher noch diverse Überprüfungen und ist auch nicht 100% getestet aber ich denke auf jeden Fall schon besser als die "Vorlage".

(Angucken und ausprobieren bei Codepen!)

(function($){
  $.fn.countdown = function(from, to, config){
    var localDate = new Date(),
        loop = function() { 
          var currentDate = new Date(),
              localDiff = currentDate.getTime() - localDate.getTime(),
              param = {
                current: new Date(from),
                target: new Date(to),
              };
          param.current.setTime(param.current.getTime() + localDiff);
          param.millis = param.target.getTime() - param.current.getTime();
          param.days = Math.floor(param.millis / 86400000);
          param.millis -= param.days * 86400000;
          param.hours = Math.floor(param.millis / 3600000);
          param.millis -= param.hours * 3600000;
          param.minutes = Math.floor(param.millis / 60000);
          param.millis -= param.minutes * 60000;
          param.seconds = Math.floor(param.millis / 1000);
          param.millis -= param.seconds * 1000;
          
          // Abbruch oder weiter..
          if(param.current.getTime() >= param.target.getTime()) {
            // callback rufen und abbruch
            config.callback.call(this, param);
          } else {
            // text setzen und weiter
            config.printDate.call(this, param);
            window.setTimeout(loop.bind(this), config.timeout);
          }
    };
    // config sicher stellen
    if(!config) {
      config = {};
    }
    if(!config.printDate) {
      config.printDate = function(x) {
        $(this).text(x.days + "d " + x.hours + "h " + x.minutes + "m " + x.seconds+ "s " + x.millis);
      };
    }
    if(!config.callback) {
      config.callback=function(){};
    }
    if(!config.timeout) {
      config.timeout=1000;
    }
    loop.call(this);
    return this;
  };
})(jQuery);

Montag, 15. September 2014

Nützliche online-Tools

Ich bin ja ein großer Freund von online-schnell-testen-und-auch-teilen á la http://jsfiddle.net/ und http://codepen.io/

Letztens bin ich über http://ideone.com/ gefallen - auch sehr cool.

Gerade eben habe ich http://regexr.com/ gefunden - mit kleinen Erklärungen und nützlichen Tooltips. Genial.
Für Regular Expressions in C# auch nett: .NET Regular Expression Evaluator - der kommt sogar mit einer passenden Visual Studio Extension daher.

Donnerstag, 19. Juni 2014

TFS-Branch im Workspace auf "nicht heruntergeladen" zurück setzen

Aus versehen habe ich gerade eben im TFS einen falschen Branch herunter gladen.
Eigentlich habe ich pro Workspace immer nur einen Branch in Verwendung!

Diesen kleinen Fehler rückgängig zu machen war nicht ganz intuitiv - den Ordner im Verzeichnis einfach zu löschen ist keine gute Idee, denn dann würde VisualStudio versuchen diesen auch im TFS zu löschen.

Die Lösung ist auf das ChangeSet Nr. 1 zurück zu stellen:

Danach wird der Ordner wieder als "nicht heruntergeladen" angezeigt:

Dienstag, 10. Juni 2014

KDiff3 als Vergleichs/Zusammenführungs-Tool im Visual Studio

Gerade musste ich (mal wieder) KDiff3 manuell im Visual Studio einrichten. Anleitungen gibt es ja viele - ich verwende als Basis immer die Anleitung von Joao@iLab8.
Allerdings mag ich es nicht, wenn KDiff sich öffnet und mir dann sagt dass es keine Konflikte gab - daher verwende ich den "--auto"-Parameter in der Merge-Konfiguration.

Schnelldurchlauf:
Visual Studio > Tools > Options > Source Control > Visual Studio Team Foundation Server > Configure User Tools.

Compare:

Compare-Options
Compare-Arguments: %1 -fname %6 %2 -fname %7

Merge:


Merge-Arguments: -auto %3 -fname %8 %2 -fname %7 %1 -fname %6 -o %4

Donnerstag, 5. Juni 2014

Massen-Umbenennung von Dateien mit PowerShell

Die Aufgabe des Tages: In einer Ordnerstruktur befinden sich mehrere Dateien. Die Meisten haben einen Namen wie "102_EinBild.png". Bei allen Dateien deren Zahl-Präfixe im 100'er-Bereich liegen soll der Präfix entfernt werden. Glücklicher Weise gibt es keine Präfixe unter 100 und auch sonst beginnt keine Datei mit einer "1"...

> Get-ChildItem -Recurse | where { $_.Name -Match "^1" } | Rename-Item -NewName { $_.Name.Substring(4) }

PowerShell ist so cool!

Dienstag, 9. April 2013

Kanban oder SharePoint?

Für meine privaten Planung o.ä. (auch für Todo-Listen) nutze ich seit einiger Zeit KanbanFlow.
Für ein aktuelles Projekt beim Kunden wollte ich ein ähnliches Vorgehen - dies sollte allerdings im  im SharePoint Abgebildet werden...
Bei Daniel Root habe ich eine nette und einfache Lösung für ein Kanban-Board in SharePoint gefunden. Diese habe ich angewendet und bin total begeistert. Kategorien für die Tasks mit Farben (ähnlich KanbanFlow) wäre noch nett, aber ich teste das erst einmal so.