Add full-text search to an Elixir Phoenix application

Mar 23, 2023

In this tutorial, we're going to build a simple Phoenix application based upon NimblePublisher. I will then show you how you can integrate Haystack to add full-text search for your content. This tutorial is going to be focused on indexing content from NimblePublisher, but in reality, the data you want to index can come from anywhere and it can be in any shape or form.

Continue reading

Building a full-text search engine in Elixir

Mar 22, 2023

Full-text search is a common requirement in a number of different types of website and web applications. I recently needed the ability to index and search content on a project I've been working on. However, using an off-the-shelf search solution didn't make sense for this project. Instead of building a closed-source solution as part of that project, I decided to build an open source library that I could use as a building block for my other Elixir projects that fit the same requirements. That open source library is Haystack, a simple, extendable full-text search engine written in Elixir.

Continue reading

Embedding XML templates in Phoenix 1.7

Jan 27, 2023

I recently ran into a problem embedding XML templates in a Phoenix 1.7 application. It took me a while to figure out what was going wrong and so I thought I'd write up this blog post to try and save other people time in the future. This tutorial shows how to use embedded templates in Phoenix 1.7 when the format of the template is not HTML.

Continue reading

Video object detection in Elixir using Nx and Bumblebee

Jan 26, 2023

In this tutorial we're going to be building video object detection in Elixir using Nx and Bumblebee. We will parse a video and then run it through a neural network to make a prediction about the object that is displayed in the frame.

Continue reading

Adding a Table of Contents to Nimble Publisher

Jan 09, 2023

This article describes how to use Nimble Publisher, a simple Elixir application for Markdown publishing, to add a Table of Contents to blog posts or articles. The article explains the importance of Table of Contents for SEO and reader engagement, and provides a tutorial on how to add them to Nimble Publisher blogs.

Continue reading

How being ignorant can help you succeed

Nov 30, 2022

How often do you think if you had known how difficult something was going to be, you would have never started in the first place? Underestimating how difficult a task is going to be can be a valuable form of ignorance because without it, you might not start the project in the first place. In this article we are going to be looking at how ignorance can be beneficial when it comes to choosing what you should be working on.

Continue reading

Gain perspective with a weekly review

Sep 06, 2022

A weekly review is a dedicated time to reflect on what you did this week, and what you will do in the coming week. It's an opportunity to re-align your goals, make improvements to your workflow, and to gain perspective on where you are on your journey. There are many benefits to getting into the habit of performing a weekly review. In this article we're going to be looking into weekly reviews, the benefits of doing a weekly review, and how you can set up your own weekly review for success.

Continue reading

What is the "Eat the Frog" productivity method?

Sep 01, 2022

The "Eat the Frog" productivity method is where you pick the most important thing from your to-do list and work on it first. It's a very simple way to prioritise your work and ensure you are always investing your energy into your most important work. The phrase was coined in Brian Tracy's productivity book, "Eat That Frog!: 21 Great Ways to Stop Procrastinating and Get More Done in Less Time", and is taken from the Mark Twain quote "if you have to eat a live frog, do it first thing in the morning and nothing worse will happen to you for the rest of the day".

Continue reading

Why your tasks take longer than you expect

Aug 30, 2022

The time it takes you to complete tasks is often longer than you expected. This happens to me quite regularly, and so I'm sure it probably happens to you too. Underestimating the time required to complete a task is known as the planning fallacy. The planning fallacy can have very serious consequences such as projects overrunning, deadlines missed, and budgets obliterated. This is why understanding the planning fallacy is so important. Once you are aware of the problem you can take steps to make better predictions on how long a task will take.

Continue reading

The importance of batching your work

Aug 25, 2022

An important thing to consider when choosing what to work on next is how to minimise context switches. Whilst preemption can be important under certain circumstances, generally you want to avoid wasting time and energy on the meta work of switching tasks. Batching your work is a good way to ensure you maintain focus on the given task by dealing with similar tasks all in one go, instead of sporadically throughout your other tasks.

Continue reading

What is task preemption?

Aug 23, 2022

Task preemption is when you temporarily stop working on your current task to switch to a different task, with the intention of completing the previous task at a later date. In certain situations, switching from what you are currently working on to work on something else can be more efficient, but it comes at the price of switching costs. This is a counterintuitive, but important thing to consider if you want to optimise how you work to get the most done.

Continue reading

What is the Pomodoro Technique?

Aug 18, 2022

The pomodoro technique is a productivity method that breaks tasks into short, focused periods of work. During each work period, you focus on the task at hand, and then after the period has finished you would take a short break. As you are forced to break tasks down into small chunks, the pomodoro technique is good for people that face an overwhelming to-do list and don't know where to start. The technique also promotes regular breaks as a way of resetting your mind between tasks.

Continue reading

What is Interrupt Coalescing?

Aug 16, 2022

A sure fire way to break your flow state is to get interrupted. When working on a task that has a long ramp up time, a constant barrage of interruptions can be the kiss of death to achieving what you set out to do. Interrupt Coalescing is where you block out interruptions so that you can concentrate on completing tasks without distraction. It is the intentional process of ignoring distractions, or making yourself unavailable to interruption in order to concentrate on the task at hand.

Continue reading

What is Kanban?

Aug 11, 2022

Kanban is a task management method that originated from the lean manufacturing movement. It was first developed by Taiichi Ohno, an industrial engineer at Toyota in Japan. Kanban is a way to visualise the current workload using cards that move between stages of the production line. Whilst Kanban originated in lean manufacturing, it has made the leap to the mainstream as a simple and flexible way to manage projects.

Continue reading

Priority Inversion and Precedence Constraints in Task Management

Aug 09, 2022

One of the most difficult things in deciding what to work on next is getting the balance right between priority and dependencies. Usually tasks don't exist in isolation, every task on your task list will have different priorities and certain tasks will need to be completed before other tasks can be started. Understanding how to choose the right thing to work on next with these two things in mind is incredibly difficult.

Continue reading

How to beat the afternoon slump

Aug 04, 2022

The afternoon slump is a period in the early afternoon where a lot of people experience a drop in energy, motivation, and focus. Occurring usually just after your lunch break, the afternoon slump can be a killer for your productivity. However, it's possible to avoid the afternoon slump and maintain a high level of productive output during the working day. Once you understand your mind and body's natural ultradian rhythm, you can better manage the precious resource of your energy.

Continue reading

What is the "shortest processing time" productivity method?

Aug 02, 2022

There are many different ways to sort and prioritise your to-do list. For example, you might want to prioritise your tasks by the earliest due date so that you work on tasks that are due first. Or perhaps you want to prioritise by the eisenhower matrix to ensure you are working on your most important tasks first. However, if you're feeling overwhelmed by a burgeoning to-do list, sometimes you just want to get as much stuff done as quickly as possible. This is known as the "shortest processing time" method because you are prioritising tasks by how quickly they can be completed.

Continue reading

What is the Getting Things Done (GTD) productivity method?

Jul 27, 2022

Getting Things Done (also known as GTD) is one of the most popular productivity methods for organising and processing the tasks you need to complete. It's a particularly effective method if you're feeling overwhelmed with everything you need to remember and do. One of the core philosophies of the Getting Things Done method is to get the things you need to do out of your head and into a system to be organised and processed. The human brain is better for processing information, rather than storing it. Getting everything you need to remember out of your head also significantly reduces anxiety because you no longer have to be worried about remembering everything.

Continue reading

How to beat student syndrome

Jul 26, 2022

A common situation I'm sure we've all faced is when we have a deadline, but we procrastinate and delay working on the task until the very last minute. Panic ensues and it's a crazy mad dash to the finish line in order to deliver the work on time. This phenomenon is known as student syndrome and it's a common problem that affects nearly everyone, not just students! In this article we're going to be looking into the problem of student syndrome, and the one clever trick you need to beat it once and for all.

Continue reading

The importance of importance when choosing what to work on next

Jul 21, 2022

There are many things to consider when evaluating what task you should work on next. It's not always as simple as sorting your tasks by due date and then picking the first off the top of the list. The importance of each of your tasks should be evaluated carefully, as this is likely going to have an outsize impact on how productive you are.

Continue reading

How to get more done whilst working less

Jul 19, 2022

It's easy to convince yourself that in order to get more done you need to work longer hours. But forcing yourself to do work past your body's capacity can actually cause you to be less productive. Working more intensely for shorter periods of time with extended periods of rest and recovery is actually a better strategy.

Continue reading

The importance of matching your tasks to your energy

Jul 14, 2022

It doesn't matter who you are, every person on planet Earth only has 24 hours in a day. It's impossible to make more time, and so in order to maximise your productivity potential, you need to make the most of your time. Using time as a fixed constraint turns out to be a really great thing. When time is a fixed resource, it means you need to be smarter with how you spend it.

Continue reading

Why you should match your tasks to your ultradian rhythm

Jul 12, 2022

Our minds and bodies have evolved over millions of years. We are who we are because of the lived experiences of our ancestors. Everything that we know is a delicate balance. If we work with this harmony, instead of against it, we can achieve great things.

Continue reading

What is Moore-Hodgson's Algorithm?

Jul 07, 2022

Moore-Hodgson's algorithm is an approach to scheduling work that aims to minimise the number of tasks that are late, rather than the lateness of any particular task. The algorithm was presented in 1968 by J. M. Moore, with an alternative algorithim attributed to T. E. Hodgson.

Continue reading

Why working on the same task with different energy levels will have different outcomes

Jul 05, 2022

A common misconception is, working on the same types of tasks will have the same type of outcomes. Your current energy level has a disproportionate impact on the outcome of any task you take on, yet we so often neglect to be mindful of choosing what to work on next. This can mean attempting to complete a task that does not match your current energy level could require more effort and will take longer to complete than if you chose to tackle it at a different time.

Continue reading

What is the "earliest due date" productivity method?

Jun 30, 2022

Choosing the right productivity method is all about selecting a strategy that optimises for your specific goals and objectives. If you choose a method that optimises for something you don't care about you are guaranteed to not get the result you were looking for. The "earliest due date" method optimises for reducing the lateness of the most late task at the expense of very other task that could also end up being slightly late.

Continue reading

Why you should manage your energy, not your time

Jun 28, 2022

You only have a certain amount of hours in the day to get stuff done. Everyone feels the pressure to be productive. However, forcing yourself to work on tasks that don't match your energy is a recipe for disaster. This can lead to a downward spiral that eventually results in burnout.

Continue reading

What is the "last in, first out" productivity method?

Jun 16, 2022

The "last in, first out" productivity method is a simple system for choosing the next thing to work on by what was added to the queue last. It's a straightforward, and predictable method for organising your tasks that originates from the world of lean manufacturing. In this post we're going to be looking at the "last in, first out" method, its benefits, drawbacks, and when you might want to use it to organise your tasks.

Continue reading

What is decision fatigue?

Jun 14, 2022

We are inundated with information from the moment we wake up, to the moment we go to sleep. We are constantly making decisions, but over the course of a day, your ability to make decisions significantly decreases. Your capacity to make decisions is a finite resource that is drained as your energy is depleted. This phenomenon is known as decision fatigue.

Continue reading

What is the "first in, first out" productivity method?

Jun 09, 2022

Having a methodology for completing tasks doesn't need to be complicated. The most important thing is that the method achieves your desired goal. Using a productivity methodology can simplify the process of getting stuff done because it can reduce the decision fatigue inherent in picking what to do work on next.

Continue reading

How to prioritise your tasks by urgency and importance

Jun 07, 2022

Choosing the right thing to work on is a very difficult problem. Evaluating the nuance of every task you've got on your to-do list is cognitively exhausting. The problem is compounded when we are instinctively drawn to tasks with certain characteristic profiles, even if completing those tasks will not be beneficial to our longer term goals. This distinction can be seen in the choice between urgent and important tasks.

Continue reading

The reason why your productivity method failed

Jun 02, 2022

When you're looking for a solution to your productivity problems, it can be tempting to jump on the latest trendy method. If you hear of a method that works for other people, why wouldn't it also work for you? However, many people bounce from method to method, never really finding something that works. All productivity methods advertise themselves as the one true way to solve your productivity predicament. However, no single productivity method is a one size fits all solution. Every productivity method optimises for a specific goal, and so the reason why your productivity method failed is not because the method is bad, it's because it's achieving the wrong goal.

Continue reading

Your calendar is a lossy to-do list

May 30, 2022

"One of the most popular ways people manage the things they need to do is via a calendar. A common expression you might have heard is, "if it's not on the calendar, it doesn't get done". In certain situations, a calendar can be the perfect way to manage your tasks. If everything you need to do revolves around events pre-scheduled for fixed points in time, a calendar is the perfect tool for the job. But for most people, using a calendar as a to-do list is a terrible solution. If you are currently managing your tasks via a calendar, but you're feeling overwhelmed and not making progress, you might be using the wrong tool for the job.

Continue reading

Which productivity method is the best?

May 26, 2022

Productivity is one of those problems that has always remained unsolved. The reason why it's always been an elusive problem is because the very concept of productivity is such a big, fuzzy concept. The atomic unit of productivity is a task, but tasks are a vague concept that are defined by any number of external factors. Tasks are also often not static, but in fact evolve over time or due to the stimulus from a whole host of different inputs.

Continue reading

How to choose your next task as a freelancer

May 24, 2022

Choosing the right thing to work on next is more complicated than simply picking the first thing off the top of your task list. This is particularly important for freelancers, where you have a wide variety of tasks from working on creative problem solving tasks, routine admin tasks, or client calls and presentations. Selecting the right task to work on in any given situation depends on a number of complicated factors, including the specific context you find yourself in. But it's incredibly difficult when your tasks are so completely different from each other.

Continue reading

How to handle task list overload

May 19, 2022

It's common wisdom that you shouldn't try and hold all of the things you need to do in your head at once. Productivity experts have been preaching this mantra since the dawn of productivity experts. Getting your tasks down onto paper, or in an app is a really good way of creating some space to think. When you don't have to rely on remembering everything, you can concentrate your brain cycles on thinking through those tricky problems.

Continue reading

How to choose the right tasks for your energy level and mental state

May 17, 2022

Choosing the right thing to work on next is a very important aspect of working productively. However, most people leave it up to chance by either deciding what to do work on next by whatever is at the top of their task list at the time, or by having a quick scan of their tasks and settling on the first thing that jumps out at them.

Continue reading

Introducing Prise, a smart productivity application

Apr 01, 2022

After a 6 year hiatus from writing blog posts, the author has developed Prise, a smart productivity application that uses machine learning to build a profile of tasks on a todo list. The idea for Prise was originally conceived in 2010 and the author is now excited to finally put their ideas out into the world. The author will be writing about business and technology, but mainly focused on building Prise. Those interested can sign up for the Prise early access list.

Continue reading

What are Behaviours in Elixir?

Nov 02, 2016

An explicit contract defines the public API of a module, allowing consumers to use the module in a generic way and switch between implementations easily. Behaviours in Elixir are modules that define the contract, and any module that uses the behaviour must implement the contract callbacks. Implementing a behaviour requires using the @behaviour annotation and implementing the callbacks as specified. This allows for interchangeable modules that can be composed together and easily switched out when needed.

Continue reading

What are Specifications and Types in Elixir?

Oct 26, 2016

Elixir is a dynamic programming language that allows developers to infer types at runtime, rather than requiring them to declare them upfront. Elixir also allows developers to define function signatures and custom types. Function signatures provide a way to document code and can be used with static analysis tools to find discrepancies and possible bugs. Custom types provide a way to explicitly represent concepts in code, making it easier to read and understand.

Continue reading

Writing Comments and Documentation in Elixir

Oct 19, 2016

In this tutorial, the importance of writing clear and concise code to improve readability was discussed, as well as the use of comments and documentation to help with learning. The tools and standards for writing comments and documentation in the Elixir ecosystem were covered. This included module documentation, function documentation, testing documentation, and generating HTML documentation. In the end, it was concluded that although writing documentation is not a favorite task for many developers, Elixir makes it beneficial and easy to do.

Continue reading

Working with Mnesia in Elixir

Oct 12, 2016

This article explored using Mnesia, a distributed, soft real-time database management system, as a storage mechanism for Erlang terms in Elixir applications. It is part of OTP, meaning it can be used without setting anything up and is faster than DETS. It also offers features like transactions and the ability to store data across multiple nodes, though it has the limitations of size constraints and distributed storage. Finally, it allows for direct storage of Erlang terms without translation. The article showed how to start Mnesia, create tables, insert and read data, and concluded that it is ideal for a limited amount of data on a fixed number of nodes, and that it offers the advantage of direct storage of Erlang terms.

Continue reading

What is ETS in Elixir?

Oct 05, 2016

ETS stands for Erlang Term Storage. It is a built-in storage engine in OTP, available in Elixir through Erlang interoperability. It is a key / value store, like Redis, but without the need for a third-party dependancy. In Elixir, you can create tables, add data, read data, delete data, and destroy tables using the :ets module. DETS is similar to ETS, but stores data to disk instead of in-memory. ETS can be used with GenServer to create a todo server which stores multiple todo lists.

Continue reading

The Little Elixir & OTP Guidebook [Review]

Sep 28, 2016

The Little Elixir & OTP Guidebook by Benjamin Tan Wei Hao is an introduction to Elixir and OTP that focuses more heavily on the OTP side of things. It covers topics such as setting up the environment, running elixir in iex, data types, pattern matching, processes, and using `GenServer`. The book also includes chapters on building a worker pool from scratch with Mix, GenServer, and Supervisors, as well as covering topics such as distribution, load balancing, fault tolerance, property-based testing, and concurrency testing. This book is a great first step for those who are struggling to understand the bigger picture of how to build Elixir applications and use OTP effectively.

Continue reading

Building a Casino in Elixir

Sep 21, 2016

This article has covered many of the fascinating aspects of Elixir, Erlang, and OTP that allow us to build highly available, fault tolerant applications. It has looked at using Agents, understanding GenServer, using Mix to organize projects, and working with Supervisors. It has then gone on to explain how all of these topics can be combined to build a Casino application. Finally, it has demonstrated how to generate the application using Mix with a top level Supervisor, as well as how to create a Player process and Supervisor to manage them.

Continue reading

Elixir in Action [Review]

Sep 14, 2016

This article reviews two learning resources for the relatively young programming language Elixir. Programming Elixir, written by Dave Thomas, is an excellent introduction for newbies, while Elixir in Action, written by Saša Jurić, is a more advanced guide for those looking to become an Elixir developer.

Continue reading

Working with Supervisors in Elixir

Sep 07, 2016

This article discussed how to use Mix to organize Elixir projects and how to use Supervisors to build highly fault tolerant applications. It explained the difference between monitoring and linking processes, and discussed the concept of "let it crash". Lastly, it provided an example of creating a 'Flakey Service' using GenServer.

Continue reading

Organising your Elixir project with Mix

Aug 31, 2016

Mix is a set of tools for creating, testing, and building Elixir applications. It is packaged with the language and is used to manage dependencies, compile the code for deployment, and to create a new project. Mix also comes with ExUnit, a testing framework. Naming conventions must be followed, such as using a top level module to prevent naming collisions, and files and modules should be snake and camel cased respectively. Mix also allows for umbrella projects which are sets of independent Elixir applications.

Continue reading

Understanding GenServer in Elixir

Aug 24, 2016

This article examines the use of GenServer in Elixir, a functional programming language, as an abstraction for building generic servers. It follows up previous articles which explored concurrency and parallelism, using tasks, and storing state in Elixir processes. It will discuss the how and why of using GenServer.

Continue reading

Using Agents in Elixir

Aug 17, 2016

In this tutorial, we looked at storing state in Elixir using processes. Processes allow us to store state inside of a process and access it through message passing. Elixir provides a number of helpers to make this process easier, such as the Agent module. Agents allow us to start a process, update state, and retrieve data from the state. They provide functions for adding, updating, reading, and deleting state, and can be used whenever state needs to be stored and interacted with.

Continue reading

Working with State and Elixir Processes

Aug 10, 2016

This article discusses how Elixir processes work and how they can be used to maintain state. It explains that like objects in object-oriented programming languages, processes communicate with each other via message passing, and can be thought of as a way to retain state. It also provides an overview of today's tutorial which will cover working with state and Elixir processes.

Continue reading

Using Tasks in Elixir

Aug 03, 2016

This article discusses the use of the `spawn/1` function and the `Task` module in Elixir to create and execute concurrent processes, as well as their use in supervision trees. It notes that while supervision trees will be discussed in a future tutorial, today's focus is on using tasks.

Continue reading

Understanding Concurrency and Parallelism in Elixir

Jul 27, 2016

Elixir processes are key for enabling concurrency and parallelism which are important for making applications run faster by running tasks concurrently and in parallel. Concurrency refers to when two or more tasks can start, run, and complete in overlapping time periods, whereas parallelism refers to when tasks run at the same time, for example on a multicore processor. In Elixir, processes are separate contexts (isolation) and you can have hundreds of thousands of processes on a single CPU (lightweight). If your computer has multiple cores, Elixir will run processes on each of them in parallel. To collect the results from each process, messages can be sent back with the result of the request.

Continue reading

Artificial Intelligence - A Guide to Intelligent Systems [Review]

Jul 20, 2016

This article discusses a book, "Artificial Intelligence - A Guide to Intelligent Systems", written by Michael Negnevitsky. It is for people from all kinds of different industries to gain an understanding of the theory behind artificial intelligence, and how to build and utilize intelligent systems. It is tailored for those without a background knowledge of calculus or experience with programming languages.

Continue reading

Implementing Password Reset using Ruby on Rails and Trailblazer

Jul 13, 2016

Allowing users to reset their password is a common and necessary feature of many web applications. This tutorial will go through the steps to implement password reset using Ruby on Rails and Trailblazer. The process comprises of two separate actions: 1) allowing the user to request a password reset email containing a unique token and 2) accepting the token and a new password. The tutorial will cover setting up the routes, creating a database table, creating an Operation and contract for requesting a reset email, and processing the reset request.

Continue reading

Working with Processes in Elixir

Jul 11, 2016

This article explored the basics of processes in Elixir, including how to spawn a process, send and receive messages between processes, and linking processes together. It also showed how processes in Elixir are analogous to objects in an object-oriented programming language.

Continue reading

Writing Integration Tests in Ruby on Rails

Jul 06, 2016

This article covers the importance of integration tests in Ruby on Rails, and provides a tutorial on how to create them for the registration and confirmation flows.

Continue reading

Understanding Comprehensions in Elixir

Jul 04, 2016

Comprehensions in Elixir provide syntactic sugar and readability when working with enumerable data structures. The Enum module has the same functions for working with enumerables and comprehensions use similar pattern matching and filters. Comprehensions can also use multiple generators for nested loops and produce any collectable data structure. There is no real difference in terms of performance, but they can make code easier to read.

Continue reading

Using Trailblazer Cells in Action Mailer

Jun 29, 2016

This article outlines how to use Trailblazer Cells and Action Mailer to create a confirmation email for a registration process. It explains the concept of Cells, which are View Models that can be used for emails, and references previous tutorials on getting started with Trailblazer Cells and building a user confirmation flow.

Continue reading

What are Elixir Protocols?

Jun 27, 2016

Polymorphism is a concept in programming that allows us to act on something in a generic way without knowing specifically what the thing is. In Elixir, polymorphism is implemented using Protocols. Protocols are like blueprints which define the function, and each type that wants to implement the Protocol also has an implementation that deals with how the Protocol function should be handled. We can define and implement our own Protocols in Elixir, and each type that uses the Protocol must have an implementation for it or it will throw an error.

Continue reading

Confirming Users with Trailblazer

Jun 22, 2016

This article describes a registration process being built using Ruby on Rails and Trailblazer. It covers how to create a link to confirm a user's email address and how to confirm imported users and give them the opportunity to pick a username and set a password. Trailblazer's abstraction is mentioned as a helpful tool for handling data based on the user's state. The article also provides a tutorial for how to implement this functionality.

Continue reading

What are Elixir Structs?

Jun 20, 2016

This article looks at Structs and Maps in Elixir, discussing how they are similar and different, and the benefits of using Structs over regular Maps. Structs are an extension of Maps which provide compile-time guarantees and stricter access rules. Structs should be used when the data structure is a known type with properties that are defined up front.

Continue reading

Building out a User Confirmation flow in Trailblazer

Jun 15, 2016

This article explains how to build out an action for creating new users in Culttt using a Trailblazer Operation. It covers how two new routes will be needed, along with a Controller and UserMailer class. It explains how the User::Create::Operation::Default class will be updated to send a confirmation email and how a new Operation for requesting a confirmation email will be created. It also covers how a Cell class and view template will be used for displaying the form and how tests will be used to make sure everything is working properly.

Continue reading

Working with Enumerables and Streams in Elixir

Jun 13, 2016

This article explores the differences between the Elixir `Enum` and `Stream` modules, and explains when and where each should be used in Elixir code.

Continue reading

Getting started with Trailblazer Cells

Jun 08, 2016

The Trailblazer Cells component of Trailblazer allows developers to encapsulate parts of their UI into components, using Object-oriented programming techniques and good practices to create widgets that can be composed and tested in isolation. This is in stark contrast to the Rails way of having an ocean of global helper functions and messy views. Cells provide a way to move the logic from the View into the Cell, and keep the View itself clean and easy to work with. They also provide a way to reintroduce Object-oriented methodologies that have been sucked out of the Rails View layer, and make testing easy by allowing Cells to be instantiated in isolation.

Continue reading

Understanding Recursion and Tail Call Optimisation in Elixir

Jun 06, 2016

This article discussed the use of recursion in Elixir, specifically for looping through lists. It provided an example of a module that prints each element of a list, and discussed tail call optimization. It then provided two more examples of recursion, one for doubling each value in a list, and one for only returning the even values.

Continue reading

Using Inheritance for Trailblazer Operations

Jun 01, 2016

This article discusses the use of inheritance in the context of Ruby applications built using Trailblazer. It explains that inheritance is a basic building block of Ruby and is used in several Trailblazer components. It also provides a link to an article that explains inheritance in Ruby in more detail.

Continue reading

Branching and Conditionals in Elixir

May 30, 2016

This article discusses how to use branching and conditional logic in the programming language Elixir. It suggests replacing the classical 'if' and 'else' statements with multi-clause functions and notes that there are no classical loop constructs in Elixir.

Continue reading

Using Trailblazer Operations in Controllers and Views

May 25, 2016

This tutorial explored how to get started with Trailblazer and Ruby on Rails, including creating an Operation for creating new users, writing tests, adding routes, and creating views. It also discussed the benefits of writing tests first and the spike and stabalise method of writing code. In the end, the tutorial showed how to connect the dots to finish off the implementation for creating a new user using Trailblazer and Ruby on Rails.

Continue reading

Multi-clause Functions with Pattern Matching and Guards in Elixir

May 23, 2016

This article discussed the importance of multi-clause functions and pattern matching in Elixir. It showed how to pattern match the arguments of a function and use multiple definitions of the same function based upon the arguments it was called with. It also discussed the use of guards in Elixir to make the clause more specific. This technique can be used to print a message based upon what type was given to the function.

Continue reading

What are Trailblazer Contracts?

May 18, 2016

In last week's tutorial, we looked at defining our first Trailblazer Operation for creating new users. Trailblazer Operations encapsulate a given action of the application and take responsibility for accepting data from the request, validating that data, and creating or updating the database. It is possible to define the Contract, which is responsible for the properties and validation rules of the Operation, as a separate class and set it as the Contract for the Operation. This is helpful for Operations that share many of the same properties and validation rules. The Contract is actually just Reform in disguise and is defined with a Base class that can be extended for the create and update actions. The Contract can then be set on the Operation, allowing business rules that should always be satisfied to be placed in the base class.

Continue reading

Understanding Pattern Matching in Elixir

May 16, 2016

Elixir is a programming language which uses Pattern Matching for a variety of operations, such as assigning values to variables, decomposing Tuples, Lists and Maps, using wildcards, and matching against the contents of a variable. Pattern Matching has many uses and is a unique feature of the Elixir language.

Continue reading

Getting started with Operations in Trailblazer

May 11, 2016

This article discusses the concept of Operations in Trailblazer, a framework for managing abstractions in Ruby applications. It builds on a previous tutorial which showed how to setup a Trailblazer project with Ruby on Rails. It explains that Controllers should be lean HTTP endpoints and Models should only deal with associations and querying, and that Operations are classes that encapsulate the business logic of an application.

Continue reading

Functions as First-Class Citizens in Elixir

May 09, 2016

In Elixir, functions are first class citizens which allows them to be assigned to a variable and passed as an argument to other functions. Anonymous functions are called using dot syntax to differentiate them from regular function calls. The & operator is also used when writing anonymous functions and it captures the module name, function, and arity and converts it into a lambda. Closures are lambdas which reference a variable from outside its scope and will still use the same value if it is changed afterwards. Functions as first-class citizens can be used to make functions such as 'map', 'each', and 'reduce' more flexible and generic.

Continue reading

Getting started with Trailblazer and Ruby on Rails

May 04, 2016

This article provides a review of Trailblazer, a book on the "high-level architecture" framework for Ruby web applications. It explains how Trailblazer is decoupled from Rails and provides instructions on setting up a new Ruby on Rails project and adding Trailblazer to it. It also explains the advantages of the Trailblazer folder structure and the benefit of using Trailblazer for new projects outside of Rails. This article serves as an introduction to the mini-series on Trailblazer.

Continue reading

Understanding Function Arity in Elixir

May 02, 2016

In this tutorial, the importance of function arity in Elixir is discussed. Function arity is the number of arguments a function takes, and in Elixir functions with the same name can have different arity, which is useful for providing default arguments. Pattern Matching will be looked at in the next tutorial.

Continue reading

Trailblazer - A New Architecture For Rails [Review]

Apr 27, 2016

This article is about Ruby on Rails and Trailblazer, a "framework" for dealing with the complexity of a Rails project. Ruby on Rails provides a wealth of tools to quickly create a functional Minimal Viable Product, but can become a "ball of mud" when the project reaches a certain level of complexity. Trailblazer provides tools for adding abstraction and a methodology for dealing with this complexity. The framework is created by Nick Sutterer, who has also written a book about Trailblazer.

Continue reading

Using the Pipe Operator in Elixir

Apr 25, 2016

Elixir is a functional programming language and the Pipe Operator is a useful tool for combining functions and making it easier to read data transformations. The Pipe Operator allows the return value of one function to be passed as the first argument to the next, making it simpler to read and understand transformations. It also makes it easier to move each stage of a transformation onto a new line in source files.

Continue reading

Working with CSVs in Ruby

Apr 20, 2016

In this tutorial, it is discussed how to work with CSVs in Ruby. It explains how to read existing CSV files into an array of arrays, read them line by line, and read them with options. It also covers how to write data to a CSV file. The CSV class is part of the Ruby Standard Library and makes working with CSVs easy.

Continue reading

Working with Functions and Modules in Elixir

Apr 18, 2016

Elixir is a functional language and functions play an important role when developing Elixir applications. Functions typically start with a lowercase letter or an underscore and can contain alphanumeric characters and underscores. Modules are used to organize functions into namespaces and you can define private functions with the defp construct.

Continue reading

Zero to One [Review]

Apr 13, 2016

This article is about the book Zero to One, which offers guidance for creating companies that produce original products. It is written by Peter Thiel and Blake Masters and is based on a course Thiel taught at Stanford University in 2012. The book's main point is that the next great technology company will not look like existing companies such as Microsoft, Apple, Google, or Facebook, and that true innovation requires going from 0 to 1.

Continue reading

Working with Keyword Lists and Maps in Elixir

Apr 11, 2016

In this introduction to Elixir, we have looked at Strings, Tuples, and Lists, as well as two associative data structures; Keyword Lists and Maps. Keyword Lists are Lists of Tuples where the first item of each Tuple is an Atom, and they are usually used for passing the arguments to a function or for passing options. Maps are used to store key/value associations, and they are not ordered and you can use any type for the key. Elixir also has a Standard Library Module that provides a number of useful functions for working with Maps.

Continue reading

Creating a Sign Up Form flow in Ruby on Rails Part 3

Apr 06, 2016

This tutorial is about building a registration flow with Ruby on Rails. Part 1 looked at building out the Model layer, Part 2 added the register Form Object, and Part 3 focused on adding the Controller and the View to allow users to register via the browser, as well as the Functional Tests required to assert that this functionality is working correctly. The tutorial also looked at adding the root route, displaying the registration form, and dealing with failed registrations.

Continue reading

Understanding Lists in Elixir

Apr 04, 2016

This article looked at the basics of working with Elixir's List type, which is a type that holds individual items as a list of separate values. It discussed how to get the length of a list, how to flatten a nested list, and how to use the List and Enum modules. It also looked at the head and tail of a list and how they are used in recursive functions.

Continue reading

Creating a Sign Up Form flow in Ruby on Rails Part 2

Mar 30, 2016

This article discusses the use of Form Objects in a registration flow in Ruby on Rails. It builds on a previous tutorial from last week that set up the Model layer of the flow. It explains how Form Objects are a good way of encapsulating processes that only apply when a user is first signing up, and then goes on to show how to add a Form Object for this purpose.

Continue reading

Using Tuples in Elixir

Mar 28, 2016

Tuples in Elixir are a "list" type that can contain items of different values. They are used for storing related data together to form a single aggregate value, and are stored contiguously in memory so getting a piece of data from a Tuple is fast. However, modifying Tuples is expensive as Elixir will copy the whole Tuple in memory and cannot be enumerated. They are often used as the return value of a function, as it enables Pattern Matching and the return value is a known value.

Continue reading

Creating a sign up form flow in Ruby on Rails Part 1

Mar 23, 2016

This is a tutorial on creating a registration process for a Ruby on Rails application from scratch, from creating the Model, Form Object, Controller, View, and writing Unit and Functional tests. The tutorial is split over the next couple of weeks, with the first tutorial focusing on creating the Models and writing Unit Tests. The code for this tutorial is available on Github.

Continue reading

Working with Strings in Elixir

Mar 21, 2016

Elixir does not have a dedicated String type, instead Strings are represented as Binaries or Character Lists. Binaries are represented with double quotes, while Character Lists are represented with single quotes. The String Module has a number of useful functions, and Strings can also be interpolated. Heredocs are used for multiline Strings, and are usually represented as Binaries. It is important to understand the difference between Binaries and Character Lists, as they are not interchangeable and you may encounter Character Lists when using an Erlang library.

Continue reading

Writing Functional Tests in Ruby on Rails

Mar 16, 2016

This article discusses the differences between Unit and Functional Testing in the Ruby on Rails framework. Unit Testing is simpler and tests the most basic "unit" of code in isolation. Functional Testing is more complex and tests that components of the application are working together correctly by making a request and then asserting that the request is handled correctly. When writing Functional Tests, it is important to test the request is successful, that the response includes the correct data, that authentication is handled correctly, and that session or flash data is set correctly.

Continue reading

Understanding the Types in Elixir

Mar 14, 2016

This article introduces the basic building blocks of the Elixir programming language, such as variables, atoms, booleans, nil, numbers, lists, tuples, keyword lists, and regular expressions. It is an ideal resource for those already familiar with programming languages such as PHP, Python, or Ruby, as many concepts will already be familiar. It is also pointed out that data in Elixir is immutable, but variables can be rebound, making them mutable.

Continue reading

Testing Active Job and Active Mailer in Ruby on Rails

Mar 09, 2016

This article discussed how to test Active Job and Active Mailer in Ruby on Rails. It suggested writing Unit Tests to execute code in a controlled environment with controlled inputs and then assert that the output is correct and setting up Action Mailer Previews to quickly render the email to check if it looks correct. Additionally, it advised writing Functional Tests to make sure the correct email is sent when the application receives a particular request.

Continue reading

Programming Elixir [Review]

Mar 07, 2016

Dave Thomas' book "Programming Elixir" is an introduction to the Elixir language that serves as a great starting point for those coming from other languages such as Ruby, Python, or PHP. The book provides a broad, but shallow overview of the language and helps readers think with a functional mindset. It is not suitable for complete beginners as there is a lot of terminology that is expected to be known. However, for those with a solid understanding of other programming languages, this book provides a great introduction to Elixir and its concepts.

Continue reading

Getting started with Action Mailer in Ruby on Rails

Mar 02, 2016

Rails' Action Mailer feature makes it easy to send emails in a web application. It works similarly to Controllers and Views, with Mailer acting as the Controller and View used to generate the markup for the email. Setting up Action Mailer involves creating a Mailer class, adding a method for the email, creating the Views, and finally configuring the sending options. This allows developers to focus on the important aspects of their application instead of dealing with the headache of sending emails.

Continue reading

Getting started with Elixir

Feb 29, 2016

This article provides an introduction to the Erlang and Elixir programming languages and how they can be used to build applications and services. It discusses the history of Erlang and its use in telecoms systems, as well as the advantages of Erlang as a general-purpose language. It also explains Elixir, which is built on top of Erlang, and how to install and run it. Lastly, the article encourages readers to join the author on an exploration of Elixir and the Erlang ecosystem.

Continue reading

Getting started with Active Job in Ruby on Rails

Feb 24, 2016

Active Job is a framework from Ruby on Rails which provides an abstraction over queues and background jobs in order to simplify the process of running certain types of tasks. It allows for the execution of tasks such as crunching data, sending email notifications, or passing data into third-party analytics systems outside of the main request response cycle, making the process quicker. It also allows for the choice of queue infrastructure to be an operational decision, so it is easy to switch providers without having to rewrite the whole application. This tutorial provides steps for creating a new job and configuring the queue, making it easier to create web applications.

Continue reading

Advocacy - Championing ideas and influencing others [Review]

Feb 22, 2016

Having an innovative idea is not enough to become successful. In order to achieve success, you must be able to advocate for and communicate your idea effectively to various audiences. This is the work of John A. Daly, a professor at the University of Austin, Texas. To effectively communicate your idea, you must understand your audience and what they are looking for, as well as frame your message in a way that suits their knowledge and experience. Additionally, you must also have a good personal brand and understand people's basic needs in order to have your idea accepted.

Continue reading

Replacing Fixtures with Factory Girl in Ruby on Rails

Feb 17, 2016

This article discusses the importance of writing tests when working on a large application and introduces Factory Girl, a popular gem for creating model objects that can be used to write tests in Ruby on Rails. It explains how Fixtures, which can be used to populate the database with data before each test, can add ambiguity to tests, and suggests using Factories instead.

Continue reading

Setting up Mandrill Webhooks with Laravel

Feb 15, 2016

Mandrill's transactional email API service makes sending application emails easy by making an API request, however there can be issues such as emails being rejected, bounced, or marked as spam. Mandrill provides Webhooks to notify the user of any problem, so the user is not left in the dark. This tutorial looks at setting up and using Mandrill Webhooks in a Laravel application to solve the problem of a user being left in limbo if their invitation email is rejected or bounced."

Continue reading

Using Form Objects in Ruby on Rails with Reform

Feb 10, 2016

Form Objects have become a very well recognised pattern in the world of Ruby on Rails. Open Source libraries such as Reform can be used as a base for all of the forms in the application. Form Objects are responsible for the validation of form data and the creation of the required models for the request. Reform offers the ability to define custom behaviour such as automatically generating a slug from the title or converting Markdown to HTML.

Continue reading

Setting up and using Cron Jobs with Laravel and AWS Elastic Beanstalk

Feb 08, 2016

This article looks at how to set up cron jobs on AWS' Elastic Beanstalk in order to run scheduled jobs such as automated emails, generated reports, or periodic notifications.

Continue reading

Migrating WordPress data for a Ruby on Rails application

Feb 03, 2016

In this article, the author discussed how to migrate WordPress data to a new application. To do this, the author generated a Rake task and used the Nokogiri gem to read the XML export from WordPress. They then created data objects for each type of data from the export and wrote a method to import the data. Finally, the author discussed the importance of encapsulating each chunk of data from the WordPress export as a class in order to deal with conversion details.

Continue reading

Adding Intercom support to your Laravel application

Feb 01, 2016

This article discusses the importance of offering reliable customer support when building a business online, and how Intercom can be used to track customer details and communicate effectively with users. It advises against developing a custom solution for customer support, as there are already suitable products available on the market. The tutorial then goes on to explain how to integrate Intercom into an application.

Continue reading

Rendering Markdown and HTML in Ruby

Jan 27, 2016

I am currently converting Culttt, a WordPress blog, into a Ruby on Rails web application. To do this conversion, I am using the html2markdown and redcarpet gems to convert my WordPress HTML into Markdown, and then generate HTML from the Markdown. To ensure the HTML that is generated is consistent, I am using the pygments gem to add syntax highlighting to code blocks.

Continue reading

Adding Slack Slash Commands to a Laravel application

Jan 25, 2016

Slack is a popular central communication tool for many companies. It allows integration with third-party services and building of internal integrations for custom applications. This tutorial looks at setting up Slack slash commands in a Laravel application, with the steps of setting up the slash command in Slack, adding the route, defining the controller, creating the Slack class, defining the command interface and implementations. This makes it easy to create slash commands that can quickly return data and increase team productivity.

Continue reading

Implementing Roles and Permissions in Ruby on Rails

Jan 20, 2016

This article discussed how to implement roles and permissions in a Ruby on Rails application. It covered the creation of a Role and Assignment model to associate roles to users, as well as the use of the Pundit gem to define policies for controlling what users can access. With this setup, users will be able to have many roles within the application, each having different permissions for the various resources of the application.

Continue reading

Dealing with different types of something with The Strategy Pattern

Jan 18, 2016

This tutorial showed how to set up the functionality to allow users to upload files from multiple locations. It explained the importance of defining an interface, as well as providing implementations for each type of upload. It then discussed how to accept the request and iterate through the array of files, calling the handle() method for each one. Finally, it concluded by showing how this pattern is known as the Strategy Pattern.

Continue reading

Creating Polymorphic relationships in Ruby on Rails

Jan 13, 2016

Polymorphic relationships are a type of model association where a single model can belong to multiple other models on a single association. Rails makes it easy to implement this kind of functionality and this tutorial walked through the steps of setting up a polymorphic relationship to allow comments to be associated with projects, tasks, and attachments.

Continue reading

Importing demo data into a Laravel application

Jan 11, 2016

This article discusses the importance of an on-boarding experience for users of a new application. It encourages creating a demo account so users can learn the tools and see if the application will work for them, instead of dumping them into a blank state. It then provides a tutorial on how to import demo data to create better on-boarding flows for Laravel applications.

Continue reading

Authenticating Users in Ruby on Rails

Jan 06, 2016

Rails makes it easy to authenticate users with very little code. By using the 'bcrypt' gem, a 'User' model with three properties can be generated, and a test can be written to ensure authentication works. The 'User' class then can be given the 'has_secure_password' method to make the authentication functionality work. Devise offers more functionality, but Rails provides a great solution out of the box.

Continue reading

How to create a Zip Archive in PHP

Jan 04, 2016

The ZipArchive class in PHP allows users to easily bundle multiple files into a zip archive. This is useful for applications that need to export data with file uploads, images, or other data that doesn't fit into a spreadsheet. The ZipArchive class provides a number of methods for creating the archive, and is a universally recognised filetype. This tutorial demonstrates how to use the ZipArchive class to create a zip archive in PHP.

Continue reading

TDD Active Record Models with MiniTest

Dec 30, 2015

This article explains the concept of Test Driven Development (TDD) and how to use it for Active Record Models with MiniTest in Ruby on Rails. It starts by generating the model class and test file, then writing a test to ensure that the title is required. It then explains how to use Shoulda for writing other validation tests and for enforcing uniqueness. Finally, it explains how to use a regular expression to validate the format of a field.

Continue reading

Dealing with brute force attacks in Laravel

Dec 28, 2015

This tutorial provides guidance on how to set up a throttling system to protect a web application from brute force attacks. This system involves creating a database table to store failed authentication attempts and a throttle model to check if the number of requests has exceeded the limit. The tutorial also provides code samples for recording failed authentication attempts, transforming the IP address from binary, and adding throttling to the authentication. This solution is not foolproof, but is a simple way to protect applications from attack.

Continue reading

Creating Views in Ruby on Rails

Dec 23, 2015

This article provides an overview of how to create views in Ruby on Rails as part of the Model-View-Controller (MVC) paradigm. It follows up from a previous article that discussed creating Controllers in Ruby on Rails. The View layer is responsible for generating the HTML response for a request.

Continue reading

How to test uploading and returning files in Laravel

Dec 21, 2015

This tutorial looks at creating temporary URLs to allow API clients to get uploaded files without exposing them to the public internet. It also discusses how to configure Laravel to use the local filesystem, as well as how to define routes and create a controller to store and view/download files. Finally, it covers testing uploading files to the API.

Continue reading

Creating Controllers in Ruby on Rails

Dec 16, 2015

This tutorial looked at the role of the Controller in a typical Ruby on Rails project, how to create a Controller in Rails and how to define Controller Methods, accept parameters, work with Sessions, and display Flash Messages. The Controller's responsibility is to accept a request and dispatch a response from the application, typically HTML or JSON. It should also accept parameters, work with Sessions, and display Flash Messages.

Continue reading

Returning secure files from an API with temporary URLs

Dec 14, 2015

A common requirement for many types of web application is the ability for users to upload files. To secure the files, a better solution is to generate temporary URLs that can be used to return the file. This makes it easier to grab the file with an HTTP request and it also provides a secure way of accessing the file without exposing the URL to the world. In this tutorial, we discussed the problem we face and an overview of the solution. We then created a Token class to generate and check the token, and a method to generate the URLs.

Continue reading

Defining URL routes in Ruby on Rails

Dec 09, 2015

In this tutorial, we looked at defining URLs in Ruby on Rails. We discussed the five main HTTP methods and how to map them to common actions in a web application. We then explored the routes.rb file, and how to define basic URLs, as well as nested resources, namespaced resources, and using Rails helpers to generate URLs. Finally, we discussed the importance of having a good URL scheme that follows the conventions of REST and HTTP.

Continue reading

Dealing with scheduling in PHP

Dec 07, 2015

This article looks at various ways to schedule something for the future in web applications. It discusses simple addition to a timestamp, Date Time Durations, Date Time Intervals and Recurrence Rules. These are all standards which are already defined and are preferable to inventing your own formula. All of these methods can be used to calculate when the next time something should happen.

Continue reading

Querying with Active Record in Ruby on Rails

Dec 02, 2015

This article covers the Active Record pattern, which encapsulates a single row of a database in an object, making it easy to create, update, and delete data from the database. It also explains how to use the Active Record class to query data from the database. Finally, it provides a tutorial on how to use the various query methods of Active Record.

Continue reading

Sending data via Pusher in a Laravel Application

Nov 30, 2015

Over the last couple of weeks, the application has been adding Pusher to a Laravel application. This week, the final instalment was added, which includes functionality to subscribe and unsubscribe users from channels, as well as the ability to push data to the client. The steps to add Pusher include setting up the Client for requests, setting up the Storage to store active users, authenticating users using private and presence channels, and creating a route to accept Pusher webhooks. The signature must be checked against to make sure the request is valid, and events such as MemberAdded and MemberRemoved will be sent via webhooks to add or remove members from the Redis storage.

Continue reading

Understanding Active Record Callbacks

Nov 25, 2015

Active Record objects have a lot of power and responsibility within a Ruby on Rails project, and callbacks can help run specific logic whenever an object is created, updated, or destroyed. Callbacks can be registered with a method or macro style, and can have conditions attached to them. Callbacks can also be extracted into their own class for reuse or isolation. While callbacks can be useful, they should not be used for anything more complicated than modifying data on the object, and should be kept to a minimum.

Continue reading

Authenticating with Pusher in a Laravel application

Nov 23, 2015

In this article, the author explains how to set up Pusher in a Laravel application, including creating a Client to make HTTP requests and a Storage container to store active users. The focus then shifts to authentication for setting up Pusher.

Continue reading

Design Patterns in Ruby [Review]

Nov 18, 2015

Design Patterns in Ruby is a book that offers a solution to common programming problems by showing how to implement design patterns in Ruby. Written by Russ Olsen, the book takes some of the most common patterns from the Gang of Four book and shows how to use them with the Ruby programming language. It covers the problem that the pattern is meant to solve, then how to implement the solution in Ruby, and how to optimize the solution. It is a good resource for both beginners in Ruby and those familiar with the language and design patterns.

Continue reading

Setting up Pusher in a Laravel Application

Nov 16, 2015

This article discusses how modern software users expect interactive and immersive experiences across desktop, web, and mobile. It also introduces the service Pusher, which is a tool to very easily make software "real-time", and how integrating Pusher into a Laravel application can add a huge amount of credibility in the eyes of customers.

Continue reading

What is Active Model?

Nov 11, 2015

Active Model is a library of modules used to add certain aspects of Active Record's functionality, such as validation, serialization, and translations, to Ruby objects. Examples of its use include Form Objects to remove some of the burden of validation from Active Record models, and Domain Objects that require certain types of validation. It is a useful tool for adding Active Record-like functionality to Ruby objects without having to reinvent the wheel.

Continue reading

Marshalling SQS jobs in Laravel

Nov 09, 2015

This article explains how to implement a feature to Laravel applications that allows jobs to be placed onto a queue and processed from a controller. It provides a tutorial on how to build this functionality into an application using AWS for the SQS provider.

Continue reading

Using Form Objects in Ruby on Rails

Nov 04, 2015

This article discussed two integral aspects of Ruby on Rails: Models and validations. It then discussed why it can be problematic to add process validations to Models, and proposed the use of Form Objects as a solution. Form Objects are objects that are used in forms in place of ActiveRecord objects and encapsulate the logic around a process. They are easy to create and should be used when appropriate to avoid clutter in Models.

Continue reading

How to design and build a PHP data export service

Nov 02, 2015

This article outlines a method for combining PDF and CSV generation services into a single API in order to make managing these features in a web application easier and more consistent. It then provides a tutorial for building this type of service, from the initial API design to the finished product.

Continue reading

Working with Validation in Ruby on Rails

Oct 28, 2015

Validation is an important process of ensuring that data coming from the outside world is correct and meets the requirements of an application. In Ruby on Rails, validation rules are typically defined within models and there are a number of validation helpers available that cover the majority of validation scenarios. Validation rules should be enforced to prevent bugs from entering the application, as well as to define and implement important business rules.

Continue reading

Generating PDFs from HTML and PhantomJS

Oct 26, 2015

This article discusses how to generate PDFs dynamically and easily using HTML, CSS, and PhantomJS. It explains why PDFs are preferred over simple print stylesheets and provides a tutorial on how to generate PDFs in web applications.

Continue reading

Understanding Active Record Associations

Oct 21, 2015

This tutorial looked at how to use Active Record Associations in Ruby on Rails. It explained the different types of associations (has_many, has_one, and many-to-many) and how to use the Rails DSL to define them. It also looked at how the relationships can be accessed through the associated instance methods. All of this is important for understanding how the important entities of an application are associated.

Continue reading

Sorting Multiple Languages and Weird Characters in PHP and MySQL

Oct 19, 2015

This tutorial discussed the problems with sorting data in multiple languages and with weird characters. It introduced the Unicode Collation Algorithm, which is responsible for sorting words according to language-specific rules. It also showed how to sort data using PHP's Collator class and how to sort data in the database using extra columns or join tables.

Continue reading

Getting started with Active Record in Ruby on Rails

Oct 14, 2015

Ruby on Rails is popular for its implementation of the Active Record ORM, which makes accessing and working with data in a database easy. This is part of the "convention over configuration" mantra, where defaults are used to reduce the overhead of matching up names and configurations. Creating an Active Record model is easy by extending the `ActiveRecord::Base` class, and creating, updating and deleting objects is also easy.

Continue reading

Sending template emails through Mandrill in Laravel

Oct 12, 2015

This article discusses the issue of sending emails in web applications, which is an essential but often difficult task. It explains that email development is stuck in 1995, and then outlines the various tools and services available to simplify the process. It then introduces the service Mandrill, which provides an API for sending emails and allows the marketing department to tweak HTML templates. Finally, it provides a tutorial on how to set up a version of Laravel's email service for those who use the Laravel framework.

Continue reading

Understanding Ruby on Rails Migrations

Oct 07, 2015

This article discusses how to use migration files in Ruby on Rails to control the database schema and make deployment and changes easier. It details how migration files are sets of instructions that can be run against the database, allowing changes to be captured within a migration file so it can be repeated by other installations of the project. It also mentions how this can be useful when it comes to deploying the application or working with other developers.

Continue reading

Handling complex API requests with Pipelines

Oct 05, 2015

API's are now the cornerstone for application architecture, and should be able to handle complex requests for data. The Pipeline Design Pattern is an excellent way to build up complex queries in a structured and composable way, by breaking the process into individual tasks and passing the query builder through each task. This avoids having messy controller methods with many query options and can be used for middleware. The Query Pipes should have a 'handle' method that accepts the Request and a Closure object, and can be used to set the Account context, add optional filters, and limit the number of results.

Continue reading

Creating your first Ruby on Rails Model

Sep 30, 2015

Ruby on Rails is a web application framework built upon many of the most popular and widely used software design patterns. Two of these patterns are the Active Record pattern and Model-View-Controller, which Rails embraces and follows as "The Rails Way". This makes working with Rails much more enjoyable. Today's tutorial looks at creating the first Ruby on Rails Model, which is responsible for holding the business logic and talking to the database. The Rails generators can also be used to create the necessary files for the Model, as well as a migration file which tells the database how it should be built. Overall, Rails provides a lot of helpful features and conventions to make it easier to turn an idea into a working product.

Continue reading

How to use the Pipeline Design Pattern in Laravel

Sep 28, 2015

The Pipeline Design Pattern is a way to break down complex processes into smaller tasks. It makes it easy to add, remove, or replace stages of a process without disturbing the whole system. Laravel uses the Pipeline Design Pattern in a few places throughout the framework, making it easy to use this pattern in applications. There are advantages and disadvantages to this pattern, and Laravel provides an easy way to use it in applications.

Continue reading

Getting started with Ruby on Rails

Sep 23, 2015

Ruby is a programming language created by Yukihiro "Matz" Matsumoto which is dynamic, object oriented, and easy to read and write. Ruby on Rails is a web application framework built on top of the programming language and is used by some of the most popular online businesses. In this new series, it will cover everything needed to learn how to build websites and web applications using Ruby on Rails. Installing Ruby and Rails is the first step, followed by creating a new project and launching it for the first time.

Continue reading

Setting the Context in a Laravel Application

Sep 21, 2015

This article looks at the importance of context in a Laravel application, emphasizing the need to check business rules whenever a request is made and setting the context accordingly. It suggests using a combination of practices to ensure that business rules are correctly enforced and the context is reliably set.

Continue reading

Getting started with Sinatra

Sep 16, 2015

Sinatra is a popular "micro-framework" for building web applications, perfect for simple websites, applications or APIs that don't require the weight or functionality of a framework like Ruby on Rails. It is installed as a gem and routes for HTTP methods can be set up using simple syntax. URL parameters can also be accepted and view files can be used for each page. Sinatra is a great choice for providing server backends for applications or services without the need for a fully-blown web framework.

Continue reading

Managing Context in a Laravel application

Sep 14, 2015

Context is an important part of web applications as it determines how business rules should be enforced. Managing context can be tricky but it is possible to set it up in a simple, consistent manner. This tutorial explains how to set up and manage context within a Laravel application using the IoC Container. It walks through steps of creating an abstract context class, setting the context within the application, and using the context to enforce business rules.

Continue reading

What is Ruby Rack?

Sep 09, 2015

Rack is an interface used in the Ruby world that allows developers to use any web server with any framework as long as both adhere to the Rack contract. It is an implementation of the Pipeline Design pattern that enables Middleware to be added to the application's request lifecycle. It is a standardised contract for accepting a request and returning a response within web applications and makes it easy to write applications that can be accessed via HTTP requests. Middleware can also be shared between different projects.

Continue reading

Implementing Business Rules as Guards

Sep 07, 2015

This article explains how to create Guard classes that encapsulate a single business rule. Guards accept what it requires in order to check the rule, and if the rule is not satisfied, an Exception will be thrown. The article also explains how to create an abstract Guard class and a trait to easily mix and match Guards.

Continue reading

Testing with RSpec

Sep 02, 2015

This article discussed the differences between two popular Ruby testing frameworks, Mini Test and RSpec. Mini Test is the default testing framework for Ruby on Rails, while RSpec has a syntax that reads more like a specification than a test. It is ultimately up to the user to decide which framework to use, but if working on an existing project, it is best to use whatever is already being used.

Continue reading

How to resolve environment specific implementations from Laravel's IoC Container

Aug 31, 2015

Laravel provides a convenient way to resolve environment specific implementations, such as for sending emails or SMS messages. For example, in development you would want to log sending emails, while in production you would use an implementation that actually sends the emails. This saves you from accidentally emailing customers when testing your code. Laravel provides a foundation for this functionality within the framework and you can easily create the same conveniences for your own services and get the benefit of environment-based implementations.

Continue reading

Testing with Mini Test

Aug 26, 2015

Test Driven Development is an important practice adopted by many in the Ruby community. Mini Test and RSpec are two popular tools used for testing in the Ruby community and they both provide the same outcome. This week we looked at using Mini Test, and next week we will be looking at using RSpec. To get started, you need to add 'minitest' as a development dependency, create a Rake task to make running the tests easier, create a Test Helper file, and create the first test. Mini Test also has a range of assertions and Spec helpers to make writing tests easier. Testing is an important part of application development and Ruby is a great language to learn how to do it in.

Continue reading

Migrating existing users to a new password hashing algorithm

Aug 24, 2015

This article discusses the importance of considering how to migrate existing user passwords when rebuilding an application from the ground up, and provides a tutorial on how to do this by using a simple authentication process.

Continue reading

Creating a Ruby Gem

Aug 19, 2015

The software industry is unique in that it has Open Source, which allows developers to work collaboratively and share solutions to common problems. Ruby has the concept of "Gems", which are Open Source packages that can be pulled into your project. Installing Bundler and creating the Gem is the first step in making a Gem. The Gemspec file contains the metadata and dependencies for the Gem. The code is found in the lib/todo.rb file. Releasing a Gem involves pushing the code to Github and creating an account on RubyGems, then running the command 'bundle exec rake release' in terminal.

Continue reading

Adding Oauth to a Laravel API

Aug 17, 2015

When building an API, it is important to consider what type of authentication to implement. HTTP Basic authentication is an easy choice, but it is quite limited. Oauth 2.0 is a better choice as it is a recognised open standard and is used by some of the biggest online companies. Oauth defines different 'grants' for different use cases and two distinct components, the Authorization Server and the Resource Server. There are a number of existing open source solutions for implementing Oauth, such as the league/oauth2-server package. To use this package, you need to define the table migrations and storage implementations, as well as the Oauth authentication endpoint. After this is set up, you can use the package to generate access tokens and refresh tokens, as well as to grant scopes to control access to the API.

Continue reading

Confident Ruby [Review]

Aug 12, 2015

Confident Ruby is a book of design patterns by Avdi Grimm that focuses on writing methods that are clear, easy to understand and free from errors. It includes how to structure a method, accept inputs, process data, deal with errors and return output. The book is written for Ruby developers but the general ideas and principles are applicable to other programming languages. It promotes small changes that can be applied iteratively to almost any code base, allowing for incremental improvements to an existing codebase. It is recommended for Ruby programmers and for those looking to broaden their skills, as well as intermediate to advanced OOP programmers looking to learn more about design patterns.

