Autocompleting xchat channel log filenames in zsh
Sometimes zsh is a little too smart for its own good.
Something I do surprisingly often is to complete the filenames for my local channel logs in xchat. Xchat gives its logs crazy filenames like /home/akkana/.xchat2/xchatlogs/FreeNode-#ubuntu-us-ca.log. They're hard to autocomplete -- I have to type something like: ~/.xc<tab>xc<tab>l<tab>Fr<tab>\#ub<tab>us<tab> Even with autocompletion, that's a lot of typing!
Bug zsh makes it even worse: I have to put that backslash in front of the hash, \#, or else zsh will see it either as a comment (unless I unsetopt interactivecomments, in which case I can't paste functions from my zshrc when I'm testing them); or as an extended regular expression (unless I unsetopt extendedglob). I don't want to unset either of those options: I use both of them.
Tonight I was fiddling with something else related to extendedglob, and was moved to figure out another solution to the xchat completion problem. Why not get zsh's smart zle editor to insert most of that annoying, not easily autocompletable string for me?
The easy solution was to bind it to a function key. I picked F8 for testing, and figured out its escape sequence by typing echo , then Ctrl-V, then hitting F8. It turns out to insert <ESC>[20~. So I made a binding: bindkey -s '\e[20~' '~/.xchat2/xchatlogs/ \\\#^B^B^B'
When I press F8, that inserts the following string: ~/.xchat2/xchatlogs/ \# ↑ (cursor ends up here) ... moving the cursor back three characters, so it's right before the space. The space is there so I can autocomplete the server name by typing something like Fr<TAB> for FreeNode. Then I delete the space (Ctrl-D), go to the end of the line (Ctrl-E), and start typing my channel name, like ubu<TAB>us<TAB>. I don't have to worry about typing the rest of the path, or the escaped hash sign.
That's pretty cool. But I wished I could bind it to a character sequence, like maybe .xc, rather than using a function key. (I could use my Crikey program to do that at the X level, but that's cheating; I wanted to do it within zsh.) You can't just use bindkey -s '.xch' '~/.xchat2/xchatlogs/ \\\#^B^B^B' because it's recursive: as soon as zsh inserts the ~/.xc part, that expands too, and you end up with ~/~/.xchat2/xchatlogs/hat2/xchatlogs/ \# \#.
The solution, though it's a lot more lines, is to use the special variables LBUFFER and RBUFFER. LBUFFER is everything left of the cursor position, and RBUFFER everything right of it. So I define a function to set those, then set a zle "widget" to that function, then finally bindkey to that widget: function autoxchat() { LBUFFER+="~/.xchat2/xchatlogs/" RBUFFER=" \\#$RBUFFER" } zle -N autoxchat bindkey ".xc" autoxchat
Pretty cool! The only down side: now that I've gone this far in zle bindings, I'm probably an addict and will waste a lot more time tweaking them.
How to Use Awk to Find and Sort Text in Linux, GnuCash
June goals update
Chado-related goals: make shiro-an. Carve a bamboo futaoki (lid rest), at least a fushi-nashi (nodeless) one, which should be utterly simple. Practice carving chashaku, which is not. Try repairing my broken Tamba-yaki idojawan.The shiro-an is still a work in progress, but as with books, I don't let not yet having finished one thing stop me from starting another. I'm working on a soramame (broad bean) chakin-shibori to serve at the chaji I'm holding next month to thank the teachers at Washin-an. It looks straightforward. Thanks to forwarding service tenso, I've got some wagashi-making tools on their way that will allow me to make molded kanten- and kuzu-based sweets, as well as a few forms of higashi. If I can find a steamer that will fit my 8" square mold, I could make minazuki, but it's not clear that I'll be able to do that in the remaining time (until the end of June) that minazuki will remain seasonally appropriate.
I did carve a couple of nodeless bamboo futaoki for use with my yari-no-saya kensui. I'm discovering that the mysterious abura-nuki process—which I haven't done before, not having seen or been taught it—is probably important to achieving the glossy, sealed-looking finish I'm used to seeing on bamboo utensils but which is lacking in the ones I've made. So I'll have to learn that step before making anything else out of bamboo.
HacDC-related: be a diligent treasurer. Help Alberto run an Arduino class. Hold an LED cuff-making workshop.The treasurer gig is going well so far. It helps that the previous treasurer set up a bunch of spreadsheet pages and processes that I on my own would have been at a loss to establish but that I can use with no problem. The Arduino class will be happening starting next month and running into August, and though I haven't been involved with the curriculum, I could be useful as a student-wrangler and photographer.
Photography-related: learn how to do long-exposure photography, so I can do things like light painting by skipping a stone with an LED attached. Figure out how to do time-lapse photography. Try HDR.Still learning. I've been going through my camera's manual. Exposure bracketing on the camera is simple to do, but my initial naive try at using Luminance (a.k.a. qtpfsgui) resulted in nothing like any of the photos I imported as raw source images. So, more learning to do there. If any of you have used that software before, I'd like to pick your brain. The manual is, shall we say, sparse.
Related to nothing else: see wisteria in bloom (maybe at the National Arboretum?). Go to—and participate meaningfully in—Burning Man. Get rid of excess clothes. Learn Android programming. Finish carving my Greenland-style kayak paddle. Consider incorporating gender-neutral pronouns into my writing somehow.Wisteria: check. Burning Man: I've found a probable camp and made plans to meet up with some of them, having waited six weeks to get onto their mailing list. Still better than French Quarter/Asiatown's record so far.
This entry was originally posted at http://bokunenjin.dreamwidth.org/39310.html.
Bike stravaganza
Spring/summer is the season when new things arrive on the market. Is also the season when I cycle the most. I’m getting closer to achieving a metric century (100km/day) on my bike – and I remember the days when my goal was to cycle 100km a WEEK – and getting that feeling I need a better bike, at least for long endurance rides.
The road bike thing is tricky, as I’m very short – the frame has to be small – but I’ve found a few, reasonably priced bikes designed for women with XS frames.
I also need a new helmet, but at least that’s cheap. I wear youths’ sized helmets, like this. Fancy colours!
Now, I want a better cycling computer/GPS to connect to sites like http://mapmyride.com, able to detect heart beat (Garmin 510 anyone?). I might delay that for a bit, because I’m considering buying an Amiigo (well, when it’s available and when BLE works on the Nexus 4) because it will be useful for whatever activities I do, not only cycling. Meanwhile, I’ll keep using the phone. My previous Flitzer still works, but doesn’t give me much information. I like LOTS of information.
I’ll keep researching things on the meantime. I find a new bike (and a new pair of padded shorts/pants) the most important thing now, considering how much my upper body – and not my legs, as one would expect – aches after a 70km ride. Especially shoulders and arms.
My past month of warriors, bread and a baby giraffe
Since returning from the honeymoon a month ago our lives have continued to be very busy, catching up with work and projects while we were gone and catching up with all other life stuff we postponed while we were preparing for the wedding.
Because we have been so overwhelmed, I gave Instacart a try and had some groceries delivered from Safeway and Whole Foods. It went well and the couple hours it saved was a huge relief. Not sure if I’ll stick with them or try other grocery delivery services, but it’s great to know that it’s available when we simply don’t have the time on weekends to get the major shopping trips completed.
About a week after returning home, I met up with Grant Bowman and Christian Einfeldt for a Partimus board meeting. It was great to be able to catch up with everything and make some small, concrete plans for moving forward that took into account our busy schedules. I was also able to work with James Howard on a blog post for the Partimus blog about some work they were doing while MJ and I were getting married on April 28th: CACS laptop install day wrap-up
With the release of Ubuntu 13.04, I participated in Ubuntu Open Week with a session on the Ubuntu Women Project. I also was able to work with the Xubuntu docs folks to upload the 13.04 version of our documentation to docs.xubuntu.org/1304/ and install a new splash page at docs.xubuntu.org itself where we will keep all of the documentation for current stable releases. I don’t have much to do with Debian these days, but the release of Debian 7.0 while we were gone got me to upgrade most of my servers a couple weeks ago and it went pretty smoothly. I’ve also been working with the Canonical community team to launch community.ubuntu.com a couple weeks ago, which meant lots of content review and scouring for images to include on the site.
Over Memorial Day Weekend we had a lot of errands to catch up on, one of which was finally purchasing a proper bedroom set. We’ve been casually looking for quite some time and ended up coming back to one we saw at a furniture store in Berkeley a couple years ago. Unfortunately the delivery date is 8-12 weeks out for the set with the combination we ordered, so we’ll be waiting some time. On Memorial Day itself we managed to get over to the Asian Art Museum for the last day of their amazing Terracotta Warriors exhibit.
More photos from the exhibit here: http://www.flickr.com/photos/pleia2/sets/72157633750560814/
The week wrapped up with a bread experiment! One of our wedding guests bought us a bread maker, which I’ve so far used to make some white bread and then experimented with making challah fully in the bread machine, which of course makes it come out as a square rather than a traditional braided loaf. So that Friday evening I decided to try making the proper loaf. I used this recipe to start it out in the bread maker (so it would do all the kneading and rising work) and then took it out and braided it. Braiding wasn’t actually as difficult as I had feared, and I had a nice braided loaf to put in the oven:
I think I somehow didn’t let it rise enough, so it rose a lot in the oven and caused some unevenness with how it looked with the egg coating, but it came out tasting and looking pretty much like proper challah, if a bit on the thick side. I’ll give it another try this Friday.
The next day I went to the San Francisco Zoo to visit their newest arrival, a baby giraffe!
She was huge! 5’10″ at birth and weighing 130 lbs, these animals are formidable creatures from birth. I was delighted to have the opportunity to not only see her when she was just a little over a week old, but also catch a few minutes of her nursing.
While I was at the zoo I also got to visit the other baby at the zoo – their tiger Jillian! I’ve been to see her a couple of times already, but this was my first time seeing her out in the yard. Got some super-zoomed photos of her snuggling mom, and then a few more of her playing in the yard.
More zoo photos here: http://www.flickr.com/photos/pleia2/sets/72157633882815260/
Other miscellaneous things: Went to a BerkeleyLUG meeting recently while we happened to be in the area and needed some lunch (hooray pizza!). After months of not going to the theater, saw Star Trek Into Darkness and The Great Gatsby within a week of each other (still need to see Iron Man 3!). Went to a “State of the Stack” OpenStack meetup where I got to meet Randy Bias, but didn’t talk to anyone else because I’m too shy (d’oh). I have been meeting folks for dinner more recently, as much as I don’t like to believe it, getting out of the house after work really helps break up my day and leads to more productivity in the later evening. Tonight I spent the evening at an Ubuntu Hour and Debian Dinner.
Finally, I’ve sorted out much of my travel schedule for the next few months. In a couple weeks I’m flying to New York City for the OpenStack CI/Infra Bootcamp with my colleagues. At the end of July MJ and I are heading to Boston for a wedding. And finally in early August we’ll be going to Philadelphia where I’ll be speaking at FOSSCON on Open Source Systems Administration, specifically looking at how we do it in the OpenStack project.
Embrace your inner geek: speech to launch QUT OSS community
This was a speech I gave in Brisbane to launch the QUT OSS group. It talks about FOSS, hacker culture, open government/data, and why we all need to embrace our inner geek
Welcome to the beginning of something magnificent. I have had the luck, privilege and honour to be involved in some pretty awesome things over the 15 or so years I’ve been in the tech sector, and I can honestly say it has been my involvement in the free and Open Source software community that has been one of the biggest contributors.
It has connected me to amazing and inspiring geeks and communities nationally and internationally, it has given me an appreciation of the fact that we are exactly as free as the tools we use and the skills we possess, it has given me a sense of great responsibility as part of the pioneer warrior class of our age, and it has given me the instincts and tools to do great things and route around issues that get in the way of awesomeness.
As such it is really excited to be part of launching this new student focused Open Source group at QUT, especially one with academic and industry backing so congratulations to QUT, Red Hat, Microsoft and Tech One.
It’s also worth mentioning that Open Source skills are in high demand, both nationally and internationally, and something like 2/3 of Open Source developers are doing so in some professional capacity.
So thanks in advance for having me, and I should say up front that I am here in a voluntary capacity and not to represent my employer or any other organisation.
Who am I? Many things: martial artist, musician, public servant, recently recovered ministerial adviser, but most of all, I am a proud and reasonably successful geek.
Geek Culture
So firstly, why does being a geek make me so proud? Because technology underpins everything we do in modern society. It underpins industry, progress, government, democracy, a more empowered, equitable and meritocratic society. Basically technology supports and enhances everything I care about, so being part of that sector means I can play some small part in making the world a better place.
It is the geeks of this world that create and forge the world we live in today. I like to go to non-geek events and tell people who usually take us completely for granted, “we made the Internet, you’re welcome”, just to try to embed a broader appreciation for tech literacy and creativity.
Geeks are the pioneers of the modern age. We are carving out the future one bit at a time, and leading the charge for mainstream culture. As such we have, I believe, a great responsibility to ensure our powers are used to improve life for all people, but that is another lecture entirely.
Geek culture is one of the driving forces of innovation and progress today, and it is organisations that embrace technology as an enabler and strategic benefit that are able to rapidly adapt to emerging opportunities and challenges.
FOSS culture is drawn very strongly from the hacker culture of the 60′s and 70′s. Unfortunately the term hacker has been stolen by the media and spooks to imply bad or illegal behaviours, which we would refer to as black hat hacking or cracking. But true hacker culture is all about being creative and clever with technology, building cool stuff, showing off one’s skills, scratching an itch.
Hacker culture led to free software culture in the 80′s and 90′s, also known as Open Source in business speak, which also led to a broader free culture movement in the 90′s and 00′s with Creative Commons, Wikipedia and other online cultural commons. And now we are seeing a strong emergence of open government and open science movements which is very exciting.
Open Source
A lot of people are aware of the enormity of Wikipedia. Even though Open Source well predates Wikipedia, it ends up being a good tool to articulate to the general population the importance of Open Source.
Wikipedia is a globally crowdsourced phenomenon than, love it or hate it, has made knowledge more accessible than every before. I personally believe that the greatest success of Wikipedia is in demonstrating that truth is perception, and the “truth” held in the pages of Wikipedia ends up, ideally anyway, being the most credible middle ground of perspectives available. The discussion pages of any page give a wonderful insight to any contradicting perspectives or controversies and it teaches us the importance of taking everything with a grain of salt.
Open Source is the software equivalent of Wikipedia. There are literally hundreds of thousands if not millions of Open Source software projects in the world, and you would used thousands of the most mature and useful ones every day, without even knowing it. Open Source operating systems like Linux or MINIX powers your cars, devices, phones, telephone exchanges and the majority of servers and super computers in the world. Open Source web tools like WordPress, Drupal or indeed WikiMedia (the software behind Wikipedia) power an enormous amount of websites you go to everyday. Even Google heavily uses Open Source software to build the worlds most reliable infrastructure. If Google.com doesn’t work, you generally check your own network reliability first.
Open Source is all about people working together to scratch a mutual itch, sharing in the development and maintenance of software that is developed in an open and collaborative way. You can build on the top of existing Open Source software platforms as a technical foundation for innovation, or employ Open Source development methodologies to better innovate internally. I’m still terrified by the number of organisations I see that don’t use base code revision systems and email around zip files!
Open Source means you can leverage expertise far beyond what you could ever hope to hire, and you build your business around services. The IT sector used to be all about services before the proprietary lowest common denominator approach to software emerged in the 80s.
But we have seen the IT sector largely swing heavily back to services, except in the case on niche software markets, and companies compete on quality of services and whole solution delivery rather than specific products. Services companies that leverage Open Source often find their cost of delivery lower, particularly in the age of “cloud” software as a service, where customers want to access software functionality as a utility based on usage.
Open Source can help improve quality and cost effectiveness of technology solutions as it creates greater competition at the services level.
The Open Source movement has given us an enormous collective repository of stable, useful, innovative, responsive and secure software solutions. I must emphasise secure because many eyes reviewing code means a better chance of identifying and fixing issues. Security through obscurity is a myth and it always frustrates me when people buy into the line that Open Source is somehow less secure than proprietary solutions because you can see the code.
If you want to know about government use of Open Source, check out the Open Source policy on the Department of Finance and Deregulation website. It’s a pretty good policy not only because it encourages procurement processes to consider Open Source equally, but because it encourages government agencies to contribute to and get involved in the Open Source community.
Open Government
It has been fascinating to see a lot of Open Source geeks taking their instincts and skills with them into other avenues. And to see non-technical and non-Open Source people converging on the same basic principles of openness and collaboration for mutual gain from completely different avenues.
For me, the most exciting recent evolution of hacker ethos is the Open Government movement.
Open Government has always been associated with parliamentary and bureacratic transparency bureaucratic, such as Freedom of Information and Hansard.
I currently work primarily on the nexus where open government meets technology. Where we start to look at what government means in a digital age where citizens are more empowered than ever before, where globalisation challenges sovereignty, where the need to adapt and evolve in the public service is vital to provide iterative, personalised and timely responses to new challenges and opportunities both locally and globally.
There are three key pillars of what we like to call “Government 2.0”. A stupid term I know, but bear with me:
- Participatory governance – this is about engaging the broader public in the decision making processes of government to both leverage the skills, expertise and knowledge of the population for better policy outcomes, and to give citizens a way to engage directly with decisions and programs that affect their every day lives. Many people think about democratic engagement as political engagement, but I content that the public service has a big role to play in engaging citizens directly in co-developing the future together.
- Citizen centricity – this is about designing government services with the citizen at the centre of the design. Imagine if you will, and I know many in the room are somewhat technical, imagine government as an API, where you can easily aggregate information and services thematically or in a deeply personalised way for citizens, regardless of the structure or machinery of government changes. Imagine being able to change your address in one location, and have one place to ask questions or get the services you need. This is the vision of my.gov.au and indeed there are several initiatives that delivery on this vision including the Canberra Connect service in the ACT, which is worth looking at. In the ACT you can go into any Canberra Connect location for all your Territory/Local government needs, and they then interface with all the systems of that government behind the scenes in a way that is seamless to a citizen. It is vital that governments and agencies start to realise that citizens don’t care about the structures of government, and neither should they have to. It is up to us all to start thinking about how we do government in a whole of government way to best serve the public.
- Open and transparent government – this translates as both parliamentary transparency, but also opening up government data and APIs. Open data also opens up opportunities for greater analysis, policy development, mobile service delivery, public transaprency and trust, economic development through new services and products being developed in the private sector, and much more.
Open Data
Open data is very much my personal focus at the moment. I’m now in charge of data.gov.au, which we are in the process of migrating to an excellent Open Source data repository called CKAN which will be up soon. There is currently a beta up for people to play with.
I also am the head cat herder for a volunteer run project called GovHack which ran only just a week ago, where we had 1000 participants from 8 cities, including here in Brisbane, all working with government data to build 130 new hacks including mashups, data visualisations, mobile and other applications, interactive websites and more. GovHack shows clearly the benefits to society when you open up government data for public use, particularly if it is available in a machine readable way and is available under a very permissive copyright such as Creative Commons.
I would highly recommend you check out my blog posts about open data around the world from when I went to a conference in Helsinki last year and got to meet luminaries in this space including Hans Rosling, Dr Tim Hubbard and Rufus Pollock. I also did some work with the New Zealand Government looking at NZ open data practice and policy which might be useful, where we were also able to identify some major imperatives for changing how governments work.
The exciting thing is how keen government agencies in Federal, State, Territory and Local governments are to open up their data! To engage meaningfully with citizens. And to evolve their service delivery to be more personalised and effective for everyone. We are truly living in a very exciting time for technologists, democracy and the broader society.
Though to be fair, governments don’t really have much choice. Citizens are more empowered than ever before and governments have to adapt, delivery responsive, iterative and personalised services and policy, or risk losing relevance. We have seen the massive distribution now of every traditional bastion of power, from publishing, communications, monitoring, enforcement, and even property is about to dramatically shift, with the leaps in 3D printing and nano technologies. Ultimately governments are under a lot of pressure to adapt the way we do things, and it is a wonderful thing.
The Federal Australian Government already has in place several policies that directly support opening up government data:
- The Australian Declaration of Open Government
- The Big Data Strategy Issues Paper – released in March by the Department of Finance
- The APS ICT Strategy 2012-2015
- The Gov 2.0 Taskforce Report – basis of open gov in Australia
- Ahead of the game – the blueprint for the direction of the public service
- AGIMO (the Federal agency responsible for Gov 2.0) and their blogpost Progress on Government 2.0
- The great work and papers by the Office of the Australian Information Commission and open data as a way to mitigate the rising costs of FoI
- The Statement of Intellectual Property Principles for Australian Government by the Federal Attorney-General, Creative Commons as the default
- Also a more in depth list of examples of Gov 2.0 from Australia was presented by Minister Lundy at the Gov 2.0 Expo in Washington DC a couple of years ago. Obviously there are more recent examples too, but this is a good list

