Copyright © Craig Petterson 2019

Side Projects continued…

14/05/2019 20:30

Following reading the 101 side projects article from @anthilemoon, I thought I would share my current, growing list of ideas I might never attempt to implement. I started writing these ideas down after reading MAKEBOOK - which I still haven't completed, as per @levelsio advice, I started making instead. Although, I've still stumbled and not fully released any of my side projects.

I'm currently building The Cake Pays, a quote builder platform for cakes and bakes. Although, after discussions with my initial user base, a slight pivot is required. ANYWAY... where was I? Ahh, yes, here is my list of "problems" that could be transformed into side projects:

1) Client discussions

There is too much disparity between clients, managers and makers. Meetings are poison for productivity but Clients and Managers love them - it makes sense, they want to know what they are paying for. Makers want to be left to make and get their creative juices flowing.

2) Bug Hat Selector

Our company randomly selects "bug hats" per day based on who is at the table when we have our sprint kick off thingy-jig. Ignoring the fact this splits up a developer's week, we sometimes hit issues when people are off or two people are pairing. Obviously, this kind of "pick a random person" could be used for many situations.

3) UK VAT Submission bridging software

HMRC have released Making Tax Digital into the wild. We were looking into making a separate, self-service application that would deal solely in VAT Submissions.

4) Ethical products, rating system

A database of rated, ethical products so user can find suggestions of new apps that meet certain criteria or are recommended, eg; an email service.

5) Anonymous feedback

It can be difficult to talk openly and honestly at work, even with positive feedback. I've been looking for a way to share positive sentiments with my team, but sometimes it feels weird to pull them to the side and tell them in person. This is especially true if you find it difficult with social interaction.

6) Anonymous wages

It’s difficult looking for jobs when you don’t know how much your really worth - trust me, it’s probably more than you think. What’s worse, is not being sure what the market average is or having a baseline to compare to.

It would be cool to have an open database that collects how much you make, where you're from and what industry you're in would be great for people to see if they're underpaid or aiming too low (or too high) in the market.

7) Subscriber

An app that lets you subscribe to other things but prevents you getting spam with marketing emails.

8) Work In Progress

I like making "product build threads" where I write what I've done to help keep me accountable and progressing. Keeping this separate would allow us to keep an easier-to-find record, for referencing or updating as we go.

9) Best Meeting Time

Pick the best day and time from a calendar to satisfy or fit as many people as possible.

10) Productivity / TODO app (yawn)

Keeping productive with what I need to do today.

11) UK Car Pool

Carpooling isn't really a thing in the UK, but Merseyrail sucks! So much! Why not all travel to work together and split the costs?

12) Booking System

a) College/University Admission system

During University, we had a project involving this that I always thought was interesting, but never got round to building.

b) Cinema booking system

Odeon only lets you book online using 1 limitless card. It's annoying. I typically go with another person who also has Limitless and it's infinitely frustrating.

13) Memory list

Log good memories to review when you're down.

14) Pic-A-Day

Those year long flip books of pictures are amazing. It’s great to keep a record and see progression.

15) Food dairy

Slimming World has this concept of syns. Their food diary is horrific, but the idea of keeping track is so useful. It would be great if we could list the food we've eaten and it automatically counts syns, calories and sort in the specific categories to help keep us healthy and on track.

16) Habit tracker

Monthly "resolutions" with small, achievable goals.

New year’s resolutions are incredible difficult to keep. The problem is that you have to keep up this new found good habit for an entire year!

17) Non-zero Days

/u/ryans01 posted an incredible reply to a post on Reddit - well worth a read. The idea is to make every day count, even if it's just doing something small.

Ryan’s idea was essentially tapping into 3 hobbies by setting up your goals to make money, keep you in shape and let you be creative.

18) Today I Have

Where I work currently, we get trial days to build a "Today I Have" app, which is a great way to give a trial a specification and something tangible to build in a short space of time. I've always wanted to expand on this just to see what else could be added to it, but mostly to keep accountable.

