Monday, April 23, 2018

Skill vs Challenge

When you work on improving your coding skill, be aware that you will experience these feelings that depends on your current skill level and the challenge level of the problem. Our goal is to be able to take on high challenges at a high skill level so that we can experience the Flow.

Thursday, March 01, 2018

Installing Graphicsmagick on Mac

cd /usr/local/src
curl --remote-name --location

tar -xzvf GraphicsMagick-1.3.27a.tar.gz
cd GraphicsMagick-1.3.27a

./configure CC=clang \
  LDFLAGS="-L/usr/local/libjpeg/lib -L/usr/local/libpng/lib -L/usr/local/libtiff/lib" \
  CPPFLAGS="-I/usr/local/libjpeg/include -I/usr/local/libpng/include -I/usr/local/libtiff/include" \
sudo make install

sudo ln -s mac-dev-env/graphicsmagick-1.3.27a /usr/local/graphicsmagick

echo 'export PATH=/usr/local/graphicsmagick/bin:$PATH' >> ~/.bash_profile

source ~/.bash_profile

gm version


Installing graphicsmagick on Mac

Installing phantomjs on Mac 10.10.5

Cliver::Dependency::NotFound: Could not find an executable ["phantomjs"] on your path.

brew install phantomjs

MiniMagick::Invalid: ImageMagick/GraphicsMagick is not installed

brew install graphicsmagick

Error: SHA256 mismatch
Expected: 2f1e960d92ce3b3abd03d06dfec9637dfbd22febf107a536b44f7a47c60659f6
Actual: 7a07d3f7cca5c0b38ca811984ef8da536da32932d68c1a6cce33ec2462b930bf
Archive: /Users/bparanj/Library/Caches/Homebrew/libpng-1.6.34.tar.xz

brew uninstall libpng
brew cleanup -s
brew install graphicsmagick

Sunday, February 25, 2018


        Unable to find Mozilla geckodriver. Please download the server from and place it somewhere on your PATH. More info at

brew install chromedriver

Friday, February 23, 2018

The TDD Course for Beginners : Learn by Practicing 7 Katas

Learn how to do Test Driven Development using Ruby within 4 hours. You will get:

1. The transcript of the entire course in PDF.
2. TDD in Ruby ebook in PDF, Mobi and Epub formats
3. Members only TDD tutorial website that walks you through every exercise in the course.
4. Monthly Google hangout Q&A session that supports your learning objectives.
5. All the slides used in the course in PDF format.
6. TDD Course Tools Checklist for every sub-skill covered in the course.
7. TDD in Ruby Course Outline that was used to create the course.

How do I get access to the videos and all the above goodies?

For only $9 / month, you get my support and access to all of the above. Send me payment via Paypal to to get access today!


Jeff Casimir, Principal, Jumpstart Lab


The actual coding TDD examples for Fizz Buzz and Fibonacci were really well done
During the coding exercises the refactoring of code was a good illustration of how to improve certainty of test results
Good overview of the importance of testing
Each lecture / exercise was only 5-10 minutes providing nice incremental gains in the course


The instructor's delivery was not engaging - students tune out very quickly
First 61 minutes were very high level and included no actual coding
Instructors speaking voice was monotone and slow for the entire course no inflection, jokes, or anything to keep your attention
The audio between segments varied in quality to sometimes low quality not ideal for a $200 course
Instructor used whiteboard to write notes and diagram concepts during lecture (also wrote in cursive and at least 1 time wrote off viewable screen)


We wouldn't recommend it for Turing pre-requisite work, but could be valuable supporting material for students in the class.

Mylene Reiners

When you want a theoretical background on TDD, this course is great (and the Ruby part is not too hard for people knowing only a little Ruby...)

Yury Voloshin

This is a good introduction to TDD for those who either have never used it or who have a very rudimentary understanding of it. Some of the more advanced concepts toward the end are somewhat rushed through, but I' sure that can't be helped due to time constraints and to the nature of the material. At least now I know the topics that I need to into more deeply.


This course introduces a solid foundation for practicing TDD. The instructor definitely knows what he's teaching. Information is divided in small logical and understandable chunks/lectures.

Jesse Mignac

Techniques, examples and theoretical material. This course is a really nice start to TDD with Ruby

