January 25, 2010
@ 06:16 PM

http://www.chip.de/preisvergleich/19123/Brother-HL-1030.jpg

Durch meinen Umzug bin ich auf einen Uralt-Drucker, den mir irgendwann mal mein Bruder mitgegeben hat, gestoßen. Naja, ganz so alt ist er nun doch nicht, da es schon ein Laser-Drucker ist Aber wohl mit einer der ersten will ich meinen.

Ich habe mich Anfangs etwas schwer getan, einen Vista oder Windows 7 Treiber dafür zu finden. Windows 7 erkennt das Gerät richtig am Parallelport zwar, aber fügt es bei der Drucker-Geräte-Ansicht unter andere Geräte ein, sodass es nicht als Drucker verwendet werden kann. Eine Installation des XP-Treibers ist mir ebenfalls nicht gelungen.

TIP: Die Lösung ist am Ende dann doch ganz einfach gewesen:

Man installiert einfach den Brother HL-2140 Treiber, der bei Windows 7 dabei ist und schon druckt man auch auf dem modernsten Betriebssystem mit uralten Peripheriegeräten.


 
Categories: Hardware | Windows

http://www.cod4-gerbtown.de/clan/uploads/fckeditor/image/battlefield-bad-company-2.jpgAuch ein Entwickler muss mal abschalten und sich hin und wieder einem Computerspiel widmen. Da ich in früherer Zeit gerne Battlefield 2 gespielt habe, von den Nachfolgern aber eher enttäuscht gewesen bin, setze ich jetzt alles auf den Nachfolger von Bad Company, Battlefield: Bad Company 2, für die optimale Unterhaltungsaction am Abend, wenn die Freundin wieder Desperate Housewives guckt.

So kam es, dass ich 4 Spiele bei Amazon für mich und Bekannte vorbestellt habe.

Kürzlich erhielt ich folgendes Schreiben von Amazon.

Sie haben bei Amazon.de ein oder mehrere Exemplare von "Battlefield: Bad Company 2 - Limited Edition" für den PC vorbestellt und erhalten hiermit Ihren Beta-key/Ihre Beta-keys, mit denen Sie an der PC Beta teilnehmen können.

Die Beta findet vom 28. Januar - 25. Februar 2010 statt. Die Homepage, auf der Sie Ihren Key eingeben können um sich für die Beta zu registrieren ist leider noch nicht aktiv und wird erst kurz vor Betastart bekannt gegeben.

Diese Informationen werden wir sobald sie uns vorliegen auf unserer Aktionsseite ( http://www.amazon.de/gp/feature.html?docId=1000371403 ) aktualisieren.

Und hier finden Sie Ihr Key/Ihre Keys:

***snip!!! :) ***

Da bin ich ja mal gespannt! :)

Sofern ich nicht ausgelost worden bin:

Wer Preorder bestellt bekommt wohl Zugang zur PC-Beta!!!

Auch in Anbetracht, was mit der Programmiersprache C# möglich ist, für dieses Spiel zu programmieren. In meiner Vergangenheit hatte ich auch schon an dem Alternativen Battlefield Ranking (ABR) mitgearbeitet. Durch die Beta erhält man vielleicht vorab eine gute Möglichkeit für die Entwicklung.

Das Spiel erscheint in Deutschland offiziell am 04.03.2010.

Und hier nochmal ein kleiner Eindruck vom Gameplay:

Battlefield: Bad Company 2 – Gameplay Moments

Sowie die beiden gelungenen Squad-Story-Trailer, die ich Euch ebenfalls nicht vorenthalten möchte.

 

Battlefield: Bad Company 2 - Squad Stories #1

 

Battlefield: Bad Company 2 - Squad Stories #2


 
Categories: Games & Entertainment

December 18, 2009
@ 06:16 PM

Am Donnerstag habe ich einen sehr coolen Stift in der Uni gesehen, mit dem man auf dem Papier malen kann. – Toll, kann doch eigentlich fast jeder Stift, wenn er nicht grade alle ist. Das Tolle an dem Teil ist jedoch, er ist digital und trotzdem ein Kugelschreiber!

Digitaler Kugelschreiber – Digital Ballpoint Pen

neuer-stift

 

  • Mit dem Stift ist es  möglich im online Betrieb live am PC zu malen.
    Das ist zum Beispiel praktisch, wenn man in Photoshop etwas malen möchte.
  • Zusätzlich gibt es ein Texterkennungsprogramm ähnlich wie ein Tablet-PC.
  • Im offline-Modus können bis zu 100 Seiten gespeichert werden, z.B. in der Uni in einer Vorlesung. :)
  • Die Bedienung ist kinderleicht.
  • Im Gegensatz zu einem Tablet von WACOM ohne Display, sieht man jetzt auch endlich, was man gerade zeichnet.
  • Preis: 80€ bei Tchibo

 

