Friday, 26 January 2007

Attracting women

After the LCA dinner, a friend-of-a-friend asked me that perennial question: how do you attract women to your FOSS group? Here are my ideas.

Getting women into your group

The best way to attract women to your group - is to have women in it already.

Particularly women that are great role-models: active women that contribute and organise, like Pia Waugh (LCA2007 "Seven team"). Unfortunately, for many groups this just sets up a chicken-and-egg situation. If you don't have women already, how do you get your first ones to come along? Luckily you can leverage women in other groups. Some ideas:

Start by asking your own members. Do they have wives/girlfriends or colleagues in IT? What about other local IT communities eg local businesses? This is just like any other FOSS evangelising: these women are already in IT, but maybe have never heard of FOSS (or never realised that it could actually benefit them to come to a group like yours).

Then ask groups like yours in that are in other regions. Do they know any women that live in your area that might be interested? Would they be interested in travelling to your area and bringing their friends along, to get the ball rolling?

Look into the local, regional and national "Women in IT" groups and advertise yourself there. Promote what it is that you do, and why it would be interesting - just as you would to any other newbie.

LCA's great success this year was the large percentage of women that attended (10%). This was fuelled by the work put in by Mary Gardiner and other members of the LinuxChix group. These groups exist to help women do interesting stuff in IT - your group counts!

Even if these groups don't serve to find you any members, consider asking the women to come and speak at your group. Especially on gender issues. The linuxchix miniconf was a great success with women speaking on issues such as negotiation and the gender pay-gap issue. Women are interested in these issues... and so are men.

Retaining your women

One of the broader issues for women in the corporate world, is that women and men have their own cultures. Be mindful that women's culture is likely to be distinctly different (though no less important) than the culture you already have in your group.

Obviously I am speaking broadly and individuals differ widely, but there are some common issues with women, and understanding these issues will help you integrate.

Firstly, don't assume that your culture is better. If you have a culture in which people brag about their exploits and the loudest shouter wins the floor... don't be surprised if women stay away in droves. Women come from a culture in which it is considered polite (and expected) to await an opening before speaking. They will not jump in and say their piece just because everybody else does. If an opening is not made for them, then they may never speak at all - to the detriment of everybody.

Female culture thrives off positive feedback and encouragement. If you notice that a woman in your group has done something you think is cool - encourage her to tell people about it. Do not be surprised to find that she thinks nobody wants to know. This is a place where it's ok to tell her that she is wrong. :)

Most women are self-deprecating (by inculturation) and will often down-play their experience. Poor self-esteem is common, even in those that have many successes behind them. You may need to treat your women like "the quiet kid" who needs some encouragement to speak up.

With the particularly shy and retiring - take them under your wing a bit. If she is too afraid to do it herself, promote her successes for her and show her how much her contribution is valued. Prompt her to talk about what she did and what she learned. When she sees that you're not all big, scary people that are going to laugh at her... she'll be more likely to stay.

Don't be big, scary people that laugh. ;)

Newbie women are afraid of the same things that any newbie is afraid of. They're worried that they will look stupid amongst all these shining gods of IT. They think their dumb questions and newbie mistakes will be laughed-at. It's up to you to make sure they know that it's ok to be a beginner. This also goes for experienced women with low self-esteem - who often rate themselves as a beginner even when they are an expert.

Share your own stupid questions and mistakes. Show them that you gods are really human too and were once a newbie with dumb questions (and, in many cases, still are). Let them know that everybody asks stupid questions and nobody thinks the less of them. Make them understand that what they are going through is not only normal, but expected. This can be as simple as saying "I'm glad you asked that", when they do pluck up the courage to ask.

Finally, support (or start) a women's chapter for your group. The intent is not to have a separatist group, favourable only to a minority. It should instead be a safe haven for newbie women to socialise and network with their peers as they adjust to a new and alien culture.

Getting women into your group (and keeping them there), is a Hard Problem. But there are lots of things you can try. The effort will mostly be in the initial stages - once the ball is rolling it'll take on its own momentum, and the results (I think) are worth it.

Want to know more?

Read Val Henson's article on encouraging women in linux. It's very thorough.

First contract

So I finished up my first ever contract yesterday. It was a good start. I had been hired for a week of work to implement a payment gateway to allow people to subscribe to the site.

It started out much slower than I hoped as I managed to get the bad luck of coming down with the flu on the day I was supposed to begin. I negotiated to take the first day off, but even after I started my head was pretty fuzzy. Not good for staying at the height of my game.

So I worked some longer hours than I would have done - especially in the later days of the contract, just to try to make up for the early slow-down.

Anyway, in the end the system was successfully subscribing and unsubscribing people. I was hired for a couple of extra days to do some other stuff, so the client obviously wasn't unhappy with my work. :)

Wednesday, 24 January 2007

Linuxchix Rails talk

I gave my first ever talk at Linuxchix on Monday. It was an overview of Rails. I kept it informal as we're never sure of the venue or how many people will turn up. As it turned out there were around ten people and we sat in a fairly noisy area outside of Gloria Jean's at St Leonard's.

It apparently went quite well, given the location and the necessary informality. I briefly went over why Rails is so appealing to businesses and what it actually does to help a developer build a web app. I ended with a vague discussion about MVC architecture and took a few questions. People seemed particularly interested in the causes behind Rail's reported slowness: which unfortunately I don't actually know. So I'll have to research that for next time.

I had a few positive tips for improvement come out of it too. Mainly it was suggested that I tie the talk together with a narrative element - as people naturally respond to stories. It gives people a hook to hang onto as they follow the points you're presenting. Slides or a demo would have been good too - but that was a limitation of the venue.

Afterward, of course, we all headed off to SLUG and some interesting talks, including one on how AV was used during LCA, and another on the Google Summer-of-code project.

BusyBusy

I haven't died - I've just been busy.

First with my new contract with SugarStats.com I sadly fell ill on the first day, and left myself that day to try to recover. But I gave in and just struggled to work through the mild flu for the rest of the week - I can't sit abed for too long when there's work to be done. That filled in the rest of the second week of January.

Secondly was LCA - what a fantastic week! Keynotes and lectures from amazing speakers, cool shiny toys to play with and wonderful social evenings amongst the cool hackers that flocked to the con. I think I'll go every year from now on! I have yet to watch through all the amazing talks that I missed (while watching other amazing talks, of course). I also have some cool ideas for stuff I can contribute to Open Source... as well as several ideas for blog-posts that I'll type up - as my backlog.

The beginning of this week has been filled with the housework needed to get my house back into shape after a week of 8am-10pm days, followed by several more days working on my contract (which has been extended so I can do a few more things). In any case, I'll try to get down a few more posts in the next couple of days.

Thursday, 4 January 2007

File uploads

I wasted time today.

I didn't intend to - I was hopng to change an admin CRUD interface over to use AJAX scaffold - which is prettier than what I had before. But when it was all changed over suddenly all my file-uploading stopped working.

I checked to make sure all the file-saving code was still in place, the filenames were correct, everything but it kept simply not finding the StringIO that was clearly there in the form.

It took me way too long to discover that you Can't upload files with AJAX. It seems the JS doesn't accept the multi-part get/post data. :(

So I changed back...

but in the meantime (while I was checking all my code) I discovered the file_column plugin which is a neat little library that does all of your file-uploading for you. It even integrates with RMagick to let you do some speccy resizing etc. So it wasn't *totally* wasted effort... just not what I'd planned spending the morning working on :P

Friday, 22 December 2006

PayPal helldesk

I like text-only emails. It's a great way to avoid link-jack phishing spam, virii and annoying flashing ads. It's also a great way to get your email through an ssh connection. However, dealing with long URLs can sometimes be annoying. It doesn't seem to matter that I've set all of my settings to *not* use wrap-characters. When a link comes through it will, more-often-than-not, have a '+' sign squidged into it when it breaks onto a newline.

This is not a big problem. I've grown accustomed to copy/pasting (ok, highlight and middle-clicking) into my browser window, searching for the <CR> and a spurious '+' and removing it before hitting "Go".

This does not work for PayPal URLs

PayPal text-based email is that hideous abomination that comes sprinkled with MicoSoft proprietary characters. Lines end in '=' and there is a smattering of '?', "=20" and other random wierdness, just to make life more challenging...

I spent hours yesterday morning trying to get back into an old paypal account of mine. I did the "forgotten password email" thing. I clicked on the URL. I removed the <CR> and the clearly spurious '=' wrap-character - no go. I tried it while leaving in the '=' - no go. I tried copy/pasting the inidividual halves of the URL into my browser - no go.

I then spent an hour or more on the phone with their help-desk trying to be polite while they went through their script:
"Hi there, I'm having trouble with the forgotten-password URL. I have tried copy/pasting it into my browser, I removed the line-wrap symbol and the carriage-return, and it still doesn't work."
"Have you gone to the forgotten password page and clicked the link to send you a reminder email?"
"Yes, I've done that - I've got the email, I've clicked on the link and it doesn't work. I tried to copy the link into my browser, but that doesn't work either."
"Have you tried to copy/paste the URL into your browser?"
<sigh> <<find me somebody that understands linux... or at least somebody that knows how to *listen*!>>.

Finally he agreed that it really wasn't working for me! But their technical desk had gone home by that stage so all they could do was open a trouble-ticket with me and I would need to call them tomorrow.

I played a wild-card and tried creating an account with the email for my old company. I was coming in for some final work this morning. I used Evolution there so I could look at the URL and compare. I wasn't sure if it'd help - but figured it was a better shot than fretting about the next level of helldesk support.

Example URL from Evolution: https://developer.paypal.com/devscr?cmd=_signup-el&ac=Uqht43A9suP7A-qEw=
Wi6tvquhPE8gVgEPX5Rr7vBWrMTj8uOWmJ2eh6wavzjhIQWjjkrfCT8x4rJvA

Example from mutt: https://developer.paypal.com/devscr?cmd=3D_signup-el&ac=3DKiXOj6ebBnR5sJZhj=
xP1NKTMTbq6pyy7COF6tQRj-BkZjbnAvkAjAwLMiTalSVT94OmHniMPIMI9Iw

Note the "3D" after each of the (real) '=' signs. I have no idea what character PayPal's text-email generator thinks they are supposed to represent - or why Evolution seems to gloss over them, but removing them makes it all work.

Tuesday, 12 December 2006

So I finally ditched dry_scaffold after a few too many annoying little things. There's apparently a new version coming out that fixes a lot of these minor annoyances... but it's not stable enough to use just yet - and my life is moving on without it.

The most annoying to me were:
1) Not allowing me to use apostrophes in generated form fields. It didn't just escape them out before saving. It silently removed them from your field as you typed it. :P
2) No proper support for modules. This becomes annoying when most of your sites have both a publically-accessible view of your Thingies and an Admin::ThingyController to do your thingy CRUD. dry_scaffold would look at this and expect your model to be kept in app/models/admin/thingy.rb, so you'd have to have a copy in your base model directory and a symlink in that directory if you wanted to have just one model file for two controllers to access... not exactly DRY in my book.

