My name is Jean-Dominique Nguele and this is my blog. FLVCTVAT NEC MERGITVR
Yesterday I was told about a revolutionary shop that Amazon will open in Seattle, Amazon Go. I love seeing innovations popping out in this world where it is harder to be amazed. This piece of news, despite interrupting me in the middle of some non-negligible amount of work, made me happy. As a developer, the less I deal with people, the happier I am. It does not make me asocial, it keeps me sane on the contrary. Obviously we need to have a certain balance but this is not the place for that kind of discussion. The main thing that made me happy despite that shop opening on another continent is in relation to a past event. If you are an attentive reader of this blog this should remind you from a certain hackathon a couple months ago.
I loved being part of it, the few days before discussing about the topic trying to figure out what we should build. The brainstorms listing out what we hate and what we love in retail. All the ideas that came out of it. Even the harder bits where we had to weed out ideas to be able to focus on only one. One we could actually build in twenty-four hours. One idea to impress the judges, one idea to conquer them all. One idea was above others, we hate waiting. This is how it occurred to us. Scanning items using your phone, finding items within a store and checking out by walking out the store. Sounds familiar does it not ? Yes, Amazon Go in a nutshell some would say.
Obviously it is ludicrous to even think they would have inspired from us since presenting this idea was not worth of a podium. However, today we see it launched by a giant. In spite of not getting any recognition at this hackathon there is some comfort in seeing the world acknowledge that idea we had too as groundbreaking. We knew it back then, we know it now. It took us a night to implement a proof of that concept using an iOS app, beacons and GPS tech. From the ad I know they used much more than that for their test run. But then they are Amazon. They are giants, and it feels damn good to wake up, being confirmed that your mind is close to giants. It feels good to see it out before those ideas that beat us in a hackathon, that we may never hear about again.
When we presented that mobile self checkout idea we thought it was the future, god knows I shouted it everywhere. As I said first, I am happy to see Amazon Go out there and hope it will be successful and spread all around the world. I am looking forward to a world where you remove friction that can be generated by depending by how fast your cashier or other customers are. I am looking forward to take full control of my time when I pop in a shop to buy groceries. For those that have not seen it yet here is the ad they posted.
How did I come to write a class allowing dynamic interface implementation in the first place? Ever had to work on a huge company project over the weekend? Because it is the weekend you pick up fixes what should be easy configuration changes. Then you think it will take you only a couple of hours then you will be off to the gym. I thought that yesterday and boy I mislead myself, much mislead indeed. Basically I had to update a couple of big projects to remove fields that are null from the json response. All of that listening to stuff like the Ding Dong Song, Purple Lamborghini and Slipknot’s Psychosocial. On the first project I had to add a little line to have that working, so the second one should be the same right? I actually thought I would grab another task before leaving that improvised hackathon.
It was all fun and games until, surprise surprise, the second project used a custom formatter. That was to do some processing on the response objects and update some values to match our apps implementation. Fair enough. But the magical line of configuration to ignore null fields when rendering json did not work there. The obvious solution was to get rid of that custom formatter. The obvious thing to do was get rid of that formatter and figure a way to have that object value setting logic without touching the project classes. I say obvious because there were hundreds of classes there and I did not feel like changing all of them even to simply add an interface and its implementation. I had to set properties that may exist for hundred of objects. This is how I started googling, going through StackOverflow to try and figure how to achieve that.
During that thinking process I realized I could try to do something with dynamic objects instead of adding a value during the json formatting process. Interestingly enough, a few minutes later the StackOverflow ex-machina did its thing and I found that post “How to extend class with an extra property“. The answer from unsung hero Mario Stopfer brought me light on something I did not know was possible. You guessed it: Dynamic interface implementation at runtime. Not really in the form I needed but it opened a door of possibilities to me and a new perspective on the property setting issue. And I started coding, building, testing, debugging like crazy. After a few hours, I achieved what did not know was a possibility a few hours before. Dynamic interface implementation was there working and solving my issue.
I had a nice afternoon of coding at the office, lots of laughs and problem solving that provides me with an article I really enjoyed writing and a new class for my in progress .NET utility project that should appear when mature enough on Github. However since you have been reading all of this you will have the code in a preview gist along with sample code. The only issue is that it does not work with the new .NET Core (yet?) so I will update it at a later stage when I find the time and solution. That or add another version. Without any further ado, here is what I called the TypeMixer.
Last week at the same time I was at home playing League of Legends to break away from the frustration of losing at the Retail Week hackathon 2016. I was frustrated because I was, well I still am, convinced that our idea was good enough to win. Actually, I wanted to write a post immediately after to express the mixed feelings I felt that day. On one hand, I loved the experience and the excitement of suiting up as my schools days nerd self. On the other hand I hated losing in a way that did not feel fair. I discussed about the outcome of the hackathon around and people felt like we should have won.
I still cannot believe that a system to book an hour in-store discussing with an employee about an item you see online. An employee you whose job is to sell you the said item, especially in 2016. Nowadays we are only clicks away from users reviews from all around the world. You can even have video reviews at least on youtube. I guess it makes more sense to the judges otherwise the Retail Week hackathon 2016 winner trophy would be on Poq’s trophies shelf.
When we first got the idea of the self-checkout we thought that the hardest challenge was having a working prototype. We were so wrong. We had a working prototype 4 hours before the hackathon ended. From there, we spent the rest of the time testing and fixing bugs to ensure the presentation’s success. The presentation did not go perfectly but the idea and the product were there. To be fair, I think that pretty much all the teams had a much presentation for lesser ideas which could be what cost us the gold. When the judges are involved in retail during a fashion event I guess this is key.
We built a self checkout app that allows customers in a store to find items they want to purchase with indoor location using estimotes and geolocation to handle both indoor and outdoor app behaviour. The most interesting part is that you can scan your items so they add to your basket and when you leave the store you get charged automatically. We even built a mini-backend displaying the last paid basket.
We built a solid proof of concept even though there is some security flows that are fixable on the operational side. For the security tags, just add a device connected to the store system against which you scan your order generated QR code to allow you unlocking the number of items you need to remove the tags from. Even further we can use security tags that would emit the value from the item barcode to enforce that someone is not unlocking something they did not buy. It is a 24 hour hackathon and still we thought about some corner cases.
We did focus on bringing people back to store. I think that we did show creativity and innovation using the latest technology. Maybe we did not manage to pass the idea to the judges but I know that this is the future of retail. Walk in a store pick what you need and go. No more queuing hassle. Basically shoplifting without the criminal aspect.
I may go next year if we put up a team again and learn from our mistake. Technical advancement is not the focus, presentation is. Coding the whole night to get a working prototype is not the focus, sugar coat is. Still it will remain a special moment to me because I did have fun. The self-checkout will be in your hands in a few years, I will do my best for it. I went, I saw, I learned, that is probably what I do best, learning. I learned things my whole life, both at school and out of it. Even now that I worked for a few years I still try to learn as many things as possible. Learning is key to evolution, it is the key to become a better version of one self.
A great way of learning is to take part in open source development, looking at other people’s code, taking on challenges. Since a few days now I am helping other developers on community based websites such as StackOverflow and Github. I had an account on both for some time but did not do much with them. The good part is that on one hand I can learn and sharpen my skills by taking on issues and at the same time I help others. Well, there is not much downside. On Tuesday I submitted my first (non-professional) pull request and it got approved and merged pretty much instantly. It was not much but it still feels nice, you can check it here. And yesterday I got my first upvotes on a few posts on StackOverflow showing that giving time is enough sometimes.
That’s where I will end today’s post before I start spreading on random stuff, thank you for reading.
Yesterday I completed my first month at Poq and I am quite happy with my decision to join them. It changes from prin pretty much everything. I enjoy Poq for different reasons than those I enjoyed Lodgeo at first. However the most important part is that I can express myself in terms of development. At Poq there is more room for ideas and innovation than I was used to in my previous companies. It is crazy to see that I am 25 and including internships this is already my fifth company.
I learned so much over a short period of time and I brought some of my touch to the team. The only victim so far is my Yoda programming that my coworkers wiped away after a few code reviews. I yearned to come back to C# development in a company ever since my first internship at Itop. And now I really enjoy all the improvements of C# went through since 2010. And C# 7 brings a lot in terms of making a code more concise and easier to review. Working with colleagues with a strong experience in development will impact me and lead me making it to another level.
Talking about new step, I discovered a few days ago that in two weeks from now I will participate to the Retail Week Buzz hackathon where I will represent Poq with other coworkers. It is a big deal to me as it will also be Poq’s first participation to a hackathon as a company. Actually it will also be my first hackathon which is quite exciting.
Together we will try to figure how retailers can use technology to drive online shoppers into store locations and create a truly seamless customer experience in the process. This is a big challenge considering all the things we can do using mobile and web apps not much is left for the shops. The obvious reason to go to a shop is because good that is either not available online or not working. We will prepare ourselves to bring up an idea that can make a difference in the retail world and deliver on September 15.
Until then I will slow down on my League of Legends side project that I started a few days ago. There is some progress, I have some of the key logic elements in place. Hopefully in a few months I will have a first version available.