8.3 miles running yesterday (1 hour, 40 minutes)
35.3 miles biking today (2 hours)
Yeah, I know I’m slow compared to all you uber athletes out there. I’m just working with what I have
8.3 miles running yesterday (1 hour, 40 minutes)
35.3 miles biking today (2 hours)
Yeah, I know I’m slow compared to all you uber athletes out there. I’m just working with what I have
An interesting comment on estimation:
1. Nobody ever does it. In fact, I don’t even know of a process to achieve this. Hollering at people who over/under estimate is not an improvement process.
2. It assumes you can make developer estimates better. More experienced developers estimate better, that I’ll take as a given, but can you accelerate this with novice/junior developers or testers?…
3. Software is NOT like mechanical engineering. It is a craft. … So our inability to accurately and precisely estimate shouldn’t be all that surprising.
Personally, I believe that these claims are false.
Insightful commentary on the future of spam.
He (or She) is right - Spam-management is likely to be one of the critical priorities for the future, before the entire Internet crumbles under the tragedy-of-the-commons Spam assault.
There is one “ideal world” answer, which would essentially stop spam in every possible permutation - the use of micropayments.
Specifically:
I know, roll your eyes, micropayments are so played out. Well, I admit that they have been, and continue to be ahead of their time.
Every other solution I’ve heard proposed involves more complex Captchas. Captchas are a hurdle, but, by definition, not an insurmountable one (because they have to be simple enough for below-average humans to pass them). Spammers continue to develop ever-increasingly-sophisticated Turing Machines, and are probably on the cutting edge of some forms of pattern recognition/AI. Each time we come up with a test, the spammers will eventually beat it. Unless you believe that computers “can’t ever” be smart enough to pass the Turing test, you have to assume that no Captcha will stand forever.
Essentially, Captchas are like building a wall in front of a horde of oncoming Mongols. They will eventually get over it. Once over it, it becomes a useless bit of architecture.
Micropayments, on the other hand, create an economic cost for every attempt at communication. And for most people, who receive communications about as often (roughly) as they send them, this is no big deal. If I send out 10,000 messages next year, at $0.001/message, that will cost me $10. And if I receive 10,000 messages from other people, that will reward me with $10 in credits. If I am a big talker, perhaps I spend a few dollars a year to keep my account balance up. But the point is, I don’t spend so much money that it becomes economically meaningful to me.
Spammers, on the other hand, if they send out 10 million messages, are looking at $10,000 in expenses. That’s a lot more money, and not something that can be done “lightly”.
The biggest problem in all of this is the starting-up problem. No one wants to be first website to demand micropayments, and hassle their users with an extra sign-up step. But referring back to the article - that - the generalized willingness to setup a micropayment solution - is the shape of “Web 4.0″
Here’s how I think it could go down - Google, Yahoo, EBay, Amazon, Microsoft and various other major players hash out a protocol for micropayment transfers. Then, they license the protocol to other organizations to implement, with the rule that every licensee has to accept and reciprocate payments with every other licensee.
My next thought is that once money (yours, mine, etc) goes into the system, it can never come out again - the micropayment universe is essentially a financial black hole
- Why? To make it far less attractive as a target for hacking.
The Micropayment “Banks” would make money when you or I sign up our blogs to accept micropayments - a few dollars a year from a bunch of bloggers and smaller websites, a few more dollars from larger websites, etc, and you have a sustainable business model.
The Licensees would be obliged to keep their books transparent - how much cash they received, how much they received in micropayments from others, how much they gave out in micropayments. That might even be part of the overall software specification. Someone (or many someones) can audit the books of the various Micropayment Banks, and verify that all the flows check out - that no one is claiming more “micropayment credits” than they actually have to give out. Standard financial audits would verify that the money coming in to each organization was legitimate and clean.
This isn’t the most elegant solution in the world. Ideally there’s a solution that just involves the phrase “leave it up to the market”, but I can’t come up with one. That doesn’t mean it’s not out there…
Some feel that software products have to be essentially perfect in order to even have a ghost of a chance to succeed. People point to the iPhone and the iPod as examples of products that are practically perfect, down to the last detail, and are very successful.
Of course, one can point to a lot of counter-examples - projects that are less than perfect, but still quite successful (MySpace, Facebook, Google Mail, Google Docs, Twitter, etc). And, the huge pool of unknown projects - things that were never released because they could not achieve this desired perfection, and thus you are not even aware that they existed.
I think the gap here is the definition of “successful”. Some feel that a project is only successful if it has raving fans. Others focus on being useful to a lot of people, without worrying so much about perfection to the last detail.
I suspect (without statistical evidence) that you have the following kinds of results for projects that focus on perfection, vs. those that focus on “good enough”:


(Sorry the scale isn’t clear, the categories are “Never Released”, “Failure”, “Moderate Success” and “Huge Success”)
In reality, these scales are misleading, since the number of “Never Released” items is probably 10x as large (on both graphs). But in general, if you demand perfection, you have a slim increase in the chance that it will be a huge success, and a fairly significant increase in the chance that it will never be released.
Having said that, smooth functionality, elegant design and attention to detail are worthwhile. But they can be deceiving.
I gave up on Hani Sulemain when I realized that his modus operandi could be described in two steps:
Alas, the chickens have come home to roost, I guess.
There’s a certain sense of “insecurity” in Hani’s post. As if he’s suddenly lacking in confidence. After all, someone fully confident of their opinions wouldn’t care what others thought.   I find that surprising in someone who was once so self-assured he could shower hate down on Google Code.  Now it’s almost like he is tired of being beaten up and just wants people to leave him alone.
Sorry Hani - this is the life you chose when you first decided to call someone else an idiot in public for supporting something you thought was lame.
From a webpage about the book Higher Order Perl
 The other reason that the cover pictures are significant is that since my original goal in writing the programs was to impress my girlfriend, the cover pictures are therefore part of the output of the most successful Perl programs I’ve ever written. I wish all my programs achieved their design goals so spectacularly.
I tried that once - I had my wife write the last sentence of my first book for me. I thought it would be a great way to share the accomplishment with her.  Instead, she criticized my sentence structure and completely ruined the moment. Alas ![]()
Mathias is perplexed at the animosity against JSR 308 - he says (paraphrased):
and
speaking only for myself, I’ll respond with:
and
This is a classic and commonplace event in software - for various reasons, a wide swath of programmers are both very smart, and fairly OCD (Obsessive-Compulsive).  They learn a new technology, and obsessively abuse it, attempting to find ways to use it for every possible problem (see Maven2).  They’re not bad people, they’re just focused on using cutting-edge technology to solve problems, and become the proverbial man with a hammer who sees nails everywhere…
And so the likely result of JSR 308 is that we will end up with open source projects that are littered with cryptic and broken annotations that will be zealously guarded and protected by the chosen few, who see nothing wrong with adding incredibly convoluted new constructs to their program - after all, the code isn’t convoluted to them.  If mere mortals such as I struggle with comprehension, it just demonstrates how superior they are to me, no?
Groovy looks more attractive every day.
An excerpt:
       There once was a man who went to a computer trade show. Each day as
he entered, the man told the guard at the door:“I am a great thief, renowned for my feats of shoplifting. Be
forewarned, for this trade show shall not escape unplundered.”This speech disturbed the guard greatly, because there were millions
of dollars of computer equipment inside, so he watched the man
carefully. But the man merely wandered from booth to booth, humming
quietly to himself.When the man left, the guard took him aside and searched his clothes,
but nothing was to be found.On the next day of the trade show, the man returned and chided the
guard saying: “I escaped with a vast booty yesterday, but today will
be even better.” So the guard watched him ever more closely, but to
no avail.On the final day of the trade show, the guard could restrain his
curiosity no longer. “Sir Thief,” he said, “I am so perplexed, I
cannot live in peace. Please enlighten me. What is it that you are
stealing?”       The man smiled. “I am stealing ideas,” he said.
And another:
   A master was explaining the nature of Tao to one of his novices,
“The Tao is embodied in all software — regardless of how
       insignificant,” said the master.“Is the Tao in a hand-held calculator?” asked the novice.
“It is,” came the reply.
“Is the Tao in a video game?” continued the novice.
“It is even in a video game,” said the master.
“And is the Tao in the DOS for a personal computer?”
The master coughed and shifted his position slightly. “The lesson is
       over for today,” he said.
Most people, myself included, can be deluded into thinking that all the great discoveries happened long ago.  That, for the most part, we have everything figured out.
I suggest you read this article about memresistors.
Fact: This technology was theorized 30+ years ago, but not demonstrated until April 30th of this year.
Fact: One of the fundamental principles of electronic circuit theory was wrong. As wrong as claiming that Force == Mass * Velocity, instead of Force == Mass * Acceleration.
Fact: The evidence that this principle was incorrect was here all along, but buried and shoved aside as ‘hysteresis’
What, in your lives, is being ignored because it doesn’t fit theory?  Maybe you should be focusing on what theory doesn’t explain, instead of what it does.
Oh, and as an aside - this new technology is yet another recent innovation that will make computers faster, smaller and better. I have friends who claimed 10 years ago that we were already at the theoretical limits of computing and solar conversion efficiency and so forth.    But the world didn’t listen to them, kept innovating, and now-a-days it seems like we can’t go a month without some exciting new advancement in technology.
I haven’t seen this language before, but I’m certain as soon as we have a web framework for it, it will go mainstream.
Fair warning: The name is a swear word.
Next stop:  BF on Frails!
There really is a Stephen Colbert’s Tek Jannsen Adventures

