C++Guns – RoboBlog blogging the bot

15.01.2013

Neidisch?

Filed under: Allgemein — Tags: — Thomas @ 20:01

htop

htop2

Ab morgen wird mit dem 1.3kW Netzteil die globale Erwärmung gefördert ;)

08.12.2012

Mehrere Object Files zusammenfassen

Filed under: Allgemein — Tags: , , — Thomas @ 13:12

Für eine .a lib:
ar -ru test.a 1.o 2.o

Für eine große .o Datei:
ld -r objectList -o destObject

28.10.2012

Cups + Brother HL2070

Filed under: Allgemein — Tags: — Thomas @ 20:10

Habe auf debian squeeze 64Bit gewechselt und mich jetzt eine Stunde mit dem Drucker rumgeschlagen.
Installiert werden muss das Packet cups-bsd und nicht lpr.
Die Brother Treiber wie auf deren Homepage installieren und dann zuätzlich ein paar Datein kopieren wie in[1] beschrieben.
Nicht vergessen auch die libbrcomplpr2.so nach /usr/lib32/ zu kopieren. Das macht deren Script nämlich nicht.

In CUPS hab ich diese Einstellung für den Drucker:
lpd://192.168.220.200/BINARY_P1

Ich hoffe das nächste mal dauert es nicht wieder 1.5 Stunde!

[1] http://welcome.solutions.brother.com/bsc/public_s/id/linux/en/faq_prn.html#f00081

06.10.2012

Installing gcc, g++ and gfortran 4.8 from source

Filed under: Allgemein — Tags: , , , — Thomas @ 16:10

First read http://gcc.gnu.org/install/
Make sure you have all Prerequisites installed!

Download all files to ~/opt/downloads
Install all packages to ~/opt/

Download gcc 4.8 from ftp://ftp.gwdg.de/pub/misc/gcc/snapshots/LATEST-4.8/ and unpack it.


wget ftp://ftp.gwdg.de/pub/misc/gcc/snapshots/LATEST-4.8/gcc-4.8-20120930.tar.bz2
tar xjf gcc-4.8-20120930.tar.bz2 
cd gcc-4.8-20120930

Download several necessary librarys into the gcc source directory and unpack them.
They will be built together with GCC.


wget ftp://ftp.gmplib.org/pub/gmp-5.0.5/gmp-5.0.5.tar.bz2
tar xjf gmp-5.0.5.tar.bz2
ln -s gmp-5.0.5 gmp

wget http://www.mpfr.org/mpfr-current/mpfr-3.1.1.tar.bz2
tar xjf mpfr-3.1.1.tar.bz2 
ln -s mpfr-3.1.1 mpfr

wget http://www.multiprecision.org/mpc/download/mpc-1.0.1.tar.gz
tar xzf mpc-1.0.1.tar.gz
ln -s mpc-1.0.1 mpc

Now configure and build


mkdir $HOME/opt/downloads/gcc-4.8-build
cd $HOME/opt/downloads/gcc-4.8-build
../gcc-4.8-20120930/configure --prefix=$HOME/opt/gcc-4.8 --enable-threads --enable-languages=c,c++,fortran
make
make install

Troubleshooting
/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory

These files are usually locates in /usr/lib32/ and/or /usr/lib/x86_64-linux-gnu/
Add this to your .bashrc


export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:$LIBRARY_PATH

23.08.2012

Farbige Konsolenausgabe

Filed under: Allgemein — Tags: , , — Thomas @ 09:08

Farbe in der Konsole ist nicht schwer.
Beispiele in C und Fortran:


#include < unistd.h >

void resetFont() {
    if (isatty (fileno (stdout)))
        std::cout << "\e[0m";
}

void setFontRed() {
    if (isatty (fileno (stdout)))
        std::cout << "\e[1;31m";
}

void setFontGreen() {
    if (isatty (fileno (stdout)))
        std::cout << "\e[32m";
}

subroutine resetFont()
  implicit none
  ! this stuff is to print an escape sequenz and omit a newline
  write(*,'(A)', advance='no') achar(27)//"[0m"
end subroutine

subroutine setFontRed()
  implicit none
  write(*,'(A)', advance='no') achar(27)//"[1;31m"
  end subroutine

subroutine setFontGreen()
  implicit none
  write(*,'(A)', advance='no') achar(27)//"[32m";
end subroutine

Da Fortran per default keine Escape Sequenzen interpretiert (man muss das per Compiler Flag einschalten), kann man die achar() Funktion nutzen. Sie wandelt ein Integer auch in nicht-druckbare ASCII Zeichen um.

Auf diese Weise kann man sich auch eine gotoxy() Funktion bauen.

05.07.2012

Skype 4.0 für Linux

Filed under: Allgemein — Tags: — Thomas @ 12:07

Wow eine neue Skype Version für Linux ist draussen. Und man kann die Schriftgröße immer noch nicht einstellen (wollt ihr das eigentlich irgendwann mal einbauen?). Danke Microsoft! Ich bin ja so begeistert, ich musste es mir sofort installieren.

http://www.heise.de/open/meldung/Skype-4-0-fuer-Linux-mit-neuem-Chat-Fenster-1618305.html

port forwarding with netcat

Filed under: Allgemein — Tags: — Thomas @ 11:07

Ziel ist es einfach einen Port weiterzuleiten. Nichts kompliziertes. Mit iptables kann man das angeblich mit zwei Befehlen machen. Angeblich. Es funktioniert nur irgendwie nicht. Und das obwohl ziemlich alle Anleitungen im Ine das selbe sagen.

Egal, netcat kanns auch. Vielleicht sogar besser, denn man braucht keine root Rechte.


