You don’t need a web developer

Occasionally, when people find out I am a programmer, they ask me if I will build  them a website or an app on the side. As I spend all day programming at my work, I rarely have motivation to continue programming after work.

However, talking to most people, I realize they don’t need a programmer; most of their needs can be met by a simple SaaS solution. Recently, I directed a few friends to WordPress.com, SmugMug, Shopify, etc. They all were happy with the results and ease of use. Also I am glad they talked to me because one guy was ready to spend a few thousands on a developer for a WordPress-based site.

Here is my recommendation for various SaaS solutions for various business needs:

A website to show business information

WordPress.com

This is my number one recommendation when the goal is simply to show simple business information. Sites hosted on WordPress.com as opposed to self-hosted version cannot install custom themes or plugins. But in exchange you get one of most stress-free website for as low as $36 per year.

Squarespace

This is my second recommendation especially if you want visually modern looking website. Its visual editor let anyone customize beautiful themes. Highly recommended if you have large beautiful pictures of your place of business.

A website for photographers

SmugMug

For a photographer, I recommend SmugMug. Though you can also use SquareSpace or even WordPress.com if your goal is to only show off your portfolio.

But SmugMug provide additional photographer centric features such as private galleries, ability to order prints, and even sell digital prints.

A website to sell

Shopify

It seems that Shopify is gold standard when it comes to ecommerce SaaS solutions. Also it provides beautiful templates and a lot of customization options. And when your business grows bigger, there is a huge community of Shopify developers who can help you integrate your online store with your back-office systems such as ERP, CRM, etc.

BigCartel

Personally, if I was selling something online, I would start off with BigCartel, mostly because it is cheaper and seems to provide as many options as Shopify for new online businesses.

Email Collection for Marketing

Mailchimp

Email is still one of most effective marketing medium. You should be collecting email addresses of visitors to your website. Mailchimp provides very clean and easy to use interface for collecting emails and sending out newsletters.

Good news is that Mailchimp has integration for all of above SaaS website solutions except SmugMug.

When You Really Do Need a Developer

Ok sometimes you really need a software developer or developers. Here are some reasons when you should look to contracting or even hiring developers:

  1. Your product is a software, a website, or an app. If you are selling such a product you probably already know that you need programmer or multiple programmers.
  2. You want to build iOS or Android app. A lot of people in service industry have asked me for a simple apps for their businesses, such as appointment schedulers for a hair salon, or a simple app to show special menu for little mom n pop restaurants. Personally, I haven’t found any easy way for business owners to create their own.
    1. NOTE: Most businesses don’t need a simple app to show just information about their business. Instead focus on a good website that is equally useful on cellphones as on desktop.
  3. You want to integrate your website with ERP, CRM, accounting software, etc. I have worked on Magento integration with various systems. Let me tell you, it is not easy or simple. Even as a developer, I was pulling my hair out.

WordPress vs Hugo

Managing WordPress can get time consuming. I have tried to move to static website several times but keep coming back to WordPress. But there are several advantages of static sites generators such as Hugo. I am advising a lot of my clients to use Hugo especially when they know that they will rarely ever update their sites.

Here are some of main advantages of Hugo (or other static site generators) vs WordPress and other CMS.

No System Administration

In order to run WordPress, you need a server. You will need to configure it, install database and PHP, in addition to a web server. Unlike personal computers that are not always connected to the Internet, a server hosting a website is always connected to Internet. So it is always available target for hackers. This means you need to secure the server properly and keep it up to date.

When using Hugo, you don’t need PHP and database. All you need is a web server, this reduces attack surface area significantly. As long as you don’t have any extra software running on the server, all you need to worry web server being properly secured.

Of course, you can use shared hosting for WordPress and avoid all headaches of System Administration.

No WordPress or plug-ins to update

The one huge advantage of Hugo is that there is no code to execute. Well no code on server to execute. You may still have some javascript. But this javascript code executes in a user’s browser and unlikely to be easily exploitable.

WordPress & plugins executes code on a server. This mean bugs in WordPress can be exploited to access your server or even install malicious code. That code can further infect your users’ computers. I have spend hours and hours restoring websites for clients when their websites got hacked. Of course, you can avoid this by keeping your WordPress installation up to date and carefully choosing plugins & themes. But this means regularly logging in the WordPress admin interface and applying any new updates.

On other hand, you will never have to update Hugo generated site once generated. Only time you will update is to change some content on it.

Simple Backups

Normally, I don’t give admin login for WordPress & server because of risk involved with client installing bad plugin or messing up something else. I sent them xml export of WordPress every once in a while. And of course they get zip file of WordPress directory and mysql export. Most of my client are not technical enough to restore from this backup. But they can give these files to someone technical who can restore it for them. To be honest, I have never tested these backup.

But I have tried to restore WordPress sites that were developed by someone else. Backup were too old, theme didn’t work with current version of WordPress. Some plugins were not in backup file and are no longer available. And the worst backup file contained viruses & malware.

