13 Nov 2011 @ 12:55 PM 

In der aktuellen Computerbild gibt es ein “Blitzstartsystem”, welche “Chromium” enthält. Was sehr verwunderlich ist, da Google das ganze selbst noch nicht als stabil oder fertig deklariert.

Aber ein Grund das ganz mal selbst auszuprobieren!

Hat man ein Netbook, hat man das Problem, dass die CD einem gar nichts nützt, braucht man auch nicht. Alles was man zum Testen braucht ist ein USB-Stick mit mindestens 4 GB.

Testvorbereitung

Mein Testsystem ist ein Samsung NC 10 Plus. Fertige Builds gibts bei http://chromeos.hexxeh.net/. Dann folgt man einfach der Anleitung auf seiner Seite.Leider scheint die Downloadrate auf 40KB/s gedrosselt, was für die 250 MB schon eine etwas längere Wartezeit benötigt. Hat man den Download gemeistert, ist man schon fast fertig, entpacken und auf den USB-Stick schreiben. Nun kann man das Netbook neu starten. Im Bios den USB-Stick als 1. Bootlaufwerk auswählen sollte man auch nicht vergessen.

Mein Test

Es kann an dem billigen USB-Stick liegen oder daran, dass ich ein “Debug Build” erwischt habe, die “unter 10 Sekunden” erreiche ich nicht, es sind eher 20 Sekunden, aber weit besser als das vorinstallierte Windows 7. Im Gegensatz zu vielen im Netz wurde unser W-Lan problemlos erkannt. Anmeldung (über Google Konto) und Browsen war problemlos möglich. Die Einrichtung klappte in unter 3 Minuten. Da kamen aber auch schon die ersten kleinen Fehlerteufel. Keiner davon war gravierend, aber sehr unschön:

Eine kleine Auswahl:

  • Die Zeitzonenumstellung speichert er nicht, er bleibt beharrlich auf amerikanischer Zeit
  • Multi- Touch lässt sich beim Touchpad nicht ausstellen
  • Silverlight geht quasi gar nicht

Sieht man aber von diesen Makeln ab, so macht das System einen sehr flotten und stabilen Eindruck.

Fazit

Mein Netbook ist nun problemlos zu einem Chromebook geworden, Chromium OS hat noch einige kleinen Macken, die aber nicht groß stören. Spätestens wenn Google selbst von einer stabilen Version spricht, ist es eine Alternative für Netbook- Besitzer, welche eigentlich nur schnell mal ins Internet wollen.

 

 

 

Posted By: tkdmatze
Last Edit: 13 Nov 2011 @ 12:55 PM

EmailPermalinkComments (0)
Tags
Categories: Google, MyWeb, web 2.0

 02 Aug 2011 @ 11:49 AM 

Um neue Produkte toll in Szene zu setzen, gibt es mittlerweile Möglichkeiten zu Hauf.

“Interaktive” Youtube-Videos wie zB http://www.youtube.com/user/tippexperience
von Tipp Ex sind innovativ und sprechen sich schnell herum. Fast 10 Millionen Aufrufe sind ein top Wert.

Allerdings kann es auch zu Pannen kommen, zum Beispiel, wenn es um Fakes geht, wird aus Begeisterung schnell Verärgerung. Auch wenn ich nicht zu den Verschwörungstheoretikern wie in diesem Video gehöre, ist es schon beachtlich, wie oft Schleichwerbung gemacht wird.

Andere Interessante Pannen sind natürlich Bugs, also wenn etwas nicht so funktioniert wie gewollt.
Legendär ist Bill Gates und sein abtürzendes Windows .

Weit weniger spektakulär, aber dennoch ärgerlich ist die Seite http://www.dein-leben-ist-3d.de/ von LG.
Hat man sich durch die schön gemachte Präsentation geklickt und gibt bei der Händlersuche eine Postleitzahl aus Sachsen ein, so werde ich als Leipziger (04229) nach Wuppertal geschickt, immerhin 451km weit. Dresdener (01067) werden nach Mayen(542 km), Auer(08280) nach Rosenheim(451 km) verwiesen. Richtig Glücklich können sich die Chemnitzer (09111) schätzen, diese werden gerade einmal 248 km weit nach Schwabach geschickt.

Als Entwickler ist mir klar wie dieser Fehler passieren konnte, als Ossi fühl ich mich gemobbt.

Also bitte  schnell nachbessern LG!

 

 

 

 

 

Posted By: tkdmatze
Last Edit: 02 Aug 2011 @ 11:49 AM

EmailPermalinkComments (0)
Tags
Categories: MyWeb

 16 Feb 2011 @ 7:04 PM 

Natürlich gibt es auch anderen Änderungen, wie die Aktualisierung der CellTable oder der Integrierte GWTDesigner,
eine Übersicht dazu gibt es hier. Doch die neuen HTML5 Features, mit denen ja einige Firmen wie zB Facebook schon Arbeiten,
sollen heute das Thema sein.

