How to Push zanox Sales and Leads into Google Universal Analytics

Share Button

How to Push Sales and Leads from zanox to Google Universal Analytics in real-time.

Eine Schritt-für-Schritt Anleitung für mehr Auswertungsmöglichkeiten deiner zanox Partnerprogramme.
Seit Kurzem ist Google Universal Analytics verfügbar und bietet mit dem Measurement Protocol neue Möglichkeiten der Conversionoptimierung für Affiliates, im Zusammenspiel mit zanox Shared Tracking und zanox AdDelivery.

Ausgangspunkt:

  • Google Analytics Account
  • zanox Publisher Account
  • Webseite/Blog mit dem neuen AdContainer von zanox AdDelivery

6 Schritte für Schnellleser:

  1. Neue Google Analytics Web Property-ID anlegen
  2. Neuen Google Analytics Code auf die Webseiten packen
  3. ClientId Code Snippet einbauen
  4. ClientId an als GPP Parameter an den zanox AdContainer übergeben
  5. zanox Shared Tracking (Realtime Push Notification) mit Googles Measurement Protocol verbinden
  6. Testen des Sale Übermittlung an Google Analytics

1) Neue Google Analytics Property-ID anlegen

Da sich derzeit ein Property mit dem Standard Google Analytics Code noch nicht in eine neue Property mit dem neuen Universal Analytics migrieren lässt, muss man leider eine zusätzlichen Property in Google Analytics erstellen.  Um das Beispiel nachzuvollziehen, sollte man hierbei gleich das E-Commerce Tracking aktivieren. Man bekommt dann den neuen Code und kann diesen auf seine Webseite einbauen. Das geht auch parallel zum alten, für den Fall, dass jemand die alte Property noch weiter betreiben möchte.

2) Neuen Google Analytics Code auf die Webseiten packen

So schaut der neue Universal Analytics Code dann aus:

<script type="text/javascript">
   (function (i, s, o, g, r, a, m) {
       i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {
           (i[r].q = i[r].q || []).push(arguments)
       }, i[r].l = 1 * new Date(); a = s.createElement(o),
       m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m)
   })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');

   ga('create', 'UA-12345678-00', 'example.com');
   ga('send', 'pageview');
</script>

3) ClientId Code Snippet einbauen

Das für uns interessante Neue am neuen Code ist die sog. Anonymous ClientId, eine Id, die platform-, geräte- und sessionübergreifendes Tracking ermöglicht. Für weitere Details sei auf
https://developers.google.com/analytics/devguides/collection/analyticsjs/ verwiesen.

Für uns wichtig: Wie kommen wir da ran?

Folgendes ClientId Code Snippet aus dem Develoepr Guide hilft:

var clientId = '';
ga(function (tracker) {
  clientId = tracker.get('clientId');
});

Der erweiterte Universal Analytics Code schaut dann wie folgt aus:

<script type="text/javascript">// <![CDATA[
        (function (i, s, o, g, r, a, m) {
            i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () {
                (i[r].q = i[r].q || []).push(arguments)
            }, i[r].l = 1 * new Date(); a = s.createElement(o),
            m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m)
        })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');

        ga('create', 'UA-12345678-00', 'example.com');
        ga('send', 'pageview');
        var clientId = '';
        ga(function (tracker) {
            clientId = tracker.get('clientId');
        });
// ]]></script>

Damit steht uns die ClientId zur weiteren Verwendung im globalen Java Script context zur Verfügung.
Die ClientId hat dabei folgendes Format: “1234567890.1234567890”.

Nun gilt es, diese dem zanox Trackingcode als sog. GPP zu übergeben.

4) ClientId an als GPP Parameter an den zanox AdContainer übergeben

Mit zpar0, zpar1, zpar2, zpar3 und zpar4 stellt zanox dem Affiliate fünf sog. General Purpose Parameter (GPP) als überarbeitete Form des SubId Trackings bereit.
Ein gängiger Anwendungsfall ist, damit Klicks zu “markieren”, um später den daraus resultierenden Leads und Sales ansehen zu können, welcher Trafficquelle sie zuzuordnen sind.

In unserem Beispiel verwenden wir zanox AdDelivery zum Ausliefern der Affiliate Werbemittel. AdDelivery besteht aus einen konfigurierbaren Werbemittelrotator und wird in Form eines AdContainers auf unserer Webseite eingebunden. Der AdContainer ist dabei zunächst unabhängig von den gezeigten Werbemitteln. Die Werbemittel für die Rotation können wir im sog. AdDelivery Dashboard im zanox Marketplace auswählen und optimieren. Für das Zusammenspiel mit Analytics konfigurieren ihn den AdContainer so, dass die ClientId bei allen Klicks an den “zpar2” Parameter übergeben wird.

Dazu fügen wir folgendes Setting ein:

"settings": { "zpar2": "js:clientId" }

Damit weisen wir dem zpar2 zur Laufzeit den Wert “js:clientId” zu.  Die ersten Drei Zeichen “js:” geben an, dass es sich um keinen konstanten Wert handelt, sondern weissen den AdContainer an, sich zur Laufzeit den konkreten Wert aus der Java Script Variablen mit dem Namen “clientId” zu ziehen. Mit dieser Methode lassen sich auch noch weitere Werte an die zpar0..5 übergeben.

Der modifizierte AdContainer schaut wie folgt aus:

<div class="zx_1234567890ABCDEFG zx_mediaslot">
  <script type="text/javascript">
     window._zx = window._zx || [];
     window._zx.push({
        "id": "1234567890ABCDEFG",
        "settings": { "zpar2": "js:clientId" }
     });

     (function (d) {
        var s = d.createElement("script"); s.async = true;
        s.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//static.zanox.com/scripts/zanox.js";
        var a = d.getElementsByTagName("script")[0]; a.parentNode.insertBefore(s, a);
     }(document));
  </script>
</div>

5) zanox Shared Tracking (Realtime Push Notification) mit Googles Measurement Protocol verbinden

Wir haben nun die ClientId den Klicks als zpar2 übergeben. Wir können sie somit in den Einzeltransaktionsreports bei zanox schon mal sehen, wenn wir hierfür die entsprechende Spalte einblenden.

Nun wollen wir aber die Transaktionen bei Google Universal Analytics einspielen. Dazu stellt Google eine API mit dem Namen Measurement Protocol bereit.

Über Get oder Post Request kann man diverse Trackingevents an Universal Analytics übergeben.

Das Measurement Protocol
https://developers.google.com/analytics/devguides/collection/protocol/v1/

Wir verwenden hierbei das Transaction Ereignis des E-Commerce Trackings. Wer sich für die einzelnen Parameter interessiert, kann das im Developer Guide nachschlagen:

Pflichtparameter sind Web Property Id und TransactionId. Um z.B. einen Sale vom Partnerprogramm ExampleShop mit der SaleId=12345 und 10 EUR Commission zu übermitteln, sieht der API call dann so aus:
http://www.google-analytics.com/collect?v=1&t=transaction&tid=UA-12345678-00&ti=12345&cid=1234567890.1234567890&tr=10.00&cu=EUR&ta=ExampleShop

Nun wechseln wir in das Tool “Shared Tracking” im zanox Marketplace. Damit lassen sich Server-zu-Server Push Nachrichten einrichten.  Bei jedem Sale feuert zanox einen HTTP GET auf eine zuvor hinterlegte URL. Dabei können dynamisch Platzhalter ersetzt werden. Shared Tracking bietet hierzu alle relevanten Daten zu einem Sale oder Lead zur Auswahl an.

Ein für unsere Zwecke parametrisierter Measurement Protocol Aufruf mit Platzhalter für Parametern schaut dann wie folgt aus:
http://www.google-analytics.com/collect?v=1&t=transaction&tid=UA-12345678-00&ti=##tracking_id##&cid=##zpar2##&tr=##commission##&cu=##commission_currency##&ta=##program_name##

Diese URL tragen wir bei Shared Tracking ein. Damit steht unsere Verbindung zwischen zanox und Google Universal Analytics.

6) Testen des Sale Übermittlung an Google Analytics

Shared Tracking bietet einen Test Button, mit dem die Verbindung getestet werden kann. Einige Platzhalter werden durch Zufallszahlen bereits für den Testfall ersetzt, für die Übergabe der Web Property Id und der ClientId sollte man besser echte Werte manuell eingeben. Eure Web Property Id bekommt ihr bei Google Analytics (z.B. UA-12345678-00) und eine gültige ClientId bekommt ihr, wenn ihr euch den zpar2 einer ZielURL eines Werbemittels kopiert, der von einem wie oben beschrieben erweitertem AdContainer ausgeliefert wird.

Nach ca. 15 Minuten seht ihr in Google Analytics in den E-Commerce Transaction Berichten unter der Rubrik “Conversion” euren eingespielten Test Sale.

