Mittwoch, 25. Mai 2016

Daten / Fotos / Videos von einer SD Karte oder dem Smartphone auf eine USB Festplatte kopieren (Copy Data / Photos / Videos from SD Card or Smartphone to USB HDD)

English


Why?

If you are in holidays, there is no pc nearby or your don't want to carry your notebook. The cameras SD card has no free space to take new pictures or videos. 

A HDD (e.g. 2TB) is has more space than a SD Card (e.g. 64 GB)

What do you need?

  • Smartphone with OTG support (Samsung Galaxy S...., Note, Sony Z2,Z3 .... etc. )
  • USB HDD 
  • OTG Cable / HUB 
  • (optional) NTFS Software (Google Play): 

 or

How?

Usualy a modern USB HDD (2,5 inch) comes without external power supply. So if you wan't to copy data/pictures/videos to the HDD, a USB OTG HUB with external power supply is required (2nd image). I have this one (Amazon Link 10 Euros).

HDDs for windows systems are using the NTFS format. Usualy an android smartphone can't read NTFS formatted HDDs. But you can install the Total Commander (file browser) App and the Paragon_UMS plugin. This makes your smartphone able to read (and write) your HDD.

After downloading the apps ... you are ready to connect the SD Card and the hub, and the hub to the smartphone.

Befor connecting the hub, you should start Paragon_UMS and Select checkbox "enable write mode" (unselect after disconnect the hub)
- Connect the hub to smartphone
- Press OK (permission for USB Access)
- Wait until the HDD and the SD Card has mounted (right image) 
- touch the "open Total Commander" floppy disc icon

 

- navigate to the root view (left image)
- select paragon_UMS
- select SD Card (maybe other names e.g. NONAME)
- select all your files by touch the icon left (multiselect)
- touch the right arrows > (top right screen corner)
- navigate to the path where you want to copy your files
  (Paragon_ums\HDD_Name\.....)
- touch the left arrows (top left screen corner)
- touch the copy button (buttom toolbar 2nd button)


Deutsch

Warum

Stell dir vor Du bist im Urlaub und deine Digitalkamera ist voll. Du hast keinen Laptop mitgenommen, weil er vielleicht nicht ins Gepäck passte. 

Eine Festplatte (z.B. 2 TB) hat mehr Speicherplatz als eine SD Karte (z.B. 64 GB).

Was brauchst du?

  • Smartphone mit OTG Unterstützung (Samsung Galaxy S...., Note, Sony Z2,Z3 .... etc. )
  • USB Festplatte
  • OTG Kabel / HUB 
  • (optional) NTFS Software (Google Play): 
 oder

Wie?

Normalerweise haben moderne USB Festplatten (2,5 Zoll) keine extra Stromquelle mehr. Wenn wir aber eine solche Festplatte an unser Smartphone anschließen möchten, reicht die Stromversorgung des Smartphones nicht aus. Deshalb gibt es USB OTG Hubs mit extra Stromversorgung (rechts Bild oben). Ich habe diesen von Amazon für knapp 10 Euro -> Amazon Link  

Windows Festplatte nutzen oft das NTFS Format, welches von Smartphones nicht gelesen werden kann. Damit das dann doch geht muss man etwas tricksen. Die Total Commander ist ein Datei Browser und Die App Paragon_UMS ist ein Plugin für den Total Commander. Beide zusammen machen das Lesen von NTFS Festplatten möglich.

Nachdem man die Apps installiert hat einfach die SD Karte und die Festplatte in den Hub stecken und den Hub mit Strom versorgen (Kabel liegt bei). 

Bevor man den Hub ins Smartphone steckt muss man  Paragon_UMS starten und "Enable write mode" anklicken. (später beim abstecken wieder deaktivieren). Dann den Hub an Smartphone stecken.

- Ein Dialog erscheint wie in dem linken Bild ... mit OK bestätigen.
- Warten bis unter "Mounted Volumes" beide Geräte (Festplatte und SD Karte) gefunden wurden
- auf die Diskette (open Total Commander) drücken.

 

- in die oberste ebene navigieren (z.B. mit den blauen Haus)
- Paragon_UMS auswählen
- die SD Karte auswählen (manchmal heißt sie NONAME oder so)
- alle Dateien auswählen die man kopieren möchte (auf die icons
  links klicken um mehrere zu wählen)
- die Pfeile nach Rechts anwählen (rechts oben am Bildschirm)
- wieder über das blaue Haus zum Paragon_UMS gehen und
  diesemal die Festplatte wählen und dein Zielordner wählen
  (Paragon_ums\HDD_Name\.....)
- über die Links Pfeile (oben links am Bildschirm) wieder zu deinen
  ausgewählten Daten zum kopieren wechseln
