Notes Are Important And Having A Great Note Taking App Is equally Important

It’s important to have notes especially when you need to store settings or just for taking notes on how to perform tasks. For me, I take down notes when learning something new, for example, how to create a new Rails app, those commands are easy to forget, also I have a point of reference.

Tomboy Notes for Ubuntu

Anyway my Notes application is Tomboy. Tomboy is amazing. I’ve been using it for a long time now. I tried switching to Evernote a couple of years back but it just didn’t quite do it for me. Yes, Evernote is superior, probably one of the best out there, but I like my Tomboy, it’s flexible and I feel like I have more freedom with Tomboy Notes.

I have setup a server which Tomboy synchronises all my notes too. There’s an Android app for Tomboy called Tomdroid, which also synchronises with my server.

Anyway whatever notes application you use, as long as you have one.

To Install Tomboy Notes on Ubuntu

  • Open ‘Ubuntu Software Center’
  • Search for ‘Tomboy Notes’
  • Click Install

What note application do you use? I’m keen to find out what other awesome notes applications are out there.

Deploying Rails Web App For Newbies

The first time I deployed my rails app, I deployed with standard Web brick server. In fact I deployed a couple of Rails apps using Web brick. It was only after listening to a podcast from Ruby Rogues I realised I needed to update my applications. During this podcast everyone made fun of Devs who deploy Rails using Web brick. I was so ashamed that I was one those Devs, so I decided to fix the problem.

Why is it not good to use Web Brick server in Production?

Well Web brick is more of a development server thus it is only meant to be used in development environment.

How to resolve this problem?

It’s actually simple, all you need to do is specify an alternative server in your Gemfile under your Prod settings. The server which I’m using is thin
. It’s that’s simple.
If you’re running your rails app in Heroku change your Procfile


group :production do
  gem 'pg'
  gem 'thin'


  web: bundle exec rails server thin -p $PORT -e $RACK_ENV as

That’s it’s.

Do you have more tips and tricks to share regarding deploying Rails Web App? If you do please kindly share them in the comments section.

Using WebStorm, IntelliJ Or RubyMine IDEs In Ubuntu

Jetbrains are one of the leading companies when it comes to making IDEs especially for cross platform OS. My desktop OS is Ubuntu Linux, these IDEs really shine when using them on Linux or Mac OS. One of my favourite features is that they have the terminal available within the IDEs. This great when you need execute bash scripts, or startup your server etc…

A small minor issue in Ubuntu

One problem is a random bug which causes the IDEs to loose cursor, therefore it seems like your IDEs is frozen but it’s not you still able to perform mouse clicks and select menus but you just can’t type. There’s a bug open for this issue but because it’s difficult to resolve because it occurs randomly. This may seem frustrating but there’s a simple work around for this.


Executing this script:

 $ ibus restart

I’ve created a simple bash that you may use when you have this problem. You may create a shortcut to the script.

Have you come across any other weird issues regarding and fixes to those issues for Theses IDEs? If you have please do kindly share your experience?

Software Engineering for Self-taught Programmers

Software Engineering principles and methods for self-taught programmers, this article describes why I think self-taught programmers should (must) know about software engineering.

I am a self-taught programmer

I am a self-taught programmer, I did computer science in high school, Pascal was my first programming language I learned and since then, I always knew that I will be a programmer. After high school, I was forced to start working immediately. Fortunately, I got a job at a Web Development company, ever since then, I’ve always taught myself everything I know about programming.

Those who cannot remember the past are condemned to repeat it

In Barry Boehm’s article “A View of 20th and 21st Century Software Engineering.”
He opens up with the following statement, George Santayana’s statement, “Those who cannot remember the past are condemned to repeat it,” is only half true. The past also includes successful histories. If you haven’t been made aware of them, you’re often condemned not to repeat their successes. This statement made me realise the importance of Software Engineering and why I need to learn about Software Engineering. The great thing about being a self-taught programmer is that we know the practical part of Software Engineering, so when going through Software Engineering material all should make sense and be easy to grasp since you’ve already been there, done it (for me it was very easy).

What is Software Engineering

Software Engineering looks at the overall pictures, just like Engineers are tasked to build, Software Engineers are also tasked with building Software. So the Engineering disciplines have been taken from Engineering and applied to Software Engineering. But because Software Engineering has other disciplines, therefore, some principles come from Computer Science which is part of Software Engineering, and Project Management as well.

What Resources to Use to Learn About Software Engineering

  • A View of 20th and 21st Century Software Engineering – Barry Boehm
    • Must read for all.
  • Software Engineering Principles and Practices – Hans Van Vliet
    • Software Engineering book.
  • Agile vs Formal
    • Pros and cons for both waterfall & agile development.
  • They right the write stuff
    • This is a great article on waterfall development done right. I recommend reading this even though you don’t use waterfall methodology.


At the minimum, my suggestion is to read Barry Boehm’s article “A View of 20th and 21st Century Software Engineering.”
. If you can try to enrol for a Software Engineering course or program in your city. But then again the Internet is your best friend, these resources have got other references which you check out.

Other Resources

If your South African the JCSE and Wits offer the CPD in Software Engineering which I’m currently busy doing.

Joburg Centre for Software Engineering

Iterative Persistence

We Often set goals, for example: I want to be successful, or what ever the goal is. All goals have that final destination, whether its getting to the top, or getting that Job, that car, or that house.

What I’ve noticed is we come up with a plan on how to do this, lets say for the example the goal is getting into shape and being more healthy.

So we create a plan which is: Go to gym everyday and start eating healthy food. What I’ve noticed is we put so much pressure on ourselves that we end up regressing (go backwards) and we never attain our goals.

What are we doing wrong? Why does this happen?

After many years of working on my personal development I’ve come to a realisation that we fail because we focus on the end goal too much. When we should be focusing on doing the things that will help us attain the goal.

In the software world many projects have failed because of trying to deliver the entire solution in one big bang. Now you may ask what does software have to do with not attaining our goals? I’m a Software Developer and I’m currently doing a course on Software Engineering. In this course there’s an article by Barry Boehm “A View of 20th and 21st Century Software Engineering

” in which he takes us through the evolution of Software Engineering by examining, process, approaches, trends, principles, methods, concurrent (agile), sequential process (waterfall),etc…

One of the main problems was (and still is) trying to design and spec all features that would be needed for the software. This process was and still is plagued with a lack of knowing the actual goal of the software. The client has some sort of understanding what they want but translating this into formal design, usually items missed, these are usually discovered later in the process when development has started already. Now that means going into another design session to see how these new pieces would fit, and this would be a back and forth thing eventually this project would fail.

So as software engineers discovered this problem, some changed the approach to an iterative approach where some design is done upfront, key features are selected from a list and they are developed in a sprint lets say 2 to 3 weeks. These feature the deployed after the sprint.

So coming back to goals and why we sometimes don’t attain them. I think like software, we need to adapt the plan originally set out, to be more of an iterative plan.


My conclusion is almost like software engineering we have to treat our goals the same. Set a goal, see the big picture, plan how you going to achieve it, then put the big picture aside, focus on doing the steps in your plan, for example if you want to get into the shape and your plan is go to gym everyday. Then go to gym everyday for the next 3 to 4 weeks, don’t worry about how you are doing, just focus on getting to the gym everyday. once you’ve been going to gym everyday for 3 to 4 weeks, you find that now your goal of getting into shape would have changed, now it might be; okay great I’m starting to get into shape but I see that my gym will be more effective if I start eating healthy food. Now you have a new item added to your list, and you may plan accordingly. Example everyday you going to gym now, but now you’ve also update your diet to a healthy one. You do this for next 3 to 4 weeks later, your eating healthy, gyming everyday but now you want to add on something else, well you repeat the iterative process…

I think you will have more success with this iterative approach than if you bundled up all the things you want into one big goal example, this year: I want to get into shape, and I want to eat healthy food