Vorwarnung

GWT ist ein Framework, welches die unterschiedlichen Javascript- Implementierungen der  Browser weitgehend vom Entwickler fernhält.
Doch beim Thema HTML5 und vor allem Canvas gibt es nicht nur unterschiedliche Implementierungen, es kann auch gar nicht vorhanden sein.
Um welchen speziellen Browser es sich handelt, muss man wohl kaum erwähnen, in der neunten Version sollen aber die Features dabei sein.
Wenn es doch schon so weit wäre.

Auch Google hilft einem Webentwickler, welcher die Existenz des bösen Browsers vergessen hat mit ungewohnten Konstruktoren.

canvas = Canvas.createIfSupported();
audio = Audio.createIfSupported();

Entwicklung

In Java ist die Entwicklung kaum anders als mit Javascript.

public void draw(Canvas toDraw) {
		Context2d context = toDraw.getContext2d();
		context.clearRect(x, y, 72, 72);
		String toPrint = image[type][index % image[type].length];
		Image map = new Image(IMAGEPATH + toPrint);
		context.drawImage(ImageElement.as(map.getElement()), x, y);
		index++;
	}
 
	audio.getAudioElement().setSrc("audio/elf/attack.ogg");
		audio.getAudioElement().setAutoplay(true);

Sinn und Zweck

Interessanterweise halte ich Apple’ s iPhone für einen Meilenstein der Webentwicklung mit HTML5. Die Entscheidung kein Flash zuzulassen, nebenbei auch kein Siverlight,
hat viele Entwickler vor ein Problem gestellt: Wie kriege ich meine Multimedia-Inhalte aufs iPhone? Neben Videos und Sound geht es auch um dynamische Grafiken.
Und Apple hat als Lösung des Problems HTML5 propagiert.  Seit dem letzten Update des App Stores, dass es verbietet, das finanzielle Transaktionen in Apps am Marketplace vorbeilaufen,
suchen Firmen wie Amazon nach einer Alternative um auf dem iPhone weiterhin vertreten zu sein.

Neben den 3 Tags Audio, Video und Canvas gibt es noch andere Features, wie LocalStorage, Offlinemodus und Websockets, welche ich bald auch im GWT erhoffe.

Auch die Branche der Browser- und Socialgames wird wohl kaum an HTML5 vorbeikommen. Zwar scheint dort Flash der Platzhirsch zu sein, das wird sich aber wohl in den nächsten Jahren ändern. Vielleicht schon mit der Version 9 des böses Browsers.
Dass es durchaus möglich ist, mit HTML5 schicke Sachen zu erstellen, soll eine meine kleine Demo zeigen:

http://myasciigenerator.appspot.com/

Ich hab das “Preload” Problem von Canvas nocht nicht ganz behoben, aber es ist auch nur eine Demo.

Grafiken und Sounds stammen aus dem Open-Source Game “Battle for Wesnoth“.

HTML5 kann und wird ein Flashkiller sein und GWT das Framework für Browsergames der Zukunft.

Oder seid ihr anderer Meinung?

Posted By: tkdmatze
Last Edit: 16 Feb 2011 @ 07:04 PM

EmailPermalinkComments (0)
Tags
Categories: Google, GWT, Javascript, MyWeb, web 2.0

 06 Sep 2010 @ 9:40 PM 

eat your own dogfood

In der IT bedeudet das, daß man seine eigene Software selbst einsetzen soll. So macht es z.B. Google mit Blogger und Microsoft mit .NET.  Aber auch im Web 2.0 Zeitalter gibt es dafür gute Beispiele 37signals.com: BaseCamp und Co sind unter der Prämisse entstanden, es selbst nutzen zu wollen. Und offensichtlich wollen auch viele andere die Produkte benutzen. Und das, obwohl viele Experten sich über den Erfolg solcher Entwicklungen wundern.

kenne dich selbst

Qualität von Software hat viele Gesichter, genau wie die Art Software wahrzunehmen. Jeder hat seine eigenen Prioritäten und Vorlieben.  Um in einem Team gute/benutzbare Software zu schreiben, sollte also für jeden Faktor ein entsprechender Typus Mensch vorhanden sein. Denn manche Kriterien schliessen sich normalerweise aus, dort ist es wichtig einen Mittelweg zu finden.  Betrachten wir einmal, bei welchem Entwickler man welchen Kompromiss eingehen muss, denn jeder Entwickler wird seine Prioritäten auf die Prioritäten des Projektes anwenden. Sonst wird das Projekt zwar einen Aspekt von Softwarequalität übererfüllen, andere jedoch vernachlässigen.  Aber betrachten wir einfach mal die Typen Entwickler und ihre Vorstellung von “guter Software”.