- den  kopier Button wählen (unten 2. Button von links)


Donnerstag, 28. April 2016

CoreData Category

How to install:

(0. Create Project with CoreData)

1. Copy category "NSManagedObject+Data" in your Project (Download Link)

2. If you have a .pch file, you can import the category there

3. DONE :-)


How to use it:


in your ViewController class:

(if category is imported by precompiled header file you only need to import your entity class ... else import the category "NSManagedObject+Data" too.

#import "MyCustomEntity.h"
#import "NSManagedObject+Data.h"

-(void)methodFoo
{
         //get all entities of MyCustomEntity
         NSArray *myCostumEntities = [MyCustomEntity allEntitiesWithSortDescriptors:nil];

         //create a new entity in db
         MyCustomEntity *newOne = [MyCustomEntity createEntity];

         //delete a entity
         [newOne deleteEntity];
         // or
         [MyCustomEntity deleteEntitiesWithPredicate:[NSPredicate predicateWithFormat:@"name = %@",newOne.name]];
}

Donnerstag, 25. Februar 2016

Kostenloser Karten Client für Custom Maps unter iOS und Android

Warum?

Auf der Suche nach einer Bibliothek die einen Map Client mitbringt der zum einen kostenlos und zum anderen all meinen Bedürfnissen gerecht wird, bin ich zum Schluss gekommen, dass es gar nicht so einfach ist einen solchen zu finden.

Viele Anbieter verlangen Geld für das Hosten der Karten oder das entfernen eines Wasserzeichens. Die Foren sind voll von Frameworks die zwar mit Funktionen glänzen aber im produktiven Einsatz beinahe unbezahlbar sind.

Was soll der Client können?

  • Android und iOS sollten unterstützt werden.
  • Das anzapfen von Serverdiensten wie OSM, Bing, MapQuest etc.
  • Offline Karten als Tiles mit der App ausliefern und darstellen
  • keine Wasserzeichen oder ähnliches
  • Clustering von Markern/POIs
  • kostenlos

Die Lösung

Der einzige Anbieter der alles bietet und in so gut wie keinem Forum auftaucht ist OpenLayers. Ja, ich weiß es ist ein JS basierender Client und keine native Komponente. ABER wie funktioniert und lässt sich recht einfach in eine App einbinden.

Das Prinzip:

Eine HTML Datei ruft den MapClient OpenLayers in Vollbildgröße auf. Diese HTML Datei wird in einer WebView Komponente von der App dargestellt. 

Interaktionen / Datenaustausch geschehen über JavaScript Injections. 

Comming Soon:
Ich werde bei Gelegenheit ein Test Projekt für iOS zum Post hinzufügen.


Datei auswählen Dialog unter Mac OSX mit Pfadeingabe

Wer aus der Windows Welt kommt kennt den Datei Explorer. In der Adressleiste kann man einen Pfad eingeben und kann so direkt in einen Ordner navigieren. Das gleiche verhalten kann man auch in einem "Datei öffnen/speichern" Dialog wiederfinden, wenn man anstelle des Dateinamens einen Ordner Pfad eingibt und die Enter Taste drückt.

Beim Mac gibt es im Finder keine Eingabezeile um in einen Ordner zu springen. Mit der Tastenkombination:

Command+Shift+G

erscheint im aktiven Finder Fenster oder auch im "Datei auswählen/speichern" Dialog ein Eingabefeld.



Tipp von: http://www.macworld.com/article/1161022/copy_paste_file_paths.html

Samstag, 17. Oktober 2015

Wie kann man sein Android Smartphone vom PC fernsteuern? / How to remote control your android smartphone from PC

(german) (scroll down for english)

Motivation

oft hängt das Smartphone an der Steckdose und ist vom PC aus schlecht zu erreichen. Dann ertönt ein Geräusch von Whats App, SMS oder sonst was... Damit man nicht immer zum Telefon rennen muss, kann man mit einem einfachen Trick das Smartphone auch vom PC bedienbar machen (USB, WLAN, 3G).

Was benötige ich?

Mobizen

Das Programm Mobizen von www.mobizen.com liefert dafür ein Programm für Windows und eine App für Android. Der Hersteller ist wie seine Webseite koreanisch. Den Download Button findet man aber auch ohne Koreaner an seiner Seite ;-). Samsung selbst hat vor einigen Jahren die Software unter ihrem Namen genutzt und nutzt sie wahrscheinlich immer noch (Denn alles programmieren auch die nicht selbst). 

