Sunday, 23 October 2011

Single Sign on

Single Sign on
This post is a bit of an experiment, rather than like most of my posts where I come up with an idea and document it once complete I am going to blog about my progress getting this to work as I go, a sort of impressionist blog, which is most likely the way they were originally intended to be done.

What is SSO?
The way I see single sign on, which may not be the right way to view it, is that a user in a company has to interact with a multitude of computer systems, each of which requires some form of authentication before access is granted and single sign on means that a user once authenticated in one system will auto-magically be authenticated in the others without being prompted for a username and password or whatever.

The first method that I am looking at is Kerberos, the way I think this works is that a user signs in using whatever means at their disposal (card reader, password or biometric scanner) then that user has a token that is given to any other systems that require authentication.
The premise here is that there is a single secure token provider that every application within the enterprise/corporation then trusts.

JAAS the java way
Being a Java developer on enterprise systems I would have been lucky to have not had to have some experience with using JAAS the java authentication authorisation service.  This is a pluggable system like much of the JEE components where any particular vendor can make their own implementation, and as luck would have it there is already a Kerberos version available.

JBoss
I am going to use JBoss (likely version 4 but maybe 7 as I kinda like where that's going) as my application server, I may show using GlassFish too, plus I may also show it being used in tomcat just for kicks.

Step 1
In order to actually test these things out I need to actually have a kerberos system setup, as I tend to use Linux the instructions for setting this up will be linux orientated.

I followed these instructions for installing and setting up a kerberos system.
I rapidly hit a stumbling block with the first pre-requisite of the installation
Before installing the Kerberos server a properly configured DNS server is needed for your domain
D'oh! I don't have a DNS server, so I went to get one and set it up.  Doing a quick google I found these instructions which are for Ubuntu and as I am using a Debian system thought it would work.  I didn't bother following any of the reverse DNS lookup instructions as (a) I am lazy and (b) I want to move on quickly from setting up a dns.  The only thing to note at this point is that nslookup gw didn't give any results.

Back to installing Kerberos
So now that dns seems to be installed time to go back to the kerberos instructions.

Everytime I try  kinit steve/admin I get

kinit: Cannot resolve network address for KDC in realm "RLJASSOCIATES" while getting initial credentials

I altered the instructions for both dns installation and kerberos installation so that the domain is RLJASSOCIATES.
I found a forum that states;
"each host's IP address must reverse-resolve the canonical name."
so I guess it's time to go back to the DNS setup instructions once more, damn it serves me right for being lazy in the first place!

Ok the DNS setup doesn't work right off the bat but I did find a nice little utility to test called named-checkzone which I can use to check the zone files for correctness.  Needless to say they weren't.  Well I've been over those DNS instructions many times now so I can be absolutely sure my setup matches and guess what...they don't work so I guess they're crap!

I think there might have been a missing entry in the RLJASSOCIATES.db file so I added these lines
ns        IN        A        192.168.1.34
@        IN        NS        ns.RLJASSOCIATES
and that seems to allow nslookup gw to work.

however running sudo kinit steve/admin still results in the error
kinit: Cannot resolve network address for KDC in realm "RLJASSOCIATES" while getting initial credentials
Setting up krb5.conf
I remembered that after the first fault with the kerberos setup I uninstalled it, then when I re-installed it I was never asked the same questions about default domains once the installation was complete, this may have been the route cause of this last failure.
Essentially there is a file called /etc/krb5.conf that seems to list settings that are relevant for different domains, so I took a guess at what to write and put this in;
    RLJASSOCIATES = {
                kdc = rjohnson-acer.RLJASSOCIATES
                admin_server = rjohnson-acer.RLJASSOCIATES
                default_domain = RLJASSOCIATES
    }
I have no idea if this is correct or not apart from when I ran this command kinit steve/admin instead of it failing with the usual error message shown above it prompted for the password, which I typed in and ... nothing happened which still means no error :)

The next fault to get over in the kerberos instructions is
#> kinit steve@RLJASSOCIATES
kinit: Client not found in Kerberos database while getting initial credentials
 Once again I have no idea what is causing this to happen, so on to professor google.
Not actually sure this is an error as the list of principals is now
kadmin:  list_principals
K/M@RLJASSOCIATES
kadmin/admin@RLJASSOCIATES
kadmin/changepw@RLJASSOCIATES
kadmin/history@RLJASSOCIATES
kadmin/rjohnson-acer@RLJASSOCIATES
krbtgt/RLJASSOCIATES@RLJASSOCIATES
steve/admin@RLJASSOCIATES
The big issue is that it says I am not entering the correct password for kadmin/admin and yet I know damn well what I entered so this might be an issue with the re-installation I tried earlier ooops!

JBoss
I am going to start with a vanilla installation of jboss-4.2.3.GA, simply because I wanted to start with a version 4 and this was the latest 4 I found on jboss community site, don't worry I'll show the same kerberos stuff on jboss-7.0.2, I would want to use 7.1.0 as this is the version where remote ejb calls are supported but it doesn't exist yet tee hee :)

Since JBoss comes with a jmx-console lets try to secure the access to this web app with kerberos.

The current setup for security on this app is;

   <application-policy name="jmx-console">
      <authentication>
          <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule" flag="required">
              <module-option name="usersProperties">props/jmx-console-users.properties</module-option>
              <module-option name="rolesProperties">props/jmx-console-roles.properties</module-option>
          </login-module>
       </authentication>
    </application-policy>

So in order to use the same login that I want to use for kerberos I've created a user called steve and I've added that to the props/jmx-console-users.properties.
Stupidly the first time I added the new user I forgot to also add him to the roles properties file, the trouble is you can't sign in but you don't get any error messages in the jboss log which was a bit annoying.

Introducing Krb5LoginModule
I've never used this login module before so it's going to be a learning experience :)
I found some documentation for Krb5LoginModule and just decided to run with it.

So I changed the login-config.xml to read

    <application-policy name="jmx-console">
       <authentication>
          <login-module code="com.sun.security.auth.module.Krb5LoginModule" flag="required">
           <module-option name="debug">true</module-option>
          </login-module>
       </authentication>
    </application-policy>

As you can see I've only set a single option, this is just so I can see what happens, remember I have no idea.


Hooray
It looks like I was successful, the usual prompt popped up so I logged in as Steve and hey presto got this in the log

10:38:00,893 INFO  [STDOUT]         [Krb5LoginModule] user entered username: steve
10:38:00,978 INFO  [STDOUT] Acquire TGT using AS Exchange
10:38:01,056 INFO  [STDOUT] principal is steve@RLJASSOCIATES
10:38:01,057 INFO  [STDOUT] EncryptionKey: keyType=3 keyBytes (hex dump)=0000: FE 75 E3 7A 1A 29 7C A8  
10:38:01,057 INFO  [STDOUT] EncryptionKey: keyType=1 keyBytes (hex dump)=0000: FE 75 E3 7A 1A 29 7C A8  
10:38:01,057 INFO  [STDOUT] EncryptionKey: keyType=23 keyBytes (hex dump)=0000: 3D 8C CB 99 50 CC 9A 13   69 12 6D AA BF E7 C6 4E  =...P...i.m....N
10:38:01,058 INFO  [STDOUT] EncryptionKey: keyType=16 keyBytes (hex dump)=0000: 79 75 9B A7 67 EC BF 2F   7A 32 C1 C8 9E AB 57 0D  yu..g../z2....W.
0010: 5B B3 3D D0 64 F4 34 4F  
10:38:01,058 INFO  [STDOUT] EncryptionKey: keyType=17 keyBytes (hex dump)=0000: 87 17 D5 4C 61 35 48 4D   D4 8B 14 58 91 E5 E8 AE  ...La5HM...X....
10:38:01,078 INFO  [STDOUT] Commit Succeeded


Actually do SSO
So far we have a working test environment setup and have been able to make a call out to Kerberos to authenticate a user.

Although this is a good start to the experiment what we don't have are;
  • a way of automatically sending a username to do the login, this wouldn't just be a username but would need to be the TGT.
  • a way to set the Subject to the user signing in, currently we only have the principal.
I should have read the documentation as we really do have the subject of the person doing the login this is bundled up in the Credentials of the login itself, so score!!
The Connector 
The way that I want to pass the name through rather than prompt for it is to use the java system property user.name this seems like the easiest thing to do for this simple test.  Essentially the way I see this working is that the name is used to retrieve a TGT from the local cache if there is one, and of course if there is one then they are authenticated and this TGT can then be passed from app to app.  In order to do this before a call reaches the application running on the application server I intend to use connectors (or valves in tomcat) which means I need to brush up on my JCA knowledge first...more on this the next time I have some free time to add to it.

Lets take a step back
Before getting too far ahead of ourselves I think it's time to explain what exactly Kerberos will entail, much of the information about Kerberos in an easy to understand  style can be found on the MSDN site but here is the super abridged version of events.
The way my system is setup is that the is a server called the KDC (kerberos distribution centre) which has two roles.  The first role is upon request a valid user is given a ticket to get tickets (cunningly disguised as a TGT), then when a user wants to access a service they use the TGT to get a service request ticket.  Finally with this ticket the user authenticates his/her self with the service they wish to use.

The stage that our test system is at is that when a user requests the resource at /jmx-console 


Done...I think
Not sure if this is done now but it seems to be which is strange as I've set virtually nothing up?


login-config.xml
    <application-policy name="jmx-console">
       <authentication>
          <login-module code="com.sun.security.auth.module.Krb5LoginModule" flag="required">
        <module-option name="debug">true</module-option>
        <module-option name="useTicketCache">true</module-option>
        <module-option name="doNotPrompt">false</module-option>
        <module-option name="useKeyTab">true</module-option>
        <module-option name="useKeyTab">true</module-option>
          </login-module>
       </authentication>
    </application-policy>
Now when I log in to jmx-console it seems to authenticate me when I have a service ticket already.

Firefox
I also discovered that if you put about:config into firefox and then filter on negotiation you can set network.negotiate-auth.trusted-uris; to the domain kerberos authenticates against et voila ! .RLJASSOCIATES

But is it SSO
The simple truth is I don't know at the moment I haven't tested it and this is because I am not sure how to test it, so lets look back at square 1 what was the criteria;

  1. not be able to access resource (/jmx-console) if I am not authenticated.
  2. authenticate via the KDC.
  3. once authenticated don't get prompted for authentication again.
I think that I have managed 2 of the 3 above points, however the third is a partial victory.  I don't get asked for authentication when I visit the resource in a second tab of the browser but this is simply the typical cookie authentication, when I use a different browser I still get asked for authentication and it is this step that I need to get rid of in order to claim SSO works.  The trouble is I am not sure how to do that with the tools that I have used so far, I think I might need to write my own LoginModule or something. 

One More Piece of the puzzle
I've not had much time to look into all of this stuff at the moment and tidy up this rambling blog post, this link looks like it'll be quite useful.
http://download.oracle.com/javase/1.4.2/docs/guide/security/jgss/single-signon.html 
http://download.oracle.com/javase/1.5.0/docs/guide/security/jgss/tutorials/JGSSvsJSSE.html
http://download.oracle.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html 

Thursday, 13 October 2011

Exceptions (again)

The argument that keeps on giving :)
This is the fairest assessment that I think I've ever made of exception (specific to java, possibly).

Exceptions are a very good way of having more than one return type on call. Originally they were invented so that constructors could inform the caller of something rather than having to have a special "error" type of every class.
Handling exceptions early isn't always the best idea, code where an exception occurs may not be best suited to remedy it as the lowest level tends to be a generic handler of something.
Take for example the File API, if a file can't be found it is highly unlikely that the File object should be made to handle every failure adequately. Maybe it should simply return a null, but how then do we know the file couldn't be found rather than it couldn't be read? These 2 scenarios should be handled in very different ways (1) file not found: get the user to pick another (2) read error: try again X times then fail. Scenario 1 requires user interaction so bubble the exception up through the code so the user can pick another file.
There is also an argument against interpreting an exception at a lower level and sending specific "error" style replies up the chain.
  1. Multiple levels in the call stack will have to handle error return states.
  2. The returned objects would each have to have an error version created i.e.
    public A getA()
        public B doB()
            public C getC()
    
    each return type A, B, C would have to have an error version created, plus each call would have to handle this.
  3. There is already an adequate mechanism to repeatedly send exceptional responses up the stack regardless of method return type.
  4. Sometimes it is impractical to escape from a normal flow and return a meaningful error, the use of try catch blocks greatly simplifies this.

Also
Also the idea that exceptions are errors is flawed, exceptions are an
exceptional flow, the clearest use of this fact I think is the Thread
usage of InterruptedException. When things are running concurrently (even
pseudo concurrently) a message should be sent at any point during the flow
and the way to handle this is with exceptions.

The problem is that with legacy old shit (and I mean it is shit) does
the biggest sin of all which is to catch ALL general exceptions and simply
throw it without adding a cause to it. No attempt is made to handle the
exception where it is relevant which means the final resting place of a
thrown exception is the client which is why some people believe that the client
shouldn't handle them because 9 times in 10 the client is the wrong place
to handle them.

Sunday, 19 June 2011

IT Confidence

Developer confidence / arrogance

I had a sudden realisation about why most developers come across as arrogant. Ok, so in a lot of cases it is because they are, but I am always accused of being arrogant (mostly by my wife) so decided to look into why that was.

During a developers career they are always trying to sell their solution to a problem, usually without any evidence, the manager in charge has to be convinced that your idea is the correct solution over and above all other solutions in order for you to win the right to implement it. I think this is where it all stems from you have to have ultimate confidence in an idea and it is this confidence that could be observed as arrogance.

Friday, 3 June 2011

Religion

I recently attended a christening at a local church.

Things I noted were that religion is a very good form of control, it uses some clever psychological tricks to reinforce its ideals such as chanting and mob vilification. It is a commonly understood fact that people when acting as a group rather than as free thinking individuals are capable of vilifying something that is different from themselves for the simple reason that its not them. Another time when this psychological trick was used was by Adolf Hitler when he managed to turn a country against a race via clever propaganda and the mob reflex of human beings.

By acting as a mob in this way a persons individuality is damaged, keep it up for long enough and it is destroyed, when a persons individuality is destroyed they then become automatons, very susceptible to suggestion almost regardless of the nonsense of the suggestion.

I used to attend church as a child however I was lucky enough to have very intelligent and sensible parents that neither wanted to push me away from religion or enforce their own doctrine on me. They wanted me to experience religion and for me to make up my own mind, this is all that can be done if a child is to retain their individuality and it encouraged independent thought and reinforced the belief that I should question everything. I don't think I was liked in church for the fact that I would ask questions and follow them through to their logical conclusion without prejudice, malice or preconceptions. I will always remember one particular discrepancy in the logic of the bible “if god forgives all sins then why does hell exist...it's for people that have committed sins...which are presumably forgiven so they no longer have sin...they will always have sin...so what does it mean to be forgiven...it means your sin is removed...so god forgives all sin and it is removed, so why does hell exist...it doesn't work like that...so god doesn't forgive all sin?...yes he does...so hell is empty...no hell keeps all sinners e.t.c. Keep following these arguments through to their conclusion again without emotion and you come to a few plausible conclusions 1. that religion is full of discrepancies, flaws and illogical leaps that are nonsensical. 2. you need to have a leap of faith!

A leap of faith, this is religious parlance for ignoring what you know to be true in favour of mob rules.

A nice quote in Dracula is something like "faith means convincing yourself of something you know not to be true actually is." - I'll try and find the actual quote later

It is this “leap of faith” idea that is very clever when it comes to control, as explained before when under the control of mob mentality you freely adhere to the reality that is put before you and the more ridiculous it becomes the more likely you are to reject it, but not if you are made to bring yourself into question which is where the “leap of faith” comes into its own. People already indoctrinated into religion will shun those that question things rather than accept what they are told at face value, which makes those people doing the questioning into the vilified culture which they don't want to be so weak of will take a “leap of faith” and those that don't serve to reinforce the beliefs of the rest of the mob.

Religion is a remarkable control mechanism that works best on the masses which is exactly what it was invented for.

The problem occurs when the original people who developed the control are no longer around and the followers are left to try and make sense of things. Without someone to give direction the discrepancies are fudged until a new leader takes over. This can and has caused factions to form while the mob lurch around like a hydra with a head missing, the scary thing is that there is no control over the leaders that gain control and hence fanaticism is allowed to take hold.

This could all be remedied if everyone simply retained their own individuality. As I said before I judge these things without emotion, I truly have no feeling good or bad towards religion. In certain circumstances it is a good thing it provides support groups and if everyone made a promise to be nice to one another the world would be a better place but sadly no such religion exists (although Buddhism comes pretty close).

Saturday, 12 March 2011

QCon London 2011

Once again I went to London, and once again it did not disappoint :) this is by far the best meeting of the minds that I have the pleasure of going to. Although I must admit I find the choice in flavours of cake a bit weird, chocolate and lime ?!?!

I heard some interesting talks, I wish that I had the confidence to ask questions when I am there as there are many people I would like to pick the brains of. Maybe next time I'll pluck up the courage to ask why "facts" displayed by two different talks were in complete opposition or why the facebook team seem to think the problems they have faced are unique to them.

So on with my break down of some talks I personally attended, the following is a series of opinions. The thing about opinions is they are mine and you almost certainly won't agree 100%.

Wednesday

Why Don't We Learn?

This was an enlightening, informal chat with the audience that explained the principles of learning combining many ideas from the psychology field rather than IT. The speaker Russ Miles was enthusiastic and fluid not having to read from slides and making sure that his voice projected. A brief mention of the placebo effect was the only item that wasn't accompanied by facts, a simple read of some Ben Goldacre could solve that.

Software quality - you know it when you see it

Once again a very practised talk that conveyed in a short time the fact that you really do know good code when you see it, or rather you can tell when there is bad code. Erik Dörnenburg produced a slick series of graphical views of code that can make a series of issues clearly visible even to inexperienced personnel that don't code for a living. Such things that we all know are bad such as monolithic classes a high degree of coupling as well as pointless interfaces.

Learning and perverse incentives: "The Evil Hat"

This was one of those choices that I was unsure of at the time, I needn't have been. The speaker Liz Keogh was a brilliant speaker, she mixed up real life experience and sarcasm just the way I like it. The actual content of the talk was essentially carrot works better than stick and if you set a kpi prepare to have it gamed! She cited one example of a kpi being gamed that rang true with circumstances that I've had the misfortune of coming in contact with. One of her friends said he had a new project manager that had told him that the project was to be listed as "in trouble" and that he was calling an emergency meeting. The project was meeting deadlines and bugs were minimal so he couldn't understand why it needed saving. Liz asked a simple question, "are pm's bonuses related to rescued projects", bingo, the pm would get a bonus for simply saying a project was in trouble so that he could be seen to swoop in and "save" it.

Agile Operations - optimising the business on shell script at a time

I am going to be slightly controversial on this one, so be warned. Dan as always was a brilliant speaker as was his co-host (I resist the term side-kick) Chris Read. However the talk didn't really do it for me, the comedy was good but over-played. I will admit that it's probably just me that doesn't yet get it as Dan North himself admits he didn't "get it" straight away. Yes it is nice to be able to deploy an image across multiple servers at the press of a button and send changes out in a similar fashion, but this doesn't seem new to me as it seems obvious.

Java without GC Pauses

Gil Tene was a comfortable speaker, I did get the impression from his demeanour on stage that he was beginning to get tired of having to explain the same things over and over again and people not getting it. I have to admit that this is the talk I had wanted to see the most all day, I like the clever stuff that happens at a low level thus my love of the JIT e.t.c.
The solution to the compaction problem seems so simple once explained, it uses virtualisation so that rather than change physical memory during compaction (the long part of a full GC) you alter the vector table of memory. The only issue that this has is that Azul's GC (C4 I think) does require being installed in unison with some virtualisation server...as I understand it anyway??? This idea seemed so obvious and if the charts are to be believed it is very effective so it seems a no brainer that virtual-pointers become the next change for the linux kernel. Loved this talk immensely, however on day 3 of QCon it was bought into question.

Thursday

Testing for the unexpected

This talk given by Ulf Wiger was a surprise for me, in a pleasant way. To be honest I had no idea which presentation took my fancy and as it is always good to learn something "totally" different from normal I went along. I didn't really know how we possibly could test what was not expected and in walk quicktest. Essentially you fill a series of tests up that are then filled with essentially random data. I tend to do this as a matter of course so the fact that there is a framework for it probably means I am missing a trick.

Data Architecture at Twitter scale - Nick Kallen

I can't really say much but it was a good talk, no surprises also no exceptional solutions to problems. The fact that I've written less about this talk doesn't mean it was less brilliant than the others it was great maybe I'll add some details later :)

Releasing Fast Code: the DevOps Approach to performance

I can't remember this one, hmmm need to review my notes

Better is Better

This was a somewhat strange talk. It was billed as being a bit of a rant and to be fair to the speaker that is exactly what it was. I did feel a bit sorry for the speaker as he was new to public speaking and had fallen into the same traps that all new comers do, slightly mumbling and stumbling. Things weren't helped by the fact that he moved off mic as he paced on stage. All this is rather negative at the end of the day it was his personal experience as a story, I found this quite interesting as I do enjoy hearing about the history of computing. The history of computing is very important at the moment as we seem to be re-living it, I'll blog what I mean on this later.

I went to another talk on Thursday but can't find the details for it unfortunately.

Friday

High performance web applications in Haskell - Steve Vinoski

I had high hopes for this talk, sadly totally unfounded. The speaker was very arrogant and childish, never passing up an opportunity to bad mouth another language. These "my language is better than yours so there nerr nerr nee nerr nerr" talks drive me mad. I feel like grabbing the guy shaking him and saying "Ok I get it you hate anything that isn't your language, tell me why yours is good not why any other is bad." these people say this language is more concise without realising that there is context to this claim for example recursion makes for very concise code in a lot of cases but not all plus there are other concerns to a language readability, maintainability, performance (that's right sometimes functional is not faster than procedural sometimes it is), plus there is always the expertise of the people looking at the code.

Anyway I digress this guy got off to a bad start, he did reign it in once he concentrated on the idea of the talk, however I waited to hear some Haskell my functional language of choice only not to hear any he did mention Erlang and throw some (badly formatted) slides containing very basic Haskell up but there was no depth to it. I actually tweeted a bad thing which I don't like doing as concentrating on the negative is not good, unless it's funny :)

HTML 5 Design/Development Tooling (+HTML and Flash)

