Last week I attended the third meetup by Philadelphia Forecasting Meetup Network on Prediction Markets. I have never played in the prediction markets before, and have no intention to anytime soon, but I have been fascinated by the idea ever since I saw them cropping up in the blockchain space when I was still active there.
Prediction markets take 2 ideas I am personally find challenging: making long term predictions, and making decisions based on your theses. I have read a ton of literature on both these domains but have never been the person who revels in the ambiguity of the space.
The event was fascinating- for one thing I have rarely been in a room with people whose entire careers are based on making predictions – traders, professional poker players, startup founders providing data to prediction markets, app makers, etc. I definitely felt a little bit of an outsider there.
The talk was interesting walking through the history of prediction markets, the challenges of calling the bet in favor of one side or another, when data can be ambiguous (like when governments are closed but not officially reported closed by agencies like the OMB refuse to publish that information, or when dates are involved and the official action is recorded days after the action was executed), and the potential future of prediction markets.
I had not realized that early prediction markets, like The Iowa Electronic Markets (IEM) that began in 1988, were academic efforts that wanted to test whether market mechanisms could aggregate dispersed information better than traditional methods like polling or expert opinion. The early markets also limited the size of the bets which made them better signals than today where people can take out big contracts and then manipulate the markets to win big.
The talk ended with conversations around the future of these markets which will probably be more regulated and how that could be a good thing. The example the speaker gave was interesting: in a more recognized market could airlines hedge their fuel risks via bets on when the Strait of Hormuz would open? Interesting to think about.
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:
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?)
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.
Meta-Metaverse
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’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.
Horizon
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 β°
NFTs have been a lot in the news lately, jolted into mainstream spotlight by Beeple’s $69M sale of his NFT art piece called the first The First 5000 Days. As with most things crypto, there are as many passionate believers as there are skeptics of this new model for digital collectables. Regardless, from a purely technical level, I have been fascinated by digital collectables for a while (ever since CryptoKitties broke the Ethereum Blockchain) and have been trying to learn more about the technical underpinnings for the last couple of weeks.
A16Z, the venture capital firm, has been a great source for information on the whole crypto space for a while and organized an online summit this afternoon bringing in some big names in the field to speak about the state of the NFT space. Below are some of my takeaways from the event
Dan Boneh from Stanford University and Chris Dixon from A16Z kicked off the event with a fireside discussion on the state of the NFT space in general. Some interesting points of discussion included:
How one of the big reasons that Decentralized Finance (DeFi) exploded was because of the composable nature of Blockchain finance primitives. NFTs could offer similar capabilities. For example, you could wrap non-fungible ERC-721 tokens in fungible ERC-20 wrappers.
How we are already starting to see NFTs be used as collateral just as other assets tend to be
Could Quantum Compute destroy Blockchains and therefore the NFT value (nope, we have quantum resistant algorithms which we can move to as QC attacks start becoming more probable)
On NFT Marketplaces
It was fascinating to hear Kayvon Tehranian from Foundation and Devin Finzer from OpenSea talk about their NFT marketplaces. I missed a big part of the latter’s talk but I have been really curious about how Foundation works and it was great to hear a bit about that.
Every action on Foundation (listings, bids, etc) are recorded on the Blockchain and the asset itself is stored in IPFS. The system only works with non-custodial wallets (sorry Coinbase)
While technically it is possible for someone to upload an asset that they don’t own, Foundation manages this a bit by a pretty exclusive invite process with only current artists being able to invite new artists (which does feel a bit centralized IMO)
Since everything is managed in a decentralized way, it is theoretically possible to buy an asset from Foundation and sell on a different marketplace
The Nyan Cat NFT sold on Foundation by its original creator
Dieter Shirley and the Flow Blockchain
This may have been my favorite session since I am already interested in Flow. Dieter Shirley is the CEO of Dapper Labs but really got famous when he and his team built CryptoKitties while still working at Axiom Zen. Flow is a new blockchain designed for applications, not financial instruments and is famous for running the NBA Top Shot NFT
Flow’s architecture is driven by 3 goals:
Enabling building tangible products
Simple on-boarding for non-crypto-nerds
Higher capacity to enable web-scale products
He also talked about the decision to build their own chain instead of using Ethereum (“wasn’t easy”), though he does feel that interop with other chains is going to happen among different chains anyway.
On his one regret with the ERC-721 specification that he drafted, he wishes they hadn’t punted on the metadata specification for ERC-721 tokens (“it was a classic bikeshedding moment and there were too many people with too many opinions”).
On the challenges he sees with NFTs in general, he feels legitimacy of the NFT, the challenge of balancing scarcity and abundance and the challenge of interacting with the traditional financial system will remain the big challenges for the near future.
DAOs and NFTs
The last talk of the evening was by digital artist pplpleasr who talked a little bit about her process for NFTs but then mostly talked about the birth of the PleasrDAO, a Decentralized Autonomous Organization that was formed organically to acquire her Uniswap NFT and now exists as a community that buys other NFTs and leverages their assets to power socially conscious projects on the Blockchain. Her talk ended with her revealing her new NFT titled “Apes Together Strong”, with all proceeds going towards charities supporting autism advocacy.
Apes Together Strong by pplpleasr
I love the idea of DAOs and the talk, as well as the sentiment on her slide below, was the perfect talk to end on
Between a global pandemic and a shocking display of the ugliest parts of human characteristics, 2020 will go down as one of the worst years to be around. Compared to some of the other heartbreaking stories I keep reading, my family and I were lucky to only be inconvenienced and not devastated by everything that happened in 2020.
The tl;dr version of this post is: ‘I got MARRIED π± … and, yeah, I wrote some code’
Married
After way too long, Dana and I finally got married. The pandemic ruined our more elaborate plans, but we had drawn on the engagement for too long already and all our travel plans are at a halt for a while, so having a small ceremony at my sister-in-law’s backyard seemed like a good idea. We live-streamed most of it on a (non-interactive) Zoom and a (interactive) Google Meet virtual meeting so we did get a big audience for the event. I wish my parents had been able to join us physically but we’ll do some kind of IRL party when we go to India whenever the world feels safer.
Code
One of the interesting parts about working at Comcast Labs is that you get to work on a number of projects using very different technologies. In previous years it has been a healthy mix of VR/Blockchains/Chatbots/Machine Learning etc. In terms of domain, this year was a lot more focused. Most of my explorations were in the space of Customer Experience Bots, and efforts to improve the Xfinity Assistant, coming at it from a lens of 3-5 years out. Over the year I built a Knowledge Graph editor using Grakn, explored the use of Structured Data, esp Microdata, within chatbots and worked on adding more intelligence to the edge (i.e. Mobile Apps) to power the diagnostic flows.
I also enjoyed working on some personal mobile apps using Flutter, Ruby on Rails and Firebase. I am blown away by the capabilities of Firebase and hope to share some learnings on that on this blog soon.
Here is a very unscientific quantitative breakdown on what I spent my time on this year
The one thing that is conspicuously missing here is Blockchains. While I still help run the Comcast Blockchain and Decentralized Technologies Guild, I didn’t get to spend any actual coding time on it in 2020. Here is hoping for 2021 π€
Community
The Google Developers’ Group that I help run went virtual this year, like every other Meetup (I wrote a bit about that earlier). I miss hanging out in person with the friends I have made there but thanks to Google Meet and Slack, we are still alive and kicking.
The one change this year was a lot more interactions with the Google Cloud teams as well as GDG-Cloud Philly. With my own interest in Cloud Services growing, the joint sessions with the other two groups were definitely super interesting.
Books
This hasn’t been the greatest years in terms of reading, but that is a good thing, since my focus was more on producing and given the time limitations, something had to give.
2021 is starting off on some positive notes so I hope its a better year in general. Have a great 2021 π
Yesterday I attended the L3 AI online conference on digital assistants organized by RASA. I am still working on the notes from that conference that I’ll share here at some point but I was really pleasantly surprised by the format of the conference. While the current pandemic has forced a lot of conferences to go online, most have just become Zoom calls and honestly are exhausting for more than an hour. I actually attended the conference for the whole day yesterday and it was the best online conference format I have seen so far.
The conference was powered by Accelevents, so good job folks, though I am sure they have competition in that space. I have also heard of good things for Run the World (actually, I haven’t. The only thing I have heard of them is on their investment with a16z π. But the features listed on their site look interesting).
So here are some thoughts on my experience with L3
Pre-Conference
Both Accelevents and Run the World allow users to create a profile ahead of time. This lets users reach out to others who may share the same interests during the event or when they are algorithmically paired (see below). RTW lets you create video profiles as well, which is cool
Socializing
Connecting to others is probably the most important part of a conference (most session videos end up online anyway). The Zoom experience is to just have as many videos of people as possible. That doesn’t really work since only one person can talk at the same time and a number of people are either multi-tasking or feel otherwise hesitant to share their video
The L3 conference page had a link to socialize which would randomly pair you with another attendee. I didn’t use it but mostly because there wasn’t much between sessions during the day. Instead of one-on-ones, I would have liked small groups that I could be joined with which would have felt a little less intense.
Prerecorded Scheduled Sessions
Most of the talks were just prerecorded sessions with the speaker and other attendees discussing the talks in a chat window next to the video player. The sessions unlocked at different times, so it did feel a bit like a conference track.
The advantage of the prerecordings was that
You could pause and rewind the sessions right there if you missed something
The video-audio quality of the sessions was good (none of the “can you hear me now” moments).
Some presenters had even done some post-production work on their videos which was nice
The event page included a video page and a side panel that included tabs for chat, polls, attendees and questions. As with a lot of tabbed interfaces, the out-of-sight / out-of-mind thing happened and I never looked at the non-default (chat) tabs.
Unlike video, chat allows for many people to talk to each other at the same time which is better I think. So I was able to see some interesting discussions between the attendees on various topics.
Expo
An interesting aspect of the conference was a virtual expo tab where every company that was sharing their products could have people available for a Zoom video chat (yeah, they were using Zoom which I didn’t know could be embedded in a webpage). That was neat.
Final thoughts
I really got a lot out of this conference and enjoyed the format. With a lot of conversations going on right now on how virtual conferences could be more like real ones, I think we should also think about how they could be better than the real thing. For one thing, your audience can be a lot bigger, more diverse and inclusive.
There is also a lot of innovation going on right now in the chat experience in general (emojis, virtual gifts, etc) that could make text chat more lively as well.
There needs to be a new middle ground between video and text chats (maybe digital avatars?). I like looking at people’s faces but I also understand the multi-tasking thing when in front of a laptop. VR chat rooms get across a lot of feeling of presence by just using eyes for example.
I enjoyed the timed sessions, though I struggled to attend any of them totally in sync with their start times as there was a lot of stuff happening at home (work emails, etc).
I am really curious where the virtual conference ideas go from here. At the Philly GDG which I help run, we have transitioned our events to Zoom events and were planning to do the same thing for future “conferences” (like DevFest etc), but this has given me a lot to think about.
If you have other ideas about the opportunities here, drop in a comment below π
For the last few years I have been thinking quite a bit about how we enable more people to learn programming. As an industry, we need more programmers universally and there seems to be a huge number of people who would want to come in. Unfortunately though we can’t seem to connect the 2 sides of this equation effectively.
Specifically I have been thinking about learning curves. Until recently I believed learning curves to follow a close-to-linear relationship with time. You learn a little bit at the beginning and are work on simple ideas and learn more and more as time goes by.
This seems to be codified in most programming books too, which introduce simple ideas at the beginning and then move towards more complex ideas
However, lately I feel a more honest representation of this learning curve we expect a newcomer to master would look something like this.
The initial hump in that graph represents a mountain of complexity that junior programmers are immediately handed before they can do anything with code. A lot of times this hump represents meta-work: things that are not core to the technology but elements like build systems or frameworks for testability, coding standards, etc
Take JavaScript for example. A “Hello world” JavaScript experience requires you to either start coding the way the industry strongly dislikes, the old fashioned way with script tags and vanilla JS, or learn the complexity of modules, package managers, build systems etc.
Same goes for mobile app development. For example if you are looking to make your first Android app, a brand new Android project using the Android Studio wizard drops you into a mess of Gradle, Java, Kotlin and XML files.
Tools like XCode and Android Studio also are extremely complicated for any beginner to use, with a ton of panels and tools to tap on without knowing what they do. Ironically, most of the teams building these tools have User Experience professionals on them and yet the ideas of progressive disclosure and first run experience, that as an industry we keep touting for our end user apps, are never considered.
Technology Complexity Cycle
Reflecting on my own learning-programming experience and talking about this with a few other people, I realize that another thing that got me into programming was also working on a technology (Flash) that wasn’t as mature.
When I started playing with Flash, it was back in the Flash-4 days with a very simple programming model where most of the code was written in small scripts attached to the timeline that just controlled the position of the animation playhead. My learning-to-code experience happened almost in-sync with the addition of complexity to Flash. Towards the last part of my experience with Flash, it had gotten complex enough with ActionScript3 and the need to become a “real” programming platform that it started to lose people.
I feel this happens a lot. Early versions of a programming platform are simple and functional and then, if it gathers attention of the “serious” programmers, way too much complexity gets added. This complexity makes the technology a daunting beast to new entrants.
The point is …
I had a couple of thoughts for new programmers that became the primary motivation for this post:
Survive the initial hump: Getting started with learning programming is a lot harder in the beginning so stick with it. It does get easier as you cross the initial hump of tools and meta-work that goes into starting a project and very rarely revisited once the project is in active development
Play with emerging technologies: Emerging technologies don’t often have a lot of initial hump as tooling and other meta-work hasn’t been invented yet. Technologies like WebVR, Blockchains, Flutter etc are great candidates to play with now and grow your skills as the technology matures.
And for those of us who have been in this industry for a while and may have the power to influence tooling and/or methodologies of how code is written, lets endeavor to make these more welcoming to folks with different levels of experience with tech.
And we have a good one lined up with some of the biggest tech leaders in Philly on a panel on managing your career as a technologist. If you are a developer or are looking to become one, you should definitely sign up.
For me it’s certainly a time for some celebration and reflection. Corey and I started Philly GDG, or rather its previous incarnation, AndroidPhilly, in 2011 when both of us had just about started working on Android and realized there wasn’t a local community where we could learn from each other. And considering how minimal technical documentation and user experience guidelines were back then, a local community was sorely needed. The group transitioned to an official GDG at some point which meant we got a lot more support from Google in terms of speakers and schwag.
Thinking back, there are a lot of things that worked well. The consistency of the day (last Wed of every month) and location (Comcast Center) every month definitely was a good idea and built up a monthly habit for the regular members. Comcast was great about sponsoring this event every month since itβs inception, and my managers, former and current, were very supportive of letting me run this. Other companies in Philly have been fantastic supporters as well including Promptworks, Chariot, Candidate and others who have hosted or supported us with food and beverages over time.
We are also a better balanced community as far as gender goes with more women participation than a lot of other communities. A lot of credit there goes to Corey for leading the outreach in early days, and always making sure we had women as part of the leads. Itβs something the current leads, Yash, John and Ruthie, continue to champion.
There have also always been a lot of challenges, some similar to those faced by other groups while others unique to our own. Sourcing speakers every month is hard, specially when your community is much smaller than those in cities like SF and NY. Creating a channel for the community to keep the conversation going has also been challenging with Slack becoming a defacto communities platform that doesn’t really work if you aren’t paying for it (I am starting to look at other platforms like Discord, but a lot of people may not be willing to install another app). Trying to balance the level of talks has also been a concern: we want to have intro level talks to bring new people in but also more advanced sessions for folks who have been coming here for a while. If you have ideas on any of these, I am all ears.
I made a lot of friends thanks to our group. From other past (Corey, Chuck, Dallas) and present (Yash, John, Ruthie and Kenny) fellow organizers who helped run this group to regular members who have been attending our monthly meetup for years.
Hanging out with past and present Philly GDG leads at Google IO 2018
I am looking forward to how the group evolves going forward. In the meanwhile, if you are in the neighborhood, join us for our π100th event. It promises to be a great one
I spent the whole day today working with Strings being sent between a JavaScript serverside app and a Dart clientside app. As an industry we have been doing this forever, so you’d think it’d be easy but then along came emojis to muck up my day π€¬
Instead of writing my own primer on Strings here (and doing a bad job), let me just link to Joel Spolsky’s excellent post on the subject
This really old post still does a great job of bringing us up to speed to the Unicode world we live in today. And then came Emojis
There are numerous posts of the pain of dealing with Emojis whenever you have to because it does screwy things like combining neighboring characters to form a single emoji. This means that the length of a string, if it is just a measure of the unicode CodePoints used is different from what you would count on the screen.
Which brings me to today. I am playing around with moving a client/server app from JavaScript everywhere to JavaScript server and a Dart client app. In the previous iteration, strings that needed to be sent had special characters that needed to be escaped and sent across: no problem. JavaScript’s escape/unescape worked pretty well.
Moving to Dart though was a challenge, because there is no escape/unescape method. Turns out escape/unescape is best avoided anyway, and encodeURI/decodeURI is a better option. Dart has a decodeFull method on the Uri class that does the job pretty well.
Except that the characters in the list also included emojis and Dart’s Uri class doesn’t work with anything more than UTF-8 characters and crashes when encountering strings with emojis that are just ‘escaped’. This, as it turns out, is as per spec and all those fancy emoji domains that I thought used Unicode in the URI, use a different idea around Internationalized Resource Identifiers and Punycode. Thankfully passing in a URI encoded string with emojis seems to work fine and emojis come out πon the other side of the decode process.
While this seemed to work at that point, passing the decoded string to my Yaml loader crashes the app again (is Yaml supposed to be restricted to Ascii/Utf-8 ? ). But that is a problem for a different day.
For now, I have decided to just convert emojis to shortcodes for the transit and remap them to emojis on the other side. Its not pretty but it works.
Oh and in the meanwhile, if you want to know how to loop through a String with emojis in Dart, you can do that by looking through the Runes in a String:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters