Windows Phone 8 Apps: „The name MainViewModel does not exist in the namespace“

Windows 8 Pro frisch installiert, das Windows Phone SDK heruntergeladen, installiert und gestartet, quasi-leere Demo-App erstellt, "Emulator WVGA 512MB" gestartet – folgende Fehlermeldung (plus drölf weiteren) bekommen:

Error 1 The name "MainViewModel" does not exist in the namespace "clr-namespace:MyApp".

Vermutung im Internet: Irgendwelche "Assemblies" seien nicht "korrekt" verlinkt. Aha. Kann sein, schließlich habe ich gar nichts verlinkt. Finde ich auch nicht nötig, um ein vorgegebenes Hello-World-Programm zu starten. Was für ein bekackter Bug soll das sein??

Lösung (Schritt 6, Achtung, extrem hässliche Seite): Das Projekt muss auf einer anderen Partitition als Visual Studio abgespeichert sein. WTF. Würde aber zu o.g. Vermutung passen – evt. kommt VS nicht mit relativen Pfaden klar?

Windows 8 Update als Clean Install in Parallels 6 [UPDATE]

Ausgangssituation: Ein Parallels 6 mit Windows XP. Wunsch: Ein möglichst günstiges Windows 8 Pro 🙂 PS: Bootcamp kann offiziell noch nicht mit Windows 8 umgehen.

Ab inklusive XP bietet Microsoft noch bis Ende des Monats ein Upgrade für 29,99 € an – allerdings unterliegt das einigen Einschränkungen, und es stellen sich die folgenden Fragen:

  1. Es handelt sich um eine reine Download-Version (die DVD kostet 10 Euro plus Versand extra), die als Dateiordner abgelegt wird – man benötigt zum Download also ein Windows. Schöner wäre ein bootfähiges ISO.
  2. Parallels 6 ist alt (aktuell ist Version 8), und nirgendwo ist offiziell dokumentiert, ob Win 8 unterstützt wird... aber ein neues Parallels wäre teurer als Windows 8 selbst 🙂
  3. Es muss ein aktiviertes Windows XP (oder höher) installiert sein, nicht nur zum Download, sondern vor allem auch zum Ausführen des Upgrades – schöner wäre eine "cleane" Installation auf ein frisches System

Die Lösung für Punkt 1 findet sich auf heise.de (ein erfolgter Download des Upgrades vorausgesetzt)

  • imgburn runterladen
  • C:ESDWindows als Quelle auswählen (Achtung, der Ordner ist versteckt)
  • Unter Advanced/Bootable Disc/"Boot Image" die Datei C:ESDWindowsbootetfsboot.com auswählen
  • "Sectors To Load" von 4 auf 8 ändern
  • Brennvorgang starten; im Dialog mit "Ja" antworten, um statt des Ordners seinen Inhalt zu brennen

Zu Punkt 2: Die gebrannte Disc/das erstellte Image funktioniert in Parallels 6. Das erkennt das zu installierende System zwar nicht automatisch, aber die manuelle Wahl von "Windows 7" funktioniert völlig. Win 8 wird installiert, auch ohne, dass eine Windows-Installation vorhanden ist. Es gibt eine Anleitung dazu, aber alles ist ziemlich straight forward. UPDATE: Wichtig ist der Hinweis (der in der Parallels-Hilfe unfairerweise entfernt wurde), dass man im Menü unter Virtual Machine/Configure/Hardware/Boot flags das Folgende einträgt:

devices.video.pci_device_id=0×5005

Andernfalls bekommt man nach Installation der Parallels Tools einen schwarzen Bildschirm. Ich konnte das auch nachträglich noch eingeben.

