In these bad economical times it doesn't hurt to be a little bit proactive in matters of financial security and personal evolution.
Therefore I now make my services available here.
I am currently looking and would be interested in a getting in touch with you for a gentle discussion on how I can solve your technical problems.
Please find my contact information here on this page including my CV.
Wednesday, 4 March 2009
Monday, 29 December 2008
2008 almost over
...so what did I do? what did I accomplish?
I guess 2008 was a year of heavy contemplation. Standing in front of a crossroad in more ways than one.
I think I have reaffirmed my believes in great many things. I think focus now should be on strengthen the ability to create something new out of my experiences. I have come to realize where my strengths and weaknesses are.
After all I am just a human being :)
In times like these with a world in turmoil in more than one way I think we can create something new and exciting. Sometimes you have to tear down in order to build up.
New years resolutions (yup and this time I intend to keep it up):
- Learn new skills, like sailing, sky diving and cooking etc.
- Totally change my lifestyle, as my body is my temple
- Make new friends and look for new opportunities where I didn't look before
- Take up music again
- Be honest to myself and others
- Loose my goddamn annoying love-handles
I guess 2008 was a year of heavy contemplation. Standing in front of a crossroad in more ways than one.
I think I have reaffirmed my believes in great many things. I think focus now should be on strengthen the ability to create something new out of my experiences. I have come to realize where my strengths and weaknesses are.
After all I am just a human being :)
In times like these with a world in turmoil in more than one way I think we can create something new and exciting. Sometimes you have to tear down in order to build up.
New years resolutions (yup and this time I intend to keep it up):
- Learn new skills, like sailing, sky diving and cooking etc.
- Totally change my lifestyle, as my body is my temple
- Make new friends and look for new opportunities where I didn't look before
- Take up music again
- Be honest to myself and others
- Loose my goddamn annoying love-handles
Friday, 31 October 2008
Hail to my previous blog
Here you go - www.jroller.com/page/formi05
Yeah I know... why do people write all that crap about what they are doing all day and day in. I mean who will ever read that anyways :)
I guess an archive is like a camera... I mean, you look at photos you haven't seen in a long time and... its kind of takes you back. Hmmmm very cool invention :)
Yeah I know... why do people write all that crap about what they are doing all day and day in. I mean who will ever read that anyways :)
I guess an archive is like a camera... I mean, you look at photos you haven't seen in a long time and... its kind of takes you back. Hmmmm very cool invention :)
In a good mood
Been thinking for quite awhile... trying to figure it all out. He he... I know it too well...
You know things like this... you are trying to create your own life. your own path.. applying your values and principles as your are traveling through life trying to adapt. I for one have been trying to shape my destiny in more ways than you can understand and I am sorry for all you people who have been suffering for my indecisiveness, my weaknesses and weird behavior. Please don't take it personally!! Its just been me trying to figure myself out.
Why move here and there. Why giving up stability for the lack their of. Well.. let me tell you this. I want to explore. I want to know what life is all about. I travel. I meet people... I eat crazy food... I do crazy things.. Does it have something to do it my childhood? The books I have read? The movies I have watch? The people I have met? I don't know.
Life is such a incredible thing... I have never experienced anything like it ever!! ;)
I guess I am a very analytical person.. I like to understand where I have been, where I am and where I am going. To be in control, be on top of things is where I feel most comfortable.
All that I have achieved in my life, I have not done because I have worked hard. It has just happened. Not because I have directly acted upon things in my immediate proximity of events but indirectly due to other circumstances. its all driven by your belief system...
Its so true the axiom put forth by way more informed people than me: "force it and it will happen not, though it will find you and the realization of being their in its mist might strike you as a wonderful miracle"
I am a scientist by training and as thus holds no God true but I am amazed by what life has to offer through the sheer act of kindness, a smile, a friendly gesture.
You tell me...
I can only end this with a good quote from my good friend and fellow member of the Gambrinos (the God of Beer by the way) order - "Nubium ets bibendum"
You are the result(s) of your own actions...
You know things like this... you are trying to create your own life. your own path.. applying your values and principles as your are traveling through life trying to adapt. I for one have been trying to shape my destiny in more ways than you can understand and I am sorry for all you people who have been suffering for my indecisiveness, my weaknesses and weird behavior. Please don't take it personally!! Its just been me trying to figure myself out.
Why move here and there. Why giving up stability for the lack their of. Well.. let me tell you this. I want to explore. I want to know what life is all about. I travel. I meet people... I eat crazy food... I do crazy things.. Does it have something to do it my childhood? The books I have read? The movies I have watch? The people I have met? I don't know.
Life is such a incredible thing... I have never experienced anything like it ever!! ;)
I guess I am a very analytical person.. I like to understand where I have been, where I am and where I am going. To be in control, be on top of things is where I feel most comfortable.
All that I have achieved in my life, I have not done because I have worked hard. It has just happened. Not because I have directly acted upon things in my immediate proximity of events but indirectly due to other circumstances. its all driven by your belief system...
Its so true the axiom put forth by way more informed people than me: "force it and it will happen not, though it will find you and the realization of being their in its mist might strike you as a wonderful miracle"
I am a scientist by training and as thus holds no God true but I am amazed by what life has to offer through the sheer act of kindness, a smile, a friendly gesture.
You tell me...
I can only end this with a good quote from my good friend and fellow member of the Gambrinos (the God of Beer by the way) order - "Nubium ets bibendum"
You are the result(s) of your own actions...
Tuesday, 14 October 2008
1 year is coming up
Having been in this position now for almost a year I can only conclude one thing. Experimentation is good... keep going. This experience is good for the next stage in my career.
I am a proponent of lightweight processes, the right tools, good synergetic relationships and having fun solving hard problems developing stuff that I believe in.
The process has started.
I am a proponent of lightweight processes, the right tools, good synergetic relationships and having fun solving hard problems developing stuff that I believe in.
The process has started.
Friday, 5 September 2008
Moment of Truth
Life is like a journey, with a definite beginning and a final end. Start small, think big. Don't be paralyzed by forces you cannot control. Think about the solution, not the problem.
Sometimes you fail. Learn from the experience. Always be curious. Always experiment. Bo beyond the limits. Eventually you will succeed. And if you don't, be happy! At least you tried everything you could. Make good friend. Do not fade away.
Most important thing in life is friends. Friends you can trust, respect and laugh with. Be positive. Avoid negativity. Lift yourself up at the scuff of your neck when you feel down.
Talk to people. Find new angles. Don't be afraid to be corrected. There are no absolute truths, only ways to look at things.
Its not about being the best. Perfect does not exist. Only better... Don't compare yourself to others. Try to be yourself. Don't imitate. Just create, improvise... put yourself out there. How else can you learn?
There will always be somebody richer than you, better than you. Always! So if you have reached the top. Then what? Its not a competition. It's a never ending story. Life is such a beautiful thing and its our only chance to live here and now. And if reincarnation exist... so what? You will not remember what you were or did in your past lives anyways.
Be gentle. Be kind to people. Return a smile or a greeting. It will get back to you. Not through the actions of others but just the mere fact that you opened up. By doing this... you will be liked and you will like others.
We have all had bad days and we always will. This is fact of life. Live with it. Its all about perception.
Moment of Truth...
Bankok, August 2008, Fraser Suites, 36th floor. Fantastic view.
Live it beautiful :)
Sometimes you fail. Learn from the experience. Always be curious. Always experiment. Bo beyond the limits. Eventually you will succeed. And if you don't, be happy! At least you tried everything you could. Make good friend. Do not fade away.
Most important thing in life is friends. Friends you can trust, respect and laugh with. Be positive. Avoid negativity. Lift yourself up at the scuff of your neck when you feel down.
Talk to people. Find new angles. Don't be afraid to be corrected. There are no absolute truths, only ways to look at things.
Its not about being the best. Perfect does not exist. Only better... Don't compare yourself to others. Try to be yourself. Don't imitate. Just create, improvise... put yourself out there. How else can you learn?
There will always be somebody richer than you, better than you. Always! So if you have reached the top. Then what? Its not a competition. It's a never ending story. Life is such a beautiful thing and its our only chance to live here and now. And if reincarnation exist... so what? You will not remember what you were or did in your past lives anyways.
Be gentle. Be kind to people. Return a smile or a greeting. It will get back to you. Not through the actions of others but just the mere fact that you opened up. By doing this... you will be liked and you will like others.
We have all had bad days and we always will. This is fact of life. Live with it. Its all about perception.
Moment of Truth...
Bankok, August 2008, Fraser Suites, 36th floor. Fantastic view.
Live it beautiful :)
Wednesday, 23 July 2008
Drum and Base is the Shit
Very few genres inspires me more than drum'n'bass. Its the utopia of electronic music in my opinion. There are quite a few web sites that actually stream live sweet drops of this stuff... one of my favorites right now is Base Drive go there and click the 128k link and enjoy.
For you that wants to rip all this stuff, just download streamripper and get loaded with these sweeeeet juices... freekin good.
Shout out to my friend Cookie in Hong Kong. He is really rocking hard. If you are lucky you might catch him spinning at one of the excellent venues there.
Another excellent chap to hang out with is Giles, my really good friend since long, from Bournemouth. If you are lucky enough to travel around Asia, another good friend that spins at a respectable venue in Shanghai is James White... respect!! (too bad we couldnt meet up for my birthday July 31st)
For you that wants to rip all this stuff, just download streamripper and get loaded with these sweeeeet juices... freekin good.
Shout out to my friend Cookie in Hong Kong. He is really rocking hard. If you are lucky you might catch him spinning at one of the excellent venues there.
Another excellent chap to hang out with is Giles, my really good friend since long, from Bournemouth. If you are lucky enough to travel around Asia, another good friend that spins at a respectable venue in Shanghai is James White... respect!! (too bad we couldnt meet up for my birthday July 31st)
EA 5 months
Wopee... i have now been at EA for about 5 months and this is what I have to say.
Currently we are building a kick ass framework for MSG games and might be moving over to the MMO space, exciting, he he. There are some architectural challenges still to solve... time, time, time... where are you dear time machine?
Keyword: SKU plan :)
Go figure!!
- Bunch of really smart guys
- Factory mentality, develop games and move on next title
- Somewhat heavy-weight processes (trying to do Scrum)
- LETS do it attitude
- Politics
- For new management hires, make sure you network properly, find your niche soon
- Situational management is key
- Things move QUICKLY so make sure you are setup for it, get with the program!!
- You fail hard... and it happens!!!
- Really smart people here (did I mention that?) hey we are looking, we need more people in Singapore NOW!!
Currently we are building a kick ass framework for MSG games and might be moving over to the MMO space, exciting, he he. There are some architectural challenges still to solve... time, time, time... where are you dear time machine?
Keyword: SKU plan :)
Go figure!!
Monday, 25 February 2008
EA has offered to buy Take Two
Exciting news, if EA is able to do this we will be on the top again. Then it will be EA and the Activision+Blizzard groups left. Lets wait and see.
I am in Canada right now, in Vancouver to visit EAC (EA Canada) and its a grand experience for sure. This place is huge, with close to 2k people working here, its almost like a campus (with a kind of University feeling.)
On each floor there is buzzing and activities and meetings around various games. On the ground floor there is a basket court and a football field. I mean this is the capital of EA Sport. I went down to the EA shop earlier today and man they have all the games for like cheap cheap :)
A little more than a week into me joining EA I am still enjoying it tremendously. Yesterday I went up to Whistler for a relaxation trip. Will post some photos later..
More of this please :)
I am in Canada right now, in Vancouver to visit EAC (EA Canada) and its a grand experience for sure. This place is huge, with close to 2k people working here, its almost like a campus (with a kind of University feeling.)
On each floor there is buzzing and activities and meetings around various games. On the ground floor there is a basket court and a football field. I mean this is the capital of EA Sport. I went down to the EA shop earlier today and man they have all the games for like cheap cheap :)
A little more than a week into me joining EA I am still enjoying it tremendously. Yesterday I went up to Whistler for a relaxation trip. Will post some photos later..
More of this please :)
Wednesday, 13 February 2008
Call of Duty is the shit
I am a 1st person shooter fan of long long time. Man I have been playing these types of games since Castle Wolfenstein (during the nineties) and was well into trying to develop my own FPS using the latest 3D technology of the time (yes I know, lame) based on the original Doom which I played until my fingers bleed (the source code was released in the late nineties but the concepts around 3D modeling and the Z space was around for quite some time before that.)
Now I have a new vice, Call of Duty. The various versions (1-4) has had the in my opinion the absolutely best realism of all the military FPS games out there right. We are talking graphics, sound, controller vibration, AI system, weapon system, sound and ambiance, physics... you name it. I am amazed by the texture details and the environmental depth compared to other games (XBox 360 that is.) It doesn't jag or lag or in any other way annoy the game play like other games in the same genre. The story line is and has always been very good.
These guys at Activision know their stuff and I can only wait for them to be acquired by EA. We have to come out with something similar soon.
I am now way into finishing CoD4 and I love it... please don't disturb me I am almost done :)
Peace!!
Now I have a new vice, Call of Duty. The various versions (1-4) has had the in my opinion the absolutely best realism of all the military FPS games out there right. We are talking graphics, sound, controller vibration, AI system, weapon system, sound and ambiance, physics... you name it. I am amazed by the texture details and the environmental depth compared to other games (XBox 360 that is.) It doesn't jag or lag or in any other way annoy the game play like other games in the same genre. The story line is and has always been very good.
These guys at Activision know their stuff and I can only wait for them to be acquired by EA. We have to come out with something similar soon.
I am now way into finishing CoD4 and I love it... please don't disturb me I am almost done :)
Peace!!
Sunday, 10 February 2008
New year, new exciting challenges
Its getting closer and closer my role as TD Online for EA Asia. I am so excited and hope that this will be the turning point I have been looking for. Well to be quite honest its all up to me to fulfill as I am (realistically speaking) the result of my own actions.
It will be quite a huge undertaking developing a new Online Gaming Platform for Asia but I am psyched to be able to work with some of the finest engineers we can find in this region.
More will come here as the work progresses..
Pax Mobiscum
It will be quite a huge undertaking developing a new Online Gaming Platform for Asia but I am psyched to be able to work with some of the finest engineers we can find in this region.
More will come here as the work progresses..
Pax Mobiscum
Friday, 25 January 2008
New adventures
Well this is it. I have now done 3.5 years at TEAMworks and its time for me to toss in the towel. It has been enriching to say the least. I don't think I have been working in a more tolerance, patient and mentally challenging environment in my life.
My motivation, focus and technological evangelism took a hefty smack on the head somewhere along the road but I am finally over that now.
I joined this company with the wish and dream that I could create something from nothing utilizing all my collected experience in all sorts of technological, social and educational settings but it seems that all the effort was for nothing. There are so many things that went wrong along the way so there is no need to detail it here. But worth mentioned maybe...
Hmmm... its nice to be away from that hellhole. Initially I didn't really dislike everything that had to do with that company. So, it has been said. Its done I can move on.
Pax mobiscim
My motivation, focus and technological evangelism took a hefty smack on the head somewhere along the road but I am finally over that now.
I joined this company with the wish and dream that I could create something from nothing utilizing all my collected experience in all sorts of technological, social and educational settings but it seems that all the effort was for nothing. There are so many things that went wrong along the way so there is no need to detail it here. But worth mentioned maybe...
...the struggle with finding experienced and skilled staff and the problem with trying to keep in all together because nobody liked each other or to scared to say anything
...the boss/CEO who decided that nobody knew anything, who didn't wanted to listen to reason and advice from obvious expertise and who went his own way with his penny wise, pound foolish mentality
...the ignoring of my requests of key personnel and skills in interaction/graphical design with the motivation that "we can do it ourselves, it takes to long time, we have to go GLOBAL NOW!!"After 3.5 years of working here my boss is someone you are afraid of. Every person that has left the company (or has been fired) refuses to come back to the office to visit us less the boss is not there.
Hmmm... its nice to be away from that hellhole. Initially I didn't really dislike everything that had to do with that company. So, it has been said. Its done I can move on.
Pax mobiscim
Wednesday, 16 January 2008
Simplistic Thinking
I recently came across a Google interview questions that kind of intrigued me. It went like this:
O(N^2) solution (Groovy)
This solution illustrates a simple solution to this problem with O(N^2) complexity in Groovy.
O(N) solution
This solution illustrates one (not simple) solution to this problem with O(N) complexity in Java.
"You have a list of numbers which some of them are negative and some of them are positive, find out the largest sum of sequential subset of numbers from this list."This question is so full of subtleties that it cannot fail to entice even the most interview savvy reader. In order to be able to properly answer this question the interviewee not only has to understand big O, but also this particular type of problem. One brilliant aspect of the question is that it already contain parts of the answer. The answer can be found in the requested solution of O(N). This ought to give enough information on how the algorithm should be structured (or should it?)
For example:
-5, 20, -4, 10, -18
The solution is the subset [20, -4, 10] which its sum is 26
The solution for this question is not summary the positive numbers or sort the list because the subset needs to be sequential.
A possible not efficient answer would be to to calculate the summary of all the possible subsets in the list but the complexity of this solution is O(N^2)
However the interviewer wanted a solution of O(N) !!!
O(N^2) solution (Groovy)
This solution illustrates a simple solution to this problem with O(N^2) complexity in Groovy.
def findLargestSubSequence(seq)And the O(N^2) comes from the nested iterations of course :)
{
def tmpSeq = [], maxSeq = []
def maxVal = -9999999
seq.eachWithIndex { val, index ->
seq[index..seq.size()-1].eachWithIndex { innerVal, innerIndex ->
tmpSeq = sequence[index..innerIndex]
if(tmpSeq.sum() > maxVal) {
maxVal = tmpSeq.sum()
maxSeq = tmpSeq
}
}
}
maxSeq // no return needed, value is returned automatically
}
println findLargestSubSequence([-5, 20, -4, 10, -18])
O(N) solution
This solution illustrates one (not simple) solution to this problem with O(N) complexity in Java.
Here we see that there is only one iteration. The code is pretty hard to read though as it relies on a rewriting patterns where the path towards the solution is driven by successive alteration to the source input.int[] findLargestSubSequence(int[] sequence)
{int mini = -1, minv = 0, maxi1 = 0, maxi2 = 0, maxv = -9999999;
int[] seq = sequnce.clone();
for(int i = 0; i <> {if (i > 0) {
seq[i] += seq[i-1];}
if (seq[i]-minv >= maxv) {
maxv = seq[i] - minv;
maxi1 = mini + 1;
maxi2 = i;
}
if (seq[i] < minv) {
minv = seq[i];
mini = i;
}}
return getSubArray(seq, maxi1, maxi2); // you have to write this :)
}
Saturday, 1 December 2007
5 abilities that improves a productive success rate
- assuming personal responsibility for productive relationships
- creating powerful partnerships
- aligning individuals around a shared purpose
- trusting when something is "just right"
- and developing a collaborative mindset
This is a neat summary from the book: Teamwork Is an Individual Skill (ISBN 1576751554)
Agility cannot happen without collaboration, communication and feedback. But it will be even more efficient with team members realizing that its all about the people in the center... individuals are the ones that run the show :)
Another thing, as of now I have realized that the Agile term "self organizing teams" does not apply anymore because it carried a too chaotic connotation and implies weak or no leadership. There has to be a shared vision in order for a process to move forward.
Oh yeah I just remembered something I had to say here - its ok to say NO!
Over and out :)
Thursday, 29 November 2007
My kicks in life... yeah I am a nerd
I love programming!! End of story, talk to the hand.. I don't care what you think. It doesn't matter if I am working as an architect, technical director or janitor. I love programming and the creative mindset you are indulging in. To just sit and juggle with different concepts and translate them into running code is just so inspiring. I am trying to pick up a new language now and then and that has really helped me cross cutting several different paradigms.
If I am bored I just pick up a little problem that has bothered me and I just fix it. Like this other day. We have this product right where a mobile device is interacting with a Java server using Hessian. I wrote most of the Java server and the Mobile application so I should know how it works. There was something with the speed of the synchronization of the data that just didn't feel right so I sat down and started writing some tests for it. The mobile application is written in C# using Visual Studio. Unfortunately there are no freeware/opensource performance monitoring tools that I know of as of now that covers that platform so I had to resort to some of my own tricks. (I might write something myself as soon as the Compact Framework team is adding dynamic proxy support to the framework.)
So after some time I discovered that during the synchronization of the data some methods were called with their arguments evaluated dynamically. These dynamic arguments are quite expensive and should not be performed during sync. So we basically have this type of situation:
In the call to
So by changing the code to something like...
...we will fix the problem but have introduced a special case check in otherwise generic code. The check whether we are syncing already has been moved one level up to the calling code. Once would think that this problem could be handled with an around advice in an aspect where we have full control of the invocation of the target method, but no. The arguments would still be evaluated before the target method was called. If would be nice somehow to be able to have an advice feature whereby you would be able to decide on what arguments to resolve before the method is called, similar to the around advice.
Take away points:
If I come up with a better solution I will write about it here... Ciao
If I am bored I just pick up a little problem that has bothered me and I just fix it. Like this other day. We have this product right where a mobile device is interacting with a Java server using Hessian. I wrote most of the Java server and the Mobile application so I should know how it works. There was something with the speed of the synchronization of the data that just didn't feel right so I sat down and started writing some tests for it. The mobile application is written in C# using Visual Studio. Unfortunately there are no freeware/opensource performance monitoring tools that I know of as of now that covers that platform so I had to resort to some of my own tricks. (I might write something myself as soon as the Compact Framework team is adding dynamic proxy support to the framework.)
So after some time I discovered that during the synchronization of the data some methods were called with their arguments evaluated dynamically. These dynamic arguments are quite expensive and should not be performed during sync. So we basically have this type of situation:
// running on the client in the syncService..
while(until no more dataChanges or exception)
{
serviceMethod(extractArguments(dataChange))
...
}
public void addToChangeLog(Date date, Operation op, ...)
{
if(IsSyncing)
return;
// add to changelog...
}
...
// in the proper service method, called during sync or normal operation..
public void serviceMethod(Type arg1, Type arg2, ...)
{
// 1) do work... save to DB and so on...
...
// 2) save changes to dataChangeLog to be picked up during next sync
// but should not be done if we are syncing already
syncService.addToChangeLog(currentDate, operation,
extractNewDataAsStringVeryExpensive(sourceObject));
}
In the call to
syncService.addToChangeLog we have one argument extractNewDataAsStringVeryExpensive that is evaluated before the addToChangeLog is called. This method is very expensive in terms of execution time. But this is not directly obvious when running this piece of code just a few times. Lets say the argument takes 200ms to complete and this method is called 100 times then the total execution time would be 200ms x 100 = 20 seconds. That is 20 seconds wasted.So by changing the code to something like...
public void serviceMethod(Type arg1, Type arg2, ...)
{
// 1) do work... save to DB and so on...
...
// 2) save changes to dataChangeLog to be picked up during next sync
// but should not be done if we are syncing already
if(!syncService.IsSyncing)
syncService.addToChangeLog(currentDate, operation,
extractNewDataAsStringVeryExpensive(sourceObject));
}
...we will fix the problem but have introduced a special case check in otherwise generic code. The check whether we are syncing already has been moved one level up to the calling code. Once would think that this problem could be handled with an around advice in an aspect where we have full control of the invocation of the target method, but no. The arguments would still be evaluated before the target method was called. If would be nice somehow to be able to have an advice feature whereby you would be able to decide on what arguments to resolve before the method is called, similar to the around advice.
Take away points:
- the extractNewDataAsStringVeryExpensive method was not expensive initially. It evolved!!
- it pays of having a CONTINUOUS PERFORMANCE task in place that would run as part of the continuous integration build so that performance increasing code changes can be detected properly. This is not a trivial exercise but fun never the less
If I come up with a better solution I will write about it here... Ciao
Tuesday, 27 November 2007
Book writing
After some initial excitement regarding writing a book about software development and my experiences with it I have discovered a new book written by Kent Beck (of XP fame) called Implementation Patterns which I believe perfectly covers some of the material I was planning to write about.
I am happy that Kent (whose ideas and work I respect a lot) has published this book and look forward to read it. I still have a few ideas though that I would like to work with in written form so more about this later. I might have to change the form and approach a bit :)
I am happy that Kent (whose ideas and work I respect a lot) has published this book and look forward to read it. I still have a few ideas though that I would like to work with in written form so more about this later. I might have to change the form and approach a bit :)
Monday, 26 November 2007
Jasypt experiences
We have been using the Jasypt framework for a bit more than a year in our product and its pretty good. Very easy to integrate, configure and extend to suit your own needs.
Few things though:
- Hibernate integration: you have to think a bit about your solution if you wanna encrypt PK-FK relationships, no out of the box solution... (yet?)
- In a development environment you probably don't want to use the PBE Filter + Servlet until deployment time. If you do, you probably want to automate the initialization of the PBE system at startup from a props file via a servlet listener or something..
Few things though:
- Hibernate integration: you have to think a bit about your solution if you wanna encrypt PK-FK relationships, no out of the box solution... (yet?)
- In a development environment you probably don't want to use the PBE Filter + Servlet until deployment time. If you do, you probably want to automate the initialization of the PBE system at startup from a props file via a servlet listener or something..
Thursday, 15 November 2007
Scalability tips
- Asynchronous event-driven design: Avoid as much as possible any synchronous interaction with the data or business logic tier. Instead, use an event-driven approach and workflow
- Partitioning/Shards: You need to design your data model so that it will fit the partitioning model
- Parallel execution: Parallel execution should be used to get the most out of the available resources. A good place to use parallel execution is for processing users requests. In this case multiple instances of each service can take the requests from the messaging system and execute them in parallel. Another place for parallel processing is using MapReduce for performing aggregated requests on partitioned data
- Replication (read-mostly): In read-mostly scenarios (LinkedIN seems to fall into this category well), database replication can help load-balance the read load by splitting the read requests among the replicated database nodes
- Consistency without distributed transactions: That was one of the hot topics of the conference, which also sparked some discussion during one of the panels I participated in. An argument was made that to reach scalability you had to sacrifice consistency and handle consistency in your applications using things such as optimistic locking and asynchronous error-handling. It also assumes that you will need to handle idempotency in your code. My argument was that while this pattern addresses scalability, it creates complexity and is therefore error-prone. During another panel, Dan Pritchett argued that there are ways to avoid this level of complexity and still achieve the same goal, as I outlined in this blog post.
- Move the database to the background - There was violent agreement that the database bottleneck can only be solved if database interactions happen in the background.
Thursday, 27 September 2007
Roughless Pragmatism or RP
Rule 1 of RP: Never paint yourself into a corner
This rule basically states that when you design software in an agile manner (i.e evolutionary design) always make choices that allow for maximum flexibility. This could translate to different things to different people and is really quite subjective. That is what is great and wonderful with software development, its so creative and yet technical and abstract at the same time.
Software development is all about having abstract thought models in your head. Its very unnatural to live in one reality (our dimension) and act in it based on another reality (some conceptually compatible, yet a very much simplified one.) This is where OO, DLS and so on comes in. Tons of stuff have been written about this :)
More rules will be posted as they are realized...
This rule basically states that when you design software in an agile manner (i.e evolutionary design) always make choices that allow for maximum flexibility. This could translate to different things to different people and is really quite subjective. That is what is great and wonderful with software development, its so creative and yet technical and abstract at the same time.
Software development is all about having abstract thought models in your head. Its very unnatural to live in one reality (our dimension) and act in it based on another reality (some conceptually compatible, yet a very much simplified one.) This is where OO, DLS and so on comes in. Tons of stuff have been written about this :)
More rules will be posted as they are realized...
Saturday, 15 September 2007
Distributed web architecture with Spring
Overview
I have been working on a fairly interesting distributed architecture for some time now and this post describes this work. What makes this architecture interesting is the use of AOP to externalize coordination and communication between a various instances of the same server.
In this architecture a server can run in either:
AOP interceptors are used to handle the extra logic that has been extracted from the master and slave. Both method interceptors and request interceptors are used. The method interception is used for things like user creation, user update, invitation and registration. The request interception is used for functionality that should be handled by a slave.
This type or implementation gives a lot of flexibility in that once the single server is implemented the master and slave specifics are added on top as aspects. This makes the architecture easy to configure and modify. The architecture has been made modular such that the master and slaves together forms a single server that is driven by a single interface via a web browser.
The request dispatching mechanism cooperates with Registry in order to dispatch the slave specific requests. The configuration of these requests is stored in a application context configuration. The UI is constructed on the master/single server but individual requests are processed based on the request configuration. To make it simple, it is assumed that all requests are processed by the master/single server unless configured to be processed by a slave. What slave to dispatch the request to is dynamically determined by the Registry. All slave servers registers with a central master server upon startup.
Once a user logs onto an master, a session is also created with the slave associated to that user. The session is stored in the registry. The slave to authenticated against is defined during user registration where the slave is determined.
Both the master and slave server stores the same user information. This is needed in order to be able to handle all the various use cases.
The beauty of aspects I that they can be applied to code to add new functionality that was not originally thought of. Code or functionality can be decorated with new functionality. Another powerful benefit with aspects is that they allow for common code that crosscuts different conceptual areas to be externalized and thus be shared which reduces the amount of code that has to be written.
I have been working on a fairly interesting distributed architecture for some time now and this post describes this work. What makes this architecture interesting is the use of AOP to externalize coordination and communication between a various instances of the same server.
In this architecture a server can run in either:
- Single mode - in this mode the server encompass both the master and slave modes
- Master mode - in this mode the server serves as the main entry point for requests. A master can interact with several slaves depending on availability
- Slave mode - in this mode the server is serving as a slave awaiting requests from a master
AOP interceptors are used to handle the extra logic that has been extracted from the master and slave. Both method interceptors and request interceptors are used. The method interception is used for things like user creation, user update, invitation and registration. The request interception is used for functionality that should be handled by a slave.
This type or implementation gives a lot of flexibility in that once the single server is implemented the master and slave specifics are added on top as aspects. This makes the architecture easy to configure and modify. The architecture has been made modular such that the master and slaves together forms a single server that is driven by a single interface via a web browser.
The request dispatching mechanism cooperates with Registry in order to dispatch the slave specific requests. The configuration of these requests is stored in a application context configuration. The UI is constructed on the master/single server but individual requests are processed based on the request configuration. To make it simple, it is assumed that all requests are processed by the master/single server unless configured to be processed by a slave. What slave to dispatch the request to is dynamically determined by the Registry. All slave servers registers with a central master server upon startup.
Once a user logs onto an master, a session is also created with the slave associated to that user. The session is stored in the registry. The slave to authenticated against is defined during user registration where the slave is determined.
Both the master and slave server stores the same user information. This is needed in order to be able to handle all the various use cases.
The beauty of aspects I that they can be applied to code to add new functionality that was not originally thought of. Code or functionality can be decorated with new functionality. Another powerful benefit with aspects is that they allow for common code that crosscuts different conceptual areas to be externalized and thus be shared which reduces the amount of code that has to be written.
Subscribe to:
Posts (Atom)