Dyepot, Teapot

Entries categorized as ‘work’

An Easy Way to Rename Files with Attachment_fu

September 24, 2009 · Comments Off

This is pretty simple, but I couldn’t find anything similar when I searched for it, so I’m posting in case it’s useful to someone else.

I’m using attachment_fu, the popular Rails file upload plugin, on a project where users upload photos. We needed to change the file names on upload so they wouldn’t contain any identifying information, and attachment_fu doesn’t have this functionality built in. Most of the discussion I found online covered changing the directory structure too, which is overkill here. I just need a simple way to change the names without accidentally clobbering some other part of the plugin’s functionality.

Here’s what I put in my image model, which has one thumbnail type (named “thumb”):

after_create :anonymize_name

def anonymize_name
  extension = filename.scan(/\.\w+$/)
  if thumbnail == "thumb"
    self.filename = "picture_#{parent_id}_thumb#{extension[0]}"
  else
    self.filename = "picture_#{id}#{extension[0]}"
  end
  save
end

And that’s it.

As an aside, I discovered that there’s an attachment_fu rewrite in progress, which you can check out at http://github.com/technoweenie/attachment_fu/tree/rewrite, so that might be of interest to anyone looking to extend it further.

Categories: technology · work
Tagged: , , ,

The Modern Professional Developer

April 30, 2009 · 7 Comments

In some of the responses to my earlier post, I felt that people misunderstood what I meant by “unprofessional”.

Many people jumped on this as something stuffy, that keeps us from being expressive and creative (the complaint was often expressed as a desire to be able to say “fuck”). I was surprised, because that’s not what I meant at all. I start my working day in my pajamas, and listen to whatever music I like. I click on NSFW links if I want to, because my officemates are a pair of cats. I’m involved in a ton of extracurricular tech activities, and we drink at our planning meetings ’cause we’re adults and we can.

When I say professionalism, I mean the social practices that permit each of us and our colleagues to earn a living. All of the things I’ve described above don’t affect my ability to get a paycheck, nor does it impede anyone else. What does have that effect is exclusionary behavior, and technical communities that allow said behavior to persist, even when called on it.

This is not just a club. Rails is how I earn my living. My call for professional behavior isn’t a call for us to button up our collars and be sure we keep our language clean. I’m asking that we make sure the events and activities where we learn the tools of our trade are open to everyone.

On its own, this doesn’t dictate any particular standard of content (“edgy” or not). You have to pay attention to your colleagues, listen when they say, “that makes me feel unwelcome”, and negotiate a respectful solution.

In my professional life, I work for a distributed company with people in other cities. We talk about code and share links to interesting things in Campfire. Text-based chat makes it easy to skim when people are talking about something I’m not interested in, and tune in again when they are.

I go to user group meetings that start with code and move on to drinking at the pub afterward. The meetings provide an opportunity to share what we know, and learn from others’ experiences. The pub gives us a chance to talk about the recurring frustrations in our work, and get to know each other better. Some of the people I’ve met through user groups have become good friends, while others remain acquaintances.

I post to Twitter and Flickr and my blog, and trust that people I work with will subscribe or ignore based on their own interests. I combine my personal and professional interests when I write online. It’s okay if you like my code but not the cat stories, or vice versa.

I use this mixing of personal and professional life to build relationships that turn into other project opportunities. It gave me a pool of people to go to when I wanted to address Portland’s need for a tech community calendar. It manifests as sessions on knitting at BarCamp and ambitious plans for open source world domination.

I get to do my work in an environment that is, on the whole, flexible and engaging, and has positive effects on other areas of my life. That’s why I feel so strongly about building that environment in the Ruby/Rails community as a whole. We should all be able to share and experience this.

Categories: life · technology · work
Tagged: , , ,

Where did I go?

August 14, 2007 · 2 Comments

I’ve been neglecting my blog so much that even my mom noticed. Oops. I’m too busy again. Some neat things are coming out of that: a new group for local women who write code (or want to learn), much craftiness, talking with various people about contract projects, getting Yog’s Notebook in front of a wider audience (we were at the Portland Zine Symposium this past weekend). And so on. If you were expecting to hear from me and didn’t, this might be a good time to send a reminder.

Categories: life · work
Tagged:

Bursty

June 5, 2007 · 4 Comments

