Tuesday, May 17, 2011

Kowaa -- Explain your database to Apache Solr.

CSC Lounge (http://csclounge.com) is currently being reimplemened.

Major feedback we have gotten revolves around the need for the UI and UX to be more modern, colourful and intuitive and we are working to meet those needs. But it's not only the UI that we are working on, we are re-implemening the whole system with the Scala-based Lift web framework. The major reason we chose Scala is that it is more cost effective and flexible, besides it's what the cool chaps use for their systems now-a-days (ask Twitter and Foursquare). One of the module which we worked on (and is currently ready) is the search module.

The search was built on Apache Solr (http://lucene.apache.org/solr), an open-source search server created with Java on top of Apache Lucene (http://lucene.apache.org/java/docs/index.html). Solr is an amazing product and recommended to anyone building a web system from scratch (or already has a running web system) and want to add search functionalities. It works by allowing developers import indexes, which would be persisted to disk as documents containing fields that are accessible to search. Beside just searching, the results can be returned highlighted or transformed in whatever way the developer wants. Results could also be returned in several formats including XML (the default), JSON, PHP, Ruby, Python. Most of these features are actually base features of Lucene (which currently powers twitter's backend and a number of NoSQL DBs, like CouchDB). Solr allows users to import indexes from different sources -- XML, RSS, Wikipedia or an already existing database. Ours was the case of an already existing database. The problem with the process is that you have to manually create an XML file which tells Solr how your database is defined. This is a stressful process as you have to switch between the XML editor and your database and, in between, decide what you want to index. God help you if you have a complex database system which requires nested Solr fields.

This is where Kowaa comes in.

I created Kowaa to automate the process. It's a simple Java-based GUI tool that connects to your database and provides interfaces for you to set the properties of the Solr document and fields. It presents you with interfaces to select which database fields you want to index. It also allows you create nested fields. It then spits out the XML you need in a directory you specify. You can now customise by setting transformers (like HTML stippers) and other processors. I searched the internet for a tool to do this and I didn't find any, so I created one.

I used it with Microsoft SQL Server but I included options and JDBC driver libraries for indexing MySQL, PostgreSQL and JavaDB (network and embedded). To download, just follow the URL http://csclounge.com/kowaa.rar. The file contains both the source codes and the build so you can customise the code as you want to. It was built for internal use but we figure it would be needed so we are giving it all free! So if you are looking to set-up Solr on your site on an already exsting database you might want to take advantage of this.

After downloading, extract to any directory of your choice and run by invoking the following command on the command line:

$ java -jar path_to_extract/dist/Kowaa.jar

What does Kowaa mean?

Kowaa is Igbo word for "explain". Ifetayo also reminded me that when you break it into two, it means "teach us" in Yoruba (Ko waa). So it's more like explaining (or teaching) Apache Solr what your database is.

Friday, May 6, 2011

Don't trust the ecosystem

I was supposed to have a 'date' yesterday afternoon but my date had a couple of reasons to cancel it. I was a little disappointed but thankfully, I had invited a co-techie over so we had a handful of gists. I, being a newbie in the community, had a lot of listening to do. He summed up with one piece of advice "don't put much trust in the 'ecosystem'"

This was affirmed when I got a digest mail from the Lagos GTUG which I am a member of. The mail introduced a Google site created by one of it's members to connect local developers. No, the concept is not bad in itself, in fact it is wonderful. But if this invention was not a part of what I and the creator discussed in my bid to get him to join the CSC Lounge team, I wouldn't be posting this blog.

A couple of weeks back, Jide and I decided that the job at CSC Lounge was getting too much. We had more on our TODO list than we have on our DONE list, so we decided to hire the service of a creative personnel to ease off the stress. After a couple of considerations, we shortlisted a few people whom we should approach. We decided that we each talk to our acquaintance. Mine was a guy I met at a tech event I attended earlier whom I thought would make a good teammate.

After discussing a handful of the idea, the prospects and the benefits with him, we did a little brainstorming and pruning. I would say the discussion went well and he promised to get back to me with his final decision. I was expecting his call or e-mail -- well quite! The call or e-mail never came. Then I got the mail about his invention.

The worst part of his lack of personal creativity is that he used the same name as CSC Lounge but with a little twist! (CSC stands for Computer Science)

Google, our host on the tech user group which we both are members of, run with the policy "don't be evil". Hmmm... I smell some evil playing out.

Meanwhile, I'm having a second look at developer ecosystems, I think my techie friend (who visited yesterday) is right in a lot of ways.

Wednesday, April 6, 2011

CSC Lounge

Around this time last year, I was in my (supposedly) final year in school and I wanted to leave a legacy. I spoke with Jide -- one of the few people who are my close confidant -- about it. Jide was my roommate the previous session, so we had gotten very close. This thought spawn a lot of ideas which we shared between ourselves. None clicked until one night, while Jide, Ola (another classmate and one of Jide's roommates) and I were chilling in Jide's room, a random idea came for us to create a website for all classmates to keep contacts after school. It would also allow past computer science students to mentor subsequent computer science students. Also it would showcase students whose got skills and are doing stuffs.

That night, as it evolved, the idea spawn away from the original concept to a facebook-like application for our class + the mentorship thingy. We were preparing for our final year fun events (beach parties, barbecue nights, dinner, etc) and we would use the project to woo corporate firms to pay for our funtimes. As more people in the class heard of it, required features grew wider and more facebook-like but we still went ahead with it anyway.

Being the most experienced developer in the class and the one who nurtured the idea to growth, I tasked myself to raise the team who would build the application and also to interface with the corporate guys. I raised a team of 4 guys and 2 girls and gathered e-mails of the corporate contacts.

I exchanged a few e-mails with my corporate friends and things seem to be going fine. Corporate friends were responding, team was enthusiastic and in our first meeting, I coined the name "CSC Students' Lounge" for the application, CSC is what we call computer science in The University of Lagos. The name was agreed upon by the team as a temporary name, for lack of a better name. I created the requirements for our facebook-like, CSC Student's Lounge. Little red riding hood was still hopping happily!

After two or so meetings, team members started giving excuses on why they would not be able to make it to the next meeting. Then subsequent meetings turned into inspirational sessions, as I had to start telling team member how the project could boost their CVs. Corporate friends were still responding, but you need an application to sell now! So I kept corporate friends on a hold and began re-strategising. Couple of weeks after, app was not done and team inspiration was down, so I began droping team members. In fact, some even came to me and requested to resign. Finally it droped to Jide and I, and I had to revisit the idea.

I dropped all the facebook-like features and it returned to just mentoring. Then one event occured which made me incorporate articles. A computer science student from a remote university came to UNILAG and met us presenting a project we did for a course in information technology (CSC421). My team's presentation (and me in particular) impressed him, so after the presentation he approached me, introduced himself and told me how he enjoyed my display. He told me he was very interested in computer science but because stuffs like that does not happen in his school, his interest was begining to wane. He now reads computer science just to pass exams and get his degree, yet he told me how he would love for people to bring stuffs like that to them. He said a lot of students would embrace it with open arms. The idea of experts putting-up articles at intervals for students' consumption was born! A lot of other ideas came along and brainstorming with Jide, we prunned them until they came out right. We also called the application "CSC Lounge".

We sat down to implement and when we were done with the first working prototype, we began to think of how to get it up online. We were not regular income earners so raising cash for hosting was an issue. We needed to come up with stategies that would allow us raise cash while not getting our mind of the project. The only closest option was asking for contributions from friends and acquintances. We did that and after some time it worked and we were live.

Yesterday, 5th of April, 2011 at 6:05 AM WAT, we moved CSC Lounge to the root domain http://csclounge.com after running on a beta domain for exactly 2 weeks. What we currently offer is a platform which acts as a technical dump for people who do stuffs in the industry -- they could dump things; from a single line tweak to a fully flegded article. Students then ask them questions based on their dump. This way they mentor students and they keep the interests burning.

A lot of other great features are coming along (and a redesign too). This is because we are not just the everyday blogging platform (like the one you are on now). We aim not only to answer the question "What can I get from the platform" but also "What can I do with/on the platform". Some of the features are already even implemented, just waiting to be released.

The URL again is http://csclounge.com and it's open only to verified students and selected experts. We hope users enjoy using it as we enjoyed working on it.

Facebook: http://facebook.com/csclounge
Twitter: http://twitter.com/csclounge

P.S.
I'm dedicating CSC Lounge to everyone who has, in one time or the other, being my protege. To my current protege Dumebi Duru, who would never see me online on Facebook and let me be, but would always have one question or the other to ask. I hope you grow in your quest and become one of the bests.
To my ex-classmate and ex-protege Bukky Osi (was also on the team but pulled out) whom during those class assignment, I would explain to her what to do and she would come back with the tasks done. Your interest and development still impress me, I wish you could dare more and certainly hope you become a name to reckon with.
To all my other numerous proteges, you'll soon get a couple more mentors ;)

Monday, March 7, 2011

#JustReflecting

This month makes it six months since I unofficially left home -- that is, if you want to see me, my primary address is not where my parent stays (even tho I don't yet have a personal primary address). And really it has been nothing short of what I expected, tho it gets to the extreme sometimes.

I love to dare, it's just in me, crazy unthinkable things. I've lost count of them. I personally believe that in the journey to manhood, a young man should leave the confines of security and venture into the jaws of the real world, especially men who do not want to live obscure lives. After all, anything which would not kill you would make you stronger. That's what led me out.

Over this period, I've been stuck at the road a number of times due to bad traffic (Lagos na!) A lot of these time, I would wish I'd just go home to mumsi food but I'll realize it's far away. At some other times, I've also looked into my wallet to discover that it's not smiling at me and I've had to take drastic decisions to salvage my state (like take molue, instead of the comfort of BRT or danfo, after which I'll almost always swear never to board a molue again, lol). Even tho I'm not very good with money, I've kinda improved over this little time. I've also made a few families away from my family of birth -- the Ademilua's, the Claudius-Cole's -- places where I can call 'home' and and do some house chores when I wake up in the morning (after sleeping from 5 to 9am due to overnight hacking + I'm also not good with house chores too).

I know greatness beckons and I'm sure these experiences would only make the story sweeter. I'm very grateful to my lovely parents for being liberal enough to trust me in handling (and experimenting with) my life even though most times they do not understand what I do (my mom still asks me for explanations on what I do on the computer all night, even though I've explained a gazillion times. I guess I must be terrible at explaining).

Over time, I've also learnt that you do some things wrong a number of times before you finally start to do them right. Right now, I'm learning how to sell my products and I think I'm doing terribly badly. I'm not very bothered 'cos I know I'll improve with time. Besides, at this stage, I can always run back home and get re-embossed when things get out of hand.

#JustReflecting

Wednesday, February 16, 2011

Yeah... crazee me!

I thought I was crazy, now I realized I'm not actually crazy, I'm super crazy!

Sitting my own o, jeje in the lab reading for a test when one chic decide to start staring at me. Me I stared back o! Then we started doing "first to look away"... After some time, she burst into laughter and turns away, and actually walks away. I smiled and followed her and asked: "Didn't ur mommy tell u not to stare at strangers?" Then we started talking. I got all her details and when when I wanted to leave I asked for her number. She refued to drop it (in the typical Unilag chic spirit!) Then I told her to hold on to my phone that I would call my number whenever I wanted to speak with her. She took my phone and I walked away, went back to continue reading for my test.

My test av finished now and she is refusing to pick my phone. Armed with her name, department and level, I headed to the faculty of social sciences to find this chic, to no avail. I have a gazzilon calls to make and 20% of me is asking myself why I did it, 50% is amazed at the crazee thing I just did and 30% is just indifferent. :D

I'm closing in on her sha, I've gotten a few people who are in her department but not in her level. Next is to find people in her level but for now I'm taking a break. If you call me any time soon, maybe a chic would pick the phone nd say "hello"!

P.S. After a lot of pressure from my pops (the latest being holding a mirror to my face and asking me "how do you think you look?"), I've finally cut my hair! Now I adorn a low punk. I think it kinda looks nice and makes me look extremely different. I actually went home last weekend hoping to blow my hair, but after a little thinking, I realized I would be stepping into a lot of offices and they could be judging me by the hair I wear. So I decided to play by the rules! Anthony have blown his hair though (badt guy!). I didn't get to see how he looks before he went to school, cos he left in the morning and I arrived in the afternoon. Home is now funnier, Chima is at home :)

Tuesday, December 7, 2010

Passed out!

It was Sunday 5th December 2010, my parent just had a thanksgiving session for the silver jubilee of their wedding, hours later I was wasted... passed out and throwing up. That was the best day of the year so far!

To celebrate my dad had gotten some wine (13% alc) but I was not in the mood for wine so I took a few sips and requested for some beer (6.5% alc). Midway into the beer, he offered me rum (45% alc), I turned it down. Then the lady staying just opposite our place came in and at the spot, downed one and half glass of rum! In my head I was like, "shuo, see this tin wey I dey run from na em this chic come down like say notin dey inside." I took the challenge and after my beer, I started with the rum! Mumsi was there givin me those eye that she would give me when I was 7 if she disapproves of what I was doing in public, those eyes that says "stop that!" Me I no send am, I just throway my face.

Then it was me and popsi, the guests were gone and the guy was just jisting me about his bachelorhood and his adventures while I was downing more glasses of rum. Momsi had left the sitting room for us 'cos she disapproves of the heavy drinking. Anthony took a few wine and went to bed, so it was just me and my old man. We were gisting, laughing, demonstrating, hitting each other - a typical beer parlour setting. Gradually, I was shifting away from the realm of reality. I finished the bottle of rum and took the remaining of the only glass my dad was sipping all along, then I went to bed. But the whole drama was yet to begin.

I don't know how long it was into my sleep before I started throwing-up, can't tell what was happening except that Anthony and my dad was tending to me. My dad later told me that I was throwing up for about 2hrs 30mins. He said, after I offloaded every food in me, I started offloading the drinks, then he started getting scared. He was afraid of what would happen if the was nothing left in me to throw-up, according to him, I could start throwing-up blood. Of course, they kept it all away from momsi, they had to. In my drunken state, I could see the fear in his eyes, so I thanked him for letting me drink to stupor and sharing with me the way he did. He gave me some milk and it was all settled. I went back to bed.

It was 5am the following morning when I finally woke up. Anthony told me I messed-up everything. It was so funny to me. I was glad that finally, I had experienced what it was like to be passed out. I'm not a teetotaller, but because of my upbringing, I drink responsibly. Secretly though, I really want to experience the whole getting drunk and throwing up thingy. I couldn't be more appreciative to my pops, for letting me experience it in the security of home. When he awoke, he had a few words of advice for me. He let me know that he wouldn't be proud if he heard that I was in such a state outside home and I assured him that I would never be in such state again, ever! I plan on keeping my words.

I had a pile of bedsheets to wash while mumsi mocked me and called me a drunkard...

Wednesday, September 8, 2010

Raising Successors - The Celestine Discipleship.

It's no longer news that I won't be graduating with my class, what I pray for is that my best plans work out.

Due to my discovery that there's limited supply of developers, I've started a discipleship program. I call it The Celestine Discipleship. I intend to try my best in imparting the knowledge I have accumulated over the years on computer science students, at least make them able to convincingly win the National Challenge of the Imagine Cup and put-up a good international representation.

The program: Endorsed by the H.O.D of Computer Science, University of Lagos; Extra-Curricular; F-O-C. I already have one disciple and I'm on a hunt for suitable students for recruitment. I hope to build a small bread of self-confident software developers whom I'll ultimately absorb into my start-ups. By the end of the program, among other software development thingy, they should be very competent in Java, C# and Scala programming languages. Hopefully, they would get some silverware for themselves too - maybe Google Code Jam or Microsoft Imagine Cup trophy.

I'll try my hands on this while I'm serving my self-imposed extra session. It would work out, I'm very positive.

P.S. Waltag's searching for investors. If you know anyone we can talk to holla at me and we'll send our business proposal to the person (individuals only, please). Thanks ;)