I Use Neovim

I usually tend to write about the tools that I use, whether it's programming, or writing for my blog. Well, this time, I guess it's a bit of both. As I'm now using Neovim for practically any task that involves writing text.

I've been using it at work, with a recent JavaScript project I've been working on, to write quick notes or todo lists, and I've also been using it recently to write blog posts.

Because of its extensibility, I've managed to adapt it to my own specific needs. I have some basic preferences that you'll have in most editors like themes, layouts, code highlighting, etc. But I've also got a fuzzy finder for files (and buffers), code highlighting/formatting, code completion, and even refactoring functionality.

I've only really scratched the surface so far, but I'm already finding it to be an amazing tool. Sure, there's a steep learning curve. I had to figure out what plug-ins I needed, learn how to configure them, learn [vim motions][vm], and also configure a bunch of key mappings for the specific functions that I want to access in certain contexts. (If you're interested, my Neovim config is on GitHub)

I've definitely learned that it's not a tool for everyone. Turns out not every developer wants to use or even cares about the command line. I got a few comments like "I just don't see the point" or "I'm too used to my mouse to use the terminal".

Maybe it isn't objectively better than an IDE for writing code, but it certainly feels better to me. Maybe it's the distraction-free way of working, or that the code is in its most primitive form. But, at least for now, it fits the way I want to work.

And like I said, I'm using it for all sorts of text now. Because if I'm spending most of my time writing code in Neovim, having another plain text todo list in another file is really handy. And once I found myself spending so much time in Neovim at work, when I got home, I started doing the same.

So, when I wanted to write a blog post recently, I decided to try and use Neovim for that. Because after all, my blog is just a collection of static Markdown files that I manage with git. Now, my process of writing a new blog post is to create a new text file, write the post in Neovim, and then use git to commit and push the changes. After that, my site regenerates automatically.

I don't know how deep I'll go with Neovim. I still expect any work I do in Java at work to be in IntelliJ, and I can't see myself using it for my apps either. But for everything else, I think this will be my editor of choice.

And as much as I am enjoying using it, I do find it rather funny that I have a powerful M1-powered MacBook Pro, running a nicely designed, modern operating system, and there I am, with a terminal running full screen and dealing with plain text files.

Next up on my list of things to learn, is tmux. I've seen a lot of people use it, and it feels like the logical next step. After that, I want to see if I can build out some of my own Neovim setup with a way to use text snippets, and to output dynamic data such as the curent date.

Now that I'm in this world, I would expect that I'm going to start writing about it a lot more. So you may start seeing the blog sway a bit more technical in the future.

What Sort of Programmer Am I Now?

I think I may be reaching a bit of an inflexion point, regarding programming, both as professionally, and also as a hobby.

A lot of factors have contributed to this. But I'd say the main ones are the big changes I've had in my role at work over the past few years, my feelings about technology and software changing, and also some thoughts on my professional future.

I've been at the same company for just over 6 years now, and my role has changed massively. When I was first hired, I was the sole iOS developer, and my primary tasks were to rewrite an existing app in Swift and build another from scratch. (Both of them being clients for financial services).

However, that lasted just over 2 years. It feels pretty weird to say actually. I've long thought of myself as an "iOS developer" first, that also has interests in other areas.

Nonetheless, I haven't really developed for iOS professionally for around 4 years.

I first switched "temporarily" to a big project for the PSD2 regulation changes. That meant a lot of Java (SpringBoot APIs), but I also started working on things like our deployment pipelines, and our infrastructure. It was a sudden change, but I found it pretty interesting.

As you may have guessed, it wasn't as temporary as expected. Because I continued with various Java projects for quite some time after. The only change was after a takeover, which meant us changing our entire tech stack to something completely in-house. That meant more Java, but instead of REST APIs, it meant switching to internal applications that interacted externally via REST endpoints, but internally via RPC calls.

That has essentially carried on until the start of this year. Which is when I really started wondering about my career in programming, where I want to end up, and figuring out what I need to focus on next. Because I have to say, I'm not the biggest fan of Java. I really didn't want to think of myself as a Java developer.

Sure, I've been working on my own projects in the meantime. Them being apps for Apple platforms in Swift, various websites, blog engines, and blog themes. But I was still writing Java nearly every weekday. So I was becoming a Java developer whether I liked it or not.

One problem I had with it, was that I would be in a weird situation if I were to look for a new job. I haven't professionally worked on iOS for some time, and I also don't have the deep knowledge of Java that I would need for a new Java role. I started feeling like I'd either have to quickly get out and focus on iOS again, before finding a new job doing app development, or I'd need to completely pivot and do something new.

That is why I've been experimenting a lot this year. Disregarding working on small things like my blog, the projects I've worked on in my personal time this year have involved Node.js, Python, Swift, a bit of Rust, and also I'm starting to have a look at Go. I definitely haven't been making this easy for myself.

Weirdly, it's been pretty similar in my real job as well. I've been given a few projects to work on by myself, one of which, I was in complete control over (It was essentially data manipulation) and I chose to write Python, and another is what I'm working on now, which is an integration for the NetSuite ERP platform in SuiteScript (JavaScript).

We've got a relatively small development team locally, and it appears that I'm becoming the guy that does the various bits of work that no one else wants to do. When the idea of writing an ERP integration in JavaScript came up, most people seemed pretty put off by the idea. Because "they weren't JavaScript developers". I personally saw it as an opportunity to try something new. Which right now, seems like a pretty good idea. Since I have no idea what I want to do long-term.

I actually joked with someone at work recently about seeing how many programming languages I can use in my job this year. So far it's been Java, JavaScript, and Python, as I mentioned earlier. But I have my sights set on a target of 5.

We have a lot of work that requires work on our website, and because my team is essentially a bunch of Java developers (minus me), that means dealing with a team in another international office. However, my angle is that I think we should be able to make "small" changes locally. My boss seems to like this idea. So I think it's quite likely that I will be doing something related to that this year, which means React/TypeScript would be added to the list.

The fifth one I'm not totally sure about. Although, I do want a bit of a challenge, so I may try to push for something like Rust or Go. Either way, I think I better start laying some groundwork soon.

Hopefully, at the end of this year of experimentation, I'll be a bit closer to figuring out what I want to do professionally. Do I want to really focus on something new like Python or Go? Do I want to lean into Java more? Or possibly do I even try and stay working on as many technologies as I can?

As for right now, I still don't know the answer to the question in the title of this post. What sort of programmer am I? I'm certainly not just an iOS developer anymore. Am I full-stack? Or haven't I done enough front-end for that? Is a weird mix of skills what's now referred to as a software engineer?

I'm starting to think that I'm just a "programmer". No fancy specifications (or limitations), just someone that writes code in order to get things done.

Day 1 with Threads

I wrote a couple of days ago about my early thoughts on Threads. Overall, I was pretty optimistic about how it could turn out. It's an alternative to Twitter, it could be another boost for the ActivityPub protocol, and it could mean people on Mastodon would be able to connect to more people.

However, as much as I wasn't planning on replacing either of my Mastodon or Twitter use with Threads, I'm still left a bit disappointed by the launch. I'm now doubting whether I'll be using it at all.

Sure, it's just a 1.0, but it's still a massively subpar experience.

I was expecting it to be "Twitter, by Instagram", with emphasis on the Twitter. Instead, it's the other way around.

To me, Threads takes one of the most annoying parts of Instagram, the algorithmic timeline, makes it worse, and then provides it as the foundation of a new social network.

Algorithmic feeds can work, and there are certainly benefits to them. But as a primary way of interacting with people on your platform? That seems a little weird. Especially when it's not limited to the people that you choose to follow.

What's the point of "following" someone on a social network, when you're just going to see content from everyone else anyway? Is it just to give the algorithm a little nudge?

Anyway, as you can see, I'm not exactly a fan of Threads at the moment.

Maybe it can get better? Then again, it could also get worse

I think there's still reason to be optimistic about a possible ActivityPub integration. But as for using Threads itself, I don't think I'll be doing that very much.


Update (16:30): While I am still unsure if Threads will work for me long-term. I wonder if it would be more beneficial to me as a replacement to Instagram, rather than Twitter or Mastodon.

Is this how writing styles begin?

Sometimes when I write long blog posts, I like to run the text through Grammarly as a way to pick up on some spelling or grammar mistakes that I may have missed. But sometimes, it tries to make me "less wordy", remove words that "aren't necessary", or change the whole tone of the post.

In the past, I would blindly accept any suggestion that was made. Because surely Grammarly knew best? Maybe I just can't write properly.

But I'm now becoming of the opinion, that seeing as this is a personal blog, my writing should mirror the way I think and talk. I'm not creating legal documents, marketing material, or a school textbook, this blog is about me, so it should probably sound like me too.

Digitally starting from scratch

k3tan:

I've often wondered how I would start my digital identity again. This wouldn't be applicable to me but rather for anyone just starting out down the path. Knowing what I know now, I'd definitely do things a little differently.If I was to start over again, here's what I would do. I think I could do it rather cheaply as well.

A fascinating read, and one that seems to me would be effective at the goal of creating a digital identity that was separate from your real one.

I can't say that I'm currently in the market for a new identity, I quite enjoy being myself. But, it does give an interesting perspective into digital life. They go over a possible computer set up, way of getting money, and a few other rules on what to do and not to do.

Premature thoughts on Threads

You may (or may not) have noticed the impending arrival of Facebook Meta Instagram's new social app. Well, it's now officially coming out on the 6th of July, and it's called Threads.

The main rumour was that this new app would support ActivityPub, which is an open protocol that Mastodon is based on. This has led to all sorts of reactions. From people completely opposed to anything from Meta connecting to the Fediverse, and wanting to block it from their instance. To people that are excited about the potential of the new users that it would bring to the degenerated social network world.

I'd say I'm somewhere near the more optimistic end. Because, there is clearly space in the market for a new short-form text-based social network, and if it's backed by Instagram, then it stands a good chance of surviving. Or at least gaining enough attention to make it viable in the short term.

Regarding ActivityPub and the Fediverse, my opinion is that if Threads fully supports the protocol, then that is surely a good thing. Because, apart from major social networks simply not existing, having them work with an open standard is surely a pretty cool thing.

I do not doubt that some people will not want to have their instance to connect to Threads. This is a totally valid opinion, and I'm sure there will still be options for this.

However, I'm guessing a lot of Mastodon instances won't block Threads. Which means, if you know people that didn't make the jump to Mastodon, you may now be able to communicate with them this way.

Either way, it's a curious situation that a major platform like Instagram would even think about integrating with something open and decentralised. And I look forward to seeing what happens as a result of this.

The Humane Ai Pin

Humane:

The connected and intelligent clothing-based wearable device uses a range of sensors that enable contextual and ambient compute interactions.

Even though we've only come across very minimal press releases, and a short TED Talk, this device has already peaked my curiosity in a way that no other product has.

Sure, this product could a total disaster. But it could also be the next step in personal computers. The range of potential is huge.

I have so many questions about it, but for once I'm just allowing myself to be a little excited.

Minimalist Phone

Marc, from atthis.link, writing about digital minimalism in the context of a phone, and the experience of using a budget Android phone (Nokia C2 2E):

A few months on and the C2 is the most fun I’ve had with a smartphone since I got my first one over a decade ago.Using a phone that’s this budget I don’t feel constrained, I feel focused. There’s just enough space that I can install the odd app I only use occasionally but not so much that anything that vaguely takes my interest can be installed. Battery life is better than expected but just short enough to make every unlock mindful of its purpose. In the rare moments where web pages or apps lag, it’s a reminder that this is probably something better done on a desktop. And to top it off, in a strange twist, this will also be a phone with the best chance of longevity given that replacing the battery is as simple as popping the back off.

The whole piece was interesting, because I for one, haven't thought about digital The whole piece was interesting, because I for one, haven't thought about digital minimalism in regards to phones. Except for using fewer apps. But this is more about being constrained physically.

And it sort of resonates with me, because a while ago I decided to use an iPhone 7. And I also found it to constrain me with what I could do. It was a smaller screen, the battery life wasn't that good, and it was running an old OS, so some modern apps wouldn't run on it.

Despite that, I would also say I felt more focused because of the constraints. It slimmed down the list of tasks that I felt the phone would be useful for and made it more of a tool for specific uses.

I eventually went back to using an iPhone 13 Pro, but the idea of using a more lean device still interests me.

Text Shot - Privacy Policy

Text Shot, the app for iOS, iPadOS, and macOS, has never and currently does not collect, use, or interact with at all, any personal and private information stored on the device.

There is absolutely no need for Text Shot to ever interact with anything, apart from any text input that is provided to the application for the purposes of generating images, and for that reason alone, there has never been any intention to use personal or private information.

Date Effective: 1st July 2023

Interesting macOS Command Line Tools

I just came across this great list of command line tools for macOS by Saurabh, and to be honest, I had never heard of quite a few of them.

For example, who knew about textutil that can convert text documents between types like txt, html, docx, etc?

Or also a tool like networkQuality that can measure your internet speed? It even gives you a great readable output like this:

Downlink: capacity 105.573 Mbps, responsiveness 64 RPM - Uplink: capacity 6.886
Downlink: capacity 103.467 Mbps, responsiveness 64 RPM - Uplink: capacity 6.880
Downlink: capacity 100.457 Mbps, responsiveness 64 RPM - Uplink: capacity 6.890
[...]
==== SUMMARY ====
Uplink capacity: 8.511 Mbps
Downlink capacity: 20.053 Mbps
Responsiveness: Low (67 RPM)
Idle Latency: 36.917 milliseconds

If you use the command line at all on your Mac, I recommend at least giving this list a once over.