Continue reading

Dealing with Exceptions in a Laravel API application

Aug 10, 2015

This article provides a tutorial on how to structure a Laravel API application to use Exceptions in order to return detailed and descriptive error responses. The author has recently returned to writing about Laravel and has been doing some of their best work focusing on API applications, which has given them new ideas and techniques to share. They will be rebooting their existing Cribbb series instead of starting a new project.

Continue reading

Understanding and Using Ruby Rake

Aug 05, 2015

Rake is a build tool for Ruby that allows users to automate tasks. It is easy to define tasks in a Rakefile using Ruby syntax and tasks can have prerequisites. With Rake, users can define a set of tasks to be carried out as part of a build process or command. Capistrano is another tool that can be used to deploy Ruby projects, but with a wider range of add ons and plugins.

Continue reading

Adding Validation to Ember Forms

Aug 03, 2015

This tutorial looked at how to add validation to an Ember application using the Ember Validation addon. This involves adding the addon to the project, writing a test for the functionality, adding the validation to a controller as a mixin, and validating the task data on save. Finally, errors are added to the form. Validation from the API should also be handled in order for the application to be user friendly.

Continue reading

Eloquent Ruby [Review]

Jul 29, 2015

Eloquent Ruby by Russ Olsen is a thorough overview of the Ruby programming language, helping readers to become modern Ruby developers. The book covers a variety of topics, including meta programming, and is great for those beyond introductory steps of an online course. It is not aimed at experienced Ruby programmers, but can be a helpful resource for those wanting to cover the basics of the language.

Continue reading

Creating new Ember Data objects

Jul 27, 2015

In this tutorial we looked at how to use Test Driven Development to create a new task in Ember. We created a new route, wrote a failing test, added a form to the template, created a controller with an action, created an Ember Data object, and sent a POST request to the API. By using a framework like Ember, this process can be completed in less than 10 minutes.

Continue reading

Using Ruby Exceptions

Jul 22, 2015

This article discusses the importance of using exceptions when developing a Ruby application. It explains that the "happy path" is when everything works as expected, but it is important to anticipate and plan for more paths than just the happy path. Exceptions are a way of dealing with exceptional circumstances that will occur and are a critical tool for controlling the execution flow of an application.

Continue reading

Transitioning to new pages in Ember

Jul 20, 2015

In the last couple of weeks, a task list was built out using Test-Driven Development (TDD). This was done by first creating the list with static HTML, then making it dynamic with a controller and model, and mocking an API server. Interactivity was added to the application by transitioning to other pages using TDD. Tests were written, routes and links were added to the template, models were used to find the task, and Mirage was configured to define the new route. Ember's helpers such as find, click, and currentURL were used to create the interactivity.

Continue reading

Practical Object-Oriented Design in Ruby [Review]

Jul 15, 2015

Practical Object-Oriented Design in Ruby (Poodr) is an accessible guide to Object-Oriented design in Ruby written by Sandi Metz, a highly respected voice in the Ruby community. The book covers the foundations of Object-Oriented design and how certain practices can lead to brittle code. It also explains how to design better objects and how using alternative approaches will allow you to write code that is easier to maintain and evolve. This book is ideal for Ruby programmers who want to further their understanding of Object-Oriented Programming, as well as those wanting to learn Object-Oriented Programming in general. It is a great resource for learning about Object-Oriented design, recognizing bad code and improving it.

Continue reading

Adding related models to an Ember Application

Jul 13, 2015

This tutorial discussed using TDD to develop an Ember application with Ember CLI Mirage to mock an API server. By mocking the API server, it allows for the development and testing of the application in isolation. We looked at how to write a test, update the template, create the models, use a serializer, update the mock server, create the reply factory and fixtures, and finally saw the test pass.

Continue reading

Working with Mixins in Ruby

Jul 08, 2015

Ruby is a programming language that allows developers to use Mixins to allow a class to inherit functionality from multiple places. Mixins are Modules that are included into a Class and can be Class Methods or Instance methods depending on how they are added. Mixins are a great way to share functionality between different classes without repeating code, while Inheritance is better for suggesting specialization. Understanding the difference between using Mixins and using Inheritance is important for writing effective code.

Continue reading

Mocking your JSON API with Ember CLI Mirage

Jul 06, 2015

This tutorial outlined the steps to go from static HTML to using a model object to retrieve data from a JSON API and setting up a mock server to return data for Acceptance Tests. It also discussed the importance of creating an environment that allows your tests to run in isolation and the benefits of using Ember CLI Mirage to mock the responses. Finally, it showed how to create a Fixtures file to return data in development.

Continue reading

Creating and using Modules in Ruby

Jul 01, 2015

Modules are a key part of the Ruby language and are important for code organization and preventing name clashes between classes, methods and constants. They are used for namespacing code, organizing constants, defining methods and classes, and creating modules within modules. Modules are useful in bigger projects and when using Open Source code, and should generally be kept shallow. Next week's tutorial will explore Module usage further.

Continue reading

Introducing Controllers and Models to an Ember.js Application

Jun 29, 2015

In this tutorial, we wrote a test to pull the number of open tasks from the DOM, and then proceeded to create a controller, template and a simple model to make the test pass. We concluded by introducing Ember Data and mocking the API server, incrementally moving towards a dynamic, server-based application.

Continue reading

Understanding Inheritance in Ruby

Jun 24, 2015

This article discusses the concept of inheritance in Object-oriented programming, which is when an object acquires the same properties and methods of its parent object. It cautions against misusing inheritance, especially by newbie programmers, and provides a tutorial on inheritance in Ruby.

Continue reading

Writing your first Ember.js Acceptance Test

Jun 22, 2015

In this tutorial, the author discussed Test Driven Development (TDD) and how to apply it to building an Ember.js application. After setting the scene of what the application should do, the author covered what an Acceptance Test is and how to create one. He then created a new route and added some HTML to the template to make the test pass. He concluded that while they hadn't accomplished much functionality yet, they had seen the basic flow of TDD in action. He recommended a video by Toran Billups as a great resource for further learning.

Continue reading

What is Monkey Patching in Ruby?

Jun 17, 2015

Ruby is a powerful programming language that allows developers to reopen any class and change its methods. This can be dangerous as it can lead to difficult to track down bugs, but it can also be useful if used carefully. An example of monkey patching is the ability to add or modify existing methods on a class. Monkey patching should be used sparingly, as it can lead to unforeseen issues. It is best used to add convenience methods or when patching a class you own.

Continue reading

Creating a new Ember project

Jun 15, 2015

In this tutorial, we covered how to install Node, Ember CLI and Bower, create a new Ember application, view it in the browser, run the tests, and run tests on every file change. With these tools in place, we are now ready to start developing an application using Test Driven Development.

Continue reading

Understanding Class Methods verses Instance Methods in Ruby

Jun 10, 2015

This article discusses the differences between Class Methods and Instance Methods in Ruby, and provides examples of how to use each. It emphasizes good object-oriented design and stresses the importance of being mindful of the functionality being implemented and whether it should be in the context of a particular instance of the object or not.

Continue reading

Understanding and Creating Components in Ember

Jun 08, 2015

This article discusses the concept of web components, which are essentially reusable pieces of code that can be used to extend the HTML specification. It explains how Ember has created its own Web Components implementation, and provides an overview of creating Components in Ember.

Continue reading

The difference between Public, Protected and Private methods in Ruby

Jun 03, 2015

This article discusses the differences between public, protected, and private methods in Ruby when designing classes. It emphasizes the importance of well-designed objects, which should be easy to work with, evolve, and coexist within a larger application.

Continue reading

Finding, Creating and Saving records with Ember Data

Jun 01, 2015

Ember Data provides an easy to use interface that eliminates the headache of dealing with Ajax requests when rolling your own Javascript applications. This tutorial outlines how to find, create, save, and delete records using Ember Data, as well as how it interacts with the identity map and other features of Ember. Ember Data is a great tool for relieving the cognitive overhead of decision making, allowing developers to concentrate on the important aspects of their applications.

Continue reading

Writing Ruby Classes

May 27, 2015

This article discusses object-oriented programming using Ruby and the concept of writing classes. It compares the characteristics of classes and objects to other languages, and highlights the unique aspects that make Ruby a great language for programming.

Continue reading

Working with Records in Ember Data

May 25, 2015

This article explains how to work with Records in Ember Data. It covers how to get and set data, check for dirty properties, and use Fixtures. It also mentions that Records inherit from the Ember.Object class and have access to it's convenience methods. Finally, it states that next week it will look at creating, updating and deleting Records.

Continue reading

Working with Ruby Methods

May 20, 2015

This article discusses the importance of understanding Ruby classes and methods in order to become more familiar with object-oriented programming. It then goes on to explain how to write Ruby methods.

Continue reading

Defining Models in Ember Data

May 18, 2015

In this tutorial, we looked at the concept of models in Ember Data. Models are blueprints for how records should be created, and can include properties and relationships. We looked at how to define models, attributes, and relationships as part of Ember Data. Models are important to encapsulate the logic concerning persisted data.

Continue reading

What are Lambdas in Ruby?

May 13, 2015

This article has looked at the differences between blocks, Procs and lambdas in Ruby. Blocks are chunks of code that can be passed to a method, whilst Procs are blocks that are saved to a variable. Lambdas are anonymous functions that behave like methods and expect exact arguments, whereas Procs will default to nil when arguments are not passed. The return statement is also handled differently, with a lambda returning execution to the enclosing method, and a Proc jumping out of itself and the enclosing method. It is important to understand these differences as they will help you to better understand other people's code.

Continue reading

Understanding Models and Ember Data

May 11, 2015

Ember Data is a model library that helps manage data in Ember.js applications, such as finding data, making changes and saving back to the server. It has features such as an identity map of data, a store interface, models and records, adapters and serializers, and more. It is similar to an ORM and provides an easy to use API. It may not be the right solution for every project, but it is worth considering for an Ember project.

Continue reading

What are Ruby Procs?

May 06, 2015

This article provides an introduction to the concept of Procs and Blocks in Ruby. It explains the similarities and differences between them and why one would use one over the other. It also looks at how to convert between blocks and Procs, and how they are used in popular Ruby projects.

Continue reading

Using Controllers in Ember

May 04, 2015

This article discussed the role of controllers in Ember applications. It explained that controllers provide the model data to the template and are responsible for dealing with properties and logic that do not belong to the View or the Model. It also showed how to create a new controller, set controller properties, and deal with actions. It concluded that understanding how controllers work is important for developers and provided a link to a series of tutorials about building an open source application with Ember.

Continue reading

Understanding and using blocks in Ruby

Apr 29, 2015

This article explains what blocks are and how they can be used in Ruby. Blocks are chunks of code that can be passed to a function and are useful for creating generic methods and reducing code repetition. They can also be used with classes like `File` to easily encapsulate a series of tasks.

Continue reading

Working with Routes in Ember

Apr 27, 2015

This article discusses the basics of routing and the conventions of Ember when defining routes. It also explains how Ember's "convention over configuration" trait makes an application easier to develop and how Ember CLI generators can be used to generate boilerplate code. Finally, the article discusses how to create a new Route Model, loading Model data, choosing the Controller and the Template, transitioning and redirecting.

Continue reading

What are Symbols in Ruby?

Apr 22, 2015

Symbols in Ruby are immutable strings which represent something of importance. They are used for keys in hashes, arguments in structs, and for method calls. Symbols are better for performance than strings because the same object can be reused each time.

Continue reading

Routes and Resources in Ember

Apr 20, 2015

This article discusses the importance of URLs in web applications, and how Ember has an excellent router that allows for easy navigation by either taking an action through the user interface, using a browser function or typing the URL directly. It then focuses on providing a tutorial on using the Ember router.

Continue reading

Working with Structs in Ruby

Apr 15, 2015

A Struct is a simple class object that allows you to encapsulate attributes and accessor methods without having to explicitly define a class. Structs can be useful for modelling known things in the domain of an application and are useful for when you need to be more explicit with structured data. They are similar to a Hash but require specific attributes, whereas a Hash will accept anything. OpenStructs sit in the middle of the Hash / Struct / Class spectrum and do not require attributes to be defined beforehand.

Continue reading

Using Templates in Ember

Apr 13, 2015

This article explains how to use the Ember templating engine with Handlebars.js in order to make interactive client-side applications. It covers the application file and Handlebars helpers such as 'if', 'each', 'link-to', 'action' and 'input', as well as binding attributes. It is part of a series of posts on building an Open Source application, Cribbb.

Continue reading

Working with Hashes in Ruby

Apr 08, 2015

In this tutorial, we looked at how to use Hashes in Ruby. Hashes are a useful data structure for working with a collection of items, as they allow you to store a key and value pair. We looked at different ways to create a Hash, how to add values to an existing Hash, how to get a value from a key, how to get the key from a value, how to delete a value, and how to iterate over a Hash.

Continue reading

Getting started with Laravel and Ember

Apr 06, 2015

Front-end Javascript frameworks are becoming more popular and are used to create interactive client-side applications. These frameworks provide the MVC (Model-View-Controller) structure to keep your code organized and maintainable. Single-Page Applications provide a better user experience and load all the resources on the initial page load. Ember CLI is a command line tool that can be used to generate a new Ember project, build the application, and run tests. It is best to keep the Laravel and Ember application in separate repositories, but for simplicity they can be kept in the same one. Finally, in order to test that the integration is working correctly, a "Hello world" message can be displayed on the "Welcome to Ember" homepage.

Continue reading

Working with Arrays in Ruby

Apr 01, 2015

Over the past couple of weeks, we have been learning the Ruby programming language, beginning with installing and experimenting with IRB. We then moved on to looking at the String object and its methods, and this week we are exploring the Array object. An array is a data structure consisting of a collection of elements, each with an index. We looked at how to access elements of an array, inspect an array, add and remove elements, and iterate over each element. Arrays are useful when needing to work with a collection of items that don't have to be identified by a key, but need to be in a particular order.

Continue reading

Creating a New Post Application Service

Mar 30, 2015

This tutorial looked at building an Application Service to create new Post objects. It discussed the business rules around creating a new post, set up the test files, and implemented the create method, before writing tests and asserting that exceptions are thrown when the user and thread ids are invalid.

Continue reading

Working with strings in Ruby

Mar 25, 2015

This tutorial looked at how to use and manipulate strings in Ruby. It discussed how to create strings, how to concatenate strings, how to use case and length methods, and how to strip whitespace. The tutorial also emphasized the importance of understanding the rules of the language rather than memorizing the syntax of every method.

Continue reading

Creating a new Thread Application Service

Mar 23, 2015

This article explains a feature of the Cribbb application that allows users to create new threads, or topics of discussion within a Group. The tutorial then goes on to explain how to create an Application Service to enforce the business rules associated with creating a new thread.

Continue reading

Getting started with Ruby

Mar 18, 2015

This article introduces Ruby, a dynamic, object-oriented programming language that is often used to build websites, web applications, and general scripting tools. It explores why it is a good choice to learn, who uses it, and how to install and use it. It is an excellent choice of language for those who have big ambitions in turning their ideas into huge online businesses.

Continue reading

Creating the Groups Application Services

Mar 16, 2015

This article discusses the Domain Layer of the Groups Bounded Context, and explores the creation of three application services related to it: retrieving a Group by its slug, creating a new Group, and joining an existing Group. These services will form the foundation for the Group functionality of Cribbb.

Continue reading

Patterns of Enterprise Application Architecture [Review]

Mar 11, 2015

Patterns of Enterprise Application Architecture is a classic programming book written by Martin Fowler. It is highly regarded by many respected computer scientists and thought leaders. It provides explanations for common design patterns used when building applications and is accompanied by code examples in C#, .Net and Java. The book is easy to understand and provides advice on when to use a particular pattern. It also exposes readers to new ideas and tools. Although some aspects may be dated, the book is an invaluable resource for all programmers.

Continue reading

Creating the Follow a User Application Service

Mar 09, 2015

This article describes how to build an Application Service to allow a user to follow another user in a web application. It explains how the service should capture the user ids, ensure they are valid, and retrieve the Domain Objects to create the new relationship. The article explains the process of setting up the structure and then provides an example of how the follow method should work.

Continue reading

Creating a PHP Shopping Basket Part 7 - Transforming and Formatting

Mar 04, 2015

This mini-series has looked at creating a PHP shopping basket package and addressing the responsibility of formatting the values of an order for human consumption. A generic and extendable way to format any type of value was created by writing an interface and then writing default implementations. Money formatting was particularly tricky as it needs to be formatted to the correct currency and locale of the customer.

Continue reading

Setting up a Password Reminder Service

Mar 02, 2015

This article discussed the steps to take when building a password reminder service. It discussed how the process works, setting up the structure, checking for valid emails, requesting a password reminder, checking for valid reminder codes, and resetting the user's password. It is important to follow the three step process when resetting a password to avoid annoying users and increasing customer support requests.

Continue reading

Creating a PHP Shopping Basket Part 6 - Meta data and Processing

Feb 25, 2015

A common requirement in ecommerce applications is the ability to provide meta data about an order. This article covers creating a generic method for calculating meta data about an order, such as total value, total delivery, total discounts and total tax. It also explains how to create an interface and implementations of the meta data calculations so a developer can easily add her own meta data calculations to the package.

Continue reading

Implementing the User Registration Process

Feb 23, 2015

In this tutorial, we looked at building the Application Service for the user registration process of the Cribbb application. The Application Service acts as the "public API" to the inner core and should accept requests, return responses and be agnostic to where those requests come from and where the responses are sent. The Application Service also validates incoming data, dispatches Domain Events and returns the response in a generic format. The Application Service can be injected into a Controller or a Command Line tool to be used for registering new users into the application.

Continue reading

Creating a PHP Shopping Basket Part 5 - The Reconciliation Process

Feb 18, 2015

This article discusses the process of creating an object-oriented PHP shopping basket, detailing how to create the Product and Basket objects, and then how to write a reconciliation process for the basket.

Continue reading

Laying the Foundation of the Application Layer

Feb 16, 2015

This series is focused on building an open-source application called Cribbb. The majority of the code so far is written in the Domain Layer, but now that Laravel 5 has been released, it is time to build out the Application Layer. This layer will provide an agnostic interface between the Domain and the HTTP layer, allowing the application to be driven in multiple different ways. The Application Layer consists of Application Services, a Command Bus, and a JSON transformation layer. Although this layer is useful in bigger applications, it is not necessary for simple ones. The series will go over each of the Domain layers to build out the Application Layer.

Continue reading

Creating a PHP Shopping Basket Part 4 - The Basket object

Feb 11, 2015

This article discusses the importance of creating an object called 'Basket' which will serve as the main point of interaction for customers in a package. It emphasizes the importance of dividing responsibility between objects appropriately and suggests taking a step back to appreciate how everything works in the real world.

Continue reading

Creating the Foundation of a User Settings System

Feb 09, 2015

This article explains the importance of giving users control over the notifications they receive, and provides a tutorial for building out a simple user settings system for a relational database in order to provide that control.

Continue reading

Creating a PHP Shopping Basket Part 3 - Creating the Product object

Feb 04, 2015

This article is about the importance of the Product object when creating a shopping basket in code and how it should encapsulate the logic and data around each item of the basket. It should be responsible for holding meta data that needs to be recorded and should capture required data of the product that the customer desires to purchase. The object should act as a container to hold the data and other objects that will be required to calculate totals and process the order. It also provides methods to manipulate the quantity of the product, set its freebie and taxable status, set a delivery charge, and add coupons and tags.

Continue reading

Storing User Settings in a Relational Database

Feb 02, 2015

This article looks at the different methods for storing user settings in a relational database when building an application. It discusses the pros and cons of storing settings in a single row, using a serialized blob, or using a property bag. The author ultimately chooses the property bag method and explains why they made that decision.

Continue reading

Creating a PHP Shopping Basket Part 2 - Working with Collections

Jan 28, 2015

This article discusses the benefits of using "Collection" classes in Object Oriented PHP Programming as opposed to plain old arrays. Collection classes allow developers to group and manipulate multiple items with the added benefit of Object Oriented Programming.

Continue reading

Setting up a Notification system in PHP

Jan 26, 2015

This article discusses creating a notification system for a web application. It explains that user notifications can be a great driver of engagement and growth, but emphasizes that building a notification system can be more complicated than it initially appears. It then provides a brief overview of how to set up the foundation of the notification system for Cribbb.

Continue reading

Creating a PHP Shopping Basket Part 1 - Money, Currency and Taxes

Jan 21, 2015

Ecommerce web applications are becoming increasingly popular in 2015 as businesses move traditional offline businesses online. Building an Ecommerce application is complex and involves dealing with payments, transactions, customers, and taxes. This short mini-series is about building a PHP shopping basket and dealing with money, tax rates, and currencies in an international context. The article provides guidance on how to use an Open Source package for money and how to create an interface for tax rates and jurisdictions that allows for easy customization.

Continue reading

Modelling a Notification System in PHP

Jan 19, 2015

This article provides an overview of how to design a notification system for the open source application Cribbb. It discusses the importance of notifications for user interaction and growth, and the importance of providing users with granular control over what notifications they receive. It explains the need for modelling a notification system as an Entity, and why it is important to include notification controls to avoid annoying users and causing messages to be marked as spam.

Continue reading

What is Command Query Responsibility Segregation (CQRS)?

Jan 14, 2015

Domain Driven Design does not promote a single architecture style for all applications, as all applications are different. Hexagonal Architecture and Service Oriented Architecture are two examples of architectural patterns, and Command Query Responsibility Segregation (CQRS) is another. CQRS separates reading and writing into two models, allowing for efficient querying and scaling, as well as a task-based user interface. It is best used when there is an imbalance in responsibility between reads and writes, or when complex data processing is required. CQRS is not appropriate for most applications, but it is important to be aware of it as a solution for certain specific problems.

Continue reading

Converting Markdown to HTML in PHP

Jan 12, 2015

This article discusses Markdown, a lightweight formatting tool for text that can be converted to HTML. It looks at how large websites like GitHub, StackOverflow, and Reddit use variations of the syntax, and how a service can be created to parse Markdown and extract @mentions. It also looks at how this can be used to send user notifications and auto-link user profiles.

Continue reading

What is Service Oriented Architecture?

Jan 07, 2015

Service Oriented Architecture is the solution to a difficult problem when it comes to large applications. It involves breaking an application into separate services, each of which provide a common process to be consumed by other applications or areas of the organisation. It can be useful for integrating legacy or third-party systems, but it also can be used when an application has outgrown its single codebase. However, it should be avoided unless it is absolutely necessary, as it can become a nightmare if implemented prematurely.

Continue reading

Using Aggregates as a Gateway to Functionality

Jan 05, 2015

This article discusses how Aggregates are an integral part of Domain Driven Design, serving to protect the internal implementation of the application from the outside world. It also looks at how Aggregates can be used to enforce business rules and how they can act as a gateway to the functionality of an application.

Continue reading

What is Hexagonal Architecture?

Dec 31, 2014

Hexagonal Architecture is an application architecture that promotes the separation of concerns through layers of responsibility. It is agnostic to the outside world, enables easier testing in isolation, allows for the replaceability of ports and adapters, and provides a separation of the different rates of change. It also encourages a more independent approach to external services. The drawbacks include a higher level of complexity, the cost of indirection and isolation, and the fact that most web applications do not need the level of complexity.

Continue reading

Enforcing Business Rules through Aggregate Instantiation

Dec 29, 2014

This article discusses how Domain Driven Design can be implemented using object oriented programming, specifically in PHP. It explains how the instantiation of an object is an important part of its lifecycle and provides an opportunity to implement business logic and enforce the rules of the application. It also looks at how Aggregates group related Entities into a single unit to provide a constrained and unified interface.

Continue reading

What are Factories in Domain Driven Design?

Dec 24, 2014

Factories are objects that are responsible for creating other objects, and are commonly used in object-oriented programming. They provide standardization and encapsulation when creating complex objects, and should not be responsible for their own creation. In Domain Driven Design, Factories form an important part of the application's domain, and provide an interface that reflects the goals of the client. When designing the interface of a Factory, it is important to accept everything needed to create the object in a single interaction, and to decide how problems should be handled if the invariants of the created object are not satisfied. Entities and Value Objects have different requirements when it comes to Factories, and Factories can also be used to reconstitute stored objects.

Continue reading

Modelling a Discussion Forum

Dec 22, 2014

This article is part of a series on building an Open Source application called Cribbb. This particular post looks at using Entities in different Bounded Contexts to add structure and prevent responsibility from leaking outside of that context. The article discusses the need for a new Bounded Context for the Discussion functionality of Cribbb, identifies the important concepts, outlines the division of responsibility, and discusses the objects that need to be built. It emphasizes the importance of planning and designing before jumping into the code.

Continue reading

What are Aggregates in Domain Driven Design?

Dec 17, 2014

Domain Driven Design is a way of managing the complexity of applications when the web of interconnected entities and associations becomes overwhelming. Aggregates are a way to resolve this complexity by clustering associated objects into a single unit, with the root entity as the only globally accessible object. Aggregates have several benefits, such as providing a simple interface, maintaining invariants, and allowing safe removal of objects. Consequently, thinking about code in terms of Aggregates can be useful in resolving the complexity of a project.

Continue reading

Using Entities in different Bounded Contexts

Dec 15, 2014

This article discusses the importance of using entities in bounded contexts within an application as the application grows in scope. It explains that when an application is small, having all objects within reaching distance is easy to work with but as the application grows, there needs to be a rethink of the structure to accommodate the new design and requirements. The article emphasizes the importance of entities in an application as they have a lot of power and responsibility, making it essential to have the right structure in place.

Continue reading

What are Modules in Domain Driven Design?

Dec 10, 2014

Modules are an important concept in Domain Driven Design, used to keep related classes under the same "bucket" and prevent name collisions. They should be derived from the Ubiquitous Language and contain one or more cohesive Aggregates, organized by the Domain rather than the type of class. Modules should also be loosely coupled and can be organized into different layers. While it is possible to make them separate Composer packages, this is usually more trouble than necessary.

Continue reading

Creating Domain Objects Recap

Dec 08, 2014

This article discusses the concept of Domain Driven Design and how important it is to encapsulate business logic within Domain Objects. It then provides examples of how this approach can be used and sets up a tutorial for creating Domain Objects for a new Bounded Context. Finally, it emphasizes the importance of repetition and understanding when it comes to learning new concepts.

Continue reading

6 Principles for Writing Maintainable Code

Dec 03, 2014

This article discusses the importance of software development projects starting from a clean slate in order to prevent the creation of code that is difficult to maintain. It also introduces Domain-driven Design, a book which contains patterns and techniques to help prevent the trap of unrefactorable code. The article explains that refactoring code is important in order to facilitate an iterative process of discovery.

Continue reading

Moving to a new Bounded Context

Dec 01, 2014

This article is part of a series of posts on building an open source application called Cribbb. The author has changed the direction of this series to focus on Domain Driven Design, and so far has discussed the "identity" aspect of the application. This includes topics such as user registration, password reminders and a follower model. The author explains Bounded Contexts, which is the boundary for an area of the application where internal consistency is important. They then explain the role of the Identity Bounded Context, which is important for consumer social applications. Finally, the author introduces the role and responsibility of Groups, which will be the next Bounded Context discussed in the series.

Continue reading

Strategies for Integrating Bounded Contexts

Nov 26, 2014

This article looked at two important topics in Domain Driven Design: Domain Models and Bounded Contexts. Domain Models are the focused knowledge around a specific problem to the business, and Bounded Contexts are the boundaries around a Domain Model. There are a number of technical ways to integrate Bounded Contexts, third-party services and legacy applications. This article discussed seven integration strategies, including Shared Kernel, Customer/Supplier, Conformist and Anti-Corruption Layer, and the pros and cons of each.

Continue reading

Creating the Twitter Follower Model using Doctrine

Nov 24, 2014

This tutorial is about implementing the Twitter follower model using Doctrine. It explains the concept of the Owning Side and the Inverse Side of a bi-directional relationship, as well as how to create a Many-to-Many, Self-referencing relationship. It also explains how to create methods that allow users to follow and unfollow each other, and how to test them.

Continue reading

What are Bounded Contexts and Context Maps in Domain Driven Design?

Nov 19, 2014

Using Domain Driven Design, it is possible to break down large problems into smaller, more manageable parts. This helps to better understand the nuances of the problem by providing a more focused language. A Bounded Context is the boundary that surrounds a particular model, keeping the knowledge inside consistent while ignoring noise from the outside world. A Context Map is a global view of the application that shows how Bounded Contexts communicate and share data. It is important to have both these tools in order to properly understand the problem and create a successful application.

Continue reading

Failing Domain Rules and Validating User Input

Nov 17, 2014

In this article, it is suggested that web applications should have multiple layers of validation instead of relying solely on the Domain layer. These layers include client-side validation, Application Service requests, Framework validation libraries, and the Domain layer. It is argued that while Don't Repeat Yourself is an important rule, sometimes repeating yourself can make the code easier to work with and understand. The Domain layer is seen as the final guard against invalid data, but not the only one.

Continue reading

What is the Domain Model in Domain Driven Design?

Nov 12, 2014

Domain Driven Design is an approach to software development that focuses on solving business problems. The Domain Model is the structured knowledge of the problem, which includes the vocabulary and key concepts of the problem domain, and the relationships among all of the entities within the scope. It is important to have a Domain Model because it is the backbone of the language used by all team members, it helps shape the code written, and it is a source of truth for the project. It is created through an iterative process of collaboration between the business experts and the technical team.

Continue reading

Creating and Using a Command Bus

