Not Invented Here update

March 10th, 2009 software

Seb has posted an update clarifying the intent behind his post regarding the Software Craftsmanship manifesto.

My main objection was that Seb was a little ill informed and had chosen, incorrectly, to single out Jase publicly.

He’s explained that he felt he had no other option in order to open a discussion on the topic. Email and telephone presumably far too traditional a means of making a formal invitation to someone in these heady days of web 2.0 but who am I to point out how easily you can find them on the contact page of his site, let’s just leave at that. He’s my brother and I stuck up for him. End of. But I concede that it did open a debate and that can only be good for everyone participating.

Seb makes final conclusion that if there’s a competing regular meeting which would strive to build on the energy and enthusiasm so evident at the conference last month this might lead to the collapse of interest in the alt.net evenings.

I don’t really believe this. But it’s what I suspected was going on with the post (”Not invented here” being the title of my original response.) I thought that alt.net focused exclusively on the .NET platform and as such I’m not really clear as to what direct relationship it might have with a regular meeting to do hands on practice but with no particular emphasis on platform or technology. Actually, I’m at a loss as to how it would be a threat to it at all to be perfectly honest.

What I got from the conference is that it really wasn’t anything to do with .NET or Ruby or Java or any particular proprietary silo.  It was about the skills that apply to software development regardless of platform, language or setting. Having spent an hour an hour pairing in Java with another .NET developer at the conference I can say in my personal experience that it worked. The lessons were universal.

On craftsmanship (ignoring the semantic arguments) I really don’t get how there can be anything to debate about this. Arguing local optima is as redundant as expecting people to jump in front of moving traffic simply because everyone around them is doing the same. And equally not stopping to clean up as soon as you see duplication, or redundant misleading comments or unit test fixtures that don’t actually test anything just because they surround you is the same. You shouldn’t succumb to the broken windows, in my personal opinion.

By spending a little time thinking for ourselves rather than slavishly following platform guidance or shoehorning yet another framework that promises it’ll let everyone not have to bother thinking about design in the small because it’s given so much design in the big that nothing can possibly go wrong now, we may get more done in the long run. Who, knows. I know that in my personal experience the guys I’ve worked with the have impressed me the most produce a quality of work that humbles me (not hard I know) and they do it PDQ. They just have great development chops and they never stop training them.

I think that the intent of the London conference was all about getting past paying lip service to all of this stuff and actually sitting down and doing it. Getting past the hand waving and platform marketing crap and down to the code.

If anything regular comes out of it, I genuinely hope there is no adverse affect on what you’re involved with in alt.net, but I doubt there would be.

In terms of learning more about it all, I’m not sure what the problem is. Most of the material up for practice has been published in book form for a fair while and there’s a tonne of helpful people blogging articles about it. Clean Code was out last year as was Implementation Patterns and the Fowler series on patterns and Martin books on practices and principles are very long published.

"Not Invented Here"

March 9th, 2009 software

Sebastien Lambla want us all to know that he’s not signing the software craftsmanship manifesto … yet.

It’s really disappointing to see someone that I’ve always considered to be a pretty sharp chap descend into trolling. It’s even more disappointing that it’s my older brother Jason that he’s trolling (blood being thicker than water and all that.)

I’m not completely clear on the why’s and wherefores of all of this but Seb’s whole problem with Jase seems to boil down to a couple of things.

First, the software craftsmanship conference that Jase invested so much time, energy and enthusiasm organising last month wasn’t widely known about in the alt.net community.

Second, Jase has declined an invitation to attend an alt.net beers evening and explain to them why they should could care about a manifesto that other than signing up to as an act of solidarity (let’s not forget that icareaboutsoftware.org has been around for quite a bit longer than this manifesto) he’s had nothing to do with.

It’s not the confusion, undoubtedly down to the manifesto sharing the name of the conference he organised, that pisses me off so much as the fact the Seb is essentially calling Jase out on his blog. WTF?

It’s really dangerous to belittle the efforts of others that so selflessly push for positive things in an industry that suffers so much from bull shit and ignorance simply because “It wasn’t invented here”.

And, again, it’s pretty disappointing coming from someone that I know is smarter than that.

muzak for the masses!

January 30th, 2009 music

With the wonders of free use php and flash hacking I’ve added a media player plugin to my wordpress installation.

Wonderful news, no? Now I can bombard the masses with concept thrash metal from my youth and shoddy electro from my spareroom :)

The split we did way back when comprised three tracks Negate (This Aftermath), Condemnation Manipulation and finally Mediocracy (yes, very catchy I know).

I’ve them embedded below.

Enjoy :)

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

Fame at last (well kind of … )

November 15th, 2008 music

Many, many moons ago I was a very keen guitar player. So keen if fact that I spent the majority of my free time with various acoustic and electric guitars glued to my lap (although not as you’d notice if you heard me play at the time, but hey ho.)

Anyhoo, during my later formative years I was lucky enough to hook up with a number of like minded misfits and write, perform and record with a couple of local bands. We had a pretty decent time of it. Writing and rehearsing at the local youth centre (yes it was THAT long ago), trawling around with some other local bands and performing in pubs and clubs in Worcester (a small City in the West Midlands, UK) and some surrounding towns, villages and cities (actually reaching as far further north as Liverpool at one point.)

This all culminated in a very modest record deal (well I say deal, we never actually got anything from it, nor a contract or anything official like that for that matter, but the deal was we got all of the recording costs covered by the record company and one side of a split album on general release with Prophecy Records / Southern Distribution in the shops for a bit.)

All ancient history, and long forgotten I’d thought. But no, due to the never ending wonders of the interweb it seems that my last fling with making live music has found a corner in the pantheons of thrash metal history.

logo

After more than 15 years of quite literally no further effort at all, Devolution, that epochal concept thrash metal outfit from Worcester, England have finally arrived with an entry in the Encyclopedia Metallum.

Further investigation has also yielded a few more links. It appears that fruit of our collective labours was indeed appreciated by more than just myself and my band mates and in a weird kind of way lives on :)

But that’s not all, oh no. You lucky, lucky people now have the opportunity to actually listen to our final fling. Yes, despite having lost my vinyl copy of the album years ago, it appears that a re-release followed on CD (adding a third band to the split) and some kind hearted people have ripped and uploaded the results onto rapidshare, how cool is that. My girlfriend has been quite literally over the moon to listen to my newly rediscovered tampering in heavy metal, over and over again :) Why not download and do the same. Joking aside, if you were ever a fan of thrash or death metal, it’s not actually all that bad, download it and give it whirl. Ours are the last three tracks on the CD.

Finding your way about in large solutions

May 17th, 2008 software

Very quick tip that’s always saved me a lot of time when needing to flip between working in the solution explorer and the source code editor in Visual Studio.

Go to Tools -> Options -> Projects and Solutions -> General -> Track Active Item in Solution Explorer, and make sure this options is checked, out of the box this is set by default.

This will make sure “Solution Explorer automatically opens the folder for the active item, scrolls to its node, and selects its name. The selected item changes as you work with different files within a project or solution, or different components within a designer.”

More news by category Topic -: Buy phentermine saturday delivery ohio Tramadol hydrochloride tablets Picture of xanax pills Free shipping cheap phentermine Buying phentermine without prescription Safety of phentermine Pyridium Generic viagra cialis Cialis generic india Pink oval pill 17 xanax identification Buy free phentermine shipping Best price for generic viagra Information about street drugs or xanax bars Ordering viagra Snorting phentermine Hydrocodone overdose Lithium Amiodarone Get online viagra Order viagra prescription Order xanax paying cod Cheap phentermine free shipping Imiquimod Tramadol next day Linkdomain buy online viagra info domain buy onlin Pfizer viagra sperm Vidarabine Cheapest viagra price Prevacid Viagra cialis levitra comparison Dutasteride Lisinopril Thiotepa Female spray viagra Black market phentermine Betamethasone Cialis forums What does xanax look like Loss phentermine story success weight Order xanax overnight Viagra alternative uk Diet online phentermine pill Order xanax cod Mecamylamine Eulexin Cheap hydrocodone Buy cheapest viagra Viagra xenical Phentermine with no prior prescription Xanax in urine Macrodantin Cheap phentermine with online consultation Epivir Buy phentermine epharmacist Ditropan Woman use viagra Cialis erectile dysfunction Xanax withdrawl message boards Viagra online store Atorvastatin Generic ambien Is phentermine addictive Next day delivery on phentermine Buy online viagra Ethanol Natural phentermine Avandamet Xanax long term use Diet page phentermine pill yellow 5 cheap Cheapest secure delivery cialis uk Information medical phentermine Cialis experience Phentermine no perscription Compare ionamin phentermine Viagra cialis levivia dose comparison Noroxin Effects of viagra on women Buy cheap cialis Viagra shelf life Hydroxyurea Phentermine discount no prescription Buy cheap online viagra Dog xanax Online cialis Viagra class action Viagra price Phentermine without prescription and energy pill Hydrocodone cod only Nicoumalone Cheapest viagra Cheap ambien Vicodin without prescription Phentermine prescription online Phentermine snorting Mirtazapine Quazepam Isradipine Buy generic viagra online Xanax look alike Moxifloxacin Viagra experiences Piroxicam Nicorette Free try viagra Sotalol Cash on delivery shipping of phentermine How do i stop taking phentermine Xanax prescriptions Cheapest phentermine 90 day order Niacinamide Phentermine weight loss Phentermine

Asp.net ajax

May 17th, 2008 software

Wow, for the first time in a lot of years I’ve used an API that truly abstracts what it advertises that it does.

 Asp.net ajax is proper software magic, love it.

Oxymorons and going through the motions

May 15th, 2008 software

It’s been occurring to me more and more lately that there’s an awful lot of guff going about these days surrounding the adoption of agile practices. It’s almost as if people honestly believe that by simply following an ever growing set of written instructions they’ll somehow reach agile nirvana; thus, trading on this naivity are an ever growing army of people trying desperately to nail their name tag on the mast of agile by taking what are essentially a set of very simple ideas and practices and ramming them firmly up their own arses to see what type of ever more complicated book comes out of the other end.

News flash, just coz somebody wrote it down somewhere, doesn’t make it somehow a priori, and that includes this personal opinion by the way!

My most recent daliance with regurgiated dogma involved somebody pulling me up about asking what story to pick up next during a stand up meeting (my motivation being, I have no idea what the relative priorities are, as that particular pactice hadn’t been adopted yet, and yes I do realise that agile planning is about the most simple thing to “get” out of all of it, but that’s a whole other story, so I figured was best to ask, then commit to doing that). Some minutes after the meeting somebody took great glee in telling me that I shouldn’t ask what to do next, I should instead elect to do something as, and get this one, agile teams are self organising and not doing so is a “stand up smell”.

Jebus wept.

Can no one else see the obvious contradiction here?

As far as I’m concerned committing to something is better than simply saying, “so I guess I’ll pick up another story later today”. Uh huh, so whilst we’re all here, any idea which one?

The joys of the javascript eval function

April 23rd, 2008 software

Eval is such a boon, but today it also reminded me of the reason I prefer working with strongly typed languages (me being someone that doesn’t enjoy chasing my tail dealing with apparently odd type inference issues).

Anyhoo, so as I was taking a substring component out of a string, treating it as an integer and incrementing it I discovered that if you give a string literal number with leading zeros to eval, in some cases it interprets it as Octal.

An example “00:23:12:024″ is a time code literal that I needed to increment to the next frame in a web ui. So I grab the trailing 3 characters and use eval to help me out;

  1. var frames = eval(framesLiteral + ‘+ 1′);

This proved fine whilst I ignorantly happy pathed it through a few ‘001′ to ‘007′ examples but when I ran a few more quick tests on the work I’d done I noticed that the ‘024′ in the example incremented to ‘021′. Eh?

A few moments of confusion and I figured it out. 24 is 20 if you read it as a base 8 number.

So just in case anyone else was as confused as I was, be sure to strip out the leading zeros :)

And writing this has just made me realise my fix is still broken because I just added a replace(’0′, ”) on the literal but this will effectively divide any number I have by ten or a hundred if it has trailing zeros.

Oh how I pine for a quick Int32.Parse!! Comeback WPF all is forgiven.

 —-

An update on this, the very helpful Graeme Foster posted a comment with the real solution which (the clue is in my pining for a parse int call over the use eval) is, well, to use parseint and tell it we’re in base 10.  Nice one Graeme, thanks for that;

  1. var frames = parseInt(framesLiteral, 10) + 1;

 

Code regions are the work of the devil!

February 5th, 2008 software

#rant

If I open just one more open source project and find it litered with more regions than lines of code, I think I may scream, very loudly!

