<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2118058455075556259</id><updated>2012-02-15T23:25:24.926-08:00</updated><category term='perl perl6 rakudo logo trademark'/><category term='perl introduction'/><title type='text'>The Perl Hacker Painter</title><subtitle type='html'>A blog about Perl, written from an Artist's perspective</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://perlhackerpainter.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://perlhackerpainter.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>The Perl Hacker Painter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_NyhUlChDNMo/SOnDW9KuqRI/AAAAAAAAAA0/mWLKf9rraQg/S220/ao-lj.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>14</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2118058455075556259.post-8763267255267122796</id><published>2010-09-27T16:02:00.000-07:00</published><updated>2010-09-27T16:36:45.134-07:00</updated><title type='text'>On making a Simple Web-based installer in Perl</title><content type='html'>Recently and after 10 years of avoiding the idea, I made a web-based installer for Dada Mail.&lt;br /&gt;&lt;br /&gt;My original thought was, something like this isn't necessary, that the installation process had been twiddled down to changing, oh, 3 variables in a heavily documented config file and additional "power user" fancy things to do, if You Knew What You Were Doing. What could possibly be easier?&lt;br /&gt;&lt;br /&gt;Oh, how wrong I was - and how I never knew how wrong I was, until I've gotten some feedback on the alternative of having an installer.&lt;br /&gt;&lt;br /&gt;You can get a gist of how the installer works in this video:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object height="385" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/md8NNRkjRR4?fs=1&amp;amp;hl=en_US"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/md8NNRkjRR4?fs=1&amp;amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="385" width="480"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Basically, you pop up a tar.gz distro and a helper script that just gets things all set, you run the helper script and fill in a few things in a form - most of which are pre-filled with Best Guesses. I am not breaking new ground, here.&lt;br /&gt;&lt;br /&gt;BUT what I am doing is giving my users the patented PHP Xperience - and that's what they want:&lt;br /&gt;&lt;br /&gt;You throw up some files, you visit some stuff via your browser, you set some params and you go zoom.&lt;br /&gt;&lt;br /&gt;The problem with, "&lt;span style="font-style: italic;"&gt;But, there's all these CPAN dependencies!!!&lt;/span&gt;" was solved a long time ago in this project by only using Pure Perl modules (gets limiting in some instances) and shipping the app with an already pre-filled app-specific perllib. This also is a huge headache and the shipped-perllib is always behind, but it's better than nothing. The cpan deps service has been heaven-sent for roll-your-own-manually folks.  The, "&lt;span style="font-style: italic;"&gt;But, there's Cool Things in CPAN to do Cool Things in your App!&lt;/span&gt;" wish is solved by just making these cools things optional. cPanel, which is what a lot of Very Cheap Web Hosts use as their platform has a web-based cpan installer, so it's even within a mortal's reach to use CPAN to do fun things.&lt;br /&gt;&lt;br /&gt;Anyways: here is, after a month of having the installer, some reflections:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The support boards aren't devoid of installation questions, but they sure are a lot quieter. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There are users who are intimidated by the installer. I don't know how else I can make things easier and these users would also be intimidated by doing things manually (which is still an option). I used to be intimidated with oiling the chain on my bicycle, but it takes... I dunno, 5 minutes to learn what you need to do. I don't ever say, "Uh, Google-fu the base level how-to to, (for example) FTP a file", but I don't quite know what I need to say.&lt;br /&gt;&lt;br /&gt;But, the other amount of users that were intimidated doing things manually, but can also figure out the installer is the majority. Which is great - solved the problem. Now, the questions are simply bizarre edge cases dealing with weird MySQL setups on questionable hosting accounts. Happy to help.&lt;br /&gt;&lt;br /&gt;Since more people are having an easier time installing the program, I get the feeling that more people are installing the program, successfully, which is great. I don't have any hard facts for that one, sadly. There are a small amount of people that tell me they like the &lt;span style="font-style: italic;"&gt;Hard Way of doing things&lt;/span&gt;, and &lt;span style="font-style: italic;"&gt;Why would I ever change? You're ruining my flawed work flow!&lt;/span&gt;, and I don't really know what to tell those folks, except to try the new way, that there is a manual way and it's progress - babe. And also, the previous version is still available if you want Hell, again. I had shipped the installer as the only new feature of the current version, so there's nothing that was missing.&lt;br /&gt;&lt;br /&gt;Another hunch I have is that my own services to install the program are dramatically down. I can certainly graph how many installs I do per day/month/whatever, but these numbers are affected by a number of things: the economy, other competing programs, if Burning Man was particularly amazing and how long it takes someone after Labor Day to decompress, etc. This is also fine for me, because I loathe having to install the program for people: it takes a lot of time. I would rather they do it, themselves.&lt;br /&gt;&lt;br /&gt;When I do install the program? Guess what, I use the web-based installer too. It's that much better/faster/spiffier. I really wish I created the installer earlier, as the time it took to make the installer would have paid back sooner for the time it's saving me number. I would have like 10 years of that time back, instead of just a month, but whatchagonna do.&lt;br /&gt;&lt;br /&gt;But I've now raised the bar on Easiness...es and have a new problem: people who found the installer easy to use, want to upgrade just as easy. 10 years of development of a program, especially when Year 0 I knew not of the ways of Perl and Year 10 I'm still very much an amateur with a Right Hemispherical controlled mind.... things are messy. The config file format sucks, for example. And I have ten years of versions people want to upgrade from.&lt;br /&gt;&lt;br /&gt;Should be interesting.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Some notes on the design of the installer: &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I basically decided to make the installer as separate from the main program as possible, meaning it has its own library files, it's own template files, it's own &lt;strike&gt;testing suite&lt;/strike&gt; (coming soon, I promise!). It does not use a framework, but uses the modulino approach. Things are fairly tidy.&lt;br /&gt;&lt;br /&gt;It's written in a procedural design, because installations and configurations have steps. See? I just listed two of them. I made wrappers around things that deal with system calls - copying/removing files/directories, for example. I was thinking there could/would/should be edge cases for different OS's, but I really haven't found any, but I guess it still gives breathing room for someone much smarter than me to move in and make a better version of whatever I've botched. I did start with just using back ticks to system calls and replace those with perlish alternatives.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So. I'm not sure what stops all of us from making similar web-based installers for our web-apps. I am coming from a field (Art) and a preference for visual things, so I never really gotten a handle on system-admin type of tasks. The trend, it seems, in software is less, Give me as many options to roll my own doo-dad as I can have" and more, "&lt;span style="font-style: italic;"&gt;Just freakin' work. And On my phone. When my 2-y/o uses it."&lt;/span&gt; I'm a little embarrassed at how much of the code I have is simply crap boilerplate to look up boring things about someone's environment to install. It seems that can all be sweeped under the floor and get some shared code. But then again, there's the rub, huh? If its shared code it's on CPAN, and then, how do you get the CPAN module, without a major compromise? And someone will be brilliant and write it in Moose (which is also, sincerely, brilliant)  and there goes the baby, with the bathwater.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2118058455075556259-8763267255267122796?l=perlhackerpainter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://perlhackerpainter.blogspot.com/feeds/8763267255267122796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2118058455075556259&amp;postID=8763267255267122796' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/8763267255267122796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/8763267255267122796'/><link rel='alternate' type='text/html' href='http://perlhackerpainter.blogspot.com/2010/09/on-making-simple-web-based-installer-in.html' title='On making a Simple Web-based installer in Perl'/><author><name>The Perl Hacker Painter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_NyhUlChDNMo/SOnDW9KuqRI/AAAAAAAAAA0/mWLKf9rraQg/S220/ao-lj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2118058455075556259.post-7628051824027191363</id><published>2010-03-07T21:28:00.001-08:00</published><updated>2010-03-07T21:28:26.437-08:00</updated><title type='text'></title><content type='html'>&lt;div id="archived_message_body"&gt;     &lt;p&gt;Dada Mail Four Point Zero Point Three Released. Super Duper UTF-8/Unicode Support &lt;/p&gt;&lt;hr /&gt; &lt;h1&gt;&lt;a name="section_1"&gt;Download: &lt;/a&gt;&lt;/h1&gt; &lt;p&gt;        &lt;a href="http://dadamailproject.com/"&gt;http://dadamailproject.com&lt;/a&gt; &lt;/p&gt;&lt;h1&gt;&lt;a name="section_2"&gt;What's New&lt;/a&gt;&lt;/h1&gt; &lt;p&gt;We've been working really really hard to get the UTF-8/Unicode support working well in Dada Mail and this release, we really - no foolin' this time, think we've nailed it. &lt;/p&gt;&lt;p&gt;If you require character set support that's a little more than what's usually found in  Latin-based languages, well, this is the release for you. We're going to build   localization/internationalization support into Dada Mail, starting with this  release. That means, we're going to start translating Dada Mail into multiple languages.  &lt;/p&gt;&lt;p&gt;This release also has some pleasant bug-fixes. We couldn't have done it without  your feedback. &lt;/p&gt;&lt;h1&gt;&lt;a name="section_3"&gt;Pro Dada Four - Ever: $44 &lt;/a&gt;&lt;/h1&gt; &lt;p&gt;There's only one more week to take advantage of this deal. After that? Gone.  &lt;/p&gt;&lt;p&gt;Purchase Pro Dada for a special price of Forty-Four Dollars and your subscription to download Pro Dada and the Dada Mail Manual lasts Forever. &lt;/p&gt;&lt;p&gt;Pro Dada subscriptions are usually for a year. This offer extends your subscription for the entire life of the Dada Mail Project. &lt;/p&gt;&lt;p&gt;Purchase at:  &lt;/p&gt;&lt;p&gt;        &lt;a href="http://dadamailproject.com/purchase/pro.html"&gt;http://dadamailproject.com/purchase/pro.html&lt;/a&gt;          &lt;/p&gt;&lt;p&gt;This irrational offer lasts until pi day (3/14/2010)  &lt;/p&gt;&lt;h1&gt;&lt;a name="section_4"&gt;Pro Dada Four Installed - $88&lt;/a&gt;&lt;/h1&gt; &lt;p&gt;Get Pro Dada installed by us or get any current Dada Mail upgraded to Pro Dada Mail Four, for $88 (regularly $100). We'll keep upgrading it at your request for a year, but you'll have access to the Pro Dada Download and Dada Mail Manual for the life of the Dada Mail project. &lt;/p&gt;&lt;p&gt;Request an Install or Upgrade:  &lt;/p&gt;&lt;p&gt;        &lt;a href="http://dadamailproject.com/installation/request.html"&gt;http://dadamailproject.com/installation/request.html&lt;/a&gt;          &lt;/p&gt;&lt;p&gt;This irrational offer also only lasts until pi day (3/14/2010) - you have week  left to submit that installation request.  &lt;/p&gt;&lt;h1&gt;&lt;a name="section_5"&gt;Dada Mail Turns Ten in 2010&lt;/a&gt;&lt;/h1&gt; &lt;p&gt;The Dada Mail Project started ten years ago in December of 1999 as a small curiosity and has gradually evolved and developed into an extremely popular programming and conceptual art project. Happy Birthday, Dada Mail. &lt;/p&gt;&lt;p&gt;Dada Mail Four is our latest release. Thanks for everyone's thoughtful feedback in this year-long development effort.  &lt;/p&gt;&lt;p&gt;We couldn't have done it without you.  &lt;/p&gt;&lt;p&gt;We're looking forward to receiving your feedback on Dada Mail Four.  &lt;/p&gt;&lt;p&gt;Good luck!  &lt;/p&gt;&lt;p&gt;Justin J&lt;br /&gt;Lead Dadaist&lt;br /&gt;&lt;a href="http://dadamailproject.com/"&gt;http://dadamailproject.com&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Dada Mail Change Log for version  4.0.3 &lt;/p&gt;&lt;hr /&gt; &lt;h1&gt;&lt;a name="section_6"&gt;Unicode/UTF-8 Work&lt;/a&gt;&lt;/h1&gt; &lt;p&gt;We have worked very, very hard to get Dada Mail working with UTF-8/Unicode. &lt;/p&gt;&lt;p&gt;We think we did a pretty good job and you'll have a most amazing experience when comparing this version to any previous version of Dada Mail (ever), but there may be tiny things still to work out. &lt;/p&gt;&lt;p&gt;We need to know about them, don't be shy! &lt;/p&gt;&lt;h1&gt;&lt;a name="section_7"&gt;SQL table schema changes!&lt;/a&gt;&lt;/h1&gt; &lt;p&gt;People who upgrade to 4.0.3 (and any version afterwards, until things change!) should note that the MySQL and PostgreSQL Table Schemas have changed! &lt;/p&gt;&lt;p&gt;You may need to update your own tables, to support UTF-8 (if they aren't already in that encoding). &lt;/p&gt;&lt;h1&gt;&lt;a name="section_8"&gt;See Also:&lt;/a&gt;&lt;/h1&gt; &lt;p&gt;If you're upgrading, please read over the updated UTF-8/Unicode FAQ: &lt;/p&gt;&lt;p&gt;&lt;a href="http://dadamailproject.com/support/documentation/features-UTF-8.pod.html"&gt;http://dadamailproject.com/support/documentation/features-UTF-8.pod.html&lt;/a&gt; &lt;/p&gt;&lt;p&gt;If you're doing a new install, there's nothing you need to know, Dada Mail should work well out of the box in re: to UTF-8/Unicode stuff. &lt;/p&gt;&lt;p&gt;Changes to Default List Settings&lt;br /&gt;We've changed a few of the default list settings, hopefully so that everyone has a more pleasant experience, right off the bat: &lt;/p&gt;&lt;h1&gt;&lt;a name="section_9"&gt;Activate Black List&lt;/a&gt;&lt;/h1&gt; &lt;p&gt;We've enabled the setting to active the Black List, by default. &lt;/p&gt;&lt;p&gt;We're also enabling the below settings: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Move Unsubscribed Subscribers Automatically to the Black List  &lt;/li&gt;&lt;li&gt;Continue to Allow Subscriptions From Subscribers of Black Listed      Addresses&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;You still have the option to change new lists to the previous behavior and already created lists will have their previous behavior, if Black List Settings have already been edited. &lt;/p&gt;&lt;h1&gt;&lt;a name="section_10"&gt;Print List-Specific Headers option Removed&lt;/a&gt;&lt;/h1&gt; &lt;p&gt;The option, Print List-Specific Headers has been removed from, &lt;em&gt;Mail Sending -Advanced Sending Preferences&lt;/em&gt; has been removed, &lt;em&gt;but&lt;/em&gt; the functionality has not. All mailing list messages will have these headers. &lt;/p&gt;&lt;h1&gt;&lt;a name="section_11"&gt;Send Unsubscription Confirmation Emails (Closed-Loop Opt-Out) - disabled by default&lt;/a&gt;&lt;/h1&gt; &lt;p&gt;Send Unsubscription Confirmation Emails (Closed-Loop Opt-Out) has been disabled by default (you can still enable it) &lt;/p&gt;&lt;p&gt;This option, when enabled, requires that when someone wants to unsubscribe, they have to confirm this unsubscription by clicking on the unsubscription confirmation link in a URL sent their subscribed address. &lt;/p&gt;&lt;p&gt;When disabled (the new default), they simply have to fill out the subscribe/unsubscribe form. &lt;/p&gt;&lt;h1&gt;&lt;a name="section_12"&gt;Subscription and Unsubscription links now include an Email Address&lt;/a&gt;&lt;/h1&gt; &lt;p&gt;When available, both the Subscription and Unsubscription links will have the potential subscriber's (or unsubscriber's) email address in the link itself, so that the user does not have to do the two-step of first following the link and then typing in their email address. &lt;/p&gt;&lt;p&gt;These links are created per-subscriber (or potential sub/unsub), when you use the: &lt;/p&gt;&lt;p&gt;  &lt;a href="http://dadamailproject.com/cgi-bin/dada/mail.cgi/s/dada_announce/example/example.com/"&gt;http://dadamailproject.com/cgi-bin/dada/mail.cgi/s/dada_announce/example/example.com/&lt;/a&gt; &lt;/p&gt;&lt;p&gt;or, &lt;/p&gt;&lt;p&gt;  &lt;a href="http://dadamailproject.com/cgi-bin/dada/mail.cgi/u/dada_announce/example/example.com/"&gt;http://dadamailproject.com/cgi-bin/dada/mail.cgi/u/dada_announce/example/example.com/&lt;/a&gt; &lt;/p&gt;&lt;p&gt;tags. Previously, these tags only provided a link to the subscription/unsubscription form, without the email address embedded within the link itself. There is no way to revert this behaviour, but you can still roll your own links, like this: &lt;/p&gt;&lt;p&gt;Subscription Link: &lt;/p&gt;&lt;p&gt; &lt;!-- tmpl_var PROGRAM_URL --&gt;/s/&lt;!-- tmpl_var list_settings.list --&gt; &lt;/p&gt;&lt;p&gt;Unsubscription Link: &lt;/p&gt;&lt;p&gt; &lt;!-- tmpl_var PROGRAM_URL --&gt;/u/&lt;!-- tmpl_var list_settings.list --&gt; &lt;/p&gt;&lt;p&gt;Unsubscription Links Now Mandatory for Mass Mailing Messages Dada Mail will now do a quick check to make sure that there is a Dada Mail Unsubscription link in your mass mailing messages, before sending them out. &lt;/p&gt;&lt;p&gt;If one is not found, one will be automatically appended to the end of your message. &lt;/p&gt;&lt;p&gt;It will not be very fancy. &lt;/p&gt;&lt;p&gt;We suggest that you make sure that you have a real, valid, Dada Mail unsubscription link in your Mailing List Messages. &lt;/p&gt;&lt;p&gt;Bug Fixes 4.0.3 &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Send newest archived message may have outdated header information&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://github.com/justingit/dada-mail/issues/issue/30"&gt;http://github.com/justingit/dada-mail/issues/issue/30&lt;/a&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;pop3 username/password not saved when "Save, Then Test..." button pressed in Sending Preferences&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://github.com/justingit/dada-mail/issues/issue/29"&gt;http://github.com/justingit/dada-mail/issues/issue/29&lt;/a&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Beatitude: Months are listed out of order&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://github.com/justingit/dada-mail/issues/issue/28"&gt;http://github.com/justingit/dada-mail/issues/issue/28&lt;/a&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;profile field names can contain more than just ascii letters, numbers and underscores&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://github.com/justingit/dada-mail/issues/issue/27"&gt;http://github.com/justingit/dada-mail/issues/issue/27&lt;/a&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;list short names can contain more than just ascii letters, numbers and underscores&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://github.com/justingit/dada-mail/issues/issue/26"&gt;http://github.com/justingit/dada-mail/issues/issue/26&lt;/a&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Beatitude:  Scheduled List Not in Any Useable Order?&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://github.com/justingit/dada-mail/issues/issue/16"&gt;http://github.com/justingit/dada-mail/issues/issue/16&lt;/a&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Dada Bridge: Spam Assassin Level Picker isn't available&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://github.com/justingit/dada-mail/issues/issue/21"&gt;http://github.com/justingit/dada-mail/issues/issue/21&lt;/a&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Sending Preferences don't correctly state if you can use Use Secure Sockets Layer (SSL) for POP-before-SMTP&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://github.com/justingit/dada-mail/issues/issue/24"&gt;http://github.com/justingit/dada-mail/issues/issue/24&lt;/a&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Double Subscriptions when using List Invitation&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://github.com/justingit/dada-mail/issues/issue/23"&gt;http://github.com/justingit/dada-mail/issues/issue/23&lt;/a&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Archived messages not templated out in publicly displayed archives&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://github.com/justingit/dada-mail/issues/issue/20"&gt;http://github.com/justingit/dada-mail/issues/issue/20&lt;/a&gt; &lt;/p&gt;&lt;p&gt;*Link to edit subscriber information broken when using the search &lt;/p&gt;&lt;p&gt;&lt;a href="http://github.com/justingit/dada-mail/issues/issue/19"&gt;http://github.com/justingit/dada-mail/issues/issue/19&lt;/a&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Unsubsciption Notice to List Owner doesn't have subscriber (profile) fields&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://github.com/justingit/dada-mail/issues/issue/18"&gt;http://github.com/justingit/dada-mail/issues/issue/18&lt;/a&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Disabled Menu items return server error when using the, "Classic" session type&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;a href="http://github.com/justingit/dada-mail/issues/issue/15"&gt;http://github.com/justingit/dada-mail/issues/issue/15&lt;/a&gt; &lt;/p&gt;    &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2118058455075556259-7628051824027191363?l=perlhackerpainter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://perlhackerpainter.blogspot.com/feeds/7628051824027191363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2118058455075556259&amp;postID=7628051824027191363' title='38 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/7628051824027191363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/7628051824027191363'/><link rel='alternate' type='text/html' href='http://perlhackerpainter.blogspot.com/2010/03/dada-mail-four-point-zero-point-three.html' title=''/><author><name>The Perl Hacker Painter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_NyhUlChDNMo/SOnDW9KuqRI/AAAAAAAAAA0/mWLKf9rraQg/S220/ao-lj.jpg'/></author><thr:total>38</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2118058455075556259.post-5022131600846208169</id><published>2010-02-23T22:33:00.000-08:00</published><updated>2010-02-23T22:38:24.578-08:00</updated><title type='text'>Experimental Dada Mail w/unicode ¡Support! Released</title><content type='html'>(this is a repost from &lt;a href="http://dadamailproject.com/cgi-bin/dada/mail.cgi/archive/dadadev/20100224011503/"&gt;here&lt;/a&gt;, 'cause I'm pretty stoked on it)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is the first step in the localization project, since we can't very well translate Dada Mail if Dada Mail can't use the translations available.&lt;br /&gt;&lt;br /&gt;I have to let this project rest for a little bit (and collect my wits - it was a very difficult step!) but any and all feedback is welcome, if you'd like to give this a spin - bug reports/problems of any kind are very much appreciated.&lt;br /&gt;&lt;br /&gt;This version of Dada Mail should basically be able to support any language that can in the unicode characters set and UTF-8 encoding. Which, should be, well, a lot of them. It doesn't (Dada Mail), but where it fails? I don't know - but it's a good time to test and see where it's wrong.&lt;br /&gt;&lt;br /&gt;For simple Euro-centric stuff, like this:&lt;br /&gt;&lt;br /&gt;   Je peux manger du verre, ça ne me fait pas mal.&lt;br /&gt;&lt;br /&gt;It should be fine. For something a little more wild:&lt;br /&gt; &lt;br /&gt;   أنا قادر على أكل الزجاج و هذا لا يؤلمني.&lt;br /&gt;&lt;br /&gt;(which should be Arabic)&lt;br /&gt;&lt;br /&gt;Well, I can only go on if something visually looks correct :) Even this email is sort of a test - I don't know if it's going to work, or not - so, fingers crossed! If it does - we're on a good track, since Dada Bridge taking a random email, having it go through the system that's mostly tested using a very specific way of creating emails and coming out readable on the other side is a great big step - not even talking about the online archive, rss/atom feeds, twitter thingie, etc, etc, etc.&lt;br /&gt;&lt;br /&gt;Here's the download to the version I'm now running at the Dada Mail support site:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://github.com/downloads/justingit/dada-mail/dada-4_0_2-unicode.zip"&gt;    http://github.com/downloads/justingit/dada-mail/dada-4_0_2-unicode.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://github.com/downloads/justingit/dada-mail/dada-4_0_2-unicode.tar.gz"&gt;    http://github.com/downloads/justingit/dada-mail/dada-4_0_2-unicode.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you want to check it out via github, the branch is at:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://github.com/justingit/dada-mail/tree/charset_work"&gt;    http://github.com/justingit/dada-mail/tree/charset_work&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To grab it with git, you have to do this:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;git clone git://github.com/justingit/dada-mail.git&lt;br /&gt;cd dada-mail&lt;br /&gt;git fetch&lt;br /&gt;git checkout --track -b your_local_branch_name origin/charset_work&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here's the explanation of all that:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://groups.google.com/group/github/browse_thread/thread/71f944b925467ab6"&gt;http://groups.google.com/group/github/browse_thread/thread/71f944b925467ab6&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There's a guide of what to expect with Dada Mail and unicode/UTF-8 you can read here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dadamailproject.com/support/documentation-4_0_2-unicode/features-UTF-8.pod.html"&gt;    http://dadamailproject.com/support/documentation-4_0_2-unicode/features-UTF-8.pod.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Which I'll paste the contents of at the end of this message - but you may also want to compare it to the version of this doc for 4.0.2 STABLE:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dadamailproject.com/support/documentation-4_0_2/features-UTF-8.pod.html"&gt;    http://dadamailproject.com/support/documentation-4_0_2/features-UTF-8.pod.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(Long story short: 4.0.2 UTF-8/Unicode Support: "uhh...")&lt;br /&gt;&lt;br /&gt;And, that's about it. This was a hard part of the project, since this is a 10+ y/o codebase - it very much pre-dates even unicode/UTF-8 support in Perl itself, so there's a reason, I guess, why the program was in such bad shape when it came to support it. Many,&lt;br /&gt;&lt;br /&gt;many many bugs showed themselves, once this feature was asked for. I think a great majority of them have been solved.&lt;br /&gt;&lt;br /&gt;Give it a spin if this interests you and if I can help out with anything, let me know,&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;Introduction&lt;br /&gt;&lt;br /&gt;Dada Mail can speak UTF-8 and almost expects that everything else around it does, too.&lt;br /&gt;&lt;br /&gt;That means:&lt;br /&gt;&lt;br /&gt;   • It treats everything it handles as UTF-8&lt;br /&gt;   • Everything it returns is in UTF-8&lt;br /&gt;How To Have a Pleasant Experience&lt;br /&gt;&lt;br /&gt;If you're installing Dada Mail for the first time, there's nothing you'll need to do, but below are some great guidelines on how to keep your lists configured, so you continue to have a good experience.&lt;br /&gt;&lt;br /&gt;If you're upgrading, make sure your configuration reflects the advice below.&lt;br /&gt;&lt;br /&gt;It's heavily advised to keep everything in Dada Mail speaking UTF-8 without any real exceptions.&lt;br /&gt;&lt;br /&gt;Config Variable: $HTML_CHARSET&lt;br /&gt;&lt;br /&gt;By default, the config variable, $HTML_CHARSET is set to, UTF-8&lt;br /&gt;&lt;br /&gt;Keep it that way, same case (UTF-8) - same everything.&lt;br /&gt;&lt;br /&gt;Dada Mail is only tested with the charset set this way.&lt;br /&gt;&lt;br /&gt;Advanced Sending Preferences&lt;br /&gt;&lt;br /&gt;Default Character Set&lt;br /&gt;&lt;br /&gt;Set this as, UTF-8    UTF-8&lt;br /&gt;&lt;br /&gt;Default Plain Text/HTML Message Encoding&lt;br /&gt;&lt;br /&gt;There's really only a few choices recommended for Dada Mail.&lt;br /&gt;&lt;br /&gt;   • 8bit&lt;br /&gt;Should work.&lt;br /&gt;&lt;br /&gt;   • quoted-printable&lt;br /&gt;&lt;br /&gt;If you have any trouble with 8bit, try quoted-printable. Because of the amount of time that Dada Mail creates, tweaks, formats and templates out email messages, the encoding can potentially get mucked up.&lt;br /&gt;&lt;br /&gt;This potential mucking-up is mitigated when Dada Mail uses quoted-printable encoding internally. This should be the default for email messages.&lt;br /&gt;&lt;br /&gt;Encode Message Headers&lt;br /&gt;&lt;br /&gt;Have this option checked.&lt;br /&gt;&lt;br /&gt;SQL Backends&lt;br /&gt;&lt;br /&gt;Database&lt;br /&gt;&lt;br /&gt;PostgreSQL&lt;br /&gt;&lt;br /&gt;Encoding for PostgreSQL databases is done when the database is created - make sure to create your database with a, UTF-8 encoding, like so:&lt;br /&gt;&lt;br /&gt;CREATE DATABASE dadamail WITH ENCODING 'UTF-8'&lt;br /&gt;MySQL&lt;br /&gt;&lt;br /&gt;Nothing you'll have to do.&lt;br /&gt;&lt;br /&gt;SQLite&lt;br /&gt;&lt;br /&gt;Nothing you'll have to do.&lt;br /&gt;&lt;br /&gt;DBM Files&lt;br /&gt;&lt;br /&gt;DBM Files have no encoding support, but Dada Mail knows this and compensates.&lt;br /&gt;&lt;br /&gt;Schema&lt;br /&gt;&lt;br /&gt;MySQL&lt;br /&gt;&lt;br /&gt;The MySQL schemas are set to create tables with an encoding of, UTF-8&lt;br /&gt;&lt;br /&gt;PostgreSQL&lt;br /&gt;&lt;br /&gt;Nothing has changed.&lt;br /&gt;&lt;br /&gt;SQLite&lt;br /&gt;&lt;br /&gt;Nothing has changed.&lt;br /&gt;&lt;br /&gt;Drivers&lt;br /&gt;&lt;br /&gt;The current support SQL backends, mysql (MySQL), Pg (PostgreSQL) and SQLite all have different ways to somewhat, "enable" their UTF-8 support.&lt;br /&gt;&lt;br /&gt;   • MySQL&lt;br /&gt;add,&lt;br /&gt;&lt;br /&gt;mysql_enable_utf8 =&gt; 1,&lt;br /&gt;has been added to the $DBI_PARAMS hashref.&lt;br /&gt;&lt;br /&gt;   • PostgreSQL&lt;br /&gt;add,&lt;br /&gt;&lt;br /&gt;pg_enable_utf8 =&gt; 1,&lt;br /&gt;has been added to the $DBI_PARAMS hashref.&lt;br /&gt;&lt;br /&gt;   • SQLite&lt;br /&gt;add,&lt;br /&gt;&lt;br /&gt;sqlite_unicode =&gt; 1&lt;br /&gt;has been added to the $DBI_PARAMS hashref.&lt;br /&gt;&lt;br /&gt;No explicit encoding/decoding is done in Dada Mail when saving/retrieving data. Hopefully, the drivers are UTF-8-aware enough.&lt;br /&gt;&lt;br /&gt;Plugins/Extensions&lt;br /&gt;&lt;br /&gt;The Plugins and Extensions that come with Dada Mail have not been as thoroughly tested as the main program. There's still warts.&lt;br /&gt;&lt;br /&gt;Dada Bridge&lt;br /&gt;&lt;br /&gt;Dada Bridge has a unique position needing to handle a lot of different stuff thown at it and deal with it gracefully. Dada Mail does, in fact, handle, any realistic character set/encoding you throw at it, but Dada Mail will convert messages it receives to its internal format, before it resends it out to your list.&lt;br /&gt;&lt;br /&gt;This means the encoding of your choice (8bit or quoted-printable) and the charset of your choice (as long as your charset is, UTF-8)&lt;br /&gt;&lt;br /&gt;Upgrading&lt;br /&gt;&lt;br /&gt;You are potentially going to have problems.&lt;br /&gt;&lt;br /&gt;Its possible that, since List Settings were never decoded/encoded correctly in past versions, they'll show up the program (once you've upgrade) incorrectly. The easiest thing to do is to edit the mistakes and resave the information. For most of the program, you're going to have to manually export the information and re-import it with the correct encoding, sadly. Dada Mail will probably fail gracefully with old information, but it's possible that you'll see squiggly charaters, instead of what you want to see. There's nothing in Dada Mail that will stop this from happening. If you experience it (from old information), we're not going to count it as a bug, but rather a known issue.&lt;br /&gt;&lt;br /&gt;Problems?&lt;br /&gt;&lt;br /&gt;Please let us know via the Support Boards:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dadamailproject.com/support/boards/"&gt;http://dadamailproject.com/support/boards/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Or the developer mailing list:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dadamailproject.com/cgi-bin/dada/mail.cgi/list/dadadev/"&gt;http://dadamailproject.com/cgi-bin/dada/mail.cgi/list/dadadev/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thanks!&lt;br /&gt;&lt;br /&gt;See Also:&lt;br /&gt;&lt;br /&gt;   • The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.joelonsoftware.com/articles/Unicode.html"&gt;http://www.joelonsoftware.com/articles/Unicode.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;   • perlunitut - Perl Unicode Tutorial&lt;br /&gt;&lt;br /&gt;&lt;a href="http://perldoc.perl.org/perlunitut.html"&gt;http://perldoc.perl.org/perlunitut.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;   • perlunifaq - Perl Unicode FAQ&lt;br /&gt;&lt;br /&gt;&lt;a href="http://perldoc.perl.org/perlunifaq.html"&gt;http://perldoc.perl.org/perlunifaq.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;Post:&lt;br /&gt;mailto:dadadev@dadamailproject.com&lt;br /&gt;&lt;br /&gt;Unsubscribe:&lt;br /&gt;&lt;a href="http://dadamailproject.com/cgi-bin/dada/mail.cgi/u/dadadev/"&gt;http://dadamailproject.com/cgi-bin/dada/mail.cgi/u/dadadev/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;List Information:&lt;br /&gt;&lt;a href="http://dadamailproject.com/cgi-bin/dada/mail.cgi/list/dadadevhttp://dadamailproject.com/cgi-bin/dada/mail.cgi/list/dadadev"&gt;http://dadamailproject.com/cgi-bin/dada/mail.cgi/list/dadadev&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Archive:&lt;br /&gt;&lt;a href="http://dadamailproject.com/cgi-bin/dada/mail.cgi/archive/dadadev"&gt;http://dadamailproject.com/cgi-bin/dada/mail.cgi/archive/dadadev&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Developer Info:&lt;br /&gt;&lt;a href="http://dev.dadamailproject.com"&gt;http://dev.dadamailproject.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2118058455075556259-5022131600846208169?l=perlhackerpainter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://perlhackerpainter.blogspot.com/feeds/5022131600846208169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2118058455075556259&amp;postID=5022131600846208169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/5022131600846208169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/5022131600846208169'/><link rel='alternate' type='text/html' href='http://perlhackerpainter.blogspot.com/2010/02/experimental-dada-mail-wunicode-support.html' title='Experimental Dada Mail w/unicode ¡Support! Released'/><author><name>The Perl Hacker Painter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_NyhUlChDNMo/SOnDW9KuqRI/AAAAAAAAAA0/mWLKf9rraQg/S220/ao-lj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2118058455075556259.post-1217182046034990500</id><published>2010-02-20T14:19:00.001-08:00</published><updated>2010-02-20T15:16:51.260-08:00</updated><title type='text'>Perl HTML::Template and UTF-8 Unicode</title><content type='html'>HTML::Template does not support file encoding:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/perl -w&lt;br /&gt;use strict;&lt;br /&gt;use Encode;&lt;br /&gt;use HTML::Template;&lt;br /&gt;my $template = HTML::Template-&gt;new(&lt;br /&gt;filehandle =&gt; *DATA,&lt;br /&gt;);&lt;br /&gt;print Encode::encode('UTF-8', $template-&gt;output);&lt;br /&gt;__DATA__&lt;br /&gt;¡™£¢∞§¶•ªº&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;prints, Â¡â„¢Â£Â¢âˆžÂ§Â¶â€¢ÂªÂº (or something like that!)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;In the example above, this makes sense, since we're printing on an open filehandle (even if it's only to our magical, DATA) that we didn't put a file layer filter thingy to. That's easy to fix:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/perl -w&lt;br /&gt;use strict;&lt;br /&gt;use Encode;&lt;br /&gt;&lt;br /&gt;binmode DATA, ':encoding(UTF-8)';&lt;br /&gt;&lt;br /&gt;use HTML::Template;&lt;br /&gt;my $template = HTML::Template-&gt;new(&lt;br /&gt;     filehandle =&gt; *DATA,&lt;br /&gt;);&lt;br /&gt;print Encode::encode('UTF-8', $template-&gt;output);&lt;br /&gt;__DATA__&lt;br /&gt;¡™£¢∞§¶•ªº&lt;br /&gt;&lt;/pre&gt; &lt;span&gt;prints&lt;/span&gt;&lt;span style="font-style: italic;"&gt;, ¡™£¢∞§¶•ªº&lt;/span&gt;, yay!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This also works if we want to just pass a reference to a scalar to HTML::Template:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/perl -w&lt;br /&gt;use strict;&lt;br /&gt;use Encode;&lt;br /&gt;my $content    = "\x{a1}\x{2122}\x{a3}\x{a2}\x{221e}\x{a7}\x{b6}\x{2022}\x{aa}\x{ba}";&lt;br /&gt;use HTML::Template;&lt;br /&gt;my $template = HTML::Template-&gt;new(&lt;br /&gt;     scalarref =&gt; \$content,&lt;br /&gt;);&lt;br /&gt;print Encode::encode('UTF-8', $template-&gt;output);&lt;br /&gt;&lt;/pre&gt;  &lt;span&gt;prints&lt;/span&gt;&lt;span style="font-style: italic;"&gt;, ¡™£¢∞§¶•ªº&lt;/span&gt;, yay!&lt;br /&gt;&lt;br /&gt;This doesn't work, if we want to just give it a name of a template file. This is really useful, since HTML::Template has a feature to allow you to search through a file structure (or at least an array of directories, looking for the file).&lt;br /&gt;&lt;br /&gt;And this is where encoding madness begins.&lt;br /&gt;&lt;br /&gt;Cause I know what you're thinking, just treat HTML::Template's output like information that's coming from outside your program (since, if you're using a template *file*, it kinda is).&lt;br /&gt;&lt;br /&gt;So, all you need to do is decode (this is the WRONG WAY to solve the problem, but let's just make that mistake...) the return value of -&gt;output, like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/perl -w&lt;br /&gt;use strict;&lt;br /&gt;use Encode;&lt;br /&gt;my $content = "\x{a1}\x{2122}\x{a3}\x{a2}\x{221e}\x{a7}\x{b6}\x{2022}\x{aa}\x{ba}";&lt;br /&gt;&lt;br /&gt;my $filename = 'utf8string.tmpl';&lt;br /&gt;&lt;br /&gt;open my $fh, '&gt;:encoding(UTF-8)', $filename or die $!;&lt;br /&gt;print $fh $content;&lt;br /&gt;close $fh;&lt;br /&gt;&lt;br /&gt;use HTML::Template;&lt;br /&gt;my $template = HTML::Template-&gt;new(&lt;br /&gt;     filename =&gt; $filename,&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;my $output = $template-&gt;output;&lt;br /&gt;$output = Encode::decode('UTF-8', $output);&lt;br /&gt;&lt;br /&gt;print Encode::encode('UTF-8', $output);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;prints, &lt;em&gt;¡™£¢∞§¶•ªº&lt;/em&gt;. Yes.&lt;br /&gt;&lt;br /&gt;But... what if you have a variable (it &lt;span style="font-style: italic;"&gt;is&lt;/span&gt; a templating system) and the variable in the param() you pass has UTF-8 strings? MUAHAHA!&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/perl -w&lt;br /&gt;use strict;&lt;br /&gt;use Encode;&lt;br /&gt;my $content = "&lt;br /&gt;&amp;lt;!-- tmpl_var one --&amp;gt;&lt;br /&gt;\x{a1}\x{2122}\x{a3}\x{a2}\x{221e}\x{a7}\x{b6}\x{2022}\x{aa}\x{ba}&lt;br /&gt;";&lt;br /&gt;&lt;br /&gt;my $filename = 'utf8string.tmpl';&lt;br /&gt;&lt;br /&gt;open my $fh, '&gt;:encoding(UTF-8)', $filename or die $!;&lt;br /&gt;print $fh $content;&lt;br /&gt;close $fh;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;use HTML::Template;&lt;br /&gt;my $template = HTML::Template-&gt;new(&lt;br /&gt;     filename =&gt; $filename,&lt;br /&gt;);&lt;br /&gt;$template-&gt;param(&lt;br /&gt;one =&gt; "\x{a1}\x{2122}\x{a3}\x{a2}\x{221e}\x{a7}\x{b6}\x{2022}\x{aa}\x{ba}",&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;my $output = $template-&gt;output;&lt;br /&gt;$output = Encode::decode('UTF-8', $output);&lt;br /&gt;&lt;br /&gt;print Encode::encode('UTF-8', $output);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Cannot decode string with wide characters at /System/Library/Perl/5.10.0/darwin-thread-multi-2level/Encode.pm line 162.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bahahaha!&lt;br /&gt;&lt;br /&gt;Take those decode/encode lines (I know it looks strange to one, right after the other ) and you'll still get a weird output:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;¡™£¢∞§¶•ªº&lt;br /&gt;Â¡â„¢Â£Â¢âˆžÂ§Â¶â€¢ÂªÂº&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Darned if you do/don't. Those two lines should have the same string. They don't. No amount of encoding/decoding is going to help.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The trick, other than tweaking HTML::Template's source to include file filter layer thingamabobs, is to decode the contents of the file it opens up.&lt;br /&gt;&lt;br /&gt;How to do that.&lt;br /&gt;&lt;br /&gt;Trolling through the HTML::Template mailing list archives leads to the idea of using a HTML::Template filter that matches everything, that then does our decoding:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/perl -w&lt;br /&gt;use strict;&lt;br /&gt;use Encode;&lt;br /&gt;my $content = "&lt;br /&gt;&amp;lt;!-- tmpl_var one --&amp;gt;&lt;br /&gt;\x{a1}\x{2122}\x{a3}\x{a2}\x{221e}\x{a7}\x{b6}\x{2022}\x{aa}\x{ba}&lt;br /&gt;";&lt;br /&gt;&lt;br /&gt;my $filename = 'utf8string.tmpl';&lt;br /&gt;&lt;br /&gt;open my $fh, '&gt;:encoding(UTF-8)', $filename or die $!;&lt;br /&gt;print $fh $content;&lt;br /&gt;close $fh;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;use HTML::Template;&lt;br /&gt;my $template = HTML::Template-&gt;new(&lt;br /&gt;     filename =&gt; $filename,&lt;br /&gt;     filter =&gt; [&lt;br /&gt;       { sub =&gt; \&amp;amp;decode_str, format =&gt; 'scalar' },&lt;br /&gt;     ],&lt;br /&gt;);&lt;br /&gt;$template-&gt;param(&lt;br /&gt;one =&gt; "\x{a1}\x{2122}\x{a3}\x{a2}\x{221e}\x{a7}\x{b6}\x{2022}\x{aa}\x{ba}",&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;my $output = $template-&gt;output;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;print Encode::encode('UTF-8', $output);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;sub decode_str {&lt;br /&gt;my $ref = shift;&lt;br /&gt;${$ref} = Encode::decode('UTF-8', ${$ref});&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This sort of lines up all the data to be UTF-8 encoded and aware and all that stuff that the unicodefaqthingy perldoc tells you to do.&lt;br /&gt;&lt;br /&gt;But, oh, it gets better.&lt;br /&gt;&lt;br /&gt;DON'T use that filter trick thing if you're using a scalarref, or a properly encoded file handle! You'll get a nice error, like this:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;HTML::Template-&gt;new() : fatal error occured during filter call: Cannot decode string with wide characters at /System/Library/Perl/5.10.0/darwin-thread-multi-2level/Encode.pm line 162.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;at /Library/Perl/5.10.0/HTML/Template.pm line 1697&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;HTML::Template::_init_template('HTML::Template=HASH(0x1008aafb8)') called at /Library/Perl/5.10.0/HTML/Template.pm line 1238&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;HTML::Template::_init('HTML::Template=HASH(0x1008aafb8)') called at /Library/Perl/5.10.0/HTML/Template.pm line 1124&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Brilliant.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So I don't know what the best advice is to give. If you're passing the template as a scalarref, DON'T use that filter, unless you want to, perhaps encode your template beforehand (which makes little sense?)&lt;br /&gt;&lt;br /&gt;If it's a filename, use that filter trick perhaps (or edit the sourcecode of HTML::Template).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2118058455075556259-1217182046034990500?l=perlhackerpainter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://perlhackerpainter.blogspot.com/feeds/1217182046034990500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2118058455075556259&amp;postID=1217182046034990500' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/1217182046034990500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/1217182046034990500'/><link rel='alternate' type='text/html' href='http://perlhackerpainter.blogspot.com/2010/02/perl-htmltemplate-and-utf-8-unicode.html' title='Perl HTML::Template and UTF-8 Unicode'/><author><name>The Perl Hacker Painter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_NyhUlChDNMo/SOnDW9KuqRI/AAAAAAAAAA0/mWLKf9rraQg/S220/ao-lj.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2118058455075556259.post-9073554169368879826</id><published>2010-02-15T16:48:00.001-08:00</published><updated>2010-02-15T17:24:59.572-08:00</updated><title type='text'>Perl, UTF-8 Email Messages, MIME::Enity and QuotedPrintable encoding</title><content type='html'>&lt;p&gt;Some findings after much bashing of head:&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/perl -w&lt;br /&gt;use strict;&lt;br /&gt;&lt;br /&gt;use MIME::Entity;&lt;br /&gt;use Encode;&lt;br /&gt;&lt;br /&gt;# My UTF-8 string -&lt;br /&gt;# ¡™£¢∞§¶•ªº&lt;br /&gt;# Basically using Mac OS X, just hold down the alt/option key and hit the 1 through 0 keys, in succession:&lt;br /&gt;#&lt;br /&gt;my $content    = "\x{a1}\x{2122}\x{a3}\x{a2}\x{221e}\x{a7}\x{b6}\x{2022}\x{aa}\x{ba}";&lt;br /&gt;&lt;br /&gt;# Build the message, using MIME::Entity.&lt;br /&gt;# MAKE SURE TO ALWAYS encode('UTF-8', 'string') BEFORE ADDING&lt;br /&gt;# Always.&lt;br /&gt;&lt;br /&gt;my $pt_entity = MIME::Entity-&gt;build(&lt;br /&gt; Type    =&gt; 'text/plain',&lt;br /&gt; Data    =&gt; Encode::encode('UTF-8', $content),&lt;br /&gt; Encoding =&gt; 'quoted-printable',&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# MAKE SURE TO ALWAYS decode('UTF-8', 'string') BEFORE WORKING WITH STRING&lt;br /&gt;# Always.&lt;br /&gt;my $new_content = $pt_entity-&gt;bodyhandle-&gt;as_string;&lt;br /&gt;$new_content = Encode::decode('UTF-8', $new_content);&lt;br /&gt;&lt;br /&gt;# For example, we're just going to reverse it:&lt;br /&gt;$new_content = reverse($new_content);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;my $io = $pt_entity-&gt;bodyhandle-&gt;open('w');&lt;br /&gt;&lt;br /&gt;# YES. You will will need to encode content using the bodyhandle. Always.&lt;br /&gt;# Always.&lt;br /&gt;&lt;br /&gt;$new_content = Encode::encode('UTF-8', $new_content);&lt;br /&gt;$io-&gt;print($new_content); &lt;br /&gt;$io-&gt;close;&lt;br /&gt;$pt_entity-&gt;sync_headers(&lt;br /&gt; 'Length'      =&gt;  'COMPUTE',&lt;br /&gt;'Nonstandard' =&gt;  'ERASE'&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# And, that's it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Before using the content, decode&lt;br /&gt;# Always.&lt;br /&gt;my $result =  $pt_entity-&gt;bodyhandle-&gt;as_string;&lt;br /&gt;$result = Encode::decode('UTF-8', $result);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Always encode, before printing.&lt;br /&gt;# Always.&lt;br /&gt;#&lt;br /&gt;# prints, ºª•¶§∞¢£™¡&lt;br /&gt;print Encode::encode('UTF-8', $result);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The trick is to always, always, always encode your data, before creating any sort of entity using MIME::Entity and to always, always always decode the data you get using &lt;code&gt;bodyhandle()&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This workflow is strange, since you're told not to encode data, until you're ready to print it. I suspect there's some weird IO::File stuff going on with MIME::Entity (and friends), or, want to think of saving binary data, instead of characters when creating MIME stuff. I don't know.&lt;br /&gt;&lt;br /&gt;If you do not encode before, MIME::Entity will barf, when using the quoted/printable encoding, but will probably be just fine with, "8bit" encoding.&lt;br /&gt;&lt;br /&gt;This was a huge headache to figure out.&lt;br /&gt;&lt;br /&gt;This will all seem to work out, if you don't do that first encode:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/perl -w&lt;br /&gt;use strict;&lt;br /&gt;&lt;br /&gt;use lib qw(/Users/justin/Documents/DadaMail/git/dada-mail/dada/DADA/perllib);&lt;br /&gt;&lt;br /&gt;use MIME::Entity;&lt;br /&gt;use Encode;&lt;br /&gt;&lt;br /&gt;# My UTF-8 string -&lt;br /&gt;# ¡™£¢∞§¶•ªº&lt;br /&gt;# Basically using Mac OS X, just hold down the alt/option key and hit the 1 through 0 keys, in succession:&lt;br /&gt;#&lt;br /&gt;my $content    = "\x{a1}\x{2122}\x{a3}\x{a2}\x{221e}\x{a7}\x{b6}\x{2022}\x{aa}\x{ba}";&lt;br /&gt;&lt;br /&gt;# Build the message, using MIME::Entity.&lt;br /&gt;# MAKE SURE TO ALWAYS encode('UTF-8', 'string') BEFORE ADDING&lt;br /&gt;# Always.&lt;br /&gt;&lt;br /&gt;my $pt_entity = MIME::Entity-&gt;build(&lt;br /&gt; Type    =&gt; 'text/plain',&lt;br /&gt;# Data    =&gt; Encode::encode('UTF-8', $content),&lt;br /&gt; Data    =&gt; $content,&lt;br /&gt; Encoding =&gt; 'quoted-printable',&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;my $s =  $pt_entity-&gt;bodyhandle-&gt;as_string;&lt;br /&gt;&lt;br /&gt;$s = Encode::decode('UTF-8', $s);&lt;br /&gt;&lt;br /&gt;# Let's do a little string manip:&lt;br /&gt;$s = reverse($s);&lt;br /&gt;&lt;br /&gt;$s = Encode::encode('UTF-8', $s);&lt;br /&gt;&lt;br /&gt;print $s;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;code&gt;&lt;strong&gt;&lt;br /&gt;Cannot decode string with wide characters at /System/Library/Perl/5.10.0/darwin-thread-multi-2level/Encode.pm line 162.&lt;br /&gt;&lt;br /&gt;exception_handler::die     in Encode.pm at line 162&lt;br /&gt;Encode::decode     in test7.pl at line 28&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So do that first encode, please. If you don't follow this formula, your prog may work, until that last encode:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt; &lt;br /&gt;#!/usr/bin/perl -w&lt;br /&gt;use strict; &lt;br /&gt;&lt;br /&gt;use lib qw(/Users/justin/Documents/DadaMail/git/dada-mail/dada/DADA/perllib); &lt;br /&gt;&lt;br /&gt;use MIME::Entity; &lt;br /&gt;use Encode; &lt;br /&gt;&lt;br /&gt;# My UTF-8 string - &lt;br /&gt;# ¡™£¢∞§¶•ªº&lt;br /&gt;# Basically using Mac OS X, just hold down the alt/option key and hit the 1 through 0 keys, in succession: &lt;br /&gt;#&lt;br /&gt;my $content    = "\x{a1}\x{2122}\x{a3}\x{a2}\x{221e}\x{a7}\x{b6}\x{2022}\x{aa}\x{ba}";&lt;br /&gt;&lt;br /&gt;# Build the message, using MIME::Entity. &lt;br /&gt;# MAKE SURE TO ALWAYS encode('UTF-8', 'string') BEFORE ADDING&lt;br /&gt;# Always. &lt;br /&gt;&lt;br /&gt;my $pt_entity = MIME::Entity-&gt;build(&lt;br /&gt; Type    =&gt; 'text/plain', &lt;br /&gt;# Data    =&gt; Encode::encode('UTF-8', $content),&lt;br /&gt;  Data    =&gt; $content, &lt;br /&gt; Encoding =&gt; 'quoted-printable',&lt;br /&gt; );&lt;br /&gt;&lt;br /&gt;my $s =  $pt_entity-&gt;bodyhandle-&gt;as_string; &lt;br /&gt;&lt;br /&gt;# NAW, we don't need that&lt;br /&gt;# $s = Encode::decode('UTF-8', $s); &lt;br /&gt;&lt;br /&gt;# Let's do a little string manip: &lt;br /&gt;$s = reverse($s); &lt;br /&gt;&lt;br /&gt;# Well, that's silly! We don't need that one, either! &lt;br /&gt;# $s = Encode::encode('UTF-8', $s); &lt;br /&gt;&lt;br /&gt;print $s;&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;strong&gt; &lt;br /&gt;Wide character in print at /Users/justin/Desktop/test7.pl line 37.&lt;br /&gt;&lt;/strong&gt;&lt;/code&gt; &lt;br /&gt;&lt;br /&gt;And, you will do what I do, and bang your head, some more. &lt;br /&gt;&lt;br /&gt;I couldn't fine any info on how to handle things like MIME::Entity and UTF-8 encoding, in the excellent articles available such as this one: &lt;br /&gt;&lt;br /&gt;&lt;a href="http://ahinea.com/en/tech/perl-unicode-struggle.html"&gt;http://ahinea.com/en/tech/perl-unicode-struggle.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and, &lt;br /&gt;&lt;br /&gt;&lt;a href="http://perlgeek.de/en/article/encodings-and-unicode"&gt;http://perlgeek.de/en/article/encodings-and-unicode&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and, &lt;br /&gt;&lt;br /&gt;&lt;a href="http://juerd.nl/site.plp/perluniadvice"&gt;http://juerd.nl/site.plp/perluniadvice&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I have this article labeled as, "do not trust" &lt;br /&gt;&lt;br /&gt;&lt;a href="http://kbinstuff.googlepages.com/perl,unicodeutf8,cgi.pm,apache,mod_perla"&gt;http://kbinstuff.googlepages.com/perl,unicodeutf8,cgi.pm,apache,mod_perla&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Because it states, &lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;6.1. Encode::encode/decode&lt;br /&gt;&lt;br /&gt;For start, you should avoid using Encode::encode/decode/from_to to the greatest possible extent in your scripts. This will only lead to great confusion later. You may think you have gotten everything to work, but then a week later, you shall only add a little more functionality to your work and suddenly, everything falls apart and doodles will appear on your web pages.&lt;/blockquote&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I guess I understand what they mean - but you'll need to encode your UTF-8 stuff before it exits your program. Always. And, you have to decode UTF-8 info that goes out of your program. Always. How do you do this? Uh-huh, the Encode module. &lt;br /&gt;&lt;br /&gt;Like it says in the perldoc for unicode. So, I don't know what this page is yabbering about. I'm sure, behind the scense, Encode is used when open files with a specific encoding: &lt;br /&gt;&lt;br /&gt;&lt;a href="http://perldoc.perl.org/perluniintro.html#Unicode-I/O"&gt;http://perldoc.perl.org/perluniintro.html#Unicode-I/O&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Which, by the way of features, is a pretty rad one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2118058455075556259-9073554169368879826?l=perlhackerpainter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://perlhackerpainter.blogspot.com/feeds/9073554169368879826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2118058455075556259&amp;postID=9073554169368879826' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/9073554169368879826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/9073554169368879826'/><link rel='alternate' type='text/html' href='http://perlhackerpainter.blogspot.com/2010/02/perl-utf-8-email-messages-mimeenity-and.html' title='Perl, UTF-8 Email Messages, MIME::Enity and QuotedPrintable encoding'/><author><name>The Perl Hacker Painter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_NyhUlChDNMo/SOnDW9KuqRI/AAAAAAAAAA0/mWLKf9rraQg/S220/ao-lj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2118058455075556259.post-8342671604073166321</id><published>2009-08-27T22:49:00.000-07:00</published><updated>2009-08-27T22:54:26.270-07:00</updated><title type='text'>ANNOUNCE: Dada Mail 3.1 alpha 3 Released</title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;(I thought I'd re-post this announcement, since I don't think many people in the perl community really know about this large project. It IS NOT Modern Perl written, as it dates back to even before Perl 5.6, but it's a very large and complex Perl program, that's still sorta/kinda easy to install. (Royal) we try.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dada Mail 3.1 alpha 3 Released&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;After a month and a half of more development from the last release, Dada Mail 3.1 alpha 3 has been released.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Download&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;tar.gz:&lt;br /&gt;&lt;br /&gt;    &lt;a href="http://github.com/justingit/dada-mail/tarball/v3_1_0_alpha3-08_26_09"&gt;http://github.com/justingit/dada-mail/tarball/v3_1_0_alpha3-08_26_09&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;zip:&lt;br /&gt;&lt;br /&gt;    &lt;a href="http://github.com/justingit/dada-mail/zipball/v3_1_0_alpha3-08_26_09"&gt;http://github.com/justingit/dada-mail/zipball/v3_1_0_alpha3-08_26_09&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Changes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To get caught up in what's changed, please see:&lt;br /&gt;&lt;br /&gt;Dada Mail 3.0 to 3.1 Changelog&lt;br /&gt;&lt;br /&gt;    &lt;a href="http://dadamailproject.com/support/documentation-dada-3_1_0-alpha_3/changes_3.0_3.1.pod.html"&gt;http://dadamailproject.com/support/documentation-dada-3_1_0-alpha_3/changes_3.0_3.1.pod.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Dada Mail 3.0 to Dada Mail 3.1 Guide&lt;br /&gt;&lt;br /&gt;    &lt;a href="http://dadamailproject.com/support/documentation-dada-3_1_0-alpha_3/dada3_0_to_dada3_1.pod.html"&gt;http://dadamailproject.com/support/documentation-dada-3_1_0-alpha_3/dada3_0_to_dada3_1.pod.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;An overview of some of the new features, including:&lt;br /&gt;&lt;br /&gt;Dada Profiles (BIG Feature)&lt;br /&gt;&lt;br /&gt;    &lt;a href="http://dadamailproject.com/support/documentation-dada-3_1_0-alpha_3/features-profiles.pod.html"&gt;http://dadamailproject.com/support/documentation-dada-3_1_0-alpha_3/features-profiles.pod.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Multiple Mailing List Sending&lt;br /&gt;&lt;br /&gt;    &lt;a href="http:///dadamailproject.com/support/documentation-dada-3_1_0-alpha_3/features-multiple_list_sending.pod.html"&gt;http:///dadamailproject.com/support/documentation-dada-3_1_0-alpha_3/features-multiple_list_sending.pod.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(VERY initial) UTF-8 Support&lt;br /&gt;&lt;br /&gt;    &lt;a href="http://dadamailproject.com/support/documentation-dada-3_1_0-alpha_3/features-UTF-8.pod.html"&gt;http://dadamailproject.com/support/documentation-dada-3_1_0-alpha_3/features-UTF-8.pod.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you plan on upgrading, please also see the 3.0 to 3.1 migration tool:&lt;br /&gt;&lt;br /&gt;    &lt;a href="http://dadamailproject.com/support/documentation-dada-3_1_0-alpha_3/dada_3_to_dada_3.1_sql.pl.html"&gt;http://dadamailproject.com/support/documentation-dada-3_1_0-alpha_3/dada_3_to_dada_3.1_sql.pl.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;which should make things a little more pleasant.&lt;br /&gt;&lt;br /&gt;There's also more development docs for the new API, including:&lt;br /&gt;&lt;br /&gt;DADA::Profile&lt;br /&gt;&lt;br /&gt;    &lt;a href="http://dadamailproject.com/support/documentation-dada-3_1_0-alpha_3/Profile.pm.html"&gt;http://dadamailproject.com/support/documentation-dada-3_1_0-alpha_3/Profile.pm.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;DADA::Profile::Fields&lt;br /&gt;&lt;br /&gt;    &lt;a href="http://dadamailproject.com/support/documentation-dada-3_1_0-alpha_3/Profile_Fields.pm.html"&gt;http://dadamailproject.com/support/documentation-dada-3_1_0-alpha_3/Profile_Fields.pm.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;DADA::Profile::Session&lt;br /&gt;&lt;br /&gt;    &lt;a href="http://dadamailproject.com/support/documentation-dada-3_1_0-alpha_3/Profile_Session.pm.html"&gt;http://dadamailproject.com/support/documentation-dada-3_1_0-alpha_3/Profile_Session.pm.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;DADA::ProfileFieldsManager&lt;br /&gt;&lt;br /&gt;    &lt;a href="http://dadamailproject.com/support/documentation-dada-3_1_0-alpha_3/ProfileFieldsManager.pm.html"&gt;http://dadamailproject.com/support/documentation-dada-3_1_0-alpha_3/ProfileFieldsManager.pm.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;What is Dada Mail?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dada Mail is a completely contemporary, mature and intuitive web-based e-mail list management system, which runs on most any Unix-like hosting account that can run custom CGI scripts (details). Dada Mail is also a conceptual art project.&lt;br /&gt;Dada Mail handles Closed-Loop Opt-in/Opt-out subscriptions, sending complex announce-only and/or discussion mailing list messages with an advanced, fault-tolerant mass mailing monitor, supports the archiving/viewing/searching/resending/syndicating (rss, atom) of sent messages and doing all this and a whole lot more with style.&lt;br /&gt;&lt;br /&gt;Dada Mail can handle custom subscriber fields and you can use the information it captures for partial list sending based on a query and Dada Mail's email templating system allows you to create targeted and completely custom email messages for each and every one one of your subscribers.&lt;br /&gt;&lt;br /&gt;Dada Mail is bundled with additional plugins and extensions to extend Dada Mail's capabilities. Some of the plugins/extensions support advanced bounce handling, clickthrough tracking, mass mail scheduling, blog interfaces of archived messages, AJAX subscription form trickery and lots of other surprises.&lt;br /&gt;&lt;br /&gt;Dada Mail produces XHTML valid web content and sticks to best practices when creating email messages. Write Once: Distribute Everywhere. Dada Mail is free software that you're able to use, modify, share and enhance under the terms of the GNU General Public License. Dada Mail is written in Perl because we love Perl.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2118058455075556259-8342671604073166321?l=perlhackerpainter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://perlhackerpainter.blogspot.com/feeds/8342671604073166321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2118058455075556259&amp;postID=8342671604073166321' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/8342671604073166321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/8342671604073166321'/><link rel='alternate' type='text/html' href='http://perlhackerpainter.blogspot.com/2009/08/announce-dada-mail-31-alpha-3-released.html' title='ANNOUNCE: Dada Mail 3.1 alpha 3 Released'/><author><name>The Perl Hacker Painter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_NyhUlChDNMo/SOnDW9KuqRI/AAAAAAAAAA0/mWLKf9rraQg/S220/ao-lj.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2118058455075556259.post-3086101663349340119</id><published>2009-01-22T17:48:00.000-08:00</published><updated>2009-01-22T18:11:30.785-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perl perl6 rakudo logo trademark'/><title type='text'>A Logo design for Rakudo Perl 6</title><content type='html'>The below is a post I started on perl6-users@perl.org and is amended by the last weeks of replies.&lt;br /&gt;&lt;br /&gt;I'm posting it below to garner a few more eyeballs, before I go from a, "research" stage to a, "playful" stage of trying simple things out and seeing if anything makes sense.&lt;br /&gt;&lt;br /&gt;If you're a part of the Perl community, I'd love to hear your input as a Kaduo Perl 6 logo may be something you'll see almost every day:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Hello everyone,&lt;br /&gt;&lt;br /&gt;A few weeks ago, probably more than I want to admit (but here! See! My Notes! I've been up to something!), there was one of those, "OMG! Perl is going to DIE!" threads, somewhere and the, "Well, do something about it" call came out, and I sort of replied, "well, alright" and gave my open ended hand to some design work.&lt;br /&gt;&lt;br /&gt;Moritz was one of the first to guide it to the idea of making a logo for Rakudo Perl 6 - as there's nothing yet (really) available. I thought that would be a neat project and scratch some of my person itches.&lt;br /&gt;&lt;br /&gt;A slight background on me: I'm that guy:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://xkcd.com/519/"&gt;    http://xkcd.com/519/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;br /&gt;(Although, there should be two more columns for, "Skateboarding" and, "Rock Climbing" in there). I really started working with Perl during a internship in college which started me in a full time job doin' the stuff, which got me to where I am today: just working for myself.&lt;br /&gt;&lt;br /&gt;In all of that, I also managed to get through Art School (guess what paid for *that*!). A lot of my work deals with language and text, writing and communication. Some of my work bordered on generative work, but most of it stayed on the canvas, as I wanted to go to school to learn to paint.&lt;br /&gt;&lt;br /&gt;Anyways, I've always wanted to help out on larger-than-myself Perl projects, but, although I think my perl-fu is, well, alright - it's not wizard-like.  But! I think an interesting niche that I could fill is as someone who, "gets" Perl and it's wonderful and varied culture and also, "gets" visual communication and all that. I am a firm believer that a healthy community is one full of diversity and successful projects come not out of one genius, but of many just normal people, and that's me: just a normal person.&lt;br /&gt;&lt;br /&gt;Here's some notes I've collected about what people have said Rakudo Perl 6 is, which is a good baseline on what a logo should try to reflect and communicate:&lt;br /&gt;&lt;br /&gt;Rakudo Perl is:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Perl 6 on Parrot&lt;/li&gt;&lt;li&gt;Rakudo as a *implementation* of a *specification*&lt;/li&gt;&lt;li&gt;Rakuda-do (Japanese): Way of the Camel&lt;/li&gt;&lt;li&gt;Rakudo (Japanese):    Paradise&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Camels, Paradise/Oasis, etc. It's good visuals and it's easy to digest. Camels are mean and smelly close up, but we don't have to get all that close - it's good to remember they're also extremely useful and in some places, absolutely critical to ways of life.&lt;br /&gt;&lt;br /&gt;It also doesn't stray far from the original Perl 5 image of Camels and Pyramids and all that jazz. The Japanese lean on all this seems important too, perhaps to get a little more mindshare from the folks that find Ruby interesting and attractive (more on that in just a little bit)&lt;br /&gt;&lt;br /&gt;One of the main fears with this name, "Rakudo Perl 6" - at least when it first came out, is that describing Rakudo Perl as, "An implementation (one of possibly, many) of the Perl 6 Specification, built on top of the Parrot Virtual Machine", will leave people going,&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    "Huh?!"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I think this is a good reason as anything, to think of getting a visual representation of this, somewhat complicated idea out ASAP.&lt;br /&gt;&lt;br /&gt;It's interesting that Japanese Word(s) were chosen as the new name - it's grown on me - I like it. Japanese Art and Poetry has the idea of the, "haiga" and the, "gō" - which is sort of like a pen-name, but it changes if there's a change in the style of the artist during their career. You could think of, "Rakudo" as a new, "haiga" for Perl - at least the concept makes things clear to me: we've changed course, but it's still the same hand.&lt;br /&gt;&lt;br /&gt;I was also, incidentally, doing some research on the origins of the Latin alphabet - I'm very curious about languages in general - mostly how they're abused in media and popular culture, but also in learning new ones - I took a brief stint solo in France armed with a 5 week Free University course in French to see how well I could get along. Eye-opening.&lt;br /&gt;&lt;br /&gt;I happened upon the book, "Mysteries of the Alphabet" (Narc-Alain Ouknin - originally written *in* French) in the shelves of someone I was hanging out with. It's main thesis, really is the Latin/Greek alphabet started with something they term the, "Proto-Sinaitic" alphabet, which was created around the time the lost tribe of Israel was figuring itself out. Moses and all.&lt;br /&gt;&lt;br /&gt;One of the, well, the third letter in their alphabet is, "gimmel", which comes from the word gamel, which, if you didn't guess already means, "Camel"! It looks either like the neck of a camel - or, perhaps it's hump. If you think of, "gimmel" as our, "C" you can sort of still see a hump of a camel, if you just turn the, "C" 90 degrees, clockwise.&lt;br /&gt;&lt;br /&gt;Early written languages like Proto-Sinaitic are sort of the beginning where pictograms that stood for what things looked like, where changed into a way of writing about an idea - a lot of these early letters still hold a lot of the original meanings. Hebrew, for instance still does and each character is rich in back history. I like the Proto-Sinaitic link, since it's less loaded quite as intensely as Hebrew, which is invariably tied to major traditions and religions.&lt;br /&gt;&lt;br /&gt;The, "Gimmel" character is no exception.  Start from, "Mysteries of the Alphabet"&lt;br /&gt;------------------------------------------------------------------------------&lt;br /&gt;:: Original Meanings&lt;br /&gt;Carrying the Primal Power beyond, outside the domestic setting&lt;br /&gt;&lt;br /&gt;:: Derivative Meanings&lt;br /&gt;Outgoing, break, carry to another, do good, return a favor&lt;br /&gt;&lt;br /&gt;:: Acquired Meanings, Perpetuated By The Hebrew Language&lt;br /&gt;&lt;br /&gt;Ripen, Ween, Enable to ripen&lt;br /&gt;Release Oneself, Break Away From&lt;br /&gt;------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Which I think beautiful illustrates a nice connection between Perl 5 and Perl 6,  Rakuda-do/Rakudo and haiga pen-names - and the, "Big Picture" of what exactly Perl 6 is all about - standing apart from the lineage, but still being, well, "Perl", using the Camel (gimmel) as a fundamental icon from way WAY back in time there -&lt;br /&gt;&lt;br /&gt;and it all sounds so Perlish of picking and choosing the best from many ideas and languages.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Taking a step back from this soup of ideas and thinking of a logo itself, it seems that it would help to produce something that's made of somewhat interlocking and inter-related pieces: Perl on Parrot has two separate pieces that come together and complete an idea. But there's other things that could take, "Perl's" place, so it's really,&lt;br /&gt;&lt;br /&gt;  &lt;code&gt;$x on Parrot&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;It seems that if a logo would be made, we can modularize, say, that Parrot part and use it for other things - same with the Perl part, if you get into it. Modularization is a way of getting ready for the future. It also allows us to be lazy: we can use other people's work already and - well, you all know this already. It would be an interesting idea to use common programming best practices in the logo of Perl itself.&lt;br /&gt;&lt;br /&gt;I bring that all up, because when I look at the various Perl projects, they all look extremely interesting, but fragmented. It would almost make sense to create a logo where pieces can be reused for related thingies. Starting from a logo for Rakudo Perl, one could make a simple Style Guide even, with easy-to-acquire graphic elements that say, an application written using Rakudo Perl could use (at their discretion) to enhance their own project and tie it back into Rakudo Perl (and Perl in general).&lt;br /&gt;&lt;br /&gt;So that's sort of the other thing I'm proposing: not only designing a logo for Rakudo Perl, but having the concept of modularization of the logo's basic elements part of the logo design itself and the sharing and remixing of the design elements for related projects, to help strengthen the, (and I'm not a fan of using this word) "branding" (sigh) of Perl and making it not so much the "invisible language that glues everything together", but have it where it belongs: in a positive light with the general (geeky) public.&lt;br /&gt;&lt;br /&gt;Right now, all that means to me is perhaps a simple style guide and the image and graphic resources easy to grab in open formats. This also means that simple-is-better when it comes to the design of all these different elements of the logo, as they'll be combined in interesting ways and things will have a tendency to be cluttered. Simplification also lends itself to universality: the simpler the idea is, the more we relate ourselves *to* the idea itself.&lt;br /&gt;&lt;br /&gt;Finally, the design of the Rakudo Perl logo should lend itself to change. Just like any other part of the project, the ideas and concept and what the darn thing actually look like should be able to move and change quickly - to be able to be upgraded - hey, why not? I'm not interested in, "owning" the design, but am more interested in playing a part in shaping the whole. And all that stuff. Just like in code, some people do more than adopt a project.&lt;br /&gt;&lt;br /&gt;What I really *really* need now is some feedback for any and all of the above research and braindump. This, obviously, is just one regular guy taking the first jump into something a whole lot bigger and more complex than he can even really imagine. The first step is the hardest and the most confusing - the rest of the journey is mostly, one foot in front of the other, until the end,&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Here's a few important notes about the above:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Love Marks vs. Trademarks: &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;  Sounds like a great idea. Go for it. Here is a document I prepared for Larry Wall and the Perl Foundation about a trade mark strategy for Perl. You may find some ideas in here to help - I like your idea of interlocking imagery etc.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://thegoo.org/love-marks-for-perl.pdf"&gt;http://thegoo.org/love-marks-for-perl.pdf&lt;/a&gt;&lt;/blockquote&gt;This document encourages the use of memorable, positive, &lt;span style="font-style: italic;"&gt;interconnected &lt;/span&gt;trademark. The Perl Foundation will be the custodian for such a mark.   This is all wonderful. I don't have any problems with giving over the rights for the project to TPF and Perl at large - sort of the point, really.&lt;br /&gt;&lt;br /&gt;This is also a very important part of the document above:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;If the Perl Community accidentally borrowed “The Camel” it appears O’Reilly accidentally borrowed&lt;br /&gt;the domain name “perl.com”. Goodwill continues to accrue in the trade mark “PERL” and that&lt;br /&gt;goodwill, including any domain names needs to be directed to its rightful owner: TPF.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;With the Rakudo Perl 6 logo, we don't want to add even more confusion - Camels, it seems are &lt;span style="font-style: italic;"&gt;out&lt;/span&gt;. I wouldn't mind a gesture of a camel-like idea  - for example, my gimmel idea above, but that idea may just be a stepping stone for something much large - for example, trading the Rakudo Perl 6 logo as a type of primitive written alphabet, which can be combined, with descretion with other people's and project's ideas.&lt;br /&gt;&lt;br /&gt;I think, at least in the "playful" stage, the camel be used as a design element, just because it could lead to more interesting things.&lt;br /&gt;&lt;br /&gt;BUT - Richard Dice of the Perl Foundation does make this situation absolutely clear:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;O'Reilly is the only organization that can have trademarks that incorporate&lt;br /&gt;a camel in reference to the Perl programming language.  This statement is a&lt;br /&gt;first-order approximation, but damn good one.  Basically, the message is:&lt;br /&gt;stay away from using camels&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Patrick Michaud had this to say:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;I'll start with my summarized thoughts first, then a few specifics below.&lt;br /&gt;First, I totally agree that Rakudo Perl needs a logo, and the sooner&lt;br /&gt;we can get one to start using on our website (which we're now creating)&lt;br /&gt;and other materials, the better.  So, your thoughts and ideas are&lt;br /&gt;quite welcome.&lt;br /&gt;&lt;br /&gt;Beyond that, I think your message has neatly captured many of the facets&lt;br /&gt;of what we're working with (and yes, there are a lot of facets).  The&lt;br /&gt;message reminds me of some of Larry's "State of the Onion" addresses --&lt;br /&gt;looking at many sides of the Perl (in this case Rakudo Perl 6) world.&lt;br /&gt;&lt;br /&gt;So, my primary comment is that I find myself very much in agreement&lt;br /&gt;with your proposal, and a strong hope that you'll continue on in this&lt;br /&gt;direction.  I agree with the idea of the style guide and some simple&lt;br /&gt;elements that people can combine together in very expressive and&lt;br /&gt;beautiful ways.  Indeed, it sounds very much like you're proposing&lt;br /&gt;an ideographic system for Rakudo Perl, where can combine graphic&lt;br /&gt;symbols for ideas together.  That feels very Perlish and Rakudoish&lt;br /&gt;to me -- I like it.&lt;br /&gt;&lt;br /&gt;So, I'd say "press on" and let us see what you come up with.  :-)&lt;/blockquote&gt;&lt;br /&gt;The more I think about the design problem, the more it it seems that a simple but very flexible solution would be best and that reflecting and taking the actual design process and specification of Perl 6 itself as a major influence would be a great way to go about things.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;I can't really speak for what Parrot will want or need, as they already&lt;br /&gt;have a (very nice) logo.  But having a symbol to represent Parrot in&lt;br /&gt;the system you propose would likely be very workable.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Exactly!&lt;br /&gt;&lt;br /&gt;I may do more research with Patrick and see what the current needs are for a Rakudo logo and how that could be worked with a, "Grand Scheme" as well as start playfully working on some ideas.&lt;br /&gt;&lt;br /&gt;What I could use now is  a whole lot more feedback. Sound off!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2118058455075556259-3086101663349340119?l=perlhackerpainter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://perlhackerpainter.blogspot.com/feeds/3086101663349340119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2118058455075556259&amp;postID=3086101663349340119' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/3086101663349340119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/3086101663349340119'/><link rel='alternate' type='text/html' href='http://perlhackerpainter.blogspot.com/2009/01/logo-design-for-rakudo-perl-6.html' title='A Logo design for Rakudo Perl 6'/><author><name>The Perl Hacker Painter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_NyhUlChDNMo/SOnDW9KuqRI/AAAAAAAAAA0/mWLKf9rraQg/S220/ao-lj.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2118058455075556259.post-4317772539378707988</id><published>2008-12-01T21:14:00.000-08:00</published><updated>2008-12-01T21:16:44.686-08:00</updated><title type='text'>How to handle completely clueless users?</title><content type='html'>I admit I'm sort of a email traffic controller. &lt;br /&gt;&lt;br /&gt;It irks me to the point of a pet peeve, when I spatter the contact page of my project with notes that say, "DO NOT CONTACT ME FOR SUPPORT UNLESS YOU WANT TO BUCK UP SOME MONEY", and I get tons of support emails, wanting free support. &lt;br /&gt;&lt;br /&gt;Sigh. &lt;br /&gt;&lt;br /&gt;What I don't want to do, is take the time and go, &lt;br /&gt;&lt;br /&gt;"Look. We have forums. We have mailing lists. Use those. Thanks." And then not answer they're question. &lt;br /&gt;&lt;br /&gt;What I do is exactly that. &lt;br /&gt;&lt;br /&gt;I don't want to do this, because I know how much of a pain it is for the person to now, *rewrite* what they just ask me. It also is a pretty weird introduction to what should be a really valuable exchange - someone actually wants to talk to *me* about *my* thingy. &lt;br /&gt;&lt;br /&gt;The curious thing is, I don't want to be hired to fix some stupid bug - I have better things to do. I'd rather help fix the bug for *free* - and its beneficial - users let me know it's there, I (or them - ha!) open up a bug report, it gets fixed (probably by me) and *there's a thread of, "something just happened"* that lives far away from my inbox and takes on a life of its own. I don't have to write the same thing twice and with a little work by the user (or if they dare help themselves) they can find it themselves, and keep a thread going. When I say, "thread" - I mean, anything - a forum post about a problem, with a reply of a confirmation that it's a bug, with a link posted to a bug report, that may then give you a patch in a day or so - which then gets referred in another forum post - etc. But, a trail is there. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The thing is, there's better ways to ask the questions. &lt;br /&gt;&lt;br /&gt;What's the better way to point them to the right way? &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For a while, I just had a auto responder that said, &lt;br /&gt;&lt;br /&gt;"Hey, if this is a support question - go here, and here and here and read this and that and then post to this thing or that thing and away you go! America!"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;"...but, if this isn't a support question, well, disregard all that, and I'll get back to you, soon"&lt;br /&gt;&lt;br /&gt;That seemed a little foolish. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Right now, I'm trying something different - I'm just making up a mail template that first, welcomes the new person emailing me to the *community* and then gives a very brief list of resources that say, "Here's what to read", "Here's where to ask questions"&lt;br /&gt;&lt;br /&gt;Then, &lt;br /&gt;&lt;br /&gt;well, then if I can, I'll answer they're question - I haven't yet said, "And next time, POST HERE", cause again, that makes me think I'm reprimanding someone for something they may have just missed. Or something. Anyways - let's think positive and we're all humans here, and we probably all have a strong sense to belong. &lt;br /&gt;&lt;br /&gt;But, what I want to do is get people active in the program and community. It's pretty hard, since, well, usually my audience is general users and they just have Work They Need To Do, and aren't nerdy enough to get excited about some program. Understandably. &lt;br /&gt;&lt;br /&gt;Perhaps, by simply giving a welcome, some encouragement, some links to check out and a head-start on solving the problem, they'll feel as if they're welcome in a community, instead of just a bother to me. &lt;br /&gt;&lt;br /&gt;As far as I'm concerned, community in anything is everything. If you're not building a community, you have almost nothing, no matter how great you are, you have nothing without people. &lt;br /&gt;&lt;br /&gt;Anyways, I'll let you know how it goes, but I'd be interested in hearing other ideas you yourself may have,&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2118058455075556259-4317772539378707988?l=perlhackerpainter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://perlhackerpainter.blogspot.com/feeds/4317772539378707988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2118058455075556259&amp;postID=4317772539378707988' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/4317772539378707988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/4317772539378707988'/><link rel='alternate' type='text/html' href='http://perlhackerpainter.blogspot.com/2008/12/i-admit-im-sort-of-email-traffic.html' title='How to handle completely clueless users?'/><author><name>The Perl Hacker Painter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_NyhUlChDNMo/SOnDW9KuqRI/AAAAAAAAAA0/mWLKf9rraQg/S220/ao-lj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2118058455075556259.post-6426597625902338574</id><published>2008-10-08T02:31:00.000-07:00</published><updated>2008-10-08T02:36:39.128-07:00</updated><title type='text'>Problem with Email::Valid and newlines</title><content type='html'>Found a strange problem in Email::Valid: &lt;br /&gt;&lt;br /&gt;&lt;pre&gt; &lt;br /&gt;#!perl&lt;br /&gt;use strict;&lt;br /&gt;&lt;br /&gt;use Test::More tests =&gt; 4;&lt;br /&gt;&lt;br /&gt;BEGIN {&lt;br /&gt; use_ok('Email::Valid');&lt;br /&gt;}&lt;br /&gt;my $email;&lt;br /&gt;&lt;br /&gt;$email = 'withnewline@example.com' . "\r";&lt;br /&gt;ok(Email::Valid-&gt;address(-address =&gt; $email) eq undef, 'addresses with "\r" at the end return undefined');&lt;br /&gt;diag(Email::Valid-&gt;address(-address =&gt; $email));&lt;br /&gt;&lt;br /&gt;$email = 'withnewline@example.com' . "\r\n";&lt;br /&gt;ok(Email::Valid-&gt;address(-address =&gt; $email) eq undef, 'addresses with "\r\n" at the end return undefined');&lt;br /&gt;diag(Email::Valid-&gt;address(-address =&gt; $email));&lt;br /&gt;&lt;br /&gt;$email = 'withnewline@example.com' . "\n";&lt;br /&gt;ok(Email::Valid-&gt;address(-address =&gt; $email) eq undef, 'addresses with "\n" at the end return undefined');&lt;br /&gt;diag ("'" . Email::Valid-&gt;address(-address =&gt; $email) ."'");&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;&lt;br /&gt;From what I expect, that last test should pass. Email::Valid's docs do say that if address can munge the address, it'll return the munged address, instead of undef - but I have munging (or "fudging, in this module" *off* - as it is off by default). Carriage returns aren't munged, so why newlines? &lt;br /&gt;&lt;br /&gt;Perhaps it's the last line in the module: &lt;br /&gt;&lt;br /&gt;&lt;pre&gt; &lt;br /&gt;# Regular expression built using Jeffrey Friedl's example in&lt;br /&gt;# _Mastering Regular Expressions_ (http://www.ora.com/catalog/regexp/).&lt;br /&gt;&lt;br /&gt;$RFC822PAT = &lt;&lt;'EOF';&lt;br /&gt;# Possibly the most insane regex... possible&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;$RFC822PAT =~ s/\n//g;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;&lt;br /&gt;The test for validity changes the actual string being validated. Drrrrr. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And that kind of brings up another point: Why is a module called, Email::Valid and its validating method (address) also doing double-duty with wanting to munge the string I give it so it may possibly be validated? Sounds like you just need to methods there, validate() and, gimme_back_an_address_if_at_all_possible(), &lt;br /&gt;&lt;br /&gt;or, &lt;br /&gt;&lt;br /&gt;whatever.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2118058455075556259-6426597625902338574?l=perlhackerpainter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://perlhackerpainter.blogspot.com/feeds/6426597625902338574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2118058455075556259&amp;postID=6426597625902338574' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/6426597625902338574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/6426597625902338574'/><link rel='alternate' type='text/html' href='http://perlhackerpainter.blogspot.com/2008/10/problem-with-emailvalid-and-newlines.html' title='Problem with Email::Valid and newlines'/><author><name>The Perl Hacker Painter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_NyhUlChDNMo/SOnDW9KuqRI/AAAAAAAAAA0/mWLKf9rraQg/S220/ao-lj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2118058455075556259.post-8483277254912690115</id><published>2008-10-05T23:31:00.002-07:00</published><updated>2008-10-05T23:37:29.985-07:00</updated><title type='text'>Perl Semaphores 'n stuff</title><content type='html'>&lt;p&gt;This is a pretty good and gentle introduction into file locking and using semaphores in Perl:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://interglacial.com/~sburke/tpj/as_html/tpj23.html"&gt;http://interglacial.com/~sburke/tpj/as_html/tpj23.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I was having the exact problems being described:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;Unfortunately, this means trouble for our &lt;b&gt;flock&lt;/b&gt;-using code. Notably, there can still be a problem with instances being out of phase — since we can’t lock a file without already having opened it, things can still happen in that brief moment between opening the file and locking it. Consider when one instance is updating &lt;i&gt;counter.dat&lt;/i&gt; just as another new instance is about to read it:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Instance 1                         Instance 2&lt;br /&gt;-----------------                   -----------------&lt;br /&gt;open COUNTER, "&amp;gt;counter.dat"&lt;br /&gt;or die "Can't write-open: $!";&lt;br /&gt;                                  open COUNTER, "&amp;lt;counter.dat"&lt;br /&gt;                                   or die "Can't read-open: $!";&lt;br /&gt;                                  flock COUNTER, LOCK_EX;&lt;br /&gt;                                  my $hits = &amp;lt;COUNTER&amp;gt;;&lt;br /&gt;                                  close(COUNTER);&lt;br /&gt;&lt;br /&gt;flock COUNTER, LOCK_EX;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;There, the OS dutifully kept two instances at once from having an exclusive lock on the file. But the locking is too late, because instance 1, just by opening the file, has already overwritten &lt;i&gt;counter.dat&lt;/i&gt; with a zero-length file, just as instance 2 was about to read it. So we’re back to the same problem that existed before we had any &lt;b&gt;flock&lt;/b&gt; calls at all: two processes accessing a file that we wish only one process at a time could access.&lt;/p&gt;&lt;/blockquote&gt;In a very very complex part of my app, that has to do with basically managing a queueing system - something that really really really should be written using a transaction capable SQL backend. If only I knew how to do that.&lt;br /&gt;&lt;p&gt;I combined the semaphore file with the, Highlander, THERE CAN BE ONLY ONE! Idea:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://perlmonks.org/?node_id=14260"&gt;http://perlmonks.org/?node_id=14260&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.stonehenge.com/merlyn/WebTechniques/col54.html"&gt;http://www.stonehenge.com/merlyn/WebTechniques/col54.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;So if I can't get a lock, I can wait a little longer. I thought, "Hey, sounds like a good idea". It also sorta kinda puts a queueing system to the resources that a lot of different thingies want to hit, and hopefully, stop the programming from giving back errors like, all the fucking time. We'll see.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;All the tests pass (you do write tests, right?), but using the app doesn't really... um, work. It's timing out. Most likely from the Highlander idea. More whackin' to do...&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2118058455075556259-8483277254912690115?l=perlhackerpainter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://perlhackerpainter.blogspot.com/feeds/8483277254912690115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2118058455075556259&amp;postID=8483277254912690115' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/8483277254912690115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/8483277254912690115'/><link rel='alternate' type='text/html' href='http://perlhackerpainter.blogspot.com/2008/10/perl-semaphores-n-stuff.html' title='Perl Semaphores &apos;n stuff'/><author><name>The Perl Hacker Painter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_NyhUlChDNMo/SOnDW9KuqRI/AAAAAAAAAA0/mWLKf9rraQg/S220/ao-lj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2118058455075556259.post-3538085665683950562</id><published>2008-10-05T23:31:00.001-07:00</published><updated>2008-10-05T23:31:32.544-07:00</updated><title type='text'>Nerd!</title><content type='html'>I've decided what computer programming is to me at the moment:&lt;br /&gt;&lt;br /&gt;It's a hobby. It's a hobby that currently pays my bills, but to call it a job or a company that I have is not what's going on. I know this, because I explicitly attempt not to do what companies attempt to do really really well. One of these things is to try to sell you the product.&lt;br /&gt;&lt;br /&gt;The product I make is free, so there goes that baby/bathwater.&lt;br /&gt;&lt;br /&gt;I also write a book about the thing.&lt;br /&gt;&lt;br /&gt;The book is just a bunch of HTML I create from a simple doc format. It's akin to me selling you plans on how to make your own land mower from the back of Popular Mechanics, or something.&lt;br /&gt;&lt;br /&gt;Another thingy that companys are good at, especially in computer-stuff is automation. I do provide services to install the program. But I do it manually. There's no installer. And, that's stupid.&lt;br /&gt;&lt;br /&gt;But if this is just a hobby - one that takes a lot of my time, I don't have a job. And art isn't making any money.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This is all going to come to a head, soon enough. But at least it allows me to identify myself as a, "hacker" rather than a software engineer, which I couldn't possibly be.&lt;br /&gt;&lt;br /&gt;It also gives me something to put on my artsy résumé: Computer Hacker. That sounds almost hip. Would you like a painter that has a hobby of collecting pogs, or a painter that also has a hobby of hacking computers?&lt;br /&gt;&lt;br /&gt;yeah, you're right, pogs win again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2118058455075556259-3538085665683950562?l=perlhackerpainter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://perlhackerpainter.blogspot.com/feeds/3538085665683950562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2118058455075556259&amp;postID=3538085665683950562' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/3538085665683950562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/3538085665683950562'/><link rel='alternate' type='text/html' href='http://perlhackerpainter.blogspot.com/2008/10/nerd.html' title='Nerd!'/><author><name>The Perl Hacker Painter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_NyhUlChDNMo/SOnDW9KuqRI/AAAAAAAAAA0/mWLKf9rraQg/S220/ao-lj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2118058455075556259.post-3606255321710177329</id><published>2008-09-14T01:29:00.000-07:00</published><updated>2008-10-06T01:29:50.764-07:00</updated><title type='text'>LWP is Simple.</title><content type='html'>&lt;p&gt;While I'm on the nerd tip, this is the simplest example I can get to grab the contents of a URL, with a optional username/password and/or proxy: &lt;br /&gt;&lt;br /&gt;&lt;pre&gt; &lt;br /&gt;#!/usr/bin/perl &lt;br /&gt; &lt;br /&gt;my $proxy = undef; &lt;br /&gt;my $user  = undef; &lt;br /&gt;my $pass  = undef; &lt;br /&gt;my $url   = 'http://localhost'; &lt;br /&gt;&lt;br /&gt; # Create a user agent object&lt;br /&gt; require LWP::UserAgent;&lt;br /&gt; my $ua = LWP::UserAgent-&gt;new;&lt;br /&gt;&lt;br /&gt; if($proxy){ &lt;br /&gt;  $ua-&gt;proxy(&lt;br /&gt;   ['http', 'ftp'], &lt;br /&gt;   $proxy&lt;br /&gt;  ); &lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; # Create a request&lt;br /&gt; my $req = HTTP::Request-&gt;new(&lt;br /&gt;    GET =&gt; $url&lt;br /&gt;   );&lt;br /&gt; # Pass request to the user agent and get a response back&lt;br /&gt; my $res = $ua-&gt;request($req);&lt;br /&gt; if(&lt;br /&gt;   defined($user) &amp;&amp; &lt;br /&gt;   defined($pass)&lt;br /&gt; ){ &lt;br /&gt;    $res-&gt;authorization_basic(&lt;br /&gt;   $user, &lt;br /&gt;   $pass&lt;br /&gt;  );&lt;br /&gt; }&lt;br /&gt; # Check the outcome of the response&lt;br /&gt; if ($res-&gt;is_success) {&lt;br /&gt;     return $res-&gt;content;&lt;br /&gt; }&lt;br /&gt; else {&lt;br /&gt;     warn $res-&gt;status_line;&lt;br /&gt;  return undef; &lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;&lt;br /&gt;&lt;p&gt;Wishing LWP::Simple would do this, but. Nope.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2118058455075556259-3606255321710177329?l=perlhackerpainter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://perlhackerpainter.blogspot.com/feeds/3606255321710177329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2118058455075556259&amp;postID=3606255321710177329' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/3606255321710177329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/3606255321710177329'/><link rel='alternate' type='text/html' href='http://perlhackerpainter.blogspot.com/2008/09/lwp-is-simple.html' title='LWP is Simple.'/><author><name>The Perl Hacker Painter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_NyhUlChDNMo/SOnDW9KuqRI/AAAAAAAAAA0/mWLKf9rraQg/S220/ao-lj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2118058455075556259.post-428180791810474190</id><published>2008-09-13T01:30:00.000-07:00</published><updated>2008-10-06T01:31:39.462-07:00</updated><title type='text'>MIME Trickery with MIME::Parser and friends</title><content type='html'>&lt;p&gt;You can attach attachments to a multipart/related email message entity (say, a email message created from a website, with the images attached to the message itself) by creating a new multipart/mixed entity, and having the first part be that multipart/related entity and the rest being your new attachments. For example: &lt;br /&gt;&lt;br /&gt;&lt;pre&gt; &lt;br /&gt;#!/usr/bin/perl &lt;br /&gt;use strict; &lt;br /&gt;&lt;br /&gt;use :MyMIMELiteHTML; &lt;br /&gt;use MIME::Parser; &lt;br /&gt;use MIME::Entity; &lt;br /&gt;&lt;br /&gt;my $HTMLurl = 'http://localhost'; &lt;br /&gt;my $jpg_path = '/Users/justin/Desktop/4.jpg';&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;my $mailHTML = new MyMIMELiteHTML(&lt;br /&gt; 'IncludeType' =&gt; 'cid', &lt;br /&gt;); &lt;br /&gt;                 &lt;br /&gt;my $MIMELiteObj = $mailHTML-&gt;parse($HTMLurl)  ;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;my $msg_as_string =  $MIMELiteObj-&gt;as_string; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;my $parser = new MIME::Parser;&lt;br /&gt;&lt;br /&gt;my $entity = $parser-&gt;parse_data($msg_as_string);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# Attach stuff to it:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;my $cont_entity = MIME::Entity-&gt;build(Type        =&gt; "multipart/mixed");&lt;br /&gt;   $cont_entity-&gt;add_part($entity); &lt;br /&gt;   $cont_entity-&gt;attach(&lt;br /&gt;    Path     =&gt; $jpg_path,&lt;br /&gt;                Type          =&gt; "image/jpg",&lt;br /&gt;                Encoding      =&gt; "base64",&lt;br /&gt;    Disposition   =&gt; "attachment",&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;print $cont_entity-&gt;stringify;&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;MyMIMELiteHTML is just my version of MIME::Lite::HTML, with a few bug fixes and changes to fit in my program better. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://search.cpan.org/~alian/MIME-Lite-HTML-1.22/HTML.pm"&gt;http://search.cpan.org/~alian/MIME-Lite-HTML-1.22/HTML.pm&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;I've tried also just added the attachments to the multipart/related entity, but the new attachments never can be found - at least in Mail.app (Gmail? Yes?), unless you put in a bogus Content-ID header for the attachement - which actually could come in handy in some rare cases, but I digress...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2118058455075556259-428180791810474190?l=perlhackerpainter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://perlhackerpainter.blogspot.com/feeds/428180791810474190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2118058455075556259&amp;postID=428180791810474190' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/428180791810474190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/428180791810474190'/><link rel='alternate' type='text/html' href='http://perlhackerpainter.blogspot.com/2008/09/mime-trickery-with-mimeparser-and.html' title='MIME Trickery with MIME::Parser and friends'/><author><name>The Perl Hacker Painter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_NyhUlChDNMo/SOnDW9KuqRI/AAAAAAAAAA0/mWLKf9rraQg/S220/ao-lj.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2118058455075556259.post-271747419568624813</id><published>2008-04-08T22:28:00.000-07:00</published><updated>2008-04-08T22:38:59.416-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perl introduction'/><title type='text'>First Post. It's about Perl. Perl Perl Perl.</title><content type='html'>So. &lt;br /&gt;&lt;br /&gt;There was a recent flurry of postings in the Perl Community dealing with how Perl isn't very sexy any more and lots of, "oh my God, no one uses Perl anymore" and sky falling down and all that. &lt;br /&gt;&lt;br /&gt;They also mentioned that the number of teh blogs dealing with Perl, when compared to other languages was a bit lackluster. Perhaps this is because most of the big-shot Perl programmers you see lurking around on teh Perl mailing lists and are creating the majority of quality CPAN modules are on http://use.perl.org? - I dunno. &lt;br /&gt;&lt;br /&gt;Anyways, I thoughts to myself, Self, you're eccentric. You're a sexy little beast. &lt;br /&gt;&lt;br /&gt;And you program in Perl. &lt;br /&gt;&lt;br /&gt;So here's my hat thrown into the ring for teh Blogs about teh Perl.&lt;br /&gt;&lt;br /&gt;The other thing I do - I would say my main passion is Art: drawing and painting. It's not Perl. Perl helps pay the bills I guess. &lt;br /&gt;&lt;br /&gt;I'm sort of realizing, as I get older, that playing with Perl and being so SO into art is a rarity, and as a nod to the Paul Graham article, "Hackers and Painters (http://paulgraham.com/hp.html)", I give you the Perl Hacker Painter. &lt;br /&gt;&lt;br /&gt;Hacking is probably the best way to describe to you how I program. I barely understand the concepts I play around with. I didn't go to school for this. I am not math-inclined. &lt;br /&gt;&lt;br /&gt;But, I've flourished, in my own little way, in writing Perl (mostly). &lt;br /&gt;&lt;br /&gt;If you're more traditional in your skill-acquiring, I may say/do/write things that makes no sense. And, that's OK. Because, when I ask for help? I get a lot of answers from people that don't make much sense to me. And then, I just hack about.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'll probably use this thing (I loathe the word, blog) to write examples of code for whatever, problems I solved with Perl and hopefully, artwork Perl helped me with, since, there's a lot of that in my portfolio &lt;br /&gt;&lt;br /&gt;So, if you're zooming around on Techorati or something and you've come across, *gasp* a blog about Perl, well, hello to you too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2118058455075556259-271747419568624813?l=perlhackerpainter.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://perlhackerpainter.blogspot.com/feeds/271747419568624813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2118058455075556259&amp;postID=271747419568624813' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/271747419568624813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2118058455075556259/posts/default/271747419568624813'/><link rel='alternate' type='text/html' href='http://perlhackerpainter.blogspot.com/2008/04/first-post-its-about-perl-perl-perl.html' title='First Post. It&apos;s about Perl. Perl Perl Perl.'/><author><name>The Perl Hacker Painter</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_NyhUlChDNMo/SOnDW9KuqRI/AAAAAAAAAA0/mWLKf9rraQg/S220/ao-lj.jpg'/></author><thr:total>0</thr:total></entry></feed>
