.
Anmeldung | Registrieren | Hilfe

.NET-Blogs Archiv Oktober 2011

Die ASP.NET ObjectDataSource und abhängige Business Objekte

29.10.2011 23:11:56 | Andre Kraemer

Ja, ich gebe es offen und ehrlich zu! Ich habe sie noch nie wirklich genutzt, die ASP.NET WebForms ObjectDataSource. Irgendwie hatte ich ein Unbehagen bei der Vorstellung mir das alles bloß zusammen zu klicken und habe daher bisher einen Bogen um die ObjectDataSource gemacht. Außerdem habe ich bisher auch noch niemanden getroffen, der ernsthaft in Erwägung gezogen hätte die ObjectDataSource zu nutzen - oder sich zumindest getraut hätte, dies zuzugeben ;-)

Kürzlich war es dann aber soweit. meine Für eine kleine Demo startete ich damit, die serverseitige ASP.NET MVC Implementierung meiner Beispielanwendung für meinen jQuery Vortrag auf der dotnet Colgone nach Webforms zu konvertieren. Mein Ziel war es dabei, wo immer es nur geht, den WebForms "Baukasten" zu nehmen. Da ich bereits einen bestehenden Business Service hatte, der mir meine Objekte laden und persistieren konnte, kreuzte sie nun also meinen Weg, die ObjectDataSource.

Nach ein paar Klicks durch den Wizzard und einem beherztem F5 bestätigte sich vorerst mein initiales Vorurteil: "Totaler Mist!".

Mein Business Service hatte nämlich eine Abhängigkeit auf eine weitere Klasse, die für die  Datenhaltung zuständig war. Diese Abhängigkeit fand sich in meinem Quellcode in Form eines Konstruktor Parameters wieder. In meiner ASP.NET MVC Implementierung war der DI Container StructureMap für das Auflöösen dieser Abhängigkeit zuständig.

Die WebForms Variante brach die Ausführung des Codes nun allerdings mit einer Exception ab und wies mich in freundlichem Gelb darauf hin, dass mein Business Objekt keinen parameterlosen Konstruktor hätte.

In der Hoffnung, eine Factory für mein Business Objekt angeben zu können durchsuchte ich also die Eigenschaften der ObjectDataSource. Leider wurde ich nicht fündig, fluchte ein wenig darüber, dass meine Anforderung doch gar nicht so ungewöhnlich wäre und beendete Visual Studio frustriert.

Glücklicherweise guckte ich ein wenig später doch noch mal nach einer Lösung. So kann zwar keine Eigenschaft für eine Factory angegeben werden, stattdessen wird jedoch ein Ereignis zur Verfügung gestellt, in dem ich das entsprechende Business Objekt erstellen und meiner ObjectDataSource zuweisen kann.

Konkret sieht dies wie folgt aus:

protected void AufgabenDataSource_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
{
   AufgabenService service = ObjectFactory.GetInstance<AufgabenService>
   e.ObjectInstance = service;
}

Nun habe ich über die ObjectFactory zwar einen direkten Verweis innerhalb meiner CodeBehind Datei auf den genutzten DI Container (in meinem Fall StructureMap), dies ist mir aber immer noch lieber, als die Abhängigkeit zur Persistenzschicht in meinem Business Service hart zu verdrahten.

Und die Moral von der Geschicht ...

... lautet: Erst ausprobieren und dann (gegebenenfalls) meckern ;-)

Deutsche Texte in Infragistics NetAdvantage 10.2

29.10.2011 23:11:56 | Andre Kraemer

Wie Craig Shoemaker bereits in seinem Blog geschrieben hat, werden die Infragistics NetAdvantage Controls für Silverlight und WPF ab der Version 10.2 auch mit Deutschen Oberflächentexten ausgeliefert. In diesem Beitrag möchte ich die Notwendigen Schritte noch einmal im Schnelldurchlauf in deutscher Sprache am Beispiel von Silverlight erläutern.

Initiales Setup

Mein Silverlightprojekt besteht aus einer einzigen Seite, in der ein XamGrid definiert wurde:

<UserControl x:Class="NAGermanLocalization1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400" xmlns:ig="http://schemas.infragistics.com/xaml">

    <Grid x:Name="LayoutRoot" Background="White">
        <ig:XamGrid HorizontalAlignment="Left" Name="xamGrid1" VerticalAlignment="Top"  AutoGenerateColumns="false"  >
            <ig:XamGrid.FilteringSettings>
                <ig:FilteringSettings AllowFiltering="FilterMenu" />
            </ig:XamGrid.FilteringSettings>
            <ig:XamGrid.GroupBySettings>
                <ig:GroupBySettings AllowGroupByArea="Top" />
            </ig:XamGrid.GroupBySettings>
            <ig:XamGrid.Columns>
                <ig:TextColumn Key="Id" />
                <ig:TextColumn Key="Name"/>
                <ig:TextColumn Key="Vorname"/>
                <ig:TextColumn Key="Land" />
            </ig:XamGrid.Columns>
        </ig:XamGrid>
    </Grid>
</UserControl>

Für das Grid habe ich wie der vorherige Codeausschnitt zeigt Filtern und Gruppieren aktiviert.

Meine Codebehind Datei sieht ähnlich schmal aus:

using System.Collections.Generic;
using System.Windows.Controls;

namespace NAGermanLocalization1
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            InitGrid();
        }

        private void InitGrid()
        {
 	        List<Kunde> kunden = new List<Kunde>();
            for (int i = 0; i<10; i++)
            {
                Kunde kunde = new Kunde{Id = i, Name = string.Format("Name {0}", i), Vorname = string.Format("Vorname {0}", i), Land = "DE"};
                kunden.Add(kunde);
            }
            xamGrid1.ItemsSource = kunden;
        }
    }

    public class Kunde
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Vorname { get; set; }
        public string Land { get; set; }
    }
}

An der Oberfläche schaut das ganze nun wie folgt aus:

GridVorher

DialogVorher

Und einmal auf Deutsch bitte ...

Um das ganze nun zu lokalisieren, sind lediglich zwei Schritte erforderlich.

Zunächst muss das Silverlight Projekt entladen und anschließend im Textmodus editiert werden:

unloadproject editproject

Der vorhandene leere Tag SupportedCultures muss mit dem Wert de versehen werden.

supportedcultures

Anschließend muss die Projektdatei gespeichert und erneut geladen werden. Als letzter Schritt muss dann innerhalb der Webseite, die das Silverlight Control hostet noch die Zeile <param name="uiculture" value="de" /> innerhalb des Object Tags eingefügt werden:

uiculture

Wenn nun nichts schief gegangen ist, sollten die Oberflächentexte nun auf Deutsch erscheinen:

GridNachher

DialogNachher

Fazit

Lokalisierte Oberflächen werden mit Infragistics NetAdvantage 10.2 zum Kinderspiel, da das umständliche Setzen der Oberflächentexte über die runtime resource-string customization in Zukunft entfällt.

Hattrick!

29.10.2011 23:11:56 | Andre Kraemer

Passend zur Fußball WM konnte ich einen virtuellen Hattrick landen. Kürzlich ist nämlich mein dritter Artikel in Folge auf der deutschen ASP.NET Site http://www.asp.net/de veröffentlicht worden. Cool :-)

aspnet_de

Nachdem ich die Artikel des Tages nun also "gestürmt" habe, frage ich mich nur noch, wie ich mein Blog in den Feed links bekomme ...

Mein jQuery Vortrag auf der dotnet Cologne

29.10.2011 23:11:56 | Andre Kraemer

Das Beispielprojekt meines jQuery Vortrags während der dotnet Cologne kann ab sofort hier herunter geladen werden.

Es handelt sich dabei um ein kleines ASP.NET MVC 2 Projekt, in dem folgendes genutzt wurde:

  • ASP.NET MVC 2 ;-)
  • StructureMap als IOC Container
  • SQLite als leichtgewichtige In-Memory-DB
  • NHibernate für den Datenbankzugriff
  • jQuery für den Wow-Faktor ;-)

Die Solution liegt passend zur Veranstaltung im VS 2010 Format vor. Bei Bedarf kann ich aber auch eine VS 2008 Solution bereit stellen.

Hauptaugenmerk solltet ihr auf die Datei aufgabenlist.js setzen. Hier befindet sich der relevante jQuery / JavaScript Code. Der ganze Rest ist nur "Infrastruktur", damit ich jQuery an einem halbwegs realistischen Beispiel zeigen kann ;-)

An Feedback zu den Quellcodes bin ich immer interessiert. Am besten über das Kontaktformular, oder die während des Vortrags mitgeteilte E-Mail Adresse.

Ich weiß übrigens, dass das ASP.NET MVC Projekt keine Unit Tests beinhaltet. Angesichts der Projektgröße und der verfügbaren Zeit habe ich hier ein wenig geschludert. Thomas Bandt hat mich während des Vortrags übrigens auch darauf aufmerksam gemacht, dass mein JavaScript Code nicht via Unit Tests geprüft wurde. Auch hier gelobe ich Besserung :-)

Literaturempfehlungen

Im Anschluss an den Vortrag wurde ich außerdem gefragt, welche Literatur ich zu dem Thema empfehlen könnte.

Nun, da sich jQuery hauptsächlich mit der Modifikation des DOMs, insbesondere dem Ein- / Ausblenden sowie dynamischem CSS befasst, sollte man meiner Meinung nach zunächst über solide (X)HTML und CSS Kenntnisse verfügen (kein Witz).

Zu diesem Thema kann ich das Buch Head First HTML with CSS & XHTML empfehlen:

Außerdem können generelle JavaScript Kenntnisse auch nicht schaden ;-) Hier habe ich persönlich sehr gute Erfahrung mit dem Buch Professional JavaScript for Web Developers gemacht.

Speziell zum Thema jQuery hat mir das Buch jQuery in Action, Second Edition sehr gut gefallen. Ich habe es mir im Rahmen des Manning Early Access Program als E-Book bestellt. Wer lieber ein gedrucktes Exemplar haben möchte, muss sich noch ein wenig gedulden, kann es aber dann auch z. B. bei Amazon bestellen.

dotnet Cologne 2010 - was ein riesen Spaß

29.10.2011 23:11:56 | Andre Kraemer

Letzten Freitag hatte ich die Freude, an der dotnet Cologne teilzunehmen. Mit über 300 Teilnehmern war es ein wirklich riesiges Event, dass sich vor "professionellen", oder besser gesagt kommerziellen Konferenzen nicht verstecken muss.

Der Teilnehmer

Vor Ort war ich in mehreren Rollen. Zum einen natürlich als Teilnehmer. In dieser Rolle nutzte ich die Möglichkeit, endlich mal die Gesichter zu einigen Bekannten aus der Community zu sehen und auch mal persönlich das ein oder andere Wort zu wechseln. Außerdem hörte ich mir auch spannende Vorträge, unter anderem von Jörg Krause zu Sharepoint als Entwicklungsplattform, Neues in Silverlight 4 von Stefan Lange sowie Neues in ASP.NET 4.0 von Jan Welker.

Irritierend fand ich, dass gefühlte 90 % der Besucher von Jörg Krauses Sharepoint Vortrag keinerlei Sharepoint Vorkenntnisse hatten und somit wohl nicht im geringsten wussten, wie so eine Site, eine Sitecollection, ein Web, eine Liste, ein Webpart ... an der Oberfläche wohl aussehen. Die gleiche Situation habe ich übrigens auch mehrfach schon auf der Shareconnect (Basta Sharepoint Days) beobachtet. Vielleicht wäre hier einfach mal ein "Was ich über Sharepoint wissen sollte, bevor ich Visual Studio aufmache" Vortrag angebracht. Leider habe ich einen solchen Vortrag bisher noch auf keiner (Entwickler-)Konferenz im Angebot gesehen. Nichts desto trotz fand ich Jörgs Vortrag prima! Auch die anderen besuchten Vorträge haben mir gut gefallen, daher mein Fazit als Teilnehmer:

Voller Erfolg! Gute Vorträge, gute Kontaktmöglichkeiten zur Community, was will man mehr.

Der Aussteller

Unter den Sponsoren des Events war unter anderem auch die Firma Infragistics. Wie auch auf anderen Konferenzen lies ich es mir als fleißiger Infragistics MVP  in den Pausen natürlich nicht nehmen, Kiril und Nils tatkräftig zu unterstützen. Dies war auch bitter nötig, da der Andrang am Stand weit höher war, als ich es von anderen Konferenzen gewohnt war. Kamen wir normalerweise zu zweit immer ganz gut zurecht, waren dieses Mal sogar drei Personen eigentlich schon fast zu wenig.

Fazit als Aussteller: Tolle Veranstaltung! Viele Kontakte, interessante und zum Teil sogar sehr trickreiche Fragen, genauso muss es sein!

Der User Group Leader

Jeder der schon mal ein User Group Treffen besucht hat wird sich sicherlich fragen:

Wo kommen eigentlich die Sprecher her?

Nun ja, als sie ganz klein waren, wird sie voraussichtlich einer der beiden hier unten gebracht haben.

image

Foto: Valter Jacinto | Portugal   http://www.flickr.com/photos/valter/87429062/sizes/m/ Creative Commons License

Irgendwann werden die Jungs und Mädels dann aber groß und spätestens dann stellt sich für einen User Group Leiter die Frage:

Wo bekomme ich eigentlich Sprecher her?

Ein besonders guter Ort, Sprecher für die eigene User Group zu finden ist selbstverständlich eine Konferenz, denn dort treten Speaker häufig in Rudeln auf ;-)

Also machte ich mich während der dotnet Cologne auf den Weg und zog Sprecher für die nächsten Treffen der .NET User Group Koblenz an Land.

Die Ausbeute war übrigens mit zwei definitiven, einer relativ verbindlichen und einer losen Zusage recht gut. Daher auch hier: dotnet Cologne, 12 Points ;-)

Der Sprecher

Zu guter letzt (und angesichts der Agenda ist dies wörtlich gemeint), war ich auch als Sprecher unterwegs. Mein Thema war die Einführung in jQuery unter dem spontan geänderten Titel:

jQuery - oder warum Sie JavaScript in Zukunft nicht mehr hassen werden.

Den Verlauf des Vortrags würde ich wie folgt beschreiben

  • Der Saal füllt sich, die Menge wird still. Ich will loslegen, aber mein Mikro überlegt sich, dass es sich lieber in meinem T-Shirt verdreht. Kein Mensch hört mich ... so ein Mist
  • Mikro Problem gelöst, schnell durch die Folien gejagt. Auf gehts zur Demo!
  • Meine ASP.NET MVC Anwendung reißt niemand vom Hocker und stößt kaum auf Interesse
  • Ist zum Glück nicht schlimm, schließlich ist mein Thema ja auch jQuery und nicht ASP.NET MVC ;-)
  • Die ersten UI Gimmicks (alternierende Tabellenzeilen, Hover Effekte) zaubern ein müdes Lächeln auf die Gesichter der Menge - da muss wohl noch mehr her
  • Ich erstelle mit einer Zeile jQuery Code auf- und zuklappbare Bereiche in der Sidebar der Anwendung. Im Publikum sehe ich die ersten funkelnden Augen
  • Auf der Welle muss ich weiter reiten, also jetzt schnell ein wenig Ajax;-)
  • In der Einleitung habe ich etwas vom Update Panel erzählt. Heißt dann wohl ich sollte auch ein wenig WebForms zeigen. Ich entschließe mich also, im Firebug mal zu zeigen, was über die Leitung geht wenn man Ajax mit dem Update Panel erlegt erledigt. Als ich zum ViewState scrolle scheinen einige Teilnehmer zu glauben ich hätte gerade die Matrix gehacked oder zumindest gedebugged.
  • Oh je, nur noch 3 Minuten Zeit und ich habe doch versprochen früher Schluss zu machen - jetzt muss schnell etwas großartiges her. Ich greife also noch mal in die Trickkiste und greife zu meinem größten Trumpf: runde Ecken;-) Puh, geschafft, die Zuschauer jubeln. Ein Glück, dass es runde Ecken gibt ;-)

Mein Fazit als Sprecher lautet also:

Wahnsinn! Auch wenn es nur ein Einsteiger Vortrag war und laut Handzeichen mindestens die Hälfte der Anwesenden jQuery bereits kannte und nutzte war das Publikum allem Anschein nach während des Vortrags voll dabei. So macht vortragen Spaß!

Der Grillfreund

Zum Abschluss fand für einige Teilnehmer, Sprecher und Sponsoren dann noch die durch Microsoft gesponsorte und durch Jan Welker gestifftete Grill-Party des dotnet Forums statt. Essen und Getränke waren sehr lecker, die Gespräche spannend, von daher auch hier mein Kompliment.

Fazit

Der Besuch der dotnet Cologne hätte in keinster Weise besser laufen können. Großes Lob und alle Achtung an die Organisatoren! Nächstes Jahr bin ich - in welcher Form auch immer - sicherlich auch wieder mit dabei!

Hey, du hast dir die Zeit genommen, den ganzen Beitrag zu lesen, oder zumindest bis hier hin zu scrollen. Nimm dir doch bitte auch noch die Zeit, ihn über den unten stehenden Button bei dotnet-kicks.de zu kicken!

Lebendige ASP.NET Webseiten mit jQuery

29.10.2011 23:11:56 | Andre Kraemer

Moderne Webseiten beinhalten in der heutigen Zeit einen hohen Anteil clientseitiger Quellcodes in Form von JavaScript. Für diesen Anwender führt dies im Idealfall zu einer verbesserten Benutzbarkeit der Applikation, da diese neben netten UI Effekten nun meist durch Ajax auch weitaus flüssiger bedienbar ist.

Bei vielen Entwicklern solcher dynamischer Webseiten führt der vermehrte JavaScript Anteil allerdings häufig zu Wein- und/oder Schreikrämpfen, denn nur die wenigsten mögen JavaScript wirklich. Die Ursachen für diese Antipathie liegen jedoch selten an JavaScript als Sprache selbst, sondern in den meisten Fällen eher an der unterschiedlichen Implementation des DOMs / BOMs durch die verschiedenen Browserhersteller. Diese Inkonsistenz führt nämlich dazu, dass JavaScript Code, der in einem Browser bzw. einer Version eines Browsers problemlos läuft im nächsten Browser Fehler verursacht und schlichtweg nicht läuft.

Weiter wird häufig bemängelt, das Selektionen fernab von einem einfachen document.getElementById(IdMeinesElements) relativ kompliziert sind. Als Beispiel wären hier zu nennen: alle Elemente mit einer bestimmten Klasse, ungerade Zeilen einer Tabelle, das aktivierte Element einer RadioButtonGroup usw.

Und nun?

Nun gibt es folgende Strategien mit diesen Problemen umzugehen:

  1. Man drückt sich immer davor JavaScript zu schreiben und wälzt dies auf einen Kollegen ab
  2. Man kopiert sich irgendwoher JavaScript Codeschnippsel, die angeben browserunabhängig zu sein und hofft, das dem auch so ist
  3. Man investiert Unmengen Zeit in die eigene browserübergreifende Implementierung diverser Funktionalitäten
  4. Man bedient sich eines der am Markt verfügbaren JavaScript Frameworks

Strategie Nr. 1 mag eine Weile ganz gut funktionieren, früher oder später wird aber der Zeitpunkt kommen, an dem man sich nicht mehr drücken kann (ich spreche da aus eigener Erfahrung ;-)).

Strategie Nr. 2 funktioniert immer dann, wenn der Umfang des benötigten JavaScript Codes überschaubar ist. Gemeinsam mit der Applikation wird aber auch irgendwann der zusammenkopierte Code wachsen und die Wartbarkeit entsprechend sinken.

Strategie Nr. 3 ist sicherlich eine prima Idee für alle die außerdem auch ein eigenes Logging Framework, einen eigenen OR Mapper usw implementiert haben, oder kurz gesagt für alle die gerne das Rad neu erfinden ;-)

Gangbar scheint also nur Strategie Nr. 4 zu sein. Schaut man sich nun am Markt um, stößt man unweigerlich auf jQuery. Die freie JavaScript Library adressiert unter anderem genau die zuvor genannten Probleme und hat in letzter Zeit einen wahren Hype verursacht. Dieser Rummel wurde sicherlich auch dadurch verstärkt, dass Microsoft jQuery offiziell supportet, mit Visual Studio ausliefert und die Arbeiten an der hauseigenen JavaScript Bibliothek ASP.NET Ajax Library zugunsten von jQuery eingestellt hat.

Wie legen wir nun aber mit jQuery los? Genau diese Frage möchte ich in diesem und den folgenden Blog Posts beantworten. Da jQuery in einem neuen ASP.NET MVC Projekt automatisch hinzugefügt wird und ASP.NET MVC Entwickler somit sowieso jQuery gewöhnt sind, soll als Beispiel zunächst eine Webforms Anwendung dienen.

Auf die Plätze, fertig, los!

Wenn man jQuery benutzen möchte, besteht der erste Schritt darin, die freie JavaScript Library in seine Seite einzubinden. Dazu lädt man unter http://www.jQuery.com einfach die aktuelle Version der Bibliothek herunter und kopiert diese anschließend zum Beispiel in einen Unterordner Scripts seiner Webanwendung. jQuery ist übrigens in einer für Menschen lesbaren (z. B. jQuery-1.4.2.js) und in einer verkleinerten Version (z, B. jQuery-1.4.2.min.js) verfügbar. In der verkleinerten Version sind unnötige Leerzeichen, Zeilenumbrüche und Kommentare entfernt. Außerdem wurden die Namen der Variablen und nicht öffentlichen Funktionen auf ein oder zwei Buchstaben verkürzt. Sinn dieser Maßnahme ist es die zum Client übertragene Datenmenge zu reduzieren. So ist die verkleinerte Version knappe 100 kb kleiner als die lesbare Variante. Für Produktivszenarien sollte demnach also in jedem Fall die .min Version genutzt werden, wohingegen während der Entwicklungszeit eher die lesbare Variante eingebunden werden sollte. So kann man den Scriptcode im Fall der Fälle nämlich noch debuggen.

So, genug der Vorrede und zurück zur Praxis. Tatsächlich einbinden können wir jQuery nun über folgende Zeile:

<script src="Scripts/jquery-1.4.2.js" type="text/javascript"></script>

Platzieren sollte man diese Zeile übrigens innerhalb des Kopfbereichs der Seite:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="Scripts/jquery-1.4.2.js" type="text/javascript"></script>
</head>

Prima, aber was mache ich nun damit?

Gute Frage! Jetzt haben wir jQuery zwar eingebunden, aber wie geht es jetzt weiter. Dazu sollten wir zunächst kurz einen Blick darauf werfen, was wir normalerweise mit JavaScript machen. In den meißten Fällen reduziert sich dies auf:

  • Elemente aus dem DOM zu selektieren
  • Selektierte Elemente zu manipulieren (ein- / ausblenden, Styledefinitionen zu verändern...)
  • Code bei bestimmten Ereignissen ausführen (z. B. click event)
  • Neue Elemente dem DOM hinzuzufügen
  • Elemente aus dem DOM zu löschen
  • AJAX Aufrufe zum Server zu machen und die Antwort zu Verarbeiten

Als kleinen Einstieg picken wir uns exemplarisch die ersten drei Punkte heraus. Wir werden also DOM Elemente selektieren und diese manipulieren. Geschehen wird dies bei dem Klick auf einen Button.

Dazu werden wir eine Meldungszeile, ähnlich wie man sie von Stackoverflow kennt nachbauen.

01_so_message