It seems that the masses, not content with merely stating the bleeding obvious in their source code now feel compelled to obfuscate the development process even more by hiding quite literally every single line of code they write with regions.

Now don’t get me wrong, in some cases I appreciate their presence. Certainly if you spend your life trying to avoid very lengthy blocks of tool generated code they can be a godsend. But, come on, I really can tell just by looking that these are all private fields, these are properties, these are public methods etc, and, yes, given a few more seconds I can gather that these methods here are implementations for this interface or virtual method on a base class, you know becuase this type inherits this base and implements this interface, it’s in it’s declaration. No really I honestly can. You know, by simply reading the code.

It’s almost a self fulfilling prophecy that we now need regions simply because everyone seems to insist on hiding their code behind them and thus it’s the only way we can all now find our way around all of this complicated magic code and stuff you know!

Just organise your code better and refactor. If your type is more than 1000 lines long, maybe you should extract some collaborating types rather than hide every single line with regions? We’ll still understand it, honest injun!

#endrant

sample sex moviexxx movies sex starsmovie celebrity sexy clipsmovie scripts short america teenmovie end sim girladult simone movie insinnamon hogtied love moviesmovie sex skinnysnowballing moviesoft wet movies nude hairy

chi bulma dbz and hentai chidrink jap piss girlslezbos chubbygirl asian bondagef spanking f storiesfuck bride interracialhentai xxx bulmaebony ass bangershombres galeria gaygirls nudist peeing

loan credit up no 20000payday loan 31 next 22loan independent hour 24 company finance2500 dollar loanloans 2500 personal risk highloan 3000 personal military forloan personal 5000 check creditcredit bad 5000 loan dollarloan 5000 check easy credit no50000 personal loan

loan 500 pay payday advance 8loans a eaccount sales manager officer loanonline loans accounting calculatorrate adjustable fha loanrate loan mortgage adjustable homeloan cash advance bostoncredit adverse loan uk carloan agricultural landstudent financial education loan aid

loans equity 125loans 203k mortgageagriculture loanshomes a mortgage for loanguide to homeowner a loans directalaska loans studentcalifornia alameda loan officersadjustable mortgage rate loansadvance business cash loan84 loans car month

pics and movies xxx free nakedfull sex length moviemovies full pornosex hardcore cartoon moviesmovies fucking hardcorexxx hentai movieshot movies blonde fuckmovies xxx women hotcock movie hugeindian movies masala

movie clips hentaimovies stripteasebestiality moviesfree rape moviesmovies in nudityxxx movietawnee stone with moviesmovies anime pornsample muscle men moviesclips nude movie

fraud ameriloanalloantibodiesauto loans approval 10025fred home loan aames375000 loan payment calculatoraircraft airone italy loansalabama loans montgomery fhacase alger loan massachusetts student studyofficer alhambra loan californiamortgage and loans ameriquest amc

movie titmus hardcore abimovie examples listening activenaked movies actors inmasala in movies actressmovie free post adult gaysex movies sample asianballs movie deepnaked beach moviesmovie beautiful girlsof movies best 2004

movie guidelines ratingsgifs icon moviewallpaper movie posterrunning poster movie matesmovie juliet soundtrack romeostrip movieslut teacher movietryouts movie2004 moviesfucking movies

movies teen tgpteens masturbating moviesmovie stars female thaititanic soundtrack movietrailer movie park boysthe voyeur movielesbian xxx moviesyoung movies girl Map

ringtones alltea310 usa sch ringtone samsungfree motorola for 007 ringtones t720iharrington chain electric 3 ton hoistnokia ringtone itunes 60107520 ringtone formats g herrington 104 kansasnokia ringtone 2115i free Map

nackt Kiwi Teensanal Europäische dildoPussy haarigen Atkingdomvon Kostenloses Frauen Probeheft verspritzend VideosMaschine Kream verspritzend fucklesbien Schwarz GeschlechtSex Bilder pussey nackten Anker Porno ErwachsenenMädchen nackt Asian minderjährige Map

in tech programs accredited x-ray georgiaamerican union credit federal 1reports credit 3maroc accreditationaiu degree programs accreditationairline cards credit milesamerican military of university accreditationincome 2007 earned credit Map

WCF – IDisposable and safe WCF Client handling

January 17th, 2008 software

The implementation of the disposable pattern in WCF is something of a mystery to be honest. In C# the presence of the IDisposable interface on any type should invite the developer to take advantage of a using block to ensure any resources are cleaned up even in the event of an unhandled exception in the client code (for any that didn’t know a using block is basically just a C# construct that compiles to try {} … finally{ xxx.Dispose(); }. The trouble with the use of this pattern in WCF is that it’s not correct to call Dispose on a WCF proxy instance if it’s been put into a faulted state else you’ll get a, no doubt now infamous, “The communication object, …., cannot be used for communication because it is in the Faulted state.” exception message.

Regardless of what you’re trying to do in the client code, if you call close on a WCF communication object instance it’ll first try to complete any outstanding work it was doing for you. Clearly if it’s already faulted it’s not going to be able to do this and the internal guard against working on it in this state will always throw an exception.

This can be pretty problematic when you first start using WCF as the communication object faulted exception does a really good job of masking the actual problems that are faulting your channels.

My technical lead and I did a bit of research into this and eventually came up this best practice article from Microsoft on how to deal with using a communication object safely and still be able to deal with exceptions in a more granular fashion depending on what specifically was going wrong.

My problem with this lengthy try {} catch {} statement is the massive duplication it involves (surely the point abstracting safe clean up operations behind a call to Dispose as advertised by the type?).

A solution for us was to create our own SafeProxyHandler that would guarantee clean up and granular exception reporting without the need to repeat ourselves endlessly with the prescribed try catch statements.

The result is below.


using System;
using System.Diagnostics;
using System.ServiceModel;</p>
namespace Electroholic.Blog.Samples
{
public delegate void SafeProxyInvocationHandler(out ICommunicationObject proxy);</p>
public static class SafeProxyHandler
{
public static Exception Invoke(SafeProxyInvocationHandler del)
{
return Invoke(null, del);
}

public static Exception Invoke(string messageTemplate,
SafeProxyInvocationHandler del)
{
if (del == null)
throw new ArgumentException("Expected delegate instance for handler to invoke!");

ICommunicationObject proxy = null;

try
{
del(out proxy);
HandleClose(proxy);

return null;
}
catch (TimeoutException exception)
{
HandleException(proxy, exception, messageTemplate);
return exception;
}
catch (FaultException exception)
{
HandleException(proxy, exception, messageTemplate);
return exception;
}
catch (CommunicationException exception)
{
HandleException(proxy, exception, messageTemplate);
return exception;
}
catch (Exception exception)
{
HandleException(proxy, exception, messageTemplate);
return exception;
}
}

private static void HandleClose(ICommunicationObject proxy)
{
if (proxy != null
&amp;&amp; proxy.State != CommunicationState.Closed
&amp;&amp; proxy.State != CommunicationState.Closing
&amp;&amp; proxy.State != CommunicationState.Faulted)
proxy.Close();
}

private static void HandleException(ICommunicationObject proxy,
Exception e,
string messageTemplate)
{
AbortClient(proxy);
ReportException(e, messageTemplate);
}

private static void ReportException(Exception e, string template)
{
Trace.WriteLine(FormatMessage(template, e.GetType().Name));
}

private static string FormatMessage(string message, params string[] args)
{
return args == null || args.Length == 0 ? message : string.Format(message, args);
}

private static void AbortClient(ICommunicationObject proxy)
{
if (proxy != null)
proxy.Abort();
}
}
}

Example usage scenarios below show how much cleaner it is.

  1. public void SimpleWCFServiceCall()
  2. {
  3. Exception e = SafeProxyHandler.Invoke(
  4. delegate(out ICommunicationObject proxy)
  5. {
  6. ExampleWCFClient client = proxy = new ExampleWCFClient();
  7. client.ExampleCall();
  8. });</p>
  9. if (e != null)
  10. {
  11. //Handle exception
  12. }
  13. }</p>
  14. public void WCFServiceCallWithTraceExceptions()
  15. {
  16. Exception e = SafeProxyHandler.Invoke(
  17. “Unable to call ExampleWCFService successfully [{0}].”,
  18. delegate(out ICommunicationObject proxy)
  19. {
  20. ExampleWCFClient client = proxy = new ExampleWCFClient();
  21. client.ExampleCall();
  22. });
  23.  
  24. if (e != null)
  25. {
  26. //Handle exception
  27. }
  28. }