- The Australian Government Innovation blog – has regular news and is quite interesting.
Australia has also recently signed up to the Open Government Partnership, an international consortia of over 65 governments which will be a very exciting step for open data and other aspects of open government.
At the State and Territory level, there is also a lot of movement around open data. Queensland and the ACT launched your new open data platform late last year with some good success. NSW and South Australia have launched new platforms in the last few weeks with hundreds of new data sets. Western Australia and Victoria have been publishing some great data for some time and everyone is looking at how they can do so better!
Many local governments have been very active in trying to open up data, and a huge shout out to the Gold Coast City Council here in Queensland who have been working very hard and doing great things in this space!
It is worth noting that the NSW government currently have a big open data policy consultation happening which closes on the 17th June and is well worth looking into and contributing to.
Embracing geekiness
One of my biggest bug bears is when people say “I’m sorry the software can’t do that”. It is the learned helplessness of the tech illiterate that is our biggest challenge for innovating and being globally competitive, and as countries like Australia are overwhelming well off, with the vast majority of our citizens living high quality lives, it is this learned helplessness that is becoming the difference between the haves and have nots. The empowered and the disempowered.
Teaching everyone to embrace their inner geek isn’t just about improving productivity, efficiency, innovation and competitiveness, it is about empowering our people to be safer, smarter, more collaborative and more empowered citizens in a digital world.
If everyone learnt and experienced even the tiniest amount of programming, we would all have embedded that wonderful instinct that says “the software can do whatever we can imagine”.
Open Source communities and ethos gives us a clear vision as to how we can overcome every traditional barrier to collaboration to make awesome stuff in a sustainable way. It teaches us that enlightened self interest in the age of the Internet translates directly to open and mutually beneficial collaboration.
We can all stand on the shoulders of giants that have come before, and become the giants that support the next generation of pioneers. We can all contribute to making this world just a bit more awesome.
So get out there, embrace your inner geek and join the open movement. Be it Open Source, open government or open knowledge, and whatever your particular skills, you can help shape the future for us all.
Thank you for coming today, thank you to Jim for inviting me to be a part of this launch, and good luck to you all in your endeavours with this new project. I look forward to working with you to create the future of our society, together.
Simcoe’s May Checkup
On May 30th we brought Simcoe in for her 3 months checkup. We were going to wait longer since her results have been consistently good, but following our honeymoon she’s been acting a bit more restless than usual and we decided to take her in. Caligula was also having some stomach problems so we brought him along too.
We ended up leaving both of them at the vet for the morning so Caligula could get a vaccination and they could get some blood and urine samples from Simcoe. We got Simcoe’s blood results back on June 3rd:
BUN 48 (normal range: 14-36)
CRE 2.6 (normal range: .6-2.4)
Pretty much everything is within the margin of error BUN is up slightly from 46, and CRE is down slightly from 2.8. I didn’t write down exact weight, but it was down an ounce or two and the vet wasn’t concerned since it’s also within standard weight fluctuation. The only concern was slightly elevated protein in her urine sample, but they think that may be from a little blood that got in the sample from the needle, the vet just said we should do the test again next time she comes in.
So we’re no longer worried that Simcoe’s increased activity is a problem, we suspect it was just the three weeks being away from home had really upset her and caused her to demand a bit more attention. Ah cats.
On attending my first fan convention
On the long weekend, I attended Continuum, my first science fiction fan convention ever. It started off with me registering then sitting with NK Jemisin waiting for the Continuum 101 session to begin - I guessed that it might be her, but didn't want to assume (and, not having read any of her work, I didn't want to get into an awkward position).
I read a fair bit of fantasy and science fiction when I was a teenager, but felt ostracised for it and mostly gave it up for 'serious' literature when I went to university. I have been exposed to fandom through friends but only started reading and watching science fiction again a few years ago. I was afraid that conventions would be isolating in similar ways to technology conferences, especially as a woman from an ethnic minority who is also relatively new to fandom. I probably only felt confident about attending because I knew the chair and some of the committee members and expected them to bring some diversity to the programme.
I didn't need to have these fears, and Continuum has set a high standard for future conventions for me. There were many genuine efforts to welcome newcomers and lurkers. Nora Jemisin's Guest of Honour speech confronted injustice in science fiction, and questions of injustice and inappropriate representation were raised in many panels. I estimate at least 50% of the members were women, which far exceeds the ratio at any tech event I have attended (apart from female-only ones). It felt like a safe environment for minority, queer, and disabled people (as far as I could tell from my mostly-able perspective). None of this surprises me, knowing the committee, but I suspect it's not representative of the wider world of fandom.
In 2014, Continuum will (again) be the Australian national convention. I expect I'll be there - I've got the convention bug now. That gives me a year to catch up on a lot of books and DVDs.
AdaCamp take-aways
This past weekend I attended AdaCamp, put on by The Ada Initiative.
Attending this conference was an interesting move for me. I have a lot of respect for The Ada Initiative, but that’s mostly because they’re doing the offense and defense work that I no longer have the energy or interest to do. I’ve personally steered clear of most public feminist-related discussions and incidents these past few years.
In the past couple of years I’ve been putting a strong focus on growth in my career, both in terms of paid and volunteer open source work. I’ve been supporting fellow women in tech by being a visible role model, helping promote the work of other women I work with (this is mostly what I focus on with Ubuntu Women these days) and with limited, organic mentorship.
I’m keen to continue this trend as I feel much more satisfied in my current role than I was scrambling to learn about the advanced feminist topics and fight to directly change the world. So, my intent with attending this conference was to:
- Learn the concrete tools that others have been using to increase participation in open source for everyone
- Meet other people who share my goals and passion for increasing involvement in our open source projects
- Share my own successes and experiences with open source involvement
To this end…
I was able to meet and speak with several women who were interested in open source but were unsure about where to start, how to get familiar with the tools and expressed concerns about “doing it wrong” in such a public space (specifically how this would impact being accepted into the project and career prospects). My hope is that with personal and in-session discussions I had with them that some of this was dissipated, but it really highlighted some pieces of what we need to do to make sure our projects are welcoming to people who are new to open source (“just toss is up on github” certainly does not!).
I also learned about some of the content of OpenHatch’s Open Source Comes to Campus events and learned that they will soon be publishing the material they use for these “introduction to open source” events they host. It would be great to have these materials to host similar events in the wider community for folks who don’t have access to these campus events (either don’t have the resources to be a student or are no longer students).
During a session about “Quantifying Community Dysfunction” there was talk about community metric tools to track certain contributions so that the effectiveness of targeted efforts (or the opposite – negative incidents) toward improving participation and retention of new contributors could be measured. In this discussion I learned about the Metrics working group and their mailing list and was able to talk about the use of MetricsGrimoire in the OpenStack project for our Development Dashboard. The OpenStack project also has launched OpenStack Insights powered by wikidsmart and documented here and we also have several tools at status.openstack.org, including the Bugday tool that teams have taken to showcasing the results from after successful bug targeting days.
There were a lot of book titles flying around over the weekend, but the one that caught my attention in particular was The Managed Heart: Commercialization of Human Feeling. Open Source projects are often criticized for only valuing direct code contributions (not documentation, project coordination, UI design), but it seems that even those which have succeeded in being inclusive of these contributions still aren’t doing a great job of valuing “emotional work” that contributors put in, whether it be efforts made during collaboration or dispute resolution. The existence of “emotional work” as a thing was actually the first revelation for me, I’ve known that there was a considerable amount of emotional effort that I expend on my work but I never really had a label for it. Even worse, I totally discounted it as a skill even in myself, it was “just how I am,” not something that is inherently valuable and sometimes felt like a liability because I was spending time “dealing with people” rather than “doing Real Work” with my technical peers. I bought the book for my Nook on Sunday night and have been reading through it these past couple of days. It’s really changed my perspective and I hope will lead me to have more compassion for myself and others who do this work in our communities.
Finally, I got to meet some really amazing women this weekend. As much as I love working with my amazing male colleagues, there is always something different about being able to sit down with other women who have shared the experiences that are often difficult to explain to people who haven’t had them. Even better, many discussions I had were advice and solution-driven, “I had $foo experience, here’s how I handled it.” Awesome.
A passel of penguins
Last year at Pycon, I made a bunch of teensy amigurumi penguins to give to the friends who were sprinting on GNU Mailman with me. (Small round penguin ball pattern here) Florian commented some time later that he nearly didn’t get to keep his, as his wife is a huge fan of penguins, so since he had a new baby at home by the time of the next PyCon, I figured I knew what I should be doing: making a small pile of penguins for his family.
The emphasis was indeed on small since Florian would have to fit them in his suitcase for an international flight but not too small, since they were sort of intended as baby toys. Below you can see a size comparison of the largest one (in proto-penguin form) with a spatula (made unintentionally hilarious later on when the spatula was discovered lying on a pillow in the spare bedroom and questions were asked).
And here’s the smallest one, with my hand for size. It may help you to know that my hands are fairly small — I can just barely play a full-sized violin and would probably be more comfortable on a 3/4. (Well, okay, I haven’t actually played the violin in years, but the point is that I have almost child-sized hands.)
The patterns
The big round penguin
Amigurumi Penguin by Lion Brand Yarn. I’d made this pattern before, and it’s actually what inspired my small penguin balls from last year. It’s a very easy pattern for beginner crocheters, and you can get a fair bit of expression out of adjusting the penguin’s beak and wings.
The tall penguin
Penguin Amigurumi by Tamie Oldridge. This one’s especially fun because he has a little separate hood that you place over the top ball (hence the bowling-pin shaped proto-penguin in the photo with the spatula).
The pink penguin
Amigurumi Penguin Cell Phone Strap by Pierrot (Gosyo Co., Ltd). As you can tell from the title, this one was meant to be made with smaller yarn or cotton thread, but I scaled up so it wouldn’t be a choking hazard. People were so entertained by this one that I made a few more at the conference and gave them away too.
Here’s two pictures of one of those little wool penguins, before and after felting, with my apple power connector, watch and ring for size comparison. You can see that it didn’t get that much smaller but it definitely gets fluffier with the hand felting.
The yarns used for that one were Knit Picks palette yarns, which is one of my staples for travel since I can take small balls and a handful of stuffing and still make cute things. (If you ever feel a need to buy me hundreds of dollars of wool, you can buy a sampler pack with all the colours. I’d use them, promise!)
The felting was done by hand in the hotel using hot water from the coffee pot, a mug and shampoo from those teensy little hotel bottles. Who knew hotels contained everything you needed for hand felting? Heat water without any coffee in the machine, pour a few drops of shampoo on the penguin, dip it in the hot water, roll it around in your hands or scrub at it, rinse, repeat, replacing the water if it gets cold or too soapy.
Finally, here’s one more picture of the big pink penguin hanging out on my windowsill in Albuquerque:
Python student blogs
Coding starts June 17th. Here's to a great summer!
Debugging a Firefox freeze on Ringtail and Sid
I recently went on an upgrading spree on my main computer. In the hope of getting more up-to-date libraries, I updated my Ubuntu to 13.04 "Raring Ringtail", and Debian to unstable "Sid". Most things went fine -- except for Firefox.
Under both Ringtail and Sid, Firefox became extremely unstable. I couldn't use it for more than about fifteen minutes before it would freeze while trying to access some web resource. The only cure when that happened was to kill it and start another Firefox. This was happening with the exact same Firefox -- a 21.0 build from mozilla.org -- that I was using without any problems on older versions of Debian and Ubuntu; and with the exact same profile. So it was clearly something that had changed about Debian and Ubuntu.
The first thing I do when I hit a Firefox bug is test with a fresh profile. I have all sorts of Firefox customizations, extensions and other hacks. In fact, the customizations are what keep me tied to Firefox rather than jumping to some other browser. But they do, too often, cause problems. I have a generic profile I keep around for testing, so I fired it up and used it for browsing for a day. Firefox still froze, but not as often. Disabling Extensions
Was it one of my extensions? I went to the Tools->Add-ons to try disabling them all ... and Firefox froze. Bingo! That was actually good news. Problems like "Firefox freezes a lot" are hard to debug. "Firefox freezes every time I open Tools->Add-ons" are a whole lot easier. Now I needed to find some other way of disabling extensions to see if that helped.
I went to my Firefox profile directory and moved everything in the extensions directory into a new directory I made called extensions.sav. Then I started moving them back one by one, each time starting Firefox and calling up Tools->Add-ons. It turned out two extensions were causing the freeze: Open in Browser and Custom Tab Width. So I left those off for the time being. Disabling Themes
Along the way, I discovered that clicking on Appearance in Tools->Add-ons would also cause a freeze, so my visual theme was also a problem. This wasn't something I cared about: some time back when Mozilla started trumpeting their themeability, I clicked around and picked up some theme involving stars and planets. I could live without that.
But how do you disable a theme? Especially if you can't go to Tools->Add-ons->Appearance?
Turns out everything written on the web on this is wrong. First, everything on themes on mozilla.org assumes you can get to that Appearance tab, and doesn't even consider the possibility that you might have to look in your profile and remove a file. Search further and you might find references to files named lightweighttheme-header and lightweighttheme-footer, neither of which existed in my profile.
But I did have a directory called lwtheme. So I removed that, plus four preferences in prefs.js that included the term "lightweightThemes". After a restart, my theme was gone, I was able to view that Appearance tab, and I was able to browse the web for nearly 4 hours before firefox hung again. Darn! That wasn't all of it. Debugging the environment
But soon after that I had a breakthrough. I discovered a page on my bank's website that froze Firefox every time. But that was annoying for testing, since it required logging in then clicking through several other pages, and you never know what a bank website might decide to do if you start logging in over and over. I didn't want to get locked out.
But then I was checking an episode in one of the podcasts I listen to, which involved going to the link http://downloads.bbc.co.uk/podcasts/radio4/moreorless/rss.xml -- and Firefox froze, on a simple RSS link. I restarted and tried again -- another freeze. I'd finally found the Rosetta stone, something that hung Firefox every time. Now I could do some serious testing!
I'd had friends try this using the same version of Firefox and Ubuntu, without seeing a freeze. Was it something about my user environment? I created a new user, switched to another virtual console (Ctrl-Alt-F2) and logged in as my new user, then ran X. This was a handy way to test: I could get to my normal user's X session in Ctrl-Alt-F7, while the new user's X session was on Ctrl-Alt-F8. Since I don't have Gnome or KDE installed on this machine, the new user came up with a default Openbox session. It came up at the wrong resolution -- the X11 in the newest Linux distros apparently doesn't read the HDMI monitor properly -- but I wasn't worried about that.
And when I ran Firefox as the new user (letting it create a new profile) and middlemouse-pasted the BBC RSS URL, it loaded it, without freezing.
Now we're getting somewhere. Now I knew it was something about my user environment.
I tried copying all of ~/.config from my user to the new user. No hang. I tried various other configuration files. Still no hang. The X initialization
I'll skip some steps here, and just mention that in trying to fix the resolution problem, so I didn't have to do all my debugging at 1024x768, I discovered that if I used my .xinitrc file to start X, I'd get a freezy Firefox. If I didn't use my .xinitrc, and defaulted to the system one, Firefox was fine. Even if I removed everything else from my .xinitrc, and simply ran openbox from it, that was enough to make Firefox hang.
Okay, what was the system doing? I poked around /etc/X11: it was running /etc/X11/Xsession. I copied that file to my .xinitrc and started X. No hang.
Xsession does a bunch of things, but one of the main things it does is run every script in the /etc/X11/Xsession.d directory. So I made a copy of that directory inside my home directory, and modified .xinitrc to execute those files instead. Then I started moving them aside to see which ones made a difference.
And I found it. /etc/X11/Xsession.d/75dbus_dbus-launch was the file that mattered.
75dbus_dbus-launch takes the name of the program that's going to be executed -- in this case that was x-session-manager, which links to /etc/alternatives/x-session-manager, which links to /usr/bin/openbox-session -- and instead runs /usr/bin/dbus-launch --exit-with-session x-session-manager.
Now that I knew that, I moved everything aside and made a little .xinitrc that ran /usr/bin/dbus-launch --exit-with-session openbox-session. And Firefox didn't crash. Dbus
So it all comes down to dbus. I was already running dbus: ps shows /usr/bin/dbus-daemon --system running -- and that worked fine for everything dbussy I normally do, like run "gimp image.jpg" and have it open in my already running GIMP.
But on Ringtail and Sid, that isn't enough for Firefox. For some reason, on these newer systems, Firefox requires a second dbus daemon -- it shows up in ps as /usr/bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session -- for the X session. If it doesn't have that, it's fine for a while, and then, hours later, it will mysteriously freeze while waiting for a network resource.
Why? I have no idea. No one I've asked seems to know anything about how dbus works, the difference between system and session dbus daemons, or why any of it it would have this effect on Firefox.
I filed a Firefox bug, Bug 881122, though I don't have much hope of anyone being interested in a bug that only affects Linux users using nonstandard X sessions. But maybe I'm not the only one. If your Firefox is hanging and you found your way here, I hope I've given you some ideas. And if anyone has a clue as to what's really happening and why dbus would have that effect, I'd love to hear from you.
Welcome Summer of Code 2013 students!
If you'd like to learn more about any of the student projects as they were proposed, you can also see the list and descriptions on the GSoC Website. But here's a list, grouped by project:

Core Python
Phil Webster, IDLE Improvements
Jayakrishnan Rajagopalasarma, IDLE Improvements

ASCEND
Ksenija Bestuzheva, ASCEND: dynamic modelling improvements
Pallav Tinna, Porting to gtk3 and GUI improvements

Astropy
Madhura Parikh, Astropy: Develop the Astroquery toolkit into a coherent package
Axel Donath, AstroPy: Extending the functionality of the photutils package.
GNU Mailman
Manish Gill, Mailman: Authenticated REST-API in Postorius/Django.
Abhilash Raj, GNU Mailman - Integration of OpenPGP

Kivy
Abhinav, Kivy: Kivy Designer
Ivan Pusic, PyOBJus

MNE-Python
Mainak Jas, Real-time Machine Learning for MEG in MNE-Python
Roman Goj, MNE-Python: Implement time-frequency beamformers

OpenHatch
David Lu, Data Driven Mentorship App
Tarashish Mishra, OpenHatch: Rewrite training missions using oppia (Training missions, version 2)

PyDy
Tarun Gaba, PyDy: Visualization of the simulated motion of multibody systems
Tyler Wade, wxPython Bindings for PyPy using CFFI

PyPy
Manuel Jacob, Implementing Python 3.3 features for PyPy

Pyramid
Andraž Brodnik, Better Debug tools
Domen Kožar, Substance D improvements

