Thursday, May 12, 2011

My brainbench test results on C# 4.0

Just tried free brainbench test on C# 4.0. I dislike some questions they asked but I like result I reached - 100% correct answers:)

Test: C# 4.0
Date: 12-May-2011
Score: 4.67
Weights: 100% C# 4.0
Elapsed time: 35 min 12 sec
C# 4.0
Percentile:Scored higher than 97% of previous examinees
Demonstrates understanding of most advanced concepts within the subject area. Appears capable of mentoring others on the most complex projects.
Strong Areas
  • Generics
  • Reference and Value Types
  • Unmanaged Resources and COM
  • Expressions
  • Delegates and Events
  • Exception Handling
  • Class Members
Weak Areas
  • None noted

Here is the transcript  

Monday, April 18, 2011

Testing GAE Task Queue with jUnit

It is generally agreed that automated testing is extremely important for software development process. It is so, despite the actual product’s complexity. I personally think that the primary reason of automated tests usage is possibility  to make changes to your code and quickly check whether the very basic business workflow still works. And because of that I dislike unit testing which I think makes sense not so much often and only to verify some of isolated components with complicated logic. Putting effort into unit-testing 50-60-70-80-90% coverage and even more of application code is in vain  - it takes too much time and it causes a problem it’s supposed to solve - when you have so much percentage of unit-tested code you are not able to make changes to your software quickly, 5 minutes refactoring causes 1 hour of fixing tests.

When I talk about automated tests I usually mean integration tests - the ones which could be implemented either as unit tests or using any of UI clicking tool (the last one is usually harder to maintain).

While working at Emails to RSS Forwarding service I faced the problem that app engine local testing environment does not support Task Queue but the service itself uses Task Queue very extensively for processing, archiving, RSS generation and maintenance tasks. Well, I exaggerated a bit, actually Google App Engine does support local testing using Task Queue - but in a very limited way at this point - the only thing it allows to schedule asynchronous task during testing and to verify that the task is added to particular queue and nothing more. If business workflows of your application depend on asynchronous jobs as in my case, possibility to run them under jUnit is necessary for successful integration testing. To resolve that problem in a way GAE considers it as legal I implemented the LocalTaskQueueCallback to run the right servlet with the right parameters. The code of it can be downloaded from here To use this task queue runner in your application put the TaskQueueRunner class as a parameter to LocalTaskQueueTestConfig.setCallbackClass method before you do LocalServiceTestHelper.setUp().

If you choose to disable automatically asynchronous tasks running to be able to manually check that everything is scheduled correctly and then run the async jobs TaskQueueRunner provides two overloads of processTasks static method.

Original posted to here Testing GAE Task Queue with jUnit

Friday, March 4, 2011

Too many emails that are not communication messages

We usually do not realize the amount of information we get every day, every hour, every minute. Me personally didn't really take it into consideration until recently when I returned back from one-week vacation :) Yes during it I didn't have any access to the Internet :) And to be honest, I do not have such vacations often. The other fact I learned from the HUGE amount of emails, rss updates, social network messages and etc was that such information capacity is much higher than it was 2 years ago and enormously higher than 5 year ago.

Beside this, among other questions I asked myself at that time was the following: why is so much information (like just notifications,  google groups posts, social networks notifications, software updates, repositories commits, new twitter followers and etc...) delivered via emails?

At least me personally want it to be delivered via RSS because of the following reasons:
1. RSS distracts me less from most important activities
2. I would like to use email for communication only
3. I would like communication messages be more distracting than notifications about new repository commits or new friend on facebook, or new discussion posted on google groups.

Actually I would like to have ability to assign different levels of distraction for different information sources, and even more I want ability to configure conditions for each information source to setlevel of distraction, and even more I would like to have ability to switch between different rule sets based on what kind of activity I am busy right now. But that's just a dream, or maybe I'll do it someday, at least I would let you know if I made any progress on it. Do you think it makes sense of having such tool/service? If so what do you personally want it to do? As far as I do not clearly understand how such system would look like yet and would it be pretty complicated to integrate it into existing information flows, I decided to implement pretty stupid service to just cleanup my inbox from all kinds of "spam" I mentioned above and maybe at some point I will extend it to cover all of my expectations.

The service does very simple job: receives emails forwarded to the address (es) it provides for you and aggregates these email messages into generated RSS feed(s). So I have configured forwarding rules on my gmail account to send it to the service and remove from my inbox. Can’t say it has  solved all my problems with  lots of information but now my inbox is clean and I am able to review all the updates from time to time with Google Reader; so it makes me a bit happier than before:)

Here is the service's address so you can try it. If you find it helpful or think it sucks or you do have another idea how to deal with notifications and updates let me know.

To sum up my post - it's very helpful to go on vacation and very serviceable by the way :)