.NET Blog   ·   .NET Casts   ·   .NET GUI Foren   ·   .NET BlogBook   ·   WPF Blogger   ·   visual studio one   ·   ASP.NET professional

  • ACHTUNG - NEUES BLOG

    Ab sofort steht unter http://devtyr.norberteder.com mein neues Blog zur Verfügung. Dieses Blog wird nicht weiter betreut, bleibt aber erhalten. Neue Eintr%auml;ge erfolgen nur mehr im neuen Blog. Kommentare werden ebenfalls nicht mehr behandelt. Wer weiterhin meinen Einträgen und Aktivitäten folgen möchte, möge bitte RSS-Feeds, Verlinkungen etc. an die neue Location anpassen.
Download .NET Essentials Installer
Trickkiste

Bringt die IT nur Fortschritt oder ergeben sich daraus zusätzliche Probleme?

04.01.08 - Kunterbunt
Beitrag von Norbert Eder
  Diese Frage ist mir in der letzten Zeit immer wieder durch den Kopf gegangen. Daher habe ich mich entschlossen, ein paar Zeilen dazu als Grundlage für eine Diskussion zu verfassen.

Es ist schon wahr. Durch die IT-Industrie gab es in den letzten Jahren einen gewaltigen Fortschritt - oder war alles vielleicht doch so, wie bei den Transformers? Hier wurde die Technologie ja quasi von Megatron dem Leader der Deceptions "geklaut".

Wie es auch immer war und ist, es hat uns Fortschritt gebracht und somit sehr viele neue Möglichkeiten eröffnet. Doch alles hat auch seine Nachteile. Ich möchte hier auch nicht groß das Thema Umweltverschmutzung und Erderwärmung ansprechen. Dieses Thema wurde ohnehin ohne Ende durch die Medien gezerrt und es wird auch zukünftig noch im großen Stil (wie in den alten Western) durch sämtliche Städte (Medien) geschliffen werden. Anyway.

Das worauf ich hinaus möchte betrifft vielmehr die Frage, ob wir uns die Technik zukünftig noch leisten werden können.

Den Westen betreffend: Heute ist mindestens ein Rechner pro Haushalt Standard. Jeder besitzt mindestens ein Handy. Ja, sogar die 5jährigen laufen schon mit Handies durch die Gegend. iPods, Konsolen (tragbar oder nicht), Fernseher in allen möglichen Größen, Receiver, DVD, HD-DVD/Bluray, die entsprechenden Receiver, Navigationsgeräte, Handhelds und vieles mehr. In den meisten Haushalten ist etwas (teilweise sogar vieles) davon zu finden.

Neue Entwicklungen werden gemacht, "alte" Geräte müssen natürlich ausgetauscht werden, um mit der Zeit zu gehen. Der typische Standard ist so hoch wie niemals zuvor. Doch dies ist noch nicht genug. Nehmen wir uns die Software vor. Es ist usus, am Rechner eine Firewall zu haben (und ja, die wirklich guten sind dann doch kostenpflichtig), einen Virenschutz und wer weiß was sonst noch alles. Das kostet alles Geld und belastet die Geldbörse. Auch wenn es nur 49 Euro pro Jahr sind, es läppert sich zusammen.

Alles halb so schlimm? Nun, wenn ich die Ausgaben für Handy, Subscriptions etc. zusammenrechne und mit denen der älteren Generation vergleiche wird der Unterschied sehr schnell deutlich. Es klafft ein Unterschied von teilweise bis zu mehreren hundert Euro .. pro Monat. Sollte uns das nicht zu denken geben?

Dafür sind auch die Gehälter höher als früher! Ja, das sind sie. Angepasst um die jährliche Inflation (oder höher, wenn gut verhandelt). Und die Inflation inkludiert diese neuen Gegebenheiten natürlich nicht. Wie denn auch. Natürlich werden die Warenkörbe, auf deren Basis die Inflation berechnet wird, angepasst. Aber fallen hier Subscriptions hinein? Fällt hier hinein, dass mittlerweile schon jeder ein Handy haben muss, weil ein gewisser Zwang durch die Gesellschaft gegeben ist? Nein, das tut es nicht.

