Pet Peeve #77
It’s a one liner in any reasonable programming language to strip space characters. Even in java it’s just:
String strippedString = ccNumber.replaceAll( “ “, “”
)
How hard is that?
If you really want to make sure only 16 characters are entered on the client side, then do the right thing and put four text boxes next to one another and advance focus when the fourth number is typed into each one.
A Culture of Moral Hazard
The commercial ends with the first girl saying “By the way, you look hot in that car.”
Twenty years of outrageous moral hazard has sunk into the larger culture. It’s not just for big banks anymore!
We are about to discover just how valuable the frugality and modesty of traditional morality were. Debt expansion can only paper over moral rot for a few decades.
RapidWeaver 4
Looks much better functionality-wise (single click publishing... awesome) but the icons don’t really fit the programs “feel”
Doesn’t that just look too, erm, business-like for a mac-ish website builder?
_shrug_
If that’s the worst thing I have to say about this awesome software, I think they are doing OK.
EDIT: Yikes. I must have accidentally selected a different theme, because for a second my site looked like a bad Microsoft-branded box. All better now.
Contra Chesterton...
I see it all the time with programmers: a mediocre programmer who doesn't understand something starts attacking with nonsense-but-impenetrable jargon, in order to browbeat others into submission. My understanding is that whole literature departments are dedicated to analyzing this and claiming that all human discourse falls under this category. Generally, I'm inclined to dismiss them as anti-truth cranks, busy sawing at the bough upon which they sit. Still, with the banking system, I can't help but wonder if their thesis applies.
Post On Sorting
Keyboards: Microsoft 1, Apple 0

But it also sucks for any extended amount of typing.
The key travel is too shallow and it turns out that I really, really need a split keyboard to be comfortable. So I went with the same keyboard I have at work, except wireless, and with a funky mouse: the Natural Ergonomic Desktop 7000 from, drum roll, Microsoft.
I can't tell you how much better this keyboard is than Apples. As for the mouse, hey, at least it has a second button.
That Microsoft, of all companies, can produce kick-ass keyboards and Apple, of all companies, can't is one of God's better jokes.
New Post on DevBlog
http://guidewiredevelopment.wordpress.com/2008/04/20/gscript-java-4/
Good stuff.
Food Poisoning
I hesitate to recommend the place.
Words to live by...
It applies to software as much as it applies to banking, but with the sharp distinction that software, by and large, doesn't "require" a taxpayer bailout.
And I mean those quotes to sting.
Because I... oh, never mind.
New Post at the DevBlog
http://guidewiredevelopment.wordpress.com/2008/03/18/enhancements-in-gscript/
Pretty cool feature of GScript.
Yeah
Dynamic Languages are Wrong
Dynamic Languages
Are Just Wrong For 99% of All
Development
There has been a flurry of excitement over ruby and a
few other dynamically typed languages in the last few
years, driven mainly by rails on the server side and
javascript on the browser. Rails is a great project and
is far better for most websites than the J2EE stack,
but that unfortunately obscures the fact that the
language it is built on, ruby, while superior to Java
in many ways, just isn't the right thing for most
developers.
This is a relatively new opinion of mine. You can
see previous posts of mine where I'm very
enthusiastic about ruby. And, at some level, I'm
still enthusiastic about it. Many of the features
Ruby offers we've translated into GScript at
Guidewire and I'm forever in debt to it for that.
But that doesn't change the fact that I think it is
wrong for most developers.
In order to prove this somewhat ridiculous claim, I'll
compare what I consider the key features of ruby and
how GScript matches up in its statically typed world.
Terseness
Ruby is incredibly terse when compared with many
statically typed languages. As a motivating example, a
simple enterprise-y method definition might look like
this (Note: I
intentionally include an assignment to a local var in
order to contrast with GScript):
def employees_over_age( age )
emps = @employees.find_all { | e
| e.age >
age }
emps
end
Compare that with the five to ten lines of java you
would have to write to accomplish the same task, with
all the generics and types you would have to annotate.
I can't even bear to write it all out.
But let's look at the same function defined in GScript:
function employeesOverAge( age :
int ) :
Employee[] {
var emps = _employees.findAll( \ e
-> e.age >
age )
return emps
}
I'll admit, it is more code. But not a ton more and I
think most of the additional code is pretty reasonable:
you have to annotate in and out types at the method
level, which is good because you can restrict your
implementation details from leaking out of the method.
You have to put an explicit return statement in the
code which I actually find more readable. And you have
a slightly more verbose but also more consistent syntax
for blocks.
So ruby wins in terseness but GScript gets pretty
darned close even though it is statically typed.
Open Classes
Ruby
elegantly (or hackily, according to tastes) solves
another common problem: what if someone hasn't designed
a class to your liking, omitting an obvious method or
two, and you want to add this functionality to it. In
java, this has lead to a proliferation of *Util
classes: StringUtil, ObjectUtil, DateUtil, FileUtil,
etc. There are thousands of these util classes filled
with static methods floating around java code bases.
Some code bases are so large (*cough* Guidewire *cough*) that there are many multiple
different versions of these utility classes, often with
subtly different names.
In ruby, you
can simply add a method to a class like so:
class String
def my_method()
puts( "Holy Crap!!!
I've added a method to Strings!" )
end
end
These are referred
to as "Open Classes." Pretty neat, eh? Well, it's so
neat that we decided we needed something like that in
GScript, so we added something called Enhancements.
Here is an equivalent Enhancement:
enhancement
MyStrEnhancement : String
{
function myMethod() {
print( "Holy Crap!!!
I've added a method to Strings!")
}
}
Not bad, eh? And because GScript is statically typed
and because we provide an IDE for it, you will get very
nice code completion when you hit '.' after a string
object, with your shiny new method available and quite
discoverable.
So I think GScript actually wins here by a hair because
it formalizes the class extension mechanism in a new
language construct, but both are just about equivalent.
The point is that you don't need dynamic typing for
this very useful feature.
MetaProgramming
The really killer aspect of ruby and what lets rails
clean J2EE's clock in terms of ease-of-development is
the metaprogramming ability you have available. This
allows you to dynamically generate classes on the fly
based on, well, whatever you damned well please. This
is how ActiveRecord builds classes based on your
database schema, with no code-gen phase in the middle
to gunk up the works. You change the schema and,
*bam*, your class is updated.
It's hard to contrast this with GScript's alternative
in a succinct, blog-friendly way, but I'll try. GScript
has an "open" typesystem allowing anyone to implement a
TypeLoader and custom Types in java (which underlies
GScript.) That TypeLoader can construct its types based
on whatever metadata is wants to just like in ruby. At
Guidewire we use this feature to build type systems on
top of our web-UI files, on top of our
internationalization properties files and on top of our
OR layer, to name just a few. This allows GScript code
to access these resources in a typesafe way but without
any sort of a code-gen step.
GScript's Type System, therefore, is very flexible in
much the same way that Ruby's is: developers can
implement their API's in terms of types that they
create dynamically rather than statically, based on
whatever metadata they like.
An Anti-Feature:
DSLs
A lot of developers are excited about DSL's in ruby
that take advantage of the flexible nature of the ruby
langauge. I'm not sure they are such a good idea. I
think developers, on balance, would prefer to program
in one sufficiently powerful language. I would imagine
this is especially true in the enterprise space. I also
think language design is pretty difficult and putting a
bunch of people to work churning out specialized
languages wouldn't turn out as well as we might hope. I
think there may even be a biblical story about that
sort of thing.
Rather than domain specific languages, I think there
should be domain specific type systems: as I mentioned
above we have type systems for our web layer, our OR
layer, our permissions layer, etc. and it all works out
grand. You have access to all these resources in a
single language, GScript, presented in (one hopes) a
nice API shaped by the dynamically generated types of
the particular TypeLoader.
No new syntax to learn, just more libraries. Nice.
So Why Are Dynamic
Languages Wrong?
Really it boils down to two reasons: tools and static
verification. The first reason is far
more important than the
second one.
Being able to hit '.' and see what the hell you can do
with an object is priceless, particularly on larger
projects. I know some people say "don't get involved in
larger projects" but, well, sometimes it happens.
Refactor tools (yeah, yeah, SmallTalk, blah blah blah)
are far easier to implement correctly with statically
typed languages than dynamically typed languages. And
total-program analysis tools become possible. If the
syntactic and expressive price is low enough (and in
GScript, it is) then there is no reason to give up all
this functionality for a dynamic language.
Static verification has gotten a bit of a bad name
lately and we often joke at Guidewire that "well, it
compiled, it must be right." Still, when you are making
big changes and you have tens of thousands of tests to
run, it is really nice to have something relatively
fast (a compiler) point out things you have obviously
missed at compilation time rather than waiting to run a
series of test suites (even on our distributed testing
cluster, it often takes up to an hour to hear back
about every test after a checkin.)
But really, I could have stopped at '.'
Good code completion pretty much QED's the argument in
my book.
GScript...
Check it out.
GScript rocks.
Now that, my friends, is a Landcruiser
http://www.toyota.com.au/landcruiser-70-series
Interior:
The simple dash is very reminiscent of the 60-series dash. I love it.
Here is the troopy version:
and the wagon:
And finally the bobcat/truck:
Check out the available wood tray body!
Last but definitely not least, check out the wheels:
Old school.
Oh, and it has a V8 diesel that pulls 20 mpg.
I really, really, really wish Toyota would release the 70-series here. There isn't anything close to this sort of vehicle in the U.S. market other than the increasingly obese wrangler.
Broken Clock: Right Twice a Day!
One of the hard things in the rent-vs-buy calculation is that to do the calculation correctly, you have to make an assumption about the long-term appreciation of the home that you buy. This is why housing booms are self-reinforcing, even without a feckless central bank: as expected future returns increase, the NPV of houses increase, creating a self-fulfilling cycle. That, of course, is now being thrown into reverse: why would anyone throw a $50,000 deposit at housing when houses are going down in price? So a bank can eat that 50K while you ride the down cycle? Thanks, but no thanks.
Putting even further (and perhaps devestating) pressure on house prices will be Baby Boom demographics, as outlined here. The boomers have done a pretty good job of forward-shifting benefits (prescriptions, etc.) and back-shifting costs, but they are going to find that they are selling homes (and stocks) into a smaller market as they finance their retirement.
CALBEAR.org RELAUNCH!!!1!
But that's going to change now: I'm going to redo the site using RapidWeaver, a website builder for the mac. I've decided that I'm not a web-designer, and that I just don't want to keep up with the CSS chaos and cross-browser compatibility issues that come with maintaining a site by hand. I would rather use a normal editor for changing the site rather than emacs and some shell scripts. Also, I have to admit that the whole rails thing never really worked out as well as I had hoped for. I'm going to port over a lot of my old blog posts, many of which I disagree with now, just to provide some historical context.
I'm posting over at the Guidewire DevBlog and will probably cross-post stuff here as well.