Andrew Platkin

Very good pace and learned alot

Thom Parkin

The beginning of this course seems a bit slow and very dry. But your patience is well rewarded because the depth and detail of information provided is priceless! Mr. Paranj uses a time-tested technique of methodical presentation of ideas, one built upon the other, to its ultimate success. I am grateful and impressed by this course.

Jikku Jose

I am very happy to have such a comprehensive course from Mr. Paranj. I have been trying to do TDD in my projects for quite sometime without much success. This course helped a lot to expose much of the concepts and details one should focus on while doing TDD.  I wish the examples mentioned in "Fake It till you make it" and "Triangulation" was a bit more involved rather than the basic ones presented so that the techniques could be better understood.  I thank Mr. Paranj and Udemy for the course, it really helped me. Hope more advanced Ruby related materials can be brought out.

Pawel Jackowski

Instructor knows TDD and explains it with ease. I am quite familiar with technique and just wanted to refresh knowledge and I still recommend course. I definitely learned something about common mistakes and importance of every step in TDD sequence. I enrolled for free.

Steve Freeman

Instructor uses katas very effectively to show the patterns behind TDD. His clear examples and pointers to material for further study were very helpful and I look forward to practicing katas on my own. If you're trying to make sense of TDD I highly recommend this class!

What are the requirements?

Basic programming skills
You need to have your favorite text editor installed on your machine
You need Ruby 2.0 or above installed on your machine.

What am I going to get from this course?

Do Problem Domain Analysis
Do Solution Domain Analysis
Design Test Cases
Write Tests First
Apply Canonical Test Structure when having difficulty in writing a test first.

Who is the target audience?

Beginners to Test Driven Development
You should already know how to write programs in Ruby
You should already know how to create an instance of a class and invoke methods.

Course Description

In this course you will learn the basics of Test Driven Development. You will learn how to do Problem Domain Analysis, Solution Domain Analysis, Designing Test Cases and Writing Tests First. Learn the Basics of Test Driven Development in Ruby using this Beginner Course. This course will take 4 hours to complete.

Practice skills using 7 katas

  • Use the downloadable checklists to guide you when coding
  • Learn 3 different techniques to do Test Driven Development
  • You can be more productive if you practice TDD at work. Companies that adopt Test Driven Development are great places to work.
The material used in this course is the result of feedback from students who attended my TDD bootcamps and tutorials. This is a course designed by a developer for developers.

The concepts are first explained in a presentation. Then a coding demo illustrates how to apply the theory in practice. At the end of the lesson an exercise is given to reinforce the material.

You will learn the following concepts:
  • Assertions
  • The structure of a test
  • TDD Cycle
  • Minimal Implementation
  • Starter Test
  • Story Test
  • Next Test
  • Refactoring
  • Obvious Implementation
  • Fake It Till You Make It
  • Triangulation
  • Hiding Implementation Details
You will be able to attend interviews for companies that demand TDD skills to get a six-figure salary. Complete with working files and code samples, you'll be able to work alongside the instructor and will receive a verifiable certificate of completion upon finishing the course. I have interviewed people and I have seen the common mistakes made by candidates.

Subscribe Now

For only $9 / month, you get my support and access to all of the above. Send me payment via Paypal to to get access today!

Saturday, February 10, 2018

ActionController::UnknownFormat (ActionController::UnknownFormat):

This happens with Devise when working with API only Rails app.
Solution: Add   respond_to :json in the controller.

ActiveModel::UnknownAttributeError (unknown attribute 'user' for User.):

Devise throws this error.


Don't use the protected method signup_params. I used my own method:

  def allowed_params
    params.permit(:first_name, :email, :password, :password_confirmation)

the build_resource call uses this method.


I copied the create action from Devise::Registrations controller and customized it:

  def create
    if resource.persisted?
      if resource.active_for_authentication?
        sign_up(resource_name, resource)
        respond_with resource, location: after_sign_up_path_for(resource)
        respond_with resource, location: after_inactive_sign_up_path_for(resource)
      clean_up_passwords resource
      respond_with resource

Saturday, January 27, 2018

Practicing Jobs to Be Done

I spoke to my friend for over 2 hours. I am applying the JTBD Framework to the content from the interview.

