• About
  • Datenschutz
  • Impressum
.Net 4 Fun

iPhone/iPad Problem: Warten auf Synchronisierung hängt bzw. 10000 leere Playlists in iTunes Match

25. Mai 2013 20:17 / Hinterlassen sie einen Kommentar / Kai

Aus irgendeinem Grund tauchten mehrere 1000 leere Playlisten mit Namen “local” im iTunes auf nachdem iTunes Match aktiviert wurde. Diese wurden auch auf das iPhone und iPad übertragen. Das alleine ist schon schlimm genug, denn manuelles löschen dauert sicher Stunden. Viel schlimmer ist, dass keins der Geräte mehr synchronisiert. Rechnerneuinstallation, anderer Rechner, anderer USB Port, anderes Kabel…keine Chance. Wie kommt man nun weiter ohne seine Daten zu verlieren? Achtung! Durchführen auf eigene Gefahr! Keine Garantie, dass so nicht doch Daten verloren gehen!

1. iTunes Match auf allen Geräten deaktivieren (Sicherstellen, dass man seine Musik lokal als Backup hat!)
2. Vorsichtshalber Gerät neu starten
3. iTunes mit gedrückter Shift-Taste starten und neue Bibliothek anlegen
4. Backup erstellen. Nicht per Sync, sondern selber auf “Sichern” klicken.
5. In iTunes auf den iTunes Store klicken und rechts unter “Gekaufte Artikel” Apps runterladen. So sind sie lokal vorhanden und werden später inkl. Einstellungen und Position der App wieder installiert.
6. Nun beherzt im Gerät unter Einstellungen->Allgemein->Zurücksetzen die “Inhalte & Einstellungen” zurück setzen. Nur Einstellungen reicht nicht aber keine Sorge man hat ja das Backup.
7. Warten bis in iTunes die Auswahl erscheint ob man neu oder aus Backup konfigurieren möchte. Dort das zuvor erstellte Backup auswählen und warten. Das war’s. Sync funktioniert wieder.
8. beim Apple Support unter iTunes Store einen Supportfall öffnen, das iTunes Match ein Problem hat. (Ergebnis steht bei mir noch aus) Fakt ist, dass die Antwort, dass keine Fehler gefunden wurden und man iTunes Match nochmal aktivieren soll zur Folge hat, dass man die oben genannten Schritte erneu durchführen darf, da exakt der gleiche Fehler Auftritt: Man bekommt wieder tausende Playlists und die Synchronisierung funktioniert nicht mehr.

Erstellt in: Fehlerbehebung / Getaggt mit: iPad, iPhone, iTunes Match

Instanzvariabelen

5. Mai 2013 22:31 / Hinterlassen sie einen Kommentar / Kai

Objekte enthalten Instanzvariabelen. Man kann diese durch Aufruf der Methode instance_variables auf ein Objekt abfragen.
Instanzvariabelen haben keine Verbindung zur Klassendefinition, sie existieren sobald ihnen ein Wert zugewiesen wird. So können Objekte der gleichen Klasse unterschiedliche Instanzvariabelen enthalten. Man kann sie sich als Key-Value-Paar wie bei einem Hash vorstellen, die je Objekt unterschiedlich sind.
Im folgenden Code enthält das Objekt nur eine Instanzvariabele wenn die Methode aufgerufen wird.

class MyClass
   def my_method
      @myVariable = 1
   end
end
Erstellt in: Ruby / Getaggt mit: Ruby

Open Class

5. Mai 2013 22:30 / Hinterlassen sie einen Kommentar / Kai

Existierende Klassen lassen sich in Ruby durch das class Keyword erneut öffnen und dadurch erweitern.

class String
   def additional_string_method
      "My method"
   end
end

Aber Vorsicht: Schon vorhandene Methoden werden überschrieben, was zu Seiteneffekten führen kann!
Mit großer Power kommt große Verantwortung. Lieber zwei Mal überlegen ob man wirklich diese globale Modifikation, die auch als Monkeypatch bekannt ist, durchführen sollte oder lieber z. B. eine eigene Klasse dafür nutzen sollte.

Erstellt in: Ruby / Getaggt mit: Ruby

Windows Phone 7 Globalisierung

2. Dezember 2010 01:03 / Hinterlassen sie einen Kommentar / Kai

