#alfred

Note on replacing TextExpander with Keyboard Maestro
A quick macOS tip on how to remove Terminal.app (or any app) from your Alfred & Spotlight search results

#android

The Bentwits So Ben Thompson1 recently tweeted: I’ve been using Android for the last couple of weeks, and honestly, the core OS is pretty good! The big problem is that Android apps are garbage relative to iOS apps. If developers actually care about pushing back against Apple they should give a damn. They don’t. He then went on to attribute the garbage quality of Android apps to developer laziness. This understandably infuriated some of us #AndroidDev unleashing the droid rage.

#android-studio

I use a 13" MacBook Pro at work these days. Android Studio frequently sent my machine into a tailspin. Over time, I’ve had to tweak and update my AS settings to make AS work well on the 13". I figured I should post them here for posterity and the benefit of other AndroidDevs battling with deathly slow AS experiences. I’m posting the abridged instructions and linking to the blog posts that led me to these settings, if you care for the details.

#awk

The trick to understanding awk in all its terse glory is to understand its defaults. Most solutions you see in the wild are a clever symphony of awk defaults stacked on top of each other. In this post, I break down one of the most popular one-liners which should hopefully make future awk-ing pretty straight forward.
Two big announcements: I made my first screen cast 1 I’ve updated the permalink title for all the blog posts here 2 I wanted to make sure that external blogs linking to previous post links wouldn’t break. So in order to do this, I had to edit all of my previous blog posts and add a redirect_from tag. Life is too short to be doing this manually so I whipped up an awk program to do it for me in about 20 minutes.

#cast

Two big announcements: I made my first screen cast 1 I’ve updated the permalink title for all the blog posts here 2 I wanted to make sure that external blogs linking to previous post links wouldn’t break. So in order to do this, I had to edit all of my previous blog posts and add a redirect_from tag. Life is too short to be doing this manually so I whipped up an awk program to do it for me in about 20 minutes.

#computer-science

This super intesting stack overflow answer explains why -in programming- if you have a sorted array, somehow magically it can seem like it’s easier to process each element vs processing the same array if it were unsorted. tl;dr - branch prediction With a sorted array, the condition data[c] >= 128 is first false for a streak of values, then becomes true for all later values. That’s easy to predict. With an unsorted array, you pay for the branching cost.
definitely dated, but interesting yardsticks. via Hacker News
You’d be surprised how valuable the skill of eloquent communication is even in the field of IT. Keeping users apprised with your progress is perhaps the most important thing to do when working with clients. But keeping them apprised is tricky business and the ability to clearly put down in words,what to expect, is a basic necessity today. Even if you have nothing to do with CS or computers, you should read the linked article.

#cpu

This is a fantastic post by Erik where he explains the nuance between IO-bound and CPU-bound operations in programming. … libraries have dedicated APIs for I/O scheduling work, separate from other types of operations …. but why is this the case? Why don’t we use a single thread pool for all background operations? The operating system will handle the scheduling of these threads the same I love how this specific question is framed (a good interview question for advanced mobile developers):
What you need to know about RAM, memory, CPU Processing and other important stuff that could tell you why your computer is slow. Physical RAM/Memory RAM chips funcion quite literally like your Computer’s Memory. All the information that needs to be remembered when operating between different tasks (or even the same task) gets stored here. You know how people who have great memories can be awesome, that translates to the computer world as well, more memory = more awesome.

#design

I’ve been looking into Tufte CSS recently. Tufte CSS -inspired by the teachings of the legendary Edward Tufte1- provides suggestions and tools to style web articles for improved legibility. I’ve started to incorporate some of those principles here while still trying to keep the authenticity of my original design. Most of these changes have been in the realm of CSS however the sidenotes feature was a slightly trickier beast. I’ve implemented this feature in my blog theme “Henry” for both Hugo & Jekyll.

#engineering-manager

Great companies maintain their insurgent mindset, for fear of becoming complacent and irrelevant over time. Push decision making down to single-threaded DRIs Single-threaded is tech jargon that simply means solely focused on a single area. The single threaded DRI is the most senior person whose only job is to run a given product or initiative, this will typically be a product management or engineering leader. Leverage shared services to minimize duplication
If you want to build a ship, don’t drum up the men to gather wood, divide the work, and give orders. Instead, teach them to yearn for the vast and endless sea. Antoine de Saint-Exupéry Lessons for Engineering Managers in Software.

#fish

If you’re a programmer these days, you probably spend a large part of your day in git. If you’re a command line zealot like me, you realize the holy ways of using your Terminal app for everything and aren’t seduced by fancy GUIs that only stand to dissuade you from pure unbridled productivity. With that in mind, one typically finds themselves in a position where they have a few files that have changed liked so:

#font

How to customize and build the font Recursive - a versatile font for programming
If you’re looking to just copy-paste instructions, jump to the section below. For the longest time, I’ve been rocking IBM Plex Mono as my programming font. While it has served me well, I started to experiment with some newer monospaced typefaces to see if I could find one that was even more legible1. That experiment quickly devolved into a rabbit-hole evaluation of a bunch of new programming fonts. Hello Iosevka Eventually, I landed up with the font Iosevka:
I’m obsessed with typefaces and fonts 1. My programming productivity is irrationally dependent on the font I pick for my IDE. I have spent unhealthy amounts of time experimenting and trying different fonts for programming. I usually prefer a monospaced font and I’ve bounced between Inconsolata and Consolas in the past – both truly beautiful typefaces. Recently though, a design director at Instacart shared this link on the laws of UX (a fantastic read btw).
So my brother introduced me to this really awesome BBC TV Series: Sherlock. If you’re a type nerd or design enthusiast, the very first thing you would notice is the brilliant typography used throughout the show. If you’re losing sleep finding out which fonts were used: AF Generation Z (in the text messages) P22 London Underground (when deducing the clues)

#fragmented

i listen to a tonne of podcasts. i find activities such as doing my laundry, driving back home from work, doing the dishes … all delightful because it gives me a chance to strap on some headphones and listen to a bunch of podcasts. in the time that i run those dreadfully boring chores i’ve found myself learning so much about technology and good software development. as i was driving back home today i was listening to an episode of Ruby Rogues and thought to myself:

#git

If you’re a programmer these days, you probably spend a large part of your day in git. If you’re a command line zealot like me, you realize the holy ways of using your Terminal app for everything and aren’t seduced by fancy GUIs that only stand to dissuade you from pure unbridled productivity. With that in mind, one typically finds themselves in a position where they have a few files that have changed liked so:

#henry

Henry - a customizable elegant Hugo theme with a gorgeous reading experience and packed with features
Henry - a customizable elegant Jekyll theme with a gorgeous reading experience and packed with features

#hugo

Henry - a customizable elegant Hugo theme with a gorgeous reading experience and packed with features

#icon

Here’s a good resource for high quality app icons.

#interviewing

If you’re in tech and have been thinking about your work and role in your company, I highly encourage you to watch this talk by Tanya Reilly 1 Setting myself a reminder to rewatch this again 6 months from now. Such a phenomenal speaker and powerful story telling! Follow her @whereistanya ↩︎
… You should mention what technologies you are using (because listing WCF or Java will save me the hassle of applying, and you the hassle of rejecting me), but don’t list specific tools, languages and frameworks as requirements. Good developers who know Rails can learn Django or Node. Going between Oracle, SQL Server, MySQL and Postgres is all pretty trivial. … I remember being asked quite eagerly, during a pre-interview, if I knew a specific view engine (like erb, or haml…).
If you’re in the business of hiring programmers, the article linked is a must read. It’s concise and a gold read. No excuse for not reading it. Avoid nano-questions A good engineer thinks abstractly in terms of designing and building systems, they think in terms of algorithms, components, and engineering design. They do not necessarily know all of the details of syntax of a given language, especially if they are used to a good IDE… … it is more important that I be able to tell you when and where I should use inheritance, and when and where I should use polymorphism, than to be able to spit off the definition.
definitely dated, but interesting yardsticks. via Hacker News
You’d be surprised how valuable the skill of eloquent communication is even in the field of IT. Keeping users apprised with your progress is perhaps the most important thing to do when working with clients. But keeping them apprised is tricky business and the ability to clearly put down in words,what to expect, is a basic necessity today. Even if you have nothing to do with CS or computers, you should read the linked article.

#ios

I’ve been dipping my toes into some iOS development recently. Nothing too crazy, just pairing with some colleagues and trying to see how we can jointly improve the technical design on both platforms 1. It so happens that Apple just finished it’s annual conference WWDC, so I’ve been following the announcements closer this timer around. In that process, I ran across a tweet (from Jeff Nadeau who’s a developer working at Apple):

#iphone

The Bentwits So Ben Thompson1 recently tweeted: I’ve been using Android for the last couple of weeks, and honestly, the core OS is pretty good! The big problem is that Android apps are garbage relative to iOS apps. If developers actually care about pushing back against Apple they should give a damn. They don’t. He then went on to attribute the garbage quality of Android apps to developer laziness. This understandably infuriated some of us #AndroidDev unleashing the droid rage.

#jekyll

Henry - a customizable elegant Hugo theme with a gorgeous reading experience and packed with features
Henry - a customizable elegant Jekyll theme with a gorgeous reading experience and packed with features
I’ve been looking into Tufte CSS recently. Tufte CSS -inspired by the teachings of the legendary Edward Tufte1- provides suggestions and tools to style web articles for improved legibility. I’ve started to incorporate some of those principles here while still trying to keep the authenticity of my original design. Most of these changes have been in the realm of CSS however the sidenotes feature was a slightly trickier beast. I’ve implemented this feature in my blog theme “Henry” for both Hugo & Jekyll.
Two big announcements: I made my first screen cast 1 I’ve updated the permalink title for all the blog posts here 2 I wanted to make sure that external blogs linking to previous post links wouldn’t break. So in order to do this, I had to edit all of my previous blog posts and add a redirect_from tag. Life is too short to be doing this manually so I whipped up an awk program to do it for me in about 20 minutes.
This blog now 1 uses Jekyll - a static blog generator that takes markdown as an input and pumps html as output. I then copy it over to my hosting server - Firebase, which then happily serves it to the interwebs. This setup has worked out swimmingly well thus far and has been rock solid. Even when my last post got high up the ranks of HN, my blog held steady.

#js

I’ve been looking into Tufte CSS recently. Tufte CSS -inspired by the teachings of the legendary Edward Tufte1- provides suggestions and tools to style web articles for improved legibility. I’ve started to incorporate some of those principles here while still trying to keep the authenticity of my original design. Most of these changes have been in the realm of CSS however the sidenotes feature was a slightly trickier beast. I’ve implemented this feature in my blog theme “Henry” for both Hugo & Jekyll.

#keyboard

tl;dr: brew install yqrashawn/goku/goku mkdir -p ~/.config && cd ~/.config touch karabiner/karabiner.json touch karabiner.edn # update your edn file with a sample from here https://github.com/yqrashawn/GokuRakuJoudo/blob/master/tutorial.md # or mine: https://gist.github.com/kaushikgopal/ff7a92bbc887e59699c804b59074a126 goku Background I’ve been messing with mechanical keyboards recently.1 There was one in particular which is a 60% layout that I fell in love with. The trouble with 60% keyboards though is that they can be pretty constraining for some basic operations (like navigation).

#kotlin

This feature is beneficial for projects defining custom source sets, since the compilation of independent source sets can be parallelized. In the case of multiplatform projects, targets for different platforms can also be built in parallel. For Android, the debug and release build types can be compiled in parallel. This sounds pretty cool, however I paused to think how often would i need the debug and release build types to be compiled in parallel?
We recently held our semi-annual hackathon at Instacart - the Carrot Wars 2018! In putting this hackathon together, I noticed a pretty blaring gap - there wasn’t a simple (and free) online service that would quickly tabulate the results for a hackathon event. We looked around and found some nifty options, but most of them were a tad bit too expensive for our liking. They also were not setup for a single event use or required a monthly subscription.
Checkout this quick blog post I wrote for my company, tweaking the existing Kotlin TODO to work towards our requirements. While I don’t think this solution is a panacea for all your missing code snippets, I have found some luck with this method, in adding accountability for those PR review feedback comments you say you’ll get to, but conveniently forget :) Here’s a bonus if you’re reading this article from here:

#macmini