Fazit:

Datenhungrig wie Google ist, bietet das Measurement Protocol viele Event Typen und Parameter, die sich nun in Google Analytics darstellen lassen. Im Artiklel wurde ein Mashup der Tools Universal Analytics, AdDelivery und Shared Tracking gezeigt, um die neuen Reportmöglichkeiten für die Conversionoptimierung von Affiliate Partnerprogrammen zu nutzen. Leads und Sales können nun nach Region, Referrer, Seitentitel, Adwords Kampagne, Keyword, Conversiondauer, Visits auf der Publisherseite, Bildschirmbreite & Device etc.. aufgeschlüsselt werden. Wer Anregungen zu weiteren sinnvollen Reports und Erfahrungen aus der Praxis teilen möchte, kann gerne einen Kommentar hinterlassen.

Share Button

zanox API NuGet Package

Share Button

zanox API Client als NuGet Package
Nach knapp 900 Downloads unserer auf Codeplex gehosteten Client Library für die zanox API haben wir ihr das längst überfällige NuGet Package verpasst. Nun könnt Ihr Euch via NuGet die zanox API in Eure Projekte ziehen und auf neuere Versionen updaten. Gefühlte Zwei Clicks und Ihr seid an die zanox Web Services angeschlossen.

zanox API Client als NuGet Package direkt in Visual Studio

Link zur Nuget Package Gallery
http://nuget.org/packages/Zanox.Api.Client/

Source code der zanox Client Library
http://zanoxclienttoolkit.codeplex.com/

Share Button

JSON API response darstellen mit jQuery templates

Share Button

JSON API results mittels jQuery templates darstellen
Im folgenden ist ein einfaches Code Snippet beschrieben, um mit wenig Zeilen Java Script den Response einer JSON API als HTML in den DOM zu hängt. Dazu werden jQuery und jQuery Templates verwendet.

Als Datenquelle dient die JSON Schnittstelle von PartySky.

Zunächst müssen jquery-1.7.2.min.js und jquery-templ.min.js eingebunden werden:

<script src="scripts/jquery-1.7.2.min.js"></script>
<script src="scripts/jquery-templ.min.js"></script>

Der API Aufruf erfolgt mittels jQueries getJSON(..). jQuery Template iteriert über die Daten des Responses und erstellet anhand des angegebenen Templates HTML code. Das Ergebnis wird anschliessend an ein Zielelement, in diesem Fall an den Table “locationTable” gehängt.

<script>
 $.getJSON('locations/latest?items=10&callback=?',
      function (data) {
         /* render table */
         $('#locationTemplate').tmpl(data).appendTo("#locationTable");

         /* Sorgt für alternierende Hintergrundsfarben der Tabellenzeilen */
         $("table > tbody tr:odd").addClass("alt");
 });
</script>

<script id="locationTemplate" type="text/x-jquery-tmpl">
<tr><td><a href="${Url}">${Name}</a></td><td><a href="/${Address.City}">${Address.City}</a></td><td>${ModifiedDate}</td></tr>
</script>

<style> 
   .alt
   { 
      background-color: #ddd;
   }
</style>

<h3>Neueste Locations</h3>
   <div id="LatestLocations" class="location-list-box">
      <table id="locationTable" class="list-small hoverTable">
        <thead>
          <tr>
             <td>Location</td>
             <td>Stadt</td>
             <td>Letzte Änderung</td>
          </tr>
        </thead>
      </table>
    </div>

Final result:

Share Button

zanox SOAP Authentication via Signature

Share Button

zanox SOAP Authentication via Signature
Um über die zanox Web Services auf die nicht-öffentlichen Daten, wie z.B. dein Profil, deine AdSpaces oder Reports, deines zanox Accounts zugreifen zu können, ist eine sog. Signatur zur Authentifizierung nötig. Die zanox Client Library für .NET erledigt dies automatisch, sodass man sich darum nicht kümmern braucht. Im Folgenden werden wir einen Blick auf die Implentierung der Signaturberechnung der zanox Client Library für .NET.

Was ist die Signatur?
Die Signatur ist ein Hash (HMACSHA1), der anhand des geheimen API Schlüssels (SecretKey) und dem sog. canonical String berechnet wird.

   string canonical = service + operation + date + nonce;

Als ‘service’ wird z.B. ‘publisherservice’, als operation z.B. ‘getsales’ und als Date das aktuelle Datum und die Uhrzeit übermittelt. Und dann ist da noch das ‘nonce’.

