Author Archives: loopion

Markdown desktop editor

Syntax Markdown example

Markdown is really a powerful way to create documents and maintain them in a pretty way. There is no changes in the way you write from a site to another, there is no mistake done on the rendering of your pages and most of all, it’s simple to learn!

  • MarkdownPad (Windows) is a full-featured Markdown editor for Windows. There is a free and a paid version. The free version for me is way enough, but when looking to the paid services it tempting to buy the pro version.
  • Mou (Mac) is way simpler and cleaner (normal you would say “Apple style”). It does the job with no additional flavor feature included.

Both do the job and I personally use both: MarkdownPad for professional usage and Mou for personal usage.

Do you know any other Markdown apps or even offline webapps to work with Markdown documents?

Memegif share and create meme based on existing gif

Just add a sentence on this gif

The buzzing world around meme gif are going crazy and creativity provided by users are also pretty impressive. One of my friend recently launched a great website for sharing and creating memes based on existing gif that could be easily found on the internet.

In france we have a few famous websites that is getting more and more welknown by geeks and nerds called les joies du code who provide daily fun sentences attached to gifs.

In a different maner, Memegif let you take back those existing memes and suggest new sentences to match those gifs.
Currently, it’s only in French but I know it will be released soon in English and with couples of new features.

Go submit your meme gif on and share it with your friends.

Check your website links before launching

A web spider of dots

This is often omitted by project managers but before launching the website live on the Internet, you must check that all your links from your domain point to a specific location that is reachable and (if possible) has value for your content.

Why that?

  • to make a consistent website as hyperlinks is basis of website creation.
  • have a better SEO. It will ensure a coherence for search engine spiders.
  • to not frustrate your visitor. (You know what I’m talking about)

As a consolation, if you still can’t fully be sure of your links, at least try to make as much as possible the most explainable 404 page.

To perform a full check of your links the best tool from my POV is Xenu Link Sleuth. Simple to use and easy to make reports.

Once your report build up, fix all misleading paged linked or give it away to your developers with the expected result.

I’m curious, do you have better techniques to achieve this task ?

Download songs from Spotify with your premium account

Get ready to download some songs with your Premium account

Digging the abyss

As usual, digging on the web bring me on an interesting project called justifyx. This small java application let you do a simple thing:

Download any SpotifyURI link you want in 320kbps OGG format!

How to download playlist/album/song or whatever SpotifyURI?

Simply download the last version of Justifyx:

And use it as follow:

Command line:
java -jar justifyx.jar user password SpotifyURI format command

    ogg_96:  Ogg Vorbis @ 96kbps
    ogg_160: Ogg Vorbis @ 160kbps
    ogg_320: Ogg Vorbis @ 320kbps
    mp3_320: MP3 @ 320kbps

    download: downloads track/list/album
    download number: downloads an album starting on the specified track number
    cover: downloads album cover

Free my newsreader

Not Invented Here strip

Read everything and everyday or you're out!?!?

I know I’ve made several articles on this subject but it’s something that is really important for me. Newsfeed reader give you technical strength and make yourself like a software that is up-to-date!

New website done Neighbourhood Language Club 78

Logo of NLC78 Association

I’ve just done a new website for one of my personal client as an auto-entrepreneur. NLC78 is an association-profit organization that offers language courses and personalized support for everyone ! From the youngest to seniors. They also offer education support for disabled people. It was really interesting working for them and see how motivated is the team behind the scene. The particularity of this website was the fact it was totally localized to a specific area of France (Yvelines).

More to come about this website as it will be internationalized.

I’m pretty proud about this website as it’s my first one as an auto-entrepreneur. Thanks to my client who trust me all along the project !

Finally, this project will be added to my portfolio in a few weeks.

Job in the gaming industry

I’ve found a job beginning of November in the gaming industry which I thought never ended in such an industry.
When recruiter asked me about what video games I was playing on my PS3, I’ve answered only games that weren’t from the company I was trying to join.

Long story short, now I’m more an project & account manager than a lead web project manager. Higher vision of all big projects going on within the company.

On vacation

I’m currently in holidays and be back beginning in September. Good upcoming posts about e-commerce and Magento.

Add column to product grid properly




class My_Module_Model_Adminhtml_Observer

    public function onBlockHtmlBefore(Varien_Event_Observer $observer) {
        $block = $observer->getBlock();
        if (!isset($block)) return;

        switch ($block->getType()) {
            case 'adminhtml/catalog_product_grid':
                /* @var $block Mage_Adminhtml_Block_Catalog_Product_Grid */
                $block->addColumn('COLUMN_ID', array(
                    'header' => Mage::helper('mymodule')->__('COLUMN HEADER'),
                    'index'  => 'COLUMN_ID',

    public function onEavLoadBefore(Varien_Event_Observer $observer) {
        $collection = $observer->getCollection();
        if (!isset($collection)) return;

        if (is_a($collection, 'Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection')) {
            /* @var $collection Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection */
            // Manipulate $collection here to add a COLUMN_ID column
            $collection->addExpressionAttributeToSelect('COLUMN_ID', '...Some SQL goes here...');


This come from Clockworkgeek user on a stackoverflow question. This is gold!

WordPress bash deployment script


Recently in my current company we had a client asking for a restaurant website. We’ve decided to do it with WordPress and used it as a CMS instead of a blog. Beside the fact that we needed to create the website, they also requested us to make all the maintenance of the website and their blog. What I suggested was to have a staging platform and of course the production platform.

To do make the deployment process from staging to production seamless, I’ve created a WordPress bash deployment script to easily go from staging to production. Some of you will ask me about the development platform? To do so, we’ve used a service called DeployHQ that works pretty well. It fetch all the content of your SVN repository and push it straight to the FTP. The only tricky part was for the database. I know it wasn’t clean but I made the decision to work on the same database for the staging and development part.

If you have any suggestions about improving this script do not hesitate.

Please consider the following on our installation:

# Written by Emmanuel Pays 
# Description : Use this script to deploy in production a WordPress blog that already exist on the same machine
# ver. 1.0
# Latest version can be found at
# Todo
# - DONE - Email when deployment is done
# - Execution time for the script
# - Set version on meta or anywhere else to keep track of deployment version

# Global config
SUBJECT="${prod_uri} deployment successful"

#Staging info

#Production info

#Create backup
backup_db_filename="database_$(date +%F_%Hh%M).bak.sql.bz2"
backup_file_filename="files_$(date +%F_%Hh%M).tar.bz2"

#Create files backups
tar -cjPf ${backup_path_files}prod_${backup_file_filename} ${root_prod_path}
chown ftproot:psaserv ${backup_path_files}prod_${backup_file_filename}
echo "Backup prod files done..."
tar -cjPf ${backup_path_files}staging_${backup_file_filename} ${root_staging_path}
chown ftproot:psaserv ${backup_path_files}staging_${backup_file_filename}
echo "Backup staging files done..."

mysqldump --add-drop-table -h ${staging_uri} -u ${staging_db_username} -p${staging_db_pass} ${staging_db_name} | bzip2 -c > ${backup_path_db}${backup_db_filename}
chown ftproot:psaserv ${backup_path_db}${backup_db_filename}
echo "All backups done..."

#Copy staging database to production database
mysqldump --add-drop-table -h ${staging_uri} -u ${staging_db_username} -p${staging_db_pass} ${staging_db_name} | mysql -h ${prod_uri} -u ${prod_db_username} -p${prod_db
_pass} ${prod_db_name}
echo "Database replication to production done..."
#Copy all files from staging to production
cp -rR  ${root_staging_path}. ${root_prod_path}
echo "Files copied from ${staging_uri} to ${prod_uri}"
#Update production tables
mysql -h ${prod_uri} -u ${prod_db_username} -p${prod_db_pass} ${prod_db_name}< $EMAILMESSAGE
echo "This is email text" >>$EMAILMESSAGE
# send an email using /bin/mail
Page 1 of 1012345...10...Last »