I’d like to show you how I use Tailscale and a Mac mini in my office to achieve some nifty things. Tailscale is marketed as a zero-config VPN built on top of WireGuard that securely connects devices and manages firewall rules etc. While all of that might be true, think of it this way: Tailscale allows you to securely connect to a machine at home from anywhere on the internet.

#maestro

Note on replacing TextExpander with Keyboard Maestro
tl;dr: brew install yqrashawn/goku/goku mkdir -p ~/.config && cd ~/.config touch karabiner/karabiner.json touch karabiner.edn # update your edn file with a sample from here https://github.com/yqrashawn/GokuRakuJoudo/blob/master/tutorial.md # or mine: https://gist.github.com/kaushikgopal/ff7a92bbc887e59699c804b59074a126 goku Background I’ve been messing with mechanical keyboards recently.1 There was one in particular which is a 60% layout that I fell in love with. The trouble with 60% keyboards though is that they can be pretty constraining for some basic operations (like navigation).

#memory

What you need to know about RAM, memory, CPU Processing and other important stuff that could tell you why your computer is slow. Physical RAM/Memory RAM chips funcion quite literally like your Computer’s Memory. All the information that needs to be remembered when operating between different tasks (or even the same task) gets stored here. You know how people who have great memories can be awesome, that translates to the computer world as well, more memory = more awesome.

#movielens

Given how many movies and TV shows we’ve been watching these days, it’s useful to have a personal rating system. I’ve used and tweaked this scale over time and it’s worked pretty well for me. How to use this system The scale ranges from 0-51 but coming up with a specific number off the top of your head is tricky. That’s where the associated descriptions comes in handy. Consider a movie and see if how you feel about the movie, matches with the associated descriptions.

#osx

A quick macOS tip on how to remove Terminal.app (or any app) from your Alfred & Spotlight search results

#podcast

i listen to a tonne of podcasts. i find activities such as doing my laundry, driving back home from work, doing the dishes … all delightful because it gives me a chance to strap on some headphones and listen to a bunch of podcasts. in the time that i run those dreadfully boring chores i’ve found myself learning so much about technology and good software development. as i was driving back home today i was listening to an episode of Ruby Rogues and thought to myself:

#presentation

I’ve been looking into Tufte CSS recently. Tufte CSS -inspired by the teachings of the legendary Edward Tufte1- provides suggestions and tools to style web articles for improved legibility. I’ve started to incorporate some of those principles here while still trying to keep the authenticity of my original design. Most of these changes have been in the realm of CSS however the sidenotes feature was a slightly trickier beast. I’ve implemented this feature in my blog theme “Henry” for both Hugo & Jekyll.
This whole piece is such a biograpy treasure trove and one I’m filing under the “come back and read in a year” category. I’m highlighting some of the snippets in particular that really resonated with me: “This is going to allow people to watch video on our iPods, not just listen to music,” he said. “If we bring this product to market, will you put your television shows on it?” I said yes right away.

#productivity

How I have my productivity system setup using Things and a monthly logging system
Given how many movies and TV shows we’ve been watching these days, it’s useful to have a personal rating system. I’ve used and tweaked this scale over time and it’s worked pretty well for me. How to use this system The scale ranges from 0-51 but coming up with a specific number off the top of your head is tricky. That’s where the associated descriptions comes in handy. Consider a movie and see if how you feel about the movie, matches with the associated descriptions.
tl;dr: brew install yqrashawn/goku/goku mkdir -p ~/.config && cd ~/.config touch karabiner/karabiner.json touch karabiner.edn # update your edn file with a sample from here https://github.com/yqrashawn/GokuRakuJoudo/blob/master/tutorial.md # or mine: https://gist.github.com/kaushikgopal/ff7a92bbc887e59699c804b59074a126 goku Background I’ve been messing with mechanical keyboards recently.1 There was one in particular which is a 60% layout that I fell in love with. The trouble with 60% keyboards though is that they can be pretty constraining for some basic operations (like navigation).

#rx