Aber, und das ist quasi auch Punkt 3: Man muss ein wenig Hand anlegen, um das auf diese Art installierte Win 8 auch aktivieren zu können (auf heise gibt's eine Kurzanleitung, die längere ist hier):

  • Metro-Ansicht öffnen (dazu auf dem Desktop nach unten rechts fahren, "Start" wählen)
  • regedit suchen (einfach lostippen, das öffnet automatisch die Suche)
  • Folgenden Schlüssel ändern: HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionSetupOOBEMediaBootInstall auf 0
  • Eingabeaufforderung suchen
  • Rechtsklick, als Admin ausführen
  • "slmgr /rearm" eingeben
  • neu starten

Den Aktivierungsstatus kann man dann in der Systemsteuerung einsehen: Metro-Ansicht, "Systemsteuerung" eingeben, Punkt "System" öffnen, unten unter "Windows-Aktivierung"

Next step: Windows Apps UPDATE: Leider läuft der Windows Phone Emulator nicht in Parallels 6

Java: Performantes Kopieren von Dateien

Interessanter Artikel (Danke, Arndt!) zum Kopieren von Dateien mit Java. Läuft im wesentlichen darauf hinaus, dass das offensichtliche (im Artikel "Native Stream" genannte) Vorgehen

ziemlich langsam ist. Das an sich verwundert jetzt noch nicht (auch wenn ich das nicht wusste). Was zumindest mich aber sehr wohl verwundert hat: Wie einfach und wie viel performanter die Alternative (genannt "Custom Buffer Stream") aussieht:

Kann man sich mal merken, und kann man bei Gelegenheit auch mal in anderen Sprachen ausprobieren.

Firefox: „Pixel Perfect“ ohne Button „Add Overlay“

Das großartige Plugin "Pixel Perfect" hat in der (aktuellen) Version 1.7.1 ein Problem mit aktuelleren Feuerfüchsen: Der Button "Add Overlay" ist verschwunden. Lösung (OS X-Version):

  • /Users/<benutzername>/Library/Application Support/Firefox/Profiles/<id>.default/extensions/pixelperfectplugin@openhouseconcepts.com/chrome/pixelperfect/content/PixelPerfectPanel.js öffnen
  • unter "addMenuOption('Hide Overlay When Inspecting', ..." (etwa Zeile 183) die Zeile addMenuOption('Add Overlay', Firebug.PixelPerfectModule.addOverlay, false); hinzufügen

Der Button erscheint nun im Dropdown-Menü im des "Pixel Perfect"-Tabs

Frohes Neues!

Neulich musste ich Folgendes hören:

RSS ist so out, wenn Du mich kriegen willst, musst Du neue Blog-Posts twittern.

Dazu ein interessanter Artikel auf Spreeblick:

Vorbei die Zeiten, in denen für die Öffentlichkeit gedachte Inhalte im öffentlichen Raum – dem Web nämlich – stattfanden. [...] Heutzutage vergraben wir unsere kurzen Gedanken und Links in der Twitter-Wüste, unauffindbar nach nur wenigen Tagen. Wir posten längere Artikel bei G+ und können nur hoffen, dass Google den Dienst nicht irgendwann genauso einstellt wie viele andere Dienste zuvor. [...] Ein Spreeblick-Artikel braucht heutzutage die Kommentar-Betreuung und ggf. meine Reaktion auf diversen Kanälen, die Debatte zerfasert [...] Und das ist Mist.

Ich fühle mich bestätigt, mein Blog relativ regelmäßig zu pflegen, und werde weiterhin folgenden Ansatz fahren:

  • Facebook: Networking und "schaut mal"-Links
  • Twitter: Kalauer und Echtzeit-News
  • crusy.net: Aufbewahrenswertes (im Wesentlichen Code-Snippets und Musik)

Frohes Neues!

Outlook für Mac 2011: Lokale Mails wiederherstellen

Mir vorhin passiert: Ich öffne Outlook, sehe merkwürdige Fortschrittsbalken, und als die durch sind, sind alle meine lokalen Mails weg. "Alle" heißt in meinem Fall alle vom 1.6.2008 bis heute Nachmittag. Danke dafür.

Es stellt sich jedoch raus, dass man die unter Umständen wiederherstellen kann. Und dieser Umstand ist: Unter

/Volumes/<meine Festplatte>/<mein Benutzername>/Documents/Microsoft-Benutzerdaten/Office 2011 Identities/

muss es noch einen Ordner "Main Identity [Sicherungskopie vom 2012-12-05 15.36.00]" (oder ähnlich) geben, der die alten Mails enthält. Zu erkennen zum Beispiel daran, dass er mehrere GB groß ist, während "Main Identity" (ohne Suffix) nur 150 MB hat.

Wenn das der Fall ist, so hat Outlook "nur" seine Datenbank zurückgesetzt. Man kann sie aber neu aufbauen:

  • Outlook und alles Zugehörige schließen
  • ALT drücken, Outlook starten. Man sollte nun verschiedene "Identitäten" zur Auswahl haben; je eine für jeden Ordner in "Office 2011 Identities", vgl. oben
  • Die Identität wählen, in deren zugehörigem Ordner die alten Mails sind
  • "Neu erstellen..." wählen. Denn anders als man erwartet, erstellt man damit keine neue Identität, sondern man erstellt die ausgewählte Identität neu – sprich: Man baut die Datenbank neu auf. (Für die Akten: Eine neue Identität erstellt man mit dem "+" unten links. Das wollen wir hier aber nicht)
  • Wenn das durch ist: Alles wieder schließen, und Outlook neu starten.

Voilà.

Apache Ant: Ja/nein-Dialog

Apache kennt von haus aus nur Input Dialoge (korrigiert mich), und damit kann man natürlich "j"/"n"-Eingaben bauen (siehe Examples).  Schöner ist aber ein richtiger Ja/Nein-Dialog, wie Javascripts confirm. Außerdem gibt es if/else nur mit Ant contrib, das nicht zwingend überall installiert ist. Bitte nennt mir eine schönere Lösung als die folgende, aber damit geht's – Confirm-Dialoge und if/else-Verzweigung abhängig von der User-Eingabe:

Die Targets "setURLs" und "setURLsAndProxy" werden nur abhängig von ${useProxy} ausgeführt, bzw nicht ausgeführt (if/unless).

Apache Ant: antcall für fileset

Dateien lassen sich in Ant (auch rekursiv) mit fileset finden. Allerdings kann man mit Bordmitteln nicht pro gefundenem File einen antcall absetzen. Das Internet schlägt Ant-Contrib vor, da gibt es "for" und "foreach", aber das zum Laufen zu bekommen bin ich gerade zu blöd. Warum liefern die ihr ant-contrib-<version>.jar nicht mit aus??

Egal. Was mit Bordmitteln geht, ist Javascript (Danke, Björn!). Dann kann man Dateien mit JS auslesen, und an antcall übergeben. Zusammen sieht das so aus: