Saturday, June 08, 2019

The Blue Dawn Website

The Blue Dawn is a volunteer collective that connects Bahujan people with cast-aware mental health therapists, and sometimes with supporters who will sponsor sessions directly. I recently built them a WordPress site using Roots’s Bedrock and Timber/Twig templating.

This project started because a friend reached out asking if I’d speak with a friend of a friend who was working on a new nonprofit and needed a website. I connected with TBD’s founder, Divya Kandukuri, and spoke about their needs. They didn’t neet much – just a site with a CMS and some forms. I got the sense that Divya was supremely competent and had picked a really good intervention point: directly connecting people with resources that can help them in their time of greatest need, raising awareness about one of the most vicious forms of oppression, and helping those affected build community resilience among those affected by it.

How could I not get involved with such a great project! Besides, I was taking some extra time off work anyway, and I am trying to find more ways to be directly useful to smaller organisations rather than always (as I do at my day job) working with larger scale tech systems for more professionalised organisations.

Check out the repository here

We have been using Bedrock at work so I started there. The other WordPress site I maintain uses Sage, so I used that to deploy the first draft of the site at thebluedawn.org. But the design I wanted wasn’t easy to execute even with Sage’s relatively simple (but still very WordPress-y), so I added the Timber plugin and started porting the theme into Twig templates like this one.

The styles are BootStrap 4 with very little customisation. The WordPress server is my own Digital Ocean box where I host another WP site. And Cloudflare manages the DNS and provides its free Universal SSL. Since I already had the server, the site is basically free to run for the foreseeable future (which is important for a volunteer collective that doesn’t have funding).

Left to do:

  • Replace the remaining Blade templates with Twig templates
  • Different index pages for different post types, like Media/Press
  • WP Admin control over the content on the Home page or in the Banner. Right now it’s just an index of recent posts, with a lot of hard-coded content before it, which means it’s only a good solution as long as I remain actively involved and available to make updates.
  • Figure out how to better control plugins and mu-plugins.
  • Establish some proper seed data to make the site easier for others to develop on.


Monday, December 17, 2018

Radiyr: If an RSS Reader Had a Baby with the Radio

It's an app, like Google Reader morphs into the morning news hour on the Radio. Take RSS feeds, your Medium follows, and any podcasts you like. Run text-to-speech on the stories (or on platforms like Medium where sometimes there's an audio accompaniment built in, just grab that). And play the morning news in audio format, using your favorite sources, but in a comfortable audio format so you can listen while getting ready for the day or getting on the subway. Does this exist? An RSS-feed-TTS-morning-news-app? If we were coming up with one today... I would call it... Radiyr.


Friday, October 12, 2018

Coming Out Again: Bisexual Edition

It was National Coming Out Day yesterday, so I’m coming out… again. And here’s why.

I used to call myself “queer” because I thought bisexual implied a binary, but after studying my history a bit more I’ve come to feel that the spectrum of bisexuality has always been diverse, with people identifying that way who love men, women, nonbinary and intersex people, drag queens and crossdressers, gender-questioning and fluid, and agender people alike. Many of the gender-fluid/enby people I know identify in some way with the term bisexual, so clearly they’re not all worried it’s forcing a binary, hm?

In this light I came to feel that, for me, using a more vague term like “queer”, or a newer term like “pansexual” or “polysexual” would kind of be a cop-out, a bit like caving to my own internalized homophobia/biphobia, and would contribute to the bi erasure that makes LGBTQ spaces feel less welcoming for bi people like me. (If you have your own personal reasons for identifying with terms like these, that’s cool; I’m just talking about my own journey.)

I think ultimately, I just didn’t want someone else’s label applied to me, with baggage and connotations I hadn’t entirely signed up for and wasn’t ready to embrace. But – what a privilege! To just decide (or pretend) to live outside the system of oppression and control, rather than join in with my comrades, enjoy their companionship and yes feel a bit of the burden they carry. Isn’t that what family and community are about? You don’t always get to choose whose struggles become your struggles. They just turn up at your doorstep sometimes, and you invite them in.