The TestObserver is an RxJava staple for testing. It allows you to assert values in a stream, in the specific order they were emitted. Here’s a quick code snippet from the movies-usf repository 1: @Test fun onSearchingForMovieBladeRunner_shouldSeeSearchResult() { viewModel = MSMainVm(mockApp, mockMovieRepo) val viewStateTester = viewModel.viewState.test() viewModel.processInput(SearchMovieEvent("blade runner 2049")) viewStateTester.assertValueAt(1) { assertThat(it.searchedMovieTitle).isEqualTo("Searching Movie...") true } viewStateTester.assertValueAt(2) { assertThat(it.searchedMovieTitle).isEqualTo("Blade Runner 2049") // ... true } } If you look at the source for the base TestObserver, there are a bunch of these useful methods:
A not so well known api in RxJava is the .hide() operator. When does one use the hide operator in Rx? From the docs: Hides the identity of this Observable and its Disposable. Allows hiding extra features such as Subject’s Observer methods or preventing certain identity-based optimizations (fusion). there are a lot of complex operations that take place internally in RxJava (like internal queue creation, worker instantiation + release, numerous atomic variables being created and modified.
Originally posted this article on the Wedding Party tech blog Ok, so in my previous post I innocuously introduced the .share() operator. Observable<Object> tapEventEmitter = _rxBus.toObserverable().share(); What is this share operator? The .share() operator is basically just a wrapper to the chained call .publish().refcount(). You’ll find the chained combo .publish().refcount() used in quite a few Rx examples on the web. It allows you to “share” the emission of the stream.
Originally posted this article on the Wedding Party tech blog This is a bonus RxJava post that I landed up writing along with my previous post on creating an event bus with RxJava. If you went through the code in the actual repo you would have noticed more than one version of the bottom fragment in the RxBus demo. Originally I envisioned the RxBus example being a tad bit fanicer however as I coded up the example, I realized that too many concepts were getting conflated.
Originally posted this article on the Wedding Party tech blog This post has three parts: quick primer on what an event bus is implementing the event bus with RxJava parting thoughts on this approach “RxBus” is not going to be a library. Implementing an event bus with RxJava is so ridiculously easy that it doesn’t warrant the bloat of an independent library. Part 1: What is an event bus? Let’s talk about two concepts that seem similar: the Observer pattern and the Pub-sub pattern.
Originally posted this article on the Wedding Party tech blog I’ve read and watched a lot on Rx. Most examples either use the J8 lambda notations/Scala/Groovy or some other awesome language that us Android developers are constantly envious of. Unfortunately I could never find real-world simple examples in Android that could show me how to use RxJava. To scratch that itch, I created a github repo with a couple of nifty examples using RxJava.

#script

The trick to understanding awk in all its terse glory is to understand its defaults. Most solutions you see in the wild are a clever symphony of awk defaults stacked on top of each other. In this post, I break down one of the most popular one-liners which should hopefully make future awk-ing pretty straight forward.

#shell

The trick to understanding awk in all its terse glory is to understand its defaults. Most solutions you see in the wild are a clever symphony of awk defaults stacked on top of each other. In this post, I break down one of the most popular one-liners which should hopefully make future awk-ing pretty straight forward.

#software-engineering

Great companies maintain their insurgent mindset, for fear of becoming complacent and irrelevant over time. Push decision making down to single-threaded DRIs Single-threaded is tech jargon that simply means solely focused on a single area. The single threaded DRI is the most senior person whose only job is to run a given product or initiative, this will typically be a product management or engineering leader. Leverage shared services to minimize duplication
A fascinating article from 2017 on how coding or programming as a mechanism of writing software is frought with landmines. If you’re a software engineer, this article is a must-read. It took a lot of restraint not to just pull-quote every paragraph from this article.
If you’re in tech and have been thinking about your work and role in your company, I highly encourage you to watch this talk by Tanya Reilly 1 Setting myself a reminder to rewatch this again 6 months from now. Such a phenomenal speaker and powerful story telling! Follow her @whereistanya ↩︎
If you’re a software engineer trying to be snarky, it’s important to get these terms right for maximum effect. What is Yak-Shaving? “Shaving a Yak” means performing a seemingly endless series of small tasks that must be completed before the next step in the project can move forward. Is this a good thing or a bad thing? It depends. Yak Shaving is sometimes very much necessary. It’s “bad” only when done unnecessarily.
Sometime back I ran across a thread where folks talked about this programming style called “Space Shuttle style” that the Kubernetes codebase followed. // ================================================================== // PLEASE DO NOT ATTEMPT TO SIMPLIFY THIS CODE. // KEEP THE SPACE SHUTTLE FLYING. // ================================================================== // // This controller is intentionally written in a very verbose style. You will // notice: // // 1. Every 'if' statement has a matching 'else' (exception: simple error // checks for a client API call) // 2.
… You should mention what technologies you are using (because listing WCF or Java will save me the hassle of applying, and you the hassle of rejecting me), but don’t list specific tools, languages and frameworks as requirements. Good developers who know Rails can learn Django or Node. Going between Oracle, SQL Server, MySQL and Postgres is all pretty trivial. … I remember being asked quite eagerly, during a pre-interview, if I knew a specific view engine (like erb, or haml…).
You’d be surprised how valuable the skill of eloquent communication is even in the field of IT. Keeping users apprised with your progress is perhaps the most important thing to do when working with clients. But keeping them apprised is tricky business and the ability to clearly put down in words,what to expect, is a basic necessity today. Even if you have nothing to do with CS or computers, you should read the linked article.

#spotlight

A quick macOS tip on how to remove Terminal.app (or any app) from your Alfred & Spotlight search results

#steve-jobs

This whole piece is such a biograpy treasure trove and one I’m filing under the “come back and read in a year” category. I’m highlighting some of the snippets in particular that really resonated with me: “This is going to allow people to watch video on our iPods, not just listen to music,” he said. “If we bring this product to market, will you put your television shows on it?” I said yes right away.
February 24, 1955 – October 5, 2011

#tailscale

I’d like to show you how I use Tailscale and a Mac mini in my office to achieve some nifty things. Tailscale is marketed as a zero-config VPN built on top of WireGuard that securely connects devices and manages firewall rules etc. While all of that might be true, think of it this way: Tailscale allows you to securely connect to a machine at home from anywhere on the internet.

#terminal

A nifty fish shell script that allows you to just hit enter and get useful directory information like git status or directory list.
A bunch of useful cli commands for converting & editing images & PDF files
If you’re a programmer these days, you probably spend a large part of your day in git. If you’re a command line zealot like me, you realize the holy ways of using your Terminal app for everything and aren’t seduced by fancy GUIs that only stand to dissuade you from pure unbridled productivity. With that in mind, one typically finds themselves in a position where they have a few files that have changed liked so:
We recently held our semi-annual hackathon at Instacart - the Carrot Wars 2018! In putting this hackathon together, I noticed a pretty blaring gap - there wasn’t a simple (and free) online service that would quickly tabulate the results for a hackathon event. We looked around and found some nifty options, but most of them were a tad bit too expensive for our liking. They also were not setup for a single event use or required a monthly subscription.

#things

How I have my productivity system setup using Things and a monthly logging system

#threading

This is a fantastic post by Erik where he explains the nuance between IO-bound and CPU-bound operations in programming. … libraries have dedicated APIs for I/O scheduling work, separate from other types of operations …. but why is this the case? Why don’t we use a single thread pool for all background operations? The operating system will handle the scheduling of these threads the same I love how this specific question is framed (a good interview question for advanced mobile developers):
Originally posted this article on the Wedding Party tech blog Mobile devices are getting pretty fast, but they aren’t infinitely fast yet. If you want your app to be able to do any serious work without affecting the user experience by locking up the interface, you’ll have to resort to running things in parallel. On Android, this is done with “threads”. Grab yourself a cup of coffee and read this post line by line.

#todo

How I have my productivity system setup using Things and a monthly logging system

#vpn

I’d like to show you how I use Tailscale and a Mac mini in my office to achieve some nifty things. Tailscale is marketed as a zero-config VPN built on top of WireGuard that securely connects devices and manages firewall rules etc. While all of that might be true, think of it this way: Tailscale allows you to securely connect to a machine at home from anywhere on the internet.

#vps

I’d like to show you how I use Tailscale and a Mac mini in my office to achieve some nifty things. Tailscale is marketed as a zero-config VPN built on top of WireGuard that securely connects devices and manages firewall rules etc. While all of that might be true, think of it this way: Tailscale allows you to securely connect to a machine at home from anywhere on the internet.

#vscode

Note on replacing TextExpander with Keyboard Maestro