Anne Zelenka has been writing some really interesting things about the nature of work lately, as an extension of her work at Web Worker Daily. She proposes that there are two models for knowledge workers, one older and one emerging now.

Busy: Show your face during all standard working hours.
Burst: If you produce what you need to, we don’t care when you do it or how long it takes.

Busy: Manage the hierarchy inside your company.
Burst: Connect laterally outside your department and company.

Busy: Always available during working hours.
Burst: Declarative availability.

Seeing the response to this has been very interesting. The replies on WWD seemed mostly positive. Several people said, “This is how I want to work, but it goes against how our work environment is set up.” Elsewhere, including her own blog, followers of Peter Drucker’s management philosophies are complaining. “You misunderstand. What you’re talking about isn’t meaningful. That’s just frosting on the ideas we’re promoting.”

I disagree. When Matthew Hodgson says the Drucker credo is, “Worker, manage thyself. Organisation, get out of the way”, I know he’s not getting the burst work concept. Because what I hear from Anne is “Workers, organize yourselves.”

For those of us that glommed onto the burst concept automatically, I think the issue is this. We procrastinate. We work hard, and then we take breaks. Our day looks like a mishmash, but we’re productive. And traditional management and organization structures, even in ‘knowledge work’, are not very accommodating of these patterns. When I’ve done project management, I actually prefer situations where people aren’t all in the same office (and especially the same room) together, because it helps me remember that I don’t need to care what people are doing at any given moment as long as the work is getting done. The very nature of being able to see everyone in person all day is that it’s really hard to support anything but a ‘busy’ work pattern.

I’m in kind of an odd situation right now, employment-wise. I’m not working full-time for anyone, but I’m running a (very small) business, doing contract work, and generally enjoying the chance to write and network and claim my own time. At the moment, that just barely pays the bills. I’d like to be earning more, but it’s really hard to trade away this kind of freedom. I get work done. On time, and to spec. What else matters?

Categories: work
Tagged: , , ,

Indirect routes

May 21, 2007 · 1 Comment

I keep thinking that I’ve already spit out everything I can think of on this topic, but a comment I saw on Tim Bray’s blog reminded me of something else. There’s a lot of focus on a particular route to working with technology, running from early childhood computer use, to high school programming classes or college CS studies, then finally getting a real world job in the field. It’s the formal path for this, right? So then when we talk about how to get minorities actively contributing in the world o’ tech, we focus on smoothing that specific route. But in reality, a lot of us actually studied or worked in other fields at some point, and came to technology from elsewhere. In my case, I learned BASIC in grade school, played with computers tons all the way up, but didn’t take a single computer class in high school, and in college I majored in geography instead. The particular kind of technology work I do now mostly involves things I didn’t pursue until I was away from formal education systems.

I’ve heard similar stories from a lot of other people, too. Many real live computer programmers have a background in something other than CS. And that’s wonderful. I think it’s much easier to learn computer skills on the side than to get an in-depth look at many other fields that way, and a background in something else can give you so much material for what questions technology is needed to solve. So when we’re thinking about how to increase the diversity of who works in technology fields, it’s really important not to neglect the indirect routes. Many modern jobs involve computers in some way. We need to think about how to help people become not just passive consumers of technology, but active contributors. Even if all they do is write their own web page or a small script. Even customization of existing tools or just a good understanding of how they work is part of this.

Not everyone will want to get into the nitty gritty details with tech, and that’s okay too. I wrote a post after Recent Changes Camp about how organizations can recognize and support involvement at many different levels. But while there are many great reasons to reach out to as diverse a pool of kids and students as possible, to facilitate their future involvement, I don’t want to forget the adults who are already out there using these technologies on a daily basis, who may just need a nudge in the right direction to take a more active role.

And maybe we should also be talking about expanding our definition of who counts as a technology worker in the first place. Shouldn’t this include anyone who creates or modifies tech for their own needs, whether or not they’re working under the umbrella of IT or programming at the time? Not to make the numbers and diversity ratios look better, but to reach out to people who may not realize there’s any kind of community or resources connected to those activities.

More to think about.

Categories: technology · work
Tagged: ,

People are not widgets

May 1, 2007 · Comments Off

I’ve been meaning to write about the commoditization of labor for a while, but the direct impetus for this post is Tara Hunt’s discussion of Riya‘s decision to close their India office, and in general how outsourcing affects the economic landscape for programmers there.

