Tuesday, November 12, 2013

The new dogma.

If you say to someone "I like science" then they often respond "yeah.. Me too"

If you say "I'm really keen on theoretical physics" then people say " ohh-kaay.. Hmm, interesting, you mean like atoms and shit?"

If you say "I have developed a serious and plausible contender to both string-theory and the standard model and what's more I can make it work right back as far as the precise moment of the big-bang and explain why gravity cannot be unified with electromagnetism and explain the physical mechanism behind momentum and inertia and I know where Einstein went wrong" people's ears clang shut, they put their hands over their ears and they shout LALALALALA. Really loudly.

Wednesday, October 16, 2013

Google Anti-Trust?

I have the following settings in my Google Chrome startup page:

None of my Chrome installs on _any_ of my devices will show this as a home page.

Go figure!


East Enders

Today I have learned about pre-cambrian fossilised arthropod brains, seen how the angular projection of Voyager 2 is comparable to the size of an e-coli bacteria when projected onto the ground, read how the biggest star ever discovered is tearing itself apart and seen how a big piece of a russian meteorite has been found in a lake.

I have never watched an episode of East Enders or Breaking Bad and the last time I saw a game of football was in 1995 and that was to be polite to my neighbour.

Life is too short to waste it on crap when there are still a billion new things to understand.

Tuesday, October 15, 2013

Doing the math

I'm sorry to keep harping on about this now but I have just had another sort of epiphany regarding math.

It seems to me that math has become the be-all and end-all of physics simply because making a mathematical approximation of something that works to n decimal places is deemed to be good enough.

Well, here's the thing. Schrodinger made a shitload of pretty math that describes electron orbitals. This math is fairly dense and difficult to understand. However, if you take a four dimensional figure with varying phase changes then you can exactly duplicate the result of those equations without ever having to resort to the pretty math. Which one is correct? The dense math because it looks cool if you can do it or the brute-force because it works?

I just wrote about fifteen lines of code that spits out graphical representations of electron orbitals and never goes near Schrodinger's equations.

Now then. When was the last time anyone actually saw an electron orbital in the flesh?

Atomic force microscopes are cool but they show little spheres.

Conspiracy theory?

So I have given up using iGoogle as my favoured home-page and have gone back to my.Yahoo
The odd thing is that Chrome seems to ignore the fact that I have set my homepage to Yahoo!. Is this grounds for an anti-trust case?

Higgs Bogon

The Nobel prize for physics is as much of a disappointment this year as the peace prize.

The committee have awarded Peter Higgs for the prediction of his eponymous particle that "confers mass on matter"

Well, actually the results show a "particle", in an energy range that did not correspond to Higgs' first choice of ballpark figures and that has no recognised function. This is like awarding an explorer who declared himself to be looking for Yeti as the greatest Yeti hunter who ever found an ant-hill. There is no Yeti as yet but there is definitely a bump full of something.

So, the big question is: What are Higgs' Bosons made of? What is this "particle" and how can such a thing confer mass by making the things that contain it stick more strongly to the magical Higgs Field? BOGUS!

I can't believe in this stuff any more! I was such an avid science freak and wolfed all this sort of thing down as gospel but now I look upon it all with pity for a bunch of misguided and short-sighted people who are too busy slapping their own backs to see the real world.

We have physicists jumping up and down and peeing in their pants because of a data blip. All of the math that was done since 1926 is wrong! The first term of the first line of Einstein's equation was WRONG! DELTA T is BOGUS!!! There ain't no frikkin delta in t, get used to it!

Sunday, October 13, 2013

Nobel Peace Prize is bullshit.

Over the last few years I have been astounded at the Nobel Committee's unflinching and shameful pandering to political pressure and inability to nominate a peace-prize winner who truly makes a difference.

The nomination of Barak Obama, despite my admiration for the man as an intelligent force for progress in  a country that needs progress more than most, was a weak and sorry excuse that made no mark on the world.

To ignore Malala Yousafzai in favour of a Qwango is worse than their refusal to award Mahatma Gandhi for his efforts. A girl who's life might so easily have been destroyed by religious extremism and who escaped that fate by such a slim margin to make a cause for the rights of simple respect and education for female children shouldn't be ignored. Peace is about people.

Goodbye to Google

I switched to iGoogle as a home page many years ago and have been using it every day and indeed every time I hit the web ever since.

Before that I had a Yahoo! page that I had various news and science widgets installed on.

Recently I've been looking for an alternative to my iGoogle page and logged in to my old Yahoo! one to find settings from a decade ago still there and still usable. It was like coming home to the farm and finding Old-Yeller romping down the drive to meet me.

Goodbye Google. Hello old friend...

Saturday, October 12, 2013

Back up at long last

Poor old Octogig has stood in a corner unused for about four months. Today I managed to get it installed at the hackspace and I have my own four square feet of desk!
The network is nice and quick so I updated the web site with some minor cosmetic changes and now I actually have Windows dev tools again I will be able to do some proper work!

Wednesday, October 09, 2013

2hack or /2hack = true

I just joined a hackspace!

I've been living in a tiny house for the last few months and I've been used to having a big workshop, a man-cave style shed and room to put all my projects and electronic junk wherever I liked.

I hadn't realised just how much actual room I needed for an electronic workbench, oscilloscopes, test meters, screens and dev kit!

There is a hacker-space near to me and so I've taken full membership and will have my gear installed including full logmein access to Octogig and all his development goodness before the weekend.

Ahh. I can feel the inspiration rising...


Wednesday, September 25, 2013

Is this the real one?

I've been giving a lot of thought to virtualization recently. Some while ago I wrote a Z80 emulator and the experience taught me some interesting things.

I think that an algorithm, given the correct system of inquiry, can ascertain that it is an algorithm.

I think however that an algorithm cannot discover the structure of the machine that ultimately underlies it's embodiment.

This is to say that there is no guarantee, for example, that a simulator is not itself running inside yet another simulator and indeed that it might be running encapsulated in yet another ad-infinitum.

There is therefore a certain level of abstraction that cannot be comprehensible to the system that is doing the work.

I think for example that I could write a program that ascertained the registers used in the program within a Z80 assembly code system and could test and analyse the various instructions used in such a way that the program could map its own flow and internal storage. However, if that system were "hosted" on a PC running a Z80 simulator then the system would necessarily stop at the boundaries of what it must consider as it's own "universe"

This means to say that a Turing machine can know that it is a Turing machine but never be sure that it is not encapsulated within another Turing machine.

Interesting eh?



Saturday, September 21, 2013

Not enough danger

Today, a parent will say to a child; "Do (insert something here)" and the usual response is "Why should I"

It used to be that the Father would say "Climb that tree!" or mum would say "Don't touch that" and before the child had the chance to stop and ask "Wh..........." something large and dangerous would have ripped the little bugger's head off and be chewing on their genitals or the kid would be foaming at the mouth and rolling its little eyes back in its head from the bite or the toxic plant effects mum was just telling them about.

Nowadays they just say "Why should I?" and there isn't a real excuse to turn around and suggest that "if you don't you will die in a horrifically-painful-and-not-neccesarily-quick way"

Monday, September 16, 2013

Oracle and Entity Framework a bad mix

I've been working with entity framework since it came out. For so long in fact that I wrote my first EDMX file by hand instead of using the designer which wasn't finished. I get along ok with EF but for the first time this year I've been using it on an Oracle database. What a miserable experience that is!

I was unable to begin with a Code-First approach because our local DB guru created a database in the PL/SQL designer. This apparently presented no problem when creating the EDMX file except that for some reason the database was not generating unique primary key IDs for any of the rows.

A bit of digging showed that the Oracle tools refuse to propagate the StoreGeneratedPattern="Identity" back into the model so each time you do a database refresh you have to go an add these back in by hand. You could write a macro or make some sort of XDocument parser/munger to do it but why the heck should you?

Another problem is that the Oracle EF components are uniquely 32 bit. This has proven to be a nuisance when writing for a system that cam pre-loaded with the corporate 64 bit drive image.

Ellison's hate of all things Microsoft shine through on this one. If you have a choice of database. Go with SQL Server.

Saturday, August 31, 2013

A month without Windows

I've used Windows at work this month because I do programming on that platform but since moving house, poor old Octogig has sat in the corner and has not been powered up at-all. I've used Apple devices, the Mac Mini, the Air and various iPads and iPhones for all my computing needs, even writing a quick app in Xamarin Studio to fiddle with some graphics.

This is the first time since the late 1980s that I have not had a Windows PC running in the house!

I even copied my Windows virtual machine onto a hard drive and deleted it from my macbook because the 63 gigabytes it was taking up was hogging up the main drive which only has a 120 GB capacity anyway.

Running absolutely everything on Apple stuff is a bit strange. Thinking back though, I remember trying to use the Mac I had some years ago and it was no use to me at-all. Perhaps times have changed, or maybe I have.

Saturday, July 27, 2013

Second thoughts

Ten years is too much to throw away. Publish and be damned. There is much more to come. Thanks to those of you who were kind enough to say that I would be missed and that you read this. One anonymous person commented and a bunch of you sent e-mail of a more personal nature which I greatly appreciate.

Monday, July 22, 2013

Ten years

I've been writing this blog on and off for ten years.
I'm bored of it.
Goodbye.

Sunday, July 21, 2013

Strange conclusions.

I've been working for about a month on a job that initially had little appeal for me. The work was inconsequential, had development practices that were more than primitive, had inexperienced, although very pleasant and likable folks on the team and was far below the rarified atmospheres of sophisticated companies in places like Paris, Seattle and San Francisco. 

However, Today is a Sunday evening and rather than dreading Monday I am quite looking forward to it. Over the last week I have introduced a sort of Scrum-Light to the Microsoft Project driven development practices. I've been able to show my manager the benefits of using Code-First on an Oracle database, just to keep from having to use that awful PL/Sql developer shyte. I have finished tasks that were in the project plan as n days in literally n minutes and the place is situated right next to a first class restaurant to boot! What the heck is wrong with that???

Wednesday, June 26, 2013

People are just getting dumber.

Fluoride has been shown to have adverse neurological effects. I wonder how a data mashup for health conscious and proactive societies might correlate the incidences of petty crime, antisocial behaviour, poor literacy and general bread-and-circuses mentalities in populations? 
Interestingly, my older children, one of whom has quite problematic learning difficulties and the other who i suspect shows very depressive tendencies drank heavily treated town water for most of their young lives. My younger children who have no such problems have, apart from a couple of short periods, drank well water pumped from deep below ground. Things to make me go "hmmmmmm"

Feynman

I finally get Feynman diagrams! Of course it took Feynman to explain them because I just watched the Aukland University lecture tapes. Who better to do that?
If the diagram is projected across space and time then Feynman's own explanation of the positron and antiparticles in general seems to imply a reverse direction in time. Perhaps the implication and Feynman's own reluctance to engage upon that subject suggests that it is a gray area. 
Time's demonstrably unidirectional nature is, i beleive, nothing more than conservation of energy relating to entropy. To undo an entropic action would require the application of energy that must come from the universe in general so entropy is consequentially always increased no matter how litte actual "work" one does in a Sadi Carnot sense.
If however a feynman diagram were to be applied to space, that implies three dimensions and a fourth dimension not of time but an actual and concrete physical dimension of bidirectional values, then the Feynman diagram would take on a different aspect.
Imagine, given the technology of today's 3D graphics, a Feynman diagram as a full interactive 3D movie would afford views of the various interactions that would provide very different perspectives.
Looking down onto the top of a diagram to change the perspective on time or from the side to change 3D position might be a useful visualization tool.

Thursday, June 20, 2013

Life in the slow lane

I am a careful driver. I took a road safety campaign that was shown in England in the 1980's very much to heart and I drive by that standard all the time. The campaign went "Only a fool breaks the two second rule" and showed that a two second gap between two vehicles was a good margin for safety.

Being used to French drivers I find myself constantly in the situation of either being hugely annoyed or feeling totally assaulted by drivers that insist that they have to get past, even though one is driving at the speed-limit, or have to drive a couple of feet from ones rear bumper. In the latter case I have the habit of turning on the hazard flashers for a few seconds and if they don't back off I brake HARD.

On a recent trip to Ireland I was wondering why the car in front was driving along on the road margin. I was a good two seconds behing the car and certainly at a safe distance but after a few minutes of this I realized that the driver was inviting me to pass. Even my very safe two-seconds isn't enough for most Irish drivers!

Day after day in France I am almost violently assaulted by dangerous drivers either from behind or who think that the way to overtake a large lorry is to cram as close up behind as possible and then dodge out quickly to see if it's safe to pass. The number of times I almost get smashed by an oncoming car is incredible!

In Ireland I drove around for five days and only had a single driver who drove too close while using his cellphone and picking at his spots in the rearview. Vive les irish,

Macbook Air (Again)

I have been building and using computers for more then thirty years and I can honestly say that I have never enjoyed a machine more than my little Macbook air.
It is light, lasts ages on a single charge, is powerful, runs OSX and Windows and has a beautiful screen.
I bet one of these with an OLED screen would be even more wonderful.

Congratulations Apple. I am a total convert to the product.


Saturday, June 15, 2013

Tax matters UK

The unbounded hypocracy of the UK government never ceases to amaze me. The entire concept of a tax haven was invented by England as a way for rich land and business owners to retain their wealth by moving it away from the gaze of the Inland Revenue. Even the name Inland Revenue implies matters pertaining to the isolated isle of England and the first tax havens were set up on Jersey, the Isle of Man and many other british overseas territories that ran exclusive clubs that only rich pals and cronies of those in power were invited to.
The loopholes that rich people have used in the past have relied on the ignorance and lack of imagination of the little uneducated population. Today however, anyone with the tiniest bit of savvy can set up a perfectly legal and effective tax avoidance scheme for a lot less than they would pay in tax. Even personal tax.
Businesses also have lawyers who are employed to use the law to the best advantage of the company and bravo to them for doing a great job!
The current discourse of David Cameron and his cronies is nothing more than deflection, trying to create uproar in the ranks of the great unwashed who are given to believe that the problems of poverty and unemployment are the direct cause of corporations such as Apple and Google whereas in fact it has nothing to do with anything but the insane profligacy and mismanagement of successive right leaning governments.
There will always be loopholes in the law and there will always be clever lawyers to exploit the loopholes. The intelligent person in the street now has access to the full disclosure that the Internet provides and will be able to find and piggy back onto those systems.
Furthermore, countries succeed by lowering tax, not increasing it. The hammering that Ireland has taken in the EU recently is nothing more than mud slinging and however people like Cameron pontificate they cannot convince anyone with half a brain without actually demonstrating the effectiveness of their policies. So far so Crap Mr Cameron.


Not what I was expecting.

Bizarre day today. I was driving through town and a police van passed me in the other direction. Suddenly a young chap in handcuffs leapt from the back of the van that was doing about 30 MPH. This poor sod hadn't accounted for basic physics or that his hands couldn't be used to save him and he flipped backwards and smashed his head on the road in front of me.
I screeched to a halt and leapt from my van and while others stood around, checked his vitals and started to get pressure on the wound on the back of his head. He was unconcious for a good five minutes and had all the signs of a severe skull fracture, bleeding from ears and eyes etc.
Then the little bugger woke up and started thrashing about. I was worried about his neck and me and another bloke tried to hold him down and keep him still. So the cops who dropped him turn up and asked me why my car was blocking the road. In my most authoritive voice i told cop A to go park my car and cop B to take the handcuffs off the victim. They both said "YES BOB" and did what they were told. So I ended up running trauma team for 20 minutes while a profusely bleeding and ungrateful patient tried his best to paralyse himself. He smotherd me in blood and eventually got packed off in a body splint while I was left to go buy a new and expenive tee shirt. 

