Saturday, June 25, 2011

SPAM email – spreading classical literature?

SPAM email has gotten quite smart in bypassing various spam filters, the funniest being the use of snippets from works of literature to pad the text, to make it look more “real”.  So it will start off by offering to increase the size of certain appendages, but then suddenly break into a snippet of Sherlock Holmes.  Sometimes these make you go “I wonder what book this comes from, I would love to read it!” – e.g. today’s SPAM from my inbox comes courtesy of two classics of literature:


The first part apparently comes from “Dracula” (what CAN’T Google find?):

"You are quite right. I did not trust you because I did not know you. But I know you now, and let me say that I should have known you long ago. I know that Lucy told you of me. She told me of you too. May I make the only atonement in my power? Take the cylinders and hear them. The first half-dozen of them are personal to me, and they will not horrify you. Then you will know me better. Dinner will by then be ready. In the meantime I shall read over some of these documents, and shall be better able to understand certain things."

The other from “Gulliver’s Travels”:

“And, therefore, when he was again about to move, I screamed as loud as fear could make me. Whereupon the huge creature trod short, and looking round about under him for some time, at last espied me as I lay on the ground. He considered awhile, with the caution of one who endeavors to lay hold on a small dangerous animal in such a manner that it shall not be able either to scratch or to bite him, as I myself have sometimes done with a weasel in England.”

Now I imagine they’ve had go from doing full paragraphs ripped out of Project Gutenberg either to chopped sentences either because filters in places like GMail are smart enough to look for longer Gutenberg matches, or to save space.  Or both.  Would love to find a site charting the evolution of countermeasures employed in SPAM to bypass various filters.  Maybe the final step in SPAM will be the evolution of AI to appear like a genuine unique email about a subject?

Sunday, May 15, 2011

.NET decompilers–or “Attack of the (currently inferior) Clones”

RedGate’s Reflector tool has been ridiculously popular amongst .NET developers for a long time.  It has shed light on all kinds of dark .NET corners in both the shipped .NET assemblies and third party ones.  Heck, I’ve even used it to try to make sense of poorly obfuscated ones, with surprisingly positive results (DevArt dotConnect, I’m looking at you!).

But then we were all cast out of Eden.  Free Reflector no longer exists, and they want you to pony up $35 to get back in.  I tried to hold on to the old versions for as long as possible:


But eventually decided to have a look at Reflector 7, which I’ve now reached the end of the 14-day trial of:


So let’s have a look at the contenders for the “.NET Decompiler King” crown, that have surfaced from the nerd rage that bathed the web after the announcement of the demise of free Reflector.

A good list of possibilities can be found in this StackOverflow discussion.

I’ll look at the, what appear to me, top 3 offerings:  ILSpy, which is open source,  JustDecompile from Telerik (free but closed), and dotPeek from JetBrains (free but closed):



Interestingly, ILSpy lists .NET4 as a prerequisite.  Meh.  Whatever, I’m hoping it’s an indicator of use of more “interesting” coding patterns.

It’s a bit rough at the moment, but runs fast, and is pretty stable.  Navigation is not as fluid as in Reflector.


Lambda support is as bad as it was in Reflector 6, but is clearly on the roadmap on the ILSpy website. 


This has promise, but is lacking in the usability department.



Overall, the look is very much like Reflector - types are hyperlinked, you can expand all members of a class etc.  Other assemblies are pulled in a needed if it can resolve them.  One annoying thing was that calls to "base" constructors weren't hyperlinked - something that's annoying if there are a lot of constuctor overloads.

Overall impression is one of extreme slowness.  Assemblies take ages to load, everything is quite painfully slow.  But then again, it’s a young product.


Has nifty search, allowing to find usages.  A nice improvement that can already be seen is the ability to filter by only Read or Write usages.  Handy when you are trying to find possible culprits that are setting some member for example.  Although it didn't quite work as expected - as in, it didn't work for me.

