(Assumed audience: folks with a working knowledge of the command line and macOS.) The tl;dr steps You can map ⌘ + P + P — i.e. holding command and hitting P twice — to “print” PDFs directly to your reMarkable with the following steps: Open terminal and cd ~ (or wherever you prefer to house the rmapi binary). Run curl -L https://github.com/juruen/rmapi/releases/download/v0.0.13/rmapi-macosx.zip -o…
(Assumed audience: folks with a working knowledge of Swift and modular arithmetic .) Anish nerd sniped me the other day — and while I usually tuck these kinds of posts away in my technical notebook , the problem’s solution threaded so many wonderful topics that it warranted a longer-form entry. The problem statement is A prime number is a natural number greater than one whose only factors are one…
(Assumed audience: folks familiar with Combine and optionally, Point-Free’s swift-composable-architecture and -parsing packages.) While RIFF wasn’t quite ready for App Store prime time while I worked on it, it was our responsibility as a primarily audio-based app to make sure the eventual launch was accessible for the Deaf and Hard of Hearing community 1 . And in hopes of making captions…
(Assumed audience: folks familiar with Combine.) Combine ships with handful of prefixing operators: Publisher.prefix(_:) for a bounded number of elements, .prefix(while:) — and a throw ing variant — for consecutive elements passing the provided while predicate, .prefix(untilOutputFrom:) for prefixing until another sequence publishes an element (which ended up being the backbone for…
(I’ve been wanting write through more personal topics alongside Letters to J and in shorter form than my older posts. That is, reframing Distillations as less of the hardened clay left over from experience and more so clay I can shape as I think things through). ⬦ A dynamic I’m trying to remember — and often forget — is that multiple things can be true at once. I’m struggling with a…
(Assumed audience: folks with working knowledge of Swift. It’s totally fine if you don’t have the Sequence protocol memorized, we’ll step through it together.) ( YouTube permalink .) ■ Related links ⇒ Erik Meijer and Brian Beckman’s March ’14 Expert to Expert session . ⇒ Justin Spahr-Summers’ June ’14 “ Future Of ReactiveCocoa ” presentation. ⇒ Casey Liss’ “ Building up to Combine .” ⇒ “ Deriving…
Here’s a fun 1 Combine challenge. What does the following snippet output? ( Gist permalink .) Somewhat surprisingly, the value event for 4 is missing. ( Gist permalink .) This is a subtle gotcha when subscribing to publishers—they implicitly have a “temperature.” When receiving a subscriber, an upstream publisher hands it a Subscription to work with. The subscription then brokers demand through…
(Assumed audience: folks with some working knowledge of Combine.) Updates: 6/17/20: The test expectations have since been swapped out for Point-Free’s TestScheduler implementation. 4/28/20: While PR’ing the operator, I looked into whether or not the prefix(1) safety net is needed and…it isn’t! Woot. Combine uses back pressure to request a single value from untilOutputFrom and the subsequent…
(Assumed audience: folks with conceptual understanding of the Combine.Subject protocol.) Updates: 5/1/20: There was a subtle inconsistency with how ReplaySubject handled double subscribes compared to its CurrentValue- and Passthrough- counterparts and has since been fixed . Or, probably a more fitting title: “how I learned multicasting the hard way and try to write out an easier path, for y’all.”…
(Assumed audience: folks with a working knowledge of Combine and the ObservableObject protocol .) Materialization, like “ fusion ” and “ dual ,” is an intimidating term for a not-so-intimidating concept. When I first encountered the word, I thought it was over the top. And, it kind of is. This entry tries to bring it down from abstraction and into Swift. Let’s run into needing it by way of…
(Assumed audience: folks familiar with Combine.) Publisher.setFailureType(to:) is a head scratcher. At a glance, it seems to step on .mapError(_:) ’s toes. And, it sort of does! The “available when Failure is Never ” note in the documentation hints at why. So, let’s spin up our favorite Never -erroring publisher, Just , and map over its error type for a closer look. ( Gist permalink .) Hmm. We…
(Assumed audience: folks familiar with Combine and its operators.) Updates: 4/4/20: Tim followed up and asked a question I should’ve covered more directly, I was hoping to also read why Combine fuses operators, any idea? I get that it simplifies types, but I have no reason to assume that that gains you anything at runtime […] Sans working at Apple or poking at the framework with performance tests,…
(Assumed audience: folks familiar with Combine’s syntax. Prior knowledge of zipping isn’t necessary, since I’ll build intuition and link to resources—but, if you’re already familiar with the topic, feel free to skip to “ a variadic Publisher.zip .”) Updates: 5/23/20: Daniel Williams and I stepped through a crash he ran into with this post’s implementation. Notes from the conversation can be found…
(Assumed audience: folks with a working knowledge of reactive operators and type erasure. Familiarity with Combine isn’t needed to read along.) Let’s warm up 1 with a shorter post, shall we? Shai showed me how to rewrite awkward “conditional flatMap s”—or relatedly, “conditional map and switchToLatest ” sequences. Less abstractly, when we find ourselves checking a condition on upstream’s values…
( Assumed audience : folks with a working knowledge of Swift and an openness towards functional programming.) There’s no dancing around it. Custom operators are #holy-war territory in the Swift community. You see it subtly mentioned in style guides: Custom operators should be avoided. Custom operators can reduce the readability of the code because there can be confusion around their functionality.…
While Apple’s Combine framework didn’t take center stage, its implications on our community certainly will for the next decade. We now have a first-party toolkit for functional reactive programming (often abbreviated “FRP”) that packs an intimidating namespace of operators , opaque abstractions , and features even Combine’s open-source counterparts omit like backpressure . This post aims to unpack…
I joined Twitter on December 29th, 2011—2,627 days ago—and have tweeted 17,644 times since (~7 per day). My addiction aside, I point out that total, 17k, specifically. The service’s website, apps, and API only let me sift through the most recent 3,200 of that total, leaving behind an iceberg of 14k thoughts, memories, questions, and conversations. While I can download and search through an…
At XOXO ’18, Jennifer Lee posed the following question : “Who do you envy? [Who you envy] is a compass for what you care about.” The folks I envy all share a common trait: having a body of work I admire greatly. That phrase, “body of work,” has been on my mind since the conference. It’s thrown around often. “Their writing is an impressive body of work.” “Her body of work is the result of a…
To the books on my shelf I haven’t read, You started as a stack only eight wide held upright by Portal-themed bookends I’m way too proud of. Now, you stretch beyond my five-foot wide desk, total over sixty, and I’ve maybe read—or, if I’m being honest, paged through, skimmed, or abandoned—around…twenty. The tendency to book hoard started by reaching for Amazon’s tactfully decorated 1-Click®…
It’s safe to assume most would agree with the following statement: “We shouldn’t judge too quickly—everyone is fighting an internal war we know nothing about.” Yet, the principle is so rarely acted on. Its disregard comes in small doses. A group fitness instructor who asks the room if there are any injuries and—instead of coming over to discuss privately—forces you to publicize your situation. The…
iOS 12’s “ Screen Time “ might be the biggest, recent step forward in humane product design. It packs usage reports, device pickup counts, enhanced Do Not Disturb controls, and granular notification settings. However, as I read the press release, I couldn’t shake the feeling that the feature Band-Aids over the networks called out—namely, Instagram, Facebook, and Twitter. Fixing our collective…
Were the four years I spent at university worth it? With 2018 marking a school-length after graduation, the question has been top of mind. My unmeditated answer is yes; UVA was incredibly formative. Still, I’ve just recently put a finger on why. Universities construct “ladders.” Just because coursework is increasingly becoming available online doesn’t imply we can make effective traversals of that…
At the moment, I have three “mentors,” all of varying ages. Alice at 21, Shiva is 25, and John coming in at 33. Before diving in, let’s clear the air around the quotes surrounding “mentors.” I wholeheartedly believe mentorship is bidirectional and the set of folks you give this label to can, and should, change over time. This flies against the traditional notion of mentorship—making me question if…
There’s no dancing around it—we all have a finite number of heartbeats, breaths, and seconds on this planet (and maybe Mars). However, the curious thing about time is its elastic nature. Never-ending high school summers. Days so long they had seasons. One-on-ones that stall when you ask for a raise. Assuming we’re not moving near the speed of light, time marches forwards at a constant rate—it’s…
An often-forgotten aspect of “being alone” or “me time” is the backdrop in which it takes place. On one end of the spectrum, we have isolation— Walden -esque retreats or withdrawing to our apartments after a full day; on the other end, there’s the intriguing dynamic of being alone amongst company. The notion of simultaneously individual, yet shared experiences has many embeddings (don’t worry, we…
Why do some networks—like Facebook’s graph—seem to drift into irrelevance over time? Putting the product’s (ever-crowded) feature set aside, I think there’s a fundamental assumption baked into services today causing this: edges (friendships, follows, subscriptions, etc.) between nodes existing indefinitely . Sure, you can always unfriend, unfollow, or unsubscribe from accounts that are no longer…
Rounding out my third year in New York, I’ve started noticing something special. Memories have increasingly attached themselves to locations. Walking down 1st Avenue reminds me of summer dates, Madison Square Park conversations over Gasoline Alley coffee, meeting Dave and Ryan alongside Riverside Drive at ungodly hours for Saturday bike rides. weekend forty two A post shared by @ jasdev on Oct 22,…
Strength training is a nonnegotiable part of my routine. It has been an anchor in uneasy times, helped me look in the mirror with a palpable sense of peace, and continues to teach lessons that have cognitive analogs. I want to hone in on a particular lesson that my trainer has relayed over the past couple of years: “Time Under Tension.“ Time Under Tension (TUT) originates from a style of lifting…
“How’d you two become friends?” “…we met on Twitter!” This origin story has sparked a few of my dearest friendships, since making an account in 2011. What about 140 280 characters fosters such strong connections? After letting the question distill for a year, a potential answer is starting to take shape. (Continuing on this tweet) Twitter has a way of fostering ambient intimacy, that I’ve only…
Firing off the first tweet for @PublicExtension on October 9th, 2015 was a rush. I was on the tail end of my batch at the Recurse Center , after having spent the previous quarter transitioning from an backend engineer to writing Swift every day. The goal was to regularly post extensions I’ve come up with, stumbled upon, or received from the community. In the span of a year, I collected 89…
Let’s break down empathy. At its core, it’s the ability to truly place yourself in someone else’s shoes. Not just imagining what it would be like. But actually lacing up their boots, finding an irritating rock in the left one, and then running three marathons in two days. Given this lens, a way to “build” empathy is to wear as many shoes as possible. Or as I like to view it, expand my “emotional…
My all-time favorite quote from Rainer Maria Rilke is “Where I create, there I am true .” I certainly feel this way about writing. Committing thoughts to prose is easily one of the most vulnerable and rewarding things I do 1 . Moreover, hammering away at my keyboard on idle Saturdays gives me space to be my true self. In a similar vein, I’ve been supporting two junior engineers on my team , which…
With my first anniversary at Peloton approaching, I’ve been thinking about how labels and titles shape internal narratives. Reflecting on my career and the various jobs I’ve held, I realized that the way the industry talks about jobs, and to some extent ourselves, needs to shift. For example, my online bios used to follow the cookie-cutter “X at Y. Previously A, B, and C.” template, where X is…
When I got my first iPhone back in 2012, I was a devoutly against read receipts . I wanted the space to reply without the (false) worry that my friend on the other end is silently wondering “omg, Jasdev hasn’t replied in four minutes since seeing my message‽” Over the years (and after reading Rosemary ’s fantastic post on the topic ), I’ve changed my mind . I now leave read receipts on by default…
A common sticking point that meditators face when catching themselves lost in thought is thinking about thinking . For example: I’ll mentally note that I’m ruminating on a past experience. Instead of returning to the present, I’ll accidentally think about the note I just made. Getting lost in thought isn’t necessarily bad. However, it’s important to know when doing so is causing a disservice.…
I usually cringe at the trite question: “what does success mean to you?” But, Jodie Foster ’s answer has stuck with me over the years. “In the end, winning is sleeping better .” When I first heard this, I immediately paused the podcast I was listening to and took note. Foster powerfully compresses so much into a handful of words. Personally, sleeping better requires the sensation of earning my…
Back in January, I started a public, high-cadence log of what’s on my mind 1 . Along the spectrum between my Twitter account and this blog, the journal sits in-between. Unpolished thoughts, developed over time. Six months and 46 entries later, I wanted to take a moment to reflect on my experience so far. Why Keep One? Two reasons. First, to create a distillery for my thoughts. By regularly…
Our routine is like clockwork. After each hangout , Ryan and I will exchange photos and videos to store in our digital attics . This habit sparked from the realization that although it’s hard to approximate how many photos our generation takes each year , a quick scroll of our Camera Rolls shows just how rarely we take photos of ourselves and others. The photos you’ll care about later will be the…
I remember the sprint planning meeting so clearly. I had joined Peloton the week prior and the team was heads-down trying to launch a major refactor of the iOS app . After calculating how many story points we were going to tackle in the next sprint, our project manager, Asma Khan , asked the group: “are we moving too fast?” I’ll never forget this question. In my three years in the industry so far…
In the moments after a small win, a handful of people come to mind for me in sharing it. My Mom , the “ Awesomest Turntable DJs ,” Ryan, Kunal , Shiva , and my roommates to name a few. Thinking about this list of people, I wonder if it’s possible to gracefully scale this intimacy from a handful to a dozen. We tend to view scale and intimacy as an undisputed dichotomy. One thing I've learned to…
Electronic Dance Music is a big part of my life 1 . Unlike other genres, tracks and remixes are released at a breakneck pace. Because of this, artists tend to gravitate towards Twitter-esque services for music like SoundCloud , where (re)posting multiple songs a day is common. I’ve spent years curating tracks on the service to the point where my local music library is only a handful of…
Lately, I’ve had little desire to tackle side projects. This realization caught me off guard, especially as someone who participated in countless hackathons , helped start one at their school , and whose side project landed him and his friends a trip to visit Snapchat’s HQ . Our industry tends to espouse the idea that you must always have a side project—often citing them as a factor in hiring…
Hear me out. While typos and grammar issues are inevitable in the absence of editing, there is a subtle way to use this as a lens into your thinking. I view tweets as atomic units . Immutable snapshots about your life that you can thread together with others over time. Thought: Twitter is (potentially) an RSS-like feed for your life — Jasdev Singh (@jasdev) November 30, 2016 Twitter threads…
A couple of days ago, I made a series of tweets that highlighted smaller utility 1 applications that I’ve found recently. I love utility apps that solve a small need in an elegant way. Wanted to share three I’ve found recently (would love other recommendations)! — Jasdev Singh (@jasdev) December 30, 2016 1/ Moon by @charliedeets : a clean moon phase calendar with a beautiful Today Widget…
Hi, I’m Jasdev, and I’m a recovering Twitter ‘completionist.’ I have an unusual relationship with the service. Aside from a handful of mute filters 1 , I read every single tweet in my timeline. By following ~400 accounts and assuming two tweets a day per account, I read about 800 tweets each day. As a result, I tended to fill emptier moments, like waiting for the subway or passing time when…
Since moving to New York City, I’ve spent ~257 hours commuting to and from work via the F line 1 . While I used to dread my commute, I’ve recently spent a lot of time thinking about how to make it more enjoyable. The goal wasn’t to optimize every minute of my commute , but rather to make it something I looked forward to, while aligning with my core value of always learning . The substrate for this…
Two days I look forward to each month are the 28th and the 30th 1 . A couple of my closest friends, Ashoka and Shiva , and I have established a ritual of checking in with one another on these days. The setup is simple. An hour-long, monthly calendar event where we work through problems we’re facing, wins for the past month, common themes in our journals , and big questions we’d like to bounce off…
Time for a pop quiz. Given that NSFetchedResultsChangeType is defined as follows: typedef NS_ENUM ( NSUInteger , NSFetchedResultsChangeType ) { NSFetchedResultsChangeInsert = 1 , NSFetchedResultsChangeDelete = 2 , NSFetchedResultsChangeMove = 3 , NSFetchedResultsChangeUpdate = 4 } NS_ENUM_AVAILABLE ( NA , 3 _0 ); What is the value of changeType in the following expression (assuming Swift 3.x)? let…
Nostalgia products have made a comeback. Whether it’s Timehop ’s daily peek down memory lane, Facebook inserting memories 1 into your feed, or Apple tucking away old photos into iOS Quick Actions , companies are trying to find meaningful ways to resurface the past. While I enjoy these features, I’d like to highlight a consequence many of them overlook: causing users to erroneously compare the…
WWDC is a conference like no other. This past month, I was lucky enough to experience it as a part of Tumblr’s iOS cohort . While my peers have done a fantastic job recapping the conference’s highlights , I wanted to take a moment to reflect on the smaller details, things that went well, and things I wish I had done differently. Recharge Days and Exercise This is something I regret not doing…