Excursions avatar

Last year, TikTokker Avery Steeves posted a video asking why no one talks about how there’s an entire generation of teenage girls who taught themselves to code HTML on Tumblr. “People are like, ‘Oh, there’s no girls in STEM,'” she says, imitating the faceless internet mob. “No, there were! They were just making pale blogs,” an emblem of the washed-out, soft-grunge aesthetic popular on the platform in 2014.

Source: How Tumblr taught young women to code

Seriously Samsung, do you want me to still “pre-book” S22 — one you launched on 9th February — for a delivery in April first week? How do you always find new ways to botch up launches?

This year (2022) is going to see my journal/log’s 10th anniversary and 100th notebook. After many attempts to write this up, I’m just going to disgorge it all. This article is long and rambling and I make no apology for it.

Source: My Notebook System - ratfactor.

I don’t even know what to think of this. It is extensive and over-planned for my liking. I can’t do consistently follow through with such a system even if I wanted to. I am glad I don’t want to.

Satisfaction that’s one minute more

Whenever I wake my daughter up in the morning (thankfully, I don’t have to do it every day), she has this habit of pushing her face further deep into her pillow and just raising her one finger. It conveys just one more minute, Dad! It’s so adorable, and freshens me up every time she does that. And I play along as a dutiful father.

It doesn’t matter for how long she has been in the bed. She may have slept a good 10 hours of good night’s sleep, she still has her finger up when I go and wake her up. It is the sleep that she gets in the extra minute that’s dear to her.

We love this little game of ours. When I knowingly wake her up early, and she knowingly raises her finger up. When that minute is up, I act tough and pull her out of the bed. She knows I am acting. I know she knows. Both of us wear a smug smile on our faces.

Porting Hugo theme to Micro.blog

Micro.blog is a blogging platform built over Hugo, a fast static site engine. Given the way it is structured, every theme created for Hugo can potentially work with the blog hosted by Micro.blog. However, there are a few aspects added to Hugo that are specific to the way things work in Micro.blog. These need to be included as part of the themes to make the most of the features of this platform.

This article presents a non-extensive list of things that should be evaluated and included while porting a theme that is made for Hugo to Micro.blog. I have written this as I dug into the existing themes while porting Paper theme. As of this writing, a theme is considered as a plug-in in Micro.blog. Hence, many references link back to the way plug-ins work with the platform.

To reiterate, this is not an extensive list. Based on how a theme, that is being ported, is set up, one may need only a few of these steps or may need a few more than those listed below. However, this should be a good start to get a working version of the theme out for testing. If there are any issues or concerns, please reply to our email addresses.

Pre-requisites

Of course, the article assumes that you have already identified the theme that you want to port. The Hugo theme Showcase is a good place to check for all the wonderful themes available.

Though you are not required to have a detailed understanding of Hugo to port a theme, the knowledge on the below aspects should be handy.

Getting Started

The first step to get started is to access and clone the repository of the theme to be ported. You can either do this offline on your desktop or directly create a new theme in Micro.blog with mentioning the theme repository URL as Clone URL. You could then select this newly added theme as a custom theme for your test blog. This allows you to find out what breaks and also validate the additional modifications that you make to the theme.

For a theme to work, you only need a few folders and files — a typical Micro.blog theme directory structure is provided below for reference.

.
├── theme.toml
├── config.json
├── plugin.json
├── layouts
└── static
  • theme.toml - Contains bare meta information about the theme, like name, description, license, features, author.
  • config.json - Contains any properties required and referenced by the template files of the theme. If the property is to be provided by the user, typically it should be taken as a setting, defined in a separate file.
  • plugin.json - Contains meta information about the custom theme to be displayed as part of plugin repository. It also defines the feature settings that can be provided by user while plugin configuration. Refer to official guide on plug-ins for more details about this file.
  • layouts - A folder that stores html templates that defines how views of different content types will be rendered on a website with the style.
  • static - A folder that stores all the static content like CSS, JavaScript, etc.

You can get rid of all the other unnecessary files and folders and only keep the above-mentioned ones. This will keep the list of files in which changes are to be made manageable.

Before we move ahead, here’s a list of basic template files in the layouts folders that one would modify typically to port a theme.

  • /_default/list.html - A template that renders pages with multiple pieces of content, this includes the homepage. A homepage can also be independently styled by defining a template index.html in the root directory.
  • /_default/single.html or posts/single.html - A template that renders a page for a single post.
  • /_default/list.archivehtml.html - A template that renders the archive page of your website.
  • /partials/head.html - A template that defines the head section of your final rendered HTML.
  • /partials/header.html - A template that defines the header of your blog. This typically includes the site title, subtitle, navigation menu etc.
  • /partials/footer.html - A template that defines the footer of your blog. This typically includes the copyrights, author information etc.
  • /_default/baseof.html - A base template that stitches all the above defined partials together, including the main sections defined in list and single template pages above.

A theme might have all the above files, or have just a subset of these. In case a theme does not provide a particular template file, one from the basic theme (which forms the base of every theme) of Micro.blog is used.

Moreover, make sure you configure the appropriate Hugo Version to be used for your blog. Micro.blog allows two versions of Hugo to be used, 0.54 and 0.91, the latest being relatively new. Many themes may not work with the older 0.54 version of the Hugo, typically indicated by the min_version configuration in the theme.toml. If the value is above 0.54, set the Hugo version to be used as 0.91. This can be done via Design → Hugo Version.

Fix the Broken Pages

Usually, the home page might not render the list of all the posts with the ported templates. This is often due to the wrong selection of the posts. To check the selection, visit the list template mentioned above and fix the file which is fetching all the posts. It should typically look like below where you pull all the regular pages where type is defined as post.

{{ $pages = where .Site.RegularPages "Type" "post" }}

A similar fix would also need to be applied to the archive page’s template, if it is defined custom. The archive page would also need styling the components appropriately, as these are all Micro.blog specific classes, not part of the default styling of the theme.

Next, you will have to fix the templates to handle the title-less posts. Most posts published with Micro.blog are, well, micro-posts with no titles. So, wherever a Title is referenced, it should be wrapped in a {{ if .Title }} condition. So, the title reference at every place should read like below.

{{ if .Title }}
	<h2>{{ .Title }}</h2>
{{ end }}

The title-less posts might also need minor styling fixes. A typical pitfall is when a post permalink is only available with title. So, a micro-post requires a different element to carry the permalink, mostly the date-time of the post.

Another aspect that is typically broken is rendering of the taxonomy. Most of the themes in Hugo use tags to define the taxonomy. Micro.blog uses categories and hence need to fetch them differently. So at every place a template mentions tags, mostly on list template, archives template and single template, replace them with categories. This primarily involves replacing all the references of .Params.tags with .Params.categories.

With these changes handled, you should have a working website that renders correctly. However, it is still not customised to include the benefits that Micro.blog brings to the table.

Add Micro.blog Specific Tags

Micro.blog packs the key IndieWeb principles, like IndieAuth, MicroPub, Webmentions, out-of-box for all websites hosted with the platform. However, this does involve defining a few relevant aspects at appropriate places. In addition, the platform is also rich in the ways a user not adept with coding can customise their website to their liking, with support for providing custom CSS, footer and plug-ins. Enabling these also need relevant components to be defined.

The changes to be made are in two files. First, modify the partials template that defines the head section of your website, /partials/head.html.

<link rel="stylesheet" href="{{ "custom.css" | relURL }}?{{ .Site.Params.theme_seconds }}">
<link rel="me" href="https://micro.blog/{{ .Site.Author.username }}" />
{{ with .Site.Params.twitter_username }}
	<link rel="me" href="https://twitter.com/{{ . }}" />
{{ end }}
{{ with .Site.Params.github_username }}
	<link rel="me" href="https://github.com/{{ . }}" />
{{ end }}
{{ with .Site.Params.instagram_username }}
	<link rel="me" href="https://instagram.com/{{ . }}" />
{{ end }}

