Good Reads – March 8th

  • Jeff Dean: Exciting Trends in Machine Learning – A worthwhile watch on YouTube though more a retrospective on how we got here than where we are going; which is great since the pace of innovation in this space is demolishing predictions so fast and any “future of AI” video has a shelf life of only a few months
  • How Google helped destroy adoption of RSS feeds – A bit of a dramatic title, though I suppose “How Google lost interest in RSS as everything was moving to social networks” might have been less interesting. I have strong love for RSS and had even written an RSS reader way back using Google Reader’s unofficial API. I have thoughts but will hold those for a more dedicated post on that.
  • Project of the week: RSS-is-dead.lol: Speaking of RSS, this project is kinda cool: it navigates your social graph on Mastodon and finds RSS feeds of folks that account is following. If only my RSS reader was still around, I could actually use those discovered links :). Here is my profile in case you want to see it in action but don’t have a Mastodon account.
  • BlueSky opens up to federation: Bluesky might be the social network I most agree with philosophically, but find it boring enough to never actually go there. The fact that I can have a domain based account there is great (you can follow me @arpitonline.com there). The federation implementation seems good at first glance but will have to dive in more later maybe (if it survives the wrath of Mastodon fans)
  • Please, enough with the dead butterflies: Speaking of BlueSky, someone on Hacker News pointed a link to this pretty great post on how most artwork about butterflies actually draw their wings in a position that is only observed in dead butterflies. I’ll never get that thought out of my head now.

Good reads – Week of Feb 18, 2014

Dev

  • Dart 3.3 and Flutter 3.19– I am one of a very small set of people running a Flutter web app in production, so excited to see work going into better JS interoperability and a path to WASM. Impeller support for Android is neat to see as well.
  • How Custom RenderObjects can make your life easier (FlutterCon) – One of my aha moments with Android was when I finally understood how the layout engine worked (which led to a custom framework that was very popular for a while). I am starting to feel the need for a similar aha moment with Flutter given how much widget code is in our codebase that feels unoptimized.
  • Micropayment capabilities in Chromium – I read this on a forum (fine, Reddit) and there was a lot of criticism of this move, but if folks don’t want ads, then you have to let publishers at least offer payment based access. I remember the “small fractional payments” was the original pitch for Bitcoin but it’s interesting to see the Web Monetization API finally be a thing 15 years later.

Design

  • GitButler product demo – Unlike most apps for working with Git that faithfully surface Git’s capabilities but don’t really think about user mental models or approaches when working with it, GitButler takes a different approach and tries a few new ideas around developer workflows. I like it.
  • MyMind’s share UI – Very calming confirmation screen when you share something to MyMind (a personal notes/images app with AI).

Misc

Things I read – Week of Feb 11, 2024

Dev

  • A deep dive into Strapi’s architecture (strapi.io) : Strapi calls itself a headless CMS but it is more a web framework with a built-in CMS (kind of like Django). We are using it a fair bit at work and it’s been decent so far. At some point I’ll write a more personal “lessons learned” post but in the meanwhile, this is a good introduction to the system’s design.
  • Dart Vector DB (github.com): No clue if this is any good, but glad to see an on-device Vector DB for Flutter apps.
  • The Undercover Generalist: Good post that highlights that most job reqs ask for specialists when most of the industry really needs generalists. The book Range is also a good read on that topic.

Misc

Things I read this week (Feb 4th, 2024)

Dev

Design

Misc

Things I read this week (Jan 28, 2024)

Dev

Design

Misc

NFTs are about to take a bigger role in your expanding online life (MarketWatch.com): Slightly wishful thinking by the author here but there is a lot of interesting projects around in the fairly niche community of NFT enthusiasts. The tech is fairly proven, but regulatory uncertainty, bad press, and hard on-ramps into the ecosystem are holding it back from going mainstream.

Binoculars with built in image recognition: Would love to gift one of these to my father-in-law who is an avid birdwatcher, but at $5K it might be a bit much ;). He already has a smart bird feeder though.

Disney’s HoloTile floor (YouTube): The latest in tech that could be used to let users walk around in VR and yet not physically move. It’s cool. I want someone to make the Jamiroquai’s Virtual Insanity video using it 🙂

// follow for updates:

Things I read this week (Jan 20, 2024)

Dev

Design

Best UI / UX for subscribing users to web push notifications (Pushpad.com): We might have to add web push notifications into our web app soon, and while Firebase makes the engineering much easier, the UX of permission prompts is a bit of the wild west.

Misc

The myths we tell ourselves about American farming (vox.com): An insightful, though depressing read, on Agricultural Exceptionalism, or how our romanticized notions of farmers and farming are allowing that industry to operate under a different set of environmental and labor laws that hurt our society.

How Spotify helped turn Afrobeats into a global phenomenon (restofworld.org): I had never heard of Afrobeats before but have been listening to it this week and it’s kinda neat



// Follow for updates

Using native share API in Flutter based web apps

One of the fairly new APIs added to the web stack is the Navigator.share API. The API allows websites and apps to invoke the native share sheet on OS running the web browser to let the user share text, links and images to the services they actually use.

This week, one of the tasks on our new web app (written in Flutter) was to transition from our custom “share this link” UI that was preconfigured to a select set of services (Twitter, Facebook, Reddit, email) to the native share api allowing users to share the link on their configured services.

Some thoughts on the Share sheet

Before I continue, lets talk about the OS share system in general. If there was ever a “God Object” equivalent of user interfaces, the system share sheet on mobile devices has to be it. The widget has become sort of like an escape hatch for the underlying application with not only share capabilities, but a host of other actions in the same menu (Find on page? Print? Add to home screen?) which keeps getting updated by your installed applications. I don’t think anyone can list the menu options there from memory, and yet if we expect to run any action on any data from the underlying application, we expect that action to be available in the share sheet.

I bring this up because the native share from a webpage is now not as simple as sending a title, text, link and image to the share sheet and assuming it would work. Different behaviors from different apps get enabled based on various combination of the 4 fields. For example, one service we wanted to make sure users could use was Instagram (assuming they were Instagram users). IG behavior via share is something like this:

InputInstagram behavior
Only title, or title + textCannot share to Instagram
link + any combination of title and textShare with a friend on Instagram as a message
Only imageShare that image in a post, story or message
Image + any of the other fieldsShare image as a reel
Instagram behavior matrix

Other image oriented services like Snapchat and Pinterest also seem to be sensitive to the combination of the 4 fields sent. Its kind of a bummer that we have to now spend QA cycles making sure we are sending the right order of fields to get the desired behavior from the receiving app.

Native share on the desktop?

The other challenge to native sharing is that while the browser API may be available on a lot of platforms, native share on the desktop does not make sense since most people don’t install apps for the services they use on their desktop which means that the share menu is pretty barren. Chrome on the Mac desktop, perhaps sensibly, does not support the web share API but Safari does.

Our solution for the app now is to use our custom share UI on desktop browsers but use the native one on mobile. Feels a little hack-ish but it makes the most sense from a user’s point of view.

Sharing images on Flutter web apps with Share Plus

The last aspect of the implementation that tripped us a bit was trying to include images from a web URL along with the title and link to the share API. We are using the Share Plus library which is pretty good and supports the native share API. Unfortunately we didn’t find any links on how to convert an image link to the image attachment (its still early days for Flutter web I suppose). If anyone else needs the snippet, here is how you do it:

final http.Response responseData = 
  await http.get(Uri.parse(linkToFile));

Uint8List bytes = responseData.bodyBytes;

var file =  XFile.fromData( bytes,  mimeType: 'image/png', name: "MyPic.png");

await Share.shareXFiles([file], text: 'Hello', subject: 'Check out this image' );

The thing that I wasted 2 hours on today was this snippet not working cause the name I was giving my file did not include the file extension 🤦‍♂️. So be warned 🙂

Things I read this week (Jan 14th)

Tech

  • Understanding the difference between find_or_create_by and create_or_find_by: For the project at work right now we were debating the best way to approach the “find user unless they already exist” implementation (we are using a Node based framework which we have to customize since our service is checking other services to validate the existence of a user). When in doubt, I try to see how Rails does it and I actually did not know it had two different implementations of the requirement based on whether the accidental creation of duplicates via a race condition was acceptable or not. Interesting read.
  • The Untold Story of SQLite (CoRecursive Podcast): Fascinating conversation with Richard Hipp, creator of SQLite.
  • The Effective Engineer (YouTube): Originally published 8 years ago, still a great watch. Edmond Lau talks about 5 approaches to work that would make you a more effective engineer: 1. Optimize for learning, 2. Invest in iteration speed, 3. Validate your ideas aggressively, 4. Minimize operational burden and 5. Building a great engineering culture.

Design

  • List of UX Research Templates – 12 years ago when I was working in the UX team, I used to be very involved with the UX Research teams, building the prototypes that would be tested with actual users. That said, I wasn’t that involved with the UX Research process. In my current project, we are doing some ad-hoc UX Research. This list of templates could be very useful.

Misc

  • Inside The New York Times’ Big Bet on Games (Vanity Fair): I spent a part of last year working on some gaming product concepts and so am very interested in how this space is evolving. This piece was an interesting insight into how the games products (Crossword, Spelling Bee, Wordle, Digit, Connection, etc) are run inside the Times. The Times may not be the first company to come to mind when thinking of gaming but interesting to see how games is becoming a meaningful part of the Times’ offerings

Things I read this week (Jan 6, 2023)