Nov 10, 2014

This article covers the three different layers of Domain Driven Design (DDD) application architecture: the Domain layer, Infrastructure layer, and Application layer. The Domain layer is responsible for encapsulating the application's business rules, while the Infrastructure layer is responsible for technical details of how the application is implemented. The Application layer acts as a public API to the application, and can be implemented in two ways: Application Services, or a Command Bus. Application Services tend to be more complicated, while Command Buses are simpler but harder to test. The Command Bus is made up of three components: Commands, Handlers, and the Command Bus itself. The Command Bus also requires an IoC Container and Inflector to map Commands to Handlers.

Continue reading

Implementing Domain Driven Design [Review]

Nov 05, 2014

Implementing Domain Driven Design is a book written by Vaughn Vernon, a highly regarded software engineer with more than twenty-five years of development experience. It builds upon the theory of Eric Evans' "The Blue Book", Domain-driven Design: Tackling Complexity in the Heart of Software, which pioneered a new approach to application development. Implementing Domain Driven Design offers practical guidance on how to apply the tools and techniques of Domain Driven Design in real world projects, as well as covering new Domain Driven Design related material that has surfaced since the first book was published. The book follows a team of developers as they are tasked with creating a series of new applications, giving the reader an inside look into the reasoning of how certain decisions are made and how the team got to that solution. Experienced developers with a good grasp of Object Orientated Programming will benefit from reading both books.

Continue reading

Creating your own Domain Event Dispatcher

Nov 03, 2014

In this article, the author discusses the need to sometimes write your own Domain Event Dispatcher instead of using an existing Open Source package. The Dispatcher, Event, and Listener interfaces are discussed, along with the process of registering and dispatching Events. The author also talks about what goes in to a Domain Event and the challenges of testing Domain Events.

Continue reading

Domain-driven Design: Tackling Complexity in the Heart of Software [Review]

Oct 29, 2014

Domain Driven Design is a framework for tackling complex software projects to deliver an end-product that meets the goals of the organisation. It promotes focusing the project on an evolving core model, and a collaborative feedback loop that concentrates on solving the organisation's primary requirements. It is written by Eric Evans, a well respected consultant, and is not about a single technology. Common reasons why projects fail are lack of communication between the business experts and the developers, developers failing to understand the problem they are solving, the code not reflecting the real world problem, and not being able to refactor the code. Domain Driven Design emphasizes the importance of the ubiquitous language, communication, and how to effectively become a project leader. It is aimed at experienced developers, and is a revelation for those already familiar with a lot of the code examples, design patterns and terminology.

Continue reading

Building a Password Reminder Domain Service

Oct 27, 2014

This article looks at writing the registration and resetting a password as a Domain Service as part of Cribbb. In the article, the author looks at the theory and implementation of the process, as well as the Domain Objects, Domain Services and Infrastructure code that would be required. The Reminder Code and Reminder Id Value Objects are discussed in detail. The article concludes by mentioning the need for a Reminder Service to coordinate the various Domain Objects and Services.

Continue reading

How to create an Active Record style PHP SDK Part 16

Oct 22, 2014

This article discusses how to set up the persistence aspect of an Active Record style PHP SDK by creating a "dirty testing" index.php, as well as creating a save() method and a create() method. It also covers how to implement an update() method and a delete() method. Finally, the article concludes by discussing how the author plans to step away from the project for a while, in order to refactor the code and gain a better perspective.

Continue reading

Creating a User Registration Domain Service

Oct 20, 2014

This article discussed the importance of making a good first impression with web applications and how to use a Domain Service to properly implement a registration process. It explains why it is important to use a Domain Service in this context, as opposed to an Application Service, in order to check for uniqueness and to hash passwords. It also provides steps to create the Register User Service class, create the Value Objects, check for uniqueness, create the User object, and create tests to ensure everything is working correctly.

Continue reading

How to create an Active Record style PHP SDK Part 15

Oct 15, 2014

This article discusses how to implement embedded objects for the "Person" and "Organisation" classes in order to serialise model objects into JSON for the CapsuleCRM API. It follows up on a tutorial from the previous week which looked at building out the functionality to serialise model objects into JSON.

Continue reading

Creating and testing Doctrine Repositories

Oct 13, 2014

This article provides an overview of how to use Repositories in web applications and explains how to write the first Doctrine Repository, set up fixtures, and write Repository tests. It also outlines some of the benefits of using Repositories such as coding to an interface, hiding the details of the storage provider, and making it easier to test the code.

Continue reading

How to create an Active Record style PHP SDK Part 14

Oct 08, 2014

This article focuses on how to serialize PHP model objects into a common format (JSON) in order to be sent to an API via an HTTP request. It discusses the Active Record pattern and how it makes it easy to persist records to a data store. The tutorial provides steps on how to serialize model objects so they can be sent to the API.

Continue reading

Creating a Mailer Infrastructure Service

Oct 06, 2014

Domain Driven Design is an approach to programming that involves breaking up an application into three main areas: the Domain, the Infrastructure, and the Application. Each service layer has a strict set of responsibilities, and should not be concerned with operations outside of their line of responsibility. Domain Services model functionality derived from the application's ubiquitous language, while Application Services handle requests and responses from the outside world. Infrastructure Services are used to abstract the technical details of the application, such as message queues, email providers, or payment gateways. These services should each implement an interface that acts as a contract, and the application code should depend on the interface contract rather than the concrete implementation. This allows the application to remain insulated, and makes testing the code easier.

Continue reading

How to create an Active Record style PHP SDK Part 13

Oct 01, 2014

This article discusses the implementation of the Active Record Pattern in a PHP SDK. It explains that the model object should contain the ability to both query and persist the data store. The tutorial then looks at the necessary steps needed to lay the foundation for building out the persistence functionality of the Active Record style SDK.

Continue reading

Creating Domain Services

Sep 29, 2014

Domain Driven Design is an important concept that models domain logic through Entities and Value Objects. Domain Services are used to encapsulate logic that does not fit neatly in either of those objects. The purpose of today's article is to look at when and how to use Domain Services. It should be noted that overusing Domain Services can lead to the Anaemic Model problem, where the logic has been robbed from the very objects that need it most. Domain Services should be stateless and they should only be used if the responsibility of the action does not fit on any existing Domain Object. Different types of Service exist for each layer of an application, and it is important that the implementation of a Domain Service is separated from the Domain, such as using an interface.

Continue reading

How to create an Active Record style PHP SDK Part 12

Sep 24, 2014

This article discusses the implementation of normalising models with subclasses in order to create an Active Record style SDK. It then focuses on building out the querying functionality for the remaining API resources, with tests being written for each model instance instead of for the Normalizer class.

Continue reading

Implementing Domain Events

Sep 22, 2014

Domain Driven Design is a technique used to understand the requirements of an application and model it in code. It aims to mitigate the problem of business and development sides failing to communicate effectively by using Domain Events, a pattern which decouples actions from their triggers. Domain Events are classes which model a particular part of the domain, such as sending a confirmation email to a new user when they sign up. Event listeners are then registered to fire when the event occurs, allowing for decoupled code. Event dispatchers are used to trigger the listeners and the Domain Events package is used to facilitate this. Domain Events should be used to model the events of the application's domain and should be kept separate from data persistence or framework concerns.

Continue reading

How to create an Active Record style PHP SDK Part 11

Sep 17, 2014

This article continues to discuss how to create an Active Record-style PHP SDK package. It covers how to normalize the raw JSON responses from an API, as well as how to handle instances of single and multiple entities, as well as parent and child entity relationships. This normalization process will be implemented in a 'Normalizer' class.

Continue reading

Defining the building blocks of Domain Driven Design

Sep 15, 2014

An important part of the beauty of Domain Driven Design is the fact that it provides a language to describe certain concepts and components within applications. Terms like Aggregate Root, Value Object and Entity have concrete meanings and are used to describe how applications are formed. Additionally, it is important to represent these concepts explicitly in the code written to ensure that the application's domain model is correctly represented. To do so, foundational layers of objects, interfaces and traits can be used throughout the project to make the domain related code more expressive. This helps to reduce confusion in application development and to make the code more readable.

Continue reading

How to create an Active Record style PHP SDK Part 10

Sep 10, 2014

This article explains how to create a Normalizer class in PHP to transform JSON payloads from a third-party API into model instances. The Normalizer class will accept an instance of the current model to know what type of model the payload should be transformed into. The Normalizer class will have two public methods for transforming a single entity or a collection of entities. The code for the class is provided and it is explained that testing a few smaller classes is easier than testing one big class.

Continue reading

What are the benefits of using Repositories?

Sep 08, 2014

This article discusses the Repository Pattern, a layer that sits between a project's domain and its database. It aims to explain why the Repository Pattern is used and its benefits. The article will also provide a tutorial on the Repository Pattern.

Continue reading

How to create an Active Record style PHP SDK Part 9

Sep 03, 2014

An API is an interface to an external system that allows us to interact with a third-party system. To transfer data, a common format such as JSON or XML is used. To make it easier to work with the data, we serialize and normalize it. In this tutorial, we looked at how to create the Organisation and Person models and how to handle any idiosyncrasies in the API by setting certain configuration options. We also implemented a Serializable trait to provide an easy to use interface for the developer.

Continue reading

The User Entity and The Ubiquitous Language

Sep 01, 2014

This article discusses using Object Oriented Programming to encapsulate business rules, the Specification Pattern for selecting objects, and the Ubiquitous language to build a 'User' entity. It explores how to use components to create a user identity within an application and how the language used will influence the coding.

Continue reading

How to create an Active Record style PHP SDK Part 8

Aug 27, 2014

In this tutorial, the author looked at setting up the foundation of being able to query the CapsuleCRM API by separating the querying functionality into its own directory and splitting each querying action into its own trait. They then created a convention of inferring the API endpoint, with local configuration being able to override this. The author then wrote tests for the find() and all() methods, and created a Findable trait to add the ability to query to a model class. Finally, they implemented the FindOne and FindAll traits.

Continue reading

Implementing The Specification Pattern

Aug 25, 2014

In this week's tutorial we looked at how to use The Specification Pattern to encapsulate the business rules of object selection within our applications. This pattern is powerful because it allows us to define a single responsibility class that can be combined with other Specifications to meet complex requirements. We also wrote two tests for a UsernameIsUnique Specification object, which returned a boolean value depending on if the username was found in the database or not.

Continue reading

How to create an Active Record style PHP SDK Part 7

Aug 20, 2014

This article discusses how to create an API SDK, focusing on the ability to query the API in order to retrieve resources. It covers setting up the HTTP client using Guzzle and creating an abstract model. Finally, it explains how to add the ability for each model instance to query the related API endpoint.

Continue reading

Encapsulating your application's business rules

Aug 18, 2014

This article is part of a series exploring how to integrate Doctrine 2 into a Laravel project and the unique characteristics and functionality Doctrine 2 offers. It provides an overview of the Data Mapper pattern and compares it to the Active Record pattern and explains the seven topics covered in the series so far. It also emphasizes the main reason to choose Doctrine 2, which is to encapsulate the business rules of an application.

Continue reading

How to create an Active Record style PHP SDK Part 6

Aug 13, 2014

This article discussed how to use the Factory Method Design Pattern to create an Active Record style PHP SDK. This pattern allows us to hide the complexity of instantiating certain objects whilst also ensuring that every instance of that object will be created in the same way. The author then provided a code example of how to create a Factory object and wrote tests to ensure that it works as expected. Finally, the author concluded by noting that while a developer is free to bypass the factory and instantiate objects directly, in future tutorials they would show how to put further restrictions in place to ensure that the dependencies that are required can't be forgotten about.

Continue reading

Working with Doctrine 2 Filters

Aug 11, 2014

Doctrine Filters are a useful feature in Doctrine 2 that allows developers to apply a clause to a query regardless of where the query originated in their application. Filters can be used to filter results, such as to remove spam comments or to mark certain users as deleted without actually deleting them from the database, or to implement business rules, such as to only show results related to the current client. Filters are registered with Doctrine's configuration and can be enabled or disabled as needed. The drawbacks of using filters is that business rules should be articulated within the domain of the code, not the ORM, as the ORM is replaceable.

Continue reading

How to create an Active Record style PHP SDK Part 5

Aug 06, 2014

This tutorial looked at implementing validation for a third-party API in an Active Record style PHP SDK. Validation enables us to protect the sanity of the data that is allowed across the boundary from the user to the application. The tutorial looked at different validation libraries, and chose siriusphp/validation due to its small number of dependencies and ability to define validation rules as an array. Tests were written to ensure the validation was working, and a reusable trait was created to make it easy to add validation to the relevant models.

Continue reading

Understanding Doctrine 2 Lifecycle Events

Aug 04, 2014

Doctrine 2 is a popular database library with an event system that can be used to trigger certain actions in response to something else happening within the system. Examples of this could be keeping an "updated_at" field up-to-date when a record in the database is changed, or sending an email when a new user registers for an application. Doctrine 2 has two ways of implementing this functionality: Lifecycle Callbacks which are methods on the entity, and Lifecycle Event Listeners, which are dedicated objects. For example, a "SendWelcomeEmail" listener could be triggered on the "postPersist" event to automatically send an email whenever a new user registers.

Continue reading

How to create an Active Record style PHP SDK Part 4

Jul 30, 2014

This article discusses building the foundational layer of an abstract Model class in an Active Record style PHP SDK. It examines setting and getting model properties, as well as using Reflection to inspect the model instance.

Continue reading

Using Doctrine Query Language

Jul 28, 2014

This article is about Doctrine Query Language (DQL), which is an implementation of the Data Mapper pattern in Doctrine 2. It guides readers on how to use DQL for their PHP projects and explains the benefits of using it over SQL, such as the ability to write complex and efficient queries more intuitively. It also explains how to use parameters and when DQL should be used.

Continue reading

How to create an Active Record style PHP SDK Part 3

Jul 23, 2014

Models in the Active Record pattern are important because they provide a public interface for working with entities and the storage layer of an application. They are responsible for reading, creating, updating and deleting from persistence storage, as well as accessing properties and relationships of the record. Models may be considered "fat models" due to their responsibility, but this is not a concern for this series of articles. In this tutorial, the first steps towards building out models for a PHP SDK package were taken, by setting up the abstract model class that will hold a lot of the responsibility of each model instance.

Continue reading

Working with relationships in Doctrine 2

Jul 21, 2014

This article examines how to use Doctrine 2 to create relationships between entities. It explains that entities in Doctrine 2 are plain PHP objects and have annotations to map them to a database. It also discusses how to create database schemas by reading the entity class.

Continue reading

How to create an Active Record style PHP SDK Part 2

Jul 16, 2014

The Active Record pattern is used to tightly couple the persistence layer to the entity, allowing for easy create, read, update and delete. When not using a traditional ORM, a HTTP Client is used to query and persist the entity to a third-party API. Guzzle is a popular PHP package used as the HTTP Client and dependency injection is used to ensure the code can be tested in isolation. The Connection class is used to instantiate a new instance of the Guzzle Client and define methods for GET, POST, PUT and DELETE. Tests are written to ensure the Client is created correctly.

Continue reading

Working with Entities in Doctrine 2

Jul 14, 2014

This tutorial explains how to create entities in Doctrine 2 for a web application, such as a User entity and a Post entity. It explains how to create a Entities folder and update the package configuration, as well as how to create properties and getter and setter methods for each property. It also explains how to add timestamps, soft deletes, and authentication with Mitchell van Wijngaarden's package and how to create the database based on the entities.

Continue reading

How to create an Active Record style PHP SDK Part 1

Jul 09, 2014

This article is about building a PHP SDK for a third-party service using the Active Record pattern. It explains the Active Record pattern and why it is a good fit for this project, as well as the benefits and drawbacks of using it. It then goes on to provide steps for setting up the package, such as creating a configuration file and adding it to the .gitignore file. This mini-series will be a source of inspiration for developers who want to provide an open source SDK for their application.

Continue reading

How is Doctrine 2 different to Eloquent?

Jul 07, 2014

This article explains the differences between Doctrine 2 and Eloquent, how to use Doctrine 2, and the advantages it has over other ORMs. Doctrine 2 is an ORM that implements the Data Mapper pattern and is more faithful to the repository pattern than Active Record ORMs. It uses annotations within the entity and has a service class known as the Entity Manager that is responsible for all persistence logic. It also uses the Unit of Work pattern and the Identity Map to efficiently query the database. The Doctrine Query Language is a powerful tool for complex queries. While Doctrine 2 is great, it is only best suited for certain types of applications and should be used pragmatically.

Continue reading

What is Reflection in PHP?

Jul 02, 2014

Reflection is a powerful tool in software development that allows objects to introspectively examine themselves at runtime. It is useful for debugging code and creating documentation, as well as for creating dependencies in frameworks such as Laravel. Common PHP Reflection functions include get_class(), get_class_methods() and method_exists(). The Reflection API also offers a number of classes and methods for further inspection of objects. Laravel uses Reflection to automatically inject dependencies into classes.

Continue reading

Getting started with Doctrine 2 and Laravel

Jun 30, 2014

In this Building Cribbb series of tutorials, the author discusses the benefits of using the Doctrine 2 ORM over Eloquent, which comes bundled with Laravel. Doctrine 2 follows a different methodology than Eloquent, offering a number of benefits. The author gives an example of the benefits of using Doctrine 2 over Eloquent, and explains how to set it up within a Laravel project.

Continue reading

What are PHP Traits?

Jun 25, 2014

PHP has single inheritance, which means a class can only inherit from one other class. To prevent code duplication, developers may wish to inherit from multiple classes. PHP 5.4 added a feature called Traits, which are like Mixins and allow a class to "mix in" Trait classes, reducing code duplication and avoiding the problems of multiple inheritance. Traits are beneficial for reusing code between similar classes, but they can lead to bloated classes with too much responsibility if used incorrectly. Interfaces are contracts that say an object is able to do something, while Traits give the object the ability to do the thing. Typical situations for using Traits are when avoiding complicated class inheritance, or when copy and pasting code between similar classes. Traits should not be used as a crutch and composition may be a better option.

Continue reading

The Foundations of CRUD in Laravel 4

Jun 23, 2014

CRUD (Create, Read, Update and Delete) are the four basic functions that are used in most web applications. These functions allow for data to be stored in persistent storage such as a database. Laravel offers a great foundation for these functions, but it can be difficult to understand the boilerplate code needed to use them. This tutorial provides an example of how to create the basic code for CRUD operations, including routes, controller methods, and views. The controller is first injected with the repository, then the index, show, create, store, edit, update, delete and destroy methods are implemented. The tutorial also outlines the views needed for each method, as well as the forms and flash messages.

Continue reading

What's the difference between Active Record and Data Mapper?

Jun 18, 2014

An ORM (Object Relational Mapper) is a layer that sits between a database and an application and is responsible for transforming data in the form of objects into relational data that can be stored in a database and vice versa. There are two main implementations of an ORM: Active Record and Data Mapper. Active Record is popular and intuitive, but Data Mapper is better for encapsulating domain rules and procedures of a business. The type of application, the environment it is built in, and the business rules should be considered when deciding which pattern to use.

Continue reading

Creating Registration Events in Laravel 4

Jun 16, 2014

This article explains how to set up a registration process for Laravel 4 applications using events. It explains why events are a good idea and how to set them up. It also gives an example of how to handle a welcome email when a new user registers.

Continue reading

Working with Products, Orders and Sales in PHP

Jun 11, 2014

This tutorial looked at building a package to solve the problem of dealing with multiple products during the order and sales process of completing a transaction within an ecommerce application. It uses the Money package from the previous tutorial as a dependency and provides an easy to use interface for tracking multiple product orders to present to customers and to aid accounting systems. It includes a Merchant factory to create a new order, and a Region class to encapsulate details of a particular jurisdiction, as well as a Helper class to provide convenience methods.

Continue reading

Adding Social Authentication to a Laravel 4 application Part 3

Jun 09, 2014

This article covered how to add social authentication to a Laravel application. It discussed how to define routes and create a SessionController, as well as how to implement the create, store, authorise, and destroy methods. It also discussed how to add the uid column to the users table, add the uid to the session in the callback method of Authenticate, add the uid to the store method of Authenticate, create a UidValidator for the Registrator service, and add a findByUid method to SocialProviderRegistrator. Finally, it discussed how to check to see if the user already exists and update the user's tokens.

Continue reading

Working with Money and Currency in PHP

Jun 04, 2014

This tutorial explains how to abstract best practices for working with money and currency in a PHP package, by creating a Currency class and setting up the package structure to adhere to the PSR-4 standard. The tutorial walks through creating a Currency class, which fetches currency meta data from two json files and sets properties for each key. Additionally, a custom exception class and getter methods are included.

Continue reading

Adding Social Authentication to a Laravel 4 application Part 2

Jun 02, 2014

This tutorial demonstrates how to authenticate a user through a social provider and create a new user in an application using the Oauth protocol. It also explains how to create a new child class of the registrator service from a couple of weeks ago, as well as how to use a validator class to ensure that the data passed to the create() method meets the required criteria. It also explains how to inject the service into the controller and use it to create a new user and authenticate them.

Continue reading

How to handle money and currency in web applications

May 28, 2014

This article discusses the common pitfalls and problems associated with creating an ecommerce website. It explains that storing monetary values as floats can cause rounding errors and suggests storing them as fractional units instead. It also suggests keeping the currency type, exchange rate, tax and discounts all separate to ensure accurate accounting when reconciling sales. Finally, the article promises to cover solutions in upcoming weeks.

Continue reading

Adding Social Authentication to a Laravel 4 application Part 1

May 26, 2014

This article outlines the benefits of using an existing social service for authentication for modern consumer web applications. It explains how this type of third-party authentication has been around for a couple of years, and how it is increasingly common to see consumer applications that offer this type of sign in. The tutorial then provides steps for setting up authentication using Twitter.

Continue reading

Create a HMAC-SHA authentication implementation for PHP

May 21, 2014

This article discusses the different options for authenticating an API and how to create a HMAC-SHA authentication implementation package in PHP. It covers creating a custom exception class, a Token object, a factory class, and the Request class. The Request class has the sign method, which uses the signature method to generate a hash. It also uses the stringToSign and parameterString methods to create a URL-encoded query string that can be sent to the API.

Continue reading

Creating a basic user registration system in Laravel 4

May 19, 2014

This article looks at the process of creating an invitation system for a Laravel 4 application. It covers the basics of requesting a new invitation, creating an invitation service class, allowing existing users to invite their friends, and creating a referral scheme to encourage invited users to also invite their friends. The article ends by stating that the author will move on to look at the registration process to allow the creation of new users for Cribbb.

Continue reading

Avoid arbitrary precision errors in PHP with BC Math

May 14, 2014

This article provides a tutorial on how to build a PHP package for working with the BCMath extension in an object oriented way. It highlights the benefits of BCMath, which allows calculations to be run on numbers of any size and precision, and discusses some integral parts of building PHP packages.

Continue reading

Creating an advanced Invitation System in Laravel 4 Part 3

May 12, 2014

This article explains how to build an invitation system for a web application. It includes the steps of updating the database tables, updating the model, storing the referral code, adding the invited_by and referrer_id columns, and testing the system. It also discusses how to generate a "family tree" of how users were invited by other users.

Continue reading

How to create a PSR-4 PHP package

May 07, 2014

This article covers the steps needed to create a PHP package, including setting up the directory structure, creating the composer.json file, writing tests, and pushing the package to GitHub and Packagist. It also explains the PSR-4 standard for creating PHP packages, and how to use Git, Composer, Travis CI and PHPUnit to set up and test the package.

Continue reading

Creating an advanced Invitation System in Laravel 4 Part 2

May 05, 2014

This article provides an overview of a tutorial series that looks at building an invitation system using the Laravel 4 framework. It covers setting up a basic foundation, turning it into a more robust process, and building components to allow existing users to invite new users, as well as writing tests.

Continue reading

What is the difference between Entities and Value Objects?

Apr 30, 2014

This article discusses the important concept of Value Objects in Domain Driven Design and how they differ from Entities. Value Objects are immutable and their equality is not based on identity. They are important for correctly representing the intended design of an application and ensuring that mistakes aren't made due to an object's changing state. Understanding the difference between Entities and Value Objects requires a full understanding of the context of the application being built.

Continue reading

Creating an advanced Invitation System in Laravel 4 Part 1

Apr 28, 2014

This article discusses how to build on a basic invitation system in Laravel 4 by looking at automatically generating invitation codes, validating through a service class, and setting up a filter to protect the registration route.

Continue reading

What is the Decorator Pattern?

Apr 23, 2014

This post explains the Decorator Pattern, which is a method for changing the functionality of a class without changing the structure of the original class. It uses an example of a File class and different Decorators to illustrate how this pattern can be used to modify the output of a class depending on the environment. It emphasizes the importance of composition over inheritance when writing code, and how the Decorator Pattern allows us to modify the original object without inheriting all of its functionality.

Continue reading

Creating a basic Invitation system with Laravel 4

Apr 21, 2014

This article explains how to build an invitation system for a new web application. It provides a step-by-step guide to the process, emphasizing the availability of the individual components needed. The article also provides an example of how one developer is implementing an invitation system for a specific web application.

Continue reading

What are PHP Magic Methods?

Apr 16, 2014

This article discusses PHP's Magic Methods, which are object methods that begin with double underscores and allow developers to define how an object should react to certain events. It is important for developers to have a firm understanding of these tools in order to be competent in Object Oriented PHP. This week's tutorial will focus on learning about these Magic Methods.

Continue reading

Sending Email with Laravel 4

Apr 14, 2014

In this tutorial, we look at sending email in Laravel 4. We discuss getting set up, sending email, queuing email, delaying email, and developing and testing using email. We learn that sending email is an extremely common requirement of modern web applications and that it can be done quickly and easily in Laravel. This tutorial is part of a series of posts on building an open source application called Cribbb.

Continue reading

When should you use an Exception?

Apr 09, 2014

Exceptions are a useful tool for programming languages because they allow developers to detect errors and address them gracefully. Without exceptions, applications would present errors to the user and it would be more difficult to diagnose what went wrong. Though exceptions may seem daunting, they can be easily learned and used to make code better and life easier for developers. Exceptions should only be used in exceptional circumstances and when dealing with external problems or package API's. Best practices include only using exceptions in exceptional circumstances, not using exceptions to control logic, and using custom exceptions to deal with errors in specific ways.

Continue reading

Working with Configuration in Laravel 4

Apr 07, 2014

This post discussed the various ways of managing configuration data in a Laravel application. It covered setting up the configuration files and environment, using the Config facade, service providers, and dot files. Dot files are an excellent solution for keeping sensitive configuration details out of version control and stored locally on the server that requires them.

Continue reading

When should I code to an Interface?

Apr 02, 2014

Interfaces are contracts that ensure that any classes that implement them will always have a defined set of methods available. They are distinct from Abstract Classes in that Interfaces state that the object is capable of doing something, while Abstract Classes state that the object is an instance of something. Interfaces should be used when writing code as part of a larger application, as it provides a public API to the code and ensures architectural integrity. They are also important for working in teams, as other developers don't need to care about the implementation details.

Continue reading

Multi-Tenancy in Laravel 4

Mar 31, 2014

Multi-tenant applications are applications where one single application is used independently by many different clients. When a client authenticates with the application, they can only access and view the data that they have created, and cannot view data that was created by any other clients. Multi-tenant applications have become increasingly popular due to the rise of Software as a Service and the move towards delivering applications through the cloud. In this tutorial, the author walks readers through setting up the core components to allow them to create multi-tenant applications in Laravel 4. The author also explains the three different approaches to multi-tenancy, and how to create the Context interface and implementation. The Context is then bound in the IoC container, and set when authenticating. Finally, the Tenant Repository is created to scope the database queries.

Continue reading

What are Abstract classes?

Mar 26, 2014

Abstract classes are an important part of Object Oriented Programming languages that enforce standards and reduce duplicate code. They act as a blueprint that should be extended by child classes, and not used directly. Child classes need to implement the same methods and properties that the abstract class defines. Abstract classes should be used whenever you have multiple implementations of a certain functionality, as they ensure that each child class is interchangeable with one another by always having a consistent public API.

Continue reading

Exploring Laravel's IoC container

Mar 24, 2014

Laravel 4 is a modern PHP framework that is built on the principles of high quality application design. It is equipped with an IoC container, which is an integral part of the framework. This IoC container is used to resolve objects and dependencies, and it allows developers to easily switch out components and mock dependencies. The IoC container is also responsible for running Service Providers and resolving objects automatically, without the need for developers to manually set it up. Finally, the same concepts of Inversion of Control and Dependency Injection are applicable in many different frameworks and programming languages outside of Laravel and PHP.

Continue reading

What is the Factory Method Design Pattern?

Mar 19, 2014

The Factory Method Design Pattern is a way of controlling the creation of classes. It allows code to be kept DRY and ensures consistent behavior. It is often used when needing to create many interchangeable solutions for a given problem, such as database connections or payment gateways. The Factory will take an argument and try to create an instance of the appropriate class. It is an excellent solution for managing pluggable "drivers".

Continue reading

Eloquent tricks for better Repositories

Mar 17, 2014

This article explores how to use abstractions in a Laravel application when writing code for Repositories. It discusses methods for abstracting repeating logic, creating eager loading blueprints, getting results by key value, pagination, and getting results that have a particular relationship. It emphasizes the importance of finding the balance between too much and too little abstraction and using general-purpose methods to solve problems.

Continue reading

How to build a PHP package

Mar 12, 2014

The PHP language has been undergoing a renaissance in recent years, with the adoption of Composer as the package manager of choice and frameworks like Laravel and Symfony. This post provides an overview of the tools and standards available for creating high quality, framework agnostic packages, such as Composer, Packagist, Github, and the PHP FIG standards. It also explains the importance of namespacing and package structure for ensuring code is interoperable.

