Dienstag, 27. April 2010

T4 und MSBUILD in VS2010

Oho!

Visual Studio 2010: Code Generation in a Build Process


Incremental Build

By default, the build manager tries to avoid executing a template if its output file is up-to-date. To do this, it monitors the file system to see which files are read by the template code. On subsequent occasions, it compares the modification dates of those files with the date of the output file. It executes the template if any input file has been modified more recently than the output file. The template is also executed if there is no information about previous executions of this template.

The result is that the output file will be regenerated if it is older than any of the following files:

  • The text template file

  • Files that are specified in <#@include#> directives

  • Files that are read by the code in the template

  • Files that are included or read by a directive processor used in the template


Wow! Damit geht nun wesentlich mehr, als bis dato möglich war, mit selbstgestrictker msbuild-Integration, vom simplen Custom-Tool-Aufruf ganz zu schweigen.

SQL Server User Instances -- neu und schon wieder veraltet?

Seit SQL Server 2005 ist es möglich, eine Datenbank als Datei (.mdf) mit der Anwendung (auch Web-Anwendung) mitzuliefern und "on-the-fly" mit dem Server zu verbinden. Dazu wird eine eigene Prozessinstanz von SQL Server "abgespalten", die mit den Rechten des angemeldeten Users läuft. An sich eine feine Sache... "Access-Feeling" mit voll SQL-Server-Power.

Ein typischer Connection-String für so etwas (ASP.NET-Webanwendung):

Data Source=(local);AttachDbFilename=|DataDirectory|\MeineDatenbank.mdf;
Integrated Security=True;User Instance=True

Beim Wieder-mal-Neuinstalieren eines Servers sind nun einige Facts wieder hochgekocht, die ich wohl vergessen hatte:

  • Das Feature wurde mit SQL Server 2005 eingeführt, und mußte dort extra mit sp_configure 'user instances enabled', '1' aktiviert werden
  • Das Feature ist bei SQL Server 2008 standardmäßig aktiv
  • User Instances gibt es nur in der Express Edition von SQL Server, nicht in einer Standard-Edition!! Das gilt für SQL Server 2008 noch genauso wie für 2005! Das ist insbesondere deswegen wichtig, weil es wohl eine Gesamt-Setup-CD von SQL Server 2008 gibt, die alle Editions und Features enthält (zumindest wir als MSDN-Kunden haben sowas). Ein falscher Klick, oder zu gut gemeint, und schon ist eine Standard Edition installiert, die keine User Instances beherrscht!

und nun das Sahnehäubchen (vorhin erst im Web bzw. in der Hilfe entdeckt!):

  • Das Feature der User Instances, kaum eingeführt mit 2005, gehört im SQL Server 2008 schon wieder zu den "Deprecated Features", also: wird in einer der nächsten Versionen wieder in Rente geschickt (bitte möglichst nichts mehr neues damit machen, alte Anwendungen vielleicht mal irgendwann umstellen, etc.)!
  • Das Beste ist die Begründung von Microsoft: "No longer needed as SQL Server Compact 3.5 SP1 provides the necessary functionality.". Wer schon mal die SQL Server Compact Edition verwendet hat (dateiorientiert, inprocess, dBase lässt grüßen ;-)) kann sich vermutlich auch nicht vorstellen, dass man jede x-beliebige Anwendung, die vorher mit einer echten SQL-Server-Datenbank lief (auch wenn sie mit User Instance attached wurde ist und bleibt das ein vollwertiger SQL-Server), so einfach auf SQL Server Compact Edition umstellen kann.

Mittwoch, 14. April 2010

Windows Sysinternals "Desktops"

Ich bin ein Windows-to-Mac-to-Windows-to-Mac "Microswitcher" ;-)
Jeden Morgen switche ich von Snow Leopard (Home) auf ein Windows 7 (Work) und abends wieder zurück. Dank TeamViewer oft auch manchmal während des Tages hin und her.

An der Diskussion, was besser ist, will ich mich gar nicht mehr beteiligen. Beide Systeme haben ihre Stärken und Schwächen, beide sind ausgereift (ja, auch Windows 7, Ruhe ihr Apple-Fanboys!;-)) und im Endeffekt kommt's doch nur noch auf die zusätzlichen Tools an, mit denen man sich das ganze versüßt (und bei mir sind da beide gleich, Mac OS eher noch schlimmer).

Eins, was Mac OS von Haus aus hat, sind die virtuellen Desktops, die "Spaces", damals von Imperator Jobs mit Fanfaren und Halleluja-Rufen vorgestellt, eigentlich ein lächerlich alter Hut. Die hat Windows aber genausowenig standardmäßig an Bord. Hier gibt es sicher viele Abhilfen, aber uneingeschränkt empfehlen kann man sicher eines:

"Desktops" von Sysinternals

den genialen Jungs, die jetzt direkt zu Microsoft gehören, Autoren unzähliger kleiner Tools (z.B. der Task-Manager-Ersatz "Process Explorer"), die jedes einzelne für sich oft auch gleich die Referenz innerhalb dieser Toolklasse darstellen. Während andere nur wurschteln, basiert diese Implementierung einfach auf dem Desktop-Konzept das Windows sowieso schon kennt (der Strg+Alt+Entf-Anmeldebilschirm ist z.B. ein vom Rest getrenntes Desktop-Objekt).

It just works! Minimalism rules! Das weiß auch Apple!

Update 21.04.2010:
Habs schon wieder deinstalliert, es kann doch zu wenig (vor allem kann es keine einmal geöffneten Fenster auf einen anderen Desktop schicken). Momentan im Test ist WindowsPager.

Update 26.04.2010:
Bin wieder bei Desktops :-) Dies hat immer noch den entscheidenden Vorteil, dass es nicht nur den Desktop vervielfältigt, sondern auch die Taskleiste und das ist bei Windows 7 mein viel größeres Problem. Fenster sind schnell mal minimiert, aber wenn 10 Anwendungen offen sind und wenn die Superbar eh schon voll ist, weil schon so viel "drangetackert" ist, dann wird das ganze schnell mal zweizeilig. Mit Desktops dagegen seh ich auf jedem Desktop seine eigene Leiste mit genau den Anwendungen, die dort offen sind. Und das ist mir wichtiger als das Verschieben von Fenstern über Desktopgrenzen. Irgend einen Tod stirbt man immer.

Donnerstag, 8. April 2010

Smart Paster Add-In for Visual Studio 2008

Wieder so eine Funktion, die mir lange abgegangen ist: Einfügen aus der Zwischenablage von längeren Dingen (auch mit Zeilenschaltung!) als String, Kommentar, ...

http://www.jesperhoy.com/post/Smart-Paster-Add-In-for-VS2008.aspx


Wenn man beispielsweise XML-basierte Unit-Testfälle schreibt, und keine externe Dateien mag, will man vielleicht den ganzen Testfall, inkl. dem XML-Fragment auf einer Bildschirmseite im Code sehen. XmlDocument.Load gegen XmlDocument.LoadXml austauschen, Datei aus der Zwischenablage reinkleben (Span Lines in den Optionen aktivieren!). Fertig.

Montag, 5. April 2010

Fritz!Load - JDownloader-Alternative für die Fritz.Box

Wozu?
Die Fritz-Boxen von AVM sind vollwertige kleine "Server", an denen sich bekannterweise (zumindest an die größeren) auch USB-Geräte dranhängen lassen (als "Media-Server"). Was weniger bekannt ist, dass es sich dabei um ein "normales" Linux handelt, zu dem man ohne Apple-Jailbreak-ähnliche Kopfstände einfach Zugriff bekommt (via Telnet und natürlich via Webserver). Es liegt also nahe, die Serverfunktionen etwas aufzurüsten, um die Stromrechnung des Arbeitsplatzrechners etwas zu schonen.

Shell-Zugang
Einfachste Möglichkeit: An einem angeschlossenen Telefon #96*7* zum Starten und #96*8* zum Stoppen des Telnet-Daemons. Konsolenfenster auf,

telnet fritz.box

und schon ist man eingeloggt (Unix-Kenntnisse vorausgesetzt). Einfacher geht's nicht. Angeschlossene USB-Geräte werden unter

/var/media/ftp/...

gemountet. Soll neue Software gestartet werden, einfach auf einen USB-Stick oder eine externe Festplatte und per Telnet loslaufen lassen.

Solche und weitere Tricks stehen (wenn sie nicht sogar im offiziellen Handbuch stehen, wie gesagt, AVM ist nicht Apple) z.B. auf dieser Seite

