-
I’m finding it my Obsidian-based squad roadmap automations useful so I spent a little time on it this morning. I wanted the Jira status in the generated table to be more like the status label you find in Confluence. Obsidian Markdown doesn’t support this but I discovered that you can type
spanelements directly into a note, and it will be rendered as HTML.So I’ve defined a bunch of status labels classes of various colours in a CSS file and included it as a snippet. To use them in the note, I just need to type out the following:
<span class="status">My status</span>I’ve tried going with colours that worked well with the Obsidian colour scheme, using this online colour tool with some minor adjustments. This is the set I’ve come up with:
Looking at them now, I think the grey and red can be a little darker maybe, but otherwise they look pretty good to me.
They also look good in tables, which is what they’re designed for. I’ve set the white-space mode to
no-wrapso that they occupy a single line in a table row. A long status label would cause the summary to wrap instead of the status label itself:
The CSS snippet is here, for anyone who wants it.
-
Back working on Micropub Checkin. Re-engineered the home page to now include a list of what would eventually be check-ins — both historical and soon to be published — complete with the check-in type emoji as the icon:
Main screen for Micropub Checkin The same list of emoji icons now adorn the check-in type picker as well (except for the airplane one which seems to always be shown as what I can only describe as the “Wingding” representation):
The check-in type picker I went around a bit trying to work out how best to use these emojis icons in the
leadingslot of theListTilewidget. I expored trying to convert them toIconData, but it turns out just using aTextwidget with a large font worked well. I wrapped in in aWidgettype with a fixed font-size and so far it looks quite good, at least in the emulator:class EmojiIcon extends StatelessWidget { final String emoji; const EmojiIcon({super.key, required this.emoji}); Widget build(BuildContext context) { return Text(emoji, style: TextStyle(fontSize: 26.0)); } }Also started working on a Cubit to handle state for the main page. I had a bit of trouble working ont where the soon-to-be database call to get the list of checkins should go in the cubit. After asking ChatGPT, it looks like the initializer is the best place for it:
class CheckinListCubit extends Cubit<CheckinListState> { CheckinListCubit(): super(LoadingCheckinListState()) { loadCheckinList(); } void loadCheckinList() async { var listOfCheckins = await read_database(); emit(FoundCheckinListState(checkins)); } }I’ve got some scaffolding code in place to simulate this, and so far it seems to work.
I need to start working on the database layer and having the ability to edit and delete check-ins before they’re published. I think I’ll tackle that next.
-
This is your now monthly post about how I continue to be blown away by ChatGPT. I’ve been asking it questions all morning about how best to do something in Flutter and Dart, and it’s been coming up with answers that’s allowing me to produce better code at a faster pace. Phenomenal stuff.
-
Does this loading window really need to be modal?
-
Watched the Australian entry to the Eurovision Song Contest 2023: Promise, by Voyager. It’s good. It’s very good! Certainly the type of music that I prefer. Two thumbs up from me. 👍👍
All the best to them in the competition. 🇦🇺
-
The Nexus 7: The Good Android Tablet
Telling that this article about the Nexus 7 came out during Google I/O this year. The Nexus 7 was as close as Google (or, arguably, anyone) ever got to the platonic ideal of a small tablet. It was inexpensive but not cheap; it wasn’t underpowered; you didn’t have to put up with a mediocre low-resolution screen. It’s a balance Google rarely manages to get exactly right. As a former owner of a Nexus 7, I must say that I found to be a quality table. Continue reading →
-
Enjoying the Bike app, by Hog Bay Software. Good for those times when you need a bit of structure in what you’re working on, but not too much that the tool gets in the way.
-
Also rediscovered Fleetwood Mac, after a long pause since hearing it when I was a kid. Seems “Dreams” is the more popular one (I keep hearing it at the gym), but for myself, I just love the instrumentation of “Little Lies”. 🎵
-
Rediscovered Nigel Westlake’s Antarctica — Suit for guitar and orchestra. First heard it in Year 11 Music, when we had to study the score. Started listening to it again about a month ago. You’d want the version with the Tasmanian Symphony Orchestra. Slightly more refined than the original. 🎵
-
I’ve been finding myself doing less test driven development recently. I use to be… well, not “religious” about it, but it was definitely my preferred way of writing code for work. But now, I think I favour getting something working sooner, so I can test it and play around with it. Once I’m happy I can solidify the functionality with unit tests.
For code outside of work, you’d be lucky if I’d written tests for it at all (although I am getting better at this if the code is intended for others to run).
-
Kinda wish Go adopted the idea of explicitly nil types, similar to Kotlin or Swift. It’ll make the language less minimal, but the cost of minimalism is more boilerplate code. And after writing a bunch of it to traverse a structure in a nil-safe manner, it does make things a little less readable.
-
F5 To Run
While going through my archive about a month ago, I found all my old Basic programs I wrote when I was going through school. I had a lot of fun working on them back in the day, and I though it would be nice to preserve them in some way. Maybe even make them runnable in the browser, much like what the Wayback Machine did with the more well-known DOS programs. Continue reading →
-
It’s a cool day today, yet the bus driver decides to put on the air conditioning like it’s the middle of summer. Feels like I’m traveling in a fridge. 🥶
-
I had no idea that Google I/O was on this week. Usually this kicks off my conference watching season, but with my upcoming trip, it’s taken a bit of a backseat this year. Besides, you can only watch so many announcements from Google for things that eventually get killed six months later.
-
I’ve been trying to get a site up on Netlify that can serve assets from Git LFS. The only way to enable this is with the CLI tool, and whenever I try to run it, I get a “socket timeout” error. Might need to look at a simpler ways to do this, even if it means ditching using Git to deploy the site.
-
Had a bit of success with organising the roadmap for the squad I’m running. I decided to see if good old Obsidian could help me here. I just needed something that would present each roadmap item in a table and allow me to do some basic sorting and filtering. I probably could’ve stuck it into an Obsidian note, and used the advanced-table plugin, but I was hoping for something that worked with structured data.
So far, the db-folder plugin seems promising. What it does is read the front-matter of a bunch of files in a directory, and presents it as a table. Each column in the table is backed by a particular front-matter entry. You can add new columns, assign them types (string, number, select, date) and sort by or modify their values. Changing the cell in the table also changes the cell in the front-matter. The only downside is that each row has to be a separate file, but I think I can live with that. It might actually be a benefit.
So what I’ve done is create a separate file for each roadmap item, added front-matter entries to represent the “subcategory” (frontend vs. backend) and priority of the item, and assigned them to columns in the table. Now I can order by priority and see which part of the squad can work on each item within a single view. Pretty good.
I decided to lean a bit further into this and add the Jira JQL query for all the tickets for each roadmap item to the front-matter as well. I wrote a bit of code that’ll run this query through jira-cli and generate a nicely formatted Markdown table of the tickets, which I include in the file. It’ll also use the ticket statuses to write a one-line summary status of the road-map item (“not started”, “in progress”, “ready for release”) to the front-matter, and that is also shown in the table. The whole thing is kicked-off with a Keyboard Maestro shortcut.
This is all working pretty well. I kinda wish I can paste screenshots about the setup here, but… you know, corporate secrets and all that. Plus the whole thing is still evolving as I work out what is useful to me or not. But I this approach has got legs.
Some might say this is all procrastination to avoid dealing with Jira tickets. To that I’d say… ssh, don’t tell anyone. 🤫
-
It’s quite something seeing developers using Go to build (toy) operating systems. As much as I like Go, I wouldn’t call it something designed for such low-level use cases. Then again, they’ve made Go work on microcontrollers, so it’s probably easier than I think.
-
The state of modern office software is depressing.
I want to have something tailored for tracking the roadmap for my squad: current priorities, release dates, etc. Ideally I’d like to organise this all in some form of structured way, so that I can slice the data in different ways: producing summaries, overviews, kanban boards, etc. Because this is company data, it should live on my work laptop or on work’s systems: the cloud’s a non-starter here. It could also be great to share this with other teammates.
What are my options here? I could use Jira, but that is a shared space and very rigid in how it want’s you to define the task. That’s good for writing out the work that is ready for others to pick-up but annoying for anything higher-level than that. I could use Confluence, but Confluence is not geared towards anything resembling semi-structured data. Everything is so manual, and there’s no great way to separate data from presentation. You’re left with just adding pages with tables everywhere. It’s barbaric.
The only alternatives are all the office software that’s installed: Pages, Numbers, etc. Numbers might work: at least you’re storing data in a table. But it’s difficult to use the data in any domain other than searching and sorting (well, I guess pivot tables might help with summarising data). It’ll be difficult to present this data in any other forms, other than graphs. And sharing it with others would be nice.
What would be nice is to use some of these low-code development tools like ToolJet, or flexible databases like NocoDB or BaseRow. They can be centrally managed, configured to talk with other tools that the company is using like Jira, and available to anyone to build these small utilities or databases that you come across in your roles. Which means: no asking for IT to create these little apps.
I guess in the old days this would be the type of things that you’d get a skunks work team to build. That’s pretty heavy handed for anything that I’m thinking of. Something that can be quick to build out, say in like an afternoon or so, and that can be improved over time if others find it useful, or otherwise junked if it’s more trouble than it’s worth.
But part of me doesn’t see this happening anytime soon. And if I’m being realistic, that’s understandable. I’m probably the only person who wants this. Ah well. I guess one can dream.
-
Oof, someone save me. I just realised that my flight to Europe would’ve got me a day earlier than my hotel booking. Thankfully I manage to move the flight a day later. But boy, I’m so glad I checked! 😮💨
Now to go through every booking and make sure all the dates line up.
-
In-Band vs. Out-Of-Band Error Codes In gRPC
Is the NOT_FOUND response codes in gRPC an actual error, or could one use it to indicate a resource doesn’t exist — and it doesn’t matter if it doesn’t — on the happy path? There seems to be a bit of disagreement to what degree non-200 OK error codes should be used to signal non-error conditions. I’m generally of the opinion that all the 4xx HTTP response codes are not actually errors, and should be available to the developer to indicate that, while the method execution was not quite as expected, it wasn’t adverse in a way that warrants error logs or PagerDuty alerts. Continue reading →
-
📺 Sophie Koonin – This Website Is under Construction, a Love Letter to the Personal Website
Saw this boosted on social.lol. A really good talk on why having your own place on the web is worth it.
-
Twitter, Public Alerts, And Federated Protocols
So apparently Twitter’s leadership team has discovered the value it has for public alerts: Of all the changes Elon Musk has made to Twitter, blocking emergency and public transit services from tweeting automated alerts might have been his least popular. User backlash roared, as National Weather Service accounts got suspended. Then, one of the country’s largest public transit services, Metropolitan Transportation Authority (MTA), had so much trouble tweeting, it decided to quit posting updates to Twitter. Continue reading →
-
I just got news today that work has decided to move office. Somewhere with much better public transport links (i.e. a tram line). As someone who’s been on this frickin bus for 40 minutes, I couldn’t be happier.
-
Seen a few posts on Micro.blog over the last few days about people sleeping badly. Might be that those posts are contagious because today it’s my turn to post about how badly I slept last night. Worse was that I had to get up at 5:40 to go into the office. Ah well. Hopefully tonight. 😫
-
I’ve found myself using ChatGPT to do quite mundane things recently, like get the postcodes of cities around the world. It feels like I’m barely pushing the limits of what it’s capable of. I just prefer the chat-like interface it has.
And I think that’s the danger that people running “real” websites have when it comes to these chat bots. I’m sure there’re a bunch of sites out there that can get me the postcode for any world city I throw at it. But dealing with a crappy web interface filled with ads does not sound appealing to me. Much better is the clean chat interface that ChatGPT provides, complete with a history of all my prior requests that I can just look back on.
Also, and this is just my current use case, I’m not too phased with how accurate these postcodes actually are. These are all for test addresses to test a Stripe integration. So near enough is good enough.