Tag Archives: hts

Android Dosenfischer

Screencasts direkt vom Android

In diesem kleinen HowTo möchte ich kurz zeigen, wie man Screencasts von seinem Android erstellen kann.


1.) “droid VNC server”-App installieren

Bevor wir das besagt App über den Market installieren können, müssen wir das Smartphone rooten, dass heißt uns vollen Zugriff auf das Gerät verschaffen. (z.B. für Samsung Spica: Android 2.2 Froyo (CyanogenMod))


2.) per ADB einen Port weiterleiten

Wie die “Android Debug Bidge” im allgemeinen funktioniert habe ich bereis in einem anderem Blog-Post erwähnt -> Android Debug Bridge (adb) – HowTo

In diesem Fall rufen wir folgenden Befehl auf, um einen TCP-Port von Andoid direkt mir einem TCP-Port von unserm Betriebssystem zu verbinden.


adb forward tcp:5901 tcp:5901


weite Infos findest du hier -> developer.android.com/guide/developing/tools/adb.html#forwardports


3.) VNC-Viewer + CamStudio installieren (für Windows)

Nun müssen wir uns nur noch einen VNC-Programm und ein Bildschirm-Recorder installieren, ich habe mich z.B. für “RealVNC Viewer” und “CamStudio” entschieden. Besonders schön finde ich, dass man sein Android auch per VNC steuern kann und so während des Aufnahme das Smartphone gar nicht in die Hand nehmen muss… :-)


Demo:

C-Programm – Matrix-Addition

Mit diesen kleinen Programmen kann man Matrix-Addition durchführen, indem die Werte der Matrizen jeweils zusammengerechnet werden. In dem zweiten Programm habe ich mit Funktionen und Pointeren gearbeitet.

/*
 ============================================================================
 Name        : matrix-addition_1.c
 Author      : Voku
 Version     : 1.0
 Description : Matrix-Addition
 ============================================================================
 */

#include <stdio.h>
#define MAX_ZEILEN 10
#define MAX_SPALTEN 10

int main (void) {
	int index_zeile, zeile, index_spalte, spalte;
	double array_a[MAX_ZEILEN][MAX_SPALTEN], array_b[MAX_ZEILEN][MAX_SPALTEN], array_c[MAX_ZEILEN][MAX_SPALTEN];

	// Anzahl der Zeilen einlesen
	do {
		printf("Anzahl der Zeilen (1-%i): ",MAX_ZEILEN);
		scanf("%i",&zeile);
		if (zeile > MAX_ZEILEN ) {
			printf("\n zu viel Zeilen...\n\n");
		} else if (zeile < 1) {
			printf("\n zu wenig Zeilen...\n\n");
		}
	} while (zeile > MAX_ZEILEN || zeile < 1);
	printf("\n");
	// Anzahl der Spalten einlesen
	do {
		printf("Anzahl der Spalten (1-%i): ",MAX_SPALTEN);
		scanf("%i",&spalte);
		if (spalte > MAX_SPALTEN ) {
			printf("\n zu viel Spalten...\n\n");
		} else if (zeile < 1) {
			printf("\n zu wenig Spalten...\n\n");
		}
	} while (spalte > MAX_SPALTEN || spalte < 1);
	printf("\n");

	// Werte fuer Matrize 1 einlesen
	for (index_zeile=0; index_zeile < zeile; index_zeile++) {
		for ( index_spalte=0; index_spalte < spalte; index_spalte++) {
  			printf("Wert fuer Zeile %i und Spalte %i (Matrize 1) eingeben: ",index_zeile+1, index_spalte+1);
        		scanf("%lf",&array_a[index_zeile][index_spalte]);
    		}
    	}
	printf("\n");
    	// Werte fuer Matrize 2 einlesen
    	for (index_zeile=0; index_zeile < zeile; index_zeile++) {
    		for ( index_spalte=0; index_spalte < spalte; index_spalte++) {
    			printf("Wert fuer Zeile %i und Spalte %i (Matrize 2) eingeben: ",index_zeile+1, index_spalte+1);
        		scanf("%lf",&array_b[index_zeile][index_spalte]);
    		}
    	}

	// Array A und B addieren und in Array C schreiben
	for (index_zeile=0; index_zeile < zeile; index_zeile++) {
    		for ( index_spalte=0; index_spalte < spalte; index_spalte++) {
        		array_c[index_zeile][index_spalte]=array_a[index_zeile][index_spalte]+array_b[index_zeile][index_spalte];
    		}
	}

	// Ausgabe
	for (index_zeile=0; index_zeile < zeile; index_zeile++) {
		printf("\n (");
    		for ( index_spalte=0; index_spalte < spalte; index_spalte++) {
        		printf(" %.2lf", array_a[index_zeile][index_spalte]);
        	}
		printf(" ) ");
	}
	printf("\n\n +\n");
	for (index_zeile=0; index_zeile < zeile; index_zeile++) {
		printf("\n (");
    		for ( index_spalte=0; index_spalte < spalte; index_spalte++) {
			printf(" %.2lf", array_b[index_zeile][index_spalte]);
		}
		printf(" ) ");
	}
	printf("\n\n =\n");
	for (index_zeile=0; index_zeile < zeile; index_zeile++) {
		printf("\n (");
    		for ( index_spalte=0; index_spalte < spalte; index_spalte++) {
			printf(" %.2lf", array_c[index_zeile][index_spalte]);
    		}
		printf(" ) ");
	}

	return 0;
}
/*
 ============================================================================
 Name        : matrix-addition_2.c
 Author      : Voku
 Version     : 1.0
 Description : Matrix-Addition mit Funktionen (+Pointer)
 ============================================================================
 */

