Biggle's Blog

Web- und Software Development

by Mario Binder

Mit MS Word 2013 bloggen

Ist das die Ablösung von dem guten alten Windows Live Writer?

Dieser Artikel wurde über die Blogintegration in MS Word 2013 erstellt. Ich wusste nicht mal, dass das funktioniert. Ich habe heute erst davon erfahren : )

by Mario Binder

Halte Deine Inbox sauber – Oder Anmeldungen organisieren & Spam vermeiden

Wer den einen oder andere Service, wie ebay, amazon, goodreads,… konsumiert, muss sich stets und überall neu registrieren. Dies führt dazu, dass man überall seine Emailadresse angeben muss. Selbst dann, wenn einem angeboten wird, sich über OpenId zu registrieren.

Macht man das über einen längeren Zeitraum, verliert man schnell die Übersicht und es kann mit den Jahren zu einem hohen Spamaufkommen führen.

Wie kann ich dem nun entgegenwirken?

Ich habe meine primäre Emailadresse zu einer Catchall-Adresse konfiguriert, was bedeutet, dass ich jeden beliebigen Präfix in meiner Emailadresse verwenden kann. Die Mails werden dann an die Catchall-Adresse weitergeleitet. Also das primäre Postfach bleibt somit bestehen und man muss nicht für jeden Service eine Postfach einrichten.

Wenn ich mich jetzt bei einem neuen Anbieter registriere, verwende ich den Servicenamen als Präfix. Beispielsweise: goodreads@domain.com, ebay@domain.com, oder amazon@domain.com.

Wenn man nun einen Service nicht mehr nutzten möchte, kann man versuchen sich dort abzumelden oder sein Konto zu löschen. Nicht alle jedoch, bieten einem diese Option an. Aber auch dann, wenn ich meinen Account löschen kann, bin ich in der Lage zurückzuverfolgen, wer denn vielleicht meine Emailadresse an Dritte weitergegeben hat und was weiß ich, was der Anbieter im Nachhinein noch so mit meinen Daten so anstellt.

Inbox bleibt sauber

In diesem Fall bin ich dann gut vorbereitet. Ich kann gezielt, einen Filter auf diesen Präfix definieren, der diese Mails entweder löscht oder in einen Spamordner verschiebt.

zljmh0vz.s5o

Wer seine Mails sortiert, kann über diese Methodik auch seine Email organisieren und die Filter entsprechend anpassen und die Mails in den dafür erstellten Ordner verschieben.

Wie organisierst du deine Emailflut? Kannst du den einen oder anderen Tipp noch dazusteuern? Dann immer rein damit in die Kommentare : )

by Mario Binder

TheOldReader in den Chrome RSS-Abonnement-Optionen

Ja, es war in aller Munde und nein ich werde nicht mehr darauf eingehen, denn auch ich war mächtig angepisst, dass es den Google Reader nicht mehr geben wird. Absolut kein Verständnis für das Einstellen des Service.

Nun denn, auf der Suche nach einer Alternative kam mir der eine oder andere, neue oder auch alte Feed-Reader unter die Finger. TheOldReader kam mir bei der Auswahl irgendwie am sympathischsten vor.

Nach anfänglichen Import-Schwierigkeiten kann ich TheOldReader jetzt endlich nutzen. Um den einen oder anderen Feed “einzufangen”, nutze ich die Chrome Extension “RSS Subscription Extension”.

image

In den Einstellungen wurde der Google Reader schnell aus der Liste der möglichen Feed-Reader durch Google entfernt.

image

Um an dieser Stelle nun den TheOldReader einzubinden, muss ich einen neuen Eintrag mit der URL “http://theoldreader.com/feeds/subscribe?url=%s” erstellen.

image

Danach steht mir diese Option nun zur Verfügung, neue Feeds zu abonnieren.

image

Wie sieht es bei dir aus, welche Reader nutzt du? Kannst du Empfehlungen aussprechen und was gefällt dir an deiner Wahl? Rein damit in die Kommentare, ich bin neugierig : )

