Mar 30, 2010

Unpaid volunteer work is a job

So the common misconception in the open source community is, "I don't get paid, I don't have to do it". Actually, it's not a misconception, you're absolutely right, you don't have to, you can stop, leave, go away. It's also well know that FOSS software is without warranty or guaranteed support. But by the vary nature of being a volunteer you are offering to do a job for free. No? have you tried working for a volunteer organization and telling your boss there "I don't have to do it because I'm not paid". I highly suspect this attitude will get you a 'then we don't need you'. I also suspect if you're say, working a food drive, and someone asks you something and you say "I'm not paid to explain it to you" what do you think that would look like? Basically when you volunteer to do something you're volunteering to do a job. If you are unwilling to perform all parts of that job should you be there?

With open source software you're volunteering to support the entire software life cycle. This means design, development, documentation, and maintenance. Most open source developers love doing the first two, but abhor the last. It's a job, some parts of it suck, if you can't be bothered to document your stuff or find someone who will, don't show up. You know what else? you're not perfect so people are going to have problems, it's your job to support them as part of your 'best effort' support. Best effort support doesn't mean bitching when someone asks you to improve something. If you reason for saying no is, "I'm a volunteer so I don't have to" come up with a better reason, there are better reasons.

If you tell people, hey I'm really swamped at the day job, they'll probably understand if this is something more than a 2 line of code fix. My wife is ill, just recently on ironman one of the dev's (sorry I'm not looking it up and I don't remember the name, condolences all the same) is taking a leave of absence due to his wife having cancer, we get that. I'm on vacation, no computer access right now. All this stuff is saying is, "now is not a good time for me", and that's ok. But saying using "I'm a volunteer" ever is not acceptable. This gives FOSS software the ugly taste that some people complain about.

Before anyone else calls me an "entitled piece of shit" (yes a FOSS developer said that to me today after calling me a "fucking asshole" for filing a bug that he didn't understand what I'd said ). I'm sorry? I just wrote a patch to help fix this problem elsewhere, is my asking you to fix your own a problem? I maintain 250+ packages in the Arch User Repository, including yours. I help people use your software, and I'm not the first one to complain. How does me telling you I'm having difficulty with your software and asking you to fix it make me entitled? do you take no pride in your work? seriously, if your responses are going to be no patch from you know fix, and fuck you because I didn't understand what you were saying... I'd rather you deleted your modules and went away.

I had a project that I didn't want to take the time for anymore, and no one was helping, but I was getting bug requests. So after asking for help, I put sign up that said, "project is dead because I couldn't do it by myself", or some such. I ceased work, and left the code up. This isn't wrong because at some point everyone moves on. You don't have to maintain your work, but you should at least let the world know that not maintaining it is your intent, and that you've quit. 150-200 of the modules I maintain on AUR were from someone who went from Arch to OS X and is no longer around, and although it took him longer than it should have, IMO. He did eventually say, "I'm not doing this anymore, relinquishing control", essentially, which was acceptable and I took over.

I couldn't always do what I could now, but wonderful communities like Gentoo, and Postgres have made me a better person, now to where I contribute where I can. I'd also like to note that Linus (and others?) have, and do, turn down patches and remove kernel code if the developers are unwilling to maintain, and support them, I endorse support concept.

You may disagree if you'd like, but this is my opinion. Just let me know if you feel this way before I do something for you so I don't waste my time. I don't want to do your job for you, and I did not volunteer to do your job.

I'm going to cover the horrible response that equates to "fix it yourself" in another post.

Mar 27, 2010

Say Perl

SayPerl launched yesterday. It's essentially aggregated perl blogs translated through google's translation service into english. Very awesome. 3 things could make it better.

1) An atom/rss feed
2) instead of clicking on 'spanish' and listing all the feeds that were written in spanish... click on spanish (or make it espanol) and have it show all the feeds translated into spanish.
3) It's newest post is a while ago... so it's update speed could be a bit better.

But all in all very good, I like. Fix #1 and I'll switch my perl feeds to it.

Mar 25, 2010

Perl Blogger annoyances

So I love Iron Man and people who blog perl. But I've got some complaints.

