Categories
Diversity Technology

We are out there

Recovered from the Wayback Machine.

Clay Shirky left a gracious comment attached to the Dripping with Irony post. I’m glad because this helped the thread reach a positive note, rather than continue into a downward spiral based on the old “she said/he said” pattern (of which I, unfortunately, contributed my share).

When I replied to Clay, I repeated something I told Tim O’Reilly in response to a statement that Tim made in his comment:

Not to mention the dripping irony that, with three women out of twenty-odd participants, this group was more sexually diverse than the typical computer geek gathering…

I told Tim and Clay: We are out there.

The diversification they want, we all want, we all need is out there. There are women, and Blacks, and Latinos, and accessibility challenged folks and other non-represented people out there. But we can’t continue following the same old patterns of connectivity and communication and expect to see something other than the same old faces, time and again.

If we are discussing social software, then we have to first understand the society we’re trying to enable with this software. And to do this, we have to understand the limitations and challenges each of us, as individuals and as a members of one or more “categories”, is facing.

Clay mentioned that he did try to ensure more even representation of gender at the meeting, and I’m sure he did. As he commented, some of the women invited were academics and most likely couldn’t attend because of school commitments. And two women cancelled at the last minute.

However, rather than not have this representation, couldn’t Clay have used technology to enable these women’s participation without their physical attendance? Most people now have access to conference call capability, and most have access to video cameras for their computers. In fact, the software application Groove enables this type of participation, and the creator of Groove, Ray Ozzie, was there — could this not have been used? What a wonderful opportunity this would have been.

With this type of already available technology, these women could have participated and every one would have been richer.

And let’s take a moment to consider the reasons why the women couldn’t participate. Was it just school commitments? Or was it other constraints, such as family responsibilities or finances?

Speaking only of the United States, over 31% of families are now single parent, and only 5% of these families are headed up by men. When you’re a single-parent, especially if you don’t have extended family around you, it becomes virtually impossible at times to physically attend conferences. Or to even attend meetings of user groups at night.

Additionally, money could be more of an issue to both women and minorities. Statistically, women do make less than men, and are not as prevalent in the positions of technology leadership. I believe the same could also be said of many minorities. Both of these circumstances can make it more difficult for a person to buy a ticket to come to a meeting or conference; or to pay for the priviledge of attending the conference. Or even be in a position whereby the company pays the costs.

If we’re discussing social software, isn’t the first place the discussion should start is the constraints preventing potential audience members from becoming full participants? By doing so, we might begin to understand that what we don’t necessarily need is ways of getting the under-represented to meetings and conferences and training; but ways of getting meetings and conferences and training to the under-represented. This outreach, to me, is what social software is all about. It isn’t about sharing music files in such a way that one isn’t busted by Hollywood.

I don’t want to keep picking on Clay and his social software gathering, because I happen to know that he is a decent person who is trying very hard to open closed doors, and give voice to those who are quiet.

However, I will continue speaking out when I see these opportunities.

Categories
Technology

Save Dr. Dotty from the Quicksand

Copy from the Wayback Machine Archive.

Dr. Dotty is exploring in the jungle and accidently walks into quicksand. The object of the game is, of course, to save Dr. Dotty.

The Save Dr. Dotty from the Quicksand games are a variation of the old paper game “Hangmans’s Bluff”. The object of the game is to fill in all the missing letters from one or more words within a phrase and save Dr. Dotty from DOOM.

Playing the Game

-The playing board for each of the Quicksand games is 800 x 600 pixels.
-Each game has an opening animation, and an ending animation if you correctly find all the missing letters.
-Pressing the “ENTER” key after the opening animation stops will start the game.
-Type a letter into your keyboard and every place that the letter exists gets filled in.
-If you type in an incorrect letter, poor Dr. Dotty sinks a little further into the quicksand.
-Close the playing window at any time by clicking the space bar.

The Dr. Dotty games work with Navigator 4.x, Netscape 6.x, IE 4.x, IE 5.x, and IE 6.x, and Mozilla.

 

  • Game 1 If you know about hurricanes, you know the answer to the question in this game. However, you can find the answer in the How the Game Works section, below.
  • Game 2 If you know about minerals and mineral identifications, you know the answer to this game. However, you can find the answer in the How the Game Works section, below.

 

How the Game Works

The Dr. Dotty games use DHTML for all interactive effects. This includes the use of CSS to position elements as well as alter their presentation; and JavaScript to perform all actions, interactive or otherwise.

