I'm wearing a bacon bra. [PIC]
submitted by Hayley3AM to reddit.com[link] [40 comments]
| submitted by hueypriest to blog [link] [154 comments] |
| | submitted by dizzle67 to pics [link] [24 comments] |
| | submitted by SolInvictus to gaming [link] [274 comments] |
| | submitted by greenRiverThriller to pics [link] [121 comments] |
| | submitted by sevvie to pics [link] [58 comments] |
By Anthony Watts
From the Facebook page of the Climategate.com operator: Climategate is closing down I am very sorry to bring you the news today that climategate.com is shutting down. It started out as a minor little “hour a day” hobby last December after I purchased the domain name, and it turned into a monster of a site, causing me to [...]
By Anthony Watts
Multiple indicators show less concern, more feelings that global warming is exaggerated by Frank Newport, Gallup News PRINCETON, NJ — Gallup’s annual update on Americans’ attitudes toward the environment shows a public that over the last two years has become less worried about the threat of global warming, less convinced that its effects are already happening, and [...]
By Anthony Watts
Via Eurekalert – New study debunks myths about Amazon rain forests – They may be more tolerant of droughts than previously thought (Boston) — A new NASA-funded study has concluded that Amazon rain forests were remarkably unaffected in the face of once-in-a-century drought in 2005, neither dying nor thriving, contrary to a previously published report and [...]
By John A
A shout-out for a review of Andrew Montford’s “The Hockey Stick Illusion” by Matt Ridley in Prospect Magazine. Andrew Montford’s The Hockey Stick Illusion is one of the best science books in years. It exposes in delicious detail, datum by datum, how a great scientific mistake of immense political weight was perpetrated, defended and camouflaged by [...]
By Anthony Watts
By Steven Goddard and Anthony Watts Fort Collins, Colorado is most famous for Balloon Boy, and Boulder, Colorado is most famous for Jon Benet and Ward Churchill. Both are hotbeds of Climate Science, with familiar names like Roger Pielke (Jr. and Sr.) Walt Meier, William Gray, Kevin Trenberth and Mark Sereeze. Both are of similar size (Boulder [...]
By Anthony Watts
By Harold Ambler A new editorial in Nature is startling for what it reveals, especially the fact Paul Ehrlich is a go-to figure about how hard scientists have it when it comes to media access. Ehrlich is an individual who became an international celebrity by spinning one frightening story after another (about the death [...]
By Anthony Watts
Anybody who has watched the march of jobs overseas already knows this, but it is nice to see science has finally caught up with what we already knew years ago. Look for more of this if a Cap and Trade bill passes in the U.S.. Senator Kerry says it has a “short fuse”. I don’t [...]
By Anthony Watts
There’s a new article at Nature News where they report on an amazing new paleoclimatology breakthrough with temperature reconstructions using clamshells. The Nature article reports on a new paper in PNAS from William Patterson at the University of Saskachewan. Here’s a short excerpt: The study used 26 shells obtained from sediment cores taken from an [...]
By Anthony Watts
by Roy W. Spencer, Ph. D. This is an update to my previous posts [here and here on WUWT] describing a new technique for estimating the average amount of urban heat island (UHI) warming accompanying an increase in population density. The analysis is based upon 4x per day temperature observations [...]
By Anthony Watts
A formal announcement was made in a press conference made at 12:30PM EST by the IPCC, which is getting press, for example here. But at the time of this writing, there’s no mention of it whatsoever on the main IPCC web page here: UPDATE: They’ve finally added a mention of the press release, click link to [...]
By Anthony Watts
IPCC changed viewpoint on the MWP in 2001 – did this have effect on scientific results? Guest post by Frank Lansner Latest News (hidethedecline) A brief check indicates a “warm MWP-consensus” before IPCC published the Mann hockey stick graph in 2001. But after 2001, results on MWP seems to approach the IPCC [...]
By Willis Eschenbach
Guest Post by Willis Eschenbach According to an article in the Hindustan Times by someone for whom English is a second language, I find: Senior scientists at the Wadia Institute of Himalayan Geology (WITG) has rejected the Global Warming Theory and told that the Himalayas are quite safer zone on earth, where Global Warming has no role [...]
By Anthony Watts
People send me stuff. This one reminds me of a famous wrong way: Hi Anthony Today we had some rumour in the Dutch media due to a paper by a couple of econometricians which projected dramatic warming. Ross McKitrick discovered they had used a wrong dataset; We blogged about here: http://climategate.nl/2010/03/09/four-degrees-warming-in-2050-oops-you-used-the-wrong-dataset/ It would be nice if [...]
By charles the moderator
From the You Just Can’t Make This Stuff Up Department. [update, yeah the headline is inaccurate, it is simply reflecting the original story headline from BIGGOVERNMENT.com ~ ctm] Former Apartheid Spy Appointed to Head UN Climate Change Effort by Joel [...]
By Anthony Watts
Given all of the discussions recently on issues with the surface network, I thought it would be a good idea to present this excellent paper by Lin and Hubbard and what they discovered about the accuracy, calibration and maintenance of the different sensors used in the climatic networks of the USA. Pay particular attention to [...]
By Alex Papadimoulis
"Working in IT, I see lots of error messages," writes Eric, "this one, however, was unique. Apparently the computer didn't nobulate quite right..."
Jamie S got this while installing the Hudson.
"Not sure if they sacked IT Support to cover MP's expenses," Mike Davies writes, "so... is that warn or chilly?"
"I found this scrolling across a register at a Starbucks," Craig writes.
"It looks like the rangers in Volcanoes National Park left their trivia on the old road somewhere," Rob wrote.
"Too many choices?" Craig wonders, "then again, can you really ever have too many choices?"
"I found this monitor on Amazon," writes David Elder, "not quite sure how good of a touch-screen it is, though."
"I was filling form AR-11 on the US Citizen and Immigration Services website, and then went to submit it," Adarsha writes, "it came back with this request, which was somewhat hard to answer. I hit submit anyway, but then got an error saying 'Null is required'."
"I was adding XML comments to my .NET 3.5 project when Visual Studio 2008 gave me this error," Matt "Frito" Alline wrote, "I tried to fix the error by getting everyone to switch over to C#, but that didn't fly with management."
"Quite the Zen error message here," George S writes, "but hey, at least there was an emoticon on the error message!"
By Lorne Kates
"Half the world's IT people hate our company's guts," Aaron told the HR lady. "For once, can we hire someone from the other half?"
"The last round of consultants didn't hate us," she replied.
"Unbridled hatred is the only reason to inflict Crystal Reports on someone."
"There may have been a few bugs, but your team ironed them out."
"If by 'ironed out', you must mean 'hacked in a usable suite of reports', then yes. But maintenance is taking up too much project time. We need a full-timer to take on some of the workload."
"I'll have the usual placement firm send you a contractor," she said.
"Could I have someone competent instead?"
"I can't approve a new full-time position," she stated. "We just made the Fortune 100 this quarter. We have to take steps to maintain our position."
"By not writing checks?"
"By being prudent. Why should we pay a salary when a contract will suffice?"
Aaron frowned deeply. "Because in both cases, we'll get exactly what we pay for."
Aaron asked for a specialist. HR requested a 'guru'. The placement firm sent Stan, a smiling cotton-swab wrapped in plaid.
They spent some time going over the details of the system. Stan nodded happily, and jotted down three lines of notes.
Aaron checked in on Stan on hour six of his two hour introduction project-- politely ignoring the stack of printouts from the 'Intro to SQL' website on the guru's desk.
"I'm having problems setting up the connection in Crystal Reports," Stan said with a smile.
"The QA reports already have the connection settings," Aaron explained-- again. "Just copy one and use it as a template."
"Alrighty," Stan grinned, and resumed pecking at the keyboard.
As Aaron headed out at the end of the day, Stan flagged him down.
"It's working," Stan beamed, swiveling around the monitor to show off his accomplishment.
The layouts looked right, and selecting various date ranges seemed to pull up the right data. Aaron nodded. It wasn't bad, except…
"StatusID is an INT," he mused, pointing out the column. "I'd like to see the actual status text rather than the enumeration number. You can join to the transaction_status table for that."
"Ok," Stan chirped. "I'll stay late and finish that for you."
"Sounds good," Aaron said, appreciating the work ethic.
"It works, see?" Stan grinned, intercepting Aaron on his way to his desk the next morning.
Sure enough, the report displayed the correct text in the Status field. Aaron conceded that Stan might work out after all.
His optimism was quickly annihilated by the deluge of alerts and errors clogging his inbox.
All of QA's automated data-collection and synchronization processes had failed overnight. They were all throwing variations of the same error; invalid type.
Improperly-typed data occasionally snuck into the data processing queue, but not as catastrophically as this. Plus, if there was a data error-- how had Stan's report worked?
Either every batch process had a fluke error, or…
"Does Crystal Reports do type checking?" Aaron asked his co-worker, using Occam's Razor to pick her brain.
"No."
Crap.
He filtered for Stan's queries in yesterday's logs. At 5:36pm, just before the errors started, he saw:
ALTER TABLE transactions ALTER COLUMN StatusID nvarchar(2000); UPDATE transactions SET StatusID = 'Disabled' WHERE status = '1'; UPDATE transactions SET StatusID = 'Enabled' WHERE status = '2'; UPDATE transactions SET StatusID = 'On Hold' WHERE status = '3';
And so forth, for each of the 50 status values.
While the database recovery scripts ran, Aaron typed up an incident report, and walked it over to HR.
"I'm sorry I let you down," Stan frowned, morosely packing his desk.
"Actually," Aaron replied with a grin, "You were a huge help."
Indeed, the sizable early-termination fee Stan's firm demanded had made HR reevaluate the fiscal benefits of gurus.
That, and now Aaron had an excellent technical competency question for those applying to the newly approved full-time position.
By Alex Papadimoulis
"This code was left by the Senior Software Consultant," Michael Wheeler writes, "I'm not sure if it's insurance against 'Return' not returning... or a comment that explained why the line of code was left in."
Public Shared Function GetItemFromValue(ByVal ddlControl As DropDownList) As Integer
Dim i As Integer
If ddlControl.Items.Count > 0 Then
For i = 0 To ddlControl.Items.Count - 1
If ddlControl.Items(i).Selected() Then
Return i
Exit For 'leaving this here cause we're in a rush
End If
Next
End If
End Function
"We're aparantly pretty serious about 'properly' handling exceptions," writes Rami, "very, very serious."
public bool Receive( string FilePath )
{
try
{
return true;
}
catch( Exception e )
{
ExceptionManager.Publish( e, Priorities.High );
return false;
}
}
"A nice example of ahead planning," Robert writes, "just in case the Earth's mass dramatically changes overnight, we are prepared for a fast, system-wide adjustment."
Public Function Newton()
Newton = 9.81
End Function
"Some developers use JavaScript for validation, others use server-side code," Rio writes, "we, on the other hand, seem to use comments. It doesn't really validate anything, but hey, it's good."
If fromDate < toDate Then 'it's good. Else 'it's not good. End If
"I was going through some obscure code from the developers before me, and something caught my eye," Philippe wrote. "It was a class whose task was to transform data, and this is how it was instantiated."
Transformer optimusPrime = new Transformer();
"Gee thanks," Tobias N. Sasse writes, "that's helpful!"
public long getLength() {
return 1000000; // no clue
}
"I tried to put some italic tags around a bit of text today," writes Derek, "but somehow, it emboldened my text. I did some digging, and I found that our front-end developer has this in our CSS stylesheet."
i { color: #000; font-weight: bold; font-style: normal; }
"I guess the comment header is right," Brian M writes, "no po box for you!"
//*******************
//**
//** Function - POBox
//** Purpose - no po box
//**
//*******************
function POBox(eobj, eid)
{
return (true);
}
"So that's how you DeUnicode stuff" David Nguyen wrote, "and here I thought it involved a bit more than removing an italics tag."
function DeUnicode($_input){
//added to strip out italics tag <i> from name
$_input = str_replace('<i>', '', $_input);
$_input = str_replace('</i>', '', $_input);
return $_input;
}
By Alex Papadimoulis
“It’s impossible,” Gerald said in a matter-of-fact tone, “simply impossible.”
“Now just so we’re clear,” Craig responded, “by ‘impossible’, you actually mean ‘a big pain in the ass’, but you’re a smart guy who can make it happen, right?” That drew a few chuckles from the handful of other coworkers who joined them in the conference room, but Gerald just sighed. “No, Craig, by impossible, I mean impossible. Not doable. Can’t be done. Im-poss-i-ble. Well I mean, unless you can somehow change the underlying structure of the way everyone communicates on the Internet.”
“But we don’t need to change it for everyone,” Craig jumped in, “just one client. Surely, you can do that!”
The situation at hand was not an uncommon one. Craig, one of the company’s top producing sales reps, had once again sold a client on a feature they did not have. He certainly didn’t lie about having the feature, but instead proposed an offer the client couldn’t refuse: if you buy it, we’ll build it.
Management, not being the type to turn down booked sales, couldn’t refuse the offer either. And thus, they sided with Craig on what ‘impossible’ actually meant. They also assigned Gerald and team to develop the much-needed feature: an IP-based authentication system that would allow users of their Software-as-a-Service product to access the system without ever needing to log in.
Gerald’s main objection with IP authentication was that the majority of users – and in fact, all of the users at the client site – were behind a router. Though they’d certainly each have an internal IP address assigned, they would all share the same public IP, making one computer indistinguishable from the next.
To make matters even more tricky, their application was used by hospitals to track certain kinds of patient data, which meant that HIPAA – the regulatory framework that defines how patient data must be stored and accessed – needed to be followed. And not just followed, but followed, tested, certified, re-certified, and double-tested. Any change to the HIPAA-related functions – authorization included – would need to go through a painful internal and external QA process.
Given the impossibility of getting the end-users internal IP address from the outside, Gerald figured that using cookies would be the next best thing. Have the user log-in once, and then store an authentication cookie on the computer for as long as possible. Sure, that meant clearing cookies would trigger a new login, but it seemed to be a fair and easy work-around. Well, not so much: the client vehemently rejected the idea, saying that their employees couldn’t be bothered with having to remember yet another login, even if only temporarily.
After going back to the drawing board, Gerald came up with another idea: configure the firewall proxy server on the client’s side to add a custom HTTP header (X-Forwarded-For) that included the original IP address. That idea went over just about as well: HTTP headers could be forged, and a malicious employee inside of the company could hack in too easily.
Gerald’s third proposal to the client involved a site-to-site VPN connection. The application server would be exposed access via the client’s internal network, which would not only allow them to use IP authentication, but Windows-integrated authentication as well. It was his best idea yet, and made things that much easier, as the client would be able to configure which username has access instead of which IP address. Unfortunately, the IT folks at the client weren’t a big fan of the approach, as “a VPN connection is inherently insecure.”
At wits end, Gerald came up with yet another idea: a “Single Sign On” approach of sorts. When the end-user would access their application, the system would look for an “authentication ticket” cookie. When not present, the user would be redirected to another server – which lived inside the network – whose sole purpose was to generate a secure authentication ticket that included the private IP address. The ticketing server would then redirect to hosted application, which would then verify the authenticity of the ticket and give the user access.
The client absolutely loved the idea. “This is exactly what we’re looking for,” the client’s project manager said, “no need to remember logins, plus solid security.” The sales contract was signed, and the project was officially a go.
And finally, three months later, the new feature was finished. It took three solid weeks of development time, two weeks of QA testing, several thousand dollars in new hardware, and tens of thousands of dollars for an external HIPAA assessment, but the sales rep and the client’s project manager said it’d be worth it: no more remembering logins. Now, all that was needed for implementation was a list of IP addresses that were allowed to use the computer.
“Hi Gerald,” the client’s project manager wrote in an email, “please provide the following IP with access to the system: 10.1.23.97.”
Gerald confirmed, and reconfirmed: only one user needed access to the system. And apparently, she really hated remembering logins.
By Alex Papadimoulis
“I was hired as a ‘best practices consultant’ to help bring a 300-developer company’s development practices into the 21st century,” wrote Ian, “and after six months, I had failed.”
“Our first objective was to introduce automated unit testing. They had all sorts of horribly interconnected code, and the tests would help reduce the fix-here/break-there problems. However, after many, many tutorial sessions with developers, and quite a few long meetings spent trying to convince them of the benefits, no tests emerged. The developers stubbornly held that testers should test code, not them.”
Ian continued, “Adding some teeth to our policies, we set-up a continuous integration server that emailed everyone reports of unit test code coverage. This way, managers could take responsibility for getting their teams to write unit tests. That seemed to do the trick: the number of unit tests and code coverage started to steadily climb on all projects.”
“I finally felt that all my efforts were worthwhile,” he added, “the overall health of the team’s code would now increase immeasurably. Less bugs, less time manual testing, and all that good stuff. And then I started to look at the unit test code.”
public class StaticDataRequestTest {
@Test
public void startClientReqest() {
try {
new StaticDataRequest().onData(null);
assertEquals(
" processing client static data request ",
true,
true);
} catch (Exception ex) {
assertEquals(
" processing client static data request ",
true,
true);
}
}
}
Ian added, “I guess we got what we asked for.”
By Alex Papadimoulis
"I've heard about verified by Visa, but this is something new," writes Velmu.
"Well then," Simon Timms wrote, "it might take some time to fill in all those arguments."
"I guess a 25% price increase is a good reason to be wowed," Steve Frein writes.
"I was recording some drums with my keyboard, and all of a sudden this came up," Jonathan Flusser wrote, "apparently it has to do with the Trash, and it's very hard to do!"
"I cancelled my free trial," notes Frederick Ding, "but I'd love to be paid $10/month for using 0 MB."
"I saw this at a pay station in a parking in Barcelona, Spain," Riccardo Zanussi writes, "I don't know if I really want to put my credit card in this machine."
"I found this in a book about iPhone programming," writes Mike Kerley, "the rest of the book seems to have received an equal amount of attention to detail."
"At first I thought this was just another way to ask me to enter 1," Nick S. W. noted, "but then it popped up when I entered 1. Is there another integer I'm forgetting about?"
Ryan Schlesinger writes, "I went looking for information about the iPhone release for Telus and found this instead."
"This left me in a bit of a quandary," wrote Dominic, "to install, or not to install?"
By Alex Papadimoulis
It's time once again for Share Your Bizarre Email day! mail in or post your favorite emails in the comments. Here's three to get started...
"My company takes safety very seriously," Adam wrote, "and here is a partially illustrative message. What's especially funny about it is that we receive examples and protips like this on a routine basis."
Colleagues, While on travel last week a member of our staff got up at 3AM to go to the bathroom. He tripped over a chair and fell into a coffee table, hitting his head. He suffered a significant head injury and blood loss. He was taken by ambulance to a local hospital emergency room. He had surgery at the hospital at his travel site last Thursday. He came home Friday. Sutures were removed Monday and he is due back to work tomorrow. He is doing well and in fine spirits. He and we have done a root cause analysis and make the following recommendation to travelers: before retiring for the night review the path to the bathroom in new hotel rooms and move any tripping hazards, if possible. Further, consider leaving a light on in the bathroom with the door slightly open or packing a portable night light in travel gear to use in your hotel room. Evin L------- Safety Directory
"I work for a firm that is all about getting the most from their employees," Dan wrote.
Hi Dan, You are correct. There is a discrepancy between the vacation time (2 weeks / 80 hours) and the newly-instituted 45-hour workweeks. At this time, we are not planning on increasing employee vacation benefits, so in order to meet the 45-hour requirement, you will need to either: (a) use an hour from your sick/personal time for each vacation day (b) work an additional hour for each vacation day Note that, if you chose to work the extra hour, it must done within the same two-week pay period. Also, keep in mind that this policy will apply to company holidays as well. Thank you, Amber J------------ HR Generalist
"This email was sent by one of the company directors," wrote Brett M, "we have a good 300 employees, with 100 or more in IT."
Hi All, Yesterday there was a flood which luckily only damaged some ceiling tiles in the downstairs loos and messed up the wall paint. It could potentially have damaged expensive computer equipment and the systems our business relies on. The flood (of clean water from cistern) happened due to a blocked toilet so please follow these simple instructions to avoid it happening again. 1/ From time to time we all need to use a lot of toilet paper. On these occaisions use a little paper then flush, then use some more and flush. This can be repeated as many times as you need. 2/ Do not flush anything apart from toilet paper (a little at a time) or something which has been eaten first. For those considering asking 'how much is a little paper', lets call it 12 sheets. Any further queries, don't hesitate to ask. Gerald F. --------- Director (VP)
"At just about any office," writes Hansel Johnson, "there are some coworkers that you certainly wouldn't mind seeing nude, and subset of those who you certainly wouldn't mind seeing bouncing while nude."
From: Debbie A---- Sent: Wednesday, April 08, 2009 8:51 AM To: IT_OPS Subject: Bouncing New Dev in 5 Minutes Please be advised- I will be bouncing Nude in 5 minutes. Please let me know if this presents an issue.
"I'm sure many in the office would rush to find a trampoline and some lawnchairs, and you can imagine their disappointment upon receiving the following email not more than a minute later..."
From: Debbie A---- Sent: Wednesday, April 08, 2009 8:52 AM To: IT_OPS Subject: RE: Bouncing New Dev in 5 Minutes My apologies- Spell Check got me on this one- “I will be bouncing NewDev in 5 minutes!”
By Alex Papadimoulis
“Our codebase is a bit... backwards, to say the least,” writes Aaron Silver, “things that should go up don’t go up or down... instead, they’re painted orange .”
“The postProcessAddress address method is a good example of all of this.”
string[] months = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; if (processingClient.StreetAddress != null && string.IsNullOrEmpty(processingClient.StreetAddress.Line1)) { for (String month : months) { if (processingClient.StreetAddress.Line1 != null && processingClient.StreetAddress.Line1.Contains(month)) { writeError(processingClient, errorList, "Street address line 1 is in date format (" + processingClient.StreetAddress.Line1 + ")."); } if (processingClient.StreetAddress.Line2 != null && processingClient.StreetAddress.Line2.Contains(month)) { writeError(processingClient, errorList, "Street address line 2 is in date format (" + processingClient.StreetAddress.Line2 + ")."); } if (processingClient.StreetAddress.Line3 != null && processingClient.StreetAddress.Line3.Contains(month)) { writeError(processingClient, errorList, "Street address line 3 is in date format (" + processingClient.StreetAddress.Line3 + ")."); } } }Aaron adds, Aaron adds, “I’m not exactly sure what thought process lead to this, but the powers that be aren’t too keen about changing it, leaving our end users to adding random hyphens and spaces for those unfortunate enough to live on ‘October Road’.”
By Alex Papadimoulis
Not too long ago, I was at a client site, working to understand and improve their development process. From a birds-eye view, their development organization was a lot like many other Corporate IT set-ups: they had a sizable portfolio of proprietary applications that were built for and used by different business groups. Some of these applications were “mission critical” and had highly formalized promotion and deployment processes, while others were ancillary and were hardly ever used. <shameless_plug>This, along with the medley of technologies and platforms, was why they sought our help in managing and automating their development processes with BuildMaster.</shameless_plug>
But as I dug deeper, I noticed that a significant portion of their applications weren’t applications at all. They were – for lack of a better word – “modules” that glommed together to form an ÜberApplication. Completely unrelated business functions – paid time-off tracking and customer mailing list management – lived side-by-side, sharing authorization principals, navigation controls, and even a “business workflow engine.”
Digging even further, I learned that most of these module-applications were derived from a “one-size-fits-all base application” of sorts. For example, the back-end paid time-off system was nothing more than a calendar with a custom UI for manipulating “events” (i.e. PTO requests). The front-end consisted of simply displaying these events to anxious employees who were gladly counting down the remaining days until a vacation from maintaining this amalgamation of a system. Other module-applications were “document managers”, “news posters”, or some other universal sounding name.
The whole thing may as well have been replaced by a pre-alpha version of Sharepoint or Google Docs. It was as if they had tried to build a skyscraper with Erector Sets. And not real Erector Sets, but some poorly-made knock-off.
The developers absolutely hated the ÜberApplication. It took longer to “customize” a template than to build an application from scratch, it was harder to test and deploy, and they never quite fit the business requirements The architect (who was the second successor since the original architect) despised it as well, and eventually convinced management to ditch it for constructing new applications from scratch.
Sadly, this was not the first time I’ve seen this set-up/architecture. At one of my first jobs, we had something comparable, except much less formalized and much more disorganized. And there are all the examples I’ve shared through The Daily WTF, but this recent experience got me thinking: how exactly do well-intentioned development organizations end up with horrible systems like this?
We human beings are quite remarkable at recognizing patterns. Take clouds, for example. A cloud dog looks nothing like a real dog, yet no matter how hard we try, once we see the dog in the cloud, that’s all we can see.
While this ability has clear evolutionary advantages, it’s often a disservice in today’s modern world. Pattern recognition yields many false positives, leading towards Gamblers’ Fallacy, prejudice, and can even extend to really poorly-written software.
Now, recognizing patterns at the micro level (i.e., code) is almost always a Good Thing. Code often does repeat itself, and consolidating repetitive code into subroutines tends to help throughout development and especially when it comes to maintenance. The real problem – and the one behind the aforementioned systems – is recognizing patterns at the macro/application level.
As completely different as Paid Time-Off tracking and Customer Mailing List management may seem on the outside, they do share quite a bit in common.
In fact, if we kept going, the list of similarities between applications would grow much larger than the list of differences. But that doesn’t mean that they’re basically the same thing. Just as our canine friends share an astonishing amount of DNA with us, it’s our differences that make us so unique. The same holds true in software, and forgetting that fact will inevitably lead towards the dreaded Inner-Platform effect.
This is precisely how so many organizations end up with their own ÜberApplication. Consider, for example, that same portfolio of applications I described earlier. At one point, the applications evolved normally: i.e., they were built from scratch following development guidelines to suit the specific needs of the business client. And they looked something like this.
It’s hard to describe that portfolio as anything but chaotic, let alone accept that it’s actually how things should be. Let me repeat that last bit. A disparate application portfolio is a good thing. Proprietary software has a high strategic value to the organization, and building it in a manner that doesn’t meet the requirements largely defeats the purpose.
Still, it’s so easy — and so tempting – to forget that last part. Each new application built felt like reinventing the wheel, especially when they all had some variation of the same components: authentication, authorization, navigation, databases, etc. The rules for each of these applications were vastly different — a simple password required for one application, Active Directory group-based authorization for another — yet the designers had that overwhelming urge to abstract and “simplify” the process of creating new applications. This started at the requirements level by simply mandating that all applications share a universal set of requirements for certain things.
The uniformity was found in the UI: the layout must feature a header, a sidebar, and a footer, but the business customer can pick out the background color. It also was in the form layout: labels should be placed above form fields, and lists should always be sortable. And the database: there was to be a users table, groups table, roles table, etc.
Eventually, the applications started to blend together. Worse, the requirements conversation shifted from “how can we build software to meet these needs” to “how might we adapt the needs to meet our pre-determined requirements.”
Once the universal requirements had been defined, the next logical step was to abstract them into some sort of framework. After all, Duplication Is Evil, and it doesn’t make sense to re-implement the same User-Group-Principal-Role-Task-Operation security in each and every single application. Now, in addition to being uniformly developed, the applications were all dependent upon yet another in-house built codebase: the Global Application Framework. Granted, the GAF was little more than a wrapper on top of a framework (.NET), but somehow, it was perceived to be better.
The leap from here to the ÜberApplication wasn’t far. After all, application metadata was duplicated across several points: source control, server configuration, global navigation, and so on. Removing these points of duplication, along with consolidating all of the applications in one location, brought us to where we started.
The Road to WTF is almost always paved with good intentions, and there are few intentions more noble than making developers’ lives easier. Of course, given that developers’ lives are pretty easy as is, and there are a whole bunch of companies who build developer products, it’s pretty hard to improve, especially when your development department is just a cog in a large corporate machine. In fact, all too often, the opposite effect happens, and the “innovation” becomes one of the biggest obstacles.
Most of us developers embrace the Don’t Repeat Yourself/Duplication Is Evil principle, and we apply whenever we can to the software we create. But one of the deadliest pitfalls we can make is waving the wand of abstraction too quickly and too broadly, and we often forget that the consequence of unnecessary duplication is far less than the consequence of unnecessary consolidation.
By Alex Papadimoulis
“When a ‘customer’ of ours needs custom-developed software to suit their business requirements,” Kelly Adams writes, “they can either ‘buy’ the development services from the IT department, or go to an outside vendor. In the latter case, then we’re supposed to approve that the software meets corporate security guidelines.”
“Most of the time, our ‘approval’ is treated as a recommendation, and we end up having to install the application anyway. But recently, they actually listened to us and told the vendor to fix the ‘blatant SQL-injection vulnerabilities’ that we discovered. A few weeks later, when it came time for our second review, we noticed the following as their ‘fix’.”
internal static string FQ(string WhichField)
{
string expression = "";
int num2 = Strings.Len(WhichField);
for (int i = 1; i <= num2; i++)
{
string str = Strings.Mid(WhichField, i, 1);
if (str == "'")
{
str = str + "'";
}
expression = expression + str;
}
return Strings.Trim(
Strings.Replace(Strings.Replace(Strings.Replace(Strings.Replace(
Strings.Replace(Strings.Replace(Strings.Replace(Strings.Replace(
Strings.Replace(Strings.Replace(Strings.Replace(Strings.Replace(
Strings.Replace(Strings.Replace(Strings.Replace(Strings.Replace(
Strings.Replace(Strings.Replace(Strings.Replace(Strings.Replace(
Strings.Replace(Strings.Replace(Strings.Replace(Strings.Replace(
expression,
"xp_", "", 1, -1, CompareMethod.Text),
"sp_", "", 1, -1, CompareMethod.Text),
"--", "-", 1, -1, CompareMethod.Binary),
"alter table", "", 1, -1, CompareMethod.Text),
"drop table", "", 1, -1, CompareMethod.Text),
"create table", "", 1, -1, CompareMethod.Text),
"create database", "", 1, -1, CompareMethod.Text),
"alter table", "", 1, -1, CompareMethod.Text),
"alter column", "", 1, -1, CompareMethod.Text),
"drop column", "", 1, -1, CompareMethod.Text),
"drop database", "", 1, -1, CompareMethod.Text),
"1=1", "", 1, -1, CompareMethod.Text),
"union select", "", 1, -1, CompareMethod.Text),
"/*", "", 1, -1, CompareMethod.Text),
"*/", "", 1, -1, CompareMethod.Text),
"boot.ini", "", 1, -1, CompareMethod.Text),
"../", "", 1, -1, CompareMethod.Text),
"%27", "", 1, -1, CompareMethod.Text),
";dir", "", 1, -1, CompareMethod.Text),
"|dir", "", 1, -1, CompareMethod.Text),
"<script", "", 1, -1, CompareMethod.Text),
"</script>", "", 1, -1, CompareMethod.Text),
"language=javascript", "", 1, -1, CompareMethod.Text),
"language=\"javascript\"", "", 1, -1, CompareMethod.Text));
}
Kelly adds, “of course this time, when we told them the application was still vulnerable so long that a hacker typed ‘1 = 1’ instead of ‘1=1’, they told us were beeing too picky, and had us install the application anyway.”
By Alex Papadimoulis
Ever since the first Free Sticker Week ended back in February '07, I've been sending out WTF Stickers to anyone that mailed me a SASE or a small souvenir. More recently, I've been sending out the coveted TDWTF Mugs for truly awesome souvenirs. Nothing specific; per the instructions page, "anything will do." Well, here goes anything, yet again! (previous: Surprise!).
Ever since you sent me that vomit-inducing, garbage-infused, ash-like, disgustingly-terrible, and nightmarishly-awful delightful salmiakki two years ago, I've mocked you, your people, and your food every chance I got. You were an easy target, after all. I mean, there's just something seriously sick, twisted, and demented awesome about voluntarily subjecting yourself to that "candy" that smells like foamy bathroom cleaner and tastes even worse delicacy.
I can't say that I wasn't warned. "Do not anger the Finns," a Finlandite once told me, "for they have strange ways and a twisted sense of humor!" Well, it's true. Especially when the Finns are named Pekka and Toni.
"We remembered how 'disappointed' you were when there was no Salmiak products in a care package from Finland," they wrote, "and we decided that we had to undo this injustice that had been inflicted upon you. Thus, we embarked on a quest to gather all Salmiak products available in Finland. After two months spent on this quest, we found about 80 different kinds of this delicacy for you to enjoy." Now in case you're wondering what my reaction upon receiving so much Salmiak was, it was something like this.
Pekka and Toni continued, "although this is still far from the full assortment available in Finland, we believe this might 'satisfy' you for the time being. Bon appétit!"
Normally, I'd estimate that this amount of Salmiak would last me for a lifetime. Several lifetimes, in fact. Well, stellar lifetimes. You know, a good 15-30 billion years or so? But I'm going to try something a little different.
I registered Salmiyuck.com, and will chronicle my adventures in tasting Salmiak. I will of course attempt to get as many (unwitting) tasters as possible. So, here's to Salmiak!
As if all the Salmiak wasn't enough, Pekka and Toni (Finland) also enclosed "a hands-free appliance which actually needs to be held in hand to operate."
And finally, our friends from Finland also gave this "Billiardion (or whatever) dollar note from Africa."
Matt Lutton (Brookline, NH) sent some interesting finds from the past.
"At the end of 2009," wrote Andreas Reich (Hamburg, Germany), "I returned from a summer of travels, and was about to empty the stuff in my pockets in the trash, but then I remembered there was a guy who will happily take all kinds of souvenirs." This is true, Andreas, especially when the souvenirs are accompanied by a piece of Toblerone. Fun fact: the Holiday Inn key card was completely blank on both sides; no magnetic strip or anything.
"Enjoy your status as a new trillionaire," writes Bryan R (Sterling, VA).
"Here are some random tradeshow stuff," writes J Schwartz (Boca Raton, FL), "there is a citrus lip balm tube, some small mints, a USB hub (that may or may not be 2.0), a press-up calculator, a mini flashlight, and a weird pen/calculator object."
"Here's some stuff from London," wrote Martin Deutsch (London), "including some goodies from the Docklands Light Railway, Custom Haribo from one of our supplies at work, a free lollipop handed out to keep clubbers quiet, and some Ben+JErry's Post-it notes."
I'll let Scott Blackard's (Timerlake, NC) note explain, though I'll add ewwwwwwwwwwwwwwwww. That is, unless it's really old and not from like a deer or something. Then I should say, sweeeeeeeeeeeeeet.
S Lindehan (Netherlands) sent this Bassie en Adriaan DVD and a picture of a local Dutch church.
"I was going to buy an International Reply Coupon," writes Michael Landis (Ramat-Gan, Israel), "but then again, I had these in my pocket."
And finally, a small handful of random stuff.
Don't forget to snail-mail in your own souvenirs for some TDWTF stickers. Ultra-awesome souvenirs (like, say, steak) could even get you a TDWTF mug.
By Alex Papadimoulis
Problematic Problem (from Ben)
Way back when, I was responsible for doing on-site support for a fairly complex ERP solution that our company sold. My support radius was 100 miles, which meant I was on the road a lot and traveled to places I wasn't all that familiar with. My trusty navigation aide was a compass and a Rand McNally map book. Fancy, online mapping services weren't around yet, let alone super-fancy GPS units.
One day, I was assigned to visit a customer on the far end of my region (99.9999999 miles), first thing in the morning. It meant that, not only would I need to battle rush-hour traffic through the city, but then drive another 60 miles once that cleared. I was not a fan of early mornings, and getting that client on that wintry day meant a 5:30A departure with a 2.5 hour commute.
That morning, traffic was even worse than I anticipated. And to make matters worse, I had a terrible time finding the place. Fortunately, a kind fellow at the gas station pointed me in the right direction, and I was able to ring the client from the nearest pay phone to let them know I was running behind.
When I arrived, everything seemed to be downhill from there. I went to the receptionist, tacked on my visitor badge, headed over to the server room, set my briefcase down, and got to work. Before I could even try logging in, someone walked up to me and said, "hey, I know this isn't really your thing, but I'm desperate, and reeeeaaaallly need some help getting this report for our PM meeting."
It certainly wasn't my thing, but given that I was 30 minutes late, a little goodwill towards helping a company executive could only help. So I followed her to her office and helped troubleshoot the problem. An hour-and-a-half later, we had the report running, no problem. She was thrilled, and I headed back to the server room.
For some reason, I couldn't log-in to the server console, but the generous IT guy helped me past that hurdle by logging in with his credentials. But then I had another problem: I couldn't access any of the servers listed on my sheet. In fact, I couldn't even find a server that looked anything like ours.
I called the IT guy over again and asked him where our ERP server was. He shot a confused look to me, and said that he's pretty sure they don't have an ERP server. I assured him that they did, so he went back and looked into things on his end. Thirty minutes later, he assured me that they absolutely, positively, definitely don't have an ERP server.
We were both utterly confused. And then something dawned on me, and I silently prayed it wasn't true. I pulled out my sheet, showed it to the IT guy, and pointed towards the customer address heading. "That's you guys, right?"
As it turned out, not so much. Our actual customer was down the street, in another un-marked office building.
Problem supply (from Brendan)
Working as a coder for a small company that operates worldwide, I was on the team that deployed a project to China. Now I realize that my English is far from perfect, but dealing with Chinese customers in English has been quite the experience. One day, four months after going live with the new system, I received this mail from our Chinese client:
From: Louis Chang
To: Brendan ******
Subject: Problem supply
_____________________________________________________
Hi Brendan,
Sorry disturbing you. There is a problem with supply programme on the
button. Please advice?
Regards,
Lou Chang
Ah, the lingo of the busisness... I can imagine that you'd have the faintest idea what he was talking about... but don't worry, neither did I. So I replied to him, hoping to get a better description of his issue:
From: Louis Chang
To: Brendan ******
Subject: RE: Problem supply
_____________________________________________________
Hi Lou,
Could you please state your problem more clearly?
Thanks,
Brendan
I didn't have to wait long for his clarification, as his problem seemed to be really urgent.
From: Louis Chang
To: Brendan ******
Subject: RE: Problem supply
_____________________________________________________
There is a problem
with supply
programme on
the button.
Please advice?
Yup. Much better. Thanks.
A Text-Destroying Problem (from Esko Tanakka)
Back in 1999, I was just beginning my career and worked at a small store that built and configured computers for the public. Occasionally, I'd have to answer customer calls and help people with general computing problems.
One day, a man called in and immediately started complaining about how we sell utter crap, that we should take responsibility for our problems, and that he was owed money back because of the problems we caused.
I begged him to calm down and explain specifically what was wrong. He told me that our computer is destroying his text, and that something had to be done. At first, I thought his files were disappearing, but after more investigation, I discovered what his actual problem was: typing text in Microsoft Word overwrote previous text.
I told him that he simply had the INSERT key on, but he insisted that he never pressed that key, and that pressing the key did nothing. Running out of phone-support options, I told him he’d need to bring in his computer. But first, I needed his warranty information.
Well, it turned out that he bought the computer seven years earlier, then had another company install Windows 95 and the Corel Office Suite. After hearing that, I told him that I obviously couldn't take the machine in. That just made him more angry, and he accused me of working for "Satan and his minions", and threw all sorts of other ridiculous insults at me. But then all of a sudden, he calmed down. Apparently, he actually tried pressing the INSERT key (as I asked him to do before), and his computer stopped destroying his text.
By Alex Papadimoulis
"The mastermind behind our system is the Senior Developer," wrote Daniel, "he's naturally an expert at all things code, but he especially excelled at back-end systems. After all, true geniuses always value function over form."
"The Senior Developer liked to do things a little differently, but we got over his quirks. Take, for example, this handy dandy function to ease the pains of those complicated cast operations we all hate."
public T Cast<T>(object obj) { return (T)obj; }
"Why?" Daniel added, "so we can write 'someNumber = CastdataObject' instead of 'someNumber = (int)dataObject)'!"
"Of course, the real problems always camein when our super-experienced developer 'optimized' for performance. Because his concept of caching wasn't too strong, we'd often end up with code like this."
public List<OutstandingApproval> GetApprovals(List<Guid> clientList, Guid userId)
{
List<OutstandingApproval> approvals = new List<OutstandingApproval>(GetApprovalsDAO(clientList));
System.Web.HttpRuntime.Cache.Insert(userId + "approvals", approvals);
return approvals;
}
"In addition to inserting but never retrieving from cache, the code uses userId as a cache key... which is nice and all, except that the data is not at all user-specific. But the real inspiration for sending this in is in the webpage optimization. According to the Senior Developer, this tweak reduces the page size, which makes things more optimal all around."
protected override void Render(HtmlTextWriter writer)
{
using (HtmlTextWriter htmlwriter =
new HtmlTextWriter(new StringWriter()))
{
base.Render(htmlwriter);
string html = htmlwriter.InnerWriter.ToString();
html = Regex.Replace(html,
@"(?<=[^])\t{2,}|(?<=[>])\s{2,}(?=[<])|(?<=[>])\s{2,11}(?=[<])|(?=[\n])\s{2,}",
string.Empty);
html = Regex.Replace(html,
@"[ \f\r\t\v]?([\n\xFE\xFF/{}[\];,<>*%&|^!~?:=])[\f\r\t\v]?",
"$1");
html = html.Replace(";\n", ";");
writer.Write(html.Trim());
}
}
Daniel added, "sure, we could have told him that the regex replacements aren't exactly that fast. We could have also mentioned that the caching enabled in IIS rendered this entirely pointless. But be didn't; he knew he was right, and who were we to question the Senior Developer?
By Mark Bowytz
Test plan development. Regression analysis. Systems documentation creation. Test case execution. Regression testing.
If you're anything like me, then those words may as well have been boring, tedious, mind-numbing, tiresome, dreary, and the-worst-thing-in-the-world. Sure, they're all important and necessary, but you found out that, due to budgetary constraints, you couldn't personally do any of those things and could only focus on coding, you probably wouldn't complain. Julien G. certainly didn't mind, especially since the "drudge work" would still get done by the overseas team while everyone state-side was fast asleep.
Naturally, many of the other developers were upset that their work was being sent overseas. Emotions ranged from annoyed to absolute outrage, and some were angered to the point of resignation. Eventually, things cooled down and developers bought management's pitch that "the world-class, high-quality engineers" would be good for "synergizing and strategizing the bottom line."
The offshore developers were split apart into different teams. There was one for infrastructure, one for database and data integrity, and another for working with the application's User Interface. This latter group was the one that Julien worked with.
Their job, in part, was to act as any dull, average customer and regression test the application. If at any point the application crashed or behaved strangely, they were to document the conditions leading up to the crash and send them back to with details of how the problem was recreated.
At first, things were rough. Julien spent many a late night with the offshore team, walking them through their hellishly complex application. But Julien felt it was worthwhile, as it forced him and his group to be more organized and provide more exact specs and concrete test cases. Soon enough, the offshore team was able to jump into the application and provide the right information back to developers, and the developers were sending back recompiled libraries to test with as quickly as possible.
As a result of the growing synergy, productivity was way up, morale was up, and — to the delight of management — the bottom line cost was way down. From all angles, everything looked like puppies and rainbows. That is, until it was time for Offshore Integration Phase 2.
With all the initial pains of getting the offshore team trained on using their software, it was time to put their "world-class" engineering skills to use. In addition to running loads of manual regression tests, the offshore team would be responsible for developing automated unit and regression tests. This, of course, meant that they'd need to be given access to the code and set up a testing environment at their location.
Being as large and complex as it was, their application wasn't the type with "run the installer and follow the wizard" installation instructions. In fact, there were 85 steps necessary to complete the installation, ranging from installing the database to editing configuration files. It wasn't all too difficult, as installing the application on a local workstation was often the first task given to newly-hired developers.
Julien sent these instructions to the offshore team and, the following morning, arrived to find a disappointing email.
Hi Julien, After the program start-up reaches 45%, it quits unexpectedly. Please confirm that latest code is the most recent. Regards, Ravi M. Implementation and QA Lead Hyderabad Group Inc.
After some re-verification, Julien confirmed that he had, in fact, sent the latest code. Just to make sure the install instructions were valid, he spent a good two hours installing the application on a brand-new server. The only thing he could guess was that some third-party component wasn't properly installed, so he sent an email back to Ravi to verify all components.
Hi Julien, All components installed as per instructions. We followed instructions three times, each time with a freshly formatted server. It still quits when the program start-up reaches 45%. Please advise. Regards, Ravi M. Implementation and QA Lead Hyderabad Group Inc.
The email routine continued, each time with the offshore team insisting that every instruction was followed perfectly. After a few weeks, the offshore managers had their weekly conference call with state-side managers and in doing so, accused the developers — specifically Julien — of blocking the offshore team's progress. With things getting heated up, Julien was charged with the task of watching the offshore group perform the install and configuration step-by-step, via a shared desktop across a sluggish network connection... at 3:00AM his time.
It was only about 4:30am when Julien was on his third cup of coffee, asking the offshore team to confirm step number 32 of 85 on the install and setup list. Julien was in the midst of wondering how feasible it might be to set up a recording of him saying "un-huh - confirmed' to go off at set intervals when he noticed something amiss in their copy/pasting of environment variables from the setup document.
"Hey guys," Julien jumped in, "did you do anything different this time with the setup? Like right now?"
"No," the offshore engineer responded, "we executed the steps exactly as prescribed."
"Okay, Julien said, "can you scroll back up a little bit in the configuration file?"
The offshore engineer complied and, located near the top, the following code stuck out:
' Environment variable for test provider ' set PATH_TO_TST_ENV=Path to the test environment (absolute, such as C:\TestEnv)
The line was exactly as it had appeared in the setup document — copied verbatim — beneath a heading that read: "Please recreate the application configure file precisely as listed below"
At this point, Julien could have died from shock if he weren't so tired. Baffled, he asked why they didn't substitute the path with the directory they had created in the previous step. "This is what you instructed us to do," the offshore engineer replied, "we followed exactly what was in the documents to avoid making any mistakes."
It was an unfortunate "ah-hah moment" for Julien; not only did the offshore engineer's response explain the issue at hand, but it explained a whole host of otherwise unexplainable and unreproducible bugs. After that day, Julien learned to be a lot more specific and careful with what he wrote. And while his days are no longer filled with running test cases, he's found he spends an awful lot of time testing and "debugging" the test cases, which, somehow, takes several times longer than executing them.
By Alex Papadimoulis
"When my company, a large financial corporation, decided to outsource overseas," Ned wrote, "they went for the best: CMMI Level 5. Not Level 3 or Level 4, but Level 5. 'Heck,' the CTO told us half-jokingly, 'the offshore team will make us look bad!'"
"It's hard to describe the 'high quality' code that gets checked-in to our repositories. 'Bloat' just isn't quite strong enough, nor is 'incredibly horrible mess that makes me want to smash everything in sight'. There were a lot of issues with the code, but this one is my best short examples: isValidNumber()."
public static boolean isValidNumber(Integer number) {
methodName = "isValidNumber";
Logger logger = LoggingHelper.getLogger(LOGGER);
logger.entering (CLASS, methodName);
// parse this number. If you get an NFE, then its
// not valid, return false
try {
Integer.parseInt(number.toString());
} catch(Exception ex) {
logger.fine(methodName + " returns false");
logger.fine("Number Format Exception when parsing");
return false;
}
logger.fine(methodName + " returns true");
logger.exiting(CLASS, methodName);
return true;
}
Ned added, "no, it wasn't broken. No, it didn't produce incorrect results. No, in spite of the programmer’s best effort and it getting invoked literally thousands of times per second under full load, it wasn't really that big of a CPU hit. But it is just hard to understand how anyone could look at this and consider it a job well done. Or for that matter... necessary for it at all."
"At least it's CMMI Level 5 strong, though!"
By norths@mnjenfrance.eu (Jon & Mary in Lunel)
I left a long gap - sorry folks, too much to do and I kept feeling uninspired about writing. But this morning we walked into Lunel as usual on Sunday. The town is always buzzing - market day, most shops open, cafés full to bursting and friends meeting each other in the street. Mondays are by contrast almost dead.
This morning we met our neighbours there and 6-year-old Rémi was chattering away about his life and his friends - and rushing off to meet them - while his dad Bruno drank a coffee with us en route to their lunchtime engagement. Mum Christine was there in passing, but had already met up with friends in other cafés, so only said a quick hello in passing. And several of their friends stopped to say hi too, so we were well entertained for over half an hour before we set off back through the flower market towards home.
Then as we walked back down the avenue des Abrivados I remembered to take a photo of the completely blocked footpath - the Mayor here is very keen on keeping footpaths for pedestrians, but each Sunday as you can see the path by the carpark is occupied by cars to you have to walk in the road, and it's about time someone did something! And for autumn colour nothing beats the pyracantha just along the road from our house!By norths@mnjenfrance.eu (Jon & Mary in Lunel)
When we came to France we found ourselves in a house with spare bedrooms and we decided to offer B&B. To begin with it was mainly for our UK friends and acquaintances, but in 2007 France passed a law requiring all publicly advertised accommodation to be formally registered. The Lunel Tourist Office noticed our website, and we decided to register rather than remove the details.By norths@mnjenfrance.eu (Jon & Mary in Lunel)
This week 10,000 bee specialists from all over the world have gathered here in the south of France for the 41st Apimondia conference. I hadn't heard of this until our local newspaper published an article today highlighted the event and the work of Vincent Tardieu. He is a French journalist who writes a blog (and has published a book) called L'étrange silence des abeilles, about the often mysterious disappearance or reduction of bee populations. Of course this is deeply worrying because much fruit and vegetable production depends on bee pollination.By norths@mnjenfrance.eu (Jon & Mary in Lunel)
As I write, the Wirksworth Festival is about to start and the latest issue of Community Fayre has just arrived in the post. Those who thought this blog would be about our life in France need to adjust their sets, but only slightly - it is about our life, and occasionally that will include our life before France, including 27 years in Wirksworth, the little Derbyshire town that still means a lot to us. Among other things we still have family and friends there.
We can and do keep in touch with those, friends and family, who are still alive and well and living in Wirksworth, so there is special poignancy in remembering some of those who have died. Some of them are mentioned above, and other special friends included Mike Pegg who shared my enthusiasm for wine and passed on to me his home-made wine racks; Maggie Riddle whose friendship reinforced our involvement in twinning and our developing interest in living in France; and Peter Hoon, whose lovely black and white prints of Wirksworth were so often Christmas cards or little gifts we still treasure. His widow Jenny is curating an exhibition of them in the Festival this year, and I have used some to illustrate this post.
By norths@mnjenfrance.eu (Jon & Mary in Lunel)
I was brought up a Quaker (member of the Society of Friends), worked for many years in the British Quaker headquarters and, although I'm no longer a member I still have sympathy with Quaker principles and admiration for many Quakers. Long before we came to live in France I also knew that there was a place called Congénies, the original seat of the French Société des Amis but I had no idea that it was just along the road from Lunel and that the old 19th century building had been restored as an active Meeting House. We quickly made contact with local Friends.By norths@mnjenfrance.eu (Jon & Mary in Lunel)
I've just met a British man who has lived in northern France for a few years and is gradually improving his French. Like me he finds this hard work, and nowhere more so than in meetings - also like me he had spent years training people to run meetings well and in the end he has given up the struggle of going, and with it given up some of the friendly contacts you make through belonging to local associations.By norths@mnjenfrance.eu (Jon & Mary in Lunel)
Lunel is not a smart town, and many of our friends have I think consciously chosen prettier surroundings or more attractive local markets and shops. But this is a functional town, much of it quite old if still rather down-at-heel, growing fast and so with life and resources even in a recession, and new resources like the Médiatheque about to open on our doorstep. It's convenient for 2 (you could argue 3 or 4) airports, the Autoroute and the railway. But most of all, in a short time it has become home and we have good friends and neighbours here. No regrets, in other words.By norths@mnjenfrance.eu (Jon & Mary in Lunel)
Each 22 June is the Fête de la Musique in France. All over the country, in halls and theatres and most of all outside there is music of all kinds. I was spoilt for choice of photos of this year's offerings in Lunel and in the end chose the South Highland Pipers, a versatile crew who did not only Scottish but Irish numbers with appropriate changes of instrument. Now, as I write, it's the Lunel Jazz Festival with 4 evenings of late concerts under the trees in the park.By norths@mnjenfrance.eu (Jon & Mary in Lunel)
By norths@mnjenfrance.eu (Jon & Mary in Lunel)

By norths@mnjenfrance.eu (Jon & Mary in Lunel)
This week Mary went to a committee meeting. As in most organisations, whether choirs, churches, sports clubs or whatever, people often rely on them and their meetings for social contact and mutual support. In this case people were feeling upset and perhaps guilty because a member had sadly and unexpectedly died and they wondered if they had done enough, whether they could have helped more and so on. But in the course of conversation it turned out that the person in whose house the meeting took place lived only 3 plots away from another active member, but neither had any idea that the other was a neighbour.By norths@mnjenfrance.eu (Jon & Mary in Lunel)
We've just finished a season of French conversation classes. Well, classes is a bit of an exaggeration - mornings of exploration followed by great lunches more like. It's over two years since we discovered the RERS (Réseau d'Echanges Réciproques des Savoirs) network. This is a national network of associations for the free exchange of information all over France. Its local branch around the town of Sommières a few km north of here has over 140 members.By norths@mnjenfrance.eu (Jon & Mary in Lunel)
By norths@mnjenfrance.eu (Jon & Mary in Lunel)
By norths@mnjenfrance.eu (Jon & Mary in Lunel)
Apple published an update of its Safari browser on Thursday that plugs 16 security vulnerabilities.…
The body of soul legend James Brown has reportedly been stolen from a family crypt.…
By Matthew Weaver
Head of supreme council says Nouri al-Maliki's State of Law group is likely victor based on preliminary results
The political grouping headed by Iraq's prime minister, Nouri al-Maliki, today began preparing negotiations for a new coalition government after edging ahead in the latest counts of Sunday's general election.
The poll's outcome is still unclear but Maliki's State of Law group is growing in confidence after preliminary results gave it victory in at least two southern provinces.
Only partial counts have been released from six of Iraq's 18 provinces, excluding Baghdad. Results today from a quarter of votes cast in Maysan province, which borders Iran, showed State of Law trailing to the Iraqi National Alliance, the Shia coalition that includes followers of the radical cleric Muqtada al-Sadr.
But Iraqi officials who have seen nationwide results said Maliki's coalition appeared to have a narrow lead. The head of the Supreme Islamic Iraqi Council, Ammar al-Hakim, said that Maliki's coalition appeared to be winning – the first statement of its kind by high-ranking official since polls closed.
Abbas al-Bayati, a member Maliki's coalition, told Associated Press the alliance had created a committee to open talks with other blocs. Bayati said he expected State of Law would need two or three other coalition partners to form a government.
Iraqiya, the coalition of Maliki's main rival, Ayad Allawi, the former secular Shia prime minister, continued to claim that the election was marred by fraud.
Rend al-Rahim, an Iraqiya candidate, said the group had lodged 32 separate complaints with election officials, including undelivered and dumped ballots.
Results released yesterday showed Allawi and Maliki's rival groups were leading in two provinces each.
Coalition talks are expected to be lengthy and fractious. A credible ballot is considered to be crucial to a planned US troop withdrawal. It follows elections in Iran and Afghanistan, where results are widely considered to have been illegitimate.
More partial results from Iraq's 14 other provinces are expected on Sunday.
By Paul Owen
Edward McMillan-Scott accuses David Cameron of 'propitiating extremism abroad' and says he fears that on Europe the Tory leader says one thing in opposition and will do another in government
The former leader of the Conservatives in the European parliament has defected to the Liberal Democrats, the party announced today.
Edward McMillan-Scott accused David Cameron of "propitiating extremism abroad" and said he feared the Tory leader said one thing on Europe in private but would do another in government.
The MEP for Yorkshire and the Humber clashed with Cameron last year over the Conservative leader's decision to remove his MEPs from the centre-right European People's party and set up a new group, European Conservatives and Reformists, with controversial allies from eastern Europe.
McMillan-Scott successfully stood against Michał Kamiński, the Polish MEP chosen to lead the new group, for the post of vice-president of the European parliament, and as a result he had the Tory whip removed.
The MEP said today: "I have been around the higher circles of the Conservative party for long enough to fear that on Europe Cameron says one thing in opposition and will do another in government.
"I have long fought against totalitarianism and the extremism and religious persecution it brings. It was wrong of Cameron to associate with MEPs who have extremist pasts in his new European alliance."
Kamiński has been accused of antisemitism and homophobia, which he denies, while the Latvian party For Fatherland and Freedom, also in the Tories' new coalition, has been criticised for commemorating Latvian Waffen SS soldiers. David Miliband, the foreign secretary, invigorated last year's Labour conference by calling the Tories' ties with such parties "sickening".
In his resignation letter to Cameron, McMillan-Scott told him: "You say that you are against extremism at home, yet you propitiate it abroad."
He added: "My reasons for joining the Liberal Democrats are that in Nick Clegg they have a leader whom I like, admire and respect. They are internationalists, not nationalists. They are committed to politics based [on] the values of fairness and change."
Clegg paid tribute to his new MEP, saying: "For many years he has fought for human rights and democracy worldwide and he is rightly a respected politician across Europe. As someone of principle he has refused to cosy up to rightwing extremists, despite pressure from the Tory machine.
"This flies in the face of David Cameron's claims of change. It shows that people of principle, who believe in fairness and want real change for Britain, are at home in the Liberal Democrats."
The defection will be seen as a boost to the Lib Dems as they begin their spring conference in Birmingham.
A spokeswoman for the Tory party said McMillan-Scott had had the whip removed "months ago" and declined to comment.
Visiting Gordon Brown at 10 Downing Street today, Nicolas Sarkozy, the French president, said he "regretted" Cameron's decision to pull the Tories out of the European People's party.
12 March 2010
Dear David,
I am resigning today from my appeal against expulsion from the Conservative party and from the party itself to join the Liberal Democrats for three reasons:
1. I have been around the higher circles of the party long enough, most recently serving on both the Euro-election and general election strategy committees at CCHQ, to know that Euroscepticism is in the hearts of most Conservatives. Your decision to split from the mainstream EPP and create the new ECR group has been universally condemned, even by rightwing commentators such as the Economist as a "shoddy, shaming alliance". You say you will not "bang on about Europe" and your spokesman make warm noises. But I fear that on Europe you say one thing in opposition and will do another in government.
2. You continue to refuse to accept that Michał Kamiński, who now leads the ECR and against whom I stood and won re-election as vice-president of the European parliament last July, has had "antisemitic, homophobic and racist links". You say that you are against extremism at home, yet you propitiate it abroad.
3. My family, friends and those who work with me will all confirm that I have sought in good faith an amicable resolution of my dispute at all levels in the party. I have written to you on several occasions without a reply and have pursued the appeal process to which you submitted me in the diminishing expectation of fairness. I have stated my case modestly in the media. Last weekend your lawyers made clear that the appeal would continue to be rigged by you, despite your public pretensions to decency and fairness. As my friend Henry Porter put it in the Observer, your response has been "thuggish and panicky". You say one thing in public and do another in private.
My reasons for joining the Liberal Democrats are that in Nick Clegg they have a leader whom I like, admire and respect. They are internationalists, not nationalists. They are committed to politics based [on] the values of fairness and change, but you are committed to power for its own sake.
Yours sincerely,
Edward McMillan-Scott MEP
Vice-president of the European parliament, responsible for democracy and human rights
By
Images from a new and exhaustive biography of the American actor and director
By Peter Walker
Judge agrees with human rights watchdog that British National party's rewritten criteria for joining are still racist
The British National party (BNP) has been barred from taking new members after a judge ruled today that its constitution could discriminate against non-white people.
Judge Paul Collins issued an injunction ordering the far-right group to comply with race equality laws, adding that "the membership list will have to be closed until then".
Under the injunction, future prospective BNP members will not have to be vetted at home before being accepted.
Last month the BNP scrapped its whites-only policy in an attempt to avoid legal sanctions brought by the Equality and Human Rights Commission (EHRC).
But today at central London county court, Judge Collins ruled: "I hold that the BNP are likely to commit unlawful acts of discrimination within section 1b Race Relations Act 1976 in the terms on which they are prepared to admit persons to membership under the 12th edition of their constitution."
The commission welcomed the ruling, saying it proved that, while it is not unlawful to hold discriminatory views, it is unlawful for such principles to be used for controlled entry to a political party.
Susie Uppal, director of legal enforcement at the commission, said: "The commission is glad that today's judgment confirms our view that both the BNP's 11th constitution and the amended 12th constitution are unlawful.
"Political parties, like any other organisation, are obliged to respect the law and not discriminate against people who wish to become members.
The decision follows weeks of wrangling over the legality of the party's membership criteria as defined in its constitution.
BNP rules had stipulated that only "indigenous Caucasians" and people from ethnic groups "emanating from that race" could join.
After several months of delay, BNP members voted at an extraordinary general meeting a month ago to scrap the clause and replace the party's constitution.
But the EHRC decided to challenge the new document on the grounds that it still amounted to indirect racism.
The new constitution, which has yet to be published, requires would-be members to agree that they are "implacably opposed to the promotion, by any means, of integration or assimilation" that affected the UK's indigenous white population. Another clause expresses opposition to mixed-race marriages.
"It would be jolly difficult for a mixed-race person to join the BNP without effectively denying themselves," Robin Allen QC, representing the EHRC, told a hearing on Tuesday.
The BNP rejected this. "This party has a particular policy," said Gwynn Price Rowlands, representing the party. "It's a matter for the applicant to decide whether they want to join."
The BNP had a waiting list of non-white people wanting to join, he said.
The hearing was told that applicants under the new party rules would be subject to a two-hour home visit by two BNP officials.
Allen said that could operate as a form of indirect discrimination. "One way the provisions could operate would be to intimidate someone who wanted to join the party.
"Of course, it could simply be a greeting."
BNP critics argue the party has no genuine interest in recruiting non-white members and is merely doing the minimum to avoid legal action and potentially crippling court costs.
An internal BNP memo seen by the Guardian this week told members that the party had not "gone soft".
"We don't expect any more than a handful of people of ethnic minority origin to apply to join the party nationally, and we will not let this deflect us from our political objectives of saving Britain and restoring the primacy of the indigenous British people," the memo said.
By Polly Curtis
Labour peer was investigated over claims that she was paid expenses on a flat in Kent that had been unoccupied for years
Lady Uddin, the Labour peer accused of claiming more than £100,000 in expenses for a flat she did not live in, will not face any criminal charges, the Crown Prosecution Service confirmed today.
The Labour peer was investigated over claims that she was paid expenses on a flat in Kent that had been unoccupied for years. Uddin has a second home in the East End of London, just four miles away from parliament.
The inquiry has been suspended with no charges made because there was "insufficient evidence" to bring a prosecution alleging that Uddin did not occupy the home in Kent.
Keir Starmer, the director of public prosecutions, said: "The allegation against Baroness Uddin was that she had claimed 'night subsistence' for overnight stays in London, after attendances in the House of Lords, to which she was not entitled. Although she had nominated a flat she owned in Maidstone, Kent, as her 'only or main residence', it was alleged that her 'only or main residence' was in fact a house in east London.
"Evidence in this case was obtained from neighbours of Baroness Uddin and from companies supplying utility services, such as water, gas and electricity to the flat in Maidstone. But after careful scrutiny of all of the available evidence we have decided that, in applying the definition of 'only or main residence' adopted by the house committee, there is insufficient evidence to bring criminal charges against Baroness Uddin and we have today advised the Metropolitan police to take no further action."
The decision not to prosecute relied heavily on a ruling by the Lords clerk to allow peers to nominate their first and second homes, and that the definition of a primary home was one which the member visited at least once a month. On the evidence prosecutors had, they could not prove she had spent less time there.
Speaking at her home in Shadwell, east London, Lady Uddin said: "I am relieved this ordeal has finally come to an end and I only wish now to say thank you to everyone who supported me through a very difficult time and I now wish to return back to my professional life."
Uddin will now face an inquiry by the sub-committee on Lords' interests, Michael Pownall, the clerk of the Lords, said today.
He defended the rules around peers' second homes, insisting that they had to stay overnight in a property at least once a month in order to qualify for allowance payments and insisted this had been backed by the house committee.
He said: "The house committee's deliberations did not relate to potential breaches of the criminal law. I had agreed with the Metropolitan police service that I would suspend my internal investigations into the small number of members it was investigating until its investigations were complete.
"At the time I made my recommendation, the MPS was still investigating those members, and their circumstances were not a consideration in my recommendation."
By Andy Gallagher, Michael Tomasky, Rebecca Lovell
Michael Tomasky calls on elected Democrats to make a stand on healthcare reform
RE2: a principled approach to regular expression matching. Google have open sourced RE2, the C++ regular expression library they developed for Google Code Search, Sawzall, Bigtable and other internal projects. Unlike PCRE it avoids the potential for exponential run time and unbounded stack usage and guarantees that searches complete in linear time, mainly by dropping support for back references.
Cache Machine: Automatic caching for your Django models. This is the third new ORM caching layer for Django I’ve seen in the past month! Cache Machine was developed for zamboni, the port of addons.mozilla.org to Django. Caching is enabled using a model mixin class (to hook up some post_delete hooks) and a custom caching manager. Invalidation works by maintaining a “flush list” of dependent cache entries for each object—this is currently stored in memcached and hence has potential race conditions, but a comment in the source code suggests that this could be solved by moving to redis.
Automate EC2 Instance Setup with user-data Scripts (via). I knew about EC2’s user-data feature—what I didn’t know is that the Alestic and Canonical images are configured so that if the user-data starts with #! the instance will automatically execute it as a shell script as soon as it boots up (after networking has been configured).
grammar.coffee (via). The annotated grammar for CoffeeScript, a new language that compiles to JavaScript developed by DocumentCloud’s Jeremy Ashkenas. The linked page is generated using Jeremy’s Docco tool for literate programming, also written in CoffeeScript. CoffeeScript itself is implemented in CoffeeScript, using a bootstrap compiler originally written in Ruby.
Scott and Scurvy. Did you know that Scott’s 1911 expedition to the south pole was plagued by scurvy, despite the British navy having discovered an effective cure way back in the 18th century? A fascinating tale of how scientific advances can lead to surprising regressions.
Announcing django-cachebot. The ORM caching space around Django is heating up. django-cachebot is used in production at mingle.com and takes a more low level approach to cache invalidation than Johnny Cache, enabling you to specifically mark the querysets you wish to cache and providing some advanced options for cache invalidation. Unfortunately it currently relies on a patch to Django core to enable its own manager.
How To Be A Good Participant On A Panel: Disagree. When I’m on a panel, I always try to have lunch or dinner with the other panelists beforehand to figure out in advance what points we disagree on.
Geospatial Indexing in MongoDB (via). New in version 1.3.3. Handles “order by distance from” queries using a geohash approach under the hood, automatically searching nearby grid squares until the correct number of results have been gathered. Bounding box search is planned for a future release.
Is johnny-cache for you?. “Using Johnny is really adopting a particular caching strategy. This strategy isn’t always a win; it can impact performance negatively”—but for a high percentage of Django sites there’s a very good chance it will be a net bonus.
Some People Can’t Read URLs. Commentary on the recent “facebook login” incident from Jono at Mozilla Labs. I’d guess that most people can’t read URLs, and it worries me more than any other aspect of today’s web. If you want to stay safe from phishing and other forms of online fraud you need at least a basic understanding of a bewildering array of technologies—URLs, paths, domains, subdomains, ports, DNS, SSL as well as fundamental concepts like browsers, web sites and web servers. Misunderstand any of those concepts and you’ll be an easy target for even the most basic phishing attempts. It almost makes me uncomfortable encouraging regular people to use the web because I know they’ll be at massive risk to online fraud.
Running Processes. I’ve been searching for a good solution to this problem (“run this program, and restart it if it falls over”) for years. I’m currently using god which works pretty well, but according to this article I should be learning upstart instead. It never ceases to amaze me how difficult this is, and how obtuse the tools are.
I’m not worried about guys like us. There will always be machines for us (powerful, complex, etc.). Why? Because if for some magical reason there wasn’t all of a sudden, we’re the type that would just make one.
Internet Explorer: Global Variables, and Stack Overflows. An extremely subtle IE bug—if your recursive JavaScript function is attached directly to the window (global) object, IE won’t let you call it recursively more than 12 times.
GeoPlanet Explorer. Chris Heilmann’s YQL powered explorer for the invaluable Yahoo! GeoPlanet / WhereOnEarth dataset. Every API deserves an explorer of some sort.
jmoiron.net: Johnny Cache. The blog entry announcing Johnny Cache (“a drop-in caching library/framework for Django that will cache all of your querysets forever in a consistent and safe manner”) to the world.
By Guido Fawkes
Bill Gross, the world’s biggest bond investor says… “I would vote Labour. Favouring employment versus the financial markets is a decent policy; certainly not beneficial for the currency or the gilt market but beneficial for the people,”
By guidofawkes
Earlier in the week it was the Staggers that were highlighting their intern-hypocrisy, and now as the Lib Dems head to Birmingham for Clegg’s “return to your constituencies and prepare for government” moment, they too have fallen foul of practising what they preach. The sandalistas are debating “Proposals for Youth Employment” including: “c) Introducing a new ‘Paid Internship’ scheme [...]
By LFAT
“Anna is liberal and open-minded but politically she supports The Labour Party, for all its sins.” - a note on the website of Anna Arrowsmith, a porn film director and the new PPC for the Lib Dems in the constituency of Gravesham. Her website also mentions that she is “into all sorts of things, mainly partying [...]By Bishop Hill
I've just crept into the top 100 books on Amazon.co.uk, number two in popular science behind Ben Goldacre. I'm also at number 428 on Amazon.com.
Wow!
By Wat Tyler (noreply@blogger.com)
"Interest payments on the national debt are £25 billion a year. We're spending more on national debt repayment than on schools or law and order, and that is a situation I don't want as a hallmark of a Labour government... The public borrowing requirement was £23 billion last year. We plan to get it down very substantially."But as time went by, the continued good behaviour of interest costs was less a reflection of Brown's prudence, and more an automatic response to the big fall in gilt yields since the 70s, 80s and early 90s. That fall meant that when old high coupon debt matured on Brown's watch, it could be refinanced at much lower rates, bringing down interest payments. And yes, Bank of England independence did help that process by reassuring the markets about future inflation, but the key driver was the worldwide fall in yields - partly driven of course by Krugman's global savings glut. It had little to do with Brown's prudence, let alone his financial acumen.
By John Redwood
The FSA says today it will in future monitor more and make judgements about the safety of various financial products and activities. The tripartite regulators led by the Chancellor made some very important judgements 2005-8. Between 2005 and 2007 they thought banks [...]By Guido Fawkes
This isn’t a surprise. The Clerk of the Parliaments, Michael Pownall, gave the Lords almost free reign to continue troughing by ruling that there is no definition of main residence for the purposes of expenses. A ruling almost designed to make a prosecution impossible. Uncharged is not the same as innocent… See Carry On Claiming M’Lords [...]
By Guido Fawkes
This week we bring footage of the release from prison of the landlord who lets you smoke, the travails of magazine street sellers and MPs on trial. Here’s a preview excerpt from this week’s Guy News; a mash-up of Gordon Brown and Johnny Cash with a touch of Neil Hepburn. If you haven’t subscribed to [...]
By John Redwood
Sometimes people come to see me at my surgery with debt problems. They often have a large mortgage, and on top have borrowed too much on the Credit card and personal loans. The first advice I always give them is to go through [...]By noreply@blogger.com (dizzy)
One of the best first person shooters ever has been re-made online and called "Gordon's Revenge". It means you you can run around going postal with a

By Longrider
Dick Cheney’s daughter is engaging on a witch hunt, it seems. Her Keep America Safe campaign is targeting lawyers who had the temerity to represent terror suspects. Now Cheney’s daughter, Liz, has taken up the cudgel by heading what some are describing as a McCarthyite campaign to purge the government of lawyers who dared to defend [...]Things are quiet at Mission Control. No, quiet would be an understatement. The room seems unnaturally large and cavernous, and there's an echo that just shouldn't be there... I could swear I heard the words "sleep no more" coming from the PC speaker, but I'm sure I'm imagining it. My contemplations are interrupted by two …
| Piled Higher & Deeper by Jorge Cham |
www.phdcomics.com
|
|
![]() |
||
|
title:
"Campus Day of Action" - originally published
3/10/2010
For the latest news in PHD Comics, CLICK HERE! |
||
By the time this blog entry goes live I'll be running upon my new machine. The migration process was mostly straightfoward and followed my plan:
Of course it wasn't that simple in practise, as previously mentioned the whole reason I was looking for a new machine was because the software RAID upon my old desktop was failing - One of the two drives was completely dead.
As I'd feared the second drive failed partway through my migration. But thankfully I'd copied off the important stuff before then, and the backups I have off-site mostly covered everything else. (The things I lost were things I can find again such as ~/Music, ~/Videos. On the one hand they're too large to backup, on the other hand I should probably do it next time as they never change.)
Unfortunately the version of X in Lenny refused to work with the GeForce G210 video card I had. To be more correct using the Vesa driver I could get a picture and a smooth desktop, but when watching videos with xine I got maybe two frames a second. Both the open nv driver and the closed nvidia driver failed to support the card - so I swapped hardware, and I'm now running with the GeForce 7300 GS card from my previous desktop. This allows me to watch videos at full-screen with no issues. (Desktop size is 1600x1200 FWIW).
So now it's just a matter of tweaking the system. I've installed enough to be useful:
I've still got to setup pbuilder, but that'll be done shortly, and I've installed backported packages such that I can watch youtube videos. I'm currently running firefox from lenny but I expect that will change soon enough - not least because that version fails to support "adblockplus", only "adblock".
Two partitions md0 for /boot and md1 used as LVM, from which I've taken /, /home, etc:
Filesystem Size Used Avail Use% Mounted on /dev/mapper/birthday--vol-root 9.9G 2.8G 6.6G 30% / /dev/mapper/birthday--vol-home 22G 4.3G 16G 22% /home /dev/mapper/birthday--vol-music 127G 43G 78G 36% /mnt/music /dev/md0 988M 38M 901M 4% /boot /dev/mapper/birthday--vol-kvm 22G 8.8G 12G 44% /mnt/kvm /dev/sdg1 163G 143G 12G 93% /media/disk skx@birthday:~/hg/blog/data$
skx@birthday:~/hg/blog/data$ sudo pvs [sudo] password for skx: PV VG Fmt Attr PSize PFree /dev/md1 birthday-vol lvm2 a- 464.82G 274.51G
Update: Three irritations with this machine:
I'd still recommend Novatech, but the last point had me swearing for a few minutes until I realised I did have a spare adaptor in the house.
ObFilm: Chitty Chitty Bang Bang
Tomorrow, all being well, I'll receive a new computer.
I've always run Debian unstable upon my desktop in the past, partly because I wanted to have "new stuff" and partly because I needed a Debian unstable system for building Debian packages with.
However I'm strongly tempted to just install Lenny. I use that upon my work desktop and it does me just fine for surfing, building tools, and similar.
I can use pbuilder, sbuildd, or similar to build packages for upload to Debian, and if I want to experiment with new-hotness I can use a KVM guest or two.
Providing the hardware works with Lenny (and I have no reason to believe it won't) then there's no obvious downside I can think of.
The only potential complication will be restoring my backups, it is possible that my firefox databases, and similar things, might not work on older version. Still we shall see.
I plan to install software RAID, and run the system on LVM because quite frankly it rocks. Unless my current system fails in the next 24 hours I can use that to do the installation (My current desktop acts as a TFTP/DHCP/NFS server so I can use it to PXE-boot).
Anyway now I need to go eat food, tidy my desk, and decide what to call the machine .. At the moment the choice is between "march.my.flat" and birthday.my.flat, as my 34th birthday is on March 10th.
ObFilm: 300
| Piled Higher & Deeper by Jorge Cham |
www.phdcomics.com
|
|
![]() |
||
|
title:
"The 2397th Annual Academic Awards" - originally published
3/8/2010
For the latest news in PHD Comics, CLICK HERE! |
||
By Charlie Brooker
There are 76 rules broadcasters have to follow for the debates. But I've found a loophole...
So: those televised prime ministerial debates will definitely be happening in the runup to the election. The excitement is hard to contain: three separate primetime shows on Sky, ITV and the Beeb in which Brown, Cameron and Clegg will get the opportunity to talk and talk and talk and talk and talk. And possibly jig. But mainly talk.
Depending on your point of view, this is either a refreshing opportunity for politicians to connect with the electorate, or the least sexy hour of television since that Channel 4 documentary where they chopped up an elephant.
Even though its power and influence are in decline, TV still fascinates and horrifies politicians in equal measure. They're attracted by its potential to hypnotise and pacify millions, but repelled by its laser-like ability to magnify physical flaws or tonal cock-ups. It's like a magic amulet that can sometimes control the masses, but also might explode in the user's hand at any time.
Obviously image is paramount. On TV, no matter how eloquent you are, 75% of the audience can't even hear what you're saying: they're too busy making subconscious judgments about the tone of your voice or the angle of your lips. Conventional wisdom would have it that Gordon Brown is clearly at a massive disadvantage here, since he's slowly come to resemble a lumbering, doomy Mr Snuffaluffagus with all the carefree joie de vivre of the Kursk submarine disaster. But Cameron and Clegg are, if anything, a bit too telegenic, a bit too slick, a bit too clean-cut and heigh-ho. They've tried too hard to appeal in soundbite pop-up form: stretched over an hour, they may start to grate, their smooth appearances unexpectedly conspiring against them.
Cameron in particular looks like a boring dot-eyed "nice" neighbour from an underwhelming Christian soap opera. He's a replicant; an Auton; a humanoid; a piece of adaptive software that's learned to appeal to your likes and dislikes – "customers who bought Tony Blair also bought the following" – but inadvertently creeped you out in the process. Let's face it: if you discovered he doesn't have a belly button or any pubic hair, and spends one night each week lying semi-conscious, face-down, "recharging" inside a giant white laboratory pod filled with amniotic fluid, you wouldn't be entirely surprised. And voters are likely to sense that eerie unearthliness. He'd better stutter or fluff a few times, just to throw them off the scent.
But even if all three manage to flawlessly imitate human beings, defeat may still be snatched from the jaws of victory: if Nick Clegg spends the first 50 minutes rousing the audience with his fiery, lyrical rhetoric – as per usual – only to sneeze unexpectedly five minutes before the end, leaving a giant pendulum of mucus dangling off the end of his conk, the unfortunate mishap would be looped and repeated ad nauseam on every rolling news bulletin for weeks to come. He'd be Mr Snot. And do you want to vote for Mr Snot? No way. What if he sneezed on the nuclear button? He's out of the running. Which leaves you choosing between a haunted elephant or the humanoid.
(There are other parties you could vote for, obviously. But they're excluded from the debates and therefore no longer exist – a terrible blow for Nick Griffin, who was hoping to win over the public with his devilish good looks and impish personality.)
So: mammoth or android. Which is it to be? To help you choose, the news networks will doubtless offer post-match analysis of each nanosecond. Professional Westminster spods will deconstruct each sentence in search of hidden meanings, like scientists translating garbled messages from space. A body-language expert will discuss Cameron's eyebrows for 38 minutes. A fashionista will tell us who wore the best shirt. And every other citizen in the country will be asked to deliver their opinion via vox pop, email, tweet, phone poll or synchronised Mexican wave. Eventually a consensus will form regarding who won, at which point the lucky victor will be given the keys to 10 Downing Street, a fly-drive holiday for two courtesy of Virgin Atlantic, a five-album recording contract with Sony BMG, and an ITV2 reality show of their very own.
So terrifying-yet-alluring is the prospect of the debates, the parties have only consented to take part provided each broadcaster adheres to a series of 76 rules, drawn up in advance. Every aspect will be controlled, from the time allocated to each question, to the layout of the set – even the framing of audience cutaway shots is crucial. Presumably spin doctors from all three parties will be lurking ominously on the sidelines, ready to run in and kick the cameramen to death if their candidate starts looking too sweaty. You can already picture Andy Coulson in the wings, chewing gum and eavesdropping on the gallery audio feed, which has been illegally tapped by a private detective and routed directly into Andy Coulson's earpiece without Andy Coulson's knowledge.
Curiously, one thing that's left open to the broadcaster is the opening and closing credits. Rule 68 states that "each broadcaster [is] responsible for their own titles, music, branding etc". If I was running ITN – which, at the time of writing, I'm not – I'd make the most of this sole crumb of freedom by creating an insanely inappropriate title sequence in which a claymation Brown, Cameron and Clegg take turns performing sex acts on a cow, a kettle and a hole in the ground, all of it backed by the old It's a Knockout theme tune. Then it abruptly cuts live to the studio, where all three leaders have been waiting to speak, watching with mounting horror as this sickening cartoon unfolded on the monitors. As they storm out, a body language expert analyses their facial expressions, and the studio audience waves giant foam hands around. It might not affect the election either way, but who cares: that's entertainment.
Hello internet! I am at FOSDEM 2010 in Brussels. I tried the fosdem-maemo schedule application for my Nokia N900, and decided to write an alternative app which is easier to use with my fingers, and looks more like a Maemo application.
The result is foschart. It's just something I knocked together in a few hours yesterday, but it's pretty usable already. It supports showing talks grouped by track, by room, and just in chronological order, and a list of favourites. It's all happily kinetic-scrollable, etc., and is very snappy once it's started.
There's no proper release or package yet; if you want to package it up properly, please do! But for now, apt-get install python-hildon, then copy foschart.py and schedule.xml to /opt/foschart, and foschart.desktop to /usr/share/applications/hildon. Then it should show up in your application list, and away you go. As ever, patches welcome. Enjoy!
The illustrious Jonny Lamb has made a package!
#Bring up additional ipv6 addresses on same if up ip -6 addr add 2001:41c8:10a:200::1/56 dev eth0 up ip -6 ro add default via fe80::1 dev eth0 up ip -6 addr add 2001:41c8:10a:200::2/56 dev eth0I saved myself a reboot by also running the up commands on the command line. Just as I did for v4, I planned to use the first address for everything, except lighttpd, because Apache is already using port 80. I added an extra Listen line to /etc/apache2/ports.conf
Listen [2001:41c8:10a:200::1]:80All of my vhosts listen on *:80, so that's good. Lighttpd's server.bind syntax only supports one bind address and port, but you can bind to multiple addresses like so:
server.use-ipv6 = "enable"
server.bind = "::ffff:212.110.165.233"
$SERVER["socket"] == "[2001:41c8:10a:200::2]:80" { }
Next I turned on ejabberd's IPv6 support by adding the inet6 keyword to thgis stanza in /etc/ejabberd/ejabberd.cfg:
{listen,
[
{5222, ejabberd_c2s, [inet6, {access, c2s}, {shaper, c2s_shaper}]},
...
]}
Next up wasmy IRC bouncer, ZNC. I'd told it to explicitly bind to a certain IP address so I could have a vanity address. That needed disabling so I can connect to IPv6-only IRC servers (which to be honest isn't going to happen anytime soon.)
Postfix has IPv6 support since 2.2, and i have 2.5.5 so that should just work, as it currently binds to all addresses. For good measure, i added inet_protocols=all to /etc/postfix/main.cf
For Dovecot, I added listen = [::] to /etc/dovecot/dovecot.conf. Note that listen = * refers to all IPv4 only.
Bytemark's hosted TinyDNS servers support IPv6 records (prefix 6 for automatic rDNS, prefix 3 otherwise), but I stupidly totally forgot about this and used this generator to cook up some AAAA records to match my A records.
A little testing with the SixXS IPv6-IPv4 and IPv4-IPv6 Website Gateway, which is basically an IPv6 -> IPv4 web proxy that refuses to retrieve anything hosted on IPv4, and I confirmed everything was good to.
Stop Press! Aren't we forgetting something?
In keeping with the tradition set by kame, and followed by Google and many others, I needed a bouncing logo thats only shown to surfers that connect via IPv4. Lucky I had an animated gif that I'd made earlier. In Django, you can do something like
":" in request.META["REMOTE_ADDR"]to work out if your surfer is an IPv6 surfer. IPv4 users can sneak a peak at using the SIXXS gateway See it's that easy. If your host gives you IPv6 space, then you have no excuse not to be leading the way to the move to adopting IPv6.
The camera/photo viewer on the N900 has a pretty nice tag cloud widget, which lets you quickly label your photos before you upload them to Flickr. (The novelty hasn't yet worn off!) But an autocompletion accident left me with a tag in the widget that I'd really prefer not to be there when I'm showing off my nice new phone to people.
I spent a happy¹ few hours trying to figure out where it gets the set of tags
from. The viewer asks Tracker for the most
commonly-used tags, but this tag wasn't used on any of my photos, so wasn't
coming from there. In fact, it didn't appear in any of Tracker's database files! After a bit of investigation, I discovered that the photo
viewer keeps its own independent set of recently-used tags, not in Tracker, but in GConf, at
/apps/osso/image-viewer/recent_tags. Lest you should find yourself in my position, a quick
gconftool --set --type list --list-type=string /apps/osso/image-viewer/recent_tags '[]'
will expunged your undesired utterances from the cloud. Bug report time. Next stop: finding a tool that lets the user remove typos from the autocompletion database …
1. Grr.
The idea was to build an internet-controlled snow machine - you'd hit the button on the website, and watch a member of the Torchbox team get pelted with snow. When we first came up with the idea, we dismissed it as being "too complex", but after a while, we came around.
Cue three days of frantic development and phoning round to get the parts. I'll be posting a full build article, with all our source code, once we're done.
The brief summary is that we have a Django app which handles rate-limiting of snow, and tracking who has clicked the button, which then communicates with our snow machine using Artnet and DMX. Ustream is used to stream the video back to the internet.
Still, I imagine you want to see it in action, so head over to snow.torchbox.com, and have a go. It's only online 10 - 5 UK time, and only until Tuesday (we can't fill our office up with paper snow forever), but it's still very good fun, even if you don't know any of us!
A couple of days ago, I released version 0.2.1 of Bustle, someone's favourite D-Bus profiler. As the version number suggests, there aren't really any big new features; most of the changes just make it a bit nicer to use, like showing you all the bus names a service owns, ellipsizing strings, a slightly less spartan UI, etc. Having finally gotten around to cutting a release, I've started wondering what to work on next. There are various small things I have in mind, such as searching, filtering, integrating the various statistic tools (bustle-time and friends) into the UI, and so on, but it'd be nice to have a larger goal to work towards.
One recurring feature request is the ability to see messages' arguments. This isn't currently possible because the simple plain-text logs produced by the monitor (which is a variation on the theme of dbus-monitor --profile) only includes the message header. I've thought for a while that the right thing to do would be to log the raw dbus messages, together with a timestamp, but wasn't sure what the files would look like. (Maybe shove the timestamps into the message headers?) Rob had a nice idea: why not log to pcap files? This avoids inventing a new format—the UI would just use libpcap and feed each message through the dbus parser—and would also let you look at the logs in WireShark, if you're into that kind of thing. I'm hoping to find some time to give this a shot soon. (Maybe on a cold Christmas evening, in front of a fire?)
In the meantime, have a peek at what your D-Bus-using applications are up to, and let me know what's missing!
It mostly contains bugfixes, but there's now support for extending introspection to third-party apps without having to edit their source.
I'll probably start working full steam on South 0.7 soon - there's a refactor of the migration engine (mostly done), of startmigration (not started), and a few changes to command names to make them nicer (the old ones will still work), and to the behaviour of default values.
I'm hoping 0.7 will be the last release before 1.0, at which point I will claim I've been working in an octal version numbering sequence all along.
An oft-requested feature in Empathy and Telepathy is support for OTR (Off The Record) encryption of messages, interoperating with the OTR plugin for Pidgin and other popular IM clients. We've been resisting implementing it so far, mainly because we think there are better ways to do end-to-end encryption of messages and audio and video calls over XMPP, which we hope to implement in the not too distant future.
However, a nice aspect of OTR as compared to other encryption solutions is that it allows you to plausibly deny having taken part in a conversation. We believe this to be an example of a wider trend towards deniability on the internet, a position which is backed up by the growing popularity of Tor, and by several modern browsers allowing you to cover your browsing tracks out of the box.
As a result, we've been working hard to help secure your privacy while you're using Empathy. We've had to do this quietly for various legal reasons, but we're proud to announce Empathy's new Private Mode. When enabled, your contact list will be anonymized, as will your entry on your contacts'. Thus, you can conduct conversations with anyone without fear of repercussions from their discovering your identity, or of anyone else knowing the conversation took place:

It's not obvious how to bring these privacy benefits to Jingle video calls. We came up with a technique we refer to as Kitten Secrecy (patents pending in all relevant countries), and managed to integrate it with Empathy with the help of our friends at Collabora Multimedia, who constructed a fantastic GStreamer element using only two leaky queues!

We think the results speak for themselves. The source is not quite ready for release yet, but (lawyers permitting) we hope it'll be public by the end of the month. Hope you can wait until then!
— the Telepathy and Empathy teams
At the Boston Gnome summit, Robert McQueen, Sjoerd Simons and I sketched out a plan for the API for end-to-end encryption of communications (implemented using XTLS, OTR or anything else) and how we'd implement this API for OTR. Work's just started on a challenge-response authentication API, which is a prerequisite. Stay tuned; or, jump onto the Telepathy list or #telepathy on Freenode if you're interested in helping out!
Jason's hands were tired after typing two days of excellent notes on sessions at the Gnome Summit, so I took over writing up the Telepathy BOF (which was largely about Telepathy integration in Gnome Games).
Gnome Games's tubes code is broken because of Empathy moving to Mission Control 5, which broke the contact chooser they were using (which used Mission Control 4). A Canonical person (your scribe did not catch who it was) has written a contact selector in C which just uses telepathy-glib, which Gnome Games will use and then start working again. This widget could form the basis of the long-anticipated telepathy-gtk.
Rob pointed out that it's currently a bit of pain to request a channel for yourself: you can't just call one D-Bus method and get a channel back, you also have to implement a Client.Handler object on which MC will call the HandleChannels() method. Sjoerd noted that Empathy has helper code for doing this in simple cases, which could be moved to tp-glib (it's under the LGPL).
Jason wants a way to share high scores with your contacts. (Digression about a gnome-games high score server on gnome.org ensued, the notes of which your scribe lost in a kernel panic. One main point is that global high scores end up just featuring incredibly good scores and people setting their name to obscenities.) Jason wonders if g-g could publish your high scores to your contacts in the background?
J5 wondered if any g-g people are documenting how they're using tubes, because he was always confused by them, and he reckons this is a very important thing for app developers. Rob suggested pushing this into tp-book, and Sjoerd noted that Danielle has a helper which lets you say "give me a stream to this person" and get a GIOChannel back branch with methods to convert between telepathy address GValues and GSocketAddresses, which could conceivably be extended to set up a socket automatically. J5 thinks that if patterns for using tubes were really well documented, people would jump on the chance to use them.
Jason mentioned that people were discussing having a help option which jumps you to #gnome-games-$lang. J5 said that Ximian tried that, but found that people would just end up in empty chatrooms or paste goatse at each other. Integration with DevHelp would be nice to let people post examples etc.
J5 suggested that another good way to improve documentation is to make writing it a requirement for SoC. Rob noted that Telepathy hackers know that you need to use, eg., a Handler and a Tube, but it's hard for people really immersed in the stack to remember which prerequisites people need to learn in order to understand that stuff. Sandy said they'd been discussing documenting requirements and standards for SoC students, and thinks it's a great idea to ask students to blog stream-of-consciousness "this is what i did" updates. People have to make sure that they do this as they go along, because you forget the learning process after a few weeks.
Advantage of peer-to-peer high scores: you don't get the problem of one incredibly good person dominating.
ajaxxx suggested that you could make high scores decay over time, or once you reach a particular level, to address this problem.
Tetrinet is latency-sensitive: will that be a problem with Telepathy, particularly using MUC tubes? Rob said just try it and if it's too slow it'll get faster as the implementation of Tubes improves. Sjoerd noted that for tetrinet you probably want to just export the Tetrinet server over a multi-user stream tube, rather than using d-tubes.
Telepathy should use UPnP to make FT and tubes fast in more cases. This is on the TODO list.
I'm just getting ready to fly away to Boston for the Gnome Summit. I'm looking forward to meeting people and seeing MIT, as well as getting the chance to spend more than a few hours in Boston (unlike every other time I've been there).
Inevitably, I haven't been organised enough to propose a Telepathy- or Empathy-related session, but Rob McQueen, Sjoerd Simons, Andres Salomon, Dafydd Harries, Shaun McCance (when he's not busy running a pair of interesting-sounding documentation sessions!) and myself will be around if people are interested; maybe something will coalesce. If window manager theming is more your kind of bag, Thomas Thurman's running a session on CSS in Metacity/Mutter. It'd be great to talk about integrating IM with the Gnome Shell; Moblin's people panel and many parts of Maemo make interesting use of Telepathy, and it'd be nice to have something similar on the desktop.
Speaking of Maemo, going to Boston means I'm not at the Maemo Summit in Amsterdam, which is a real shame: I'd love to meet more of the Maemo community, hear what people have up their sleeves for the N900, and discuss how Telepathy could help. Happily, Marco Barisione's giving a talk about how Telepathy's used on Maemo, and how you can use it too; relatedly, Travis Reitter and Mathias Hasselmann will speak about the address book, one of the heaviest users of Telepathy. Also, Marc Ordinas i Llopis is hosting a BoF on extending the (frankly stunning) Hildon desktop, and Ian Monroe is giving a talk with Sergiy Dubovik about preparing Qt4 applications for Fremantle and Harmattan. I hear Philippe Kalaf is also floating around somewhere. ☺
See you in (the wrong) Cambridge!
In my opinion, there's just not enough Subversion servers on the internet.
That's an opinion you'll probably never hear me express - I much rather everyone move over to a DVCS (*ahem* mercurial) - but Subversion has, some would say quite rightly, earned its place as the dominant VCS for nearly every part of the IT community (apart from big, lumbering, financial companies).
Recently, I've been slowly switching away from subversion for my personal projects into Mercurial. This, in itself, a painless process, but with my public projects - particularly South - this has the unintended effect of slightly alienating some of my users. Most are alright with adapting - after all, it's quickly becoming the norm to use a DVCS - but there's still a few people left out.
One of the particular issues I have is with svn:externals. A lot of apps - including some we have at work - rely on svn:externals to pull in external dependencies into a libs folder along with the project itself. Externals is one of the few features of subversion that I thought was pretty much perfect, and it was sad to see my move to Mercurial break it.
This week, at DjangoCon, Chris Wanstrath did a nice talk on DVCSen. One of the questions led him onto hg-git - the awesome git backend plugin for Mercurial, that the GitHub guys wrote - and how they first investigated the idea of an svn gateway to expose their repositories transparently to subversion users. From what I gathered, subversion's wire format proved too tricky to deal with, and so they turned elsewhere.
However, the idea of a subversion gateway intrigued me greatly. What better way to transparently serve South so people can still pull it using svn:externals while still developing in Mercurial? With that in mind, I started looking into Subversion's wire protocols and their delta format (svndiff) sometime yesterday afternoon.
After some digging, reading an obscure academic paper and liberal application of Wireshark, I grew confident enough that I could at least implement something. A day later, and I'd like to present the very first version of what I'm calling Heechee (if you get the pun, ten nerd points).
Heechee is a transparent mercurial-as-subversion gateway. It serves a Mercurial repository as a Subversion WebDAV-based repository. It's still in the early stages, but at the moment it will serve its own mercurial repository to subversion in such a way that you can check out the repository, and update to various revisions within it.
You can check it out at BitBucket. It's pretty alpha code, and make sure you have the dependencies mentioned in the README, but it works, which greatly surprises me. I plan to much improve the code to support more 'advanced' features, like being able to do more than checkout and update, as well as exposing tags and branches correctly. There's even the chance I'll stick Git support in, when I've had a play with Dulwich.
Still, hopefully I'll soon have it so it can serve South's code via svn, and thus restore harmony to my land of VCS users.
So, please, take the code and have a play with it. It's not formally licensed and released yet, but it will probably be Apache licensed. Feedback and suggestions for features, as well as how to linearise trees into svn histories, much welcomed!