Kategorien
Android Phonegap/Cordova

Vergleich von Augmented Reality Frameworks für Android

[table id=1 /]

Fazit:

Ich habe mich für Mixare entschieden, welches  sehr gut gecodet, aber weniger gut dokumentiert ist. Ist ist sehr einfach möglich seine eigenen Daten oder Wikipedia Daten über die Kamera zu legen und gleichzeitig dieselben Daten auf Google Maps als Marker anzuzeigen.

Vuforia erscheint für die Entwicklung von Android/iPhone Lösungen der geeignete Kanditat zu sein, jedoch wird in der Lizenz verlangt, dass Benutzerdaten an den Qualcomm Server gesendet werden und der User darüber informiert werden muss:

Auszug aus der Lizenz von Vuforia

„You must inform end-users of your application that certain types of anonymous usage data is collected by the Vuforia SDK and sent back to Qualcomm servers.“

„(i) the collection by QUALCOMM and/or its affiliates of Statistics from the Software (including but not limited to: (a) information about the end users‘ devices such as device unique identifier, make, model, operating system name and version and kernel version, (b) information about our Software used to create your software or augmented reality end user application such as the SDK version and device profile, and (c) information about your software or augmented reality application and its use such as settings (e.g., camera resolution settings, configuration settings), start and stop dates and times, camera on/off events, target image obtained/lost events, and other general usage information (collectively „Statistics“)).“

Kategorien
Erlang

Erlang Übungsbeispiele

Aufgabe: 2520 ist die kleinste Zahl, die durch jede Zahl von 1-10 ohne Rest geteilt werden kann. Was ist die kleinste positive Zahl, die durch alle Zahlen von 1-20 ohne Rest teilbar ist? Es soll die Brute Force Variante programmiert werden.

Lösung:

-module(kleinsterAllesTeiler).
-compile(export_all).

kleinsterAllesTeiler(X) -> kleinsterAllesTeiler(X, 2, X).
kleinsterAllesTeiler(X, Teiler, KleinsteSuperZahl) when (Teiler > X) -> KleinsteSuperZahl;
kleinsterAllesTeiler(X, Teiler, KleinsteSuperZahl)->
    %io:fwrite("X: ~w \t Teiler: ~w \t KleinsteSuperZahl: ~w\n", [X, Teiler, KleinsteSuperZahl]),
    case teilbar(KleinsteSuperZahl, Teiler) of
        true ->kleinsterAllesTeiler(X, Teiler + 1, KleinsteSuperZahl);
        false ->kleinsterAllesTeiler(X, 2, KleinsteSuperZahl + 1)
end.

teilbar(X, Teiler) when (X rem Teiler) == 0 -> true;
teilbar(X, Teiler) -> false.
Kategorien
Diverses SEO

Blog Artikel auch in China in chiniesisch

Seit neustem habe ich eine Übersetzungsfunktion eingebaut in meinen Blog für verschiedene Sprachen, u.a. auch für chinesisch und siehe da, meine Webseite wird auch auf baidu.com, dem chinesischen Google gerankt in der Landessprache: Baidu xdebug auf den Artikel Xdebug (in Sprache chinesisch).

 

SEO Baidu in China
Kategorien
Diverses

Oh mein Gott… wo bist?

 

Kategorien
Erlang

Erlang Tutorial Windows

Für die professionelle Entwicklung mit Erlang stehen verschiedene Editoren und IDEs zur Verfügung: Übersicht siehe Punkt 7.7. Leider konnte mich das Eclipse Plugin nicht überzeugen und das Netbeans Plugin lies sich nicht installieren und Netbeans 7, weswegen ich Notepad++ benutze zum Entwickeln (siehe unten).

Die Vorteile der funktionalen Programmiersprache Erlang

  1. mathematische Korrektheitsbeweise sind einfach möglich
  2. sehr kurzer Quelltext
  3. für verteilte Anwendungen sehr geeignet
  4. der Datentyp INT ist nicht beschränkt, keine numerischen Effekte (Runden)
  5. keine Seiteneffekte

Bsp. Anwendungen in Erlang geschrieben:

  1. CouchDB
  2. SimpleDB
  3. Yaws – Webserver
Kategorien
VBA Excel

Excel Makros automatisch in jeder Arbeitsmappe verfügbar machen

Wenn man Makros geschrieben hat, die nicht nur in einer Arbeitsmappe zur Verfügung stehen sollen, bietet Excel 2010 für PCunter Windows 7 folgenden Funktion an:

Man legt eine Datei namens PERSONAL.XLSB.

C:\Users\IhrWindowsName\AppData\Roaming\Microsoft\Excel\XLSTART

an und bringt dort seine Makros unter, die bei jedem Excel Start geladen werden sollen. Es öffnet sich dann immer gleichzeitig zwei Dateien beim öffnen von Excel: die eigentliche Datei und die PERSONAL.XLSB. (Die Datei kann auch anders genannt werden unter Excel 2010, es werden alle Excel Datein in diesem Ordner automatisch geöffnet beim Start von Excel).

In der PERSONAL.XLSB sollte der Code wie gewohnt in ein Makro gelegt werden. Wenn gewünscht wird, dass ein Makro automatisch beim Start von Excel ausgeführt wird, um z.B. eigene Menüs zur Verfügung zu stellen, kann die Methode

