Während dem arbeiten an einer Firefox Extension ist mir aufgefallen, dass keine fertige Funktion zum Schreiben bzw. erweitern / anhängen an Dateien zu finden ist. Generell scheint das Schreiben von Daten auf der Festplatte in Firefox Extensions etwas kompliziert gelöst zu sein. Hier ein kurzer Snippet zum Schreiben von Daten in eine Datei:

var writeFile = function(fileName, data) {
		var file = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("ProfD", Components.interfaces.nsIFile);  
		file.append(fileName);  
		var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
		// use 0x02 | 0x10 to open file for appending.
		foStream.init(file, 0x02 | 0x10 | 0x08, 00666, 0); // write(only), append, create file
		foStream.write(data, data.length);
		foStream.close();	
}
 
writeFile('Guten Morgen', '/tmp/xxx.txt');
no comments »
 

Primfaktorzerlegung ist die Darstellung einer natürlichen Zahl als Produkt aus Primzahlen (=Primfaktoren). Mehr darüber auf Wikipedia.

Primfaktorzerlegung / Primzahlen test

(das Ergebnis befindet sich unter der grauen Linie)

Lässt sich eine Zahl nicht in ihre Primfaktoren zerlegen handelt es sich um eine Primzahl. z.b.: 7 = 7

testen / zerlegen

no comments »
 

Vergessen das man beim Ausführen eines Befehls root sein musste? Super schnell lässt sich der zuletzt verwendete Befehl erneut ausführen mit:

~# sudo !!

Wenn sudo nicht verfügbar ist geht das Wiederholen des Kommandos auch mit su:

su -c "!!"
no comments »
 

Das einfache Verarbeiten von Inhalten auf Internetseiten in der node.js Umgebung ist bequem mit dem Modul cheerio möglich. Hierbei läd man die Webseite wie gewohnt mit einem der verfügbaren HTTP Module. Injiziert nun zusätzlich die jQuery Bibliothek und läd den DOM in das jQuery Module. Ab diesem Punkt ist es möglich auf alle Elemente der Internetseite mit den gewohnten jQuery Funktionen zu bearbeiten bzw. Inhalte zu extrahieren.

Das Beispielskript sollte copy & paste funktionieren. 🙂

#!/usr/bin/env node
'use strict';
 
var http = require('http');
var cheerio = require('cheerio');
 
// socket timeout
var myTimeout = 100;
 
// on error
var err = function(e) {
	console.log(e)  
}
 
// used to set socket timeout
var timeout = function(socket) {
    socket.setTimeout(myTimeout);  
    socket.on('timeout', function() {
        req.abort();
    });
}
 
var req = http.get({host: 'example.com', port: 80, path: '/'}, function(res) {
 
    var html = '';
 
    // executed if part of data comes in
    res.on('data', function(data) {    
    	html += data;
 
    // executed if all data received
    }).on('end', function() {
 
        // check HTTP status / errors   	
	 console.log(res.statusCode);
 
	// load jquery (cheerio) to your received HTML document
	var $ = cheerio.load(html);
 
	// *** JQUERY LIKE CODE ***	  
	// use code like in browser
	$('h1').each(function() {
	    console.log($(this).text());
	});
     });
}).on('error', err).on('socket', timeout);

Alternativ kann natürlich auch ein synchroner HTTP Client verwendet werden.

Vorher die Installation des cheerio Moduls in der Shell nicht vergessen:

npm install cheerio
no comments »
 

Ein kurzes Script um Benutzer aus einer Leerzeichen separierten Liste (siehe im Script CREATEUSER: user1 user2 userx) in MySQL zu importieren. Das Script speichert dabei Benutzer und das zufällig generierte Passwort 16 stellige Passwort in einer Log Datei (siehe im Script LOGFILE). Zusätzlich erstellt das Script eine Datenbank betitelt mit dem Benutzername. Für die erstellte Datenbank werden dem erstellten Benutzer außerdem alle Rechte garantiert.

Verwendung:

  • MySQL Login Daten eintragen
  • Benutzerliste
  • Logdatei eintragen (optional)
  • ausführen
#!/bin/sh
 
##
## <Configuration>
##
 
## MySQL login data
MYSQLUSER="root"
MYSQLPASS="MYSQLrootPassword"
MYSQLHOST="localhost"
 
## logfile
LOGFILE="/var/log/createmysqluser.log"
 
## mysql user to create
CREATEUSER="User1 User2"
 
##
## </Configuration>
##
 
for USER in ${CREATEUSER}; do
        PASSWORD=$(cat /dev/urandom | strings | grep -m 1 -oEi '[a-zA-Z0-9]{16}')
        echo "${USER} ${PASSWORD}" >> ${LOGFILE} 
        mysql -h $MYSQLHOST -u $MYSQLUSER -p$MYSQLPASS -e "CREATE USER ${USER}@'localhost' IDENTIFIED BY '${PASSWORD}';"
        mysql -h $MYSQLHOST -u $MYSQLUSER -p$MYSQLPASS -e "CREATE DATABASE ${USER};"
        mysql -h $MYSQLHOST -u $MYSQLUSER -p$MYSQLPASS -e "GRANT ALL PRIVILEGES ON ${USER}.* TO ${USER}@'localhost' WITH GRANT OPTION;"
done

Super praktisch wäre das Script, wenn es die MySQL Benutzer Liste über eine Datei einlesen würde. Macht es aber nicht. 🙂

no comments »
 

Meine aktuellen TOP 5 Firefox Webdesign Extensions. Natürlich alle Open Source.

User Agent Switcher

Der Name saget alles. Der User Agent Switcher ermöglicht das einfache und schnelle Ändern des User Agent Strings im Browser. Von Haus aus hat er Browserkennungen für Desktop- und Mobile-Browser im Gepäck.

Web Developer Toolbar

Die Web Developer Toolbar stellt eine Toolbar bereit in der vom Lineal bis hin zu Optionen von Caches, CSS, Bildern etc. alles dabei ist.

Firebug

Mit Firebug, wer kennt ihn nicht, lassen sich HTML Dokumente in echtzeit im Browser inspizieren und modifizieren. Zusätzlich verfügt Firebug über einen Javascript Debugger, ein HTTP-Anfragen Analyse Tool und vieles mehr.

CSS Usage

CSS Usage ist ein Firebug Plugin zum analysieren der CSS Verwendung. Hiermit kann auch überflüssiger CSS gefunden werden.

Poster

Poster ermöglicht es gemütlich über ein Formular beliebige POST Anfragen via Firefox an HTTP Server senden.

no comments »