Palagpat Coding

Fun with JavaScript, HTML5 game design, and the occasional outbreak of seriousness

Queer New World: Lesbians Who Tech 2016

Tuesday, March 1, 2016

Conference badge for LWTSummit 2016

In my last post, I began to tell the story of this new journey I've embarked upon, navigating my career anew as a transgender woman in the tech industry. Today I begin the next chapter of that story, an ongoing series I've dubbed "Queer New World." To say that the past five months have been transformative would be an exercise in understatement. I've learned (and come to understand) many things I never expected, and though there are certainly growing pains, the experience has thus far been one I wouldn’t change for anything.

Case in point: this past weekend, I had the opportunity to attend the 2nd annual Lesbians Who Tech Summit in San Francisco.

In the past few years, I've made quite a few dear friends on the Internet (hello, friends!), and I'm grateful for each and every one of them. But due to my work and family schedules, it's a challenge to get out into the local tech community and meet people face to face. So even though I work with a fantastic team and love coming to work every day, Heighten is still a relatively small startup, and there's only one other LGBT person in the office (that I know of, anyway). She's a good friend and was a tremendous help and support in my early stages of transition and coming out (a story I plan to tell here at some point), but beyond the two of us and my friends online, I didn't know any other LGBT people in my industry.

You start to feel a little like the last unicorn in the world when you don't ever see anyone else like you. So Thursday night, sitting in the historic Castro Theater with 1500 other queer women and allies, my world suddenly got a whole. lot. bigger.

Where to Begin?

I had a lot of amazing experiences as part of this conference, but I want to focus on three in particular, which I think are emblematic of the experience as a whole.

Learning Lost History

I'm a software engineer. I've been working professionally for 17 years, and thought I knew a lot about the history of my industry. But until Friday morning, I didn't know who Edie Windsor was, or why she was important. Chalk part of that up to my ignorance about a lot of LGBT history (hey, I'm still learning). I didn't know she was among the first senior systems programmers at IBM in the 60s. I didn't know her team was working on IBM's operating systems before the company "gave it all to Gates" (her words, not mine). And I didn't know she was a lesbian, that she & her wife were a cornerstone of New York City's LGBT community, or that she was the principal plaintiff in the lawsuit that overturned the Defense of Marriage Act.

What a privilege to be in that room with her, and to hear her tell her story! In our modern era, when software development is so often seen as a career for straight white men, we forget that it didn't start out that way. The real history is much more diverse, much more compelling, and even after two college degrees and scores of CS classes, I didn't know any of it!

We can do better.

Making Connections

So like I said ealier, I've made quite a few trans friends online, and several of them are in tech. But meeting some of those friends in the physical world for the first time was somehow a completely different experience. There's something very... I don't know... tangible? About meeting face to face. Electronic friendships are great, and can be deep and meaningful, but somehow, meeting those same people offline, every time it happens, somehow deepens my emotional connection to them.