Zweckdienlichkeit

Eigentlich überflüssig zu erwähnen, daß ein Programm seinen Zweck erfüllen muss. Allzu oft gibt es aber Projekte, in denen ein Teilprojekt, zB ein CRM in einer Auktionsplattform, zu einem Selbstläufer wird und viel mehr Entwicklungsarbeit bekommt als nötig, um den eigentlichen Zweck zu erfüllen. Entwickler halten sich gerne mit solchen Nebensächlichkeiten auf, deswegen an das Ziel erinnern.

Einfachheit/Übersichtlichkeit

Als Beispiel nenne ich hier einfach mal die ganzen IPhone- Apps. Wer hätte gedacht, daß Programme, welche jeweils nur einen einzigen Verwendungszweck haben, zu Millionen gekauft werden? Aber Menschen, die nicht so erfahren mit Computern sind, sind weit weniger verwirrt. “Wo muss ich klicken?” erübrigt sich die geringe Anzahl an Menus und Icons. Eine geringe Anzahl an Optionen, von denen die meißten aber “oft” bis “stets” benutzt werden, runden das Ganze ab. Der Benutzer kann in einem Satz genau sagen, was die App macht.
Entwickler handeln hier gerne nach dem “YAGNI – You ain’t gonna need it” – Prinzip. Dabei wird übersehen, daß die nach der “MoSCoW” -Methode aufgestellten “Should have” Anforderungen den Erwartungen bestimmter Benutzergruppen entsprechen.

Geschwindigkeit

GMail durchsucht E-Mails in Bruchteilen von Sekunden. Die gleiche Aktion dauert in Outlook ein Vielfaches. Es gibt diese Performancefreaks, die zB tagelang bei ORM- Frameworks alle Möglichkeiten der Cache- Konfiguration ausprobieren, um noch ein paar Millisekündchen herauszuholen. Die Geschwindigkeit muss akzeptabel sein. Gerade im Web gilt: alles unter einer Sekunde ist gut. Ob 987 ms oder 612 ms  -  der Benutzer bekommt den Unterschied gar nicht mit. Deswegen bei akzeptabler Geschwindigkeit stoppen.

Portabilität und Flexibilität

Es gibt Programme, dort kann man die Daten nur in einem Format abspeichern, zB der gute alte Editor. Andere wiederum können Daten(zB Bilder) in hunderten Formaten speichern. Fakt ist: Wenn man über 90% der standardisierten und/oder vom Benutzer erwarteten Formate unterstützt, ist alles in Ordnung. Ist es ohne großes Refactoring unmöglich ein anderes Exportformat zu implementieren, läuft was falsch. Der Kompromiss bleibt: so viele implementieren wie nötig – so viele zusätzlich erstellbar wie möglich.

Posted By: tkdmatze
Last Edit: 06 Sep 2010 @ 09:40 PM

EmailPermalinkComments (0)
Tags
Categories: MyWeb

 29 Aug 2010 @ 5:57 PM 

Vorwort

Nein, du wirst es nicht brauchen.

Aber du wirst es schreiben, testen, refactoren, dokumentieren und supporten.

Du wirst sehr viel Zeit dafür verwenden und veschwenden für keinen Nutzen.

Das Programm wird nicht rechtzeitig fertig und deine Erklärung ist der Fakt, dass man die Klassen wiederverwenden kann.
Quasi als Framework für das nächste  Programm.

Irgendwann kommt endlich der Tag, an dem ein neues Problem mit deinem “Framework” gelöst werden kann, nur ein paar “Anpassungen” sind notwendig.
du benutzt stolz deine Klassen und entdeckst einen Bug. Du löst den Bug,
schreibst gleich noch ein paar neue Methoden für neue Anwendungsfälle, welche dir in der Zeit eingefallen sind. Natürlich getestet und dokumentiert.
Dein Kollege bemerkt beiläufig, dass das Anpassen des Frameworks länger gedauert hat, als die Entwicklung eine Programmes, welches einfach nur das eine Problem löst.

Dein Kollege hat Recht

Viele überstrapazieren Entwickler- Credos wie:

  • Mach es wiederverwendbar!

und

  • Wiederhol dich nicht(DRY)!

und entwickeln  Code, der scheinbar alle Teilprobleme eines Problems lösen kann.
Dabei fällt einem nicht auf, dass man gerade Overengineering betreibt. Ein Anti-Pattern!

YAGNI vs Patterns

Ich möchte heute mal darüber schreiben, dass YAGNI nicht im Wiederspruch zu anderen Entwicklungs-Patterns steht,
sondern sehr gut damit vereinbar ist.

Als Beispiel soll hier das Problem eines Simplen FTP-Uploads herhalten. Da Oberprojekt sei eine
Web 2.0 Anwendung, bei der Profilbilder hochgeladen werden können.
Dazu soll das Jakarta Commons Net – Paket benutzt werden.
Dieses Problem kann man nun auf 3 Wege lösen.

Lösung 1:

Man schreibt in seinem Programm eine Methode in der Klasse, welche die Methode benötigt.

public void uploadFile(String filename){
File file = new File(filename)
FTPClient ftpClient = new FTPClient();
ftpClient.connect("hardcodededurl");
ftpClient.login("hardcodedusername", "hardcodededpw");
ftpClient.storeFile("filename", new FileInputStream(file));
ftpClient.logout();
ftpClient.disconnect();
 
}

Lösung 2:

Man schreibt eine Klasse, die per FTP Bilder hochladen kann.

Diese Klasse hat nur eine Methode und einen Konstruktor.

public class ImageFTPUploader{
    public ImageFTPUploader(String host,String user,String pw){
      // code
    }
    public  void upload(String filename){
       // code
    }
}

Lösung 3:

Man baut ein FTP-Framework mit folgendem Interface.

public interface IFTPUploader{
    public IFTPUploader(String host); // anonymer Zugang
    public IFTPUploader(String host,String user,String pw); // normaler Zugang
    public void setTransfermode(int mode); // ascii oder binary
    public File downloadFile(String remoteFile);
    public void uploadFile(String localFile);
    public String[] listDir(String remoteDir);
    public void changeDir(String remoteChangeDir);
    // ... und ne Menge mehr in Version 2 ...
}

Mach es wiederverwendbar

Schauen wir uns die 3 Lösungen an, ist klar, das Lösung 1 da ausscheidet. Die anderen beiden sind wiederverwendbar.
Allerdings stellen sich mir bei Lösung 3 die Fragen:

  • Muss ich setTransfermode immer aufrufen?
  • Was ist der Standardwert?

Ich bin gezwungen, die Doku zu lesen, weil so viele Möglichkeiten bestehen.
Mit Augenzudrücken gibt es keinen Punktabzug.

Punktestand: 0:1:1

Keep it Simple and Stupid (KISS)

Anders gesagt, schreib soviel Code wie du musst.

Hier scheidet Lösung 3 aus, weil sie viel mehr als nur das eine Problem löst.

Punktestand: 1:2:1

Don’t repeat yourself (DRY)

Dieses Pattern ist sehr eng verwandt mit “Mach es wiederverwendbar”, deswegen ist die Punkteverteilung die gleiche

Punktestand 1:3:2

Release early, Release Often(rero)

Das ist nicht nur ein Pattern für Firmen, sonder auch ein für Entwickler. Time-To-Market (TTM) ist da der entscheidende Faktor.
Code der irgendwann mal benutzt werden könnte,  aber nicht zur Problemlösung beiträgt ist unnütz. Er kostet aber viel Zeit.

Wieder scheidet Lösung 3 aus.

Punktestand 2:4:2

There’s more than one way to do it

Okay ganz anderes Problem (Phase 2 ;) ) jetzt sollen Lebensläufe im .doc,.docx oder .pdf Format hochgeladen werden auf einen anderen Server.
Das Projekt entwickelt ein anderer Programmierer als du.

Bei der Lösung 1 gibt’s das gute alte Copy+Paste. es gibt eine Methode in seinem LebenslaufConroller die sowas macht

Bei Lösung 2 gibt’s ähnliches Copy+Paste, nur heisst die neue Klasse LebenslaufFTPUploader oder DocumentUploader

Bei Lösung 3 gibt es gar 4 Möglichkeiten:

  1. Der andere Entwickler kennt dein Framework nicht und entwickelt was eigenes
  2. Der andere Entwickler kennt dein Framework, dieses liefert aber nicht die Funktionaltät und er entwickelt was eigenes
  3. Der andere Entwickler kennt dein Framework, dieses liefert aber nicht die Funktionaltät und er bittet dich, diese nachzuimplementieren
  4. Der andere Entwickler kennt dein Framework, dieses liefert die benötigte Funktionalität

Wollen wir ehrlich sein?
Möglichkeit 3 und 4 würden wir uns alle wünschen. Die anderen Möglichkeiten spiegeln die Realität dar.
Und manchmal sind wir im Urlaub oder krank. Deswegen bekommt Lösung 3 wieder keinen Punkt.

Punktestand 3:5:2

Worse is better / weniger ist mehr (wib)

Das muss man zunächst erklären:

  1. Simplicity: Das Programm/Die Klasse muss einfach benutzbar sein
  2. Correctness: alles was funktioniert, muss zu 100% funktionieren.
  3. Consistency: alles macht das, was man davon erwartet
  4. Completeness: alles ist da, um das Problem zu lösen

Eigentlich eine Sammlung der vorhergehenden Patterns.

