Remote Pair-Programming

February 11th, 2010 by comment

Seems like Pair Programming is “all the rage” lately in my circles. I haven’t exactly done it before but after hearing about the success and rapid knowledge growth amongst those that pair program…I was almost dying to try it! Especially after i saw David Chelimsky and Corey Haines at WindyCityRails in Sept 2009. I saw them pair and do BDD with Rspec/Cucumber and it was so fascinating, It was like I was watching a ballet as they hopped from RSpec to Cucumber and back and forth. I was like, wow…I wish I was that good! I would have paid good money for a recording of that so I could watch it again and again! I see Corey Haines traveling around pairing with people too. Some people get together and play cards, but Corey gets together to code!

So ok, I like code, I like people, I want to try it! I live a little south of Chicago so its a long commute and it seemed everyone was so busy to pair in person when I asked. I asked on Devchix mailing list for suggestions on how to do pairing online. I had found a few, and the group had some good suggestions. I even had a volunteer to try it with me! This week aimee and I set a few hours aside to try it and see if we could do it!

This article was also sort of “paired” as it was written from my perspective with input and suggestions from aimee!

We asked on Devchix mailing list for suggestions on how to do pairing online. I had found a few, and the group had some good suggestions. I even had a volunteer to try it with me! This week aimee and I set a few hours aside to try it and see if we could do it!

After introductions on Skype we set about getting a shared environment in which to code together. Ideally, we wanted some kind of desktop sharing so we could run tests, console and editor.

We had heard of a few tools and got suggestions from the devchix list:

IChat desktop sharing – we couldn’t get this to work, we did different things and it would appear to connect but then it failed. I tried to mess with settings for Sharing on mac, but nothing doing.

Rio seems to be a library to make collaborative apps, not to use in a pair programming environment.

BeSpin was hard to use.. we couldn’t figure out exactly how to use it. It almost seemed to offer to import the git repository we were working on, but then it said it only supports Subversion and Mercurial, not git.

SubEthaEdit worked but we would have to open each file individually and share each file… unless I was missing something. This would be fine for collaborating on a single file but then we could not share the test runs, terminal commands or view the browser together.

Etherpad – we didn’t end up trying this but I have used it before to debug some code or try out ideas with a friend. They recently got bought by Google, so it would be interesting to see what they do with it. This would suffer the same limitations as SubEthaEdit in that it’s just a text editor.

GoToMeeting (which is $40-50/month) its a little steep for the open source work I want to do. But people say it works really well.

VNC and Unix Screenaimee had used this successfully before but since we weren’t on the same network, just our laptops at home, we weren’t sure it how we could make it work easily.

Then we came to TeamViewer which worked brilliantly! We shared desktop and I could type in aimee’s console window, see the tests running and type in textmate. Even with aimee on her Dvorak keyboard and I on Qwerty! I could type fine but couldn’t copy/paste with keyboard shortcuts so I used the mouse to copy/paste and it worked fine.

All in all, it was an awesome experience and I picked up on a few tidbits of knowledge from aimee on git, and rake! I had some bits of code from another project i was able to quickly copy/paste and get us rolling. We had a few discussions about coding style as we went.

Since aimee was more familiar with the codebase, she mainly wrote the behavioral specs and I wrote the code to satisfy them. We plan to switch around next time, when we pair on a different project that I’ve been developing for a while.

ˆ Back to top

She's Geeky 2010 Bay Area, Jan 29-31

December 15th, 2009 by comment

She’s Geeky is my favorite stateside women’s tech event. It is a great opportunity to network, learn about other women’s projects and ideas, and test the viability of some of these ideas against receptive VCs. It’s also a great un-conference environment. It is low-key, entirely attendee-drivien, and will be whatever you all make it. I was thoroughly impressed with this conference, now hosted multiple times a year throughout the country, each with it’s own regional twist. It can be a great place to find your next job, start your next dream project, or simply be inspired by others who are doing so.

Early registration ends Friday. Go here for details.

Gloria

ˆ Back to top

How rails has changed how I seek for a job

December 10th, 2009 by comment

For nine years, I have developed for the web. Over the years I’ve programmed in C, C++, Python, Java, ASP, PHP, Perl, and most recently, Ruby.
Since my first job as a developer, I’ve never looked for a new job: all of my job transitions have come through friends or co-workers.

In mid 2007 I was happy working with Perl. One day a friend told me about a Ruby on Rails job. Back in 2007, Rails developers in Brazil were rare. Because of that, the employer was seeking someone who fit the company instead of someone with Rails experience. That was great for me!

After a pleasant summer, the new job’s charm wore off and I decided that I wanted to move on but continue to program with Rails. Finally, I left my job.

When I started to send out resumes I soon realized that Rails’ culture fundamentally changed the way that a Rails job search functioned. In addition to the traditional resume or CV, Rails jobs demanded to know about Working With Rails, LinkedIn, GitHub, Twitter, personal blogs and sites, discussion forum posts, participation in open source projects, and a multitude of other online presences. These new demands made me realize that I hadn’t been cultivating a comprehensive web presence, which is not uncommon for female programmers, in my experience.

At first, this realization was disturbing. Though it’s still possible to get a Rails job without a vast web presence, I was upset to realize that I hadn’t been adhering to this best practice. It was particularly jarring the first time I was unable to answer these questions to potential employer.
The practice of software development as a craft is constantly reinventing itself and this includes the processes around job seeking and reputation building. Despite all of the hours, projects, languages, and jobs I’ve previously invested in, I now realize that I need to adapt to this new developer reality of being social and visible with my work in order to win back my standing as a desirable developer and potential candidate for a Rails position. The details of how I’ll implement that strategy will be the subject of an upcoming post, but I look forward to the possibilities ahead.

To read in portuguese.

ˆ Back to top

PyCon 2010 Financial Assistance Grant for Women

December 3rd, 2009 by comment

I am happy as hell to announce that this grant exists. The deadline is Dec. 18th, and I strongly encourage you to apply.

http://us.pycon.org/2010/registration/financial-aid/

This conference gets a bit bigger each year, but the organizers make a great effort to keep the small conference feel. It also has many level-100 tutorials, and is both socially and technically welcoming for py-newbies.

Open space sessions (everything from software development to Settlers) and poster sessions happen every night, tutorials run two days prior, and code sprints run for a few days after the conference. It promises to be a great learning and social experience you should not miss.

I am reserving a room and sharing it: http://us.pycon.org/2010/registration/room_sharing/
I’ll room with as many as possible, to cut costs for everyone. Bring a sleeping bag :)

See you there,

Gloria

ˆ Back to top

Google Web Toolkit, 2.0

November 29th, 2009 by comment

Our life basically lives on the web, the web is the platform! One of the advantages of creating your web application in GWT is it is pure html/javascript/css and the user doesn’t need to install a plugin to use your app! It is easily viewed on most smart phones as well. It compiles to each browser making it more efficient than using alot of if/else statments to build code for the particular browser you are using. It standardizes the method you use to make your app, no more studying the nuances and ripping your hair out over tiny browsers quirks. GWT 2.0 which is scheduled for release this fall has some great new features that I am finding to make GWT more flexible and easy to maintain.

Get GWT Trunk
The 2.0 features talked about here are in trunk and building it yourself is fairly straight forward.

  1. If you don’t already have it, get the latest version of eclipse – Galileo, with the Google plugin.

    http://code.google.com/eclipse/

  2. Checkout the source code
    Follow the instructions on the GWT homepage, its pretty good.
    Make sure you have ant installed. It takes awhile, i think maybe 20 mins or so on my macbook.

  3. Setup the API directory in the Preferences for GWT
    In eclipse, add the new version of GWT library.

    Go to Eclipse > Preferences.
    Find the Google Web Toolkit on the left. Click add, add the path to the compile files like so:
    ~/gwt/trunk/build/lib
    I named it “trunk”

  4. Create project
    Create a new Web Application Project, select “trunk” (or whatever you named it in the previous step) as the version of GWT to use.

The most interesting things in 2.0 is the UiBinder and UiHandler.

Using UiBinder
Usually for each element on the page you need to do something like this


CheckBox box = new CheckBox("this is the label for the checkbox");
box.setFormValue = "3";

Panel verticalPanel = new VerticalPanel();
panel.add(box);

If you have alot of elements on the page, that comes out to alot of java code. And you might start wondering if you are writing a Swing app or a web app?!?

in UiBinder, we can can put it in a XML file like:


<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'>
<g:VerticalPanel>
<g:CheckBox ui:field="rubyCheck" formValue="ruby">Ruby</g:CheckBox>
</g:VerticalPanel>
</ui:UiBinder>

Typically any attribute you can use in the java code like setName, setFormValue, setStyleName you can add right in the xml as attribute=”"

You can reference your objects from the xml like so:

public class LanguageList extends Composite {
interface MyUiBinder extends UiBinder<Widget, LanguageList> {}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
@UiField CheckBox rubyCheck;
public LanguageList() {
// bind XML file of same name to this class
initWidget(uiBinder.createAndBindUi(this));
// use rubyCheck as if you had defined it already with new
rubyCheck.setStyleName("rubyCheckStyle");
}
}

Note you have to bind the xml to the java code with:

interface MyUiBinder extends UiBinder<Widget, LanguageList> {}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);