Eine gute Anleitung zur Globalisierung von Windows Phone 7 Apps findet man in der MSDN Library. Für Schnell-über-leser hier das wichtigste zusammen gefast.

  1. Ressourcen Dateien der Solution hinzufügen (MyResources.resx, MyResources.resx.de-DE, MyResources.es-ES).
  2. Ressourcen Dateien öffnen und den AccessModifier auf Public stellen.
  3. Zum Test einen Eintrag erzeugen. Der Key muss dabei in allen Ressourcendateien der selbe sein. Der Value beinhaltet die Übersetzungen.
  4. Default Sprache in den Eigenschaften des Projektes unter Assembly Information –>Neutral Language einstellen. Dieses definiert die Sprache in der Ressourcen Datei ohne Culture-Zusatz (MyResources.resx)
  5. Die Projektdatei (.csproj) mit einem Editor öffnen und die zusätzlich unterstützten Sprachen dem Tag <SupportedCultures> hinzufügen. <SupportedCultures>de-DE;es-ES;<SupportedCultures>
  6. Ein Property erzeugen, dass MyResources bereitstellt:
  7. public class LocalizedStrings
    {
        public LocalizedStrings()
        {
        }
    
        private static var localizedResources = new MyNamespace.MyResources();
    
        public MyNamespace.MyResources LocalizedResources
        { get { return localizedResources; } }
    }
    

6. In der App.xaml die eben erstellte Klasse bereitstellen:

&lt;Application.Resources&gt;
   &lt;local:LocalizedStrings xmlns:local = &quot;clr-namespace:MyNamespace&quot; x:Key=&quot;LocalizedStrings&quot; /&gt;
&lt;/Application.Resources&gt;

7. Nun fehlt nur noch das Binding

&lt;TextBlock Text=&quot;{Binding Path=LocalizedResources.KeyInMyResources, Source={StaticResource LocalizedStrings}}&quot; /&gt;

Hinweis zur ApplicationBar:

Da die ApplicationBar keine Silverlight-Komponente ist, wird dynamisches DataBinding nicht unterstützt. Also nicht wundern warum beim Kompilieren eine XamlParseException “AG_E_PARSER_BAD_PROPERTY_VALUE” bekommt. Im Xaml wird die entsprechende Zeile markiert mit dem Hinweis “Text cannot be empty”. Die Lösung lautet: code behind…

public MainPage()
{
   InitializeComponent()
   BuildApplicationBar()
}
private void BuildApplicationBar()
{
   ApplicationBar = new ApplicationBar();
   var appBarButton = new ApplicationBarIconButton(new Uri(&quot;/Images/ApplicationIcon.png&quot;,UriKind.Relative)){Text = MyResources.MyAppBarButtonKey};
   ApplicationBar.Buttons.Add(appBarButton);

   var appBarMenuItem = new ApplicationBarMenuItem(MyResources.MyMenuItemTextKey);
   ApplicationBar.MenuItems.Add(appBarMenuItem);
}
Erstellt in: Windows Phone 7 / Getaggt mit: Globalisierung, Windows Phone 7

Anything goes

7. August 2010 19:12 / Hinterlassen sie einen Kommentar / Veit

Als Gast(autor) ziemt es sich ja eigentlich nicht gegenüber dem Gastgeber in irgendeiner Form mäkelig zu sein. Zumal es sich bei dem Gastgeber um ein von mir über die Maßen geschätzten und respektierten Software-Architekten und -Entwickler handelt. Doch sein zuletzt hier veröffentlicher Aufruf “Time to go back to the basics” erregte doch in mir Widerspruch, den ich auf diesem Wege loswerden möchte.

In seinem Aufruf kritisierte mein Gastgeber das Verwenden von Workarounds bei der Software-Entwicklung. D. h., das Verwenden von kleinen Quelltext-Fragmenten, mit denen Probleme nur auf die Schnelle und nur vordergründig gelöst werden sollen. Stattdessen soll man wie ein guter Pfadfinder bei jeder Gelegenheit die Workarounds wegräumen und Ordnung im Quelltext schaffen — selbst dann, wenn man die Unordnung nicht verursacht hat.

Doch hier regt sich bei mir Widerspruch, so daß ich meinem Gastgeber im Sinne Feyerabends (1997) entgegenrufen möchte: No, anything goes! Denn, um es mit den Worten Paul Feyerabends zu formulieren, kein Programmcode ist “so alt oder so absurd, daß er nicht unser Wissen verbessern könnte. (Feyerabend, 1997, S. 55). Denn woher weiß man den, daß der Workaround, den man da gerade beseitigen will, das Problem ist? Kann es denn nicht auch so sein, daß die Idee, die hinter dem Workaround steckt, die eigentlich bessere ist, als die hinter dem vermeintlich ordentlichen Quelltext? Kann man das vor allem dann wissen, wenn der Quelltext nicht von einem selber ist?

Denn dies setzt voraus, daß man die Absichten und die Ideen des Urhebers richtig erkannt und verstanden hat, was nicht immer der Fall sein muß. Und Aufräumen würde dann die Unordnung, die man dort beseitigen will, erst schaffen. Hier versagt daher die Metapher der Pfadfinderregel. Im Wald mag jeder leicht erkennen, daß ein Faß mit Giftmüll dort nicht hingehört. Aber ein vermeintlicher Workaround, ist am Ende gar keiner, da er nämlich nur das Ergebnis unkonventionellem und unorthodoxem Denken ist, zu  dem man vielleicht selbst aufgrund der ganzen Pfadfinderregeln nicht mehr fähig ist. Denn dies sollte nicht vergessen werden, wenn man nach Ordnung und Clean Code ruft. Software-Entwicklung ist ein kreativer Akt, bei der es auch — wenn nicht sogar primär — um die Entwicklung von Ideen und nicht nur um die sture Produktion von Quelltext.

Wenn ich in diesem Sinne rufe: “Anything goes!”, heißt dies aber auch, daß ich meinem Gastgeber in einem Punkt zustimme. Denn mit  die Software-Entwicklung soll dadurch nicht der Beliebigkeit anheim gestellt werden. Hierfür bedarf es schon einige grundlegender Regeln und Prinzipien, um die Software-Entwicklung zu einem erfolgreichen Abschluß zu bringen. Doch die Regeln und Prinzipen sind abhängig vom Kontext, d. h. von der Anwendungsdomäne und dem Zweck der Software, der Entwicklungsumgebung, den eingesetzte Techniken usw. Und die Regeln und Prinzipien, die in der einen Situation zum Erfolg führten, können in der nächsten versagen. Ein beliebiges und stures anwenden der immer gleichen Regeln und Prinzipien kann genauso schädlich sein, wie eine regel- und prinzipienlose Beliebigkeit.

Literatur
Feyerabend, P. (1997). Wider den Methodenzwang (6. Aufl.). Frankfurt am Main: Suhrkamp.

Erstellt in: Clean Code / Getaggt mit: Boy Scout Rule, Clean Code, Pfadfinderregel

Das Konzeptualisierungsparadoxon

25. Juli 2010 11:41 / Hinterlassen sie einen Kommentar / Veit

Haftungsauschluß: Dieser Beittrag enthält wissenschaftlich verbrämten Unsinn. Argumente und Ergebnisse seriöser wissenschaftlicher Forschung werden aus ihren Zusammenhängen gerisssen, wild zusammengewürfelt und daraus vollkommen falsche Schlußfolgerungen gezogen. Mit Lesen dieses Beitrags verschwendet man nur wertvolle Lebenszeit.

Bei jeder Entwicklung einer Software steht man als Entwickler immer vor der Aufgabe die Gegenstände und Phänomene der jeweiligen Anwendungsdomäne zu erfaßen, zu durchdringen und zu verstehen, letztlich die Domäne zu konzeptionalisieren, um sie dann in entsprechenden Software-Artefakten — seien es Modelle oder Programmcode — zu realisieren.

Nun ist die Konzeptualisierung einer Domäne oder gar der Welt kein spezifischer Vorgang für die Entwicklung von Software, sondern er findet vielmehr von Geburt an bei jedem Menschen statt. Heuser (2007, S. 200) stellt hierzu mit Verweis auf den Entwicklungspsychologen Jean Piaget (siehe z. B. Ginsburg & Opper, 2004) fest, daß dabei Chaos für die Kognition des Menschen wie für den Raum an sich das Ursprüngliche ist. Kinder prägen erst eine toplogische Vorstellung vom Raum aus und erst später eine metrische. Der Raum wird zuerst als amorpher, beweglicher Raum gedacht, bei dem lediglich der Ortszuammenhang invariant ist, und das Gleichbleiben von Größen, Abstände, Winkel oder Form für die Unterscheidung von Figuren und Körpern keine Rolle spielt. Der “Entwicklungspfeil” (Heuser, 2007, S. 200) zeigt hier von der nur wenig strukturierten und geordneten Vorstellung der Welt hin zu einer stark strukturierten und geordneten Vorstellung.