Wtf. Was ist das nonce?
Das nonce ist eine Zufallsfolge von Zahlen und Buchstaben. Das Nonce wird in die Signatur eingearbeitet, aber auch im Klartext übertragen. Der Server mekt sich für ein paar Minuten alle eintreffenen nonces und erlaubt nur jeweils einen einzigen API Request mit einem bestimmten nonce. Damit wird erreicht, dass ein API Request nicht von einem Angreifer abgefangen und erneut gesendet werden kann.

Was passiert mit der Signatur?
Beim API Request, wird die Signatur als einer der API Request Parameter über die Leutung geschickt und an den zanox Server übermittelt. Kann der Server anhand der übermittelten Parameter und der hinterlegten SecretKey die selbe Signatur berechnen, so wir der Request als gültig betrachtet. So kann eine Authentifizierung stattfinden, ohne ein SecretKey oder Passwort im Klartext über die Leitung zu schicken.

Der komplette Code zur Signaturberechnung:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
using System.Security.Cryptography;

namespace ZanoxClientLib.V20100201
{
    /// <summary>
    /// This class implements a Hash-based signature according to the RFC2616 for HTTP Digest Access Authentication and the RFC2104 for Keyed-Hashing for Message Authentication standard.
    /// </summary>
    public class Signature
    {        
        /// <summary>
        /// zanox SOAP Request Authentication.
        /// </summary>
        /// <param name="datetime">Current Datetime</param>
        /// <param name="sharedKey">Your SecretKey.</param>
        /// <param name="service">Name of the service to signate, e.g. "publisherservice"</param>
        /// <param name="operation">name of the operation to signate, e.g. "getsales"</param>
        /// <returns>Returns Signature for zanox Web Services SOAP API</returns>
        public static string SoapSignature(DateTime datetime, string secretKey, string service, string operation, string nonce)
        {
            HMACSHA1 crypto = new HMACSHA1(Encoding.UTF8.GetBytes(secretKey));
            string date = GetZDateTime(datetime);
            string canonical = service + operation + date + nonce;
            string signature = System.Convert.ToBase64String(crypto.ComputeHash(Encoding.UTF8.GetBytes(canonical)));
            return signature;
        }

        public static string GetZDateTime(DateTime dateTime)
        {
            CultureInfo culture = new CultureInfo("en-US");
            return dateTime.ToString("yyyy-MM-ddTHH:mm:ss.000Z", culture);
        }

        /// <summary>
        /// Generate a random string. Has to be unique within 30minutes. Minimum 20 characters.
        /// </summary>
        public static string GetNonce()
        {
            string returnValue = Guid.NewGuid().ToString();
            return returnValue;
        }
    }
}
Share Button

zanox Web Services Client Library for .NET

Share Button

Die Client Library wurde auf die folgenden API Versionen aktualisiert:

  • zanox Publisher API Version 2011-03-01 (stable)
  • zanox Connect API Version 2010-02-01 (stable)
  • zanox Data API Version 2011-05-01 (stable)

Folgendes wurde geändert:

  • Migration auf neueste API Versionen
  • zanox.com als Connect Domain
  • Überladung des Constructors ohne httpProxy Parameter
  • Implementierung von GetTrackingCategories in der Publisher API

Die zanox Client Library ist im Wesentlichen ein SOAP Wrapper und unterstützt die Drei Authentifizierungsmechanismen:

  • Authentifizierung für den Zugriff auf den eigenen Account mittels eigener API Credentials
  • Authentifizierung im Namen eines Dritten mit einer aktiven UI Session (zanox Connect OAuth Flow)
  • Authentifizierung im Namen eines Dritten mit OfflineToken

Wie funktioniert der Zugriff auf den eigenen Account mittels eigener API Credentials?
Voraussetzung: Erzeuge dir deine API Credentials (API Keys) für deinen Publisher Account, indem du dir unter apps.zanox.com eine Application anlegst. Für den Zugriff au den eigenen Account ist es nicht notwendig, die Application im Application Store zu veröffentlichen.

var publisherAPI = new PublisherAPI();

var permanentDeveloperCredentials = new sessionType()
{
connectId = Properties.Settings.Default.ConnectId,
sessionKey = Properties.Settings.Default.PublicKey,
secretKey = Properties.Settings.Default.SecretKey
};