Makerlog is a great example of this, and I'm incredibly impressed with @matteing for his recent Wellness update.

19) Inventory / Stock control

Does this need explaining...? Fine… keeping track of what stock you have and how much it’s worth.

20) Time tracker for invoicing

I often get lost in the world of making. How long did that feature take? How much do I need to bill for again? It would be great to be able to time work we do and link that together on a per project or per client basis.

21) Rocket League Rankings

I play Rocket League (or did until earlier this year). I never knew how close I was to the next rank, not really or what my win ratio was for my current session. I just like having access to some cool stats, which explains a lot about my personal habits page.

22) Image requests from non-technical users for events

A place to upload pictures for anyone to share if they were at an event. Preferably with no log in or technical experience required to use.

This was first posted on Twitter by Nate Berkopec and I really like the concept.

23) Cheese board

My god. Cheese is the greatest (I resisted this pun...) thing ever.

Over Christmas, I went to a market in London, where I had the best sales experience and walked away with a magnificent set of cheese and chutneys.

It would be great to replicate that online (although sadly without tasters) and provide selections and recommendations of cheese and chutney combinations.

24) Multi-host chat app

I hate having many different apps for effectively the same thing. Facebook Messenger, WhatsApp, SMS, Slack, Discord, Google, Telegram, the list goes on... It would be great if they could all be collated into one place where we can send and receive all messages.

25) Amazon ShopperBot for Slack

At work, we have an Amazon channel. People post something they want to be added to the shopping list and - if it's not ridiculous - it gets bought. The problem is, someone has to keep track of what actually gets bought through the clutter of jokes, spam and general chat that happens. This chat bot would need to allow this person to easily keep track and find what is on the list with a simple command.

26) Pagy Tables

I love Pagy for pagination, but tables often need much more. Pagination, ordering, searching, exporting, customisation. There is never a single place to achieve all of this. There are examples that are close, but something is always missing from what I want.

27) YABA: Yet Another Budgeting App

There are endless budgeting app that keeps track of your improvements, savings goals and paying down debts.

I want to know my current financial situation and I don't care about progress. I'm not interested in that - the past is gone. This is what I started working on with money.calajo (RIP), but with no interest, although I loved it.


If you fancied taking on one of these projects, then please let me know and I'll pass on the notes and ideas I've had so far. Just get in touch.

Huge thank you to anyone who read this and gave me some pointers. Particularly @anthilemoon for the feedback :)

(I should have posted this on 24th March 2019, but here we are...)

Have a comment? Contact me on cspetterson@gmail.com

Do I truly want to become a manager?

22/03/2019 09:41

After reading "Do I truly want to become a manager?" by @clairejlew, I decided that I would actually consider and answer these questions. Some questions are difficult to answer as a non-manager, but I've tried to answer them the best I can.

How much do you enjoy being in “flow” at work?

Flow is so extremely vital in my current role, but in an open office it's like trying to get blood from a stone.

I think this question is difficult to answer in terms of "Do I want to be a manager?". I think this answer would depend on the role and what you want to achieve. As an experienced team member, I'm used to interruptions and helping mentor new developers. Sometimes, I find it difficult when I'm wearing my developer hat, but I generally enjoy mentoring and helping new developers understand a particular concept.

That being said, I think protecting developers time is a key aspect that is severely overlooked in management. This is something I'm keen to encourage going forward.

Does repeating yourself drive you crazy?

Of course it does, but I'm already used to this. I don't think this problem is exclusive to just managers, but I can see why there is emphasis here.

In terms of mentoring new developers, repetition can occur but it's a great feeling when they finally grasp a concept.

How big of a control freak are you?

This is such an interesting question. You start thinking about your team mates and who is grasping control of what. As a developer, this tends to be that great feature you implemented or that bit of domain knowledge you introduced.

Recently, I've noticed that I'm happy to relinquish control of a new feature and in fact, I'm happy that I can. It's a huge bonus when you can pass on a feature and someone else can grasp it with little explanation. You know your code is readable, at the very least. Success!