Continue reading

Using Events in Laravel 4

Mar 10, 2014

Laravel 4 is a modern PHP framework that is built around an event-based architecture, which makes it easily extensible and maintainable. Events make it possible for developers to listen for and respond to certain events in their applications. It also allows developers to create their own events for their applications. Using an event-based architecture helps to separate concerns, making code easier to maintain. Events can be fired and listened for using closures or classes. Queues can also be set up to process events. Laravel's core is built around an event-based architecture, so developers can take advantage of this to extend the framework.

Continue reading

Why being a broker is a fool's errand

Mar 05, 2014

This article discusses the potential of the Internet to allow new players to enter and challenge incumbent companies in different industries. It looks at how companies are using this opportunity to disrupt existing businesses, and provides advice on how to do the same.

Continue reading

Model Presenters in Laravel 4

Mar 03, 2014

This article discusses techniques for displaying data differently from how it is stored in a web application's database. It suggests using model presenters in Laravel 4 to keep presentation logic in one place and ensure adherence to the single responsibility principle.

Continue reading

Competitive Strategy: Techniques for Analyzing Industries and Competitors [Review]

Feb 26, 2014

Competitive Strategy by Michael Porter is a book that provides a framework for analysing the structure of an industry and its competitors. It offers insight into how to make strategic decisions such as vertical integration, major capacity expansion and entry into a new industry. It also looks at specific industries and globalisation and how the framework can be applied to them. The book is useful for those looking to gain insight into broad industry analysis and making strategic business decisions.

Continue reading

Working with Pagination in Laravel 4

Feb 24, 2014

This article provides a guide on how to implement pagination in a Laravel 4 application. It goes through the theory of pagination, how to use Laravel's paginate method, creating your own pagination manually, working with pagination in the views, caching pagination, and using infinite scrolling pagination.

Continue reading

Disrupt an industry through Deflationary Economics

Feb 19, 2014

The Internet has had a powerful effect on existing offline industries over the last 20 years, driving down prices and improving efficiency. Deflationary Economics are a model that has been used by companies such as Amazon, Skype, and MySQL to reduce the cost of providing a product or service to customers, and seize a dominant market position. This model works by reducing the cost of a product or service while increasing its availability, and is made possible by the Internet's large scale, low cost, rapid improvement, and ubiquitous access. Examples of companies that have used this strategy have been given, and the characteristics of an industry that is ripe for disruption have been outlined. Deflationary Economics and the Economics of Scale of the Internet are powerful tools that can be used to disrupt an industry.

Continue reading

Create a News Feed in Laravel 4

Feb 17, 2014

This article discusses the basics of constructing a News Feed feature for an application. It goes through the process of creating the correct database query using the SQL IN operator, converting the query into an Eloquent method, and adding the feed to the application architecture. It also mentions the importance of caching the data to reduce stress on the database.

Continue reading

"Your margin is my opportunity"

Feb 12, 2014

Jeff Bezos, founder of Amazon, is renowned for his quote "Your margin is my opportunity", which refers to Amazon's strategy of cutting the margins of existing companies in order to offer lower cost alternatives to consumers. This strategy has been applied to many industries, and Amazon often loses money in categories in order to remain competitive. Amazon has also challenged Apple and Google with their Kindle range, with a focus on selling services and content to the consumer rather than hardware and advertising. Unbundling high margin industries is a great way to reduce complexity and provide a better service to consumers at a lower price. Companies such as iTunes, Netflix and Airbnb have all successfully taken advantage of this shift, and startups have the opportunity to reinvent the pricing structure of their industry.

Continue reading

Using View Composers in Laravel 4

Feb 10, 2014

View Composers are an important tool that can be utilized in computer programming to prevent repetition and create a single responsibility that can be used in many View files. Laravel provides a way to abstract code into a single location and make it available for multiple Views. This helps keep a project organized, logical, and easy to work with.

Continue reading

How to ensure your software project is delivered on time

Feb 05, 2014

Software development projects can often go over time and over budget due to unforeseen problems and scope creep. To ensure software projects are delivered on time and on budget, it is important to use agile development, manage deliverables and cut scope if necessary. A shift in mentality is required, from using the Waterfall model to breaking the project down into smaller cycles and deliverables. This will help to ensure that the project remains on target and is completed on time and on budget.

Continue reading

Laravel 4 Cache as a Service

Feb 03, 2014

Cache is an incredibly important component of a web application stack. It is necessary to reduce overhead and scale the application, and Laravel provides a clear and powerful API for implementing caching. This article looks at setting up cache as a service in your application, using the Decorator Pattern to wrap the Repository in additional functionality. An Abstract Decorator and a specific Cache Decorator are created, and the Cache Decorator is added to the Repository Service Provider so caching is automatically implemented. The Cache Interface and Laravel Cache Service are also discussed.

Continue reading

Health startups and connected networks

Jan 29, 2014

The last 10 years of technology innovation and the rise of the Internet have caused significant disruptions to many industries. Healthcare, however, has remained largely untouched by this revolution due to its highly regulated and controlled nature. Peter Thiel famously said that instead of flying cars, we got 140 characters. Now, technology companies are beginning to target the healthcare industry for disruption, using the power of connected networks and the wisdom of the crowd to revolutionize healthcare. Companies such as Fitocracy, ZocDoc, Jawbone Up, Fitbit, Nike Fuel, and CrowdMed are taking advantage of the Internet to provide improved services and aggregate data in ways never before possible. This will have a profound impact on healthcare and benefit society as a whole.

Continue reading

Creating Entities in Laravel 4

Jan 27, 2014

This article discusses the concept of creating an Entity in web applications in order to better manage the number of components you have to manage. It suggests that this approach can help maintain separation of concerns while providing a clean interface to work with throughout the code. If components ever need to be switched out, this approach would make it easier by only requiring a single abstraction to be changed.

Continue reading

What are Webhooks?

Jan 22, 2014

Over the past 10 years, the trend of the Internet has shifted from static websites to real-time applications and services. Nearly all new websites have some sort of real-time service component, such as an API or webhook. An API is used to ask a direct question to another application, while a webhook is used to be notified when certain events take place. Webhooks are incredibly easy to create and are used by companies such as MailChimp, SendGrid, Stripe, and Shopify to keep other parts of their services up-to-date. They offer a glimpse into the future of the real-time web.

Continue reading

Extending the Laravel 4 Validator

Jan 20, 2014

This post explains how to extend Laravel's validation package by either passing a closure to the extend method or by resolving from a class. It provides examples of code that can be used to extend the validator, as well as instructions on where to organize the code within a project. Additionally, it gives an overview of the benefits of each method of extending the validator.

Continue reading

Hatching Twitter [Review]

Jan 15, 2014

Hatching Twitter is a book written by Nick Bilton about the founding of Twitter, a now hugely popular service for sharing updates in 140 characters or less. It follows the story of creator Noah Glass, Ev Williams, Jack Dorsey and Biz Stone, amongst others, as they worked together to create the platform from their failing podcasting startup, Odeo. Through the story, we see the characters go through a journey of trials and tribulations and learn lessons as they grow from relative unknowns to the faces of an online revolution. The book has been optioned for a TV development, and the passion and love for Twitter that the characters had can still be felt in the company today.

Continue reading

Advanced Validation as a Service for Laravel 4

Jan 13, 2014

This article describes how to create a validation code as a service for an application, as demonstrated by the author's work on Building Cribbb. The author explains that while model validation may be ideal in small applications, he has chosen to use validation as a service for Cribbb in order to make it as robust as possible. The article was influenced by Chris Fidao's book, Implementing Laravel, which is suggested for those looking to learn more about advanced structures of web applications.

Continue reading

How to create a product that gets shared

Jan 08, 2014

This piece discusses the difficulties of acquiring users for consumer products, particularly in the early days when there is no money to invest. It looks at the 1% rule, which states that only 1% of users create content, while the other 99% simply lurk. It also explains the exhaustion of viral loop hacking, as companies have pushed it to exhaustion to achieve meteoric growth. It suggests focusing on an atomised value nugget to work outside of the app, and appealing to vanity to encourage users to share. It provides examples of products that used sharing to grow, and gives lessons to learn from them. The conclusion encourages introspection and creating value for users to encourage them to sign up.

Continue reading

Working with Cache in Laravel 4

Jan 06, 2014

Cache is an essential component of modern web applications. It acts as a middle ground between the application and the database, allowing data that does not change between requests to be stored and retrieved quickly. Laravel 4 provides an easy-to-use API for cache that allows developers to store and retrieve data, increment and decrement counters, and store data with tags. With the help of Laravel, developers can easily create well-designed and maintainable applications.

Continue reading

Fighting fragmentation in the web industry

Jan 01, 2014

The web industry is a highly fragmented market, with low barriers to entry and no clear standards or qualifications. This can be both a blessing and a curse, as it is easy to get into the industry but also hard to stand out from the competition. In order to combat fragmentation and have your work recognised, it is important to focus on one of the following areas: value added services, specialising in a particular product, targeting specific customers, targeting specific orders, having a specific location, offering no frills services, or specialising in integrations. By focusing on one of these areas, you can rise above the race to the bottom and deliver high quality work to valuable customers.

Continue reading

Eager Loading in Laravel 4

Dec 30, 2013

In this article, the author discusses the N+1 problem and how eager loading can be used to reduce the number of database queries, making applications more efficient. They look at how to use eager loading in Laravel 4 and how it can be used with multiple relationships, nested relationships, and with constraints. Finally, they discuss how eager loading can help with building efficient web applications, but that it will not be enough forever when an application has a lot of traction.

Continue reading

Recovering from launching a product nobody wants

Dec 25, 2013

When building a new product, it is not uncommon to have it fall flat after launch. To recover from a product launch that no one cares about, the first step is to take a step back and assess the situation. Evaluate the true value of the product, what people are actually using, and what could be removed. It is also important to find people to talk to and understand their problem, and work with them to sign up and use the product. Lastly, failure can be beneficial since it is a quick way to discovering the truth. However, it is important to manage risk by making small bets and little failures.

Continue reading

Planning the main screen of your application

Dec 23, 2013

This article explains the importance of planning the main screen of a product, focusing on the job to be done and creating a simple, frictionless experience. It uses the example of Cribbb, an open source application, to illustrate the importance of the groundwork before jumping into design and development. The main points to consider are the job to be done, what to make easy for the user and the experience to create.

Continue reading

Finding your competitors and the importance of supply and demand

Dec 18, 2013

This post discussed the importance of understanding competitors and the importance of supply and demand when finding product/market fit. When first starting out, it is important to understand that your competitors are not necessarily the big market leaders, but are likely the makeshift solutions that your customers have created to solve their problems. It is also important to consider the market size and how established it is when choosing a path to take in building a product. Ultimately, it is important to go into a product/market fit opportunity with your eyes open so you can be prepared for the challenges you will face.

Continue reading

Seeding a Laravel 4 database

Dec 16, 2013

In this post, a tutorial is given on how to add test data to a Laravel 4 database. It explains the process of setting up a seeder, installing Faker, adding the test data, and running the seed command. It is recommended to use Laravel's seeder and Faker package to create realistic test data instead of using a copy of the production database.

Continue reading

Onboarding for online products

Dec 11, 2013

Onboarding new users or customers is a crucial first impression that can determine if a user stays or leaves. Many products lack an engaging first run experience, causing users to lose interest and move on quickly. Problems with onboarding vary depending on whether it is a consumer or enterprise application, but there are solutions to help provide an amazing first run experience. These include focusing on tiny niches to begin with, not relying on Facebook's friend graph early on, following the scent, gradual engagement and walkthroughs to achieve the first goal.

Continue reading

Adding Bourbon and Bourbon Neat with Bower

Dec 09, 2013

This article explains how to integrate the open source frameworks of Bourbon and Bourbon Neat with Bower and Sass to create a semantic grid framework. It also explains the differences between Compass and Bourbon, and how Bower can be used to easily pull in the latest updates.

Continue reading

Getting Real [Review]

Dec 04, 2013

Getting Real is a guide to creating successful web applications from the people behind 37Signals. It advocates for reducing complexity and scope and staying lean with a small team, in order to create a product that is flexible to changing needs. It also encourages working with rough prototypes and getting feedback from customers instead of caving to every feature request. Finally, it emphasizes shipping a product quickly to learn from real data and customers. This book provides clear guidance for developers, designers and product managers to create successful products.

Continue reading

How to structure your Sass for large web applications

Dec 02, 2013

This post is about using preprocessing languages like Sass and LESS for front-end development. It explains how to think about Sass and how to structure the Sass architecture for projects, as well as how to use mixins, variables and modules to keep the code organised. It also explains how to separate the foundational elements from the aesthetic elements. Finally, it provides a sample directory structure for Sass files.

Continue reading

The 6 types of alliances you need to build a successful product

Nov 27, 2013

This article looks at why alliances are important for the success of an idea, and the 6 types of alliances needed to ensure success. These include support of respected people, support from peers and gatekeepers, uncommitted people, opinion leaders, alliances with enemies of the competition, and random outsiders. Alliances are important for leverage, feedback, and distribution, and are necessary to ensure an idea is successful.

Continue reading

Getting started with Bower

Nov 25, 2013

In this series of posts, the author introduces the use of Bower, a package manager for front-end packages and assets. He explains how to install and configure Bower and how to define dependencies, search for packages, install and uninstall packages. He also mentions how package managers make it easier to pick and maintain individual packages and how Bower can help prevent the use of out-of-date packages.

Continue reading

The opportunity in aggregate data insights

Nov 20, 2013

The consumer Internet is a competitive place and many applications are trying to figure out how to make money. Advertising is the most common way to monetise an application, and while this method can be successful, it can be difficult to compete against giants like Google and Facebook. Subscription and in-product purchases are also potential monetisation methods, but they have their own drawbacks. Aggregate data insights may be a better option to monetise consumer applications, and this method involves offering free use of the service while collecting data and selling insights to larger companies. To create an aggregate data business, steps include creating a service that generates passive data, offering a low-cost premium service, blogging about data, building tools to leverage the data, and selling aggregate data and insights.

Continue reading

Setting up Sass with Grunt

Nov 18, 2013

This post is part of a series on building an Open Source application called Cribbb. It covers setting up Grunt as a tool to automate tasks like compiling Sass, linting Javascript, minification and concatenation. It also covers installing Grunt, creating the GruntFile, setting up Sass, watching for changes, loading Grunt plugins and setting up the Grunt tasks.

Continue reading

Analysing the AdWords business model

Nov 13, 2013

Google's AdWords has had a huge impact on the growth of the Internet over the last 10 years, and has enabled Google to take "moon shots" like self-driving cars and free ubiquitous internet. The AdWords model relies on a self-service platform, market-determined pricing, incentives to bid more, direct ROI, massive inventory, and user intent. Companies can apply this model by democratizing their opportunity, creating a marketplace, and incentivizing and rewarding customers.

Continue reading

Getting started with Grunt

Nov 11, 2013

In this article, Philip Brown explains why he has chosen to replace the Asset Pipeline with Grunt for automated tasks like unit testing, compiling Sass to CSS, and compression. He then explains how to install Grunt on OS X, the structure of a Grunt project, and how to create the respective files. He also explains how to install plugins for Grunt and how to configure tasks to run. Finally, he explains the benefits of using Grunt for automation and promises a deeper dive into the topic in next week's tutorial.

Continue reading

Should I use advertising to monetise my product?

Nov 06, 2013

This article discusses the differences between advertising and subscription business models for online companies. It compares the advantages and disadvantages of both approaches, and explains when each one should be chosen. It is difficult to choose the right business model, as it will have a great impact on the product. Companies must decide whether they want to build a mass market product or focus on a niche. Making this decision early is important.

Continue reading

Add an Asset Pipeline to Laravel 4

Nov 04, 2013

In this article, the author explains the concept of an asset pipeline and how to set one up in a Laravel 4 application. They discuss why it is important to use an asset pipeline, how to install it, how to use Sass, and how to configure it. By using an asset pipeline, developers can take a more "object oriented" approach to organizing front-end assets, making them easier to maintain and work with.

Continue reading

The Consumerisation of Enterprise Technology

Oct 30, 2013

The rise of the Internet has enabled access to technology that was once only available to large enterprise organizations. Companies like Google, Dropbox, Box and Evernote have been able to bring once inaccessible technology to the masses, creating an entirely different pricing model and a complete switch in emphasis from hardware to purely software. This has opened up amazing new opportunities for consumer focused products, and forces companies to reimagine their business models to make them sustainable and compelling. To find opportunities in this shift, one should look for untouched technology, focus on a single aspect with a clear value proposition, and think of non-traditional ways to monetize it.

Continue reading

How to build a Coming Soon page for your product

Oct 28, 2013

A successful pre-launch strategy for a new online product is essential for its success. It involves building up interest before launch, seeding the product with early users/customers for beta testing, and having a "Coming Soon" page to gauge interest. Goals and objectives should be set and a strategy should be developed for how to onboard new users. The design of the page should reflect the product's overall design aesthetic and provide an indication of what the product does. Finally, the implementation should be simple HTML and Javascript. It is important to ship the first version and then iterate on it rather than wait for the perfect version.

Continue reading

Build traction for your product through meta-modelling

Oct 23, 2013

This article discusses the idea of pursuing a low-margin opportunity in order to quickly grow an online business, and how this strategy has advantages compared to a higher-margin model. It explains how this strategy works and how to create it.

Continue reading

Optimise your Photoshop workflow

Oct 21, 2013

Adobe Photoshop has been a popular design application for creating websites, mobile applications, and more for a long time. It is still the most used application for designing websites and web applications today. In this tutorial, the author explains their workflow for design in Photoshop and how to prepare files. This includes setting up a canvas, organizing layers, exporting assets, and saving web images. They emphasize the importance of staying organized in Photoshop, as it makes it easier to collaborate with other designers or developers and come back to the project in the future.

Continue reading

Why you need to build your own distribution channel

Oct 16, 2013

Online products have become increasingly sophisticated and well designed in recent years, but many companies struggle to get their product recognised and adopted by the mass market. Distribution is an essential component for a successful and sustaining company, and traditional online distribution methods have both positives and negatives. Companies can build their own distribution channel by investing in an additional product that can generate inbound interest and cultivate customer relationships. An example of companies that have done this successfully is Thrillist and Birchbox. Building your own distribution channel has benefits such as owning the relationship with the customer, being able to adapt to changes in the market, and being able to prevent competitors from using it. This strategy can be seen as a marketing expense, as it is a long-term investment that can drive targeted customers to the product.

Continue reading

How to create a Responsive Web Application

Oct 14, 2013

In this post, the author walks through the process of making a web application responsive. They discuss the importance of thinking through the design, wireframing, creating assets, and coding the design. They conclude that responsive design can be incredibly beneficial and provide a great user experience.

Continue reading

Techniques for Persuasion and the Art of Sales

Oct 09, 2013