One of the things that tends to happen when those of us from the developed (first, northern, etc.) world spend some time talking with people and communities in developing (third world, southern, etc.) countries is that certain (even well-intentioned) stereotypes are challenged. Ideas like “everyone is equally poor over there” but also “R&D really only happens in the developed countries”, and “people in these places don’t know how to create things they can use themselves” which is directly tied to “those poor people don’t know what they need”. It’s very easy to start making people into single-use widgets when it comes to their role in the global economy: young men from India are the Java programmers stealing your jobs, the educated classes of China will sweep our engineering capacity, women in Mexico and the Philippines can assemble clothing quickly and deftly, etc. Some of these things may be true some of the time, but if we understand that the reality is more complicated at home (among the people we know), why do we try to impose this on people everywhere else?

That might be a trick question. Labor markets in the US definitely take a two-dimensional view of their workers. If you’ve ever been through the job application process at a large company, you’ve probably experienced the checklist of detailed requirements that are supposed to represent the ideal worker for the job. You also probably know that it’s possible to hire someone who meets those exact requirements, and yet can’t do the work adequately.

I have a particular stake in this argument as well. If companies see me as “intermediate-level Ruby programmer with business writing skills” or somesuch, they’re missing out on huge chunks of what I know and can do, and I’m missing out on potentially interesting opportunities. I think for any kind of work that requires skill or training (and large amounts of work are this way now, thanks to various kinds of automation), determining who is qualified, let alone a good match, can be fairly complex. I’m not suggesting we make hiring any more of a PITA than it already is, just this: keep in mind that “labor” is made up of individual people, not widgets with various certifications.

Going for the cheapest labor without other considerations disrupts business every time the market conditions change, as well. It’s heartbreaking to watch interviews with textile workers (already in a precarious economic position) who’ve lost their jobs because their employer found cheaper workers elsewhere, but what about the impact to knowledge industries when they do this? Losing an entire team of programmers at once is certain to require adjustments for everyone else, and may mean losing specialized knowledge that’s difficult to recreate.

So here’s the point I’m trying to argue: it’s better for business to not over-commoditize labor. People are complex, multi-dimensional creatures, and the best choice in a given situation depends on more than monetary price. In addition, the cost (internal and external) of switching groups of workers is much greater than switching supplies of actual commodities like lumber or canola oil, and these costs should absolutely should be taken into account.

I caught something on the radio yesterday that seems tied to this. On Morning Edition’s business report, they had an interview with someone who had just completed a survey on outsourcing in engineering. The general conclusion was that the availability of qualified engineering graduates in the US was sufficient for our business needs, and that significant parts of the potential pool of engineers in China or India were not qualified to our standards, so while companies are saying “we can’t find the qualified workers we need” what they really meant, if you dug in, was that they didn’t want to pay for homegrown workers. I think this does everyone a disservice.

Categories: work
Tagged: , , , ,

More on roles

April 4, 2007 · Comments Off

After I talked about the importance of writing roles while you’re still a 1-2 person shop, I made a list based on the work we’ve done on Yog’s Notebook so far. It looked something like this:

  • Editor
    • acquisitions editor
    • copy editor
    • proofreader
    • developmental editor
    • layout designer
    • web designer
  • Publisher
    • bookkeeper
    • business manager (HR, financial planning?)
    • sales
    • customer service
    • marketing
  • Content
    • writer
    • graphical designer/illustrator
    • contributing editor

When I came back to it a week or so later, I felt like it still didn’t really do enough to describe the work, in a way that would be helpful in assigning portions to someone else. So then I listed every activity I could think of that we’ve done so far. Combined with the labels above, I have this:

  • Editor
    • lead editor: send publication to printer
    • acquisitions editor: read submissions, select submissions for each issue, sign contract for writer’s copy (and ours), respond to submission queries, send rejections for work not selected
    • copy editor: check content for spelling, grammar, and conformance to style guidelines
    • proofreader: verify that all content is represented on the page as intended
    • developmental editor: discuss story changes with writers
    • layout designer: lay out the publication, create cover design
    • web designer: create website, set up domain name and web hosting
  • Publisher
    • bookkeeper: record expenses, record sales
    • business manager: write/create a contract, send contracts for selected work, pay writers, file contracts somewhere retrievable, file receipts, buy office supplies (envelopes, labels, etc), get quotes from printers, create financial analyses
    • sales: send announcements of new issue, set up PayPal for purchasing copies, contact stores about stocking our publication
    • fulfillment: package purchased copies for mailing, mail copies of zine to purchasers, email PDFs to purchasers
    • customer service
    • marketing: print promotional materials (stickers), plan release party
  • Content
    • writer
    • graphical designer/illustrator: create graphics for web, publication, merchandise
    • contributing editor: write editorial content

