LaTeX: File `floatflt.sty’ not found

Wer in LaTeX die Floating Umgebung nutzen will, wird unter Ubuntu auf ein Problem stoßen. Die benötigte Datei floatflt.sty ist nicht mehr vorhanden. Um diese nachzuinstallieren sind ein paar Schritte erforderlich:

sudo mkdir -p /usr/share/texmf-texlive/tex/latex/floatflt
cd /usr/share/texmf-texlive/tex/latex/floatflt
sudo wget http://mirror.ctan.org/macros/latex/contrib/floatflt/floatflt.ins
sudo wget http://mirror.ctan.org/macros/latex/contrib/floatflt/floatflt.dtx
sudo latex floatflt.ins
sudo texhash /usr/share/texmf-texlive

Anschließend kann man das Packet wie gewohnt mit \usepackage{floatflt} einbinden und benutzen.

Welche Ubuntu Version habe ich?

Wenn ihr euch unsicher seid, welche Ubuntu Version ihr gerade im Einsatz habt könnt ihr einfach im Terminal cat /etc/lsb-release eingeben. Die Ausgabe könnte dann so aussehen:

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=11.10
DISTRIB_CODENAME=oneiric
DISTRIB_DESCRIPTION=”Ubuntu 11.10″

Angry Nerds

Nelson spielt am liebsten “Angry Nerds”

Verschlüsselte E-Mail

Wer möchte, kann uns nun verschlüsselte E-Mails schicken. Wir haben unsere public Keys (PGP) eingepflegt.

Uptime in C

Hier mal ein kleines Programm in C mit dem man die aktuelle Uptime von seinem Rechner/Server abfragen kann. Das Ergebnis ist die Laufzeit in Sekunden.

uptime.c

#include <sys/sysinfo.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
     struct sysinfo si;
     if(sysinfo(&amp;si) == 0)
         printf("Uptime: %ld",si.uptime);
     else
         printf("ERROR");
}

Lighttpd Konfiguration überprüfen

Es hat sich nicht bewährt in Produktivsystemen den Webserver einfach  neuzustarten und im Nachhinein die Log-Daten nach möglichen Fehlern zu durchforsten. Daher bietet Lighttpd ein nützliches Feature, was es ermöglicht Konfigurationen im Vorfeld zu überprüfen.

lighttpd -t -f /etc/lighttpd/conf-available/beispiel.conf 

Ermöglicht eine Prüfung der angegebenen Konfigurations-Datei vor einem Neustart. Pfade können je nach Installationsort und eingesetzter Linux Distribution variieren. Getestet habe ich das auf einem Debian Server.

Numpad reagiert nicht

Beim Arbeiten kann es natürlich vorkommen, dass man auch mal eine falsche Tastenkombination drückt. Solltet ihr mal das Problem haben, dass euer Numpad keine Zahlen mehr schreibt obwohl die NumLock-LED leuchtet, dann habt ihr vermutlich die Steuerung der Maus über die Tastatur aktiviert. Dies lässt sich einfach mit der Tastenkombination [STRG] + [SHIFT] + [NUMLOCK] deaktivieren, danach stehen euch alle Zahlen wieder zur Verfügung.

Linksys WRT54GL original Firmware zurück flashen

Ich hatte gestern Abend die zweifelhafte Ehre auf einem ausgedienten WRT54GL 1.1 aus dem Hause Linksys bzw. Cisco die original Firmware zurück zu flashen. Nachdem ich zwischenzeitlich im Besitz von bis zu 6 dieser AccessPoints war, die alle mit OpenWRT ausgestattet wurden. Eigentlich hatte ich mir das einfacher vorgestellt, als es im Grunde war. Ich habe von Cisco die originale Firmware heruntergeladen (hier zu finden) und versuchte sie im Webinterface von OpenWRT hoch zu laden. Das ganze wurde mir aber leider mit einer Fehlermeldung quittiert. Gar nicht so schön.

Wenn man die Firmware auf diese Art und Weise zurück flashen möchte, braucht man einen HEX-Editor und die passende original Firmware (unbedingt sicher gehen!). Man öffnet die Datei mit dem HEX-Editor und löscht die ersten 32 bytes (in diesem Fall der störende Header). Anschließend kann man die Datei problemlos im Webinterface hochladen und das Gerät anschließend flashen.

IRC c – Library

Da ich keine passende Library gefunden haben, für das was ich vorhatte, habe ich selber eine entworfen. Falls andere auch etwas ähnliches benötigen veröffentliche ich sie hier unter BEER-WARE LICENSE.

Funktionen:

  • Mit Server verbinden
  • Auf Ping antworten
  • Empfangene Zeilen an Callback-Funktion übergeben
  • Channel joinen
  • Channel verlassen
  • Texte/Befehle senden

irclib.h

/*
* ----------------------------------------------------------------------------
 * "THE BEER-WARE LICENSE" (Revision 42):
 * <l3akage@martinpoppen.de> wrote this file. As long as you retain this notice you
 * can do whatever you want with this stuff. If we meet some day, and you think
 * this stuff is worth it, you can buy me a beer in return Martin Poppen
 * ----------------------------------------------------------------------------
 */

#ifndef IRCLIB_H
 #define IRCLIB_H

#include <stdarg.h>
 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <netdb.h>
 #include <sys/types.h>
 #include <sys/socket.h>

#define DELAY 1
 #define RETRIES 3
 #define MAXSENDBUFFER 1024
 #define MAXRECVBUFFER 1024

// define for some output
 #undef DEBUG

void do_send(int socket, char *cmd, ...);
 int do_connect(char *host, char *port, char *nick, char *user, char *channel);
 int do_recv(int conn, void (*writeData)(char* data));
 void do_join(int conn, char* channel);
 void do_part(int conn, char* channel);
#endif

irclib.c

/*
 * ----------------------------------------------------------------------------
 * "THE BEER-WARE LICENSE" (Revision 42):
 * <l3akage@martinpoppen.de> wrote this file. As long as you retain this notice you
 * can do whatever you want with this stuff. If we meet some day, and you think
 * this stuff is worth it, you can buy me a beer in return Martin Poppen
 * ----------------------------------------------------------------------------
 */

#include "irclib.h"

// send some stuff
// format like printf
// needs socket
void do_send(int socket, char *cmd, ...) {
 char sbuf[MAXSENDBUFFER];
 va_list ap;
 va_start(ap, cmd);
 vsnprintf(sbuf, MAXSENDBUFFER, cmd, ap);
 va_end(ap);

#ifdef DEBUG
 printf("SEND: %s\n", sbuf);
 #endif
 // send it
 write(socket, sbuf, strlen(sbuf));
}

// connect to server
// needs:
// host irc.test.de
// port 6667
// nick botibot
// user botibot
// channel #test
int do_connect(char *host, char *port, char *nick, char *user, char *channel) {
 int conn;
 int retries = RETRIES;
 struct addrinfo hints;
 struct addrinfo *res;

memset(&hints, 0, sizeof hints);
	do {
		hints.ai_family = AF_INET;
		hints.ai_socktype = SOCK_STREAM;

		if(getaddrinfo(host, port, &hints, &res)) {
			sleep(DELAY);
			continue;
		}
		if((conn = socket(res->ai_family, res->ai_socktype, res->ai_protocol))<0) {
			sleep(DELAY);
			continue;
		}
		if((connect(conn, res->ai_addr, res->ai_addrlen))<0) {
			sleep(DELAY);
			continue;
		}
		break;
	} while (retries-->0);

	// if connected register with user and nick
	if(retries>0) {
		do_send(conn, "USER %s 0 0 :%s\r\n", user, user);
		do_send(conn, "NICK %s\r\n", nick);

		do_join(conn,channel);

		return conn;
	}else{
		return -1;
	}
}

// receive data
// answer on pint
// send every line to callback function
int do_recv(int conn, void (*writeData)(char* data)) {
	char rbuf[MAXRECVBUFFER];
	char *tmpbuf = malloc(sizeof(char));
	     tmpbuf[0] = '&#092;&#048;';
	char line[MAXRECVBUFFER+1];
	int answerlen, i;
	int linelen;

	// reads date until error
	while((answerlen = recv(conn, rbuf, MAXRECVBUFFER, 0))) {
		linelen = -1;
		rbuf[answerlen] = '&#092;&#048;';
		#ifdef DEBUG
			printf("RECV: %s\n",rbuf);
		#endif
		tmpbuf = realloc(tmpbuf, strlen(rbuf)+strlen(tmpbuf)+1);
		strcat(tmpbuf, rbuf);
		for(i=0;i<strlen(tmpbuf); i++) {
			linelen++;
			line[linelen] = tmpbuf[i];
			// line should end with \r\n
			if(i>0 && tmpbuf[i-1] == '\r' && tmpbuf[i] == '\n') {
				line[linelen-1] = '&#092;&#048;';
				// Ping? Pong!
				if(!strncmp(rbuf, "PING", 4)) {
					rbuf[1] = 'O';
					do_send(conn, rbuf);
				} else {
					writeData(line);
				}
				linelen = -1;
			}
		}
		line[linelen+1] = '&#092;&#048;';
		tmpbuf = realloc(tmpbuf, strlen(line)+1);
		// write incomplete lines to buffer
		memcpy(tmpbuf, line, strlen(line)+1);
		rbuf[0]='&#092;&#048;';
		line[0]='&#092;&#048;';
	}
	return -1;
}

// join channel
void do_join(int conn, char* channel) {
	do_send(conn, "JOIN :%s\r\n", channel);
}

// leave channel
void do_part(int conn, char* channel) {
        do_send(conn, "PART :%s\r\n", channel);
}

Ein Beispiel – example.c

/*
 * ----------------------------------------------------------------------------
 * "THE BEER-WARE LICENSE" (Revision 42):
 * <l3akage@martinpoppen.de> wrote this file. As long as you retain this notice you
 * can do whatever you want with this stuff. If we meet some day, and you think
 * this stuff is worth it, you can buy me a beer in return Martin Poppen
 * ----------------------------------------------------------------------------
 */

#include "irclib.h"
#include <stdio.h>

void printData(char *data) {
	printf("Line: %s\n",data);
}

int main(void ){
	int reconnects = 3;
	do{
		int connection = do_connect("irc.test.de", "6667", "botibot", "botibot", "#test");
		do_recv(connection, printData);
	}while(reconnects-->0);
	return 0;
}

Fragen, Verbesserungen, Kritik .. sind natürlich gerne gesehen und erwünscht.

Zombie Survival Sheet

Vielleicht passt es nicht ganz zum Thema des Blogs, aber ich habe von Tim, dem Betreiber vom Zombie-Blog, ein Stöckchen zugespielt bekommen. Es geht darum ein Zombie Survival Sheet auszufüllen und kurz zu erklären warum man die einzelnen Elemente gewählt hat.

Hiermit rufe ich auch alle anderen auf, das Stöckchen aufzunehmen und sich zu beteiligen, gerne auch als Kommentar. Die Vorlage findet ihr hier.

Hier also mein ausgefülltes Exemplar:

Kleidung:

Als Bekleidung habe ich mich für stabile Wanderstiefel, einer leichten Hose und einer Feldjacke entschieden. Außerdem für eine Schutzbrille die auch auch als Sonnenbrille dient. Der Hut ist eher zum Spaß gedacht, sollte es mal hoch her gehen, wird er sicher als erstes auf der Strecke bleiben.

Zusätzliche werde ich ein CB-Funkgerät tragen, um mit eventuellen anderen Überlebenden zu kommunizieren.

Waffen:

Für den Nahkampf würde ich eine Machete wählen, dieses Model ist gleichzeitig eine Säge. Somit kann man mit nur einer Waffe Sägen, Hacken und Schneiden, weswegen man dann keine anderen Werkzeuge hierfür benötigt. Als Sekundär Waffe würde ich dann die Walther P99 und als Primär Waffe die P90. Beides leichte Waffen mit denen man im Kampf noch sehr wendig ist.

Im Rucksack:

In meinem Rucksack (55l) würde ich ein Feuerstahl, Feldbesteck, Taschenlampe, Schlafsack, Fernglas und eine Erste-Hilfe-Kasten mit mir rumtragen. Feuerstahl eignet sich super um auch bei Nässe noch ein Feuer in Gang zu bekommen. Das Fernglas besitzt außerdem einen integrierten IR-Strahler um auch bei Nacht noch alle Zombies zu entdecken.

Rückzugsort:

Das abgebildete Haus ist hier genauer erklärt. Das Grundstück ist von einer Mauer umzogen, sollten die Zombies diese überwinden, verwandelt sich das Haus in einen Bunker. Diesen kann man dann über das Dach und einer Brücke wieder verlassen.

Sidekick:

Als Sidekick wähle ich Woody Harrelson aka Tallahassee aus Zombieland. Hier hat er eindeutig seine Fähigkeiten auch gegen große Horden von Zombies bewiesen.

Sonstiges:

Bei Kampfschrei habe ich nichts eingetragen, da dieser sicher nur andere Zombies anlocken würde.

Ansonsten fehlen noch sehr viel mehr Fächer für den Rucksack, denn es fehlen noch wichtige Dinge wie Rationen, Werkzeug, Fakeln ….

Alles in Allem denke ich aber, ich habe eine gute Auswahl getroffen.