This process is called deferred binding. This may be familar to java programmers already but My background is LAM(P|P|R) programming so I am still trying to fully understand it myself! GWT homepage explains it here: http://code.google.com/webtoolkit/doc/1.6/FAQ_Client.html#Deferred_Binding

Using UiHandler

Typically, event handlers are written as such:


// add button and handler to alert the values of checkboxes
button.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
String output = "";
for(CheckBox box : boxes) {
if (box.getValue()) {
output += box.getFormValue() + ", ";
}
}
Window.alert("You checked: "+ output);
}
});

Instead of having the click handler specified in the java method, you can attach it via an annotation:


@UiHandler("languageButton")
void doClick(ClickEvent event) {
String output = "";
for(CheckBox box : boxes) {
if (box.getValue()) {
output += box.getFormValue() + ", ";
}
}
Window.alert("You checked: "+ output);
}

Sweet, huh? I think it cleans up the code nicely and gets the job done!

Go compile the Trunk version of GWT and give it a try!

If you want to see the full source for a simple gwt app before and after UI Binder, I have a write up here with links to sources on github here.

Resources for learning gwt that I found helpful:

GWT Homepage
http://code.google.com/webtoolkit/

GWT Can Help You Create Amazing Web Apps
http://www.youtube.com/watch?v=T0X9BcBd-I0

GWT Best Practices
http://code.google.com/events/io/2009/sessions/GoogleWebToolkitBestPractices.html

OnGWT – various blog posts about GWT
http://www.ongwt.com/

ˆ Back to top

Craftsmanship without the Man

November 28th, 2009 by comment

Recently on the Devchix mailing list, aimee brought up the software craftsmanship movement and asked whether other women felt awkward about being labeled “craftsmen.”

Some of our members were fine with it, while others said they felt alienated by the term. Beth explained that it was because of its usage in the movement—“master craftsman” is held up as an ideal that everyone should aspire to, but its male bias makes it difficult for some women to relate to it.

We discussed alternatives like craftsperson, crafter, and artisan. After a bit of brainstorming, Tess came up with “codesmith.” Many of us were excited about this term—it has a fun and geeky vibe that captures the enthusiasm we have about our work, while having the same emphasis on creation present in “craftsman.”  While it’s certainly based on words like blacksmith, I like to think of it as more similar to wordsmith—a person who is skilled at using language to make something great.

As the sort of programmers who get into debates over small differences in syntax and rack our brains to come up with the most appropriate name for some variable, we know language is important. It’s a shortcut for identifying something, but over time it can create expectations and beliefs. Making changes to language can be difficult, but in the case of being inclusive to women in a women-starved field, I think it’s worth it.

ˆ Back to top

Pair programming Issues

November 11th, 2009 by comment

“Pair programming is a software development practice in which two programmers work together at one work station” http://en.wikipedia.org/wiki/Pair_programming.

pairing

I’ve worked with pair programming at just 1 company for 9 months, the results were both good and bad.

During the time when you are pairing you share your computer with another person. You also share your virtual life details, such as:

  • organization: how you organize your documents, projects, music, etc.
  • choice: which applications you use and how you use it, like: themes, hotkeys and configurations.
  • skills: typing velocity, how much you know about the application that you’re developing.

Off course, when these pairs get along with each other sharing information becomes productive.

The one billion dollar question is: “What happens when the pair does not get along?

not_pair

If both people aren’t open to learning with from the experience, the day by day can become difficult.

Pair programming doesn’t work when one party feels the result could be better if the work was done alone. In this case, pair programming is an intrusive and negative experience.

Some people doesn’t understand this situation. To make it easier to understand I usually like to compare pair programming to driving a car and having someone beside you.

First case: Going by a known path.

Imagine you’re going to a party, you’re driving your car and you know the way to go there. Beside you is someone, a friend or just an acquaintance.

If you have some doubt how to get the place or make some mistake this person can help you, suggest a better way or street.

When you arrive in the party you’ve learned something or at least both of you have had a great time together.

Second case: Learning new path.

Now, imagine you’re going to another party. Beside you is another friend or acquaintance.

During the way you ask for some help. That person helps you as best as possible.

When you arrive in the party you’ve learned a good path and both had a great experience.

Third case: The beginning of the end.

Now, imagine you’re going to a party, doesn’t matter if you know how to get there. Beside you have someone again.

You are driving but now this person prefers to do the driving. If you make some mistake that person says “It would be better if I was driving.” or “If I was driving it wouldn’t have happened.”. What would you do?

Probably both of you arrive at the party in a bad mood and will try to avoid sharing the same the car again.

Maybe if you were in the car a debate would start. But, during pair programming you’re in a company and some words wouldn’t and shouldn’t be said.

Think about it, before sharing your computer with someone.
It’s better to both if you enjoy it.

pairing

PS: Thank you Desi for reviewing this post. I’m a english learner and Desi have been helping me.
PS1: To read in portuguese click here.


ˆ Back to top

Satchmo: Python Storefront out-of-the-box

September 29th, 2009 by comment

Satchmo is turning out to be an interesting project. The first true Python contender to challenge the plethora of PHP CMS tools used for the de facto net store front, it fares quite well in the face of this challenge. .

Satchmo is based on the Django framework. More accurately, it is loosely coupled to Django through several external Django plugins. For example, registration functionality is extended through the django_registration external interface, installed as a separate egg in the Python distribution directory. Satchmo makes calls to this extension, leaving Django code untouched.

Compare this to Drupal registration changes, where source code is wedged into the existing framework, applying deep back end database schema changes, as well as code changes throughout the framework. The changes are irreversible, and if they fail, you’re SOL. Look under the hood of Drupal, and you see a tangle of database calls, auth and group checking calls, intertwined around back end logic. It’s not pretty, which is why it’s so hard to maintain and upgrade over time.

The Satchmo/Django coupling is not perfect. If you mismatch incompatible versions of Django plugins to Satchmo, or other applications, cryptic messages can appear from either side, pointing back to code compiled elsewhere and placed in your Python distro. This makes it difficult to trace back, even if you vaguely know where the failure point is.

But this is the worst problem Satchmo has presented to me so far. I can certainly live with that, compared to digging through many chunks of Drupal framework source code and database schema backups to figure out why a recent patch broke authentication, how group permissions were changed, etc.

Satchmo takes full advantage of all of the juicy Django goodness that makes web framework development fun again: built-in internationalization and localization all the way down to currency handling and language choices in templates, built-in registration, email verification and customer account management, built-in form data validation, seamless form-to-database data entry.

This is a revolutionary, much needed improvement in the Open Source store front choices. Now all we need is an Open Source back end inventory system, and a very functional Open Source phone bank system based on Asterisk, with Python wrappers, and life would be wonderful.

Gloria

ˆ Back to top

PyCon 2010 talk proposal deadline: Oct 1st

September 25th, 2009 by comment

Want to give a tutorial or talk about what you’re doing in Python? Submit your proposal!

Want to get more familiar with Python? Want to participate in shaping this community, and helping to drive the effort behind new libraries and modules? Want to do something fun and new in the Open Spaces and code sprints? Be sure to be there in 2010. I think it’s going to be a unique, interesting and most spectacular year for PyCon, and I’d really like many women on this list to be a part of this great event.

I know, it’s late for my time zone, and you must be thinking that I’m juiced up on Club Mate right now. Maybe I am, but I was excited about this well before the Mate. I am a bit more involved this year, reviewing talks, discussing some possibilities for new types of Open Space events and code sprints, poking my head into various discussions, etc. It’s getting exciting, but it will be even better if more women show up this year, I guarantee this (HINT HINT).

If you want to come, but can’t afford it, don’t let this stop you! Contact me and I’ll put you in touch with organizers who may be able to help you get to PyCon this year.

Yes, I’m flying. How? No, not Mate. You know how:
http://xkcd.com/353/

Gloria

ˆ Back to top

Job posting!

September 18th, 2009 by comment

A large, successful bakery in NYC wants to grow their online presence in the social app space, blogosphere, and related web sites. They need a person (who does not have to be a NYC resident, but will visit occasionally) who knows how to:

(1) Find related web sites and drop relevant strategic links on those sites without “spamming”.
(2) Create an online social app/blog presence for this company, announcing new products, philanthropic events, etc. for this company.
(3) Follow accounts at Facebook, MySpace, product blogs, etc. Help set up the look and feel of these sites (working alongside a writer, a designer, and a software developer).
(4) Help us build this presence in creative ways: event photo slideshows, podcasting interviews of the owners, the technical aspects of the company, etc.

Please submit a resume and some examples of your work online. Also give me an example of how you would promote such a situation. Creativity is definitely encouraged:

I am handling the system admin and software design/development. Over the next few months, I’ll be taking it in new directions, by bringing in a free Python apprenticeship training group, and using this site as training ground for people new to Python. This will bring it some social exposure from the tecchie direction. How and where would you discuss this unique approach of growing a business while providing a public service?

Please send email to gloriajw_66, at the address yahoo dot com

Thank you, and good luck!
Gloria

PS: Working alongside me means this job _always_ has the opportunity to morph in a more technical direction, if you so choose. This straddles many disciplines, and can turn out to be quite fun if you wish to expand your current knowledge.

ˆ Back to top

cheap research papers