At the moment, the product seems a very sluggish, and a fair few crashes.  Also, from the various errors and the presence of the DLL in the directory, we can tell that Mono.Cecil is being used.  Refreshingly, at least for the moment, the application does not seem to be obfuscated, like Reflector was.  Anyhow, the product has a long way to go.  Until I see refinements like bookmarks, ability to create deeper navigation trees (in Reflector you could do deep investigations of using "used by/called by" to visualise a deep call tree you're interested in, expanding more and more nodes to reveal a long chain of callers to establish a relationship between two modules).

Lambda handling is poor as well:

IEnumerable<DOCUMENT> dOCUMENTs = ParameterExpression[] parameterExpressionArray3 = new ParameterExpression[1].Where(Expression.Lambda(parameterExpressionArray3[0] = parameterExpression, parameterExpressionArray3));

As for Add-Ins, which in my opinion endeared Reflector to the community, I posted a question on the Telerik forums (which are already full of bug reports and feature requests, only a few days after release) and quickly got the response that "This is definitely an option that we'll target for the feature version of the product".  So their heart seems to be in the right place.



JetBrains has just released a very early version of their dotPeek software, and it's a little, well, undercooked. They must be coming from the "release early, release often" school of development:


There appear to be various errors sprinkled through the code, and the treatment of lambdas is by far the least readable.  Navigation and search are very functional, as I expect they’re almost straight out of ReSharper.

Conclusion and musings:

Looking at these three, it seems to me that so far we're quite far off getting a decent replacement for Reflector.  Although the announcement of moving to a paid model has created this Cambrian explosion of .NET decompilers, the current offerings seem to indicate that it's quite difficult to get the level of polish that Reflector had.

An interesting differentiator in the near future for these products I think will be Lambda expressions - given how much more we're using Lambdas in day to day .NET development now, I'd say the final favourite decompiler will be the one that renders them properly, and so far it's a feature only available in Reflector 7 (even though it uses the "query" style syntax for rendering them):


We'll just have to wait and see what happens over the next few months.  All of the above tools are quite early on in their development, and I’m guessing they’re all shooting for mimicking Reflector’s abilities one to one, before adding their own flavour on top, but they’re not there yet.

In the meantime, is $35 all that much to spend on a decent tool?  My feelings towards this were quite mixed initially, first I thought, well $35 is fine for a trusted tool, but then the feeling of betrayal sets in, especially because there isn’t even a free “lite” version.  On the other hand, I think a lot of people would have happily donated the $35, so this should be no different.  For example, if work didn’t pay for ReSharper, I’d most likely buy my own license, so what’s $35?  It’s all these mixed feelings from suddenly having to pay for something that you had for free.  Of course all sins would be forgiven if only RedGate offered a free “lite” version.

It's illogical, Captain.

Tuesday, March 8, 2011

Software Engineers writing fiction?

I’ve just noticed that Mark Russinovich (of Sysinternals fame) is publishing a fiction book.  There was another CompSci author, Roger Pressman, who’s non-fiction work was part of the reading during my university course, who had also written a fiction book, and despite only having one review on Amazon sounds like an exciting read.  Both are techno-thrillers.  I’d not expect a historical romance from a software developer! 

I guess in both cases the authors have enough “street cred” to take a bit of time off to experiment with this idea of being a published author, and return back to their ordinary careers in case of failure – was this something they always wanted to do, but were too afraid to pursue full time? 

One interesting side note about the “Aymara Bridge” is that (from another review I cannot find), it touches on trivalent logic – i.e. instead of True/False, it has an additional third state.  Apparently this logic type can be inferred from the language of the Aymara culture -  The third value indicates a kind of uncertainty that’s absent from “traditional” logic, but is linguistically somewhat natural.  Fascinating concept.  You can still construct some kind of logic system out of it, it’s just that it’s not terribly suited to computers. Pressman cites this idea as the inspiration for his book.


From the description at Amazon:

The horror of cyberterrorism explodes on the page in Russinovich’s first novel. A plane over the Atlantic suddenly needs to reboot its computer to stay in the air, and the pilots barely avert disaster. A hospital network mixes up patient information, resulting in the death of several people. A law firm, which has lost all of its clients' data and can’t get its system running again, turns to Jeff Aiken, a former government analyst and computer expert. He discovers that all of the crashes are insidiously connected, and an even greater disaster is coming. Computer technospeak is handled with ease by Russinovich, who makes the jargon understandable for nongeeks but does so without losing authenticity. His background at Microsoft ensures that he knows what he’s writing about, but, equally important, he constructs a gripping narrative. A terrifying tale made all the more frightening by our concern that it could offers a glimpse into the future, Russinovich’s thriller just could become one of those books that prompts a real-world response, in this case a wake-up call for greater cybersecurity methods.


From the description at Amazon:

Matt Sousa is young archaeologist with an unusual background. On a dig in the foothills of the Andes mountains, Matt uncovers a mysterious Inca object that appears to be almost 1,000 years old, but there's something odd about it, and it's unlike anything he's ever seen.
RJ Fanler is the deposed founder of a major computer company who believes that its time for the personal computer to morph into something much more advanced. He believes that machine intelligence is the next great leap, but is struggling with how to achieve it.
Marco Paena is a member of the Peruvian terrorist group, Shining Path. He wants to bring down the Peruvian government and needs money to finance a major terrorist strike.
An ancient Inca language—Aymara—puts these men on a collision path.
Set in Peru and the United States, The Aymara Bridge is a technological thriller that melds the mysteries of the Incas with one vision of a not too far distant future.

Monday, January 31, 2011

Humour link - What if Visual Studio had achievements?

A proposal to have Steam/XBox style “achievements” in Visual Studio – and apparently it’s being made into an extension!  I’ve come dangerously close to getting some of these I think.   Some examples from the site:

  • The Enterprise – Build Solution took more than 10 minutes
  • Highway to Hell – Successfully created a WCF service
  • Job Security – Written a LINQ query with over 30 lines of code
  • I’d love one for architectural anti-patterns – a bunch of them were given unofficial names at work, but a bit too rude to put in print.

    Tuesday, January 11, 2011

    .NET Reflector 7 Beta is out!

    Haven’t actually played with it, but it has got to be good.  Apparently a popular community plugin is now built in.

    Get it here, use the link on the right side, the one that asks for you email is version 6.5.

    A list of new features available here (which was where I heard the news).  There’s apparently a “Write LINQ against loaded assemblies” feature that sounds… intriguing.

    Sunday, January 9, 2011

    Launchy vs Windows 7 Start Menu Search

    For the last few years I’ve been using Launchy for rapid keyboard based application launching.  It’s a distant, weaker cousin of QuickSilver on the Mac, with a tiny subset of its functionality, but still fantastic.  Some people, when seeing Launchy in action comment that in Windows 7 this functionality is built in via the Start menu search box.

    Not quite.

    For example typing “vis 10” in Launchy will match “Visual Studio 2010”, however in the Windows Start search thingie, it will not.  You would need “vis 2010”. 

    In the below screenshot, you can see that Launchy matched anything that has a “vis” followed by “08” anywhere in the application name.


    In short, the Windows 7 search matches from the start of a word, whereas Launchy is happy for the match to be anywhere within the word.  I think that’s a lot more useful, especially in situations where a program name is a concatenation of some words.  E.g. I might have a bunch of XML related applications, all with “XML” somewhere in the name… is it “XMLSpy” or “SpyXML” ? The point is, I should be able to look for it by just typing “XML”.

    Anyhow, even if you’re on Windows 7, get Launchy.  Or if you’ve been spoiled on a Mac, get QuickSilver.  You won’t regret it.