This is not my natural way of thinking. For one, I was raised in a highly individualistic society, and for two, as a cis white dude I was basically never forced to accept or live with the consequences of anyone else’s labels. I hate to be “pigeon-holed”, having lived a life where in almost every respect I was permitted to define my own identity and reject externally imposed boundaries. To this day, I still really hate it and get really agitated if you mislabel one of my flaws – I will fight you over the difference between “sometimes has trouble focusing” and “sometimes focuses on the wrong things” … (and then feel really silly about it later).

But this year, I just kind of… shook it off. I guess I had a few experiences that really made me feel at home in an LGBTQ space. I realized that in the process of rejecting the “label” I was rejecting my place in the community. This year I shed that fear and apprehension and started identifying as bisexual, and let me tell you: it has been really nice. I’ve been able to relax and feel at home more in LGBTQ spaces and at LGBTQ events, I don’t feel like an imposter or an interloper, I’m less worried someone’s going to come along and ask to see my “queer card” – not simply because I’m embracing the term bisexual, but because I just know that life is too damn short to keep myself at arms length from people, from communities, where I can understand and feel understood, where I can learn to be comfortable in my own skin and reconcile this crazy fascist world we live in with the need to be really truly free.

So here I am. Happy National Coming Out Day everyone, I’m bi.

Bisexual Pride Flag


Thursday, Dec 21, 2017

My mixed (but mostly bad) feelings about Star Wars: The Last Jedi

I loved how the new Star Wars defied old tropes, weaved new themes about the Jedi and the Force, and had important character arcs that weren’t the sort of typical (white dude, with a couple tokens) cast that most movies present to us. My problem was that I just didn’t think it was a very good movie in terms of telling a well-constructed story that moved us along, made sense, and created character interactions and character development that track to the developments in the plot.

When you look back at the movie, you find that major chunks of the action could have been cut out entirely without affecting the plotline, which kind of cheapened whatever character development happened during those parts. Much like my issue with Rogue One, a lot of the drama was about uncertainty between protagonists – which can be great if done well, and if it heightens the tension as you lead up to some climactic moment – but seemed too often to lead to some kind of anticlimax. When two opposing forces bring us to edge-of-your-seat suspense and the real fear about what might happen if something goes wrong, that’s drama! When two opposing forces just kind of cancel each other out and negate whatever has been happening for the last few minutes (or last hour), that’s not good filmmaking.

Some of the characters and character developments came across this way too – you have conflicted or contradictory characters, not because the person is an “antihero,” or a “bad person with a heart of gold,” or they committed a crime to feed their family, or due to past traumas they are now visiting traumas on others to achieve safety, or because they’re overzealous in pursuit of the good, or they’re the scoundrel who saves the day anyway… but just because we weren’t sure if we should like them a lot. Or maybe for a moment we liked them and then later changed our minds, or vice versa. Simply creating characters that aren’t all good or bad isn’t particularly dramatic – you have to create conflict and allow that conflict to play out in the plot of the story! Here are a couple of examples from previous Star Wars movies:

  1. Vader is bad, but he loves his son, so he doesn’t kill him and eventually betrays his master to save him. This character conflict leads to conflict in the plot and results in moments where the plot arc changes dramatically because of a change in the character’s resolve or his loyalty. The conflict in Vader is not just indecision but acting in one direction and then acting in another.
  2. Lando Calrissian is an old friend of Han’s, but he has lost his sense of loyalty; under duress he betrays our heroes, but when he realizes there’s no point trying to placate the Empire he decides to save them. Lando’s conflict is also very important for driving the plot forward. And the discovery that Lando has betrayed them isn’t just a change in course, but actually rewrites our understanding of what had been happening during the current story line. As a result, we the audience also feel betrayed and lied to because we thought our heroes had found a sort of safe harbor.

But the character conflicts in The Last Jedi often take the form of “the audience isn’t 100% sure how we feel about someone”, rather than these reversals that truly drive the plot forward – or if they do, we’re not emotionally invested in the relationships and the values that are being betrayed so much as watching the plot take a left turn.