Tuesday, 5 December 2006

Moist file upload

Cool, so I just figured out how to integrate file-upload with moist scaffold. If you can already do this while standing on your head - well, why are you reading my blog? ;) Otherwise, here are the basic steps:

Generate a moist scaffold

This can be done as per my previous post. You have to generate it using less_dry so that you can extend the create/update actions in the controller. Also - make sure your model has a string column to hold the filename - I'll assume that this is called "thumbnail" from now on.

Configure the column

In your model file you need to update the filename-column's has_column details to something similar to this:

  has_column "thumbnail",{
    :in_list => true,
    :sortable => false,
    :filterable => false,
    :type => :custom
  }

The important bit being being the :type => :custom. This tells dry_scaffold to go look in the helper for methods that generate the edit-field and list-display. If we were to filter on this column, we could also specify a filter-function, but I haven't done this. I've turned off filtering and sorting for this column - though I could have done a filter/sort on the filename.

Put list/edit methods into the helper

module ThingyHelper
    def thumbnail_edit(one_row, column)
        file_field "thingy", "thumbfile"
    end
    def thumbnail_list(one_row)
        image_tag "/images/thumbnails/#{one_row.thumbnail}", :size => "64x64"
    end
end

These are the methods I mentioned above. The edit method creates a file upload field that is named *differently* to the column that will store the eventual URL. If you want to store the whole image file into the db - go ahead, but I figured it'd be nicer to put them into an images directory.

The list method just displays the file squished into 64x64. It'd be nicer to work some RMagick, but I didn't bother for this example. Note: the reference to one_row is a hack - this is how dry_scaffold refers to the current row of the list. To access other values out of the row, you have to use it - but it seems brittle to me.

Update controller+model to manipulate image

When the user does a browse/upload on a file - it passes the StringIO object through to the controller. This file needs to be saved into the images directory - and just the URL put into the db.

Other sites have covered this already (in a variety of forms): read the rails article here (you may need to go back to a non-spam version). Pick a favourite way and you're done.

Monday, 4 December 2006

Moist scaffold

I've just discovered dry_scaffold and it's lots of fun. It does exactly what a scaffold was originally intended for: ie to hold the basic shape of the CRUD bits of a rails application while you get around to replacing the bits that need replacing.

This is as opposed to the rails-standard script/generate scaffold, which generates tons of files that you may not be ready to (or may not ever) change. IMO the standard scaffold-generator is less like a scaffold, and more like a rough-shaped mud-hut slapped quickly together that you can modify.

Unfortunately, if you need more than one of these, you get several nearly-identical rough mud-huts piled randomly about the place. They each begin with their own complete set of infrastructure which you can (try) to modify to be more DRY, but tends to end up with some residual wetness that is just really hard to get rid of without a lot of effort.