Mir ist natürlich klar, dass jedes Unternehmen Geld verdienen muss (freie Marktwirtschaft -> Gewinnmaximierung), dennoch nimmt dieser (teilweise aufgedrückte) Konsumwahn Ausmaße an, die zwangsweise zu einer Teilung in eine Mehrklassengesellschaft führen müssen. Je mehr Dienste, neue Entwicklungen und zusätzliche Geräte, desto weniger Personen können sich wirklich alles leisten. Und somit ist derjenige, der mehrmals täglich in seinen Geldbeutel blicken muss, ob er in diesem Monat überhaupt durch kommt, als "Blödmann" abgestempelt.

Lösung? Nein, ich habe keine Lösung. Ich weiß nur, dass dies sicherlich nicht ewig so weitergehen kann. Irgendwann - und das wird wohl wieder einmal mit der IT-Branche beginnen - gibt es das nächste Kabumm und dann wird ein Umdenken stattfinden müssen. Sowohl auf die Leistbarkeit hin, als auch bezüglich vieler anderer Bereiche. Das Gesamtkonzept muss angepasst werden, einen anderen Weg wird es nicht geben. Just my 2 cents.

  2 Kommentare - 767 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Foto/Grafik-Manipulationen einfach und schnell - Beispiel Sepia

03.01.08 - .NET, Grundlagen, Base Framework, Allerlei
Beitrag von Norbert Eder
 In vielen Anwendungen werden Grafiken jeglicher Art angezeigt. Und manches Mal, wollen diese auch manipuliert werden. Die Gründe sind hier manigfaltig. In meinem Fall mussten Fotos sepia-färbig dargestellt werden. Mit Hilfe der Klasse ColorMatrix aus dem Namespace System.Drawing.Imaging (System.Drawing.dll) läßt sich dies in wenigen Sekunden bewerkstelligen.

Doch was genau macht die Klasse ColorMatrix? Hier die treffende Beschreibung aus der MSDN:

Defines a 5 x 5 matrix that contains the coordinates for the RGBA space. Several methods of the ImageAttributes class adjust image colors by using a color matrix.

Anmerkung: A ist der Alpha-Kanal, welcher die Transparenz einer Farbe beschreibt.

Sepia selbst ist nichts anderes, als die Darstellung einer Grafik/eines Bildes in Brauntönen, anstatt in Grau-Schattierungen.

Nachfolgend wird nun die Matrix für unsere Sepia-Darstellung definiert (Nachschlagen, Grafiker fragen, alles ist erlaubt):
private ColorMatrix GetSepiaMatrix()
{
    return new ColorMatrix(new float[][]
    {
        new float[] {0.393f, 0.349f, 0.272f, 0, 0},
        new float[] {0.769f, 0.686f, 0.534f, 0, 0},
        new float[] {0.189f, 0.168f, 0.131f, 0, 0},
        new float[] {     0,      0,      0, 1, 0},
        new float[] {     0,      0,      0, 0, 1}
    });
}

Nun muss die Matrix nur mehr verwendet werden. Hier der Code aus dem Button-Click-Event meiner kleinen Demo-Anwendung:
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "JPEG-Files:*.jpg";
ofd.DefaultExt = ".jpg";
ofd.Title = "Open JPG File";

