Quick Notes from the “Talks at Google” video with the writers of the Expanse series

I finally watched this YouTube talk with the writers of the Expanse series, one of my favorite Sci-fi series of all time (mostly through the TV show but I did end up reading 2 of the 3 books beyond the TV series). The video is from 8 years ago but the ideas shared were pretty timeless. My best friend and I have talked for years about writing a sci-fi book together but have never gotten past a few ideation sessions (too many personal projects 🙂 )

Some interesting notes from the talk:

Birth of the project:
The work started as an MMORPG game that didn’t happen, which then resulted in a tabletop game and then finally the book. The book was more of a “we have all this world already created” moment than a fresh attempt at a book.

The two writers (yeah I thought it was one writer but turns out James Corey was just a pen name) worked together to create an outline of events and then wrote alternate chapters (each focusing on the events of their own character) and then gave it to each other to edit. Creative collaboration is hard and this seemed like a great way to do it.

On creating Sci-fi stories:
Unlike other genres, sci-fi doesn’t have a default plot type and you can bring in other genres. So book 1 is “sci-fi noir”, other books are “sci-fi westerns”, “sci-fi-political thrillers” etc

On why Fantasy seems more popular than Science Fiction
Interesting perspective on why sci-fi kinda lost to fantasy: Sci-fi became more focused on the science and math aspects of their ideas and telling really depressing stories to a point that the authors were mostly writing to impress each other. Fantasy stories focused more on the characters and plot and were a lot more upbeat.

Why do creative collaborations fail?
One of the many reasons collaborations can fail is because the collaborators may have different ideas about the work (the kind of story or message they are sharing). The alignment on the world early on helped steward the effort towards success

On the limits of “Hard Sci-fi”
The writers don’t consider Expanse “Hard Sci-fi”, they just got a lot of credibility by keeping the stories anchored in general scientific ideas. That said, they never let the scientific aspects limit their creative work. Also keeping the limitations of science made for interesting plots that couldn’t be just solved with miraculous technology

GroceryTimer 1.3 (Beta)

I am really relieved to finally have a new version of Grocery Timer on TestFlight ( link )

This was supposed to be a quick update to handle a few annoyances and one new feature: the ability to add multiple shopping lists since I do shop for American food and Indian food at very different stores.

En route to that feature, I just ended up changing a bunch of UI, from better styling the app popups, to some visual changes to the forms to allow for faster data input.

Here is a list of everything that has changed:

New Features

  • Ability to create multiple named shopping lists
  • Items in your shopping bag are now grouped by recommended locations
  • Snooze items in your shopping bag to never be tracked (do you really need to know when your soda is going bad?)
  • Set shelf lives for expiring items using buttons with pre-set values (you can still add custom values that will bring up the numerical input UI)

Visual overhaul

  • Redesigned “Update Values” screen
  • System popups are now consistently styled
  • Redesigned “Recipe Details” screen
  • New cross-tab persistent UI when you have items that need to be organized in your pantry


  • App doesn’t show an error when two instances of exactly the same item are added to the pantry list

If you are interested, give the beta a shot and let me know if you find anything that seems worth addressing.

In Defence of NFTs

I remember thinking of myself as a relative latecomer into the Bitcoin space, having really gotten into it in 2012 after first being introduced to it in 2009. My initial impression of Bitcoin in 2009 was “who cares, this is a nerdy demo” and it wasn’t till I saw a project at a hackathon of Bitcoin being passed around in an API call to get access to some data that I truly saw the potential. This was around the time Twitter was killing third-party clients left, right, and center with the justification being that there was no way to monetize the API and it was hurting their ad business (I was till very recently, a devoted Twitter user). The demo really made me rethink Bitcoin. If “value” could be manipulated like software and moved around the internet with minimal friction, the impact could be huge!

For the last 4 years, I have managed a small community of Blockchain/Web3 enthusiasts within Comcast. And while markets do their thing, my focus has remained on the underlying tech, with my initial interest in Bitcoin being replaced by Ethereum which I could actually use to build cool applications. And while I have worked on a few prototypes, some of which I have even shared on this blog, it has generally remained my “20% time” project.