Hat man die App aus dem Playstore heruntergeladen und das Programm auf dem PC installiert kann man die jeweiligen Programme in englisch nutzen.  Auf dem Gerät muss dafür aber der Entwickler Modus aktiviert sein und USB Debugging erlaubt sein. Aber wie genau das funktioniert wird bei der Installation Schritt für  Schritt erklärt.

Viel Spaß beim fernsteuern eures Handys vom Rechner aus.





(english)

Motivation

Your Android Phone is charging and your are working on a pc?  You have no desire to get up again and again when a message arrives? Turn your pc into a remote control (Wifi, USB, 3G) .

Requirements

Mobizen
Mobizen from www.mobizen.com provides two applications. The windows desktop application and the app from google playstore. The website is korean, but I'm sure that you'll find the download button. Samsung uses this software for years under its own label.

After downloading the App from google play store, you have to activate the developer mode and the usb debugging mode (android settings menu). The app is guiding you step by step.

Have fun and enjoy....

Dienstag, 27. Januar 2015

Create an UIImage from String in Swift / Erstelle ein UIImage aus einem String in Swift


Swift Source Code:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
func imageFromText(#text:String,font:UIFont,color:UIColor)->UIImage
    {
        let size : CGSize = (text as NSString).sizeWithAttributes([NSFontAttributeName: font])
        
        UIGraphicsBeginImageContextWithOptions(size, false, 0.0)
        (text as NSString).drawAtPoint(CGPointMake(0.0, 0.0), withAttributes: [NSFontAttributeName: font, NSForegroundColorAttributeName:color])
        
        let image : UIImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        
        return image
    }

Freitag, 23. Januar 2015

iOS UITableViewCell Custom Highlight (so gehts richtig/the right way)

English

What is the goal?

A UITableViewCell with custom selected/highlighted background color and text color (screenshot).


Summary

  1. Create new UIViewController, UITableView and UITableViewCell (don't forget reuseIdentifier) in storyboard.
  2. Create class for viewController and connect them with the viewController in the storyboard.
  3. Conect the tabele dataSource and delegate  with the viewController.
  4. Place UILabels in storyboard and choose the "Color" and "Highlighted" property.

  5. Add "numberOfRowsInSection" and "cellForRowAtIndexPath" method in viewController class (and protocols).
  6. In "cellForRowAtIndexPath" -> get a cell instance from your tableView and set the "selectedBackgroundView" property by using a new UIView with e.g. green backgroundColor 
Code: (Swift):

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell  
   {  
     var cellIdentifier = "resultCell"  
     var cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as UITableViewCell  
     var bgView : UIView = UIView()  
     bgView.backgroundColor = UIColor(red: 123.0/255.0, green: 156.0/255.0, blue: 210.0/255.0, alpha: 1.0)  
     cell.selectedBackgroundView = bgView  
     return cell  
   }  




Deutsch

Was will ich erreichen?

Eine UITableViewCell die beim Touch Event eine beliebige Farbe als Hintergrund erhält und dessen Textinhalte eine andere beliebige Farbe einnehmen (Siehe Screenshot).


Welche Motivation hatte ich dies zu schreiben?

Im Internet z.B. auf StackOverflow, gibt es viele Varianten wie man dieses Problem löst. Oftmals sind diese sehr abenteuerliche Konstruktionen die viel Mühe mit sich bringen. Dabei geht es eigentlich ganz einfach.

Was wird benötig?

Wird ein Storyboard genutzt, braucht man zunächst ein ViewController mit einer UITableView. Der TableView wird eine UITableViewCell hinzugefügt die wir unseren Bedürfnissen anpassen wollen. 
Nun platzieren wir in der Content View der UITableViewCell unsere UILabels. 

Voilà! Wir haben unsere CustomCell beinahe fertig.

Nun wählt man ein Label aus und klickt im Attribute Inspector auf eine Farbe für sein Label. Das macht man unter "Color". Etwas weiter unten findet man "Highlighted". Hier wählt man eine Farbe aus die angezeigt werden soll wenn die Zelle selektiert wurde. Damit sie jetzt noch eine andere Hintergrundfarbe erhält kann man entweder die sehr beschränkte Auswahl unter "Selection" nutzen die einem im Attribute Inspector angezeigt wird wenn man auf die Zelle klickt oder man wählt seine eigene Farbe in dem man der Zelle eine selectedBackgroundView spendiert. Dazu geht man im Quellcode in die Methode: "cellForRowAtIndexPath" und erstellt eine neue View. Dieser View gebt ihr eine Hintergrundfarbe, z.B. grün. Nun setzt ihr der aktiven Zelle die Eigenschaft selectedBackgroundView mit der grünen View.

Zusammenfassung:



  1. UIViewController mit UITableView und einer UITableViewCell (reuseIdentifier nicht vergessen) im Storyboard anlegen.
  2. Klasse für den ViewController und im Storyboard für den Controller eintragen.
  3. Tabellen DataSource und Delegate mit dem ViewController verknüpfen.
  4. UILabels im Storyboard platzieren und "Color" und "Highlighted" Farben setzen.

  5. In der ViewController Klasse die "numberOfRowsInSection" und "cellForRowAtIndexPath" Methode hinzufügen.
  6. In der "cellForRowAtIndexPath" Methode eine Zelle aus der TableView instanzieren und die Eigenschaft "selectedBackgroundView" mit einer neuen View setzten die z.B. eine grüne Hintergrundfarbe besitzt.
Code: (Swift):

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell  
   {  
     var cellIdentifier = "resultCell"  
     var cell : UITableViewCell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as UITableViewCell  
     var bgView : UIView = UIView()  
     bgView.backgroundColor = UIColor(red: 123.0/255.0, green: 156.0/255.0, blue: 210.0/255.0, alpha: 1.0)  
     cell.selectedBackgroundView = bgView  
     return cell  
   }  

Dienstag, 1. Januar 2013

Unboxing Hoverboard

Prolog

Am letzten Tag im alten Jahr (2012) kam noch ein Paket aus den USA. Der DHL Bote wollte Geld für den Zoll und ich hatte keins in Bar daheim, also ging er wieder. Doch doch kaum war er weg, kam die Rettung zur Tür hinein und hatte noch 50 Euro in Bar bei sich... Dann hieß es, jetzt muss es schnell gehen. Schuhe an, Mantel an und die Treppen runter gerannt.... Der Blick die Straße herunter ... wo ist das gelbe DHL Auto....? DA! ca. 300 Meter ... Im Laufschritt und mit dem Bargeld bewaffnet doch noch erreicht kurz bevor er ins Auto einsteigen wollte.

ICH HATTE DAS PAKET IN MEINEN HÄNDEN!

Bilder











Video


Samstag, 13. Oktober 2012

Wie bekomme ich den Google+ Messenger auf den Desktop / How to run the Google+ Messenger on Desktop

Bestimmt hat der eine oder andere ein Smartphone mit Google+ und nutzt dort den Messenger.
Wenn man zuhause ist und am PC sitzt möchte man dann sein Gespräch vom Handy fortsetzen aber ohne nervige Smartphone Tastatur. Leider bietet Google keinen direkten Weg in den Chat zu gelangen. denn auf der Desktop Welt kann man nur über GTalk kommunizieren (WARUM AUCH IMMER).....

Was benötige ich?

BlueStacks  -> http://http://bluestacks.com

Was ist BlueStacks?
Blue Stacks ist eine art Android Simulator für den heimischen Desktop Computer. Mit BlueStacks kann man also Apps runterladen und ausführen.

Was ist zu tun?
1. BlueStacks runterladen
2. BlueStacks installieren
3. BlueStacks starten
4. nach Google suchen
5. Google+ installieren
6. nach dem einloggen muss über die Notificationbar (von oben runterziehen wie beim Smartphone) das Konto mit den nötigen rechten ausgestattet werden...
7. Messenger starten und CHATTTEN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Requirements

BlueStacks  -> http://http://bluestacks.com

What is BlueStacks?
Blue Stacks is a android simulator for desktop computers. BlueStack is able to download and run any apps from Google Play Store.

ToDo List
1. download Bluestacks
2. install blueStacks
3. run blue stacks
4. search for google
5. install the google+ app
6. at the notificationbar (slide from the top) u have to accept account permissions for your google account
7. run the messenger ... enjoy


Freitag, 27. Juli 2012

Horizontaler UITableView (Trick)

Einleitung
Wer hat sich als iOS Entwickler noch nicht gefragt warum die UITableView nur vertikal scrollt?! ...
Es wäre doch super wenn sie das auch horizontal könnte. Ein kleiner Trick den ich im Netz gefunden habe macht die UITableView auch horizontal Scrollbar.

Funktionsweise
Die Tabelle wird um 90 Grad gedreht (auf die Seite gekippt), damit die Zellen aber nicht auch auf der Seite liegen werden diese wieder zurück gedreht.

Schritt 1:
Normalen ViewController anlegen der von UITableViewController erbt.

Schritt 2:
in der ViewDidLoad folgende zeilen eintragen um die Tabelle zu drehen


- (void)viewDidLoad
{
    [super viewDidLoad];
    
    const CGFloat k90DegreesCounterClockwiseAngle = (CGFloat) -(90 * M_PI / 180.0);
    CGRect frame = tableV.frame;
    tableView.transform = CGAffineTransformRotate(CGAffineTransformIdentity, k90DegreesCounterClockwiseAngle);
    tableView.frame = frame; 
}


Schritt 3:
In der Methode in der die UITableCellView erzeugt und konfiguriert wird die Zelle drehen

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
    if (!cell) 
    {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }    

    CGFloat k90DegreesClockwiseAngle = (CGFloat) (90 * M_PI / 180.0);    
    cell.transform = CGAffineTransformRotate(CGAffineTransformIdentity, k90DegreesClockwiseAngle);
    
   //your cell init here
    //.....................
    
    return cell;
}



Die Zellenbreite kann über die folgende Methode (die eigentlich für die Höhe zuständig ist) konfiguriert werden. In dem Codebeispiel gebe ich die Breite des Bildschirms zurück... so ist die Cell immer genau so breit wie eine Bildschirmbreite...

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return self.view.bounds.size.width;
}

