Vincent Ritter

Writing

All my blog posts for your viewing pleasure.

Gluon - a new beginning

It's been 5 steps forwards, 6 step backwards, a few missteps and then back to square one. That pretty much sums up the development for Gluon the past few weeks.

It wasn't as such as a standstill, it was more a question of how and finding a perfect middle ground. Not to mention coming to the realisation that I am only one person, that also has clients, and that I won't have time to learn big new frameworks from scratch without spending considerable amount of time. I want something I can develop using a workflow I know and am comfortable with. I also want to be reactive to change and be able to make changes with ease across both platforms, reasonably quickly. I don't want to duplicate my work and I certainly don't want to be behind the drag curve (aviation nerds will like this saying!).

I realise that I said a few things about my gripes with certain frameworks and workflows, but the truth is... I work with them every single day! I feel like I'm in a unique position to make this work for me and get better at what I can offer for clients and of course for pushing forward with my very own ideas that I want to work on. So for me the developer happiness is that I work and continue to improve with the tools I work with every day... even though sometimes they don't line up with my personal standards or just annoy me.

Anyway... there are personal objectives and views and then there is reality. I'm happy to accept reality.

So, I can only apologise to be a flag in the wind the last few months!

A new beginning

The first version of Gluon ran across multiple platforms using React Native, which allows you to build native apps using Javascript. That's pretty cool (notice the change of tone).

Unfortunately version 1.0.0 was riddled with wrong doings since step 1. The official way to install React Native and get started is using a third party framework called Expo. Expo, on paper, is amazing. However, once you realise what it actually installs and how it locks you in... you don't want to ever touch it again. Last year I built a React Native application for a big client, using Expo as the starting point. It's a regret I/we have to live with! Sometimes the "quick" way isn't the right way, and it's certainly true here.

Gluon 1.0.0 weighed in at roughly 26MB on iOS and Android... and that's out the box!!! I haven't even added any single line of code at that point. For me this should have already thrown a red flag.

When using Expo, they'll add loads of unnecessary Android permissions that the app wants out the box. Yup, you can remove them... but the problem was that there were still many areas of doubt! This shouldn't be the default out of box experience. I don't need to know any precise information on location, or phone status, or access to contacts and and and. I'm not building a shady app. I'm building an app that users can trust!

Anyway, I took time to work on a super clean React Native build using the "old" way of installing a project. The installation and getting it to run was surprisingly easy. However setting the right direction on how I wanted to code and keep it all modular and easy to work with took a few trial and errors. It was painful and I did loads of researching!

I'm going to share some screenshots in a minute, which has some code running already, however the most important part is the build size of the app...

My pure native iOS Swift version that I shared a screenshot of the other day, weighed in at 12.8MB out the box with a few navigation controllers and the login screen. Not bad! Less than most websites for sure, ha!

Now, I've got the build down to 3.8MB! This makes me happy! I know that many people probably don't care about things like this... but I do!

Introducing the start of Gluon 2.0.0

Version 1.0.0 was a playground... I should have called it Version 0.0.1. Anyway, 2.0.0 is fitting and it marks a new beginning for Gluon. One that I'm happy with and I'm hoping that users will be happy with too.

I can re-use most of the codebase for Version 1.0.0 and bring it across to make progress quickly, however I'm reworking the lot. It's a great opportunity to do just that. Version 1 was built super fast in pretty much a solid one week (for most of it), which served its purpose! The code isn't bad, but it's not the best it can be. Sure, nothing is perfect but I can see how it can be improved greatly. Developer happiness, right?

There will also be finer enhancements with the UI and a better integration into the real native navigation controllers for both platforms. Version 1 used something called 'react-navigation' which is the recommended standard (again). Unfortunately it only emulates the navigation behaviour found on both platforms, there is nothing native about it. That means that speed and, most importantly, accessibility was and is, crap! Well... no more. Now I'm using the excellent 'react-native-navigation'. It was a bit painful to set up but well worth the time!

Screenshot time

Now that I hopefully set the tone... here we are at the humble beginnings once again. I spent the weekend working on getting the base screens set up, with their real navigation controllers. I had a few problems, but I finally managed to get past that hurdle... build and compile errors and what else not.

