The latest project I am working on requires us to set up a number of cloud services on AWS. While I have some experience doing that on Google Cloud Platform, the AWS system and tooling are a learning experience.
This week we are setting up a number of AWS Lambdas. We are trying to do this right from day one by enabling unit/integration tests and automated build systems from the start. We also made the choice to start immediately with TypeScript rather than migrate to it over time as we have done in other projects.
I tried using the AWS SAM CLI for creating the Lambdas today. There were a couple of hiccups that I wanted to share here.
1. Typescript templates are only available in ZIP-based deployments
I was glad to see that the SAM CLI allowed for the creation of TypeScript based projects out of the box. What took me a long time to realize was that the TypeScript templates only appear as options if you use the ZIP-based package type. I tried various combinations of node versions, etc before trying the zip based option which finally worked. There are also way too many tutorials on the web that start you out with a JS based project and then you add a number of config changes to migrate to TS which is a pain.
2. Colima-based hiccups
Most of the tutorials I found using SAM required you to use Docker Desktop, which unfortunately is no longer an option at work given their new licensing terms.
Thankfully this gist helped set up a local environment using Colima that seemed to work at first.
The only problem was that trying to test the code locally did not work as the local connections to the container would timeout without being able to connect. This turned out to be caused by Colima not enabling reachable IP addresses by default for performance reasons. Restarting Colima with colima start --network-address fixed this but I only discovered this after a couple of hours of banging my head against the computer.
Ah well, things are working right now and I need to get home 👋
This week the GDG-Philadelphia group that I manage collaborated with the Philly Cocoa group to run our first in-person event since Covid. The number of folks who showed up was much higher than I thought they would, I think everyone just really wanted to meet each other IRL again.
The developer meetups in the city have unfortunately not re-emerged from Covid as much and I am hoping they do. I am hopeful that more such events start happening again.
Thanks to Kotaro for leading so much of the organization effort for this event, and to Comcast Labs and the Lift Labs group for sponsoring the space and food.
I spent most of last week in Denver attending EthDenver 2023, one of the biggest Ethereum-centric conferences in North America. This was my first EthDenver event (first of many I hope) and I wasn’t sure what to expect given the roller coaster that almost seems a constant in this domain. That said, the five days I spent there were a great way to get a glimpse into various projects and themes in play in that ecosystem. This post covers some of the projects and ideas I saw there.
A multi-chain future
I attended Axelar’s mini-summit on interoperability which was very interesting. The tl;dr of various panel discussions was that while we might have our L1 or L2 chains of choice, we are living in a multi-chain world, and interesting applications will appear in a lot of different chains. That said, at least so far, Ethereum remains the main chain of choice acting as a hub with spokes out to various other chains. There were also some interesting discussions on the safety of bridges that connect various chains and which have been in the news a number of times for getting hacked. I am not sure knowledgable about a lot of the chains that were mentioned but found the discussions fascinating and would like some time to explore Axelar, Polkadot and Cosmos.
The Social Web3
I ended up attending various sessions on Web3 based social platforms, and there were a lot of those around. The ones I did find most interesting included Huddle01 (Web3 based Zoom), Sending.me (Web3 based Discord), and Dispatch, a company building NFT based shopping tools as well as “engagement NFTs” that encode interactive experiences like polls etc. More interesting though was learning about a number of emerging protocols for Web3 based communication like DMTP, XMTP and Lens. I am really curious about Lens as it comes from the company behind the successful Aave protocol and has some very interesting primitives, like using NFTs to define user connections which I do think is kinda interesting.
Incentive Design and Economics
Thanks to my friend Mike Mccoy at the CryptoEconLab, I was able to attend their day long mini-summit on cryptoeconomics. I’d say I understood maybe 40% of the ideas shared here, but the talks were very good. I specially enjoyed the session on Protocol Gas Dynamics and MEV, Quadratic Funding by GitCoin and on NFT Auction Design by Tarun Chitra. You can find all the talks at the event on their YouTube channel
There were a lot of sessions on privacy and zero-knowledge proofs. Not surprising since privacy is a big deal these days and ZK technology seems a promising space.
There were more new wallet startups I saw at the event than I was expecting. MetaMask remains the big name there and their announcement about Snaps, their extension framework, was awesome, but it was interesting to see a number of wallet providers focusing on user experience.
Unity’s announcement about their partnerships with a number of major Web3 platforms happened around EthDenver. Hopefully this results in some compelling Web3 games and not just standard games with Web3 bolted on
Although announced last year, I only heard of Instagram’s new age verification tests this morning. In order to verify that you are above 18, Instagram will require users to choose one of the three methods of verification: a government-issued ID, a video selfie that an AI tool can then review, or a social vouching system where three of your followers can confirm you are over 18.
Social Vouching: This option allows you to ask mutual followers to confirm how old you are. The person vouching must be at least 18 years old, must not be vouching for anyone else at that time and will need to meet other safeguards we have in place. The three people you select to vouch for you will receive a request to confirm your age and will need to respond within three days.
The social vouching system to me is the most interesting, especially since I have been noodling over the idea of decentralized identity and verifications for a while. The system closely resembles the idea of Solidarity Lending which I first heard about when I read about Mohammad Yunus‘s Nobel Prize-winning work with the Grameen Bank.
Web3 applications take this a step further with “M-of-N” (multisig) transactions where the “N” is the pre-defined community of individuals that collectively decide on how transactions should be carried out.
Multisig transactions are also referred to as M-of-N transactions, with M being the required number of signatures or keys and N being the total number of signatures or keys involved in the transaction.
The idea of a collective making confirming a claim is a core principle of decentralized systems and it is encouraging to see it starting to emerge in mainstream applications. Could we ever make a sign-up/sign-in system based on collective claims as mainstream and the cryptic oAuth flows we have today with singular entities verifying claims? Here’s hoping 🤞 !
One of my most memorable/educational meetups was one by Philly.rb on audit logging. Audit logs record the occurrence of an event, the time at which it occurred, and any other useful data. The insight I remember from that talk was that audit logs are generated by creating a record for every change event in a new table. For example, your project may have a model User and a model ChangeOperation (usually generated by some library) and every time any data on the user model is changed, a new ChangeOperation instance is created and persisted in the database. You can later view all the ChangeOperation s the User model has gone through.
I am at EthDenver this week and it’s been great. There are some really interesting new projects using NFTs in a number of new ways. A typical NFT is such a simple idea that it is very amenable to representing different properties of a product. The Lens Protocol is one such interesting project that wants to represent social graphs on the blockchain. Like a few other social-network-on-the-chain projects, Lens uses NFTs to represent user identities.
Where Lens does something interesting though is representing verbs like “following” as an NFT. From their documentation:
Profile NFTs contain a FollowModule. This module contains the logic that allows different accounts to be issued Follow NFTs to record their relationship to the main profile on-chain.
Extracting the follow action to its own smart contract is an interesting move and allows you to create all sorts of various kinds of follows like “create a follow NFT only if the user has this other NFT” or “create a follow NFT if they pay a certain amount” (basically premium follows).
Definitely an interesting idea and something I need to dive into a bit more.
It’s almost mid-February, so I am pretty late with this, but better late than never I guess. I do enjoy writing my yearly retrospectives (you can see my previous ones here) since they give me an opportunity to pause for a second and reflect on the work done, something I usually don’t do as I am always running to the next thing I want to work on.
Web3 and NFTs
My retrospectives for the last few years have begun with the myriad of technologies I have learned that year, from VR/AR, to chatbots and Machine Learning. This year was a bit different though. I finally got to pursue a technology that I have been passionate about for a long time (and have written about a number of times previously) but have had a hard time finding a project relevant to my company: Blockchain and Web3.
In 2022 I spent most of my time developing and pitching a Web3 idea that resonated well internally. I am really excited that the effort is ramping up in 2023. The Web3 space is a curious one and is often a target for ridicule but the potential for creating experiences where end users are not just passive consumers but active participants in the evolution of an experience is pretty exciting. I wrote some of my thoughts on why NFTs are an exciting space and worthy of a second look, but even if it doesn’t immediately convert you into a believer, at least be aware that a lot of very smart people are working with more noble goals than get-rich-quick schemes.
My role has often been at the early stage of products that then ramps up to a full production team. This year I did quite a bit of that as well, ramping up the UI team for a soon-to-be-announced product. The role involved helping migrate an internal prototype to production quality code as well as hiring a team that would take it forward.
While I have interviewed candidates for small teams before, this was for a larger team with folks being hired for roles at various levels. I am pretty proud of the team we finally built but I do want to grow my own internal framework for assessing engineers and managers.
I have seen 2 approaches to hiring:
Have a loose idea of the skills you are hiring for and then find the candidates that are close to those. If the matches aren’t close, still hire for the skills you find.
Have a very exact idea of what you are looking for and seek out those who match that very strictly
Most approaches fall somewhere in the middle of those 2 extremes but sometimes we lean too heavily on #1, especially when we are in a rush to hire candidates. One approach I found useful was to explicitly list the technical and cultural skills I was looking for in an Airtable table, develop a set of questions that would reveal those ahead of time, and use the table to explicitly score the candidates. It worked well for the most part but I have a lot more to learn myself in that role.
An interesting approach at work is that higher-order UI components are now being built by a team reporting to the design/UX leadership. This has made the components very faithful to the visual design patterns that the UX team imagines, though I do think there are optimizations at the performance level that need to happen since we do hit weird jank issues on some of the devices we work with.
LUI is focused on TV-based experiences but might be fun to try some mobile/desktop-optimized apps/games that don’t need the native UI frameworks.
In my off-time, I still enjoy working in Flutter. This year’s fun side project was a grocery-tracking app I named Grocery Timer. GT has not revolutionized the world of grocery management but has still been a fun playground to try different UIs for a surprisingly complicated problem space. Keeping things simple so that data entry isn’t a chore while still providing value and the right reminders has been a challenge. That said, I personally find the app very useful and so its relative obscurity on the app stores doesn’t hurt too much 🙂
Didn’t do as much reading as usual this year but did find some very good reads, specially Loonshots and The Courage to be Disliked. Highly recommended. I am also rediscovering the joy of graphic novels and YouTube channels, especially For the love of Comics, has been a great source of great recommndations.
I didn’t write as much in 2022, at least not publically, but that is one of my resolutions for 2023. Stay tuned 📻
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.
Collaboration 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
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:
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?)
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
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.
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:
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
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
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
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.
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