Mittwoch, 25. Juli 2012

iPhone Bedienung mal anders

Einleitung

Wer das iPhone kennt weiß so ziemlich schnell wie es zu bedienen ist. Das ist dem Bedienkonzept von Apple zuzuschreiben. Dieses ist in seine Navigationsstrukturen auch recht Übersichtlich. Mir persönlich wird es immer schnell langweilig wenn ich die 1000 App mit einer TabBar oder NavigationBar sehe. Deshalb habe ich neues Bedienkonzept gebaut welches mal ein wenig mehr Abwechslung bringen soll.

Video
Funktionsweise


Der Grundaufbau besteht aus einem eigenen neuen Controler Typ den ich TileViewController nenne. Er kann eigentlich unendlich viele Unterviewcontroller beherbergen ähnlich wie z.B. ein TabViewController.
Nach dem Initialisieren des TileViewControllers fügt man ihm lediglich seine gewünschten ViewController hinzu und gibt für jeden ViewController die Zeile an in der er dargestellt werden soll. Die Kachelgrößen werden dann automatisch vom TileViewController zugewiesen. 


Im Pseudocode sieht das ungefähr so aus:


[tileviewController addViewController:vc1 inRow:0];
[tileviewController addViewController:vc2 inRow:0];
[tileviewController addViewController:vc3 inRow:1];
[tileviewController addViewController:vc4 inRow:2];