#include <stdio.h>
#define MAX_ZEILEN 10
#define MAX_SPALTEN 10

void matrix_addition (double *array_a, double *array_b, double *array_c, int zeile, int spalte) {
	int index_zeile, index_spalte;
	// printf("*array_a %lf\n*array_b %lf\n*array_c %lf\n", *array_a, *array_b, *array_c); // TEST-Ausgabe
	for(index_zeile=0; index_zeile < zeile; index_zeile++) {
		for(index_spalte=0; index_spalte < spalte; index_spalte++) {
			*(array_c + (index_zeile * spalte) + index_spalte) = *(array_a + (index_zeile * spalte) + index_spalte) + *(array_b + (index_zeile * spalte) + index_spalte);
		}
		printf("\n");
	}
}

void matrix_ausgabe (double *matrix, int zeile, int spalte) {
	int index_zeile, index_spalte;
	// printf("*matrix %lf", *matrix); // TEST-Ausgabe
	printf("\n\n");
	for(index_zeile=0; index_zeile < zeile; index_zeile++) {
		for(index_spalte=0; index_spalte < spalte; index_spalte++) {
			printf(" %.2lf", *(matrix + (index_zeile * spalte) + index_spalte));
		}
		printf("\n");
	}
}

int main (void) {
	int index_zeile, zeile, index_spalte, spalte;

	// Anzahl der Zeilen einlesen
	do {
		printf("Anzahl der Zeilen (1-%i): ",MAX_ZEILEN);
		scanf("%i",&zeile);
		if (zeile > MAX_ZEILEN ) {
			printf("\n zu viel Zeilen...\n\n");
		} else if (zeile < 1) {
			printf("\n zu wenig Zeilen...\n\n");
		}
	} while (zeile > MAX_ZEILEN || zeile < 1);
	printf("\n");
	// Anzahl der Spalten einlesen
	do {
		printf("Anzahl der Spalten (1-%i): ",MAX_SPALTEN);
		scanf("%i",&spalte);
		if (spalte > MAX_SPALTEN ) {
			printf("\n zu viel Spalten...\n\n");
		} else if (zeile < 1) {
			printf("\n zu wenig Spalten...\n\n");
		}
	} while (spalte > MAX_SPALTEN || spalte < 1);
	printf("\n");

	double array_a[zeile][spalte], array_b[zeile][spalte], array_c[zeile][spalte];

	// Werte fuer Matrize 1 einlesen
	for (index_zeile=0; index_zeile < zeile; index_zeile++) {
		for ( index_spalte=0; index_spalte < spalte; index_spalte++) {
    			printf("Wert fuer Zeile %i und Spalte %i (Matrize 1) eingeben: ",index_zeile+1, index_spalte+1);
        		scanf("%lf",&array_a[index_zeile][index_spalte]);
    		}
	}
    	printf("\n");
    	// Werte fuer Matrize 2 einlesen
    	for (index_zeile=0; index_zeile < zeile; index_zeile++) {
    		for ( index_spalte=0; index_spalte < spalte; index_spalte++) {
    			printf("Wert fuer Zeile %i und Spalte %i (Matrize 2) eingeben: ",index_zeile+1, index_spalte+1);
        		scanf("%lf",&array_b[index_zeile][index_spalte]);
    		}
	}

	// printf("zeile + spalta: %i, %i", zeile, spalte); // TEST-Ausgabe

	// Array A und B addieren und in Array C schreiben
	matrix_addition(&array_a[0][0], &array_b[0][0], &array_c[0][0], zeile, spalte);

	// Ausgabe
	matrix_ausgabe(&array_a[0][0], zeile, spalte);
	printf("\n +");
	matrix_ausgabe(&array_b[0][0], zeile, spalte);
	printf("\n =");
	matrix_ausgabe(&array_c[0][0], zeile, spalte);

	return 0;
}

