Sunday, November 24, 2013

Slave to Passion...not!

I've got this innate belief that most of the things in life are tools: social skills, oratory, quietness, etc. These are tools which makes it easy to navigate through the crests and troughs of life. Heck, life itself might just be a tool for one to achieve greatness and leave their footprint on the sand of time. Maybe.

This idea started to take root in my mind when in 2009, I read an article in the Oracle Magazine which described programming languages as tools and showed how pointless it is to be religiously attached to any language. After reading, I made it a conscious decision to learn as much programming languages as possible and apply as needed, in the most appropriate scenario. I'm still growing in that quest.

Then comes passion...

I am a very passionate person, it's one of may major strength. I like to believe that logic is the major drive behind most of my actions. However, most time, I've discovered that I don't yet know myself as much as I think, and that where there is a choice between passion and logic, passion usually takes front seat. Many times the result is good, other times it's just messy.

After the events of July this year, one of my personal diagnosis is to try to use everything as a tool, as much as possible. Everything, including passion. Just like I'm doing with programming languages. But old habits die hard and a tool in the hands of a learner does some damages first before it's eventually perfected.

The ugly head of my over-flowing passion showed up again on Friday, now I've got some query to answer to when I get to work on Monday. At times like this, I have to just remind myself to...

Thursday, October 31, 2013

Core engineering shizniz is coming to Connect

Yesterday, I offered to blog about engineering at the yet-to-be-opened "Engineering" segment on the InterSwitch Connect website.