There were a few times I really felt the Star Wars tingles running down my spine. But to be honest, some of the jokes and the attempts at humor really broke it for me. Some moments that should have been sacred were interrupted with what seemed like an attempt at Guardians Of The Galaxy-type lightheartedness. Just when I thought I was getting into it… nope. The Jedi are a religious order 1,000 generations old, but this movie didn’t really seem to care, and I really never got close to feeling the sense of wonder I experienced as a boy watching Luke channel the force for the first time. So there was no Jar-Jar and barely a peep from C3PO; great. What we got instead is the Last Jedi in the galaxy cracking jokes during Jedi training (which, I might remind you, doubles as induction into an ancient religious order). Is this any better than Jar-Jar and C3PO? I honestly can’t tell.

All in all, I finished the the movie pretty bored. I’m happy that we have some story lines where Black and Asian characters – and plenty of women – have their own worth, their own authority, their own meaning. But I’m left feeling like… what a low standard we have set for ourselves, that in 2017 I have so few sci-fi and fantasy movies to choose from that we have to choose between well-crafted storytelling and characters more representative of the world we live in.

Update: Here’s an excellent article about one of the interesting trope-defying character arcs of The Last Jedi. (Lots of spoilers in that article.) It presents a good counterweight to one of my concerns about “characters we’re just not sure about.” I present it here for a few reasons:

  1. It’s a great illustration of this idea that diversity and representation in casting and storytelling isn’t just about some kind of quest for political correctness. In this case, we get to see an interesting character who is not quite what we expect, and not quite what one of our heroes expects either, contributing to their character development arc. “Diversity” is really just good storytelling.
  2. The piece of the story here actually kind of speaks to one of the concerns I have with the film: I like the thematic thing, but I thought the craft was off. I didn’t love the acting; I didn’t think the relationships this character apparently had with other characters in the film were shown or explained in a way that was compelling on an emotional level, and so the way this person’s story worked out didn’t hit home for me as much as I wish it had.
  3. One critique on the film that has been nagging at me more and more since I first wrote this piece is on display here: There actually is a deep, emotional story to be told, but they didn’t tell it. The story was great but the screenplay left a lot on the table. The way this article describes friendships and emotions and the characteristics of the different players in the film is far more compelling than what actually played out of the silver screen.


Thursday, Jan 5, 2017

On Obamacare, and Priorities

Before Obamacare, lack of health insurance killed 44,000 Americans per year.

I know some people feel personally aggrieved by the Affordable Care Act; they feel that their situation, or that of their loved ones, got worse because of Obamacare. They have a right to be hurt and upset about that. And it is impossible for me to look any one of them in the eye and say, “The struggle your family went through was necessary to save those other people,” however much I wish I could make them believe it.

A chart showing the rate of Americans without health insurance declining sharply after the Affordable Care Act took effect

But before Obamacare came into effect, roughly a half a million Americans lost their lives, just since the year 2000, because they didn’t have health coverage and couldn’t afford to see a doctor. Half a million people. A small town, every year. A football stadium, all dead. Year after year. Not from fire and twisted metal, but from preventable and treatable diseases, for going without regular checkups and the healing touch of a trained nurse or physician.

Think about the great lengths we have gone to since the War On Terror began, the enormous sums of money we have devoted to this cause. And then think about a problem 100 times as deadly whose solution cost half as much–a solution found in healing not killing, in solidarity and support for our American family.

If we treated health as an integral part of security and allocated resources to match the enormity of the threat, we would have enough money for Obamacare, and a lot more. We could even lower the premiums and the copays–to zero, actually, which is what the fight should have been about from the start.


Thursday, June 16, 2016

How Democrats Managed to Fuck Up the Gun Control Filibuster

It is making my stomach turn to have to say this, but:

I absolutely cannot support the idea of using the terrorist watch list as our way of regulating access to guns.

It’s not just a little off, it’s downright wrong. It legitimizes the existence of this list, which has no transparency or due process, no judicial oversight, and whose existence the ACLU opposes. And worse, it’s a cowardly attempt to “get something done” that still relies on the use of [brown] terrorists as the political and rhetorical boogey-man.