Und schon haben wir folgende Zeilen:
Zeile 1: vc1;vc2
Zeile 2: vc3
Zeile 3: vc4

Wer Code sehen möchte kann mich gerne in den Kommentaren fragen ... Gruß Maurice
Wanna see code? ask me via comments

Donnerstag, 15. März 2012

Flash Builder, Mobile und der SplashScreen

Seit Flash Builder 4.6 gibt es die Möglichkeit für Mobile Apps eine SplashScreenImage  anzulegen...
Leider waren die Beispiele von Adobe für meine Zwecke nicht ausreichend... wer z.B. iPad, iPhone 3GS, iPhone 4S, Android Smartphone und Android Tablet abdecken will hat mehr Probleme mit dem Splashscreen als man sich vorstellen kann... hier meine Lösung die alle Varianten Abdeckt:



<?xml version="1.0" encoding="utf-8"?>
<s:SplashScreenImage xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark">
<fx:Declarations>
<!-- Platzieren Sie nichtvisuelle Elemente (z. B. Dienste, Wertobjekte) hier -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.core.FlexGlobals;
[Embed(source="assets/imgs/Default.png")] //320x480
[Bindable]
public var ios160p:Class;
[Embed(source="assets/imgs/DefaultLandscape.png")]  //480x320
[Bindable]
public var ios160l:Class;
[Embed(source="assets/imgs/Default@2x.png")]  //640x960
[Bindable]
public var ios320p:Class;
[Embed(source="assets/imgs/Default@2xLandscape.png")] //960x640
[Bindable]
public var ios320l:Class;
[Embed(source="assets/imgs/Default-Landscape~ipad.png")] //1024x748
[Bindable]
public var iosTablettL:Class;
[Embed(source="assets/imgs/Default-Portrait~ipad.png")] //768x1004
[Bindable]
public var iosTablettP:Class;
[Embed(source="assets/imgs/logoTabletPortraitDefault.png")] //800x1232
[Bindable]
public var andTablettP:Class;
[Embed(source="assets/imgs/logoTabletLandscapeDefault.png")] //1280x752
[Bindable]
public var andTablettL:Class;
[Embed(source="assets/imgs/logo160PortraitDefault.png")] //320x480
[Bindable]
public var and160p:Class;
[Embed(source="assets/imgs/logo160LandscapeDefault.png")] //480x320
[Bindable]
public var and160l:Class;
[Embed(source="assets/imgs/logo240PortraitDefault.png")] // 480x800
[Bindable]
public var and240p:Class;
[Embed(source="assets/imgs/logo240LandscapeDefault.png")] //800x480
[Bindable]
public var and240l:Class;
[Embed(source="assets/imgs/logo320PortraitDefault.png")] //640x960
[Bindable]
public var and320p:Class;
[Embed(source="assets/imgs/logo320LandscapeDefault.png")] //960x640
[Bindable]
public var and320l:Class;
// Override getImageClass() to return an image for iOS.
override public function getImageClass(aspectRatio:String, dpi:Number, resolution:Number):Class
{
// Is the application running on iOS?
var isIOS:Boolean = (Capabilities.version.indexOf("IOS") == 0 ? true:false);
if(aspectRatio == StageAspectRatio.PORTRAIT) //Portrait
{
if(dpi == 160 && resolution<1000)//real 160
return (isIOS==true?ios160p:and160p);
else if(dpi == 160 && resolution>1000)//tablett
return (isIOS==true?iosTablettP:andTablettP);
else if(dpi == 240) return and240p;
else if(dpi == 320)
return (isIOS==true?ios320p:and320p);
}
else //Landscape
{
if(dpi == 160 && resolution<1000) //real 160
return (isIOS==true?ios160l:and160l);
else if(dpi == 160 && resolution>1000)//tablett
return (isIOS==true?iosTablettL:andTablettL);
else if(dpi == 240) return and240l;
else if(dpi == 320)
return (isIOS==true?ios320l:and320l);
}
return super.getImageClass(aspectRatio, dpi, resolution);
}
]]>
</fx:Script> </s:SplashScreenImage>

