Traue niemals einem Handyverkäufer

November 29th, 2011 — 12:05am

Es ist zwar nun schon etwas länger her seitdem ich mein iPhone 4 gekauft habe, da ich aber eine neue Tastatur habe und mich an den neuen Hub der Tasten gewöhnen möchte, schreibe ich jetzt mal einfach etwas, was ich eigentlich schon länger machen wollte.

Vor 1 1/2 Monaten fasste ich den Endschluss, mein altes iPhone 3GS in Rente zu schicken und auf das iPhone 4 umzusteigen. Da ich nach dem Vertragsende bei der Telekom glücklich zu o2 zurückgekehrt war, war mein erster Gedanke auch, das iPhone 4 dort zu kaufen. Der Beschluss wurde durch ein plötzlich defektes Display des 3GS bestärkt und deshalb konnte die Beschaffung nicht schnell genug gehen. Was lag also näher, als in den nächsten o2 Shop zu laufen und es dort zu kaufen? Die Vorteile lagen ja auf der Hand. Das Handy und eine neue Micro-Sim wären sofort vorhanden und könnten nach einer kurzen Aktivierungsdauer genutzt werden. Gesagt getan.

Im Shop schien dann auch alles ohne Probleme zu funktionieren. Der Verkäufer war gespielt nett, aber offensichtlich Ahnungslos was Hardware angeht und nebenbei noch ein Androidfan, da er mir die ganze Zeit versuchte zu erklären, wieso Android besser sei und sich fragte warum Leute den so viel mehr Geld nur für ein iPhone ausgeben würden (Hallo, ich kaufe gerade ein iPhone 4!). Beim Bezahlen wurde mir noch kurz erklärt, dass ich nun noch eine zweite Sim mit neuem o2o Vertrag bekommen würde, die ich an jemanden weitergeben könnte, um ihn mit meiner Flat anrufen zu können. Auf den Hinweis, dass ich diesen zweiten Vertrag nicht bräuchte, wurde ich vertröstet, dass dieser ja kostenlos sei und ich ihn jeder Zeit kündigen könnte, es sei ja nur eine nette Geste von o2.

Was ich in dem Moment viel interessanter fand, war der Kunde neben mir, der sich ebenfalls ein iPhone 4 kaufen wollte und gerade von einer der anwesenden Verkäuferinnen angefaucht wurde, warum er denn nicht auch gleich den Vertrag wechseln möchte. Nach weiterem hin und her stellte sich heraus, dass der andere Kunde noch einen älteren Genion S Vertrag mit dem Internetpaket M besaß. Bevor ich zur Telekom gewechselt war, nutzte ich fast zwei Jahre lang genau dieselbe Kombination um kam mit 15€ im Monat bestens über die Runden da ich fast nur mit dem Handy surfte. Der Kunde argumentierte mit den selben Hinweisen und fast schon wollte ich ihm zu seiner klugen Entscheidung bei seinen alten Konditionen zu bleiben gratulieren, als die Verkäuferin tatsächlich sagte (ich zitiere): “Ey alter, wie kann man so blöd sein, sich so ein geiles Handy kaufen und dann so einen scheiß Vertrag behalten? Denk doch mal nach man!”

Ich hoffe meine Augen wurden nicht all zu groß, als ich ungläubig in die Richtung der beiden starrte. Im Anschluss wollte ich dann doch nur schnell den Laden verlassen und mich über Gott und die Welt ärgern, das Verkäufer so dreist sind, keine Ahnung haben und überhaupt. Zwar war das iPhone 4 schon eine Stunde später einsatzbereit und erfüllte alle Erwartungen, doch die Rechnung kam erst einen Monat später.

Da erhielt ich nämlich eine Rechnung in höhe von 29,90€ von o2 für die Aktivierungsgebühr meines neuen o2o Vertrags. Toll, ne? Gott sei Dank, hat sich die Hotline von o2 bisher als stets kompetent erwiesen und es dauerte keine 2 Minuten, um auf die nächste Rechnung für meinen regulären Vertrag eine Gutschrift in Höhe von 29,90 € zu erwirken. Zusätzlich entschuldigte sich sogar noch die nette Dame am anderen Ende der Leitung und fragte sich ebenfalls, was die Leute in den Geschäften manchmal anstellen. o2 can eben nur manchmal do!

4 comments » | Digitale Welt, 携帯/Handys

Java: Checking which scrolling direction is enabled in Mac OS Lion

August 16th, 2011 — 8:08pm

With the introduce of Mac OS Lion Apple added the option to enable “natural scrolling” which simply inverts the scrolling direction of input devices to get an iOS like scrolling behavior. However, some Apps may require to ‘invert the inverted scrolling’, like Apps which use scrolling for zooming, which indeed should not be inverted. Unfortunately Apple dropped the development of Java and didn’t added a method or property to get the scrolling behaviour.