by Mario Binder

Neues Design, neue Kommentarfunktion und was noch so kommt im nächsten Jahr

Ich wollte mich mal wieder zu Wort melden. Nicht das ihr denkt, dass ich mein Blog verweisen lasse :-)

Mit einem neuem, aufgeräumten und responsive reaktionsfähigem Design und Disqus als neue Kommentarfunktion geht es gewappnet in das kommende Jahr. Also, was wird 2013 hier in meinem Blog passieren?

Privates Zeuch

Im privaten Bereich, ist das erste viertel Jahr schon gut verplant. Im Januar werde ich meinen 40. Geburtstag feiern (“NullAgeException”) und im Februar dann, werde ich meine Prüfung zum Ausbilder bei der IHK-Berlin absolvieren und hoffentlich bestehen. Wer etwas über den Ablauf der Ausbildung für Ausbilder erfahren möchte, wird dies hier einem ausführlichen Artikel erfahren.

Am 28.3. werde ich meine geliebte Prinzessin heiraten, mit der ich jetzt 13 Jahre zusammen lebe. Mal schauen, vielleicht schreibe ich auch darüber.

Weiterhin habe ich meinem Sohn versprochen, mit ihm mal in das Computerspielemuseum zu gehen, da freue ich mich drauf.

Gitarrenunterricht

In diesem Jahr habe ich angefangen mir selbst Gitarre beizubringen, nun bin ich an einem Punkt angelangt, wo ich doch einen Gitarrenlehrer benötige. Meinen Sohn habe ich bereits zum Gitarrenunterricht angemeldet, 2013 stoße ich zum Unterricht dazu.

Bewusster & gesünder Leben

Wer mich etwas länger kennt, der weiß dass ich früher mal den Beruf Koch gelernt und viele Jahre ausgeübt habe. Zu jener Zeit, war die Arbeit mit und am PC mein Hobby, welches ich ja mittlerweile zum Beruf machen konnte. Leider habe ich indessen das Kochen und auch meine Ernährung etwas vernachlässigt. Nun aber, werde ich das Kochen zu meinem neuen Hobby auserwählen und mich darin versuchen, uns hier daheim öfters und das auch gesund, zu bekochen.

Abnehmen

Ei, ei ei, das kommen wir auch zum nächsten Punkt. In einem Jahr habe ich doch so um die 10kg zugenommen. Sprich, hier muss was getan werden. Zumal ich im März ja auch in einen Anzug passen möchte : ) Also steht auch ein wenig abnehmen mit auf der Liste.

Entschleunigen

Die Uhr tickt, na und?! Mir doch egal. Ich gehe jetzt alles ein wenig ruhiger und bedachter an. Einfach auch mal das Antworten aussitzen. Manches soll sich auch so ganz von alleine erledigen, habe ich mir sagen lassen. Wie man sich so einiges erleichtern kann, mit welchen Tools man sich bei der täglichen Arbeit unterstützt, werde ich im kommenden Jahr zeigen.

 

Entwicklerkram

Am 7. Januar schon, geht’s gleich zu einem Termin bei der ALT.NET UG Berlin  zum Thema “MS Test der missverstandene Stiefbruder”. Hier wird uns Hendrik Lösch etwas über MS Test erzählen. Ich freu mich drauf : )

Im kommenden Jahr werde ich mich intensiv mit der Windows 8 und Windows Phone 8  Entwicklung beschäftigen und hoffentlich einer meiner Projekte umsetzen, die ich schon seit langem im Kopf habe.

Ich habe hier auch noch ein Raspberry Pi rumliegen, welches mal Verwendung finden sollte und auch der Kinect-Sensor will mal angetestet werden.

Im Oktober geht es dann natürlich wieder zum Developer Space in Leipzig, der Termin (18.10.-20.10.2013) steht ja schon fest. Wer rechtzeitig über die Registrierung informiert werden will, sollte auch alle Fälle den Newsletter abonnieren.

