Kategorien
JavaScript

Javascript Zugriff auf Member Variablen in innerer Funktion

Wenn man in einer solchen Situation Zugriff auf Member Variablen benötigt aus einer inneren (z.B. anonymen) Funktion, kann man folgenden Trick anwenden:

function Object() {
 this.memberVar= "foo";
 this.memberFunction= function()
 {
  var self = this;
  this.innerFunction= function()
  {
   alert(self.memberVar)
  }
 }
}
Kategorien
HTML5 JavaScript Web Frontend WebGL

HTML5 Canvas Text auf Canvas schreiben richtiger Zeilenumbruch

Wenn man einen bestimmten Text auf einen Canvas schreiben will und dafür bestimmen will, wann ein Text umgebrochen werden muss, kann man die folgende Funktion benutzen, die aus einem Text in Array macht in Abhängigkeit des Canvas.

Bsp:

var canvas = document.createElement("canvas");
var context = canvas.getContext("2d");
//vorher muss Schriftgröße des Canvas gesetzt werden
context.font = "30px arial";
textArr  = textToArray ("Wordpress eigene Farben und CSS Klassen in den Editor einbauen", 300, context);
//textArr enhält ["Wordpress Plugin"] und ["selber erstellen Tutorial"]
textToArray = function(text, maxWidth, context){
    var textArr = new Array();
    var fragment = "";
    var lastCutPostion = 0;
    var lastPossibleCutPosition = 0;
    var charCounter = 0;
    var position = 0;
    $j.each(text, function(index, char) {
        if(char == " " && charCounter != 0)
        {
            fragment  = text.substring (lastCutPostion, position);
            //console.log(fragment);
            textWidth = context.measureText(fragment).width;
            //console.log(textWidth);
            if(textWidth > maxWidth)
            {
                //console.log("max width reched");
                fragment  = text.substring (lastCutPostion, lastPossibleCutPosition);
                //console.log(fragment);
                textArr.push(fragment);
                charCounter = -1 + (position - lastPossibleCutPosition);
                lastCutPostion = lastPossibleCutPosition + 1;
            }
            lastPossibleCutPosition = position;
        }
        position++;
        charCounter++;
    });
    //do not forget the last Word
    if(charCounter > 0)
    {
        fragment  = text.substring(lastCutPostion, text.length);
        textWidth = context.measureText(fragment).width;
        //console.log(textWidth);
        if(textWidth > maxWidth)
        {
            fragment  = text.substring (lastCutPostion, lastPossibleCutPosition);
            lastCutPostion = lastPossibleCutPosition + 1;
            textArr.push(fragment);
            fragment  = text.substring(lastCutPostion, text.length);
        }
        textArr.push(fragment);
    }
    return textArr;
}
Kategorien
HTML5 Web Frontend WebGL

Canvas rotieren um 180 Grad

Zum rotieren eines Canvas um den Mittelpunkt um 180 oder 90 Grad, kann man folgende Funktion benutzen.

90 Grad = nach rechts drehen

180 Grad = auf den Kopf stellen

270 Grad/ -90 Grad = nach Links drehen

 

var x = document.createElement("canvas");
 var context = x.getContext("2d");
 rotateCanvas(180, context)

 

rotateCanvas= function(degree, context)
{
    context.translate( canvasWidth, canvasHeight);
    context.rotate(degree* Math.PI / 180);
    context.translate(0, 0);
    return context;
}
Kategorien
C++ Xbox Kinect SDK

Cpp speichern und laden von Matrizen mittels Filestream Klasse

Eine Klasse zum Speichern von 4×4 Matrizen z.B: für Kinect Anwendungen. Die Klasse hat eine Kontrolle der gespeicherten Daten, für den Fall, dass etwas schief geht beim Speichern.

Kategorien
JavaScript Web Frontend

Javascript Text spliten in Array nach maximaler Zeichenlänge

Wenn man einen Text mit Javascript so teilen will, dass man eine bestimmte Zeichenlänge nicht überschreitet, kann man die folgende Funktion verwenden, die aus einem Text und einer Zeichenlänge ein Array zurückgibt:

Bsp:

textArr  = textToArray ("Wordpress eigene Farben und CSS Klassen in den Editor einbauen", 20);
//textArr enhält ["Wordpress Plugin"] und ["selber erstellen Tutorial"]
     textToArray = function(text, maxLineCharactersCount){
    var textArr = new Array();
    var fragment = "";
    var lastCutPostion = 0;
    var lastPossibleCutPosition = 0;
    var charCounter = 0;
    var position = 0;
    $j.each(text, function(index, char) {
        if(char == " " && charCounter != 0)
        {
            if(charCounter > maxLineCharactersCount)
            {
                //console.log(charCounter- (position - lastPossibleCutPosition));
                fragment  = text.substring (lastCutPostion, lastPossibleCutPosition);
                //console.log(fragment);
                textArr.push(fragment);
                charCounter = -1 + (position - lastPossibleCutPosition);
                lastCutPostion = lastPossibleCutPosition + 1;
            }
            lastPossibleCutPosition = position;
        }
        position++;
        charCounter++;
    });
    //do not forget the last Word
   if(charCounter > 0)
   {
       fragment  = text.substring(lastCutPostion, text.length);
       //console.log(textWidth);
       if(charCounter > maxLineCharactersCount)
       {
           fragment  = text.substring (lastCutPostion, lastPossibleCutPosition);
           lastCutPostion = lastPossibleCutPosition + 1;
           textArr.push(fragment);
           fragment  = text.substring(lastCutPostion, text.length);
       }
       textArr.push(fragment);
   }   
    return textArr;
}
Kategorien
HTML5 JavaScript WebGL

Three.js Camerasteuerung mit der Tastatur

Um mit der Tastatur (a,w,s,d und q,e und t,g,f,h) in einem three.js 3D-Projekt die Kamera zu bewegen, sind ein paar einfach Schritte nötig.

in der init-Methode

document.addEventListener( 'keypress', onDocumentKeyPress, false );

und eine einfache Methode

Kategorien
C C++

Terminal/Konsolen Befehl aus dem Programm aus starten

Mit folgender Funktion lassen sich Konsolen Befehle aus einem C++/C Programm aus starten:

#include <iomanip>
#include <iostream>
#include <cstdlib>

using namespace std;

bool startExternalProgramm(char* terminalCommando)
{    
    bool returnVal = false;
    if(terminalCommando != "")
    {
        cout << "Executing terminal command: " << terminalCommando << endl;
        int systemReturn = system(terminalCommando);
        
        if (systemReturn == 0)
        {
            returnVal = true;
        }
        else
        {
            cout << "The value returned from Terminal  was: " << systemReturn << endl;
            cout << "Sorry,commando for terminal not executable" << endl; 
        }
    }
    else
    {
        cout << "Sorry, empty commando for terminal" << endl;         
    }
    return returnVal;
        
}
Kategorien
C++

CSV Datei einlesen in Struct

Einlesen einer CSV Datei am Bsp. der magicNumbers.txt. Akademisch schlecht an dem Beispiel ist, das die beiden structs mit festem Längen ausgestattet sind. Der Speicher müsste dynamisch erzeugt werden mit realloc wie bei  der Variable magicNumbers.

magicNumbers.txt:
Adobe PDF;pdf;0x255044462d;evince %1
Postscript;ps;0x2521;evince %1
jpg, jpeg;jpg;0xffd8ffe0;gimp %1
header.h:

struct MagicNumbers
{
    char dateitTyp[20];
    char defaultExtension[4];
    char magicNumber[30];    
    char codeConsole[40];
};
struct MagicNumbersTableArray
{
    MagicNumbers magicNumbers[8];
};
MagicNumbersTableArray* readMagicNumbersFromFile(void);
file.cpp:

struct MagicNumbersTableArray* readMagicNumbersFromFile(void)
{

        char fileName[50] = MAGIC_FILE_NAME;

        FILE *file = NULL;
        struct MagicNumbers *magicNumbers = NULL;
        int x = 1;
        int i;

        file = fopen (fileName, "r");

        if (file == NULL)
        {
                cout << "Fehler beim Oeffnen von Datei: " << fileName << endl;
        }

        char line [500];
        fgets (line, sizeof(line) ,file );

        while(1)
        {

                magicNumbers = (struct MagicNumbers*) realloc(magicNumbers, x * sizeof(struct MagicNumbers));

                if(magicNumbers == NULL)
                {
                        cout << "Es konnte kein Speicher angelegt werden." << fileName << endl;
                }
                if(
                   fscanf(
                          file, "%[^;];%[^;];%[^;];%[^\n]\n", 
                          magicNumbers[x - 1].dateitTyp, 
                          magicNumbers[x - 1].defaultExtension, 
                          magicNumbers[x - 1].magicNumber, 
                          &magicNumbers[x - 1].codeConsole
                          ) == EOF)
                {
                        break;
                }
                x++;
        }
        struct MagicNumbersTableArray* magicNumbersTableArray = new MagicNumbersTableArray;
        for(i = 0; i < x - 1; i++)
        {
                printf("%s ,%s ,%s ,%s \n", 
                       magicNumbers[i].dateitTyp, 
                       magicNumbers[i].defaultExtension, 
                       magicNumbers[i].magicNumber, 
                       magicNumbers[i].codeConsole
                       );
                magicNumbersTableArray->magicNumbers[i] = magicNumbers[i];
        }
        free(magicNumbers);    
return magicNumbersTableArray;
}
Kategorien
C++

Hexadezimal nach Asci Konvertierung

Um eine Zeichenkette in hexadezimaler Form in den entsprechenden ASCI Wert umzuwandeln, kann man die folgende Funktion verwenden:

unsigned char hexToAsci(char firstChar, char secondChar)
{
        char hex[2];
        unsigned int asci;
        hex[0] = firstChar;
        hex[1] = secondChar;
        sscanf(hex,"%x",&asci);
        return (unsigned char) asci;
}

Bsp:

cout << hexToAsci("2", "5"); // ergibt "%", weil hex "25" <=> ASCI "%", siehe http://www.torsten-horn.de/techdocs/ascii.htm
Kategorien
Hardware Webdeveloper Tools

Der beste Laptop für Programmierer

Ich habe viele Freelancer Kollegen gefragt, welcher Laptop der beste für Programmierer sei und das Ergebnis war eindeutig:

Die beste Firma für Arbeits-Laptop für Programmierer ist Lenovo (IBM) nach Meinung von verschiedenen Freiberuflern.

Nach 2 Jahren Erfahrung mit dem Rechner bin ich zu der Erkenntnis gelangt, mir bald ein Apple MacBook Pro
zu kaufen und bin damit sehr zufrieden seit mehreren Jahren, aufgrund folgender Fakten:

  • sowohl Windows hat mein Thinpad sehr langsam mit der Zeit gemacht
  • der Sound ist sehr schlecht
  • die Akkuleistung beträgt effektiv etwas unter 3 Stunden
  • das Mainboard musste schon asugetauscht werden, ein USB Slot ist auch schon kaputt gegangen nach unter 2 Jahren – positiv war der sehr gute Service von Lenovo, der das Gerät beu mir zu hause repariert hat am nächsten Tag gleich

Der beste Laptop für Programmierer: Das Macbook Pro

  1. sehr schnell: 2,8 GHz Quad-Core Intel Core i7
  2. Akku bis zu 7h
  3. 16Gb Ram
  4. 1,8 Kilo leicht
  5. stabiles Betriebssystem Max OS
  6. Preis: teuer

Das Lenovo Thinkpad

  1. 3 Jahre Garantie, Laptop wird von zu hause abgeholt
  2. 140€ für eine Docking Station lohnen sich
  3. Laptop mit 17,5″ Display
  4. 500Gb schnelle SSD Festplatte
  5. 32Gb RAM
  6. Akku bis 10h
  7. sehr gut verarbeitetet
  8. Preis: teuer