CromeDome's Journal CromeDome'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-25T02:18:05+00:00 pudge Technology hourly 1 1970-01-01T00:00+00:00 CromeDome's Journal Question for Mac Users <p>For those of you using Macs, are you using Perl as it ships with OS X, the Perl MacPort, or are you compiling your own? If you could briefly explain why you use the one you do. I agonize over this every couple of months, and finally decided to sample a larger bit of the community this time around.</p><p>Thanks!</p> CromeDome 2009-07-07T13:04:52+00:00 journal CPAN Modules Moved to github <p>Like so many others before me, I have moved my CPAN modules over to github.</p><p>With that being said, I would avoid using CGI::Application::Plugin::CAPTCHA at this time, at least for anything too serious. It's a suitable speed bump, but has a glaring hole you can drive a truck through. I have a fix sitting here from Cees Hek that addresses that issue. Should see a new version sometime in the near future.</p> CromeDome 2009-05-14T03:19:50+00:00 journal SVN Commit Notifications over Growl <p>We're primarily a Windows shop. That doesn't have to relegate us to second-class citizens in the software development world, however. We have long used Perl for our web-based products, and development of our Windows client apps has gradually come to incorporate some of the practices and tools that we've grown accustomed to when developing in Perl.</p><p>In the not-so-distant future, we're taking a huge step off of Visual SourceSafe and moving to Subversion. We've long been using Subversion for our web apps, and upcoming developments in Powerbuilder will finally allow us to migrate away from VSS once and for all. We have a comfort level with Subversion, but before we totally take the plunge, we wanted to find ways to get more out of our version control software. Enter Growl.</p><p>Those of you who have used Growl on OS/X, you might not be aware that a <a href="">Windows port</a> is also available. It's kinda rough around the edges, but for the most part is pretty stable and handy. We wanted to use Growl to notify developers of recent commits to the source tree. Some of you might already do this, or something more robust, but it's something we recently implemented, and it's been tremendously useful. I find that developers are more informed as to what other people are up to, and gives people a gentle reminder to update their sandbox every now and again<nobr> <wbr></nobr>;-)</p><p>To get started, make sure you have a Subversion server in place. If you are hosting repositories on a Windows server, I highly recommend <a href="">VisualSVN Server</a>. It has a nice MMC snap-in, and is easy for anyone with Windows experience to administrate. Install Growl for Windows on the same box - you're going to need it to communicate with your developers. When configuring Growl, make sure to enable "Allow Network Notifications" and "Allow Clients to Subscribe to Notifications". You will also have to add a password - network Growl (at least on Windows) will not work without one.</p><p>Create a sandbox on your Subversion server. The post-commit hooks will need one to operate on. You can <a href="">use our post-commit hook scripts</a> as a starting point.</p><p>post-commit.bat is what is actually run by Subversion. It executes post-commit-run.bat and logs the output (I can't take credit for this - I got the idea from <a href="">Dan G. Switzer's blog</a>). If something bad happens, this log is the only way you're going to see what it is.</p><p>post-commit-run.bat does a couple of things for us. It updates the copy of the sandbox on the Subversion server, then captures the log entry of the last commit. It then executes some Perl that broadcasts that log message over Growl. The first time you use this batch file, make sure you specify the user name and password of a Subversion user on the svn calls to give Subversion an opportunity to cache credentials. I haven't found another way of accomplishing this (and I am open to suggestions here!). Once the hook is run, you can remove them from the batch file.</p><p>To make Subversion cache credentials on Windows, add the following registry entries through regedit:<code><br>[HKEY_CURRENT_USER\Software\\Subversion\Config\auth]<br>"store-passwords"="yes"<br></code><br>(taken from the <a href="">online Subversion book</a>)</p><p>As for the Perl program, it simply uses GNTP::Growl to broadcast the latest log message over Growl. I do not think that Growl on Mac currently supports GNTP, but think there is plans for such in the hopper.</p><p>Each developer that is receiving notifications will need Growl installed. On the Network tab, they should create a subscription to the Subversion server machine.</p><p>This isn't elegant, but it has worked pretty well for us.</p><p>Good luck! Hope you find this useful!</p> CromeDome 2009-05-06T16:25:35+00:00 journal Catalyst Idioms I'm Missing <p>So I am trying to get a URL that looks like this:</p><p><code> http://localhost:3000/admin/itemtype/32/edit</code></p><p>Instead, I am getting URLs that look like:</p><p><code> http://localhost:3000/admin/itemtype/edit/32</code></p><p>In my template, I tried this:</p><p><code> [% c.uri_for( 'edit', [ item_type.type_id ]) %]</code></p><p>which gave me the latter URL. If I do this:</p><p><code> [% c.uri_for(c.controller('Admin::ItemType').action_for('edit'), [item_type.type_id] ) %]</code></p><p>I get what I want, but it seems too clunky to be doing in my view. Is there a simpler way to write that and have it still work? It seems like too common a thing to not have there be a simpler way, but I am just not finding it.</p> CromeDome 2009-03-09T12:51:25+00:00 journal Trying out some new tools <p>I've started a new project, and given that it's for my own enjoyment, I have the time to try out a few new things. At the suggestion of <a href="">rjbs</a>, I'm giving Catalyst, TT, and DBIx::Class a shot.</p><p>So far, I've been the happiest with TT. As a long-time HTML::Template user, I am totally drunk with the power that TT provides me with (yes, Uncle Ben, with great power comes great responsibility...). I've been a long-time purist in not wanting to intermingle code with presentation, but as I am finding with TT, there are some things (like how data is formatted) that should be left to the designer to decide. HTML::Template left designers with little ability to do some of those things (though Rhesa and Mark's work on HTML::Template::Plugin::Dot went a long way to bridge that gap).</p><p>DBIx::Class... I can't imagine how I lived without it either. While I haven't had some of the issues with Class::DBI that others have had, my company does have some ugly schema in spots that is just not practical to refactor in our current time crunch. Unfortunately, CDBI doesn't deal well with some of the problems in our schema, and because of it, we miss out on some of CDBI's features. DBIx::Class handles these without issue, and the syntactic sugar makes it a pleasure to work with.</p><p>Catalyst I am not sold on. Not that I think it's bad, but there's a lot I don't understand about it. CGI::Application has always been simple and straightforward... Catalyst does a lot more for me out of the box, but spotty documentation in spots has sure made it hard for me to figure out how to use some of it. That being said, I love how multiple views and models are handled in Catalyst. It's very sweet.</p><p>(and no, I'm not trying to bitch about Catalyst's docs. I might even submit some patches for the docs, time willing).</p><p>All in all, it's been a positive experience. I enjoy expanding my horizons, and learning new tools gives me new ideas and appreciation for the tools I have become accustomed to.</p> CromeDome 2008-07-31T04:28:29+00:00 journal Technological Black Thumb <p>I've always harassed my wife about her black thumb. Every time she tries to deal with plant life, it dies. Well, I am experiencing the same thing with anything that plugs in lately. Yesterday's list of casualties:</p><ul><li>Lost two drives in the RAID array in my home server. RAID utilities now show the array as "dead".</li><li>Sump pump will not stop running. Only a matter of time before it burns out.</li><li>Dehumidifier running constantly in basement. Humidity is 30%, dehumidifier is set to 50%, yet it still wants to run...</li><li>Mac Pro now crashes whenever you try to run something requiring 3D acceleration.</li><li>Home PC randomly crashing when 3D acceleration is running. Very infrequent, but very annoying.</li><li>Spotlight constantly grinding my MacBook Pro to a halt. If I disable Spotlight, it re-enables itself when I reboot (yes, even when I tell it not to).</li></ul><p>It has not been a good week.</p><p>Make it stop, please!</p> CromeDome 2008-02-19T15:49:57+00:00 journal Stupid Windows software <p>I was setting up a network for a family friend's business last night, and stumbled across some of the worst Windows software I've seen in some time. The software has been around since the DOS days, and about two or three years ago, it was completely rewritten for Windows, but some of the DOS-isms remained. Mostly, it had to do with printing.</p><p>I didn't immediately notice this at first, but every printer that works with the software has to have a local printer port assigned to it (LPT1, LPT2, etc.) and be referenced by such within the software. It's.... archaic, but workable. My friend has two offices, and they wanted to remotely connect from one office to the other, access the other office's records, and print them locally. Remote Desktop will pass your printers through to the remote host, offering them up as local printers. It even assigns port numbers to them, beginning with TS. Problem is that the stupid ass software ONLY prints to printers who's port number begins with LPT.</p><p>Stupid stupid stupid. I want to slap those developers.</p> CromeDome 2008-01-16T14:57:14+00:00 journal Mac Software I Can't Live Without <p>Some of these aren't necessarily Mac-specific.... but I thought I'd share some of my favorite Mac tools:</p><ul><li>iTerm - I've been holding out on iTerm for a while. First it was the keyboard delays, then it was the lack of good anti-aliasing, then it was problems with terminal emulation. All my gripes have apparently been fixed. I'm loving it like I loved Now I just have a lot less clutter.</li><li>CoRD - With as many Windows servers as I have to administrate, I have no idea how I ever lived without this. Microsoft's RDP client doesn't hold a candle to CoRD.</li><li>MacFUSE - Nothing like being able to mount remote filesystems over SSH...</li><li>MacFusion -<nobr> <wbr></nobr>...and having a nice GUI to configure it all with.</li><li>SimplifyMedia - Painless sharing of iTunes music with people over the Internet. I use it to stream music from home to work, but you can also use it to share music with some of your friends. No network configuration needed. It's incredible.</li></ul><p>That's all I got for now. What are some of your favorite tools? Please avoid starting any editor wars!</p> CromeDome 2007-08-03T05:38:00+00:00 journal Apache2+SSL on OS X <p>I was fighting with Apache2 + mod_ssl on my OS X box for a while, and as it turned out, I was missing something pretty simple that wasn't documented that well anywhere. I'm posting this in hopes that I save others the same frustration.</p><p>I built Apache in the following manner:<nobr> <wbr></nobr><code>./configure --prefix=/opt/apache20 --enable-ssl --with-ssl=/opt/local</code></p><p>And when I ran:</p><p><code>sudo<nobr> <wbr></nobr>/opt/apache20/bin/apachectrl startssl</code></p><p>I got this in my error log:</p><p><code>[Thu Jan 25 09:04:49 2007] [emerg] (13)Permission denied: couldn't grab the accept mutex<br>[Thu Jan 25 09:04:50 2007] [alert] Child 29791 returned a Fatal error... Apache is exiting!</code></p><p>Makes it hard to develop a webapp when your webserver fails to start<nobr> <wbr></nobr>;-)</p><p>Come to find out that on OS X, using an <code>AcceptMutex</code> of <code>default</code> wasn't good enough. Apparently, OS X wants it set explicitly to <code>flock</code>, ala:</p><p><code>SSLMutex file:/opt/apache20/logs/ssl_mutex<br>AcceptMutex flock</code></p><p>Hope some of you find this helpful.</p> CromeDome 2007-01-25T16:28:33+00:00 journal ODBC on OS X <p>If you need ODBC in your Perl programs on OS X, don't try to build DBD::ODBC against Apple's built-in driver manager - it's an exercise in futility. After struggling with it for some time, I built a vanilla iODBC driver manager in<nobr> <wbr></nobr>/usr/local and built DBD::ODBC against it. Success!</p><p>Now if any of you have managed to make DBD::ODBC work with Apple's driver manager, I'd love to hear how. I searched for a while, but turned up nothing.</p> CromeDome 2007-01-09T18:15:18+00:00 journal Losing Faith <p><a href="">This</a> makes me sick. Not the article, not the story, but the responses to it.</p><p>It's one thing to laugh at one's own tragedy as a way of coping. But for people to just go ahead and willy nilly make fun of this is disgusting. Truly.</p><p>I'm quickly losing faith in the good of humanity. Not like I had much left to begin with.</p><p>I'm embarassed to ever have viewed or participated in that site. Much like Slashdot. Another once-good site that I'll have to stop following now.</p><p>Is anyone else offended by this, or am I just being overly sensitive?</p> CromeDome 2006-10-11T13:34:07+00:00 journal This guy is an idiot <p><a href=""></a></p><p>Think he's changed his tune in the last 3 years?</p> CromeDome 2006-09-27T21:03:07+00:00 journal CGI::Application::Plugin::HTDot <p>My first module release in I don't know how long has hit the streets. Run for cover<nobr> <wbr></nobr>;)</p><p><a href="">CGI::Application::Plugin::HTDot</a> enables magic-dot support for HTML::Template in CGI::Application based applications. For those of you like me who need some of the power of Template Toolkit but can't afford a migration to AnyTemplate or Template Toolkit can become immediately more productive with no change of code! Just need to add the plugin to your base application's definition:</p><p><code><br>package MyApp;</code></p><p><code>use strict;<br>use base("CGI::Application::Plugin::HTDot", "CGI::Application");</code></p><p><code># rest of your module goes here. . .<br></code></p><p>Apparently I'm already getting some good press <a href="">here</a> and <a href="">here</a>. Coincidentally, those are the two people who made the invention of this plugin possible. Rhesa and Mark did some awesome work to enable the dot in HTML::Template. Which reminds me I need to do something awesome for Rhesa - we were completely feeding off of each other's energy there for a few days<nobr> <wbr></nobr>:)</p><p>HTML::Template users should really check out the dot. It's awesome<nobr> <wbr></nobr>:)</p> CromeDome 2005-08-18T19:04:26+00:00 journal Thoughts on my first YAPC <p>Wow.</p><p>Really, wow. Richard Dice and the whole crew did the most awesome job of putting YAPC::NA 2005 together. I've never been to such an informative and entertaining conference in my life. And even if the rest of things had gone poorly, just being able to make the CGI::Application BOF session made the trip worthwhile. But everything, everything (I thought anyhow!) was awesome, and it make it that much better.</p><p>YAPC was full of many memories for me, and here's but a few of the more memorable ones:</p><ul><li>I was standing next to the engine in the paddle boat looking down at it with Trushar when Larry Wall walks up to us, looks down at the engine, looks at us and says, "This thing could use a refactoring." When prompted as to why, Larry admitted, "because it reminds me too much of Perl 4."</li><li>Hearing about Andy ripping the head off of That Guy. You all know the one.</li><li>Speaking of Andy, seeing a guy kiss him for some free swag.</li><li>Perl Ninjas. Need I say more?</li><li>Yes, I should say more. 70 cent beer!</li><li>And finally, juggling with Mark Stosberg on the back of the ship. Mark developed quite the audience around him, and it was kind of him to invite me to participate as well.</li></ul><p>Some of the people I was fortunate to have met:</p><ul><li>Jason Purdy</li><li>Mark Stosberg</li><li>Michael Graham</li><li>Diona Kidd</li><li>Shawn Sorichetti</li><li>Allison Randall</li><li>chromatic</li><li>Dave Rolsky</li><li>cog (Jose Castro)</li><li>Cees Hek</li><li>Larry Wall</li><li>Steve Comrie</li><li>Richard Dice</li><li>Perrin Harkins</li><li>Trushar Zaveri</li><li>William McKee</li><li>Michael Peters</li><li>...and many more!</li></ul><p>I want to give a special thanks to all the members of the CGI::Application mailing list, who really made the conference extra special for me. You guys rock.</p> CromeDome 2005-07-01T04:23:55+00:00 journal Going to YAPC::NA! <p>Just finished arranging my trip to Toronto for YAPC::NA. I am tremendously excited about this.</p><p>Look forward to seeing many of you there!</p> CromeDome 2005-04-29T16:36:39+00:00 journal Stupid mistake #371 <p>Valuable bonus points* will be awarded to the first person to detect the stupid error found in this code snippet:</p><p><code><br> &nbsp; &nbsp; &nbsp; &nbsp; # Check the login credentials<br> &nbsp; &nbsp; &nbsp; &nbsp; my $username = untaint_string($self-&gt;query-&gt;param("username"));<br> &nbsp; &nbsp; &nbsp; &nbsp; my $password = untaint_string($self-&gt;query-&gt;param("password"));</code></p><p><code> &nbsp; &nbsp; &nbsp; &nbsp; if($username ne "" and $password ne "")<br> &nbsp; &nbsp; &nbsp; &nbsp; {<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; use KW::Users;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; my $user = KW::Users-&gt;retrieve($username);</code></p><p><code> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if($user and $user-&gt;login_password eq encrypt($password))<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Last check! User info matches, but are they active?<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if($user-&gt;active_yn eq "Y")<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # Log the user in<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $self-&gt;session-&gt;param("username", $username);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $self-&gt;session-&gt;param("is_logged_in", 1);<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br> &nbsp; &nbsp; &nbsp; &nbsp; }</code></p><p><code> &nbsp; &nbsp; &nbsp; &nbsp; $self-&gt;param("message", "Please enter a valid username and password combination.")<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unless $self-&gt;session-&gt;param("is_logged_in", 1);</code></p><p><code> &nbsp; &nbsp; &nbsp; &nbsp; # Return the user to their chosen destination<br> &nbsp; &nbsp; &nbsp; &nbsp; return $self-&gt;redirect($redirect);<br></code></p><p>Stupid mistake aside, there's a bigger issue above that I am unsure as to how to deal with. Traditionally, I've used the session parameter message when I've wanted to tell my output function to throw a message at the top of the page (to indicate an error, etc.). I've always done this in the context of a single script before - for example, user is trying to login (as above), fails the login (and therefore sets a message), and I call the function to redisplay the login form again, and the message gets displayed. Nowadays, I'm potentially redirecting to another script in another process, and so my message parameter goes out of scope. Any suggestions on how to do what I want?</p><p>Thanks in advance!</p><p>* Valuable Bonus Points have no real or imaginary value. They do, however, give you bragging rights (for whatever THAT is worth!)<nobr> <wbr></nobr>;)</p> CromeDome 2005-02-16T03:10:14+00:00 journal Upgrades and Setbacks <p>The whole point of upgrading is to end up with something better than you had before, and/or to fix problems you might have had before? Someone had better tell that to Linksys. I am not impressed by my new cable router.</p><p>While my wireless connection speed has doubled, my internet connection speed has plummeted. IM services (ICQ, MSN, AIM, and Yahoo) take significantly longer to connect, and some of my games (most importantly, World of Warcraft) will not play at all. I've opened all the recommended ports, I've even moved my machine into the router's DMZ (thereby denying myself any protection offered by the router, and thereby letting ALL traffic reach my machine, right?), and it makes not one fucking bit of difference. If I plug my machine directly into the cable router, the problem magically goes away. But then I can't connect to my home network, and that's a bigger problem.</p><p>A coworker has the same router that I do, but has an older revision of the firmware. Oddly enough, he doesn't have the same issues, which tells me Linksys' QA on the last firmware release sucked some major ass. I'm going to try to find a way to get back to the original firmware and see if that makes a difference. Failing that, anyone have any suggestions?</p> CromeDome 2005-01-04T03:08:23+00:00 journal Dumbass of the Day <p>That would be me!</p><p>I updated the source on our FreeBSD server at work from 5.2.1 to 5.3, and subsequently recompiled the operating system. I'd never had one of these go awry before, and while I realized that the version of BIND was upgraded, my research led me to believe that my current configuration was ok. Damn was I wrong!</p><p>When I rebooted the machine, named failed to start, and subsequently any services that needed name resolution failed to start. I booted single user, but much to my dismay, the root filesystem booted read-only. So I mounted another filesystem, copied what I needed to boot single-user over to it, then rebooted into single-user again on the new filesystem. I mounted my real filesystem and started digging in. Turns out named no longer liked being passed a -g option. Oops. Changed the named parameters, rebooted, and voila, everything worked!</p><p>So my 5 minute reboot led to an hour of downtime and fun. Go me.</p><p>Anyway, after that I got onto a roll... Got Subversion installed on our development server, updated Apache and mod_perl (VERY out of date!), and got webmail running for all of the domains we host. Patched all of our internal servers too. So after my original fuckup it turned out to be a productive day<nobr> <wbr></nobr>;)</p><p>OpenWebmail is pretty cool. Wish it supported mod_perl over Speedy CGI though<nobr> <wbr></nobr>:(</p> CromeDome 2004-12-01T05:46:21+00:00 journal Naming Conventions <p>At what point does naming become cumbersome? For example:</p><p>DEVNET::PropertyTax::Parcel::TaxDistricts</p><p>where:</p><p>DEVNET = my company<nobr> <wbr></nobr>;)<br>PropertyTax = product (as opposed to Recorder, Imaging, etc.)<br>Parcel = Piece of property<br>TaxDistricts = Taxing districts a parcel is in</p><p>I had started doing DEVNET::PropertyTax::Assessment (for a property's tax assessments) and so forth originally. Then I ran into a problem: I had previously defined DEVNET::PropertyTax::TaxDistricts, which is the listing of all possible tax districts. But now the above seems too lengthy. Is it? What do others do? Am I being <i>too</i> organized?</p> CromeDome 2004-11-04T20:59:10+00:00 journal Modules, server rooms, and other assorted tidbits <p>Well, based upon some discussion on the CGI::Application mailing list, I will likely be going through the list of bug fixes and feature requests for CGI::Session and making the changes myself. The author has been unresponsive for quite some time, and myself and others would really hate to see C::S fester and die. My intent is to try to make contact with the author while I am making the changes, and failing that, release a fork of the module.</p><p>Should I have to fork C::S, my intent is to not break compatibility with the original C::S in case the author resumes maintenance of the module. Would be nice to just offer whatever fixes and improvements as a patch to his code.</p><p>In other news, I spent waaaaaaaaaay too much time at the office last night. However, I accomplished much. I built, configured, and installed another server for our support department, configured and installed two new Cisco routers, upgraded our wireless network, and even had time to get a game of Madden in on the company's projector<nobr> <wbr></nobr>;) Left here around 2 in the morning, so needless to say I'm dragging some ass today.</p><p>Delight is progessing nicely. Most of the database implementation modules are complete, and has full test coverage to boot. Should be starting the interface to the app shortly, and am getting very curious to see how it all comes together. This is probably the most ambitious Perl development project I've undertaken.</p><p>I have also found myself writing code for a site my friend is doing. It's going to be Yet Another Comparitive Shopping Site, and while I'm not sure how it will do, I look forward to doing it as a learning experience.</p><p>And while I am not really much of a fan, go Red Sox<nobr> <wbr></nobr>:) Anything to not see the Yankees in the World Series!<nobr> <wbr></nobr>;)</p> CromeDome 2004-10-20T15:43:17+00:00 journal Needing product name ideas. . . <p>So I'm writing Yet Another E-Commerce Application. . . while there are some out there that would likely do what I need, there's not the same satisfaction as there is rolling my own. The app is coming along, but I still am lacking a name for said project.</p><p>Sooooo. . . . we are selling light bulbs, lighting fixtures, and related accessories. The application, however, is not specific to these things. I'm looking for a suitable name for this project, with Valuable Bonus Points being awarded if the name has something to do with those items.</p><p>More seriously now. . . this project is being funded by a not-to-be-named (yet) company. I'm sure they won't let me pay someone for coming up with a name, but I can probably arrange purchase of a book or two for the winning suggestion, or gift certificate for a restaurant of choice, or something similar (they have been cool about picking up some expenses of these types for me to date).</p><p>If anyone has any ideas, please fire them my way<nobr> <wbr></nobr>:) I've been thinking for a while now and am drawing blanks. This type of creativity I do not possess<nobr> <wbr></nobr>:(</p> CromeDome 2004-09-20T18:26:07+00:00 journal Getting Educated <p>So frustration sank in for the longest time. . . I had just completed development of one Perl application, and was anxious to get back to another when Other Work Happened. And so a few weeks/months later, I'm back to that project.</p><p>In the time between then and now, I have been trying to get myself a bit better educated. I've spent a lot of time looking over <a href="">Andy Lester's</a> presentation notes and slides on automated testing, and he's also shown great kindness in fielding my hundreds of annoying questions on the matter<nobr> <wbr></nobr>;) It's taken some getting used to, but the concept of "POD, test, code" is really starting to work for me. It just kinda... flows. The process has already helped me catch errors for those times when I refactor some code and don't think of everything it might break.</p><p>I've also started dabbling with mod_perl, and honestly, it's not been the big scary animal I thought it would be. I've set up and tinkered with a couple of different handlers, and am starting to get a little feel with how mod_perl behaves. Today (with the help of <a href="">Sam Tregar</a>, I was able to get an error handler set up for one of my applications. I've been having a heck of a time trapping errors from the deepest depths of my API, and with Sam's explanations I was able to get a suitable handler working (somewhat based on the work he did with Krang).</p><p>As always, I think I got a long way to go in my Perl programming. But I feel a lot smarter about some things than I did even a few weeks ago.</p><p>Thanks to both of you. You are two people that help make the Perl community so great<nobr> <wbr></nobr>:)</p> CromeDome 2004-09-17T03:39:37+00:00 journal Thought for the day... <p>There is no place in business for hurt feelings.</p> CromeDome 2004-08-11T21:17:43+00:00 journal Growing Pains <p>For those of you who don't know me (and I'm guessing that's most of you), I'm a partner in a software company. I think we're over the hump of starting a business now, being over 7 years into things now. And while staying afloat isn't a concern, I feel we are starting to experience some growing pains. Or rather, <i>I</i> am starting to experience them.</p><p>I've always been a programmer, and it's really where my passion lies. Over the years, my role has changed from being just a programmer to our lead developer, and I enjoy the challenges that designing our software has provided. Now I find myself on the brink of another transition, and I'm not sure it's one I'm wanting or ready for.</p><p>More and more I find myself not only designing our software, but large parts of our corporate infrastructure, and frequently find myself out working with various IT departments and discussing technical issues with prospective clients. I feel like I'm ending up as more of a CTO than a developer, and I don't think it's what I want. I want to program and not deal with the other crap.</p><p>I realize that in a small company, an owner/partner needs to be able to wear multiple hats. But the extra stuff is not just getting in the way of my passion, but the overall development effort. Right now, in addition to all the programming I'm supposed to be doing, I'm maintaining company web and e-mail services, the company network, the phone system, all of our web products, and one of our tax products. I'm lucky if I spend a full day of each week writing new code. This week, for example, I'm going to have to investigate phone systems to replace our presently-dying PBX. This will leave me with less than a week to implement and debug a module that we promised to a client by the end of next week.</p><p>Frankly, I don't enjoy being out working with existing and prospective clients. I don't want to be responsible for the company infrasctucture. But there's no one else here that can. The frequent interruptions and hassles incurred by non-programming issues are causing me huge amounts of stress and, unfortunately, some rather severe anger management issues.</p><p>There are two options as I see them: 1) Suggest we find the money to hire another developer and embrace the set of duties I seem to be moving into, then code for fun on nights and weekends to satisfy my programming urges, or 2) find someone that has the skillset to manage all aspects of our corporate infrastructure so that I can deal with the development issues. The problem I see with #2 however is still lacking someone to meet with and schmooze potential and existing clients.</p><p>Has anyone else found themselves in my position? What did you do? What would you do differently if you could go back? What would you do in my shoes?</p> CromeDome 2004-08-02T19:12:35+00:00 journal Livin' La Vida Linux! <p>Now that I have all of your attention with that awful, awful title. . .</p><p>I am now Windows free at home!</p><p>There's a lot to this story. While I'm not sure why I went Windows-free at home, I do know how I went from using Windows to not using Windows. Went through a few Linux distros getting there, too<nobr> <wbr></nobr>;)</p><p>I used to have a Linux box to play with at home, and when I started this project, I moved it to FreeBSD 5.2.1. Been using FreeBSD on my servers at work for about a year or so now, and frankly I'm loving it. The former Linux box was a perfect candidate for a server: decent memory, processor, and storage capacity, kinda sucky video and sound. The install went over without a hitch - thank you ports system!</p><p>Next was kicking the main Windows XP box to the curb. Well, the OS at least! Inspired by my success with FreeBSD ports, I gave Gentoo a shot. There were some things I really liked about Gentoo, but I ended up experiencing some build problems with a rather vanilla install. After a lot of fighting and hair pulling, I went back to good ole' Slackware. And in all these years, it's never let me down. I was very impressed by the quality of Slackware 10.0. It was the fastest, most painless Linux install I've ever done. In fact I was so happy with it I dug out my old Thinkpad, wiped out the drive and installed Slack on it too!</p><p>Once you go Slack, you never go back!<nobr> <wbr></nobr>;)</p><p>The only snag I encountered was setting up the onboard NIC with my primary computer. Gentoo detected the card as eth1, and Slack picked it up as eth0. Blew an hour or so figuring out why the hell the interface wouldn't come up. Oh, well. Live and learn, live and learn. . .</p><p>My final setup includes KDE on the desktop, Kate for programming, postgresql for the RDBMS, and Apache 1.3.31 with mod_perl 1.29. Alternating between Firefox and Konqueror for the browser because I can't make up my mind which I like better. The Kontact suite (Kmail, etc.) is pretty sweet (I really like using Kmail). xmms has been a fine subsitute for Winamp. . . And for entertainment, Neverwinter Nights and Unreal Tournament 2004 (both play natively and VERY nicely under Linux).</p><p>And fonts are really nice under X. Much more cleanly rendered than under XP.</p><p>So what have I been doing with all this? Right now, learning the ins and outs of CVS. I've never had to work with it before, and I really want to reap the benefits that CVS can provide a project. KDE comes with Cervisia, but I'm staying away from the GUI for now as I feel it will gimp my ability to learn CVS (and, to paraphrase something Petdance told me, the command line is the way God intended it to be!). From there, I'm off to pick up mod_perl, Basset, and a few other things.</p><p>If I could only figure out how to make the scroll wheel on my Logitech mouse work, I'd be a really, really happy boy. I tried messing with imwheel, but 1) it doesn't seem to support my hardware, and 2) it seems old. Does anyone have any suggestions for me? I'd really, <i> <b>really</b> </i> like my scroll wheel back.</p> CromeDome 2004-07-14T04:21:35+00:00 journal Launch day went well. . . <p>Just rolled out the latest version of a website for my client this week. VERY major overhaul of a very aging product. And thus far, I'd say it's been most successful<nobr> <wbr></nobr>:)</p><p>The most noticable things have been the speed increase (woo yeah!), new look and feel, and that I rewrote almost every line of code for it<nobr> <wbr></nobr>;) There's a pretty nice feature set for registered users too. It's almost like I paid attention to all the issues people had with the original version of the site and did something to address them<nobr> <wbr></nobr>;) Every day I sing praise to CGI::Application, HTML::Template, and CGI::Session<nobr> <wbr></nobr>;)</p><p>Also learned some other good things along the way. Namely, about how to build and maintain a better firewall (thank you, OpenBSD!).</p><p>It's been a good week.</p> CromeDome 2004-07-03T01:20:02+00:00 journal selectall_arrayref <p>I see lots of great things in and about Perl, but I don't always use them or grasp them until I come across a problem where one of those things make my life infinitely easier. Today, selectall_arrayref (in DBI) is that thing.</p><p>Some creative use of selectall_arrayref is preventing me from having to create additional database connections within an app I'm rewriting. Given the increasing popularity of the site I'm working on, every free resource I can preserve is like gold.</p><p>All hail the mighty selectall_arrayref!</p> CromeDome 2004-06-03T19:58:09+00:00 journal Measuring Spam <p>I installed a new spam fighting solution for my company on May 9th. I checked today to see how we were doing, and was rather astounded by the numbers:</p><blockquote><div><p> <tt>Blocked:&nbsp; &nbsp; &nbsp; &nbsp;143,465<br>Blocked: Virus&nbsp; &nbsp; &nbsp;314<br>Allowed: Tagged&nbsp; 2,193<br>Allowed&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;12,380<br>----------------------<br>Total Received 158,352</tt></p></div> </blockquote><p>I don't know what I'm more surprised by: the total amount of messages we've received, or how little of what we received is actually legitimate. Keep in mind we have maybe 20 e-mail users at most. Perhaps that's why 158k total messages astounds me.</p><p>So for a small company with a handful of users, less than 10% of all e-mail we receive is legitimate. I can only imagine that this problem is exponentially worse for larger installations.</p><p>How are others faring? Post your horror stories here!</p> CromeDome 2004-06-02T15:25:04+00:00 journal Note to self. . . <p>Typos kill. *smacks forehead*</p><p>Spent half an hour tracking down a bug before I noticed this:</p><blockquote><div><p> <tt>&lt;!-- TMPL_VAR NAME=NWNW--&gt;</tt></p></div> </blockquote><p>which is obviously not the same as this:</p><blockquote><div><p> <tt>&lt;!-- TMPL_VAR NAME=NWNW --&gt;</tt></p></div> </blockquote><p>which is what I meant.</p><p>I'm such a dumbass sometimes<nobr> <wbr></nobr>:P</p> CromeDome 2004-05-28T16:19:58+00:00 journal Frustration <p>I will probably start an OS war with this, so I apologize in advance. Just recounting my personal frustrations with some OSes lately. Doesn't mean I think they suck, just outlining my personal issues of late<nobr> <wbr></nobr>;)</p><p>I've been using FreeBSD on two of my servers for over a year now, and love it. I was a Linux user before that, first with Redhat, then after 7.0 came out I went to Slackware. I really enjoyed Slack, but after playing around with FreeBSD on a friend's server, I wanted to give it a run. And I was hooked from that point on, and never looked back. Till now.</p><p>I finally got around to rebuilding my old Thinkpad, and wanted to give FreeBSD 5.2 a whirl on it. I know there have been some issues with 5.2, but after some research, didn't think those issues would apply to me and so went for it. Unfortunately, the computer hangs whenever sysinstall executes. After some tinkering, I went back and tried 4.9 on the same machine. It doesn't crash, but won't recognize my PCMCIA ethernet card either.</p><p>I said "ok, I've always wanted to try OpenBSD, let's try that." I installed it without issue. And I like it, daresay moreso than FreeBSD in some respects. It's lean, it's clean. It felt kinda bare bones, but I liked it. Until I tried installing the ports. I recognize that this doesn't weigh on the quality of the OS, but having come from FreeBSD, goot ports are a big deal to me.</p><p>Installed nmap port. Success! Installed iodbc port. Success! Installed FreeTDS - crap, didn't build with ODBC libraries. Upgrade to latest iodbc - won't compile on OpenBSD. Install unixODBC - success! Install FreeTDS - still no ODBC support. Finally upgraded to most recent FreeTDS and it compiles ok, but DBD::ODBC won't compile for me against that setup. Grr!!!! Install KDE - downloads, compiles forever, crashes near completion.</p><p>I have since learned that I might need to update the PLIST for the FreeTDS port, that maybe it's building the ODBC libraries but not installing them after build. Which is fine, but all the frustration at this point has really got to me.</p><p>I realize that free and OSS software might not be as user friendly as their closed-source commercial counterparts. And I'm ok with that<nobr> <wbr></nobr>;) I've used Linux and FreeBSD for 8+ years now, and I'm accustomed to working a bit harder at things. But this type of frustration still gets to me. I could accept if I was doing something wrong, but if I am this time, it sure isn't something obvious.</p><p>Suggestions are welcome. NetBSD? Gentoo? What have others used on a laptop with more success than I'm having. FWIW, I'm using an older Thinkpad A20.</p> CromeDome 2004-02-13T13:54:06+00:00 journal