<link rel="authorization_endpoint" href="https://micro.blog/indieauth/auth" />
<link rel="token_endpoint" href="https://micro.blog/indieauth/token" />
<link rel="micropub" href="https://micro.blog/micropub" />
<link rel="microsub" href="https://micro.blog/microsub" />
<link rel="webmention" href="https://micro.blog/webmention" />
<link rel="subscribe" href="https://micro.blog/users/follow" />

{{ range .Site.Params.plugins_css }}
	<link rel="stylesheet" href="{{ . }}" />
{{ end }}
{{ range $filename := .Site.Params.plugins_html }}
	{{ partial $filename $ }}
{{ end }}

Next, add the below lines to the end of your base template, /_default/baseof.html just before </body>. These load the custom footer and the plug-ins defined JavaScripts.

{{ partial "custom_footer.html" . }}

{{ range .Site.Params.plugins_js }}
	<script src="{{ . }}"></script>
{{ end }}

Display Replies as Conversations

Micro.blog allows including replies made on the posts to be shown as conversations on a post page via a design setting (Design → Include conversation on post page). However, for the replies to be rendered on your post page, you need to modify your single template, /_default/single.html or posts/single.html, and add the below lines at the end.

{{ if .Site.Params.include_conversation }}
	<script type="text/javascript" src="https://micro.blog/conversation.js?url={{ .Permalink }}"></script>
{{ end }}

Summary

The difficulty involved in porting a Hugo theme to Micro.blog depends completely on the complexity of the original theme. Though it is difficult to extensively cover all the changes required, fixing the things that are broken and adding support for the Micro.blog specific features and tags is all it takes. This article attempted to list down the majority of the identified changes.

In the future, the way of including the Micro.blog specific changes may be simplified significantly. This article would be updated accordingly to reflect the same. However, the awareness of the changes being done allows one to appreciate the hidden complexity and beauty of the platform that is Micro.blog.


PS: This post was written for, and is also published at Custom by Miraz Jordan - a website that intends to “develop reference information and tutorials to help people customise themes in hosted Micro.Blogs”.

I find the story of Douglas Corrigan pretty fascinating and inspiring. Sometimes the wrong way is the right way. All that matters is your intention and people’s perception.

Having flown his nine year-old, $900 Curtiss Robin to New York, Corrigan fueled up and took off after announcing that he planned to return to Los Angeles. When next heard from, Corrigan and his old plane were in Dublin, Ireland, where he said, “My name’s Corrigan. I left New York yesterday morning headed for California, but I got mixed up in the clouds and must have flown the wrong way.” And so was born the wry legend of “Wrong Way” Corrigan.

I am on a #30day challenge of not accessing any of the social timelines and have signed out from them in all my browsers. I will continue to post to my blog, and hence cross-post to Twitter. But to aid myself to stay away from timeline, I won’t access the mention page either. So, no replies.

I want to understand what impact the timelines have on my focus — I have been struggling with that since the last few months. It’s time to take some action.

Are social media timelines the only cause? I’m sure they are not. But my intension is to find out if they are one of the causes and to what extent.

I do intend to catch up on the blog feeds though, and for the next 30 days, I will have to use emails to both send the responses. You, too, can send any responses to my posts through email here.

My today’s Wordle play was so crazy. I cracked it in the first round and still I needed four more. Because unlike yesterday, today’s was an extremely common word.

🟨⬛⬛🟨🟩
🟩🟩🟩⬛🟩
🟩🟩🟩⬛🟩
🟩🟩🟩⬛🟩
🟩🟩🟩🟩🟩

I loved the clouds floating in the vivid skies today. They crowded throughout all at once. And dispersed just as swiftly, without much drama.

Today’s Wordle was tricky. I didn’t know such a word exist. I tried it because it sounded right. Not all words are so common afterall.

Why Micro.blog works for me?

I have settled on a platform for my blog which works the best for me — Micro.blog. There are reasons why the other platforms don’t interest me. And I want to talk about them. Why now, you say? Well, recent and sudden interest in the Write.as platform among the folks I follow the words from made me momentarily pause. So here’s the write up, first on why what in Micro.blog works for me.

For starter, it suits well for both the micro and long-form posts. It has apps for all platforms that I primarily use Mac and Android (Web is good for Windows, though I would still love an app there). Quick notes are best made with the apps, especially so from smartphone. For such posts that are long, titled, Ulysses works perfectly well for me. No other CMS can ever work as well as a native application.

The platform is built on Hugo. And I love Hugo. I hosted my blog for the longest with Hugo. I love the submodule systems with Hugo. Building extensions in your templates is so easy, and I have gotten comfortable with it. For a few, it might be PHP and WordPress. However, I could never get comfortable with that.

Manton has added just enough around Hugo to make it even more useful — the APIs, the apps, the social aspects, the open plug-in and theming systems and, the most valuable, its community. I visit the platform for inspiration, and many posts start right there. All this makes Micro.blog a lot more powerful, getting rid of the issues I had with Hugo, mainly the editing workflow with the static site. And I am not even talking about the smarter features life filters, bookmarks, microcasts, newsletters and bookshelves.

Do I use all of them? Of course, not. But the fact that one plan provides me so much over and above the basic blogging functionality is priceless for me.

But what about other platforms?

I have hopped through a lot more platforms than what I am proud of. So, I know what works, and doesn’t work for me. Let me be brief and focus only on what doesn’t work for me with the most frequently talked ones. I don’t want to consider the costing aspects — I can work a way to use them so that they cost effectively the same.

The below notes also give me a ready reference when I get lured by a new platform next time.

WordPress is too busy, too bloated for my liking. I don’t like the CMS. I don’t like the themes. For my style of blogging, frequent quick posts than scheduled thought-out essays, the options and features become a hinderance. I don’t want to think about the title or the tags or the categories or the url. Or excerpt. Sure, I can customise this system just to get it right. But I don’t know (neither do I like) PHP.

Ghost blog looks pretty. Polished. Majority of my posts aren’t that. And again, it bundles too many features that I just can’t connect with. I am not a media publishing house trying to build a business with my blog. I am a dumb person with very basic needs. No “audience”. No business.

Blot is brilliant. Another of those services I have a lot of love for, driven also from my respect to David, the mind behind the service. A brilliant guy, just like his service. But my editing workflow is just not files driven. When I write, I don’t always do that in my text editor. I want a web editor. I want apps. And, having said that, I also want text editors. Not something that Blot supports currently. For some, that’s the ultimate selling point of the service. Not for me.

What about Write.as, the recent entrant? Well, I like the service. I like the simplicity of the editor (I wish Manton got inspired from this one). But it feels far too fragmented. Each feature is a different product. I had noted this recently about the service.

I land on a page which is a blank one with a blinking cursor. Brilliant! But what next? There’s nothing else if you don’t know where to go. I can see my blog posts, edit them. Do you want the community? There is a different product. Pictures you say? That’s another different product.

The workflow is not natural to me. It is a nice, easy service. But it doesn’t work for me. Plus, it lacks the app support. Without mobile apps, I just can’t publish those quick notes anymore.

Of course, I could pick and choose, make multiple platforms host different types of posts for me. I have done that. But I have realised, after a lot of pain, that it’s another hurdle in my posting workflow. Any decision my mind is to make before publishing slows it down, killing my writing productivity completely.

In conclusion, it’s a wonderful time to be blogging again. There’s such a rich set of platforms that can suit every writer’s style. For me, though, Micro.blog works the best, and I am going to stick with it for now. Does that mean I will never consider new or even the above platforms? Well, knowing me, I can never say never.

I am observing huge performance improvements with blogs hosted at Micro.blog recently. I click publish and the post is available both on my blog and the timeline. Wasn’t the case earlier. @manton looks to have done some magic to the backend. If so, kudos!

I am like Po from Kung Fu Panda, I eat when I am upset. Or even nervous. All curated habits go down the drain. I intend, however, to get back to some form of routine again. The tired, hectic last few weeks have left me exhausted. Made me Po.

I didn’t know Wordle has a “Hard” mode where “any revealed hints must be used in subsequent guesses”. But even without the mode turned on, that’s how I have been playing this game. Why would you do it any other way?