Here is the tab screen, after log in. Yep, get a shock, there is nothing there!

Android left, iOS right. Notice the difference in the tabs on Android? Yep... those are native and react as you expect on Android. That made me happy!

Something that wasn't possible before was listening for "viewDidAppear" events or "viewWillDisappear", you'll know them from native iOS development. Pretty handy! Out the box you would have to listen for "onFocus" or "onBlur" events on the window DOM, which was painful and never really was that good to rely on to clean up stuff like cancelling network calls or other things.

I also now have the ability to cache the current screen, the whole lot of it. So when you come back to the app, after it has been killed in the background, you'll get the most recent cached version which is followed by whatever I have to do to fetch updates and refresh the UI in a meaningful way.

With this set up, I worked on the login screen next - I took the existing design and ideas and tweaked it ever so slightly. I'll probably make it a bit more sparse.

The colours at the bottom are the Micro.blog shades of orange. However, I'll probably just create a small button under login that says "Create an account" or something easy like that.

That's the design done, so now I just need to reintegrate all the API calls and logic. I already have a solid way of doing it, so I'll probably use most of what I did.

Next steps and timelines

The next step is to work on the login and a nice way of displaying what is happening as you log in, something that I didn't really think about too much in v1. Hoping to have this done in the next few days including creating a solid foundation for calling the Micro.blog API.

Then, step by step, I'll be working on getting everything (mostly) into the app again. I'm conscious that the current TestFlight build runs out in about 26 days... and that there is no version for Android available at the moment.

It's my hope that I can get a build out that displays the timelines nicely and profiles within a few weeks. It won't have 100% of the functionality as per version 1.0.0 though. However, I'll be able to build them out relatively easy. Replying will probably be missing, but not for more than a week or so. Settings will also not be there for now as I rework some of the UI logic that plagued v1.

Anyway, just a huge thanks for all the nice emails and notes I received. I'm hoping that the app makes a meaningful contribution to the community in the long term.

Thanks for reading.

Gluon - Android update

The past few weeks I took time to look at all my options with getting Gluon back on Android.

I wasn't happy at the end of last year on the whole process of developing the app with React Native... Starting from scratch with the bare minimum that is required to get the app running has been a breath of fresh air.

The app size went from ~27MB down to around 3 - 6MB depending on the device. On top, performance has been improved by some crazy number. I managed to remove all the bottle necks that crippled the earlier builds. I'm happy with this.

Also, when I first set it up it added CRAZY amounts of permissions that it wanted access to out of the box. If you noticed that in the Play Store listing then you know what I'm talking about. No more!

Saying that, I have a working build... unfortunately I'm having problems with the production build to run on a new device. Because... don't know!

I'll be starting a new round of "internal testing" in a few weeks, so if you'd like to get back onto the list please please please let me know as I'm starting fresh.

On top, I managed to add support for Android 7.1 upwards and have tested it all the way down to API 25.

Here are some screenshots of the build in action, enjoy them.

Invisible Cities - new website launch

I'm happy to announce that my friend Chris and I launched a new website for a client of ours earlier this week.

Invisible Cities started as a social enterprise in Edinburgh, Scotland, that trains people that have experienced homelessness to become tour guides. It now covers many more cities and is growing.

With that need in mind we re-wrote the website from scratch... well, Chris did anyway 😁 The original site, developed by myself, was only designed to have one city in mind... with other cities wedged in - so we made it super flexible using the only true and awesome CMS... Craft CMS.

Chris took the old design and some of my sketches/ideas and turned this into a beauty. I'm super happy with the result.

This site is the first of many that goes under the "Two Peaks" label, which is our little agency that we're slowly building. I'm hoping to announce more as we go.

Next stop is a custom booking engine for Invisible Cities, which will be based on Simple Schedule. Can't wait.

Thank you Chris.

Visit the site.

A week in review - Week 1, 2019

With the first week of the year coming to a close I thought I'll do a little write up of what I've been doing. The purpose is to guide me on my journey to becoming calmer.

I'll start from Wednesday, as I was still in holiday mode on Monday and Tuesday.

  • Wednesday: I started by looking at a few emails and writing down a few things that I want to concentrate on. Took care of a few tiny coding related things. Also started work on Vorto, just to get me into the mindset again - bit of Ruby on Rails fun. Then it was already time to pick up my daughter at Kindergarten. Had a bit of 'fear of missing work' (FOMW) in the evening. I played Stardew Valley until 03:00 AM.
  • Thursday: Took some time to work on Vorto and also make some personal plans on what I want to achieve with it on a timescale front. I then looked at alternatives to building native apps on Android, specifically for Gluon. I mentioned that I don't want to write my app with Javascript. So I installed Visual Studio for Mac and had a very quick play with the Xamarin framework. Looks promising. I'll have to write C# but that's fine with me, it's what I used to do in a past life. Had more FOMW in the evening...
  • Friday: Had to go to the dentist at lunch time, that ruined my day. So went out after and ate Sushi at the local Japanese. Thankfully they changed the music so it wasn't a pain to sit and eat. In the evening I worked on Vorto a little. FOMW was over the roof! Watched The Hobbit (part 1) in the evening.
  • Saturday: Had a chilled day. Didn't open my laptop until the evening. Spent time playing and being with my daughter and wife. Lego building! Also stayed in to watch a few movies together. Was nice! Had the urge to code in the evening, so I opened up the laptop and booted up Xcode... however I stopped myself from writing any code, that would violate my new calmer approach to work. Watched The Hobbit (part 2) with my wife and had a glass of home made wine (Thanks Michal!), or two. To my amazement I picked up a book (fiction) that I wanted to read. I read 5 pages of "The Windup Girl" in bed. I haven't read much fiction in my life (maybe 5 books, but never to the end!), I usually prefer factual/science books.
  • Sunday: Today was relaxed, we all woke up at 10:30 and had a relaxing breakfast. My wife and I finished the movie from last night whilst our daughter was playing in her room nicely. Always great when she manages to play nicely by herself. We usually have to play with her. We left at 13:00 and went for a nice walk along the frozen river. It was too cold to make a snow man, the snow was too icy. I then cooked something for us on our return at 15:30. My secret passion is to cook simple meals (Asian/Japanese inspired). We watched Moana with our daughter, followed by playing 1.5 hours with Lego - although I wasn't allowed to use all the parts, she was giving me specific instructions. I didn't work at all today.
Walking along the river next to our place. My wife pulling our daughter whilst I took the picture.

Overall, I think it was a slow week. Though slow enough to take notice of my mood and other various things like the fear of not working. It was great to be able to take notice and stop my urges to go to my laptop to "work".

The week ahead I'll be ramping it up a little, however I'm happy that I took a slower approach this week. I'm feeling happy, except that tooth business...

Tonight I'll finish off by either playing a game or reading a book. My old passionate gamer in me is calling though... so it's probably already decided what I'll do.

A calmer new way forward

Happy New Year to everyone reading this, it’s 2019 and I’m approaching 33 years young in 6 months. Most people make New Years resolutions, so I guess what follows will be mine. However, this is a long term resolution from now until I’m no longer able to work and well into my older self. I must admit, it’s a pretty big goal to set for a resolution.

It’s one I have been thinking about for a while now and re-confirmed by reading the book It doesn’t have to be crazy at work (https://basecamp.com/books/calm), from Basecamp.

The book touches on many points about working, and a way of working at Basecamp. However, I think all aspects of this book can also touch everyone at any level. Even as a solo freelancer. It certainly brought out what I'm longing for!

Given I had a 11 day break from touching code and projects, I had some time to reflect and turn this into something more concrete.

2018

2018 was a roller coaster for sure, with a bleak outlook, but my luck has changed for the better. Which I’m thankful for. During my most depressed start of the year I shipped Simple Schedule, which ultimately was worth it (even though it turned out to be a free product)… no matter how hard it was to keep going when I knew there might be no food on the table in a few weeks time. I only know how to do few things good enough to provide a living. Coding is one of those, flying aeroplanes is another.

After shipping, and after another few weeks of arms up in the air on what is happening, I started work on freelance work with one company (thanks to a very good old friend of mine). This was great and a fresh breath of air… finally! It was hard as I had to learn new frameworks and also try and fit in with their way of doing things. After a successful first assignment I was handed another one, and another, and another! This carried me until now and I will continue to do so, hopefully, for the next few years.

However, shortly after I started the first project I was offered more work from another company… this I blindly accepted. It was great to have the extra work to pad up our financial life. I took on 5 extra projects from this company. It wasn’t great pay, but I knew it was important to have a back up if anything went sour.

This ultimately led to many days and nights of working. Too much work. Not much sleep and not quality sleep at all when I had it. There is nothing worse than dreaming about coding a particular problem when you spent all day on it. Your mind doesn’t rest.

This was my fault… I pulled every single card I had on my deck to get work, I was desperate!

It doesn’t stop there as I also had a long time personal client come back to me saying they wanted a refreshed website. I hired my friend to do it and take away the pressure. I’m thankful I did that, otherwise I think I would have ended up in a hospital bed.

By the end of 2018 I had two smaller projects to finish which were confirmed projects in Summer. However I was completely out of energy, totally burned out. I tried a big push just before the holiday to make it. I got to 99%, 4 days later than I wanted. That meant 4 days of even more stress to finish everything in time for the holidays. In hindsight, it wasn't worth it.

Enough is enough!

The above pretty much sums up my life until this point. Working countless hours with little sleep, year after year. Enough is enough. It can’t continue this way. It will kill me if I keep going like this.

Bring on calm

It’s now time to become calmer and more resourceful on how I work. I have a great opportunity to make changes as I’m lucky enough to be able to work from home and don’t have a boss to ask (except my wife!).

So here are my steps that I’d like to stick to from now on, no exceptions unless where totally needed in short bursts (if the world is on fire). I should group these but they are universal to everything I do…

  • No more than 8 hours of work per day. 5 hours coding is long enough in my opinion and you can achieve a few days work in 5 hours working for yourself than being stuck to a chair in a company full of distractions and bosses.
  • One big thoughtful client project at a time. Thoughtful is important!
  • 70/30 split between client work and personal work which I’d like to shift to 60/40 and then 50/50 by end of this year. This split is allowed to fluctuate to more personal time if client work is somewhat slow or I feel the need to hold off a little.
  • If a client project is too big to fit into 5 - 8 hours a day (or the 70/30 split) to hit the deadline I will go ahead and hire outside help. I don’t want to go above my hour budget. This also means accepting the fact that the take home money is less.
  • No more tiny task management - I always longed for getting into OmniFocus or Things, but the less I have to manage the better. Bugs I’ll keep around in Trello for anything I work on (or probably something else), but I don’t want to micro manage anything anymore. The less the better. I see people all around making themselves busy with managing huge task lists - why?
  • No more statistics or tracking of things - I don’t track anything on my website or services already, so this particular point means no time tracking for personal stuff (and client things when not needed). No more activity tracking of workouts or steps or calories. I don’t use Screen Time for iOS… nor am I interested. I don’t have a need to track everything and anything I do. Just another distraction. I want to go to the gym, have a great workout, not be distracted and feel great afterwards - I don’t need a computer to tell me how well I’m doing - the feeling is more important.
  • No working on weekends. Zip. Done. Family time!
  • Take on engaging client work - nothing like flexing the brain muscles. I’m in a unique position to do this to most extend so I’d like to shape my future this way if I can. I love building things from ground up. I don’t want to get too comfortable with doing not so engaging work… I have a few things lined up already here, so I’m happy with that.
  • Letting go of FOMW - This is what I call the fear of missing work… it’s a problem and one that is hard for me to get to grips with. Just sitting here and writing this post I’m thinking about what I should be working on… getting a little stressed about it, thinking too much about it, worrying. I need to handle myself better. I need to keep an overview of the bigger picture and not so much the immediate. I need to get to grips with walking away and feeling OK to do just that.
  • More passive income. Something I'll blog about soon. You can get a taste of that here.

There is so much more I want to say here, but I want to keep the list simple and clear. I have a tendency to overcomplicate things, something I want to work on too.

I want to simplify. Be calmer. Be alive.

Close