So today I tried to find a solution which helps to find out if natural scrolling is enabled or not in Java. I know that the preference would be saved in a .plist file so I checked with fseventer which one it was. After this the only thing I had to do was finding a library which allowed me to read .plist files and to check the scrolling property.

You will need this library to run the snippet.

try {
    File globalPref = new File(System.getProperty("user.home") + "/Library/Preferences/.GlobalPreferences.plist");
    NSDictionary dict = (NSDictionary)PropertyListParser.parse(globalPref);
 
    NSNumber pref = (NSNumber)dict.objectForKey("com.apple.swipescrolldirection");
 
    if(pref.boolValue()) {
        //natural scrolling is enabled
    }
 
 
} catch (Exception ex) {
    System.out.println("Faild to parse plist: " + ex.getMessage());
}

Hopefully this small snippet will be useful.

Comment » | Digitale Welt, Java, Macintosh, Programmieren

Getting ready

Februar 6th, 2011 — 11:28pm

Few more tweaks and ready to go :)

Comment » | Cocoa & Objective-C, Digitale Welt, Macintosh

Cocoa is sucking and ruling synchronously

Januar 29th, 2011 — 1:09am

Slowly I’m getting a feeling of how to create apps with the help of objective-c and cocoa. And it both sucks and rules at the same time!

At first, the things I like. Bindings. They are impressing! Generating small apps without a single line of code, visualizing data with several UI components fast. Makes really fun. Also objective-c as a programming language is cool combined with cocoa as the framework, even if objective-c feels a little bit outdated compared to something like C#.

Now what really sucks. Creating layouts with the interface builder. In took me nearly an hour, to complete a simple view like this:

A basic window with a NSSPlitView and a NSOutlineView. At first, positioning the elements not to overlap was a pain in the ass. Second, my simple wish to fix the size of the left view seemed to be impossible within the interface builder. After a little bit of googling I’ve found following snippet.

-(void)splitView:(NSSplitView *)sender resizeSubviewsWithOldSize:
(NSSize)oldSize
{
	CGFloat dividerThickness = [sender dividerThickness];
	NSRect leftRect  = [[[sender subviews] objectAtIndex:0] frame];
	NSRect rightRect = [[[sender subviews] objectAtIndex:1] frame];
	NSRect newFrame  = [sender frame];
 
	leftRect.size.height = newFrame.size.height;
	leftRect.origin = NSMakePoint(0, 0);
	rightRect.size.width = newFrame.size.width - leftRect.size.width
	- dividerThickness;
	rightRect.size.height = newFrame.size.height;
	rightRect.origin.x = leftRect.size.width + dividerThickness;
 
	[[[sender subviews] objectAtIndex:0] setFrame:leftRect];
	[[[sender subviews] objectAtIndex:1] setFrame:rightRect];
}

As nearly every component can have a delegate defined which is triggered at certain actions, this one is triggered on resizing the split view. Simply, the old size of the left side is taken and kept, while the new size of the right side will be passed through.

Now going to fill this stuff with life!

Comment » | Macintosh, Programmieren

GeForce FX6200 ROM for Cube without temp. sensor released

Januar 1st, 2011 — 5:45pm

Maybe a few people will be excited about this. I’ve created a GeForce FX6200 ROM (XFX PVT44AWANG GeForce 6200 256MB 64-bit DDR) for Cube owners, which has reduced clock rates and a disabled temperature sensor.

For a long time now, only three different versions of the GeForce FX6200 ROM for the Mac have been available on the internet. At first, an original rom with stock clock rates and enabled temperature sensor, one with the same clock rates and a disabled temperature sensor and at last one with lowered clock rates (heat issue) and an enabled temperature sensor for cube owners.

The disabled temperature sensor however is required for Leopard users, because with an enabled sensor Leopards needs about 4 minutes to boot, as the sensor first needs to become hot enough for being discovered by the OS X driver.

So I created my own ROM, which has both – lowered clock rates and a disabled temperature sensor for Cube owners. You will need a PC to flash the card, information is available on the macelite wiki.

You can download the rom here.

Comment » | Digitale Welt, Macintosh

Handling touch events in Java on Mac OS X

Oktober 30th, 2010 — 12:58pm

Two days ago I discovered that Apple has implemented multi touch support with the Java update 2 for Snow Leopard and update 7 for Leopard into the Java API. Immediately I had to play with it and have written following little sample application. Further I’ve discovered that Apple also implemented support to detect horizontal scrolling, by abusing the shift modifier on MouseWheelEvents. It is quit fun to use and I have the idea of an MultiTouch Tetris (“Touchris”) floating around in my head ;)