Goal : Looking for a developer position in a good company
This consists of the following jobs-to-be-done:
  • Prepare resume
  • Browse jobs
  • Apply for jobs
  • Respond to replies
  • Phone interview with recruiter
  • VP level call
  • Tech screening phone interview
  • Face to face interview
  • Negotiate offer
  • Review and accept offer
  • Go through background check
  • On boarding
Core Functional Job : Prepare resume

  • Goal : To apply for jobs in cryptography
  • Plan resources: Find a resume reviewer to get feedback
  • Review current jobs in cryptography and examine the job descriptions
  • Gather the notes about the projects done in the most recent job
  • Find the current resume
  • Find a place with no distractions
  • Express the accomplishments in the correct way in a text editor
  • Current resume found. 
  • Notes about projects is available. 
  • Computer can open the current resume.
  • Update resume with objective, skills, projects and contact details
  • Format resume properly
  • Is resume formatted correctly?
  • Does the objective make sense?
  • Override auto spelling corrections for known terms
  • Run grammar and spelling checks
  • Correct grammar and spelling mistakes
  • Save the document
  • Convert it to word format if required
Next step is to fill out the market discovery template. This is my next task.

Wednesday, January 24, 2018

Onboarding a Developer

Onboarding Goals 

 Day 1

 They’ll have to commit something to the codebase. It can be updating out-of-date documentation or deploying a line to production.

Week 1

 They’ll start on bug fixes to learn the codebase and company standards under the guide of their mentor or lead engineers.

Month 1

 They are expected to have started on small to medium projects within the company, but still with code reviews from mentors and other engineers. They might be pair programming on these projects rather than solo.

Few Months

 They’ll be seen as fully-fledged engineers and working on main projects within the company, and ideally taking a lead on their own ideas and projects and bringing them through.

 “We find a depthwise first, breadthwise second approach is best -- let them get familiar with a certain part of the code, and gradually expand their domain of knowledge.”* — Robby Grossman, Director of Engineering @ Wistia 
 Every new engineer, whether a recent college grad or a new director, must go through an intensive six week program designed to immerse the new engineer into our code base and promote the types of habits that would allow us to scale up our organization. That program is called Engineering Bootcamp program.

 Six weeks of hands-on concrete problem solving and cross-team feature work with an experienced mentor are a perfect way to:

  •  Propagate the culture in a scalable way
  •  Get new hires to build connections across the organization
  •  Keep individual teams sharp and motivated to attract the best talent

 Mentor must work closely with new hire to clear away any roadblocks and make sure folks don't run into them in the future. This will empower the new hire to identify and resolve the major pain points of their future teammates.

 Google Inc. has a two-week program to familiarize new engineers with the company's technology, culture and people, complete with live and online courses.

That sets you up for success.

Best Onboarding Practices 

should include:

 1. Project Specific Knowledge - This should be very specific to what an individual is expected to do once he starts working.
 2. Domain Specific Knowledge - This is helpful to see bigger picture and significance of "what they will be doing.
 3. Process Specific - Enforcing the discipline around "how" part
 4. Organizational Culture / Policies
 5. Feedback - Mechanism to ask and incorporate feedback. (For training content, Trainers, Duration, Individual ratings for trainees etc).
 6. Help Channels - Share established and open communication channels to get help and ask questions.
 7. Bandwidth - Ensure capacity from other project individuals to train new team members.
 8. Objectives - Some projects might be very complex and "onboarding" needs to be a phased approach.

 Phase 1 - Training to resolve simple UI defects
 Phase 2 - Training to resolve medium complex functional defects
 Phase 3 - and so on.

 This will build a transition plan for an individual to become an expert in a project from a naive programmer.

 I also used new team members to "document" the areas which were not having any documentation or having less documentation. This certainly needed SME review but then where do SMEs have time to document by themselves? This at least ensures documentation is present as a first step that is reviewed by SME.

Saturday, January 20, 2018

Homebrew must be run under Ruby 2.3! You're running 2.0.0. (RuntimeError)

Uninstall Homebrew

/usr/bin/ruby -e "$(curl -fsSL"

Install Homebrew

/usr/bin/ruby -e "$(curl -fsSL"

Tuesday, January 02, 2018


This happens in Chrome when you have not clicked on the I agree for the Wifi