Archiv der Kategorie: Microsoft

Google-Alternativen beim Tages-Anzeiger

Der Tages-Anzeiger hat heute auch ein paar Alternativen zur Google-Suche vorgestellt.

Sie preisen diese auch als „solide Ersatzdienste, gerade für Datenschutz-sensible Nutzer.“ Was dann aber Bing in dieser Auflistung zu suchen hat ist mir schleierhaft, auch wenn in der Beschreibung darauf hingewiesen wird, dass Microsoft auch Daten sammelt.

Andere Suchmaschinen sollten aus meiner Sicht in diesem Zusammenhang eher erwähnt werden, z.B. Qwant, eTools.ch, MetaGer oder Unbubble.

Über die Gründe, warum man auch einmal auf Google verzichten sollte habe ich in meinem Blog-Artikel „Ente statt Krake – Suchmaschinen-Alternativen“ geschrieben.

Slippery When Wet #8: Parsing IP addresses in C#

I proudly present to you the eighth in a infinite number of posts of “Slippery When Wet.” In these posts I show you a little bastard I stumbled on.

When I was trying to read some IP addresses from a CSV file I parsed them with the method IPAddress.Parse() from the System.Net namespace. Everything worked fine up to the eighth ip address. There the Parse method threw a System.FormatException: The format of the IP address was not valid. The IP address that caused the problem looked like ‚127.000.000.008‘. In my opinion this looked like a valid number, although it could be written a little bit shorter.

But Microsoft sees the world a little bit different. According to the answer by Mario Cossi on the problem description I found on social.msdn.microsoft.com this behaviour is completly valid, as all the numbers with leading zeros should be considered as octal numbers and therefore 008 is not valid, as 8 in not in the range of octal numbers. Mario writes that this is defined by standards, but does not refere to the standard where this is defined.

I did some more research but could not find the standard that describes this behaviour. What I did find were some older RFCs (like RFC 790) where IP addresses (or ranges) were written in the format with the leading zeros.

According to a wikipedia article and a therein referenced draft there is no defined standard for the textual representation of a IPv4 address.

In my opinion, the design decision of Microsoft is not the best. At least there should be a possibility to set the expected behaviour in case of a leading zero octet. Especially as the IP address 010.010.010.010 could be interpreted as 10.10.10.10 or 8.8.8.8 and you would not get an error as it would be in octal as well as in decimal a valid number.

As Microsoft did not give this possibility, according to your data you have to read, you should possibily use your own parsing method instead of the built-in one.

Binäre Werte in C#

Image courtesy of "Stuart Miles" / FreeDigitalPhotos.net

Image courtesy of „Stuart Miles“ / FreeDigitalPhotos.net

Da ich mich wieder einmal in die Tiefen eines Protokolls herab wagen musste war ich auch mit Bitmasken konfrontiert. Da merkte ich, dass ich nicht mehr wusste, wie binäre Werte in C# anzugeben sind. Also kurz Dr. Google gefragt und die Antwort bei StackOverflow gefunden: Geht nicht!

