1

Webseiten-Design in verschiedenen Browsern testen

Geschreiben von Marcus Kimpenhausauf29. Mai 2008 in entwicklung

Das ist mit Sicherheit das, was den meisten Web-Developern und Designer schmerzlich bekannt ist – implementiert doch jeder Browser seine Eigenheiten in Punkto CSS-Konformität und Interpretation. Das Ganze geht so weit, dass man, um ein vernünftiges Layout zu entwerfen, welches über allen Browsern identisch aussehen soll, die Eigenheiten der Browser mittels CSS-Reset (YUI Reset CSS oder meyerweb.com: Reset-CSS) abschaltet. Auch das Testen der Seiten mittels Dienst ala borwsershots.org – welcher Screenshots der Webpage in verschiedenen Browsern auf verschiedenen Plattformen macht und diese dann online zur Einsicht stellt, ist bekannt. Für das testen mittels Internet Explorer kannte ich bisher auch noch das Werkzeug Multiple IE – hier werden verschiedene Versionen (IE3 IE4.01 IE5 IE5.5 und IE6 – um genauer zu sein) auf einem System installiert und man kann die Seite in den unterschiedlichen Instanzen testen. Neu ist für mich nun das Werkzeug IETester – welches sowohl die Rendering- als auch auch die JavaScript-Engine des IE8 beta 1, IE7 IE6 und IE5.5 sowohl auf Vista als auch XP in einem einzigen Browser beinhaltet. Die Seite kann somit in einer Instanz auf mehreren Tabs in unterschiedlichen Browsern angezeigt werden.

Ein Screencast ist hier zu sehen:

Leider gibt es noch einige Einschränkungen:

Known problems and limitations :

  • When resizing, the content may disappear. I am working to correct it on the next version
  • The Previous/Next buttons are not working properly
  • Focus is not working properly
  • Java applets are not working
  • Flash is not working on IE6 instance

In einer der nächsten Versionen wird dies aber sicher auch behoben sein! Alles in allem eine nette Ergänzung zum Thema Webseiten in unterschiedlichen Browsern testen.

Schlagwörter:, , ,

 
0

Microsoft Source Analysis Tool

Geschreiben von Marcus Kimpenhausauf27. Mai 2008 in entwicklung

Bereits am Freitag den 23. Mai 2008 wurde das Release des Microsoft Source Analysis Tools verkündet. Gestern bin ich dann auch dazu gekommen, einen kurzen Blick auf das neue Werkzeug zu werfen, welches meiner Meinung nach eine sinnvolle Ergänzung zu dem Code Analysis Werkzeug FxCop bildet. Handelt es sich bei beiden Werkzeugen um regelbasierte Tools, so führt FxCop diese Regeln auf den erzeugten Assemblies aus (es prüft den statischen Code auf Policyverstöße und Schwachstellen), während Microsoft Source Analysis for C# den wirklichen Quellcode und dessen Dokumentation analysiert.

Beide Werkzeuge dienen somit der Qualitativen Verbesserung der Entwicklung – einmal auf IL-Ebene und einmal auf Quellcode-Ebene. Soweit so gut – doch was leistet Microsoft Source Analysis for C# wirklich? Eine Übersicht findet sich auf dem Entwickler-Blog:

  • Layout of elements, statements, expressions, and query clauses
  • Placement of curly brackets, parenthesis, square brackets, etc
  • Spacing around keywords and operator symbols
  • Line spacing
  • Placement of method parameters within method declarations or method calls
  • Standard ordering of elements within a class
  • Formatting of documentation within element headers and file headers
  • Naming of elements, fields and variables
  • Use of the built-in types
  • Use of access modifiers
  • Allowed contents of files
  • Debugging text

Sehr gut gefällt mir auch die Integration per MSBuild Task – so kann das Werkzeug direkt in einen automatischen qualitäts-sichernden Prozess aufgenommen werden. Ein erster Testlauf auf ‘heimischen’ Sourcen verläuft dann doch sehr ernüchternd – 193 Fehler werden gemeldet, obwohl ich mich doch in der Entwicklung an unseren Styleguide gehalten habe:

Source Analysis (Visual Studio 2008)

Verfolgt man die Diskussionen im Forum, wird schnell klar, dass die aktuelle Version des Microsoft Source Analysis for C# noch viel zu starr ist und hauptsächlich den Microsoft Style Guide prüft (was auch klar ist, vor dem Hintergrund, dass dieses Werkzeug lange als StyleCop bei Microsoft inhouse verwendet wurde). Auch gibt es schon die ersten Pläne für Autokorrekturen bestimmter Regeln (wie z.B.: Tabs durch Leerzeichen zu erstzen – muss der Entiwckler dies heute doch noch von Hand machen).