I love, love, love, that someone in Congress is finally standing up and disrupting business as usual to make something happen on gun regulation. I welled up when I first saw the headlines. I was so proud of having helped Chris Murphy (in my own small way) get elected to the Senate in 2012.

But that feeling quickly wore off when I read what was actually happening. Even on this issue, which should be a slam dunk for Democrats right now, it happens that the party that’s ostensibly on my side is doing things I find to be not just imperfect but harmful and counter-productive. Taking shortcuts with civil liberties and racial animus should never be acceptable strategies for getting a bill across the finish line. Shame on the Senate Democrats for their opportunism, for this moral and political cowardice. And now we’re going to have a facebook feed full of liberals and progressives vehemently defending this approach in terms of both the policy and the politics.

I’m not against compromise, but compromise means you put up a bill to ban a lot of guns and eventually say yes to a deal that just bans some guns plus high-capacity mags. It doesn’t mean that you pick an approach that appeals in one part to your base and in another part to the worst instincts that feed and strengthen your opponents over the long-term.

This seems to be the Democratic way of doing things – validate the bad worldview to get the good result. (And it’s seen as a virtue! a sign that one knows how to Get Things Done™.) But it’s a recipe for a generational backslide like the one we’ve been experiencing all my life, and it does nothing to build the kind of political culture and meaningful narratives that will help us when the next Iraq War comes up for a vote, or the next Welfare Reform, or the next Crime Bill. The GOP is a huge and active driver of culture in their own way; on the left, social media and hollywood and pride parades and #BlackLivesMatter drive culture – and Democrats just keep sucking.


Thursday, September 17, 2015

Unnamed Poem Written Far From Home

roof shingles
not mine
but Someone's
home and comfort
not here
but Somewhere
there's peace and quiet
not for all
but For me
foreign streets still welcome
not loving
but Relenting
to power and force
and Will to dominate
these parks and harbours and proud others
not strategic allies
but Sisters and brothers We see
when we look believe
when they speak give up our
day Off to fix the leaky roof
or Give up our distance and our
exclusion and our comfort
so They may know the
peace We covet because life is short and memory is long--
or life is long and memory is short--
who can remember?
we give up our comfortable beds to
another or for the stepping out we have
chosen not to take, chosen not
to See the textures, the wrinkled
faces and cracked shingles of
brothers and sisters We forgot


Sunday, August 09, 2015

Pramila Jayapal on Seattle's BLM protest at Bernie Sanders Campaign Event

This is a repost of Pramila Jayapal's statement on the Black Lives Matter protest at Bernie Sanders's campaign event yesterday in Seattle. You can read, like or share the original here.

Many people have been emailing and asking me for how I am thinking about what happened yesterday at the event on social security and medicare, when some protestors identifying as Black Lives Matter got up on stage to challenge Bernie Sanders on race and racism, and ended up shutting down the event so Bernie could not speak. I'm struggling but in the spirit of community, here's what comes to mind. First, I want to give a huge shout out to the amazing leaders who worked for months and months to organize the event: Robby Stern and PSARA, Social Security Works Washington, Washington CAN, Burke Stansbury, and so many more. This was a huge event to put together, and their determination is what ultimately got Senator Bernie Sanders to Seattle in the first place. The rally was also packed--maybe around 5,000 people--and people stood in the hot sun for a couple of hours, engaging actively and cheering on the incredibly wide range of speakers the coalition had put together. I was proud to be the speaker just before Bernie was supposed to speak. Watching what unfolded made me heartbroken. I have so many somewhat jumbled thoughts--here are just a few.