Several years ago, when I was first coming to terms with the fact that my being trans wasn't something that I could wish or pray away (God knows I tried), I had just this sort of experience. I was in Utah for a conference (UtahJS; long-time readers may recall that I got to speak on game design), and while I was there, I got the chance to meet a fellow trans woman that I'd gotten to know pretty well online (we followed and commented on one another's blogs). She met me in the food court at the Provo Town Center mall, we played chess, talked about life, and she looked me in the eyes and assured me that everything was going to be all right. That I was going to be all right. That being transgender didn't make me a monster, or a sinner, or unlovable, and that it was absolutely possible for me to embrace my truth, and thrive. We've since fallen out of touch (she's gone stealth, and I don't ever see her online anymore), and I don't think I ever got to tell her just how much that hour meant to me (even though she absolutely destroyed me at chess).

Anyway, back to last week. I was able to meet up with a couple of trans friends from a Slack server I frequent for LGBT people in tech, and we grabbed lunch together and talked. Compared notes a bit, got to know each other a bit. Nothing as profound as that chess game happened, but I do feel a more personal connection to those two now when I see them online. They're somehow a little more real to me than they were before.

And they made me feel like a part of a community.

Hearing People's Stories

There were so many meaningful moments I could touch on, from the stories told from the various venue stages:

  • Keynotes from amazing women at Apple, Pierson Labs, and Genentech talking about their efforts to build a better world through communication, education, and medical innovation
  • February Keeney's talk on how her transition from male to female has proven to be an "A/B test in gender", and how she's working with Github to change the industry
  • The Trans Tech meetup with CEO Angelica Ross, who showed a clip of the (really lovely) show Her Story (in which she co-starred), and discussed the questions it raises about the sometimes-thorny intersection between the transgender and lesbian communities
  • The high-energy delivery of Tania Katan, telling the extremely entertaining story of how she came up with the "it was never a dress" campaign

... to all the stories, large and small, told by every single person I met. Because ultimately, whatever else we may be, we human beings are storytellers. And all of these stories we tell create the world in which we live.

I'm so privileged to be a part of such a singular community. I'm glad to play some small part in the brighter future to come.

And I can't wait to see what's next.

JSConf.us 2011

Monday, May 2, 2011

Oregon or Bust!

This May my company gave me the opportunity to fly to Portland for a few days to be a part of the annual JSConf, JavaScript developers conference. I was grateful for the chance to get out of the office for a few days and take a step back to look at my day to day responsibilities from a slightly better vantage point. Plus, I got to hear from some pretty awesome speakers about the latest and greatest stuff happening in the Web-centric world, which never fails to inspire me to come back and write better code myself.

I took notes on a lot of the talks I attended, although sadly not all of them. I'll share some of those here, in more-or-less unfiltered form; I'll likely have more to say about specific aspects of the trip at a later date.

Day 1 (May 2nd)

Allen Pike: Making a JS meetup blow minds

Alan reviewed his efforts to bootstrap a JavaScript community in Vancouver. By organizing and shepherding VanJS (the Vancouver JavaScript developers meetup), he learned about the priciples that go into a successful local event:

  • should last around 45 minutes
  • should be 2 speakers (not everyone will connect with a single speaker, but the odds go up quite a bit with two, while not stretching things out too much)
  • should happen on a Monday through Thursday, not a weekend (makes people less likely to have other plans).
  • Speakers? Start with yourself, ask your friends to help (Don't go after the "big names" right away).
  • Make sure there's "beer" afterward (i.e. a pub of some kind within walking distance) — “this is what turns a group of people talking about code into a community” (it certainly seems to be a key part of the JSConf formula)

I definitely left this session inspired to try something like this in my own community. Stay tuned on that one.

Paolo Fragomeni: Rethinking Templating

  • Django-style templating, while currently acceptable, is “really not ok” (as it pollutes the HTML markup)
  • Introduced his own project, weld
  • Avoid "too much templating"
  • Instead, leverage your APIs and deliver data via AJAX/JSON

I can see where Paolo is coming from, but completely removing templating logic struck me as a bit extreme. Maybe my opinion will change over time, but right now I fail to see the benefit.

Day 2 (May 3rd)

Ray Morgan: App vs Web

Ray detailed lessons he'd learned at Zappos.com while working on their mobile offerings.

  • iPad app (and full API) developed in 8 weeks, after 3 weeks of experience
  • when developing an API, build an app to go along with it
  • “native apps aren't that hard to write”
  • live-coded a simple Objective-C app
  • crazy-weird syntax, but altogether not that hard (lots of good documentation)
  • instead of targeting Android, they targeted Mobile Web:
    • “Should mobile web really be trying to emulate native apps?”
    • it takes a lot of code to do things (even simple things) with mobile web
  • why not just semantic HTML?
  • progressive enhancement
  • you don't have to support everything, just your users
  • focus on usability
  • simplicity (“links should be links”)
  • flickr mobile website “captures what the web is about” (but back button behavior is still a little frustrating
  • Facebook provides all the core functionality in a mobile-friendly way

Adam Baldwin: Writing an (in)secure webapp in 3 easy steps

  • “I haven't secured it yet” — the problem is that “yet” never comes
  • devs should take a little more responsibility for security
  • #! navigation (e.g. "/#http://evilpacket.net/login") will work if it sets CORS headers right
  • don't roll your own encoders — there are others who've done it already
  • Content Security Policy (new feature in Firefox 4)
  • implementing browser-specific security policies may not completely cover you, but it puts you ahead of the guy who doesn't do anything
  • cross-site request forgery
  • clickjacking (x-frame-options allows you to specify which sites are allowed to frame you (if any)
  • cookies (HTTPOnly / secure)

Dan Webb: Pimp your JS library

  • “All programmers are API designers”
  • a beautiful API is what made jQuery so successful
  • 3 things:
    1. predictability
      • developers don't want complicated solutions when they go looking for a library
      • think about your audience
      • useCamelCase, yesReally
      • be careful with polyfills (your library probably isn't the right place to fix array.forEach)
      • borrow conventions from other popular JS libs (e.g. Raphael aping jQuery's attr())
    2. simplicity
      • Steve Krug's Don't Make Me Think
      • “Don't make me RTFM again...” (hint: your API is too big)
      • decide on sensible defaults, and what can be optional - called out the DOM .initMouseEvent() and .addEventListener() methods for overly-complex APIs - use options hashes (e.g. Dojo's style) for optional arguments
      • function calls should read well (compared DOM node replace functions in raw DOM vs Dojo vs jQuery)
    3. flexibility
      • how?
      • don't be like the 60-tool swiss army knife: you can't please everyone!
      • instead of infinitely growing your options hash, think about how to add hackability
      • have public, internal, and protected API levels (e.g. _internal vs public)
      • solve your own problems with your library

Matthew Eernisse: Heaven and Hell: JavaScript Everywhere

  • An AIR app doesn't equal “bad app” anymore than “native app” means “better”
  • problems with the AIR JS environment:
    • older Webkit
    • limited/nonstandard JS (no eval, sandboxBridge instead of postMessage, etc)
    • debugging is painful (no firebug/console)
  • limit use of privates: “sometimes you need to monkeypatch, so you can just ship”
  • test!
  • system tools: look at Jake
  • Node isn't the first SSJS... it's been around in various forms since the late 90s
  • if you aren't testing in the real environment, you aren't really testing

Rebecca Murphey: Modern Javascript

I missed this the first time around, but the Twitter feedback and positive buzz afterward were enormous, so it was one of the very first talks I watched when they started showing up on the JSConf channel on blip.tv. There's a great writeup of the talk here, Rebecca blogged about it later herself, and it's really, really worth your time to watch the video.

Dethe Elza: Introducing Waterbear

  • Alan Kay, who worked on the Alta, which in turn inspired the Mac, said: “The revolution hasn't happened yet”
  • promote a revolution in JS teaching (echoes of Rebecca Murphey's talk)
  • showed off Scratch, a visual code-builder
    • snap together building blocks
    • readable code
  • Waterbear is the same idea: drag and drop script blocks
  • Safari/Mobile Safari are the targets right now
  • children learn best by immersion, but the only thing we actually teach that way is language
  • making the world safe for “casual programmers” — those who only build little chunks when they need (e.g. a poll on a personal blog)

Thomas Fuchs: Zepto

  • what does a “real” computer have that a mobile device doesn't?
    • a fast & stable network connection
    • lots of storage
    • fast, multi-core CPUs
    • hardware-accelerated graphics
  • all the major JS libs were created before phones had web browsers of any significance
  • document.querySelectorAll returns a NodeList, not an array — otherwise it's pretty awesome
    • You can call [].slice.apply(nodelist) to get an array
  • native JSON is faster than library implementations
  • [1,2,3].forEach(alert)
  • why do we need a true mobile JavaScript framework? - more code causes longer download and init times - need something easy to extend - need a fallback for non-webkit browsers
  • Talked about Zepto
    • target size: 5k
    • jQuery-compatible API
    • uses webkit features whenever possible
    • easily replacable with full jQuery if needed
    • but it's 4.83kb vs 31.33k
  • “one more thing...”
  • classic frameworks have a lot of drawbacks on mobile:
    • they force you into an API
    • do all things and do them ok-ish
    • not modular (enough)
    • 25k+ minified/gzipped
    • many extensions are now available in latest DOM/JS
  • micro-frameworks, on the other hand:
    • do one thing, and do it really well
    • directly or loosely-coupled
    • no dependencies
    • small is beautiful (faster, easier to grok, fewer bugs, and you'll really grok JS)
  • Launched MicroJS.com: a simple list that tells you what's out there

Nikolai Onken: Mobile Deathmatch — (almost) all you need to know in 20 minutes

Nikolai talked about a way to do lightweight, inter-object communication, binding object state to the DOM. Three main points:

  1. Delegate
    • tiny library to approach event handling differently (it's basically just a mixin)
    • less overhead than dojo.connect
    • simple, clear implementation
    • more explicit than pub/sub
    • https://github.com/uxebu/delegate
    • showed an example using dojo.io.iframe and Delegate to check file upload progress (WOW)
  2. Data binding
    • based on delegate's event handling
    • no templating language
    • objects emit events on state change
    • data binding takes care of modifying DOM
  3. DOM events
    • binds native DOM events to object methods

Tobias Schneider: VNC with JavaScript

Tobias showed how you can create your own services on Node, built on libvnc. HOLY COW, his live-coding demo blew my mind! You should totally watch the video, it's pretty amazing what he's doing.

JavaScript: Say it like you mean it

The final talk was a fakeout by Peter Higgins, then Alex Russell and a co-worker from Google talked about the future of JavaScript, specifically introducing Traceur, their JS.Next->JS.Now compiler. Interesting stuff. I liked the gist of what Alex said:

language design is library design, library design is language design

Hi, I'm Buyog... I mean Ryan

I love that conferences provide the opportunity for "hallconf", i.e. the meetings between the scheduled meetings that are often our first "meatspace" interactions with people we'd previously known solely through their digital personas. That's pretty cool, because as awesome as the Internet is, there's something about physical interaction that just deepens relationships in important ways. I suspect it's buried deep in our shared subconscious as human beings.

Anyway, on this trip, I had the pleasure of meeting Carter Rabasa (IE Product Manager for Microsoft), Dustin Machi (Sitepen developer in Blacksburg Virginia, an area where we have some interest in relocating at some point), Rey Bango (Microsoft developer evangelist, jQuery committer, and Ajaxian), Daniel Lopez (front-end guy at Zappos.com), and Richard D. Worth (jQuery UI lead, Dev/Trainer at Boucoup, and founder of RewardJS). I even got to help Richard's RewardJS out a little with some code I hacked together for a leaderboard for that project, which became my first Github pull request! Pretty neat.

I hereby resolve...

Whenever I attend events like these, I always come away with a fresh view of code challenges I face back home in my role as my project's lead front-end guy. This trip was no exception: I see a lot of opportunities for improvement in the code I'm producing from day to day, and hope to pass along something of value to the rest of my team.