PHP optimieren

Zurück zur “Webseiten beschleunigen” – Übersicht

6.) PHP optimieren/caching

 

6.1) PHP-Daten zwischenspeichern

Im folgenden Blog-Eintag habe ich bereits den Vorteil dargestellt, wenn man php-Daten zwischenspeichert.

-> APC + eAccelerator + XCache <-

 

6.2) SQL-Abfrage mittels PHP zwischenspeichern

Man kann auch verschiedene Caching-Methoden miteinander kombinieren, so habe ich z.B. Zeitweise auf dieser Webseite sowohl eAccelerator als auch “memcached + php5-memcache” eingesetzt, jedoch war der Speicherverbrauch nicht für einen kleinen V-Server ausgelegt.

Distributed memory caching system, was bedeutet, dass als Speichersystem auch mehrere Rechner verwendet werden können, ursprünglich wurde memcache für Livejournal entwickelt.

Um mittels memcachd Daten direkt in den Arbeitsspeicher auszulagern, muss man als ersteres folgende Pakete installieren. – Debian/Ubuntu HowTo

sudo bash
aptitude install memcached
aptitude install php5-memcache

hier meine Konfigurationsdatei vom MemCache-Daemon

cat /etc/memcached.conf

## Daemon
-d

## das Logfile
logfile /var/log/memcached.log

## Ausgaben ins Log schreiben
# -v

## mehr Ausgaben ins Log schreiben
# -vv

## zur Verfügung stehende Arbeitsspeicher
-m 50

# Port
-p 11211

## User-Rechte
-u www-data

## Interface/IP
-l 127.0.0.1

/etc/init.d/apache2  restart

Nun können wir bereits Daten direkt von PHP in den Speicher schieben.

 

Beispiel:

Im folgenden Beispiel werden die Ergebnisse einer SQL-Abfrage direkt in den Speicher geladen

<?php
$mc = memcache_pconnect('127.0.0.1', 11211);
$query = "SELECT n.*, u.user_id, u.user_name,[...]
$ergebnis = memcache_get($mc, $id);
if(!$ergebnis) {
$sql->db_Select_gen($query);
$newsList = $sql->db_getList();
$ttl = 3600;
memcache_set($mc, $id, $newsList, MEMCACHE_COMPRESSED, $ttl);
}
foreach($newsList as $row)
{ [.........]
?>

 

Links:
memcached.org
php.net/memcache

 

6.3) PHP-Module deaktivieren

Ggf. kann man auch noch einige PHP-Erweiterungen abschalten, um den Speicherverbrauch von PHP zu verringern und dies somit zu beschleunigen.

ls /etc/php5/conf.d/

meine aktuell aktivierten Erweiterungen:

  • curl.ini
  • gd.ini
  • mcrypt.ini
  • mysql.ini
  • mysqli.ini
  • suhosin.ini
  • xcache.ini
Man sollte natürlich beachten, welche PHP-Anwendungen man auf seiner Webseite installiert hat bzw. möchte und dessen Abhängigkeiten.

 

6.4) php.ini (Konfiguration) optimieren

Als erstes müssen wir klären, welche Datei geändert werden muss, um die Konfiguration von PHP wirklich zu ändern, dafür nutzen wir am einfachsten eine php_info.php – Datei, welche im Webverzeichnis abgelegt wird und direkt über den Browser aufgerufen wird.

vim php_info.php
<?php
phpinfo();
?>

Bei mir wird angezeigt, dass die Konfigurationsdatei an folgender Stelle editiert werden muss.

vim /etc/php5/apache2/php.ini

 

  • register_argc_argv = Off

 

Diese Einstellung ist nur nützlich, wenn man PHP über die Kommandozeile aufruft und dort Parameter mitgeben möchte, ansonsten aus.

 

  • always_populate_raw_post_data = Off

 

Da ich diese Funktion nicht nutze hab ich diese deaktiviert, sollte man einfach mal ausprobieren…

 

… die meisten Einstellung an PHP muss man jedoch, genauso wie die meisten Einstellungen an eine bestimmte Situation anpassen!