Do you like to play detective?

In previous times, especially gaming, I would always get frustrated about something that happened. My initial reaction was to blame someone else; my team mates. I never thought to look at myself. Within the last year especially, I made it my goal to look at myself first and this has come with significant success.

I've found it quite calming to take a breather and ask myself about the situation. Was there something I did? Could I have done something better?

I wonder if my team mates or anyone else has tried to mentally play detective...

I think asking questions is a huge benefit for anyone, both internally, running a team or even trying to scrape together a feature in code.

What is your default reaction to conflict?

Ha! This actually made me laugh out loud. I've not been known for hiding from conflict. In fact, in some ways, I could be considered a wind up that might cause the conflict. Perhaps a negative quality... Who's asking? Shut up. I blame my Dad for it, anyway!

Conflict can come in many forms, but in the context of management, I'm not sure I have enough experience to comment. In my current role, anything minor tends to get dealt with quickly and typically by the team directly, but the major problems are taken around the team (to management in one-to-ones).

How disciplined are you with your time (really)?

I'm fairly good. As with most things (for most people!), there is room for improvement, particularly on days when I'm disheartened.

As a developer, I try to block out time for focused work, check Slack and emails at reasonable breaks rather than constant communication feedback loops and I always seem to have that second cup at 10:30.


In conclusion, I don't think any of these questions have made me reconsider wanting to be a manager.

Growing up and even tonight, I've heard many stories, helpful examples and experiences from my Dad about management, so I'm perhaps more drawn to it than is typical - but maybe not.

We'll see if a management or team leader role happens soon.

Have a comment? Contact me on cspetterson@gmail.com

Public Objects with Google Cloud Storage

01/12/2018 10:12

Google doesn't allow you to make a directory public. Who knows why? Please tell me. Maybe it's obvious and I just missed it all. Their example makes the entire bucket public, which we really don't want!

To overcome this, we allowed certain images to be public by manually updating them. This was feasible when there was a handful of images, but once we wanted to make company logos public to display on invoices... God damn, I'm not the guy going through each one to manually update tens of thousands of records.

Updating existing content

Since just updating a single record manually isn't obvious. Here is how you do it:

  1. Find the item in the bucket
  2. Edit permissions
  3. Add item with Entity: User, Name: allUsers, Access: Reader

Now, to update all necessary items systematically, you'll need to update the file's ACL, rather than the file itself. The file has a public attribute, but this isn't how you do it.

Following the information here: public!

You just need to run the following:

  require 'google/cloud/storage'
  storage = Google::Cloud::Storage.new
  bucket = storage.bucket 'my-bucket'
  file = bucket.file 'path/to/my-file.ext'
  file.acl.public!

Obviously, this only does it for 1 file, but a simple loop through a collection will solve this.

For us, we wanted to update our company logos.

  engine = ThirdParty::Google::Engine.new
  bucket = engine.bucket
  companies = Company.where.not(logo_file_name: nil)

  companies.find_each do |company|
    file = bucket.file(company.logo.path)
    file.acl.public!
  end

Our engine is used to deal with the require and wraps their API. Therefore, we can skip setting up storage as calling bucket does that for us.

Uploading new public content

Once this was done, we needed to make all future uploads public too, but this was simply changing Fog Google to use fog_public: true in our Paperclip storage params.

{ storage: :fog,
  fog_public: true,
  fog_directory: GOOGLE_BUCKET_ID,
  fog_credentials: {
    provider: 'Google',
    google_storage_access_key_id: GOOGLE_STORAGE_ID,
    google_storage_secret_access_key: GOOGLE_STORAGE_SECRET
  }
}

By default, fog_public is false, with an ACL setting of 'private'

fog_public: false,
fog_options: { acl: 'private' }

Just using fog_public: false works on it's own, but for some reason breaks Fog.mock! for our specs.

Have a comment? Contact me on cspetterson@gmail.com