Hier mal ein geistiger, künstlerischer Erguss für ein Testbild:

neuer-stift-test

 

Das Bild entspricht einer halben Din A4 Seite…

Hier gehts zum Online-Shop von Tchibo!

Dort ist das Gerät bereits ausverkauft.

Im Tchibo-Store eurer Stadt der Wahl habt ihr bestimmt noch Glück. Dort habe ich meinen nämlich auch her. :)


 
Categories: Dies und Das | Hardware

Unter Verwendung der neuen NVIDIA Treiber in Windows 7 / Vista  / XP wird der ViewSonic Monitor VX2835WM in den HMDI – PC Modus gesetzt. Das Resultat ist ein 1 Pixel großer grün-lila-Streifen am unteren Bildschirmrand sowie ein unscharfes, eher milchiges Bild.

Normalerweise sollte der Monitor in DVI-Modus laufen (was er im Normalfall auch tat). Dort ist das Bild wesentlich klarer und auch ohne diesen Streifen.

Die ganze Problematik hängt mit der falschen Extended Display Identification Data (EDID) zusammen. Ist diese richtig, ist das Problem gelöst!

Es gibt zwei Wege das Problem zu lösen. Der eine Weg würde die nv_disp.inf modifizieren. Dies hat sich allerdings mit neueren Treiberversionen von NVIDIA erledigt.

Das ist jedoch nicht schlimm, denn die Änderung gibt nur an, was der Installer in der Registry setzen soll. Diese Änderung können wir aber auch per Hand über den zweiten Weg machen:

    1. Regedit öffnen!
    2. Folgenden Zweig ansteuern:
      [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\]
    3. Dann drückt man F3 und sucht nach dem Zweig in dem der UnterzweigVolatileSettings” enthalten ist. Dies gibt die aktuelle NVIDIA Karte an.
      (Bei mir ist das zwei Zweige unter dem Video-Zweig mit “0000” als Namen.)
      Also zum Beispiel: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{636821D5-AFF3-43A5-A8D2-19BD25002B5C}\0000]
    4. Dort erstellt man jetzt einen neuen Binär-Schlüssel namens:
      OverrideEdidFlags0” mit den Werten:
      5A 63 1F 0F 00 00 FF FF 04 00 00 00 7E 01 00
      (Die Werte werden ohne Komma einfach nacheinander eingegeben.)
    5. Abschließend nur noch neustarten!

Jetzt sollte alles wieder bestens funktionieren!

Diese Variante könnte auch bei ähnlichen Problemen mit anderen Monitoren helfen. Dazu gibt es EDID-Tools, die die EDID eines Monitors auslesen können. Einfach mal bei Google suchen!


 
Categories: Hardware | Windows

Die Visual Studio 2010 Beta 2 steht nun zum Download zur Verfügung.

http://www.microsoft.com/germany/visualstudio/products/visual-studio/2010/default.aspx

clip_image002


 
Categories: .NET | C#

Am 7. Oktober 2009 hatte ich die Chance Steve Ballmer persönlich zu einem Interview zu treffen. Dies war eine einmalige Gelegenheit und weltweit das erste Mal, dass sich der Microsoft CEO nicht nur Journalisten zur Rede und Antwort gestellt hat.

Das Ganze geschah bei München in Ismaningen in einem TV-Studio der Plazamedia GmbH und wurde öffentlich per Live-Stream auf msn.de und Bild.de übertragen. Gleichzeitig konnten per Live-Chat weitere Fragen an Herrn Ballmer gerichtet werden.

Einen Mitschnitt des Videos findet man bei msn.de

Steven A. Ballmer 07.10.2009

Hier meine zwei Fragen und die dazugehörigen Antworten von Steve Ballmer aus dem englischen Originalton:

Florian Mätschke:
"Since Windows 7 is known as the real successor of Windows XP,
what are the three main features, that made Windows 7 the real successor and why?"

Steve Ballmer:
"I think the three things that people are gonna most respond to are:

1. It feels more responsive, lightweight, uses less power, it's just kind of zippy, if you will. Thats number one.
2. The user interface I think is cleaner, simpler, more productive and people respond with that.
And then 3. It's got dozens of smaller features. And rather to point to anyone I just say
every user I talked to, everybody has tried the beta, seems to fall in love with one or two features, but it's different for everybody."

 

Florian Mätschke:
"This is a bit personal: Do you fear Apple?"