Up until 2022. This year I spent a lot of time in the Web3 space, specifically around NFTs in general. And while I hope to share some details in the future, I wanted to take some time to talk about my own perspective on the space, especially since there seem to only be extreme statements in the space: NFTs are either a complete scam or the biggest opportunity since the internet. My own perspective is fairly moderate, but I do feel NFTs present a huge opportunity to build the next generation of communities and applications. Lately, I keep getting pulled into the same conversations again and again, and this post is an attempt to share my opinions on the topic.

We have had NFTs for a long time

In a purely technical sense, every web app that allows you to log in issues you an NFT, a non-fungible (i.e, unique) token which is some kind of authorization or access token. The difference between these tokens and Web3 NFTs is that

  • Traditional access tokens are stored in proprietary databases and NFT tokens are stored on blockchains which are usually shared infrastructure (which is why I don’t understand the point of single-company blockchains, though there is value in consortium blockchains)
  • Unlike traditional access tokens, you “own” the NFT which means you can give/sell your NFT to anyone on the same blockchain

IP vs Access Tokens

Though there are a lot of variations here, broadly I classify NFTs into 2 categories

  1. Intellectual property NFTs which give you some kind of ownership of the underlying asset. This may be read-only (ie. you can’t actually do anything besides own or sell the asset) or may give you broader rights to use the IP, as long as you hold the NFT.
  2. Access token NFTs which give you access to some content or community. The associated image/media here is a nice-to-have but not really the point since it’s more about the access gateway being able to validate your ownership at the entrance to the experience (similar to traditional access tokens)

“I can just copy the image”

Probably the biggest criticism of NFTs is that since the tokens just point to a piece of media on the internet, there is no value to them. Analyzing them in the context of the 2 previous categories of NFTs is kind of insightful:

  1. In the case of IP NFTs, this is akin to IP theft which, on a small scale, is no big deal (like downloading a YouTube video or whatever). But no one is going to create a business on IP they don’t have rights to (like the Bored Apes restaurant). Also, IP laws are territory bound. For example, it’s easy to enforce American IP law in the US but not in China. The same goes for NFTs: Web3 apps can easily verify your ownership if they need to but its harder to do that in off-chain products (at least for now, and since there isn’t that much money being lost there, no one cares), so yes, you can copy and use a Web3 artist’s work if you are ok with minor IP theft with no repercussions
  2. For access NFTs, since the media is not the point, it’s like copying the cool artwork from a Foo Fighters concert ticket. It’s cool that you now have it but since the point of it is to get into the concert, grabbing the image is pointless

Tokenized Hype

Another criticism is that NFTs are just tokenized hype, and a lot of purchases are FOMO-driven. There is some truth to this but it’s a natural culmination of where we have been going as a society. As we move from fundamentals-based economy to Information Economy to Attention Economy, the Hype Economy seems to be a logical next step. And this is being played out not just in the crypto world but in the non-crypto sector as well, with things like Meme-stocks and companies like Tesla being examples of companies trading way over their fundamentals would justify mostly because they have garnered huge fanbases around them.

I do think there should be some guard rails to prevent people from getting burnt and some amount of regulation is desperately needed in the Defi space.

Copper over Gold

I am not as excited about “crypto-as-a-gold”, something valuable but barely used. I’d rather Web3 technologies be more like copper: cheap so that everyone can use it, and actually useful.

Can’t have it both ways

I also find it fascinating that the same folks who are concerned about the centralization of power and control across the internet among a handful of companies also demonize the most impactful decentralization effort in the last decade. For the first time, we actually have projects essentially kickstarted by communities, and unlike, say, Kickstarter projects, have a voice and role in the growth of the projects. I am fascinated by the ideas of things like governance tokens and DAOs as coordination mechanisms. We have decoupled identity and financial systems allowing us to work with anyone on the planet with a shared vision and be truly inclusive since real-world biases based on identities don’t have to come into play at all.

Where Web3 needs to get better

