Caffe: Visualizing Caffe Network prototxt file using GraphViz: draw_net.py

Visualizing Caffe Net topology/ntwork/prototxt file using GraphViz
From the Caffe root directory, you can generate a graph in image format from a .prototxt model file:

#INSTALL PRE-REQS:
$ make pycaffe
$ pip install pydotplus
$ yum install graphviz

Visualize a CNN in left-to-right:

#goto CAFFE ROOT
$ python/draw_net.py mynetwrk.prototxt mynetwrk.png

Output formats could be : PNG, PDF, DOT or other GraphViz supported formats.
Visualize a CNN in top-to-bottom:

$ python/draw_net.py --rankdir TB mynetwrk.prototxt mynetwrk.png

Following errors can be eliminated if you install the PRE-REQS (pip install pydotplus; yum install graphviz)

pydotplus.graphviz.InvocationException: GraphViz's executables not found
Exception: "dot" not found in path.
ImportError: No module named pydot

Github: Merging two branches


git remote add remote-name remote-github-url 
git fetch remote-name 
git merge remote-name/branch-name 
git status

Github: Update a GitHub forked repository;


git remote add upstream github-URL
git fetch upstream 
git merge upstream/master master 
git pull upstream master 
git push

Sublime Text: Multiple cursors or Multi-selection

Multiple cursors or Multi-selection in sublime text is easy

  • Press Alt/Command and then click in each region where you require a cursor. 
  • Select a block of lines : Shift + Command + L. 
  • Place the cursor over a particular word, and press Control/Command + D repeatedly to select additional occurrences of that word. 
  • Add an additional cursor at all occurrences of a word : Alt+F3 on Windows or Ctrl+Command+G on Mac.

Laravel: Debug by Printing Eloquent Query

Use ->toSql() method like shown below to get the SQL

<?php
use Log;

$name = "hawk";

$userResults = DB::table('users')
       ->leftJoin('planets', function($join) {
         $join->on('users.planet_id', '=' , 'planets.id');
        })
       ->where('users.lname' , 'like', '%'.$name.'%');

//You can print the SQL in your log file
Log::info('My search sql: '.($userResults->toSql()));

// OR you can save into a string variable
$mySQL = $userResults->toSql();

//Then use your get function
$userResults = $userResults->get(array('users.fname', 'planets.name'));
?>

The above code will print the following into your /storage/logs/laravel.log file

[2014-09-30 17:58:07] production.INFO: My search sql: SELECT * FROM  users LEFT JOIN planets ON (users.planet_id = planets.id) WHERE users.lname LIKE '%hawk%' 

Laravel, Eloquent: SQL query with left join

If the query needs parentheses/brackets for a where condition like below Normal SQL:

SELECT users.fname, planets.name 
FROM  users
LEFT JOIN  planets ON (users.planet_id = planets.id)
WHERE users.lname LIKE '%hawk%' 

ELOQUENT SQL:

$name = "hawk";

$userResults = DB::table('users')
       ->leftJoin('planets', function($join) {
         $join->on('users.planet_id', '=' , 'planets.id');
        })
       ->where('users.lname' , 'like', '%'.$name.'%')
       ->get(array('users.fname', 'planets.name'));

Eloquent: SQL Query with where or in brackets

If the query needs parentheses/brackets for a where condition like below Normal SQL:

SELECT * 
FROM  users
WHERE planet = 'earth'
AND (fname LIKE '%hawk%' OR lname LIKE '%hawk%')
AND state = 'FL'

ELOQUENT SQL:

$name = "hawk";

$usersResults = DB::table('users')
    ->where('planet', '=', 'earth')
    ->where(function($query) use ($name){
            $query->where('fname' , 'like', '%'.$name.'%');
            $query->orWhere('lname' , 'like', '%'.$name.'%');
      })
     ->where('state', '=', 'FL')
    ->get();

Wordpress: Print-friendly, Print as it looks in browser

If you you want to print a wordpress blog/site as it looks on the browser, then you have to
1. Login to the Wordpress as admin
2. Goto Appearance->Editor in the Left Sidebar menu.
3. On the right side find Header.php file
4. In the file locate the following piece of code

<link rel=”stylesheet” href=”<?php bloginfo(‘stylesheet_url’); ?>” type=”text/css” media=”screen” />

5. Modify to the media=""screen" to media="screen, print"
6. Click Update file at the bottom to save the changes in header.php

<link rel=”stylesheet” href=”<?php bloginfo(‘stylesheet_url’); ?>” type=”text/css” media=”screen, print” />


Oracle: Split a String Based on Delimiter

We can split a string based on Delimiter using a combination of  INSTR and SUBSTR functions:

INSTR Returns the position of a String within a String. For more information see Oracle instr function
SUBSTR Returns a substring. For more information see Oracle substring
Syntax of SUBSTR:

SUBSTR([input],[start],[length])  
Example 1:
 
select substr('orange.apple',1,(instr('orange.apple','.')) - 1)  
 from  dual  

Output:
first

Example 2:
 
select substr('orange.apple',1,(instr('orange.apple,'.')) - 1) as First,  
        substr('orange.apple', (instr('orange.apple','.')) + 1) as Second  
 from  dual 

Output:
First         Second
orange           apple

Oracle SQL Developer multiple table view

Oracle SQL Developer, to view multiple tables in different tabs, click on the 'pin' icon.


Eclipse keyboard shortcuts and Sublime Text 3 keybord shortcuts

Switching from Eclipse to Sublime Text 3?,  need some quick shortcuts to

1. Switching/Moving Lines up and down
Eclipse shortcut:  ⌘-UP to move lines up,  ⌘-DOWN to move lines down,
Sublime Text 3: CTRL-⌘-UP to move lines up, CTRL-⌘-DOWN to move lines down.

2. Deleting Entire Line your cursor is on 
Eclipse shortcut:⌘-D
Sublime Text 3: CTRL-SHIFT-K

3. Goto Line in File 
Eclipse shortcut: ⌘-L
Sublime Text 3: ⌘-P, then type a colon followed by the line number (e.g. :12 for line 12). To go to a line in another file, type the file name and then a colon and the line number.

Mac: Install OPEN MPI on Mac OS

Step 1 : If you haven't installed XCODE. Download and Install XCODE

Step 2 :
Install Open MPI. Download the latest stable release of Open MPI from the Open Source High Performance Computing website.

Step 3:
Open terminal and Go to the downloaded directory

Extract the downloaded archive :
tar -zxvf openmpi-1.6.5.tar.gz

Open terminal and Go to the extracted directory:
cd /path/to/extracted/openmpi-1.6.5

Run the following commands
./configure --prefix=/usr/local
make all
sudo make install

Step 4: Add OpenMPI path to your path, run the following commands export

PATH=/usr/local/openmpi/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/openmpi/lib:$LD_LIBRARY_PATH
export DYLD_LIBRARY_PATH=$LD_LIBRARY_PATH

Step 5: Compile your C/C++ program
For C:
mpicc -o myProgExe myProg.c

For C++:
mpic++ -o myProgExe myProg.cpp

Step 6: Run, where -np is the number of processor to run on.
mpirun -np 8 myProgExe




Gmail Tricks ;), Get more usage out of your Gmail address !

1. Create Filters with multiple Senders
Use the 'OR' keyword in between emails. 

Set up the filter as "email1@gmail.com OR email2@gmail.com" and continue from there.


2. The Plus Sign (+) in your Gmail address

For example you have an email address: ravi@gmail.com, then
  • ravi@gmail.com = ravi+anything@gmail.com = ravi+socialmedia@gmail.com
Gmail ignores anything after the + sign.  But sends/recieves with the full email address.

So, Why do you want to use the + sign ? To manage junk and unwanted emails :)

You can use this kind of email address at some social or coupon websites to register and later manage(probably delete) all their associated emails or notifications. 

So for example, you could register at these websites with ravi+couponjunk@gmail.com . And then create a filter with ravi+couponjunk@gmail.com and you can continue from there...
























So from next time when u register, which requires your email, or when you post a contact email on your website. You can create a filter and manage these emails to be automatically archived, deleted, etc...

3. The dot Sign (.) in your Gmail address
For example you have an email address: ravi@gmail.com, then
  • ravi@gmail.com = r.a.v.i@gmail.com = ra.vi@gmail.com = r.av.i@gmail.com
Gmail ignores periods (.) as characters in email addresses. 

Python contextlib for Timing Python code

If you've ever found yourself needing to measure the execution time of specific portions of your Python code, the `contextlib` module o...