Thursday, May 19, 2016

Extract pictures from a mbs/mbox export

If you're using a mail client that can export its mails to a mbs or mbox format; like Opera or Thunderbird; and you want to parse these mails; for example to extract all pictures or any other operation, you can follow this approach using a formail and PHP.

Firstly you'll need to split the mbox archive to separate all the email as we'll use PHP to parse it and you're going to explode all the memory and timeout settings if you parse it in one go.

The command to do that is:

#cat Inbox.mbs | formail -ds sh -c 'cat > extra/msg.$FILENO'

This will generate a separate file for each email (msg.XXX) in a separate directory (extra).

Then you can use PHP and the mime_parser class (download it here mime_parser.php, rfc822_addresses.php.html ) to iterate other all these files and extract the picture (or other attachments).
 // get the mails in separated files with
//cat Inbox.mbs | formail -ds sh -c 'cat > extra/msg.$FILENO'

$mail_dirs = array("extra");

function dirToArray($dir)
   $result = array();

   $cdir = scandir($dir);
   foreach ($cdir as $key => $value)
      if (!in_array($value,array(".","..",".DS_Store")))
         if (is_dir($dir . DIRECTORY_SEPARATOR . $value))
            $result[$value] = dirToArray($dir . DIRECTORY_SEPARATOR . $value);
            $result[] = $value;
   return $result;

$mime=new mime_parser_class;
$mime->ignore_syntax_errors = 1;

foreach($mail_dirs as $mail_dir)
    $files = dirToArray($mail_dir);
    foreach($files as $file)
        echo "doing:". $mail_dir.'/'.$file . "\n";
        $fd = fopen($mail_dir.'/'.$file, "r");
        $email = "";
        while (!feof($fd))
            $email .= fread($fd, 1024);


        $mime->Decode($parameters, $decoded);
        $file_name = "";
        foreach($decoded[0]['Parts'] as $part)
            //EVENT TIME: 2015-12-15,08:18:40
            if(preg_match('/text\/plain/', $part['Headers']['content-type:']))
                echo "TEXT\n";
                preg_match('/EVENT TIME: (.+)\n/', $part['Body'], $matches);
                //$file_name = mb_ereg_replace("([^\w\s\d\-_~,;\[\]\(\).])", '', $matches[1]);
                $file_name = mb_ereg_replace(":", '-', $matches[1]);
                $file_name = mb_ereg_replace(",", '_', $file_name);
                echo $file_name . "\n";
            if(preg_match('/image\/jpeg/', $part['Headers']['content-type:']))
                echo "IMAGE\n";
                preg_match('/(.)\.jpg/', $part['FileName'], $matches);
                file_put_contents('extracted/'.$file_name.'_'.$matches[1].'.jpg', $part['Body']);

echo "ALL END\n";


In these case I'm using the message content to extract information about the pictures, to rename them as they all have the same name and save them in a separate folder (extracted).

Sunday, January 10, 2016

Flash a Galaxy Note 3 with CyanogenMod

  1. Root your device, first try the kingoapp app, here You'll need a Windows desktop. If this does not work go to, find your device and look under rooting. Alternatively use towel root app.

  2. Find your N9005 devices codename, not the model number. You're likely to be good using Unified (htlte). It worked with a n9005ZHUENH4.
  3. Install a recovery, get the rashr app from google play, select your devices codename and choose which recovery you want, I recommend TWRP
  4. Download CM, go to Select your codename, then click the build you want, for 5.0 Lollipop, its cm 12 , and for KitKat cm 11.
  5. Download essential Google apps here and decide which package you want (full, mini, micro, nano).
  6. Store CM and gapps zips somewhere you can remember in sdcard.
  7. Reboot to recovery (hold home + volume up buttons). Backup, select backup and follow the instructions to confirm.
  8. Wipe, select wipe and follow the instructions to confirm.
  9. Flash CM, select install, select zip from sdcard, find the cm zip and follow the instructions to confirm.
  10. Flash gapps, select install, select zip from sdcard, find the gapps zip and follow the instructions to confirm.
  11. Reboot.
  12. Voila!

Thursday, December 10, 2015

GCC on Tru64