That said, I acknowledge that Web3 systems need to improve to avoid the constant dings against it.

  • Reduce complexity to reduce de-facto centralization: Too many parts of Web3 are still too technical or nerve-wracking (like creating your own wallet to hold thousands of dollars). And while various companies are bringing solutions to market to help here, their centralized+unregulated nature makes the situation even worse.
  • Create more forgiving systems: I understand finality is a feature but we need to create systems to be more forgiving to users and developers. We have rolled back the chain when we had major events like the DAO hack on Ethereum. Can there be similar mechanisms or design patterns to prevent accidents on much smaller scales?
  • Reduce the possibility of scams and rug pulls: We need more ideas like trustless refunds etc to reduce the possibility of people getting burnt on Web3 products. I like the idea of long-term distribution of crypto funds that prevent FOMO scams.
  • Make more things for regular users: There is so much we can do with the Web3 primitives we have today: games, learning apps, community platforms, etc. I hope more efforts go to those and less into recreating wall street on the blockchain

Rethinking Google Circles with Mastodon

Like a lot of people, I have been trying to figure out my Twitter/off-Twitter strategy lately with the uncertainty around both the technical and the philosophical future of the product. And like a lot of people, I have been using Mastodon a lot more lately (though I did create my Mastodon account in 2022 before it was cool 😁).

Compared to Twitter, Mastodon is a harder experience to get into, but tbh, so was Twitter during its early days (I still remember the “Why would I tweet” conversations from back in the day). One of the biggest issues is that there doesn’t seem to be a great answer to “which instance should I join”. It kinda comes down to the community you want to belong to, but most of us belong to various communities.

Thinking about this a bit yesterday, I was reminded of Google+’s Circles idea (which I actually loved). The ability to publish your content to selective communities based on a tag or a drop-down list and then only subscribe to others’ content that I am interested to seems like a good idea.

I mocked up a couple of screens on how this could appear. The way I imagine is that there is a “root” account where all your posts are published and people can follow you right there to get every update (pretty much like how things work today). Additionally, though, you could publish to certain other communities based on a tag in your post. Users only interested in following your topic-specific updates could just follow you there.

The image on the left is a “follow” widget that lets others either follow every update from me. The image on the right is the post/toot widget which allows you to either post an update without a tag or with a specific tag.

Mastodon circles concept

If it sparks an idea among the Mastodon developers or community managers, that would be worth the 30 mins I spent on it. I do have a few other ideas I’ll share soon as well, but in the meanwhile, you can follow me on Mastodon here

On the panel for Philly Blockchain Breakfast

Photo of panel at the Blockchain breakfast

Last week, I was on the panel at the Web3 / Blockchain breakfast event organized by Comcast NBCUniversal LIFT Labs and Philly Startup Leaders.

It was great to hear a lot of probing questions from both the audience and the moderator. I have been exploring this space since 2012 and it still feels like the early days with so much still left to figure out. Every year feels closer to the kind of ideas I hoped to see sprout from this space but we are not there yet, and the space feels ripe with opportunity.

I really enjoyed listening to the the rest of the panel offer so much insight into the current state of the Web3 ecosystem from their own individual points of view. Thanks, Mark Wheeler for moderating the panel expertly, as well as fellow panelists Karla BallardKelly Gallagher, Mike Ghen and David Barrick, and of course everyone who attended.

2021 Retrospective

Your 2021 Work-From-Home Resolutions — The Storyteller Agency

Writing my personal yearly review on this blog is always a good way for me to reflect on my wins and challenges of the year. But this year’s post is harder to write just cause the whole year has been such a blur. Being mostly locked up at home as the world lives through the second year of a global pandemic has denied me the usual anchors of travels, conferences, and other social activities that I write my narrative around. And while I am thankful that my own immediate family has not been affected too badly, we did have a few deaths in my extended family in India, which was sobering, to say the least. I am hopeful that this ends in 2022 or 23, and that everything we have learned through this crisis, from new ways to work to the advances in virology and vaccination technology can be used for better ends in the future 🤞

I seem to start this writeup every year by talking about how educational the previous year had been working on new technologies at Comcast Labs. This year was no exception though maybe slightly more focused in a domain that I had never worked in before: AI-generated speech. While deepfake technologies have mostly been in the news for the wrong reasons, there is a huge opportunity for useful applications using synthetic video or audio as well. Specifically, I explored the current state of the art in synthetic speech, the differences in the offerings of the various cloud providers and startups in that space, and its applicability to some of the domains I am focused on. We tried a number of open-source Text-to-speech libraries like Mozilla TTS and ESPNet and used them to power a “voice-first” device-setup experience. This year definitely seems to be the year of voice-first platforms, with the explosion in voice platforms like Clubhouse and Twitter Spaces as well as the continued proliferation of voice hardware like Amazon Echo and Google Home. Our prototype was not only educational technically for me but also highlighted the prototypical nature of the current state-of-the-art in Voice UI/UX.

The customer experiences I worked on this year were mostly iOS-based which gave me a good opportunity to really get into SwiftUI this year. After about 5 months of working with it, I am feeling pretty confident with it. I like it though there are some language features in Swift that still make me go cross-eyed. Another part of the iOS stack I had never touched before was their on-device Machine Learning stack, CoreML. I built a fairly simple classifier in CoreML to handle customer responses and it worked pretty well, though I haven’t had the chance to compare it to something like Tensorflow Lite. I also spent a little bit of time with Jetpack Compose (I wrote about that experience here). Between SwiftUI, Jetpack, React, and Flutter, I feel my front-end bingo card is pretty much all checked 🙂

Speaking of Flutter, I shipped my first Flutter-based app to the Google/Apple app stores. The app, Jax, is a JavaScript learning app powered by Flutter on the frontend and a Rails/Firebase combo at the backend. Side apps can take a long time and this one certainly did, having started as a native Android app first, and then a React-Native app, and then finally a Flutter app. I learned a ton about Rails and Firebase through that journey and am really starting to dig the Flutter+Firebase stack for projects.

I continue to run the Comcast Blockchain Guild as well as the Philly Google Developers Group. This was of course the year of NFTs whether you love them or not, and I enjoyed doing some technical explorations in that space. I also got pulled into some very interesting conversations around how the city of Philadelphia could leverage that technology. The fact that the Phila.gov site now has a page up on https://phila.gov/blockchain is a great sign.

As with a lot of technology meetup groups, the pandemic severely shrunk the group that met monthly for the Google Developers’ Group meeting at the Comcast Center. One thing I did start late this year was using Twitter Spaces to host some of our meetings and that has gone off pretty well. We will definitely continue that in 2022 and I am excited about the possibilities of that format.

Otherwise, life has been good. I enjoyed reading a fair bit of books this year including a bunch of graphic novels. I am in the middle of 3 books right now and have half a chance of finishing at least one of them before the year ends in about 24 hours 👋

2021 completed list

Some gotchas when using Firebase Dynamic Links

The last couple of weeks I have been trying to add Firebase Dynamic Links into an app and it took me way longer than I had originally planned. In this post, I wanted to share some of the lessons learned.

First: note that there are 2 kinds of links that you can use:

  1. Dynamic links that you generate on the Dynamic Links section of your Firebase project. These will be the same for every user and are great to link to universally same sections of your app. These are quick to set up and are probably a good idea to try before generating the second kind of deep links
  2. Dynamic links generated by a user for another user on a client application. These would be custom links only relevant for unique users and so cannot be generated via the project dashboard.

In my case, I was trying to get #2 working and it proved to be a real bear.

The problem is that when generating a unique URL, you are essentially doing a couple of handoffs: The first link is managed completely by Firebase (usually with a *.page.link URL). This link checks to see if the app is installed on the device the link is launched on and links to the app-install page if not. If that is fine, the link redirects to the second link that you actually are trying to get to. The second link is often a web address on your own domain which needs to be correctly configured for that page, or else the link will just open that webpage which is probably not what you want to do.

Gotcha 1: [Android] Make sure you have the SHA256 signature saved in your Firebase project

For the longest time, I didn’t realize that I had only the SHA1 key saved in my project. Deep links don’t work without SHA256 values for your project. Thanks to this answer from StackOverflow.

It took me a while to get this document correctly deployed (mostly my fault). I really should have read the documentation on verified site associations on Android more carefully. You can verify your assetlinks setup via this URL (just replace the domain and, if applicable, port values):