if (ofd.ShowDialog() == DialogResult.OK)
{
    if (OriginalPicture.Image != null)
        OriginalPicture.Image.Dispose();
    if (SepiaPicture.Image != null)
        SepiaPicture.Image.Dispose();

    Image img1 = Image.FromFile(ofd.FileName);
    Image img2 = Image.FromFile(ofd.FileName);

    OriginalPicture.Image = img1;

    ImageAttributes imageAttrs = new ImageAttributes();
    imageAttrs.SetColorMatrix(GetSepiaMatrix());
    using (Graphics g = Graphics.FromImage(img2))
    {
        g.DrawImage(
            img2, 
            new Rectangle(0, 0, img2.Width, img2.Height),
            0, 0, img2.Width, img2.Height, 
            GraphicsUnit.Pixel, imageAttrs);
    }

    SepiaPicture.Image = img2;
}

Anmerkungen: OriginalPicture und SepiaPicture sind beide vom Typ PictureBox.

Und so kann ein mögliches Ergebnis ausssehen:



PS: Dieses Foto wurde übrigens 2005 von mir in Venedig aufgenommen. Schon eine recht nette Stadt muss ich sagen, wenn es auch ständig nach Fisch riecht ;-)
  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


OT: SAT-Kabel verlegen - jemand eine Idee?

03.01.08 - Blog-Intern, Kunterbunt
Beitrag von Norbert Eder
 Fernseher und Playstation sind ein Hit. Jedoch fehlt noch eine Kleinigkeit, damit das alles wirklich Hand und Fuß hat bzw. auch einigermaßen gut aussieht.

Der Übeltäter ist auf nachfolgendem Foto zu sehen:


Es ist schön zu erkennen, dass das dazugehörige SAT-Kabel quasi durch den gesamten Raum läuft und zwar etwas ... aufdringlich. Mir fehlen nun die Ideen, wie man das sauber verstecken kann.

Grundsätzlich würde es die Möglichkeit eines dünneren Kabels geben, von welchem mir jedoch abgeraten wurde. Es sind immerhin doch ca. 5 Meter und angeblich wäre der Signalverlust zu hoch. Weiters kann ich das Kabel nicht so einfach hinter die Sesselleiste klemmen, da diese erstens verpickt ist und zweitens keinen Hohlraum besitzt.

Hat hier ein "Tim Taylor" vielleicht einen Tipp für mich?
  11 Kommentare - 1062 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


WPF Teil 3: Das Softwaredesign will gut überlegt sein

02.01.08 - .NET, Grundlagen, WPF
Beitrag von Norbert Eder
 Bisherige Teile:
WPF Teil 1: Die Windows Presentation Foundation aus der Sicht eines Unternehmens
WPF Teil 2: Windows Presentation Foundation oder doch lieber Windows Forms?

Im letzten Beitrag wurde die Frage geklärt, wann denn eine Umsetzung mit Hilfe der Windows Presentation Foundation als sinnvoll erscheint und in welchen Fällen dann doch zu den herkömmlichen Windows Forms gegriffen werden soll. Ist eine Entscheidung zugunsten der WPF gefallen, müssen einige Vorarbeiten erledigt werden. Unter anderem betrifft dies das Design der Software selbst. Einige Verhaltensweisen sind dann doch unterschiedlich, was sich unter anderem auch im Softwaredesign auswirkt. Nachfolgend werden diesbezüglich einige Varianten vorgestellt als auch einige allgemeine Punkte behandelt.

Bietet die WPF bereits ein entsprechendes Konzept?


In die Windows Presentation Foundation wurde einiges an Funktionalität und viele neue Konzepte hineingepackt. Auch für das Softwaredesign wurde etwas getan. So ist es wichtig, Businesslogik von der Darstellung zu trennen. Dies wird mit Hilfe der WPF-Commands ermöglicht. Wie der verlinkte Artikel zeigt, stehen mehrere Varianten zur Verfügung. Mal enger mit der UI gekoppelt, mal davon losgelöst.

Für kleinere Projekte mag dies durchaus eine gute Wahl darstellen. Für größere Projekte (beispielsweise von Anwendungen mit einigen Mannmonaten Aufwand) meine ich, dass dieses Konzept nicht vollkommen taugt. Hier bedarf es einer größeren und besseren Lösung.

Das Model-View ViewModel Pattern


Eine wesentlich bessere Lösung wird uns hier mit dem Model-View ViewModel in die Hand gelegt. Es ist dies eine Variante des Model-View-Controller Patterns.



Dies sieht auf den ersten Blick möglicherweise etwas verwirrend aus, tatsächlich gestaltet sich die Verwendung jedoch nicht schwierig. Im Gegensatz zum MVC wird der Controller hier mit einer ModelView ausgetauscht (wobei im Hintergrund weiterhin auch ein Controller seinen Dienst tun kann). Die ModelView besitzt eine enge Kopplung zur View -> DataBinding. Dadurch kann die UI auf sehr einfache Weise aktualisiert werden. Diese enge Bindung muss jedoch nicht an das Model weitergegeben werden. Letzteres hält die einzelnen Entities.

Durch die Trennung in diese einzelnen Bestandteile ist es nun möglich, Daten- und Geschäftsklassen vom User Interface zu trennen. Der Vorteil besteht darin, dass die gesamte Anwendungsarchitektur dadurch flexibler, austauschbarer und vor allem testbarer wird.

Zu diesem Thema gibt es eine Serie von Dan Crevier welche ich dem Leser nicht vorenthalten möchte:

DataModel-View-ViewModel pattern: 1
DataModel-View-ViewModel pattern: 2
DM-V-VM part 3: A sample DataModel
DM-V-VM part 4: Unit testing the DataModel
DM-V-VM part 5: Commands
DM-V-VM part 6: Revisiting the data model
DM-V-VM part 7: Encapsulating commands
DM-V-VM part 8: View Models

Ebenfalls sehr lesenswert ist der Artikel Tales from the Smart Client von John Gossman.

Weitere Patterns


Im WPF-Umfeld stehen derzeit nicht mehr wirklich andere Patterns für die Kommunikation zwischen dem User Interface und den darunter liegenden Schichten zur Verfügung. Natürlich muss hier erwähnt werden, dass selbst das MVVM Anpassungen erfahren kann und im Laufe der Entwicklung an einer eigenen Lösung auch erfahren wird.

Es empfiehlt sich jedoch auf jeden Fall, alle Anforderungen zu definieren und daraus weitere mögliche Patterns, die innerhalb des MVVMs zum Zuge kommen abzuleiten.

Fazit


Immer, wenn neue Technologien oder Konzepte ins Spiel kommen, müssen neue Mittel und Wege gefunden werden, ein Projekt erfolgreich abzuschließen. Das MVVM ist ein erster Schritt in die richtige Richtung. Mit Fortbestand der WPF werden weitere Lösungen, Abwandlungen des MVVMs und weitere Verbesserungen auf uns Entwickler zukommen.
Grundsätzlich empfehle ich, das erwähnte Pattern in kleinem Rahmen zu testen und einen kleinen Prototyp zu entwickeln, um ein erstes Gefühl zu bekommen. Darauf aufbauend können anschließend die ersten ernsthaften Anwendungen entwickelt werden.

Tipp: Setzen Sie sich mit den Eigenheiten der WPF auseinander, um vor unliebsamen Überraschungen geschützt zu sein. Gerade wenn unbekannte Patterns das erste Mal eingesetzt werden, kann es sehr leicht zu Designfehlern kommen, die im weiteren Zuge größere Umstellungen/Refactorings notwendig machen.
  3 Kommentare - 1114 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


WPF: RoutedCommand, RoutedUICommand, ICommand und Commands im Allgemeinen - Eine Einführung

02.01.08 - .NET, Grundlagen, WPF
Beitrag von Norbert Eder
 Einige mögen bereits wissen, dass unter der Windows Presentation Foundation die Möglichkeit besteht, Commands zu verwenden. Für andere mag es neu sein. Wem ein Command gar nichts sagt, der möge sich meinen Beitrag Patterns: Command Pattern zuvor zu Gemüte führen.

Das Command-System wurde in die Windows Presentation Foundation integriert, um durchzuführende Aufgaben/Tasks besser vom User Interface (Oberfläche) zu trennen.

Warum UI von Aufgaben trennen


Ein oft geschilderter Vorteil der WPF ist, dass das grafische Design nicht zwingend vom Entwickler gemacht werden muss. So kann hier in der Tat ein Designer Hand anlegen (jedoch muss er etwas von XAML verstehen). Das ist jedoch nicht der Punkt, auf den ich hinaus möchte.
Ein Grundsatz der Softwareentwicklung ist es, stabile und robuste Software zu bauen. Dazu muss natürlich getestet werden. Manuelle Tests, die alles abdecken sind aber einer bestimmten Projektgröße kaum durchzuführen. Automatisierte Tests müssen her. Mit Hilfe von Unit Tests können nun Teile der Anwendung getestet werden. Dies funktioniert jedoch nur dann, wenn diese Teile vom grafischen Aufbau komplett getrennt sind. Sinnvoller Weise werden nun sämtliche Aufgaben von der UI getrennt und werden/bleiben so testbar.

Wie kann die WPF hier helfen?


Mit Hilfe der WPF Commands muss hier kein großer Aufwand betrieben werden, um obiges Ziel auch tatsächlich zu erreichen. Nun gibt es jedoch zwei abzudeckende Möglichkeiten:
  • Commands müssen das UI aktualisieren
  • Commands können komplett frei von allen UI-Einflüssen ausgeführt werden

Muss der Command mit der Oberfläche interagieren, sind RoutedUICommands genau der richtige Ansatz. Im zweiten Fall ist das Interface ICommand zu implementieren.

Bezüglich der RoutedUICommands ist es nun so, dass durch die WPF bereits einige fertige Implementierungen vorhanden sind:


Der Vorteil liegt darin, dass diese Commands sehr einfach an UIElemente gebunden und ausgeführt werden können. Hier ein kleines (unvollständiges) Beispiel zur Veranschaulichung:
<UserControl.CommandBindings>
    <CommandBinding 
      Command="MediaCommands.Play" 
      CanExecute="OnQueryExecute" 
      Executed="Execute"/>
</UserControl.CommandBindings>

<StackPanel Grid.Row="2" Orientation="Horizontal">
    <Button 
      Command="MediaCommands.Play" 
      Content="{Binding RelativeSource={RelativeSource Self}, 
        Path=Command.Text}" />
</StackPanel>

Da diese Commands jedoch ein spezifisches Verhalten anbieten, welches nicht immer benötigt wird, ist es mitunter notwendig, eigene Commands zu implementieren, um die gewünschte Funktionalität zu erhalten.

Eigene Commands via ICommand implementieren


Müssen eigene Funktionalitäten als Command abgebildet werden, kann dies mit Hilfe einer Implementierung des ICommand-Interfaces passieren. Dieses Interface schreibt zwei Methoden vor und ein Event vor:
  • CanExecute
  • Execute
  • CanExecuteChanged


Ein simpler Beispielcommand, welcher ein bestimmtes Objekt entgegeben nimmt und dieses manipuliert, könnte wie folgt aussehen:
public class MySaveCommand : ICommand
{
    #region ICommand Members

    public bool CanExecute(object parameter)
    {
        return true;
    }

    public event EventHandler CanExecuteChanged;

    public void Execute(object parameter)
    {
        if (parameter is EasySum)
        {
            EasySum es = (EasySum)parameter;
            es.Result = es.Summand1 + es.Summand2;
        }
    }

    #endregion
}


Eine weitere - und vor allem übliche - Möglichkeit besteht darin, einen RoutedCommand zu erstellen.

RoutedCommand erstellen


Mit Hilfe von RoutedCommands ist es sehr einfach, einen Command für das User Interface zu erstellen. Dazu benötigt es nicht sehr viel. Das nachfolgende Beispiel zeigt, wie anhand eines RoutedCommands die Hintergrundfarbe eines Panels verändert werden kann.

Hierzu muss unser neuer Command definiert werden:
public static RoutedCommand ChangeBackgroundCommand = new RoutedCommand();

Des weiteren müssen zwei Eventhandler implementiert werden. Zum einen für das CanExecute-Event und zum anderen für das Executed-Event.
private void ChangeBackgroundCommandCanExecute(
    object sender, CanExecuteRoutedEventArgs e)
{
    if (sender is Panel)
        e.CanExecute = true;
    else
        e.CanExecute = false;

}

private void ChangeBackgroundCommandExecuted(
    object sender, ExecutedRoutedEventArgs e)
{
    Panel target = e.Source as Panel;
    if (target != null)
    {
        if (target.Background == Brushes.AliceBlue)
        {
            target.Background = Brushes.LemonChiffon;
        }
        else
        {
            target.Background = Brushes.AliceBlue;
        }

    }
}

Im Eventhandler für das CanExecute-Event überprüfen wir lediglich, ob das übergebene UIElement auch tatsächlich ein Panel ist. Ist dem so, lassen wir eine Manipulation der Hintergrundfarbe zu. Andernfalls wird eine Ausführung des Commands verwehrt.
Im Eventhandler für das Executed-Event wird dann die Hintergrundfarbe geändert bzw. wieder auf die Ursprungsfarbe zurück gestellt.

Damit der Command nun auch verwendet werden kann, muss ein CommandBinding erstellt werden:
<StackPanel Name="MyStackPanel"
    Background="AliceBlue"
    Focusable="True">
    <StackPanel.CommandBindings>
        <CommandBinding 
            Command="{x:Static custom:Window1.ChangeBackgroundCommand}"
            Executed="ChangeBackgroundCommandExecuted"
            CanExecute="ChangeBackgroundCommandCanExecute"/>
    </StackPanel.CommandBindings>
    <Label>A StackPanel</Label>
    <Button Command="{x:Static custom:Window1.ChangeBackgroundCommand}"
      CommandParameter="ButtonOne"
      CommandTarget="{Binding ElementName=MyStackPanel}" 
      Content="Change Background" />
</StackPanel>

Wie zu sehen ist, wird hier der aufzurufende Command definiert, als auch die beiden Eventhandler, die bereits implementiert wurden. custom definiert hier lediglich einen eigenen Namespace.
Das CommandBinding ist an einem StackPanel definiert, welches ein Label und einen Button enthält, welcher dann schlussendlich den Command auslöst.

Fazit


Dieser Artikel hat das der WPF zugrunde liegende Konzept der Commands vorgestellt und eine kleine Übersicht inklusive einiger Beispiele gegeben. Ebenso wurden die Unterschiede erläutert. Damit sollte nun jeder angehende WPF-Entwickler das notwendigste Wissen mitbringen, um eigene Commands zu entwickeln und diese in seinen Anwendungen einzusetzen. Natürlich wird es durchaus noch notwendig sein, das eine oder andere nachzulesen. Der Start sollte damit allerdings gemacht sein.
  Kommentar hinzufügen   |  2 Trackbacks   |  Permalink  |  Trackback-URL


Rückblick 2007, Aussichten 2008

31.12.07 - Blog-Intern
Beitrag von Norbert Eder
 Das Jahr 2007 ist nun um und ich möchte durchaus ein paar Worte zum vergangenen Jahr verlieren - war es doch ein spannendes.

Ein kurzer Rückblick


2007 begann grundsätzlich ganz gut, wohlwissend, dass einige Arbeit auf mich warten würde. Eine Idee war geboren und musste umgesetzt werden. .NET Casts. Geplant als Lieferant von Informationen rund um .NET und Microsoft. Neben diversen Casts wurde zugleich auch das .NET BlogBook eingeführt.

Im Laufe des Jahres gab es dann auch die Teilnahme an zwei größeren Veranstaltungen. So zuerst die ASP Konferenz, gefolgt von der BASTA!. Damit verbunden waren sehr viele neue Kontakte und natürlich auch jede Menge neuer Ideen, die sich im Zuge der einzelnen Vorträge heraus kristallisierten.

Auch Veröffentlichungen gab es 2007 wieder einige wichtige. Silverlight, gefolgt von Visual Studio 2008 (.NET Framework 3.5) und C# 3.0. Natürlich gab es viel mehr, aber für mich waren das wohl die wichtigsten neuen Produkte.

Zu den ganzen neuen Projekten, Veranstaltungen und Produkten hat sich auch auf diesem Blog einiges getan. Kleinere Aktualisierungen der Oberfläche sind hier nur ein ganz kleiner Punkt, da diese wohl nicht so auffällig waren. Vielmehr habe ich das angebotene Themenspektrum ein wenig eingeschränkt und werde dies auch weiter tun. Ein Spezialisierungsprozess, welcher - aus meiner Sicht - durchaus sinnvoll ist und sicherlich auch meinen Lesern zugute kommt, so hoffe ich zumindest.

2007 in ein paar wenigen Zahlen


Wie misst man Erfolge? Nun, schwer zu beantworten. Neben den vielen neuen Kontakten, Gesprächspartnern und Freunden möchte ich ein paar Zahlen liefern, die für viele vielleicht klein erscheinen mögen, für mich aber schon einen kleinen Erfolg dieses Blogs und meiner anderen Projekte zeigen.

.NET Casts
Insgesamt wurden 9 Livecasts und 7 Podcasts aufgezeichnet und online gestellt. Unabhängig der Teilnehmerzahlen der Livecasts gab es insgesamt 12.908 Downloads der einzelnen Casts (wobei einer überhaupt nicht zum Download angeboten wurde, da dieser extern gehostet wurde und wir das Material leider nie zur Verfügung gestellt bekamen). Alleine durch diese Downloads wurden 0,5 Terabyte an Daten von unserem Server geladen.

Außer der Casts gab es noch unser .NET BlogBook mit insgesamt 4 Ausgabe. Von Ausgabe zu Ausgabe konnten die Downloadzahlen gesteigert werden, was uns gezeigt hat, dass dieses Service durchaus Anklang fand. Insgesamt konnten über 15.000 Downloads verzeichnet werden. Tendenz steigend. Auch konnten wir mit der 4. Ausgabe das erste Gewinnspiel veranstalten. Aus zahlreichen Teilnehmern wurden schließlich 5 Gewinner ausgewählt.

Blog - Living.NET
Alle auf diesem Blog angebotenen Downloads wurden 2007 32.800 Mal genutzt. Eine - für mich - durchaus beachtliche Zahl.

Die Anzahl der Besuche konnte um 387 % gegenüber 2006 gesteigert werden, die Seitenzugriffe um 326 %. Zahlen mit denen man durchaus zufrieden sein kann.

Ausblick 2008


2008 wird sicherlich auch wieder ein spannendes Jahr. Was wird meine Leser erwarten, was plane ich zu unternehmen, wie geht es weiter?

Schwer zu sagen, auch 2008 wird es wieder viel Neues zu berichten geben, viele Artikel wollen wieder geschrieben werden und auch sonst wird es ein sehr interessantes Jahr werden (einige wenige wissen ja bereits Bescheid).