Follow the instructions from Babak Salamat, here:

Alternatively, before starting to download and install gcc, you need GMP and MPFR if you want to enable Fortran language.
If you don't need Fortran, you can skip the installation of GMP and MPFR.
To download and install GMP follow these steps:
  1. Download GMP from
  2. copy the file to /tmp and uncompress it there. Let's assume that the extracted files are in /tmp/gmp-4.2.1
  3. cd /tmp/gmp-4.2.1
  4. ./configure --prefix=$HOME/progs/gmp
  5. make
  6. make check
    Check the messages and make sure that no test failed.
  7. make install
Now you can download and install MPFR.
To do so follow these steps:
  1. Download MPFR from
  2. copy the file to /tmp and uncompress it there. Let's assume that the extracted files are in /tmp/mpfr-3.1.3
  3. Check the website for any available patches and apply them if there is any
  4. Note: Use /usr/local/bin/patch to apply any existing patch.
  5. cd /tmp/mpfr-3-1.3
  6. LD_LIBRARY_PATH=$HOME/progs/gmp/lib:$LD_LIBRARY_PATH ./configure --prefix=$HOME/progs/mpfr --with-gmp=$HOME/progs/gmp
  7. gmake
  8. gmake check
  9. gmake install
You need libiconv in order to build gcc correctly. I tried a few different options like using --disable-nls to avoid installing libiconv, but none of them worked. Therefore, I decided to install libiconv too. To install libiconv follow these steps:
  1. Download libiconv from
  2. copy the file to /tmp and uncompress it there. Let's assume that the extracted files are in /tmp/libiconv
  3. cd /tmp/libiconv
  4. ./configure --prefix=$HOME/progs/libiconv
  5. make
  6. make install
Now you are ready to build and install gcc:
  1. Download gcc from
  2. Uncompress the file under a directory in /tmp. Let's assume that the extracted files are in /tmp/gcc-4.2.1/
  3. Note: You should use gtar to untar the file, otherwise you will get some errors similar to this:
    tar: ././@LongLink : Unknown filetype
    You can get gtar from the Open Source Software Collection or here:

  4. Create another directory in /tmp. Let's call this directory gcc-build
  5. Note: If you are using HP TestDrive systems, it is important to use /tmp, because you don't have enough disk quota in your home directory to compile gcc.
  6. cd /tmp/gcc-build
  7. CC="gcc -Wa,-oldas" /tmp/gcc-4.2.1/configure --prefix=$HOME/gcc --enable-languages=c,c++,fortran --with-gmp=$HOME/progs/gmp --with-mpfr=$HOME/progs/mpfr --with-libiconv-prefix=$HOME/progs/libiconv
  8. If you don't need C++, omit it from --enable-languages. C++ takes a relatively large amount of disk space.
    If you don't need Fortran, use this command instead:
    CC="gcc -Wa,-oldas" /tmp/gcc-4.2.1/configure --prefix=$HOME/gcc --enable-languages=c,c++ --with-libiconv-prefix=$HOME/progs/libiconv
  9. LD_LIBRARY_PATH=$HOME/progs/gmp/lib:$LD_LIBRARY_PATH gmake bootstrap-lean
  10. Note: You should use GNU make (gmake) version 3.80 or higher to build gcc.
    You can get it from the Open Source Software Collection or here:
    This step takes a long time, usually a few hours!
    If you don't want to install Fortran simply use:
    gmake bootstrap-lean
  11. gmake install
  12. If tar complains that it failed to preserve ownership of files, you'll need to change the ownership of /tmp/gcc-build.
    Go to your home directory and run ls -l. In my case the problem was from group name. The group name of all the files in my home directory was nis while the group name of /tmp/gcc-build and all the files under the directory was system.
    So, I ran chown -hR MyUsername:nis /tmp/gcc-build then I removed $HOME/gcc and ran gmake install again.
