Sunday, November 10, 2013

Course completed

As I wrote in previous posts I've been attending a course Functional Programming Principles in Scala on coursera. I've completed the course and will write my final thoughts of the course this time.

First weeks


The first three weeks was like a  boot camp to drop out everyone who's not fully commited to the course. I've written about the first weeks in a previous post so I'm not going to repeat myself.

Weeks four and five


Weeks four and five were a positive surprise in two different ways. First of all the subjects were much more interesting and practical than in previous weeks. The second nice surprise was that the homework for the two weeks was combined.

Week four was about pattern matching which is a essential part of Scala and I found it to be a very interesting concept, easy to understand and it can simplify the code.

Week five was about lists. Nothing shocking during the week as lists are similar to lists in Java but in Scala lists do have some operations that come from the world of functional programming that Java doesn't have. This week also introduced a new concept called tuples which is something I'd love to have also in other programming languages.

The last two weeks


Week six was about collections other than lists including maps, ranges, sets and vectors. This week also introduced Scala's for queries which can be very different looking than in OOP. The collections are very similar to ones in Java so nothing new there but interesting new operations to transform between maps and other collections.

Week seven the last week introduced streams and lazy evaluation where in both the value is evaluated when it's needed. Lazy evaluation can be applied to any type of value or function so it's not evaluated until it's needed. Streams are similar to lists where the first element has a value and the rest of the elements aren't evaluated until needed.

Final thoughts


First weeks was a real pain like a boot camp to drop off the students who aren't motivated enough. The middle of the course consisted on familiar concepts from OOP and introduced some functional properties of them. The end of the course put all the learned concepts in use and introduced some functional concepts that are not found in OOP.

In the end I did learn some Scala but even more I learned about functional programming and what it means compared to OOP. This course gave me more than I could ever learn by reading from books or by practicing by myself.

Now that I've completed the course I'm taking a break from studying and after a few weeks of taking it easy I'll be trying out my new skill set with Scala to get some more practice. 

Friday, October 4, 2013

Learning Scala online

As I mentioned on my last post I've been attending Functional Programming Principles in Scala course at Coursera. It's been three weeks now and I thought I should express my current feelings about the course.

Course arrangements


Arrangements on the course are just about what I expected. Series of video lectures per week, some quizzes in the videos and homework that's evaluated automatically in a matter of minutes. Homework assignments and videos are given on mondays and homework deadline is in about ten days from that.

On the first three weeks the lectures and homework has been about abstract presentations of entities and mathematical definitions.

Lectures


Lectures i.e. videos can be viewed online or downloaded and one can also download english subtitles for the videos and the slides shown on videos are also downloadable as pdf's. The subtitles could be helpful sometimes but the quality isn't that good, missing and wrong words, so I don't use them.

The lectures contains theory and basic examples of the weeks topics and mostly I've found them easy to follow.

Quizzes


The videos also contains quizzes in the middle or at the end of the lecture and the quizzes are also resolved in the videos. The quizzes objectives are usually explained so poorly that I don't even try to solve them myself.

Homework


The homework... these too are pretty poorly explained and the first thing to do before even trying solve them is to go to the courses forums and read through the assignment FAQ and some of the other posts where people like me don't quite understand what's the objective.

Once I've understood the objective some of the homework has been pretty straight forward but some of them go beyond my understanding and are way more complex than the lecture material presented.

The automatic evaluation process is nice except that sometimes the feedback doesn't help at all. 

Example: This week I got a feedback that filter (this is predefined method that I'm suppose to implement) is too slow and the execution was stopped at 40 seconds. Browsing through the forums I figured out that the problem isn't neccessarily on my filter but on my union (similar predefined method) and got some tips on how to improve my implementation of union. I managed to get my union faster and the evaluation error of my slow filter dissapeared. Too bad I had already lost 3/5 submissions trying to fix my filter.

Overall


So far I'm not liking this course. I hate that I'm working on some abstract entities and mathematical definitions. I'm a pragmatic person and I'm just hoping that the course gets more pragmatic or I'll lose my interest. I'm not loosing my interest on Scala just on this course. 

It seems to me that this course is about theory and abstract presentations of what ever more than it's about real life utilisation of functional programming and scala itself.

I'll try to keep myself motivated and hopefully in four or five weeks I can say that I did learn Scala during the course and I've forgotten the unpleasantry of the first three weeks.

Friday, September 6, 2013

Summer is over and it's time to get back in business

Now that summer is over and summer vacation is just a faint memory in the past it's time to get back in business. This time I'm writing about boring work days and how I'm going to try to overcome that troubling feeling I'm getting.

Background

For the past four weeks in work the days have been repeating themselves. Every day has been like a repeat from the day before but a bit slower. When this happens it means that work tasks are also repeating the same pattern again and again.

For me this is a bad situation!

I know from the past that this is a situation where I'm getting bored and losing my motivation more and more every day. When I'm losing my motivation at work I know I'm also losing my motivation to do anything useful at my free time.

I knew I had to do something so I wouldn't lose interest to everything and one day I would wake up realizing that I've spent six months browsing netflix.

First step

Probably not the first thing I did but one of the firsts anyway. I told my colleagues that I'm having trouble keeping my motivation up so they know that I'm not at my best performance because I've lost my interest and my thoughts are wandering.

Second step

I decided that I'm going to reverse the situation. By reversing I mean that I'm going get my daily or weekly motivation during my free time and hopefully that will also spike up my work motivation. 

The reverse part one

Just this week I signed up for a online course about scala programming. Few of my colleagues attended this same course a year ago and they all said it was a good course so I decided to give it a try. Learning scala, more than I know now, has been on my todo-list for a long time so this seems like a win-win situation.

The reverse part two

The second part of the reverse was to get back to my blog that got on a good start during the first half of the year. Now that I have started writing again let's just hope I can keep this as a habit.

Sunday, June 2, 2013

Key-value stores from Redis point of view

This post was supposed to be about graph databases and key-value stores but it's going to be only about key-value stores because I got more interested in trying out Redis than Neo4J.

Redis

Redis is a key-value store that keeps it's database in memory but it also stores it's database on disk after a predefined time and number of changes in database. By default the values are like this:

  • 900 seconds and at least 1 change
  • 300 seconds and at least 10 changes
  • 60 seconds and at least 10 000 changes
More on Redis can be found at their website http://redis.io/ and if your interest to give it a quick try I suggest their online tutorial at http://try.redis.io/.

Important about querying

This is a important detail with key-value stores. In a key-value store the data can be searched only by the key. There are solutions that enable searching by the data, like lucene or solr, but that's a whole different search engine and not the actual key-value store.

It might appear strange or constraining but it just means that key-value stores dont suit everywhere and that the key must be chosen with care.

Key and values

Keys and values sounds simple and actually sounds pretty familiar to software developers. Key-value pair is basically a map, something like this in Java:
Map<String, String> myMap = new HashMap<String, String>();

In the value part one can store simple data like a name of a user "John Doe" or email address "johndoe@foobar.com" but these small bits of information aren't neccesarily enough. Another approach is to store json data that could be something like this:
{ "name":"John Doe", "email":"johndoe@foobar.com", "nick":"JD" }

With this kind of data structure it's possible to save all sorts of stuff but to do it so that the data is searchable the key has to be something meaningful. If the keys are just sequence of numbers like [1,2,3,4,5,6...] to search for "John Doe" from a database with thousands of key-value pairs it wouldn't be efficient as the keys would have to fetched and the data parsed until John is found. 
Let's pretend that the json data above is user data for a online service and users log in by their email address and a password. To choose something unique and searchable I would use the email address and to make it even more specific I would use a key that looked something like this:
"user:email:johndoe@foobar.com"

Now all we need to know is the email address (that we get in the login) and all the users data can be fetched with that.


Values as hash maps

This is something I really like about Redis, the value can be a map of values. Sounds a bit bizarre but is actually pretty simple once you get a hold of it.

Lets say I've created a simple blog platform and the blog posts are in this kind of structure where first is the key, post meaning this is a blog post, email of the user and a random uuid and as a value a json data set:
"post:johndoe@foobar.com:dsada23132" "{"title":"first post", "date":"20130101","text":"lorem ipsum...."}"

As a new feature the platform gets a commenting option and I want the comments be under the same post key so that they can be fetched at the same time as the post but I don't want to put them in the same json data. The new data structure would be something like this:
"post:johndoe@foobar.com:dsada23132" "post" "{"title":"first post", "date":"20130101","text":"lorem ipsum...."}"
"post:johndoe@foobar.com:dsada23132" "comments" "[{"name":"Jane Doe", "date":"20130102","text":"Nice one!"}, {"name":"Jack Doe", "date":"20130102","text":"Boring..."}]"

With the field values post and comments I separated the data from each other but kept it under the same key.


Searching data

Data can be searched only by the keys so if we know the key we can search with it like in the simpler key-value data with the email address. In the blog example the searching could be done with part of the key. If we wanted to get all John's blog posts we would do a search like this: 
"post:johndoe@foobar.com:*"

And after that I could get all the data of a specific entry with a get all command:
"post:johndoe@foobar.com:dsada23132"


Or if I wanted to get just the post not the comments the search would have a field with it:
"post:johndoe@foobar.com:dsada23132" "post"

Summary

There's much more of key-value stores and Redis that I didn't mention here and it can all be found at their web site but these are the important bits of my post.
  • Searching only by the key
  • Choose the key with care
  • Data can be simple... or not
I've done some brief experimenting with Java and Redis and some of the results can be found under my gthub account https://github.com/jorilytter/redis-test

Wednesday, May 1, 2013

MongoDB quick thoughts

This time I'm writing of my experiences and random thoughts about MongoDB. Just a quick overview and nothing too profound.

My MongoDB experiences


I've been a part of a development team in two projects that used MongoDB as a database and in addition earlier this year I attended and completed MongoDB for Java developers online course by 10gen, the company behind MongoDB. 

Moving from relational databases to document databases isn't easy. I don't have any real experience with functional programming but I'd imagine moving from object oriented programming to functional programming is some what similar experience as moving from relational databases to document databases. Some of the rules are still the same but there are a lot of differences.

Flexible schemas


MongoDB has flexible schemas meaning that the data model in the collection can be changed per document a any time. I really like this as it gives the opportunity to store only and all the data that is needed per document. 

When the schema is flexible it means that there's no need to store null values for anything. In the example below we have two documents in a collection named "contacts".

{ _id: 1, name: "Joe", email: "joe@foo.com", phone: "1234567"}
{ _id: 2, name: "Andy", phone: "7654321" }

Were storing a contact list in the database where Joe has a email address and that's stored under key "email" and Andy has only phone number. If we were storing this same information in a relational database we'd have to store a null or empty string as Andy's email address because in the schema there's a column for email address.

Having a flexible schema still means that schema and the data model of the application has to be thought well. With the flexibility comes a cost, it means that much of the logic has to be in the application.

Indexes and searching


Another great thing in MongoDB are indexes. They work pretty much the same way as indexes work in relational databases.

Querying is a basic functionality in MongoDB it can be done against any key-value pair in a document collection. Querying is always more efficient if it's done against indexed values.

These are two things that separates document databases from key-value stores where indexing is done only on the key and querying can be done only against the key. There are some separate solutions for key-value store indexing and searching but their not part of the database itself.

Aggregating


Aggregating is a more sophisticated way of searching it gives nice opportunities to modify the search result documents before the answer is returned. This is also a nice tool for querying for statistical data based on the documents.

Replicating and sharding


Replicating is where the data is copied to multiple databases and sharding is where the data is spread between multiple database instances. These two can also be combined where data is sharded and the individual shards are replicated.

Replication is a good way to have to the data backuped and for fault tolerance and it can be used to spread reads against multiple databases. Replication also gives a opportunity to confirm writes to multiple replicas before the write is considered successful.

Sharding is a way to spread reads and writes against multiple databases.

Final thoughts


Since I've used and learned more about MongoDB and document databases I've started to think differently about applications. 

In the past a relational database was the only choice as a database for me but now MongoDB is one of the alternative solutions, more on the other solutions on a later post. This new knowledge that I've gained has had me thinking of how some of the past solutions would have probably worked better if MongoDB had been the choice for a database instead of a relational database.

Friday, March 29, 2013

Studying and developing as software development professional

As everybody in software development knows, or should know, that studying and experimenting is something one must do to stay on top of the game. That said this time I'm writing about my experiences and ideas of studying. In this post I'll be covering different methods of studying and how I feel about them and what other types of resources are available.

Reading a book

Reading a book is probably the most traditional way of studying and I do read a few books every year. To me this is a way to learn theory and principles of something but usually little to nothing to do with the actual implementation. This type book I usually read in a week or two and I like these books when their length is reasonable somewhere between 50 and 250 pages.

Reading a book with exercises

These are very common type of books in software development. These usually cover some theory and the exercises bring a pragramatic approach with what one can learn a basic implementation. Some of these books are good if they have good examples but a great number of these type of books are way too long to keep me interested all the way to the end.

Attending a online course

I'm currently attending one, actually my first one. This course contains several video lectures per week split in to 2 to 10 minute pieces, quizzes after lessons and homework that's validated instantly.  To me this seems to be a great way to learn. Video lectures contains theory and implementation examples, quizzes are questions of the theory or implementation and homework is implementing and that gives a pragmatic approach to the topic. On the other side this type learning requires quite a lot of time per week.

Working through a tutorial

Tutorials are usually a good way to learn a basics of a framework or a language or howto use a tool. The hardest part is usually to find a good tutorial.

The internet

The internet is full of different resources to use. I follow several websites that collect news, tutorials and blog posts e.g. dzone and infoq. I also follow people and feeds on google+ and twitter and these are a great way for me to share interesting news and posts with others.

Conclusion

These were my thoughts about studying and developing myself. There are probably other ways of learning that I didn't cover here or haven't tried leave a comment if you have one in mind.

Thursday, February 21, 2013

JFokus 2013: Second confrence day

On the second day I didn't make as much notes as I did on the first. That doesn't mean that the session weren't interesting I just focused more on listening. I attended eight session on the second day where the last one was the most memorable one by Dan North but I'll go through them chronologically. Some of the text is word to word notes from the presentations and some are my view of how I understud and processed the topic in my mind.

Building scalable, highly concurrent and fault-tolerant systems: Lessons learned


Jonas BonĂ©r told what makes systems slow and what kind of solutions can be used to speed them up or at least speed up the response to the user. 

First lesson to learn is There are no free lunches. If you use some approach it affects to something else. Some might use the phrase There are no silver bullets which means the same thing or at least that's how I undestud it.

Second topic was about concurrency. Mutables and threads isn't a good a combination. Using threads and mutables means you have to use locks in your code and you can't create generic locks that could used in every situation so that leads to more code, more maintaining which leads to more possible points where your program can fail. There are ways to use concurrency and possibly avoid problems with threads and locks etc., here's a few keywords that I picked up: Dataflow concurrency, actors, STM, agents. I've used akka framework and actors in one project and they are a easy way to bring concurrency to programs.
Blocking is also the enemy of scalability and a way to get around this is to use async calls and because every confirmation of sent and received messages is expensive in network time another way is to use ACK responses. 

Last notes I have are about Big Data. When and where Big Data is used functional programming should also be the choise of programming paradigm because it fits like a glove, think about MapReduce. Some acronyms related to NoSQL and Big Data worth a look are CAP and BASE and ACID vs. BASE.

Patterns fo key-value stores


On this I didn't make many notes just a few things to remember with KV stores. Most of this session talked about RIAK and Redis KV stores so the topic was a bit misleading.
  • Value can be a reference to a key
  • Consistent hashing
    • Data shared among servers
  • RIAK has support for REST, JavaScript and Erlang
  • Redis has some sort of transaction managent and could be a good choise as cache in front of a RDBMS
  • Two important things to remember with KV stores are naming the key and having a good data model
    • personal note: even though KV stores are schemaless you always need to have a data model

Real-Time delivery architecture at Twitter


This was interesting actually so interesting that I only managed to make three notes because I was concentrated on listening.
  • Twitter uses Redis as a cache on all reads
  • Statistical backend is Hadoop
  • Read, write and search are all separated in their own paths

Continuous delivery patterns for large software stacks


Hans Dockter introduced commonly used delivery patterns. There's no way I could explain these better than he did in his presentation material and these can propably be found from the internet so I'll just list the patterns here.
  • Binary snapshots
  • Branching
  • Single build
  • Water gater

Stop doing retrospective and start your Toyota kata


This presentation talked about the principles of Toyota kata. So Toyota kata is a way to constantly improve and it's about experimenting. 
First thing to know is that 50% experiments has a different end result than expected. So when your experimenting things don't always go as you expected.
As I mentioned Toyota kata is about constant improvement and that means that all the time there's some experiment going on in the background.

Toyota kata is actually two katas improvement kata and coaching kata. 

In the improvement kata you set a concrete vision, something that can be measured. To get to that vision you set challenges on the way to the vision think of them like check points on the way to the big finish.

The coaching kata is about team leader supporting the team, pointing them to right direction.

My last note about this was something like this: To improve you must experiment.

Rocking the Gradle


Hans Dockter introduced Gradle build tool e.g. to replace maven. I didn't make any notes because he was talking so fast and demonstrating so many different possibilities of what you can do with it. Gradle is something I'm going to investigate at some point in the future even though I've heard it has some performance problems compared to maven.

Simplicity: the way of the unusual architect


This was the end keynote by Dan North. Firstly he presented some history and how everything in software development repeats itself in some way e.g. CORBA, JMS, SOAP, REST same basic idea in all of them just a different implementation. He made great points about software development but he presented them in a non-serious way so that the audience was concentrated on listening him. This was a great way to end the confrence. Here's a few notes I made during his session.
  • Three ages of everything
    • explore
      • maximize discovery
    • stabilize
      • minimize variance
    • commoditize
      • minimize cost
  • People make things complex when things should be simplified
  • Observe complexicity
    • e.g. What is this meant for, is it doing more than it should be

Monday, February 18, 2013

JFokus 2013: First confrence day

This was my first time at JFokus but hopefully not last. I wasn't quite sure what to except. I had heard good things about the confrence and knew that it was quite big. It was more and better than I expected. There were over 1500 attendees and great session from beginning to end. If i get the opportunity to go again I'm most definitely going again.

On the first day I attended six sessions. I'm not going to write all my notes here but I'll try to give good summary of each session and the rest can be read from JFokus website where you can find presentation materials for both days.

Taking development to the edge

This was the keynote of JFokus embedded, M2M & internet of things miniconfrence.

In the future everything is connected to each other and to the internet by everything meaning absolutly everything. Cars can share information of traffic, houses can tell if all the doors are closed and locked or the are the lights on.

Smart homes didn't succeed 10-15 years ago because automation was expensive and possibilities were unknown. In the future smart homes will be true but instead of full blown automated homes the automation will take care of the simple things. Lights can controlled automatically depending on movement in rooms or how much sunlight shines through the windows. When nobody is at home the lights can be switched off, temperature can dropped by adjusting central heating and home surveillance system be turned on.

For all this to be true and to keep the networks running without massive break downs embedded systems need to able to turn on and off their network traffic so that they don't send status updates every minute or so but when there's actually something signicant to report.

Today there are about 200 000 programmers in the embedded field but in the future there are going to billions of embedded devices. So who's going to be designing and implementing all those devices and their software. There's going to be a huge need for embedded programmers in the future and Oracle is going to respond to this with Java and their aiming to #1 platform of embedded devices. JVM already works in embedded devices but Oracle is going to expand this support by bringing Java SE APIs to Java ME.

By attending this session I also got a free Raspberry PI and hopefully I have some time in the future to try out some embedded programming with RPI and Java.

Design patterns in modern JVM languages

Very well presented session about patterns by Venkat Subramaniam. The most important thing to remember from this was that patterns are communication between people a common way to describe how something is done so don't force your code to patterns. I didn't have to make much notes abot this one because I was so concentrated on observing.

Unofrtunately there aren't anything about this session on the JFokus web site either but here's a few good patterns he demonstrated: Lambda expressions, execute around and function composition. And  these are a few you shouldn't use: Cascade pattern, Java 7 ARM (automatic resource management).

Continuous delivery: From dinosaur to spaceship in 2 years

Story of how SAP's SAP ID Service department brought their tools and methods to this day from Java 1.4 and waterfall methodology. This was a ok session nothing bad but also nothing amazing. I don't think I have anything say that you can't find in the presentation material.

Large scale automation with Jenkins

Introduction to Jenkins plugins that makes Jenkins more than just a CI build tool. Kohsuke Kawaguchi introduced Jenkins plugins for variuous situations like parameterized builds, naming builds, virtual maven repository and some for visualizing build workflows and pipelines. If your using Jenkins or evaluating it I really suggest that you look through the presentation material.

Howto do kickass software development

Great non-technical talk of howto create good software.

So why to deliver kick-ass software? 

To have happy customers of course.

Howto know that you're doing the right thing? 

Fake the software first, do a pretotype e.g. do paper models of web site and see how everything fits together. Constantly gather feedback and remember to answer to the feedback and don't let the project manager filter the feedback but go through the feedback in the development team and let the developers answer.

What about kick-ass development team? 

Traditionally developers are one team and QA is another break this! Make developers test each others code and practise this. Do pair programming with developer and tester or let developer do the testing and tester do the testing and compare notes.

Some other things you can do to improve

Automate builds and testing. This gives you the opportunity to fail fast and to share artifacts. Run your tests concurrently to run them faster. Have a build stategy for unit tests and for performance tests. Examine the statistics of your code, builds and tests.

Howto fail a software project fast and efficiently

This presentation listed almost all the possible things one can do to ensure that a project fails. I can't summarize this presentation because everything in the presentation was important. This is something everybody involved in software development at any level should read through. When you read it through remember to negate everything until you see the stop sign.

Thursday, February 14, 2013

Vaadin meetup

I attended Vaadin meetup with a few colleagues on a way to JFokus 2013 and thought I should share my notes of the two. First post is about vaadin meetup that took place on a cruise from Turku to Stockholm.

I made notes of three presentations and one of them I had high expectations. There were also two other presentations that I didn't make any notes of.

Vaadin 7


Vaadin released Vaadin 7 framework the same day that the meetup was on so they had a presentation where they told about new features and future plans. I'm more of a backend programmer than UI programmer so my notes of this were pretty brief but here it goes.

Whats new

  • Servlets and HTTP-sessions are controllable by the programmer
  • Multiple UI classes
    • e.g. One for web browsers and one for mobile web browsers
  • GWT is now build-in
  • Support for external JavaScript modules

What to expect in the future

  • Faster relase cycles
    • maintenance release every two weeks
  • Dynamic CSS injection
  • Vaadin CDI, their own depency injection system
  • Vaadin charts, for drawing nice charts

ePalo


This was a project ordered by Helsinki university and it was developed by a company called Arcusys. It's some sort of feedback system. The interesting part of this presentation was why they chose Vaadin framework for the UI. They chose it because it could programmed with Java or Scala and the developers didn't need to have any knowledge of web technologies like HTML, CSS or JavaScript.

Modern software development anti-patterns


Martijn Verburg, Diabolocal developer, had a presentation of software development anti-patterns. This the presentation that I really wanted hear he also had the same presentation later at JFokus. I had high hopes for this presentation and it didn't let me down. I'm just going to write a few buzzwords and notes here and the rest is available on Martijns slides and video filmed at the meetup.
  • Mortage-driven development
    • Write code to pay your mortage and make sure anyone else can't understand your code
  • Distracted by shine
    • Always use the latest and greatest
  • The deity
    • Huge classes e.g. Java class with 140k lines
Those were anti-patterns but he also gave tips how to avoid anti-patterns. 

One of the things he said is something in my opinion every developer should understand and remember. The anti-pattern was CV++ meaning that you try all the new frameworks and tools just so you can put a new line in your CV when instead you should be good at the principles.

So what does that mean. It means know the principles of software developent because languages, frameworks and tools change and evolve all the time but if you know hte principles you can always learn a new language or learn howto use a framework you haven't used before.

All the presentations of Vaadin meetup were filmed and uploaded to youtube. Links can be found at Vaadin meetup website https://vaadin.com/meetup/jfokus-2013.

On the next two posts I'll be what I learned in JFokus 2013.

Wednesday, February 13, 2013

Blogging from snowy Finland

First post on my first blog... Lots to say but can't deside what to say so I decided to start by a introduction of myself before we get into business.

I do software development for a living and that also happens to be a hobby of mine, what a nice coincidence. I work as a IT-consultant and I'm loving it most of the time. I get to see a lot of different environments and solutions but... there's always a but, I also see a lot that could be improved. With improvement I mean cleaner, simpler and easier to understand solutions.

I do most of my programming with Java, but I've had some experience with HTML, CSS, PHP etc. solutions in my past and in the last two years I've done some development with Groovy and modern JavaScript libraries.
Various relational databases have been part of my toolbox since I started web development with MS ASP and PHP over a decade ago. Recently I've also done development with NoSQL databases as a backend instead of RDBMS.
I haven't given a proper try to functional programming languages yet but I'll be doing that in the future first I have to do few other things.

Theme of this blog is going to be various aspects of my experiences and thoughts of software development. Perhaps even some actual code... or maybe I'll just put that in github.