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.
Friday, 18 December 2009
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.
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?
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?
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?
Labels:
Experience,
Software development
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:
Client
Server (from web config - omitting a lot of detals on how they are bounded)
... 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:
to increase the limit to circa 128MB.
which makes me wonder why remaining binding settings disallow to overcome this simple general one.
Both client and server looked to be fine in term of limits:
Client
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)
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)
<wsHttpBinding>
<binding name="NoneBind" messageEncoding="Mtom" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="None" />
</binding>
</wsHttpBinding>
<binding name="NoneBind" messageEncoding="Mtom" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="None" />
</binding>
</wsHttpBinding>
... 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:
<system.web>
<httpRuntime maxRequestLength="131072"/>
</system.web>
<httpRuntime maxRequestLength="131072"/>
</system.web>
to increase the limit to circa 128MB.
which makes me wonder why remaining binding settings disallow to overcome this simple general one.
Labels:
Experience,
Software development
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.Flush()
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.Write(res)
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.
Labels:
Experience,
Software development
Subscribe to:
Posts (Atom)