1.) No Language Specific Feeds. I'm not discriminating against people of foreign languages I want a Russian only feed as much as an English only. I just can't read it, and I'd rather not have it in my feed. So I'm using Dagolden's English only Feed. This feed doesn't work 100% right however, see next

2.) Dagolden's feed apparently hate's blogger. I always see posts that come from blogger's atom feed full of html tags instead of formatting so I have to view the original source instead of just reading in my feed reader. This doesn't happen with my refeeded feedburner source that I've given to ironman.

3.) I can't always Comment on good Blogger's stuff. I'm gonna pic on 2 that I like: Modern Perl by chromatic, and Matt S Trout's Blog. The former is run on Movable Type and I can't comment because it's OpenID implementation won't accept google or blogger's OpenID, it causes an error for both (yes I can auth with blogger and google in other places such as StackOverflow), it also doesn't accept anonymous comments. In MST's case, he's just never gotten around to implementing comments.

4.) Spam, about 1 in every 20 posts (numbers pooma) is nothing but spam. It contains nothing but a list of ... tags or something... Clearly contains no actual content.

This is just a rant... feel free to ignore. But maybe someone will look at it and say... oh I didn't know that was happening... I can fix that.

Bad Customer Service from T-Mobile

So about 2 months ago I got fed up with Sprint (they suck for different reasons) and I already knew that they had better service coverage than Verizon in my area. My friend suggested T-Mobile, so I went and got setup with them for a 14 day trial period. I took the phone made some calls tried the web browser, I didn't like the blackberry itself, but that's besides the point. When I got the phone home, no service, not even outside the house, making T-Mobile worse than Verizon. I didn't want to run 10 miles into town that day, the next day we had a blizzard, so wednesday, two days later I took it back. They charged back everything and everything seemed good. Until a few weeks later when I got a $10 bill for usage. I just finally got around to dealing with customer service today. They say it's accurate, and no they can't do anything. So basically as an FYI to anyone else, don't try T-Mobile unless you already know that their service will work for you because they are going to charge you anyways. This shouldn't be, your service doesn't work for me, you shouldn't charge me to tell you that. Now if I move I probably won't look at them for a service change, had they handled this in an amicable manner I probably would have as soon as there network wasn't an issue. I'm also going to tell anyone who asks about cell provider's about it. Yes $10 isn't much, but it's the principle of me having to pay them anything after I had made it clear I wasn't sure it would work and I just wanted to see if it was an option.

Mar 24, 2010

my git remote

So occasionally I like to fork a project on GitHub well the proper way to do it is to use GitHub's fork button which then clone's the repo into your account. this is great! I can than clone that locally develop it an push to it. Usually I do this push with git push origin. I can then ask the owner of the original repo that I forked from to 'pull' my changes in. Wait did I just say original? why am I calling my repo on github origin? it's probably not the origin repo... it's not the primary project repo... so I decided I needed a new convention. I now do git remote add my uri://... for my repo's on github and git remote add origin uri:// for the projects authoritative repo. This also helps when I need to update my repo from the origin and then push them to my public forks.

Mar 14, 2010

Managing CPAN on Arch Linux

So if you're running Arch Linux and want to install a bunch of packages from CPAN the best way is NOT to use the official cpan client, or even the new cpanminus. No your best bet is to use AUR or lacking AUR packages, create your own, and I'm gonna walk you through how I do it. The really nice thing about installing packages with Pacman is that unlike cpan there is a utility to uninstall them.

The first thing you'll want is a utility that allows you to easily manage aur. Right now the Recommended tool appears to be a CLI utility called packer you'll want to download the PKGBUILD, on the packer page, to a directory of it's own and run makepkg -s in that directory and then (as root) pacman -U pkgname-pkgver.pkg.tar.gz. You've now installed Packer, which means you'll never have to install an AUR package like that again (barring a new install of arch). If you really want you can stop now and just use the packages provided by arch, myself, and other aur contributors. The general conversion in name is is the CPAN module DBIx::Class becomes perl-dbix-class. However running packer dbix-class will find it. packer is capable of searching all of aur and the official repositories and giving you options if more than one is available. If you want to learn how to make your own packages, or just plain ignore aur and use cpanp to install read on.