Not really a talk this one, more of a sales pitch from the Adobe guys. I liked seeing what can be done but would have liked to have seen what was going on underneath the tools if that makes sense. I'll admit I am no longer into web design and GUI's as I find the server side more interesting so have fallen behind with HTML5 seeing what can be done in this talk has prompted me to learn about it especially as the company I work for use flex to produce their GUI. My work colleague who joined me for this presentation was not interested in the talk as all of the tools being demo'd he had already seen so sorry @DavidArno but I did enjoy it to a point. There is however the danger that QCon talks will start to become more about selling stuff than pure knowledge sharing which would be a terrible thing to happen. On that note there seemed to be more talks around a product (twitter, facebook, dynatrace, atlassian, adobe, azul ...) than last year so maybe the knowledge rot has already started.

Performance Tuning for Java Applications

First of all this room was far too small for the number of people that attended the talk, it got really hot and at one point I had to leave to prevent myself passing out only to return to find someone sitting in my seat which I had left my belongings on to inform anyone that I was going to return, some people are dumb.
The speaker was great, it felt like an informal chat about how he tests products at Atlassian I don't know if it is a cultural thing but most Australians and Australian companies seem to foster a very easy going style that I respond well to George Barnett spends his time at Atlassian performance testing and really knows his stuff. I was however concerned at one point though as the charts he showed for heap size were in complete contradiction of the ones the Azul guy showed on the first day. George said if you have the memory available then use it in the heap and showed the performance increase even when the complete heap wasn't being used, whereas Gil Tene showed that compaction increased in stop-the-world length of time to run which had a marked effect on system performance. The only thing I can think that could make them both right is that the applications they used for testing were utilizing the heap in very different ways. confluence and jira for example should have short lived classes of small size so that even if they live long enough to reach old space the gc could easily remove them with concurrent mark sweep and not have much compaction whereas Gil may have used a system with irregular classes and life expectancies. This is something that George made clear at the start of the talk he was ONLY using Atlassian products and that anyone who blindly applied his performance tweaks to their system deserved every bit of failure they got, unless the system they were tuning was an Atlassian product.
Following on from this I did learn that in order to performance tune an application you have to know the application, how it uses memory and indeed what the current performance is before making any changes otherwise how do you know if you are making any improvements.

Using a Graph database to power the web [Rick Bullota & Emil Eifrem]

I did really enjoy this talk, it didn't expose me to anything new but was nice to hear that a few areas of mathematics that I enjoy are bubbling up to the surface graph theory and set algebra. The talk could have been more weighted to neo4j than thingworx as I was interested in the technology used more than they was a single solution was applied, but case studies are a way to learn I suppose as long as you remember each situation carries it's own unique attributes.

HTML5 and the dawn of rich mobile web applications

I didn't hold out much hope for another html5 talk given the sales pitch Adobe talk from earlier, but boy was I wrong.
This guy (James Pearce) was so enthusiastic and enthralling that you couldn't help but fall in love with the subject matter every bit as much as he obviously had. He started by demo'ing how we have learnt that the web is not just sitting at a desk and that it isn't just a change in screen size that we need to take into account but the whole interface and what visitors to sites want to do. He cited some good and some unexpectedly bad examples of where this is not done before showing some simple code and explaining more about offline html applications. This was a fast paced exciting talk I was blown away especially as it was a subject that over the past few years I've shown less interest in.

#qconlondon

Wednesday, 5 January 2011