At this point, you must have a working gcc installed in $HOME/gcc. You can set your paths to use the new version of the compiler set.

 Libraries have been installed in:

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - use the `-Wl,-rpath -Wl,LIBDIR' linker flag

See any operating system documentation about shared libraries for
more information, such as the ld(1) and manual pages.

Now it is time to remove the folders and files that you have created in /tmp.
In our example: /tmp/gcc-4.2.1, /tmp/gcc-build, /tmp/libiconv, /tmp/mpfr-3.1.3, /tmp/gmp-4.2.1

 If you want the compiled result for Tru64 5.1a, download it here:

BTW, who is still working on Tru64?


Wednesday, November 05, 2014

CURL Reboot D-Link Router (DWR-921)

/usr/bin/curl '' -H 'Host:' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:33.0) Gecko/20100101 Firefox/33.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H 'Accept-Language: en-US,en;q=0.5' -H 'Accept-Encoding: gzip, deflate' -H 'Referer:' -H 'Cookie: ID=AMIT0000' -H 'Connection: keep-alive'
/bin/sleep 1
/usr/bin/curl '' -H 'Host:' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:33.0) Gecko/20100101 Firefox/33.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H 'Accept-Language: en-US,en;q=0.5' -H 'Accept-Encoding: gzip, deflate' -H 'Referer:' -H 'Cookie: ID=AMIT0000' -H 'Connection: keep-alive'

Wednesday, May 28, 2014

Controlling Mitsubishi A/C with iTach IP2IR

 - iTach IP2IR with IR blaster
 - Android 4 (rooted)

Mitsubishi Msz-fd50va & Msz-fd35va indoor units IR command codes:
 ON = sendir,1:3,1,38109,1,1,131,65,17,49,17,49,16,17,16,17,17,16,16,49,16,17,16,17,16,50,17,49,16,17,16,49,16,17,16,17,16,50,16,49,16,17,16,49,17,49,17,16,17,16,17,49,17,16,16,17,16,50,16,17,16,17,16,17,17,16,16,17,17,16,16,17,16,17,16,17,16,17,17,16,17,16,16,17,17,17,16,17,17,16,17,16,16,17,17,16,16,17,16,50,16,17,17,16,17,16,16,17,17,16,16,50,17,16,17,16,17,16,16,17,16,50,16,50,16,17,16,17,16,17,17,16,17,16,17,16,17,16,16,17,16,17,16,17,16,50,16,50,16,17,16,17,16,17,17,16,16,17,16,17,16,17,17,49,17,49,16,17,16,17,16,49,17,49,16,50,17,16,16,17,17,16,16,50,16,17,16,17,17,16,17,16,17,16,17,16,16,17,17,16,17,16,16,17,17,16,16,17,17,16,17,16,16,17,16,17,17,16,16,17,16,17,16,17,16,17,16,17,17,16,16,17,16,17,16,17,17,16,16,17,16,50,16,17,17,16,16,17,16,17,16,17,17,16,17,16,17,16,17,17,16,17,17,16,17,16,16,17,17,16,16,17,17,16,17,16,16,17,16,17,17,16,16,50,16,50,17,49,16,17,17,49,16,50,16,17,17,653,134,66,16,50,16,50,17,16,16,17,16,17,17,49,17,16,16,17,16,50,16,49,17,16,16,50,17,16,16,17,16,49,16,50,16,17,17,49,17,49,16,17,16,17,17,49,16,17,17,16,17,49,16,17,16,17,16,17,16,17,17,16,17,16,16,17,16,17,16,17,17,16,16,17,16,17,16,17,17,16,17,16,16,17,16,17,16,17,17,16,16,17,17,49,16,17,16,17,16,17,16,17,16,17,16,50,16,17,17,16,16,17,16,17,17,49,16,50,17,16,16,17,16,17,17,16,17,16,16,17,16,17,17,16,16,17,16,17,17,49,16,50,17,16,16,17,16,17,16,17,16,17,16,17,16,17,16,50,17,49,16,17,16,17,16,50,16,50,16,49,16,17,16,17,16,17,16,50,17,16,16,17,17,16,17,16,16,17,17,16,16,17,16,17,16,17,17,16,17,16,16,17,16,17,17,16,16,17
OFF = sendir,1:3,1,38109,1,1,131,65,16,50,16,50,17,16,16,17,16,17,17,49,17,16,16,17,17,49,17,49,17,16,16,50,16,17,17,16,16,50,17,49,16,17,16,50,16,50,17,16,17,16,16,50,17,16,16,17,16,50,16,17,16,17,17,16,17,16,17,16,16,17,16,17,16,17,16,17,16,17,17,16,17,16,16,17,17,16,16,17,16,17,17,16,17,16,16,17,17,16,17,16,17,16,17,16,16,17,16,17,16,17,16,50,16,17,16,17,17,16,17,16,16,50,17,49,17,16,17,16,16,17,17,16,17,16,16,17,17,16,17,16,16,17,17,16,16,50,16,50,16,17,17,16,17,16,17,16,17,16,16,17,16,17,16,50,17,49,17,16,17,16,16,50,17,49,16,50,17,16,16,17,16,17,17,49,16,17,16,17,17,16,17,16,17,16,16,17,16,17,17,16,16,17,16,17,17,16,17,16,16,17,17,16,17,16,16,17,16,17,17,16,16,17,16,17,16,17,17,16,17,16,17,16,17,16,16,17,16,17,17,16,16,50,16,17,17,16,16,17,16,17,17,16,17,16,16,17,16,17,17,16,16,17,17,16,16,17,17,16,16,17,17,16,17,16,16,17,17,16,17,16,17,16,17,49,16,50,17,49,17,16,17,16,17,49,17,16,17,649,135,65,17,49,16,50,17,16,16,17,17,16,16,50,17,16,16,17,17,49,16,50,17,16,16,50,16,17,17,16,16,50,17,49,17,16,17,49,16,50,16,17,17,16,17,49,16,17,16,17,16,50,17,16,17,16,16,17,17,16,16,17,16,17,16,17,17,16,16,17,17,16,17,16,17,16,17,16,16,17,16,17,16,17,17,16,16,17,16,17,16,17,16,17,16,17,16,17,17,16,17,16,17,16,17,49,17,16,16,17,17,16,17,16,16,50,16,50,17,16,16,17,16,17,16,17,17,16,17,16,16,17,17,16,17,16,16,17,16,50,16,50,16,17,16,17,16,17,16,17,17,16,16,17,16,17,16,50,16,50,16,17,17,16,17,49,17,49,17,49,17,16,16,17,16,17,17,49,16,17,17,16,17,16,17,16,17,16,17,16,16,17,17,16,16,17,17,16,16,17,16,17,17,16,16,17,17,16

Note: code have been retrieved using Telnet and get_IRL command not with the iLearn software, it can't record such a long code, see more details here ->

Then I created a script in Perl to send my command over Telnet.

Perl is handy because it is installed in a lot of Linux distribs (readynas) by default. So you can then run some cron jobs that call this script in order to schedule the power on and off of the A/C units.

Well... Perl is not present by default on Android... but can be done using the followings.
 - SL4A with Perl for Android

You need to change he first line of the perl script to:

#!/data/data/com.googlecode.perlforandroid/files/perl/perl -w

Others handy Android software:
- SManager -> to create terminal widgets that calls the Perl script

Friday, November 08, 2013

PhProjekt broken left side menu

If you have a broken/empty menu with the projects tree on the left side and you're using Firefox>24 or Chrome>29, like this:

 that's because Dojo 1.6 has a bug that is fixed on this release here:

Just copy the files over in phprojekt/htdocs/ and that will fix it.

But then you'll notice that it takes forever to load all the .js files, so you'll need to create a custom build, see here:

I used this:

dependencies ={

  layers:  [
      name: "mydojo.js",
      dependencies: [

  prefixes: [
      [ "dijit", "../dijit" ],
      [ "dojox", "../dojox" ]


Friday, August 09, 2013

Yes, Ethernet Cable Pin Out IS Important

... maybe it sounds straightforward but the Cable Pin Out needs to be respected if you want to acheive 1Gbps speed with Cat 5E or Cat6 cables. If you don't respect it you'll be stuck to 100Mbps.

It seems like the position of each cable within the twists makes a big differences? Especially the blue cable which is put on the 5th position.

Anyway, more information about the Pin Out here:

or here is the diagram:

This page is powered by Blogger. Isn't yours?