1) This is one small result of centuries of racism. As a country, we still have not recognized or acknowledged what we have wrought and continue to inflict on black people. The bigger results are how black kids as young as 2 are being disciplined differently in their daycares and pre-k classes. That black people are routinely denied jobs that white people get with the same set of experiences and skills. That black people--women and men--continue to die at the hands of police, in domestic violence, on the streets. That black mothers must tell their children as young as 7 or 8 that they have to be careful about what pants or hoodies they wear or to not assert their rights if stopped. That this country supports an institutionalized form of racism called the criminal justice system that makes profit --hard, cold cash--on jailing black and brown people. I could go on and on. But the continued lack of calling out that indelible stain of racism everywhere we go, of refusing to see that racism exists and implicit bias exists in all of us, of refusing to give reparations for slavery, of refusing to have our version of a truth and reconciliation process--that is what pushes everything underneath and makes it seem like the fault is of black people not of the country, institutions and people that wrought the violence. That is the anger and rage that we saw erupt yesterday on stage. But it's not the problem, it's a symptom of the disease of unacknowledged and un-acted upon racism.

2) When the disruption first happened, the crowd (mostly white) turned ugly. It's hard to say what is the chicken or the egg. Some of it may have stemmed from the protestors calling the whole crowd racist. Some of it was from annoyance at the disruption. Some was probably from deep disagreement about tactics in a movement to get attention to an issue. Some was from deep disappointment because people had stood in the hot sun for hours to hear Bernie. Whatever it was, the conversations that ensued--the name calling of white and black people against each other, including some people calling blacks who didn't agree with what was happening racist--were so painful. I was in the speakers tent and Pam Keeley alerted me to two young black girls (Gina Owens grandchildren) who were weeping, they were so scared, so I went over to comfort them. We stood with our arms around each other, and in some small way, that gave me the greatest sense of doing something tangible--to be with people I love, assuring them they would be safe, and that none of us would ever let harm come to them. After the protests, several people came up and wanted to talk. Many were furious--some white people said they no longer support BLM. Others said they do support but this erodes their support. Some said outrageous things from anger. Others seemed befuddled. Some understood. People will have to work this out for themselves, but as we all do, I hope that we can open our hearts to all of the pain and suffering in the world and be as compassionate and kind as possible to each other so that we can also heal as we learn and listen.

3) I don't have any answer on what is "right." Bernie Sanders was a guest in our city--invited by a multiracial coalition to speak on some very important issues. Enormous amounts of work went into yesterday's event and it was so important to talk about preserving and expanding Social Security and Medicare. None of the papers today are covering those issues, because they were eclipsed by what happened. That's not necessarily "wrong"--it just is what it is. But here's what I would have loved to have happen: after the protestors were able to get the mic and say their piece and have the 4.5 minutes of silence for all the black people who have been killed, I would have loved for Bernie Sanders to take the mic and respond. And also to speak about Social Security and Medicare too. Here's what I would love even more: for the Sanders campaign and BLM nationally to sit down and talk about an agenda on racial justice that he can use his presidential platform to help move. Imagine rolling out that agenda and inviting black people to talk about it on stage with him. Now that excites me.

4) I had not yet endorsed Bernie Sanders (and still have not), although I was incredibly excited about his candidacy. One of the primary reasons is because I wanted to know more about his stands on race and racism. I asked the campaign for some time to discuss this with him, and he did very graciously make some time for me to have a short conversation with him. What I got from the conversation is that he knows he comes from a very white state and he's a 70+ year old white guy. He knows that running for President, he must now speak to voters who are very different from those in his state. He IS deeply committed to equality on all counts but his primary lens for all of his work--and a HUGELY necessary and not-often-enough-acknowledged lens--is economic. He is a truth-teller on economic issues in a way that no other candidate is. he gets the connection between large corporations, elections, and income inequality. He does understand the problems of the criminal justice system and I fully believe he will work to change that if elected. But the deeper comfort with talking about race and racism is harder. As Mayor of Burlington, early on, he endorsed Jesse Jackson for President and Jackson went on to win the state. He was active in the civil rights movement. But more than that, he is someone who has fought for so many of the threads that connect our movements. He has to learn to talk about racism in that way, to connect his ideas on education, economics, incarceration, and race. As I said when I had the honor of introducing him at his evening rally, he is in a unique position to do so. And we are in a unique moment where we crave that leadership in a Presidential campaign. I told him in my conversation with him that he needed to talk head on about institutional racism--he said he agreed and he would do it in the evening. And he did--to an enormous, cheering crowd of 15,000 people. That's a huge platform for our messages. There's more to do and learn for sure, but is any one of us perfect? The most we can ask for is for someone who listens and cares deeply, who is trustworthy, and who will do what he says. I know I learned a lot in my campaign and I will continue to grow from listening to people's voices. I believe Bernie Sanders is growing too--and I hope (and yes, believe) that we'll look back on this and see his emergence as a leader who brings our movements for economic, racial and social justice together in a powerful way.