Sonntag, 26. Februar 2012

Folder Sync für Minus

(english on the buttom)

Mein neustes Projekt entstand aus lauter Langeweile. Eigentlich benutze ich Dienste wie Drop Box und Co. eher selten. Aber mir ist aufgefallen, dass nur Drop Box einen guten Desktop Client anbietet, der es dem User möglichst einfach macht seine Daten mit der Drop Box zu synchronisieren. Da Minus.com deutlich mehr Speicher bietet und außerdem auch noch größere Dateien erlaubt das Desktop Tool aber eher mies ist, habe ich den Anfang gemacht ein eigenes Tool zu programmieren.

Grundlegende Idee ->  Ein Programm zum Synchronisieren eines lokalen Ordners auf der Festplatte mit allen Dateien die auf Minus.com gespeichert sind.

 Das heißt:
- Nach Eingabe von Benutzername und Passwort werden alle online Dateien in einen frei gewählten lokalen Ordner kopiert.
- Einfach Dateien per Windows Explorer in den lokalen Ordner kopieren und das Programm lädt die die Dateien automatisch hoch.

Aktueller Stand (funktionierende Features):
- Login
- Pfad auswählen
- Alle Dateien runterladen
- Letzte eingaben (name, passwort, pfad) speichern

Geplante Funktionen:
- Automatischer Upload von Dateien
- Automatisches regelmäßiges überprüfen ob neue Dateien auf dem Server sind zum Runterladen
- Hübschere Benutzer Schnittstelle (GUI)
- Minimieren ins System Tray

english:
Current State (working features):
- Login
- Choose  Path
- Download all online files to path
- save username, password, path for next App Start

whats next?:
- automatic file upload
- scheduled check for new online files to download
- more pretty GUI
- minimize app to system tray

aktueller (current) Build: 0.0.0.1:
https://rapidshare.com/files/301806078/FolderSync.zip



UPDATE:
Weitere Informationen unter ->

http://minusfoldersync.blogspot.com/

Donnerstag, 9. Februar 2012

Abschlussarbeit und das richtige Zitat in Word

Wer eine Abschlussarbeiten muss, weiß er hat vernünftig seine Quellenangaben zu machen. Wer seine Arbeit in Word schreibt erntet bei einigen Latex Fetischisten zwar unendlich viel Hohn, hat aber außerdem das Problem, dass Word einem nur wenige Zitat Vorlagen bietet. Nach langem Suchen und rumprobieren habe ich es jedoch aufgegeben mi selbst eine Vorlage zu bauen und bin Gottseidank noch auf folgende Seite gestoßen:


Einfach herunterladen, entpacken und je nach Word Version in das entsprechende Verzeichnis kopieren... bei mir: c:\Program Files (x86)\Microsoft Office\Office14\
.... und schon erhält man nach Neustart von Word schön viele neue Vorlagen die auch das machen was man will... ich persönlich fand die IEEE Variante ganz angenehm.

Montag, 12. September 2011

Flex: SnapScroller