Betrachtet man nun hingegen die Geschichte des Bildes, welches sich der Mensch von der Welt macht, dann zeigt der Entwicklungspfeil dieses Bildes in die genau umgekehrte Richtung. Am Anfang herschte ein sehr strukturiertes und geordnetes Weltbild vor. Die Erde war eine Scheibe, um der sich nur wenige Gestirne drehten. Mit der Zeit begann aber dieses Bild zu erodieren. Die Erde wurde von der Sonne aus dem Mittelpunkt verdrängt. Die Sonne wurde dann an den Rand einer Galaxie als eine Gestirn unter vielen verwiesen. Und die Galaxien wiederum bilden nur “Cantorstaub” (Cantor, 1883 zitiert nach Mandelbrot, 1991, S. 87-88) in einem in sich gekrümten Universum. Die Mechanik wurde relativiert, bevor die dann noch übriggebliebene Ordnung von der Quantentheorie vollkommen aufgelöst wurde.

Fazit: Der menschliche Verstand, der mittels der Konzeptualisierung aus dem Chaos entstanden ist, entwickelt ein Weltbild, bei dem er bei der Ordnung beginnt und wieder beim Chaos angelangt. Paradox, oder?

Literatur
Cantor, G. (1883). Grundlagen einer allgemeinen Mannigfaltigkeitslehre. Mathematische Annalen, 21, S. 545-591.
Ginsburg, H. P. & Opper, S. (2004). Piagets Theorie der geistigen Entwicklung (9. Aufl.). Stuttgart: Klett-Cotta.
Heuser, M.-L. (2007). Die Anfänge der Topologie in Mathematik und Naturphilosophie. In Günzel, S. (Hg.). Topologie. Zur Raumbeschreibung in den Kultur- und Medienwissenschaften. Bielefeld: transscript.
Mandelbrot, B. (1991). Die fraktale Geometrie der Natur. Basel: Birkhäuser.

Erstellt in: Unsinn / Getaggt mit: donotread, konzeptualisierung, Modellierung, skurriles

WordPress: Dateiendung freigeben

3. Juli 2010 13:32 / Hinterlassen sie einen Kommentar / Kai

Um in WordPress 3.0 eine weitere Dateiendung freizugeben muss die Funktion get_allowed_mime_types() in der Datei /wp-includes/functions.php bearbeitet werden. Diese Funktion muss um einen weiteren Eintrag erweitert werden, der die Dateiendung und die Beschreibung des Dateityps enthält.

'xyz' => 'application/xyz-description',

Der Upload funktioniert nun wunderbar. Doch wie könnte es anders sein, so gibt es bei dem IIS7 mal wieder einen kleinen Fallstrick. Wird nun in WordPress eine die Datei eingebunden und versucht man diese herunter zu laden, kann es vorkommen, dass man anstelle eines Downloads einen 404 Fehler erhält. Das liegt meist daran, dass die MIME-Zuordnung auf dem Server noch nicht vorhanden ist. Um die Zuordnung zu erstellen muss in die Befehlszeile folgender Befehl ausgeführt werden:

%SystemRoot%\windows\system32\inetsrv\appcmd set config /section:staticContent  /+[fileExtension='.xyz',mimeType='application/xyz-description']
Erstellt in: Allgemein, IIS7, Wordpress / Getaggt mit: 404, Dateiendung, IIS7, MIME, Wordpress

Stopwatch Snippet

3. Juli 2010 12:59 / Hinterlassen sie einen Kommentar / Kai

Natürlich kann man eine Anwendung mit mächtigen Profiling Tools auf Engpässe testen, doch häufig reicht schon eine kleine Stopwatch. Um diese schnell in den Code einbauen zu können gibt es hier ein Stopwatch Snippet für Visual Studio.

Anwendung des Snippets mit "Sourround With..."

Es wird automatisch eine Stopwatch erstellt, deren Namen man bei mehreren Stopwatches kurz anpasst. Schnell noch zur Identifizierung im Output-Fenster den Funktionsnamen angeben und fertig ist das Miniprofiling.

Um dieses Snippet nutzen zu können muss es nicht extra mit dem Code Snippets Manager von Visual Studio importiert werden, sondern ist dank des Snippet Editor mit einem Installer ausgestattet.

Erstellt in: Snippets / Getaggt mit: Snippet, Stopwatch, Visual Studio

Time to go back to basics

23. Juni 2010 14:29 / Hinterlassen sie einen Kommentar / Kai