Im Grunde erinnert Vieles an die erste Veröffentlichung von FxCop. Fand doch auch der Code Analyzer seinen Weg aus dem inhouse Gebrauch heraus und öffnete sich somit der breiten Masse. Eine ähnliche Entwicklung wird sicher auch der Source Code Analyzer nehmen…warten wir gespannt auf die nächsten Versionen, bis auch derjenige es produktiv einsetzen kann, der mit seinem eigenen Styleguide etnwickelt.

Nachtrag [09.06.2008]
Es gibt doch die Möglichkeit, eigene Regeln per Microsoft Source Analysis for C# ausführen zu lassen. Ein tolle Anleitung in 3 1/2 Teilen findet Ihr hier:

Part I: Creating Custom Rules for Microsoft Source Analyzer

Part II: Creating Custom Rules for Microsoft Source Analyzer

Part IIa: Creating Custom Rules for Microsoft Source Analyzer

Part III: Creating Custom Rules for Microsoft Source Analyzer

Schlagwörter:, , ,

 
0

Nr.1 Quelle für Designer und Web-Developer

Geschreiben von Marcus Kimpenhausauf25. Mai 2008 in entwicklung

Als Software-Engineer berührt mich das grafisch/gestalterische Feld eigentlich nicht so oft, ist doch meine Begabung im Bereich der Logik stärker ausgeprägt als in dem Bereich des Künstlerischen. Da ich mich aber in den letzten Tagen verstärkt mit der Thematik Grid Layout per CSS auseinander gesetzt habe, bin ich über eine Seite gestolpert, die ich Euch nicht vorenthalten möchte:

http://www.smashingmagazine.com/

Für die meisten Web-Developer sicher schon eine feste Größe, war ich doch hoch entzückt über das reichhaltige Angebot des Magazins. Von Tutorial’s über How-To’s bis hin zu freien Icon-Sets, WordPress-Themes und tollen Post zu vielen Themen aus dem Web-Umfeld ala CSS, Ajax und Typographie, gibt es fast Nichts, was es dort nicht zu finden gibt! Ich habe den RSS-Feed bereits abonniert – jetzt seid Ihr dran ;-)

Zu dem Thema CSS Grid Layout Design möchte ich Euch auch noch 3 Links mit auf den Weg geben, 2 CSS-Frameworks, welche der Thematik Tribut zollen: 960 Grid System und Typogridphy. Wobei man dazu sagen muss, dass Typogridphy auf der Basis von 960 Grid System aufsetzt. Und noch ein Link, welcher sich generell mit der Thematik CSS Grid Layout auseinandersetzt: Design By Grid.

Ob ich eines der beiden oben genannten Frameworks einsetzen oder etwas besseres finden werde, weiß ich noch nicht. Dazu muss ich zuerst einmal mein geplantes Layout unter eines dieser schönen Grid-Raster legen und schauen, ob und wie es zu verwirklichen ist. (Aufgrund der relativ hohen Anzahl glatter Teiler der 960 (immerhin 2, 3, 4, 5, 6, 8, 10, 12, 15, 16, 20, 24, 30, 32, 40, 48, 60, 64, 80, 96, 120, 160, 192, 240, 320 und 480) – project-euler läßt grüßen – ist die Wahrscheinlichkeit doch recht hoch). Was als Laie und Anfänger auf diesem Gebiet sicher nicht leicht von der Hand gehen wird…schauen wir mal – ich werd von den Ergebnissen berichten!

Schlagwörter:, , , , ,

 
0

Europass-Lebenslauf oder ‘normaler’ Curriculum Vita

Geschreiben von Marcus Kimpenhausauf21. Mai 2008 in herr greschkowitz

Diese Frage stellt sich mir gerade!

Dazu muss ich gestehen, dass ich bis vor gut 2 Stunden nicht einmal von der Existenz eines solchen Europass-Lebenslauf wusste.

Dieser dient als Bestandteil des Europass der besseren Vergleichbarkeit von Abschlüssen aus Studium und Beruf. Der Europass wiederum betseht aus 5 Dokumenten, von denen 2 durch den jeweiligen Besitzer auszufüllen sind (Europass-Lebenslauf und Europass-Sprachenpass) und weitere 3 Dokumente (Europass-Zeugniserläuterung, Europass-Diplomzusatz und Europass-Mobilitätsnachweis) von der “jeweils zuständigen Organisation”.

Einerseits gefällt mir die Idee einer Standardisierung zur höheren Transparenz der Lebensläufe in Europa ganz gut, andererseits gefällt mir der Wegfall der Individualität weniger gut, da doch gerade auch der gestalterische Aspekt eine Aussage über denjenigen gibt, der den Lebenslauf erstellt hat. Nun muss man/ich sich die Frage stellen, wo soll mein zukünftiges Aufgabenfeld liegen? Nur in Deutschland oder vielleicht doch eher in der Europäischen Union? Und wie weit verbreitet ist der Europass bzw. wie hoch ist dessen Akzeptanz?

Als Template für den Europass-Lebenslauf gibt es für die Word/OpenDocument Fraktion offizielle Vorlagen, welche direkt auf der Europass-Homepage heruntergeladen werden können. Für die LaTeX-Beisterten unter uns gibt es auch ein ‘inoffizielles’ EuroCV Makro-Set nebst zugehöriger Dokumentation, welches den Anforderungen der Europäischen Union nachkommt. Und wie immer sehen die dort abgelegten Beispiele besser aus, als ihre Office-Pandons.

Schlagwörter:, , , ,

 
0

Enterprise Library 4 March 2008 CTP – Caching-Wrapper

Geschreiben von Marcus Kimpenhausauf13. Mai 2008 in entwicklung

Bevor man die Enterprise Library 4 March 2008 CTP herunterlädt, sollte man wissen, dass es einige Probleme mit sich bringt, diese auf einem Windows XP System zu übersetzen. Grund dafür ist, dass die derzeitge Version noch eine Abhängigkeit zu dem Auhtorization-Manager enthält, welcher auf einem Windows XP System nicht zur Verfügung steht. Eine Hilfe, wie man diesen Part nachinstallieren kann, findet man im Diskussions-Forum in Form einer Antwort von Paul Taylor.

Hat man die Enterprise Library 4 March 2008 CTP nun erfolgreich übersetzt, kann man sich überlegen, diese in den GAC zu installieren oder lokal über Probing aufzulösen. Ich entscheide mich gerne für letztere Möglichekit, da diese das einfache XCopy oder andere Formen des Deployments ermöglicht.

Nachdem alle Vorbereitungen getroffen sind, findet man bei Microsoft einen Überblick über den Caching Application Block. Zwar noch aus der älteren Enterprise Library 3.1, aber an den grundlegenden Konzepten hat sich nicht allzu viel verändert. Wie man dem ChangeLog entnehmen kann:

The application block has been refactored to allow developers to replace the CacheManagerclass with their own implementation if required. This does not affect the API of the application block or the existing CacheManager. Developers can install and configure a custom cache manager implementation using the configuration tools provided that the new class implements the ICacheManagerinterface and carries the following attribute.

The application block implements several new performance counters that you can use to monitor performance and operations. The new counters are Total Cache Hits, Total Cache Misses, Total Cache Expiries, Total Cache Scavenged Items, and Total Updated Entries.

Sind die Grundlagen klar, können wir uns unserem eigentlich Problem widmen. Was ist zu erreichen? Stellen wir uns vor, wir haben eine klassische NTier Architektur. Es gibt Strukturen, wie DataSet’s oder DataTable’s, welche zur Laufzeit ausgewertet werden, um Eingabemasken zu generieren und diese in Form von Assemblies dynamisch zu erzeugen. Diese Strukturen ändern sich nicht in solchem Maße, so dass diese hervorragend am Client gecached werden könnten und nur bei Bedarf aktualisiert. Daraus ergibt sich aber auch die Anforderung, dass dieser Cache ein Beenden und Neustarten des Clients überdauern kann. Zusätzlich sollen die gepseicherten Objekte transparent, sprich sind diese nicht im Cache enthalten, nachgeladen werden, Typsicherheit wäre schön, um eine boxing und unboxing überflüssig zu machen. Events, die bei Veränderung des Caches gefeuert würden, könnten von Hilfe sein und wenn der Cache die neuen LINQ-Mechanismen unterstützen würde, wäre das Rundum-Sorglos-Paket fertig.

Out of the Box unterstützt die Enterprise Library 4 March 2008 CTP nicht alle dieser Anforderungen, da aber auch eine andere Intention im Vordergrund steht. Klar sollte sein, dass die Implementierung einer Typsicherheit nach sich zieht, dass jeder unterschiedliche Objekttyp einen neuen Cache mit sich bringt, es sei denn man würde einen typsicheren Objekt-Chache implementieren, welcher aber wiederum boxing und unboxing mit sich bringen würde. Ein weiteres Manko ist, dass der Cache des Application-Blocks keinen direkten Zugriff auf die Schlüssel und Werte des Caches zulässt, aber auch das kann per Reflection umgangen werden.

Die daraus entstandene Klasse kann am Ende des Artikels oder im Download-Bereich heruntergeladen werden. Die wichtigsten Code-Segmente mit einigen Erläuterungen folgen jetzt.

Zugriff auf den internen Cache per Reflection:

private Cache GetRealCache()
{
    return (Cache)this.InternalCache.GetType().GetField("realCache", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(this.InternalCache);
}

Dieser reale Cache ermöglicht die Unterstützung der LINQ-Mechanismen, auf die Schlüssel:

public IEnumerable<String> Keys
{
    get
    {
        return this.RealCache.CurrentCacheState.Keys.Cast<String>();
    }
}

Und auf die Werte:

public IEnumerable<TType> Values
{
    get
    {
        return this.RealCache.CurrentCacheState.Values.Cast<TType>();
    }
}

Der aufmerksame Leser hat sicher den Type TType bemerkt, welcher uns per Generics die Typsicherheit beschert:

    public sealed class Cache<TType>

Die Konstruktor-Signatur

    public Cache(String qualifier, ICacheLoader<TType> loader)

zeigt, dass neben der Konfigurationskennzeichnung (qualifier) ein ICacheLoader<TType> übergeben werden kann. Dieser ermöglicht das typsichere Nachladen der Objekte, falls diese aus dem Cache abgerufen, aber nicht enthalten sind.

Das ganze um ein paar Events und einen Indexer erweitert, liefert das vollständige Resultat. Um den Cache in einem Projekt verwenden zu können, muss dieser per App.config konfiguriert werden.

<configuration>
  <configSections>
    <section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings, Microsoft.Practices.EnterpriseLibrary.Caching, Version=3.1.0.0, Culture=neutral, PublicKeyToken=null" requirePermission="false" />
  </configSections>
  <cachingConfiguration defaultCacheManager="MyCache">
    <cacheManagers>
      <add expirationPollFrequencyInSeconds="60" maximumElementsInCacheBeforeScavenging="1000"
        numberToRemoveWhenScavenging="10" backingStoreName="Isolated-Cache-Storage"
        type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=3.1.0.0, Culture=neutral, PublicKeyToken=null"
        name="MyCache" />
    </cacheManagers>
    <backingStores>
      <add partitionName="MyCache" encryptionProviderName="" type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.IsolatedStorageBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=3.1.0.0, Culture=neutral, PublicKeyToken=null" name="Isolated-Cache-Storage" />
    </backingStores>
  </cachingConfiguration>
</configuration>

Diese Konfiguration kann man allerdings lieber mit dem mitgelieferten Konfigurations-Tool EntLibConfig.exe erledigen als von Hand.

Ein simpler Testfall, der die LINQ-Mechanismen testet könnte wie folgt aussehen:

Cache<String> cache = new Cache<String>("MyCache", null);
cache.Add("Key", "Value");
cache.Add("Key1", "Value1");
cache.Add("Key2", "Value2");
cache.Add("Key12", "Value12");
cache.Add("Key13", "Value13");

var keys = from key in cache.Keys where key.StartsWith("Key1") select key;
Assert.IsTrue(keys.Count() == 3);

Die gesamte Projektmappe (Visual Studio 2008 Projekt) kann hier heruntergeladen werden:

Download: Enterprise Library 4.0 (Caching-Wrapper)  Enterprise Library 4.0 (Caching-Wrapper) (171.7 KiB, 426 hits)

oder wie gewohnt über den Navigator-Link Download. Leider habe ich noch keine Zeit gefunden, dass Projekt zu dokumentieren, was ich nochmal nachholen möchte. Ebenso fehlen die Testfälle noch. :( Aber auch dazu wird sich sicher noch die ein oder andere Minute finden. Für Anregungen und Anmerkungen wäre ich wie immer dankbar ;-)

Schlagwörter:, ,

Get Adobe Flash playerPlugin by wpburn.com wordpress themes

Copyright © 2005-2010 marcus' tagebuch All rights reserved.
Desk Mess Mirrored v1.7 theme from BuyNowShop.com.