By contrast, dry_scaffold adds new model objects like storeys in a high-rise (with shared ventilation and lifts and... ok, I'm going too far now). The basic infrastructure is shared because it's all contained in the engine. Much DRYer.

All this being said, it's still quite new and so has its issues. The main one that I see is the spotty documentation. So here's a rough guide for where to go looking:

  • To get the basic dry_scaffold up and running, use the standard dry_scaffold page, but use your own model (obviously) and ignore where it says to update layouts/admin.rhtml.
  • If you need to only slightly adjust how the fields are added/listed or filtered, you have a range of options available to you. The data are stored in your model object as a set of columns with configuration options. Check out the has_column rDoc to see all the options available. The rDoc is available here, and has_column is listed in the frame at top-right.
  • If you need to do some serious readjustment of the code, or plan on using dry_scaffold simply as the stop-gap while you replace the structure, then you really need a "moist" scaffold. You will need to run the generate command with the following form: script/generate dry_scaffold ModelName ControllerName less_dry. This will generate a minimal controller that allows you to override/extend any actions you need; while continuing to be extremely slim-line. AFAIK there is no documentation on this, but from general mucking about it seems straight-forward.
  • If you have more questions, there is a forum available here.

Sunday, 3 December 2006

Kill the ugly duckling!

For years, now, I've had a "tradesman's website"... you know, how the tradesman comes home and doesn't want to do *more* work, so they let their own house go. That's what my website has been like now for a while. I've suffered brief bouts of inspiration, followed by a flurry of new stuff - only to get caught up in what I was doing at work and not want to do any web-development once I got home :P

But that's gotta change - and the old styling is really not cutting it for me. So the first thing I've done is to get some graphic desgin done... I'll be getting the first look at the result on Monday and have been really looking forward to it!

I've never had to brand myself before, and that's essentially what I'm doing. I've worked with branding for products, companies and services, events and concepts - but never for myself. I had a chance to chat about what I like, how I see myself being portrayed and even a few of my favourite hobbies (eg calligraphy) and now I'm really looking forward to the results.

Monday, 20 November 2006

Fixed-width suffocation

This blog was getting strangled by its own fixed width. Yick. So I've just updated the layout CSS to remove the set-pixel-width sections. Unfortunately this also required mucking about with the background images (quick application of gimp and an upload to my own website). The parchment background doesn't look quite so pretty without its "slightly burnt" edges - but at least it won't repeat said edges over and over.

If I get more inspired later I'll update the layout to include the left/right edges individually. Right now I don't have the brain-space to figure out how do that in an elegant way.

Ruby on Postgres on Ubuntu

Agile web devlopment in Rails [1st ed] is a great book - really. But when it comes to installing Rails on postgres - lets just say that it wasn't really written with ubuntu in mind. This page has far better installation steps (including setting up your pg_hba.conf for dapper).

The new edition is available now and I've just ordered myself a copy... this one looks great too - but is still based around MySQL. They do point at the RailsOnUbuntu page for installation, though - which is good. Definitely follow the "recommended way"!

Citizen #20494799631

Wow, getting an ABN as a sole-trader was much easier than I expected. I have this left-over memory of having to scramble for random and bizarre information from when I applied for Renaissance Fence's ABN - but I guess it was because I didn't know all of Rick's vital statistics then.

For future reference, apply online here If you are on a mozilla-browser (eg Firefox) - ignore their "we don't support your browser" warnings. Their "you don't have scripting turned on" warning is equally useless. Luckily they have provided a "continue if you are sure" link or I'd get really mad.

Their password security is borken - 5-8 characters only? They actually stop you from typing a longer password! They have some other wierd restrictions too (eg letters can't be doubled... but I found out that digits can); that don't *really* add that much more security to them... <sigh>

Their html forms are ugly-as - requiring only a bit of human eyeballing to tell them that, for eg, date field do not need to stretch across half the page - whereas an email field would probably do better with more than only ten characters visible.

Otherwise it's all pretty straightforward. You can even save and return to it later if you need to go find your TFN (I had that handy, this time around).

Saturday, 18 November 2006

Ruby Slippers

We're not in Kansas anymore...

So... after a few years working in the bog-standard IT job I've decided to venture out into the big, bad world of contracting. The stomach fills with butterflies just thinking about it. I am ever mindful of the market situation that surrounded my first IT job. The bubble was bursting and belts were cinched ever tighter in a last, desperate bid to grasp at whatever straws were on offer.

Is the market so different now?

The net is filled with buzz over the new "(r)evolution" of Web 2.0TM and I have happily upskilled into that area. Ruby-on-Rails is indeed a dream-come-true compared with the outmoded efforts of only a few years back. It provides a heady mix of powerful scripting with whizz-bang AJAX GUI effects that can turn the average online business into something really special.

But is that enough? I have the tech-skills, my micro-business has given me customer-service and admin skills. But I'll admit I've never left the protective support-system that the average tech-company provides.

Sticking my head outside the womb is a scary thing! The first breath of cold, sharp air will be a painful shock. I am, however, reminded of that quote:

"Life wasn't meant to be easy, but take courage, child, for sometimes it can be pure delight"

So all I can say is that I've just begun. I don't know how I'll go, but I plan on having a hell of a ride while I'm here!