With Hugo, client gets same zip file but it includes full functioning website. While it is still technical, but it should be a lot simpler to restore a static website. It can be as simple as uploading a folder to web server.

No Updates that Break your Site

Since static sites don’t need to be updated to secure against hacks, there is very little worry about any update that will break theme. If you don’t update your Hugo version, you should get same results if you run it against same source files.

In WordPress land, I have seen some people not updating their website for months or years and then when they do, it breaks their theme or plugins.

In Hugo world, you will need to update a website’s theme only when browsers stop supporting current versions of html, javascript, and css. That is going to be very long time.

Where WordPress Wins

There is one area where Hugo cannot touch WordPress. When client is actually using their WordPress site as blog or if they regularly post new content. With static sites, client will need to be technical enough to use markdown and git. Or they will email posts to you.

In my experience though most people rarely update their websites regularly enough to warrant all the extra headache involved with hosting WordPress.

iPad Pro for Programming & Fun

I finally bought 10.5” iPad Pro (Affiliate Link). It was mostly an impulse purchase. When first I started to use iPad, it felt blah. It is hard to find good apps or what apps you might want to try out.

My main goals with iPad was to have a really small laptop replacement. So I was hoping for a decent code editor. There are some code editing apps but there is no way to try out them before purchasing. So I am spending a lot of time reading reviews before I purchase any app.

Before purchasing iPad, I read a few blog posts by some programmers using their iPad as main computing device. They all said they had some issues but it was doable. Unfortunately, sample size is a bit small right now and it seems it is doable only if you ssh into a server. There is no easy solution for local dev.

Then my other goal was to use iPad as entertainment and artistic device. For these functions, I didn’t need to buy Pro version but because I wanted smallest and lightest possible profile with a keyboard; my only choice was Smart Keyboard. And Smart Keyboard only works with Pro version.

So here are my current apps.

Apps for Programming

I am still looking for a code editor app. Most programmers’ workflow was to login on server and edit code there. Here are my current apps:

Blink Shell

I started off with Termius shell client but quickly got tired of tapping screen to hit escape. I could not find anyway to remap keys in it. After some search, came across this post about using iPad Pro as main computer for programming. Based on his recommendation, I bought Blink shell for $20. This app let’s you map CAPS Lock key to escape and that was all I needed this for. However, its UI feels cleaner and more polished than Termius too.

I would recommend Blink over Termius unless you are likely to spend a lot of time in shell. And initially I was hoping I would not have to login to a server to code, but increasingly it looks like I will have to, that’s the other reason why I gave up and bought this.

Working Copy

This great free app. It works great with BitBucket. You can clone your repos, use built-in editor to edit files, commit & push. Perfect for local code editing. If you have CI/CD, you don’t have to do much more than push your code.

Termius

This is a great ssh client. Another free app. It has onscreen keyboard for sending keys that are missing on Smart Keyboard such as escape. However, I don’t want to use persistent connection. I want to be able to code on a plane or by pool. So local editor like Working Copy is the best option for me. This will come in handy though for when you need to debug or fix issues on the server.

Swift Playground

This is just a tutorial for learning swift but it is really really well made. I am really enjoying use it. I might end up learning Swift because I just like using this app. Highly recommended for kids and those who are new to programming.

Drawing Apps

Procreate

I didn’t need to buy this as there are tons of free sketching apps. But this app kept coming up whenever I was searching for tutorials on drawing on iPad. It was also recommended by some of my friends. So I bought it.

It definitely a few level above free apps. One of the best feature I like about this app is that you can export images of any size. Most free apps limit the max resolution of images. For printing especially on t-shirts, this is perfect.

Sketchbook

This free app and it is close competitor to Procreate. Only thing is that I could not figure out how to export high resolution images from it. So I gave up and bought Procreate.

Photography Apps

  • Instagram
  • Polarr
  • VSCO
  • Adobe Comp
  • PS Express
  • Snapseed
  • Photoshop Mix
  • Photoshop Fix

I think all of these apps are available for Android cellphone. The real advantage of using these apps on iPad is big beautiful screen.

More Creative Apps

GarageBand

This is fun. Just messing with it, I was able to make pretty decent sounding music. Need to play with this more.

I have GarageBand on my MacBook too but never played with it. Touch interface seems a lot more natural for making music.

iMovie

Another app that is already available on MacBook. I have used it on my Macbook but touch interface makes it a bit easier use. However, iMovie on iPad lacks stabilization feature.

Help Me Decide, Today!

I have been learning Laravel for work. I was playing with Laravel back in 2011 but then got distracted with other stuff. In my view, the best way to learn new technologies to create a something with it.

As an indecisive person who rather enjoys collecting data instead of actually making a decision, I decided to build a website that helps with decision making process. I have used different formulas and methods for helping with decision making. When I was buying TV I had stats like pixels per dollar or inches per lb in a spreadsheet. Collecting that data was fun but it was not still clear what each stat really meant.

