http://apod.nasa.gov/apod/ap080418.html
This site provides a new picture every day.
I can see a screensaver application coming on.
Random outpourings of a software developer
http://apod.nasa.gov/apod/ap080418.html
This site provides a new picture every day.
I can see a screensaver application coming on.
c:>gactutil -i c:foldernameassemblynamebin
assemblyname.dllNote that the assembly should be strongly named.
This is the case when you try and add the WPF and WCF addons to VS2005.
Here is an article on how to make it work once you have installed service pack 1 for .NET 3.0
The idiot who wrote the installer tested for the presense of the uninstall option for the initial version of .NET 3.0, ignoring the possibility of a service pack.
This is not the first time I have seen a microsoft installer perform this stupidity.
Back in the day I learnt a lot about the registry configuration for COM objects the hard way.
The 16 bit version of VB installed a common library. Subsequently this library had a 32 bit version released too.
If you installed the 16 bit version over the 32 bit one it clobbered the registry sufficiently to break the later version.
Rather inconsiderately the application suite that I was assisting used both versions…
I had to write a patch utility to correct this problem. COM always had a technique for handling this kind of versioning problem but it was clear that whoever wrote the installer did not understand this.
When Microsoft release a new version of office that has an incompatible file format all of the users have been recruited into a viral marketing campaign. This is especially the case with the new docx format. The receipent may need to upgrade their wordprocessor to read the document. Given that recent versions of office only run on recent operating systems this could force a machine upgrade – a little steep for no real benefit.
This is especially insideous when combined with the default setting of hide known file extensions. Users don’t even know that they are using the new format until someone receives the document and can’t read it. This is a wonderful drain on productivity and the novice user that has just bought their new machine does not understand how to “save as a doc file”.
Now I can understand a file format change if there is a real benefit to the user (say Excel 2007 now allowing more than about 50k Rows) but for a majority of the world this is not of use.
Here are some links to means of setting the old format as a default:
http://www.creativetechs.com/iq/save_word_2008_files_as_doc_instead_of_docx.html
According to the following KB article this is a feature not a bug.
The claim is that by limiting searches to known file types the searches will be faster.
Faster yes, but also pointless as the files that I am actually searching for are ignored.
This should have been controlled by a simple registry setting with the default being the existing windows 2000 behaviour.
It appears that the drone that designed, coded and tested this has never actually worked outside of a software house.
Big hint: the real world has far more file types than those known by microsoft!
I am lucky at my current position to have a real Sybase expert around.
I am learning more about tuning stored procedures from him than I have in years of experimentation.
In the past I had avoided using temporary tables in sprocs as they only seemed to cause problems.
Now I am seeing temp tables in almost every procedure.
What would have been a join with a complex OR clause can be better implemented as a pair of insert statements plus a delete. This can allow the use of an index for all of the select.
Another key point is to always be explicit about creating temporary tables. Never use insert into #table to create the table. This locks the temp db and can impact other users or reduce concurrency in the database.
The following construct looked wierd as part of a join:
col_b = Isnull(col_a, NULL)
Why would you replace a NULL value with a NULL?
Apparently in Sybase this converts the NULL into a comparable type so that NULL equals NULL.
However if this is used on both sides of the join:
IsNull(col_b, NULL) = IsNull(col_a, NULL)
Then this is a means of not allowing the column to be used in an index – which can ensure that the correct index is chosen!
Another construct that I had not seen before was using an update statement to populate a local variable:
update MYTABLE
set REP_VERSION = @NewVersion,
STATUS_IND = ‘A’,
@OldVersion = VERSION
where MY_REF = @Ref
and STATUS_IND = ‘R’
This can lead to some highly efficient code – there is only one trip to the filesystem where normally there would have been two.
Use of these techniques alone has reduced the runtime of one set of sprocs that are run daily from 30 mins to 90s.
Give these are run concurrently with some oher time critical sprocs this is a big win.
The first time I encountered an application with a strong architecture it was a bit of a shock to my system. It slowed down my development since I had to solve the problem in the manner that would fit the architecture rather than however I felt like (which had been my previous experience). Once I was familiar with the system my productivity was restored (other than the crazy manual version control process) and the fact that the system had three sub architectures depending upon the module that you were working in.
The purpose of software architecture is to make an application seem as if it has a single consistent author and design. This speeds future development as a new developer (or user) only has to be shown one part of the system and the rest should behave (where possible) in the same manner.
The opposite of this is where an application has no architecture and each screen could have been written by a different developer with no reference to their co-workers. This makes enhancements more difficult as you need to work out the what and how of the screen/module.
Oh and by the way architectures are designed, not architected.
The argument used to be that stord procs were faster (less sent across the wire from client to server plus precompiled results). This is less the case these days with better caching technology in the databases.
Another argument is the security one. If the application only allows the end users to call the sprocs then there is a much smaller surface area to attack/abuse. If the users can call sql directly it only takes one technical user to start making direct calls from excel (or another freely available client tool) and one user can cripple server performance with a careless query.
Sprocs also make a great place to put business logic that needs to be identical across multiple client applications – especially if they don’t share a codebase (At work we have an inhouse app and an extensible third party application that need to call the same code).
Sprocs also make for very clean bugfix deployment. Since you can freely replace it in a single place (per site intallation) this makes for a low cost option – compared to an application rollout which could affect hundreds/thousands of machines.
I wonder if that is the real attraction of a web application development. You can freely replace a page without kicking out all of the users (at least that is the attraction of PHP – not sure that asp.net allows that much flexibility).
For example some new versions of word seem to break backwards compatibility. For example Word 2007 by default saves the documents in a docx file. To the naive end user that means that if a friend or business partner starts sending these files then they must upgrade to the new version. Microsoft has the cheek to call the GPL viral!
It is amazing the range of development tools that microsoft put out to make developers life easier – at a price.
The new workflow (WF), presentation (WPF) and communication (WCF) stacks are very compelling for the developer. The catch is that you need to either write your apps as a web application or upgrade your entire workforce to XP or above. There are plenty of companies that have a mixed W2k and XP environment – these new tools cannot be used without an upgrade!
How many of them do you use/have you used?
| Position Apr 2008 |
Position Apr 2007 |
Programming Language | Ratings Apr 2008 |
Delta Apr 2007 |
Status |
|---|---|---|---|---|---|
| 1 | 1 | Java | 20.529% | +2.17% | A |
| 2 | 2 | C | 14.684% | -0.25% | A |
| 3 | 5 | (Visual) Basic | 11.699% | +3.42% | A |
| 4 | 4 | PHP | 10.328% | +1.69% | A |
| 5 | 3 | C++ | 9.945% | -0.77% | A |
| 6 | 6 | Perl | 5.934% | -0.10% | A |
| 7 | 7 | Python | 4.534% | +0.72% | A |
| 8 | 8 | C# | 3.834% | +0.28% | A |
| 9 | 10 | Ruby | 2.855% | +0.06% | A |
| 10 | 11 | Delphi | 2.665% | +0.33% | A |
| 11 | 9 | JavaScript | 2.434% | -0.70% | A |
| 12 | 14 | D | 1.169% | -0.35% | A |
| 13 | 13 | PL/SQL | 0.608% | -1.28% | B |
| 14 | 12 | SAS | 0.572% | -1.63% | A– |
| 15 | 21 | Pascal | 0.513% | -0.06% | B |
| 16 | 17 | Lisp/Scheme | 0.476% | -0.20% | B |
| 17 | 22 | FoxPro/xBase | 0.459% | -0.09% | B |
| 18 | 18 | COBOL | 0.409% | -0.24% | A– |
| 19 | 16 | Ada | 0.393% | -0.29% | B |
| 20 | 31 | ColdFusion | 0.384% | +0.11% | B |
21 to 50
| Position | Programming Language | Ratings |
|---|---|---|
| 21 | Logo | 0.383% |
| 22 | Lua | 0.378% |
| 23 | ActionScript | 0.362% |
| 24 | Fortran | 0.335% |
| 25 | RPG | 0.297% |
| 26 | MATLAB | 0.257% |
| 27 | Prolog | 0.244% |
| 28 | Awk | 0.228% |
| 29 | Transact-SQL | 0.206% |
| 30 | ABAP | 0.204% |
| 31 | LabView | 0.178% |
| 32 | Erlang | 0.144% |
| 33 | Groovy | 0.142% |
| 34 | Smalltalk | 0.137% |
| 35 | Haskell | 0.137% |
| 36 | PL/I | 0.134% |
| 37 | Bash | 0.127% |
| 38 | Objective-C | 0.116% |
| 39 | Tcl/Tk | 0.114% |
| 40 | CL (OS/400) | 0.110% |
| 41 | ML | 0.106% |
| 42 | Forth | 0.102% |
| 43 | APL | 0.102% |
| 44 | REXX | 0.102% |
| 45 | R | 0.101% |
| 46 | PowerShell | 0.096% |
| 47 | Euphoria | 0.092% |
| 48 | Ch | 0.091% |
| 49 | Natural | 0.090% |
| 50 | Caml | 0.089% |
The next 50:
Personally I have no used Java in years, nor C/C++.
Visual Basic deserves to be split into its VB6 and Visual Fred components. (I have unfortuanately used both of these in the last 3 years).
I use php for a website that I maintain.
Perl, Python, C# and Delphi have all been used.
My raw pascal has not been touched for years.
Futher down the list I have used: Fortran (a long time ago), T-SQL, Tcl/Tk, APL.
Of the bottom items: Boo, Powerbuilder (powerblunder), VBScript
Not sure how accurate this list is.