Viel zu häufig wird versucht ein Problem durch Workarounds und ausprobieren in den Griff zu bekommen. Insbesondere unter Zeitdruck neigen viele Softwareentwickler dazu schnell ein paar kleine Hacks einzubauen. Aber das rächt sich. Ist die erste Scheiben eingeschlagen, dauert es nicht lange bis Weitere folgen und der Code immer unübersichtlicher wird. Ändert sich eine Anforderung, dann wird es schwer sich an die Hacks und denn damit häufig einhergehenden Seiteneffekte zu erinnern und so sind weitere Probleme vorprogrammiert.

Time to go back to basics!

Nicht umsonst gehören die “Boy Scout Rule” und “Root Cause Analysis” zu den Basics der Softwareentwicklung. Häufig stolpert man selbst im eigenen Code über ungewöhnlich Variablennamen, Schleifenkonstrukte, “Managerklassen” oder Workarounds. Es genügen häufig kleine Änderungen und der Code wird übersichtlicher und erspart einige Kopfschmerzen beim Debuggen. Insbesondere Workarounds sind gefährlich. Sie erscheinen einem das Leben schnell zu erleichtern und das Problem aus der Welt zu schaffen. Besonders wenn wieder einmal der Chef im Nacken sitzt. Doch die hier gewonnene Zeit wird mit hohen Zinsen erkauft. Wer hat nicht schon einmal ein komplettes Modul neu schreiben müssen? Wird unter die Oberfläche des Problems gesehen und das Übel an der Wurzel gepackt, stellt man zudem oft fest, dass sich ein Problem nicht nur sauberer, sondern viel einfacher lösen läßt als gedacht. Die genannten Prinzipien lassen auch in vielen anderen Bereichen gut nutzen oder wie gut ist euer Schreibtisch aufgeräumt? Oder wiederspricht eurer Meinung nach gar alles dem “Keep It Simple, Stupid”-Prinzip und Prokratinationsstapel sind der beste Weg Ordnung zu halten?

Erstellt in: Clean Code / Getaggt mit: Boy Scout Rule, Clean Code, KISS, Pfadfinderregel, Root Cause Analysis

FTP Konfiguration im IIS 7

21. Juni 2010 21:35 / Hinterlassen sie einen Kommentar / Kai

Es kostet schon einige Mühen den FTP-Server auf dem IIS 7 zum laufen zu bekommen wenn man bisher Linux-Systeme gewohnt war. Da Robert McMurray ein wirklich gutes Tutorial hierfür geschrieben hat, möchte ich nur auf einige Fallstricke hinweisen.

1. kleine Falle:

Natürlich heißt der “Network service” im deutschen “Netzwerkdienst”. Ansonsten funktionieren die ICACLS Befehle nicht.

2. kleine Falle:

In der Regel wird man Virtual Host Names benutzen, um per ftp.sitename.com zuzugreifen. Diese sind in dem Tutorial deaktiviert. Aktiviert man diese, hat das zur Folge, dass man einen schönen “550 No such host is known”-Fehler bekommt. Die Lösung findet sich ebenfalls in Robert McMurrays Blog. Die Kurzform ist simpel. Einfach dem Benutzernamen die Domain mit einer Pipe voranstellen:

server: ftp.sitename.com
user: ftp.sitename.com|username
password: ***

Erstellt in: IIS7 / Getaggt mit: FTP, IIS7

Artikelnavigation

1 2 3 Weiter »

Letzte Beiträge

  • iPhone/iPad Problem: Warten auf Synchronisierung hängt bzw. 10000 leere Playlists in iTunes Match
  • Instanzvariabelen
  • Open Class
  • Windows Phone 7 Globalisierung
  • Anything goes

Kategorien

  • Allgemein
  • Bücher & Magazine
  • Clean Code
  • Coding
  • Fehlerbehebung
  • Firefox
  • IIS7
  • Konferenzen
  • Onlinedienste
  • Ruby
  • Snippets
  • Tools
  • Unsinn
  • Windows Phone 7
  • Windows Presentation Foundation
  • Wordpress

Archive

  • Mai 2013
  • Dezember 2010
  • August 2010
  • Juli 2010
  • Juni 2010
  • April 2009
  • Februar 2009
  • Januar 2009
  • Dezember 2008

Meta

  • Anmelden
  • Beitrags-Feed (RSS)
  • Kommentare als RSS
  • WordPress.org
© Copyright 2013 - .Net 4 Fun
Infinity Theme by DesignCoral / WordPress