Der erste Schritt besteht in der Erstellung eines HTML und CSS Grundgerüsts:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>jQuery Demo</title>

    <style type="text/css">
        body
        {
            margin: 0px;
        }
        #message
        {
            background-color: #FFFF88;
            border-bottom: solid 1px #000000;
            font-weight: bold;
            text-align: center;
            padding: 8px;
            margin: 0px;
            display:none;
            font-family: Arial, Verdana, Sans-Serif;
        }
        #message a
        {
            float: right;
            border: solid 3px black;
            font-family: Arial, Verdana, Sans-Serif;
            font-weight: bold;
            text-decoration: none;
            color: Black;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div id="message"><span>Dummy Nachricht</span><a href="Default.aspx">X</a>
    </div>
    <div id="content">
        <p>
            Dies ist eine jQuery Demowebsite</p>
        <button id="showMessage">
            Klick mich</button>
    </div>
    </form>
</body>
</html>

Wie man sieht, wird ein DIV Element  mit dem Namen "message" erstellt, dass als Unterlemente ein SPAN Element und einen Link enthält. Über CSS wird dieses DIV Element noch ein wenig gestyled und initial ausgeblendet. Außerdem ist auf der Seite noch ein Button definiert. Ein Klick auf diesen Button soll der Auslöser sein, um die Meldung anzuzeigen.

Wie aber genau sieht nun der Code aus, um die Nachricht - mit verändertem Text - anzuzeigen?

Mit der Hilfe von jQuery ist dies garnicht so schwer:

$("#showMessage").click(function(evt) {
    evt.preventDefault();
    $("#message span").text("Du hast den Button geklickt. Klicke nun auf das X, um die Nachricht auszublenden.");
    $("#message").fadeIn(2000);
});
Auf den ersten Blick mag der Code etwas verwirrend aussehen. Vor allem durch die vielen $-Zeichen. Daher ein paar erklärende Worte:

In Zeile 1 selektieren wir mit dem Befehl: $("#showMessage") zunächst das DOM Element mit der ID showMessage, also unseren Button. Das $-Zeichen ist übrigens ein Alias für die jQuery Funktion. Statt $("message") hätte ich also auch jQuery("$message") schreiben können. Die Rückgabe des Aufrufs - unabhängig ob via jQuery(...) oder $(...) ist ein Objekt vom Typ jQuery. Dieses Objekt beinhaltet die selektieren DOM Elemente bzw. das selektierte DOM Element sowie einige weitere Funktionen.

In unserem Fall bekommen wir also ein Objekt vom Typ jQuery zurück, dass das DOM Element showMessage beinhaltet. Für dieses DOM Element wird nun eine anonyme Funktion als Handler für das Ereignis Click registriert.

In Zeile 2 wird mit dem Befehl evt.preventDefault(); nun die Standardaktion die der Browser bei diesem Ereignis, also z. B. das posten des Formulars nach Klick auf den Button, verhindert.

In Zeile 3 werden anschließend alle span Elemente innerhalb des DOM Elements mit der Id message selektiert. In unserem Fall ist dies also genau eins. Für dieses span Element wird mit der Funktion text jetzt ein neuer Text vergeben. Außerdem wird das Element mit der Id message in Zeile 4 langsam (über einen Zeitraum von zwei Sekunden) eingeblendet.

Der Quellcode zum Ausblenden der Nachricht sieht ähnlich aus:

$("#message a").click( function(evt) {
     evt.preventDefault();
     $("#message").fadeOut("slow");
 });

In Zeile 1 wird an alle A-Elemente innerhalb des DOM Elements mit der Id message ein Eventhandler für das Ereignis Click angehangen. Dieser verhindert in Zeile 2 die Standardaktion des Links und blendet in Zeile 3 unsere Nachrichtenzeile wieder aus. Dieses mal wird statt einer Angabe in Millisekunden der String "slow" als Argument übergeben. Dieser ist in den jQuery Quellcodes mit einem Wert von 600 ms hinterlegt.

Perfekt, aber wo schreibe ich den Code nun rein?

So, jetzt wo wir eigentlich den ganzen Quellcode fertig haben stellt sich natürlich die Frage, wie wir ihn in unsere Seite einbinden. Eine naive Implementierung sähe wie folgt aus:

<head>
<!-- ... -->
<script type="text/javascript">
    $("#showMessage").click(function(evt) {
        evt.preventDefault();
        $("#message span").text("Du hast den Button geklickt. Klicke nun auf das X, um die Nachricht auszublenden.");
        $("#message").fadeIn(2000);
    });
    $("#message a").click( function(evt) {
        evt.preventDefault();
        $("#message").fadeOut("slow");
    });
</script>
<!-- ... -->
</head>

Der Code würde also einfach in ein Scripttag innerhalb des Head Tags kopiert werden. Dies läuft so nicht! Der Grund ist, dass mit diesem Code versucht wird, ein Eventhandler an ein DOM Element zu binden, das es zu diesem Zeitpunkt noch garnicht gibt.

Wie sieht aber die Lösung für das Problem aus?

Alles zu seiner Zeit

Wie wir zuvor gesehen haben, ist unser Code wirkungslos, wenn wir ihn ausführen ehe es ein entsprechendes DOM Element gibt. Daher sollten wir ihn erst auslösen, sobald das DOM vollständig initialisiert ist.

Ein weg dies zu erreichen wäre es, den Code aufzurufen wenn das Ereignis window.onload eintritt:

window.onload = function() {
  $("#showMessage").click(function(evt) {
     evt.preventDefault();
     // Restlicher Code hier
  });
}

Diese Variante würde bereits fehlerfrei funktionieren. Allerdings wird das Ereignis onload erst ausgelöst, wenn das DOM vollständig initialisiert wurde und alle externen Ressourcen, wie zum Beispiel Bilder oder Stylesheets geladen wurden. Dies kann von Fall zu Fall recht lange dauern, so dass der Anwender den Button bereits anklicken könnte, ohne dass unser Script ausgeführt wird. Zum Glück bietet jQuery einen besseren Ansatz, nämlich $(document).ready. In dieser Variante wird das Ereignis ready ausgelöst, sobald das DOM vollständig initialisiert wurde, aber bevor externe Ressourcen geladen wurden.

Das vollständige Beispiel mit $(document).ready sieht dann wie folgt aus:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>jQuery Demo</title>

    <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>

    <style type="text/css">
        body
        {
            margin: 0px;
        }
        #message
        {
            background-color: #FFFF88;
            border-bottom: solid 1px #000000;
            font-weight: bold;
            text-align: center;
            padding: 8px;
            margin: 0px;
            display:none;
            font-family: Arial, Verdana, Sans-Serif;
        }
        #message a
        {
            float: right;
            border: solid 3px black;
            font-family: Arial, Verdana, Sans-Serif;
            font-weight: bold;
            text-decoration: none;
            color: Black;
        }
    </style>

    <script type="text/javascript">
        $(document).ready(function() {
            $("#showMessage").click(function(evt) {
                evt.preventDefault();
                $("#message span").text("Du hast den Button geklickt. Klicke nun auf das X, um die Nachricht auszublenden.");
                $("#message").fadeIn(2000);
            });
            $("#message a").click(function(evt) {
                evt.preventDefault();
                $("#message").fadeOut("slow");
            }
        }
      });
    </script>

</head>
<body>
    <form id="form1" runat="server">
    <div id="message"><span>Dummy Nachricht</span><a href="Default.aspx">X</a>
    </div>
    <div id="content">
        <p>
            Dies ist eine jQuery Demowebsite</p>
        <button id="showMessage">
            Klick mich</button>
    </div>
    </form>
</body>
</html>

Ausblick und Fazit

Wie dieser Blog Eintrag gezeigt hat, ist jQuery eine recht komfortabel zu bediene JavaScript Library, mit der sich mit wenigen Zeilen Script Code interessante Effekte erzielen lassen. Neben der intuitiven und Browser unabhängigen API besticht die Bibliothek vor allem durch die Fülle an Funktionen und erhältlichen Plug-Ins. Selbstverständlich konnte ich hier nur einen kurzen (ersten) Einblick verschaffen. Da ich das Thema Clientseitige Entwicklung in (ASP.NET) Webanwendungen jedoch für sehr interessant halte, habe ich vor in der nächsten Zeit weitere Einträge zum Thema jQuery mit folgenden Schwerpunkten zu schreiben:

  • Nutzen von Content Delivery Networks (CDNs)
  • jQuery Selektoren
  • Möglichkeiten der DOM Manipulation
  • jQuery und Firebug
  • jQuery Plugins selber entwickeln
  • jQuery UI
  • jQuery Utility Funktionen
  • jQuery und Ajax für Webforms und ASP.NET MVC

Eventuell werde ich im Anschluss an die Artikel auch kurze Video Tutorials bereitstellen.

Bevor ich allerdings loslege würde mich natürlich interessieren, ob das Thema für euch überhaupt von Interesse ist. Am liebsten in Form eines kurzen Kommentars.

Sollte jemand von euch übrigens das Verlangen haben, das Thema jQuery, oder auch generell ASP.NET mit mir persönlich in lockerer Atmosphäre zu diskutieren: Am 28. Mai werde ich einen Einsteigervortrag zu jQuery auf der dotnet Cologne 2010 halten. Über zahlreiche Besucher des Vortrags und natürlich auch spannende Diskussionen danach würde ich mich sehr freuen.

In den Pausen findet man ihr mich übrigens wahrscheinlich im Ausstellerbereich am Stand der Firma Infragistics. Dort wäre ich dann zusätzlich auch für den ein oder anderen Plausch über die Infragistics NetAdvantage Komponenten zu haben.

War dieser Artikel hilfreich für dich? Dann kicke ihn doch bitte bei dotnet-kicks.de!

ASP.NET Anwendungen mit der Powershell warmklicken

29.10.2011 23:11:56 | Andre Kraemer

Startet man eine ASP.NET Anwendung zum ersten Mal, kommt man nicht gerade in einen Geschwindigkeitsrausch. Dies liegt zum Beispiel daran, dass der IIS den ASP.NET Worker Prozess hochfahren muss. Außerdem läuft eventuell im Ereignis Application_Start hinterlegter Initialisierungscode und schließlich müssen die vorliegenden Assemblies noch durch den JITer in nativen Code überführt werden.

All dies führt dazu, dass man relativ selten so etwas wie "rasend schnell" hört, wenn vom ersten Zugriff auf eine ASP.NET Anwendung gesprochen wird.

Glücklicherweise ist all dies nach dem ersten Request einer Seite kein Problem mehr. Der Worker Prozess ist da, der Initialisierungscode lief und die Just In Time Compilation lief auch.

Zu einem Problem wird die Situation jedoch, wenn man seine ASP.NET Anwendung während der Entwicklung als ein Bestandteil des Nightly Builds automatisch deployed und auch seinem Kunden Zugriff auf diesen täglich frischen Applikationsstand gibt.

Da Kunden morgens nämlich meist früher als Entwickler im Büro sind, sind sie auch die ersten, die die Webanwendung öffnen, um zu sehen, was am Vortrag umgesetzt wurde. Ist dieser erste Zugriff nun aus den oben genannten Gründen langsam, ist negatives Feedback des Kundens zur Applikationsperformance - oder sogar noch schlimmer: im Stillen sinkendes vertrauen in Applikation und Entwickler nicht selten die Folge.

Um dieses Problem zu umgehen, habe ich ein kleines Powershell Script geschrieben, das nach Angabe einer URL die einzelnen Seiten einer Webapplikation ansurft. 

function warmup-site( [string] $rootUrl){
	
	$proxy = New-Object System.Net.WebProxy("mein.firmen.proxy:8080")
	$proxy.UseDefaultCredentials = 1
	
	$wc = New-Object System.Net.WebClient
	$wc.Proxy = $proxy
	
	$pages = @("default.aspx", "seite1.aspx", "seite2.aspx", "subfolder/seite3.aspx")

	# Jede Seite 3 Mal ansurfen, um Sie "warmzuklicken"
	for ($i=0; $i -lt 3; $i++){
		foreach($page in $pages){
			trap [System.Net.WebException] {
			  write-error $("TRAPPED: " + $_.Exception.ToString());
			  continue;
		   	}
			$content = $wc.DownloadString($rootUrl+$page)
			write $("URL " + $rootUrl+$page + " angesurft");
		}
	}

}

warmup-site("http://meine.url/")

Bisher gebe ich die einzelnen Seiten die angefragt werden sollen noch manuell innerhalb des Arrays $pages an. Im nächsten Schritt würde ich jedoch lieber nur noch die URL der Sitemap angeben, diese auslesen und dann sämtliche in der Sitemap aufgeführten URLs anfragen. Da ich jedoch noch Powershell Neuling bin, könnte es noch ein wenig dauern, bis ich die Lösung so weit automatisiert habe. Sollte einer der Leser nun sagen: "Das ist doch ein Dreizeiler, den ich in der Kaffeepause aus dem Ärmel schütteln könnte", dann würde ich darum bitten genau diesen Dreizeiler über die Kommentarfunktion meines Blogs hier einzustellen ;-)