http://www.xobztirf.de/
(Vorsicht, teilweise out-of-date, sollte man immer prüfen, ob das für die aktuellen Boxen noch so gilt)

JDownloader / Fritz!Load
Seiten wie serienjunkies.org (Fernsehserien-"Mitschnitte") hosten keine Dateien und verweisen auch auf keine "Torrents", sondern verwalten Links auf sog. One-Click-Hoster wie z.B. Rapidshare. Sollte man von solchen Seiten herunterladen wollen (aber wer will das schon?), gibt es Hilfstools wie JDownloader, die das Zusammensammeln (100 MB-Block-Limit, blöd...), das Warten auf den doofen Download-Timer (wieder kein Zeit-Slot frei, blöd...) und das Entpacken (rar im rar im rar, gäääääähn, auch blöd... Passwort? megablöd...) übernehmen.

Mit Fritz!Load gibt es einen netten kleinen Dienst, der sich in die reguläre Weboberfläche einhängt und eine ähnliche Schnittstelle mit ähnlichen Funktionen bietet. Nur dass das Ding halt auf der Fritz!Box läuft und direkt auf den angeschlossenen Stick runterlädt!! Außerdem ist es sogar möglich, die mühevoll mit JDownloader zusammengesammelten Links (gerne auch mit dissen komischen Kritzel-"Captchas" gesichert, schön wieder blöd...) einfach zu übernehmen!

Auf der Seite von Fritz!Load http://sourceforge.net/apps/trac/avmload/ ist eine hervorragende Einleitung. Es lohnt sich die FAQs zu lesen, da stehen solche Dinge wie die Linkübernahme drin!

Prinzipiell geht es so:
  • FritzLoad-0.33.zip (oder noch neuere Version wenn es sie gibt) runterladen
  • auspacken, es entsteht ein Verzeichnis "FritzLoad"
  • Das Verzeichnis "FritzLoad" (genau so) auf einen USB-Stick kopieren
  • USB-Stick einstecken (Achtung! Hat bei mir nur mit Stick geklappt! Externe Festplatte produzierte einen "bus error")
  • Telnet-Login
  • cd /var/media/ftp/[USB-LAUFWERK]/FritzLoad/bin
  • ./install.sh -i
  • evtl. Neustarten
  • Im Hauptmenü der Fritz-Box-Startseite gibt es unten einen neuen Eintrag!
Konfigurieren:
  • Unrar: aktivieren, Passwörter eintragen (wie beim JDownloader)
  • Config: Reconnect zulassen (wieso ist das standardmäßig aus? planmäßig geht das doch nie)
  • Config: Wireshark Protokoll Mitschnitt: Welcher "Kanal" für die Linkübernahme überwacht werden soll. Standard ist "Paketmitschnitt ohne DSL-Rahmen". Ich mußte hier "lan - Paketmitschnitt Interface" einstellen, da ich kein DSL habe, sondern über ein Kabelmodem (KDG) im Netz hänge. Hier muß man evtl. nochmal in den FAQs stöbern.
Los gehts (direkt mit der Weboberfläche):
  • Links eintragen
  • Reconnect: auf enabled schalten
  • Start
Linkübernahme aus JDownloader:
  • JDownloader: Wie gehabt "einsammeln", Captchas ausfüllen
  • Fritz!Load:"Wireshark Protokoll Protokoll Aufzeichnung": Start
  • JDownloader: Check Online Status für alle Links
  • Fritz!Load: "Stop und Protokoll-Auswertung"
Torrent

Es gibt wohl einen "oberflächenlosen" Torrent-Client "transmission" der zusammen mit einer Weboberfläche als "webtransmission" rumgeht. Das letzte Wort hierzu scheint hier zu stehen:

http://www.ip-phone-forum.de/showthread.php?t=165182

Ich bin an der Version 1.50-v2.3b-svn116 schlußendlich gescheitert, vermutlich weil weder meine externe Festplatte noch mein USB-Stick auf ext2 formatiert waren sondern auf NTFS bzw. FAT. Erstens weiß ich nicht, ob das nicht ein ko-Kriterium ist, mit Fritz!Load müsste sich das Ding ja dann auch noch vertragen. Zweitens brauche ich das glaube ich nicht, Rapidshare war mir wichtiger (weil zeitintensiver). Vielleicht werde ich das Thema Torrent ein andermal nochmals angehen...

