Tuesday 15 July 2014

How Spam can be mass-produced, look convincing and yet bypass the filters

This blogspam arrived today.  Looks like someone used the template instead of the tools that should have processed it.

Hopefully, this will give the spam blockers some insight into how to block this stuff..


{
{I have|I've} been {surfing|browsing} online more than {three|3|2|4}
hours today, yet I never found any interesting article like yours.

{It's|It is} pretty worth enough for me. {In my opinion|Personally|In my view}, if all {webmasters|site owners|website owners|web owners} and bloggers made
good content as you did, the {internet|net|web} will be {much more|a lot more} useful than ever before.|
I {couldn't|could not} {resist|refrain from} commenting.

{Very well|Perfectly|Well|Exceptionally well} written!|
{I will|I'll} {right away|immediately} {take hold of|grab|clutch|grasp|seize|snatch} your {rss|rss
feed} as I {can not|can't} {in finding|find|to find} your {email|e-mail} subscription {link|hyperlink} or {newsletter|e-newsletter} service.
Do {you have|you've} any? {Please|Kindly} {allow|permit|let} me {realize|recognize|understand|recognise|know} {so
that|in order that} I {may just|may|could} subscribe.
Thanks.|
{It is|It's} {appropriate|perfect|the best} time to make some plans
for the future and {it is|it's} time to be happy.
{I have|I've} read this post and if I could I {want to|wish to|desire to} suggest you
{few|some} interesting things or {advice|suggestions|tips}.
{Perhaps|Maybe} you {could|can} write next articles referring to this article.
I {want to|wish to|desire to} read {more|even more} things about it!|
{It is|It's} {appropriate|perfect|the best} time to make
{a few|some} plans for {the future|the longer term|the long run} and {it is|it's} time to be happy.
{I have|I've} {read|learn} this {post|submit|publish|put up} and if I {may just|may|could} I {want to|wish to|desire to} {suggest|recommend|counsel} you {few|some}
{interesting|fascinating|attention-grabbing} {things|issues} or
{advice|suggestions|tips}. {Perhaps|Maybe} you {could|can} write {next|subsequent} articles {relating to|referring to|regarding} this article.
I {want to|wish to|desire to} {read|learn} {more|even more} {things|issues} {approximately|about} it!|
{I have|I've} been {surfing|browsing} {online|on-line}
{more than|greater than} {three|3} hours {these days|nowadays|today|lately|as of late}, {yet|but}
I {never|by no means} {found|discovered} any {interesting|fascinating|attention-grabbing} article like yours.
{It's|It is} {lovely|pretty|beautiful} {worth|value|price} {enough|sufficient} for me.
{In my opinion|Personally|In my view}, if all {webmasters|site owners|website
owners|web owners} and bloggers made {just right|good|excellent} {content|content material} as {you did|you probably did}, the {internet|net|web} {will be|shall be|might
be|will probably be|can be|will likely be} {much
more|a lot more} {useful|helpful} than ever before.|
Ahaa, its {nice|pleasant|good|fastidious} {discussion|conversation|dialogue} {regarding|concerning|about|on the topic of}
this {article|post|piece of writing|paragraph} {here|at this place} at this {blog|weblog|webpage|website|web site},
I have read all that, so {now|at this time} me also commenting {here|at this place}.|
I am sure this {article|post|piece of writing|paragraph} has touched all the
internet {users|people|viewers|visitors}, its really really {nice|pleasant|good|fastidious} {article|post|piece of writing|paragraph} on building up new {blog|weblog|webpage|website|web
site}.|
Wow, this {article|post|piece of writing|paragraph} is {nice|pleasant|good|fastidious}, my {sister|younger sister} is analyzing {such|these|these kinds of} things, {so|thus|therefore} I am going to {tell|inform|let know|convey} her.|
{Saved as a favorite|bookmarked!!}, {I really like|I like|I love} {your blog|your site|your web site|your website}!|
Way cool! Some {very|extremely} valid points! I appreciate you
{writing this|penning this} {article|post|write-up} {and
the|and also the|plus the} rest of the {site is|website is} {also
very|extremely|very|also really|really} good.|
Hi, {I do believe|I do think} {this is an excellent|this is a great} {blog|website|web site|site}.
I stumbledupon it  {I will|I am going to|I'm going to|I
may} {come back|return|revisit} {once again|yet again} {since I|since i
have} {bookmarked|book marked|book-marked|saved as a favorite} it.

Money and freedom {is the best|is the greatest} way to change, may you be rich and continue to {help|guide} {other people|others}.|
Woah! I'm really {loving|enjoying|digging} the template/theme of this {site|website|blog}.
It's simple, yet effective. A lot of times it's {very hard|very difficult|challenging|tough|difficult|hard} to get that "perfect balance" between {superb usability|user friendliness|usability} and {visual appearance|visual
appeal|appearance}. I must say {that you've|you have|you've} done a {awesome|amazing|very good|superb|fantastic|excellent|great}
job with this. {In addition|Additionally|Also}, the blog loads {very|extremely|super} {fast|quick} for me on {Safari|Internet explorer|Chrome|Opera|Firefox}.
{Superb|Exceptional|Outstanding|Excellent} Blog!|
These are {really|actually|in fact|truly|genuinely} {great|enormous|impressive|wonderful|fantastic}
ideas in {regarding|concerning|about|on the topic of} blogging.
You have touched some {nice|pleasant|good|fastidious} {points|factors|things}
here. Any way keep up wrinting.|
{I love|I really like|I enjoy|I like|Everyone loves} what
you guys {are|are usually|tend to be} up too. {This sort of|This type of|Such|This kind of} clever work and
{exposure|coverage|reporting}! Keep up the {superb|terrific|very good|great|good|awesome|fantastic|excellent|amazing|wonderful}
works guys I've {incorporated||added|included} you guys
to {|my|our||my personal|my own} blogroll.|
{Howdy|Hi there|Hey there|Hi|Hello|Hey}! Someone in my {Myspace|Facebook} group shared this {site|website} with us so I
came to {give it a look|look it over|take a look|check it out}.
I'm definitely {enjoying|loving} the information. I'm {book-marking|bookmarking} and
will be tweeting this to my followers! {Terrific|Wonderful|Great|Fantastic|Outstanding|Exceptional|Superb|Excellent}
blog and {wonderful|terrific|brilliant|amazing|great|excellent|fantastic|outstanding|superb} {style
and design|design and style|design}.|
{I love|I really like|I enjoy|I like|Everyone loves} what
you guys {are|are usually|tend to be} up too.
{This sort of|This type of|Such|This kind of} clever work and {exposure|coverage|reporting}!

Keep up the {superb|terrific|very good|great|good|awesome|fantastic|excellent|amazing|wonderful} works guys I've {incorporated|added|included} you guys to {|my|our|my personal|my own}
blogroll.|
{Howdy|Hi there|Hey there|Hi|Hello|Hey} would you mind {stating|sharing} which blog platform you're {working with|using}?

I'm {looking|planning|going} to start my own blog {in the near future|soon} but
I'm having a {tough|difficult|hard} time {making a
decision|selecting|choosing|deciding} between BlogEngine/Wordpress/B2evolution and Drupal.
The reason I ask is because your {design and
style|design|layout} seems different then most blogs and I'm looking for something {completely unique|unique}.
P.S {My apologies|Apologies|Sorry} for {getting|being} off-topic but I
had to ask!|
{Howdy|Hi there|Hi|Hey there|Hello|Hey} would you mind letting me know which {webhost|hosting
company|web host} you're {utilizing|working with|using}?
I've loaded your blog in 3 {completely different|different}
{internet browsers|web browsers|browsers} and I must say this blog loads a
lot {quicker|faster} then most. Can you {suggest|recommend} a good {internet hosting|web hosting|hosting} provider at a {honest|reasonable|fair} price?
{Thanks a lot|Kudos|Cheers|Thank you|Many thanks|Thanks}, I appreciate it!|
{I love|I really like|I like|Everyone loves} it {when people|when individuals|when folks|whenever people} {come together|get together} and share {opinions|thoughts|views|ideas}.
Great {blog|website|site}, {keep it up|continue the good work|stick with it}!|
Thank you for the {auspicious|good} writeup. It in fact was a amusement account
it. Look advanced to {far|more} added agreeable from you!
{By the way|However}, how {can|could} we communicate?|
{Howdy|Hi there|Hey there|Hello|Hey} just wanted to give you a quick heads up.
The {text|words} in your {content|post|article} seem to be running off
the screen in {Ie|Internet explorer|Chrome|Firefox|Safari|Opera}.

I'm not sure if this is a {format|formatting} issue
or something to do with {web browser|internet browser|browser} compatibility but I {thought|figured} I'd post
to let you know. The {style and design|design and style|layout|design} look great though!
Hope you get the {problem|issue} {solved|resolved|fixed} soon.
{Kudos|Cheers|Many thanks|Thanks}|
This is a topic {that is|that's|which is} {close to|near to} my heart...

{Cheers|Many thanks|Best wishes|Take care|Thank you}!
{Where|Exactly where} are your contact details though?|
It's very {easy|simple|trouble-free|straightforward|effortless} to find out any {topic|matter} on {net|web} as compared to {books|textbooks}, as I found this {article|post|piece of writing|paragraph} at this
{website|web site|site|web page}.|
Does your {site|website|blog} have a contact page? I'm having
{a tough time|problems|trouble} locating it but, I'd like to {send|shoot} you an {e-mail|email}.

I've got some {creative ideas|recommendations|suggestions|ideas} for your blog you might be interested in hearing.

Either way, great {site|website|blog} and I look forward to seeing it {develop|improve|expand|grow}
over time.|
{Hola|Hey there|Hi|Hello|Greetings}! I've been {following|reading} your {site|web site|website|weblog|blog} for {a long time|a while|some time} now and finally got the {bravery|courage} to go ahead and give
you a shout out from  {New Caney|Kingwood|Huffman|Porter|Houston|Dallas|Austin|Lubbock|Humble|Atascocita} {Tx|Texas}!
Just wanted to {tell you|mention|say} keep up the
{fantastic|excellent|great|good} {job|work}!|
Greetings from {Idaho|Carolina|Ohio|Colorado|Florida|Los angeles|California}!

I'm {bored to tears|bored to death|bored} at work
so I decided to {check out|browse} your {site|website|blog} on my iphone during lunch
break. I {enjoy|really like|love} the {knowledge|info|information} you {present|provide} here and can't wait to
take a look when I get home. I'm {shocked|amazed|surprised} at
how {quick|fast} your blog loaded on my {mobile|cell phone|phone} ..
I'm not even using WIFI, just 3G .. {Anyhow|Anyways}, {awesome|amazing|very good|superb|good|wonderful|fantastic|excellent|great} {site|blog}!|
Its {like you|such as you} {read|learn} my {mind|thoughts}!
You {seem|appear} {to understand|to know|to grasp} {so much|a lot} {approximately|about} this, {like you|such as you} wrote the {book|e-book|guide|ebook|e book} in it or something.
{I think|I feel|I believe} {that you|that you simply|that you just} {could|can} do with {some|a few} {%|p.c.|percent} to
{force|pressure|drive|power} the message {house|home} {a bit|a little
bit}, {however|but} {other than|instead of} that, {this is|that is} {great|wonderful|fantastic|magnificent|excellent}
blog. {A great|An excellent|A fantastic} read.
{I'll|I will} {definitely|certainly} be back.|
I visited {multiple|many|several|various} {websites|sites|web sites|web pages|blogs} {but|except|however} the
audio {quality|feature} for audio songs {current|present|existing} at this {website|web site|site|web page} is {really|actually|in fact|truly|genuinely} {marvelous|wonderful|excellent|fabulous|superb}.|
{Howdy|Hi there|Hi|Hello}, i read your blog {occasionally|from
time to time} and i own a similar one and i was just {wondering|curious} if you get a
lot of spam {comments|responses|feedback|remarks}?
If so how do you {prevent|reduce|stop|protect against} it, any plugin or anything you can {advise|suggest|recommend}?
I get so much lately it's driving me {mad|insane|crazy} so any {assistance|help|support} is very much appreciated.|
Greetings! {Very helpful|Very useful} advice {within this|in this particular} {article|post}!

{It is the|It's the} little changes {that make|which will make|that
produce|that will make} {the biggest|the largest|the greatest|the most important|the most significant} changes.

{Thanks a lot|Thanks|Many thanks} for sharing!|
{I really|I truly|I seriously|I absolutely} love {your blog|your site|your website}..
{Very nice|Excellent|Pleasant|Great} colors & theme.
Did you {create|develop|make|build} {this website|this site|this web
site|this amazing site} yourself? Please reply back as I'm {looking to|trying to|planning to|wanting
to|hoping to|attempting to} create {my own|my
very own|my own personal} {blog|website|site} and {would
like to|want to|would love to} {know|learn|find out} where
you got this from or {what the|exactly what the|just what the} theme {is called|is named}.
{Thanks|Many thanks|Thank you|Cheers|Appreciate it|Kudos}!|
{Hi there|Hello there|Howdy}! This {post|article|blog post} {couldn't|could not} be written {any better|much better}!
{Reading through|Looking at|Going through|Looking
through} this {post|article} reminds me of my previous roommate!
He {always|constantly|continually} kept {talking about|preaching about} this.
{I will|I'll|I am going to|I most certainly
will} {forward|send} {this article|this information|this post} to him.

{Pretty sure|Fairly certain} {he will|he'll|he's
going to} {have a good|have a very good|have a great} read.
{Thank you for|Thanks for|Many thanks for|I appreciate you for} sharing!|
{Wow|Whoa|Incredible|Amazing}! This blog looks {exactly|just} like my old one!

It's on a {completely|entirely|totally}
different {topic|subject} but it has pretty much the same {layout|page
layout} and design. {Excellent|Wonderful|Great|Outstanding|Superb} choice of colors!|
{There is|There's} {definately|certainly} {a lot to|a great deal to} {know
about|learn about|find out about} this {subject|topic|issue}.
{I like|I love|I really like} {all the|all of
the} points {you made|you've made|you have made}.|
{You made|You've made|You have made} some {decent|good|really good}
points there. I {looked|checked} {on the internet|on the
web|on the net} {for more info|for more information|to find out more|to learn more|for additional information} about the issue and found {most individuals|most people} will go along with your views on {this website|this site|this web
site}.|
{Hi|Hello|Hi there|What's up}, I {log on to|check|read} your {new stuff|blogs|blog} {regularly|like every week|daily|on a regular basis}.
Your {story-telling|writing|humoristic} style is {awesome|witty}, keep {doing what you're doing|up the good work|it up}!|
I {simply|just} {could not|couldn't} {leave|depart|go away} your {site|web
site|website} {prior to|before} suggesting that I {really|extremely|actually} {enjoyed|loved} {the standard|the usual}
{information|info} {a person|an individual} {supply|provide} {for your|on your|in your|to your} {visitors|guests}?

Is {going to|gonna} be {back|again} {frequently|regularly|incessantly|steadily|ceaselessly|often|continuously} {in order to|to} {check
up on|check out|inspect|investigate cross-check} new posts|
{I wanted|I needed|I want to|I need to} to thank
you for this {great|excellent|fantastic|wonderful|good|very good} read!!
I {definitely|certainly|absolutely} {enjoyed|loved} every
{little bit of|bit of} it. {I have|I've got|I have got} you {bookmarked|book
marked|book-marked|saved as a favorite} {to check out|to look at} new {stuff you|things you} post…|
{Hi|Hello|Hi there|What's up}, just wanted to {mention|say|tell you}, I {enjoyed|liked|loved} this {article|post|blog post}.
It was {inspiring|funny|practical|helpful}. Keep on posting!|
{Hi there|Hello}, I enjoy reading {all of|through} your {article|post|article post}.
I {like|wanted} to write a little comment to support you.|
I {always|constantly|every time} spent my half an hour to read this {blog|weblog|webpage|website|web site}'s {articles|posts|articles or reviews|content} {everyday|daily|every day|all the time} along with a {cup|mug}
of coffee.|
I {always|for all time|all the time|constantly|every time} emailed this
{blog|weblog|webpage|website|web site} post page to
all my {friends|associates|contacts}, {because|since|as|for the reason that} if
like to read it {then|after that|next|afterward} my {friends|links|contacts}
will too.|
My {coder|programmer|developer} is trying to {persuade|convince} me to move to .net from PHP.
I have always disliked the idea because of
the {expenses|costs}. But he's tryiong none the less.

I've been using {Movable-type|WordPress} on {a number of|a variety of|numerous|several|various} websites for about a year and am {nervous|anxious|worried|concerned}
about switching to another platform. I have heard {fantastic|very good|excellent|great|good} things about blogengine.net.
Is there a way I can {transfer|import} all my wordpress {content|posts} into it?

{Any kind of|Any} help would be {really|greatly} appreciated!|
{Hello|Hi|Hello there|Hi there|Howdy|Good day}! I could have sworn I've {been to|visited}
{this blog|this web site|this website|this site|your blog} before but after {browsing through|going through|looking at} {some of
the|a few of the|many of the} {posts|articles} I realized it's new to me.
{Anyways|Anyhow|Nonetheless|Regardless}, I'm {definitely|certainly} {happy|pleased|delighted} {I found|I discovered|I came across|I stumbled upon} it and I'll be {bookmarking|book-marking} it and checking back {frequently|regularly|often}!|
{Terrific|Great|Wonderful} {article|work}! {This
is|That is} {the type of|the kind of} {information|info} {that are meant to|that are supposed to|that should} be shared
{around the|across the} {web|internet|net}. {Disgrace|Shame} on {the {seek|search} engines|Google} for {now not|not|no longer} positioning this {post|submit|publish|put up} {upper|higher}!
Come on over and {talk over with|discuss with|seek advice from|visit|consult with} my {site|web site|website}
. {Thank you|Thanks} =)|
Heya {i'm|i am} for the first time here. I {came across|found} this board and I find It {truly|really}
useful & it helped me out {a lot|much}. I hope to give something back and {help|aid}
others like you {helped|aided} me.|
{Hi|Hello|Hi there|Hello there|Howdy|Greetings}, {I think|I believe|I do believe|I do think|There's no doubt that}
{your site|your website|your web site|your blog} {might be|may be|could be|could
possibly be} having {browser|internet browser|web browser} compatibility {issues|problems}.

{When I|Whenever I} {look at your|take a look at your} {website|web site|site|blog} in Safari,
it looks fine {but when|however when|however, if|however, when} opening in {Internet Explorer|IE|I.E.},
{it has|it's got} some overlapping issues. {I just|I simply|I merely} wanted to {give you a|provide you with a} quick heads up!
{Other than that|Apart from that|Besides that|Aside from that},
{fantastic|wonderful|great|excellent} {blog|website|site}!|
{A person|Someone|Somebody} {necessarily|essentially} {lend a hand|help|assist} to make
{seriously|critically|significantly|severely} {articles|posts} {I
would|I might|I'd} state. {This is|That is} the {first|very first} time
I frequented your {web page|website page} and {to this point|so
far|thus far|up to now}? I {amazed|surprised} with the {research|analysis} you made to {create|make} {this
actual|this particular} {post|submit|publish|put up} {incredible|amazing|extraordinary}.
{Great|Wonderful|Fantastic|Magnificent|Excellent} {task|process|activity|job}!|
Heya {i'm|i am} for {the primary|the first} time here. I {came
across|found} this board and I {in finding|find|to find} It
{truly|really} {useful|helpful} & it helped me out {a lot|much}.
{I am hoping|I hope|I'm hoping} {to give|to offer|to provide|to
present} {something|one thing} {back|again} and {help|aid} others {like you|such as you} {helped|aided} me.|
{Hello|Hi|Hello there|Hi there|Howdy|Good day|Hey there}!
{I just|I simply} {would like to|want to|wish to} {give you a|offer you a} {huge|big} thumbs up {for the|for your} {great|excellent} {info|information} {you have|you've got|you have got}
{here|right here} on this post. {I will be|I'll be|I am} {coming
back to|returning to} {your blog|your site|your
website|your web site} for more soon.|
I {always|all the time|every time} used to {read|study} {article|post|piece of
writing|paragraph} in news papers but now as I am a user of {internet|web|net} {so|thus|therefore} from now I am using net for {articles|posts|articles or reviews|content},
thanks to web.|
Your {way|method|means|mode} of {describing|explaining|telling} {everything|all|the whole
thing} in this {article|post|piece of writing|paragraph} is {really|actually|in fact|truly|genuinely} {nice|pleasant|good|fastidious},
{all|every one} {can|be able to|be capable of} {easily|without difficulty|effortlessly|simply} {understand|know|be
aware of} it, Thanks a lot.|
{Hi|Hello} there, {I found|I discovered} your
{blog|website|web site|site} {by means of|via|by the use of|by way of} Google {at the same time
as|whilst|even as|while} {searching for|looking for} a {similar|comparable|related} {topic|matter|subject}, your {site|web site|website} {got here|came} up,
it {looks|appears|seems|seems to be|appears to be like} {good|great}.
{I have|I've} bookmarked it in my google bookmarks.
{Hello|Hi} there, {simply|just} {turned into|became|was|become|changed into} {aware of|alert to} your {blog|weblog} {thru|through|via} Google,
{and found|and located} that {it is|it's} {really|truly} informative.

{I'm|I am} {gonna|going to} {watch out|be careful} for
brussels. {I will|I'll} {appreciate|be grateful} {if you|should
you|when you|in the event you|in case you|for
those who|if you happen to} {continue|proceed} this {in future}.
{A lot of|Lots of|Many|Numerous} {other folks|folks|other people|people} {will be|shall be|might be|will probably be|can be|will likely be}
benefited {from your|out of your} writing. Cheers!|
{I am|I'm} curious to find out what blog {system|platform} {you have been|you happen to be|you are|you're} {working with|utilizing|using}?
I'm {experiencing|having} some {minor|small} security {problems|issues} with my latest {site|website|blog} and {I would|I'd}
like to find something more {safe|risk-free|safeguarded|secure}.
Do you have any {solutions|suggestions|recommendations}?|
{I am|I'm} {extremely|really} impressed with your writing
skills {and also|as well as} with the layout on your {blog|weblog}.
Is this a paid theme or did you {customize|modify} it yourself?
{Either way|Anyway} keep up the {nice|excellent} quality writing, {it's|it is} rare to see a {nice|great} blog like this one
{these days|nowadays|today}.|
{I am|I'm} {extremely|really} {inspired|impressed} {with your|together with your|along with your} writing
{talents|skills|abilities} {and also|as {smartly|well|neatly} as}
with the {layout|format|structure} {for your|on your|in your|to
your} {blog|weblog}. {Is this|Is that this} a paid {subject|topic|subject matter|theme} or did
you {customize|modify} it {yourself|your self}? {Either way|Anyway} {stay|keep} up the {nice|excellent} {quality|high quality} writing,
{it's|it is} {rare|uncommon} {to peer|to see|to look} a {nice|great} {blog|weblog} like this one {these days|nowadays|today}..|
{Hi|Hello}, Neat post. {There is|There's} {a problem|an issue} {with your|together with
your|along with your} {site|web site|website} in {internet|web} explorer, {may|might|could|would} {check|test}
this? IE {still|nonetheless} is the {marketplace|market} {leader|chief} and {a
large|a good|a big|a huge} {part of|section of|component to|portion of|component of|element of} {other folks|folks|other people|people} will {leave out|omit|miss|pass over}
your {great|wonderful|fantastic|magnificent|excellent} writing
{due to|because of} this problem.|
{I'm|I am} not sure where {you are|you're} getting your {info|information}, but {good|great} topic.
I needs to spend some time learning {more|much more} or understanding more.
Thanks for {great|wonderful|fantastic|magnificent|excellent} {information|info} I was looking for this {information|info} for
my mission.|
{Hi|Hello}, i think that i saw you visited my {blog|weblog|website|web site|site} {so|thus} i came to
“return the favor”.{I am|I'm} {trying to|attempting to} find things to {improve|enhance} my
{website|site|web site}!I suppose its ok to use {some of|a few
of} your ideas!!\

Wednesday 18 June 2014

Switching energy supplier - robots are better than humans

Our dual-fuel supplier was Scottish Power until this morning.  A letter they sent me recently reminded me of just how much money they get from the joint account each month.  I called their call centre to say that I was comparing prices and what was the best price rate they could offer?

One long and fruitless conversation with the (very lovely) Ian later and he is still unable to quote me their best deal.  Ian himself is a lovely chap - excellent.  His training, however, seems to have him guiding the conversation continuously AWAY FROM the subject of Tariff Comparison Rate (TCR).  I asked for the best TCR several times and he seemed both unable and unwilling to discuss it.  "Oh you want to know how much you'll be paying?" No goddamn it, show me the best TCR!  It was as though he has been told to avoid the topic at all costs.

Now, I don't expect that Scottish Power's call centre are very different to any other.  They are there to confuse, schmooze and bamboozle their way into KEEPING you as a customer and thereby maximizing profits as they gradually increase prices.  Fair enough - they are there to make a profit from me.  But they seem to expect me to just sit back and take ever-increasing prices on the chin without doing anything.

So where do you go?  How about to a company who make money on CHANGING your provider based on saving you money.

Next time, I won't bother calling a human.  I'll talk to a robot.  The best ones keep it simple.  With USwitch it took me 10 minutes to switch provider and save over £230 per year.

Thank you USwitch.  You helped me move from a TCR of:

Scottish Power Standard: 16.62p/kWh for electricity and 4.97p/kWh for gas

to...

EDF Blue: 13.73p/kWh for electricity and 4.48p/kWh for gas.

Remember: TCR.  Nothing else matters.  Especially NOT the quality of customer service.  The better trained the human, the less they work in your favour.  Go for a robot instead.

Friday 30 May 2014

Truecrypt development team compromised?

It appears that the Truecrypt development team have been compromised by the NSA using some brute-force social engineering.

The Truecrypt home page and its Warrant Canary has disappeared from the web (including from the Wayback Machine at http://web.archive.org/web/*/http://truecrypt.org ), which indicates that they have been served with an order for user data under Section 215 of the Patriot Act.

The old Truecrypt page at http://truecrypt.org/ now redirects to a page at http://truecrypt.sourceforge.net/  which encourages migration to BitLocker. As the Bitlocker team appear to having been targeted by the NSA, the Truecrypt developers are either being *extremely* tongue in cheek in hinting to the community about a Lavabit-style social engineering attack or they are plain stupid.  I'd go for the former.

A new Swiss group has sprung up at http://truecrypt.ch/ to fork the source, but "who are these guys then?".

For now, do NOT migrate to Bitlocker.  Instead, keep using Truecrypt 7.1a until such time that the new Swiss group's credentials can be checked and a rolling code audit process has been established.

John Gilmore's quote from TIME magazine springs to mind:

"The Net interprets censorship as damage and routes around it."

Tuesday 20 May 2014

Microsoft Research Code Hunt Walkthrough

Introduction

What is Code Hunt?

On May 15th, as seen on Reddit the Microsoft Research Team announced Code Hunt, an online "game" that claims to help you learn to code.  Not too sure about that, but it is certainly an interesting way to pass the time and may even teach you a few things along the way.  Inevitably, though you get stuck and need hints.

This post

The purpose of this post is not to give you all the answers to Code Hunt.  If you're looking for that, you're in the wrong place!  What it will do is explain how to find all the answers and why your answers are not optimal.  With the information given here, you should be able to receive full marks and learn something along the way.  We only use C# here, but the information can equally be applied to Java.

Resources

You may find use for:

Walkthrough

Sign up

First things first, sign up and log in to ensure that you keep your progress between sessions.

General approach

The problems do not come with any specification of what the tested method should achieve, so the first thing is to reverse engineer the specification from the input->output expectations presented by the system.  One approach to achieving this is to use concatenated ternary operators using the tested input parameters as follows:



Once you have reverse engineered the method's intended purpose, you should apply documentation comments with triple-slashes.  Always document your code!


Finally, implement the function as efficiently as you can:

If Microsoft agree that your code is both correct and succinct, you get maximum points!

00 Training

00.02 Inky fingers

Look at the input value.  Look at the output value.  Not much difference is there?

00.03 Doubly tricky

Output is a multiple of input.

00.04 Nonplussed?

Output combines inputs.

01 Arithmetic

01.01 Are you positive?

Output is a simple function of input.

01.02 A bit more different

Add a constant to the input value.

01.03 Don't be so square

A higher order function.

01.04 Magic numbers

A lower order function

01.05 Divide and conquer

Magic!

01.06 More over?

Sounds like...

01.07 What's the difference?

Why fewer?

01.08 Why try more?

...than x.  First order.

01.09 You star!

Go forth...

01.10 Tricky

The first one, the second third.

01.11 Get this one over with

The other goes down under.

01.12 A modern approach

Read up on the modulo operator (the percent sign).

01.13 Even more modern

Similar to the previous puzzle.  But more. so.

01.14 WHAT?!

I must confess, originally I only managed to get the following:
It then took a LOT of staring to realise that this was some sort of modulo, but I didn't get it.  Thanks and kudos go to MegjelenÅ‘Név for pointing out that this one requires x both before AND after the modulo.  Spoiler: answer in comments below.

01.14 Of Average difficulty

You know what I mean.

02 Loops

Now the loops can all be achieved using regular loops, but in this modern age of LINQ, who uses loops?  I have provided all my Linq-based answers.  Please work out WHY these are correct (though not necessarily the highest-scoring) answers...

02.01 Simple Range

Read up on The LINQ Range method.  It may not do what you think!

02.02 Squares

02.03 More Squares

02.04 Add 'em up

This one is a little weird and requires a pair of casts...

02.05 One fewer squares

02.06 Count the a's

02.07 Count the input chars

03 Loops 2

03.01 Ternary operator

For this one, I AM going to directly give you the right answer, and it's a single line.  Read up on the C# ternary operator to find out how this works...

return power==0?1:power==1?number:number*Puzzle(number, power-1);

Here's how to read the above...

Return the following value:
  • If power is 0 then 1 otherwise
  • If the power is 1 then number otherwise
  • The number multiplied by a recursive call to this function against the number but for one lower power.

03.02 LINQ Aggregate

For this one, again, I am going to give you the answer.  Read up on the LINQ Aggregate function, which recursively multiplies.  You should then be able to see why this is an acceptable solution:

return Enumerable.Range(1,i).Aggregate(1, (x,y) => x * y);

03.03 More Range, More Aggregate

Now that you have the answer to 03.02, you should be able to solve 03.03.  Of course, you read up on exactly how LINQ Range works didn't you?  No?  Shame!  Go read up on EXACTLY what each term does.

Now, can you explain why this works?:

return Enumerable.Range(lowerBound,upperBound-lowerBound).Aggregate(upperBound, (soFar,newValue) => soFar * newValue);

03.04 Wot no LINQ?

No LINQ needed for this one really...  Half one fewer by half one more.

03.05 Non-optimal LINQ

Enumerable.Range(1, upperBound).Sum(a=>a%2==upperBound%2?a*a:0);
Now make it optimal.

03.06 LINQ Repeat

Here's part of the answer.  Now if only there were a way of JOINing STRINGs...
Enumerable.Repeat('_', word.Length)

03.07 Casting to int

Here's a framework.
return new string(s.ToCharArray().Select(c=>(char)(MATHS!).ToArray());
Hint: you can cast a char as an int.

03.08 I am not a number!

I'm a free string!

04 Conditionals

04.01 OR

04.02 AND

04.03 LESS THAN

04.04 LESS THAN again

04.05 i<0?-1MYSTERYCHARACTERi>0?1:0

04.06 MORE THAN

04.07 i<WHAT?NUM:ANOTHERNUM

04.08 Modulo ternary string / string

04.09 (i%NUM!=0?STRING1:STRING2) + STRING3

One is empty - which one?

04.10 Similar to the previous

04.11 Redouble?

04.12 i<NUM1?NUM2:i<NUM3?NUM4:NUM5

05 Conditionals 2

05.01 Oh, simple ternary

05.02 LINQ distinct count

05.03 What sort of triangle?

05.04 Show us those abdominals!

05.05 Square equality

06 Strings

06.01 I did not write elegant code.

But then I didn't need to!?

06.02 Non-optimal - make it better

var charArray = s.ToCharArray();
return Enumerable.Range(0,charArray.Length).Select(n=>n%2==0?charArray[n].ToString().ToUpper():charArray[n].ToString()).Aggregate((a,b)=>a+b);

06.03 Reverse, split, uppercasefirst, join, reverse

06.04 s at x

06.05 one plus two

06.06 second half

06.07 upper lesser second half + second half

06.08 which is longer?

06.09 the longer or both

06.10 third

06.11 WHAT?! again

See Andrew Furdell's hint below.

06.12 string + reverse

07 Strings 2

07.01 two three one one three two

07.02 first half

07.03 replace b with c

07.04 reverse

07.05 stringbuilder every other use mod

07.06 use string.Replace()

07.07 Vwls r bd m'ky?

07.08 Everything seems to be in order

Use IndexOf

07.09 Enumerable Repeat string Join

Do it all in one line

07.10 Hmm

I have the following:
var alphabet = "a b c d e f g h i j k l m n o p q r s t u v w x y z";
return string.Join(" ",Enumerable.Range(0,t).Select(n=>n!=t-1?alphabet:alphabet.Substring(0,50-n*2) + "z").ToArray());

Now how to improve?

08 Nested Loops

OK, so everyone can write nested for loops.   But we're better than that now aren't we? ;-)  Unfortunately, these efforts are not appreciated by Microsoft so most of these are considered non-optimal answers.  IF that is the case, there is something wrong either with their compiler optimisations, or with their code evaluation algorithm.

08.01 Factorial sums

Now Microsoft have just got this one plain wrong.  The following code is a quite reasonable attempt to sum the factorials between i and j:

return Enumerable.Range(i, j-i+1).Sum(x=>Enumerable.Range(1,x).Aggregate((a, b) => b * a));

However, this get rejected for two really weird cases:
For input values of i=12, j=13, Microsoft give the answer -1883912192.  Clearly wrong.  12! + 13! is 6706022400.
For input values of i=3, j=64, Microsoft gives the answer null.  Null?!  Null is not even a legitimate return value.  Don't bother with this one, it can't be done.

UPDATE: Kudos to MW, who (SPOILER) has given a full 3-star answer in the comments, below.

08.02 Hashes

This one is easy to do with nested loops or new string('#', x), but can you do it with LINQ?
Here's the kind of code you should be writing by now...:

return string.Join("", Enumerable.Range(1,n).Select(a=>new string('#', a) + " "))


08.03 Alpha underscores

Easy to see what they are wanting here, and easy to lazily implement in for loops.
Microsoft didn't give full marks to the following, so I don't feel bad about sharing the following:


return string.Join("", Enumerable.Range(0,n+1).Select(a=>string.Join("",Enumerable.Range(0,n+1).Select(x=>x>a?"_":x.ToString())) + " "));

08.04 Dash on N

More LINQ awesomeness:

return string.Join(" ",Enumerable.Range(1,n).Select(a=>string.Join("", Enumerable.Range(1,n).Select(y=>y!=a?b:"-"))));

08.05 Underscore at N

Blah blah LINQ blah:

return string.Join(" ",Enumerable.Range(0,a.Length).Select(b=>string.Join("", Enumerable.Range(0,a.Length).Select(y=>y!=b?a.Substring(y,1):"_"))));

08.06 Have LINQ hammer.  Everything is a nail.

return string.Join(" ",Enumerable.Range(1,size).Select(b=>string.Join("", Enumerable.Range(1,size).Select(y=>b!=1&&b!=size&&y!=1&&y!=size?"_":"$"))));

08.07 LINQ -> Noughts and Crosses

return string.Join(" ",Enumerable.Range(0,height).Select(heightPos=>string.Join("", Enumerable.Range(0,width).Select(widthPos=>(widthPos+heightPos)%2==0?"x":"o"))));

08.08 OK, I admit, not pretty, but I'm committed to it now...

I will tidy this one up later with Math.Abs()...

return
string.Join(" ",Enumerable.Range(1,number).Select(index=>string.Join("", Enumerable.Range(0,index).Select(a=>index.ToString()))))
+ " " +
string.Join(" ",Enumerable.Range(1,number-1).Select(index=>string.Join("", Enumerable.Range(0,number - index).Select(a=>(number-index).ToString()))));

09 1D Arrays

09.01 list at i

09.02 First and last

09.03 LINQ Contains()

09.04 Enumerable.Range

09.05 Enumerable.Range again

09.06 And again...

09.06 And again...

09.07 ToCharArray then LINQ then back to String

09.08 Enumerable.Range again

09.09 Select a=> -a

09.10 Array.Reverse()

09.11 To CharArray, Reverse and Join

09.12 Buggy test?

My answer here is
return Enumerable.Range(numbers.Length-amount, numbers.Length).Select(a=>numbers[a%numbers.Length]).ToArray();
This results in...
I have NO idea.

UPDATE: Kudos to MW, who (SPOILER) has given a full 3-star answer in the comments, below.

09.13 Coming soon...

09.14 Enumerable.Range with Math.Max and Select

10 Jagged Arrays

All the following can be used to get 3 stars

10.01 List at i,j

10.02 Three star answer...

You need to use Enumerable.Repeat<T>.

10.03 Same as previous

10.04 Nested projections

10.05 Same as before, but use Sum() with a ternary

10.06 Same as before, but use Max()

10.07 Coming soon...

10.08 Larger of the sum of the last or sum of the first

11 Arrays 2

11.01 Zip, Concat and Skip

11.02 SelectMany() flattens

11.03 This one makes me cross..

Can someone explain to me why this does not work?!
return
Enumerable.Range(0, input.Length).Sum(arrayIndex=>(long)input[arrayIndex][arrayIndex])
==
Enumerable.Range(0, input.Length).Sum(arrayIndex=>(long)input[arrayIndex][input.Length-1-arrayIndex])
;

11.04 The modern way is Linq

11.05 string + condition?string:string.Empty

11.06 Linq t?"E":r?"N":a?"R":"Y"

11.07 Linq to Pivot using Enumerable.Range and [y][x]

12 Search Sort

12.01 .Count ==

12.02 Same again

12.03 Cleverness gives 1*

Use FirstOrDefault()
list.Select((item, index) => new { Item = item, Index = index })

12.04 Same but LastOrDefault() instead

12.05 Same but ToArray()

12.06 Simple Select()

12.07 Pairs sum

12.08 Coming soon...

12.09 Ever increasing

12.10 Distinct Count

12.11 Array.Sort()

12.12 Yes, it works for strings too!

13 Cyphers

13.01 int cast +7 %26 -97

13.02 Different mod, different base

13.03 Different offset per character

13.04 nn mm nineteen nineteen 

14 Puzzles

14.01 Sum

14.02 6003

14.03 Coming soon...

14.04 Coming soon...


Tuesday 29 April 2014

Zettics acquires Velocent

ZETTICS ACQUIRES VELOCENT TO PROVIDE THE MOST COMPREHENSIVE REAL-TIME 360 DEGREE VIEW OF A SUBSCRIBER’S EXPERIENCE AVAILABLE TODAY

Operators can now leverage a single analytics suite to deliver significant business improvement in network, customer care, marketing, and 3rd party monetization 
Concord, MA – 29 April 2014 – Zettics, the market leader in Actionable Subscriber Analytics for mobile operators, today announced it has acquired Velocent Systems. The combined entity will provide a subscriber-centric, real-time analytics suite that integrates data usage, network performance, and customer experience metrics into a single, unified view for the operator. Having these data sets in one solution will allow operators to realize unique business benefits that were previously unavailable in the market.
Commenting on the acquisition, Sterling Wilson, President and CEO of Zettics said, “Velocent is the market leader in network analysis and Customer Experience Assurance (CEA) for mobile data. Combining Velocent’s capabilities with Zettics’ deep expertise in analyzing data usage for marketing, care and monetization results in a world-class solution for operators.  Both companies have complementary technology, customers, and employees that together will deliver unprecedented business improvement to operators worldwide.”
Zettics technology will now derive an unparalleled amount of unique intelligence from a combination of a subscriber’s data usage and corresponding network performance. This includes behavioral metrics (engagement, interests, and segmentation) combined with experiential metrics (latency, throughput, and tonnage) across a variety of apps and services such as browsing, video, audio, and VoLTE. Zettics enables this business critical information to be accessed through an interactive UI, a low-latency API, or integrated via real-time alarms or extracts into operator systems. Multiple tier-1 operators across the world use Zettics and Velocent to improve their business today.
Operators will finally have the tools they need to simultaneously understand their network performance, along with their subscribers’ experience, behavioral trends and consumption patterns. By effectively and efficiently monitoring both the data and evolving VoLTE networks, operators will be able to deliver a truly enhanced customer experience,” said Ian Herbert-Jones, Velocent’s CEO.
The transaction closed on April 25th, 2014. Zettics is headquartered in Concord, Massachusetts with offices, partners, and major operator customers across the United States, Europe and Asia Pacific. Sterling Wilson and Asa Kalavade will continue in their roles as President/CEO and CTO/SVP of Products, respectively. Ian Herbert-Jones, Velocent’s CEO, will assume the position of Zettics’ SVP of Business Development and Channel Management, and Velocent’s CTO, Stephen Douglas, will assume the position of VP Technology.
About Zettics
Zettics, the leader in Actionable Subscriber Analytics, delivers immediate insights that drive significant business improvement and subscriber value. These real-time insights deliver a 360° subscriber view of data usage, network performance and customer experience, enabling operators to extract greater value from their networks, products, and services, while fully complying with subscriber privacy policies. Operators that choose Zettics generate new revenues, improve customer satisfaction, and reduce costs.
Zettics’ patented technology powers a unified suite of subscriber-centric analytics solutions for network, marketing, care and data monetization business units. Operators are already using Zettics to reduce churn, improve customer care, monetize data with third parties, reduce and prioritize infrastructure investments, segment their users for advanced marketing, enrich their CRM systems, analyze pricing plans, enhance advertising offers, and more.
Zettics technology is deployed with leading operators in the world, processing trillions of records monthly. Zettics has offices worldwide and its investors include North Bridge Venture Partners, Voyager Capital, Steamboat Ventures, Emergence Capital, Excelestar Ventures, DRW Trading Group, and Jump Capital.

Monday 28 April 2014

Hadoop Learnings

Hadoop Tutorial: Intro to HDFS

Sameer Farooqui gives a very clear overview of the Hadoop Distributed File System. 33:35 - 5*

Microsoft .NET SDK for Hadoop

Yay!  Microsoft really believes in Hadoop...  4*

Low latency OLAP with HBase

Presentation on implementing OLAP-like functionality in HBase.  Not entirely convinced... 2*


Saturday 12 April 2014

Setting up a new MVC4 app on a fresh machine

For Windows Server 2008 R2, first set up Web Deploy:
  1. Install IIS
  2. Download and install the Web Platform Installer (WPI)
  3. WPI: Install MVC4
  4. WPI: Install Management Service
  5. In the Services app, set the Web Management Service to start automatically but don't start it yet
  6. (Re)start the IIS Manager
  7. Select the server node and in the bottom part of the main pane will be an icon "Management Service".  Double-click that
  8. Enable remote connections (setting up security as appropriate)
  9. Install Web Deploy 3.5 using the download, not the WebPI (if you did this earlier, you may have to change it in "Add/Remove Programs" to ensure that all features are enabled and restart IIS
  10. Create new website with an appropriate App Pool (.NET 4)
  11. In Visual Studio on the remote machine, publish the app using Web Deploy and validate the connection
  12. Accept the security certificate
  13. Re-register ASP.NET with c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
  14. Create a new MVC4 app in Visual Studio with Razor
  15. Publish!
Lovely - you should now be able to run you app.  However... You will want these NuGet packages, which you can install from the Package Manager Console: