all: revert social tags experiments [staging]
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
|
@ -13,12 +13,11 @@ ignoreErrors = ["error-remote-getjson"]
|
|||
subtitle = "Android developer, Kotlin fanatic and wannabe Rustacean"
|
||||
keywords = "homepage, blog, android, kotlin, rust"
|
||||
twitterUsername = "@msf_jarvis"
|
||||
socialImage = "android-chrome-512x512.png"
|
||||
socialImage = "android-chrome-512x512.webp"
|
||||
mainSections = ["posts"]
|
||||
mode = "light"
|
||||
utterancesRepo = "msfjarvis/msfjarvis.dev"
|
||||
utterancesTheme = "github-light"
|
||||
twitterCardType = "summary"
|
||||
|
||||
[[menu.main]]
|
||||
identifier = "about"
|
||||
|
|
|
@ -5,7 +5,7 @@ description = "Optimize social media exposure with the right metadata for your s
|
|||
slug = "adding-social-metadata-to-your-hugo-sites"
|
||||
tags = ["hugo", "webdev", "static sites"]
|
||||
title = "Adding social metadata to your Hugo sites"
|
||||
socialImage = "uploads/hugo_metadata_social.png"
|
||||
socialImage = "uploads/hugo_metadata_social.webp"
|
||||
+++
|
||||
|
||||
Metadata is data (information) about data.
|
||||
|
@ -16,9 +16,9 @@ This metadata can be used by browsers (how to display content or reload page), s
|
|||
|
||||
Here's how your website will look like on Twitter with and without metadata.
|
||||
|
||||
![No metadata](/uploads/hugo_metadata_no_meta.png)
|
||||
![No metadata](/uploads/hugo_metadata_no_meta.webp)
|
||||
|
||||
![Correct metadata](/uploads/hugo_metadata_correct_meta.png)
|
||||
![Correct metadata](/uploads/hugo_metadata_correct_meta.webp)
|
||||
|
||||
You be the judge of what you like better :)
|
||||
|
||||
|
@ -38,7 +38,7 @@ After coming across [this list](https://github.com/budparr/awesome-hugo#theme-co
|
|||
<meta name="og:description" content="Optimize social media exposure with the right metadata for your site" />
|
||||
<meta name="twitter:description" content="Optimize social media exposure with the right metadata for your site" />
|
||||
<meta name="twitter:url" content="https://msfjarvis.dev/posts/adding-social-metadata-to-your-hugo-sites/" />
|
||||
<meta name="twitter:image:src" content="android-chrome-512x512.png" />
|
||||
<meta name="twitter:image:src" content="android-chrome-512x512.webp" />
|
||||
```
|
||||
|
||||
- `og:type` - Allowed values are specified at the OpenGraph protocol's documentation [here](https://ogp.me/#types). I use `website` to reflect the content I serve.
|
||||
|
|
|
@ -3,7 +3,7 @@ categories = ["aps"]
|
|||
date = 2020-07-23
|
||||
description = "Long form release notes for the Android Password Store v1.10.1 patch release"
|
||||
slug = "aps-1.10.1-release"
|
||||
socialImage = "uploads/aps_banner.png"
|
||||
socialImage = "uploads/aps_banner.webp"
|
||||
tags = ["relnotes", "oss", "android-password-store"]
|
||||
title = "Android Password Store 1.10.1 patch release"
|
||||
+++
|
||||
|
|
|
@ -3,7 +3,7 @@ categories = ["aps"]
|
|||
date = 2020-07-30
|
||||
description = "Long form release notes for the Android Password Store v1.10.2 patch release"
|
||||
slug = "aps-1.10.2-release"
|
||||
socialImage = "uploads/aps_banner.png"
|
||||
socialImage = "uploads/aps_banner.webp"
|
||||
tags = ["relnotes", "oss", "android-password-store"]
|
||||
title = "Android Password Store 1.10.2 patch release"
|
||||
+++
|
||||
|
|
|
@ -3,7 +3,7 @@ categories = ["aps"]
|
|||
date = 2020-08-18
|
||||
description = "Long form release notes for the Android Password Store August release"
|
||||
slug = "aps-august-release"
|
||||
socialImage = "uploads/aps_banner.png"
|
||||
socialImage = "uploads/aps_banner.webp"
|
||||
tags = ["relnotes", "oss", "android-password-store"]
|
||||
title = "Android Password Store August release"
|
||||
+++
|
||||
|
@ -16,7 +16,7 @@ Continuing this new tradition, here are the detailed release notes for the [v1.1
|
|||
|
||||
Previously you'd have to set the URL to your repository across multiple fields like username, server, repository name and what not. Annoying! These things make sense to us as developers, but users should not have to be dealing with all that complexity when all they want to do is enter a single URL. We've received numerous bug reports over time as a result of people misunderstanding and ultimately misconfiguring things when exposed to this hellscape. Thanks to some *amazing* work from Fabian, we now have a single URL field for users to fill into.
|
||||
|
||||
![Single URL field in repository information](/uploads/aps-august-release-single-url-field.png)
|
||||
![Single URL field in repository information](/uploads/aps-august-release-single-url-field.webp)
|
||||
|
||||
## Custom branch support
|
||||
|
||||
|
@ -26,7 +26,7 @@ A long-requested feature ([from 2017](https://msfjarvis.dev/aps/issue/298)!) has
|
|||
|
||||
We made a number of UI improvements in this area for the last series, and for this release the original contributor [glowinthedark](https://github.com/glowinthedark) has returned to add the ability to append extra symbols and numbers to the password. Sometimes you'll see sites that require that each password have at least 1 symbol and 1 number to agree with some arbitrary logic's idea of a 'secure' password, and while it can be done manually, automatic is just better :)
|
||||
|
||||
![XkPasswd generator with the new symbol/number append option](/uploads/aps-august-release-xkpasswd.png)
|
||||
![XkPasswd generator with the new symbol/number append option](/uploads/aps-august-release-xkpasswd.webp)
|
||||
|
||||
To add 1 symbol and 1 number to the end of a password, input `sd` and press generate. Each instance of `s` means one symbol, and `d` means one digit. Together these can be put together in any order and in any amount to create passwords conforming to any arbitrary snake-oil check. Remember, in passwords, length is king!
|
||||
|
||||
|
@ -34,7 +34,7 @@ To add 1 symbol and 1 number to the end of a password, input `sd` and press gene
|
|||
|
||||
In the last major release we added support for [per-directory keys](/posts/aps-july-release/#proper-support-for-per-directory-keys). Building upon this, we now have support for also setting the key for a subdirectory when creating it.
|
||||
|
||||
![Create folder dialog but key selection checkbox](/uploads/aps-august-release-subdir-key-support.png)
|
||||
![Create folder dialog but key selection checkbox](/uploads/aps-august-release-subdir-key-support.webp)
|
||||
|
||||
When selected, you will be prompted to select a key from OpenKeychain that will then be written into `your-new-directory/.gpg-id` which makes it compatible with all `pass` compliant apps.
|
||||
|
||||
|
@ -44,7 +44,7 @@ When selected, you will be prompted to select a key from OpenKeychain that will
|
|||
|
||||
Many, many people reported being unable to edit/create passwords and the app abruptly crashing. This is pretty bad UX, and we've now fixed it. Users will be prompted to install OpenKeychain and once you install and return to Password Store, the app will pick up from where you left and continue the operation. Pretty neat, even if I say so myself :)
|
||||
|
||||
![OpenKeychain installation prompt](/uploads/aps-august-release-missing-openkeychain.png)
|
||||
![OpenKeychain installation prompt](/uploads/aps-august-release-missing-openkeychain.webp)
|
||||
|
||||
## External storage fixes
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ categories = ["aps"]
|
|||
date = 2020-07-22
|
||||
description = "Long form release notes for the Android Password Store July release"
|
||||
slug = "aps-july-release"
|
||||
socialImage = "uploads/aps_banner.png"
|
||||
socialImage = "uploads/aps_banner.webp"
|
||||
tags = ["relnotes", "oss", "android-password-store"]
|
||||
title = "Android Password Store July release"
|
||||
toc = true
|
||||
|
@ -65,7 +65,7 @@ We've been aggressively refactoring the codebase to use modern APIs like [Activi
|
|||
|
||||
Right off the bat, you will notice a brand new icon for Password Store. This was created for us by [Radek Błędowski](https://twitter.com/RKBDI), go check him out!
|
||||
|
||||
![New icon](/uploads/aps_banner.png)
|
||||
![New icon](/uploads/aps_banner.webp)
|
||||
|
||||
To complement the new icon, we've also updated our color scheme to better suit this new branding.
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ categories = ["aps"]
|
|||
date = 2020-10-22
|
||||
description = "Long form release notes for the Android Password Store October release"
|
||||
slug = "aps-october-release"
|
||||
socialImage = "uploads/aps_banner.png"
|
||||
socialImage = "uploads/aps_banner.webp"
|
||||
tags = ["relnotes", "oss", "android-password-store"]
|
||||
title = "Android Password Store October release"
|
||||
toc = true
|
||||
|
@ -17,7 +17,7 @@ We're back with yet another release! As I tweeted [earlier this month](https://t
|
|||
|
||||
Creating a new store from the app previously created an unusable store, because we never configured a GPG key in the `.gpg-id` file. This has now been remedied in two ways: empty `.gpg-id` files are correctly handled as invalid and included in our quickfix solution, and creating a new store will now request you to select a key and then write it into the `.gpg-id` file. Here's what the key selection screen looks like:
|
||||
|
||||
![GPG key selection screen from the APS October release](/uploads/aps-october-release-gpg-key-selection.png)
|
||||
![GPG key selection screen from the APS October release](/uploads/aps-october-release-gpg-key-selection.webp)
|
||||
|
||||
### Allow configuring an HTTPS proxy
|
||||
|
||||
|
@ -32,7 +32,7 @@ Before we close the gates on our regularly scheduled releases, our focus has bee
|
|||
|
||||
Due to multiple bugs, this feature has been rolled back in [v1.13.1](https://github.com/android-password-store/Android-Password-Store/releases/tag/v1.13.1).
|
||||
|
||||
<!--![App launch screen showing the repository being synced](/uploads/aps-october-release-syncing-repository.png)-->
|
||||
<!--![App launch screen showing the repository being synced](/uploads/aps-october-release-syncing-repository.webp)-->
|
||||
|
||||
## Fixes
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ categories = ["aps"]
|
|||
date = 2020-09-21
|
||||
description = "Long form release notes for the Android Password Store September release"
|
||||
slug = "aps-september-release"
|
||||
socialImage = "uploads/aps_banner.png"
|
||||
socialImage = "uploads/aps_banner.webp"
|
||||
tags = ["relnotes", "oss", "android-password-store"]
|
||||
title = "Android Password Store September release"
|
||||
toc = true
|
||||
|
|
|
@ -4,7 +4,7 @@ date = 2020-02-05
|
|||
description = "GitHub Actions paired with GitHub Pages provides an excellent CD platform for a status page. Here's how I used it to create mine."
|
||||
devLink = "https://dev.to/msfjarvis/creating-a-continuously-deploying-static-statuspage-with-github-3ol2"
|
||||
slug = "creating-a-continuously-deploying-static-statuspage-with-github"
|
||||
socialImage = "uploads/statuspage_social.png"
|
||||
socialImage = "uploads/statuspage_social.webp"
|
||||
tags = ["webdev", "github actions", "github pages"]
|
||||
title = "Creating a continuously deploying static statuspage with GitHub"
|
||||
+++
|
||||
|
@ -19,15 +19,15 @@ For hobbyist projects without any real budget (like this site and the couple oth
|
|||
|
||||
- First thing that you want to do is to setup the `CNAME` record that will let GitHub Pages service your status page to a subdomain of your website. Head to your domain registrar (Cloudflare for me) and add a CNAME record for `<your github username>.github.io`
|
||||
|
||||
![CNAME record for status.msfjarvis.dev at Cloudflare](/uploads/statuspage_cname_record.png)
|
||||
![CNAME record for status.msfjarvis.dev at Cloudflare](/uploads/statuspage_cname_record.webp)
|
||||
|
||||
- Next, create a GitHub repository that will hold the Actions workflow for generating your status page as well as the actual status page itself. This repo can be private, as the generated sites are always publicly available.
|
||||
|
||||
![GitHub repository for our status page](/uploads/statuspage_github_repo.png)
|
||||
![GitHub repository for our status page](/uploads/statuspage_github_repo.webp)
|
||||
|
||||
- Clone this empty repository. Now create a file with the name of `CNAME` and enter your custom domain into it. This lets GitHub Pages know where to redirect users if they ever access the site through your `.github.io` subdomain. Commit this file.
|
||||
|
||||
![CNAME file in repository](/uploads/statuspage_cname_file.png)
|
||||
![CNAME file in repository](/uploads/statuspage_cname_file.webp)
|
||||
|
||||
- A quick glance at the static_status README will inform you about the `config` file that it uses to configure itself, and status_hostname_list.txt which has a list of all services it needs to check. `config` is easy to understand and modify, so I'll skip it (you can diff [mine](https://github.com/msfjarvis/status.msfjarvis.dev/blob/master/config) with upstream and use the changes to educate yourself should the need arise). This part should be very straightforward, though I did encounter a problem where using `ping` as the detection mechanism caused sites to falsely report as down. Switching to `curl` resolved the issue.
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ date = 2020-01-20
|
|||
description = "Dagger is universally intimidating to beginners and I want to change it."
|
||||
devLink = "https://dev.to/msfjarvis/dagger-the-easy-way-part-1-3l7b"
|
||||
slug = "dagger-the-easy-way--part-1"
|
||||
socialImage = "uploads/dagger_made_easy_social.png"
|
||||
socialImage = "uploads/dagger_made_easy_social.webp"
|
||||
tags = ["android", "dagger", "tutorial"]
|
||||
title = "Dagger the easy way - Part 1"
|
||||
+++
|
||||
|
|
|
@ -4,7 +4,7 @@ date = 2020-03-06
|
|||
description = "Let's extend the \"scope\" of these tutorials :)"
|
||||
devLink = "https://dev.to/msfjarvis/dagger-the-easy-way-part-2-4p4m"
|
||||
slug = "dagger-the-easy-way--part-2"
|
||||
socialImage = "uploads/dagger_made_easy_social.png"
|
||||
socialImage = "uploads/dagger_made_easy_social.webp"
|
||||
tags = ["android", "dagger", "tutorial"]
|
||||
title = "Dagger the easy way - Part 2"
|
||||
+++
|
||||
|
|
|
@ -3,7 +3,7 @@ categories = ["hugo"]
|
|||
date = 2019-12-04
|
||||
description = "GitHub Actions are awesome! Learn how to use it for continuous delivery of your static sites."
|
||||
slug = "deploying-hugo-sites-with-github-actions"
|
||||
socialImage = "uploads/actions_social.png"
|
||||
socialImage = "uploads/actions_social.webp"
|
||||
tags = ["hugo", "github actions", "static sites"]
|
||||
title = "Deploying Hugo sites with GitHub Actions"
|
||||
+++
|
||||
|
|
|
@ -3,7 +3,7 @@ categories = ["webdev"]
|
|||
date = 2020-05-08
|
||||
description = "Everybody probably understands how Cloudflare proxies A/AAAA records, but how it proxies CNAME records is also pretty interesting. Let's dive into how that happens and why it can often break other products that need you to set CNAME records."
|
||||
slug = "how-cloudflare-proxies-cname-records"
|
||||
socialImage = "uploads/cf_proxy_social.png"
|
||||
socialImage = "uploads/cf_proxy_social.webp"
|
||||
tags = ["cloudflare"]
|
||||
title = "How Cloudflare proxies CNAME records"
|
||||
+++
|
||||
|
|
|
@ -3,7 +3,7 @@ categories = ["kotlin"]
|
|||
date = 2020-12-22
|
||||
description = "Kotlin 1.4.30 is poised to improve on multiple pain points with inline classes, making them more generally useful. Let's look at these changes!"
|
||||
slug = "improvements-to-inline-classes-in-kotlin-1-4-30"
|
||||
socialImage = "/uploads/kotlin_social.png"
|
||||
socialImage = "/uploads/kotlin_social.webp"
|
||||
tags = ["kotlin", "inline classes"]
|
||||
title = "Improvements to inline classes in Kotlin 1.4.30"
|
||||
+++
|
||||
|
|
|
@ -4,7 +4,7 @@ date = 2020-01-20
|
|||
description = "Adding additional comment backends to Hugo is actually rather simple!"
|
||||
devLink = "https://dev.to/msfjarvis/integrating-comments-in-hugo-sites-with-commento-136f"
|
||||
slug = "integrating-comments-in-hugo-sites-with-commento"
|
||||
socialImage = "uploads/commento_social.png"
|
||||
socialImage = "uploads/commento_social.webp"
|
||||
tags = ["hugo", "static sites", "comments", "commento.io"]
|
||||
title = "Integrating comments in Hugo sites with commento"
|
||||
+++
|
||||
|
|
|
@ -3,7 +3,7 @@ categories = ["linux"]
|
|||
date = 2020-07-17
|
||||
description = "Getting a USB Bluetooth dongle to function properly on Linux proved to be somewhat of a trip, which I'm documenting here."
|
||||
slug = "making-a-bluetooth-adapter-work-on-linux"
|
||||
socialImage = "uploads/bluetooth_social.png"
|
||||
socialImage = "uploads/bluetooth_social.webp"
|
||||
tags = ["bluetooth", "linux", "bt-audio"]
|
||||
title = "Making a Bluetooth adapter work on Linux"
|
||||
+++
|
||||
|
|
|
@ -3,7 +3,7 @@ categories = ["kotlin", "android"]
|
|||
date = 2020-12-21
|
||||
description = "Moshi is a fast and powerful JSON parsing library for the JVM and Android. Today we look into manually parsing JSON to and from Java/Kotlin classes"
|
||||
slug = "manually-parsing-json-with-moshi"
|
||||
socialImage = "/uploads/moshi_social.png"
|
||||
socialImage = "/uploads/moshi_social.webp"
|
||||
tags = ["moshi", "json parsing", "android", "kotlin"]
|
||||
title = "Manually parsing JSON with Moshi"
|
||||
toc = true
|
||||
|
|
|
@ -4,7 +4,7 @@ date = 2020-01-11
|
|||
description = "Dagger is not the easiest tool to get on board with but it's almost worth the effort. Here's the story of my journey to not hating Dagger."
|
||||
devLink = "https://dev.to/msfjarvis/my-dagger-story-2go0"
|
||||
slug = "my-dagger-story"
|
||||
socialImage = "uploads/dagger_story_social.png"
|
||||
socialImage = "uploads/dagger_story_social.webp"
|
||||
tags = ["android", "dagger"]
|
||||
title = "My Dagger Story"
|
||||
+++
|
||||
|
|
|
@ -4,7 +4,7 @@ date = 2019-11-21
|
|||
description = "GitHub recently rolled out Packages to the general public, allowing the entire develop-test-deploy pipeline to get centralized at GitHub. Learn how to use it to publish your Android library packages."
|
||||
devLink = "https://dev.to/msfjarvis/publishing-an-android-library-to-github-packages-1l74"
|
||||
slug = "publishing-an-android-library-to-github-packages"
|
||||
socialImage = "uploads/github_packages_social.png"
|
||||
socialImage = "uploads/github_packages_social.webp"
|
||||
tags = ["android", "gradle", "github", "packaging"]
|
||||
title = "Publishing an Android library to GitHub Packages"
|
||||
+++
|
||||
|
@ -274,6 +274,6 @@ That's it! Once you push to GitHub, you'll see the [action running](https://gith
|
|||
|
||||
The requirement to authenticate for packages is a significant problem with GitHub Packages' adoption, giving an edge to solutions like [JitPack](https://jitpack.io) which handle the entire process automagically. As mentioned earlier, I did contact GitHub support about it and got this back.
|
||||
|
||||
![GitHub support reply about authentication requirement for packages](/uploads/github_packages_support_response.png)
|
||||
![GitHub support reply about authentication requirement for packages](/uploads/github_packages_support_response.webp)
|
||||
|
||||
My interpretation of this is quite simply that **it's gonna take a while**. I hope not :)
|
|
@ -4,7 +4,7 @@ date = 2019-12-17
|
|||
description = "Analytics platforms are often overwhelming and a privacy nightmare -- here's how to bring analytics to the backend with very simple tooling"
|
||||
devLink = "https://dev.to/msfjarvis/server-side-analytics-with-goaccess-pg8"
|
||||
slug = "serverside-stats-with-goaccess"
|
||||
socialImage = "uploads/goaccess_social.png"
|
||||
socialImage = "uploads/goaccess_social.webp"
|
||||
tags = ["caddyserver", "goaccess", "analytics"]
|
||||
title = "Server-side analytics with Goaccess"
|
||||
+++
|
||||
|
@ -22,7 +22,7 @@ Goaccess is an **open-source**, **real-time** web log analyzer. In other words,
|
|||
|
||||
To create a compelling analytics experience, we'll need to use Goaccess' `--real-time-html` option, that creates an HTML report, and an accompanying `WebSocket` server that will dispatch a request to update the page data every time goaccess parses updated logs. When we're done, the result will look similar to [stats.msfjarvis.dev](https://stats.msfjarvis.dev), which shows statistics for my blog. Here's a peek at Goaccess' terminal visualizer, to get an idea about the datasets you can expect from the web version.
|
||||
|
||||
![Goaccess in the terminal](/uploads/goaccess_terminal.png)
|
||||
![Goaccess in the terminal](/uploads/goaccess_terminal.webp)
|
||||
|
||||
Goaccess supports most common webserver log formats, and [some more](https://goaccess.io/man#options) with the option to provide your own format if you're using custom solutions. I'm using `VCOMMON`, as that is the default log format of my webserver of choice, [Caddy](https://caddyserver.com). Here's the command executed by the systemd unit that I use for goaccess. I'll explain every option in a bit.
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ categories = ["rust", "dev"]
|
|||
date = 2020-07-05
|
||||
description = "Rust programs are pretty fast on their own, but you can slightly augment their performance with some simple tricks."
|
||||
slug = "simple-tricks-for-faster-rust-programs"
|
||||
socialImage = "uploads/cuddlyferris.png"
|
||||
socialImage = "uploads/cuddlyferris.webp"
|
||||
tags = ["rust", "dev", "perf"]
|
||||
title = "Simple tricks for faster Rust programs"
|
||||
+++
|
||||
|
|
|
@ -3,7 +3,7 @@ categories = ["news"]
|
|||
date = 2020-02-09
|
||||
description = "The Viscerion experiment that started more than a year ago is now coming to an end. Here's what's happening."
|
||||
slug = "sunsetting-viscerion"
|
||||
socialImage = "uploads/viscerion_social.png"
|
||||
socialImage = "uploads/viscerion_social.webp"
|
||||
tags = ["personal"]
|
||||
title = "Sunsetting Viscerion"
|
||||
+++
|
||||
|
|
|
@ -4,7 +4,7 @@ date = 2019-09-20
|
|||
description = "Kotlin's been great for me -- and millions others, as evident by its explosive growth. Long-time Java developers may feel hesitant to give it a shot. This series aims to smoothen this transition, letting people know what benefits they might reap from Kotlin, and what differences should they be careful about."
|
||||
devLink = "https://dev.to/msfjarvis/teachingkotlin-kotlin-for-android-java-developers-1fo3"
|
||||
slug = "teaching-kotlin--kotlin-for-android-java-developers"
|
||||
socialImage = "uploads/teachingkotlin_social.png"
|
||||
socialImage = "uploads/teachingkotlin_social.webp"
|
||||
tags = ["teachingkotlin", "android", "kotlin"]
|
||||
title = "#TeachingKotlin - Kotlin for Android Java developers"
|
||||
+++
|
||||
|
|
|
@ -6,7 +6,7 @@ slug = "teaching-kotlin--classes-and-objects"
|
|||
tags = ["android", "teachingkotlin", "kotlin"]
|
||||
title = "#TeachingKotlin Part 1 - Classes and Objects and everything in between"
|
||||
devLink = "https://dev.to/msfjarvis/teachingkotlin-part-1-classes-and-objects-and-everything-in-between-5bn0"
|
||||
socialImage = "uploads/teachingkotlin_social.png"
|
||||
socialImage = "uploads/teachingkotlin_social.webp"
|
||||
+++
|
||||
Classes in Kotlin closely mimic their Java counterparts in implementation, with some crucial changes that I will attempt to outline here.
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ date = 2019-09-30
|
|||
description = "The second post in #TeachingKotlin series, this post goes over Kotlin's variables and their attributes, like visibility and getters/setters."
|
||||
devLink = "https://dev.to/msfjarvis/teachingkotlin-part-2-variables-2api"
|
||||
slug = "teaching-kotlin--variables"
|
||||
socialImage = "uploads/teachingkotlin_social.png"
|
||||
socialImage = "uploads/teachingkotlin_social.webp"
|
||||
tags = ["android", "teachingkotlin", "kotlin"]
|
||||
title = "#TeachingKotlin Part 2 - Variables"
|
||||
+++
|
||||
|
|
|
@ -4,7 +4,7 @@ date = 2019-12-16
|
|||
description = "Part 3 of #TeachingKotlin covers some subtle differences between Kotlin and Java that might affect your codebases as you start migrating to or writing new code in Kotlin."
|
||||
devLink = "https://dev.to/msfjarvis/teachingkotlin-part-3-caveats-coming-from-java-2e1k"
|
||||
slug = "teachingkotlin-part-3--caveats-coming-from-java"
|
||||
socialImage = "uploads/teachingkotlin_social.png"
|
||||
socialImage = "uploads/teachingkotlin_social.webp"
|
||||
tags = ["android", "teachingkotlin", "kotlin"]
|
||||
title = "#TeachingKotlin Part 3 - Caveats coming from Java"
|
||||
+++
|
||||
|
|
|
@ -3,7 +3,7 @@ categories = ["github-actions"]
|
|||
date = 2021-01-02T00:00:00Z
|
||||
description = "GitHub Actions is a power CI/CD platform that can do a lot more than your traditional CI systems. Here's some tips to get you started with exploring its true potential."
|
||||
slug = "github-actions-tips-tricks"
|
||||
socialImage = "/uploads/actions_social.png"
|
||||
socialImage = "/uploads/actions_social.webp"
|
||||
tags = ["tips and tricks", "github actions", "schedules", "jobs", "workflows"]
|
||||
title = "Tips and Tricks for GitHub Actions"
|
||||
+++
|
||||
|
@ -133,7 +133,7 @@ Tags are moving qualifiers, and can be [force pushed at any moment](https://juli
|
|||
|
||||
To get the commit hash for a specific tag, head to the Releases page of the repository, then click the short SHA1 hash below the tag name and copy the full hash from the URL.
|
||||
|
||||
![A tag along with its commit hash](/uploads/actions_tips_tricks_commit_hash.png)
|
||||
![A tag along with its commit hash](/uploads/actions_tips_tricks_commit_hash.webp)
|
||||
|
||||
> {{< sub "Here, the commit hash is feb985e. Ideally, you want to click that link and copy the full hash from the URL" >}}
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ date = 2020-11-21T00:00:00Z
|
|||
description = "Building libraries is hard, and keeping track of your public API surface harder. Kotlin 1.4's explicit API mode tries to make the latter not be difficult anymore."
|
||||
draft = true
|
||||
slug = "tips-for-building-kotlin-libraries"
|
||||
socialImage = "/uploads/kotlin_social.png"
|
||||
socialImage = "/uploads/kotlin_social.webp"
|
||||
tags = ["android", "kotlin", "libraries"]
|
||||
title = "Tips and tricks for building libraries in Kotlin"
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ description = "Rust is an amazing systems language that is on an explosive rise
|
|||
devLink = "https://dev.to/msfjarvis/tools-for-effective-rust-development-3mb4"
|
||||
title = "Tools for effective Rust development"
|
||||
slug = "tools-for-effective-rust-development"
|
||||
socialImage = "uploads/rust_social.png"
|
||||
socialImage = "uploads/rust_social.webp"
|
||||
tags = ["dev", "rust"]
|
||||
+++
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ categories = ["tools-of-the-trade"]
|
|||
date = 2020-08-04
|
||||
description = "In the first post in the new 'Tools of the trade' series, we talk about direnv."
|
||||
slug = "tools-of-the-trade-direnv"
|
||||
socialImage = "uploads/tools-of-the-trade-direnv.png"
|
||||
socialImage = "uploads/tools-of-the-trade-direnv.webp"
|
||||
tags = ["direnv", "cli-tools", "tools-of-the-trade"]
|
||||
title = "Tools of the trade: direnv"
|
||||
+++
|
||||
|
|
|
@ -3,7 +3,7 @@ categories = ["tools-of-the-trade"]
|
|||
date = 2020-08-18
|
||||
description = "Probably the final post of this series? Let's talk about fd!"
|
||||
slug = "tools-of-the-trade-fd"
|
||||
socialImage = "uploads/tools-of-the-trade-fd.png"
|
||||
socialImage = "uploads/tools-of-the-trade-fd.webp"
|
||||
tags = ["fd", "cli-tools", "tools-of-the-trade"]
|
||||
title = "Tools of the trade: fd"
|
||||
+++
|
||||
|
|
|
@ -3,7 +3,7 @@ categories = ["tools-of-the-trade"]
|
|||
date = 2020-08-10
|
||||
description = "Continuing this series, let's talk about fzf."
|
||||
slug = "tools-of-the-trade-fzf"
|
||||
socialImage = "uploads/tools-of-the-trade-fzf.png"
|
||||
socialImage = "uploads/tools-of-the-trade-fzf.webp"
|
||||
tags = ["fzf", "cli-tools", "tools-of-the-trade"]
|
||||
title = "Tools of the trade: fzf"
|
||||
+++
|
||||
|
|
|
@ -3,7 +3,7 @@ categories = ["tools-of-the-trade"]
|
|||
date = 2020-09-02
|
||||
description = "Bringing this series back on popular demand, we're here to talk about SDKMAN!"
|
||||
slug = "tools-of-the-trade-sdkman"
|
||||
socialImage = "uploads/tools-of-the-trade-sdkman.png"
|
||||
socialImage = "uploads/tools-of-the-trade-sdkman.webp"
|
||||
tags = ["sdkman", "cli-tools", "tools-of-the-trade"]
|
||||
title = "Tools of the trade: SDKMAN!"
|
||||
+++
|
||||
|
|
|
@ -4,7 +4,7 @@ date = 2020-07-23
|
|||
description = "(Mostly) everybody agrees that Android upgrades are good, but how very crucial they are to security and privacy often gets overlooked. Let's dig into that."
|
||||
devLink = "https://dev.to/msfjarvis/why-upgrade-android-557f"
|
||||
slug = "why-upgrade-android"
|
||||
socialImage = "uploads/why_upgrade_android_social.png"
|
||||
socialImage = "uploads/why_upgrade_android_social.webp"
|
||||
tags = ["android", "updates", "security", "privacy"]
|
||||
title = "Why upgrade Android?"
|
||||
toc = true
|
||||
|
|
Before Width: | Height: | Size: 40 KiB |
After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 275 KiB |
After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 697 B |
After Width: | Height: | Size: 138 B |
Before Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 312 B |
Before Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 27 KiB |
After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 63 KiB |
After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 37 KiB |
After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 462 KiB |
After Width: | Height: | Size: 363 KiB |
Before Width: | Height: | Size: 94 KiB |
After Width: | Height: | Size: 62 KiB |
Before Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 465 KiB |
After Width: | Height: | Size: 180 KiB |
Before Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 9.8 KiB |
Before Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 119 KiB |
After Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 136 KiB |
After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 58 KiB |
After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 6.8 KiB |
Before Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 4.8 KiB |
After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 119 KiB |
After Width: | Height: | Size: 62 KiB |