Tuesday, 29 December 2009

Popularity of programming languages

Have a problem to pick up a programming language to learn?

First of all decide, what area you are most interested in (embedded dev: C, C++; commercial: Java, C#, VB, PHP etc; Logical: LISP etc) and then follow the programming languages popularity chart below (which was compiled by TIOBE Software).

The more a language is in use the higher the probability you will find a workplace if you know it.

As usually there is an exception for persons who are smart and brave enough to follow it: the less a language is common (spread among devs) the higher salary gets the persons who knows it... but there is a high risk that you will not find a company interested in hiring you (especially in such a small country like EE)

PS: Ideally you should know 2-3 language from TOP-10.
although you are likely to be a professional in only one of them using it constantly.

Sunday, 20 December 2009

A problem of choice

There is a well known statement on selecting something among alternatives

The more alike two items are the more complex it is to choose one of them .... although the actual cost of been wrong is minimal in this case.

Initially I like this statement since it seemed to be exactly correct... but after some thinking I disliked it too since I felt it is incorrect as well.

Now, I believe I should reformulate it into

The more alike two items seems to be the more complex it is to choose one of them. [full stop]

Comment: I thing the catch in the original statement: you actually feel that items are not similar, otherwise you would simply select one of those... but you just have not enough information to distinguish those items by pros and contras.

Friday, 18 December 2009


Unfortunately I cannot trace the original source.

An ORACLE specialist, who acquired all certificates and actually did all exams can, known just an ip address, kill a person by a single SQL statement.

Sunday, 13 December 2009

Saturday, 12 December 2009

Fair rate for .Net devs outsourcing functionality development: Estonia and USA case

How would you answer the following question "What is a fair rate for .Net devs (per hour or per man-day) in Estonia and USA if a project lasts circa 2 months?" Comment: that is an amount one company would pay to another company, so the last one will have to pay all taxes. We are not talking about a salary that devs would get into their bank accounts. Moreover here we are talking here about one-time work. Not a long-term cooperation or stable income for the dev company.

Obviously the answer depends on the involved devs level. An experience from our company when we had the maximum number of developers – abilities of devs to generate correct code were varying circa 3-15 times, i.e. one dev was able to produce a code in one day, while another will do the same code in 3 man-days or even 3 man-weeks.
It also depends on time-frame. The faster result should be delivered the more costly it will be to produce. If there is no rush, then professional consultants will not be involved, so the price will drop sufficiently.

What answeres do we have at the moment?

1. quote " I work in a startup. Think 1-3 person teams who release v1.0 in 4-6 months. In this scenario, $5k or $10k goes a long way towards bringing a product to fruition. $10k can pay for a senior offshore developer ($15/hour) full-time for 4 months (so 120$ man-day)"

My comment: seems that „indian universal devs' are involved here – sometimes they even offer to write a code solving NP != P problem in a week :)

2. USA – well it depends on the dev level - from 50 to 75$ an hour (s 400-600$ a day), but sometimes miracles happen also by having 120-180$ an hour.

3. My friends recently did a project of 40 man-days. For a company they have very good relationship with. The cost was 2500 ЕЕК per day - so 240$ per day. The price was fixed for functions which were estimated including risks, so I would rate it as 240 - 320$ per day in other cases. An important fact – it was outsourced so, that the work-force was involved basing on a free schedule, so they could work on the main workplace doing extra when they willing to spent their time on it (although a deadline was also set).

4. It used to be 500-800 EEK an hour in Estonia some time ago. Not sure how much it is at the moment. Here I talk about highly qualified devs. You can find a student for 100EEK as well, but obviously the quality will be different as well as the time required to build the desired functionality. So here we get again circa 400-600$ per day.

5. Europe company got a rate from my friends - 500$ per day. They are a bit in rush, so they easily accepted that.

.. what answeres do you know? Could you share those with us?

Friday, 11 December 2009

WCF: limits

Today I have lost a half of the day trying to understand a problem occurring when a .Net client was communicating to a server talking via WCF - when the posted byte array size was over circa 2MB.

Both client and server looked to be fine in term of limits:

moWsHttpBinding = New WSHttpBinding(System.ServiceModel.SecurityMode.None) moWsHttpBinding.MaxReceivedMessageSize = Integer.MaxValue
moWsHttpBinding.ReaderQuotas.MaxArrayLength = Integer.MaxValue
moWsHttpBinding.ReaderQuotas.MaxStringContentLength = Integer.MaxValue
moWsHttpBinding.MessageEncoding = WSMessageEncoding.Mtom
moWsHttpBinding.ReaderQuotas.MaxBytesPerRead = Integer.MaxValue
moWsHttpBinding.ReaderQuotas.MaxNameTableCharCount = Integer.MaxValue
moWsHttpBinding.UseDefaultWebProxy = False
moWsHttpBinding.BypassProxyOnLocal = True
moWsHttpBinding.ReceiveTimeout = New TimeSpan(20, 0, 0)
moWsHttpBinding.SendTimeout = New TimeSpan(20, 0, 0)

Server (from web config - omitting a lot of detals on how they are bounded)
<binding name="NoneBind" messageEncoding="Mtom" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />

<security mode="None" />


... and as usually a solution was simple and laid outside of this code (and actually well known for me from asp.net development experience): you have to add into web.config something like:
<httpRuntime maxRequestLength="131072"/>

to increase the limit to circa 128MB.

which makes me wonder why remaining binding settings disallow to overcome this simple general one.

Monday, 16 November 2009

Thursday, 30 April 2009

Monday, 9 March 2009

How to serialize ADODB.Recordset in order to use it with WCF

It is easy to find that, unfortunately, ADODB.Recordset cannot be posted from client to server using WCF. The reason is simple: it is not serializable. The following code allows you to overcome this problem.

1. Without having to serialize using xml, so sufficiently increase the size of data flow in WCF.

2. Without having to convert it into Datatable - you will have quite a perfomnce problem converting it back from a DataTable to ADODB.Recordset in case on the client you (somekind old code) like to consume still ADODB.Recordset

This sample is written using VB.Net and implementing in any other language should be straight forward

'Imaging that rs is a ADODB.Recordset already existing in your code

Dim ret() As Byte
Dim aStr As Object = CreateObject("ADODB.Stream")

rs.Save(aStr, 0) ' 0 is ADODB.PersistFormatEnum.adPersistADTG)
Return aStr.Read(aStr.Size)

Dim binFormat = New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter()

Dim oStream As New System.IO.MemoryStream()
binFormat.Serialize(oStream, rs)
oStream.Position = 0

ret = oStream.ToArray() ' now ret is the byte array and you can post it via WCF

On the client side the following code as an example can be used. Imagine that QueryBypassAsByte is the function that returns the earlier formed byte array over the WCF call

Dim res() As Byte = proxy.QueryBypassAsByte()
Dim oStr As New ADODB.Stream()

'' read back into the stream...
Dim resRecordset As New ADODB.Recordset()
oStr.Open(System.Reflection.Missing.Value, ADODB.ConnectModeEnum.adModeUnknown, ADODB.StreamOpenOptionsEnum.adOpenStreamUnspecified, "", "")
oStr.Type = ADODB.StreamTypeEnum.adTypeBinary
oStr.Position = 0

resRecordset.Open(oStr, System.Reflection.Missing.Value, ADODB.CursorTypeEnum.adOpenStatic, ADODB.LockTypeEnum.adLockReadOnly, -1)

Now the resRecordset object contains ADODB.Recordset and you can either consume it or pass it further into any old code.

Saturday, 17 January 2009

Moving toward PhD title: Conferences - posters

There are different ways to participate in conferences and one of those is presenting the work as a so called poster. In the general meaning, the poster is a printing material that can be attached to a wall and can be either textual or graphical or mixed. In our case posters are mainly papers that were not accepted to the conference main stream (as a presentation), but which still have a chance to appear on the conference. The main idea of posters is to give a high-level overview of the work. Those are normally printed out by authors and posted to special transportable walls in conference halls. Each conference attendee, walking in halls can have it read and get introduction into the work. Normally the authors should also be presented somewhere close to the poster so everybody interested in the work can discuss it in more details.

Some conferences do position posters as an official participations in the conference with an article, while other as an un-official. The difference between those is – whether the article will still be included into the conference proceeding or not. If it will be included then it is treated as an article when the author has no right to talk loudly about it unless somebody asks. Otherwise it is a way for students to communicate the work and discuss, but it will not count for the PhD requirement to have x articles published, and so is not worth to accept the invitation in majour cases. Notice that sometimes those are printed in a local proceeding. Therefore you should be very careful if your work is accepted to the conference as a poster and find out in advance what it means from the publication point of view and then check with your supervisor whether it counts or not for your PhD articles requirement.

There are different ways to compile a poster. Mostly posters are prepared by authors in a classical way as a A1 or A2 size paper that contains a composition showing the logical flow of the paper from introduction to the conclusion. Some authors doesn’t bother to produce something creative picture and just put on the poster a set of slides they would show if they are allowed to present the work as a talk. Minor number of authors will just print out A4 pages and put them instead of A1 having printing out nothing more than the text of the article.

There are some examples from ICEIS’08 conference.

Saturday, 10 January 2009

Moving toward PhD title: Been stupefied (the third and last part)

Several posts ago we started to discuss what should you do to break down from been stupefied working on PhD thesis or articles. In addition to communicating the problem to friends or your supervisor you can also:

  1. Postpone your work for some time and switch the type of activity – go for a walk, start building a house or garden. Here you hope that your brain will recharge after some time and you will be able to use it again later … after it was cleaned from all details you never actually needed. Once the light will turn on again in the brain and will do even more than you did so far.
    The biggest disadvantage is – lost time. Besides you can loose the taste for the research and find more useful to deal with the current work task, friends and family on the constant base instead of PhD activities.

  2. Leave you ideas for a while and start researching others. For example to read recent articles from your or neighbour topic hoping to get from there something, that could either be useful for you or even will give you a new, inspiring idea.

    The biggest disadvantage in those approaches is sufficiently decreased productivity and general tiredness that will definitely follow the no-ideas period As soon as you are not concentrated on the topic you find attractive, you will think that it is boring and is not worth to spend your time at all. Especially if you read others articles and struggle to understand the point in these papers. The reason is very simple – your body try to recover from pressure you put on it in the past by routing available resources on other type of activities or just on rest. Generally it is good as you must relax for certain time, but there is a danger to loose a taste of research, forget how interesting it as it is much more boring without details when you look at it from a huge distance.

Saturday, 3 January 2009

Moving toward PhD title: Been stupefied II

In the last post we discussed that it is advisable to discuss a problem, you deal with, with somebody else in case you just cannot think of any good way to progress your work further. Actually such discussion with your supervisor is very useful because of a set of reasons. Notice that supervisor mostly means superior, i.e. having a lot of experience and therefore a constant communication will surely accelerate your progress moving toward the desired goal.

First of all you can communicate to supervisor the current status of the work and articles. Sometimes supervisor can help just by asking “right” questions pushing you in the certain direction or way of thinking highlighting the point where you did something incorrectly or incompletely
Secondly s/he can show you new ways, directions, which are obvious for him/her. Notice that you should not afraid that if the idea is produced by supervisor, then it is no longer yours and you will be just a „work force” evolving others thoughts. The truth is: each research is a lot of work and certainly much more just one sentence said once. It is different hypothesises, proves, collecting statistical information or measuring some process, solving local problems and so forth. In other words it is all that your supervisor has neither time to do nor intentions to do. S/he has a lot of own ideas, which s/he is fond of.

Finally it will allow you just to talk the problem out and probably you will find new ideas and solutions just properly formulating your thoughts in front of some superior person.