The elements of the game page are positioned using CSS2 absolute positioning. Doing this I can control the layout of the page at any time. Using absolute positioning also exposes all of the elements to script access once the page is loaded for a browser such as Navigator 4.x. All elements are exposed as part of a Document Object Model (DOM), and hence exposed to interactive scripting access for the IE 4.x and IE 5.x, Mozilla, and the upcoming Navigator 5.x browsers, but to ensure cross-browser and cross- version compatibility, I code to Navigator 4.x, which requires that the elements be positioned absolutely:

   <DIV id="dotty1" style="position:absolute; left: 20px; top: 20px">
   ...
   </DIV>

To ensure that the games work with both IE, Mozilla, and Netscape I used the Burning Bird X-Objects to hide most DHTML implementation techniques. Because of this, when I want to move an object to an absolute position of 100 pixels from the left, I can use the method exposed on the cross-browser objects:

   theobjs["dotty1"].objSetLeft(100);

I’ve also created a set of higher-level animation objects that use the cross-browser scripting objects and JavaScript timers to manage all animation effects. These Animation objects, are basically arrays of animations, with each step in the animation synchronized with matching steps in the other associated animations.

So, to show an element that both moves and clips, I create a new animation sequence (co-ordinated animations that are all performed sequentially in the order they are added to the sequence), and then attach one animation object to the sequence. The animation object is defined with a set number of animation steps, each played out after a specified number of microseconds. After the animation object is created, I then crate new Animator objects, one for the clipping animation and one for the move animation:

   var seq = new animatorSequence();
	
   anim = seq.newAnimator(10,100);
   anim.addAnimator(theobjs["dotty4"],"M",180,160);
   anim.addAnimator(theobjs["dotty4"],"C",0,0,330,200);

When the animation sequence is played, each successive steps of the animations contained in the sequence is synchronized and played:

    seq.play();

So, when Dr. Dotty moves across the screen in the opening sequence, one Animation Sequence is created for the entire opening animation; several Animations are created to handle such things as moving Dr. Dotty, showing the different word bubbles and words that he says, and even changing Dr. Dotty’s expression. Different types of Animators objects are created for each animation effect, and the Animators are added to Animation objects to provide for the synchronization for multiple-animator effects.

Want to see the code creating the animation sequence, animations, and animators for the opening animation? Well, it’s a bit long, but here you go:

function setup_start(){
   seq = new animatorSequence();

   // add animation objects to sequence
   // this animation plays for 200 microsecond, with each
   // step in the animation sequence timed at 20 microseconds --
   // 10 animation steps in all
   var anim = seq.newAnimator(20,200);

   // add animators
   anim.addAnimator(theobjs["dotty1"],"M",180,160);
   anim.addAnimator(theobjs["bubble1"],"M",180,400);
   anim.addAnimator(theobjs["bubble1"],"Z",4);
   anim.addAnimator(theobjs["words1"],"M",230,460);
   anim.addAnimator(theobjs["words1"],"Z",5);

   // second animation, this time one step at 100 microseconds 
   anim = seq.newAnimator(1, 100);
   anim.addAnimator(theobjs["words1"],"H");

   // third animation, 1 step, 1500 ms
   anim = seq.newAnimator(1, 1500);
   anim.addAnimator(theobjs["dotty2"],"S");
   anim.addAnimator(theobjs["words2"],"S");
   anim.addAnimator(theobjs["words2"],"Z",5);

   // fourth animation, 1 step 200 ms
   anim = seq.newAnimator(1, 300);
   anim.addAnimator(theobjs["dotty3"],"S");
   anim.addAnimator(theobjs["dotty2"],"H");
   anim.addAnimator(theobjs["words2"],"H");
   anim.addAnimator(theobjs["words3"],"S");

   // fifth animation, 1 step 2000 ms
   anim = seq.newAnimator(1, 2000);
   anim.addAnimator(theobjs["dotty1"],"H");
   anim.addAnimator(theobjs["words3"],"S");
   anim.addAnimator(theobjs["words3"],"Z",5);

   // sixth animation, 1 step, 100 ms
   anim = seq.newAnimator(1, 100);
   anim.addAnimator(theobjs["words3"],"H");
   anim.addAnimator(theobjs["dotty3"],"H");
   anim.addAnimator(theobjs["dotty4"],"S");
   anim.addAnimator(theobjs["words4"],"Z",5);

   // seventh animation, 1 step, 1000 ms
   anim = seq.newAnimator(1, 1000);
   anim.addAnimator(theobjs["words4"],"S");

   // eighth animation, 1 step, 1000 ms
   anim = seq.newAnimator(1, 1000);
   anim.addAnimator(theobjs["words4"],"H");
   anim.addAnimator(theobjs["words4"],"Z",5);

   // ninth animation, 1 step, 3000 ms
   anim = seq.newAnimator(1, 3000);
   anim.addAnimator(theobjs["words4"],"H");
   anim.addAnimator(theobjs["words5"],"S");
   anim.addAnimator(theobjs["words5"],"Z",5);

   // tenth animation, 1 step, 1000 ms
   anim = seq.newAnimator(1, 1000);
   anim.addAnimator(theobjs["words5"],"H");

   // eleventh animation, 1 step, 3000 ms
   anim = seq.newAnimator(1, 3000);
   anim.addAnimator(theobjs["bubble1"],"H");
   anim.addAnimator(theobjs["dotty5"],"S");
   anim.addAnimator(theobjs["bubble2"],"S");
   anim.addAnimator(theobjs["bubble2"],"Z",4);
   anim.addAnimator(theobjs["words6"],"S");
   anim.addAnimator(theobjs["words6"],"Z",5);

   // twelth animation, 1 step, 1000 ms
   anim = seq.newAnimator(1, 1000);
   anim.addAnimator(theobjs["words6"],"H");

   // thirteenth animation, 10 steps, 100ms (10 ms each) 
   anim = seq.newAnimator(10, 100);
   anim.addAnimator(theobjs["words7"],"S");
   anim.addAnimator(theobjs["title"], "M",200,500);

    // fourteenth animation, 10 steps, 100 ms
    anim = seq.newAnimator(10, 100);
    anim.addAnimator(theobjs["dotty5"],"H");
    anim.addAnimator(theobjs["words7"],"H");
    anim.addAnimator(theobjs["words8"],"S");
    anim.addAnimator(theobjs["words8"],"Z",5);
    anim.addAnimator(theobjs["title"], "M",300,500);
	

     // play all 14 animations, in order 
     // as they are defined in sequence array
     seq.play();
}