Also remember, if you are using Google Play Store to sign and release your app, your assetlinks should refer to their key’s SHA256 signatures. Conveniently, you can copy the assetlinks file from the Play Store itself under the Setup > App Integrity section of the developer console

Gotcha 3: [Android] Make sure “autoverify” attribute in your intent-filter is set to true

Not sure how I missed this but, this took a long time to find

 <intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
     <category android:name="android.intent.category.BROWSABLE" />
          android:host="my.app.com" />


Surprisingly, as frustrating as getting the Android version to work was, the iOS integration was much simpler. Just following this video helped a lot!

Hope some of this info helps you if you are using dynamic links in your app

Hosting Meetups on Twitter Spaces

What Is Twitter Spaces, and Is It Different From Clubhouse?

Like a lot of technical meetup groups, the Philadelphia Google Developer Group that I help manage has been holding its monthly meetings virtually for the last year and a half using Google Meet and (more recently) Bevy. I am really grateful to the community and especially our regulars who are open to attending another video meeting after a day of many others. That said, our attendance is definitely lower than when we used to do in-person meetups. Here are my three top theories why:

  • Zoom fatigue: No secret here.
  • Marketing: Like most developers, we suck at marketing, and it is likely that a lot of people don’t know about our event.
  • Focus: GDG events span a diverse array of technologies, from Android (where we started), to Firebase, Flutter, Google Cloud and Web technologies. It’s hard to build a cohesive community around a diverse set like this. One option might be to have a series of sub-groups under GDG, like GDG-Cloud which exists but also GDG-Flutter, GDG-Android etc. We’ll see.

2021 has seen the explosion of new voice-only social platforms, starting with Clubhouse and including things like Twitter Spaces,  Spotify Greenroom, etc. I have to say I have enjoyed participating in a few of these sessions – there is something less stressful about not having to worry about being on camera or feeling less social by keeping your camera off during an event.

So, in the spirit of exploration, we tried our first GDG meeting as a Twitter Spaces event last month, and I think it went well, though I did learn a few things I hadn’t really thought about before. Below are some learnings from my experience:

Not everyone has Twitter accounts

I pretty much live on Twitter so I didn’t even realize that not all of our members had active Twitter accounts, though in the end, those who didn’t did have inactive accounts that they could resuscitate. I wish Spaces had a guest mode but I guess that would be against the whole reason Twitter has this feature anyway.

It is not an online meeting

Unlike our video conferencing systems like Zoom or Meet which allow for 100 or more simultaneous speakers, Spaces only allows for 10. Spaces isn’t so much about collaboration, more a “narrowcast”: You can have a panel of speakers but most people are supposed to be listening. You can swap speakers in and out as people wish to speak but it’s a very different model than a fully democratic online meeting.

Tooling is pretty good

The management features are pretty good and I was able to mute, boot, and swap speakers as needed but it definitely was some effort on my part.

Sharing information is hard

It is also hard to share links or show something off on your screen. One trick someone mentioned towards the end of the event was to share a Twitter thread with the audience that they can add to share something. It’s a bit of a hack but it works. This is also how I have heard Clubhouse panels share information: on their individual Twitter profiles.


Overall I really enjoyed our first Twitter Spaces event (what is the verb for this?) though it definitely had a bit of a learning curve. And by being a very public event, we did have a few folks join the event that had never attended a GDG event before, which was my primary motivation for the event. We are planning our next Spaces event now, so if you are interested, follow me or the GDG Philadelphia Twitter account for the announcement.


Mark Zuckerberg's avatar presenting the metaverse at an event Thursday.

The first time I really understood Mark Zuckerberg’s ambition was when he announced Facebook login. I had been developing prototypes on the Facebook platform for a bit but the idea that Facebook would scale its infrastructure to support login buttons and the friend graph everywhere on the internet blew my mind.

Whatever you may want to accuse Mark Zuckerberg of, lack of ambition cannot be one of them. And he pairs that with an uncanny ability to be right in the long term while being ridiculed by folks steeped in the conventional wisdom of the time (Instagram for a billion? WhatsApp for 18B?)