Mal schauen, ob noch die eine oder andere Konferenz dazukommen wird, geplant ist bisher noch nichts weiter.

 

Ansonsten, bleibe ich auch G+ weiterhin treu und hoffe, dass der eine oder andere  sich wieder dort hin zurück “verläuft”.

Was geht bei dir im kommenden Jahr, volles Programm, oder doch eher ganz auf ruhig?

by Mario Binder

Erste Schritte mit SignalR

SignalR ist eine von Microsoft entwickelte Client- und Server-Bibliothek. Besser beschreibt das Dino Esposito:

SignalR ist eine integrierte Client- und Server-Bibliothek, die browserbasierten Clients und ASP.NET-basierten Serverkomponenten die bidirektionale und mehrstufige Kommunikation ermöglicht.

Anders ausgedrückt ist die Kommunikation nicht auf einen einzelnen, statusfreien Datenaustausch des Typs Anforderung/Antwort beschränkt, sondern sie dauert an, bis sie ausdrücklich beendet wird. Die Kommunikation findet über eine dauerhafte Verbindung statt, wobei der Client mehrere Nachrichten an den Server senden kann, auf die der Server antwortet. Und vor allem kann der Server asynchrone Nachrichten an den Client senden.”

Ein einfacher Chat

image

Im folgenden, zeige ich wie immer kurz und knackig, ein absolut einfaches Beispiel für die Verwendung bzw. den Einsatz von SignalR.

1.) Mittels NuGet installieren wir SignalR:

Install-Package SignalR

Folgende Komponenten werden dabei installiert und referenziert:

  • Newtonsoft.Json 4.5.7.
  • SignalR.Server 0.5.2.
  • SignalR.Hosting.Common 0.5.2.
  • SignalR.Hosting.AspNet 0.5.2.
  • jQuery 1.6.4.
  • SignalR.Js 0.5.2.
  • SignalR 0.5.2.

2.) Anschließend schreiben wir eine Klasse, die von der Klasse SignalR.Hubs.Hub ableitet:

public class SimpleChatHub : Hub
{
    public void Send(string nickname,string message)
    {
        Clients.HandleMessage(string.Format("{0} wrotes on {2}: {1}", nickname, message, DateTime.Now.ToShortTimeString()));
    }
}

3.) Für das Anzeigen von Informationen referenzieren die notwendigen Scripte und erstellen uns ein paar Felder

(Hinweis: Um die Nachricht mittels Entertaste zu senden, verwende ich zur Hilfe das Plugin JQByte OnEnter.)

<script type="text/javascript" src='@Url.Content("~/Scripts/jquery.signalR-0.5.2.js")'></script>
<script type="text/javascript" src='@Url.Content("~/Scripts/jquery.OnEnter.js")'></script>
<script type="text/javascript" src="@Url.Content("/signalr/hubs")"></script>

<h3>Simple SignalR Chat:</h3>
<input type="text" id="nickname" />
<input type="text" id="msg" onenter="SendMessage();" />
<button id="sendBtn">Send</button>
<ul id='messages'></ul>

4.) In einem Script dann, starten wir unseren SimpleChatHub und handlen das Versenden der Nachrichten.

<script type="text/javascript">

    var hub;
    $(document).ready(function () {
        $('#nickname').val('').focus();

        ConnectingChatHub();
        hub.HandleMessage = function (message) {
            $('<li>').text(message).prependTo('#messages');
        };

        $('#sendBtn').click(function (){ SendMessage()});
    });


    function ConnectingChatHub() {
        hub = $.connection.simpleChatHub;
        $.connection.hub.start()
        .done(function () { })
        .fail(function () { alert("Could not Connect!") });
    }

    function SendMessage() {
        var nickname = $('#nickname').val();
        var msg = $('#msg').val();
        if (msg != '') {
            hub.send(nickname, msg);
            $('#msg').val('').focus();
        }
    }