I’m sure this is incomplete, and that there are other (better?) ways to organize the tasks and roles, but it’s a start, and it was interesting for me to see how many different kinds of things were involved in getting that first issue out. If anyone who has submitted work to us (or any other small publication) is reading this, I hope it helps explain why it can take a little while to hear back; we have so many other jobs to do at the same time.

I think the next step would be to look at what roles could be handed off to other people (or outsourced to another company) but right now we don’t have the resources. Still, I’m glad to have some idea of where I would start.

Categories: projects · work
Tagged: , , , ,

Write the roles before you need them

March 17, 2007 · 1 Comment

I was reading through the hundred dollar business yesterday, and I spotted an interesting bit of advice on starting a business and organizational roles.

It caught my attention because employee roles were one of the big issues we struggled with during my ~5 months at PA, and I am always eager to avoid hitting the same problem a second time. So: Rob Merrill said

At the earliest stages, while you’re still fresh in the “entrepreneurial seizure“, you need to determine what the mandatory roles in the business are. In a startup, of course, there is no room for bureaucracy or drag of any kind. 100% of the resources need to be maxed to 100% or more. Vanity is death, though entrepreneurs by nature are often susceptible to vanity of some-kind or another. Beware! However, you need to reach out into the future to predict how the different “legs” of the organization are going to grow.

Take each group or functional area of the company and work on each “leg” planning out the infrastructure. Physically DRAW these out on an organizational chart.

For now, you (yourself) may occupy all or many of the roles in the org-chart. No problem. What’s important is that you know what’s next in line and, while you’re doing the shipping clerk’s job, you’ll be working hard to be sure that, when you do hire a clerk, you will have a system in place to ensure that you don’t spend all your time training them–and that the level of service you expect will still be achieved.

I’m going to try this as a planning exercise for Yog’s Notebook. It’s still a (very) open question if and how much the zine will grow, but as I’ve been looking at the possibilities, I’ve become more concerned with making sure I don’t write myself into a corner. I want to make sure it can succeed at whatever size turns out to fit best.

Categories: work
Tagged: , , ,

More on personal and professional communication

March 14, 2007 · Comments Off

Morning Edition had an interesting segment in their business news this morning: a woman wrote in to say that she felt her boss was too interested in her personal life, and wanted advice on how to respond. The part that caught my attention is barely summarized in the story’s page on the NPR website, though. At the end of the conversation with Kathy (the employee) and Ben Dattner (a workplace consultant and psychologist), Ben asks, “Have you thought about why her interest in what you do outside of work feels like prying?” And they talk for a minute about how our past experiences, and family experiences in particular, affect how we interpret people’s actions when we interact with them at work.

It’s a short piece, and you can hear the whole thing on the website (linked above), so I’d encourage anyone who’s interested in this topic to go listen.

Categories: work
Tagged:

Moving on

March 8, 2007 · 2 Comments

I’ve decided to resign from my job at Planet Argon, after much consideration. At least in the short term, I’m planning to use this as an opportunity to focus on a few projects of my own, particularly Yog’s Notebook, but also some programming and writing and art things and so on.

However, since the contents of my bank account are finite, I need to line up some kind of paid employment. In particular, I’m looking for freelance and contract work. Here are things I know how to do:

Programming. Ruby. Rails. Perl (if I spend a day or two getting used to the syntax again). I’d also like to dabble in a little desktop application development on the Mac.

Project management. I am very good at breaking big things into bite size pieces and figuring out how to get it done.

Design. I can do HTML and CSS (standards compliant, yes). I’ve been learning to use InDesign for page layout, and response to my work there has been good. I’m interested in learning more about user interaction design principles.

Photography. See my Flickr account for examples.

Writing. The obvious example is this blog, but I also have a lot of experience with writing in a business context.

I’ll be at PA through the 21st, then take the rest of the week as a little mini-vacation to read and play video games and generally slack off. We hope to have the zine printed by around then, too, so there may be some kind of release party that weekend. After that, back to work.

Categories: work
Tagged: ,