Friday, June 07, 2013

First major annoyance with GoDaddy shared hosting medium-trust

A while back I changed all my .htm pages to .ASPX ones so that I could take advantage of master-pages in ASP.Net.

On Brinkster I simply wrote a handler for the Application_BeginRequest method in the Global.ASAX page that detected .htm calls and re-wrote the URL with the equivalent .ASPX ending.

On GoDaddy this falls down completely because shared hosting will not permit a full trust configuration and so the Application_BeginRequest is only called after the hosting service has verified the URL so you get the lame GoDaddy 404 page.

I tried reassigning the 404 behaviour to my own page and decode the UrlReferrer but that doesn't work either!

In the end I have had to brute force the whole process by creating a redirect page for every .aspx page and giving it a .htm extension. This is a royal pain-in-the-arse because i now need to maintain 325more .htm files that reduce reliability and increase site update times.

If you're interested in this solution, here is the code I used to automatically generate the files:

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();
            if (dlg.ShowDialog() == true)
            {
                string p =
                    System.IO.Path.GetDirectoryName(dlg.FileName);
                foreach (string s in Directory.GetFiles(p, "*.aspx"))
                {
                    string np=System.IO.Path.GetFileNameWithoutExtension(s);
                    FileStream fs=File.OpenWrite(p + "\\" + np + ".htm");
                    StreamWriter sw = new StreamWriter(fs);
                    sw.Write(String.Format(@"<html>
<head>
<meta http-equiv=""refresh"" content=""0;url=http://bobpowell.net/{0}.aspx"">
</head>
</html>
", np));
                    sw.Flush();
                    sw.Close();
                    fs.Dispose();
                }
            }

        }

You will obviously need to replace the site url with your own or all your pages will redirect to my site which will be great for my AdSense stats but no good for you..

Sunday, June 02, 2013

Wozniak gets it wrong!

The story here suggests that taxing companies on income instead of profit is a good idea. Far from it however. This is a ridiculous idea that would lead to the utter collapse of business and ruin the economy.

To tax on income is so utterly wrong because it would mean that no business would be able to support general running costs and overheads for any extended period of time.

In fact, the fairness problem comes into play when individuals are taxed on their income and not allowed to deduct necessary and reasonable costs. This leads to the individual being forced into a double taxation trap because they have already paid tax on their income yet if they pay someone else, then that person is taxed also. This has lead to governments whose profligacy knows no bounds because after it trickles through the multi-layered tax system, they eventually get to grab and keep most of the money in the system. This is clearly wrong and the vast sums wasted by political parties and governments on non-essentials is truly incredible.

We live in an age where instant and verifiable communication is possible. Governments should be made to account for and justify every cent spent on a daily basis and individuals should only be made to bear the cost of what is absolutely necessary. The recent spate of minister expense scandals in the UK show clearly that the system has been and is still being abused.

Monday, May 27, 2013

What happened to logic?

As a computer programmer I am intimately familiar with the ideas of logic as being answers that can be reduced to a true or false response. The idea of logic as a philosophical discipline, the method of thinking for thinking's sake, has fallen into disuse as an overt exercise.

I have recently been involved in thought as a sort of hobby and have realised that thinking itself is as difficult as some of the more obvious disciplines of mathematics or engineering, both of which I am involved in to some level.

I have been inspired by the work of George Boole, not because of his contribution to computing but to his assertion that every question can ultimately be met with a response that might be reduced to the possibilities of true and false. Logic and thought as an analytical process can be considered to be the reduction of any question to a series of statements that will satisfy those conditions.

Ultimately we might ask "Can a cow jump over the moon?" but in order to say "No" in an unequivocal and unambiguous manner a series of reductions must be made such that we can state with certainty that a cows legs will not be able to generate the power needed to overcome gravity and friction and that the cow itself would not be able to survive for long enough in space to cover the quarter million miles from here to there.

Indeed, to say that a ow cannot jump over the moon might reach down into questions of genetics, engineering, physics, history and many other areas. It isn't enough to simply say no intuitively.

I am certain that Boolean-logic is capable of providing a true or false answer to each and every question asked. Logic however isn't the rendering of answers by the algebraic manipulation of true and false statements, it is the process of arriving at a set of concise questions that might render those questions that have only true or false answers.

Thursday, May 23, 2013

Big solutions big troubles

A recurring theme in companies that I see all over the world is the huge agile solution.

The trend for continuous refactoring and the modular nature of modern software projects mean that application solutions containing dozens or even hundreds of sub projects are common.

Not so long ago I worked for one company that had eighty-five projects under the same solution and their style of continuous refactoring meant that all eighty-five projects had to be built every time.

Two constants spring from this style of work. Firstly, the time to build a project is not necessarily linearly linked with the number of projects. Inadvertent cyclic dependencies can force compilers to process one project several times. Secondly, the productivity of a software design team will be closely linked to its familiarity with a product. Several agile teams working on the one solution all with a mindset of continuous refactoring will pretty soon mess up any possibility of a stable API if your system contains anything resembling a framework.

A company that supplies developer tools has an obligation to provide backwards compatible APIs to their customers and having been both a provider and consumer of these tools I know that resisting the temptation to refactor a tool provides customer satisfaction when the developers don't need to think too hard when upgrading to the latest and greatest version.

My own philosophy is to split out large solutions into groupings of smaller projects that can be treated as providers and consumers of internally developed and externally sourced tools. Here, the all-too easy style of continuous refactoring that has been made possible by tools such as ReSharper and now what is built into Visual Studio and other tools becomes a choice that is applied in the way most efficient for the project. People working on front-ends and consuming the frameworks can refactor all day long but people wo provide the frameworks must have the mindset of a tools developer and maintain familiarity and compatibility at all costs.

Tuesday, May 07, 2013

Windows 8 U-Turn

Problems dogging the Windows 8 operating system since its release last year have gone from bad to worse. Lackluster sales of the new system and its inability to compete in the walled garden environment  of the trendy app store in the way that Apple do so perfectly and upon which Google seems to be thriving have cost Microsoft dearly over the past year.
Metro as it began and now just an uninspiring Windows 8 was supposed to have placed Microsoft`s operating system onto tablets and touch screens everywhere but instead has just alienated the core user, the business client. Now Microsoft are scrambling to undo the damage by reinstating features such as the start button and enabling the Explorer interface to be configured at install instead of the tile screen.
Since the earliest days of .net when I first saw the managed environments that were being used at the time on the Pocket PC and that later became the virtual machine of the .net framework I have been keen to see Windows running on non PC platforms because I know it would be great if done right. Windows 8 however wasn't done right and the attempt to turn Windows into competition for IOS and Android at he same time was a poorly thought out disaster.
The only way Microsoft will redeem themselves is to go back to providing a full multi-tasking operating system that can run any .Net based application on any machine with a Microsoft OS. I guess that as opposed to three years ago, more than 50% of my day is spent on non Microsoft systems because Apple and Google have made my user experience seamless and simple. I don`t use my Windows tablet or my Windows phone because they are too different to my PC.
So, here Iam. a staunch supporter of Microsoft, editing my blog on my Macbook-Air and using my iPad and iPhone through a network provided by my Android based LG-400.
When I write code for MS systems now I use Virtual Box to run Windows on my Mac because the Air`s battery life is so much better than any tablet or Windows laptop and the integration across apple systems, to quote Apple themselves, "just works"
Microsoft have rested too long on their laurels and look to be too old and broke down to compete unless someone in the company gets a jolt of caffeine real soon! Shame on you guys.

Tuesday, April 30, 2013

Site down

I am currently moving my site to Godaddy servers. Sorry for the inconvenience.

Finally made the break from Brinkster

I have been a customer of Brinkster since 2000 when I had my first .Net web site on their alpha servers.
Unfortunately this year they sent me a greatly inflated demand with, would you believe, a charge for attack protection and wind-power!!
Jared, I don't give a hoot about whether you use wind power or not. Green power is demonstrably cheaper, or should be if your government was to adhere to carbon cap and trade but they wont. I don't give a hoot about attack protection either. How you secure your infrastructure isn't up to me!
The plain fact of the matter is that I pay for the service of putting my pages on the web. Your service is 11+ dollars per month for a site with no database and no high traffic demand. Twice as costly is twice as costly whichever way you cut it.


Monday, April 29, 2013

Older Software Developers Improve Over Time

This article shows that a study at the North Carolina university says that we older chaps get better at software development and can beat the young cubs at their game.




Sunday, April 07, 2013

CTO or CSO? What do companies need?

I have used the title Chief Technology Officer for some time and have fulfilled that role either by that name or as Technical Director or whatever for a few years. During that time I have become more and more convinced that the role of CTO is inadequate to describe the requirements of some posts and that companies might be better off with a role of Chief Science Officer.

Science has a specific meaning and has connotations of research that may be confused with a pure technology role but as I go through my business life I see more overlap than ever between the two.

A concrete example of that being a task that requires a multi disciplined approach to problem resolution that would fall outside of a pure technology role. Designing a product today might have aspects of electronics, engineering, software technology choices and even chemistry or biotechnology that would outstrip the skill-set of a career technology manager.

I have recently been involved in such a project where the requirements of electronic design, knowledge of software systems, some physics and engineering all have to come together in the right order to create a product and the research aspects of the system are quite demanding.

Perhaps in the not-so-distant future a CSO role will become more important as we begin to integrate diverse technologies into everyday items. What do you think?

Facebook Home. Are they truly mad?

I just saw the announcement of the Facebook Home "wrapper" application and I am utterly horrified at the possibilities that it presents.

While I understand that free software needs to be paid for somehow and I am all for getting services in exchange for a little of my data I balk at the idea that allowing something as intimate as my entire smart-phone experience to be run by Facebook.

One can be guaranteed that the recipients of your phone calls would fairly soon be in receipt of "Thought you might like..." SMS messages purporting to be from you but in fact via the great Facebook machine. How about voice recording and analysis of your phone-calls by their server farm to harvest as much data as possible? What about interjecting spoken word adverts into long pauses in your phone conversations?

Honestly, anyone who signs up to use Facebook Home must be among the most naively stupid and gullible twerp on the face of the planet. Either that or they simply have no sense of or desire for privacy whatsoever.

Friday, April 05, 2013

C# changes places with Objective C

Every now and again I like to take stock of the Tiobe index that shows the relative popularity of programming languages. In a perhaps not too surprising turnaround this year C# falls to fifth place where Objective C rises to third place. A complete reversal of the situation with respect to figures a year ago.

C# has generally been a riser on the index for the last decade but the continued popularity of the Apple iDevice range and the shift from desktop to tablet based computing has greatly changed the programming landscape.

My personal view despite its popularity is that Objective C is a less expressive and more cumbersome language than C# but as I've said before, it's all just ones and zeros really so the most important thing to remember is that the algorithms are what count.

I program happily in both languages and appreciate the C like style of both of them. It is evident from the results however that the popularity of the programming language is greatly influenced by the platform upon which it runs and Microsoft has had a fairly disastrous year with the lacklustre release of Windows 8 and that awful decision to cripple the ARM based version of the operating system by restricting it to only running applications sanctioned by the Microsoft store and produced through their developer program. This, to be honest, was a trick that Only Steve Jobs had the cajones to pull off and Microsoft should have recognized that.

The massive success of the Apple IOS platform and the plethora of applications that are available for it now will make Objective C an even stronger choice for young up and coming programmers in the future. However, there is a catch inasmuch as Objective C only faces that one platform whereas C# is becoming more popular as a cross platform tool. I have been using C# very happily on Android and IOS platforms thanks to Xamarin's most cool MonoTouch and MonoDroid tools and the leverage of my .Net skills is still good on those.

For the future? I predict that next year we will see a significant rise in the popularity of Python due in no small part to the auspices of the Raspberry Pi. The part it will play in the popular computing market is almost assured and I am very sorry to say that unless Microsoft does something very clever indeed, C# will show more of a fall this coming year.

Wednesday, April 03, 2013

CTO? Whatever happened to passion?

How do you or your teams know when they are hiring the right person? If you were running a racing team with formula 1 cars would you hire someone that didn't know where your team stood in the world rankings? If you ran a film studio would you hire a director of photography that didn't take photographs?

Why then do so many technology companies hire managers and team leaders that don't give a hoot about the technology they work with?

Over the years I have worked with some of the best and brightest people in the technology business and I can say that the most valuable people are not necessarily the ones with the best on-paper qualifications. When you hire in a manager for a technology team you need to look for someone with good experience and good qualifications sure but when you ask that person what they like to do in their spare time you will tell the ones that are dedicated to the technology by the kind of things that drive their passions.

When hiring these days we are faced with a minefield of human-resource oriented do's and dont's about the questions that we ask but when the interview is over and the technical grilling is done take time to get a feeling for the passions of the person. If you're hiring for a technology post and the passion is mountain bikes and scuba diving then you might get a perfectly competent and wonderful person who can't wait to leave on a friday to hit the beach or the mountain trail. On the other hand, if that person builds robot cars or has automated their apartment to respond to voice commands a-la Star Trek then you can be reasonably assured that their passions will be applied in their work and they will be constantly training themselves for your benefit - for free!

Wednesday, March 27, 2013

CTO? info to make you think

One day soon, (or maybe this just happened?) a young, slightly warm person, will show you an image not unlike the one you see here:


The person will smile quite a lot and wave their hands and point out boxes in an enthusiastic manner. At the end of the session, they will say that there are obviously a few small problems and that the new upgrades you asked for will need a few more weeks or months of work. Then you'll pick up your phone and call someone like me to come audit your codebase and see why there are problems.

The person like me will arrive and spend a week looking intently at the screen, searching the code base, looking at your code and you will ask for a quick fix whereupon the consultant will show you that rather than the lovely diagram above, your code actually looks similar to this:


This is the typical picture that is seen in software projects in which the words "Quick Win" or "Fast Response" are used as design criteria and where the manager of the project says that "Testing uses resources that might otherwise be used to generate code" or that "We must be agile" where agile means an ability to change things quickly, in other-words to claw yourself out of the large hole you just spent five years digging for yourself.

The only way to prevent this from happening to your code is to place as much value on software quality and understanding your code as you place upon the product itself. Code quality assurance costs you money in the short term but will save you your job in the long term.

Looking for a job?

http://www.bbc.co.uk/news/business-21938085

Monday, March 25, 2013

Hardware and software, an uneasy partnership

I guess that fundamentally I am a lazy hardware design engineer. I say lazy because I found many years ago that programming on top of someone else's hardware was much easier in some respects than having to design the hardware before you began the task of programming.

Many of my early works were embedded processor driven with no "operating system" to speak of, usually a Z80 or 8051 processor running code from the first available memory location and all under my control.

Modifying a hardware design is very hard and requires a different timescale of lead time than that of software yet unfortunately, the software will be what sells the job to the marketing people so its really important to get that combination right. A hardware design engineer will need to get all the aspects of the design pretty much correct before any sort of manufacture is done, a software engineer can play with, modify or change their design more or less at will within a certain number of constraints.

I have recently gone back to the very fundamental aspect of hardware design and I am creating a system that has no underlying operating system, is heavily dependent on hardware that performs tasks that might otherwise be seen to be software tasks and the hardware is built from scratch with the most important components being the equations that I am using to define the parameters of the hardware. This is a really difficult departure for another part of the team who will need to design the software for the job.

The trick to making the two work harmoniously is in designing a high-level protocol that will satisfy all of the requirements of communication early on in the process and then creating mock components that can be used to develop the software before the hardware is fully finished.


Sunday, March 24, 2013

CTOs Read This!

Does your software engineering department suffer from MILDEW?

MILDEW is Manager Induced Long-term Degradation Error Ware and is an effect seen by numerous companies that don't take care about the hiring and promotion criteria for software project managers.

This is something seen often in larger companies with a pyramid style hierarchy that follows the old-style management procedures of perceived meritocracy. Often they include older, more established companies that have added an IT department to keep up with the times but who have placed that department into the hierarchy in a traditional manner. Here is a scenario that I have seen on many occasions in the companies I have worked for.

A manager, we'll call him Fred, came into the company as an employee ten or fifteen years ago. He was young, dynamic and full of ideas and has his name all over the code. As Fred was loyal and stayed with the company, he found that his tenure was rewarded by little promotions here and there until he eventually became head of his team, often overseeing his own code. As he progressed, his responsibility shifted to other projects and he seemed to excel as a manager and so had a position in the company where he was well known and trusted. Times changed and he worked more on budgets and team oversight, leaving the project management to people who he hired because he liked their style. He saw a steady and satisfying progression in the product and reported his satisfaction to the CTO who thought that it was good.

The sad reality is that Fred is out of touch, he has no clue how the software works now, if he was to look into it then it would be mostly unfamiliar to him and any technical decisions that he takes will be arbitrary at best and probably downright damaging.

The software will have been developed to show "Quick Win" values for project sponsors and a true analysis of the code-base will show fragility and architectural chaos.

Be careful who you promote. It might be better to hire in a manager that has up to date ideas than to promote within the ranks. Above all, make sure your top manager can talk the talk and walk the walk. Don't let your software architect just draw boxes and arrows on a whiteboard and think that's enough.

Friday, February 15, 2013

Meteorites in Russia. More on the way?

The events that unfolded in the Ukraine today are probably related to the passage today of asteroid 2012 DA14 through a trajectory lower than many geosynchronous satellites. A body of such size will probably not be alone and will carry with it a cloud of smaller debris in a halo around it that may extend for many thousands of miles.

I'm betting that more meteor strikes will be seen before the day is out or tomorrow coming in the wake of the main body as it passes earth.


Thursday, February 14, 2013

Calculating the time to upload files

Forget trying to make Windows behave nicely.

Download FileZilla and do it with that.

Friday, January 18, 2013

3D printing of accessories for Nokia Phones

Nokia recently announced that they are providing full mechanical design specifications for Lumina cases so that people with access to a 3D printer can print up their own cases. This is a brilliant idea and is a first step in what I'm sure will become a new craze for many phone users. Only this morning I was discussing with my wife, who has jut broken yet another iPhone 4, the possibilities of getting a very rugged case and printing one up seemed like a good idea.

Way to go Nokia!

Thursday, January 10, 2013

Muddying the waters

I can see the smartphone market going the same way that the home computer went in the 1980's. In those days companies such as Commodore, Sinclair, Dragon, NewBear and a plethora of others tried to become the de-facto standard home computer by providing a quirky advantage. In the end, none of the forerunners of the day actually won because a single, extensible, cheap, competent standard, the IBM PC proved to be best.

We have seen the rise and fall of Symbian, the rise of IOS and the chaotic emergence of Android with it's 99^N different configurations all struggling to live in the same yurt.

In recent days Ubuntu Linux has declared an interest in the smartphone arena and now Mozilla declares that it is releasing a smartphone OS. ENOUGH ALREADY!!

There is nothing that drives customers away from a platform as much as despite from the poor developer tasked with writing code for the platform. If the OS is easy to use and generates income for the starving programmer then it will succeed. If it is a pain to program and generates poor revenue, it will fail.

Historically, Microsoft have made great developer tools. the visual Studio IDE is second to none and makes my job easy. I make money with Microsoft on the desktop and Apple on the phone. I find Android interesting but miserably useless at generating revenue. Android is no more than vehichle for Google adverts and nothing more.

What possible use is Mozilla's Firefox OS though? Unless it has truly phenomenal advantages it is doomed to an early grave as an interesting historical footnote. I say it's the new Jupiter Ace.

MSB1008: Only one project can be specified.

I kept getting tripped up by this error and couldn't figure out why until I realised that it was all about the NAME of the config. I had created a configuration called "Debug MOCKALL" in which I use mocks to replace stuff at debug time on an emulator and MSBuild refused to complete.

The problem is that MSBuild hates spaces and the command line generated had spaces due to the "Debug< >MOCKALL" with a space in it. MSBuild tries to create output directories and fails because it thinks there are two project names.

So. Renaming my config to "Debug_MOCKALL" fixed it.

Hope this helps it took me a while to figure out.

Friday, January 04, 2013

WTF? Burning cats.

In a world where little girls get shot in the head for wanting to go to school this make the news. Could there be anything less newsworthy?

MonoGame, MonoDroid and threads

The holy grail of all programs, from games to utilities, is to provide a user interface which is useful and responsive while real work gets done in the background.

A classic example of this is the MonoGame content loading process which, on a small machine can be lengthy and give the appearance of the target device having crashed completely unless some indication of activity is provided.

The XNA Game system which is the basis for MonoGame defines a nice neat structure for game operations. The Game class is instantiated, The Initialize routine is called which in-turn calls LoadContent where we can load in all the textures, sounds, fonts and whatever else we need to run the game and finally a loop is entered where Update and Draw are called repeatedly in a loop for the life of the game. It stands to reason that if there is a lengthy delay between the call of the LoadContent method and the beginning of the Update-Draw loop then our user may be left staring at an uninterestingly blank screen.

This code shows how to use the .net BackgroundWorker to load content while still running the game loop to show a progress loading screen. As soon as the content is loaded, the game swaps over to normal operations and your users won't be left looking at a blank screen for fifteen seconds.


using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using System.ComponentModel;
using System.Threading;

namespace BackgroundLoad
{
    /// <summary>
    /// This is the main type for your game
    /// </summary>
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        SpriteFont font;

        //Used to determine if we are ready to go
        bool _isInitialized;

        int _loadingProgress;

        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);

            Content.RootDirectory = "Content";

            graphics.IsFullScreen = true;
            graphics.PreferredBackBufferWidth = 800;
            graphics.PreferredBackBufferHeight = 480;
            graphics.SupportedOrientations = DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight;
        }

        /// <summary>
        /// Allows the game to perform any initialization it needs to before starting to run.
        /// This is where it can query for any required services and load any non-graphic
        /// related content.  Calling base.Initialize will enumerate through any components
        /// and initialize them as well.
        /// </summary>
        protected override void Initialize()
        {
            // TODO: Add your initialization logic here

            base.Initialize();
        }

        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);

            //Here we can load anything that is absolutely necessary
            //to the basic operation of the game, such as a font to display progress
            font = Content.Load<SpriteFont>("spriteFont1");

            //For all other content we can use a BackgroundWorker
            BackgroundWorker bgw = new BackgroundWorker();
            bgw.WorkerReportsProgress = true;
            //Give the background worker something to do:
            bgw.DoWork += bgw_DoWork;
            //Handle progress updates:
            bgw.ProgressChanged += (s, e) => _loadingProgress = e.ProgressPercentage;
            //Handle completion:
            bgw.RunWorkerCompleted += (s, e) => _isInitialized = true;
            //Kick off the loading process
            bgw.RunWorkerAsync();
        }

        void bgw_DoWork(object sender, DoWorkEventArgs e)
        { //This happens on a thread not associated with the
          //rest of the game
           
            BackgroundWorker bgw = (BackgroundWorker)sender;

            for (int i = 0; i < 100; i++)
            {
                bgw.ReportProgress(i);
                Thread.Sleep(30);
            }

            /*
             *
            //Really we may do something like this...
            
            int p = 0;
            _gameTexture1 = Content.Load<Texture2D>("gametexture1");
            bgw.ReportProgress(p++);
            _gameTexture2 = Content.Load<Texture2D>("gametexture2");
            bgw.ReportProgress(p++);
            _gameTexture3 = Content.Load<Texture2D>("gametexture3");
            bgw.ReportProgress(p++);
            _gameTexture4 = Content.Load<Texture2D>("gametexture4");
            bgw.ReportProgress(p++);
            _gameTexture5 = Content.Load<Texture2D>("gametexture5");
            bgw.ReportProgress(p++);
            _gameTexture6 = Content.Load<Texture2D>("gametexture6");
            bgw.ReportProgress(p++);
            //.............
            //.............
            _gameTextureN = Content.Load<Texture2D>("gametextureN");
            bgw.ReportProgress(p++);
            
             */

        }

        /// <summary>
        /// Allows the game to run logic such as updating the world,
        /// checking for collisions, gathering input, and playing audio.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
            {
                Exit();
            }

            // TODO: Add your update logic here
            if (!_isInitialized)
            {
                //Do things here that you can do without the main resources
            }
            else
            {
                //Do all the normal game stuff here
            }

            base.Update(gameTime);
        }

        /// <summary>
        /// This is called when the game should draw itself.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Draw(GameTime gameTime)
        {

            if (!_isInitialized)
            {
                graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
                spriteBatch.Begin();
                spriteBatch.DrawString(font, string.Format("Loading...{0}% complete",_loadingProgress), new Vector2(16, 16), Color.White);
                spriteBatch.End();
            }
            else
            {
                graphics.GraphicsDevice.Clear(Color.Green);
                //Place all your normal game-drawing stuff here
                spriteBatch.Begin();
                spriteBatch.DrawString(font, "Hello from MonoGame!", new Vector2(16, 16), Color.White);
                spriteBatch.End();
           }

            base.Draw(gameTime);
        }
    }
}