var profile = publisherAPI.GetProfile(permanentDeveloperCredentials );
var sales = publisherAPI.GetSales(permanentDeveloperCredentials , ...some more filters);
var incentives = publisherAPI.GetIncentives(permanentDeveloperCredentials , ...filters);

Wie funktioniert der Connect Flow?
Voraussetzung: Erzeuge wiederum eine Application unter apps.zanox.com eine Application anlegst. Achte diesmal darauf, dass du sie in der Kategorie “For Sale” anlegst und einen Callback Handler einträgst. Z.B. www.example.com/callback.ashx. Nun kannst du Kontakt mit zanox aufnehmen um das Rechtemanagement, Freischaltung von Testnutzern, Offlinezugriff und eventuelles Pricing deiner Application festzulegen. Nach der Fertigstellung deiner Anwendung kannst du deine App dann deine Application im Application Store veröffentlichen.

Der Connect Flow Startet mit einem Connect Link für deine App. Dieser setzt sich wie folgt zusammen:
https://auth.zanox.com/login?appid=FA5D6DA48D2BCA473C39
Der Link für zum Loginformular von zanox. Nach erfolgreichem Login findet ein Redirect zu deiner Callback Url statt. Es wird dynamisch ein sog. AuthToken als URL Parameter angefügt. Das AuthToken wird bei jedem Connect Flow neu erzeugt und kann nur einmalig für den Aufruf von GetSession verwendet werden. Der Rückgabewert von GetSession enthält API Credentials für den delegierten API Zugriff auf die freigegebenen API Resourcen (z.B. Profile & Reports) im Namen des Publishers. Das folgende Codebeispiel setzt den eben beschriebenen Connect Flow voraus; anbei ein Beispiel für einen CallbackHandler:

// retrieve authToken from callback request
string authToken = context.Request[PublisherAPI.AUTHTOKEN_NAME]; 
string publicKey = System.Configuration.ConfigurationManager.AppSettings["ZANOX.PublicKey"];
string secretKey = System.Configuration.ConfigurationManager.AppSettings["ZANOX.SecretKey"];

var publisherAPI = new PublisherAPI();
var zanoxConnectSession = publisherAPI.GetSession(publicKey, secretKey, authToken);</code>

var profile = publisherAPI.GetProfile(zanoxConnectSession);
var sales = publisherAPI.GetSales(zanoxConnectSession, ...some more filters);
var incentives = publisherAPI.GetIncentives(zanoxConnectSession, ...filters);

zanox connect dialog

 

Codebeispiele des Client Toolkits
Das Client Toolkit enthält Beispiele für alle Drei Authentifizierungsfälle aber auch für verschiedene Projekttypen:

  • Example Websites (Forms & MVC) implementing zanox Connect Authentification Flow
  • Example Console Application mit OfflineToken
  • Example Widget using the RESTful JSONP API

Falls weitere Tutorials zum Thema zanox Web Services interessant sind, schreib mir einfach eure Anregungen ins Kommentarfeld oder per Email.
Weitere Codebeispiele und Anwendungsfälle folgen.

Share Button

Druckaufträge aus der Druckerwarteschlange löschen

Share Button

Wer kennt nicht folgendes Problem mit der Druckerwarteschlange von Windows: Der Drucker klemmt, ein Druckauftrag bricht ab, der Drucker “spinnt”. Man öffnet die Druckerwarteschlange und versucht verzweifelt “Auftrag neustarten”, “Druckauftrag abbrechen”, “Druckauftrag löschen”, etc……  und nichts passiert. Allen Versuchen zum Trotz bleicht die Druckerwarteschlange verstopft mit verlohrenen Druckaufträgen.

 

Batchdatei zum Löschen der Druckerwarteschlange erstellen

Folgendes BATCH Script lößt das Problem:

net stop spooler
FOR %%T IN (%systemroot%\system32\spool\printers\*.*) DO DEL %%T
net start spooler

Einfach mit Notepad eine neue Textdatei erstellen, die Drei Zeilen einfügenund unter “Drucker_Neustart.bat” speichern. Dabei sicherstellen, dass Notepad nicht “Drucker_Neustart.bat.txt” daraus macht.

Was passiert?

Zuerst wird der Spooler Dienst von Windows beendet. Anschliessend lassen sich die Druckaufträge im temp-Verzeichnis der Druckerwarteschlange löschen. Die letzte Zeile startet den Spooler Dienst wieder. Die Druckerwarteschlange sollte nun leer sein und bereit für neue Druckaufträge.