Da ich derzeit an meiner Master Thesis sitze und via Flex eine Mobil App erstellen möchte, ist mir folgendes aufgefallen. Flex 4.5 ist zwar echt nett was die Veröffentlichung von Apps auf mehreren Plattformen angeht, hat aber leider recht eingeschränkte Komponenten zum zusammenbauen. So fehlte mir dringend die Paging Funktion die man aus iOS kennt. Sprich man hat eine Scrollview, die seitenweise Inhalte präsentiert. Da ich auch nach längeren Suchen keine Möglichkeit gefunden habe die Scroller Komponente zu parametrisieren, habe ich sie einfach mal erweitert.

Beispiel (rote Fläche nach links wischen):




Dazu folgenden Quelltext

MXML:

<local:SnapScroller  x="0" y="0" width="320" height="460">
<s:HGroup gap="0" width="100%" height="100%" >
<s:Image source="assets/Startscreen_Portrait.png"/><s:Image x="320" source="assets/Startscreen_Portrait.png"/><s:Image x="640" source="assets/Startscreen_Portrait.png"/>
</s:HGroup>
</local:SnapScroller>
Wichtig ist, das die Komponente vom Typ SnapScroller- und der Container eine HGroup ist. Gap sollte auf 0 stehen damit die Elemente direkt nebeneinander liegen und nicht unnötig mit Spacern getrennt sind.

Die AS3 Komponente (derzeit nur horizontales snapping):

package
{
 package
{
 import flash.events.MouseEvent;
 import flash.events.TimerEvent;
 import flash.events.TouchEvent;
 import flash.ui.Mouse;
 import flash.ui.Multitouch;
 import flash.ui.MultitouchInputMode;
 import flash.utils.Timer;
 
 import flashx.textLayout.formats.Float;
 
 import mx.core.InteractionMode;
 import mx.core.ScrollPolicy;
 
 import spark.components.Group;
 import spark.components.Scroller;
 
 
 public class SnapScroller extends Scroller
 {
  private var isMouseDown:Boolean;
  private var xStart:Number;
  private var mouseUpDownXDistance : Number;
  private var t:Timer;
  private var nextHorizontalPosition: Number; 
  private var nextHorizontalPositionDistance : Number;
  
  public function SnapScroller()
  {
   super();
   
   this.setStyle('horizontalScrollPolicy',ScrollPolicy.OFF);
   this.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDown);
   this.addEventListener(MouseEvent.MOUSE_MOVE,onMouseMove);
   
  }
  
  protected function onMouseDown(event:MouseEvent):void
  {
   this.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);
   stage.addEventListener(MouseEvent.MOUSE_UP,onMouseUp);
   
   if (t)
    t.stop();
   
   isMouseDown = true;
   xStart = mouseX;
  }
  
  protected function onMouseMove(event:MouseEvent):void
  {
   if(isMouseDown)
   {
    mouseUpDownXDistance = mouseX-xStart;
    this.viewport.horizontalScrollPosition -= mouseUpDownXDistance;
    xStart = mouseX;
   }
  }
  
  protected function onMouseUp(event:MouseEvent):void
  {
   isMouseDown = false;
   
   if(mouseUpDownXDistance > 0)
    nextHorizontalPosition = (int(this.viewport.horizontalScrollPosition/this.width))*this.width;  
   else
    nextHorizontalPosition = (int(this.viewport.horizontalScrollPosition/this.width)+1)*this.width;
   
   if (nextHorizontalPosition > ((this.getElementAt(0) as Group).contentWidth)-this.width)
    nextHorizontalPosition = ((this.getElementAt(0) as Group).contentWidth)-this.width;
   
   t = new Timer(1,0);
   t.addEventListener(TimerEvent.TIMER,timerEnds);
   t.start();
   
   stage.removeEventListener(MouseEvent.MOUSE_UP,onMouseUp);
   this.removeEventListener(MouseEvent.MOUSE_UP,onMouseUp);
  }
  
  protected function timerEnds(event:TimerEvent):void
  {
   var distanceToTarget:Number = Math.abs(this.viewport.horizontalScrollPosition - nextHorizontalPosition);
   
   if(this.viewport.horizontalScrollPosition > nextHorizontalPosition)
    this.viewport.horizontalScrollPosition -= Math.sqrt(distanceToTarget);
    
   else
    this.viewport.horizontalScrollPosition += Math.sqrt(distanceToTarget);
   
   if (distanceToTarget < 0.01)    
   {     
    this.viewport.horizontalScrollPosition = nextHorizontalPosition;          
    t.stop();     
    t.removeEventListener(TimerEvent.TIMER,timerEnds);    
   }   
  }  
 } 
}

Tutorial Video

Dienstag, 16. August 2011

Synergy

