Kickstarter: Our project failed

greenThis is the message I received this morning from Kickstarter about my campaign failing because it didn’t get funded:

We’re sorry to report that your project, The Undocumented Engineer, didn’t meet its funding goal.

We know how much hard work goes into running a project. You’ve made tremendous progress by launching and working to build a community around your idea.

As you’re figuring out your next steps, don’t forget to keep your backers in the loop. They’re your biggest fans and are probably interested in following along with your progress. You can post an update or send them a message to let them know about your plans for your project.

Continue reading

Trip to Oahu and Maui, Hawaii

Aloha!

Oahu is one of the most popular islands in Hawaii, also, the one with the largest population. This island is a very attractive destination to people looking to see a piece of paradise, with the option to have all the amenities of a big city such as shopping and a great variety of restaurants and hotels. However, there are other islands like Maui which offer in my opinion, a better option for those in search of a more adventurous experience, and the feel of true island living.

Waikiki beachBoth places are great for vacationers and travelers looking for water adventures such as surfing, snorkeling, sailing, kayaking, stand up paddle boarding, etc. If you are looking to just lay down on the beach and enjoy a great view in and around the beach then perhaps Oahu is a better option. If you are looking to do some exploring, hiking, and have an adventurous road trip, then Maui offers all of that. Continue reading

The Undocumented Engineer

Kickstarter: Day 10

It’s been 10 days since I launched my first kickstarter campaign for my first book. These series of blog posts are a story of my journey with my first kickstarter campaign.

These are the things I’ve tried up until today to get more people to back my campaign:

  • Emailed my entire email list. Twice.
  • Have tweeted multiple times from different accounts about the campaign.
  • Tried unsuccessfully to get influential people to re-tweet or tweet about my campaign.
  • Emailed friends and acquaintances directly to ask them for their support.
  • Have posted the video, book cover and excerpts from my new book multiple times on Instagram, Facebook, Twitter and even Google+ and LinkedIn.
  • Have written three posts about my failure to get people to back my kickstarter campaign. This is the third one.

Continue reading

Kickstarter: Day 3

I started my first campaign on Wednesday, July 1st, 2015. So far I have 3 backers, one of them is my wife, the second is a friend and previous co-worker and the third one someone I don’t know. This post is about the changes and updates I’ve made to my still unsuccessful kickstarter campaign a few days after I started it. If you want to read about the launch click here.

A few days after the launch of my first kickstarter campaign and after realizing this campaign wasn’t going to have hundreds of backers in the first few days as I first imagined, I decided to keep spamming people sharing the kickstarter campaign. Social media and direct emails didn’t do as well as I first expected. So naive of me. The next thing on my list to get the word out about this campaign was to write and share an excerpt of the book The Undocumented Engineer, which is what my kickstarter campaign is about.  Continue reading

Kickstarter: Day 1

After thinking about writing a book for a while I finally pulled the trigger and launched a kickstarter campaign. I wrote a description, created the ugly book cover shown below using Gimp, and uploaded a video created using a notebook and a black permanent marker. I spent a lot of hours researching what a kickstarter campaign should look like. Read multiple blogs describing how to successfully launch a campaign, how to get featured on kickstarter, and even examined some of the successful kickstarter campaigns to learn how they did it. Continue reading

Summer is here

The summer is here and for those of us who have kids, it can be a time of fun and travel. At the same time summer can be frustrating and stressful for your kids if they are not busy doing something. It does not mean you need to have their entire summer planned up, but it helps if you can find them things to do while they are home and not in a camp or a family vacation. In this post, I write about an activity I found for my kids that I think is worth sharing. Continue reading

Two books every month

A new year is here and everyone is making resolutions, sharing their new year’s challenges, hopes, etc. I would like to share with you one of the new challenges I am setting up for myself. I love to read and have read a large variety of books. However, I have also bought quite a few books that I haven’t read yet. The excuse is always the same, lack of time and “better” things to do with my time.

Different - Escaping the competitive herd