Mit der neuen Compiler-Platform „Roslyn“ (C# 6) waren „binary literals“ geplant (Das Feature war für C# im Status „planned“, für VB.NET schon „done“), sind nun aber nicht mehr für den nächsten Release vorgesehen.

Ein paar Vorschläge, wie man sich behelfen kann sind bei StackOverflow auch noch zu finden:

Ein anwendbarer Weg, wenn nicht zu viele Werte nötig sind, ist der Vorschlag von Markus Johnsson:

Man kann die Werte als Konstanten definieren, die mit b… beginnen:

const int b001 = 1;
const int b010 = 2;
const int b011 = 3;
// etc ...
Debug.Assert((b001 | b010) == b011);

Eine andere Variante (von Marc Gravell) ist, mit Strings zu arbeiten und diese zu Parsen:

int i = Convert.ToInt32("01101101", 2);

Sahuagin vertritt in seiner Antwort die Meinung, dass man gefälligst mit hexadezimalen Werten rechnen lernen soll…

Aber der Vorschlag von Dmitry Tashkinov dürfte mehr Ärger verursachen als helfen, wenn er angewendet wird:

long bitMask = 1011001;
// And later
int bit5 = BitField.GetBit(bitMask, 5);
// Or
bool flag5 = BitField.GetFlag(bitMask, 5);`

// Helper class
public static class BitField
{
    public static int GetBit(int bitField, int index)
    {
        return (bitField / (int)Math.Pow(10, index)) % 10;
    }

    public static bool GetFlag(int bitField, int index)
    {
        return GetBit(bitField, index) == 1;
    }
}

Entsprechend auch der Kommentar dazu: Using int thousand to mean 1-0-0-0 is just asking for trouble.

Android holt bei den Tablets auf

Nachdem vor einem Jahr Android auf den Smartphones die 50%-Hürde geknackt hat, ist es auch bei den Tablets auf dem Weg, diese Hürde zu meistern. Laut den Zahlen des Marktforschungsunternehmens Strategy Analytics haben die Android-Tablets im dritten Quartal 2012 (3Q12) mit 10,2 Millionen verkaufter Geräte einen Marktanteil von 41,3% erreicht. Apple ist mit 14 Millionen verkaufter iPads immer noch Marktführer, der Marktanteil beträgt 56,7%. Microsoft wird mit 400’000 verkauften Geräten gelistet, gleich viele wie ein Jahr zuvor.
IDC hat ebenfalls Marktzahlen für 3Q12 veröffentlicht, jedoch nicht auf das Betriebssystem bezogen, sondern nach Herstellern. Die absoluten verkauftszahlen für Apple werden hier bestätigt, der Gesamtmarkt wird aber etwas grösser angenommen (27,8 Millionen gegenüber 24,7 Millionen bei Strategy Analytics). Dadurch ergibt sich bei IDC ein Marktanteil von 50,4% für die Tablets von Apple.

Ausblick
Die von Google angekündigten neuen Tablets der Nexus-Reihe dürften einige Käufer finden. Apple versucht aber durch das iPad mini den Markt der kleineren (7 Zoll) Tablets anzugreifen, den Android bisher alleine beherrschte. Und Microsoft startet mit Windows 8 auch richtig im Tablet-Markt. Die bisherigen Windows-Versionen waren ja nicht unbedingt für die Touch-Bedienung geeignet.
Die Verkaufszahlen dürften weiterhin steigen. Dies sicherlich auf Kosten der Netbooks, die wahrscheinlich entweder durch Tablets oder durch ausgewachsene Notebooks ersetzt werden dürften. Der Marktanteil von Apple bei den Tablets wird auf unter 50% sinken. Wie stark dabei die Android-Tablets den Marktanteil steigern können und wieviel Microsoft mit Windows 8 vom Kuchen abbekommt ist dabei schwierig abzuschätzen, da Windows 8 eben erst veröffentlicht wurde und Microsoft mit der eigenen Hardware beim Surface noch Probleme hat.

Slippery When Wet #7.1: Binding between XElement and ComboBox/ListBox Revisited

In Slippery When Wet #7: Binding between XElement and ComboBox/ListBox I wrote that the problem should be fixed with a hotfix from Microsoft. Meanwhile I’ve got the Hotfix installed on my System.

And the Hotfix solved the problem! So if you plan to use TwoWay binding between XElement objects and a ComboBox or ListBox get the Hotfix from Microsoft. According to the description the Hotfix should be included in a future software update. But in which update this fix will be included is not written there. So check the version numbers of the files listed in the description to see if you still need the Hotfix.

Note: According to the description installing the hotfix should not require a restart of the computer. But on the two Systems where we installed the Hotfix (one 32bit and one 64bit system) we had to restart both systems.

Slippery When Wet #7: Binding between XElement and ComboBox/ListBox

I proudly present to you the seventh in a infinite number of posts of “Slippery When Wet.” In these posts I show you a little bastard I stumbled on.

In Slippery When Wet #6: XPath and the Default Namespace I already ran in some problems with XML in .NET. And I’ve done it again!

For a dynamically built User Interface I’ve bound some controls to a XDocument tree that contained the data and the description of the types. The first controls (TextBox and a numeric Control) worked perfectly, so I was confident that the next controls would just be a routine work. So the next control I wanted to use was the ComboBox.

The data was shown as expected, but after changing the selection the new data was not saved. I’ve tried several changes in the binding (adding explicit two-way binding, setting the UpdateSourceTrigger to PropertyChanged) but the data was not updated when the selection changed. I’ve asked some guys in the office with more WPF experience, but they also saw no reason why the binding didn’t work. Even adding a Converter to check if the data types were not compatible gave me no clue. I’ve also asked on Stack Overflow but got no solution for my problem.

After asking Dr. Google the right question I’ve found these two entries in the MSDN Forum:
MSDN Forum: ComboBox that binds to XElement breaks in .NET 4 and
ComboBox and DataGridComboBoxColumn two-way data binding broken in .NET 4 with XLinq for the SelectedItem/SelectedItemBindings property
which guided me to the Hot Fix from Microsoft (The „TwoWay“ binding does not reflect changes when the property path of the binding refers to the Attribute or Element method of an XElement object in a .NET Framework 4.0-based WPF application).

So it looks like I’ve done it right this time but Microsoft didn’t. So now I’m waiting for getting the Hot Fix installed on my System to check if it works now.

Zeitgeist 2011 reloaded: Suchmaschinen

Im Artikel Zeitgeist 2011 bin ich noch eine wichtige Statistik schuldig geblieben (die man aber bei Googles Zeitgeist sicher nicht finden wird): Von welchen Suchmaschinen oder anderen Quellen kamen die Zugriffe?

Suchmaschinen

Hier die Liste der wichtigsten Suchmaschinen:

Rang Webseite Blog
1 Google Google
2 Bing Google Images
3 Yahoo! Bing

Wahrscheinlich für niemanden überraschend ist Google sowohl bei der Webseite als auch beim Blog an erster Stelle.

Google hat dabei eine erdrückende Übermacht, beim Blog hat die Google Bildersuche als einzige noch einen wirklich sichtbaren Anteil.

Suchmaschinen-Marktanteil Web 2011

Suchmaschinen-Marktanteil Web 2011

Suchmaschinen-Marktanteil Blog 2011

Suchmaschinen-Marktanteil Blog 2011

Diese Übermacht ist bereits seit der Umstellung auf Piwik so, die entsprechenden Grafiken, wie ich sie in Zeitgeist revisited erstellt hatte, habe ich mir deshalb erspart.

Verweise

Hier die Liste der wichtigsten Domänen, die auf meine Webseiten verlinken:

Rang Webseite Blog
1 nsis.sourceforge.net www.rolandbaer.ch
2 de.wikipedia.org www.google.com
3 forum.computerbild.de www.google.de
4 www.google.de www.facebook.com
5 blog.rolandbaer.ch www.google.at

Aus dieser Tabelle kann ich einige interessante Schlüsse ziehen:

  1. Das ‚interne Marketing‘ zwischen Webseite und Blog ist einseitig. Das Blog erhält viel mehr Traffic von der Webseite als umgekehrt (nicht nur in der Rangliste, sondern auch in absoluten Zahlen). Wenn man die beiden Seiten betrachtet wird auch schnell klar warum: Auf der Webseite ist das Blog besser sichtbar als auf dem Blog der Link zur Webseite. Da besteht sicher noch optimierungspotential.
  2. Das NSIS-Tutorial auf meiner Webseite ist der Traffic-Bringer
  3. Der Einsatz des Plugins Add Link to Facebook zahlt sich aus.

Fazit

Neben den Statistiken und den schönen Grafiken können mit der Analyse mit Piwik auch Schwachstellen der Webseite erkannt werden. Dies gibt Ansporn, Verbesserungen zu planen und vorzunehmen. Dabei kann der Fokus auf Google bleiben, solange die anderen Suchmaschinen noch keinen nennenswerten Marktanteil haben. Dass sich dies im Jahr 2012 ändert würde ich aber eher bezweifeln.

Zeitgeist revisited: A Browsers History

In meiner Zeitgeist-Auswertung habe ich auch die Marktanteile der Browser dargestellt. Aus Neugier wollte ich wissen, ob sich der Marktanteil eines Browsers stark verändert hat. Dazu habe ich die Zugriffe auf meine Webseite seit der Umstellung auf Piwik ausgewertet:

Browser Marktanteile April 2010 - Dezember 2011

Browser Marktanteile April 2010 - Dezember 2011


Grosse Verschiebungen sind nicht zu beobachten. Beim Internet Explorer ist ein leichter Abwärtstrend auszumachen, die Webkit-Familie kann diese Schwäche zu einer kleinen Marktanteils-Steigerung nutzen.

Für die allgemein als die grossen drei angesehenen Browser Firefox, Chrome und Internet Explorer habe ich noch Grafiken erstellt, die die verschiedenen Versionen der Browser darstellen. Daraus kann man die Aktualisierungen schön sehen. Als erstes der Internet Explorer:

Internet Explorer Versionen April 2010 - Dezember 2011

Internet Explorer Versionen April 2010 - Dezember 2011


Man kann schön sehen, dass der Browser nicht allzu oft überarbeitet wird, mehrere Versionen über lange Zeit verwendet werden und deshalb alte Versionen nicht so schnell ‚aussterben‘.

Als Gegensatz dazu Chrome von Google:

Chrome Versionen April 2010 - Dezember 2011

Chrome Versionen April 2010 - Dezember 2011


Die grosse Legende zeigt schon an, dass die Version sehr oft ändert, der Browser also fleissig überarbeitet wird. Der automatische Update-Mechanismus führt auch dazu, dass der Browser schnell aktualisiert wird und deshalb kaum alte Versionen im Umlauf sind.

Beim Firefox sieht man die Philosophie-Umstellung recht schön:

Firefox Versionen April 2010 - Dezember 2011

Firefox Versionen April 2010 - Dezember 2011


Bis im ersten Quartal des letzten Jahres wurde die Version 3.6 wohl weiterentwickelt, dies zeigte sich aber nur in der dritten Versions-Nummer (3.6.x). Ab der Version 4 wurde dann die Google-Philosophie der häufigen Updates mit Versionsnummer-Erhöhung an der ersten Stelle übernommen. Diese werden nun auch automatisch aktualisiert, so dass die Versionen 4 bis 7 kaum mehr im Einsatz sind.
Man sieht auch, dass etwa 20% der Besucher bei diesem „Update-Wahnsinn“ nicht mitmachen wollen und bei der Version 3.6 geblieben sind.

Die Tendenzen entsprechen auch den bei browser-statistik.de gezeigten Statistiken der Browser-Versionen (Achtung: umgekehrte Darstellung, neue Versionen werden unten hinzugefügt).

Androids Marktanteil bei 50%

Laut den Zahlen von Gartner hat Android bei den Smartphone-Betriebssystemen einen Marktanteil von 50% an den im dritten Quartal 2011 verkauften Geräten erreicht.

Während Apple mit den iPhones die Stückzahlen steigern konnte (aber trotzdem etwas an Marktanteil einbüsste) blieben RIMs BlackBerries bei den Stückzahlen stabil, was einen grösseren Verlust beim Marktanteil zur Folge hat. Microsoft verlor sowohl bei den Stückzahlen als auch beim Marktanteil. Microsoft muss sich also sehr sputen, wenn die Prognosen von Gartner vom Frühling erreicht werden sollen.

Microsoft wurde bereits von Samsung mit ihrem eigenen Betriebssystem Bada überholt (Steigerung beim Marktanteil von 100%!). Bada ist aber noch weit von den Big 4 (Android, Symbian, iOS und Research In Motion) entfernt, von denen Symbian als der grosse Verlierer angesehen werden muss.

Warten wir mal gespannt auf die Abschlusszahlen für 2011 und vergleichen diese dann mit den alten Prognosen.

Tablet-Systeme heute und in Zukunft

Vor kurzem betrachtete ich die Marktanteile bei Smartphones, diesmal sind die Tablets an der Reihe.

Apple hat mit dem iPad die ganze Branche auf dem linken Fuss erwischt. Einige Hersteller versuchten dagegenzuhalten, zum Beispiel das WeTab mit seiner speziellen Geschichte. Andere Hersteller versuchten mit dem Smartphone-Betriebssystem Android 2.2 (Froyo) auf den Tablets zu punkten. Erst mit Android 3.0 (Honeycomb) ist aber das Betriebssystem wirklich Tablet-tauglich, bei Froyo-basierenden Tablets kommen die Smartphone-Einschränkungen früher oder später zum Vorschein.

Nach Zahlen von Strategy Analytics verlor Apple aber trotzdem im vierten Quartal 2010 20% Marktanteil, liegt mit 75% aber immer noch weit vor der Konkurenz. Dies soll sich aber laut Strategy Analytics schon in den nächsten 2 Jahren ändern, dann sollen Android-Tablets den grösseren Marktanteil haben als Apple.
Gartner gibt Apple noch mehr Zeit als Leader,
die Ablösung durch Android soll nach ihren Schätzungen erst 2015 erfolgen.
Acer-Chef JT Wang sieht Apple in Zukunft bei 20% Marktanteil, wobei er keine klare Zeitprognose angibt. Wieweit hier fundierte Abschätzungen vorliegen oder ob die Aussage auf dem Prinizip Hoffnung basiert kann jeder für sich selber entscheiden…

Zusammenfassend kann gesagt werden, dass sich bei den Tablets vermutlich das selbe Spiel wie bei den Smartphones abspielen wird. Apple als Vorreiter kann prinzipiell fast nur Marktanteil verlieren, Android prescht mit seiner Gerätevielfalt nach vorne und andere Systeme müssen sich mit Nischen zufrieden geben. Dazu müssen aber auch die Apps vorhanden und den Systemen sowie dem Nutzungsverhalten der Benutzer angepasst sein. Hier ist Android noch im Hintertreffen, da das SDK für Honeycomb erst vor drei Monaten erschienen ist.