I won one of Phildelphia Business Journal’s 10 “Tech Disruptors for 2017” awards

They say don’t bury the lede but I just gave it away in the title ;). Phildelphia Business Journal comes up with a list of 10 Tech Disruptors every year who are “blazing new trails and inspiring others in the technology community”. I am one of the 10 for this year, and in extremely smart company of local CEOs, CTOs and Founders.

phl

Thanks for the honor @PHLBizJournal. Its great to see your name in the paper (well for the right reasons 😉 )

The return of the QR code

Over the last few years I have found myself defending QR codes in different conversations. While huge in the rest of the world, QR codes were never embraced in the west. Aesthetics was one that I had heard multiple times (“They are so ugly”) but they solved a real problem: bridging the offline world with the online one.

For whatever reason, neither Apple nor Google devices ship with a default QR code reader. Apple’s default camera app has some image recognition built in which lets you scan iTunes gift cards, but neither Apple nor (more surprisingly) Google showed any interest in QR codes. (Update: Apple added QR support for the default camera app in iOS 11)

But QR codes have snuck up in our society in the last few years. Some of these aren’t normal QR codes and maybe deserve their own label (scan codes?) but the idea remains the same: a graphic that codifies text that a scanner (camera) can read from a distance.

  • Snapchat popularized the idea with their Snapcodes that let users add other Snapchat users as friends.
  • Twitter, Kik, Facebook Messenger and Google Allo followed and now scanning a code to initiate a connection is starting to become normal.

Screen Shot 2017-05-13 at 11.50.37 AM

Today, at F8, Facebook’s big developer event, they announced that Messenger will now support their scan-code, what they call Parametric Codes, which you’ll be able to use to do all sorts of things from friending to payments (offline payments via scan-codes is a big deal in China, where Messenger is taking a lot of its feature development cues from).

As happy as I am to see the return of these codes, the proprietary nature of each of them is a little bit of a bummer, but hopefully they will make the idea of scanning a code to connect with the real world more mainstream.

Update:

YCombinator Blog has a very interesting article on the rise of WeChat, but this section on QR codes is especially interesting

WeChat’s elevation of the QR code as a link from the offline became the lynchpin for China’s online-to-offline boom in 2015. Previously, to engage with a service or brand, a user would have to search or enter a website address. WeChat’s Pony Ma says of QR codes, “it is a label of abundant online information attached to the offline world”. This logic explains why WeChat chose to promote QR codes in the first place. QR codes never took off in the U.S. for three key reasons: (1) the #1 phone and the #1 social app didn’t allow you to scan QR codes. (2) Because of this, people had to download dedicated scanner apps, and then the QR code would take them to a mobile website, which is arguably more cumbersome than simply typing in the URL or searching for the brand on social media. (3) Early use cases focused on low-value, marketing related content and at times was merely spam. So, even though QR codes would’ve been U.S. marketers’ dream, it was a few steps too far to be useful.

With the established adoption of QR codes, WeChat launched “Mini Programs” as an extension of WeChat Official Accounts designed to enable users to access services in a more frictionless way just like the web browser did

Serving multiple ReactJS apps with Express

I am currently working on a web portal for showcasing our teams’ different projects, white-papers and reports. Given the limited scope of the project, we thought it might be a good idea to try it with a full JavaScript stack of  MongoDB, Express and ReactJS.

Since the site needed both a user facing portal and an admin portal, we started building both of those in parallel but as separate projects. The goal was to keep the admin portal independent of the actual site itself. The pages on the site are also more or less completely defined in JSON schemas so it could be reused in the future if we ever wanted to use it for a different project or release it as an open source project.

The Create-React-App library from Facebook was really useful for a pretty painless start to the projects.

Proxying calls to the API

The first issue I ran into was accessing Express that was running on a different port (3000) than Create-React-App’s development server (3001). Since the browser considered these two different sites, browser security wouldn’t let be make API calls to the server from the client. Figuring it was a problem for later, I just allowed the dev server to handle CORS requests using something like:

app.use(function(req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*"); next(); 
});

This worked for all GET requests but completely failed when I tried to POST JSON from the client. Turns out when sending JSON, the browser pre-flights the POST request with an OPTIONS request that I was not handling at all. As found in the MDN docs:

The [CORS] specification mandates that browsers "preflight" 
the request, soliciting supported methods from the server with an 
HTTP OPTIONS request method, and then, upon "approval" from the server, 
sending the actual request with the actual HTTP request method.

Turns out, all the headache was for nothing. Create-React-Apps allows you to proxy calls to a dev server by adding a proxy line in your package.json

"proxy": "http://localhost:3000/",

Packaging React Apps for different server paths

Another issue was that Create-React-Apps by default assumes the final built app will be served from the root of the server. It took a bit of finding out that the it does allow you to set the folder path for your app on the server using the homepage field in the package.json:

"homepage": "http://localhost:3000/admin",

Allowing Express to serve multiple React Apps

Finally as we tried to deploy the front end and the admin app, we ran into another issue. Since Express needed to serve front-end from the server root, admin from the /admin/ path and also a bunch of different api responses from /api urls, we had to do a bit of trial and error to get the pathing for the resources right. Our final response paths for the Express app look like this:

// API end points defined first
app.get("/api/projects",  (req, res)=>{})
app.post("/api/project",  (req, res)=>{})

// Admin paths
app.use('/admin/', express.static(path.join(__dirname, 'admin')))
app.get('/admin/*', function (req, res) {
 res.sendFile(path.join(__dirname, './admin', 'index.html'));
});

// Site path
app.use('/', express.static(path.join(__dirname, 'front-end')))
app.get('/*', function (req, res) {
 res.sendFile(path.join(__dirname, 'front-end', 'index.html'));
});

This is still work in progress and I am sure a lot more learnings will come going forward, but at right now, with the first version of the site deployed to our dev server, I am gonna get a well earned beer 🙂

 

Remembering Yahoo

Today’s news of the post-acquisition Yahoo being called Altaba made me think of the Yahoo I have known (and for a while loved) for the last 20+ years.

While AOL may have been America’s portal, Yahoo was ours in India. I was a happy enough Yahoo Mail, Yahoo Groups and Yahoo News user but what I was really addicted to was Yahoo Chat and Yahoo Messenger. Yahoo Chat was fantastic. The basic functionality was yahgood enough but I got really addicted to their IMvironments: mini flash-based experiences that you could play in while chatting.

I spent hours on it in different chat rooms and even made 2 of my closest friends on a Yahoo India chat room. The first of those friends was a girl from Romania named Anca. We talked a lot about our individual countries and that made me fairly knowledgable about Romania, a country I never really thought of otherwise. When I went to grad school at Rutgers, I ended up sitting next to a very quiet guy during one of the international student orientation sessions. He opened up when he mentioned he was from Romania and we could connect on that. That guy, Nicu, ended up being my best friend in grad school and is single-handedly responsible for me not dropping out of grad school when I struggled with writing code (I had never written code before having majored in Electronics in undergrad) and suddenly doing graduate level and research level C++ programming put me way out of my depth. Nicu, who had by then worked for a couple of years as a Software Engineer in Germany sat with me for HOURS teaching me programming concepts and helping me with my assignments.

So in a way I might owe Yahoo for my entire career 😉

As I became a web developer, Yahoo was one of the technology companies I envied. They were always building amazing pieces of technology. Some pieces of technology I was fascinated by and worked with included:

  • YUI which was THE user interface library for web experiences,
  • YSlow which I used a LOT when I was developing web apps
  • Yahoo Widgets, which was the Konfabulator app that Yahoo bought, that I wrote a couple of widgets for
  • BrowserPlus, which apparently I was a fan of at some point (Who remembers?!)
  • Yahoo Cocktails, a JavaScript based platform that powered their LiveStand iPad app.
  • YQL, a query language that mapped web apis like SQL queries.

In fact, I even went to a Yahoo Hack Day in NY a while back and my friend Gabo and I ended up building an AIR app for YQL queries (we didn’t win though 😦 )

This list doesn’t include other amazing tech that came out of Yahoo like Hadoop etc that I never interacted with.

I also interacted with Yahoo a fair bit professionally, when Comcast and Yahoo struck an ad deal in 2007 and I was responsible for integrating their video ad system (that didn’t exist) into The Fan video player that I was leading the development for. It was also one of my favorite engineering stories to tell but that is a story for another time 😉

Thanks for the memories Yahoo.

 

Do you need a Blockchain?

As some of you may know I have been very interested in Bitcoin and blockchains for the past couple of years and have been digging into it even more lately as part of my day job. However, blockchains have been in the news a lot lately to the point where it often feels like its a solution looking for a problem. Sure, blockchains are the sexy new tech but here are some questions you need to ask when debating looking into blockchains as a solution to your problem:

  • Can you deal with transparency? Writing to a public blockchain is may be a difficult new way of working (as banks are starting to find out). There is also a huge mindset today that considers data an asset that could be profitable and not worth sharing (though with the increasing risk of hackers and data breaches, its worth considering if your big data is an asset or a liability?)
  • Do you need immutable history? A huge value of the blockchain is in the fact that the blockchain is a record of history that can never be modified. Certain initiatives around blockchains with super users that can rewrite history completely negate the core trust mechanism of the blockchain. However there may be data that is incorrectly reported at times. Does your data consist of absolute truths or may need to be corrected once in a while?
  • Will you have untrusted peers or the network? One of the big reasons to adopt a blockchain is in environments of limited trust. If the only people that can write to a blockchain need to be authorized in a different way, you are just trading your current problem for a new one.
  • Can you keep your blockchain from being hijacked? If you do have untrusted peers on a network, and your network is fairly small, can a peer take over your blockchain with a 51% attack?
  • Can you just leverage the Bitcoin blockchain? Keeping an operational blockchain is work and needs nodes and miners that are incentivized to maintain it. What kind of rewards do you offer that make your chain worth working on? If you don’t have the right incentives in place, your blockchain may not outlive the individual or corporate curiosity that spawned the idea. A better idea may be to write it or, more likely, a hash of it to the Bitcoin blockchain making it a part of the official history and something that will exist even if your project dies.