</script>

Das war’s auch schon, viel Spaß beim entwickeln : )

Achja, am 03.09.2012 gibt es einen .NET Online User Group Termin zum Thema SignalR mit Christian Weyer.

by Mario Binder

Outlook als GTD Applikation

GTD steht für Getting Things Done und beschreibt Methodiken, seinen täglichen Aufgaben produktiv und effizient zu erledigen. Lesenswerte Artikel zum Thema GTD stehen am Ende des Tutorials.

Zieldefinition

Ziel ist es, im Outlook ein Dashboard bereit zu stellen, welches einem alle Aufgaben, den Posteingang, den Kalender, Notizen und die Kontakte anzeigt. Das Besondere dabei ist, das die Aufgaben in (agiler) Form eines Scrum/Kanban Boards angezeigt werden.

image

image

image

image

image

Features

  • Innerhalb der Aufgabenlisten die man hier im Screenshot sieht, kann man via Drag & Drop die Aufgabe von einer "Pane" in eine andere "Pane" verschieben. 
  • Neue Mails werden automatisch als neue Aufgabe in das Backlog kopiert.

    Taskordner anlegen.

    Zu Beginn müssen wir unserer "Panes" anlegen, das machen wir, indem unter Aufgaben die entsprechende Ordner erstellt werden. Dazu geht man unter Aufgaben mit der rechten Maustaste auf Vorgangsliste und wählt hier "Neuer Ordner". Dies macht man für alle Ordner die man benötigt. In meinem Fall sind das die folgende drei: backlog, in progress und done.

     2012-04-17_14h50_19

  • Dashboard erstellen

    Nachdem wir nun die Aufgaben-Ordner erstellt haben, sollen diese im Dashboard angezeigt werden. Dazu müssen wir vorerst das Dashboard erstellen:
    Hier legen wir uns eine *.html-Datei an einem beliebigen (sicheren) Ort ab. Ich erstelle dazu in meinem Entwicklungsordner einen Ordner namens "#OutlookToday ". Das Pfad müsste nun so aussehen:  "D:\Dev\#OutlookToday\OutlookToday.html".

    In dieser Datei, designen wir nun unser DashBoard.
    Die Elemente die wir im Dashboard anzeigen wollen, werden mittels Object-Element eingebunden, hier kann man über den Parameter "Folder" das  jeweilige Outlook-Element anzeigen.

    Für den Posteingang sieht das wie folgt aus:

    2012-04-17_14h17_19

    Man kann jeden beliebigen Ordner anhand des Namens angeben. z.B. auch den Ordner "Gesendete Elemente"

    2012-04-17_14h18_40

    Nun baut man sich mit ein paar Html/jQuery Kenntnissen ein Design zusammen und bindet die entsprechenden Object-elemente an den Stellen ein, wo man diese benötigt. Mein Beispiel sieht wie folgt aus:

    <html> <head> <title>Dashboard</title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js"></script> <style type="text/css"> a:active, a:focus { outline: none; ie-dummy: expression(this.hideFocus=true); } h1{ font: bold italic 2em/1em "Times New Roman", "MS Serif", "New York", serif; margin: 5; padding: 0; color: #cc3300; border-bottom: dotted #cc3300 thin; } .thirds{ width: 33%; float:left; } #tabbed_box_1 { margin: 0px auto 0px auto; width:100%; } .tabbed_area { border:1px solid #494e52; background-color:#636d76; padding:8px; } ul.tabs { margin:0px; padding:0px; margin-top:5px; margin-bottom:6px; } ul.tabs li { list-style:none; display:inline; } ul.tabs li a { background-color:#464c54; color:#ffebb5; padding:8px 14px 8px 14px; text-decoration:none; font-size:9px; font-family:Verdana, Arial, Helvetica, sans-serif; font-weight:bold; text-transform:uppercase; border:1px solid #464c54; background-image:url(images/tab_off.jpg); background-repeat:repeat-x; background-position:bottom; } ul.tabs li a:hover { background-color:#ffffff; color:#282e32; border:1px solid #464c54; border-bottom: 1px solid #ffffff; background-image:url(images/tab_on.jpg); background-repeat:repeat-x; background-position:top; } ul.tabs li a.active { background-color:#ffffff; color:#282e32; border:1px solid #464c54; border-bottom: 1px solid #ffffff; background-image:url(images/tab_on.jpg); background-repeat:repeat-x; background-position:top; } .content { background-color:#ffffff; height: 400px; border:1px solid #464c54; font-family:Arial, Helvetica, sans-serif; background-image:url(images/content_bottom.jpg); background-repeat:repeat-x; background-position:bottom; padding: 20px 0px 40px 0px; } #content_2, #content_3, #content_4, #content_5 { display:none; } .content ul { margin:0px; } .content ul li { list-style:none; border-bottom:1px solid #d6dde0; padding-top:15px; padding-bottom:15px; font-size:13px; } .content ul li:last-child { border-bottom:none; } .content ul li a { text-decoration:none; color:#3e4346; } .content ul li a small { color:#8b959c; font-size:9px; text-transform:uppercase; font-family:Verdana, Arial, Helvetica, sans-serif; position:relative; left:4px; top:0px; } .content ul li a:hover { color:#a59c83; } .content ul li a:hover small { color:#baae8e; } </style> </head> <body> <!-- TabControl http://d2o0t5hpnwv4c1.cloudfront.net/001_Tabbed/site/jQuery.html# --> <div id="tabbed_box_1" class="tabbed_box"> <div class="tabbed_area"> <ul class="tabs"> <li><a href="#" title="content_1" class="tab active">Board</a></li> <li><a href="#" title="content_2" class="tab">Inbox</a></li> <li><a href="#" title="content_3" class="tab">Appointments</a></li> <li><a href="#" title="content_4" class="tab">Notes</a></li> <li><a href="#" title="content_5" class="tab">Contacts</a></li> </ul> <div id="content_1" class="content"> <div class="thirds"> <h1>BACKLOG</h1> <OBJECT classid=CLSID:0006F063-0000-0000-C000-000000000046 id=ViewCtlFolder width=100% height=500> <param name="Folder" value="Aufgaben\backlog"> <param name="Namespace" value="MAPI"> <param name="Restriction" value=""><param name="DeferUpdate" value="0"> </OBJECT> </div> <div class="thirds"> <h1>PROGRESS</h1> <OBJECT classid=CLSID:0006F063-0000-0000-C000-000000000046 id=ViewCtlFolder width=100% height=500> <param name="Folder" value="Aufgaben\in progress"> <param name="Namespace" value="MAPI"> <param name="Restriction" value><param name="DeferUpdate" value="0"> </OBJECT> </div> <div class="thirds"> <h1>DONE</h1> <OBJECT classid=CLSID:0006F063-0000-0000-C000-000000000046 id=ViewCtlFolder width=100% height=500> <param name="Folder" value="Aufgaben\done"> <param name="Namespace" value="MAPI"> <param name="Restriction" value><param name="DeferUpdate" value="0"> </OBJECT> </div> </div> <div id="content_2" class="content"> <h1>Inbox</h1> <OBJECT classid=CLSID:0006F063-0000-0000-C000-000000000046 id=ViewCtlFolder width=100% height=500> <param name="Folder" value="Posteingang"> <param name="Namespace" value="MAPI"> <param name="Restriction" value> <param name="DeferUpdate" value="0"> </OBJECT> </div> <div id="content_3" class="content"> <h1>Appointments</h1> <OBJECT classid=CLSID:0006F063-0000-0000-C000-000000000046 id=ViewCtlFolder width=100% height=500> <param name="Folder" value="Kalender"> <param name="Namespace" value="MAPI"> <param name="Restriction" value> <param name="DeferUpdate" value="0"> </OBJECT> </div> <div id="content_4" class="content"> <h1>Notes</h1> <OBJECT classid=CLSID:0006F063-0000-0000-C000-000000000046 id=ViewCtlFolder width=100% height=500> <param name="Folder" value="Notes"> <param name="Namespace" value="MAPI"> <param name="Restriction" value> <param name="DeferUpdate" value="0"> </OBJECT> </div> <div id="content_5" class="content"> <h1>Contacts</h1> <OBJECT classid=CLSID:0006F063-0000-0000-C000-000000000046 id=ViewCtlFolder width=100% height=500> <param name="Folder" value="Contacts"> <param name="Namespace" value="MAPI"> <param name="Restriction" value> <param name="DeferUpdate" value="0"> </OBJECT> </div> </div> </div> <script type="text/javascript"> $(document).ready(function(){ // When a link is clicked $("a.tab").click(function () { $(".active").removeClass("active"); $(this).addClass("active"); $(".content").hide(); // slide this content up var content_show = $(this).attr("title"); $("#"+content_show).show(); }); }); </script> </body> </html>

    In Outlook einbinden.

    Um die OutlookToday.html in Outlook einzubinden, geht man mittels Rechtsklick auf den Posteingang und wählt hier unter Eigenschaften den Reiter "Homepage" 
    2012-04-17_14h50_19 (1)

    und trägt hier den Pfad ein: D:\Dev\#OutlookToday\OutlookToday.html

    image 

    Neue Mails als Aufgabe in Backlog kopieren

    Nun kommen wir zum zweiten Feature. Wenn eine neue Mail eintrifft, wollen wir einer Regel erstellen, die die Mail als Kopie in den Aufgaben-Ordner "Backlog" kopiert.


    Dazu benötigen wir ein VBAScript, welches man im Visual Basic Editor erstellen kann. Diesen ruft man mit der Tastenkombination ALT F11 auf. Hier fügt man ein neues Modul ein


     2012-04-17_14h37_01

    In diesem Modul schreibt man folgenden Code


    2012-04-17_14h38_06

    (Das Copy() im Code ist ein Workaround, da sonst die Mail nicht mehr im Posteingang gelistet wird)

    Sub RulesScript(olItem As MailItem) Set copyitem = olItem.Copy Set myTasks = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderTasks) Set backlog = myTasks.Folders("backlog") olItem.Move backlog End Sub

    Nach dem Speichern und Schließen des VBA Editors, müssen wir eine Regel erstellen, die diesen Code ausführt.

    Dazu gehen wir im Outlook unter Extras auf Regeln und Benachrichtigungen.

    2012-04-17_14h34_51

    Hier erstellen wir folgende neue Regel.

  • nur auf diesen Computer
  • die meinen Namen im Feld "An" oder "CC" enthält
  • Weiter
  • ein Script ausführen
  • Im unteren Bereich das RulesScript wählen
  • weiter
  • weiter
  • Der Regel einen Namen vergeben
  • Regel aktivieren 
  • Fertig stellen

    Die Regel empfehle ich natürlich entsprechend anzupassen, nicht jede Mail macht Sinn in das Backlog  geschoben zu werden.

    Nun sollte, wenn alles glatt gelaufen ist, die Regel auch aktiv sein. 

    In der  Board-Ansicht ist man in der Lage, die Aufgaben zwischen den einzelnen Aufgaben-Ordnern ("Panes") mit der Maus zu verschieben, um sich so den derzeitigen Aufgaben-Zustand zu visualisieren.

    So, das war es auch schon. Ich hoffe Ihr findet Verwendung mit dem Outlook-Dashboard und habt so etwas mehr Organisation in Eurer täglichen Arbeit.

    Wenn irgendwas nicht hinhaut, einfach einen Kommentar hinterlassen.

    Links:

  • Produktiver Arbeiten – Alle Tools und Techniken
  • GTD in einer Nußschale
  • GTD auf Google+