Doch Lösung 3 passt einfach nicht dazu.

Punktestand 4:6:2

MoSCow

Kurze Erklärung

  1. Must have – Minimal Usable SubseT – Kann alles was es soll
  2. Should have – Erwartungen an die Klasse
  3. Could have – Hoffnungen an die Klasse
  4. Won’t have – Die Goodies

Okay, die gleichen Vorraussetzungen wie bei “There’s more than one way to do it”.
Hier geht es um Erwartungen  an den Code.

Lösung 1: man erwartet das es im Ausgangskontext funktioniert
Lösung 2: man erwartet das es funktioniert, Bilder über FTP hochzuladen
Lösung 3: man erwartet das es funktioniert, bei allem was man über FTP machen kann

Die Frage ist nun: erfüllt man diese Erwartungen?
Bei Lösung 1 und 2 ist es einfach, jedoch sind die Erwartungen bei Lösung 3 recht hoch.
Man erwartet, das neue Problem damit lösen zu können … und werden diese Erwartungen, von denen man beim Schreiben keinen blassen Schimmer hatte, nicht erfüllt … verdammt man diese Klassse!

Punktestand 5:7:2

Fazit

Ich könnte die Liste beliebig erweitern, doch das Ergebnis ist klar:
Code den man nicht wiederverwenden kann, ist Mist.
Coder der unter der Prämisse entsteht, alles zu können, ist Mist.

Code ist nur dann sinnvoll, wenn er seinen Zweck erfüllt und diesen Zweck zuverlässig erfüllt

Posted By: tkdmatze
Last Edit: 29 Aug 2010 @ 05:57 PM

EmailPermalinkComments (0)
Tags
Categories: MyWeb

 25 Jul 2010 @ 1:33 PM 

IDE?

IDE steht für Integrated Development Enviroment oder auf gut deutsch Entwicklungsumgebung. Eine Vielzahl von Tools, die man im Entwicklungsprozess benötigt unter einem Hut. Ich werde hier auf PHP- Entwicklung eingehen, da ich mit ASP noch nicht viel gemacht habe.

Installation

Wie installiert man PHP und MySQL für Webmatrix? Auf der Webseite wird doch hoch und heilig versprochen, dass man beides benutzen kann. Und nach langer Suche fand ich einen Weg dies zu bewerkstelligen. Man installiert einfach WordPress.
Webmatrix kommt  mit einer Handvoll Webapplikationen. Viele davon sind in ASP, aber auch einige PHP-Apps sind dabei. Installieren kann man diese über den Menupunkt “Neues Projekt -> Projekt aus Web Gallery”. Dort kann man WordPress installieren.

WordPress auswählen Ja MySQL!!!! PHP und Mysql
werden installiert.
OOps was ist hier passiert?

Der letzte Schritt ist den Mitgelieferten MySQL Server zu starten und Webmatrix neuzustarten.

MySQL

Microsoft hält sein Versprechen und unterstützt MySQL genau so gut wie die hauseigene SQL-Lösung.

Neben Tabellen (wie in der Compact Edition) kann man nun auch Sichten und gespeicherte Prozeduren recht komfortabel erstellen.

PHP

Dank der WordPress- Installation bietet Webmatrix nun im Auswahlfeld auch PHP Seiten an, das gleiche Beispiel wir beim letzten Post mal in PHP.

Neue PHP Seite Coden Testen Hochladen

Fazit

Hat man die Hürde der Installation überwunden, hat man kostenlos eine Lösung, die sich nicht vor anderen kostenlosen Vertretern (zb PHPEclipse, PHP for Netbeans) verstecken muss. Auch wenn Features wie Codevervollständigung, Outlining  und Debugging fehlen, für den Hobbyentwickler bietet Webmatrix alle Tools eines kompletten Entwicklungsprozesses. Alles wirkt wie aus einem Guss und verlangt nur wenig Eingewöhnung.  Das Projekt befindet sich zur Zeit in der Beta und ich denke dass die in diesem Post angesprochenen Fehler bis zum Release verschwunden sind. Und dann kann man dieses Projekt ruhigen Gewissens weiterempfehlen.

Posted By: tkdmatze
Last Edit: 25 Jul 2010 @ 01:33 PM

EmailPermalinkComments (0)
Tags
Categories: MyWeb

 07 Jul 2010 @ 4:47 PM 

LAMP?

Zunächst einmal Für alle Microsoft-Jünger LAMP steht für Linux + Apache + MySQL + PHP. Diese Kombination erlaubt es, mit kostenlos verfügbaren Komponenten, einen Webserver für dynamische Webseiten mit Datenbankanbindung bereitzustellen. Etwa 90% des Internets setzen setzen auf diese Komponenten.(zB WordPress/Joomla/Typo/Wikipedia). Erweitert wird die Kombination oft durch FTP (zum Dateiaustauch) und phpMyAdmin(zur Datenbankverwaltung).