Engineering:

  • Figma’s database migration from one giant DB to multiple vertically partitioned databases – My knowledge of database-level aspects of applications is just about functional, relying more on managed services or backend teams to provide my application level code a robust api to work with. However, with my latest project at work, I am starting to look deeper into database elements just to be aware of the tradeoffs we might need to make in the future. This was a great read on how the Figma team transitioned their giant db to a number of vertically partitioned smaller ones and instead of splitting each table across many databases, moved groups of tables onto their own databases. 
  • Computer Scientist Explains Zero Knowledge Proofs in 5 Levels of Difficulty (YouTube) – I really like this YouTube series by Wired that explains technical concepts in ascending levels of complexity/detail. ZKPs are a big topic in my community of Web3 devs and this was a great video that almost everyone can take some learnings away from.
  • Database Fundamentals – A great “from the ground up” read on database technology and concepts. I specially enjoyed the part on various algorithms the database storage engines use.

Design

  • The Genius Design of Dutch Money (YouTube) – It’s a bummer that these are no longer in circulation with Netherlands moving to the Euro, but the focus on clarity and fun make these some of the most interestingly designed currency notes

Fun

  • Children of Time by Adrian Tchaikovsky (Book) – Not surprised that this has won numerous awards and is often talked about as one of the best Science Fiction books of all time. Children of Time explores what happens when a terraforming project goes wrong and a virus designed to speed up simian evolution accidentally ends up evolving spiders instead. I really liked the exploration of civilized spider societies and how their technology would be based on very different primitives than humans’.

My 2023 Retrospective

In trying to write this post, I was looking back at my retrospectives for the last few years and once again struck by how different every year has been from the previous year. 2023 continued that trend, but had a different note to it: at the end of most previous years I felt I had learned a lot, specially around technology; 2023 was a great year where I was finally able to apply a lot of those learnings into building something impactful.

Selling an idea

In my wrap up to 2022, I had mentioned that I was starting to focus on 2 things: Web3 and building a small team to explore new ideas in that space. The biggest win of 2023 was building momentum around a new idea there.

Presenting the idea at an internal "What's Next" event to 5000 folks was quite an experience

Getting buy-in in a large organization/corporation is hard and it was a really educational experience getting various leaders excited about a very different product opportunity and commit financially to it. I have been thinking about why this project was better received than other pitches earlier and some thoughts come to mind:

  1. Quick prototype: We showed the core idea in a prototype that was assembled in a week. The short time helped us to focus only on the core concept and not build other elements that were nice to have but only muddied up the narrative.
  2. Cross-organization team: We build the concept in partnership with the teams from Universal Pictures and the cross team collaboration helped with the credibility of the idea
  3. Adaptibility: The idea we talked about could be adapted to various goals from commerce to engagement. The really small prototype allowed folks to fill in the blanks of how this could work in their own minds.
  4. Timing: Not so much a credit to anything we did, but in general there was a bigger appetite for new ideas across the organization.

Probably the last one I’d add was my own personal belief in the idea and not purely from a practical sense. One of my favorite reads of all time was the book Creativity Inc which talked about how Pixar grew to the behemoth it is today. In that, Ed Catmull (former CEO) writes about how new ideas are often “ugly babies” – they have a germ of something that could be huge but aren’t quite there yet – and have to be protected against the “hungry monster” that is the rest of the org that is generating all the revenue but is always hungry for more resources (financial and attention). Ugly babies need believers and I definitely am for this idea (which meant I did create more presentations this year than ever before 🤣)

From concept to release

Taking an idea to launch was an experience I hadn’t had in a long time. I am lucky in landing a team that punches way above their weight and can balance the exploratory nature of our app with the needs of a production app (scale, security, privacy, etc). Given we were still fairly small team compared to the ambitions of this project here is how we approached the project:

  1. Agile-ish: We are basically using Kanban process for all engineering (most of the design came from an agency that worked out of band). We don’t have sprints yet since the exact features for the app aren’t set yet. There was a lot of creative chaos in 2023 but I am hoping that it settles to something more traditional in 2024.
  2. Build less: We lean towards using managed services and open-source products when possible. Integrating those services is a enough work to keep us busy anyway
  3. Monolith over microservices: One of the thoughts I remember reading somewhere was that microservices are meant to solve organizational problems, not technical ones. Between that, and DHH’s article that came out around the time we were planning the architecture has meant that we are on team-monolith till we grow.

I’ll share more about other technical aspects in a future post.

And while the app is *in production* right now, its still a beta so I’ll share the link once we open it up a little more.

Misc

This post has already gotten pretty long, so some quick updates below:

  • Went to India for the first time in 5 years, first time with Dana and that was a lot of fun. I hadn’t seen Diwali in India since I moved to the US 20 years ago so that was amazing
  • Read a few books but dropped out of a lot before finishing them which is unusual for me. How not to be wrong was probably my most interesting read. I have been reading a lot of graphic novels which have been fun. Strongly recommend “Its lonely at the center of the Earth“.

Finally, on a sad note, we lost 3 of my feline buddies this year. Grayling, Magical and Fuzzy were the friendliest and most loving of my cats and losing them in the first half of the year one after another was devastating. I miss them a lot but I like to think they are around me even now. They were such good boys.

Hug your pets if you have them and support local rescues and animal/nature/wildlife orgs if you can