Steve Ballmer:
"Fear? Fear? When you run a company, you don't fear (every?) anybody.
But you are vigilant in thinking about everybody.
So of course, Apple does good work. They are another good company.
We compete with them. I think about them. I think about a lot of other companies though, too.
You know there are in this particular case something over 95%
of the computers that sell in the world are PCs and only 4% were sold are macintoshes.
So I dont fear but I do think we compete absolutely with apple,
but we compete with Oracle and Google and Nintendo and many others, too."

Vielen Dank an Frau Köp von Microsoft, die die gesamte Organisation übernommen hat, msn.de sowie Bild.de und auch ein Dankeschön an Achim Berg, dem diese Art von Treffen erst in den Sinn kam. Es war ein wirklich tolles und aufregendes Erlebnis.


 
Categories: Windows

http://diepresse.com/images/uploads//8/8/7/485511/Microsoft_CEO_Steve_Ballmer_presenting_Windows_7.jpg

Einige kennen ihn durch seine berühmten Aussagen wie “Developers! Developers! Developers! …” oder “ I have four words for you! I – LOVE – THIS - COMPANY!”.

Am kommenden Mittwoch dem 7. Oktober 2009 habe ich die Chance dem Chef von Microsoft, Steve Ballmer, zwei Fragen zum neuen Windows 7 zu stellen.

Zusätzlich kann ich noch eine weitere Frage, sofern die Möglichkeit besteht, bezüglich Windows 7 stellen. Und genau darum geht es hier in diesem Blog-Eintrag.

Ich möchte die Leser dieses Blogs gerne daran teilhaben lassen und diese auffordern, mir ein paar Fragen per Kommentar hierzulassen.

Die Frage die mir am besten gefällt werde ich mir raussuchen und Steve Ballmer zusätzlich stellen. Also postet Euro Frage!

Wer mag kann sich das Interview dann live auf Bild.de und MSN.de mit ansehen.

Also her mit den Fragen, fragt was ihr ihn immer schon Fragen wolltet!

 

http://ismashphone.typepad.com/.a/6a00e55225079e88340111689b932c970c-800wi


 
Categories: Games & Entertainment | Windows

No Pressure, No Speed!Die Verwendung von mehrdimensionalen Arrays ist oftmals ein wesentlicher Bestandteil in Programmen. Je nach Problemstellung und Größe der Arrays kann der Zugriff auf solche die Laufzeit eines Programms negativ beeinflussen.

In C# gibt es grundsätzlich neben den eindimensionalen Arrays 2 Arten von mehrdimensionalen Arrays. Diese unterscheiden sich nur in ihrer Notation:

  • [,] – Multidimensionale Arrays
  • [][] – Jagged-Arrays

Bei multidimensionalen Arrays werden die Dimensionen durch ein Komma getrennt, bei Jagged-Arrays durch die erneute Klammerung. Multidimensionale Arrays haben eine feste Größe. Bei einem Jagged-Array kann die Größe variieren, da es ein Array von Arrays ist. Das ist im Grunde genommen eigentlich schon alles was man darüber wissen sollte. – Wie aber steht es jetzt mit den Geschwindigkeits-Unterschieden? Gibt es vielleicht noch andere Möglichkeiten?

Ja! Die gibt es definitiv. Bei einem Disput mit einem Kommilitonen über genau dieses Thema hat dieser prompt einen Eintrag in seinem Blog dazu und dazugehörige Messergebnisse veröffentlicht:

 Manolo's HPC Blog

Er verwendet dort eine weitere, eher aus der Welt der C Programmierer bekannte Technik, um mehrdimensionale Arrays zu realisieren. Es wird einfach ein eindimensionales Array verwendet, das alle Elemente linear beinhaltet.

Der Zugriff erfolgt über die Formel:

position = Y * breite + X

Als ich das Ergebnis das erste mal sah, konnte ich kaum glauben, dass dieses schneller als ein Jagged-Array ist. Aber bei einer genaueren Untersuchung erklärt sich auch warum. Darf man dem manik.net – Blog trauen:

MSIL kann eindimensionale Arrays besser optimieren wie mehrdimensionale.
Auf MSIL ebene sieht man den unterschied:

int [,] secondarr = new int[1, 2];
secondarr[0, 0] = 40;

MSIL:
IL_0029: ldc.i4.s 40
IL_002b: call instance void int32[0...,0...]::Set(int32, int32,in32)

Mit einem Jaggedarray sieht das ganze dann auf MSIL so aus:
IL_001c: ldc.i4.s 40
IL_001e: stelem.i4
stelem = „store an element“

Bei mehrdimensionalen Arrays wird der ganze „Generic Type“-Kram also betrieben was einiges an Overhead erzeugt.