Webmatrix

Webmatrix ist ein neues Projekt von Microsoft, welches sich aktuell in der Beta-Phase befindet. Dabei werden alle im Vorwort erwähnten Komponenten durch die Basisversionen von Microsoft- Pendants ersetzt und in Einklang gebracht. Zusätzlich steht die Möglichkeit zum Upgrade einzelner Komponenten zur Verfügung.

Windows + IIS (Developer Express)

Es ist wohl eine Frage der Zeit, bis die aktive Linux- Community die Neuerungen in Produkte wie Apache und Mono integrieren, bis dato ist man wohl an Microsoft als Betriebssystem beschränkt. Die Beschränkung ist allerdings keine Leistungs- , sondern eine Kostenfrage. Playground-Workspace (also einen Server zum Testen) auf LAMP- Basis ist im Netz teilweise sogar kostenlos zu erhalten. Windows-Hoster sind rar und vergleichsweise teuer. Wer sich allerdings einen Windowsserver hat, der weiß auch was er für das Geld bekommt.

Microsoft SQL Server Compact

Auch hier eine Kostenfrage.  Das mitgelieferte Modul ist zwar kostenlos, ist aber Einschränkungen unterlegen(2 MB Speicher und 5 MB Arbeitsspeicher), mit der Express Version(auch kostenlos) sind es schon 10 GB Speicher und 1 GB RAM. Richtig Spaß macht ein SQL-Server aber erst ab der Standard- Edition, welche dann aber auch mit über 5000€ zu Buche schlägt. Zusätzlich bietet Microsoft die Anbindung an den neuen Clouddienst Azure SQL an.

Bis auf die dürftige mitgelieferte Version ist der Clou, daß die Datenbankverwaltung direkt in die IDE integriert wurde.

Sprachen

Neben den alten Bekannten C#, VisualBasic und Co von Microsoft unterstützt das Paket PHP und ASP.NET Web Pages(ähnlich PHP und JSP). Gerade ASP.NET Web Pages machen das Ganze interessant, da man schnell und auf bekannten Wegen Applikationen erstellen kann.

Deployment

Auch dieses wurde in das Paket integriert und bietet die Möglichkeiten FTP,SFTP und Webdeploy(ein microsofteigenes Format).

Installation :

Nicht mal 40 MB benötigt das Paket in der Basisvariante:

Von

Erste Schritte

Selbstverständlich muss ich sowas immer ausprobieren, natürlich immer mit dem “MyNotes” – Beispiel.

Nachdem mit einer “Empty Site” startet, sieht man zunächst den Startbildschirm:

Von WebMatrix

Die Webseite startet automatisch. Ganz nett: Webmatrix erkennt die Installierten Browser und bietet diese an, es gibt halt mehr als nur IE ;)
Auf jeden Fall praktisch für Designer.

Von WebMatrix

Okay leere Seiten sind langweilig, erstellen wir mal eine Datenbank, eine Tabelle und füllen diese mit Testdaten, dank der eingebauten Datenbankverwaltung supereinfach.

Von WebMatrix Von WebMatrix Von WebMatrix Von WebMatrix

Nach ein paar Zeilen hat man schon eine einfache dynamische Webseite

Von WebMatrix Von WebMatrix

und ein paar Minuten und Zeilen später hat man die komplette CRUD-Funktionalität hergestellt

Von WebMatrix Von WebMatrix

Zwischenfazit

Der Einstieg in die “Razor”- Sprache  ist sehr einfach und macht Lust auf mehr,
gerade für Einsteiger halte ich sie für sehr geeignet. Wenn man nicht auf Hosting auf Windowsservern  angewiesen wäre,
würde es sogar eine wirkliche Alternative zu PHP  darstellen. Leider hat diese tolle Projekt den Microsoftbeigeschmack.

Posted By: tkdmatze
Last Edit: 07 Jul 2010 @ 04:47 PM

EmailPermalinkComments (0)
Tags
Categories: MyWeb

 19 Feb 2010 @ 3:47 PM 

Das Problem

Datenbankzugriffe sind teurer als Speicherzugriffe, das ist nicht neu. Viele Frameworks wie Hibernate setzen deswegen auf einen Cache, um die Anzahl der Datenbankzugriffe zu minimieren und damit die Performance zu erhöhen. Das Caching passiert dabei meißt unter der Haube und lässt den Entwickler den Fokus auf die eigentlichen Arbeiten behalten.

Mit Google App Engine und  Memcached und dem verteilten Cache ist Caching auch in der Cloud möglich. Doch auch wenn bei App Engine  keine Persistenzlösung wie Hibernate oder EclipseLink möglich ist, kann man  auf eine einfache Weise Caching nachrüsten.

Vorher

Eine einfache DAO-Klasse

public class NodeDAO {
 
    public Node load(long id) {
		// code
    }
 
    public Node save(Node node) {
        if (node.getId() == 0) {
            insert(node);
        } else {
            update(node);
        }
        return node;
    }
 
    public void delete(Node node) {
     // code
    }
 
    private void insert(Node node) {
		// code
    }
 
    private void update(Node node) {
		// code
    }
}

Relativ einfach, aber erfüllt den Zweck.

Schritt 1

Zunächst erstellen wir ein Interface Indexed, damit die Lösung später für verschiedene Klassen möglich ist.

public interface Indexed {
 
    public long getId();
}

Und einen Simplen Cache (hier kann man später auf MemCached umrüsten)

public class SimpleCache {
 
    static HashMap cache;
 
    public static HashMap getInstance(){
        if (cache==null){
            cache = new HashMap();
        }
        return cache;
    }
 
}

Als Schlüssel soll hier Klassenname und ID fungieren

Noch ein paar kleine Interfaces für die 3 Cache- bzw Datenbankfunktionen

@Retention(RetentionPolicy.RUNTIME)
public @interface SelectCachable {}
@Retention(RetentionPolicy.RUNTIME)
public @interface SaveCachable {}
@Retention(RetentionPolicy.RUNTIME)
public @interface DeleteCachable {}

Schritt 2

Ein bisschen Guice-Magie

Starten wir mit dem SELECT oder GET – Befehl. Wenn wir einen Datensatz geladen haben, soll der im Cache verewigt werden. Ist er schon im Cache, soll keine Datenbankverbindung hergestellt werden. Wir benutzen den MethodInterceptor.

public class SelectCacher implements MethodInterceptor{
 
    public Object invoke(MethodInvocation call) throws Throwable {
        Object[] args = call.getArguments();
        Object result;
        if (args.length==1 && args[0] instanceof Long && SimpleCache.getInstance().containsKey(call.getMethod().getReturnType()+ "@" + args[0])){
            // aus dem Cache holen
            result = SimpleCache.getInstance().get( call.getMethod().getReturnType()+ "@" + args[0]);
        }else{
            // Aus der DB Holen
            result = call.proceed();
            SimpleCache.getInstance().put( call.getMethod().getReturnType()+ "@" + args[0],(Indexed) result);
        }
        return result;
    }
}

Auch der DELETE-Befehl ist simpel:

public class DeleteCacher implements MethodInterceptor {
 
    public Object invoke(MethodInvocation call) throws Throwable {
        Object[] args = call.getArguments();
        Indexed indexer = (Indexed) args[0];
        if (args.length==1 && SimpleCache.getInstance().containsKey(indexer.getClass()+ "@" + indexer.getId())){
            SimpleCache.getInstance().remove( indexer.getClass()+ "@" + indexer.getId());
        }
 
        return call.proceed();
    }
}

Zuletzt noch der PUT Befehl, hier muss man dazu sagen, dass aufgrund der ID entschieden wird, ob ein Insert oder Update geschieht, beim Insert wird bei @@IDENTITY die ID bestimmt und dem Objekt zugewiesen.

    public Object invoke(MethodInvocation call) throws Throwable {
        Object result = call.proceed();
        Indexed indexer = (Indexed) result;
        SimpleCache.getInstance().put(indexer.getClass() + "@" + indexer.getId(), indexer);
        return result;
    }

Schritt 3

Nun müssen wir noch die Annotationen mit den Interceptors verbinden. Das passiert bei Guice so:

public class CacheModule extends AbstractModule{
 
    protected void configure() {
        bindInterceptor(any(), annotatedWith(SelectCachable.class), new SelectCacher());
        bindInterceptor(any(), annotatedWith(SaveCachable.class), new SaveCacher());
        bindInterceptor(any(), annotatedWith(DeleteCachable.class), new DeleteCacher());
    }
}

Schritt 4

Der finale Schritt, jetzt verbinden, oder besser gesagt injizieren, wir alles, was bisher erstellt wurde. Per Factory-Pattern erhalten wir wir nun eine Erweiterte Variante der Basisklasse. Per Annotationen bestimmen wir, welcher Methode welcher Interceptor zugewiesen wird.

public class NodeDAO {
 
    public static NodeDAO create() {
        Injector inj = Guice.createInjector(new CacheModule());
        NodeDAO ret = inj.getInstance(NodeDAO.class);
        return ret;
    }
 
    @SelectCachable
    public Node load(int id) {
		// Code
    }
    @SaveCachable
    public Node save(Node node) {
        if (node.getId() == 0) {
            insert(node);
        } else {
            update(node);
        }
        return node;
    }
    @DeleteCachable
    public void delete(Node node) {
		// Code
    }
 
    private void insert(Node node) {
		// Code
    }
 