5) Here's what I am trying to deeply think about: How do we call people in even as we call them out? As a brown woman, the only woman of color in the state senate, often the only person of color in many rooms, I am constantly thinking about this. To build a movement, we have to be smarter than those who are trying to divide us. We have to take our anger and rage and channel it into building, growing, loving, holding each other up. We need our outlets too, our places of safety where we can say what we think without worrying about how it's going to land, where we can call out even our white loved ones, friends, allies for what they are not doing. But in the end, if we want to win for ALL of us on racial, economic and social justice issues, we need multiple sets of tactics, working together. Some are disruptive tactics. Some are loving tactics. Some are truth-telling tactics. Some can only be taken on by white people. Some can only be taken on by people of color. Sometimes we need someone from the other strand to step in and hold us up. Other times, we have to step out and hold them up. Each of us has a different role to play but we all have to hold the collective space for movement building together. That's what I hope we all keep in mind and work on together. It's the only way we move forward.


Friday, June 05, 2015

Easy WhatsApp Shares

Today I finally got around to trying out a new technique I heard about a couple weeks ago -- and wow, I wish I had known about this earlier. By placing a simple link on your website, you can give your mobile and tablet visitors the ability to instantly share your page with friends using the popular WhatsApp messaging service.

If you're on a WhatsApp-enabled mobile or tablet device, click this link to try it out. It's that simple. No Javascript, no OAuth, no wrangling of permissions.

Here's how it's done:

  1. Add this code to your page:
    <a href="whatsapp://send?text=[[ URL encoded
     message goes here ]]">click this link</a>
  2. Celebrate.

Aside from the incredibly easy setup, one of my favorite things about this is the seamless user experience: the link opens up my WhatsApp conversations list, showing the friends I talk with the most and am the most likely to want to talk to about the action I'm sharing.

Perhaps even more promising, this approach has the potential to spark real conversations between your members and their friends. It's not a broadcast medium like Twitter or Facebook, so you'll probably only get one impression out of it, but it's likely to be orders of magnitude more impactful than any impression from those other networks -- and engaging in real dialogue could do a lot more to galvanize your members than simply getting them to start a thread on Facebook.

For something so easy to deploy, it's worth a test, right?

Love this idea? Click here to share it with your WhatsApp friends.


Sunday, May 24, 2015


App idea: CanvassStarter. Pick the neighborhoods your progressive organization wants to canvass; enter a question or two, and a bid for price per door.

Three or four organizations all want to canvass in the same place? Great--now we can all afford to do it! Not all their target voters are the same? fine by us! We'll use different scripts for those voters, and the increased target density will still make the canvasses cheaper for all involved. This leverages not just economy of scale, but economy of density.

CanvassStarter is especially geared towards relatively low-budget organizations looking to build a bridge between online and field (such as by building up a local organizing chapter around a high-energy moment or event), and for organizations who have a loose sense of others they'd want to partner up with, but who find it unwieldy to assemble coalition efforts due to the logistics field organizing and the complexity of ad-hoc coalition-building across different target geos and demos. So in this sense, it's like KickStarter for canvassing a neighborhood. And if you're one of the funders, your question(s) get asked.

We'd want to partner up with proven canvass-managing organizations, and there'd be some work to figure out what options are needed for neighborhood-based and voter-based bid options (like rolling our own Google Adwords bidding system, but not in a competition model, but then sometimes on a script-level basis in a competition-for-placement model). So the technical and logistical challenges are real, but mostly the service would attempt to stay lean and solve a lot of financial, political, and networking problems for highly aligned but distinct progressive advocacy organizations.


Wednesday, May 6, 2015

Snoogle: For When You Totally Came Up With That First

Snoogle(tm) is a search engine that indexes all the hypothetical stuff you've ever hypothetical invented and tells you (and your annoying friend who won't believe you) whether you totally came up with that thing first that someone else just brought to market.

Snoogle searches your chat/Facebook/Twitter/email history and notifies you when it detects "inventions" you mention in conversation or in public places. If the invention was only discussed in private, Snoogle prompts you to share your idea in public with a nice official-looking "copyright" symbol so no one can scoop you. Then whenever you're trying to convince people you came up with something first, you'll have sources.

The idea was inspired by the time I invented Snapcash on Facebook and then Snapchat came out with a very similar product under the exact same name about month later. (I'm posting it eight months later because I didn't have Snoogle yet.) As a kid, I also co-invented Second Life and Mike's Hard Iced Tea -- but alas, no Snoogle. So a couple other companies took those ideas and went and "built them" and "marketed them" and "sold them" and they got all the credit!

I'm not looking for royalties or anything, I just think it'd be nice if other people knew me as the guy who came up with SecondLife and Snapcash. That's all I'm saying. In fact, this is an important rule of Snoogle: Snoogle is only for use in arguments with friends or as a source for stories; if we catch you using it to sue anyone, we'll take your account away and steal all your ideas.

Comment below and I'll let you know when it's ready for beta testing.


Tuesday, May 5, 2015

Wanted: Conditional Formatting in Collaborative Text

My feature idea: conditional formatting rules in Google Docs -- not spreadsheets, text documents. Useful for highlighting names of colleagues who are owning certain tasks in a project document, or for highlighting tags like "critical" or "completed".

Right now it's surprisingly difficult to tell the application, "find every line that starts with 'DONE' and format that line as strikethrough", or "Find every time my boss's name is mentioned and highlight it with bright colors." -- I can turn it into "==!!== NAME ==!!==" with Find & Replace, but I can't set its font size or background color and I can't enforce consistency of that rule throughout the document, which is a problem if other people are editing it and shouldn't be troubled to follow my crazy formatting whims.


Wednesday, April 29, 2015


Swipe right on resumes.

With Employr, job seekers and posters get a quick look at what the other has to offer, and match via the time-honored method of swiping right and left. If you both swipe right, you can chat and set up an interview!

Tag yourself or your hiring organization with different interests, skills possessed or desired, and then swipe left or right at potential matches for employment. If you both swipe right, message them and set up an interview. Geographic filters allow for hiring in offices, remotely, or for small community organizations and local businesses. Resume previews show only a summary of skills and experiences, so the initial review process is equitable and un-biased, with no HR overhead.

Local small non-profit owner / my neighbor says:

I would definitely use Employr to help for hiring. I run a small non-profit that puts on dance classes for kids in the neighborhood and performs at festivals around Brooklyn. I post online, do a lot of word-of-mouth, and put up flyers when I need to hire for a position or a particular event. I would love to be able to set interests (like "dance, nonprofit, local") and set the range to "5 miles", and find good people committed to the community. Sounds amazing!

Well, sorry, it's not amazing yet, because I haven't built it. But I think it's a cool idea and maybe I should make it. At the very least, now it has its own project page.

Font is Kreon


Monday, May 26, 2014

Under the Hood

This site is pretty simple: just HTML and CSS, with help from Github Pages, Jekyll, Foundation, SCSS, and Disqus. This post has a bit about why these tools, and why I think they're a good fit for this project.

*edit:* updated to reflect new url https://snook.pub

GitHub Pages

My favorite way to start building a new site--it's free, it's easy, and it's already integrated with my git repo. If you want to start putting HTML, javascript, and CSS up on the web, GitHub Pages is the quickest way to get started. This site is just a GitHub repository, which gets served up as static HTML.

The site has no Apache config to worry about, no URLs.py, and no database, with all the hosting burden having been moved onto Github. It's free and virtually uncrashable. You don't even have to log into a server to deploy changes--just git push and let GitHub Pages do the rest. If you're not familiar with Github Pages, check it out.