Daher ist es ratsam wann immer möglich ein lineares Array anstelle von einem Mehrdimensionalen Array zu verwenden.

Ich habe mir die ganze Sache aber in eigener Regie noch einmal angesehen. Als Ergebnis habe ich es geschafft, eine noch schnellere Variante zu programmieren. Diese setzt allerdings ein \unsafe bei den Compiler-Einstellungen voraus.

Anstelle auf die einzelnen Elemente des Arrays zuzugreifen, wird direkt auf einen Pointer zugegriffen. – Eigentlich nichts besonderes, kann aber bei manch einer Berechnung den ein oder anderen Performancegewinn bringen.

Die Ergebnisse sehen dabei wie folgt aus:

Result = 249500250000000
1000times: Matrix A with [1000, 1000]  (matrix array): 11637ms
Result = 249500250000000
1000times: Matrix B with [1000][1000]  (jagged array): 6361ms
Result = 249500250000000
1000times: Matrix C with [1000* 1000]  (linear array): 5486ms
Result = 249500250000000
1000times: Matrix D with [1000* 1000]  (unsafe array): 5175ms!!!

Gegenüber dem [,] Array sind die beiden letzten Varianten ungefähr doppelt so schnell.

Also für die Zukunft merken:

    • Keine [,]-Arrays verwenden!

    • [][]-Arrays können durch lineare Arrays ersetzt werden!

    Den Quellcode zum verifizieren und selber Testen gibt es hier:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Diagnostics;
    
    namespace SpeedTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                int n = 1000;
                Stopwatch swatch = new Stopwatch();
                
                double[,] A = new double[n, n];
                swatch.Start();
                CalcMatrix(A,n);
                swatch.Stop();
                Console.WriteLine("{0}times: Matrix A with [{0}, {0}]  (matrix array): {1}ms", n, swatch.ElapsedMilliseconds);
                swatch.Reset();
    
                double[][] B = new double[n][];
    
                // init jagged arrays
                for (int i = 0; i < n; i++)
                {
                    B[i] = new double[n];
                }
    
                swatch.Start();
                CalcJagged(B, n);
                swatch.Stop();
                Console.WriteLine("{0}times: Matrix B with [{0}][{0}]  (jagged array): {1}ms", n, swatch.ElapsedMilliseconds);
                swatch.Reset();
    
    
                double[] C = new double[n* n];
                swatch.Start();
                CalcLinear(C, n);
                swatch.Stop();
                Console.WriteLine("{0}times: Matrix C with [{0}* {0}]  (linear array): {1}ms", n, swatch.ElapsedMilliseconds);
                swatch.Reset();
    
                unsafe
                {
                    double[] D = new double[n * n];
                    swatch.Start();
                    fixed(double* pD = D)
                    CalcUnsafe(pD,n);
                    swatch.Stop();
                }
                Console.WriteLine("{0}times: Matrix D with [{0}* {0}]  (unsafe array): {1}ms", n, swatch.ElapsedMilliseconds);
                swatch.Reset();
                Console.ReadKey();
            }
    
            private static void CalcJagged(double[][] B, int n)
            {
                double result = 0;
                for (int x = 0; x < n; x++)
                {
                    for (int i = 0; i < n; i++)
                    {
                        for (int j = 0; j < n; j++)
                        {
                            B[i][j] = i * j;
                            result += B[i][j];
                        }
                    }
                }
                Console.WriteLine("Result = " + result);
            }
    
            private static void CalcMatrix( double[,] A, int n)
            {
                double result = 0;
                for (int x = 0; x < n; x++)
                {
                    for (int i = 0; i < n; i++)
                    {
                        for (int j = 0; j < n; j++)
                        {
                            A[i, j] = i * j;
                            result += A[i, j];
                        }
                    }
                }
                Console.WriteLine("Result = " + result);
            }
    
    
    
    
            private static void CalcLinear(double[] C, int n)
            {
                double result = 0;
                for (int x = 0; x < n; x++)
                {
                    for (int i = 0; i < n; i++)
                    {
                        for (int j = 0; j < n; j++)
                        {
                            C[i * n + j] = i * j;
                            result += C[i * n + j];
                        }
                    }
                }
                Console.WriteLine("Result = " + result);
            }
    
            unsafe private static void CalcUnsafe(double* pD, int n)
            {
                double result = 0;
                for (int x = 0; x < n; x++)
                {
                    for (int i = 0; i < n; i++)
                    {
                        for (int j = 0; j < n; j++)
                        {
                            *(pD + i * n + j) = i * j;
                            result += *(pD + i * n + j);
                        }
                    }
                }
                Console.WriteLine("Result = " + result);
            }
        }
    }

     
    Categories: .NET | C# | HPC