Wer viel an 2 Computern z.B. einen Mac und einem PC gleichzeitig arbeitet, hat oft auch zwei Mäuse und Tastaturen vor sich liegen. Außerdem möchte man oft auch Copy/Paste von System zu System machen.

Abhilfe verschafft das Tool Synergy.

Man installiert es auf einem System (z.B. Mac) und auf einem anderen (z.B. PC) und startet auf einer Seite die Server Version und auf der anderen die Client Version. Die Serverversion shared nun Keyboard und Maus mit dem Client. Sprich man kann mit der Maus zum anderen Bildschirm wechseln und eingaben via Tastatur tätigen. Auch Copy/Paste klappt. Die Tastatur ist immer auf dem Bildschirm aktiv, wo die Maus gerade ist. Für den PC ist die Oberfläche optisch schön realisiert. Bei der Mac Variante sollte man sich z.B. SynergyKM googlen.... Dieses kleine Tool trägt Synergy in die Systemeinstellungen ein und macht die Konfiguration deutlich leichter.

Tipp: Wer den Mac als Server nutzt, sollte darauf achten, dass unter den Systemeinstellungen -> Bedienungshilfen die Option "Zugriff für Hilfsgeräte aktivieren" angehakt ist. Ansonsten könnte es sein, dass die Tastatur nur auf der Mac Seite eingaben empfängt und nicht weiterreicht zum Client.

Synergy gibt es für Mac, PC, Linux....

...

PS:
Eine einfache Alternative ist übrigens ShareMouse. Kostenlos für max 2 verbundene Systeme

Freitag, 8. Juli 2011

Beuth Presse veröffentlicht Artikel von mir

In der aktuellen Beuth Presse (Ausgabe 3/2011) wurde ein Artikel veröffentlicht, den ich im Auftrag der Professorin Dr. Merceon geschrieben habe. Es geht um ein internationales Bildungsprojekt in dem neue Master Studiengänge angeboten werden sollen. Weitere Informationen direkt im Artikel:

Titel: Wissenschaft kennt keine Grenzen

Link: http://www.beuth-hochschule.de/uploads/media/Beuth_Presse_3-11_Web.pdf (Seite 30)

Dienstag, 5. Juli 2011

Schlechte Werbung muss bestraft werden...

Die aktuelle iPhone 4 Werbung ist so beschränkt, dass ich mir gedacht habe... nimm sie doch mal ein wenig auf die Schippe... deshalb dieser Kurze Clip ;-)

Montag, 4. Juli 2011

Wie orte ich das Handy (Samsung Galaxy S2) meines Partners ;-)

Tja ja wie fange ich...

der Titel sollte erstmal eher mit einem Augenzwinkern gesehen werden, denn eigentlich zeige ich hier eher wie man sein verlorenes Samsung Galaxy S2 wiederfinden kann.

Zur Theorie:

Das Samsung Galaxy S2 besitzt eine Funktion, die es ermöglicht sich das Handy auf einer Karte im Internet anzeigen zu lassen bzw. es über einen bestimmten Zeitraum zu verfolgen. Wenn man aber ein eifersüchtige/r Ehemann/Ehefrau ist kann man diese Funktion jedoch dazu missbrauchen um herauszufinden wo die geliebte Person sich gerade befindet. Vielleicht ist er/sie ja garnicht auf Arbeit oder auf Geschäftsreise ;-) .....

wie auch immer, was wird benötigt:

- Samsung Galaxy S2
- Einen Samsung Dive Account
- Einen PC mit Internet :-)


Und so gehts:

- am Samsung Galaxy S2 die Optionstaste drücken (die linke) und in die "Einstellungen" gehen
- ins Menü "Standort und Sicherheit" wechseln
- runter Scrollen zu den Menüpunkten "Eigenes Telefon suchen" und die "Fernzugriffunktionen" aktivieren
- normalerweise müsste jetzt die Frage kommen ob ein neuer Samsung Account angelegt werden soll. Den Prozess durchführen bis der Account erstellt wurde.

und das war es auch schon fast...

Nun einfach auf http://www.samsungdive.com surfen... dort sich mit den eben erstellten Account anmelden und auf "find my Mobile" klicken (man kann oben rechts auch auf deutsch umstellen)...

Das Handy aktiviert anschließend sein GPS Empfänger und sendet seine Position zum SamsungDive Portal direkt auf die Karte. Wer möchte kann auch das Gerät verfolgen lassen über eine bestimmte Zeitspanne einfach den "Start tracking" Knopf drücken.

Der "Call Logs" Knopf verrät einem sogar mit wem der Handy Besitzer als letztes telefoniert hat.

Viel Spaß beim Orten eurer Kinder, Ehepartner oder Haustiere ;-)