This year I am challenging myself with the task (and enjoyment) of reading two books per month. I cannot reflect the amount of excitement I have about this here, but trust me, I am really looking forward to this challenge. I have already started my first book for this month, it is titled “Different: Escaping the Competitive Herd” by Youngme Moon which I had the pleasure to meet and attend her talk at one of the Business of Software events in Boston a few years back.

I will be sharing my reading list and comments on the different books I read in this blog, please feel free to share what books you are reading, book recommendations are welcome!

Happy New Year!

An introduction to Single Responsibility principle (SRP)

This is the fifth and last article describing SOLID principles. This article is about the Single Responsibility principle. Hopefully it will help you understand what the principle is all about and why it’s important to keep it in mind when designing and writing your code.

What is the Single Responsibility principle?

Here is the definition from Wikipedia: The term was introduced by Robert C. Martin in an article by the same name as part of his Principles of Object Oriented Design, made popular by his book Agile Software Development, Principles, Patterns, and Practices. Martin described it as being based on the principle of cohesion, as described by Tom DeMarco in his book Structured Analysis and Systems Specification. Continue reading

An introduction to Open Closed principle (OCP)

This is the fourth article on SOLID principles which I started a few weeks ago. I hope this is useful for you and that it gives you a simple understanding of what the Open/Closed principle is all about.

What is the Open Closed principle?

Bertrand Meyer coined the term Open/Closed Principle which appeared in his book titled Object Oriented Software Construction in 1988. The principle reads “software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification“. Continue reading

An introduction to Liskov substitution principle (LSP)

This post is about the Liskov substitution principle (LSP). This is also the third of my posts about SOLID principles, following the posts I wrote about DI and ISP in the past few weeks.

What is Liskov substitution principle (LSP)?

This principle is based on Barbara Liskov’s definition of subtyping, commonly known as the Liskov substitution principle which states the following:

if S is a subtype of T, then objects of type T in a program may be replaced with objects of type S without altering any of the desirable properties of that program

or in my own words, in programming we cannot always represent our objects with real-life objects and so we need to make sure subtypes respect their parents. Using the illustration below, in order to follow this principle we need to make sure that the subtypes (duck, cuckoo, ostrich) respect the parent class (bird). This means that in our code, we should be able to replace bird with duck, cuckoo or ostrich.

Subtyping

The above illustration shows clearly how in object-oriented programming (OOP) we can reuse some of our classes by making use of inheritance. This also shows very simply how using a base/parent class can be very beneficial and it is a main part of OOP.

So what is the problem you might ask? what is the purpose of the Liskov substitution principle? the purpose of it is to help you avoid some problems when modeling your objects by making you aware of potential problems that aren’t so obvious when using inheritance at the time of development.

The idea is to keep the LSP in mind when developing our classes so a parent class like “bird” can point to any of its child class objects i.e. “duck”, “cuckoo” or “ostrich” during runtime without any issues.

A classic example of LSP violation

One of the most classic examples of LSP violation is the use of a Rectangle class as the parent of a Square class. At first it seems this is the right thing to do as in Mathematics a square is a rectangle. However, in code this is not always true and this is what I meant when I wrote above that you cannot model your objects in code as you would do in the real world.

Below is an example of how in code, something like deriving a class of type Square from a Rectangle class might seem ideal…

public class Rectangle
 {
    public double Height { get; set; }
    public double Width { get; set; }
 }

 public class Square : Rectangle
 {
    public Square CreateSquare(double w)
    {
       var newSquare = new Square
       {
          Height = w, Width = w
       };
       return newSquare;
    }
 }

The example above looks fine, you can call the method CreateSquare by passing a value which is then assigned to both the height and width values of the object, this results in a proper formed square where all sides are equal. The problem arises when you define a rectangle where the height and width have different values, if you then try to substitute that object using a Square object… you will get unexpected results as the Square object expects its height and width properties to have the same value all the time.

However, the Liskov substitution principle says that you should be able to substitute any of the child classes for its base class and the example of the rectangle/square clearly breaks that rule.

The Liskov Susbtitution Principle (LSP) is one of the SOLID principles which can help you during software development to avoid common mistakes that are hard to notice if you are not thinking about them when using inheritance and modeling your classes/objects.

Happy coding!