So I am mulling over Facebook’s pivot to the Metaverse pretty carefully. While I am excited about the possibility of the Metaverse, and having previously worked with VR for a couple of years, do find it a lot of fun, I am not convinced of Facebook’s current idea of the Metaverse in general or Horizon in particular.

Metaverse, metaverse and Horizon

So there are 3 ideas that often get intertwined in my head:

  • The metaverse (lowercase m) – A realm that merged digital and physical as originally defined by Neal Stephenson and imagined by a lot of technology pioneers since.
  • The Metaverse – As imagined by Meta: a constellation of VR specific apps that people will jump around. Guess we can call it the Meta-Metaverse, not confusing at all
  • Horizon – a VR social app. Horizon is also feels like a metaverse … that lives inside a larger Metaverse? Kinda like Facebook on the internet, or it would be if only Facebook could allow what pages could go on the real internet.


My primary gripe with the larger Meta-Metaverse is the app model. The iPhone, when it launched, launched with a lot of content: the entire internet. One of the biggest joys of owning the original iPhone was the ability to use the web, not a neutered mobile-centric version. Over time, native apps supplanted web experiences by delivering more dedicated versions of the experience, but that came afterwards.

The problem with going app-first is that it is hard given the current SDKs and workflows. And while WebVR kinda helps, there are very few tools that let novices design good VR experiences. This makes making VR apps expensive and since the only apps that make money on VR currently are games, VR starts feeling more like a game console than a smartphone.

Meta’s primary goal needs to be to figure out a way to bring the web into VR.

Of course, the challenge is that the web isn’t really designed for VR, just as the 2006 internet wasn’t really designed for mobile users. But you gotta pull a page out of Apple’s book and create UI elements around those limitations. Just as the iPhone replaced the combo box with the iconic tumbler wheel.

iOS 5 Safari Now Has Native HTML5 Date and Time Pickers - Smiths R Us
iOS’s iPhone optimized native controls for the web

Oculus should supply a whole range of controls that replace web elements and offer opportunities to interact with content in a VR-specific way, for example:

  • Create a VR specific form controls that replace on-page controls like combo-boxes, text inputs, date-fields etc. Not just functional but fun to use.
  • Convert on-page text to speech
  • Open image carousels automatically
  • Make embedded video that you can control (i.e not YouTube embeds…unless you can) open in the virtual theater experience. Fill the virtual theater with others who are watching the video at the same time
  • Allow web developers to control the above aspects via html meta-tags

etc etc…

Basically do everything to break outside the 2d window that current VR browsers offer. I think there is a lot of experiments that can be done there.


The primary challenge to Horizon I feel is the synchronous nature of it (at least as shown by the demos shared so far).

Facebook social experiences that became huge were asynchronous. Words with Friends for example was an async version of Scrabble. Farmville didn’t require all your friends to be online at the same time. Most of my social experiences today are async.

By contrast, Horizon experiences seem to require everyone to be online and dedicated to the experience (i.e not multitasking) at the same time. The success here would depend on really killer experiences and/or a big leap in VR multi-tasking capabilities, both technically (i.e being able to run many apps at the same time) and experientially.

We don’t know much about Horizon yet, so I’ll end with my feeling that Horizon feels very reminiscent of the web portals where you could interact with a few dedicated experiences. In the long run, that isn’t what is going to win.

… guess we’ll see…

I think it’s interesting to realize that I am now much older than when I first got on Facebook and might be lacking the less-critical optimism that you need in the early days of any technology. But, like most geeks I guess, I have always enjoyed the idea of a metaverse. I just think it needs to be a very different thing than currently being imagined.

Or I could be wrong and will be eating these words in 5 years or so ⏰

Slides from my PHLAI Talk

Last week I was invited to give a talk at the PHLAI conference on the intersection of Blockchains and Machine Learning, 2 areas I have been working with a fair bit in the last couple of years. My hope with the talk was to get more AI practitioners interested in the Blockchain space, which I feel perfectly complements the AI space by providing a layer of trust on black-box AI systems.

Powerpoint presentations do not make good blog posts, so I’ll elaborate on some of the ideas in the future, but here is my deck from the presentation for now