Monday, February 05, 2018

Quick and dirty fixes to allow Prestashop 1.7 to work in Debug mode on PHP 7.2

If you really need a quick and dirty fixes to allow Prestashop 1.7 to work in Debug mode on PHP 7.2, here it goes.

1) For the "Declaration of ControllerCore::setMedia() must be compatible with AdminControllerCore" error, check the admin controllers and modify the setMedia() to setMedia($isNewTheme = false)
Also the viewAccess() to viewAccess($disable = false)

2) For "Warning: count(): XXX must be an array or an object that implements Countable" add a empty() test on the array before the count.
Example in classes/Cart.php:

!empty($product_list) && count($product_list)

3) For "The each() function is deprecated.", replace "kv = each($mixed)" by
$kv = [$key, $mixed];
on vendor/prestashop/smarty/sysplugins/smarty_internal_compilebase.php
check the $kv['key'] before testing if the key is in the array
Like this:

$kv = [$key, $mixed];
                // option flag?
                if (isset($kv['key']) && in_array($kv['key'], $this->option_flags)) {

Hope it will help someone...

Saturday, September 02, 2017

Install Dash node from sources on Centos 6

As root:

cat /etc/centos-release
CentOS release 6.9 (Final)

yum -y install wget
yum update -y && reboot

yum groupinstall 'Development Tools'
yum install pkgconfig

rpm --import
wget -O /etc/yum.repos.d/slc6-devtoolset.repo
yum install devtoolset-2-gcc devtoolset-2-binutils devtoolset-2-gcc-c++

Install Berkeley DB

tar -xzvf db-4.8.30.NC.tar.gz
cd ./db-4.8.30.NC
cd build_unix
../dist/configure --prefix=/usr  --enable-compat185  --enable-dbm --disable-static --enable-cxx
make install

Install ZeroMQ (from sources)

tar xzvf zeromq-4.0.3.tar.gz
cd zeromq-4.0.3
make install

yum install boost boost-doc
wget -O /etc/yum.repos.d/enetres.repo
yum install boost-devel

yum install openssl openssl-devel

yum install libevent2-devel

useradd dash
passwd dash

Login as dash:

mkdir dashcore
cd dashcore
git clone -b v0.12.2.x
cd dash
add m4_pattern_allow(PKG_CONFIG_LIBDIR) to
source scl_source enable devtoolset-2

export PKG_CONFIG_PATH=/usr/lib/pkgconfig/   (for ZeroMQ lib)

you need to make sure you have more than 5Go free RAM


Prestashop ERROR Message "You already have the maximum quantity available for this product"

When adding a product to cart on front-end, you have this error message in the POST RESPONSE:
"You already have the maximum quantity available for this product"
This could come from many different reasons but one of them could that your MySQL database is in force recovery mode.

You may also encounter the following error in phpmyadmin when trying to import data:
Operation not allowed when innodb_forced_recovery > 0.
So find your my.cnf configuration file (on osx it's in /opt/local/etc/mysql56/my.cnf) and comment out following line
# innodb_force_recovery = 1
Then restart your database.

Example on osx:
launchctl unload -w /Library/LaunchDaemons/org.macports.mysql56-server.plist
launchctl load -w /Library/LaunchDaemons/org.macports.mysql56-server.plist

Tuesday, June 28, 2016

Back to TP-LINK stock firmware

If you are trying to go back to the stock firmware using the mtd command and you have the following error message:

..  [e]Failed to erase block

If you don’t upload a proper firmware, your router will get bricked next time it boots.
You need to strip the first 257 bytes from the .bin.

#dd if=Archer_c7-firm-orig.bin of=tplink.bin skip=257 bs=512

Then you're good to upload the new tplink.bin:

#mtd -r write /tmp/tplink.bin firmware

And visit the default url: 

Monday, June 06, 2016

Latching relay (Hager EPS410B) with push buttons (Legrand Niloe)

Here you go:

Basically the 2 from the push button switch goes to the 3 of the relay and the 4 goes to the light(s), the rest is pretty straight forward.

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?


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