ziggy's Journal http://use.perl.org/~ziggy/journal/ ziggy's use Perl Journal en-us use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners. 2012-01-25T01:58:55+00:00 pudge pudge@perl.org Technology hourly 1 1970-01-01T00:00+00:00 ziggy's Journal http://use.perl.org/images/topics/useperl.gif http://use.perl.org/~ziggy/journal/ On Cobol http://use.perl.org/~ziggy/journal/31478?from=rss <blockquote><div><p> <i> According to Gartner, [...] there are 250 billion lines of COBOL source code being used, with 15 billion new lines each year. A major AAA national company has some 35,000 COBOL modules plus supporting COPY books and so on in its inventory. A major airlines has 848 COBOL modules in its crew management system with some 3,000,000+ SLOC of code. Merrill-Lynch runs 70 percent of its daily business on COBOL systems. </i> </p><p> via <a href="http://www.ddj.com/blog/portal/archives/2006/10/cobol_and_then.html">DDJ</a> </p></div> </blockquote><p> Those numbers are quite staggering, and quite believable. </p> ziggy 2006-11-01T22:21:00+00:00 journal News from Suse/Novell http://use.perl.org/~ziggy/journal/31326?from=rss <p> From the truth-is-stranger-than-fiction department: </p><blockquote><div><p> <i> Novell is changing the file system software used by default in its Suse Linux operating system, aligning with rival Red Hat and moving away from a project whose future has become entangled with the fate of a murder suspect. </i> </p></div> </blockquote><p> That leader from <a href="http://news.com.com/Novell+makes+file-storage+software+shift/2100-1016_3-6125509.html">news.com</a> pretty much summarizes the story. Other relevant details: Suse is moving away from ReiserFS and adopting ext3 due to "customer demand". </p> ziggy 2006-10-16T00:47:56+00:00 journal More from Steve Yegge http://use.perl.org/~ziggy/journal/31251?from=rss <p> From <a href="http://steve-yegge.blogspot.com/2006/10/egomania-itself.html">this followup</a> to <a href="http://steve-yegge.blogspot.com/2006/09/good-agile-bad-agile_27.html">Good Agile, Bad Agile</a>: </p><blockquote><div><p> <i> If you want real supporting evidence, you should construct the scientific kind, using experiments. Yes, I'm afraid that means looking at the failures too. Ouch! So bad for marketing. <b>Whenever you hear Agile people asking around for "success stories", remind them politely that only looking at the positives is pseudoscience.</b> </i> </p></div> </blockquote><p> (emphasis added) </p><p> My only response: <tt>s/Agile//;</tt> </p> ziggy 2006-10-07T22:34:09+00:00 journal More on Perl and XML http://use.perl.org/~ziggy/journal/31231?from=rss <p> As I mentioned in my <a href="http://use.perl.org/~ziggy/journal/31230">previous post</a>, using XML to avoid writing a parser is a <i>bad</i> thing to do. </p><p> This reminds me of a conversation I had with <a href="http://use.perl.org/~gnat/">gnat</a> many years ago. He asked why Perl was always lagging behind in its XML support, since Java was all over XML, and everything was moving over to XML faster than light speed. My response was that perhaps this was just a sign that Perl doesn't need bleeding edge XML support because Perl isn't used in the places where everything is moving to XML. </p><p> At the surface, that explanation seems right. Perl has always been strongly associated with system administration, and system administration is one of those domains that's XML hostile. (and for good reason; where's the benefit?) Perl is also very good at slicing and dicing raw text (like log files, random bits of malformed HTML, <tt>nm</tt> output, whatever), so it doesn't need everything shoved into an XML format just to avoid writing a parser or using a regex. </p><p> Now, ~6 years later, the answer is clearer. Perl doesn't cleave tightly to XML because it doesn't need to. </p><p> If you look at how XML is abused as a means to avoid writing a parser, one of the most common abuses is as a means to add a measure of dynamism to languages like Java. Perl doesn't need to do that, because it's a dynamic language. Need to extend a class with a new method? Just do it. No need to implement a forrest of classes just to use XML to pick one and reconfigure it on the fly. </p><p> Another common XML abuse: serialization. If you have no natural means of representing data, XML is as good as anything. More readable ASN.1 or other binary representations. Not as terse or as clear as JSON or YAML. But if you have a natural way evaluate expressions (like, say, <tt>eval</tt>), then all that's necessary is a module to serialize data in a manner that plugs into the evaluator (like, say <tt>Data::Dumper</tt>). Sure, this is a means of using <tt>eval</tt> to avoid writing a parser, but doesn't require using XML just to avoid writing a parser. (This may not be a bad thing; Lispers have done this for decades.) </p><p> So, Perl and XML aren't joined at the hip simply because they don't need to be. </p> ziggy 2006-10-06T01:47:31+00:00 journal Some skills are just necessary http://use.perl.org/~ziggy/journal/31230?from=rss <p> Allen Holub is <a href="http://www.sdtimes.com/printArticle/column-20060901-05.html">ranting</a> about using XML as a programming language: </p><blockquote><div><p> <i> Knowing how to build a compiler is certainly one of the skills on this need-to-know list. Compilers are fundamental to what we do every day as a programmer. Knowing how the compiler works will let you make intelligent decisions about program structure, decisions that have real impact on the quality of our programs. More to the point, most programs have to parse input (either from a human being or from a machine) and make sense of it. To do that, you have to build a small compiler. Corrupting XML for this purpose, simply because you happen to have an XML parser lying around, is inappropriate at best. </i> </p><p> <i> Basically, you&#8217;re selfishly making your life easier at an enormous cost to everyone else. For every hour you save, you&#8217;re subjecting every one of your users to many hours of needless grappling with overly complex, hard-to-learn, hard-to-maintain, impossible-to-read, XML-based garbage. This is no way to make friends and influence people. </i> </p></div> </blockquote><p> There are lots of good examples where XML is the perfect tool, and many, many examples where XML is just an easy way to avoid writing a parser. And there are many XML languages that scream poorly-designed-vocabulary-design-to-simplify-implementations. </p><p> Of course, parsing and compiling aren't the only skills a programmer needs to know. At <tt>$WORK</tt>, we're looking at database validation -- auditing a database to prove that all referenced records are present, and all records are referenced properly. (This is above and beyond the guarantees that referential integrity can enforce.) The process sounds complex, up until you realize that it's just a mark-sweep garbage collector, more or less. </p><p> Computer Science degrees may seem like a bunch of BS at the time, but they're actually quite necessary. You never know when you're going to walk into a problem that has a textbook solution. </p> ziggy 2006-10-06T01:18:22+00:00 journal Shared Nothing is in your future http://use.perl.org/~ziggy/journal/31211?from=rss <p> The writing is on the wall - <a href="http://patricklogan.blogspot.com/2006/09/im-isolationist-you-probably-are-too.html">shared-nothing systems</a> are in your future: </p><blockquote><div><p> <i> Let's be clear that the JVM has been lurching toward a shared-nothing model already for well over five years. </i> </p><p> <i> The servlet model, the EJB model, the Jini model... these are all in various ways attempting to provide semi-shared-nothing models so we can each contribute our own isolated parts to the whole. Unfortunately they're each anachronistic, one-off, partial solutions. JSR 121 is attempting to make this even more general for all kinds of pojo scenarios. </i> </p><p> <i> Given the isolation model that just comes for free with Erlang, the vast majority of the complexity and variation of these lurches toward isolation for Java would just go away. (Erlang itself has a *little* cruft but that's nitpicking.) </i> </p></div> </blockquote><p> Haskell pushes you in this direction, because "shared nothing" is the default state; making a multithreaded program is somewhat easy, and making a shared memory multithreaded system actually takes a decent amount of effort and wizardry. PHP also pushes developers into a "shared nothing" model, which is rather telling. </p><p> Even if Erlang <i>isn't</i> in your future, chances are that lessons from Erlang <i>are</i> in your future. There's something to be said for high performance, highly scalable systems that are ready for massively multiprocessor (and multi-node) systems. </p> ziggy 2006-10-03T23:39:38+00:00 journal HOP in Action http://use.perl.org/~ziggy/journal/31210?from=rss <p>MJD has <a href="http://newbabe.pobox.com/~mjd/blog/prog/isc-hop.html">two examples</a> how the principles he outlines in <a href="http://hop.perl.plover.com/">Higher Order Perl</a> are needed in the real world.</p><p>Of course he's a little biased, but the examples are screaming out for (a) iteration over a lazy list, and (b) extracting a socket I/O pattern from repetitive code, and using a closure generator to connect a generic server to a simple function to manage requests.</p><p>(OK, the second example is a mouthful to describe, but the intent is to separate the wizardly bits from the mundane application code, and it succeeds admirably in that regard.)</p> ziggy 2006-10-03T22:40:42+00:00 journal Lisp is dying. Film at 2300 http://use.perl.org/~ziggy/journal/31144?from=rss <p> Continuing on the same <a href="http://use.perl.org/~ziggy/journal/31118">theme</a> as earlier this week: </p><blockquote><div><p> <i> Before Paul Graham, Lisp was dying. It really was, and let's not get all sentimental or anything; it's just common sense. A language is always either gaining or losing ground, and Lisp was losing ground all through the 1990s. Then PG came along with his "I'm not talking to you if you're over 26 years old" essays, each a giant slap in our collective face, and everyone sat up and paid attention to him in a hurry. And a TON of people started looking very seriously at Lisp. </i> </p><p> <i> Lisp might or might not have experienced a revival without Paul's essays, but it's moot: he showed up, and Lisp got real popular, real fast. And then he said: "Don't use it!" Sort of. I mean, that's effectively what he said, isn't it? By deciding to pre-announce Arc, he Microsofted Lisp. Killed it with vaporware. It's a great strategy when you're an evil empire. I don't think that's exactly what Paul had in mind, but let's face it: that's what happened. </i> </p></div> </blockquote><p> (From Steve Yegge's essay, <a href="http://steve-yegge.blogspot.com/2006/04/lisp-is-not-acceptable-lisp.html">Lisp is not an acceptable Lisp</a>.) </p><p> Or, to be totally blunt, Perl6 may be taking a loooooong time before it is finally released, but it's moving ahead at mach 6 compared to Arc.<nobr> <wbr></nobr>:-) </p> ziggy 2006-09-28T03:04:21+00:00 journal Ovid, and Coding Standards http://use.perl.org/~ziggy/journal/31143?from=rss <p> Over at O'Reillynet, Ovid <a href="http://www.oreillynet.com/onlamp/blog/2006/09/sue_the_bards.html">blogs</a>: </p><blockquote><div><p> <i> The first big problem comes in defining &#8220;standard practices&#8221;. Any Perl code which doesn&#8217;t run under taint mode is immediately suspect. Buffer overflows using untrusted data should not be tolerated. Home brewed encryption? Out. [...] But there are problems there. Any of the aforementioned &#8220;issues&#8221; could potentially be defended. Someone has to be the first person to try a new encryption method. Also, there are too many other areas where standard practices is a terribly ephemeral thing. It&#8217;s not a problem easily solved. </i> </p></div> </blockquote><p> Sorry, Ovid, but you're using a strawman to tear down your main point. Which, from a rhetorical perspective, is rather odd. </p><p> The problem <i>does</i> boil down to defining standard practices. Anyone who violates those standard practices, either out of malice, negligence or ignorance, is guilty of malpractice. Period. </p><p> There is <b>no</b> loophole for homebrewed encryption. There is <b>no</b> loophole for being the first to use a brand new encryption algorithm. And this loophole cannot be used as proof by induction that any new endeavor needs an excemption from the strictures of good practice. </p><p> Why? Because cryptography is a branch of information theory, which is a branch of mathematics. If you set forth to build a new encryption system, you need to follow the rigorous mathematical practices for designing encryption, not the lackadasical hacking process of running rot13 over a stream of input an even number of times and declaring it "encrypted". </p><p> In fact, Phil Zimmerman of PGP fame did this a few times before he sat down with a cryptographer, who showed him exactly how weak his homebrewed encryption schemes were. So Phil gave up and just did a plain old public key cryptography system. Ignoring the body of work on strong crypto systems would have been malpractice out of ignorance. </p><p> Similarly, when NIST was poking around for something to replace DES, they didn't throw a half dozen homebrewed algorithms against the wall and hope for the best. The used the best practices for developing crypto algorithms (publishing papers, formulating attacks, detailed proofs, etc.), and determined that AES was good because it was provably strong enough to replace DES for the next few years. </p><p>&nbsp;</p><p> So there are <b>no</b> loopholes when it comes to enforcing good practice. When Robert Jarvik developed the artificial heart, he didn't get a free pass from his medical responsibilities because no one had built an artificial heart before. Instead, he was still bound by his ethical obligations as a physician before experimenting on a human subject. </p><p> The same thing goes for other licensed professions, like engineers and lawyers. </p><p> The difference between licensed professions and software developers is that there is no agreed "standard body of practice" to draw from, nor is there "best standard practice" that practitioners must uphold, or be found guilty of malpractice. For example, what exactly belongs in the "standard body of practice"? Database design? Stored procedures? Race conditions? Taint mode? Class hierarchy design? Design pattern abuse? Secure data handling? Good crypto? Dropping permissions? Numerical analysis? Testing? </p><p> Is that list complete? Is it all taught in a 4-year degree program? Reliably? </p><p> Are software developers certified against that body of practice? Do we sit for the equivalent of a bar exam, medical boards, or engineering certifications? </p><p> Until we have a consensus view on <b>all</b> of these issues <i>as an industry</i>, any talk of software malpractice is premature at best, misleading and distracting at worst. </p><p> <tt>&lt;/rant&gt;</tt> </p> ziggy 2006-09-28T02:20:35+00:00 journal Tcl is dead. Film at 2300. http://use.perl.org/~ziggy/journal/31118?from=rss <p> From <a href="http://groups.google.com/group/comp.lang.tcl/browse_thread/thread/a9ff5bd741ee1635/a0ca1bd1b865e137">comp.lang.tcl</a>: </p><blockquote><div><p> <i> Newbie: Hi! I'm in computer science at the local university. My grandfather told me that I should learn Tcl and Tk because it'll allow me to do all kinds of cool stuff. But when I mention that to my friends at school, they all laugh at me and tell me that Tcl is totally obsolete and for losers. Now I'm worried! Is Tcl dying out? </i> </p><p> <i> Jeff sighs, and picks up a desk calendar from the shelf behind him. He looks down, quietly says "right on time", and puts a big check mark next to a handwritten note on the current day. He then makes another entry on the calendar three months later. </i> </p></div> </blockquote><p> That would be funnier if <tt>s/Tcl( and Tk)?/Perl/g;</tt> weren't also true.</p> ziggy 2006-09-25T18:13:51+00:00 journal The Safety-in-Numbers School of Software Design http://use.perl.org/~ziggy/journal/30841?from=rss <p> Joel's <a href="http://www.joelonsoftware.com/items/2006/09/01.html">latest essay</a> on writing big enterprisey apps boils down to two pieces of advice: </p><blockquote><div><p> <i> The safe answer, for the Big Enterprisy Thing where you have no interest in being on the cutting edge, is C#, Java, PHP, or Python, since there's so much evidence that when it comes right down to it zillions of people are building huge business-critical things in those languages and while they may have problems, they're not life-threatening problems. </i></p></div> </blockquote><p> That, and anything other than those four choices for a platform are "unsafe". So pick whichever <i>one</i> you are most familiar with, and run with it. And, if you really want to try Ruby on Rails, do it in your dorm room, where it doesn't matter when you fail to scale up.<nobr> <wbr></nobr>:-) </p><p> Of course, you know the drill by now. Insult Rails on a high profile blog, expect an immediate <a href="http://www.loudthinking.com/arc/000596.html">response from DHH</a> pointing out exactly where your arguments are categorically wrong because, as we all know, Rails is the best thing ever done with a piece of software.<nobr> <wbr></nobr>:-) </p><p> For my money, both Joel and DHH miss the point entirely. It's not about picking the popular tools that the corporate developer lemmings have blessed as safe. It's not about taking throwing PhD's into a room, giving them Lisp, and expecting great things. And it's not about the war between static and dynamic languages, dumb vs. crafty frameworks, or convention vs. configuration. </p><p> It's about understanding the problem, understanding the tools, and building an appropriate solution. </p><p> If you take Joel's argument at face value (and that's all it is, a philosophical statement devoid of data or a provable hypothesis), and look back 10-15 years ago, you'll find you have an argument in favor of the status quo: large, mission critical apps running on DOS/Win3.11 + Netware, written in dBase, FoxPro, Clipper, or their ilk. These tools were simply not up to the job, yet as demonstrated by countless unnamed "enterprise" projects, they were suitable for any big enterprisey project. </p><p> Yet these were the worst kinds of tools for these jobs. Or, rather, these weren't the tools you really wanted to solve these problems, but they were the best that was available for the slow, underpowered machines of the day. And they sucked. And everyone knew they sucked. </p><p> What was the answer? Move away from DOS, move towards Windows (3.x), and client/server programming environments. Brand new and obviously better solutions like SQLWindows, PowerBuilder, Visual Basic, and I forget what else. (Even Smalltalk was a contender for a small number of projects as well.) And if you didn't want to risk an unproven language, an unproven RDBMS, an unproven vendor on a big important project, there was always C and C++ on big iron Unix boxes working with CORBA ORBs. Or, if you were really daring, C++ on Windows with COM (soon to be new and improved, once 32-bit Windows stabilizes). </p><p> But were <i>any</i> of those choices the answer? No, not a one of them. (Except VB, which, when adopted widely, wasn't the same language or environment as the anemic offering available for Windows 3.x.) </p><p> The lesson here is that the solution blessed by masses of corporate lemmings, isn't always the right one, and the obviously better pitched by Vendors Who Know isn't necessarily the right solution either. </p><p> It turns out that the right solution here was the web. And it took a decade to discover, adopt, figure out how to write webapps, and wait for the browsers to be debugged enough. Once everything was in place, we all could move away from the slow, buggy, kludgy, enterprisey development projects that really weren't as solid as they needed to be, and start talking about more fundemental problems, like how to <a href="http://mag-sol.com/talks/yapc/2006/advdb/">model your data properly</a>. </p> ziggy 2006-09-01T16:53:10+00:00 journal You can't speed time http://use.perl.org/~ziggy/journal/30771?from=rss <p> <a href="http://www.norvig.com/">Peter Norvig</a> gave a <a href="http://www.norvig.com/speech.html">commencement speech</a> at the Berkeley CS Commencement earlier this year. In his speech, the tells a story of a friend of his who, many years ago, attempted to isolate the chemical that makes aged whiskey taste so good. Given that isolate, it should be possible to add it to young whiskey, and skip oak aging entirely, yet still produce something drinkable. </p><p> This friend did isolate the compound. And, as expected, it made young whiskey taste good. </p><p> The next step? Scale up. Procure a 55-gallon drum of the special sauce and start making 5 year old whiskey in a few weeks. </p><p> But there was a slight flaw in their master plan. The vendor could not provide a 55 gallon drum of this special ingredient. Why? </p><blockquote><div><p> <i> we regret that we can not fill your order because we are currently low on stock and, as I'm sure you know, to produce this chemical we need to age it in oak casks for five years. </i></p></div> </blockquote> ziggy 2006-08-28T01:16:47+00:00 journal The Tidal Wave Cometh! http://use.perl.org/~ziggy/journal/30501?from=rss <p>Eighteen months ago, Audrey was looking for something challenging and started writing <a href="http://www.pugscode.org/">pugs</a> in Haskell. After the first three weeks, were nearly every day brought a blog post like "<i>Today was the most productive day of the pugs project ever! I doubled the number of features again!</i>", lots of people started to notice. Not only notice Audrey and pugs, but also Haskell.</p><p>I noticed. Which is why when I was presented a project (for a previous employer) around the same time, for a parser with an unknown set of requirements and constraints, Haskell sounded like the way to go. Indeed, it was; once I got my bearings, my ability to modify the code outstripped the ability of managers to add/change/contradict requirements. In fact, it was not uncommon to spend 1-2 hours in a meeting with 3-8 people discussing a feature that took ~15 minutes to revise/implement.</p><p>Fast forward to last week, when I presented a tutorial at OSCon entitled <a href="http://conferences.oreillynet.com/cs/os2006/view/e_sess/8898">Introduction to Haskell</a>. Based on the feedback from attendees, it went over pretty well.</p><p>Fast forward to today, when Joel Spolsky writes about <a href="http://www.joelonsoftware.com/items/2006/08/01.html">basic functional programming practices</a>, using JavaScript for his examples. (Nothing that you haven't seen already in Dominus' <a href="http://hop.perl.plover.com/">HOP</a>. What you don't have a copy? Why not?)</p><p>At this rate*, by 2010 (2015 at the latest), all programming languages that <i>aren't</i> functional will be obsolete; the only kinds of jobs that will be open will be for functional programming, and the only kinds of people in the market will also be functional programmers.</p><p>Functional Programming. Not just for eggheads anymore.</p><p><small><br>*: This is the same logic that noticed a sustained annual 10x increase in Perl monger groups by early 1999, and predicted that there would be more Perl mongers groups than people on the planet by 2006/2007.<br></small></p> ziggy 2006-08-01T19:48:55+00:00 journal Best SF EVER! http://use.perl.org/~ziggy/journal/30385?from=rss <p>del.icio.us/popular is pointing to some <a href="http://www.phobosweb.com/features/100books/top100index.html">random list of the 100 best SF Books EVER!</a>.</p><p>The problem with this or any 100 best list is that the listing and ordering is totally random. Many of the books listed here are certainly among the 100 best SF books, but their relative rankings are totally out of whack. Some are darn good, but don't belong on a 100 best list. Others are classic SF, but not in the top 10, or much better than the lower 50.</p><p>All of which leads me to conclude that the world's best (and perhaps only) algorithm for creating a 100 best list is this: take a whole mess of candidates, throw them into a blender, do <i>not</i> put the top on, and see what sticks to the wall when you turn it on. Order the resulting mess from top to bottom, left to right.</p> ziggy 2006-07-23T00:24:02+00:00 journal Dear NSA http://use.perl.org/~ziggy/journal/29667?from=rss <p><a href="http://www.dearnsa.com/">Dear NSA</a>,</p><p>My wife does <b>not</b> wear a size 12. And she prefers blue things with <a href="http://www.gemstone.org/gem-by-gem/english/sapphire.html">a little more sparkle</a>.</p><p>Your filters are a tad misconfigured. Please make a note of it.</p><p>Thanks,</p><p>Me.</p> ziggy 2006-05-21T19:45:28+00:00 journal End of an Era -- at Sun http://use.perl.org/~ziggy/journal/29441?from=rss <p> The NYT <a href="http://www.nytimes.com/2006/04/25/technology/25sun.html?ex=1303617600&amp;en=fcf6cdb8f33ee043&amp;ei=5088&amp;partner=rssnyt&amp;emc=rss">sez</a>: </p><blockquote><div><p> <i> Sun Microsystems said Monday that Scott G. McNealy, one of its founders, was stepping aside after 22 years as chief executive, an era in which Sun helped establish the dominance of the microprocessor chip in corporate computing. </i></p></div> </blockquote><p> They got their facts straight, but the hyperbole is way off. McNealy did a great deal for Sun and for corporate computing. But will he have "helped established the dominance of the microprocessor" etched on his gravestone? I think not. Cirque du Soleil is among the leaders in promotions of acrobatic performance art, but no one is praising the ticket taker or popcorn salesman as "helping establish the popularity of acrobatics" or any such nonsense. </p><p> Sure, praise the man. He deserves it. But don't claim he invented the internet, cured cancer, or solved the halting problem. Sheesh! </p> ziggy 2006-04-25T14:18:51+00:00 journal More funny spam.... http://use.perl.org/~ziggy/journal/29400?from=rss <p> From the if-you-send-me-something-stupid-I'll-probably-post-it file: </p><blockquote><div><p> <tt>From: "U.S Embassy." &lt;us.embassy7@gmail.com&gt;<br>To: some.finnish.dude@hut.fi<br>Subject: Congratulations from U.S Embassy.<br> <br>U.S Consulate General<br>387 Wichayanond Road<br>Chiang Mai 50300,Thailand<br> <br>Dear client,<br> <br>Congratulations,you have been selected as one of the lucky winners of the US VISA through our internet email extracting and screening machine,your application was applied and processed by our internet email extracting and screening machine which randomly extracts and scans millions of email adresses across the world.<br> <br>This Special visa&nbsp; programme is new and was innovated by the US embassy in Kuala lumpur Malaysia last year november.The US Consulate in Chiang Mai launched the programme this year november,the programme is designed to be held every year&nbsp; ending.The aim and objectives of the programme is to give free visas to citizens of&nbsp; developing countries around the world to enable them&nbsp; travel to the US and start a new life and work.The Chiang Mai consulate released 12 visas in this regards and hopes to increase the visa number to 24 by late next year,you are among the 12 lucky people that won the visa and among the 5 foreigners that won the visa,7 visas were won by Thai nationals.<br> <br>...</tt></p></div> </blockquote><p> Just what I always wanted. A visa to visit the USA! </p> ziggy 2006-04-21T13:42:34+00:00 journal Rumors revisited http://use.perl.org/~ziggy/journal/29301?from=rss <p> Scouring through my old journal entries, I found <a href="http://use.perl.org/~ziggy/journal/9173">this</a> interesting tidbit, via the ever-accurate and reliable MacRumors: </p><blockquote><div><p> <i> What about rumors of OS X on Intel? <br> Marklar is even more of a going concern than ever. Contrary to circulating rumors, it is not meant to be a Power PC exit strategy. Rather, it is intended to be offered to X86 users when Apple sees market conditions being fit for it. What it means by this is regarding Intel's Lagrande technology, and Microsoft's Palladium technology. Apple intends on releasing OS X on Intel, when consumer dissatisfaction falls to an all time low for Microsoft when users become restricted to what they can do on their PC's due to Lagrande and Palladium. Likely it will be released in the event that Microsoft chooses to stop developing for the Mac platform altogether. </i></p></div> </blockquote><p> Not an exit strategy. Waiting for Palladium and <a href="http://www.intel.com/technology/security/">Lagrande</a>. Massive amount of dissatisfaction directed towards Microsoft from the PC community. Waiting for Microsoft to leave the Mac platform. Hm..... </p><p> Pretty impressive batting average: 0 for 4. The only thing that was true in that rumor was that Marklar <i>was</i> a going concern.<nobr> <wbr></nobr>:-) </p> ziggy 2006-04-12T16:19:41+00:00 journal Chef's Shenanagans http://use.perl.org/~ziggy/journal/29074?from=rss Forget what you heard about Isaac Hayes leaving South Park. He's Back! (<a href="http://www.washingtonpost.com/wp-dyn/content/article/2006/03/21/AR2006032101213.html">sorta</a>) ziggy 2006-03-22T18:41:06+00:00 journal Origami http://use.perl.org/~ziggy/journal/28934?from=rss <p> It's 03.09.06 (in American terms at least), so it's time for Microsoft to unveil it's super-sekrit "Project Origami". All signs point to a new Newton, updated for the 21st Century -- a wireless Windows device the size of a DVD case that's both computer and general purpose media device. </p><p> The <a href="http://www.nytimes.com/2006/03/09/technology/09tablet.html?ex=1299560400&amp;en=afab1ee1acc06e6f&amp;ei=5088&amp;partner=rssnyt&amp;emc=rss">early press</a> is in, and isn't very flattering: </p><blockquote><div><p> <i> Andy Brown, an analyst in London with IDC, a research firm, said "converged devices" like Samsung's Q1 faced an uphill battle to win over consumers, who are more likely to favor traditional laptops with keyboards or tiny MP3 players than dual-purpose machines. </i> </p><p> <i> "The growth prospects are not really strong," he said. "The main problem for most is that they fall in between what consumers are looking for." </i> </p></div> </blockquote><p> If you really want Origami, go look for <a href="http://www.langorigami.com/">the real thing</a>. (Hint: the <a href="http://www.astc.org/exhibitions/flipit/iflipit.htm">travelling exhibition</a> is currently in Boca Raton, FL until April 30 2006.) </p> ziggy 2006-03-09T15:22:19+00:00 journal News on ADHD http://use.perl.org/~ziggy/journal/28908?from=rss <p> <a href="http://www.nytimes.com/2006/03/07/health/07essa.html?ex=1299387600&amp;en=9dcf8f5bfd7a6a40&amp;ei=5088&amp;partner=rssnyt&amp;emc=rss">This just in</a> from the New York Times: </p><blockquote><div><p> <i> Essentially, A.D.H.D. is a problem dealing with the menial work of daily life, the tedium involved in many school situations and 9-to-5 jobs. </i></p></div> </blockquote><p> So, the problem isn't the 5-15% of the population that can't focus without their daily recommended dose of Focusin, but the 5-15% of the population that has the ominous sounding, complementary problem, <i>attention surplus disorder</i>. Those nimrods (or do I mean "we nimrods"?) are quite happy working in a knowledge based economy that requires deep focus for prolonged periods of time. Everyone else is just fidgety because they haven't found those few things they like to focus on (until they are medicated to make them differently abnormal). </p> ziggy 2006-03-07T16:56:54+00:00 journal Donations and Open Source http://use.perl.org/~ziggy/journal/28836?from=rss <p>A few people have been posting questions to the SQLite mailing list about how to make a cash donation to the project. Here is D.&nbsp;Richard&nbsp;Hipp's response:</p><blockquote><div><p> <i>There is no mechanism set up to "donate" to SQLite as there<br>is with other open-source projects. If you want to donate<br>something, please make a donation in honor of SQLite to a<br>charity of your choice.<br></i></p></div> </blockquote><p>A good idea, simply put. One more reason to admire this gentleman.</p> ziggy 2006-03-01T19:14:15+00:00 journal Windows is Hazardous to your Work http://use.perl.org/~ziggy/journal/28828?from=rss <p>Here is an incident from <tt>$WORK</tt> that happens at least once a month these days. It's very annoying.</p><p>It starts when the network admin staff sends an email that they will be pushing a Windows patch to all desktop machines in a few days. That's not horrible. Every networked system has some security holes somewhere that need to be patched (once the patches are available). And at least Windows admins can automate installation so we never have to repeat the visit-every-PC-in-the-building process that was too common in the mid 90s.</p><p>And, yes, while Windows sucks eggs, it meets the four minimum criteria that any operating system <b>must</b> meet before being work ready:</p><ul><li>Runs Firefox</li><li>Runs an email client</li><li>Runs ssh, and lets me connect to a real development machine</li><li>Lets me put <a href="http://www.flickr.com/photos/adamturoff/8774335/in/set-219307/">pretty pictures</a> on my desktop.</li></ul><p>The next step is when the patches are installed, usually at noon, a couple of days after the warning email was sent out.</p><p>The next step is the helpful dialog box that alerts me that the machine must be rebooted. If I do nothing, the machine will automagically reboot in 12 hours (and counting). This dialog pops up periodically to remind me I really <i>need</i> to reboot, and presents me two buttons: hide and reboot. (The default button is Hide, thankfully enough.)</p><p>Now that the machine has been updated, and the reboot countdown started, the "you must reboot" dialog box, once hidden, will reappear at random intervals throughout the rest of the afternoon. Just to be extra thoughtful, this dialog always pops up on top of all other open windows.</p><p>Of course, the very next thing that happens, after being hidden for some random interval of time, the dialog pops up on top of all other windows, while you just happen to be typing the letter <tt>r</tt>. Naturally, you must be ready to reboot. Forget the fact that you have a dozen windows open and various tests and unsaved work in Firefox.</p><p>In user interface design circles, this is known as being "as useful as a rusty nail in the eye." Sheesh!</p><p>This feature alone is sufficient cause to use any other operating system that meets the four criteria listed above to do Real Work at the office.</p> ziggy 2006-03-01T03:54:25+00:00 journal Nancy Typing http://use.perl.org/~ziggy/journal/28795?from=rss <p> We all know about <a href="http://en.wikipedia.org/wiki/Duck_typing">Duck Typing</a> (if it walks like a duck, and talks like a duck, then it's probably a duck). Works fine most of the time with dynamic objects (in Perl, Ruby, Python, etc.). Also used as a defense against big up front static compilation regimes (in C++, Java, etc.) that claim to help you from making type errors by catching them early (but actually give you more stuff to type, since you're always using casts to turn off the type checks every line or three).</p><p> Dave Herman has a <a href="http://calculist.blogspot.com/2006/02/nancy-typing.html">new take</a> on the situation - Nancy typing. In typical lispnik fashion, Dave is picking on Perl's DWIMery in this example:</p><blockquote><div><p> <i> In some cases, the heuristics for conversion are arguably relatively clear, but sometimes the language is so eager to find some way to make the operation consistent rather than simply give an error (and force the programmer to be more explicit) that extremely bizarre and unpredictable behavior ensues. [...]</i> </p><p> <i>[E]very once in a while, the system reported a false positive[...]. And it just so happened that in each one of these cases, the name in the record was "Nancy." The explanation is that the programmer had accidentally used the numeric equality operation, rather than string equality. </i> </p></div> </blockquote><p> Yep. "Every" name numifies to 0, except for Nancy, who numifies to NAN. Everyone is thus numerically equivalent to everyone else, except for Nancy, who is numerically equivalent to no one (including herself). </p><p> Whoops. That's a, um, rather <i>interesting</i> form of silent failure. If you're wearing your Lispy hat today, you can extrapolate this into a proof that duck typing fails thanks to dear old Nancy. </p><p> The rest of you can take this opportunity to add dear old Nancy to your smoke tests.<nobr> <wbr></nobr>:-) </p><p> <b>Update</b>: This bug exists in 5.6.0/5.6.1, but is fixed as of 5.8.0. So you can either worry about Nancy, or just upgrade to a reasonable version of Perl.<nobr> <wbr></nobr>:-) </p> ziggy 2006-02-24T17:42:47+00:00 journal Normal Forms http://use.perl.org/~ziggy/journal/28747?from=rss <p>A quick cheat-sheet on the various forms of <a href="http://en.wikipedia.org/wiki/First_normal_form">database normalization</a></p><p><a href="http://en.wikipedia.org/wiki/First_normal_form#First_normal_form">First Normal Form</a> (1NF): No multivalued fields. Example: No such column like <i>programming_languages_used</i> containing the value <i>Perl, C</i>. Similarly, a tuple like <i>project; programming_language_1; programming_language_2</i> is also avoided.</p><p><a href="http://en.wikipedia.org/wiki/First_normal_form#Second_normal_form">Second Normal Form</a> (2NF): A unique key identifies each tuple value (row) in each relation (table).</p><p><a href="http://en.wikipedia.org/wiki/First_normal_form#Third_normal_form">Third Normal Form</a> (<a href="http://en.wikipedia.org/wiki/Third_normal_form">3NF</a>): Data is not duplicated across relations (tables). Example: store customer information and order information separately; do not repeat customer information across a table of users, orders, wishlists, shopping carts, etc.</p><p><a href="http://en.wikipedia.org/wiki/First_normal_form#Fourth_normal_form">Fourth Normal Form</a> (4NF): No complicated multivalue dependencies. Example: if an employee may have one or more certifications, and a may attend one or more training classes, store these relationships separately. A tuple that combines employee_id, certification_id, and training_class_id is bad. Instead, two tuples should be stored, one relating employee_id to certification_id, and one relating employee_id to training_class_id.</p><p><a href="http://en.wikipedia.org/wiki/First_normal_form#Fifth_normal_form">Fifth Normal Form</a> (5NF): All joins are in 4NF. (See example for details, implications for duplicate elimination, and associated benefits.)</p><p><a href="http://en.wikipedia.org/wiki/First_normal_form#Sixth_normal_form">Sixth Normal Form</a> (6NF): A database in 5NF that extends 5NF characteristics into a temporal dimension. Possible example: a data warehouse that archives activity quarterly, and gathers the current quarter's activity along with the most recent previous 3 quarters of archived activity to produce a set of results over the last 12 months.</p> ziggy 2006-02-20T18:57:36+00:00 journal Of Apples and Windows http://use.perl.org/~ziggy/journal/28715?from=rss <p>This week's <a href="http://www.oreillynet.com/mac/blog/2006/02/will_apple_adopt_windows_no_my.html">parlor game</a> is refuting John C. Dvorak's <a href="http://www.pcmag.com/article2/0,1895,1927885,00.asp">innane commentary</a> that Apple may dump OS X and just switch to Windows on their shiny white hardware.</p><p>Here are a few points to keep in mind.</p><ul> <li>This entire discussion is entirely pointless.</li><li>Dvorak needs to keep up his street cred. The easiest thing to do is insult the Cult of Mac, which ultimately result in a web-wide "debate" on the topic. Net result: proof that Dvorak isn't dead, as witnessed by his ever-increasing Google Juice.</li><li>Apple already considered dumping its OS for Windows once already. Then they talked to Jean-Louis Gasee, and then to Steve Jobs. The rest is history</li><li>MacSlash had an <a href="http://macslash.org/article.pl?sid=06/02/06/1654252">article</a> recently describing the economics behind developing desktop computers. The components are all commodities now, and if you want competitive prices for desktop computers, you need to deal in terms of those commodities. Everything else (like PPC) is dead, except for boutique (non-desktop) applications.</li><li>Over the long term, it'll all meld together seamlessly, anyway, but not in a way we can accurately predict or visualize today. It's all just software. There's value to be found in Windows apps, *NIX apps, and OS X apps; once the technical barriers are surmountable, and the economic opportunity is within reach, it'll all Just Happen.</li></ul><p>We now return you to your regularly scheduled Friday Morning armchair quaterbacking.<nobr> <wbr></nobr>:-)</p> ziggy 2006-02-17T16:12:35+00:00 journal Solving the Unsolvable http://use.perl.org/~ziggy/journal/28681?from=rss <p>If you had a <a href="http://www.microsoft.com/">multi-billion dollar software company</a>, where would you spend your research money?</p><p>Why, <a href="http://research.microsoft.com/terminator/">solving the termination problem</a>, of course! (Actually, if you read the <a href="http://research.microsoft.com/terminator/faq.htm">fine print</a>, the project isn't attempting to actually solve the termination problem, just solve it most of the time.)</p><p>Oh, and they're <a href="http://thread.gmane.org/gmane.comp.lang.caml.general/32204">hiring</a>. Brainiacs only, please.<nobr> <wbr></nobr>;-)</p> ziggy 2006-02-14T16:01:29+00:00 journal OracleDB http://use.perl.org/~ziggy/journal/28680?from=rss <p>It's official. Oracle has <a href="http://www.oracle.com/corporate/press/2006_feb/sleepycat.html">purchased</a> Sleepycat, makers of BerkeleyDB.</p><p>(I wonder what other open source databases are left for Oracle to buy...)</p> ziggy 2006-02-14T15:42:39+00:00 journal Macs, PPC and x86 http://use.perl.org/~ziggy/journal/28610?from=rss <p>MacSlash has an <a href="http://macslash.org/article.pl?sid=06/02/06/1654252">analysis</a> of the underlying factors that forced Apple to pull the covers off of <a href="http://www.apple.com/imac/">Project Marklar</a>.</p><p>The long and short of it is that Motorola's business is focused on CPUs for embedded systems (which need low power consumption more than they need more MHz or GFLOPs), and IBM's CPU business is quickly migrating towards game consoles (where Apple's demands are a drop in the bucket, compared to what Nintendo, the XBox and Playstation gobble up).</p><p>In the end, if Apple is in the business of building desktops, laptops and servers, it needs a CPU manufacturer that's aligned to those markets. Which leaves two vendors and one platform: x86.</p><p>Interestingly, Microsoft's actions to use a 3-core PPC from IBM for the XBox may have accelerated the demise of the Apple/IBM relationship. Surely this will surface soon among the conspiracy-minded Mac faithful, but realistically, it's just an indication that the high tech is a rat's nest of relationships, where everyone is simultaneously your closest partner and fiercest rival.</p> ziggy 2006-02-07T15:53:49+00:00 journal Standards and Regexes http://use.perl.org/~ziggy/journal/28327?from=rss <p>I'm working on a project of a certain vintage, and of a certain age, that uses upwards of five programming languages to get stuff done. Annoying, but nowhere near uncommon. (There's a <a href="http://www.jroller.com/page/slava?entry=the_hotspot_source_code_is">story</a> about how JScheme is included in the JDK sources, because the code to generate CORBA classes for Java are written in Scheme...)</p><p>Luckily for me, I had a feature to add that traces through most of those languages all at once: Haskell <tt>-&gt; </tt> Tcl <tt>-&gt; </tt> XSLT <tt>-&gt; </tt> Tcl. (The Perly bits form the backend system, not the frontend runtime components.) Thankfully, it was a simple fix: add wordbreak barriers around a regex being output from a Haskell program and sent upstream to heaven knows where.</p><p>Should be simple, right? Just replace <tt>"..."</tt> with <tt>"\\b(...)\\b"</tt>, or some variant thereof. Easy peasy.</p><p>Except that the <tt>\b</tt> metacharacter is Perl syntax, and the regex isn't going to be processed by Perl. At one point, I though that this regex was going to be processed by a component written in C, using the GNU Regex library. Turns out that Perl, GNU Regex and PCRE all agree that <tt>\b</tt> is a word boundary. (POSIX regexes don't appear to know what a word boundary is...)</p><p>Yet none of the standard regex magic was working. Tracing through the code, I discovered that Tcl's regex engine was the one being used (by way of XSLT; about as convenient as a direct flight from Sydney to New York by way of Mars).</p><p>Looking over Tcl's regex docs, it turns out that <tt>\b</tt> is a <b>backspace character</b>!</p><p>Because matching backspace characters is <i>such</i> a common operation within a regex, Tcl preserves the C-style escape for <tt>\b</tt>, and uses <tt>\y</tt> for word boundaries.</p><p><b>WHAT ON EARTH WERE THEY THINKING?</b></p> ziggy 2006-01-12T16:42:17+00:00 journal