$ nc -l -p 5110 -c "nc 127.0.0.1 22"
$ ssh -p 5110 localhost
kater@localhost's password:

08.06.2012

Linux RAM Verbrauch

Filed under: Allgemein — Tags: , — Thomas @ 07:06

Systemweit:
http://stackoverflow.com/questions/349889/how-do-you-determine-the-amount-of-linux-system-ram-in-c/350046#350046

   #include < sys/sysinfo.h >

   int sysinfo(struct sysinfo *info);

   struct sysinfo {
       long uptime;             /* Seconds since boot */
       unsigned long loads[3];  /* 1, 5, and 15 minute load averages */
       unsigned long totalram;  /* Total usable main memory size */
       unsigned long freeram;   /* Available memory size */
       unsigned long sharedram; /* Amount of shared memory */
       unsigned long bufferram; /* Memory used by buffers */
       unsigned long totalswap; /* Total swap space size */
       unsigned long freeswap;  /* swap space still available */
       unsigned short procs;    /* Number of current processes */
       unsigned long totalhigh; /* Total high memory size */
       unsigned long freehigh;  /* Available high memory size */
       unsigned int mem_unit;   /* Memory unit size in bytes */
       char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding for libc5 */
   };
 and the sizes are given as multiples of mem_unit bytes.

Prozess spezifisch:
http://stackoverflow.com/questions/669438/how-to-get-memory-usage-at-run-time-in-c/669476#669476

// getrusage.c
#include < stdio.h >
#include < proc/readproc.h >

int main() {
  struct proc_t usage;
  look_up_our_self(&usage);
  printf("usage: %lu\n", usage.vsize);
}

Compile with "gcc -o getrusage getrusage.c -lproc"

19.05.2012

Nochmal Linux + Canon Powershot SX 130

Filed under: Allgemein — Tags: , — Thomas @ 10:05

Ich hatte ja schon mal kurz gtkam erwähnt um an die Dateien der Kamera zu kommen. Siehe [1]
Nun ist es so, wenn man eine 2GB Datei (HD Videos) laden will, erst mal 2GB Speicher reserviert werden. Leider hat nicht jeder 2GB am Stück frei. Wenn man die Datei überhaupt laden kann, kann es sehr sehr lange dauern (SWAP).

Warum ist das so? Ich habe mich auf die Suche gemacht.
Erstmal den Code von gtkam angesehen. Shit, ist das ein Kraut und Rüben Salat. Da blickt ja kein Mensch durch. Alles nur hingeklatsch. Hauptsache die GUI ist benutzbar und stürzt nicht allzu oft ab. Warum wohl nutze ich wenn möglich Konsolenprogramme.

Aber das bringt auch nichts, wenn die dazugehörige lib (libgphoto2) genauso bescheuert aufgebaut, programmiert und rar dokumentiert ist. Sicher, das ist alles kompliziert und so. Aber genau deswegen sollte man seine Sache gut machen.

Wir sind uns sicher einig, dass das Schreiber einer GUI längst nicht so kompliziert ist, als eine Kamera über USB anzuzapfen, wenn man keine Doku hat wie das geht. Genauso spiegelt sich das auch im Code wird. Der GUI Teil ist miserabel. Aber die Codezeilen, die direkt mit der Kamera reden, die sind gut.
Ein Lob an die Programmierer der Dateien libgphoto2-2.4.14/camlibs/canon/* Es gibt wohl kaum etwas komplizierteres als einer Kamera eine Handvoll Bytes vorzuwerfen, und sie liefert einem die gewünschten Daten.
Auch wenn ich mir nicht mal die Mühe gemacht habe den Code gut nachzuvollziehen, ich habe sofort gesehen wo mein Problem mit dem RAM ist. Und es ist sogar dokumentiert!

usb.c Zeile 1715

...
 * It calls #canon_usb_dialogue(), if it gets a good response it will malloc()
 * memory and read the entire returned data into this malloc'd memory and store
 * a pointer to the malloc'd memory in 'data'
...

...
while (bytes_received < total_data_size) {
...
bytes_read = gp_port_read (camera->port, (char *)*data + bytes_received, read_bytes);

So wie ich das sehe ist es sehr wohl möglich die Daten stückweise von der Kamera zu bekommen. Man hat die Möglichkeit einfach nur nicht vorgesehen.
Es ist nicht so einfach diese Funktion durch all die Abstraktionsebenen durchzuschleusen. Der Kamera spezifische Code muss es können. Dann die Lib. Und die GUI... die nicht.

Aber das nachträglich einzubauen halte ich für unmöglich. Man muss ja ALLES umbauen. Nun, niemand trifft die Schuld. Als man die ersten Codezeilen vor 10 Jahren oder so geschrieben hat, da hat man nicht dran gedacht. Man kann ja nicht an alles denken. Aber sein Code so zu strukturieren, dass nachträgliche Änderungen leicht möglich sind, das ist wohl erst in den letzten Jahren in Mode gekommen. Obwohl.. ich glaube nicht.

[1] http://roboblog.fatal-fury.de/?p=1220

08.05.2012

Eclipse Code ausdrucken

Filed under: Allgemein — Tags: , , — Thomas @ 17:05

Da die Print Möglichkeiten aus Eclipse heraus ziemlich bescheiden sind, habe ich mal etwas gesucht und das gefunden[1] :

a2ps --verbose --landscape --columns=2 --rows=1 --line-numbers=5 --tabsize=2 --pretty-print \
--highlight-level=normal --sides=duplex --pro=color FILENAME

[1] http://stackoverflow.com/questions/252975/how-to-print-out-code

« Newer PostsOlder Posts »

Powered by WordPress