Eigene Firmware

Für ganz mutige gibt es noch mit Freetz die Möglichkeit, sich ganze fix und fertige Firmware-Images zu basteln. Nach einem Tag rumspielen in der "einfachen" Freetz-freien Welt würde ich trotzdem sagen, dass das Freetz-Thema dann nochmals etwas für hartgesottenere ist! Vermutlich wäre das dann auch der Weg, um über das Inernet an fertig konfigurierte Luxus-Fritz-Box-Inkarnationen zu kommen, aber mir das Gebräu von jemanden anderen auf meine Telefonanlage zu laden... davor hab ich zuviel Schiss... ;-)

Der "Eigentlich-Effekt"

"Eigentlich" wollte ich doch nur meinen aktuellen 2-h-Hirnfurz dokumentieren (so lange dauert meistens die Begeisterungsphase bei einer neuen Idee), was in einen nicht unerheblichen Kampf mit Blogger.com und Facebook-Pages ausgeartet ist.

"Eigentlich" (das was ich eigentlich dokumentoerem wollte) wollte ich heute Vormittag in einer Blitz-Aktion mal erkunden, ob man mit seiner Fritz-Box neben WLAN und Kaffekochen auch Torrent- und Rapidshare-Downloads erledigen kann (selbstverständlich nur Theorie, wozu bräuchte man das denn).

"Eigentlich" gings um ganz was anderes: Ich wollte mittelfristig meinen Beruf wieder zurück zum Hobby machen (mein Top-Secret-Feierabend-Projekt ;-)). Da ich hier an einer verteilten Anwendung schraube (Windows-Server, iPhone-Client und ergänzend ein Silverlight-Client), komme ich um Windows nicht herum. Hier steht aber seit 2 1/2 Jahren ein iMac, und Softwareentwicklung mit Visual Studio ist halt doch die etwas schwergewichtigere Anwendung, also läuft das meist auf Dual-Boot (Boot-Camp Windows 7) statt Virtueller Maschine raus. Es ist halt doch nicht dasselbe. Und wenns dauernd hin und hergeht, ist es halt besser, wenn solche Dinge wie die oben genannten Anwendungen (theoretisch) irgendwo in Ruhe laufen. Und nein: ich werde mir keinen Server in die Wohnung stellen! So nerdig bin ich dann doch nicht. Außerdem würde die Fritz-Box-Lösung doch eine Menge Strom sparen!

So... also:
In Ruhe programmieren + Strom sparen =>
Fritz.box hacken =>
Blogger.com einrichten

Kein Wunder dass ich nicht mit meiner Arbeit fertig werd', wenn ich das auch noch parallel dokumentier ;-). Also der nächste Beitrag geht dann so Gott will um den Nasenbären (oder soll das ne Ratte sein?) von AVM und am Abend komm ich dann vielleicht endlich wieder zu meinem "eigentlichen" Projekt O_o ^^

Halleluja! Grüß Gott zusammen!

Jetzt hab ich's endlich geschafft: Um alle Freunde zu entlasten (meine Online-Freunde sind meist identisch mit meinen Offline-Freunden und nicht alles Technikfreaks wie ich), gibt's hier erstmal versuchsweise meine "Technik-Seite" (bei Blogger.com und Facebook und hoffentlich bald offizell auf http://www.planverlust.de integriert).

Vielleicht klickt hier auch mal der eine oder andere drauf, der mich nicht kennt und sich nur für die technischen Diskussionen interessiert. Es gibt unzählige sehr gute technische Blogs da draußen, die mir bei meiner täglichen Arbeit immer wieder helfen, vielleicht kann ich so den einen oder anderen Tipp weitergeben.

Wer sich lieber für Partytermine und sinnlose Discotheken-Rezensionen interessiert ^^ dem sei nach wie vor mein Alter Ego http://www.obi1.de empfohlen. Oder ihr sucht einfach mein persönliches Profil bei Facebook (http://www.facebook.com/planverlust), dort geht es weitgehend technikfrei zu, dafür gibt's ja diese Extra-Seite hier auf Blogger.com und gespiegelt auf Facebook.

So, nu is Schluß, und los geht's! :-)