So now you'll want to install CPANPLUS with packer. This is easy just run packer perl-cpanplus. This should install CPANPLUS and any of its deps. Now install CPANPLUS::Dist::Arch
with packer perl-cpanplus-dist-arch. There are other 'cpan' options but this is the only one that's on both CPAN and AUR, and it has some really nice functionality.

Now you have your entire installer stack but you still need to configure C::D::A. Run setupdistarch. This will configure cpanplus to automatically create any package it creates as an Arch pkg, it can even install them. For example packer perl-moose and cpanp -i Moose will both install Moose with Pacman. The first will use the package I've uploaded to AUR and the second will use C::D::A to create one (which is exactly what I did).

So now you know the basics of Installing packages, but I'm guessing you still want to know, how I'm managing over 200 perl packages. C::D::A is actually making this easier all the time (esp since I talk to the author). first you'll want to create a directory to store all your AUR packages, the name isn't important. So you'll want to create your first package like cpan2aur -d Catalyst::Runtime you'll note that this creates the directory perl-catalyst-runtime in that directory there is a it contains syntax similar to Template::Toolkit, it is however home grown by the author of C::D::A. you can use it to add stuff the the resulting PKGBUILD. To create the PKGBUILD you'll run cpan2aur perl-catalyst-runtime it will create the PKGBUILD and the tarball for AUR. However, if you're really planning on making this for AUR and no package is on AUR or you own the one on AUR you can just run cpan2aur -u perl-catalyst-runtime and it will create all the aforementioned things plus upload them with your AUR account. It's worth noting that if you attempt to run cpan2aur and a PKGBUILD already exists it will ask you if you wish to overwrite, unless you've made changes to it say yes, if you aren't updating to a new version on cpan it will ask if you want to update the pkgrel. I specifically requested that because it was annoying to increment by hand and I needed to update the PKGBUILD because of things like dep or provides changes.

Unfortunately cpan2aur cannnot generate an entire dep tree worth of directories. It's worth saying that you don't really have to run cpan2aur -d at all, you could just go right to cpan2aur -u, but then you'd miss out on the wonder that is cpan2aur --check. You can run cpan2aur --check perl-* and it will automagically check for updates of any directory that starts with perl- and upload the updates to AUR.

Unfortunately C::D::A has some limitations. The first is that it really Doesn't use Template Toolkit or even Template::Tiny (which I suggested). This doesn't seem to matter to much... but I wonder if it could help me with the other problem. C::D::A can't correctly determine optdepends because it gets the deps from the generated Makefiles. I'm not sure if this could be fixed or not, I don't yet understand this part of making CPAN packages enough.

Happy packaging.


you don't need cpan2aur -u --check, cpan2aur --check implies -u

Mar 13, 2010

Iron Man and introductions

So I've decided to "compete" in the Iron Man competition.

My name is Caleb Cushing, I'm a 25 year old, unemployed, student, living in the Greater Lansing, MI, USA, area. I've been programming perl for approximately 6 months. This includes a lot of off time, time to relearn the language from the class I took a couple years ago (and learn modern perl), learning Catalyst and DBIC, all of which is an ongoing process. I would guess I've been writing useful code for about 4 months and even that is a slow going process as I've still got a lot to learn.

Previously, I was the tree maintainer for Funtoo, and tried spinning my own fork of Funtoo/Gentoo, it needed more devs than me to survive though. I now use Arch Linux. After an arch/perl user who went by aCiD2 moved to OS X I adopted most of his perl AUR (arch user repository) packages in addition to ones I had created myself. I now have over 200 CPAN packages on AUR in Arch's PKGBUILD format.

I'm a contributer to Catalyst::Manual and I created Template::ShowStartStop by forking Template::Timer.

I'm sure I'll become more active as time goes on, and have more interesting posts than this one.

Mar 11, 2010

How not to ask for help

This is the story of my friends problem today.

I got one for ya.

Field like field --friend

so of course I'm like: ? is that a question? he had given me no prelude, no premise. response

I tried field like '%' + field2 + '%'

No good though

So I explained that % is a wildcard. He still hadn't explained what his problem is or what he was trying to do.

it giving you a syntax error? --me

So here I am trying to guess at what his problem is. I've never used sql server but a quick glance at postgres docs suggested the syntax was wrong. I know don't query other docs than the software being used... but I wanted to run a test locally to see if I could figure out what he was doing.

Doesn't work --friend

Oh! that's very helpful... way to give more information. I think I now know why he never asks questions in IRC or forums. He never learned how to ask a question and they won't put up with him.

so it's not a syntax error it just doesn't do what you want? --me

Right. The like command isn't finding it --friend

So finally I'm able to determine... his problem is he's got a ... WHERE ... LIKE ... that isn't returning what he expects. This is still completely worthless because I still haven't been able to figure out what he's trying to do... or more correctly I have but not why it isn't working because his code is right. which means he's fallen prey to the assumption that he knows what I need to know to solve his problem. He hadn't given me enough info. After I tried to explain to him how to do what I thought he was trying to do and giving him a sample query and some data... he gives me this

Field1 = "4369" field2 = "4311", "4369" --friend

Now anyone who's familiar with sets will probably realize the notation here is bad and so you can't tell if these are sample columns or records. a more proper way to write this would have been field1 = { '"4369"'} field2 = {'"4311", "4369"'} I probably still would have been a little confused just because I wouldn't have been sure he was writing it right. See the problem here is that field 2 is an array and therefore not stored properly in a relational manner, it's why he has to do a much slower LIKE in the first place. After bantering to figure out that this was in fact text data these were single records I eventually figured out that what he was trying to do was find field2 if it contaned field1. However, his code was asking for field1 if it contained field2. basically he had his parameters reversed.

It took me 20 minutes of getting that data to realize they were reversed, which is shameful for me... but I was trying to figure out things like VARCHAR or INTEGER... he of course said it's not an array, and I suppose it's not an ARRAY type in sql.. but I guarantee that's why it looks like that... it's really a foreign key stored as an array in a varchar. After I told him he lied and said it didn't work only to come back 10 minutes later and say... you were right.

so the final should have been

WHERE field2 LIKE '%' + field1 + '%' or in postgres WHERE field2 LIKE '%' || field1 || '%' because we use the standard || for string concatenation instead of the +

Mar 10, 2010

You should have hired me! ( just a vent )

So this is about the 10th time my friend has asked me for help on a SQL (w/ SQL Server) problem. I Actually interviewed with his company at one point and they elected NOT to hire me. Why? because I have never found windows errors useful, have therefore never used its logging facility, and was unable to answer questions about it. I'm was a UNIX guy then and am now. But I'm still better at figuring out problems on software I've never even used, with only about 1/10th of the information that I need. I'm so tired of fixing other people's problems and not getting paid for it, especially when somehow they profit from it.

So why don't companies seem to hire me? Because I suck at interviews. Because I don't have that 4 year degree and someone else does. Because I don't have 2 years of experience with Technology X. Because I've not got the greatest work history.

Why don't I have the greatest work history? Well I've been fired twice. Once the official reason was I fell asleep at work, I don't think I did. Even if I did I had, had insomnia for 3 days, I even told them that. I'm pretty sure I could have sued for wrongful termination, but I didn't. The other time I was hired into a position that I really just wasn't a good match for, but I didn't realize it until later. That position also didn't have enough work for me, and the work that it did have wasn't well enough explained for me to do.

Wait so I have to explain to you how to do something? no... but when you tell me to make a form with this list, and copy this pre-existng product with new tech. Then those 2 definitions conflict. So I try to do work to make what you want and then you say but I don't want those fields... I say but this can't be made to work like that without them... I never really got answers... Can't do work that I'm not given enough info to do properly, and I wasn't privy to the meetings with the clients.

I'd also like to note that I almost quit the second job as I had been given less than 5 hours a week for 3 months, and my boss, although a good hacker, wasn't a very good boss. But I'm not completely absent of blame... maybe I misrepresented my knowledge of the product, or maybe I should have done more to get the information I needed to do the work.

Well maybe my luck will change and this company I've been interviewing with recently will hire me so the next time my friend asks me for help to do his job I can say. You know your company could hire mine and the work would get done faster (better too probably).