PySoy
Juhani Åhman, PySoy: Improve Android and HTML5 Soy clients

Scikit-Image
Chintak Sheth, scikit-image: Image Inpainting for Restoration
Marc de Klerk, scikit-image: Segmentation Algorithms as a basis for an OpenCL feasible study
Ankit Agrawal, scikit-image : Implementation of STAR and Binary Feature Detectors and Descriptors
Scikit-learn
Kemal Eren, scikit-learn: Biclustering algorithms, scoring, and data generation
Nicolas Trésegnie, Scikit-learn : online low rank matrix completion

SciPy
Surya Kasturi, SciPy: Improving functionality and Maintainability of SciPy Central
Arink Verma, SciPy/NumPy : Performance parity between numpy arrays and Python scalars
Blake Griffith, Improvements to the sparse package of Scipy: support for bool dtype and better interaction with NumPy

SfePy
Ankit Mahato, SfePy: Enhancing the solver to simulate solid-liquid phase change phenomenon in convective-diffusive situations

Statsmodels
Ana Martínez Pardo, Statsmodels: Discrete choice models
Chad Fulton, Statsmodels: Time Series Analysis Extensions (esp. regime-switching models)

SunPy
Michael J. Malocha, SunPy - Interfacing with Heliocphysics Databases
Simon Liedtke, SunPy: Database of local data
Tahoe-LAFS
Mark Berger, Upload Strategy of Happiness in Tahoe-LAFS

