sammorrowdrums

Drummer, software engineer and online-learning fanatic.

The Goal

I've been looking for nice ways to publish content that interact seamlessly between my local environment and web, I wanted a way to got off Medium, and ultimately to write with as little distraction as possible. Write.As provides a lot of positives for me, and is a lot easier than maintaining a custom blog.

I think the bottom line for me though, is that blogging in a web browser makes procrastination too easy, and my will is weak. To avoid this I have experimented a little with alternatives, and finally found a setup I actually like.

Trying to go native with Write.As

When I first tried to use write.as, they did have a native app, and CLI tool available on Elementary OS, and so I attempted compose markdown using their app, and then connect it to a personal blog...

Unfortunately at the time both tools could only support publishing as an anonymous, unknown user. Also, the native app did not (and still doesn't) support Markdown preview – or at least syntax highlighting.

The Solution

Fortunately the CLI now supports publishing to blogs:

writeas publish --font sans -b sammorrowdrums ~/Documents/Blog/blogging-with-quilter.md

This has enabled me to re-visit Quilter – a native app markdown editor (available on EOS) that features a simple distraction free UI and syntax highlighting of MD, and the ability to preview.

Blogging with Quilter

The Future

Finally I am able to blog, saving my files locally first, in a native app, and then publish easily when ready. I know there are plans to enhance the Write.As native app, so I'm not ruling out using it in the future, but at least I have a workflow that can keep me away from the web browser for now.

* I know that I could just copy and paste markdown into the Write.As website – I just don't want to.

* The —font sans is important, because the default is to upload the blog in monospace font, which is a poor choice for normal blogs, although useful for sharing code, and ascii art etc.

I had no plans to try Advent of Code this year, or to learn Rust, but I saw a thread on Hacker News and then I started AoC, and then I saw another comment a couple of days in:

After that there was no turning back, I was committed. I was going to do it all in Rust.

  • First things first, I found out how to install Rust.
  • Set up my text editor
  • Began going through their wonderful book (which I'm now about half way through).
  • Struggled through the first two problems (that I'd already solved in Python).
  • Fought the borrow checker, and began to learn the standard library and type system (efforts ongoing).
  • Started building out to modules.
  • Used their integrated testing tooling (which is great!).
  • Learned to output graphics onto the screen – to solve some of the challenges.

It's been almost two crazy weeks of late nights of panic!("{:?}", reason) and struggle, but considering the power of the language I've really grown to enjoy it.

There is excellent documentation, which comes alive as soon as you understand the type system well enough to read it. The compiler errors are great, and in particular things like match statements giving warnings if you don't cover all possibilities – really helpful. Using paradigms like Some(x) None rather than allowing null values, also all fantastic.

I think the only thing that takes a significant effort at first is to understand Lifetimes – how they handle the cleanup of memory without manual memory management (like C++) or garbage collection (like Python/Golang/JS). The payoff is huge in terms of fast execution, and memory safety but there are things that I just could not grok in a day. To really get the most out of the language you have to own it (or maybe borrow it... hmmm).

The Advent of code itself has been so cool. I have so much love for the creativity, puzzle creation and interesting references like Quines – and for problems that force me to relive my geometry days from school suddenly breaking out the atan2 function to convert vectors to degrees so I can destroy asteroids! There are plenty of hilarious video links and references mixed into the story they weave with each puzzle too.

If you are thinking about using AoC to learn a language – you should! I cannot pretend that it's been easy for me, but it's been great fun. I would certainly consider doing it again and I hope to use a lot more Rust in 2020!

p.s. You should ask me how proud I am of my little IntCode VM. Everyone should have one.

elementary OS Juno

– update -

I have since bought a new Dell XPS Developer Edition laptop and installed elementary OS Juno on it straight away, and they keep making gradual improvements which is great. Still a powerful combo, still happy and would recommend this setup to anyone interested. I use it for everything.

Early Days

I wrote previously about leaving MacOS for elementary OS Loki and again one week in, so I won't repeat myself but tl;dr is that I'm a software developer, I am comfortable with the command line, originally I liked my Mac because it felt like a machine for both work and play, I wanted a to find a Linux machine that felt good for both. Elementary OS provided a beautiful environment, good opinionated defaults, HiDPI support and with a bit of tinkering I had all the latest tools for software development too.

So far I have been able to solve any problems I have faced, and helped others to do the same. I've swapped my kernel for the latest, installed packages from external sources and even with all of that, I've had very few updates that ever required manual intervention. I even get firmware updates from Dell which have been great. There are some software non-options (like Adobe, who could easily release for Linux, but don't), so you do have to be open to trying other tools:

  • For raw photos Dartktable works well as an alternative to Lightroom
  • I payed for Bitwig Studio for music production – it's made by some ex-Ableton guys – and their Linux version is great. It's not cheap and there are plenty of high quality Open Source tools such as Ardour that I would also recommend – which is available via AppCenter interface.

You don't have to be technical to use elementary OS, it's simple and effective by design – you might be surprised that you can't minimise apps, and you store files on the desktop.

I couldn't agree more with those decisions, but may take some people time to appreciate it.

For user new to Linux, if you pick a computer with good hardware support, stick to apps available within the AppCenter (and maybe brave the odd extra .deb file install – if you require additional software), I'd be surprised if there were any real issues. Stability is also something that keeps improving and Linux continues to improve stability and hardware support, it's a different world now.

Evolution of elementary OS

I've seen elementary OS go through some big changes in my time using it. They have for example:

  • Launched a successful crowd-funder for their AppCentre to help fund native app development
  • Encouraged an ecosystem of creators to build apps for ElementaryOS AppCentre
  • Released the new Juno version of the OS
  • Move across to Github to encourage more community contributions

The rest of the improvements have been more subtle. Elemetary provides a very consistent experience, and most of their forward progression is an attempt to make that experience smoother, more accessible, more discoverable or otherwise build on what they've achieved. I think this is often undervalued (and misunderstood) by developers, and hard to get right too. Things like ensuring icons are aligned evenly on a pixel grid so that they scale smoothly is not everyone's cup of tea – but it's these little details that are there in spades.

The Upgrade

I followed this guide to upgrade to the new Juno release, as I did not wish to re-install everything, and currently there is no official upgrade path between Elementary OS releases. I had manually installed a couple of packages that had conflicts with system packages (such as an HP printer tool and some packages related to kernel upgrades), and I needed to fix with them before I could complete the installation, but it was relatively painless considering it's not a supported method.

Impressions of Juno

After booting up, they grabbed my attention with the default wallpaper (yet again). My screen really came alive, I appreciated my monitor again, and it reinforced how much I trust the Elementary OS team to get aesthetics right. While trivial, a good start does improve the experience.

Keyboard Shortcut Cheat Sheat

  • The interface and boot time are very snappy
  • With the super key, you can see the list of system shortcuts which I really hope will help new users with feature discovery
  • Apps can't put their icons in the system tray
  • There is a picture-in-picture mode to see part of another screen
  • Still no minimise (switch workspaces instead – faster and simple)
  • Still cannot put icons on the desktop (again – this was always an anti-pattern)

I wrote this in Quilter, and published it with Write.As (however at time of writing there is no way to publish to a personal account with the Write.As App), so I've had to paste it into the interface, but I like writing in Markdown and distraction free editor is great.

Using Quilter

Picture-in-picture rocks

There are no apps in the system tray. If you think some apps always do need an icon in the system tray, I'd ask why? I haven't missed a single one, Slack, for example , the little red dot of distraction is gone. System notifications act as a single source of interruption, and you can control them.

Using a timer with picture-in-picture

If you want to watch an app, there is a keyboard shortcut for picture-in-picture, that allows you to select an area of another screen and see it in a small box on the one you are using. I use this feature to code while watching a timer – and it's really helpful.

AppCenter

The list of categories and curated apps certainly helps to discover some new things, a good example is Vocal which is a simple native Podcast app that just works. Cassidy (one of the eOS team) created a native colour picker app which I use frequently because no matter what software I'm using to view something, sometimes I need to grab a colour for CSS work etc. Little native apps like this help productivity.

AppCenter

I would suggest having a look around the AppCenter yourself, everyone has different interests and needs.

Conclusion

The quality of elementary has improved gradually, and (for me at least) they seem to be able to improve in a clear direction that enhances the experience – things like improved icon sharpness and interface contrast too – they care about details and about providing a consistent experience. Also more visible things like the keyboard shortcuts cheat sheet – they want users to be enabled, and the delicate balance of beauty, speed, accessibility, UX, simplicity, good opinionated decisions.

I do see plenty of Linux user comments about the inflexibility of the UI, as people are used to doing things certain ways, and don't see why they should change, but to them I can only say this:

Some parts of operating system user experience and UI that have evolved and stuck around were mistakes. Breaking habits is hard sometimes, but that is not an excuse to build worse software. elementary OS doesn't let you do some things because they lead people into worse situations in the long run. It's never going to be perfect and please everyone, but it has a style, and that style is predictable and smart. Love it or hate it, it's consistent and simple.

I'm going to stick with it.

Enter your email to subscribe to updates.