    private void update(Node node) {
		// Code
    }
}

Fazit

Mit Google Guice Funktionalitäten nachrüsten ist recht einfach. Die Lösung ist noch nicht ideal, aber ein guter Start, da alle Komponenten austauschbar sind.

Posted By: tkdmatze
Last Edit: 19 Feb 2010 @ 03:49 PM

EmailPermalinkComments (0)
Tags

 10 Jan 2010 @ 8:09 PM 

Das Jahr hat grad angefangen und da ist es Tradition sich gute Vorsätze zu machen.

Nachdem Ajaxian schon im letzten Jahr dazu aufrief, den IE6 nicht mehr zu unterstützen, soll dies mein Vorsatz für dieses Jahr sein.

Nach dem die normalen Systemeinstellungen eh ein Upgrade zu IE7 oder IE8 ausführen….. warum muss man dieses Verbrechen an der (Web-Entwickler-) Menschheit weiter unterstützen? I WILL NOT SUPPORT IE6 IN 2010!

Nächstes Thema : Cloud Computing!

Zur Zeit ist es noch ein Buzzword, welches einfach nur durch die Medien geht.

Bei jeder neuen Technologie gibt es 3 Phasen:

Euphorie:

Manches ist einfach nur toll, weil es neu und anders ist, ob “Ruby on Rails”, Server Side Pushing(Comet) oder eben gerade eben Cloud.

Depression:

Egal welche  Technologie, hier gibt es immer auch den Zeitpunkt, an dem die Entscheidung die man getroffen hat, einem irgendetwas verbaut.

Cal Handerson(Flickr) zeigt in diesem Video (http://www.youtube.com/watch?v=i6Fr65PFqfk) die Grenzen von Django auf.
Das soll nur stellvertretend sein, für all die bösen Kommentare, die über irgendwelche Frameworks geschrieben oder gesagt werden.
Wenigstens ist es … entertaining.

Phase 3: Usablity

Kann sich wer an den AJAX-Boom erinnern? Wahnsinniger Boom! Wer nutzt jetzt noch AJAX in der Reinform? Kaum einer!
Das X in Ajax bedeudet XML, ein Übertragungsprotokoll. Leider hat JSON weniger Overhead(Zusätzliche Daten zum Übertragen) und mehr Unterstützung des Browsers.
Aber man nennt AJAX  ja nicht einfach in AJAJ um, es bleibt AJAX. Und mit JSON hat es die Phase der Usability bestanden.

Gerade sind viele neue Sachen im Kommen. Google Closure, Ruby On Rails, Grails, Spring Roo und eben Cloud Computing.
Bei allen gilt es abzuwarten, bis die ersten Erfahrungen über die Grenzen der Technologie gefunden werden. Dann gilt es für den jeweiligen Anwendungsfall zu vergleichen, ob Vor- und Nachteile einer Technologie oder eines Frameworks dem Projekt angemessen sind.

Für das Jahr 2010 heisst es also die Augen aufhalten.


Posted By: tkdmatze
Last Edit: 10 Jan 2010 @ 08:09 PM

EmailPermalinkComments (0)
Tags
Categories: MyWeb

 21 Nov 2009 @ 10:55 PM 

Ich hab mir mal ne TVMovie gegönnt, nicht weil ich eine Fernsehzeitung brauch, gibt ja genug Programme, Internetseiten und Gadgets die das umsonst machen, sondern wegen dem Film “Die sieben Schwerter”. Voller Vorfreude lege ich die DVD in mein Laufwerk und dann kommt

Windows Media Player kann diese DVD nicht wiedergeben, weil kein kompatibler DVD-Decoder installiert ist.

Okay … Google ist dein Freund

Ein, Zwei, DREI mal wird mir empfohlen, doch VLC zu benutzen. Die ersten 3 Treffer liefern alle eine Lösung auf mein Problem.

Benutze ich allerdings die Porno- Suchmachine Bing

Eins(falsche Verlinkung),Zwei,Drei(falsche Verlinkung),Vier ,Fünf ,Sechs Suchresultate ohne Lösung für mein Problem!

Wenn man die Konkurrenz ausblendet um Problemlösungen auszublenden, schafft man kein Vertrauen. Ehrlicher und fairer Umgang mit den eigenen Schwächen ist etwas absolut maskulines, aber halt nichts “winzig doofes”.

Posted By: tkdmatze
Last Edit: 21 Nov 2009 @ 10:55 PM

EmailPermalinkComments (0)
Tags
Categories: MyWeb





 Last 50 Posts
 Back
Change Theme...
  • Users » 2
  • Posts/Pages » 30
  • Comments » 6
Change Theme...
  • VoidVoid « Default
  • LifeLife
  • EarthEarth
  • WindWind
  • WaterWater
  • FireFire
  • LightLight