Hier eine geplante Übersicht:
.NET Casts: Dieses Projekt ist leider im letzten Quartal 2007 ein wenig eingeschlafen. Hauptgrund war wohl, dass wir als Team ziemlich mit Arbeit eingedeckt waren und somit kaum bis gar nicht zu Aufzeichnungen kamen. Leider. Schließlich war noch viel für 2007 geplant. Für 2008 erhoffen wir uns auf jeden Fall wieder den einen oder anderen spannenden Cast, als auch 4 neue Ausgaben des .NET BlogBooks (hier dürfen die ersten Jänner-Tage spannend erwartet werden).

Blog Living.NET: Auch hier sind einige Änderungen geplant, die jedoch noch nicht vollständig ausgereift sind. Im Laufe des ersten Quartals wird ein komplett neuer Bereich eingezogen, auf den ich jetzt im Moment jedoch noch nicht näher eingehen will. Man darf durchaus gespannt sein.

Projekte: Hoffentlich noch im Jänner 2008 wird eine neue Plattform für Entwickler online gehen. Aufmerksame Blog-Leser werden wohl wissen, worum es geht. Anderen möchte ich die Überraschung nicht verderben. Geplanter Start: Februar/März 2008.

Die eine oder andere Geschichte wird dann 2008 sicherlich noch passieren, aber alles möchte ich nicht verraten.

Abschluss


Schlussendlich möchte ich mich bei meinen treuen Lesern bedanken. Für die Unterstützung, die Beteiligung an Diskussionen, die vielen Hinweise, Ratschläge und Diskussionen. DANKE.

Daher, allen einen guten Rutsch. Glück, Erfolg und natürlich Gesundheit für 2008.
  2 Kommentare - 780 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


.NET Framework und Visual Studio Downloads

27.12.07 - Blog-Intern, .NET, Visual Studio
Beitrag von Norbert Eder
 Seit längerer Zeit gibt es hier am Blog eine Download-Sektion mit den wichtigsten und gängigsten .NET Framework und Visual Studio Downloads. Diese Sektion wurde von mir nun wieder angepasst, als auch neue Downloads eingepflegt.

Sollten weitere, wichtige Downloads fehlen, werde ich diese natürlich in die Liste mit aufnehmen.
  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Visual Studio one: LINQ: Vom Regen in die Traufe?

24.12.07 - Blog-Intern, .NET, Datenverwaltung
Beitrag von Norbert Eder
  Die Liste der von mir verfassten Fachzeitschriften Artikel ist wieder angewachsen.

In der Ausgabe 01/08 der Visual Studio one wurde der Artikel LINQ: Vom Regen in die Traufe? veröffentlicht. Dabei handelt es sich um eine kritische Hinterfragung wie sinnvoll denn LINQ für uns Entwickler tatsächlich ist und in welchen Bereichen sich ein Einsatz lohnt und wo man dann doch lieber die Finger davon lassen sollte.

Zusatz: Die Ausgabe 01/08 lohnt sich zudem mehrfach: Neues Design und mehr Inhalte. Also genug Stoff für die Feiertage und zudem noch schön anzusehen.

  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Die Wohnung vs Küche, Teil 6

23.12.07 - Blog-Intern
Beitrag von Norbert Eder
 Freitag auf Samstag um 2:00 Uhr in der Früh war es dann soweit. Die Küche hat den Kampf gewonnen und sich erfolgreich einen Teil der Landkarte gesichert. Hier die letzten Bilder und damit wäre dieses Thema nun auch abhakt und es kann normal im Programm weitergehen.







Geschafft. Over and out.

  4 Kommentare - 860 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Die Wohnung vs Küche, Teil 5

21.12.07 - Blog-Intern
Beitrag von Norbert Eder
 Der Vormarsch der Küche ist kaum mehr aufzuhalten. Vorhandene Stellungen wurden weiter befestigt und mit zusätzlichen Mannen versehen. Hier wird es wohl nichts mehr zu holen geben, für die Wohnung. Die Schlacht neigt sich dem Ende zu ...





Kann sich die Wohnung gegen diese Übermacht noch einmal behaupten?

  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL



Zurück Weiter