Vincent Ritter

Weeklog β€” October 18th, 2024

Yikes, it’s been a while since I last wrote here and gave you all an update. I want to be honest with you all... it’s been super difficult, and continues to be even now that I finally managed to put the time aside to write here.

I wanted to avoid to write anything too personal here since summer, and I think I will for once just write about things not too project related.

My laptop has been degrading over the past few years and it finally depressed me enough. I am actually typing this on a new keyboard that I bought β€” my laptop now inside my desk, hooked up to a screen. Heck, I even bought a new mouse.

It feels like I have to learn to type all over again. The mouse is fantastic and the keyboard is nice also (because it works). Not so great is that I have to type on a 2K monitor that has a terrible colour profile. Everything is blurry. Yet, it avoids me having to use my keyboard on my laptop β€” which is around a $1000 to repair. Yikes.

I love my laptop a lot. It still runs great, minus the keyboard and Touch Bar. I miss it already!

However, this whole experience of degrading hardware has left a sour taste in my mouth β€” especially for Apple. And you know, right now, even after many months... and if not for many years since Steve has passed away... it’s the system I use the most. It still feels right, even though there are other options out there.

Heck, I tried Ubuntu and installed Omakub on it β€” many things just clicked for me. There might be something there for me. However, right now, I don’t have the means to explore. In a way I am here, I have what I have, and I need to work with it. It’s not perfect. In fact, exploring other avenues, it shows me just how tightly everything is integrated with the Apple ecosystem. I’d love to get a Framework laptop, but there are things tying me to the Apple ecosystem that just don’t make it feasible right now.

I’m a minimalist at the core, even though sometimes it feels like chaos.

I miss typing on my laptop, I really do. It’s a 2018 Intel MacBook Pro and I love it a lot. It still delivers, minus the keyboard and battery β€” and I think this was still peak Apple. Apple make great hardware, I’m not gonna deny it.

I was super close in throwing in the towel with a lot of things. The summer certainly didn’t plan out as I wanted β€” even if I had super low expectations and goals.

We’re also on a new school schedule and that has really thrown a spanner into a lot of things. I am thankful that I have a choice of my work hours, even if I’ve been a little unreliable with some of my client work β€” however I am so grateful that over the years I have made such great relationships and that I can be open about a lot of things.

I want to thank Manton, David, Michael and Raoul for sticking with me. You know that I always go above and beyond no matter how shit my day might be. I am here for you, as always!

OK, I think I’ll keep it at that for now.

Also, want to thank you the folks asking me to return to Mastodon (ActivityPub) over the past months. Maybe one day, but that day is not today. You can find me on Micro.blog and X.

Thank you all for following me and I hope to have a better update the next time we meet here. Now that I have a keyboard that works! That screen is terrible though!

β€” Vincent

Weeklog β€” August 30th, 2024

Well, it's been the last week of summer holidays, school starts next week β€” great for the kiddo who is rather excited.

Micro.blog

This week saw me working on getting Docker set up with the development flow for first timers β€” and I gotta say it works an absolute treat. Historically I avoided Docker because it brings my computer to a crawl, however I found OrbStack, thanks to the power of the people I follow β€” and I couldn't be happier. It just works and doesn't bog down your system.

It's been a great learning experience even if I don't understand everything that's happening β€” however it just works. I'll let my brain handle the background job of understanding it better.

There is more here we need to do, but feel confident we'll get there and let's see if this ultimately makes its way to production also. Funny enough, the docker set up is pretty similar to how it's run. One puzzle piece I want to figure out is to also get the static pages building locally so that everything just works (and can be tested).

Anyway, happy with the progress and the learning done! Even if it's just Manton and me working on it right now, it'll be super easy to get set up for anyone else.

Apart from that... I reworked the way push notification registration works on the Micro.blog app and hope that'll fix a few issues that some folks had. It also introduces a new "Push Permission" prompt β€” instead of when the app first starts, it'll only do it when you're navigating to the Mentions tab. A good quality of life improvement.

Shameless Plug

Apart from the new logo, which is fantastic and certainly anything better than I could ever come with, with Sublime Ads, I made a conscious effort to replace some of the React code snippets, that some parts use, with just a pure Turbo Frame. The effect is great and hope to make more progress on that as time progresses. The ultimate goal is to remove any React based code.

On top of that, it's a much better experience for users that can be brought across the customer portals also β€” excited to see where I can take that. Not to mention developer happiness.

Whilst not mentioned before, I completed the billing implementation that I took from all my other projects and adapted it to Shameless. Happy with the way it works. We're using Lemon Squeezy for handling payments.

Because of my new found love for Turbo, now that I have a somewhat grasp on it, I'm hoping to pepper this across a little bit to check for usage and update you on how you're doing with the free API usage credits you get.

More to come.

Scribbles

Over the weekend I introduced auto-saving... and I think it's pretty awesome. When you start writing a new post it'll start auto-saving it, so that when you loose your page, or disaster strikes, it'll be available to you in drafts. You can read more about it and watch a little video I made here.

As of today that works across new and draft posts, plus a few fixes have been made where sometimes it did the wrong thing depending on the blog settings.

There were many other little changes and bug fixes that I worked on β€” one of them is the functionality to stop you from posting your post if you're still uploading your image or video... that had happened a handful of times and I'm super happy to have this in there now.

There are some abstract ideas floating in my head on what to add next, so colour me excited for when my brain finishes the background process.

Thank you all that have given me feedback on auto-saving β€” it means a lot!

Other stuff

I'm having problems with Apple Development, especially Xcode β€” it's horrible and slow. In contrast, Android Studio just seems to work these days. Android Studio built the Strata production build in less than 10 seconds after I loaded it up yesterday. Colour me surprised! However, for no good reason and zero changes, everything just failed to load on the Apple side β€” no simulator, no projects.

I was so frustrated that I installed the Sequoia beta to see if it would fix anything. Upgrade went smooth. The OS is good and feels stable β€” I had zero interruption to web development and Android dev continues to work. Xcode beta seems to launch faster, so kudos for that. Before that it was a 30 second wait time before the little project picker came up. I'd say it's less than 10 seconds now. However, still issues remain, but happy my simulator is running now.

Anyway...

I've been feeling super inspired after listening to Lex Fridman interview Pieter Levels (@levelsio). Great episode and worth a listen. It inspired me to do the following:

  • Drastically simplify my server and business needs (already made great progress this week β€” going from 5 to 3 servers).
  • Drastically cut down on beer and alcohol (starting yesterday).
  • Get back into shape (as it's on and off for me, although I am quite fit as is).
  • ... just ship!

Oh and I'm feeling inspired to bring more videos and "how-to's" across my projects. Nothing concrete yet though.

Thanks for reading.

β€” Vincent

Weeklog β€” August 23rd, 2024

Finally some NEWS... not. Just an update on all things "projects". The summer holidays has really thrown a wrench into the routine of writing and shipping. I am surprised I actually got anything done. Although it's clear to me that for now client work has to be top priority during this period.

Tinylytics

Ever since I started with Tinylytics I wanted to bring the ability to record unique hit data to everyone. There was an option that allowed you to turn this on if you were subscribed. What that did was pass back a random string of characters to the script, when it loaded, and store that in the browser temporary session storage. That worked great and I was happy with it! With that string I could track the same user (or random string) across multiple navigation visits to your site, if they kept the browser and your site open β€” once they closed it, the browser would then automatically delete that random string.

However, there was always that itch I wanted to scratch to make that better (because it was sometime unreliable) and also... well... remove an extra line or 3 from the script as it loaded β€” because why not? So I set about building a super simple way of making that happen without ever breaking privacy using the data I already had as the hit was recorded.

I already wrote about it on the Updates blog, so read it there for a longer winded explanation of what I did.

To sum it up real quick though, it'll use all the incoming data when it's recording the hit, create a special "hash" of multiple data points, and encrypt that (so you can't decrypt any of the data) using a special salt key. That salt key is automatically rotated every 12 hours and will be deleted after expiry.

It works pretty great and I'm super happy with the way it works.

That means every hit now automatically has this data available to use and if you're subscribed you can access the data. There is also a new graph that will show you the combined data. It's pretty nice.

The next thing was to explore exposing the usage data for your account. Tinylytics has a free tier, which I think is very generous and has enough features for most people. However, I never got around to actually showing this β€” so now you can see your usage data on your account page (or billing page).

Right now I don't really enforce the limits although have started contacting people that are way above the limit. In addition there will be a little button at the bottom of the page if you're at a limit of 98% that will ask you to upgrade.

Usage data is calculated on an average of your last 3 months β€” I think that's fair and also allows the occasional burst, which happens.

Right now I am unsure what the next step would be if a user doesn't want to upgrade. My plan for now is to just disable the admin interface and redirect to the billing page. Hits will continue to be recorded for some amount of time I guess. I'd like to make sure though that the hits data can always be downloaded no matter. Hmmm.

There were many little changes throughout the site and how data is loaded β€” especially improving responsiveness when you have a site with a lot of data. Again I am super happy with the way things are working.

I did give the homepage a little refresh too. I like it more now. More to do here, especially on wording.

Shoutouts

What is shoutouts? Yes, very good question. Not going to lie here... but it's been sitting there humming along just nicely and making not very much money at the same time. It's pretty niche as is and the reach is low and is very specific. I love it a lot because, whilst simple, it taught me a lot.

As always I have a long list of ideas that never get any attention because I am happy with the way it works... and then I just work on something else.

Recently I switched the old domain of .lol to shoutouts.page β€” it's automatically redirecting and everything should be working as it should. I much prefer the .page handle because it'll work better for what I have planned.

Other stuff

I'm reassessing a lot of things now and would love to provide free products as best as I can β€” however at the end of the day I still like to make a living from my little projects.

Tinylytics makes the most in terms of a more stable income, although things have been super slow and also had to deal with some errors by my payment provider that paid me double for each subscription that used PayPal (urghhh). There are usually 2 - 3 paid sign ups a week β€” now it's around 1 - 3 a month (and a few cancellations also β€” the natural order of things). Gonna blame the summer holiday for this. Hopefully I'll make a small dent here again!

Shoutouts income barely covers the server bill, which isn't that much at all. So it's basically running at net zero. So that's a positive I guess. If I can get 1 or 2 paid sign ups a month, then that would be a good target for the next year.

Scribbles saw a decline of 60% - 80% of active users, although it's been picking up again very slowly in terms of people blogging. A lot of folks like to experiment with different blogging platforms. To this day it was the best short term success of any of my projects. Great to see so much enthusiasm around blogging. I am happy I built something that I wanted, especially that I have a very unique use case for my updates blogs. Paid sign ups are far and few between. Scribbles has been the most expensive service to run, to date, too. Great eye opener.

Saying all that, I need to concentrate where I can make the biggest dent in terms of sustainable income and fun. So I'll focus on Tinylytics and Scribbles as priority.

I haven't had any regular payouts since May...

As always I do love working on many things at once and, now that the summer holidays are nearly over, I'm hoping to get back into a more stable routine again. Working for the web gives me a lot of joy and always love to share what I'm doing.

Thanks for reading.

β€” Vincent

Weeklog β€” August 2nd, 2024

Well, I guess we're fast approaching Christmas again...

Last week saw me missing the weekly update as I've been mainly busy with client work, and also some things I've been working on with a friend of mine β€” more on that later.

Gluon and personal apps...

A few weeks ago I announced that Gluon is going to be discontinued and that I am no longer going to concentrate on native app development for anything personal ("personal" β€” key word, doesn't affect client work). I wrote about this topic over the past few weeklogs so I won't link to it here.

The long story short β€” creating apps for the two platforms (Google & Apple) is just not worth it for me anymore. I don't like either company, they both alienate me, and they always add roadblocks to just shipping software.

I grew up around Apple hardware and software for the past 38 years... and the last 5 - 10 years have just been sad with no end in sight. I miss Steve.

Don't get me wrong, they still make great hardware, even though my keyboard doesn't work at times, and my TouchBar flashes at me (which I have fixed by putting tape over the top of it). However, something is amiss and my interest and hope has passed. They had plenty of opportunities here.

So... I am out.

My Apple developer account is now fully expired as of the 1st of August. Google will follow in October because I won't fill out the required forms. Apple was quick to remove my apps from their store, which solves the "30 days grace in case you change your mind" period (not). You can still use Gluon if you've have it installed (I think). Funny enough, I can't re-download it now even though I previously did β€” so that answers the question if you're able to download it again at a later stage β€” nope :(

Some people have asked me what will happen with it. Will it still run? I guess it will run, but I can't tell you for certain because I can't install it anymore β€” so I have no idea. It's a shame really.

Gluon relies on server sided components, that I run, for example pushing some of the feeds to a CDN (Bunny) so it's super fast to grab discover feeds and some others. That also includes push notifications. I built that because I wanted to better control it as Micro.blog doesn't (yet?) support webhooks when you receive a mention, which I could then work on. I don't know if they still work and get delivered. I do know that the server is still working to make that happen and they all seem to be delivering nicely.

Right now I don't know how long I will support the server side component. Maybe until the new year... maybe longer. I don't know.

Saying all that, this has been great for me because I can use my time elsewhere... like...

Micro.blog

Yesterday I wrapped up a major rewrite of the app to use the new navigation library. I'm happy with the way it has gone although there were some steeper learning curves than anticipated, but it's all good. Life is about learning and that's why I love coding.

Because now I don't have to worry too much about Gluon anymore I can fully concentrate on the MB apps. Having this rewrite done gives us all a level playing field without too much difference between say Strata, Epilogue and the main MB app.

Once the PR is merged I'm going to work on some little finer details around composing.

A new major task that I want to explore is around deployments around the web app, and also getting some sort of docker based local dev environment going. It's been on the list for a while and is way past due.

Scribbles

This week I worked on adding support for comments using David's excellent Komments system. I really love what he's done and you should check it out. The documentation is here if you're interested. It's super easy to add and just works as you expect it to.

Expect a few more things around comments. I'd like to add the Micro.blog conversation.js integration at some stage soon too.

I do have a few things planned for Scribbles, and they're in my head for a while, so hopefully will get to them soon.

Sublime Ads -> Shameless Plug

When I created Gluon I wanted a super simple way to implement ads in a way that I controlled, so I created Sublime Ads. It worked great and felt good to work on it. It had its ups and downs though with interest strongly tied to "ads" in general. The last time I did anything new was last year October, 2023. But it has been stuck since. This was a product for myself and I hardly did any sort of marketing around it. I really dropped the ball on this, but I can't change the past.

My friend MichaΕ‚ approached me several times over the past years about Sublime Ads and wanted to work together on it. I always said many things which then never came true (a character flaw of mine). This year though, things were different. I finally committed and let go (I hold onto projects like they are my children) and let MichaΕ‚ handle it.

So what's going to happen? Sublime Ads is still running, but will not get any more updates and will eventually be shut down. I will send an email to all that use it before the year ends telling them of this.

I practically gave the codebase (NOT DATA) to MichaΕ‚. A new lease of life. We're going to work on it on the basis that I will keep working on the code bits and improve the product and add features as he sees will benefit the platform. He'll manage everything, including me. We talk about many ideas in general and also what I wanted from the original Sublime Ads.

Rest assured, no personal data or database has been given during the process and only the code has been handed over. We both didn't really ask or talk about it β€” because we're on the same page on these matters (even though we are friends and try to meet in person when we can).

It's still super early days but hope that I'll be able to blog about it more as we add new features and make the app better. Can't wait to see where this goes.

It's called Shameless Plug and if you're interested in creating your own ad network for your apps, I suggest you check it out. There are things that need doing, like implement billing and some other things before it's officially ready.

We felt a total new start and name was the only way.

I want to thank MichaΕ‚ for saving this project and believing in me over the years.

Other stuff

I added support for the ?ref parameter on Tinylytics so that they show up under sources. Thanks Jamie!

Sublime Feed is humming along, although there are issue where the background jobs just seem to fail β€” keeping an eye on it. Truth be told, I probably won't work on anything new here until after the holidays.

As always, I have a lot of things I'd like to do, however it's the summer holidays and I have been mainly concentrating on the freelance side of things β€” keeping me busy.

August will most likely be quiet on the blogging front, however feel free to e-mail me. Hoping to keep the update blogs lively though, so let's see.

Until next time.

β€” Vincent

Weeklog β€” July, 21st 2024

It's been an interesting few weeks as I go through a small shift of what I work on and also what my development stack looks like. Although mainly personal, and nothing I'd like to get into here, I've been exploring new (and old) software for getting my work done. It's been eye-opening and I am happy with my choices so far.

This week I had a little bit of a creative spurt on my own projects, which was a nice surprise. Perhaps because the temperatures have been a little bit more stable... or because I got used to the heat.

Micro.blog

A few weeks ago I started the process of moving the navigation library we use on our main app over to react-navigation. It's been a good learning experience for me because I am so used to the react-native-navigation (RNN).

The idea really is to bring all our apps in-line with how we build them. My old app Gluon used RNN and I was really in love with it, just like my love for MOBX. There was just a flow that worked for me, so when Manton approached me to build his app in React Native, that's what I felt comfortable shipping with. It still is an amazing navigation library, however for completeness it is best to bring a similar tech stack across to all the MB apps β€” that would make it easier to maintain and work on.

That meant I had to learn the new way, and that's been a little bit of an uphill battle because I was set with the old ways. Finally I had a bit of a breakthrough with sharing certain screens across the whole navigation stack and how it should all be set up. When we started building Strata we decided to go with react-navigation from get-go, however it was quite basic in requirement. The MB app is a little bit more involved than Strata with many shared screens across different tabs.

There are parts I've been rewriting as I go as some things were specific just for RNN which just don't work anymore. That's a good experience so far because I can improve a few things as I go.

Initially I wanted to give up and work on something else because it felt a little bit too involved to make these changes β€” I am happy I persisted though, and now I'm going one screen at a time.

We're 70% there and hope this coming week will allow me to finish it up. Then I can concentrate on more app related things that I wanted to.

Gluon

I announced that Gluon is now end-of-life a few weeks ago. There are a few stories around why I'm doing it. I have in mind another blog post to give you a general overview of the bigger question of why, but I'll hint at it here in a moment. However, know that I've had to let go of a few projects to open up my mental capacity to focus. Only I know my strengths and weaknesses β€” and I realise I have been blind to these for some time because I wanted to try and do so much.

Working on Gluon and the Micro.blog apps just makes me go all over the place, and I won't achieve anything. I really like the way Manton and I work together on Micro.blog, even though I am pretty much free to work on what I want, it's nice when we get close to launch and we tidy things up and really nail the finer details (Manton has a real eye for that, which is beyond me). Having Gluon off my mind allows me to concentrate more thinking power to the official Micro.blog apps β€” and that's where I ultimately want to be. Having both apps at the same time to maintain is not sustainable for me.

Now to the hint: Apple over the years have really started to alienate me. Not just because of their App Store polices, but in general with all this "Only at Apple. Namaste." crap and many other things that I won't discuss. I look at that company with different eyes now and I am sad how it went since Steve passed. I think we lost a lot. Don't get me wrong, I still love the hardware, but something feels completely off now and I am done. Although, there you go, I care enough to say what I just did. Watching their latest WWDC just cemented this for me even more.

Thank you Apple for forming part of me early on, but you're not the same anymore. You were great when you were the underdog, the pirates of silicon valley. Now you're the king on the hill and I couldn't care less. Here is hope to finding that next underdog.

Scribbles

A few weeks ago I upgraded the server, or let's say "downgraded", and I'm super happy with how reliable it has been since β€” it's working as I expect and how I like it.

Saying that, I haven't shipped anything new as such, however now you can add an alternative description to your blog logo, which in turn will appear in the alt text of it.

The reason I added that is because I was curious on how good the PageSpeed score is on the updates blog β€” because of an unrelated support request for Tinylytics β€” and it flagged it up. The score was already at 96 across desktop and mobile, but I really fancied that 100. So here we are, it's now at 100. I am happy with anything above 90 (even though I have never checked or cared for PageSpeed), so this was a nice surprise. Of course I need to look at actual scores where images are involved.

There is some work I need to do to add some commenting support that David has been working on, and I'll get to it soon. I know a few folks want comments, but I just refuse to build that natively into Scribbles... for now. Although I had great discussion with a friend of mine on how it could work.

Oh, and I finally started working on an updated homepage for Scribbles. Still need to add some "features" in there, but happy with the way it looks.

Tinylytics

After months of frustration of the way the super slow speed of loading your full site list, I decided to finally tackle it, and actually understand the "why". Every time I loaded my sites, it would take 2 - 3 seconds to load the page, even though things were "cached". Or so I thought.

The problem stems from the way the sites were loaded as you requested the page. You see, it's not really a problem to load the sites in one go, however the issue was that I also pre-loaded all hits related to each site. That meant ALL hits for ALL sites were loaded into memory β€” the initial reason for this to avoid a N+1 query, meaning I could grab everything in one go without going back to the database again. But boy was that a little short sighted.

My own website, this site, has nearly 60K hits since I started recording last year, and yeah... not good to load all that.

Initially I wanted to do this because I was also interested in displaying the "last 30 days" of hits on your site list. That was useful. But you know... learning experience and such.

So now I load the sites without preloading the hits data, which makes it super snappy. In addition to that, any hit data is now loaded using TurboFrames and... TurboStream. It was always on my list to finally get something to work with both of these to add some "live" components to my site and integrating with Tinylytics is just perfect. Whilst basic right now, I am so happy how it works.

When your site list loads, it will lazy load the TurboFrame for your hits, and then when you get a new hit, it will automatically update the counter thanks to TurboStream. I think it's magical. If you have a long list it'll only load the hits as the sites come into view, just so you don't load everything at once.

There is so much more I can do now, now that I have a small grasp on Turbo and how they work together β€” and considering this is built into Rails, it just works.

I'd like to concentrate on getting the site details page live as well, but that will come at a later stage.

Oh, and for fun I made the global statistics on the homepage live too... it's pretty nice. Also awesome to see it passed 5 million hits! Just amazing.

One unofficial feature I also added was that you can re-arrange the order of your pinned sites on the sites overview page. It's not yet 100%, more 80%, but it does work if you want to try and drag things around (might take a few tries). Still much to do here.

I'd also like to make to improvements to the uptime monitoring over the next few months and have a few ideas floating around in my head on how that should look β€” it's all still very basic. Gets the job done though.

Also a huge shoutout to everyone that has stuck with Tinylytics over the past year, since launching. I appreciate everything and hope that it's living up to your expectations. There is so much I'd like to still achieve, and I will.

Other stuff

I haven't done any work on Sublime Feed for a while now. I use it every day. What I learned about re-ordering and Turbo on Tinylytics gave me a few new ways of achieving some functionality I want for it, so I'll be spending some time on exploring that.

There is some ongoing work for another older project of mine, but I won't be able to share anything until "we" are ready to announce something. It's fun to revisit something I was working on and giving it a new life even if that means a completely new start (and a new name) β€” and it's for the better. More to announce as the months pass.

That's it for now, one step at a time.

β€” Vincent