I have found the best system for me is to rank various pros and cons of each option and use that to assign points to the options. So I wanted to convert this system into a website that can be used by anyone and let me play with Laravel. So here it is: Help Me Decide, Today!

I am not a frontend developer, so UI is simple. It uses jQuery & Bootstrap CSS. There are a few issues with ranking page. I will fix that one day, but for now it should work.

Angular vs. React vs. Vue: A 2017 comparison

Trying to figure out which Javascript framework I should learn. This blog by Jens Neuhaus says Vuejs is the easiest to learn. Also I still don’t understand why these frameworks are better than jQuery but that is for another time.

If you are an unexperienced Javascript developer — or if you worked mainly with jQuery in the last decade — you should think about using Vue. The paradigm shift is more pronounced when moving to React. Vue looks more like plain Javascript while also introducing some new ideas: components, an event-driven-model, and one-way data flow. It also has a small footprint.

Source: Angular vs. React vs. Vue: A 2017 comparison – unicorn.supplies – Medium

ReflectionException: Class Tests\Unit\Symfony\Component\HttpKernel\Exception\NotFoundHttpException does not exist

Running unit tests in Laravel, I was getting this error:

ReflectionException: Class Tests\Unit\Symfony\Component\HttpKernel\Exception\NotFoundHttpException does not exist

The issue was missing root backslash, make sure you have expected exception like:
$this->expectException(\Symfony\Component\HttpKernel\Exception\NotFoundHttpException::class);

 

Working Remotely

As a developer, I am lucky that I get to work from home as needed. But I have never been 100% remote; Lately, I have been reading a lot about working remotely, remote first companies, Digital Nomad lifestyle etc. This is compilation of various resources that I have found useful so far:

The Ultimate Guide to Working Remotely – I haven’t gone through whole guide yet but so far it has been very informative.

Remote Job Search Boards

The Remote Freelancer – A massive list of remote jobs search boards. Hosted on GitHub.

Some of more popular remote job boards are:

And then a list of Remote Friendly Companies and another massive list of Resources for Remote Jobs and Digital Nomads on GitHub.

Freelancing Rates – These are based on locations in the US, Canada, England, and Austerlia. Though these probably don’t reflect remote only rates.

 

Upgrading to PHP 7.0 on Ubuntu 14

I upgraded PHP to version 7.0 on Ubuntu box. Running php -v on shell would show it as version 7.0. But Apache was still using PHP 5.6. I tried various methods to update settings for Apache but nothing worked until I issued following commands:


sudo a2dismod php5.6
sudo a2enmod php7.0
sudo service apache2 restart

Source: PHP 7.0 (and 5.6) on Ubuntu | LornaJane

Digital Gold by Nathaniel Popper

Just finished reading Digital Gold by Nathaniel Popper (Affiliate Link).

The book is about Bitcoin and how it started. I have been hearing about Bitcoins and Cryptocurrencies since 2011. It seemed like it was not real money. It was only recently with surge in Bitcoin value that I got interested in it.

I was still skeptical of Bitcoin and the whole idea behind it. But after reading this book, I am coming around. The book was not preachy or pro-Bitcoin. It simply told the history and thinking behind Bitcoin, yet it was able to change my mind. I think Bitcoin and other decentralized currencies are the next big innovation that will change society and culture like the Internet and smartphones did. I like the idea of decentralized currency that is not controlled by any government or central authority.

In countries like Pakistan, there are a lot of rumors that government officials buys US Dollars before devaluing Pakistani Rupees, and end up earning hefty profits. In other developing countries like Argentina corruption might be less of an issue but government policies have caused runaway inflation. People in Argentina prefer to keep their savings in foreign currencies.

Bitcoin and decentralized currencies started with cypherpunks and libertarians. They still didn’t trust that governments & central banks will always take actions that are best for the people.

Bitcoin mining used to be possible on average laptops but lately only profitable way to do Bitcoin mining is using specialized hardware in a location with cheap electricity like China.

 

Setting Up Laravel on MacOS

After 3 years, I am using Laravel again at work. Laravel has extensive documentation but sometimes it can be a bit verbose. Here are command to get you started as soon as possible. This assumes pretty much fresh install of MacOS.

Install Homebrew

Check the official site for latest command
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Install PHP 7.1

brew install homebrew/php/php7

Install MariaDB

brew install mariadb

Set MariaDB to start as service at the end of installation.

Install Composer

Get Composer from https://getcomposer.org/download/ and make sure to install it globally for easier use.

Install Laravel

composer global require "laravel/installer"

Add following line to .bash_profile in home directory
export PATH="$HOME/.composer/vendor/bin:$PATH"

And restart terminal or issue this command:
source ~/.bash_profile

Install Valet

Valet is very useful for setting up dev environment.
composer global require laravel/valet
valet install

Create Projects Directory

Now create a projects directory and let Valet know it should server from that directory.
mkdir ~/sites
cd ~/sites
valet park

Test your setup

Now in sites directory, create a new laravel project:
laravel new blog
and load http://blog.dev
If everything went smoothly, you should see a fresh Laravel project.