This article provides an overview of four effective sales techniques to increase sales: starting small (using the Foot-in-the-Door technique to collect emails), starting big (pitching the high-end product and then offering the mid-level price range), scaling down instead of scaling up (offering to knock off extras to lower the price), and highlighting points of agreement (showing empathy for the customer's situation). Additionally, the article recommends being honest about the product's drawbacks and having a clear call to action to close the sale. Finally, the article emphasizes the importance of learning how to sell the product and not relying on other people to do so.

Continue reading

How to wireframe a web application

Oct 07, 2013

Wireframing is a process of sketching out ideas for a website or web application in order to get an overview of the entire application. It involves drawing out the main screens and user flows, in order to spot problems with the design before fully developing it. Wireframing can be done on paper, or with professional tools such as Balsamiq or OmniGraffle. Drawing out different variations and experimenting with the design is key to wireframing, and designers and developers should take the time to wireframe before jumping straight into code or design.

Continue reading

The Four Steps to Persuasion

Oct 02, 2013

The four steps to persuasion is a framework that can be universally applied to any situation where you need to "sell" an idea, such as selling a product or convincing a manager to take action. The four steps are: recognizing a pain, creating a solution, describing the benefits, and showing how the pain compounds over time. Recognizing a real pain is the most critical step, as customers won't switch products if there is no perceived problem. When selling a product, it is best to focus on the immediate benefits. Lastly, if you have an idea for solving a problem, use the four steps to persuasion to make a strong case for your manager to allow you to step up and solve it.

Continue reading

Researching and planning a web application

Sep 30, 2013

This series of posts is about building an Open Source application called Cribbb by using the Laravel 4 framework. The goal is to teach users how to not just use Laravel to create a product, but also how to manage a web application project and design workflows, as well as front end development. This includes looking at the risks associated with Waterfall Development, and the benefits of Agile Development, as well as how to reduce complexity, onboard users and prevent the blank screen problem. In addition, the importance of being a "Jack of all trades" is discussed.

Continue reading

How brands use stories to sell their product

Sep 25, 2013

This article discussed the importance of storytelling in marketing campaigns, and looked at four successful companies that have used storytelling in their marketing: Apple, Jack Daniels, Dove, and Charity: Water. It explains how each company has used a consistent story to appeal to their target audience, and how understanding the customer's problems and being empathetic is key to creating an effective story. By understanding the customer, creating a clear goal, and remaining true to the mission of the company, companies can create compelling stories that will resonate with their audience.

Continue reading

Password reminders and reset in Laravel 4

Sep 23, 2013

This tutorial focuses on how to create registration and authentication functionality in Laravel 4, specifically the feature of allowing users to reset their password. A table migration is created to store the reminder tokens in the database, routes are set up and two views are created, one for the form to request the reminder email and one for the form to accept the new password. Laravel's input reminder functionality is used to send the email, and a method is created to update the password.

Continue reading

Why a great product needs a great story

Sep 18, 2013

This article explains why storytelling is important for the success of a product. It outlines the benefits of storytelling, the structure of a good story, and how to make sure a story is both interesting and relatable to an audience. It concludes that storytelling is a crucial component of business, marketing, and our daily lives, and that companies that can successfully connect to an audience through storytelling will be the ones who will succeed.

Continue reading

How to use Laravel 4 Filters

Sep 16, 2013

This article explains how to use filters in Laravel 4 to restrict access to certain routes. Filters are an abstracted piece of logic that can be run before or after a request is routed through the application. They are used to determine if the current user is authenticated, or if they have access to certain parts of the application. Filters can be attached to a route individually or can be used as Pattern Filters or Group Filters to apply the same logic to multiple routes. Additionally, custom filter classes can be used to store complex logic and use the Laravel IoC Container.

Continue reading

Founders at Work [Review]

Sep 11, 2013

Founders at Work is a book written by Jessica Livingston that interviews some of the most successful Internet and technology founders from the last few decades. It focuses on the early days of the companies, when the future was still unclear and the company was still a scrappy startup. The book shows the real stories of how these companies came to be, highlighting the same common problems that startup founders face and how they dealt with rejection and ridicule. It also includes an introduction by Paul Graham, another founding partner of Y Combinator. The stories of Max Levchin, Sabeer Bhatia, Steve Wozniak, Evan Williams, Caterina Fake and David Heinemeier Hansson are featured in the book and show that success is often achieved through dedication, determination and perseverance.

Continue reading

Registration and Authentication in Laravel 4

Sep 09, 2013

This tutorial explains how to set up registration and authentication for users in a Laravel 4 web application. It covers creating the Register Controller and View, setting up the routes, and writing tests. It also covers creating the Session Controller and View, setting up the routes, and writing tests for authentication. Finally, the tutorial discusses Laravel's filter system and how it can be used to protect routes and actions.

Continue reading

Building defensible barriers against disruption

Sep 04, 2013

This article discusses why companies need barriers of defence in order to survive in a world of survival of the fittest. It explains the importance of creating a moat, provides examples of strong barriers of defence, and suggests ways to build barriers of defence for a company.

Continue reading

Using Blade in Laravel 4

Sep 02, 2013

In this tutorial, the author introduces template engines, demonstrates how they can be used in Laravel 4 with the Blade template engine, and provides an example of how to use a different template engine (Twig). Template engines are great for reducing or simplifying the code that is written in the view, and for echoing or escaping variables. Additionally, template engines can be used to define sections, extend views, use ifs, loops, and includes.

Continue reading

How to disrupt an industry through unbundling

Aug 28, 2013

Complementary products are associated with any product, and are important for gaining and maintaining competitive advantage. Companies can gain competitive advantage by controlling their complementary products in order to improve buyers performance, perception of value, optimal pricing and reduce marketing and selling costs. However, there are also significant problems with also supplying complementary products. Bundling is when companies sell separate complementary products only as a package, and it can give competitive advantages in terms of lower costs, differentiation, one stop shopping and price discrimination. Unbundling is an opportunity to disrupt an industry by a new competitor, and can be done by stripping away the components of a bundle and through bundle self assembly.

Continue reading

Routing in Laravel 4

Aug 26, 2013

In this post, the author discusses the basics of the Laravel router and how it can be used to create and manage routes, route parameters, route prefixing, and routing to controllers. They also go over how to use route groups and named routes, to make organizing and managing routes easier.

Continue reading

Customer acquisition for online products

Aug 21, 2013

Creating a successful online product requires more than just code, design, and architecture. A successful growth and marketing strategy is needed to reach and maintain new customers. By setting a goal and focusing on the right things to build, target, and measure, a smaller core group of users can be built up which is the lifeblood of a new product. Content creation, guest blogging, hijacking existing Facebook and LinkedIn groups, and building a name for being helpful all help to build momentum. Measurement and split testing of assumptions is also important to ensure success.

Continue reading

Creating forms in Laravel 4

Aug 19, 2013

Laravel is an excellent framework that makes developing and maintaining web applications easy. It has an excellent Form class that makes creating and interacting with forms simple. It supports POST, PUT, and DELETE methods, as well as CSRF protection and form model binding. Additionally, it has easy-to-use methods to generate labels, text fields, text areas, passwords, hidden fields, files, checkboxes, radio buttons, drop down lists, and buttons.

Continue reading

How to beat digital piracy

Aug 14, 2013

The Internet has completely disrupted many industries, such as music, film, television, and publishing, in the past 10-15 years. Companies that have tried to fight against this tidal wave of change have struggled to keep up, while others have found success by embracing the change and restructuring their business models. This includes shifting the way they monetize, creating a direct relationship with their audience, and giving away large amounts of value for free. In order to survive in an online world, businesses must learn to swim with the tide of the Internet instead of fighting against it.

Continue reading

Building out RESTful Controller methods in Laravel 4

Aug 12, 2013

This post provides a step-by-step guide for building a RESTful Controller in Laravel 4. It covers setting up a Controller, making Controllers flexible and testable, using Mockery to write tests, creating a Create method, Store method, Show, Edit, Update and Delete methods. The post also provides examples of tests to ensure the methods are working correctly.

Continue reading

Building a profitable Open Source business from Cross Subsidisation

Aug 07, 2013

Cross subsidisation is a business model which involves deliberately selling one product at a loss in order to increase the future sales of more profitable goods. It is widely used in a range of industries, such as supermarkets and Gillette's 'razor blade' strategy. Open source software is a form of cross subsidisation; the software is released for free, with the company making money from premium services, support and additional functionality. Advantages of this business model include free marketing, low cost customer acquisition, and contributors creating direct value. Conditions for successful cross subsidisation include price sensitivity for the initial product, price insensitivity for the profitable good, a strong connection between the initial product and the profitable product, and barriers to entry for the profitable good. There are also risks associated with this business model which need to be considered.

Continue reading

Extending Eloquent in Laravel 4

Aug 05, 2013

This article looks at extending Laravel's Eloquent ORM by creating Magniloquent, which allows users to create their own methods and add validation into the Model. Magniloquent is inspired by Ardent and is able to perform action-specific validation, auto hydrate, auto purge confirmations, and auto hash passwords. The article walks through how Magniloquent was built, including the save, validate, purge redundant fields, and auto hash methods. It also suggests using Ardent for smaller changes, and provides a link to a separate Magniloquent package.

Continue reading

How to pitch your idea

Jul 31, 2013

It is essential to be able to communicate your ideas clearly in order to make them successful. This post looks at the skill of pitching, and offers tips on how to effectively communicate an idea to others. Topics such as knowing the audience, staying on message, repeating the same message in multiple ways, having a prototype, organizing the pitch, describing benefits rather than features, and encouraging questions are all discussed. By following these tips, one can better their chances of having their idea accepted.

Continue reading

Creating Laravel 4 Validation Services

Jul 29, 2013

In this post, the author goes over how to create Validation Services as an internal package in a Laravel 4 application. By creating an abstract class with methods such as 'passes' and 'getErrors', individual Model validators can be created to handle Model specific rules. The author also goes over how to use the Validation Service in a Controller, and expresses his idea of extending Eloquent for future posts.

Continue reading

Mistaking features for benefits is losing you money

Jul 24, 2013

Positioning a new product and writing high quality sales copy can be intimidating if you have little experience in marketing. Having the wrong sales copy on your website, landing pages, and marketing materials can have a detrimental impact on the conversion and acquisition of new customers. Companies often confuse benefits and features in their sales copy, which can be a major problem. Benefits should be prioritized over features in order to show how the product will solve the customer's problem. Three companies that have done this successfully are 37signals' Basecamp, Square, and Squarespace. To position a product correctly, companies should understand who they are selling to, understand what problem they are solving, and make the connection between the feature and the benefit.

Continue reading

Getting started with Mockery

Jul 22, 2013

This post is about Mockery, a powerful Mock Object framework for PHP testing. It explains what Mock Objects are, why they should be used, and how to set up and use Mockery in Laravel 4. It also goes over some of the more common uses of Mockery such as shouldReceive, Once, Twice, Times, With, AndReturn, Never, and Partial Mocks. It is a helpful guide for learning how to use Mockery for creating robust and testable applications.

Continue reading

Competitive Advantage - Creating and Sustaining Superior Performance [Review]

Jul 17, 2013

Michael E. Porter's "Competitive Advantage - Creating and Sustaining Superior Performance" is an influential business management book that looks at how analytical frameworks for competitive strategy can be applied to create and sustain competitive advantage. Porter examines the concept of a company's value chain, the 5 competitive forces of an industry, and the three generic competitive strategies (cost leadership, differentiation, and focus) to gain and sustain competitive advantage. The book is an academic one and can be dense, but provides a clear and actionable path for analysing an industry.

Continue reading

How to structure testable Controllers in Laravel 4

Jul 15, 2013

This post looks at how to structure Controllers in Laravel 4 to make them testable. Dependency Injection is used to inject the database into the Controller so it can be mocked instead of actually hitting the database. Mockery is used to mock the database and Laravel will automatically inject the dependency. Testing Controllers should be straight forward as long as the dependencies are isolated and the right bits are tested.

Continue reading

How to use the unique characteristics of the Internet to achieve success

Jul 10, 2013

The Internet is continuing to destroy the viability of offline businesses and present opportunities for them to be replaced online. This post looks at the advantages of the Internet, such as access, convenience, distribution, and networks, and how these can be taken advantage of to reinvent the way online businesses operate. It also looks at the advantages of being an early adopter and understanding the Internet well, which can lead to discovering the next big thing. Overall, the Internet presents a huge opportunity for those who exploit its characteristics.

Continue reading

Creating flexible Controllers in Laravel 4 using Repositories

Jul 08, 2013

This article discusses how to create flexible controllers in Laravel 4 with the use of Repositories. Repositories are an interface between two things that make it easier to switch databases or ORMs in the future. The author sets up a directory structure, an interface, and a service provider to bind the two repositories together. They then set up a route to make sure everything is working correctly and conclude that Repositories allow for a clean abstraction between the database and the Controller.

Continue reading

Killing offline businesses online

Jul 03, 2013

The Internet is continuing to become ever more important in the lives of people around the world, with Venture Capitalist Marc Andreesen predicting that software will "eat the world". This presents a huge opportunity for those with the right skills and experience to exploit, as old offline companies struggle to find their way online. Technology is rarely a major factor in disruption, but rather it is about reconfiguring existing technologies and business models to take advantage of the Internet. This could involve reconfiguring the cost structures, marketing and distribution, or creating a product or service that meets the demands of an industry. The Internet allows for cheaper, scalable and more efficient companies that have direct distribution to the world, and is opening up a world of opportunities for those with the right skills.

Continue reading

Setting up your first Laravel 4 Controller

Jul 01, 2013

In this series, we have focused on Models as a critical component of the MVC architecture. In this post, the author goes over Controllers, which direct the traffic in an application, and how to create a Controller in Laravel 4. Controllers should be skinny, meaning no logic should be repeated, and should be created for every resource of an application. The author also explains RESTful Controllers and the different methods associated with each resource. Finally, the author goes over the anatomy of a Controller and what each method should be used for.

Continue reading

How to grow traction for social networks

Jun 26, 2013

This article discusses the difficulty of launching a new social network and toppling incumbents, as well as strategies for building traction for a new social network. It outlines the issues of network effects keeping leaders at the top, social network/app fatigue, and attention. It then proposes four strategies for building social network traction: building connections, content first, single user utility, and growing from existing networks/niches. Ultimately, it stresses the importance of focus and choosing the right product and strategy for your social network.

Continue reading

Creating a Laravel 4 package

Jun 24, 2013

Laravel 4 is a popular PHP framework that is built around the idea of interoperability and makes it easier to manage the dependencies of PHP projects. It has a package manager, Composer, which allows users to switch out components easily. This tutorial explains how to create a package with Laravel 4, including setting up configuration details, creating a package service provider, creating a package class, creating a facade, and registering the service provider. It also touches upon how Laravel's IoC container works and how it allows for expressive syntax.

Continue reading

What is Freemium and how can it work for you?

Jun 19, 2013

Freemium is a customer acquisition strategy that offers initial value to potential customers in order to increase the chances of them becoming a paid customer in the future. It is not a get-rich-quick scheme, but rather a marketing expense that should be calculated using simple maths. Freemium can be used for online and offline businesses, and can be an effective strategy for user acquisition in almost any type of business.

Continue reading

Setting up Vagrant with Laravel 4

Jun 17, 2013

This article is about setting up a Vagrant environment to work on an Open Source project, specifically Laravel 4. It outlines how to install Vagrant and VirtualBox, create a Vagrant configuration file, download a box, boot up and SSH into the Virtual Machine, sync folders, network the project, provision the machine, and set up Laravel. It concludes that Vagrant is a great way to learn server administration skills, and can be used to work on a project with a team of developers.

Continue reading

How to make product partnerships work

Jun 12, 2013

Gaining traction for online products is becoming more and more difficult due to the sheer amount of competition. Partnerships offer an opportunity to access an already established audience and added value. However, they often don't work due to inequality of value, lack of commitment, and the inability to handle an influx of attention. The best partnerships are whole product partnerships that involve integration and maintaining the partner's brand. In order to make a partnership work, it is important to have a Read/Write API, start with smaller deals, and have a bigger target partner in mind. Ultimately, partnerships should not be relied on to gain traction, but they can increase the success of a company when they work.

Continue reading

Laravel 4 Eloquent Model Relationships

Jun 10, 2013

This person started looking into model relationships in Laravel 4, including what different types of relationships are available and how they work. They created the Twitter following model logic, and then created the Cliques model and memberships and the polymorphic relationship for comments. They then tested all of the different relationships to ensure that they worked correctly.

Continue reading

How to build traction and acquire users for ecommerce or subscription based companies

Jun 05, 2013

Building an ecommerce or subscription based online business is difficult and requires a multifaceted approach. To be successful, you need to focus on your core competency of producing the product and creating a successful online business requires marketing and customer acquisition efforts. Content marketing is an important part of building a lifestyle brand, but for certain demographics, a utility product can be a successful alternative. The Honest Company is a promising example of this approach, by creating a utility product aimed at new mothers, they are able to create a related ecommerce opportunity. To create a utility based ecommerce company, you need to pick a demographic, find a problem that can be solved with a utility, find a related ecommerce or subscription opportunity, create content and find out where your audience hangs out.

Continue reading

Creating the Twitter following model in Laravel 4

Jun 03, 2013

A critical aspect to think about at the outset of a project is how the various components of your application will be related. It is important to understand the differences between the types of relationships and understand under what conditions they are appropriate. Domain modelling is a good exercise to go through when starting a project to map out all of the key resources of the software. There are four types of Model relationships: One To One, One To Many, Many To Many, and Polymorphic Relations. Once the types of relationships have been identified and planned out, the Model relationships can be created.

Continue reading

How to create a unique product

May 29, 2013

This article discusses the differentiation strategy, which is creating a unique product that is valued by the market and can be sustained cost-effectively. It explains that there are multiple ways to create a unique product, such as combining multiple ways of being unique, ensuring the product is used in the right way, and using signals to reinforce the uniqueness. It also suggests finding cheap ways to differentiate, minimizing the cost of differentiation, and emphasizing differentiation if it can be done cheaper than anyone else. Additionally, it suggests changing the rules to create uniqueness, such as shifting the decision maker, finding unrecognized opportunities, and preempting industry changes.

Continue reading

Laravel 4 Fixture Replacement with Factory Muffin

May 27, 2013

In this tutorial, we looked at how to use Fixture Replacement to quickly create instances of other Models within our tests. Fixture Replacement is a way to quickly create instances of Model objects, and save from having to manually create them. Factory Muffin is a Fixture Replacement package used to define relationships between Models and create instances of Models. This is useful for quickly creating realistic objects on-the-fly without having to deal with the "infrastructure" in tests.

Continue reading

Differentiation and it's role in Competitive Advantage

May 22, 2013

In order to create a successful product, one must understand the concept of competitive advantage and differentiation. Differentiation involves choosing certain attributes of the product to focus on, and creating value for the buyer by either lowering their costs or raising their performance. It is important to ensure that the buyer's perception of value is taken into account, as well as understanding their use and signalling criteria. Differentiation strategies should involve barriers to entry and should be constantly monitored in order to sustain the product's competitive advantage.

Continue reading

Getting started with testing Laravel 4 Models

May 20, 2013

This tutorial explored setting up automated tests in a Laravel project. It discussed the importance of automated tests in a Continuous Integration (CI) setup, installing PHPUnit and setting up the test environment database. It also showed how to write a test for the User Model validation and explained the analogy of automated testing being like a car having brakes. Finally, it provided a link to the full series of tutorials on building an Open Source application called Cribbb.

Continue reading

The Long Tail [Review]

May 15, 2013

The Long Tail is a book of research by former Wired Editor-In-Chief Chris Anderson, which examines how the Internet has enabled the rise of niche content, allowing for the proliferation of media from many different sources. This has disrupted the traditional hit-based business model, as consumers can now explore their own interests and tastes without the influence of gatekeepers. The Internet has also democratized the tools of production and distribution, allowing anyone to become a content producer and find an audience. This has created an abundance of choice, but paradoxically, too much choice can be overwhelming and can lead to a decrease in purchases. The Long Tail has changed the way we consume media, with niche content competing with mainstream content for the same audience.

Continue reading

Setting up your first Laravel 4 Model

May 13, 2013

Model-View-Controller (MVC) is a very common design pattern in modern web applications, and many popular web frameworks are built around it. Laravel 4 is one such framework that separates different aspects of a web application, and uses MVC design patterns to do so. The User model is an example of a model that is included in Laravel 4, and it contains three crucial components of Business Logic, such as real world objects, how they interact with each other, and a set of rules for how they are accessed and updated. One can use Ardent to automatically validate models, and define relationships between models.

Continue reading

How to fuel the growth of a two sided marketplace

May 08, 2013

Getting a two sided marketplace off the ground can be difficult and it may feel like a "chicken and egg" situation. To fuel growth, there are two main strategies: making virality part of the product's DNA and becoming a utility. Virality should be an integral part of the product and users should have a strong reason to invite their contacts. Becoming a utility means transforming the product into something users rely on every day and providing value for users. Examples of companies who have successfully implemented these strategies include PayPal, HowAboutWe, and Joor.

Continue reading

Laravel 4 Migrations

May 06, 2013

Migrations are a way to version control databases and make working on a project with multiple developers easier. They are a set of timestamped instructions that can be automatically run to modify a database. Laravel 4 comes ready with Migrations out of the box, and the Laravel 4 Generator package makes them even easier to use. Migrations are a great way to keep databases consistent and make shipping live code much less stressful.

Continue reading

How to build a two sided marketplace

May 01, 2013

Two sided marketplaces are the holy grail of online businesses, offering defensibility and scalability. To build a successful two sided marketplace, it is essential to start with a niche and create an engaged audience through content. Non-scalable tactics can be used in the short term to gain traction and piggybacking off an existing platform can help to bridge the gap between demand and supply. Strategies for building a two sided marketplace include finding a big supplier, creating a community through content, and starting with non-scalable tactics.

Continue reading

Getting started with Laravel 4

Apr 29, 2013

Laravel 4 is the upcoming latest release of the popular PHP framework Laravel. It is modern and "clean and classy" and has been heavily inspired by Ruby on Rails and other modern PHP frameworks. It is much more testable, and uses Composer to manage updates and decouple the framework. It is perfect for building web applications, with PHP 5.3.7 and MCrypt PHP Extension as requirements. Tutorials exist to show how to get started with the framework, and a series of tutorials exists to show how to create a modern web application with Ember.js, Sass and other front end technologies.

Continue reading

How to find disruptive opportunities

Apr 24, 2013

Disruption is often misused when talking about new technology products or market opportunities. It is important to understand what disruption really means and what the different types are. Low end and new market disruption are two types where a new product is created to target the least profitable customers in a market, or when there is a group of potential consumers who can't use the existing products. To find disruptive opportunities, one needs to look at existing markets and products and reconfigure existing technology or strip away features to offer a minimal viable product.

Continue reading

Does #Music signal the future of Twitter?

Apr 22, 2013

This article discusses the latest moves of Internet giants, such as Facebook and Twitter, and the implications of their moves in view of a possible Initial Public Offering for Twitter. It looks at Twitter's ability to close the advertising loop and leverage its position as the real time social network, and considers the possibilities for a #News vertical product. It suggests that such a product could be Twitter's defining moment, as it could leverage its position as the second screen for major events and a source of real time information.

Continue reading

How to make the Groupon business model work

Apr 17, 2013

Groupon was initially seen as a revolutionary company, with a model that drove traffic to physical businesses without dealing with inventory. However, their business model had major flaws, and they ultimately failed. Despite Groupon's failure, the concept of using coupons to drive traffic to businesses is still a viable opportunity. The key to success is to have a service layer that derives value for the user, focus on curation and content, build loyalty, and offer a subscription model. Companies like HowAboutWe are already succeeding with this model, and there is still opportunity to build a successful business.

Continue reading

What are RESTful Web Services?

Apr 15, 2013

REST (Representational State Transfer) is a type of distributed software architecture that is predominately used on the Internet. It follows many of the same conventions as Hypertext Transfer Protocol (HTTP), making it easy to understand and use. When using REST, you will usually want to do one of four actions: Create (POST), Retrieve (GET), Update (PUT) or Delete (DELETE). REST URIs are structured to ensure that they are intuitively understandable and obvious as to their purpose. When transferring data, you can use either XML or JSON, with JSON being lighter and more suitable for Javascript heavy web applications. REST is seen as the future of web applications because it is easier to use than SOAP and allows for JSON. When structuring web applications, it is good practice to build them using RESTful architecture.

Continue reading

Adding a service layer to incumbent industries through discovery and curation

Apr 10, 2013

This article discusses a new business model that has emerged in recent years, in which companies add a service layer to traditional industries by providing discovery, curation and transaction services. It examines the opportunities presented by this model, as well as some of the successful companies that have adopted it, and provides guidance on how to create such a company.

Continue reading

How to deploy WordPress themes with Git

Apr 08, 2013

This article explains how to use Git to deploy WordPress themes rather than using FTP. It outlines the advantages of using Git versus FTP, such as the ability to go back in time and resurrect code, and the ability to instantly update multiple files at once. It then explains the process of setting up a local repository, a bare repository on the server, and a live site. Finally, it provides instructions on setting up a post-update hook to automatically update the live site files when a new commit is pushed to the origin repository.

Continue reading

The right way to build an online affiliate based business model

Apr 03, 2013

This article discusses affiliate marketing, an online business model where third-party websites refer traffic to a product or service website and earn a percentage of the cost when a customer makes a purchase. It is noted that while there are many types of affiliate websites, the majority of money made from affiliate marketing is earned by a small number of marketers. The article provides insight on how to build a successful affiliate website with a lot of effort.

Continue reading

What is Dependancy Injection?

Apr 01, 2013

Dependency Injection is a design pattern that allows components to remain independent when building complex web applications. It allows one object to use an instance of another, and makes it easier to make changes and test code. In Dependency Injection, an object is given its dependencies instead of allowing it to create its own. This helps keep components independent and makes code more maintainable and testable.

Continue reading

Why groundswell is critical to building successful online products

Mar 27, 2013

This post discusses the importance of creating a groundswell of attention before launching a new online product. It explains why people neglect to create groundswell and the importance of creating an audience before launching. It then outlines six ways to create an audience, such as blogging and guest blogging, and stresses the importance of understanding what is working in order to create a successful product.

Continue reading

What are PHP Lambdas and Closures?

Mar 25, 2013

Lambdas and Closures are anonymous functions in PHP that are useful for one-off tasks or where it doesn't make sense to define a function. They are relatively new additions to PHP after shipping with version 5.3, providing the ability to refactor old code to be cleaner and more intuitive. Lambdas are anonymous functions that must be assigned to a variable or passed to another function as an argument, while Closures are similar but also have access to variables outside their scope. In modern frameworks, they are often used in routing requests and as callbacks in functions such as array_map, array_filter, array_reduce and array_walk.

Continue reading

The importance of understanding what is working in online marketing

Mar 20, 2013

Customer acquisition for online products can often be slow and difficult. It is important to use data and analytics in order to measure performance and understand what is and isn't working. There are many available strategies to try, such as SEO, SEM, working with bloggers, leveraging communities, and in-person events. It is important to focus on a single goal and use data to determine the right decisions, rather than trying to increase everything in analytics.

Continue reading

What analytics software should I use?

Mar 18, 2013

Analytics are an essential part of creating a successful website, as they allow you to test and improve your assumptions. Google Analytics is a popular choice and is free to use, however it can be difficult to interpret the data correctly. KISSmetrics and Mixpanel are good choices if you are running an ecommerce website, while Intercom is a good choice if you have a freemium model. Chartbeat is a real time analytics package ideal for content publishers and products that pursue social media engagement. Different websites and applications have different goals, so it is important to choose the right package for your needs.

Continue reading

Getting started with PHPUnit

Mar 13, 2013

Test Driven Development (TDD) is a programming methodology that promotes writing unit tests before you write the actual code. This means that every aspect of your code will have an explicit test to ensure it is functioning correctly. PHPUnit is the de-factor standard for Unit testing PHP and it is essential for setting up an automated testing process. This tutorial explains how to install PHPUnit via Composer, how to write a test for a Car class and how to write just enough code to make the test pass. This is just an introduction to TDD and PHPUnit, and in the future more in-depth tutorials will be available.

Continue reading

What is Test Driven Development?

Mar 11, 2013

Test Driven Development (TDD) is a software development process that promotes writing tests from the outset to ensure that individual components are working correctly. This process involves writing tests before writing code, running tests to make sure the code passes, and refactoring code to make it more efficient. TDD provides advantages such as ensuring code works properly, testing elements of validation and business logic, and highlighting any broken code. Additionally, a Build Server can be used to catch bugs. TDD can be a big departure from a normal workflow, but it is necessary to ensure that large projects and collaborations are successful.

Continue reading

Little Bets [Review]

Mar 06, 2013

This book examines how great innovations come from experimenting and iterative discovery, rather than overnight successes. It looks at how different industries have achieved breakthroughs through small initiatives and ideas, and how large companies often neglect to take risks and experiment with new ideas. It argues that education and culture should change to promote more experimental discovery, and move away from the procedural methodology of the industrial revolution.

Continue reading

Elements of effective testimonial pages

Mar 04, 2013

Testimonial pages can be an effective way of showing your customers how great your product is and giving potential customers reassurance that it will solve their problem. However, it is important to invest in high quality testimonials and to target the right people to give them. This could be through video, case studies, or well-known people, and using testimonials in the sales process rather than having a single dedicated page is often more effective.

Continue reading

Finding your Product's Limiting Reactant

Feb 27, 2013

When launching a new product online, it is important to quickly determine how traffic will find you and convert into customers. Eric Ries describes this as finding your Engine of Growth, while a Limiting Reactant is the element that is completely consumed during the process to produce the expected outcome. Examples of Engines of Growth and Limiting Reactants can vary depending on the product, but must be identified in order to achieve exponential growth. To find a Limiting Reactant, one must run experiments and monitor what element, if taken away, would stop the process from working.

Continue reading

Getting started with Memcached

Feb 25, 2013

Caching is an important part of building scalable websites, but one that is often overlooked. Memcached is a popular caching system and is used by many high profile websites such as Facebook, YouTube and Reddit. Setting up Memcached is relatively simple, and requires creating a connection to the server, storing data in the cache, and then requesting data from the cache. If not found in the cache, then a fallback to the database can be used. Laravel is a popular framework that makes caching simple and easy.

Continue reading

The huge opportunity of resource allocation in connected marketplaces

Feb 20, 2013

This article covers the power of marketplaces, the concept of Resource Allocation Optimisation, and new wave of companies such as Uber, Hailo, Taskrabbit, and Airbnb. These companies all use technological advances to better allocate resources and handle demand for services in the user's local vicinity. They all have certain common attributes in order to be successful, such as having healthy supply and demand, being transactional, and combining analog and digital elements. The article also suggests three steps for creating a two-sided marketplace business: don't be scalable at the outset, leverage existing incumbents, and create tools for the supply-side.

Continue reading

Getting started with Compass

Feb 18, 2013

This post explains how to use Sass and Compass, two preprocessor extensions of CSS3, to write cleaner, better CSS and minify it for production. It also covers how to install Compass and the components of Compass that are most useful, such as Border Radius, Box Shadow, Gradients, Text Shadow, and Transitions. The post explains how using Sass and Compass can both reduce the amount of code written and make effects easier to maintain.

Continue reading

Convert more customers with Product Qualified Leads

Feb 13, 2013

This post discussed the concept of a Product Qualified Lead, which is an alternative to pre-qualifying traffic for higher conversions. This strategy involves offering a product as a Freemium model, and only when the user has met specific milestones is the Premium plan introduced. Companies such as Facebook, Twitter, Dropbox and Evernote have successfully implemented this strategy, and it can be done by focusing on a single feature and understanding the user's pain points.

Continue reading

What is Object-Relational Mapping?

Feb 11, 2013

Object-Relational Mapping (ORM) is a technique that allows data to be converted from relational formats, such as those found in databases, to Objects for use in Object-Oriented Programming (OOP). ORM simplifies operations such as creating and querying by abstracting away the need to write complex SQL statements. Paris and Idiorm are two minimilistic ORM implementations for PHP, and using them can be seen as an example of how ORM works and the benefits it can bring to a project.

Continue reading

How to prequalify your traffic for higher conversions

Feb 06, 2013

Making sales on the Internet can be challenging, as there is a disconnect between the seller and the potential customer. To increase sales, one should pre-qualify their traffic by positioning the website within the target's focus and getting the message out through guest blogging and content creation. This strategy requires extensive research on the target customer and finding the right websites to target. High quality content is key, as it will compound in value over time and convince potential customers of the value of the product.

Continue reading

How to save PHP Sessions to a database

Feb 04, 2013

This article discusses the use of PHP Sessions for dynamic websites. It explains why they are needed, how to store them, and provides a complete class for managing Sessions within a database.

Continue reading

Do More Faster [Review]

Jan 30, 2013

This book provides advice and learnings from the TechStars accelerator program, written by TechStars founders David Cohen and Brad Feld. It includes contributions from the mentors and participants of the program, which is an intensive 3 month accelerator program that helps startups create successful companies. The book is based on 7 themes of what it takes to start a successful company, with lessons from the mentors and past participants.

Continue reading

Great artists steal: How to dramatically improve as a Web Developer by stealing from Open Source

Jan 28, 2013

It has never been easier to learn Web Development, with access to open source projects, online tutorials, and interactive coding environments. To accelerate learning, taking on big ambitious projects can help to learn new skills faster. By looking to existing Open Source projects and stealing the patterns and techniques of successful projects, you can gain knowledge and experience from other developers, while also learning to build projects at a larger scale.

Continue reading

The importance of intent in building successful websites

Jan 23, 2013

This post discusses the importance of understanding the intent of a user when designing and developing websites and web applications. Intent is the goal of the user for visiting the website and if the website cannot facilitate the intent, it can cost the business revenue. Examples are given of how Google and Facebook have different audiences with different intentions, and how understanding and facilitating those intentions can be incredibly powerful. It is also discussed how a website without intent is just a catalogue and how to facilitate intent.

Continue reading

Why do you need to Salt and Hash passwords?

Jan 21, 2013

This article explains the importance of securely storing user passwords, which can be achieved by using a hashing algorithm like PBKDF2 and salting. Salting is the process of adding an extra bit of data to the password before it is hashed. It is important for developers to use a secure method for storing passwords, as failure to do so can lead to a user's password being exposed in the event of a data breach. This article provides an example code of how to store passwords securely.

Continue reading

My 4 secrets for creating a regular blog

Jan 16, 2013

Many people have the desire to write and publish their passion online, but struggle to produce content on a regular basis. Writing helps cement an understanding of a topic and clarity of thought, and can be a valuable asset in any industry. There are four secrets for writing regular content: set a schedule, block out time to write, write no matter what, and always be formulating. With the right inspiration and tools, it is possible to write regularly and build something meaningful.

Continue reading

Getting started with Sass

Jan 14, 2013

Sass (Syntactically Awesome Stylesheets) is a preprocessor extension language for CSS that makes it possible to use powerful preprocessing techniques to improve workflow, reduce code and ensure higher quality end products. It is easily installed on Macs and Windows machines, and the app CodeKit makes it easy to use. Features like import files, variables, mixins and nesting make writing clean, reusable CSS faster and easier. Sass is a great choice for writing CSS for big projects, and is worth learning for newer CSS writers.

Continue reading

The intersection of Content and Commerce

Jan 09, 2013

This article discusses the increasingly popular trend of merging content and commerce, which has traditionally been kept separate. It looks at the characteristics which make this model successful, and provides advice on how to create a content based commerce company.

Continue reading

What is PHP Composer?

Jan 07, 2013

Composer is a dependency manager for PHP which can be used to manage the dependencies in a project. It is inspired by npm from Node.js and Bundler from Ruby. It is easy to install and use, and can be used to solve common tasks such as User Authentication, Database Management or Request Routing. It also offers an autoloader file which can be used to load the required packages into the project. Composer is an essential part of writing PHP and is a great way to follow conventions and make PHP a better language to use.

Continue reading

Loyalty apps are dead: Why you need to solve the bigger problem

Jan 02, 2013

This post highlights the importance of solving a large, complex problem in order to be successful in a given opportunity. In the example of Loyalty/Rewards, the real winners, such as Square and Foursquare, have gone beyond offering loyalty/rewards and have solved a much larger problem related to the space. This has enabled them to become market leaders and has given them a competitive advantage that can't be crossed. The takeaway for entrepreneurs is to not try to become the next hot me-too, but to focus on solving a fundamental problem.

Continue reading

What is Namespacing?

Dec 31, 2012

Namespacing is an important concept in computer programming that enables the creation of complex and modular applications. It is language agnostic and allows developers to integrate third-party libraries into their projects. It also allows the reuse of names and IDs without the risk of confusion. PHP added Namespacing in version 5.3 and it is important to understand how it works to create more advanced projects. It also enables developers to create their own libraries and make them available to others.

Continue reading

Create a PHP Money Class

Dec 26, 2012

This article explains how to create a reusable PHP class for handling money and creating invoices. The class sets the rate of VAT, the currency symbol, and has methods to format the money, calculate the VAT, keep track of running totals, and display the amounts in various formats. It is important to use this class as it allows for quick updates should the rate of VAT or currency symbol change.

Continue reading

Blue Ocean Strategy [Review]

Dec 24, 2012

This article discusses the concept of Blue Ocean Strategy, a business strategy introduced by W. Chan Kim and Renée Mauborne in their international bestseller. The strategy focuses on creating new opportunities in order to find growth, rather than competing in a crowded market. An example of such a strategy is Guy Laliberté's Cirque du Soleil, which mixed circus and entertainment, creating a more valuable and enjoyable experience than the traditional circus. This value innovation is the cornerstone of Blue Ocean Strategy, as it allows businesses to reduce costs while introducing new value. Innovation is key to success in any industry, and Blue Ocean Strategy offers a path to profitability.

Continue reading

jQuery Effects

Dec 19, 2012

This final instalment of the Culttt jQuery tutorials covers the most common jQuery effects. These effects include basic animations, fading, sliding and more advanced custom effects. All of these effects can be used to create immersive application-like experiences right in the browser. The tutorial also covers more advanced custom methods such as Delay, Queue, Stop, Dequeue, Clear Queue, jQuery FX Interval, and jQuery FX Off. This series was meant as an introduction to jQuery and has shown how it is easy to get started and make stuff that just works.

Continue reading

The Developer's Dilemma

Dec 17, 2012

This article provides an overview of the risks of relying on platforms such as Facebook, Twitter, Foursquare, and the Apple App Store for growth. It explains the issue of companies becoming too reliant on these networks and offers advice on how to mitigate the risk by not relying on any one source for traction or growth. Additionally, it recommends using open source platforms like WordPress but warns against putting too much into one open source project.

Continue reading

jQuery Ajax

Dec 12, 2012

jQuery makes it easy to use Ajax, a group of technologies that allow for data to be sent and received from a server asynchronously. jQuery provides several methods for making Ajax requests, including the Ajax method, Get, Get JSON, Load, Post, and Serialize. Each of these methods provides a more simple syntax for making specific types of requests. Ajax has become essential for creating rich experiences within the browser and jQuery is the perfect tool to get started.

Continue reading

5 of the best Open Source framework websites, and what makes them so good

Dec 10, 2012

Open Source projects are extremely important to the internet, as they have been responsible for fueling exponential growth and opportunities for millions of people around the world. This post highlights five of the best Open Source projects and the approaches they use to explain their work and how people can get started. The key takeaway is to make your homepage simple and provide examples, code, and navigation to make it easier for people to understand and get involved with your project. Additionally, using GitHub to host and manage your project can make it even more approachable.

Continue reading

jQuery Form Events

Dec 05, 2012

This article covers how to use jQuery to create better forms on websites. It looks at the various Form Events that can be used to add interactivity, such as the Blur, Change, Focus, Select, and Submit events. These events can be combined for powerful effects, such as validation and Ajax requests.

Continue reading

Why your website isn't generating sales

Dec 03, 2012

Many business websites are not achieving their desired growth because they are not purposely designed to generate it. The typical website process consists of commissioning a website with no thought to how it will generate traffic and sales, and then when it launches, the problems become apparent. Companies should focus on generating traffic through high quality content and email marketing in order to build relationships with potential customers and create context for their buying decisions. This will help ensure that the website is successful and drives business growth.

Continue reading

jQuery Mouse Events

Nov 28, 2012

This tutorial looks at the different jQuery Mouse Events and how they can be used to interact with the DOM. It explains how to use the Click, Double Click, Hover, Mouse Down, Mouse Up, Mouse Enter, Mouse Over, Mouse Out, Mouse Leave, Mouse Move and Scroll events. It also explains the differences between Mouse Enter and Mouse Over, as well as Mouse Out and Mouse Leave. The tutorial also shows how to use the Scroll event to achieve infinite scrolling.

Continue reading

The death of the homepage

Nov 26, 2012

The trend for large content or ecommerce websites is the optimization of deep content pages and the simplification of homepages. Search engines have become better at indexing and surfacing relevant content, and social media has enabled people to share pieces of content or products directly. This has led to a better discovery process, where users are taken directly to the content they want to see, rather than the homepage. This means that the long tail of landing pages is more important than the homepage. Examples of this include Medium, Branch, Instagram, Fab and Treehouse, who have all neglected their homepages in order to focus on content pages. The takeaway is to simplify the homepage and let the product speak for itself, and focus on the content pages that will be search indexed and shared.

Continue reading

jQuery - Manipulating content

Nov 21, 2012

This article provides an introduction to the basics of manipulating the DOM with jQuery. It covers how to select, update, prepend, append, insert, remove and clone elements, as well as how to preserve associated jQuery data when removing elements. It is an important foundation for understanding how to use jQuery for manipulating the DOM.

Continue reading

What is MVC? (Model-View-Controller)

Nov 19, 2012

Model-View-Controller (MVC) is a design pattern that separates the different aspects of a piece of software to promote code reusability and a more structured application architecture. MVC provides structure to applications, making them more maintainable and recognizable to developers. It also provides a separation of concerns, allowing for easier future changes. MVC has it's roots in Graphical User Interface (GUI) based software, but is also used in web development and WordPress themes. Understanding MVC can help developers structure their work for future developments.

Continue reading

Introduction to jQuery

Nov 14, 2012

This article discusses the advantages of using the Javascript Library jQuery, which helps to make webpages look the same across multiple browsers and makes writing Javascript easier. It is an abstraction layer that sits between the user and the browser, and is simply a regular Javascript file that is loaded into the webpage. Users still need to know Javascript, but it will be easier to create working stuff with jQuery.

Continue reading

The problem of Survivor Bias in Split Testing

Nov 12, 2012

Split Testing is a useful tool for improving website conversion rates, but if it is done incorrectly, Survivor Bias can lead to the wrong conclusions being drawn. It is important to understand all the different types of Split Testing and the potential for Survivor Bias, as well as how to spot and avoid it. It is also important to consider traffic sources, User Personas, sample sizes and Calls to Action when conducting experiments and drawing conclusions. Additionally, measuring the wrong things and taking qualitative feedback into consideration can also lead to incorrect conclusions. Taking all these factors into consideration when conducting experiments and drawing conclusions can ensure that the right decisions are made and website conversion rates are improved.

Continue reading

Creating HTML email templates

Nov 07, 2012

This article discusses the importance of creating HTML email templates for email marketing campaigns. It provides advice on using pre-made templates from platforms like MailChimp or Campaign Monitor for quick turnarounds and highlights the importance of delivering content clearly and efficiently for successful campaigns.

Continue reading

Lessons to learn from Foursquare

Nov 05, 2012

Foursquare has had an impressive rise over the last couple of years, moving from a popular mobile app to a genuine contender to become the next Google. Three important lessons can be taken away from Foursquare's success in order to implement into your own startup. Firstly, it is important to find something that people really care about when creating an app. Secondly, businesses should avoid trying to find a business model too early. Lastly, Foursquare has successfully transformed their product into a utility which provides users with local information and search capabilities.

Continue reading

A solution to lack of traction

Oct 31, 2012

This article discusses the problem of too many mobile and web applications being released every day, with many of them failing to get any traction. It suggests that the best approach to protect investments and create a product that has a better chance of success is to develop an API rather than a product, as this gives the opportunity for multiple first impressions and the ability to pivot the idea rather than the API. It also opens the opportunity for growth when having an open API, as other developers can build upon it, and it allows for more flexibility with design and branding.

Continue reading

Javascript Control Flow Structures

Oct 29, 2012

This article discusses Control Flow Structures, a fundamental concept in programming that allows code to run under different conditions or until a certain condition is met. It is important to understand the power of Control Flow Structures, and this tutorial focuses on the most common Control Flow Structures encountered in Javascript. The theory of Control Flow is applicable to many programming languages.

Continue reading

Is Freemium right for your product?

Oct 24, 2012

Freemium is a business model where a product or service is provided free of charge with the option of upgrading to a paid version with extended features or increased usage. It is an attractive option for product developers because it reduces the barrier to entry to a product, allowing customers to try for free. It works because the revenue generated from the small percentage of paid users is enough to sustain the usage of the entire user base. There are several variations of the Freemium business model, including advertising support, limited time or usage, and virtual goods in-app purchases. This model has been successful for companies such as DropBox and Evernote. Freemium works best when the product has universal appeal with a large market, an incentive program to encourage user acquisition through Network Effects, and when the product DNA fits well with the model. Despite its potential, Freemium is not an easy solution and can be a risky endeavor.

Continue reading

Surely you're joking Mr Feynman! [Review]

Oct 22, 2012

This article is a summary of the book "Surely you're joking Mr Feynman: Adventures of a curious character". The book is a collection of stories from the life of renowned physicist Richard Feynman, who worked on the Manhattan Project, won the Nobel Prize and is regarded as one of the greatest physicists of all time. It covers Feynman's interests in the Sciences, Music, Art and Safe Cracking, and provides an insight into his motivations and thoughts.

Continue reading

Create an automatic Email Marketing Campaign that actually works

Oct 17, 2012

This article discusses the advantages of using an automatic Email Marketing Campaign as a form of lead generation. It explains how this method is more successful than cold callers and sales people, as it allows the consumer to be in control and receive information about the product or service over a longer period of time. The article then provides a guide on creating an automatic Email Marketing Campaign that works.

Continue reading

Javascript Objects

Oct 15, 2012

This article explains that Javascript objects are a fundamental building block of the language, allowing developers to group common properties and functions into a single object for use in more complex applications. It is the next important thing to learn in Javascript, and can be thought of as an instance of a certain something, such as a human, with unique characteristics.

Continue reading

Why you need to start using Git today

Oct 10, 2012

Git is a distributed revision control and source code management system that allows developers to quickly and easily track the history of a development project and collaborate with others without stepping on each other's toes. Git can revolutionize the way developers work by providing them with the ability to roll back to any version of their code, work with others on the same set of code, experiment with new ideas without leaving a crumb trail, back up their work, manage multiple environments, and deploy their changes. Understanding its terminology and structure is essential to using it. Git can be used to manage an enterprise web application by creating infinite branches for Production, Staging, and Development, and finite branches for features, hot fixes, and changes.

Continue reading

Javascript functions

Oct 08, 2012

This tutorial explains the basics of functions in Javascript, including how to create and use them. It covers anatomy, creating functions, arguments, return outputs, scope and more. Functions are one of the fundamental aspects of any programming language and are an important part of creating powerful applications. They are saved sets of instructions that can be referenced multiple times, allowing for easier maintenance of code.

Continue reading

How Betaworks is leading the new wave of intelligent media

Oct 03, 2012

Betaworks is a hybrid incubator and investment fund founded by John Borthwick that takes fledgling ideas and products and helps them grow into fully mature technology companies. Betaworks are the creators of Bitly, Chartbeat and SocialFlow and have positioned themselves as leaders in the real-time social web. They invest in early technology based companies and build companies that fit their vision of information flow, web services, APIs and social. Betaworks is based in New York City and is looking to create a collection of companies that are loosely connected and share data laterally. They have also recently taken over Digg, a social news aggregator, and are looking to revive it to its former glory.

Continue reading

Roll your own PDO PHP Class

Oct 01, 2012

This article introduces the deeper aspects of PDO, a database abstraction layer that can be used in applications to protect from SQL injection. It encourages readers to gain a deeper understanding of the code and how it works, so that they can better troubleshoot and advance their code when the time comes. It suggests readers go back and read the previous article on PDO for an introduction.

Continue reading

The Ultralight Startup: Launching a Business Without Clout or Capital [Review]

Sep 26, 2012

This article is about Jason L. Baptiste, the co-founder and CEO of OnSwipe, and his book, "The Ultralight Startup: Launching a Business without clout or capital". The book provides practical knowledge and advice on how to launch a company without money or a network of contacts. It explains how the cost of starting a company has dropped in recent years, and how the internet can be used to reach a global market of millions.

Continue reading

Prevent PHP SQL Injection with PDO Prepared Statements

Sep 24, 2012

SQL Injection is a common problem when inexperienced developers write vulnerable code. PHP is an easily accessible programming language, but often leads to insecure code or bad practices. To protect from SQL injection, developers should use PDO (PHP Data Objects), a database abstraction layer which enables the use of Prepared Statements and protects from SQL Injection. This tutorial provides guidance on how to get started with using PDO in PHP development.

Continue reading

Basics of Javascript

Sep 19, 2012

Javascript has become an important language for web development, powering the interactivity and user interfaces of many websites. Over the past few years, frameworks have been released to make it easier to build rich, interactive user interfaces. Examples of these frameworks include JQuery, Backbone.js, Node.js, Moo Tools, and Spine.js. Javascript is essential for any web developer and understanding the basics such as variables, global functions, string functions, and arrays is essential for working with Javascript.

Continue reading

How to design effective pricing tables

Sep 17, 2012

This article discusses strategies for creating a pricing page on a website. It suggests organizing options based on customer needs and providing as few options as possible to make it easier for customers to make a decision. It suggests providing a free trial to encourage customers to engage with the product, and providing hover over information for technical jargon. It also suggests giving plans human recognizable names, highlighting what is missing from the free plan, and having a clear first step for customers to take. Finally, it suggests using a comparison table if the product is reasonably complicated, and highlighting high profile customers if possible.

Continue reading

The correct way to approach B2B sales via Social Media

Sep 12, 2012

Social media is an important opportunity for businesses of all sizes, however many businesses do not properly understand the etiquette of how to interact online. Spamming, expecting people to care about your business, relying on interruption marketing and expecting to make enterprise sales through social media are all fallacies that should be avoided. Raising awareness, offering support and engaging, and becoming useful are all far more effective strategies for businesses to pursue on social media. Habits, saved searches, and scheduling content are easy ways to improve social media engagement without a lot of hard work.

Continue reading

Introduction to HTML5

Sep 10, 2012

HTML5 is the latest version of HTML and it introduces some simplified tags, as well as new semantic tags. It allows web developers to create websites more easily and efficiently, as well as making the code more semantically meaningful. HTML5 is supported on all of the latest versions of major browsers, and to use it in older browsers, HTML5 Shiv must be used.

Continue reading

Quiet: The power of Introverts in a world that can't stop talking [Review]

Sep 03, 2012

In "Quiet...", Susan Cain explores the differences between extroverted and introverted people and how introverted people are often overlooked by our society, which has been created for extroverts. Studies have shown that introvert leaders are more capable of leading employees and that collaboration isn't always the best route to creativity and success. Through case studies and real life stories, Susan Cain celebrates introverts and shows that it is normal to be this way. Her book is an interesting and engaging exploration of the power of introverts in a world that can't stop talking.

Continue reading

The Sunk Cost Fallacy of Web Development

Aug 29, 2012

Many small business owners contact web development agencies for help with their website, but often the website is not performing up to expectations due to The Sunk Cost Fallacy. This is when future business decisions are clouded due to investments made in the past, such as moving to a web-based platform, using an off-the-shelf template, or relying on open source software. To avoid this, it is important to objectively look at the website and decide upon one or two goals for the year, then create a detailed website specification and contact a web design agency with experience. Doing this will help a business to avoid the Sunk Cost Fallacy and create a website that will fuel the growth of the company.

Continue reading

What does it take to found a startup? - 4 traits of successful Entrepreneurs

Aug 27, 2012

This article looks at four successful founders and examines the different approaches they took to success. Jason Goldberg has attributed his success to extreme focus, while Dennis Crowley followed his vision and Sahil Lavingia was a "jack of all trades". Chris Sacca has found success through networking and creating value for others. Ultimately, it is clear that there is no one right way to pursue startup success and it is important to use your own unique talents, characteristics and strengths to succeed.

Continue reading

Create a CSS progress bar

Aug 22, 2012

It is important to show the user where they are in a process, such as a sign up form or an Ecommerce checkout process, in order to optimize the conversion rate. Using an HTML element rather than an image to create a progress bar allows for accessibility and the ability to style it. This tutorial shows how to create a progress bar with HTML and CSS.

Continue reading

How to spot a good WordPress developer

Aug 20, 2012

WordPress is one of the most popular open source projects for creating websites, powering over 22% of new websites. It offers an easy choice for clients and developers, but it is also a way to make money for unqualified or incompetent developers. It is important to hire a competent WordPress developer who has experience with the framework and creating bespoke content. It is also important to have a development and a live version of the website, practice good housekeeping, use high quality and well supported plugins, have backup and security measures in place, and to not hack the core. Invest in quality hosting and always look for examples of previous work.

Continue reading

Elements of successful Social Commerce websites

Aug 15, 2012

Social Commerce is a new wave of Ecommerce that has opened up a world of possibilities. It involves features such as rewards for sharing, easy social sharing, big beautiful product images, easy product selection, membership features, real time product stats, and Facebook likes. To take advantage of this new opportunity, companies should focus on creating a niche community of people that love their product and brand, and use features such as social sharing and rewards to increase their reach.

Continue reading

Taking advantage of the rise of Ecommerce 2.0

Aug 13, 2012

The Internet is transitioning from one wave to the next, with Search and Social Networking having peaked and Ecommerce currently going through a renaissance. This new wave of Ecommerce has created new opportunities for new entrants, with two major categories being Social Commerce and Flash Sales. To take advantage of this, businesses should focus on writing a blog, sending newsletters and emails, and building an awesome website. They should also focus on creating products that people want to share, use scarcity tactics, and attract the right kind of customers.

Continue reading

Really simple inline Javascript validation

Aug 08, 2012

This text discusses the importance of handling input errors in order to provide a good user experience. It suggests implementing inline validation powered by Javascript, and provides a tutorial to build your own Javascript validation.

Continue reading

Hacking Distribution

Aug 06, 2012

This article discusses the importance of creating a successful product distribution strategy, as well as offering general and specific ideas to do so. It emphasizes the need to create value in order to gain customers, and provides examples of successful companies who have done so, such as Redbull, Old Spice, and Dollar Shave Club. It also discusses the importance of understanding your product's DNA in order to create a successful distribution strategy.

Continue reading

Customising WorldPay and creating a Callback

Aug 01, 2012

This is the third and final instalment of the integrating WorldPay series. In this tutorial, we looked at the files you need to create and upload to WorldPay in order to customize the payment process and create a callback to sync back to your server. We discussed the header.html and footer.html files which allow you to add extra code to the payment page, the payment fields files used to add extra fields to the payment form, and the resultY.html and resultC.html files used to display confirmation of either a successful payment or a cancelled payment. We also looked at the creating a WorldPay callback, which is a file that sits on your server and enables you to sync the transaction confirmation details with your records.

Continue reading

The Startup Owner's Manual [Review]

Jul 30, 2012

The Startup Owner's Manual is a complete reference guide for starting a company, written by Steve Blank and Bob Dorf. It is based on the theory of Customer Development, Agile and Lean engineering pioneered by the startup community over the last decade. It follows on from Blank's book The Four Steps to the Epiphany which proposed the traditional methodologies of starting a business were wrong. The guide offers an alternative to the traditional New Product Introduction Diagram and follows a four step process of Customer Discovery, Customer Validation, Customer Creation and Company Building. It also includes a 14 point guide for conducting a Customer Development initiative and advises on agile engineering, getting out of the building and celebrating failure. It emphasizes the importance of testing, learning, iterating and pivoting based on customer feedback before raising Venture Capital.

Continue reading

Integrating WorldPay into a database driven website

Jul 25, 2012

This post provides an example of how to integrate WorldPay into a database driven website or ecommerce platform. It covers the steps needed to process an order and send it to WorldPay, such as pulling data from the database and creating a secure form to send to WorldPay. Additionally, it explains the WorldPay security system and how to create a signature hash to protect the data that is being transferred. Finally, it provides an example of how to output the form and allow the customer to confirm and send it to WorldPay.

Continue reading

Finding your Viral Coefficient

Jul 23, 2012

The Viral Coefficient is an important metric for growing a website or application. It measures the exponential growth of users by tracking the average number of referrals that your user base sends out and the percentage of referrals that took the desired action. To calculate your Viral Coefficient, one must multiply their current number of users by the average number of invitations or referrals sent out and find the percentage of referrals that took the desired action. Having a positive Viral Coefficient means you can acquire new customers for free and your product will grow exponentially. Viral Cycle Time is also important as it is the number of steps a user needs to take in order to share your product. Improving your Viral Coefficient requires testing and optimizing to find the most successful referral campaigns and testing the variables of each test. Additionally, offering the sharing user and the new user a benefit or a reward for sharing or recruiting new users can help grow your product virally.

Continue reading

Getting started with WorldPay integration

Jul 18, 2012

This article describes WorldPay, an online payment processor backed by The Royal Bank of Scotland which allows merchants to take payments from customers on their website. It also discusses how the documentation provided by WorldPay is not clear or structured well, but the technical support team is excellent.

Continue reading

Attract the right kind of traffic to your website

Jul 16, 2012

This article discusses the importance of traffic strategy for website owners and how to approach it in an effective way. It emphasizes the need to create a sales funnel that captures new traffic and leads them to take action, as well as finding sources of traffic that are relevant to the website's goals. It also highlights the need for a content strategy to produce high quality content in order to build an engaged audience and protect the website from future disruptions.

Continue reading

How to open files by file type in PHP

Jul 11, 2012

This article discusses how to use PHP to open files that are stored on a server. It also mentions that in addition to PHP, other languages like CSS and Javascript may be necessary, and provides a tutorial on how to approach the task.

Continue reading

Why you should start your online business today

Jul 09, 2012

Starting an online Software as a Service business offers a great opportunity for entrepreneurs to build a highly profitable and scalable business without the traditional investment and overhead costs. With the right team, an Internet connection and enabling services, one can create a product without any investment other than their own time. This allows the business to start small and scale up to serve potentially millions of customers, while still benefiting from the economies of scale. Additionally, this type of business provides a great opportunity for globalisation, and data-driven marketing and growth. Permission marketing is an effective way to build a loyal and engaged audience and serve thousands of small clients, rather than a few large ones.

Continue reading

How to prevent CSRF attacks on your Web Apps

Jul 04, 2012

Cross-Site Request Forgery (CSRF) is an exploit in Web Applications that allows an attacker to send requests and perform actions on behalf of the victim without their knowledge. It is important to take precautions to protect users from this type of attack. To prevent CSRF, developers can require password confirmation or check for a security key. These measures should be tailored to the specifics of the application, and ensure that security keys cannot be faked.

Continue reading

Startups that don't solve a real problem

Jul 02, 2012

The proliferation of infrastructure as a service companies has lowered the barrier of entry to build an Internet startup. However, this can lead to startups that do not solve real problems and are doomed to fail. The four steps to the epiphany outlines that customer discovery and customer validation are integral steps to finding a repeatable and scalable business model. Examples of flawed startups include creating a problem, using a business model from an adjacent product, a flawed vision of a viral coefficient, an unsustainable, non-scalable vision, and piggybacking on a hot, yet unstable innovator. Following the customer development methodology and ensuring that your startup is solving a big enough problem is essential for success.

Continue reading

How to prevent XSS attacks on your website

Jun 27, 2012

Cross-site scripting (XSS) is a type of website and web application vulnerability which allows attackers to inject malicious client-side code into web pages. There are two types of XSS attacks: Non-persistent and Persistent. Non-persistent attacks require the victim to click on a link with the exploit embedded, while persistent attacks are saved to the server and run whenever the page is outputted in the browser. Prevention of XSS attacks requires web developers to ensure they are writing secure code, treating all inputs as potential exploits, and understanding website security.

Continue reading

Functions to handle multidimensional arrays in PHP

Jun 25, 2012

PHP arrays are an essential tool used to efficiently handle large amounts of data. They can become complicated when dealing with multidimensional arrays, which are arrays within an array. To make working with multidimensional arrays simpler, a few functions were written to handle common tasks. These functions allow you to find the value of a key, find the key that matches a value, destroy a key and value pair, and rename a key. These functions can be used to make handling multidimensional arrays easier.

Continue reading

Elements of inspiring "Work for us" job pages

Jun 20, 2012

The "War of Talent" is an ongoing battle in the Internet and technology industries for established designers and developers. This is compounded by an increase in people starting their own companies. To attract the best talent, employers need to put in a lot of effort to create inspiring "Work for us" job pages. Examples of this include Tumblr emphasizing the appeal of living in a big city, Metalab allowing flexible working hours, Automattic offering unique opportunities, Box stating their mission, Cuban Council designing to their strengths, Pinterest appealing to very specific people, Storenvy showing off office spaces, Vimeo showing their fun side, TaskRabbit creating a family-like atmosphere, Square stating their vision, 6Wunderkinder highlighting what they will provide, Facebook highlighting their culture, Twitter posting pictures of the team, and Apple emphasizing the chance to become part of something huge.

Continue reading

9 of the most inspiring Commencement Addresses

Jun 18, 2012

Commencement Addresses are a great opportunity for successful people to share their experiences and wisdom with graduates. These 9 Commencement Addresses from Steve Jobs, Sheryl Sandberg, Dennis Crowley, Neil Gaiman, Marissa Mayer, Eric Schmidt, Larry Page, Jeff Bezos and J.K. Rowling contain many motivational and inspiring lessons. Each speaker focuses on different topics such as fear of failure, career paths, finding passion, courage and imagination, and the benefits of failure. Through their speeches, they encourage graduates to take risks, follow their passions, learn from mistakes and look for growth opportunities.

Continue reading

Why your company does not need a mobile app

Jun 13, 2012

When considering whether or not to invest in a mobile application for your business, it is important to consider several key points. Firstly, it is important to ensure that the app is not simply a case of vanity, and is actually solving a problem. Secondly, one should not fall into the "build it and they will come" fallacy, as the market opportunity does not guarantee success. Thirdly, it is important to think about how the app is taking advantage of the hardware and software of the device, and whether it is necessary to be an app as opposed to a website. Finally, it is important to remember that success is rare and failure is common, and one should be prepared for this.

Continue reading

The Founder's Dilemmas [Review]

Jun 11, 2012

The Founder's Dilemmas by Noam Wasserman is a book of research and case studies about the key dilemmas a startup founder will face in the journey of starting a company. It is based on surveys and case studies from technology and life science industries, particularly including Evan Williams of Twitter and Dick Costolo of Feedburner.

Continue reading

Enabling services for web tech startups

Jun 06, 2012

Starting an online business is now easier than ever, with a variety of services that allow you to outsource the technical aspects and concentrate on what makes your company special. Amazon Web Services, SendGrid, MailChimp, Google Apps, WordPress, WP Engine, application markets, Squarespace, and Shopify are all services that enable businesses to quickly get up and running. These services range from cloud computing to email services to content management systems, and provide an easy and cost-effective way to quickly set up an online business.

Continue reading

13 essential WordPress plugins

Jun 04, 2012

This article outlines 13 WordPress plugins that are essential for building powerful, professional websites. These plugins include Clean Options, Disqus Comment System, Future Posts Calendar, Google Analytics for WordPress, Jetpack, Revision Control, SyntaxHighlighter Evolved, W3 Total Cache, WordPress SEO, WP Maintenance Mode, WP No Category Base, WP Security Scan, and XCloner - Backup and Restore. Each plugin is described in detail, and the article provides a clear endorsement of each one.

Continue reading

The decentralisation of our world

May 30, 2012

The Internet has revolutionized the way we interact and create. It has enabled people to create their own businesses with little capital, as well as build lifestyle businesses based on their passions. Companies such as Wikipedia, eBay, Etsy, YouTube, Vimeo, and Tumblr have all been integral in this paradigm shift. Twitter and TaskRabbit have also been very influential in allowing people to curate their lifestyle and find funding for creative projects. Companies such as Gumroad and Lending Club have enabled peer-to-peer lending and selling of goods. This decentralization of connected individuals has created huge value and will continue to shape the future.

Continue reading

WordPress Bootstrap Theme

May 28, 2012

This article provides a step-by-step guide to creating a basic WordPress theme from scratch. It covers the process of creating the style.css, header.php, footer.php, sidebar.php, index.php, page.php, and single.php files, as well as how to use The Loop and comments_template. It provides helpful advice for web designers and developers who are looking for a basic starting point for each new website, or someone who is trying to understand how WordPress themes work.

Continue reading

How to connect to MySQL through PHP

May 23, 2012

Dynamic websites rely on interaction with a database to store and serve data to the user's browser. PHP is used to store, query, and interact with this data, which is necessary for the website or web application to function. Websites such as Facebook and Twitter use this type of architecture, so if you want to build the next hot web app, you will need to learn how to work with databases.

Continue reading

The 22 Immutable Laws of Marketing [Review]

May 21, 2012

The 22 Immutable Laws of Marketing by Al Ries and Jack Trout is a timeless short book on the common pitfalls of marketing. This book has remained relevant since its 1993 publication due to its focus on marketing basics and not any single technique or tactic. Through its concise chapters, readers are provided with a realistic foundation to build their marketing campaigns, and learn what works and what to ignore. The book covers topics such as getting into the consumers mind first, creating a category, and why line extension is bad for a brand. This book is perfect for anyone looking for a marketing book that focuses on the fundamentals and provides timeless advice.

Continue reading

What is your company's killer marketing word?

May 16, 2012

In order to be perceived as a leader within an industry, it is important to become synonymous with a word or phrase that represents that industry. Companies such as Heinz, Porsche, Facebook, Google, GMail and eBay have all become so ingrained in the collective mind of their consumers that they have become the undisputed leaders in their respective industries. This has been achieved by providing a better product than the competition, as well as creating a unique vision of the company and product. Becoming synonymous with a key word or phrase is incredibly hard to achieve, and only one company can own a word. It is therefore important to find an unoccupied territory and become the leader in that niche.

Continue reading

Dealing with Darwin [Review]

May 14, 2012

In Dealing with Darwin, Geoffrey Moore looks at how companies must deal with innovation and evolution in order to stay competitive in the market. Moore emphasizes the importance of innovation at each stage of the Technology Life Cycle, and provides strategies to overcome innertia. He uses Cisco as a case study to demonstrate how companies can employ innovation and innertia management to remain successful. Dealing with Darwin is an important read for those interested in the business side of technology, and those who have read Crossing the Chasm and Inside the Tornado will get a deeper understanding of the topics discussed.

Continue reading

Resources for getting a job in the web industry

May 09, 2012

This article describes the current financial situation in the Western world, where many industries are struggling. In contrast, the web design, development and online business industry is thriving and has many job openings. As a result, the author has gathered resources for learning the skills needed to gain employment in this industry.

Continue reading

How to develop User Personas for your website

May 07, 2012

This article discussed the importance of creating detailed user personas for websites in order to understand the goals, needs and frustrations of the end user and develop a website for them that meets their needs and the website's goals. It then used the example of an accountancy software package website to show how to create user personas, including finding a picture, providing personal details, listing the goals, and noting their requirements. It concluded that talking to people who match the target client base can help to craft user personas and experiments and data can show what works best.

Continue reading

How to make a home page that converts

May 02, 2012

Creating a successful business website requires a strategy for the home page and how it aims to convert traffic into sales. Without a goal and strategy, the home page can become aimless and detrimental to the performance of the website. The goal should be ambitious enough to add real value to the bottom line of the business. Hypotheses must be formed to test what works and what doesn't, and they should be tracked with Google Analytics and Google Webmaster Tools. Website Optimizer can be used to set up experiments to serve sections of traffic with slight differences in the page. User personas should be created to better understand the needs and desires of different subsets of the audience. With these in place, the homepage should have a single narative that speaks to the goal of the website and allows users to take the first step in becoming a customer.

Continue reading

Should I interlink my website for SEO?

Apr 30, 2012

This article discussed the effectiveness of internal linking for SEO optimization. It stated that it can have a positive effect if used appropriatly, but can have a negative effect if overused. It recommended researching from trustworthy sources such as SEOMoz, Yoast, Matt Cutts, and Hubspot. It also provided advice from SEOMoz to link for humans and search engine spiders, be wary of footers, over-optimised anchor text, and unrelated links, and remember that Google knows when websites are owned by the same entity. It also provided advice to avoid over-optimisation such as authentic, non-spammy titles, manipulative internal links, cruddy link-filled footers, text content blogs built for engines, and backlinks from penalty-likely sources.

Continue reading

How to get the most from your business blog

Apr 25, 2012

This article discusses the benefits of having a business blog and how to create a successful one. It explains why a blog is essential to achieve the goals of a business website, such as increasing traffic, incoming links, lead generation, and brand recognition. It recommends regularly posting high quality content, writing a variety of posts, becoming a knowledge leader, allowing open comments, and providing methods to subscribe. Finally, it suggests building an email list to engage the audience and turn them into customers.

Continue reading

Inside the Tornado [Review]

Apr 23, 2012

Inside the Tornado is the second book by Geoffrey A. Moore that deals with high growth technology business. It is a companion piece to Crossing the Chasm which deals with the early market development and adoption problem of new technology innovation. Inside the Tornado looks at what happens once the market tips and the new technology is embraced by the market pragmatists, leading to a brief period of hyper growth and triple-digit growth rates. Moore outlines five stages of the technology adoption life cycle, from Innovators to Laggards, and explains how companies must navigate the Bowling Alley, Tornado, and Main Street stages in order to gain the mass market and become the market leader. The book also looks at related issues such as strategic partnerships, competitive advantage, positioning and organisation leadership in order to be successful.

Continue reading

Why Apple winning the content consumption war is a good thing

Apr 18, 2012

Apple is currently positioned to disrupt the entertainment industry and Hollywood, as no other single entity has the infrastructure, penetration and resources that Apple do. The Internet has disrupted both Hollywood and the Television networks, allowing for peer-to-peer networking and services such as Netflix, Hulu and Apple's iTunes. However, consumers are left with a fragmented marketplace of choice between different competing services which fails to deliver the entire breadth of the content available. Apple's integrated system, where they have control over the hardware, software and the entire infrastructure of content, is far more elegant than any other competing proposition. It is in the consumers best interest for a single player to take the lead in disrupting the huge incumbent entertainment industry, and it may be Apple who emerges as the clear victor.

Continue reading

Design features of Software as a Service and Web Applications

Apr 16, 2012

Software as a Service and Web Applications are becoming increasingly popular because they can be accessed from any computer with an Internet connection. Design and usability are critical to business success, so these applications must be well designed. Some of the key features to consider when designing a Software as a Service or Web Application are Prominant search, Consistant navigation at the top of the page, Simplify data, Present data as visual representations, Infinate scrolling, Restricted clear options and icons, Auto complete search, suggestions and FAQs, and Reveal options on action. While all of these features are important for creating an effective application, it is essential to remember that the most important factor is solving the user's problems.

Continue reading

The importance of design in business

Apr 11, 2012

Design has become an important part of a successful business, with companies like Apple, Google, and Facebook leading the trend. Design is a differentiator in a crowded marketplace, and hiring the best designers is expensive and difficult. Companies should focus on design in order to gain competitive advantage, following the example of Apple, Square, Path, and Instagram who have all seen success due to their design focus. Design is more than just how something looks - it is also about how it works, and what it is trying to achieve.

Continue reading

Should my business use an off-the-shelf WordPress template?

Apr 09, 2012

The WordPress community has grown rapidly in recent years and many premium services have been created to take advantage of this. One such service is the purchase of WordPress themes. It is important to consider your company's goals, website growth plans, template compatibility, and support when deciding whether to use an off-the-shelf template or invest in a bespoke website created by a professional web designer. Ultimately, it is recommended to use a professional web designer if you want a website that is valuable, generates new business, and that you can be proud of.

Continue reading

Failing to understand that success is the exception to the rule

Apr 04, 2012

The technology industry is characterized by a few major success stories that have shaped how new companies are perceived and how success is defined. However, it is important to realize that success is an exception rather than the rule, and that it requires hard work, dedication, and multiple iterations of an idea to achieve. There is no guarantee of success, and it is not always the result of external factors such as media coverage. It is up to entrepreneurs to continue learning and iterating until they find success.

Continue reading

Characteristics of landing pages that convert

Apr 02, 2012

This article discussed the importance of having an effective sales page and landing page for a business website. Some of the key tips discussed were the use of beautiful photography and design, explaining how the product will benefit the customer, breaking complicated products down into understandable chunks, offering a live demo of the product, detailing current user experiences, having an extremely obvious first step, clear purchase options, features vs pricing table, and media coverage or customer testimonials. All of these elements are key for creating a high-converting sales page.

Continue reading

Conversions are the foundations of a business website

Mar 28, 2012

This article discusses the importance of conversion optimization for business websites. It argues that while many business owners prioritize SEO, they often neglect the need for a strong path to conversion which can result in a loss of customers. It provides steps on how to approach designing a website with the goal of converting traffic to sales and emphasizes the need to constantly monitor and tweak the process after the website has been launched.

Continue reading

Make data your competitive advantage

Mar 26, 2012

Having an online presence is now essential for any business to remain competitive. Most companies have a basic website, but to use data to their advantage, they should have a system and process to collect, manage and synthesize data. Companies can use data to make informed decisions, such as Amazon's targeted recommendations and promotions. Business Networking Organisations and Recruitment Agencies can use data to provide better services and offer more accurate targeting. Companies should have long term plans to develop a system and infrastructure to collect data, then use that data to make decisions and gain a competitive advantage.

Continue reading

The value of email lists

Mar 21, 2012

Email is one of the oldest and most widely used aspects of the World Wide Web, and is an incredibly powerful tool when used correctly. It is permission based and opt-in, meaning that customers are more likely to convert to paying customers, and it is far more engaging than social media posts. Companies should use deep data mining to track analytics, and should split test their campaigns to make decisions based on data. Personalisation and deep customised campaigns should also be used, and companies should have a strategy with a measurable goal in mind. Finally, emails should be kept simple, personalised, easy to unsubscribe from, and brief.

Continue reading

The Start-up of You [Review]

Mar 19, 2012

The Start-up of You is a guide to viewing your career like an Entrepreneur views a business start-up. It focuses on 3 main areas: personal skills and planning, networking and decision making. It encourages developing different and complimentary skills that allow you to pivot careers, building a network of connections, and taking calculated risks to achieve success. It is a good introductory book and a great way to start taking control of your career.

Continue reading

Confusing visionaries with the mass market in new market startups

Mar 14, 2012

The technology industry has seen tremendous growth in recent years, but the mass market is still far behind the early adopters. Crossing the chasm, the process of taking a new technology product from a subset of early adopters to the mass market, is difficult and has only been achieved by a small handful of consumer Internet services. Foursquare is an example of a successful technology company that has yet to reach the mass market. It is unclear whether Foursquare or any other consumer Internet technology services can make the transition from early adopters to the mass market, but it is important to remember that early adopters are still far away from the mass market.

Continue reading

How to make decisions based on data, rather than assumptions

Mar 12, 2012

The Internet has revolutionized the way marketers, businesses, and software developers make decisions. Google Adwords, Google Analytics, and Website Optimizer have enabled them to collect data, run experiments, and make informed decisions. They can use data to pick a name for their product, track what users can't find on their website, and use A/B testing and goals/funnels to increase conversion rates. Data is invaluable for gaining real insights into customers and potential markets, so businesses should make the most of the data available.

Continue reading

Why you need to constantly reinvent yourself online

Mar 07, 2012

Many musicians have been able to maintain successful careers over multiple decades by constantly reinventing themselves to remain relevant and appeal to new audiences. The two types of successful online entrepreneurs are people with a vision for a better product, like Jack Dorsey and Dennis Crowley, and people with a vision for a change in attitude, world view or message, like Gary Vaynerchuk, Tim Ferriss and Tony Hsieh. For example, Gary Vaynerchuk started his career in his father's wine shop and eventually created a business and two books about turning your passion into a career and the importance of customer service. In order to continue to be successful, it is important to keep learning and trying new things.

Continue reading

Debunking 4 myths of small business digital marketing

Mar 05, 2012

Many traditional offline businesses are looking to enter the online world, but often underestimate the work involved and overestimate their knowledge of the industry. This leads to incorrect strategies and wasted time and money. There are several common myths surrounding online business, such as the belief that people will care about your business immediately, that SEO is a magical solution, that their websites are correctly designed, and that users will understand technical terminology and product names. Business owners must understand that gaining attention and trust takes time, SEO requires a long-term strategy, websites must be designed with conversion in mind, and language should be tailored to the customer.

Continue reading

The New Lanchester military strategy for startups

Feb 29, 2012

The New Lanchester Strategy is a battle tactic that has been adapted to the business world and is used when entering existing markets. It is based on the idea of concentrating forces to target a single point in the market in order to gain a foothold and eventually dominate the market. It has been used successfully in many historical battles and has been referenced in the classic business book, The Four Steps to the Epiphany. It is a strategy that startups looking to enter an existing market should consider.

Continue reading

The Four Steps to the Epiphany [Review]

Feb 27, 2012

Steve Blank is a retired serial Entrepreneur and the author of The Four Steps to the Epiphany, a guide to founding a successful startup. The book outlines the steps a founder must take to create a product that solves a real customer problem, as well as highlighting common mistakes and how to avoid them. The book covers the traditional Product Development Model, the Customer Development Model, Customer Discovery, Customer Validation, Customer Creation and Company Building. It is a must read for anyone serious about launching a successful startup.

Continue reading

Choosing the right company structure in the UK

Feb 22, 2012

When setting up a new company in the UK, it is important to choose the correct structure for the purpose of the business. There are a few different company structures to choose from, each with their own advantages and disadvantages, and different responsibilities and tasks to complete in order to maintain legal compliance. Self-Employed, Partnership and Limited Company are the three main structures, with Self-Employed being the easiest to set up and Limited Company being the most complex. With a Self-Employed structure, you will need to register with HMRC as self-employed and pay Tax and National Insurance. In a Partnership, you and your partner are personally liable for any debt, and each partner is responsible for their own Tax and National Insurance. A Limited Company is a separate legal entity and you are not personally liable for debts, however, it is more complicated to set up and more administration is required.

Continue reading

Why you shouldn't just jump straight into starting your first company

Feb 20, 2012

Starting a company is the dream of many aspiring entrepreneurs, but it is also incredibly difficult. In order to minimize the risk of starting a company, it is important to get a full-time job in the industry, build a professional network, set up the company properly, and get into the habit of working a lot. Additionally, networking and customer development can help refine the idea and save money, and it is important to be profitable from day one.

Continue reading

Moving your product from a fad to a utility

Feb 15, 2012

Developing a product online has become much more attractive in recent years due to changes such as the rise in Internet services, venture capital, and low hosting and bandwidth costs. Despite this, many products fail to achieve success. One of the possible reasons for this is the transition from a fad to a utility. A utility is something that is useful, profitable, and beneficial, whilst a fad is a short-lived craze. To make the transition, a product must add value to the user's experience. Examples of products that have made the transition from fad to utility include Foursquare, eBay, and Facebook. To do this, product managers must objectively look at user engagement data and make decisions about the future of their product.

Continue reading

CSS3 Gradients and Textures

Feb 08, 2012

CSS3 has enabled a new way of styling elements with simple CSS, where previously images were used to achieve similar effects. This tutorial demonstrates how to create an element with a textured background and a gradient using only one image and simple CSS3, including RGBA colours and linear gradients. The colours and image can be changed to customize the effect. This technique is useful for creating a warm and inviting feel for User Interface elements.

Continue reading

The evolution of online communities and the social web

Feb 06, 2012

Online communities have experienced a significant transformation in the past two decades, with services like Facebook, Twitter, Instagram, Foursquare, Tumblr and Pinterest leading the way. This article looks back at the evolution of online communities, the defining characteristics of each "social technology" and speculates on what lies ahead for the social aspect of the web.

Continue reading

Sheryl Sandberg - The most prolific woman in tech

Feb 01, 2012

Sheryl Sandberg is one of the most successful and prolific women in business and technology, currently the Chief Operating Officer (COO) of Facebook. She is highly educated, graduating from Harvard with a degree in Economics and an MBA from Harvard Business School. She spent time working for the US Government, and then at Google where she developed the philanthropic aspect of the business. After joining Facebook, she led the company to profitability and is now preparing for the IPO. Looking to the future, she could stay at Facebook, move to another tech giant or even make a move to politics.

Continue reading

Why Facebook is a success

Jan 30, 2012

This article looks at the success of Facebook, from its early beginnings to its current status as a $100 billion company. It discusses the importance of being in the right place at the right time, establishing a niche, stickiness, and the cost of switching to the platform. Additionally, it examines the growth of mobile technology, the Facebook Platform, and the acquisitions and talented team that have helped build the company. Finally, it looks at the mistakes and successes of pushing the boundaries of what is acceptable and the future for the company.

Continue reading

Top 12 blogs for business startup advice

Jan 25, 2012

This article provides a list of 12 of the best business and startup blogs. These blogs are written by highly experienced Entrepreneurs, CEO's and Venture Capitalists and offer valuable advice on how to create and run a successful business. Topics discussed range from raising finance, transitioning from corporate life to startup founder, scaling teams and developing a fund raising strategy. Readers are encouraged to subscribe to these blogs and pick up a copy of "The Lean StartUp" for further advice.

Continue reading

The ultimate guide to getting your first job in the Web Industry

Jan 23, 2012

The web industry is an incredibly fast-growing industry with many roles and opportunities. Education is important but not as important as being able to demonstrate your skills and show evidence of previous projects. To get the job you want you should keep up to date with the industry, create new projects, learn WordPress, be active and write unique CVs. When interviewing, it is important to talk about projects, previous employers, and communicate openly and honestly.

Continue reading

The designers behind the hottest iPhone apps

Jan 18, 2012

The introduction of the iPhone has increased attention on software design, user interface and user experience. Notable designers behind the biggest iPhone apps include Mari Sheibley of Foursquare, Daniel Burka of Oink, Danny Trinh of Path, Mark Jardine of Tweetbot and Tim Van Damme of Gowalla. All of these designers have made significant contributions to their respective apps, helping to make them some of the best designed consumer applications available.

Continue reading

Why Oink has already lost to Foursquare

Jan 16, 2012

Oink, a geolocation mobile recommendation application created by startup incubator Milk, has been unable to compete with the juggernaut that is Foursquare. Oink's differentiator of rating items, not places, has not been enough to keep up with Foursquare's 10 million users and 1.5 billion check-ins. As Foursquare continues to add new features such as Explore and Radar, Oink is left behind. It is time for Team Milk to call it quits and move on to their next project.

Continue reading

The Lean Startup [Review]

Jan 11, 2012

The Lean Startup by Eric Ries is a guide to revolutionizing business through scientific experimentation and the principles of Toyota's lean manufacturing process. It is based on Ries' experience creating the company IMVU and incorporates ideas from successful entrepreneurs such as Clayton M. Christensen, Geoffrey A. Moore and Steve Blank. The book provides a practical way of taking a vision and testing whether it can become a successful business, and it also looks at startup runway in a new light, emphasizing how many pivots the company has to find success. The Lean Start up is essential for anyone looking to start their own company or lead an innovative product in a large company.

Continue reading

The 3 levels of user authentication

Jan 09, 2012

This article discusses the benefits and drawbacks of three different types of user authentication systems for web applications: traditional sign up, through an existing social graph, or an open platform like 4chan. Traditional sign up allows for data collection to target advertising, but can cause friction. Social graph sign up can piggy back off existing user relationships, but lacks the ability to build value within the application. No sign up or pseudo-anonymous systems have less friction, but can result in more spam or bad content.

Continue reading

Prediction: Microsoft to buy RIM in 2012

Jan 04, 2012

In 2011, the smartphone industry saw Apple and Android gain significant market share at the expense of BlackBerry and Windows Mobile, leaving the incumbents with an almost impossible hill to climb. This was largely due to the early success of RIM's BlackBerry, which popularized mobile productivity, and the later rise of the iPhone and Android phones which focused on consumer utilities. Microsoft and RIM attempted to fight back, but failed, leading to the suggestion that Microsoft should acquire RIM in order to create a stronger challenge for the Enterprise market and stave off competition from Apple and Android.

Continue reading

The Innovator's Dilemma [Review]

Jan 02, 2012

The Innovator's Dilemma by Clayton M. Christensen is a classic business book that examines how disruptive technology can cause well-run companies to fail. Through research and analysis, Christensen provides a framework for managing disruptive technology and a case study of electric vehicles as an example. He argues that managers make the right decisions based on the information they have, but disruptive technologies still destroy their industry position. The book is recommended for entrepreneurs, engineers, and business managers.

Continue reading

Knowing when to quit

Dec 28, 2011

The "start up" bubble created by companies like Facebook and Twitter and the movie "The Social Network" has caused an influx of people from other industries who want to join the start up movement. Those with backgrounds in business, finance, law, or other traditional industries often view the creation of a start up differently from someone with a technology based background. Knowing when to pivot, restart, or quit is critical to success. People without a technical background are less likely to understand when to do this, and the dangers of not knowing when to quit can include building a sophisticated product nobody uses, or being unable to reach the desired scale. To know when to quit, founders should track key metrics and have someone with a strong technical background to provide honest feedback.

Continue reading

What I have learnt this year

Dec 26, 2011

This post reflects on the major things that I have learnt over the past year. These include: if something is wrong, change it; put it out there and keep improving it; and don't try and take on too much at once. I show the importance of getting validation of your idea and starting from scratch, but also of launching something without fussing over the minor details, and of focusing on one thing at a time.

Continue reading

The top 10 Tumblr blogs ever

Dec 21, 2011

This article highlights 10 of the best Tumblr blogs of all time. From Clients from Hell, which features anonymous horror stories from designers, to Jesus is a Jerk, which is exactly what it says on the tin, Tumblr houses some of the most prolific memes on the Internet, allowing content to quickly spread around the service through user actions. Examples include CAPTCHArt, Dear Photograph, Hungover Owls, Kim Jong-il looking at things, Hipsters have to pee, High expectations Asian Father, Garfield minus Garfield, Jesus is a Jerk, and XKCD.

Continue reading

Highlights from Le Web 2011

Dec 19, 2011

The Le Web conference in Paris, was an incredible feat and attracted some of the biggest names in technology. Over 100 videos of interviews, talks and keynotes have been released, with highlights from Leah Busque (TaskRabbit), Travis Kalanick (Uber), Dave Morin (Path), Kevin Systrom (Instagram), Dennis Crowley (Foursquare), Mike McCue (Flipboard), Kevin Rose (Milk), Steve Jang (SoundTracking), Eric Schmidt (Google), Phil Libin (Evernote), Marissa Mayer (Google), Sean Parker and Shervin Pishevar (Investors), and Daniel Ek (Spotify).

Continue reading

Avoiding the "Brand partnership" trap

Dec 14, 2011

Foursquare pioneered the Brand partnership business model which combines geolocation, rewards and real time intelligence of customers. This has led to many new start-ups attempting to imitate this model, but most will fail due to lack of engagement. Foursquare has been successful due to its features, partnerships, and user base. Companies should not copy the business model of other services, but instead find a model that works for their own service, users, and value.

Continue reading

How to validate ideas and get honest feedback

Dec 12, 2011

This article outlines how I decided to rebrand their product Cultivatus to Culttt. It explains how I gathered honest feedback from a post on Hacker News, and provides steps for others to validate their ideas and get honest feedback.

Continue reading

Welcome to Culttt

Dec 11, 2011

Culttt has recently rebranded from Cultivatus and is now a platform for regular, high quality content. It is looking for talented up and coming writers, designers and developers who are looking for exposure and have a submission page for further details.

Continue reading

Why personal branding will become more important than a degree

Dec 07, 2011

The rise of the Internet has opened up the opportunity for people to create a personal brand, which can create career opportunities, influential connections, and a business. Reasons why personal branding will become more important than a degree are discussed, as well as how to start and examples of successful people. It is suggested that if someone wants to be successful in the future, they should start personal branding now.

Continue reading

Flipboard is great, but...

Dec 07, 2011

Flipboard has launched an iPhone version of their iPad app, offering a "digital magazine" experience. While the integration of Twitter, Facebook, Instagram and Tumblr is nice, Flipboard is not a better experience than any of the above apps. For light information consumption like news websites, Flipboard is great, however for a high content consumer, it is not an ideal one-app experience.

Continue reading

10 of the most annoying Facebook statuses ever!

Dec 05, 2011

This article has outlined 10 different types of annoying Facebook status updates. It is evident that some people feel the need to share every mundane moment of their life, or have a misguided opinion on the world's issues. It is advised that people be aware of the type of Facebook updates they are sharing and try to avoid the topics outlined in this article.

Continue reading

Why Path will finally succumb to Facebook

Dec 01, 2011

Path has recently launched their 2.0 private social network with a new mobile application, but have yet to gain mainstream adoption. Despite this, their innovative design and freemium business model have put them on the cutting edge of mobile user experience. Meanwhile, Facebook has seen huge adoption of its social network, but their mobile applications are lagging behind. It is yet to be seen whether Facebook will acquire Path and Dave Morin will return to Facebook.

Continue reading

The real reason why domain names don't matter anymore

Nov 30, 2011

The importance of exact domain matches has decreased due to Google's constant evolving algorithm, expansion into more than just search and the mass growth of the Internet. It is now much more important to focus on having a high quality website and ensuring it dominates search results, rather than spending a lot of money on a domain name.

Continue reading

How to make vanity URLs using PHP, .htaccess and MySQL

Nov 16, 2011

This tutorial provides an overview of how to use vanity URLs, which are direct links to a user's profile, with PHP and .htaccess. It explains the code necessary for .htaccess to recognise a vanity URL and route it to the correct user in the database, as well as how to use MySQL and PHP to display the correct profile page.

Continue reading

3 simple steps for learning how to code

Nov 09, 2011

Understanding how to code requires understanding the problem you are trying to solve, researching the tools you need to use, and testing your code as you go. This will ensure that the code you write is accurate and will save you time in the long run.

Continue reading

My top 10 Internet TV shows

Nov 07, 2011

This article summarizes the top 10 internet TV shows from either Revision3 or This Week In. These shows cover topics such as technology start-ups, film-making, film reviews, and mobile phone applications. Each show provides viewers with tips, tricks, and insight into their respective fields.

Continue reading

The fragmentation of television, why TV will move online

Nov 02, 2011

The Internet has enabled individuals to find and access content that caters to their specific interests. It has created an explosion of niche media, allowing people to explore and engage with topics they are passionate about. This fragmentation of media has opened up a world of possibilities, allowing people to discover and connect with like-minded individuals.

Continue reading

How to align a DIV vertically and horizontally

Oct 31, 2011

This article explains how to align a DIV horizontally and vertically in HTML and CSS by creating a content DIV and writing the CSS needed to align it. The CSS requires the use of margins to align the DIV and they should be exactly half of the width and height.

Continue reading

How to create an invite system using PHP

Oct 26, 2011

This tutorial outlines how to create an invite system in PHP for a new product or website launch. It explains the need for a MySQL database and a PHP page to accept the email address, as well as the code required to generate a unique invitation code for each user. It also provides advice on how to use the invite code, such as sending a link to a registration page and verifying against the invite code in the URL.

Continue reading

The key to start up success is attacking the niche

Oct 19, 2011

Crossing the chasm suggests that it is best for businesses to target a niche market in order to dominate it, rather than being a small fish in a big pond. This strategy has been successful for Facebook, Task Rabbit, SEOmoz,, and many more. Examples of businesses that did not follow this strategy, such as Appysnap, Oink, and SoundTracking, have not seen success.

Continue reading

Facebook's loss of relevancy, and the pivot into communication

Oct 12, 2011

Facebook has experienced immense growth over the past few years and is on track to reach 1 billion users. However, it is uncertain whether or not Facebook's dominance will be impacted by the fragmentation of the Internet.

Continue reading

Crossing the chasm [Review]

Oct 10, 2011

Crossing the Chasm is a book written by Geoffrey A. Moore that provides a detailed overview and step-by-step guide for launching a new technological product, with updated examples and material for modern forces in the market. It covers the technological life cycle, from customer analysis to pricing and distribution, to help make a product a success.

Continue reading

Is social going to kill SEO?

Oct 05, 2011

As Google move towards a more social solution, SEO companies will find it increasingly difficult to affect rankings in a meaningful way. This could mean the end of SEO as we know it.

Continue reading

If you know where you're going, you're not pushing hard enough

Sep 23, 2011

Take risks and don't be afraid to get caught bluffing, because if you aren't taking risks and making daring moves, you're not doing enough.

Continue reading

If The Big Bang Theory cast were Googlers

Aug 26, 2011

This blog post looks at what the Big Bang Theory cast would be like if they were all Googlers. It examines each character and suggests roles in the company that best fit their personalities and interests. For example, Sheldon would be a Data Scientist, and Raj would be a Technical Program Manager. The blog post also looks at how the characters' relationships with each other would translate to the office. It concludes by speculating what Google might look like if the cast of the Big Bang Theory were all working there together.

Continue reading

The rebirth of Cultivatus!

Jul 25, 2011

I've made some changes to this blog, such as switching to a different domain name and creating a new layout. I also plan to start writing regularly and post at least once a week.

Continue reading

The rise and fall of Internet super giants

Jul 07, 2011

Myspace, AOL, and Yahoo! were all Internet giants that have since fallen from grace due to a number of reasons including mismanagement, incorrect growth strategies, inability to evolve, and competition from new, fresh networks. In order to avoid a similar fate, today's Internet giants, Facebook and Zynga, need to focus on the future evolution of their product, recruit the best engineering and design talent available, and innovate the social gaming model.

Continue reading

Why Apple NEED Square and Jack Dorsey

Jun 12, 2011

Apple could benefit significantly from acquiring Square, as Square offers a powerful payment processing system that is already generating millions of dollars a day in revenue. It also fits perfectly with Apple's focus on design, simplicity and intuitive products that just work. Additionally, Square brings a number of key members of the team, including Jack Dorsey, who is seen as a potential successor to Steve Jobs, and Jim McKelvey, who has a strong history in technology and creating innovative products. Square is currently valued at over a billion dollars and Apple, who has a massive cash reserve of $3+ billion, could purchase the company for a small price.

Continue reading

Fighting the bloat: The curse of the start up

Mar 02, 2011

This essay discusses the bloat of Facebook, the use of badges and pins in start-ups, and the need for start-ups to explain their ideas quickly and accurately. Facebook is losing its appeal by trying to be everything to everyone and that start-ups should focus on the core of their idea and make sure it is understood by people quickly.

Continue reading

Twitter and Digg - A match made in user submitted news stories heaven!

Feb 24, 2011

Twitter should buy Digg to provide an outlet for breaking news and a more effective way of displaying and voting on these stories. Digg would benefit from the acquisition as it would provide an opportunity to regain its status as the number one destination for user submitted stories and increase profitability. Both parties could benefit from the combination of services to provide the best way to organise and display what is hot at that moment.

Continue reading

My top viral advertisement videos of 2010

Jan 04, 2011

In 2010, a number of viral advertisement videos were released that made waves on the internet. These videos included Old Spice's reply videos, Danny MacAskill's "Way Back Home" by RedBull, Nike's "Write The Future" video, Tipp-ex's "Shoot the Bear" interactive campaign, Google Chrome's speed tests, Yeo Valley's rap video, and the "Will it Blend?" series featuring the iPhone 4. Nokia's "Dot" was also released, highlighting the potential of the Nokia N8 smartphone pre-launch. These were some of the best viral advertisements of 2010.

Continue reading

Using Twitter for B2B lead generation

Dec 26, 2010

Twitter can be an effective tool for businesses in building a userbase, generating buzz, analysing reactions, connecting with potential customers, and creating a full social media strategy. Through Twitter, businesses can search for users who are interested in their product or service and interact with them to create value and potential leads.

Continue reading

Twitter for Business: It's not all about you!

Dec 26, 2010

This post describes the steps to take when using Twitter for business. It suggests that one should listen first before speaking, learn the etiquette, use search to find opportunities, post links to blogs and industry websites, be creative with links, and never automate tweets or DMs.

Continue reading

Twitter for Business: Identifying yourself

Dec 26, 2010

Being successful on Twitter requires the user to identify themselves, manage multiple accounts in a consistent way, and be open and transparent when dealing with customers. This includes providing links to useful sources, not spamming links or automated messages, not trying to scam people, offering help and advice, being open about who manages the account, not using an outsource PR company, and not harassing people who don't respond.

Continue reading

Developing your online personal brand

Oct 07, 2010

It is important to maintain a consistant theme, customise your activity for each community, focus on quality rather than quantity, and be yourself when interacting online in order to get the most out of developing your online brand.

Continue reading

Beginning Digital Strategy for Business

Sep 07, 2010

This article provides an overview of digital strategy in terms of platforms to be used, metrics to be analysed and a clear set of goals to measure effectiveness and future developments. It includes an introduction to the platforms and strategies for blogging, Facebook and YouTube. It also outlines key metrics to measure and strategies to use for each platform.

Continue reading

Digital strategy for the insurance industry

Aug 22, 2010

In this guide, we discussed strategies for smaller insurance brokers or independent insurance organisations wishing to compete with the big players in digital strategy. This includes establishing the brand to be original, transparent, and honest; creating a web presence; blogging; using Twitter; and creating vlogs. These strategies are essential for creating a successful online business, as they focus on customer service, usability, design, and reputation.

Continue reading

Creating intimacy on Twitter

Aug 12, 2010

To gain the most use out of Twitter it is important to create a sense of intimacy and connection with your followers by posting personal details, having a wide range of tweets, having an interesting icon, completing the bio, location and web URL, and customising the design of your profile.

Continue reading

What are the uses of Twitter?

Aug 03, 2010

Twitter offers many great benefits for both individuals and organisations. From staying in touch with friends and family to discovering news and content, Twitter provides a unique platform to share experiences with others and open up business opportunities.

Continue reading

Geo-based Social Networks, The game changer?

Aug 01, 2010

Location-based social networks have become increasingly popular over the last few years and offer a lot of value to both users and businesses. There are a number of key issues that need to be addressed in order for the industry to continue to grow and be successful. These include verification of data, unification of data, better reward schemes, simpler check-in processes and more rewarding user experiences.

Continue reading

What the heck is Twitter?!

Jul 28, 2010

Twitter is a micro-blogging platform that has gained worldwide popularity. It combines aspects of IM, email, blogging and other social media services and is unique in that all messages must be within 140 characters. It is an open forum of communication where users must be interesting in order to gain followers. Twitter is a relevant and successful tool for quick and easy communication.

Continue reading

Crush It! Reviewed

Jul 21, 2010

Gary Vaynerchuk's book "Crush it!" is a passionate call to action to cash in on your passions and use the power of social media to build your own personal brand. He provides valuable advice on how to use social media effectively to gain an edge in increasingly competitive markets, and encourages readers to care more about the community and trust to build brand equity.

Continue reading

© Yellow Flag Ltd 2024.