Started working on a web application with jqGrid as a grid object. Very powerful, and reasonably simple to start with. One thing I found missing, is that it does not understand just a data-array or json string to automatically fill the grid. One *must* give it the colModel parameter as well, basically destroying the dynamic nature of jqGrid. Not a big problem, just a quirk.
I created the dynamic webservice. So far so good. Solved some hard to find problems (at least, Microsoft doesn’t tell you that these problems will arise). Now for the big finale. WCF in all its wisdom caches WSDL requests. Let us repeat that all together now: WCF caches WSDL requests. And there is no way to tell WCF to not do that, or for that matter to empty the cache. The only way to do that, is to recycle the application pool the service is running in, or (of course) to recycle IIS. It’s that bad.
I tried several methods: messageinterceptors, creating extra instances of the service, etc etc but there’s no way to work around the cache. Once requested, the WSDL is written in stone.
We serve web services that have a customerbased configuration. A customer gives us a data file, which will be the source for their endpoint. In our application is defined which columns are served to the respective methods. But all clients have the same set of methods (web operations). So the wsdl generator looks at the user that is logged in (custom servicebehavior), fetches the relevant column names from the database, and modifies the wsdl accordingly. Every customer is served its own data with its own choice of columns. Works perfectly. Until you change the set of columns and don’t restart the service. No problem on my development laptop or on the test machine, but a big problem if we want this in live in production.
At a dead end with this now. Looking for an alternative. But so far, none of what I find actually works.
First things first: my trial period is over, so since this month I’m a “real” employee of Olbico
I’ve created dynamic web services. Turned out to be a bit more difficult then I expected, since the requirements were quite strict: secure communication, but no client-installs, and the response had to be dynamic, specific for the user that logged in.
First problem was that the default serializing of dynamic objects in WCF doesn’t quite work like you would expect (you can’t deserialize the XML to a proper object anymore), so a custom serializer for the dynamic objects (to be used in the response).
To further complicate things, the WSDL needed to be user-specific. A users logs in and request his/her WSDL. This turned out to be not too difficult, except for the “logs in” part. We didn’t want to work with client certificates, but we had decided to create some security by communicating over HTTPS. To do that with WCF, I needed to create a custom user-authenticator that supports a username/password digest in the request-headers. Google is your friend!
So customers now have (well: will have, it’s not in production yet) their own WSDL, and they can create strong-typed clients on their side, and all data is transferred over in an encrypted way. YEAH!
From our point of view, we only have to maintain one web service/endpoint. All configuration is done in the database. So a new customer gets a login, we define what can be requested (that’s a subscription/payment thing), and the web service now does the rest. No reconfiguration needed. Double YEAH!!
The new job is very nice. I’ve been put in charge of a part of their (I should say “our” now) software, and the task is to renew it. It’s a web services based piece of software, and the services need rewriting. They must be dynamic, and so does the contract (WSDL). That was more of a challenge than I anticipated, but today I got it both to work. Serializing dynamic objects in a proper way (not string arrays of keys combined with string arrays of values), and when the WSDL is requested the same dynamic magic takes place to give each user a customized contract.
All done in C# (WCF) running in IIS.
This week I installed the trial version of ReSharper in Visual Studio. That’s a big enhancement, and speed increaser. Some things are possible in vanilla Visual Studio as well, but not as well thought out and automatic. So maybe I’ll ask for it to be bought. Another 3+ weeks to try it out more.
Friday is hamburger day at work. One of my colleagues took on the task to bake burgers on our toaster/grill. Every Friday. So that’s a treat every week, since he’s very good at it. It was a quiet Friday, but productive. Must be because of the burgers
Doing the GeoDjango tutorial for the umpth time, Python caught me again. The way the language works, it seems to flawlessly connect with the way I think when I’m programming.
I needed to do some manual upgrading, can’t remember what exactly, but that had to do with the Ubuntu registries not having the latest version or so. Nothing special.
Thinking about two projects to create now. One is an idea I already have for a long time, so maybe it will see daylight some time.
Yes, that’s right! The deal was made earlier this week, but I wanted to go public with it after talking to my boss. Which I did this afternoon. He took it very well, I guess.
For the first time in a long time, I will be leaving consultancy behind me. Unfortunately that also means no more company car, so I’ll need to buy one myself in time. My new title is Senior Developer, and I guess the senior refers to the amount of grey hair I have, or the lack of hair for that matter
I will be starting my new job February 1st, since I have a 2 months notice on my current contract. Plenty of time to finish my current project(s), and to transfer the knowledge I have of previous projects to some of my colleagues.
I’ve never been a real fan of the Eclipse IDE, so Google moving away from it and changing the development environment to IntelliJ IDEA seems a good thing. There’s an early access preview version for those interested. Get version 0.1.1 here, but bear in mind that it’s not feature complete yet.
I’m an oldskool Oracle user, so I learned and used joins in the oldfashioned way. Just name all the tables in the WHERE-clause, and specify the join conditions, and use (+) for outer joins. Times change, and the new syntax has been around for years. Never really used it, but today I did, and I found this image on the internet, I thought I’d share it, since I think it’s quite helpful.
It clearly shows how to use LEFT and RIGHT joins.
delayns() not declared in this scope
The reason for this is that the Arduino 1.0.1 environment is different from the latest pre 1.x version (0023). So if you include the following lines on top of your LIBRARIES (yes, you have to modify the old library files), things should work out:
#if defined(ARDUINO) && ARDUINO >= 100 #include "Arduino.h" #else #include "WProgram.h" #endif
At least I could compile my sketches, now lets see if they do what I told them to