Was bringts?

Die Anwendung startet beim ersten Request nun bedeutend schneller. Somit ist der Kunde beruhigt und wir können uns auf die wichtigen Sachen des Projekts konzentrieren ;-)

Habe übrigens gesehen, dass es ab dem IIS 7 (oder 7.5?) von Hause aus eine Warmup gibt. Hat jemand von euch Erfahrung damit? Im Moment ist es für mich zwar noch nicht akut, da wir den IIS 6 nutzen, wäre aber Interessant für die Zukunft ein paar Erfahrungsberichte zur Hand zu haben.

Wie ziehe ich mir eigentlich einen Memory Dump meiner Anwendung

29.10.2011 23:11:56 | Andre Kraemer

Vor einiger Zeit habe ich ein kleines Einsteigertutorial zum Umgang mit WinDbg geschrieben. Etwas später folgte dann auch ein kurzes Video hierzu.

Sowohl im Tutorial als auch im Video war eine Windows Forms Anwendung das Ziel meiner Debuggingaktivitäten. In einem kurzen Nebensatz erwähnte ich, dass die Zielanwendung bei der gezeigten Vorgehensweise, nämlich dem direkten Anhängen an den Prozess der Wahl, zumindest zeitweise blockiert wird.

In einer Windows Forms Anwendung mag dies kein Problem sein, schließlich bin ich ja alleine auf dem System. Unschön wird es jedoch, wenn man Probleme in einer produktiven ASP.NET Anwendung sucht. Verständlicherweise reagieren hier nämlich die wenigsten Anwender erfreut, wenn die Website steht weil gerade jemand im Hintergrund daran herumfummelt. Außerdem ist es je nach IT Richtlinie auch problematisch den lokalen Administrator des Kundens davon zu überzeugen, dass man mal gerade physikalisch oder auch nur per Remote Desktop an seinen Webserver will.

Und nun?

Abhilfe schafft hier die VBScript Datei adplus.vbs innerhalb des WinDbg Verzeichnisses. Sie ermöglicht es, ein aktuelles Speicherabbild des problematischen Prozesses in Form einer *.DMP Datei zu erstellen. Diese kann wiederum in WinDbg geöffnet und analysiert werden.

Adplus kann in zwei verschiedenen Modi genutzt werden: hang und crash.

Im hang Modus wird einmalig ein aktueller Memory Dump des Prozesses zum Zeitpunkt der Ausführung des Scripts gezogen. Dieser Modus eignet sich besonders wenn die Applikation "hängt" ;-), also in Deadlock Szenarien, oder aber auch um Memory Leaks zu finden. Zur besseren Analyse sollten im Fall ein Memory Leaks jedoch mehrere Dumps bei verschieden hoher Speicherauslastung gezogen werden.

Der Befehl zum Erzeugen eines Dumps im hang Modus lautet übrigens:

adplus.vbs -hang -p processId

Die Id des Prozesses kann entweder über den Taskmanager, oder aber im Fall einer ASP.NET Anwendung die in einem IIS 6 gehostet wird, über den Befehl IISAPP gefunden werden.

Alternativ zum Parameter -p kann über den Parameter -pn auch ein Prozessname angegeben werden. Im Fall einer ASP.NET Anwendung wäre dies also W3WP.exe (Windows Server mit IIS) bzw. WebDev.WebServer.exe im Falle des lokalen Entwicklungsservers. Außerdem kann über den optionalen Parameter -o auch ein dediziertes Ausgabeverzeichnis angegeben werden. Standardmäßig wird nämlich sonst ein Unterverzeichnis, unterhalb des Ordners aus dem adplus heraus aufgerufen wurde, angelegt.

Innerhalb des Zielverzeichnisses wird nun eine Datei mit der Endung .DMP angelegt. Diese kann in WinDbg über den Menüpunkt File -> Open Crash Dump ... geöffnet und mit den bereits bekannten Befehlen analysiert werden.

Der zweite Modus neben hang ist der Modus crash.

Der Aufruf erfolgt hier ähnlich zum hand Modus, mit dem einzigen Unterschied, dass statt -hang -crash übergeben wird.

adplus.vbs -crash -p processId

Im Crash Modus bleibt der Debugger so lange am entsprechenden Prozess angehangen, bis dieser unfreiwillig beendet wird. Tritt dieser Fall ein, wird ein Dump auf die Festplatte geschrieben. Außerdem werden Dumps geschrieben, wenn ein zuvor definierter Breakpoint erreicht wird, oder aber eine access violation Exception auftritt.

Fazit

Mit adplus liegt ein leichtgewichtiges Skript zur Hand, dass bei der Problemanalyse innerhalb produktiver Umgebungen enorm helfen kann. Gerade in Umgebungen, in denen das Live-System nicht durch Debugging blockiert werden darf, oder aber der Administrator keinen Zugriff auf das System gewährt, kann das Skript seine stärken Ausspielen.

Tags:

Ein zweites Zuhause

29.10.2011 22:11:56 | Andre Kraemer

Habe ich für meine Blog Beiträge gefunden. Zumindest die englischen, die einen Bezug zu den Infragistics NetAdvantage Controls haben.

Seit kurzem gibt auf der Infragistics Homepage nämlich einen MVP Blog, für das ich einer der Autoren bin.

Selbstverständlich gibt es auch schon einen ersten Blog Post von mir. Dieser beinhaltet neben einer kurzen (OK, langen ;-)) Vorstellung ein kleines jQuery Script, welches hilfreich beim Einsatz des Infragistics ASP.NET Aikido WebDropdown Controls ist.

igmvpblog

Was hast du vor 10 Jahren programmiert

29.10.2011 22:11:56 | Andre Kraemer

Vor ein paar Wochen haben unter anderem Darius, Alex und Thomas darüber geblogged, was sie vor 10 Jahren programmiert haben.

Natürlich kam ich auch ins Grübeln und so fiel mir ein, dass ich zu dieser Zeit meine Zeit meist mit VB 6 Desktop Anwendungen, Outlook Formularanwendungen, oder aber PHP oder Classic ASP Webanwendungen verbracht habe. Allerdings habe ich seitdem mehrfach den Arbeitgeber gewechselt und die Source Codes daher auch nicht mehr im Zugriff. Somit war das Thema, einen Blogeintrag zu dieser Frage zu schreiben für mich eigentlich erledigt.

Eigentlich ...

Aber auch nur eigentlich, denn lustigerweise schickte mir letzte Woche ein ehemaliger Kollege aus heiterem Himmel einen alten Screenshot, den er irgendwo gefunden hatte.

Bei diesem Screenshot handelte es sich um einen Gag Screen einer Anwendung, die wir 1999 für die Finanzbuchhaltung der Nürburgring GmbH geschrieben hatten. Das Bild öffnete sich übrigens, wenn ich mich recht erinnere beim Klick auf ein Label. In den vier Jahren, in denen ich die Anwendung anschließend noch weiter betreut habe, kam allerdings nie eine Anfrage zu dieser Bildschirmmaske. Daher gehe ich mal davon aus, dass es niemand gefunden hat :-)

Auf dem Bild zu sehen sind übrigens mein damaliger Kollege, der ein ehemaliger Schulkamerad und mein späterer WG Mitbewohner war, und ich. Das Bild wurde allerdings nicht während der Arbeit, sondern während eine Pre-Game Grill Party eines Spiels der Frankfurt Galaxy aufgenommen. Zu rätseln, wer von uns beiden wer ist, überlasse ich den Lesern dieses Blogs.

programmierer

Schöne Erinnerung! Vielen Dank für das Bild Oliver!

Tags: ,

Software Legende Juval Löwy am 8. Dezember in Koblenz

29.10.2011 22:11:56 | Andre Kraemer

Am 8. Dezember hat unsere User Group in Koblenz mit Juval Löwy nach Tony Lombardo den zweiten internationalen Sprecher zu Gast.

Juval wird bei uns seinen Vortrag “The Architect” halten, der für alle Software Architekten sowie Entwickler interessant ist.

Da wir dieses Mal die Kapazitäten ein wenig besser planen müssen, bitten wir um eine formlose, kurze Anmeldung unter dnug@konzeptum.de.

Das Treffen wird dieses Mal übrigens nicht bei Konzeptum, sondern ausnahmsweise bei der Görlitz AG statt finden.

Weite Details zum Treffen gibt es auf der Homepage der DNUG-Koblenz. Eine Anfahrtsbeschreibung zu Görlitz findet ihr hier.

HTTP Fehler 401 beim hinzufügen eines Custom WebParts

29.10.2011 22:11:56 | Andre Kraemer

Gestern überraschte mich Sharepoint mit einem mir zunächst vollkommen unverständlichen Verhalten.

Ich versuchte zu einer Seite ein WebPart hinzuzufügen, welches ich kurz davor entwickelt hatte. Jedoch kam jedes Mal nachdem ich das Webpart auswählte ein Dialog der mich zur Eingabe von Benutzernamen und Passwort aufforderte. Meine korrekt eingegebenen Benutzerdaten akzeptierte der Dialog nicht. Der Klick auf “Abbrechen” führte schließlich zu einer Standard HTTP 401 Unauthorized Seite.

Weder im Event-Log, noch in den Sharepoint-Logs konnte ich Informationen zur Fehlerursache finden.

Also folgte einige Zeit der Ratlosigkeit und des Fluchens ehe ich mehr zufällig auf die Lösung kam:

Ursache des Problems war eine fehlerhaft von mir implementierte Property meines Webparts. Diese sah ungefähr wie folgt aus:

private string pfad
public string Pfad
{
   get
   {
      return Pfad.EndsWith("/")?Pfad:string.Concat(Pfad,"/");
   }
   set
   {
      pfad = value;
   }
}

Wie man sieht habe ich einen kleinen, aber entscheidenden Fehler innerhalb des Getters. Anstatt mein Feld mit dem Namen pfad zurück zu geben, gebe ich innerhalb des Getters der Eigenschaft Pfad die Eigenschaft Pfad zurück. Somit ruft diese Eigenschaft sich so lange selber auf, bis eine StackOverflowException auftritt.

Diese StackOverflowException führte dazu, dass der Workerprozess meiner Sharepoint Web Applikation recycled wurde. Somit waren meine zuvor eingegebenen Credentials ungültig und der IIS fragte mich erneut nach den korrekten Zugangsdaten.

Nachdem ich den Getter entsprechend korrigiert hatte, lies sich das Webpart problemlos einfügen.

private string pfad
public string Pfad
{
   get
   {
      return pfad.EndsWith("/")?pfad:string.Concat(pfad,"/");
   }
   set
   {
      pfad = value;
   }
}

Du kommst hier nicht rein!

29.10.2011 22:11:56 | Andre Kraemer

Nutzer des IE 6 sehen sie im Internet immer häufiger: mehr oder weniger diskrete Hinweise, dass der genutzte Browser veraltet wäre und man doch bitte die aktuelle Version einspielen, oder aber einen alternativen Browser einsetzen solle.