A Stranger on the Wheels

Last week, my whole family, near and distant, got together for my cousin’s wedding, and it kept me completely exhausted throughout this week. The venue for the wedding was unfamiliar to me and I am never comfortable at such places. I can never settle into any routinue of sorts, messing up my eating and sleeping habits, and invariably my body. The journey with a train to and from the destination, though, was wonderful. I have always had a fascination for the train rides, especially ones overnight. To be a resident of a world on wheels for a few hours is welcome — it distances you from all your regular thoughts. Each station the train halts at exhibits a different personality, lays out its own unique beauty for the traveling strangers. The skies in the dawns remain beautiful, the vacant stations late at nights are equally mesmerising.

All said, notwithstanding the tiredness the event left me with, the train ride gave me enough memories to remember the two nights of the journey by. The week also saw me complete another of my #30day challenges. I am proud of this one, I learned so much. And I might have continued the challenge if it wasn’t for the hectic week. I will not, however, take photo-a-day as a challenge now. I want to make it regular, part of my blogging habit.

What #30day challenge should I sign up for next, then? Anyway, last week was a slow writing week in terms of number of posts. But in terms of number of words, I wrote more than what’s usual for me.


This is an introduction for this week’s issue of my weekly newsletter. I have realized the updates I begin my newsletter with every week get lost once it is out. So I intend to publish these as separate posts going ahead.

I didn’t know today’s wordle word was a word. I knew the word, but I didn’t know it as a word. I can’t possibly have spoilt anything. I’ve read what I’ve written here twice now. But what I’ve written here won’t make sense if I didn’t know what it’s supposed to mean. Makes sense?

I like the new Galaxy S22 devices, especially the non-Ultra ones. If the rumour that Samsung might finally launch with Snapdragon processor in India is true, I might seriously consider the non-plus variant. Plus the downslide that OnePlus is on makes this decision a lot easier.

I now have 3 posts in draft, unpublished, because I’m not yet satisfied. Another reason why I’ve more micro posts than the long-form ones. I feel a sense of attachment to the stuff I post on my blog. The stuff I wrote on Twitter and other platform can get lost. Literally.

Drafts with Write.as

I wasn’t aware that there’s a way to create drafts with Write.as. With no option in the editor to save a post in-works as draft, I always thought it wasn’t possible. I should read a bit first before deciding on what I know. In fairness, though, the workflow is different, slightly reverse from all other #platforms. You basically publish a post and expect it to be a draft as it was done anonymously.

Anyway, every time I access Write.as, everything looks too fragmented to me. I land on a page which is a blank one with a blinking cursor. Brilliant! But what next? There’s nothing else if you don’t know where to go. I can see my blog posts, edit them. Do you want the community? There is a different product. Pictures you say? That’s another different product.

For example, I still wonder how do I add an image here? Can I? Or is the image’s workflow separate? Possibly, it is part of the Rich editor available as a Pro feature?

All said, this is a nice editor.

I have released an upgrade 1.0.4 to the Paper theme today. There are no visible changes, just fixes for a few issues that I have observed or have been reported to me. Mainly with archive page, custom CSS and plugin CSS & files. Let me know if you observe anything amiss.

I replaced my glasses today after going through the tiring trouble of shopping for them. There is no other process for me that’s so meaningless. What’s the most important thing in a spectacle? The lenses. How much percentage of time do I spend on deciding on the lens? Not more than 5%.

And shopping for the eyeglass frame then is shopping for fashion, which I have no sense for. What I like, I am told, doesn’t look good on me. It’s either too big. Or too small. What I am told looks good, I am not comfortable wearing that. Tired, I purchase one from whatever remains. What are clothes for if not just for covering my body, my brain consoles my crying mind each time.

That’s how my shopping for a frame for my glasses goes. What is the frame for if not just for holding the lenses within.

A morning during a train ride, in a foreign land, an unknown city is always beautiful. Curious how we connect to a rising sun, irrespective of the place. Day 30 of #30day 🖼️