Twisted
Shiyao Ma,Twisted: Switching to Formal Parsers
Kai Zhang,Twisted: Deferred Cancellation
We had a great number of talented applicants and I only wish we'd been able to take more of them. Congratulations to those accepted and to the rest of you, I hope you'll apply again next year!
"gonna go to the place that's the best"
"When I die and they lay me to rest
Gonna go to the place that's the best"
Oy, it was hard not to laugh to that while lying still on a slab holding my emergency "get me out of here" button. (which isn't a button so much as an old-school camera bulb!)
Anyhow, other than that it was loud (as expected) but not as boring as I'd thought it would be because the noises it makes change often enough to keep me thinking about what might be going on in there, and honestly, just staying still for 20 minutes takes a fair bit of concentration for me. Plus I had the headphones and 70's rock to keep me amused (that was my choice and *clearly* it was the right one). Sometimes I had to just focus on the cowbell to stay still, because apparently that is how I work. The headphones are kind of cool -- rather than wires, they've got tubes filled with music and occasional instructions from the radiologist.
I won't have results 'till sometime next week; I presume the doctor will phone me like she did last time. I'm hoping I can get copies of the MRI and Xrays so I can see my innards, 'cause how cool would that be?
A twitter friend suggested I should make a list of #innappropriateMRIsongs, so in that vein, I give you Mystery and Crime:
Oh no, what have I done?
Oh no, what have I done?
I've got a pain in my heart
A beat that's as loud as a drum
Now, now what do I do?
Now, now what do I do?
You got to get me out of here
Before these brand new clothes aren't new anymore
And that's not even getting to the murder murder murder part that's the usual reason this is a totally inappropriate song for all occasions. (I once had to stop myself from singing it in an airport...)
I dare you all to think of more inappropriate MRI songs, but I'm going to bed!
Manga Geek Girl with Tux and Droid
I drew an image for the blog today. It was a very high-tech project, created using colored pencils and a Sharpie on cheap paper, and photographed using my Android phone, lol.
Summer of Reading and Coding
I’m pretty enthusiastic about the books I’ve lined up to read this summer. Many of them aren’t actual real books yet, they’re part of the Manning early access program (MEAP).
The first two I’m reading together because they complement each other:
- Functional Programming in Scala by Paul Chiusano and Rúnar Bjarnason (MEAP)
- Play for Scala by Peter Hilton, Erik Bakker, and Francisco Canedo (MEAP)
The next is just because it looked really interesting:
- Big Data by Nathan Marz and James Warren (MEAP)
Can you tell that I had a coupon code?
Other books lined up to go after the above are Android in Practice, Akka in Action, The Well-Grounded Java Developer, and a Cassandra book that’s a little outdated but should still be good.
Financial Modeling: What Is It And Why Is It So Darned Important?
Ah, the financial side of your business. If this is the stuff that makes your eyes glaze over (and yet you’re an entrepreneur)…you’re the person I wrote this post for.
I know a lot of us aren’t big fans of doing the financials, and I understand why you feel that way–after all, it’s certainly more fun to build a product than it is to work on the freakin’ numbers.
By the time you’ve read this post, you’ll be able to do a financial model yourself (without hiring a crazy-expensive CFO!), and you’ll know the following:
- How many sales you need every month to pay all your bills.
- How to price your products so you don’t lose money on each sale.
- When to hire your next employee (or when to quit your job)–based on the sales goals you set.
- When you’re going to run out of cash (or, alternatively, how much cash you’ll be able to pay yourself every month without going broke.)
- How much capital you need to raise (if any!)
- How to quickly assess your business every month to ensure you’re meeting the goals you set for yourself–and how to know quickly if you’re in trouble, before it’s too late.
In summary, this is the blog post I wish I had 11 years ago when I was getting started in business. Let me state this unequivocally: Building a financial model has been paramount to the success of my business. However long it takes you to build a model (and it won’t take you too long if you follow the path I’ve outlined below), it’ll be worth it. It may even save your business from going bankrupt–or enable you to quit your job or hire your next employee more quickly.
Now let’s take a look at what a financial model is and how to set one up for your business…
The Basics of Financial ModelingThe first thing you’ll want to do is to set a financial goal. How much money do you want to make with your business? (This is the fun part!)
To set your financial goal, you’ll want to have a grasp on what your personal expenditures are. You’ll also want to know exactly how much you currently bring in from your job, contracting, freelancing, etc.–whatever you’re doing right now to make money.
This is where you need to be honest with yourself. If your current salary leaves you just barely scraping by, that’s a starting point for income for your business–but realize that you’re going to need to make at least 30% more than you do now because of additional taxes and insurance.
Pull together all your expenses and examine them. Are there places where you could start cutting back now, in preparation for going full-time on your business? Cancel any subscriptions that aren’t benefiting you. Focus on paying down debt. Forego larger purchases whenever possible and focus on building up a nest egg.
Once you know what your expenses are, including taxes and any additional costs from going out on your own, you’ll know how much money you need to pull in with your business.
Getting Past Your First Failure PointBy doing this, you’ll get past your first failure point: Failing to make ends meet for your business. You’d be amazed–I’ve spoken in front of many audiences full of people who wanted to start businesses, and less than 5% of them take into account exactly how much money they need to make before starting their businesses. This is a big part of why so many businesses fail.
Be honest with yourself about how much money you need to make, and you’ll know how much to charge your clients. For instance, let’s say you need $8,000/month to make ends meet. (Don’t be surprised if you end up with a larger number than you expect–that’s part of why you’re doing this.) If you’re consulting, then, you need to be billing a minimum of $100/hour for 20 hours a week…just to make ends meet!
If that’s a lot more than you expected, you now understand why this process is so valuable.
A Financial Plan for Your BusinessNow, let’s take a look at how your business operates. Ask yourself:
- Am I billing my customers one-time, monthly, or a combination thereof?
- How many customers, at what rate(s), can I expect to gain per month?
- How many customers, at what rate(s), can I expect to lose per month? (This is called churn rate.)
For instance, in my business (a software-as-a-service company), we used to sell plans as low as $9/month. You may think you’re doing potential customers a service by offering lower-priced plans–or you may think that since you’re just getting started, it’s better to have someone paying than no one paying.
I’d encourage you to re-think both those assumptions. In our case, the $9/month customers were churning so heavily that, after factoring in server costs and support costs, we actually weren’t making any money on them. As soon as we realized this, we dropped that plan level, and now our lowest plan is a much more profitable $49/month.
It’s time to get honest again: How many customers at $9/month does it take you to make enough money to make ends meet? 500? 1,000? Then factor in that the average lifetime of most of those customers is going to be 3-6 months, at most, and that supporting 1,000 customers may require you to hire another person just to handle support tickets.
Is that the business you want to build? I can tell you, I’ve built that business twice, in two different industries (web hosting and SEO tools) and in both cases, it was not a great business to be in.
How to Make More Money with Your BusinessLet’s take a look at another tack: A consulting/software hybrid. You build a piece of software, and also do consulting with your customers. Let’s say you charge $1,000 per month per customer, and that includes some consulting on your end (you’ll need to work out the finer details, and make sure both you and your customers are clear on what your consulting does and does not include.) Now you only need 8 customers to make your monthly expenses, and with just 8 customers, you can deliver top-of-the-line service and still have time to work on and improve your software.
What about driving the value proposition sky-high, and charging each of your customers $5,000 per month? Now you’re going to have to work smart and figure out how what you’re doing will save them from hiring a full-time employee, but these sorts of business opportunities are out there. Figure it out (without having to work full-time) for just 2 customers, and you’ve more than cleared your monthly expenses. Plus, if you really are saving them from hiring a full-time employee, they’re bound to stick around a lot longer than someone paying you $9/month for something that’s not delivering that much value.
This is the basic layout for building a business that involves mostly you. Now let’s take that to the next level: Building a business for more than just yourself. If you’re paying contractors or employees, or you have (or want!) investors, you’re going to need to build a financial model.
A More Detailed Financial ModelOn the advice of an investor, I recently built a formal financial model for Whoosh Traffic. Where a simple financial model, such as the one I detailed above, often just means you take home whatever’s left at the end of the month after expenses, a more detailed financial model will show you how much money you need to raise, how many sales you need to make, and when you need to hire people to grow your business.
Our investor showed us a beautiful, detailed financial model he’d built for a couple startups he is advising. It had clearly taken him hours to build it. After doing some research, I realized I didn’t want to spend hours building my own financial model. Fortunately, I discovered Wade Myers.
Wade has co-founded, invested in, and been a director of over 25 companies. He’s also been on the other side as an investment banker and venture capital firm partner. (A busy guy!)
He built a beautiful financial model as a spreadsheet where I could just fill in the details about my business and it would automatically calculate cash flow, growth rate, and more. He was selling it online at a reasonable price–$40. I jumped on it and paid for it right away. (Here’s the link.)
When I asked Wade why he’d taken the time to develop a financial model template, he said: “I developed the financial model template to avoid the mistakes I made in my earlier startups. I wanted to address what I think is the single biggest weakness of most business plans: a detailed financial model that helps entrepreneurs and investors gain full visibility into all of the assumptions, cash requirements, scalability, profitability, and ramp up of the business.”
Knowing how many hours it would take me to build one (and since I’m not a finance major, I probably wouldn’t do a great job anyway!) I instead put the time into filling out Wade’s financial model.
I’ve posted an overview here of how I used Wade’s financial model for my business:
First, you add in what you’re selling, and how much you’re selling it for. As you edit the cells, your revenue over time changes, so you can quickly see what benefit having higher-priced plans will do, or how many plans you need to sell each month (factoring in churn) to achieve your target growth rate.
Then, add in who you plan to hire, and when. You’ll be able to quickly see what hiring a new full-time employee does to your cash position, and you’ll know as you fill in more details when you’ll be able to hire someone.
I found out some surprising facts:
- Assuming we can hit our sales targets, we only need to raise about half the money I originally thought we did.
- Our sales targets are a lot less complicated than I was making them out to be in my head: We only need to sell 17 new accounts a month, for instance, to grow with little additional capital. This feels “doable” to me, and even more importantly, it’s concrete: We know exactly how many accounts we need to sell and how much to charge to hit our numbers.
- Hiring one software developer for every 200 customers, vs. 1 for every 100 customers, makes a huge difference in your profitability over time!
You’ll discover your own surprises as you go over your financial model, as well.
Getting Your Own Copy of the Financial ModelBy the way, I paid $40 for this (and frankly, it’s worth 10 times that.) I asked Wade if he could give you a special deal, though, as you’re one of my valued readers. He agreed–so when you purchase his financial model, use coupon code ERICABIZ for $5 off! That’s a true bargain, and this is a must-have if you plan on building a high-growth company, or you want to quickly see how changing prices affects your bottom line.
His financial model has templates for software-as-a-service businesses, consulting companies, and product sales companies. It even takes into account if you sell your products through a marketplace (like Apple’s app store.) It’s a must-have for your business.
Take a look at Wade’s financial model today for your business. By the way, our investors loved this, too, so this is definitely a must-have if you’re raising funding, or planning to. As a bonus, forward your receipt to financialmodel@erica.biz by June 30, and I’ll send you (at no additional charge) an even more detailed, step-by-step video and transcript on how I built my financial model using Wade’s spreadsheet! That’s only if you order by June 30, so head on over right now and invest in Wade’s financial model.
I hope I’ve given you a lot to think about as you build a growing, profitable business!
By the way: My upcoming “Art of Email” course (launching this month!) will have a whole bonus series on finding and contacting investors, so if you want more details on that, make sure to enter your email address in the box below and join over 1,000 others who have signed up to find out more! (Remember, my “Art of Email” list is different from my primary email list, so definitely add your email address in the box below if you want priority access and some awesome free stuff, as well.)
Copyright © 2008This feed is for personal, non-commercial use only.
The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:
ca01ca7aefbdcac4b8bbfff1994a3b42)
Stop Emacs from invoking a browser
After upgrading my OS (in this case, to Debian sid), I noticed that my browser window kept being replaced with an HTML file I was editing in emacs. I'd hit Back or close the tab, and the next time I checked, there it was again, my HTML source.
I'm sure it's a nice feature that emacs can show me my HTML in a browser. But it's not cool to be replacing my current page without asking. How do I turn it off? A little searching revealed that this was html-autoview-mode, which apparently at some point started defaulting to ON instead of OFF. Running M-x html-autoview-mode toggles it back off for the current session -- but that's no help if I want it off every time I start emacs.
I couldn't find any documentation for this, and the obvious (html-autoview-mode nil) in .emacs didn't work -- first, it gives a syntax error because the function isn't defined until after you've loaded html-mode, but even if you put it in your html-mode hook, it still doesn't work.
I had to read the source of sgml-mode.el. (M-x describe-function html-autoview-mode also would have told me, if I had already loaded html-mode, but I didn't realize that until later.) Turns out html-autoview-mode turns off if its argument is negative, not nil. So I added it to my html derived mode: (define-derived-mode html-wrap-mode html-mode "HTML wrap mode" (auto-fill-mode) ;; Don't call an external browser every time you save an html file: (html-autoview-mode -1) )
Poor impulse control
Okay, I guess I can live with that. ;) It's awesome being an adult with disposable income to spare!
The game in question was, incidentally, a Dungeon Siege pack (It's on sale for another 15 mins or so). My sister and I enjoyed the first two games in part because if you set yourself to follow another player, it treated you as a minion and basically played the game for you. Many people thought this was a bad thing, but Susan and I thought it was awfully convenient for the purpose of getting a cookie. The 3rd game got such terrible reviews that we never bought it, but... $5! For all 3 plus an expansion! Even if it just saves me finding the discs for my copies of the 1st two games, I'm willing to pay that. And let's be honest, we even kind of thought the dubious Dungeon Siege movie was fun, so we'll get $5 worth of enjoyment out #3 of this one way or another.
Open Source Sysadmin: Reorganization of the OpenStack Infrastructure Docs
In January I joined the OpenStack Infrastructure team, which manages the continuous integration system for the project, as well as several other applications and sites that the project uses on a day to day basis. My favorite part about all of this is while I’ve spent several years using open source software in my sysadmin day job and running a couple servers hosting various Ubuntu community resources, I’ve never actually done the actual systems administration itself in an open way.
In the OpenStack project, it’s all done out in the open![1]
The CI tools we use are all open source, the puppet and other configurations we have are all hosted in public revision control (see here) and any changes submitted are made by the same process all other changes in OpenStack are made. They go through automated tests in Jenkins to test applicable syntax and other formatting and the code changes submitted are reviewed by peers and approved by members of the infrastructure team. This has made it super easy it is for the team to collaborate on changes and offer suggestions (much better than endless pastebins or sharing a screen(1) session with a fellow sysadmin!), plus with all changes in revision control it’s easy to track down where things went wrong and revert as necessary.
Last week my colleague James E. Blair spent time reorganizing the documentation for the OpenStack Project Infrastructure. James wrote that the goal of the rewrite was to “to re-orient the documentation as an introduction for new contributors and a reference for all contributors.”
The Project page now links to all of our team resources, from IRC channel (#openstack-infra) to bug tracker.
Each Major System that is maintained by the team now has a page that gives links to all of the current hosts the section of the project is associated with, the puppet configuration files required to make changes to it, links to actual project pages for the resource being used and where to report bugs for it. As an example, check out the new Logstash page that Clark Boylan recently rewrote.
The coolest part about all this is that while the OpenStack infrastructure has always been out there in the open, this all really does make it easier to get yourself familiar with the project infrastructure and able to make small edits here and there in your area of expertise, whether it’s fixing some CSS, adding service to puppet, patching Zuul or updating the very documentation this post is about.
Interested?If you’re not yet involved with OpenStack, check out the How to Contribute wiki for how to get set up to make contributions to the project.
Once you’re set up, visit the Gerrit Workflow wiki to learn how we use git-review to submit changes for review.
Then have a browse through our shiny new OpenStack Project Infrastructure documentation or our low-hanging-fruit bugs to find something you want to work on and submit a patch!
We could also always use help with code reviews, specifically from folks with Python, Java and Puppet experience, check out Anita Kuno’s great post: Reviewing an OpenStack Patch. Most of what we work on is prefixed with openstack-infra/ in Gerrit.
And feel free to drop by #openstack-infra on irc.freenode.net and ask anyone (I’m pleia2 there) if you want some help getting up to speed or have questions.
[1] Well, almost all in the open. There are some passwords and other authentication that we store in Hiera, but the type of data we store in it is well-documented in our main site.pp.















