What's That Noise?! [Ian Kallen's Weblog]

20050115 Saturday January 15, 2005

Booting linux in single user mode Today, we had to bring up a Debian host in single-user mode and it didn't want to cooperate. Note to self:
Next time LILO doesn't want to stop for a boot prompt, hold down the shift key to force to stop for a prompt.

I don't know if that's a Debian default or something, but it's really annoying that something special is required to get a boot prompt.

( Jan 15 2005, 11:03:22 PM PST ) Permalink View blog reactions


20050112 Wednesday January 12, 2005

Jack of All Trades I thought I was pretty broadly skilled with my work spanning software engineering, network and systems operations, some DBA-duties and variety of other do-it-cause-it-needs-to-be-done endeavors.

Well here's a something funny: Chef and Missile Treaty Compliance Inspector. Yea, this is an actual job that is posted right now:

Job Description: Responsible (sharing duties with one other chef) for the preparation of three daily meals (brunch & dinner only on Sundays) for approximately 20-25 personnel at remote, self-contained site in Russia. Duties include menu planning, food ordering & resupply, inventory management, kitchen maintenance and sanitation and catering support to infrequent special functions on and offsite. As treaty monitor, may occasionally operate the On-Site Continuous Monitoring System in accordance with official START treaty missile inspections at Votkinsk.
Where can you sign up? HotJobs (what do you mean by "hot"?). I took the liberty of mirroring the job ad, since I'm not really familiar with the lifecycle of job ads posted there. I thought it was good enough to keep!

If that's not your cup-of-tea, Technorati has some great jobs open right now. Most of them don't even require you to

walk, cross-country ski, or walk with snowshoes, a distance of 2.5 - 3 miles without rest in all seasons, including winter temperatures as low as -20 degrees Fahrenheit
nor
shoveling sidewalks and building entrances and digging out snow around satellite dish area and other equipment
Not that there's anything wrong with that.

( Jan 12 2005, 12:58:23 AM PST ) Permalink View blog reactions


20050110 Monday January 10, 2005

Eclipse and iTunes Something's really goofy with my Powerbook!

If I'm listening to iTunes and then starting working in Eclipse, I get static popping and scratching in my ears. It hurts! It sucks! It just isn't right! Is this Apple's way of telling me they don't want me to develop code with Eclipse?

I'm marching over to MacWorld to protest!

( Jan 10 2005, 02:29:46 PM PST ) Permalink View blog reactions


20050108 Saturday January 08, 2005

Developer Contests Over the last few weeks I've been paying more attention to the API's that blog and taggregator services offer. I've also starting looking more into the API's that blog tools offer.

The Technorati Developer's Contest results are in. I was especially impressed with the visualization effort by Michael Dale'sTechnorati Touchgraph application. While it is a little rough around the edges in places (some of the implementation's PITA'ness is just AWT and crapplets being what they are), these kinds of graphical renderings of the Technorati cosmography are really great. Wondering now if anybody has tried something like this with Macromedia Flash, hmm....

If anybody is entering the Blojsom Developer Contest and wants help with the Technorati API, there's a Java client in the SDK and I'd be happy to lend assistance with it.

( Jan 08 2005, 12:04:12 PM PST ) Permalink View blog reactions


Managing Multi-Timezone Conference Calls I'm ringmastering a project that requires coordination with parties near and far. Most of the coordination for these kinds of things functions well with email, IM, wiki and CVS. But sometimes a plain-old conference call is in order.

Getting all of the parties lined with

It turns out that FreeConference.com offers tools for all of this for, well as the name implies, free. They make money up-selling premium services but I've got my first conference call with parties in three timezones setup through them and haven't paid a dime for it (which BTW, is their cost-per-minute-per-connection to have the dial-in number be an 800 number); I'll find out how it goes next week!

( Jan 08 2005, 10:26:54 AM PST ) Permalink View blog reactions


20050103 Monday January 03, 2005

PHP and mod_perl w/mysql breakage on Mac OS X I'm working with code in PHP, Perl and Java that all have to access MySQL. I haven't had any problem using PHP configured "--with-mysql" and mod_perl with DBD::mysql on Linux but on Mac OS X, it just doesn't work.

My setup is: Mac OS X (Panther) with Perl 5.8.1, MySQL (v4.0.17) installed with Fink. Apache (v1.3.31) was compiled with both mod_perl and PHP. When I deployed a mod_perl module that connected to MySQL, the connections always failed with this error:

DBI connect('bjorkdb;port=3306','hamster',...) failed: Protocol mismatch. Server Version = 0 Client Version = 10 at ...
which was really confounding because the connections in other runtime contexts were fine. I double checked to make sure I didn't have multiple libmysqlclient's around or additional Perl installations. All of that checked out.

I recompiled Apache without PHP and everything works great. So my conclusion is that something funky happens on Mac OS X when linking libmysqlclient. Looks like I'll have to keep another set of Apache binaries around should the need to run PHP locally recur, otherwise I'll just stick to the compile that has mod_perl but not PHP.

( Jan 03 2005, 12:01:11 AM PST ) Permalink View blog reactions


20050102 Sunday January 02, 2005

In Every Season: Turn, Turn, Turn I still feel a small sense of propriety for things I've worked on in the past. Even way in the past. Even when not an inkling of anything I'd worked on back then is likely to have survived any of the incarnations since then. On the other hand, I'm probably doing better than my friends whose efforts over the years completely dot-bombed-in-flames. I guess this is the time of year when I mark the time by life's events (including gigs) and reflect.

Hearing talk of Gamespot's decline (for me, Gamespot.com was a gig that started nine years ago and ended three later), like "Gamespot going down hill" is kinduva bummer. I was concerned when I read of Scott Rosenberg's book break but a lot of the fine folks I have fond memories of at Salon (four years ago) are still there and doing a great job! And like myself, a lot of folks that I worked with over the years have moved on to work on and accomplish great and interesting things, so it's all good.

OK, reflection time is over now.

Thankfully, I really dig what I'm doing now! Happy 2005 to all of my friends and colleagues past and present!

( Jan 02 2005, 11:02:38 AM PST ) Permalink View blog reactions


20050101 Saturday January 01, 2005

The Top Tsunami Sites I did a little digging around and found some of the top sites for relief information, reactions, pictures and videos of Sunday's Tsunami.

The South-East Asia Earthquake and Tsunami Blog
On going coverage of relief news, publications and other linkable resources
Tsunami Relief
Google's thumnail list of relief organizations
QuickBird Images of Tsunami Sites
Stunning satellite photos with before and after shots of Sri Lanka and Indonesia
Cheese and Crackers: Tsunami Video
Tons of links to amateur video's from the region that capture the power and immensity of the tsunami
Blog
I can't read Japanese but people that do are reading this a lot
Raw Print | Westboro Baptist Tsunami Statement
Those Kansas right-wing nutjobs (ya know, the "god hates fags" zealots) are at it again with their Sodom and Gomorrah crap. "Thank God for Tsunami. Thank God for 3,000 dead Americans!" Wow, you'd think the pastor at Westboro Baptist Church is really Osama Bin Laden. More and more, I think that seceding from the union sounds like a good idea.
Support UNICEF's Tsunami Relief Efforts
Ya know, it's for the kids. $50, $100, $250, $500 or any amount you can give will make a difference.
Network for Good :: Help Support Disaster Relief in Southeast Asia
A good collection of emergency response and on-going relief organizations. Certainly there must be one for you.
CNN.com - Aid groups accepting donations for victims
Who says that big media has no soul? They care too!
MoveOn.org: Tsunami Relief
The Bush administration stepped forward first with $15M, then $35M and today brought it up to $350M. MoveOn's petition says
President Bush and Congress must offer whatever assistance is necessary to prevent further human suffering in the wake of the tsunami disaster.
I arrived at this list with some simple pokes at the data coming through at Technorati, I might try to spiff this up a little bit and turn it into a feature.

( Jan 01 2005, 03:51:00 AM PST ) Permalink View blog reactions


20041231 Friday December 31, 2004

Pictorial Fallout Seems like there are no events without photostreams anymore.

Here are some from last night's fiesta and after party that followed Scobleizer's Technorati visit.

( Dec 31 2004, 12:49:48 PM PST ) Permalink View blog reactions


Hey 2004, don't let the door hit you on the butt on your way out! I have a lot of things to be thankful for this past year. However, 2004 brought on a sufficient number of painful kicks-in-the-teeth, I say good riddance!

The bad stuff has been damn bad:

But there was good stuff too:

Wishing for a good 2005!

( Dec 31 2004, 10:56:36 AM PST ) Permalink View blog reactions


20041230 Thursday December 30, 2004

New Years Resolutions I have a number of personal, professional, creative and spiritual objectives, but I won't chunk them into specific intervals or milestones. At least not here and now. So for next year, I'll keep it simple: I resolve to help make the world a better place than it was last year.

That's my new years resolution.

( Dec 30 2004, 02:13:30 PM PST ) Permalink View blog reactions


20041225 Saturday December 25, 2004

Hasta La Vista, mod_perl - Hola mod_parrot! While I've become more fond of running my application outside of the webserver (i.e. using mod_jk2 to wire Tomcat to Apache is my preferred modus operandi these days), mod_perl will always have a place in my heart; I'm actually writing a mod_perl handler for a simple web application right now.

Well, I'm painfully aware of how mod_perl is getting long in the tooth. So I was pleased to read of mod_parrot. While it's probably going to be a while before I get a chance to mess with Perl 6 and Parrot (or even Python and Parrot), I'm hopeful that mod_parrot will provide high productivity with application with modernized programming facilities in the future.

Oh, by the way, Happy Festivas!

( Dec 25 2004, 05:39:09 PM PST ) Permalink View blog reactions


20041224 Friday December 24, 2004

Learning to say kaddish Recent reading: Living a Year of Kaddish

One of the things rattling around my mind these days is grief. I recently listened to my dad, aunts and uncles eulogize my recently departed grandfather at his burial service in New Jersey. It's given me plenty to think about as far as what I knew of him on both a first and second hand basis. Growing up on a coast opposite of his, my knowledge of him has been the product of the fleeting visits and the lore passed on by my parents. But I'll always be fond of the interest he took in my goings about, the twinkle in his eye that sparked when he engaged in conversation with me and some of his funny little habits like cutting an article out of the newspaper for some anticipated future reference that would never take place.