As weird as it sounds, I must confess that I find it quite difficult to blog about core software engineering things. Even though I consume a lot of engineering content online + I try my best to use best engineering practices everytime, that shii just doesn't wanna flow in my blogging. However, I intend to force it! I'll take cue from the engineering blogs of Facebook (which I've been consuming since 2009), twitter, etc.

Expect an expose on the stuffs going-on behind the hood in The Switch; how we put in our best to ensure that your transactions are safe and secure and how we apply best practices, from coding to testing to [automated] deployment -- using CI tools, like Jenkins. Those nitty-gritty things that take place, from the people who make them happen.

I look forward to it and hope it's gonna be a fun ride...

P.S.

Happy birthday to my awesomely creative brother Anthony. Your is a place among the greatest!

Sunday, October 6, 2013

How I give my best in what I do

I've been thinking about my method of work, my style and demeanour. I wonder deeply why I do what I do, how I do it and this occurred to me:

To give your best in what you do, you have to be proud of it. What shows that you are proud of what you do? The major indication that you are proud of what you do is when you are never ashamed/afraid of talking a lot about it, of showing it off... I mean, you won't be dating a smoking hot & sexy girl and not show her off! Even the Bible says:
Neither do people light a lamp and put it under a bowl. Instead they put it on its stand, and it gives light to everyone in the house. -- Matthew 5:15
That's the way I work. When I make a decision about something, I immerse myself totally into it. It shows in my daily activities, my tweets, my blog post, etc. I don't just do my job, take my money and leave, I immerse myself. Some of the people I admire also act likewise, most notably 2Pac.

The downside of this is that if whatever it is fails, you feel the pain much deeper, and maybe for longer.

That's how I roll!

Saturday, October 5, 2013

Another access into the Beast

Yesterday made it two weeks since I join InterSwitch TechQuest, and I have really surprised myself at the rate in which I blended in. I won't give myself credits though, rather I'd say the guys there are just fun to be around, especially the crazy in-house web designer Senator Wale Abba.

I successfully completed my first sprint yesterday, showing my demo to the Director pushing for the product and the product manager in-charge of the product. Both seemed impressed. I created a PHP/MySQL website demoing the prowess of our yet-to-be released Single Sign-On (SSO) and third-party app authorization systems. The website was for a hypothetical coffee shop, Blue Cups, and the product manager is going to use the demo to entice a major player in the online e-commerce space to sign-up for these systems.

I felt the fulfilment of contributing to the bottom-line. However, not much people would get to use Blue Cups -- not as much number as I'll love a large number of people to use something I've created. But my next task would solve that!

Demoing to the director, he made some suggestions as improvements & consolidation in application flow that should be incorporated into the use-cases. After looking through his suggestions, the architecture I designed contained patterns that could (and should) be abstracted into an SDK. By happenstance (or not), a web SDK was supposedly in the works... Then that became my next sprint. I am to merge my new concept to the prior proposals for the web SDK, and build it.

I've been thinking around the implementation details, and the reality of this task just dawned on me. I believe the web SDK would be one of the major entry point into the beast which crunches most online payment transactions that happen in Nigeria. This single realization gives me some chills and compels me to put in a lot of responsibility into the authoring of this tool.

My colleagues at TechQuest put in loads of work in making this beast function at its best capacity, this tool must do justice to their work!

Thursday, October 3, 2013

Hypothesising a cure for my over-engineering

I've got the bad tendency to over-engineering a lot, bad thing is, it just comes naturally...

Building the demo app for our new API releases, I spent an upward of two hours trying to fix an issue of syncing the locale of PHP with MySQL. After spending over two hours, both of them just refuse to agree to exchange date information on the same timezone. Being the developer, I had to be the advocate!

At a point, my colleague, Yaya noticed the repeated sighs and he asked if I had a problem. Upon describing the issue to him, he calmly let me know why I don't even need to collect that particular date data in the first place. Then it felt like a scale fell off my eyes.

Two painful hours have been spent trying to collect data, which wouldn't even make much difference in the life of a user, in the context of my hypothetical demo app. Within this time, I could have sealed the app development and marked my sprint as completed.

Anyway, as it now stand, I'm hypothesising a fix for my stubborn over-engineering problem. At the moment, the best fit is: "Assume a feature/data is useless until it proves itself useful beyond questionable reason".

This should help me save some time and energy, and allow me finish-off project faster.

Tuesday, October 1, 2013

FOMO: Fear Of Missing Out.

Some time earlier this year, Oxford dictionary added the word FOMO, among others, to its dictionary. Now, I see it as the bane of many people's existence in this generation.

We want to belong, so much so that even when we see that we aren't getting commensurate benefits, we still hang-on to the circle of friends, chain of activities, routines, etc which we have gotten accustomed to.

Yes it is said that we shouldn't give-up easily, however knowing when to go tangential is as important as knowing when to continue in a circle.

Happy independence Nigeria.

UPDATE:
I thought I should embed my tweet which inspired this post

Thursday, September 26, 2013

In The Lab...

I'm in my 20's and I'm living my life like an experiment.

Lately, I've been filling my head with the fundamentals of several concepts: Idealism, Socialism, Capitalism, and all the "-ism's", and it feels quite sad to realize that I haven't yet consciously aligned myself to any, or a combination of any. I think that, somehow, if we are going to make a difference in this life, we need to know and understand the path which we have chosen to take -- or which we have threaded so far.

How do people live according to an ideal? Maybe they stumble into it mistakenly and it worked for them; maybe they studied all and applied the best one (or best combination) they could relate with; or maybe still, religious inclination, experiences, etc chose one for most people. But many people I've read of played around with this sort of things in their late teens and early twenties. I'm halfway into my twenties and I'm still messing around with it. I feel late to the game, yet I feel it's better than sleep-walking through the rest of my life. So I'm experimenting. My 20's is an experiment, a search for what ideal the rest of my life would be lived by.

So pardon me if tomorrow I act differently than today, I'm an experiment in the lab of life, but some things are established: I'm a software geek, an entrepreneur, a reader and a thinker.

P.S.
  1. Even though in 2009, I blogged about not taking-up paid employment, I eventually had to do so. It was imperative because I have to run my life. So last week, I accepted a job offer with InterSwitch and so far, aside from the fact that I now have to manage a lot of Java EE (which I haven't done for a while), I think it's quite nice. The people there are nice and happy, which is good. I'm still trying to strike-out a personal balance though.
  2. I met two really nice guys last weekend, one of them an up-and-coming artiste, who's getting a lot of airplay for two singles which he just released. We had a long chat on Tuesday evening -- at the beautiful poolside of Eko Hotel, with toothpick-figured models rehearsing some moves around us -- and I feel like they are going to influence my life in some really interesting ways, so I look forward to it.
  3. I cut my hair, so no dreadlocks for me again for some time... :(
P.P.S.
Happy birthday Yosola!

Saturday, September 7, 2013

Iska: Light-weight session handler for .NET

I read a very interesting novel this week. The title is Iska and it was written by late Cyprian Ekwensi, published in 1981. It tells the story of Filia, a simple young lady who after losing her husband, came down to Lagos and got caught-up in the enigma surrounding the State of Excellence. The story ends tragically when Filia loses her life as a result of activities of ritualists. Though it was sudden twist in the story, it wasn't unexpected because her mum had suspected her to be an Ogbanje. More details here: http://www.goodreads.com/book/show/3778168-iska

I like the simplicity of the writing style and, being a Lagosian, the story was something I could relate to. So I stole the name of the book, Iska, for my Open-source .NET session management library.

Light-weight session handler for .NET
When I wrote this post: http://ezeokoyecelestine.blogspot.com/2013/02/stateless-services.html, I talked about my (unnecessary) over-emphasis on the statelessness of web services, and about stopping it by putting an extra authentication and authorization step with web service invocation. While trying to do this, I tried ASP.NET sessions (I built my web service on .NET, hosted on Azure) and discovered that it depended strongly on cookies deposited on users' browsers. This meant that if my web service was going to be invoked by a non-browser (say a mobile app), the session wouldn't be maintained.

To solve this problem, I created a very simple session manager, easy to initialize and use. Since first writing it, I've used it on a number projects. I use it for the simple purposes of authentication and authorisation -- which are the only states I maintain on the RAM. I thought it might be useful for someone else, so I cleaned it up and put it on my BitBucket.

Benefits
  1. Easy to initialize and use.
  2. Automatically cleans-up your sessions periodically, at a duration you specify.
  3. Persist your session data periodically to any storage of your choice: file system, Windows Azure blob, database, etc. This prevents the loss of session on hardware/RAM crash. If you don't want to persist your sessions, it still works just fine.
The library is available here: https://bitbucket.org/celestocalculus/iska. Download it, add the DLL to your project and use it.

Possible improvements
If you want to go through the codes and work on it, please feel free to branch it and do whatever you like with it. I've identified some ways which it can be improved.
  1. The multithreading still seem quite tacky and could be improved on.
  2. It could do better with some generic type system introduced into the codes.
Please download, use and improve/extend it. Again, it can be found here: https://bitbucket.org/celestocalculus/iska. For how to use it, get codes for the sample console application I created: https://bitbucket.org/celestocalculus/tryisca.

UPDATE
It has been moved to my GitHub. The repository URL is https://github.com/celestocalculus/isca

Wednesday, July 24, 2013

My Tony Elumelu Foundation’s Grant story + An appeal for true capitalism.

On Friday Tony Elumelu, the renowned business mogul would be meeting with the tech/start-up community at the Co-Creation Hub to listen (and maybe award grants) to three new start-ups. His foundation, Tony Elumelu Foundation (TEF) have been in partnership with Co-Creation hub since 2012 and are looking to award $5,000 pre-seed funding to 20 technology ideas/ventures, and give them a head-start in their endeavour.  Apparently, they have already awarded grants to 7 ventures, of which my start-up, Tiketmobile is a beneficiary. For this, I am very grateful. Below is my TEF grant story.

Around July last year, I was at the NYSC camp at Wannune, Benue State. However, I had kick-started the process of building a company that lets people easily find and buy interstate bus tickets from the comfort of their mobile phone. So in camp, I was glued to my smart-phone most of the time, running my business and interacting with my co-founder. In the last week of the camp, he informed me of the good news that CcHub had selected us to pitch to TEF, with hopes that we would get a grant of $5,000. The good thing for me was that the pitch would hold 3 days after the camp closes, so I was excited. After camp, I went to see my place of primary assignment, and the following day, I took the first Benue Link bus back to Lagos. The day after, I was at the Heirs Holdings building Ikoyi, pitching for the grant. Everyone who listened to us loved our proposition, not just because of the way Constance delivered his awesome pitch, but also because of the idea in itself. It was original and hadn’t been implemented by anyone, in this clime before. Around September, we got the grant amidst excitements and high hopes.

The grant helped us in the following ways:
  • We ran a pilot program around our initial original offering of native Java ME app, which we ditched in favour of focusing on websites first, based on our discoveries. That was October to November 2012.
  • Between November and December 2012, we rebuilt and by January 2013 we released our official beta version to the public, amid press mentions in a lot of online and traditional media.
  • We ran a couple of campaigns, including conveying Batch-A NYSC campers directly to their camp ground, and grew a sizable number of customer-base.
  • We got the opportunity to get into partnership with some known online brands like Eskimi, and that further enhanced our brand’s credibility.
  • We also inspired two notable Tiketmobile clones, built by renowned internet entrepreneurs: Oya.com.ng by Chika Nwobi and Bus.com.ng by Jason Njoku. Both opened-up operations within the month of April 2013.
Then we ran out of money.

Right now, it appears the TEF grant has helped us get to the position where we used-up our personal savings, ran into personal debts and started running from pillar to post for funding for our enterprise. Hence the running of Tiketmobile in itself started stalling. Tiketmobile is not an NGO; if it were, we would have applied for more grants from other sources. I personally believe that it is unhealthy for profit-facing businesses to run on grants, it screws the mindset of the managers. Investments on the other hand, are opportunities for capitalists to be fully responsible for the effect/outcome of things they put their money into and cash-in on the results.

Many people probably already know that enterprises that succeed have a healthy cash flow in their early years, recording some losses, while building the customer-base which they would eventually cash-in on. This is evident in the history of traditional businesses and internet giants, like Google and Facebook. Also, history has shown us that most innovators aren’t the ones who finance their innovations to commercial profitability. Hence these initial costs are usually monies injected into the business by third-parties – by investors.

This is why I am calling on Mr Tony Elumelu sir to go all the way, and move a step further to actually investing in the businesses your grants have helped raise. As good as $5,000 grant is to a business in the beginning, it eventually runs-out and those businesses would need fresh injection of funds to get them to profitability, which are what capitalists are there for. I believe that the “Africapitalism” movement which you stand for is not just a buzzword, because I myself am a proponent of capitalism.

The success of technology start-up ventures, like Tiketmobile and a couple of others might be hugely dependent on the bold steps which people like you have taken in the past, and the ones which they would take in the future. If the latter is omitted, we would be stuck at the point where we have a lot of sensationally good start-ups, whose only existence would be a struggle of trying to find the best way to make headway.

I would close this note with a tweet from Tayo Oviosu, founder and CEO of Paga, which summarises my humble request.


Monday, March 25, 2013

Oya.com.ng: A HUGE validation!

Around some time last month, I came across oya.com.ng, a site that also sells interstate bus tickets for web users. Just what Tiketmobile does. I was curious and did a little digging and discovered that the domain was registered by serial internet entrepreneur/investor Chika Nwobi.

When I checked my twitter mentions today, @TIGWeekly mentioned me, informing me of the URL to potential a competition. Getting to the hub later, it was the talk of most people as they kept asking me if I had seen it.

Well, I have seen it and I know that they exist.

If I say I didn't expect a competition, I would be lying. To me it's not a question of IF, but a question of WHEN and it's a big validation of the thing that we are saw and are building. The fact that it's Chika Nwobi too, the serial internet investor who has Jobberman, Cheki.com.ng, MTech, etc in his portfolio means that we at Tiketmobile actually have an eagle eye; we saw and are doing a good stuff.

To oya.com.ng, I would say welcome. The sky is big enough for birds to fly without colliding... and if there is ever a need to collide, well...

Monday, February 4, 2013

Stateless Services?

When I had my first foray into Service Based Architecture (SOA) in 2008, I had to grapple with the idea that webservices should be stateless. They were meant to just accept your input, process them and give you a result. They shouldn't put anything in place to be able to tell who you are if ever you invoke any other service. They should have transient memory.

I took these things in literally – in every way.

This meant that some of the other little activities, which had to do with basically having little knowledge of the client, were moved away from the service layer. Little activities like authorizations which follow basic authentication. The question: “should I be able to perform this task” should be answered on a middle layer, before the service is called.

Even where I have access to the session state, I resist the urge to use it while implementing my SOA. Preferring instead to put documents out on how services should be used, which service should be invoked, when and how? In what order should they be stringed to accomplish required tasks? You get the drift?

But then, things could go wrong – errors could occur, documents could be misinterpreted… or leaked, people could become adventurous… or malicious. You know? They haven’t happened yet, but they could.

So I’m revising and adding basic authorization (err… session management?) to the Tiketmobile services which succeed basic authentication. Data is king and services are the doorway to the king, so they shouldn't be lax. The king could get compromised.

-------------------

Tiketmobile (www.tiketmobile.com) lets users find, buy and use bus tickets easily and conveniently from their mobile device. Check it out ;)