Gegen solche Hinweise habe ich nichts einzuwenden. Schließlich ist der IE 6 nun wirklich kein aktueller Browser mehr und aufgrund seiner vielen bekannten Fehler bei der Darstellung von standardkonformen (X)HTML / CSS ist es für den Webdesigner nur unter großem Aufwand möglich, einen Internetauftritt so zu gestallten, dass er sowohl in standardkonformen Browsern und im IE 6 vernünftig aussieht. Außerdem sollte man auch die zum Teil recht eigenwillige Implementierung des DOMs und von JavaScript nicht vergessen, die den IE 6 auch für JavaScript Entwickler schnell zum Alptraum werden lassen.

Türsteher

Heute kam mir jedoch eine sehr restriktive Variante des bekannten “Rette deine Seele und nutze einen moderneren Browser” Hinweises unter: Und zwar wollte ich kurz einen Eintrag auf Jan Welkers Blog lesen, der meine Aufmerksamkeit erregt hatte. (Anmerkung: Ich schätze Jan wirklich sehr! Dieser Beitrag soll sich nicht persönlich gegen ihn richten!) Nach dem Öffnen des Beitrags im Browser bekam ich jedoch nicht die gewünschte Information zugesicht, sondern wurde automatisch auf eine Seite weitergeleitet, die mir freundlich erklärte, dass man meinen Browser nicht möge und ich doch bitte mit einem neueren oder anderen Browser wieder kommen soll. Ab diesem Augenblick war ich also ausgesperrt. Ausgesperrt, weil der Rechner an dem ich saß (es war nicht mein Rechner) von der dortigen IT Abteilung nur den IE 6 installiert bekommen hatte.

Nun wusste ich also endlich, wie sich meine Freunde vor 15 Jahren gefühlt haben müssen, als der Türsteher vor der Disco sagte “Du kommst hier nicht rein! Deine Klamotten gefallen mir nicht!”. Tja, damals lachte ich noch über die Jungs, die die Kleidung noch morgens von ihrer Mutter herausgelegt bekamen und mit diesem Outfit dann halt nicht in die Disco kamen. Heute war ich es jedoch, der im wahrsten Sinne des Wortes dumm aus der Wäsche guckte.

Gegenwind

Etwas missmutig über das gerade geschehene wechselte ich auf Twitter – wo ich im Übrigen nur einen Hinweis “your browser is outdated” erhielt – und fragte Jan, oder die Idee mit dem Aussperren wirklich für so gut hält.

Leider bekam ich bis jetzt noch keine Antwort Jan, dafür aber von anderen bekannten Gesicherten der Community, die zu meiner Verwunderung Jans Strategie vollstens unterstützten und zum Teil sogar das gleiche taten.

Grob zusammengefasst lauteten die Argumente:

  • Wenn mehr große Webseiten genauso agieren würden, wäre der IE 6 endlich weg
  • Der Aufwand für ein IE 6 konformes Layout ist im Vergleich zum Nutzen viel zu groß

Beide Argumente kann ich sehr gut nachvollziehen – und um eines ganz klar zu stellen: Ich bin kein Fan des IE 6. Auch mich hat er, wie wahrscheinlich die meisten Webentwickler bereits viel Zeit, Nerven und Haare (nein, Haare nicht: die waren schon vor dem IE 6 weg ;-) gekostet.

Wie denn sonst?

Trotzdem halte ich wenig vom aktiven Aussperren von interessierten Nutzern (m)einer Website. Für weitaus besser und vor allem anwenderfreundlicher halte ich es in den meisten Fällen, im Falle des IE 6 einen Hinweis einzublenden, dass der genutzte Browser nicht aktuell ist, was dazu führen könnte, dass sowohl Darstellungs-, als auch Funktionsfehler auftreten.

Über diesen Weg habe ich niemanden den Zugriff auf die von mir bereitgestellten Informationen verwehrt und Nutzer veralteter Browser trotzdem über mögliche Fehler auf der Seite, welche durch ihn verschuldet sind, informiert.

Wenn ich nämlich kurz überlege, warum jemand noch den IE 6 einsetzen könnte, dann fallen mir folgende Gründe ein:

  1. Geringe Computerkenntnisse: Der IE 6 war vorinstalliert und der Anwender ist sich entweder nicht bewusst, dass er updaten sollte, oder aber traut sich dies nicht zu.
  2. Falsche Informationen: Ein befreundeter “Computerspezialist” hat dem (laienhaften) Anwender erzählt, dass der IE 6 der schnellste Browser sei, weil er schon so alt ist und deshalb auf moderner Hardware besonders schnell läuft.
  3. Faulheit: Der Anwender weiss zwar, dass der IE 6 fehlerhaft ist, hat ihn aber aus dem selben Grund noch installiert, aus dem er auch keine regelmäßigen Backups macht und keinen bzw. keinen aktuellen Virenscanner hat.
  4. Gewohnheit: Der Anwender nutzt den IE 6 bereits seit Jahren, kommt gut mit ihm zurecht und will deshalb gar nicht updaten.
  5. Abhängigkeiten von alten, aber wichtigen Intranet Anwendungen: Der Anwender würde gerne updaten, kann es aber nicht, weil seine geschäftskritische Intranetanwendung nur vernünftig unter dem IE 6 läuft (ja, das soll es auch geben ;-)).
  6. Die IT-Abteilung: Der Anwender würde gerne upgraden, hat gar keine Rechte dies zu tun. Die IT-Abteilung hingegen weigert sich gegen das Update, weil sie dann vielleicht eine Liste unzähliger Intranetanwendungen auf Kompatibilität testen und den neueren IE direkt auf unmengen von Clients ausrollen müsste.

Wenn ich nun auf diese Liste Blicke frage ich mich, welche Kategorie ich wirklich von meinem Internetangebot ausschließen möchte. Drei und Vier wären vielleicht geeignete Kandidaten, der ganze Rest jedoch eigentlich nicht. Und selbst bei drei und vier frage ich mich, ob man hier nicht doch die Freiheit gewähren sollte mit einem Browser der Wahl zu arbeiten.

Wenn das Ergebnis dann anschließend nicht vernünftig aussieht: Selber schuld!

Mein Appell

Mein Aufruf an die Betreiber von Webangeboten lautet daher: Schließt keine interessierten Anwender aus! Informiert lieber dezent, dass der Browser und somit das Ergebnis nicht optimal ist, aber lasst IE 6 User nicht draußen warten!

Denn wenn wir tief in uns gehen und uns ehrlich fragen, ob durch das Aussperren des IE 6

  • die Welt besser wird?
  • das Web besser wird?
  • Der IE 6 schneller aussterben wird

dann müssen wir, oder zumindest ich diese Fragen wohl mit nein beantworten. Dies ist übrigens die gleiche Antwort, die man wahrscheinlich auf die Frage:

  • Wird der User den ich eben wegen seines Browsers ausgesperrt habe jemals wieder kommen?

In diesem Sinne: http://saveie6.com/ ;-)

Natürlich lasse ich mich aber auch gerne vom Gegenteil überzeugen. Sprich: Eure Meinung zu diesem Thema interessiert mich sehr.

ALL-INKL.COM: Hinzufuegen bzw. Ueberpruefen einer Domaene bzw. Domain bei Office 365 (DNS, TXT-, MX-Eintrag) 

26.10.2011 19:22:00 | Kay Giza

ALL-INKL.COM: Hinzufügen bzw. Überprüfen von Domänen bzw. Domains bei Office 365 (DNS, TXT-, MX-Eintrag) Wenn Sie bereits eine Domäne (englischsprachig: Domain) bei ALL-INKL.COM registriert haben und diese nun mit Microsoft Office 365 für Unternehmen einsetzen möchten, ist eine Überprüfung erforderlich, die Sie als über diese Domäne verfügungsberechtigt ausweist. Office 365 nimmt diese Überprüfung anhand eines neuen DNS-Eintrags vor, den Sie für Ihre Domäne auf die ALL-INKL.COM-Website erstellen... [... mehr dazu in diesem Blogeintrag auf Giza-Blog.de]

This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
© Copyright 2006-2011 Kay Giza. All rights reserved. Legal
Subscribe

United Domains: Hinzufuegen bzw. Ueberpruefen einer Domaene bzw. Domain bei Office 365 (DNS, TXT-, MX-Eintrag) 

26.10.2011 19:21:23 | Kay Giza

United Domains: Hinzufügen bzw. Überprüfen von Domänen bzw. Domains bei Office 365 (DNS, TXT-, MX-Eintrag) Wenn Sie bereits eine Domäne (englischsprachig: Domain) bei United Domains registriert haben und diese nun mit Microsoft Office 365 für Unternehmen einsetzen möchten, ist eine Überprüfung erforderlich, die Sie als über diese Domäne verfügungsberechtigt ausweist. Office 365 nimmt diese Überprüfung anhand eines neuen DNS-Eintrags vor, den Sie für Ihre Domäne auf die United Domains-Website erstellen... [... mehr dazu in diesem Blogeintrag auf Giza-Blog.de]

This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
© Copyright 2006-2011 Kay Giza. All rights reserved. Legal
Subscribe

Strato: Hinzufuegen bzw. Ueberpruefen einer Domaene bzw. Domain bei Office 365 (DNS, TXT-, MX-Eintrag)

26.10.2011 19:20:43 | Kay Giza

Strato: Hinzufügen bzw. Überprüfen von Domänen bzw. Domains bei Office 365 (DNS, TXT-, MX-Eintrag) Wenn Sie bereits eine Domäne (englischsprachig: Domain) bei Strato registriert haben und diese nun mit Microsoft Office 365 für Unternehmen einsetzen möchten, ist eine Überprüfung erforderlich, die Sie als über diese Domäne verfügungsberechtigt ausweist. Office 365 nimmt diese Überprüfung anhand eines neuen DNS-Eintrags vor, den Sie für Ihre Domäne auf die Strato-Website erstellen... [... mehr dazu in diesem Blogeintrag auf Giza-Blog.de]

This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
© Copyright 2006-2011 Kay Giza. All rights reserved. Legal
Subscribe

Host Europe: Hinzufuegen bzw. Ueberpruefen einer Domaene bzw. Domain bei Office 365 (DNS, TXT-, MX-Eintrag) 

26.10.2011 19:19:59 | Kay Giza

Host Europe: Hinzufügen bzw. Überprüfen von Domänen bzw. Domains bei Office 365 (DNS, TXT-, MX-Eintrag) Wenn Sie bereits eine Domäne (englischsprachig: Domain) bei Host Europe registriert haben und diese nun mit Microsoft Office 365 für Unternehmen einsetzen möchten, ist eine Überprüfung erforderlich, die Sie als über diese Domäne verfügungsberechtigt ausweist. Office 365 nimmt diese Überprüfung anhand eines neuen DNS-Eintrags vor, den Sie für Ihre Domäne auf die Host Europe-Website erstellen.... [... mehr dazu in diesem Blogeintrag auf Giza-Blog.de]

This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
© Copyright 2006-2011 Kay Giza. All rights reserved. Legal
Subscribe

Hetzner Online: Hinzufuegen bzw. Ueberpruefen einer Domaene bzw. Domain bei Office 365 (DNS, TXT-, MX-Eintrag)

26.10.2011 19:19:08 | Kay Giza

Hetzner Online: Hinzufügen bzw. Überprüfen von Domänen bzw. Domains bei Office 365 (DNS, TXT-, MX-Eintrag) Wenn Sie bereits eine Domäne (englischsprachig: Domain) bei Hetzner Online registriert haben und diese nun mit Microsoft Office 365 für Unternehmen einsetzen möchten, ist eine Überprüfung erforderlich, die Sie als über diese Domäne verfügungsberechtigt ausweist. Office 365 nimmt diese Überprüfung anhand eines neuen DNS-Eintrags vor, den Sie für Ihre Domäne auf die Hetzner Online-Website erstellen... [... mehr dazu in diesem Blogeintrag auf Giza-Blog.de]

This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
© Copyright 2006-2011 Kay Giza. All rights reserved. Legal
Subscribe

Domain Factory: Hinzufuegen bzw. Ueberpruefen einer Domaene bzw. Domain bei Office 365 (DNS, TXT-, MX-Eintrag) 

26.10.2011 19:18:24 | Kay Giza

Domain Factory: Hinzufügen bzw. Überprüfen von Domänen bzw. Domains bei Office 365 (DNS, TXT-, MX-Eintrag) Wenn Sie bereits eine Domäne (englischsprachig: Domain) bei Domain Factory registriert haben und diese nun mit Microsoft Office 365 für Unternehmen einsetzen möchten, ist eine Überprüfung erforderlich, die Sie als über diese Domäne verfügungsberechtigt ausweist. Office 365 nimmt diese Überprüfung anhand eines neuen DNS-Eintrags vor, den Sie für Ihre Domäne auf die Domain Factory-Website erstellen... [... mehr dazu in diesem Blogeintrag auf Giza-Blog.de]

This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
© Copyright 2006-2011 Kay Giza. All rights reserved. Legal
Subscribe

Verio: Hinzufuegen bzw. Ueberpruefen einer Domaene bzw. Domain bei Office 365 (DNS, TXT-, MX-Eintrag) 

26.10.2011 19:17:43 | Kay Giza

Verio: Hinzufügen bzw. Überprüfen von Domänen bzw. Domains bei Office 365 (DNS, TXT-, MX-Eintrag) Wenn Sie bereits eine Domäne (englischsprachig: Domain) bei Verio registriert haben und diese nun mit Microsoft Office 365 für Unternehmen einsetzen möchten, ist eine Überprüfung erforderlich, die Sie als über diese Domäne verfügungsberechtigt ausweist. Office 365 nimmt diese Überprüfung anhand eines neuen DNS-Eintrags vor, den Sie für Ihre Domäne auf die Verio-Website erstellen... [... mehr dazu in diesem Blogeintrag auf Giza-Blog.de]

This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
© Copyright 2006-2011 Kay Giza. All rights reserved. Legal
Subscribe

1 und 1 Internet AG: Hinzufuegen bzw. Ueberpruefen einer Domaene bzw. Domain bei Office 365 (DNS, TXT-, MX-Eintrag)

26.10.2011 19:16:44 | Kay Giza

1&1 Internet AG: Hinzufügen bzw. Überprüfen von Domänen bzw. Domains bei Office 365 (DNS, TXT-, MX-Eintrag) Wenn Sie bereits eine Domäne (englischsprachig: Domain) bei 1&1 Internet AG registriert haben und diese nun mit Microsoft Office 365 für Unternehmen einsetzen möchten, ist eine Überprüfung erforderlich, die Sie als über diese Domäne verfügungsberechtigt ausweist. Office 365 nimmt diese Überprüfung anhand eines neuen DNS-Eintrags vor, den Sie für Ihre Domäne auf die 1&1 Internet AG-Website erstellen... [... mehr dazu in diesem Blogeintrag auf Giza-Blog.de]

This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
© Copyright 2006-2011 Kay Giza. All rights reserved. Legal
Subscribe

Office 365: Hinzufuegen bzw. Ueberpruefen von Domaenen bzw. Domains (DNS, TXT-, MX-Eintrag)

26.10.2011 19:09:54 | Kay Giza

Office 365: Hinzufügen bzw. Überprüfen von Domänen bzw. Domains (DNS, TXT-, MX-Eintrag) Ich wurde in letzter Zeit sehr häufig gefragt, was die genauen Schritte sind, um seine (eigene) Domain für Office 365 authentifizieren zu lassen. Was hat dies auf sich mit diesem  TXT-Eintrag bzw. einen MX-Eintrag? Wenn Sie bereits Office 365 kennen und eine Trial haben oder bereits vollständig (bezahlt) nutzen, müssen bzw. sollten Sie ihre eigene Domain nutzen. So können Sie beispielsweise E-Mail-Konten erstellen, die Name@IhreDomain.de lautet und vieles weitere mehr. Zugegeben, es klingt kompliziert, ist es aber gar nicht. Mit wenigen Schritten und in kurzer Zeit, haben Sie dies erledigt... [... mehr in diesem Blogeintrag auf Giza-Blog.de]

This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
© Copyright 2006-2011 Kay Giza. All rights reserved. Legal
Subscribe

Das Ipsum-Universum, alternativen für den Alltag

26.10.2011 17:25:15 | Albert Weinert

Jeder der mal irgendwann ein Layout für Irgendwas gemacht hat, der braucht Leertexte. Das erste was einem einfällt ist dass bekannte Lorem Ipsum

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

Um mal eben einen Lorem Ipsum Text in verschiedenen längen zur erzeugen gibt dank des Internets auch Generatoren.

Jedoch wäre es nicht das Internet wenn es nicht Ipsum Generatoren für verschiedene Geschmacksrichtungen geben würde. Für Süßkram-Lieberhaber, Fleischfresser, Veganer und mehr.

Hier ein Liste von ein Ipsum Generatoren die mir bekannt sind.

Texte

Bilder

  • lorempixel.com (via Patrick)
    Zufällige Bilder in verschiedenen Größen und Themen

Wenn ihr weitere Ipsum-Generatoren für andere Kunden-Bereiche kennt, einfach im Kommentar hinterlassen, ich werde dann diese Liste hier ergänzen.

Eure Wünsche für die “dotnet Kicks”-App vNext

25.10.2011 18:04:12 | dotnet-kicks.de Blog

Vor kurzem haben wir ja die Windows Phone App “dotnet Kicks” mit einem kleinen Update auf Version 1.1 versorgt. In den nächsten Tagen kommt ebenfalls ein Mini-Update auf Version 1.2, das noch mal ein paar Optionen mitbringt und – in einer zweiten Variante kurz darauf – “Mango” unterstützen wird.

Doch wir arbeiten bereits an der Version 2.0 der dotnet Kicks-App, und wollen hierzu eure Meinung einholen! Was für Funktionen wünscht ihr euch unbedingt? Was sollten wir anders / besser machen? Je mehr Feedback ihr uns gebt, desto mehr können wir hiervon in die Version vNext mit einfliessen lassen. Smiley

Für das Brainstorming haben wir eine Seite bei tricider erstellt: http://tricider.com/de/brainstorming/AJiJ

Hier könnt ihr neue Ideen auch anonym und ohne Anmeldung eintragen oder über bereits eingetragene Ideen abstimmen. Besser ist es natürlich, sich vorher anzumelden, damit ihr eure Einträge hinterher auch noch bearbeiten könnt.

Zur Umfrage

Die dotnet Cologne 2012 wird am 4. Mai stattfinden

25.10.2011 14:52:20 | Albert Weinert

Unser Verein der dotnet Köln/Bonn e.V. hat sich erneut dazu bereit erklärt eine weitere dotnet Cologne zu organisieren.

Die bedeutet dass sich Melanie, Roland, Stefan und ich uns wieder in die Arbeit stürzen, durch höhen und tiefen gehen, damit Ihr dann am 4. Mai 2012 mit uns gemeinsam die Vorträge auf der dotnet Cologne 2012 anschauen könnt. Der Veranstaltungsort ist wieder das Komed im Kölner Mediapark.

Es ist ja eine Community Konferenz, von der Community für die Community. Nächstes Jahr stehen rund um den .NET Bereich viele Neuerungen an  z.B. .NET 4.5, Windows 8, Windows Runtime, Visual Studio 11, Silverlight 5, ASP.NET MVC 4, Windows Phone Tango usw. usf., doch auch noch die aktuellen Technologien werden uns lange erhalten bleiben. Dazu gibt es noch Mono auf dem Mac OS X, iOS und Android. Neben den ganzen Technologie-Themen sind ja noch Architekturen, Design, Testen und Tooling zu behandeln.

Es sind also viele Themenbereiche die man machen kann.

Doch besser ist es ja das zu machen was Ihr wissen möchtet.

Deshalb habe ich eine Umfrage aufgesetzt. Diese könnt Ihr ergänzen wir ihr möchtet und auch entsprechend abstimmen, ein Anmeldung an dem Dienst tricider ist nicht erforderlich. Jedoch wenn Ihr es macht habt Ihr die Chance Verbesserungen an euren Eingaben zu vollziehen. Seid möglichst präzise mit euren Wünschen ein einfaches “ASP.NET” wird nicht ausreichen ein Thema zu setzen.


powered by tricider

Die Umfrage direkt auf der tricider Seite http://tricider.com/de/brainstorming/AFxU

Artikel über TT.UIA in der aktuellen dotnetpro

22.10.2011 12:44:00 | Jörg Neumann

In der aktuellen Ausgabe der dotnetpro (11/2011) ist mein Artikel “Sauber getrennt und gekapselt – Aspektorientierte UI-Entwicklung mit Behaviors” erschienen. Dies ist der zweite Teil einer dreiteiligen Artikelserie in denen ich die technischen Aspekte von Thinktecture UIAnnotations erkläre.
Aus dem Abstract:

Das Entwurfsmuster MVVM trennt klar zwischen Oberfläche und Logik. Um auch noch die UI-Interaktionslogik in wiederverwendbare Form zu bringen, per Markup zuweisbar zu machen und trotzdem noch MVVM-konform zu bleiben, sind Behaviors und Trigger das richtige Mittel. dotnetpro zeigt, wie sie funktionieren.

dnp_112011

Whiteboard Friday mit Duane Forester

21.10.2011 07:32:18 | Stephan Walcher

Im heutigen SEOmoz Whiteboard Friday hat Rand Fishkin, Duane Forester von Bing als Gast. Thema sind zum Beispiel die neuen Funktionen in den Bing Webmaster Tools wie E-Mail Alerts oder das Ende des Yahoo Site Explorer. if(!navigator.mimeTypes['application/x-shockwave-flash'] || navigator.userAgent.match(/Android/i)!==null)Wistia.VideoEmbed('wistia_559549',600,337,{videoUrl:'http://seomoz-cdn.wistia.com/deliveries/3c2d01e437695291b73439ca5abac1d5f3b60e2c.bin',stillUrl:'http://seomoz-cdn.wistia.com/deliveries/2fa89b156f2c29b45b1d5aaed07c0b8667b6901a.bin',distilleryUrl:'http://distillery.wistia.com/x',accountKey:'wistia-production_3161',mediaId:'wistia-production_559549',mediaDuration:1127}) var socialJQuery = jQuery.noConflict(true);new SocialBar("wistia_559549_social_969", {buttons:["embed","stats","wistia"],url:"http://www.seomoz.org/blog/pump-up-the-bing-whiteboard-friday",title:"Pump Up The Bing - Whiteboard Friday | SEOmoz",badgeUrl:"http://wistia.com",embedCode:"%3Cobject%20width%3D%22600%22%20height%3D%22337%22%20id%3D%22wistia_559549%22%20classid%3D%22clsid%3AD27CDB6E-AE6D-11cf-96B8-444553540000%22%3E%3Cparam%20name%3D%22movie%22%20value%3D%22http%3A//seomoz-cdn.wistia.com/flash/embed_player_v1.1.swf%22/%3E%3Cparam%20name%3D%22allowfullscreen%22%20value%3D%22true%22/%3E%3Cparam%20name%3D%22allowscriptaccess%22%20value%3D%22always%22/%3E%3Cparam%20name%3D%22wmode%22%20value%3D%22opaque%22/%3E%3Cparam%20name%3D%22flashvars%22%20value%3D%22videoUrl%3Dhttp%3A//seomoz-cdn.wistia.com/deliveries/12a88023435cbbcba858c853aefee4961a1bafc3.bin%26stillUrl%3Dhttp%3A//seomoz-cdn.wistia.com/deliveries/2fa89b156f2c29b45b1d5aaed07c0b8667b6901a.bin%26unbufferedSeek%3Dtrue%26controlsVisibleOnLoad%3Dfalse%26autoPlay%3Dfalse%26endVideoBehavior%3Ddefault%26playButtonVisible%3Dtrue%26embedServiceURL%3Dhttp%3A//distillery.wistia.com/x%26accountKey%3Dwistia-production_3161%26mediaID%3Dwistia-production_559549%26mediaDuration%3D1127%26hdUrl%3Dhttp%3A//seomoz-cdn.wistia.com/deliveries/9f1773db217603ce59724c2b7d6b1a1147ca0afd.bin%22/%3E%3Cembed%20src%3D%22http%3A//seomoz-cdn.wistia.com/flash/embed_player_v1.1.swf%22%20width%3D%22600%22%20height%3D%22337%22%20name%3D%22wistia_559549%22%20type%3D%22application/x-shockwave-flash%22%20allowfullscreen%3D%22true%22%20allowscriptaccess%3D%22always%22%20wmode%3D%22opaque%22%20flashvars%3D%22videoUrl%3Dhttp%3A//seomoz-cdn.wistia.com/deliveries/12a88023435cbbcba858c853aefee4961a1bafc3.bin%26stillUrl%3Dhttp%3A//seomoz-cdn.wistia.com/deliveries/2fa89b156f2c29b45b1d5aaed07c0b8667b6901a.bin%26unbufferedSeek%3Dtrue%26controlsVisibleOnLoad%3Dfalse%26autoPlay%3Dfalse%26endVideoBehavior%3Ddefault%26playButtonVisible%3Dtrue%26embedServiceURL%3Dhttp%3A//distillery.wistia.com/x%26accountKey%3Dwistia-production_3161%26mediaID%3Dwistia-production_559549%26mediaDuration%3D1127%26hdUrl%3Dhttp%3A//seomoz-cdn.wistia.com/deliveries/9f1773db217603ce59724c2b7d6b1a1147ca0afd.bin%22%3E%3C/embed%3E%3C/object%3E%3Cscript%20src%3D%22http%3A//seomoz-cdn.wistia.com/embeds/v.js%22%20charset%3D%22ISO-8859-1%22%3E%3C/script%3E%3Cscript%3Eif%28%21navigator.mimeTypes%5B%27application/x-shockwave-flash%27%5D%20%7C%7C%20navigator.userAgent.match%28/Android/i%29%21%3D%3Dnull%29Wistia.VideoEmbed%28%27wistia_559549%27%2C600%2C337%2C%7BvideoUrl%3A%27http%3A//seomoz-cdn.wistia.com/deliveries/3c2d01e437695291b73439ca5abac1d5f3b60e2c.bin%27%2CstillUrl%3A%27http%3A//seomoz-cdn.wistia.com/deliveries/2fa89b156f2c29b45b1d5aaed07c0b8667b6901a.bin%27%2CdistilleryUrl%3A%27http%3A//distillery.wistia.com/x%27%2CaccountKey%3A%27wistia-production_3161%27%2CmediaId%3A%27wistia-production_559549%27%2CmediaDuration%3A1127%7D%29%3C/script%3E"}) Link: Pump [...]

Windows Intune jetzt mit Software Deployment [Funktionsupdate]

17.10.2011 18:16:04 | Kay Giza

Kennen Sie Windows Intune? Windows Intune ist die Desktop-Verwaltung und Schutzlösung aus der Cloud von Microsoft. Man kann mit Windows Intune beispielsweise die PC seiner Bekannten & Familie (Sie kennen das sicherlich - man ruft Sie immer an und fragt um Hilfe ;-)- das erleichtert jetzt ungemein mit Intune) oder gar Ihres Unternehmens verwalten und steuern. Denn Windows Intune unterstützt Unternehmen mit Windows Cloud-Diensten und Windows 7 beim Verwalten und Schützen von PCs. Mit Windows Intune können Sie, beispielsweise als IT-Mitarbeiter oder IT-Dienstleister von Remote-Standorten aus eine Reihe wesentlicher Verwaltungsaufgaben erledigen, wozu das Installieren von Windows-Updates, der Schutz vor Schadsoftware und die Bestandsverwaltung gehören, sodass IT-Administratoren und Endbenutzer praktisch an jedem Ort produktiv bleiben. So können beispielsweise PC-Probleme unabhängig vom eigenen Standort oder dem der Benutzer sofort behoben werden. Zudem bietet Windows Intune zuverlässigen Schutz vor Bedrohungen durch aktuelle Schadsoftware und Rootkits dank der in Windows Intune enthaltenen Endpoint Protection. Ab heute, 17. Oktober 2011 ist das erste Funktions-Update von Windows Intune verfügbar, das sowohl bestehenden als auch neuen Kunden automatisch zuteil wird. Neben Verbesserungen an bestehenden Funktionen sind mit dieser Aktualisierung viele nützliche Features hinzugekommen... [... mehr in diesem Blogeintrag auf Giza-Blog.de]

This post is powered by www.Giza-Blog.de | Giza-Blog.de: RSS Feed
© Copyright 2006-2011 Kay Giza. All rights reserved. Legal
Subscribe

Treffen der .NET Usergroup Dresden

12.10.2011 23:01:00 | Martin Hey

Das Oktober-Treffen der .NET Usergroup Dresden wird am 27.10.2011 in den Räumen der T-Systems MMS stattfinden. Das Treffen beginnt wie gewohnt um 18:00 Uhr. Detaillierte Informationen zum Termin selbst und eine Möglichkeit zur Anmeldung finden sich auf der Seite der Usergroup.

Thematisch wird es an diesem Abend um die Neuigkeiten gehen, die Microsoft im letzten Monat auf der Build-Konferenz in Anaheim vorgestellt hat - und im speziellen um Windows 8 und die Anwendungsentwicklung für das neue Betriebssystem. Peggy und Lars werden uns durch den Abend führen und sowohl auf die Grundlagen eingehen als auch anhand von ein paar Beispielen zeigen, wie man vorgehen kann.

Im Anschluss daran wird es wieder die Möglichkeit zum gemeinsamen netzwerken geben.

Es gibt aber noch einen weiteren Grund zur Freude: Die Xing-Gruppe der .NET Usergroup Dresden hat seit heute offiziell 111 Mitglieder. Um das zu feiern sponsort Unique Software der Usergroup drei Bücher zu den Themenbereichen Webentwicklung, HTML 5 und WPF, die an diesem Abend unter den anwesenden Teilnehmern verlost werden.

Windows Azure Pathfinder - Kostenfreie Betreuung für Cloud-Softwarehersteller

12.10.2011 18:01:21 | Peter Kirchner

Wir unterstützen Sie in vier Phasen Ihre Lösung cloud-ready zu machen. Die Teilnahme ist kostenfrei und unverbindlich, d.h. Sie können nach Belieben die Betreuungprozess beenden.
 
Sie müssen keinerlei Vorgaben oder Voraussetzungen dafür erfüllen. Ihr Interesse ein Cloud-Service auf Basis der Windows Azure Plattform aufzubauen reicht vollkommen. Sie können durch das kostenfreie Self-Assessment im 1. Schritt in den Betreuungsprozess von Windows Azure Pathfinder eintreten.

DE Azure Pathfinder Steps

Ein direkter Ansprechpartner begleitet Sie, durch konkrete Angebote und Unterstützungsmaßnahmen mit dem Ziel gemeinsam mit Ihnen Ihr Cloud-Service Business aufzubauen.
 
Starten Sie jetzt durch. So geht's:

DE Azure Path Info Informieren Sie sich über die Cloud-Technologien und die Azure-Plattform von Microsoft. Erfahren Sie zu Beginn mit dem Self-Assesment der Experton Group AG mehr über die Cloud-Readiness Ihres Unternehmens.
DE Azure Path Evaluate Evaluieren Sie die Vorteile der Cloud Geschäftsmodelle für Ihr Unternehmen. Der Cloud Geschäftsmodell-Kalkulator berechnet Ihnen die Kosten und Erlöse verschiedener Azure-Geschäftsmodelle.
DE Azure Path Develop Entwickeln Sie eigene Cloud Services mit unseren Werkzeugen.
DE Azure Path Sell Vermarkten und Verkaufen Sie Ihre Cloud-Services über den Windows Azure-Marktplatz sowie mit unseren exklusiven Marketing Angeboten.

  
Informieren Sie sich gleich und machen Sie kostenlos mit!

Einprägsames Office365 OWA

11.10.2011 13:35:00 | Martin Hey

Wer von unterwegs auf seinen Exchange zugreifen möchte und keine Lust hat, lange Mails auf dem Smartphone zu schreiben, der verwendet sicher den Outlook Web Access. Bei SaaS-Produkten wie Office365 hat man nun selbst recht wenig Einfluss auf die Konfiguration des Servers und so wird auch hier der Servername bei der Einrichtung von Microsoft festgelegt. Möchte man sich nun mit dem eigenen OWA verbinden, muss man sich diesen Servernamen merken, auch wenn man inzwischen nicht mehr die Standard-Domain verwendet, sondern die eigene Domain hinterlegt hat.

Muss man nicht, wie ich heute gelernt habe.

Zum einen vergibt Microsoft selbst einen Alias. Unter der Url http://outlook.com/contoso.com - wobei contoso.com durch die eigene Domain ersetzbar ist ;) - kann man Zugriff auf seine persönliche Instanz erhalten. Diese Url ist schon wesentlich einprägsamer als der interne Servername.

Zum anderen hat man, so man die Einrichtung für den Zugriff aus Outlook vorgenommen hat, einen CNAME-Eintrag für seine Domain vorgenommen (http://autodiscover.contoso.com). Unter dieser Url ist nicht nur das Desktop-Outlook in der Lage, die Konfiguration automatisch vorzunehmen, sondern sie erlaubt auch Zugriff auf den eigenen OWA.

Beide Möglichkeiten habe ich in der Dokumentation von Office365 nicht gefunden (zumindest den ersten hätte ich dort erwartet), aber vielleicht hab ich auch nur an der falschen Stelle gesucht.

Deutsche Partnerkonferenz 2011 - informativ, aufregend, unvergesslich!

10.10.2011 00:27:00 | Lars Keller

DPK - Deutsche Partner Konferenz 2011Am 4./5.10.11 war die Deutsche Partnerkonferenz 2011 von Microsoft in Hamburg. Nachdem ich letztes Jahr meine erste Partnerkonferenz erleben durfte, war ich sehr gespannt darauf, was dieses Jahr für spannende Themen besprochen werden würden. Wie im letzten Jahr habe ich mich wieder mit Ralph Haupter (Microsoft Deutschland GmbH CEO) getroffen und wir haben einige spannende Themen erörtert, aber fangen wir der Reihe nach an! 
Angekommen im CCH in Hamburg begann die ausverkaufte Partnerkonferenz (~1500 Partner waren vor Ort) mit der Keynote, wo u.a. Ralph Haupter und Martin Berchtenbreiter die neuen Entwicklungen von Microsoft vorstellten. Ein großes Thema dieses Jahres war „Consumerization of IT“. Darunter versteht man den Wunsch, geschäftlich genutzte IT-Geräte auch im privaten Umfeld zu benutzen und vice versa. Ich denke, dass ist auf jeden Fall ein sehr wichtiges Thema für den Tablett und auch Handymarkt.
Ein weiteres Thema der Keynote war die Veränderung der Microsoft Partner Konferenz 2011 Keynote - Ralph HaupterLebens- und Arbeitswelt. Viele Arbeitnehmer wollen flexiblere Arbeitszeiten, um Familie und Beruf besser unter einen Hut zu bekommen. Microsoft versucht seine Partner und Kunden dahingehend zu unterstützen, z.B. mit dem Produkt Lync.
Einer meiner Termine auf der Konferenz war der Lync Round Table, an dem Partner und Hersteller regelmäßig über ihre Erfahrungen berichten. Ich fand es sehr spannend zu hören, welche neuen Headsets rauskommen und wo schon überall Lync integriert wurde. Auch wir bei H&D International Group setzen Lync ein und genießen die Vorteile dieses Kommunikationsweges.  Microsoft Partner Konferenz 2011
Ein weiterer Punkt der Keynote war natürlich Cloud Computing. Ralph Haupter zeigte auf, dass die vielen Dienste und Endgeräte (z.B. Windows Phone) über Cloud Dienste die “Consumerization von IT” vereinfachen. Des Weiteren ist Microsoft gerade dabei, das Thema Datenschutz in der Cloud weiter voran zu treiben, damit das Vertrauen in diese Technologie wächst.
Nach der Keynote besuchte ich die Pressekonferenz, auf der noch einige Punkte der Keynote detaillierter besprochen wurden. Nach der Pressekonferenz konnte ich mir noch einige Session anschauen, leider war aber viel zu wenig Zeit dafür, da viele Dinge rund um die DPK parallel stattfanden u.a. auch mein Gespräch mit Ralph Haupter, wo wir über einige aktuelle Themen sprechen konnten.
Ralph Haupter und Lars KellerSo fragte ich ihn, was nun mit Skype & Lync passiere. Skype wird auf jeden Fall eine eigene Business-Unit mit direktem Bericht an Steve Ballmer werden. Das Aufgeben der Marke Skype sei „tödlich“, so Ralph Haupter. Gerade wurde bekannt, dass die EU der Übernahme von Skype zugestimmt hat, von daher denke ich, dass es auch bald Informationen zu Plänen zur Skype-Integration in bestehende Microsoftprodukte geben wird. Ich hoffe ja sehr darauf, dass es eine Skype <-> Lync Synchronisierung geben wird.
Eine weitere Frage von mir war, wie zufrieden Ralph Haupter mit der Entwicklung des Windows Phone 7 sei. Er antwortete darauf, dass mit der Entwicklung von Mango das Windows Phone einen großen Schritt nach vorn gemacht habe und nun eine App-Entwicklung auf Augenhöhe zu anderen Handybetriebssysteme ermögliche. Ralph Haupter hat aber auch darauf hingewiesen, dass das Windows Phone noch Schwächen in der Akzeptanz der Apps und der Devices habe. Die nächste Phase von Windows Phone hat er als „Emotionen gewinnen“ bezeichnet, dafür sind Nokia und Samsung wichtige Partner von Microsoft. Leider habe ich nicht erfahren können, was Nokia dazu auf der kommenden Nokia World 2011 spannendes ankündigen wird. Er wollte den „Nokia Jungs“ nicht die Show stehlen. :-) Aufruf der DPK Webseite
Ich habe auch nachgefragt wie es mit Kinect weitergeht. Ralph Haupter sagte dazu, dass Microsoft auf dem Spielemarkt ein Maßstab mit dem Gerät gesetzt habe, was auch der Verkauf von über 10 Millionen Kinects bestätige. Etwas überrascht war Microsoft über die Nachfrage des SDKs. Ralph Haupter vertritt die Ansicht, dass die nächste große Welle auf dem Konsumermarkt die Sprach- und Gestensteuerung sei. Microsoft hat für die Xbox eine Bing-/Internet Explorer-Sprachintegration sowie eine Skype-Integration (welche noch nicht veröffentlicht ist) geschaffen. Ein weiteres spannendes Themenfeld für Kinect ist das Thema Live-Meeting. Durch die Erstellung von echt aussehenden Avataren der Live-Meeting-Teilnehmern und die Abbildung der Mimik & Gestik sollen diese Art von Gesprächen noch plastischer gestaltet werden. In den Xbox-Labs habe ich solche echtwirkenden Avatare schon einmal ausprobiert und muss sagen, dass so ein Avatar wirklich Ähnlichkeiten mit einem selbst hat, wie der Amerikaner gern sagt Awesome! ;-)
Wir haben natürlich auch über Windows 8 geredet, wobei wir speziell über den Konsumermarkt von Endgeräten gesprochen haben. Microsoft möchte das beste Tablet-Betriebssystem anbieten, so Ralph Haupter. Den Vorteil, den Windows 8 bieten soll, ist dass es sich vollständig in die IT-Systemlandschaft integriert, eben auch auf einem Tablet installiert. Ziel ist es, sich möglichst ohne Adapter und anderen Kompromissen frei bewegen zu können. Windows 8 wird aber nach wie vor einen klassischen Desktop bieten, der aber sicherlich weiter entwickelt wird. Dazu Spiderman auf der Deutschen Partnerkonferenz 2011ein kleiner Exkurs von mir:
Letzten Monat war ich auf der //BUILD/ Konferenz in Anaheim, Kalifornien und habe dort einen Samsung Slate mit Windows 8 erhalten. Das Gerät macht großen Spaß. Vor allem hat mich die Reaktionsfreudigkeit der Touch-Oberfläche beeindruckt. Auf der //BUILD/ wurden auch weitere Geräte gezeigt u.a. auch Ultrabooks, die flacher sind als der VGA-Ausgangstecker.

Nach dem Gespräch mit Ralph Haupter, habe ich mir die zweite Keynote mit dem Titel “Geheimwaffen der Kommunikation: sanfte Strategien mit durchschlagender Wirkung” angeschaut. Herr Leo Martin ist ein Kriminalist und berichtete über Verhörtaktiken und zeigte sehr anschaulich auf, wie einfach Menschen zu lesen sind – ein wirklich spannender und gut gemachter Vortrag!

Am Ende des ersten Tags der DPK war abends die große Party, die zu vielen interessanten Gesprächen einlud. Es gab eine sehr gute Live Band, welche ordentlich gerockt hat! Genau mein Geschmack! Für den besonderen Stargast scheute Microsoft keine Kosten und lud Spiderman ein. Mir ist es gelungen, ihn vor die Kamera zu bekommen, ein Interview wollte er mir jedoch nicht geben! ;-)
Der krönende Abschluss des Tages war die Rückfahrt mit dem Taxi zum Hotel! So eine Fahrt habe ich noch nie erlebt! Ich würde sie als legendär bezeichnen!
Nichts ahnend bin ich mit meinen Kollegen auf das nächste Taxi gestürzt, in dem uns ein sehr freundlicher indischer Mann mit Turban empfing. Eigentlich begann alles mit der Frage „Möchten Sie gerne Musik hören? Ich habe auch indische Musik mit deutschen Text.“ Daraufhin legte Monty, so hieß der Taxifahrer, den Song “Wenn du jemand von Herzen liebst” ein. Der Song war nicht schlecht und so rockten wir gemütlich Richtung Hotel. Als das Lied zu Ende war, meinte der Taxifahrer, dass nun die Karaoke Version käme – jetzt wurde ich hellhörig – und tatsächlich, der Taxifahrer trug voller Inbrunst eine Liveperformance des Songs vor. Es stellte sich heraus, dass er der Sänger auf der CD war und sein Bruder den Text dazu geschrieben hat.Lovely & Monty CD Cover Im Nachhinein haben wir festgestellt, dass Lovely & Monty bekannte Taxifahrer aus Hamburg sind, welche schon in etlichen Shows aufgetreten sind. Die beiden sind einfach nur der Knaller! Wenn ich mal wieder in Hamburg ein Taxi brauche, dann rufe ich einen der beiden an! Wer die beiden einmal live sehen möchte, sollte sich die NDR Aufzeichnung der Tietjen und Hirschhausen Show anschauen.

Am nächsten Tag habe ich zusammen mit dem Team von Annabelle ein Video zur Deutschen Partnerkonferenz gedreht. Das war auch eine sehr interessante Erfahrung! Danke noch mal an Annabelle & Frank für diese Möglichkeit!

Einen letzten Punkt möchte ich noch aufgreifen. Ich fand die DPK WP7 App sehr gut gelungen. Sie war wirklich übersichtlich, schnell und ansprechend gestaltet. Ich hoffe dies wird bald bei allen Konferenzen Standard, damit endlich die “Papierzettelagendas” ausgedient haben.

Fazit
Mir hat die Konferenz sehr gut gefallen. Für mich war das Netzwerken auf der Konferenz einer der größten Faktoren dafür. Ich habe mich mit sehr vielen Partnern und Microsoft Mitarbeitern über spannende Themen unterhalten können. Die Konferenz war für mich persönlich ein voller Erfolg und ich freue mich schon auf die Deutsche Partnerkonferenz 2012.

Die DNUG Braunschweig feiert ihren 5 jährigen Geburtstag!

09.10.2011 14:32:00 | Lars Keller

Die DNUG Braunschweig trifft sich am 24.10.2011 um 19:00 Uhr im Restaurant Zucker (Tagungsraum). Dieses Mal feiern wir unser 5 jähriges Bestehen! YEAH!
Wir haben dennoch einen Gast, auf den wir uns sehr freuen - Neno Loje! Ich muss dazu eine kleine Anekdote erzählen. Karim und ich waren vor 5 Jahren bei einem Tech Talk in Hannover, auf dem Neno etwas zum Team Foundation Server erzählte. Bei seinem Vortrag erwähnte er am Ende, dass es .NET User Groups gäbe. Karim und ich haben danach sofort nachgeschaut, ob es eine User Group in Braunschweig gab. Enttäuscht darüber, dass dies nicht der Fall war, haben wir sofort entschieden, eine eigene zu gründen! So haben wir ein paar befreundeten Entwicklern Bescheid gegeben und schon war das erste Treffen organisiert. Ich habe damals einen Vortrag über die Windows Workflow Foundation gehalten… und jetzt sind schon 5 Jahre vorbei –wie die Zeit vergeht! :-)

Hier ist der Abstract von Neno:

Neno war früher mal Softwareentwickler und besucht mittlerweile viel zu selten User Groups. Umso mehr freut er sich, dass es mit der Terminfindung geklappt hat (i!) und er nun bei der UG Braunschweig über sein Steckenpferd, den Team Foundation Server (TFS) reden kann. Denn er war schon immer ein Freund pragmatischer Lösungen und hat sich schon früh in den TFS "verguckt". Aber alles weitere dann am Abend selbst. Ach ja, und er hat keine genaue Agenda dabei, das heißt Fragen und Wünsche dürfen gerne mitgebraucht werden.

Weiterhin wird es auch eine kleine Geburtstagsverlosung geben! An dieser Stelle möchte ich mich bei unseren Sponsoren bedanken: Microsoft CLIP, Grape City, redgate, telerik, JetBRAINS, Infragistics & Typemock

Wie immer ist dieses Event kostenlos! Für dieses Event ist eine Anmeldung erforderlich, bitte schickt diese formlos an Karim (karim at eljed dot de)

Wir sehen uns da!

Mein Vortrag bei der DNUG Ulm – MS Office & Kinect

09.10.2011 14:04:00 | Lars Keller

Morgen Abend bin ich mal wieder bei der DNUG Ulm zu Besuch! Thomas Schissler hatte mich gefragt, ob ich nicht meinen Vortrag “Microsoft Kinect & MS Office? Neue Wege der Benutzer Experience (UX)?” in seiner User Group halten möchte. Aber gern! :-)

Ich freue mich auf morgen Abend, man sieht sich da!

Mein Videopost zur Deutschen Partnerkonferenz 2011 von Microsoft

06.10.2011 08:17:03 | Lars Keller

Ich habe gerade das geschnittene Video erhalten und natürlich gleich zu Youtube hochgeladen. ;-)

Hier sind meine Eindrücke und Meinung zu der DPK 11 – seht selber:

Ich stand das erste Mal vor der Herausforderung eines “professionellen” Videodrehs. Schauspieler und Regisseure haben nun noch mehr Respekt! Meine Outtakes will ich gar nicht sehen! :D

Vielen Dank an Sebastian (Grabow & Bartetzko Filmproduktion) und Annabelle (Microsoft Deutschland GmbH), welche mir diesen Dreh ermöglicht haben.

Es hat Spaß gemacht!

P.s.: Ein ausführlicher Post erfolgt die Tage!

SCRUMit

05.10.2011 10:40:21 | Christian Binder

Die .net Developer Group in Ulm veranstaltet am 13.10 das SCRUMit, für Alle die SCRUM machen und Alle, die es noch vorhaben.

image


Hier geht’s zur Agenda

Slides & Samples von der BASTA!

01.10.2011 12:01:00 | Jörg Neumann

Die BASTA! hat wieder mächtig Spaß gemacht. Einen Dank an die Teilnehmer meiner Sessions! Hier das Material:

Regeln | Impressum