The traditional grieving process has a number of rituals and practices that are vaguely familiar but only by hearing or reading of them. I've not before been proximate to these traditions but my grandfather's passing has produced an interest in them. So I picked up Living a Year of Kaddish by Ari Goldman to learn a little more about it. The book consists of a succession of short thought recordings (even blog-like, as it doesn't read like a diary) of the year that followed the death of Goldman's father. The traditional purpose of kaddish, a daily prayer for the deceased (preferably three times a day), is to help the loved one get closer to and eventually arrive at gan eden (paradise). Saying kaddish for eleven months and then on the death anniversary (yahrtzeit) is an obligation of the children but is also a prayer for all who grieve. At least, that's my understanding of it and my knowledge is nominal with these things. But I have to say that Goldman's take on it, that the purpose of kaddish is more inward looking, resonates with me more.

To me, kaddish is more for the living than for the dead. I believe that in my daily recitation of the prayer, I was coming to terms with who my father was and who I am. If I missed a day of kaddish, I suffered, not my father.
When I die, I want my children to say kaddish for me, but for themselves, too.
Indeed, I've been thinking a lot about who my grandfather was, who his eldest son, my father is and who I am. And what will my children know of my father and myself in the years ahead. There is much to consider. I previously didn't know the kaddish prayer but I'm taking the time to learn it now.

( Dec 24 2004, 03:31:40 PM PST ) Permalink View blog reactions


20041221 Tuesday December 21, 2004

Rigorous Operations, Agile Development When it comes to software development, I generally eschew rigorous planning. I prefer to take a defined set of use cases, ascertain that they are the important ones and develop tests and code to fullfill them -- no design documents, no architecture documents and no UML diagrams unless they're helping me think through the data model and call stacks (i.e. sequence diagrams).

The recent colo move that I worked on all last weekend with my cohorts at Technorati was a good demonstration where rigor pays off: operations. Physically moving an entire network requires shared knowledge of complex network systems, detailed resource allocation and troubleshooting contingencies amidst a maze of dependencies requires rigorous documentation, planning and coordination. My hats off to Matt, David, Aaron, Bill and Adam for rising to the occasion and kicking butt. It's been an honor and a pleasure, gentlemen.

I'm in New Mexico for a spell, hoping to take a side trip up to Ski Santa Fe to get a lil bit o' frozen bliss.

( Dec 21 2004, 04:35:58 PM PST ) Permalink View blog reactions


20041218 Saturday December 18, 2004

Rollin' rollin' rollin', keep them servers rollin' Technorati's entire infrastructure was brought down this morning in order to move it.

Here's the flickr tag to follow it.

No ETA on service restoration but I'll post updates where possible.

( Dec 18 2004, 03:01:57 PM PST ) Permalink View blog reactions


PHP's mbstring is a 2 bit thief Normally, PHP's strlen function reports back the number of bytes in a string. When dealing with western characters, that will equal to the number characters as well. However, strange things can happen when PHP's mbstring extension for multi-byte character support is enabled to alias that function.

If you have mbstring.func_overload configured to alias mb_strlen for strlen (i.e. when the 2 bit is flipped), then strlen starts counting characters, not bytes. If you need to count the number of bytes, it's not obvious how you're supposed to do it.

This is how I did it:
In places where I really needed to know the number of bytes, I used a homebrewed function byte_count instead strlen. Here's the function definition for byte_count.

     function byte_count($val) {  
         $len = (function_exists('mb_strlen')) ? 
             mb_strlen($val, 'latin1') :
             strlen($val);
         return $len;
     }

Perl is hokey about it too. The length is supposed to count the number of characters but if you want to force it to count bytes, you need to use the bytes pragma. From the manpage:

           $x = chr(400);
           print "Length is ", length $x, "\n";     # "Length is 1"
           printf "Contents are %vd\n", $x;         # "Contents are 400"
           {
               use bytes;
               print "Length is ", length $x, "\n"; # "Length is 2"
               printf "Contents are %vd\n", $x;     # "Contents are 198.144"
           }

Java is not without it's pickiness but it as least it has byte and char as distinct primitives.

( Dec 18 2004, 12:50:23 AM PST ) Permalink View blog reactions


20041215 Wednesday December 15, 2004

Tool to defeat a DOS against an Apache server farm Throttling the number of requests that come in to a single web server instance isn't rocket science but it requires keeping track of a state shared amongst processes/threads. But how would you efficiently throttle requests that come to a set of servers?

Apparently, there's some Apache goodness available for this now. At least I think it sounds good! Ian Holsman has written mod_ip_count for Apache 2.0. It uses the APR portability layer and memcached for shared state (actually apr_memcache from Paul Querna). This would enable a whole server farm to keep track of request rates from and throttle specific IP addresses.

( Dec 15 2004, 04:24:13 PM PST ) Permalink View blog reactions


20041214 Tuesday December 14, 2004

Greener Pastures

This weekend Technorati's network and server infrastructure is going to move. In one big fell swoop. Well, hopefully nothing will fall.

The home page sez: "Movin' on up" cause Technorati is substituting the Jefferson's theme song for the old ops/facilities anthem, the Talking Heads' "Burning Down The House"

( Dec 14 2004, 12:47:43 AM PST ) Permalink View blog reactions


20041212 Sunday December 12, 2004

l10n development practices I've used Java's handy-dandy ResourceBundles to do some proof-of-concept localizations. But my past proofs were limited; they only used other European languages that utilized ISO-8859-1 characters. I don't recall having to do anything special with the property files in those cases.

Working on a recent Japanese localization project was an eye opening experience. It turns out the java.util.Properties expects ISO-8859-1 characters. I guess that's the downside of having a super-simple file format. I got the localized display boostrapped by using native2ascii to get the UTF-8 localization text rendered as escaped unicode. On a one-off basis, that's easy enough. But collaborative development always begs the tools question, how do folks typically manage this?

What about input encoding? If there's an HTML form on a page and the input has multibyte characters in the query string (or POST data), are characters escaped to ISO-8859-1? My recollection was that HTTP headers must be ISO-8859-1.... but looking at the docs for PHP's mbstring and the encoding_translation parameter, it looks like server-side handling of the request needs to account for other character set encodings. Do browsers honor charset specification as a form attribute, like

<form action=... method=... accept-charset="UTF-8">
(looks like Struts supports this) or is it presumed that the browser always escapes unicode? Or perhaps they simply URL encode the characters so it's a non-issue? On the server side the must the request handling do this
request.setCharacterEncoding("UTF-8");
String raw = request.getParameter("foo");
String clean = new String(raw.getBytes("ISO-8859-1"), "UTF-8");
or is it all supposed to transparently just work (obviating String cleansing) if request.setCharacterEncoding("UTF-8") is used? ...for all of the hand-waving in the docs for ResourceBundle, etc establishing a clear practice for input String handling in a webapp remains murky.

As far as sending responses, is it safe to always just send UTF-8 and include "charset=UTF-8" in the Content-type header? Is it standard practice to presume that the client will send a request header Accept-Charset (which indicates what an acceptable response is)? If they send it and UTF-8 isn't on the list, must the server go through a big String re-writing exercise to encode response to the browser's preference or is UTF-8 presumed to be implicitly acceptable at all times?

So many questions... I'm still digging for anwers.

( Dec 12 2004, 11:51:01 PM PST ) Permalink View blog reactions


20041207 Tuesday December 07, 2004

Runtime inseration of struts tiles in Velocity I've been impressed with TilesTool, it comes in the Velocity Tools package. It runs Velocity views through the struts MVC machine for processing reusable "subviews". However, there's no support for runtime insertion of components!

You can do this in tiles-defs.xml

   <definition name=".dog" extends=".animal.layout">
     <put name="body"    value=".dog.display" /> 
     <put name="head"    value=".dog.head" /> 
   </definition>
   <definition name=".cosmos.head" extends=".head">
     <put name="titleKey" value="dog.title" />
   </definition>
   <definition name=".dog.display" 
     controllerUrl="/dog.do"
     path="/tile/dog.vm"
     />
and so forth. Declaritive tile composition works just fine. But what about programmatic composition at runtime?

With JSTL and struts, I can do this:

<c:forEach var="bit" items="${kibble}">
  <tiles:insert page="/tile/bark.jsp">
    <tiles:put name="bit" beanName="bit" />
  </tiles:insert>
</c:forEach>
I would imagine that the Velocity equivalent would look like this:
<ol>
#foreach ($bit in $kibble)
 $tiles.put("/tile/bark.vm", { "bit" : $bit })
#end
</ol>
but alas, it's not implemented by TilesTool. I can work around this by moving "bark.vm" to its own velocimacro but that it fugly as hell. I would prefer parameterized components.

( Dec 07 2004, 06:53:07 AM PST ) Permalink View blog reactions


20041206 Monday December 06, 2004

Servlet container forward from inside Velocity I ported some JSP UI code to Velocity, it's been fun learning the Velocity paradigm (being able to cleanly process template components outside the container rocks). One of the things in the JSP UI handled forwarding requests that bypassed the struts controller back through struts.

In JSP with struts tags, it looks like this (assume web.xml has "struts-logic" mapped):

<%@ taglib uri="struts-logic" prefix="logic" %>
<logic:redirect forward="home"/>
But what about Velocity? Well, it turns out that the VelocityViewServlet stuffs the basic servlet container things into the Velocity context, much like JSTL does in JSPville. Ergo, the $request object itself can be invoked like this:
$request.getRequestDispatcher("/home.do").forward($request,$response)
Seems kinda grotty to not be able to use struts symbolic name, but so far that's where my read of the Velocity docs has taken me. As I unpeel the onion, I may be inspired to subclass the VelocityViewServlet as a StrutsViewServlet... it seems like however you're invoking the rendering, you should be able to access, if present, other runtime services such as struts, spring, etc. ( Dec 06 2004, 10:05:35 AM PST ) Permalink View blog reactions


20041205 Sunday December 05, 2004

memcached in a service oriented functionality ecosystem Among my efforts over recent months have been those focused on decoupling. Technorati has a very high update rate as it taps the ping streams, fetches update contents, analyzes links and keyword indexes the substance of posts in the blogsphere. Such a system doesn't work well when components are closely coupled; the availability of the whole system is subject to the whim of the system's weakest links. Often, weaknesses are combinatorial; the weakness of the whole is greater than the weakness of the parts. That's what I'm focused on undoing. Fixing weaknesses in the components is important but decoupling them first is more so.

When folks say "service oriented architecture" it still cannotes monolithicism to me. An architecture implies a level of structure definition that sounds rigid; can you re-pour that foundation to adapt redrawn plans? Software development agility and loose coupling should reinforce each other. I prefer to think of architectures and ecosystems. A service oriented functionality ecosystem supplies application functionality as a suite of services. Supporting requirements (as opposed to the core business requirements) such security, logging, persistence, redundancy and caching are each handled independently; they in turn may be provisioned as services that higher level services rely on. This is part of the evolution under way at Technorati; some of the changes are evident in Dave's recent posts but some are just revisions that we're quietly rolling out.

Queues and distributed memory caches are natural elements of a such an environment. In the December issue of Linux Journal, Technorati's use of open source building blocks such as memcached is discussed by Doc Searls.

This is the game:
A memcached server (or a set of servers) can be accessed over the network to store things in a table kept in RAM. When storing things, you can specify a maximum age for the cache entry -- if you go back to fetch it and the elapsed time since it was stored exceeds that age, it gets treated as a cache miss.

Storing things in memcached with the timeout parameter and invalidating cache entries works as long as you have consistent mechanism for calculating the key. If internally you're managing "stories" and each one has an "id" attribute that is unique (a primary key), that's a good candidate to store them with. So for instance putting memcache inside a content management system (CMS) "content service" seems natural. In babytalk code:

  public Story fetchStory(int storyId) {
      Story story = memc.get(storyId);
      if (story == null) // perhaps more rigorous validation of the fetched object
          return story;
      story = StoryDB.findById(storyId);
      memc.put(storyId, story, AGE);
      return(story);
  }

If it's difficult to determine whether something is new or an update because it doesn't have an id and uniqueness is determined by some combination of attributes, then the lookup cycle can be helped by caching with composite keys. It gets a little more complicated:
  public Story fetchStory(Map atts) {
      // encapulate whatever attributes uniquely identify a thing
      CacheKey key = new CacheKey(attrs); 
      Story story = memc.get(key);
      if (story == null) 
          return story;
      story = StoryDB.findByAttrs(attrs);
      memc.put(key, story, AGE);
      return(story);
  }

We're in the process of evolving Technorati's infrastructure to one that is loosely coupled, redundant and robust. Our use of memcached is one of the enabling technologies of that evolution.

( Dec 05 2004, 09:22:23 AM PST ) Permalink View blog reactions


20041123 Tuesday November 23, 2004

Adding a file system hierarchy into a CVS module I had a whole bunch of code that needed to added to a CVS repository. Normally with just a new directory or two and a few files, doing "cvs add" for each one is no big deal. But when there's a whole file system hierarchy that can be a real PITA. This is where "cvs import" comes in handy.

I usually only use "cvs import" to create a new CVS module but it can also be used to do a "bulk add." Maybe it's common knowledge for CVS jockies but it's easy to forget about unless oft-used. Here's the scenario:

There, that's a lot easier than individually adding directories and files.

( Nov 23 2004, 11:09:35 AM PST ) Permalink View blog reactions


20041119 Friday November 19, 2004

Editing Perl with Eclipse and EPIC I've been bouncing between development in Perl and Java a lot this, two languages that I both love and loath at various times. One of the things that I love about developing in Java is using Eclipse. This week I decided to give the Eclipse support for Perl a spin. Well, I'll be saving my love for the Java support.

The only gripe I've heard about Eclipse that I haven't had a good answer for is the absense of Emacs key bindings. Otherwise, what's there not to dig about Eclipse?

Dollar costs
zilch
Support for refactoring
renaming and changing method signatures, moving them around... all with dependent references kept in tact
Extracting interfaces
OK, that falls under refactoring but worthy of its own mention
Source and javadoc stub automation
Spontaneous method stub creation, constructor and accessor creation, javadoc stubs
Test case generation and running
JUnit and ant awareness, yum
Syntactical and semantic error highlighting
Fixing errors early and often is easy cause they're usually obvious

I was hopefull that the EPIC plugin would provide at least some of those things for Perl development. This is what I found:

OK, that's a pretty good start. But some things I wanted like syntax completion (i.e. when editing Java, you can type "for", hit shift-space to pull up options to loop over an array or a Collection and voila: a for loop is materialized. ...so basically all of the goodness you get for Java development is lacking for Perl. Nonetheless, I think it's a promising start. I'll be trying the EPIC updates from time to time as new occasions to develop in Perl present themselves.

In the meantime, you can enjoy the fruits of this week's labor by pulling it off of CPAN; that's where you can get WebService::Technorati. It's also part of the latest release of the Technorati web services SDK. Thanks to David Wheeler for turning me on to Pod::Simple::HTML ...I'm still trying to figure how he gets it to output nice docs from pod, mine didn't come out nearly that purty. Ah well, I guess that'll be part of next week's Perl fun.

( Nov 19 2004, 10:59:25 PM PST ) Permalink View blog reactions


20041117 Wednesday November 17, 2004

XML::Parser on Mac OS X I needed to fiddle with XML::XPath on my powerbook today, it depends on XML::Parser. Complacent with how most unixy things I want to do JFW on Mac OS X, I dropped down to my CPAN shell and typed "install XML::Parser" -- bzzzt!

It turns out that expat is not installed, grrr. So I fired up Fink Commander and had it gimme some expat lovin'. Tried it again -- bzzzt! This is what I did in the CPAN shell

cpan> o conf makepl_arg "EXPATLIBPATH=/sw/lib EXPATINCPATH=/sw/include"
cpan> install XML::Parser
-- ding-ding-ding! We have a winner! XML::Parser installed! Thereafter, XML::XPath JFW'd and I'm on my way.

( Nov 17 2004, 04:53:44 PM PST ) Permalink View blog reactions


« Tomcat's "Content-type" header... Speaking of Upgrades »