Heather's Paragraphs

Category: Uncategorized

My First Impression of a Startup Incubator

A year or so ago, I got to tag along to a Y Combinator event [1]. Just weeks before, I’d gotten a full introduction to incubators and how startups work by talking to a friend that was going through the process. I was excited to attend the event, and the whole concept of Y Combinator sounded quite cool.

The event consisted of the majority of one “class” of the incubator from a previous year, plus a couple tag-alongs like me. Upon arrival, I found myself in the midst of an extremely demographically homogenous group. This is even compared to all the open source conferences I’ve attended. It was eerie, and quite a shock.

I got over this shock once the event got in swing and founders started speaking. But I was periodically reminded of the demographic as the speakers and hosts alike chummily refered to their peers as “the Y Com-bros” throughout.

As a startup-curious person, I started taking mental notes. To be honest, one of them was to not apply to this particular incubator if I wanted to start a business. Why? There wasn’t anyone like me there. Who knows the multitude of reasons leading up to them not being there, but they weren’t. Not only that, but everyone seemed to be satisfied with that.

Afterwards, I mentioned to my friend that the “Y Com-bro” shoutouts could be alienating to the one woman founder, and he balked. He said that she wouldn’t care, in a way that implied that she shouldn’t care. I could only guess that he got this attitude from the environment he’s in.

Life is short. I’ve learned from several years of surprisingly tough times as a minority in this industry that it’s not worth anything to surround myself with people that don’t understand or don’t care. Luckily, there’s competition and there are other incubators and other paths.

I’m a programmer, and not an entrepreneur. But I’ve had some ideas and a few strong urges to build them. Maybe someday one of them will top the urgency I feel with my full-time job. I’m confident that if I were to take an idea to a startup incubator in the future, it would be to one that was clearly concerned with getting a more diverse bunch of entrepreneurs and making them feel welcome.

Update: Since then, they have discussed and decided to drop the “bros” nickname. I think that’s a really good call.

[1] I don’t know what kind of event this was. I’m pretty positive I was allowed to be there and my friend was definitely under the impression that I was. I want to emphasize that I’m glad I got to go, and I got some good stuff out of it too.

New Bugzilla Todos Features

A few months ago I created Bugzilla Todos out of a need to see all the Bugzilla-related things I had to do in one place, and also quickly see what other people had to do (for example, when picking someone to review a patch).

It’s a basic UI that shows your review and flag requests, patches to check in, unfulfilled requests you made of other people, and assigned bugs. I just added a few features that I desperately wanted for it:

Live Updates: Bztodos now checks Bugzilla periodically for any new requests, and shows notifications of these new requests:

Favicon counter

Screen Shot 2013-05-02 at 9.18.01 AM

It shows the count of the new requests in the favicon (thanks to the tinycon library), and highlights new items in the list. It checks every 15 mintues. I hope that’s okay with Mozilla’s Bugzilla.

Remember Last Tab: When you visit the page again, the last tab you had selected will be open by default.

Keyboard shortcuts: Visit the ‘Review’ tab by simply typing ‘r’ when the page is focused. The shortcuts are based on the first letter of the tab, and ‘p’ for the ‘Respond’ tab.

Suggestions?

The Bugzilla queries used to fetch these queues are always in need of tweaking for unforseen situations. Please file an issue if the wrong items are showing up in a tab, and especially if something is missing. Also file if there are any suggestions at all.

 

 

 

Open Source Rocks – Follow Up

My last blog post was quite a downer, so I want to do a short follow up for posterity.

First of all, there were some nice responses to it from Steve Klabnik and especially Corey Haines, who gave a sincere straight-up apology. Several people have told me they are usually very nice, so keep that in mind.

The emails I got really stuck out to me. Some people had their own stories that were way worse than mine. Sadly, several said that this is why they’d never open sourced anything.

But I also got emails with people telling me how useful they’d found some of my open source projects. That right there makes it all worth it. Make sure you let people know when you appreciate their work, it might help balance out some of the bad.

I want to make it clear that you should definitely still open source your code. I still wouldn’t hesitate to open source something if I thought it could be useful to someone.

Being Ridiculed for My Open Source Project

Yesterday my colleague mentioned that a script I wrote was getting a lot of attention on Twitter. This particular project was something I wrote a couple years ago to help me out with a workflow. I had a lot of fun writing it and have gotten a ton of use out of it, and several people have expressed that they have too. I’d put it up on Github, so that others could potentially use it or use the code.

So I went to see what people were saying about this project. I searched Twitter and several tweets came up. One of them, I guess the original one, was basically like “hey, this is cool”, but then the rest went like this:

1 2 3

At this point, all I know is that by creating this project I’ve done something very wrong. It seemed liked I’d done something fundamentally wrong, so stupid that it flabbergasts someone. So wrong that it doesn’t even need to be explained.  And my code is so bad it makes people’s eyes bleed. So of course I start sobbing.

Then I see these people’s follower count, and I sob harder. I can’t help but think of potential future employers that are no longer potential. My name and avatar are part of its identity, and it’s just one step for a slightly curious person to see the idiot behind this project.

I queried some tweeters for more information on why exactly it was so bothersome. I didn’t get apologies from these tweeters.

The response to this from other people was overwhelmingly reassuring. The tweets were called out by several people, and I got a bunch of reassurance and support. I’m lucky to have friends in this industry that know me in person and through my work, and thus feel more compelled to speak up.

I evangelize open source whenever I meet new coders or go to meetups. I tell them to make something that they would find useful and put it out there. Can you imagine if one of these new open sourcerers took my advice and got this response, without the support I had. Can you imagine?

Update:

I got some apologies: http://programmingtour.blogspot.com/2013/01/im-sorry.htmlhttp://blog.steveklabnik.com/posts/2013-01-23-node, and I wrote a follow up post here: http://harthur.wordpress.com/2013/02/01/open-source-rocks-follow-up/

Also, it was hard for me to convey this, but the snarkiness of the tweets really made it so much worse. I wish I could explain why.

 

.

Creamy Lemon Ice Cream

Makes 1 1/2 quarts of ice cream.

Ingredients:
2oz cream cheese, softened
3/4 cup sugar
1/2 cup fresh lemon juice
2 tbsp lemon zest
1/4 tsp vanilla extract
1 1/2 cup whole milk
1 cup heavy cream
pinch of salt

Directions:
Mix the cream cheese and sugar. Add the lemon juice, lemon zest, salt and vanilla and mix well. Wisk in the milk and cream. Pour in your ice cream maker and use according to directions.

Dealing With (Not Dealing With) the Open Source Assholes

Jumping into the open source and js world has been a surprising psychological crash course/nightmare for me. There’s something about open source and open forums that encourages socially-inept jerks to deride people and software. It’s especially prevalent in certain communities. It can make you doubt yourself, or even worse, force you to adopt a behavior you don’t want to.

This can be off-putting to say the least. Your world can turn into a crazy, competitive, self-questioning altworld if you’re not careful and there are some things I’ve learned about turning that around.

Go to the right meetups. Meeting some of the people in your community in person can actually be a relief of sorts. People that sound stern on the internet are usually way nicer than expected in real life. But don’t stick around meetups or conferences that aren’t welcoming or have an “Glitterati” feel, being physically in such a high stress environment does nothing good for you, and it’s unlikely your single presence will change anything.

Follow the right people. Twitter and Github are the best things to happen to open source since IRC. But as soon as someone says a software project is “retarded”, unfollow them. Seriously, you don’t need to hear that crap. Follow people that are saying positive things, giving constructive criticism, encouraging people, giving propers where propers are due.

Don’t let anyone cramp your style. Feedback is important and of course you should listen to it. If someone says something negative about your project in an unreasonable way, don’t take it to heart. There’s something good in every project (it’s open source, it already has one thing going for it), no single project is complete crap, keep the good things and learn from the criticism.

All this boils down to basically “surround yourself with good people”, it’s advice that applies to everything, but it’s good to remember that it’s just as important to apply it to your work and hobbies. Tina Fey (<3) sums it up in Bossypants (<3):

When faced with sexism or ageism or lookism or even really aggressive Buddhism, ask yourself the following question: “Is this person in between me and what I want to do?” If the answer is no, ignore it and move on. Your energy is better used doing your work and outpacing people that way. Then, when you’re in charge, don’t hire the people who were jerky to you.

If the answer is yes, you have a more difficult road ahead of you. I suggest you model your strategy after the old Sesame Street film piece “Over! Under! Through!”

Again don’t waste your energy trying to educate or change opinions. Go “Over! Under! Through!” and opinions will change organically when you’re the boss. Or they won’t. Who cares?

Do your thing and don’t care if they like it.

This brings an important point, sometimes you can’t avoid collaborating on a project with a smartass. Take the high road and don’t ever respond to snarkiness with snarkiness. If you get anything from this blog post it’s…don’t let it change you.

Jetpack: Showing Search Terms in Awesomebar

Note: this is not about searching from the awesomebar.


download addon·code on github

The awesomebar is one of my favorite things about Firefox. Especially compared to alternatives in other browsers – the awesomebar remains the fastest way for me to find where I want to go. Sometimes a site’s url and title aren’t enough to jog my memory however. At some point I wished Firefox would do full-text indexing for me. Then I realized that Google was already doing that, and there might be a way to hijack that power – by remembering what search terms you used to find the site and displaying that in the awesomebar. You can’t really get better than search terms, they put the value a site gives in your own words. Of course, you might find the site valuable for other things after viewing it, then you have no real choice but to manually tag it (or do you?).

I made a quick extension with Jetpack to do just that, implemented in the simplest possible way. It parses the referrer for ‘q=’, and appends that to the page’s user-set title (which is matched on in the awesomebar). It can be very helpful, but it was less helpful than I thought. It would be more helpful if the referrer persisted across link navigation, the referrer didn’t terminate after #, and more sites used ‘q’ to hold the query, but it was an interesting experiment, and I’d love to see more experiments in Firefox inferring tags for webpages.

Jetpack impressions

I enjoyed using the new Jetpack SDK, I’m a big fan. It took more than a couple minutes to get started but the docs were excellent and I love the CommonJS. I had to bust out the Cc but that’s just because the Places API isn’t quite ready yet. I only had to write 42 lines of code. I can confidently say I won’t be making a ‘regular’ addon again.

Javascript Neural Networks

There are tons of neural network implementations out there, but not many in JavaScript. This is pretty surprising given that JavaScript is awesome and neural networks could really benefit from being in the browser. One partial implementation was used to do some sweet Captcha OCR, and my last post was about using them to determine whether to display black or white text over a given background color.

I ended up creating brain, the missing JavaScript neural network library. I tried to make it easy to use. To use it you don’t have to know what a hidden layer is (but you can specify hidden layers if you want), you can also specify input (and expected output, for training) as hashes instead of arrays – good for sparse or labelled input, and you can pass trained networks around in JSON, which is useful with Worker threads.

If you want to find out more using neural networks from a programmatic perspective, this is a good introduction that just popped up.

Playing Around With js ctypes on Linux

I’m pretty elated about the ctypes module introduced in Firefox 3.6. ctypes.jsm is a module that lets chrome code call functions from shared libraries. This is a big win for a lot of extension developers. The baseline is that you no longer have to create an XPCOM component to call C++ code from javascript.

I had wanted to speed up some calculation-heavy js I was using in my extension by writing it in C++. Writing a C++ XPCOM component would probably force me to take up smoking again, so for my health I decided to ditch the effort…then I found out about ctypes!

Ctypes can help with calling Win API functions and such, and there are some examples of this on the ctypes.jsm wiki page for this. My use case however was loading my own shared library, so I decided to put together a short end-to-end tutorial on how to call your own C code from your extension.

First we write a little C function and put it in add.c:

int add(int a, int b) {
  return a + b;
}

To get a shared library from this code, compile with these commands:

gcc -fPIC -c add.c
gcc -shared -o add.so add.o

Now you have a file called add.so, which we can load from ctypes. Say you put add.so in your addon’s content directory, then your javascript might look something like this:

Components.utils.import("resource://gre/modules/ctypes.jsm");

function add(a, b) {
  var file = getFile("chrome://myext/content/add.so");
  var lib = ctypes.open(file); 

  var addc = lib.declare("add",
                           ctypes.default_abi,
                           ctypes.int32_t, // return type
                           ctypes.int32_t, // arg1 type
                           ctypes.int32_t // arg2 type
  );
  return addc(a, b);
}


function getFile(chromeURL) {
  // convert the chrome URL into a file URL
  var cr = Components.classes['@mozilla.org/chrome/chrome-registry;1']
           .getService(Components.interfaces.nsIChromeRegistry);
  var io = Components.classes['@mozilla.org/network/io-service;1']
           .getService(Components.interfaces.nsIIOService);
  var uri = io.newURI(decodeURI(chromeURL), 'UTF-8', null);
  var fileURL = cr.convertChromeURL(uri);
  // get the nsILocalFile for the file
 return  fileURL.QueryInterface(Components.interfaces.nsIFileURL).file;
}

Now try calling your add function from js. The getFile function isn’t that pretty, hopefully in the future there will be a way to open a library from a chrome url. Also, you can’t use ctypes from Worker threads, so that is very sad.

Configure Apache To Accept Cross-Site XMLHttpRequests on Ubuntu

Update: check out this for more up-to-date instructions: http://enable-cors.org/server_apache.html

1. Make sure you have the mod_headers Apache module installed. to do this check out /etc/apache2/mods-enabled/ and see if there’s a ‘headers.load’ in there. If there isn’t then just sudo ln -s /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load

2. Add the Access-Control-Allow-Origin header to all HTTP responses. You can do this by adding the line Header set Access-Control-Allow-Origin "*" to the desired <Directory> section in your configuration file (like the /etc/apache2/sites-available/default file). Saying "*" will allow cross-site XHR requests from anywhere. You can say "www.myothersite.com" to only accept requests from that origin.

3. Reload apache server. sudo /etc/init.d/apache2 reload

Maybe this is really obvious to a lot of people, but it wasn’t to me, so there you go.

Follow

Get every new post delivered to your Inbox.

Join 29 other followers