package net.saraarauhito.gesturetest;
 
import com.apple.eawt.event.GestureUtilities;
import com.apple.eawt.event.MagnificationEvent;
import com.apple.eawt.event.MagnificationListener;
import com.apple.eawt.event.RotationEvent;
import com.apple.eawt.event.RotationListener;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
 
/**
 *
 * @author Jan-Peter Zurek
 */
public class Gesturetest {
 
    public static JFrame f;
    public static double rot = 0;
    public static Rectangle r = new Rectangle(125, 125, 50, 50);
    public static BufferedImage img;
 
    public static void main(String[] args) throws Exception {
        // Put your own image here
        img = ImageIO.read(new File("your_image.jpg"));
 
        SwingUtilities.invokeLater(new Runnable() {
                public void run() {
            f = new JFrame();
            f.setSize(300, 300);
            JPanel p = new JPanel();
            p.setSize(300, 300);
            f.add(p);
            f.setLocationRelativeTo(null);
            f.setVisible(true);
            f.createBufferStrategy(2);
 
            f.addMouseWheelListener(new MouseWheelListener() {
 
                /* Apple added support for horizontal scrolling by
                 * using the shift modifier
                 */
                public void mouseWheelMoved(MouseWheelEvent e) {
                    if(!e.isShiftDown()) {
                        if(e.getWheelRotation() < 0)                             
                            r.y -= 2;
                         if(e.getWheelRotation() > 0)
                            r.y += 2;
                    } else {
                        if(e.getWheelRotation() < 0)
                             r.x -= 2;
                         if(e.getWheelRotation() > 0)
                            r.x += 2;
                    }
 
                    draw();
                }
 
            });
 
            GestureUtilities.addGestureListenerTo(p, new MagnificationListener() {
 
                public void magnify(MagnificationEvent e) {
                    if(e.getMagnification() > 0) {
                        r.setBounds((int)r.getX() - 1, (int)r.getY() - 1,
                                (int)r.getWidth() + 2, (int)r.getHeight() + 2);
                    } else if (e.getMagnification() < 0) {
                         r.setBounds((int)r.getX() + 1, (int)r.getY() + 1,
                                 (int)r.getWidth() -2, (int)r.getHeight() - 2);
                     }
                     draw();
                 }
             });
             GestureUtilities.addGestureListenerTo(p, new RotationListener() {
                     public void rotate(RotationEvent e) {
                         if(e.getRotation() > 0)
                            rot -= 2;
                        if(e.getRotation() < 0)
                            rot += 2;
 
                        draw();
                    }
                });
            }
        });
    }
 
    private static void draw() {
        Graphics2D g = (Graphics2D) f.getGraphics();
        int mx = r.x + (r.width / 2);
        int my = r.y + (r.height / 2);
        g.clearRect(0, 0, 300, 300)
        g.rotate(rot / 100, mx, my);
        g.setColor(Color.red);
        g.drawImage(img, r.x, r.y, r.width, r.height, null);
        g.rotate(-(rot / 100), mx, my);
        g.dispose();
    }
}

Use rotation and zoom gesture to rotate and zoom the picture and move it with two fingers around the window.

Comment » | Java, Macintosh, Programmieren

jResizer for Mac released

Oktober 25th, 2010 — 10:32pm

Today I publish my first application for OS X, called jResizer. Recently I had to resize some images and stumbled upon the fact that the preview.app of OS X doesn’t offer any option to select the sampling mode for resizing an image like billinear or bicubic. Even the famous pixelmator doesn’t offer this option.

As I’ve recently pushed my Java knowledge a little, I decided to write a small, fully OS X integrated, Java application over the weekend for easy resizing pictures and the possibility to select between the different sampling modes.

You can use drag and drop to drop an image into the app or just press Command-O or the choose button to select an image. Change the resolution, press save, save as, command-s or shift-command-s and you will find your image saved as a .png file.

I’m not quit sure, but I believe that my App will require that you have the latest Java update from Apple installed.

For future releases I plan to ingrate several file formats for saving, unit selection (pixel/cm/inch) and batch resizing.

I want to thank Kenneth Orr from Exploding Pixels for his great work on MacWidgets, which I’ve slightly modified for my use.

jResizer Download

Comment » | Macintosh, Programmieren

Kabelloser Salat

August 22nd, 2010 — 7:05pm

Nachdem ich eine ganze Zeit lang unter WIndows unterwegs war, wollte ich heute wieder einige Dinge unter Mac OS X ausprobieren.

Jedoch satunte ich nicht schlecht, als meine Magic Mouse unter OS X nicht erkannt wurde. Zwar war laut der Statusbar Bluetooth aktiviert, in den Systemeinstellung wurde es jedoch als deaktiviert gemeldet. Auch waren plötzlich alle Möglichkeiten, Bluetooth zu aktivieren nicht mehr zugänglich. Auch ein SMC- und PRAM-Reset zeigten keine Wirkung.