I saw this icon on my plane flight back from Tampa.  I’m curious what the designer intended it to mean.  I came up with the following ideas:
Any others?
Regarding this story - Is there anybody out there?
Given all of these facts and estimates. How many Sun-like stars in the Milky Way?… Assuming 300 billion stars total, that’s 45 billion Sun-like stars. How many of these have planets?… About 10%, or 4.5 Billion. How many of those have planets in the habitable range? 1%, or 45 Million.
Yes folks, based on our latest understanding of the Milky Way galaxy, there are 45 million planets out there capable of supporting life.
Now, according to the initial article, only 0.01% of those will have intelligent life and civilization… That would mean there are “only” 4500 civilizations in the Milky Way galaxy.
(This cookbook assumes you know the basics about how to get started with Selenium RC. These examples are also in Java, but should be pretty much consistent for any language)
Finding text in a certain place on the page:
Use XPath, treating the HTML of your page as well-formed XML.
browser.getText("//div[@id='content']/table/*/tr[2]/td[1]“)
(In English: at any level of depth, find the div where the id=”content”. Then find the table element under that, and then give us the text of the first cell of the second row.)
Finding text anywhere on the page
browser.isTextPresent("Your Text Here");
Get the text of a URL link
Assuming you have text like: <a href=”…” > your link text here </a>, you could consider:
browser.getText("//a[@href='...']“);
Note the consistency with the other example above - anytime you have an opening and closing <element> </element> tag, you can use getText() and XPath to find it.
Get the href of a URL link
Again, assuming you have text like: <a href=”my_link_here” > your link text here </a>, you could consider:
browser.getAttribute("//a[1]/@href”);
which would return: my_link_here
Note the slight differences with getText() above, but the idea is generally the same.
How do I find what’s in my Select menu?
String[] options = browser.getSelectOptions(”//form//select”);
This would return an array of the option text from the only <select> element inside the only <form> element.
If you had more than one form, or more than one select:
String[] options = browser.getSelectOptions(”//form[1]//select[1]“);
This would return the options listed in the first select of the first form on the page.
From April, 2006 - Cedric Beust explains “Why Ruby on Rails won’t become mainstream”
Personally, I think he turned out dead wrong on this. If the AARP is building a large-scale software project in Ruby-on-Rails with the ongoing back-and-forth between Django and Rails, and the various efforts to “port” rails to other languages, I think it is hands-down a mainstream contender.
If Test-First Development (TFD) is a specialized subset of Test-Driven Development (TDD), then surely the equivalent specialized subset of Behavior-Driven Development is Behavior-First Development.
Today I had my first experience in developing BFD.
I know what you’re thinking: BFD.
But it’s a BFD to me. Using a rather exotic concoction of DBUnit, HSQLDB, Selenium, Cargo and EasyB, I was able to write a story to describe some new functionality for a web application, and run that story as a test (via EasyB/Groovy), before I wrote any of the code to implement the functionality.
Other ingredients in this concoction: Tomcat, Ant, Junit, Struts2, Spring, Cobertura and four or five different logging frameworks.
Observations:
I’m sure everyone else in the world found and mastered XPath Checker long ago, but for those of you who haven’t, it is a fantastic Add-on for Firefox that lets you practice XPath expressions on real, live web pages.
Why would you want to do that?ÂÂ
If you want to write Functional webapp tests via Selenium, a good, solid working knowledge of XPath is essentially mandatory for all but the most trivial of tests.
What about Selenium IDE?ÂÂ
The Selenium IDE is incredibly helpful for navigating your pages, but it is not help at all with testing the content on those pages.
In other words, if you want to register a new user, add four things to your cart, visit your recommendations page and then check out, Selenium IDE will properly structure your clicks and everything else.
But if you want to find out if your checkout page lists your four items, and you need to be specific about where on the page those items show up, you have to use XPath with Selenium to get to the correct table, div, what-have-you.
Enter XPath Checker. During your Selenium IDE-driven recording session, control-click on the page, and experiment with the correct XPath query to get to the cell/row/etc you want to see.
Hudson
Good Continuous Integration tool. Nice charts, easy to use, fairly flexible out of the box.  A _lot_ less setup work than CruiseControl. And the plugin system is well done, and pretty nifty.
Struts2
An incoherent mess. Documentation is spotty, uses a lot of contrived toy examples that blow up on anything more complex than hello world. Documentation is also simply wrong in some cases (for example, the ‘var’ attribute on the iterator tag is not valid according to the TLD). Namespaces are nice in theory, but frustrating in practice.  I can’t get the wildcard action management to work reliably, although this may just be pilot error.
Good things:ÂÂ
The integration with Spring is nice, and I haven’t seen a web framework yet that is more friendly to unit testing. When it works properly, the wildcarding is very nice.  The Action.execute() model is useful, and easy in concept.
An oldy, but a goody, one that I haven’t seen before.
One comment I saw recently was “it means ‘practices of the best’” - as in “the things that the best software developers/consultants do”.
I don’t find that argument particularly persuasive. For several reasons:
So while I think it is an interesting concept (practices of the best), I can’t acept that interpretation as being any more valid than “the best way to solve this problem”.