Wie startet man das Script?

  1. Rechtsklick auf die Datei “Drucker_Neustart.bat”
  2. Ausführen als Admin

Drucker_Neutstart.zip

Share Button

Installieren von BlogEngine 2.0 auf IIS7.5

Share Button

Wer sich für quelloffene Blogs für .NET interessiert, kennt sicherlich das Projekt BlogEngine auf Codeplex.

Doch wie installiert man BlogEngine 2.0 auf Windows Server 2008 R2 mit IIS7.5?

Im Prinzip mit wenigen Klicks, allerdings gibt es einen Fallstrick, den ich hier aufführe:

1) Download von BlogEngine.NET 2.0 (web) unter http://blogengine.codeplex.com

2) Entpacken nach z.b. c:\websites\blog. Darauf achten, dass für die Dateien der Schreibschutz nicht gesetzt ist.

3) Im Internetinformationsdienste (IIS)-Manager eine neue Site für das obige Verzeichnis anlegen. Als Bindung (Binding) für die Site eine entsprechende Hostname (z.B. “developerheroes.com”) eurer Domain auswählen und speichern.

Dabei darauf achten, dass ein Anwendungspool mit den folgenden Einstellungen ausgewählt ist:

  • Pipelinemodus: Klassisch
  • .NET Framework-Version 2.0

4) Sorgt bei eurem Domain Registrar  (z.B. united-domains) dafür, dass der die entsprechende Domain auf die IP des Windows Servers zeigt, auf dem ihr den Blog einrichtet. Setzt dazu in der Host Konfiguration eures Registrars den sog. A-Eintrag (A-Record) auf die IP Adresse eures Windows Servers. Änderungen hierbei können üblicherweise bis zu 24h dauern, bis sie tatsächlich wirksam werden.

5) Gebt nun dem Anwendungspool schreibrechte auf das Verzeichnis ~/App_Data. Im Beispiel: c:\websites\blog\App_Data. Geht dazu mit dem Explorer über “Eigenschaften – Sicherheit” in die Sicherheitseinstellungen des Ordners.

5) Nach starten der Site und des Anwendungs Pools ist nun die Startseite des Blogs zu sehen.

6) Zugriff auf dem Verwaltungsbereich des Blogs per Standardpassword:

  • Login: “admin”
  • Passwort: “admin”

7) Wenn die voreingestellte Kontakt-Seite “Contactx.aspx” mti einer Fehlermeldung antwortet, hilft folgender Kniff:

In der Web.config findet sich der Teil customErrors mode=”RemoteOnly”. Dabei ist die Groß-Kleinschreibung einzuhalten.

Der Parameter mode muss zunächst auf den Wert “On” gestellt werden.

Nach dem Speichern und Neustarten der Anwendung funktioniert nun die Kontaktseite. Aus Sicherheitsgründen stellen wir die “customErrors” wieder auf “RemoteOnly”.

Zusammenfassung:

In wenigen Schritten kann eine neue Bloginstanz mit BlogEngine 2.0 aufgesetzt werden. Nach dem Entpacken des Downloads von codeplex und gesetzten Schreibrechten für das Verzeichnis ~/App_Data läuft BlogEngine in einem Classic .NET 2.0 Anwendungs Pool.

 

Share Button

Wireframe und Mockup Tools

Share Button

 

Wenn Papier und Bleistift Copy & Paste beherrschten, bräuchte es wohl keine Wireframe und Mockup Tools. Dieser Artikel listet die nach unser Einschätzung brauchbarsten Wireframe Werkzeuge für Webentwickler auf. Bewertet werden der erste Eindruck, Funktionsumfang, Einfachheit, Nützlichkeit und Gestaltung vorhandener Web-Bausteine, Pricing, Exportfunktionen und Support für verteiltes Arbeiten.

 

1) Lumzy

Mit Lumzy lässt sich schnell und einfach eine Idee visualisieren. Alle wichtigen Elemente für eine Webseite sind vorhanden. Jederzeit kann das Projekt von der Scribble Optik in eine semi-reale IE- oder Safari-Optik umgeschalten werden. Lumzy unterstützt Navigationselemente. Damit können die wichtigsten Flows des Webprojektes umgesetzt und als interaktive Slideshow ausgeben werden. Dank Realtime Collaboration können zeitgleich mehrere Personen an einem Mockup arbeiteten.

 

Lumzy Wireframe Tool

Share Button

code is mighty