Nachdem kurzes Googlen keine verwertbaren Ergebnisse brachte, versuchte ich mein Glück mit dem kleinen Tool Blueutil für die Kommandozeile. Dieses sagte mir ebenso, das Bluetooth deaktiviert sei. Nachdem ich den Befehl “On” verwendete, wurde mir Bluetooth als aktiviert angezeigt, funktionierte jedoch immer noch nicht.
Nach einem Neustart konnte die Maus jedoch wieder gefunden werden und nun läuft alles wieder wie gehabt :)

Glück gehabt!

Comment » | Digitale Welt, Macintosh

jPong PreAlpha Release!

August 2nd, 2010 — 11:15pm

Da wir das nächste Jahr an der Berufsschule beginnen werden, Java zu lernen, dachte ich, dass ich gut bersten wäre, meine Kenntnisse darin wieder etwas aufzufrischen. Nach ca. 1 Tag experimentieren mit NetBeans und dem JDK ist dabei nun jPong, ein super simpler Pong Klon in Java entstanden, der aber durchaus authentisch daher kommt ;)

Wer sich als Alpha-Tester bereit erklären möchte, kann das Spiel hier laden. Vorausgesetzt wird das aktuelle JRE. Das Spiel sollte unter Linux, Windows und Mac OS X laufen!

Der rechte Spieler wird über die Pfeiltasten, der Linke über die Tasten W und S gesteuert.
Für die nächsten Versionen sind noch ein vernünftiger GameOver Screen und eine KI geplant.

Viel Spaß beim testen :)

Comment » | Programmieren

WLAN Empfangs Terror

Juli 6th, 2010 — 8:12pm

Langsam kriselt es bei mir, wenn es darum geht, meinen neuen Hauptrechner in mein WLAN zuhause zu integrieren.

Es fing alles damit an, das ich möglichst günstig wegkommen wollte, weshalb ich mir einen WLAN / Bluetooth Kombi-Stick der relativ unbekannten Firma Joy-IT zulegte. Nach einem Tag und 3 zerschossenen Windows 7 Installationen gab ich diesen mit Freuden zurück. Der Verkäufer meinte nur lapidar: “Ja, die bekommen wir immer wieder zurück, ich glaub wir nehmen den Stick besser aus dem Programm.”

Danke, das ihr trotzdem versucht habt, ihn mir zu verkaufen.

Nächster Versuch. Eine Netgear WG311v3 PCI WLAN Karte. Netgear, das muss doch was können? Denkste!
Zwar stand auf der Verpackung verheißungsvoll auf einem Aufkleber: “For Windows 7 Updates Visit …” aber unter der angegebenen Seite fand ich statt einem Windows 7 Treiber nur den Hinweis, dass dieses Produkt nicht mit Windows 7 kompatibel sei. Da hätte man sich den Aufkleber auch gleich sparen können.

Nach langem hin und her im Netz fand ich dann schließlich doch eine Möglichkeit, die Karte in Betrieb zu nehmen, mit einem fremden, nicht signiertem Treiber. Dazu musste ich mit Hilfe des Windows SDKs mein eigenes Zertifikat erstellen, welches es zumindest im Testmodus von Windows erlaubte, den Treiber zu verwenden. Und siehe da, ich war mit dem Rechner im Netz.

Jedoch mit dem schönen Nebeneffekt, dass und rechts am Desktop der Hinweis eingeblendet wurde, dass sich Windows im Testmodus befindet. Zudem war der Empfang der Karte mehr als bescheiden, selbst mein iPhone konnte das unterm Tisch, wo der Rechner steht, besser.

Also wollte ich es heute richtig machen, also mal schnell eine offiziell Windows 7 kompatible WLAN Karte und eine stärkere Antenne gekauft. Meine Wahl fiel auf die TP-LINK WN350G. Karte eingebaut, Windows gestartet und die Karte wurde direkt mit einem Bluescreen erkannt. Glücklicherweise lief nach einem Neustart dann alles doch wie geplant.

Also wollte ich noch schnell die zusätzliche Antenne anschließen…

Wäre ja auch zu schön gewesen! Natürlich war die Antenne auf dieser Karte fest verbaut! Ein versuch am Router scheitert ebenso, da auch dort fix installiert.

Einzig an der zuvor eingebauten Netgear bietet sich die Möglichkeit, die Antenne auszuwechseln.

Wenn ich lustig bin, löte ich die beiden Anschlüsse für die Antennen auf den Karten heute noch um.

Comment » | Digitale Welt, Windows

Back to top