There is a huge tendency to fixate on the distributed nature of the blockchain, but if that is your sole goal, there are other distributed database technologies that you should be looking into.

 

Thoughts from Oculus Connect 3

For the last 3 days I have been at San Jose at the third official Oculus Connect conference (OC3) and its been amazing to see some of the prototypes, talk to a few developers and just learn from other folks who are charting the VR space. Its been an amazing mix of education and fun and given me a lot of mull over on the flight back tomorrow. Here are some highlights though:

The Social Focus: Putting people at the center

Social was definitely the big message at OC3, and the Facebook Social concept that Mark Zuckerberg demoed was really well done.

I really liked the avatars and the way they worked here. What was a little weird was it was at the same stage where a few minutes later they talked about the new Oculus Avatars system which as developers we are encouraged to use. These 2 projects are totally independent of each other and a later talk by Facebook’s Mike Booth talked about a lot of learnings that they developed while building Facebook’s avatar system that flies in the face of the look of the official Avatars app/sdk. Hopefully these two will me merged at some time in the future but there is enough of a chance that they may not.

avatars
The Oculus avatars (top) have a completely different aesthetic than the Facebook Social ones (bottom)

 

Oh and I hope you didn’t liked the boxy avatars from Oculus Social app, cause that effort seems to be dead.

Oculus Touch

Oculus finally revealed the pricing and availability of the Touch controllers. At $200 they are a little pricey and make a full Rift setup be almost the exact same price as the Vive. That aside the controllers are really nice and bringing your hands into VR does up the level of immersion in VR tremendously (at work we had used the Leap Motion sensor on top of the DK2 to get some hand tracking in a demo but thankfully we can leave those kludges behind). The only unfortunate thing with the Touch controllers being optional purchase is that developers can’t really rely on them being available which might prevent them from leveraging them to avoid splitting the market. Hopefully most Rift owners choose to get it cause I will say they work really well.

touch.png

Room Scale

Oculus can now do Room-scale VR but requires a third sensor that you can now buy for $79. I can’t imagine a lot of people going for this at least immediately and Room scale might remain the domain of the Vive for now.

Video

One of the messages Oculus apparently wanted to send was that passive experiences shouldn’t be dismissed as apparently usage of Oculus is equally divided between games and video apps. At the keynote, Oculus also announced a Video SDK that will let video publishers create content but let Facebook host and distribute that content efficiently based on their research around optimized 360 video streaming (Foveated rendering etc). I need to dig more into this.

Misc items:

Other things also interesting included:

  • Facebook continuing to fund more VR development with another 250M fund for VR apps and games
  • Oculus is adding an Education category to their stores so expect more apps and games for that
  • Cheaper Oculus Ready certified PCs including a $500 one. Oh and Oculus Ready certified laptops for you developers on the go.
  • Oculus will cover Unreal Engine license fees for apps sold through the Oculus Store for up to the first $5 million in gross revenue.
  • Lots of effort being put into audio and ambisonic rendering. A new higher audio quality headphone for the Rift was also introduced and given away to the attendees.
  • Untethered stand-alone VR headset in the works in the lab.
  • Oculus will now support WebVR and introduced a VR flavor of their popular React JavaScript framework

Favorite Game:

Most of the OC3 event was about trying out the demos for different games coming soon. Lots of good ones to choose from but Eagle Flight was totally awesome.

Favorite moment: Talking to John Carmack

Okay so this was a totally nerd moment, but I have been a big fan of John Carmack for a long time and he was kinda like a geek hero of mine. Being able to talk to him for a bit was really amazing. I even captured a part of it on video (vertical cause I saved it from Periscope 🙂 )

My Experience with UPenn’s Research Experience For Teachers program

For the last few weeks I have been involved with Penn’s Research Experience for Teachers program (RET). The 6 week NSF funded program paired 10 teachers from local high schools in Philadelphia with a research engineer at Penn’s General Robotics, Automation, Sensing & Perception (GRASP) laboratory at Penn and an industry mentor in an effort to expose these teachers to advanced engineering concepts that they could take back to their students.

I had the pleasure to help with Matthieu Lecce and Danelle Ross on an effort to use computer vision to detect the volume of transparent liquid in a glass container. The project built on previous effort by Matthieu and the research team on seeing glassware (more information on that research can be found here). Technically Philly did a great writeup on their site as well on the final day of the project.

ret
Learning some machine vision at Matthieu’s office at the GRASP lab

The program was really intense for the teachers and major props to Danelle for completing it and going through this intense learning experience. My own contribution was fairly limited as I spent only a couple of hours a week with the team answering how groups like Comcast Innovation Labs (where I work) investigate such technology and how machine vision is being used in Virtual Reality and Augmented Reality, a domain I am currently very involved in at the lab.

More than anything though, it was a great learning experience for me. I learnt a lot of new concepts on how machine vision is approached (my only real experience with raw machine vision previously had been some OpenCV experiments in Processing and some half complete Android projects with face detection). Learning the core concepts that go into machine vision and the current state of the art in that field was a great experience.

Sometimes I really miss grad school.