At the very end of the function that creates the opening animation sequence, the sequence is played.

One last aspect of the Dr. Dotty games is the interactive portion. This is handled by capturing the keypress event for the Web page, and passing the event to a function:

// handle keyboard events
if (navigator.appName != "Microsoft Internet Explorer") 
   document.captureEvents(Event.KEYDOWN);

document.onkeydown=keypress;

In the function, the keycode for the keypress event is accessed and compared to the letters for the answer: if a match is found, the letter is “filled in” in the answer (using DHTML to replace the existing underscore character with the letter); if a match is not found, Dr. Dotty is lowered into the quicksand further (using clipping to lower the good doctor, and DHTML “hide and show” to change Dr. Dotty’s message and expression).

Download the game source code from the link to the right and make your own version of the game. Have fun!

 

Categories
Technology

All you need is PHP

Recovered from the Wayback Machine.

Sam Ruby says life changed for him, for the better, when he discovered PHP:

Later this month I turn 41. For me, the last three felt like ten. In a good way.

What changed it all for me? PHP

I’m writing the first release of Post Content in PHP, so I’m hoping that the magic works for me, too. However, I’m also using Perl — will this block the good stuff?

Categories
Diversity Technology

Women in computing

Recovered from the Wayback Machine.

In the comments attached to the Girlism post, an Assistant Professor of Computer Technology, Dr. Elizabeth Lane Lawley mentioned effort at Carnegie-Mellon to understand why there is such a large discrepancy based on gender in the computer sciences. I found a web site devote to this project and have been spending some time reading publications associated with the work.

The publications have been a revelation, not because I don’t know first hand what they’re discussing, but because I’m reading someone articulating my experiences. For the first time, I don’t feel alone in many of my own observations about the field, and my own position within it.

For instance, one publication, Undergraduate Women in Computer Science: Experience, Motivation, and Culture mentioned that women had significantly less experience with computers prior to attending college then men. However, what was surprising was that this lack of prior experience didn’t impact on their ability to do the work in the classes:

“Despite this difference in how students evaluate themselves, there is a gap between women’s perceived ability and their actual performance. Despite their modest estimates of their own standing in the class, three out of the seven first-year students made the Dean’s List (which turned out to be about the top third of the class) in the first semester, and six of the seven women made a B or A average for the first year.”

I was a law student when I started college. The philosophy teacher that taught my logic class strongly recommended I try a computing class so, for grins and giggles, I signed up for a VMS Basic programming class. My only experience with computers prior was through issues of Popular Science (borrowed from a neighbor), filling in the computer worksheets for an insurance company when I was an underwriter, and handling the strange data entry machine at the real estate company I worked at as a secretary.

However, after the first week in the class, I switched over to computer science and never looked back. Matching the results of the women in the study, I ended up a Dean’s Scholar, ranking 3rd in a graduating class of 27 students. And this was with me being a double major, studying Psychology at the same time.

According to the paper, female students were made aware of their experiential differences from the male students, and this undermined their confidence, generating feelings of self-doubt, isolation, and inadequacy. This, in spite of women performing as well or better than the men.

Now there are some major differences between when I went to college and the experiences of the women in the reports. Perhaps because the field of computer science (as separate from engineering) was relatively new, and personal computers were quite rare, many of the men in the class had as little prior experience as the women. In addition, the professors came from a diverse background: math, philosopy, and english literature in addition to engineering. This mix helped diffuse the typical arrogance associated with engineering, which I think made the environment much less competitive than current computer science environments.

Whatever the reason, I know the environment at my school was supportive and free of gender bias or differentiation. I only know now how lucky I was then. Still, my luck was to run out once I hit the ‘real world’.

Women students were faced with male students saying, “you’re a computer science student, you should know this” quite frequently, enhancing feelings of inadequacy and isolation. The reports mention how women’s isolation in the field continues into the workplace, it not being uncommon to have a man say something along the lines of “You have a degree in computer science. You should know this.”

I have had this happen to me not once, but several times, and each time my own self confidence erodes, and I become increasingly defensive. Yet, I’ve never once not been able to keep up with, or exceed, the production of the men I work with.

This does beg the question: why do men say something such as “you should know this”? This is really nothing more than a non-productive putdown. Perhaps women should be taught to say in response, “Because I learned other things you don’t know, dickhead.”

The report and others also highlighted a significant difference between women and men in how each views computing in their lives. To sum it up: Women program for purpose, men program just to program. There is a great deal of conjecture that believes this goes all the way back to our earliest years and our use of tools, or not.

For myself, when I was a girl scout years ago, we were taught how to cook and how to sew; boys were taught wood working and mechanics. This continued into school, with girls getting Home Ec and boys getting Woodshop. Girls worked with pots and pans to make a meal, or a sewing machine to make a dress. Boys worked with a variety of tools and gadgets, making a variety of different things, some practical, some not.

Now, I am assuming that times they have changed. Still, according to the reports at the C-M site, boys are more likely to spend time tweaking around on the computer then girls, while girls are more likely to spend time making something on the computer. Boys want to figure out why something works as it does, girls just want to make it work.

Is this difference a product of our genes? Is there a ‘tweak’ gene that boys have and girls don’t? Or is the fact that little girls are raised to be producers, and boys are raised to be innovators?

So many good questions raised. I can’t tell you how much I recommend that you all read these reports, regardless of your field. And my deepest and most sincere gratitude to Liz for pointing these out.

Categories
XHTML/HTML

RSS push back

I guess I won’t be finding any interest in my SORSS syndication format because the weblogging kingdom is now circling about XHTML as a syndication format. In other words, publish your page as XHTML and let aggregators scrape it.

It looks as if Anil Dash started the discussion with a well written suggestion:

My new syndication format is called XHTML. I propose that existing syndication and aggregation clients should be able to read an HTML file, detect if it has the appropriate XHTML doctype, and then render the contents of each XHTML node in the appropriate place in the client’s display. All that would be needed is standardization of names and classes for page elements like DIVs and headers. A post/entry title would always be an H3, with a class set to “title”, for example. Permanent links would always be P tags with their classes set to “permalink”. Simple.

What was particularly nice about Anil’s posting is that it generated a lot of good discussion and commenting, and no animosity. Pay particular attention to Timothy Appnel’s comments, which I think were quite good. (Thanks to Chris for heads up on excellent discussion.)

The “RSS Rebellion” has now spread elsewhere:

Mark wrote a Python program to scrape HTML and generate an RSS stream. You know, that boy do like Python, doesn’t he? Wait a sec — he just turned 30. Excuse me, I should have said that man do like Python.

 

Mark based his efforts on the discussion at tantek/log.

 

Aaron Swartz likes the idea and provides an XSLT implementation (and links to other discussions).

Personally, though I have just finished a template re-design for most of my pages that validates as strict XHTML 1.0 (not implemented yet, so don’t test this page), I have no interest in someone grabbing whatever they want for syndication from my web page, including the entire posting. I’d rather they take the excerpt I give them, which I can control by having a seperate syndication feed. Besides, I’m going to implement SORSS for my site. You know, that Dark and Beautiful Queen thing.

So why am I interested in and promoting this debate? I’m all for bubbling the Daypop joy juice, watching to see what floats to the top.