Jekyll is a tool for creating static sites, which is integrated into GithHb Pages. It allows you to use Liquid templates, which are almost identical to the templates I'm used to in Django and Flask, and the combination of Jekyll and GitHub Pages results in a pretty dreamy workflow:

  1. Serve the site locally with jekyll serve --watch.
  2. Work on the site. Refresh browser window to view changes.
  3. When I'm ready to publish, commit and git push.

The --watch flag tells Jekyll to redeploy the site each time it detects that you've saved changes. GitHub pages takes care of the post-commit hook that tells Jekyll to recompile and redeploy the site whenever I push changes. And when a project grows to more than just HTML/CSS scaffolding and requires a real web application behind it, the familiar template format makes that a smooth transition.


I really can't say enough good things about Foundation. I don't love to write CSS, or feel terribly good at it. I don't like worrying about whether my paddings have caused my paragraphs to overrun, or second-guessing the way I've set up my .panel style. Foundation, like its big cousin Bootstrap, provides an easy-to-use grid and utility classes, with simple JavaScript-y add-ons like dropdown menus and modals.

My preference for Foundation isn't based on anything terribly scientific; I just find it easier to use. The markup just makes sense to me, and feels less repetitive. It leaves me needing to write less custom CSS, and I rarely if ever find myself writing code to fight against Foundation's defaults or the assumptions that went into the design of their grid.


Okay, I have to confess: I'm really not writing any less CSS than I was before I was using SCSS. The fact is, I have been meaning to learn SCSS/SASS or LESS for a while, so I finally did it, thanks to Foundation's incredibly simple instructions.

This site's styles are so simple, I may decide to revert back to old-fashioned CSS. The current arrangement just adds a step to my workflow (grunt build at the command line every time I update the stylesheet). That said, I'm excited to keep learning SCSS and to try out some of its more advanced features, so I'll probably put up with the extra step for now.


What good is a blog without comments, right? And how are you going to handle comments on a static HTML website with no server or database? Well, that's where Disqus came in. It was really a breeze to install. Sign up for an account; they email you the embed code; paste and go. I think some people object to Disqus (some of them liked it before it was cool), and I'm sure everyone finds it to be generic--but it works! And it's free! And it took me all of five minutes to install!

If you have a problem with that, I'd like you to read one of my favorite tweets of 2014:

More To Do

This is definitely my favorite stack to build a website on, so far. As I build out the "projects" section, I may end up with project pages that really want to be more like "apps" than "pages", in which case I'll have to re-examine my priorities and the reasons that make this the ideal stack for me, for this site, for now. But for the time being, this is working just fine--it's fast, it's free, and it's fun!


Sunday, May 25, 2014

The Space Party

A radical socialist libertarian pacifist futurist party, dedicated to the peaceful exploration of space in the name of all humankind.

So far The Space Party mostly exists as:

  • Members of a project on CoActivate.org. The coactivate project has about 8 members and a wiki.
  • There is some sort of website happening at TheSpaceParty.org.
  • The Facebook page has over 4,000 people on it!
  • And there's a fun but sporadic Twitter feed, @SpacePartyUSA.


Friday, May 23, 2014

Hello World

Hello World! This is a post. This site is getting real, and this post is its introduction. Welcome to it, by the way, and thank you for coming to see my website. You'll find posts, projects, and, before too long, a contact form to get in touch with me if needed.

I'm building this site for a few reasons. First is that I am a web developer (sort of) and so I should have my own website. Second is that I find longer-form writing to be a relief and a joy and I want to encourage myself to do it. I have a few hobby projects now and I like to talk about them, or at least I imagine when I finish one of them I will want to talk about it.

It's with that in mind that I've set up my site, with this sidebar on the left here, to show the categories, "Posts" and "Projects". Posts will likely be much more numerous than projects, and some posts will be associated with a project. Right now there are no projects to list, but I suppose I will throw up a page about the Space Party, which is a free-time project of mine, and then I will show you all what I mean.

Edit: Now you can see what I mean.