Private Sub Workbook_Open()

genutzt werden unter DieseArbeitsmappe.

Excel 2011 für MAC

Geht leider nicht, nur über Addins.

Addins in Excel für Mac und PC

Mit Addins lassen sich eigene Menüs einbauen in Excel, die dann auch in jeder Arbeitsmappe verfügbar sind. Diese müssen in unter „DieseArbeitsmappe“ gespeichert und die Arbeitsmappe danach neu geöffnet werden, damit der Beispiel Code ausgeführt wird.

Private Sub Workbook_Open()

Dim cbMainMenuBar As CommandBar

Dim cbcCutomMenu As CommandBarControl

On Error Resume Next
Application.CommandBars("Worksheet Menu Bar").Controls("&Mein Menupunkt").Delete
On Error GoTo 0

 Set cbMainMenuBar = _
     Application.CommandBars("Worksheet Menu Bar")

 Set cbcCutomMenu = _
     cbMainMenuBar.Controls.Add(Type:=msoControlPopup)

  cbcCutomMenu.Caption = "&Mein Menupunkt"

 With cbcCutomMenu.Controls.Add(Type:=msoControlButton)
                .Caption = "Absätze entfernen"
                .OnAction = "AbsaetzeEntfernen"
 End With

 With cbcCutomMenu.Controls.Add(Type:=msoControlButton)
                .Caption = "csv Dateien zusammenfügen"
                .OnAction = "csvMerge"
 End With

 With cbcCutomMenu.Controls.Add(Type:=msoControlButton)
                .Caption = "Export einzelner .txt Dateien"
                .OnAction = "transponierenUndSpeichern"
 End With

End Sub
Kategorien
Mobil Phonegap/Cordova

Phonegap natives Android Plugin erstellen Tutorial

Mit Phonegap lässt sich nativer Code triggern aus Javascript heraus mit folgendem Code:

//onDeviceReady          

cordova.exec( success, fail, "UploadImage", "nativeAction", ["success"]);    

            function success (result) {    
                alert("SUCCESS: \r\n"+result );
                }
            function fail (error) {    
                alert("ERROR: \r\n"+error );
                }

Dieser Code ruft die Klasse UploadImage die Funktion execute mit Parameter action=’nativeAction‘ und einem JsonString(!) data = „[’success‘]“ auf. Data kann dafür verwendet werden Daten nach Java zu übergeben:

import org.apache.cordova.api.Plugin;
import org.apache.cordova.api.PluginResult;

public class UploadImage extends Plugin {
    public static final String NATIVE_ACTION_STRING="nativeAction";       
    public static final String SUCCESS_PARAMETER="success";
    @Override
    public PluginResult execute(String action, JSONArray data, String callbackId) {
        Log.d("HelloPlugin", "Hello, this is a native function called from PhoneGap/Cordova!");             
        //only perform the action if it is the one that should be invoked              
        if (NATIVE_ACTION_STRING.equals(action)) {                    
            String resultType = null;                    
        try {                          
            resultType = data.getString(0);                    }                    
        catch (Exception ex) {                          
            Log.d("HelloPlugin", ex.toString());                    }                    
        if (resultType.equals(SUCCESS_PARAMETER)) {                          
            return new PluginResult(PluginResult.Status.OK, "Yay, Success!!!");                    
            }                    
        else {                          
            return new PluginResult(PluginResult.Status.ERROR, "Oops, Error :(");                    
            }              
        }                
        return null;
    }
}

Außerdem muss das Plugin in die res/xml/config.xml eingetragen werden:

<plugin name="UploadImage" value="de.sv.foo.plugin.UploadImage"/>

 

Die Ausgabe sollte sein:

"SUCCESS: Yay, Success!!!"

 

Kategorien
PHP Webdeveloper Tools

Mantis Benachrichtigungs Emails Inhalt reduzieren

Mantis als PM Tool versendet bei konfigurierbaren Events an bestimmte User Benachrichtigungs E-Mails, die sehr viele Informationen beinhalten und schnell lang werden können.

Um nicht immer die gesamte History in der E-Mail zu sehen, kann man folgenden Code ändern:

core/bugnote_api.php l.372:

$t_bugnote_count = 1;// vorher: count( $t_all_bugnotes );

Damit wird nur die letzte Note versendet.

Oder man konfiguriert diesen Wert bei jedem User einzeln: My Account->Preferences->E-mail Notes Limit = 1

Ticket Informationen kürzen

Kategorien
WebGL

Three.js Tween Übersicht Animationen Möglichkeiten

Hier gibt es eine sehr gut Abbildung der möglichen Animation (Tweens) in Three.js:

http://www.grasshopper3d.com/profiles/blogs/port-of-robert-penner-s-easing-equations?xg_source=activity (siehe sehr gute Abbildung in den Kommentaren)

Zum Einbinden ist das sehr hilfreich: Tutorial Tween three.js

 

Ein kleines Beispiel für einen Tween:

new TWEEN.Tween( cube.rotation )
        .to( { y: (cube.rotation.y + Math.PI/2)}, 1500 )
        .easing( TWEEN.Easing.Back.EaseInOut).start();