3D stole my sequel :(

I am a geek and I love films so it's a no brainer that I love Tron, so how excited do you think I was when I heard about the sequel.

I have now seen the sequel and it was nice, but no smash hit.

Pros and Cons

Pro, plus or good point Con, bad point :(
Jeff Bridges as always is fantastic 3D was rubbish and actually a gimmic that took away some of the magic, Tron consists of massive contrast of bright colour and blackness. Sadly when your wearing 3D specs that act like sunglasses this fact is somewhat muted.
CGI is amazing (maybe too good, if that's possible). I like Daft Punk, but the music should be secondary to the action, supporting it and adding that extra depth and not a lead role in it. The music for the first quarter was intrusive and frankly didn't fit what was going on.
Garrett Hedlund was much better than I had anticipated Some parts were so camp I thought I was watching a sequel to Flash Gordon.
Paying tribute to the original especially the line That is a big door To make up for a lack of story we were subjected to a number of travelling periods, moving from one place to another where nothing much happened, presumably showing off some of the superb cgi that has been employed.
Some of the dialogue was a bit trying at times. I have to tread carefully here as the bits in question may have been good actors ad-libing. But using words like my bag and trip in an 80's style down with the kids manner was a bit gag enducing.

With all that said this wasn't a bad film, neither was it a great film, I left the cinema feeling "blah" about the whole thing.

maybe I expected too much but I am fed up of films consisting of pretty people not generally acting very well and letting gimmicks like 3D or CGI take the place of good story telling!

Monday, 20 December 2010

Fan Boys

1. What is a Fanboy
A Fanboy is someone that holds one particular thing be it a manufacturer, programming language or producer in high regard to the exclusion of all other alternatives without a logical justifiable and measurable reason.

2. Why I dislike Fanboys
I am a scientist by heart and a software developer by profession, this makes analysis my bible and the search for explanation my pilgrimage. Fanboys seek to get in the way of this quest for no obvious reason other than lack of interest in intellectual discovery and experimentation, this to me makes them unworthy of sentience.

The reason I make this seemingly harsh conclusion is that the thing separating us from beasts (I say the thing although there are many) is our ability and intonation towards discovery of facts based upon previously acquired knowledge in the same manner, rather than surviving on our instincts as beasts do we improve upon past breeds by education and investigation.

This is at odds with the fanboys stymied regards for investigation.

Tuesday, 19 October 2010

Access properties as if they are constants

Goal
Sometimes it is nice to be able to access properties from a properties file in the same way as enums are accessed within Java. By this I mean that you can simply use the '.' (dot) notation and you get exactly what you expect.

for example with this enum

enum Colours { 
    BLUE(1), GREEN(2), RED(3);
    private int num;
    Colours( final int i ) {
        num = i;
    }
    int getValue() {
        return num; 
    }
}

you can expect that
int iCol = Colours.GREEN.getValue();
will not only compile but also give the correct number to iCol.
Now imagine that the colour blue is no longer to be represented by the number 1 but the number 7 instead, you would need to re-compile you enum in order to get the correct number.

Very Simple Solution
now take this code
enum KFType {
    type( "type", ConversionType.INT ),
    words( "words", ConversionType.STRING ),
    //example in overriding the getter
    special( "special", ConversionType.INT ) {
        @SuppressWarnings( "unchecked" )
        @Override
        T getValue() {
            Integer t = super.getValue();
            return (T) Integer.valueOf( t.intValue() + 10 );
        }
    };

    private ConversionType c;
    private String tag;
    private static final Properties keyFile = new Properties();
    static {
        try {
            keyFile.load( new FileInputStream( "path to props" ) );
        } catch ( IOException ioe ) {
            ioe.printStackTrace();
        }
    }
    KFType( final String t, final ConversionType con ) {
        c = con;
        tag = t;
    }
    T getValue() {
        return c.convert( keyFile.get( tag ) );
    }
}

@SuppressWarnings( "unchecked" )
enum ConversionType {
    INT {
        Integer convert( Object o ) {
            return Integer.valueOf( o.toString() );
        }
    },
    STRING {
        String convert( Object o ) {
            return o.toString();
        }
    };
    abstract T convert( Object o );
}

The disadvantage here is that in order to get any changed values from the properties file the jvm will need to reload the enumerated type which normally means a restart (I think). The big advantage here is that you can now use properties from properties file, or an xml file as if they were code.
I have also shown that you can perform some sort of transformation to the values read from the properties file, here I simply add 10 to the number read but there is no reason why we couldn't wrap text in an http url or something similar.
Look at the output of this
@Test
public void testEnum() {
System.out.println( ((Integer)KFType.type.getValue()) + 10 );
System.out.println( ((Integer)KFType.special.getValue()) + 10 );
System.out.println( KFType.words.getValue() );
System.out.println( KFType.special.getValue().getClass() );
System.out.println( KFType.words.getValue().getClass() );
}


12355
120
these are words
class java.lang.Integer
class java.lang.String

this is when I use the following properties
type=12345
words=these are words
special=100




Monday, 11 October 2010

Kindle

Kindle I am probably the last person to provide his verdict about the Kindle, but I don't care here it is anyway. I have for sometime been looking for a good way to read books when not in my house. Being a developer I find that in order to read about a subject area I do normally tend to read several books side by side which is great when at a desk with plenty of space to spread out but not so great when on the move. I was quite surprised by the cost of the Kindle the only other device to come close in my opinion was the sony eReader and that was at least four hundred quid when I last checked. My kindle was £149 and it came with free 3G access to the kindle store plus I could actually browse the internet. It's not great at browsing the internet, but that's not what it's for. One thing it does do very well is that it has an 'Article Mode' that is great when reading wikipedia entries. The most important thing is that I could read it all day everyday when I was on holiday without getting eye strain or needing to recharge it. Whilst I was sat on the beach in the sun reading happily away it gave me great satisfaction to see people trying to read iPads and failing because of the glare from the sun and running out of power at inopportune moments like as soon as they get to the airport tee hee. All in all brilliant bit of kit, if it was any bigger then I wouldn't be able to put it in my suit pocket so I hope this never changes in future.

Sunday, 22 August 2010

Goddamn UbuntuOne

Ubuntu One promised so much, I could sync my files between all of my machines and pickup stuff from different machines when in foreign countries e.t.c. Shame it fails to deliver! Ubuntu One keep notifying the world of their new features and future proposals which would be very nice, if they actually had the current features working. I have lost count of the number of times the contact system has been down, and the number of times notes and files don't sync up. Now the latest failure is the fact that it sees fit to go tits up and then replace my files with ...u1conflict thus rendering them useless to me. I thought it might be a bit of fun to use git and have the repository on my ubuntuone, hey I know this is not what git is intended for but thought it would be a simple way to clone to other machines in different localities. I was very wrong on this one, very wrong. After the initial ubuntuone sync on a new machine something had gone wrong and the source files failed to be copied over, oh well I thought I'd just do an old fashioned git clone over ssh which failed soon after it started with a simple failed message. When I looked at my file system .git was now .gitu1conflict, as this was a clone I simple deleted the folders ready to try again, this time though git wouldn't connect. So I logged into the original machine only to discover that ubuntuone had sync'd up with the original machine after I deleted the repository from the second machine, so the bidirectional sync meant that I had just lost all of my git projects. I am not a happy bunny!!! I should have kept backups even though they were just simple disposable projects I used for learning new stuff, so annoying.

Saturday, 31 July 2010

Alonso, loser

a racing driver that seems unable to win a race without some form of cheating. He whines like a bitch with a grazed knee when someone is in front of him, and then to STEAL the race from his team mate 12 months after an accident that could have ended his carer is disgraceful. To win that race would have meant so much more to his team mate than to him, and after all of the words about helping the team the points gained by that shocking let through make no difference to the GP leader boards. A man that holds formula one with such contempt should himself be held in contempt. Alonso should be ashamed and so should Ferrari

Hooray, He's learnt

I am impressed by the way that Alonso has turned himself around, at least in my opinion. Lately he has been congratulating those that beat him, thanking his team for being good and generally being magnanimous in defeat. Also to be honest with his new opinion he seems to relish the fact that he will be (or rather is) able to compete against these people using driving rather than underhand politics.
Never thought I'd hear myself say it but he's turned around and I find him a much better racer for it, of course he still has to keep doing what he's doing to prove himself but so far so good.

Sunday, 2 May 2010

Exceptional Exceptions

Exceptions

Exceptions and exception handling isn't something that should be difficult to do, and nor is it in Java. However the trouble with exception handling in Java is that no one can agree on a sensible method for handling them.

It is for this reason that I have written what I believe to be the most adequate way to handle exceptions, and the reasons for making these decisions.

I feel that the best way to get my point across is with some simple, all be it contrived examples. I am from this point on going to assume that anyone reading this document is familiar with the concept of a try..catch..finally block

Lets start with a bit of background, there are Throwables, checked exceptions, runtime exceptions and errors within java. The easiest way to categorise these and a some what glossy high level view is to say that every exception is a Throwable, so we shall ignore this semantic verb for now. A checked exception is an exception that a method may throw when it is called, by being a checked exception it gives the user of the API a sort of heads up letting them know that they should handle the exception in whatever would be the appropriate manner given the context in which the API was being used in. Then there are runtime exceptions, these aren't listed as possible outcomes of calling a method but they can be caught and dealt with if the API user believes it to be worthwhile, for example if the opportunity for an array to be incorrectly accessed is a possible outcome of a method being used then perhaps some programming logic can be put in place to mitigate the problem slightly, this sort of issue is usually an indication that a better design should be put in place so that, for example, an array is never incorrectly accessed. Then there are errors, it is true to say that these more often than not should never be caught as they tend to be things that are not recoverable such as OutOfMemory which means the status of the JVM can no longer be relied upon.

Good practice when designing an API means that the usage is examined from the perspective of a typical user, I prefer to use Use Cases to examine the problem from the users perspective. For anyone not familiar with this method it simply means putting together a story of the course of events of a user using the particular API call. The useful thing about use cases is that there is a specific section set aside for what should happen as an exceptional case which can then be related directly to the implementation of the solution.

Example

As an example lets imagine a simple system in a hotel lobby that is used to lookup the room that a person is staying in by using their name as the search criteria. The Use case might look something like;

  1. type name of guest
  2. hit search*
  3. system displays the room number
Immediatley at point 2 we can think of an exceptional case, when the guest is not present in the hotel, this would result in an API that looked much like
public Integer getRoomForGuest( String guestName ) throws GuestNotFoundException;
Now behind the scenes the getRoomForGuest method may be accessing files, or a database or some other magical method of storing guest against room numbers, the point is that the user of the API shouldn't care about the fact that a FileNotFoundException or a SQLException may occur as this betrays the inner working of a method. Imagine the system is upgraded in the future from using a file system so that now it uses a database, if the API used to throw FileNotFoundException or IOException it would surely now have to throw a SQLException. Therefore through having a checked exception that is tighly coupled to the underlying implementation when the method implementation is altered the developer would have to alter every location where this method was called, and if the API was being used in another company their code may stop working which could result in them having to re-design/implement a new solution and this added cost could convince them to stop using your API. A friend raised the point that this could cause an exceptions true cause to be lost, I took it for granted that if anyone catches an exception they will as a matter of course add it to any exception being thrown as the "cause". Another point to raise here is that we should throw any exceptions that we really can't deal with. In the example above you could safely assume that an adequate response to not being able to find a person in the directory due to a FileNotFoundException or other IOException would be to say the person could not be found to the user. However many real life calls are not this simple, for example a with a different call it may be acceptable to inform a user of FileNotFoundException and other prescribed obviously solve-able exceptional cases but any other IOException that occurs should be considered more serious. In this case I would make the method call throw CallSpecificException (not the real name just an example) and IOException. The idea here is that the caller of our method would catch the specific exception and most likely tell the user but anything else would be dealt with differently most likely throwing to a higher authority in keeping with the idea of escalating exceptions that our caller can't directly deal with. Read on this idea should become clear.

I hear many people argue that we should not use checked exceptions instead make everything a runtime exception. I find this a little ...well...foolish, you see by having checked exceptions an API designer can give a hint to its user that here is something that could go wrong, or be out of the ordinary and you should think about how to handle it. The designer of the API is surely going to be more knowledgeable about the types of things that can go wrong during the operation of their code. If we were to replace these checked exceptions with runtime exceptions then the API user now has to either instinctively know what could possibly go wrong within someone elses code, which might be closed source and undocumented which means the only hint of what exceptions may occur is the method signature which now no longer has any mention of exceptions, this is why it seems a nonsense to turn everything into a RuntimeException.

Throwing and Catching

Another issue with exceptions seems to be when should they be caught and when should they be thrown, some people believe code should catch every Exception and some people believe you should catch nothing!!!Crazy surely we want to deal with exceptions that are pertinent to the code which has caused it and throw or escalate any exceptions that we weren't expecting and hence have no clear knowledge on how to recover from.

Lets look at the first option, catching every exception. By deciding that you want to catch every exception must mean that you intend to write code that can suitably handle every possible exception, that's fine until it isn't, that is to say in the typical mundane run of the mill processing, exceptions that you expect could happen are dealt with exactly as expected. However programs have a tendency to change like the shifting ice of the North sea, and with this change comes brand new exceptional cases that were not part of the original design. So where does this leave us? We are now catching an exception that we don't know what to do with, so our program responds by logging the problem and continuing as normal. The problem could be a simple one for example couldn't find a config file or something that any user should be able to rectify, or worse it could be a catastrophic failure that could be avoided if only the right people were notified, for example an upstream service has failed preventing a circular queue from being processed and thus will start to wrap around after X number of failed calls anyone handling a large throughput can understand just how serious a problem such as this can be. Many people still believe that the best, and sometimes only thing to do with exceptions is to log something exceptional occurred and continue. This denies the intent of exceptions they are not all meant to indicate that something went wrong in the program but merely that a path other than the norm should be pursued within the use case.

The next option is to catch nothing, i.e. throws Exception should be written at the end of each method signature. I see this as lazy coding, and not the good kind of lazy that leads a developer to automate repetative processes, but the bad kind of lazy that turns into a birds nest that someone else will have to unravell at a later date. The only thing this kind of coding goes to serve is to provide fodder to the WTF Blog. So should we never throw exceptions at all? Simple answer of course we should throw exceptions, but only when the design intends it to. Consider the throwing of an exception to be the escalation of an exceptional case, everything is being executed within the stack and the higher up this stack the more prevalent the process. What I mean by this is that in general the higher up the stack we get the more likely we are to want to shout about an exception happening, by thinking about this process it must surely seem obvious that if your code can't immediatley address the exceptional case occuring then it should let a higher authority know about it. Take the earlier queue underrun issue, you API deals with a small portion of the overall system that relies on the queue, your code doesn't know how to deal with this problem so it should escalate the issue by throwing it.

No one should see a Stack trace

This is both true and false, if no one was ever to see a stack trace there would be no need for them. In fact seeing a stack trace is very useful in solving the issue. I think this mantra has come about due to the fact that most developers are lazy when it comes to putting in simple handling code, we see it all the time an NPE occurs on some web server somewhere and the user gets shown a stack trace. The trace is useful to a developer (usually) but pointless to someone who is simply trying to buy something from the site. It is incredibly easy to redirect the user somewhere to say there has been a problem please bare with us while we try to fix it whilst at the same time sending the stack trace to someone that knows how to deal with it. The fact that this doesn't always get done is simply laziness.

...or at least only see a meaningful stack trace!

Not all developers were created equal, not all developers know how all parts of the systems they work with function, not all developers have the necessary skills to fix all problems a system can and will encounter during its normal operation. It is for this reason that 1st, 2nd and 3rd line support even exist. What might mean something to a 3rd line guru might as well be a foreign language to a 1st line and sometimes vice versa. By throwing specific checked exceptions at an appropriate level the correct trace can be sent to the person (or system) that can handle the exceptional case in the most appropriate manner. Working on large international systems it makes sense to have context sensative logging that will send stacks from a US system to the US support rather than to an Asian support desk or the user.

Conclusion

We all want to make systems that are good, that we can be proud of and say I don't think anyone could do a better job, it is for this reason that some forethought must be put into what exceptional cases are going to occur that I can deal with and anything my code can't deal with should be escalated. It is lazy to catch all exceptions with a catch (Exception... that simply logs what went wrong and continues.

Monday, 1 February 2010

a sign of things to come

I love Sun Microsystems always have done, they gave us java which has allowed me to accomplish so much with computers. I used to feel all warm inside when I drove past the Sun building on the M3 near Fleet, and I even loved their little Sun Spots as a bit of academic fun. However now good ol' Larry has his mits on it I just don't feel the same about it. Even the oracle icon leaves me feeling ... well nothing really it evokes no emotional response what-so-ever. Now I have tried to register a copy of Glassfish v3 and got this, simply by requesting my id. This shouldn't happen, have the people at Sun lost their pride, or have the lovely people from Oracle already taken their soles to dark place? Who knows, who really cares other than geeks like me.

HTTP Status 500 -


type Exception report

message

descriptionThe server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.NullPointerException

note The full stack traces of the exception and its root causes are available in the Sun GlassFish Enterprise Server v2.1 logs.


Sun GlassFish Enterprise Server v2.1

Wednesday, 6 January 2010

British people annoy me

I am really really really fed up of people moaning about Britain being the only country to suffer with snow. I was at a bus stop the other day and a woman was telling me about how the rest of Europe was fine and functioning as normal in the weather. The reason this angered me was because I happened to be standing in the bus stop with a few friends who had that day come over from the Nederlands and they said it was the same over there and Germany too. I hate it when people make up there minds about something like this and tell anyone who will listen that their opinion is fact, when it blatantley isn't, 5 seconds of searching and I found this article that PROVES the bogus reporting. http://www.dutchnews.nl/news/archives/2009/12/snow_causes_traffic_problems_i.php Imagine my surprise when the news channels (in the uk) also do all that they can to sensationalise the whole situation, for example a woman was reporting infront of a massive 6ft snow drift by the side of the road, however as the report wrapped up the camera did a 360 view and (a)where she was standing was the only area that still had snow and (b)the 6ft snow drift had been man made by people clearing the road of snow and dumping it all in one place. Why can't people be honest!

Tuesday, 25 August 2009

Waste

This is one thing that has really started to get on my nerves recentley, waste!!! People waste time energy and food and it really annoys me. Food! My number 1 pet hate that people waste, and the wasteful habits that are activley encouraged by super markets. My wife buys strawberries, she likes strawberries, yet she has a small appetite. She knows I don't eat them and she also knows that she won't eat more than 1 punnet in the time it takes for them to go off, and yet if there is a buy-one-get-one-free offer on she will walk away with 2 punnets. 1 will get eaten and the other will simply go off and be dumped straight into the compost bin. I've confronted her on this before as to why she is getting 2 punnets when 1 will more than suffice and the answer is she's getting more without spending anymore which you can't argue with. So the farmer that sells his fruit at a lower and lower price because supermarkets are giving them away only suffices to increase the material in my compost bin and reduce the amount of money the farmer gets for his fruit. This lays the blame squarely at the feet of supermarkets...I wonder what true, real and bonefide advantage this gets them?? Another one is food that does simply get thrown away, if you find yourself repeatedly having to throw food away as it has gone over then you are simply overestimating how much you need, or taking advantage of all of those BOGOF offers needlessly. The other thing is when you finish a meal and there is plenty left over is your first response to bin it, or to store it with the intention of turning it into something the following day. I must admit I am a bit of a dustbin for food but some of the best flavoured food I've had has been meals made the day before that have been aloud to marinade in the sauces for a full day strange but true :) Energy Energy being wasted is another bad one, this one carries a more hidden cost not just the environmental one but the fact that most energy is coming from fossil fuels that are for the most part controlled by some rather unsavoury characters and giving them more power is never a good plan. Take new televisions the bigger they are the more energy they tend to require some of the larger plasma tv's draw phenominal amounts of electricity. But there is a simpler energy wasting thing that gets on my nerves and that is this. I recentley bought a new tv, not massive as I live in a small house and big tv's in little houses look shit quite frankly. Anyway I set it up watched it for a bit then, when it came to switch it off realised there was ONLY a stand-by off pressing the button on the tv had the same effect as pressing the power button on the remote, it always used to be in times gone by that you could stand-by with the remote but you could actually switch the thing off as well therefore stopping it from drawing any stand-by current from the wall socket. This means the only way to switch it off properly is to switch it off at the wall which is less than convenient or else get another gadget to switch the plug off remotley but why should I when it was perfectly fine for tv manufacturers give proper power switches!! Time Here is a neat one, people waste so much time it is inconceivable, especially when using computers it would seem. I have heard of people ignoring a faster way of doing a task ( in Word especially ) because they (a) don't know (or want to know) about it (b) don't have "time" to investigate it or (c) their just too plain dumb and stuck in their ways to alter the process that they currently use. Well heres my answers to (a) if you use a tool for X hours a day wouldn't you want to be able to impress someone with just how quickly you can use it, (b) looking into something for an hour that will cut a repeated job down by 10 minutes will have repaid the initial investigation cost in just 6 repetitions (7 if you include the initial learning cycle) and (c) where do you start with someone who lacks the enthusiasm or ambition to better ones self?

Sunday, 28 June 2009

Brighton

When your in Brighton in the sunshine you realise just what a bipolar place it really is. The main shopping areas are full of pretentious idiots using the days shopping excursion as a cat walk procession. Whilst the little known out of the way places tend to be full of friendly free thinking individuals the likes of which I am pleased to meet. I had a strange experience in a restaurant in Brighton called Havana I spent my honeymoon in Cuba so was expecting the restaurant to have some sort of Cuban cuisine....bizarrely the decor consisted of white stone walls adorned with French photographs, the menu was bog standard Italian pasta, lasagne and gnocci and the staff were quite clearly from hell!! My wife and I walked in around lunch time and asked for a table for two the waitress pointed us to a table and walked off without showing us to it, strange but Ok I can live with that. We sat down and about 10 minutes later were asked if we're ready to order which we did, making sure to mind our p's and q's. The waitress came back and pretty much threw the cutlery on the table, must be having a bad day I thought. I had a cup of tea which consisted of a nice little pot a cup and a tiny jug of milk, the only thing is there was no milk in the jug and the cup and pot were dirty. I sort of expect this from the likes of a roadside cafe, but not a pratentious restaurant in Brighton. The meal came and to be honest it was nothing special, it wasn't bad but it wasn't anything noteworthy (I have had better meals at pizza express). After we finished and the plates were taken away we were not offered a look at the deserts menu or coffee or anything, no worse, a staggering 20 minutes of sitting there the waitress visited other tables and scooted off I tried to catch her attention but she either didn't notice or intentionally ignored me. So 25 minutes later I went to the bar paid the bill and for the first time ever I didn't leave a tip. The morale of this story is never visit the places in the centre that look the part because you'll only dissapointed, instead seek out the "off the beaten track" places where you will find nicer people and a better quality all round. Speaking of which I stumbled upon a wonderful little pub on the street parallel to gloucester road and there is always the basketmakers arms too :)

Saturday, 6 June 2009

PM...should he stay or should he go

This is a no brainer, at a time like this we should not throw the government into disarray by asking for a new PM and instead stick with the man that did pull the country out of decades of 'boom-bust' brought to us by a certain party that sold off all of the countries assets. The country is or should be run like it is a company, and one very successful business man ( Alan Sugar ) has spoken out in support of the current PM not on a personal level but from a business point of view. I still don't understand why the current government is getting such flak for rules that were created 200 years+ ago, most of the population are incapable of free thought and just go with whatever is written in the Sun. Rich people will vote Tory, why, because the Conservatives look after the mid/upper classes and the mid/upper wannabes, at the expense of the working classes and the working classes are incapable of realising this to a large extent. This all makes me angry not with the government but with the public. By members of parliament leaving at such a time I don't see it as a protest against the PM but I see it for what it is, an MP trying to further their own career at the expense of their constituency. By leaving rather than fighting for their constituency shows this person has more interest in their own career than helping the people. Remember the MP's are put in power to serve the people they are not elected so that the people can serve them

Monday, 18 May 2009

Politicians...can't live with 'em can't sell newspapers without 'em

I had an interesting conversation with someone, the only person I've found, that actually condones the behavior saying "I don't see what the problem is they did it within the rules. Thats the point, you can still do WRONG whilst remaining within the rules. Take tax dodgers for example, billions are lost each year through large corporations moving money about, all within the law but its still not right. In my mind these large countries are more or less taking money from hospitals and people that need it. Which leads me straight back to the expense claims of politicians, how does a politician getting a surround sound system benefit his/her constituency. Or a moat or a chandelier, just how out of touch with the common man are these people. A staggering percentage of people in the uk struggle to pay the mortgage and are more likely to know the characters of Eastenders than the front row in the house of lords. Sometimes I think the best thing to happen would be a revolution, then I am reminded of the absolute stupidity of the common man/woman and realise that it would spell disaster. Most people don't know what is good for them and would destroy themselves and those around them if they were to get into power!!!!!

Saturday, 11 April 2009

concurrency

Just read an interesting post about processors, which ones are better. The scary thing is someone had written "if you have a task to run on a single core, when you run it on a dual core it will complete twice as fast, FACT" well despite the fact this person has written FACT at the end it is totally untrue. Not only can the task not finish twice as fast, it may not complete any faster than a single core machine. This got me thinking, if this is a common misconception even in well regarded tech circles then maybe this explains why very little progress ( at least from what I've seen ) has been made into purposely writing programs to run on multiple cores. Presumably threads of operation are assigned to a particular processor already, this would help to load balance a system and yes vastly improve multithreading i.e. when we use several applications at the same time, however the programs themselves are not written for multiple cores, as far as I am aware. I might write an article about this at some point in the future, just as soon as I have more than a simple netbook to write with. Having said that, this netbook is fantastic, it still manages over 6 hours ( did 7.5 when it was new and running windows not linux ) of continuous use, building apps in netbeans whilst listening to music online e.t.c. very impressive. It's the Samsung NC10 if anyone is interested. Having said that I am seriously looking forward to what netbook offerings come off the back of nVidias ION, now that is a serious pico-ITX board. Whilst researching this I read an article stating that pico-ITX is currently the smallest ITX form factor after the nanao and micro, but I could have sworn the clever guys at VIA had announced a mobile-ITX form factor which was as small as a motorola V3 phone, could be wrong though so I'll have another look. Whilst on the subject of concurrency, does anyone have any metrics for using activeMQ topics as the broadcast bus in a distributed node concurrent system, the system I am looking into doesn't require so much speed to use a shared access memory model type design so I was curious about anyone elses finidings doing things this way.

Friday, 10 April 2009

interesting thought

just watching the tv and an advert popped up. "dettol kills 99.9% of bacteria" seems good, but I was thinking if dettol kills 99.9% of bacteria doesn't that mean dettol prevents your body from getting the opportunity to create 99.9% of antibodies for said bacteria. the old saying holds true, "what doesn't kill you makes you stronger". Obviously within reason.

Tuesday, 7 April 2009

got bored

I got bored so messed up my blog, don't really like it but hey I am in a bad place right now...only kidding :)

insurance are skum

I was burgled on the 4th of January, and to this day I am still having to ask my useless insurance company Marks and Spencer ( M&S ) for items. What on Earth do I pay them for when they take this long. I found out today that vouchers that have been given in order to pay for certain electrical items can only be used in a single store and can't be used online. No self respecting IT worker buys computer hardware from PC World or Currys, they are over priced and usually outdated. The only machines that come close to suiting my needs are web only offers, oh and by the way they only come close to serving me when I add an extra £50 of my hard earned savings into the mix. iVal the people responsible for aquiring items and sorting out compensation have so far not once called me about the electrical items, not a single time in their process have they been pro active. Credit where credit is due though the staff are nice when you speak to them on the phone, however I am beginning to feel they just tell you what you want to hear to get rid of you as several times messages weren't carried across. This whole fiasco makes me angry, now is not the time to be getting stressed out with all this stuff. To make matters just that little bit worse than they already are, I read an article in the paper that said even the police know who is behind our robbery and others in the area but are unable to prosecute as they haven't located where the goods are stashed. I've never wanted to crush someones larynx with my boot more than I do right now.

Friday, 13 March 2009

Amazing

I was playing with Ubuntu a bit more today, the bits that I don't really play with often are the very windowsy-nicey-nice bits, like the applications it gives you...and, well I really should they are of a much higher standard that the Microshaft windows offerings. For example I started Rhythmbox, its a sort of music library application that lets you listen to stuff in your library in much the same was as wmplayer does. In the past this has sprung into life when I plug my mp3 player in and I just shut it as I know I just want to transfer some files. The reason I am so excited by it is I wanted some background noise whilst I work on my code as music tends to keep me focused ( go figure ). So I clicked the radio button and after listening to Virgin Rock for a while it got a bit dull so I clicked the Last.fm icon not expecting much, I was wrong ( again!! ). If you ever used Pandora and were a little upset when it was suddenly no longer free then Last.fm is for you. Looking at the website they have gone through a lot of trouble making a clean simple intuative interface that actually took me by the hand and led me to exactly where I wanted to go. So the site is amazing and the selection of music it gave me was spot on too

Wednesday, 11 March 2009

my ordinary day

few things that people should know 1. Writing procedural code in an object oriented langauge does not make it an object oriented program magically. 2. coding progress is not measured by the number of lines written, nor is it inversely related to the number of lines written. With more lines code is bloated and specific purpose of routines/methods is blurred or multitudineous. With less lines but still no division of responsibilities the code is difficult to read and maintain. 3. fixing a bug with no investigation into the cause is the same as applying a plaster to something, yes it stops the bleeding for now but whatever was causing it may lead to death in the mean time. 4. when using an api I should not need to know the inner workings of its implementation, it should be as a simple box that answers my questions. 5. there is good laziness and bad laziness. Good laziness leads to automation and tools being created to make work easier. Bad laziness leads to no units tests, sloppy code and having to repeatedly perform the same operation time after time when it could be automated. 6. situations don't just improve, without someone willing to fix problems they will exist forever. 7. knowing a language syntax does not mean you are a good developer. You can be a good developer, able to see what conditions should exist, what things should be checked for and how something should work without even knowing a programming language UML is often enough. 8. experience teaches a developer, regardless of academic qualifications, experience is what truly matters.

Thursday, 12 February 2009

my god I am really a geek

I never thought I was a trekie, I hate Voyager and the Bill Shatner originals, I have never watched Enterprise and yet today I had a room of IT people calling me a trek nerd!! It all started when discussing a personal HUD as a pair of glassed that made you look like data, I corrected this statement by saying Jordy was the one with the glasses, it was played by Levar Burton. Strike 1, knowing the difference between data and jordy I then went on to say yes data was the android played by Brent Spiner Strike 2, knowing what Data was and who played him I followed this up with, you know the doctor from Independance day Strike 3, the nail in the coffin, knowing another sci-fi film that a guy from Star Trek was in. D'oh! Note to self: must remember when to stop talking :)

Friday, 6 February 2009

The typical UK drivers guide to driving in the snow

1. when driving in heavy snow make sure you leave no more than 2 inches between you and the car in front, because remember it'll only get you there quicker. 2. When moving away from stationary always rev the crap out of your engine before popping the clutch up, if you don't get grip straight away simply rev more the wheel is spinning so at some point you should start moving. 3. When turning corners ALWAYS whack the steering wheel to hard lock as fast as you possibly can, if you notice the car isn't turning in the desired direction be sure to once again rev the fuck out of the engine. 4. When you need to stop make sure you slam on those breaks as hard as possible, after all whats the point in having abs then not using it! 5. Before setting off remember that it doesn't matter that the MET office has said don't travel unless its a necessity you want to drive and your damned if your gonna let 'The Man' tell YOU what to do. You must have a f**king big exhause a f**king loud stereo and virtually black tinted windows. 6. To defrost the car its simpl, boil the kettle and pour all over the windscreen, ignore that creaking cracking sound it just means the snow is being scared away! 7. Never drive slowly in the snow it'll only make your tires cool down and they may become frozen to the floor. If some other guy is driving slowly, especially if they are doing 28mph in a 30mph zone, overtake them as no one tells YOU how fast to drive. 8. When its snowing always chose the most out of the way routes with plenty of hills. 9. If you are fortunate enough to enter a spin the only way to stop is to turn out of the skid, if it doesn't work first of all turn faster and harder its the only way. 10. The most important thing is, if you see anyone in trouble, especially if its a woman with small children in a ditch, wind down the window laugh, shout, turn the radio up and maybe even flip them off for being lame and not having a car with twice the amount of bhp as your IQ points!

Thursday, 5 February 2009

half arsed and happy

I have recently decided to have a crack at making some sort of editor, there are several formats of documents that I would like represented in a specific way and have been as yet unable to find any editors that meet my needs. Plus it would be a great opportunity to learn some of the finer points of Swing or whatever I eventually decide to use. As a side note: it may suit my purposes to make the editor using GTK since it is looking more and more like this is the best solution to the interface for my media centre. For the Swing MVC ( well in the style of mvc but more like message-delegate, I think ) you get a series of interfaces I'll add to this blog as time goes on but for now it looks like this A JEditorPane is an uneditable representation of some styled document, it editable subclass is the JTextPane - to be honest I would have named these the other way round to avoid confusion but thats me. a JEditorPane displays a StyledDocument, this is an extended version of the Document class which consists of lots of Elements that are held in a tree like structure, all of which makes sense. Each Element can have Attributes ( for example bold, italic, size... ), these attributes are what are translated to the visible difference in text and other objects. The Document itself does not carry state, so we don't know where any caret may be or anything that is selected, it is just the data that forms the Document. In order to have state and hence to be able to 'View' the data the Document is added to the JEditorPane inside an EditorKit, this kit is then responsible for displaying the styling defined in the Document as represented by the Style interface. After looking at all this it does kinda make your head ache but it does make sense after a while...as you may have noticed I haven't looked into the Styleing of the Document much yet I have only got as far as the Pane and Document stuff. Therefore I shall add to this blog as the murky waters begin to clear
 
Stack Overflow profile for Richard Johnson at Stack Overflow, Q&A for professional and enthusiast programmers