feminist / engineering shopfront brainstorming

Current plan: Find a venue for a pop-up shop, 2 to 5pm on Sundays, somewhere near Central Square or other t-stop (or somewhere a lot of people walk past). Danger!awesome community space, perhaps.

Have tshirts, jewelry, greeting cards, posters, framed art for sale. Work on projects while waiting for people to buy things or not.

Archived Thoughts

I want to open a little storefront in danger!awesome’s new community space, or at the least install a vending machine there. Who should I talk to that might take me seriously?

I would stock
  • last-minute hard-to-find locally things, such as
  • standard engineering things
    • arduinos & mcus
    • composites (fiberglass, kevlar, carbon fiber, gallons of epoxy) / molding supplies (smooth-on)
    • servos & hobbyking motors
    • lipos & lipo chargers
    • tiny taps and drill bits (always break)
    • nylon things (inert)
    • ferric chloride, acetone, MEK/P
    • dremel bits
    • sandpaper
    • right-angle drills (probably for renting)
  • personal protective equipment that fits for both men and women
    • cheap small/medium leather gloves
    • cheap small/medium tyvek suits
    • a stock of respirators so people can try them on & see how it handles with their hair & learn how to put them on properly
    • small/medium closed-toe boots / steel boots
    • small/medium insulative coveralls
    • safety glass buffing station
  • fashion and craft things
    • fondant, icing, glitter, matte nail polish, etc.
  • Products from local engineers and makers, such as Brian Chan’s lasercut folding ukulele
I am not sure how I’d keep it open, because I especially want people to have access during times when normal stores are not open, but those are the crappiest times from the employee perspective (see: night shift health hazards), and I’m pretty busy. Perhaps some sort of coop-honor-system style thing could work, where you pay a deposit and then have 24hr access & you keep track of what materials you “bought”/checked-out and can pay on-site with a self-checkout.
and anything else people want (I’d have a “what do you want to see here” suggestion box online and offline :] ), and keep inventory meticulously online, so people KNOW what’s in stock.

More ideas

  • customization
    • dremel your name into your bike (anti-theft)
    • anodize or hydrographically print on your wrench set, helmet, etc. so that it’s very obvious that it’s yours and people know to return it if they borrow it
  • specialized tools
    • watch a robot arm use machine vision to sort your drill bits for you
    • place a bolt that you need to match on the countertop and we will (using machine vision?) identify size and thread count for you & give you the mcmaster number
    • smooth-on supplies
      • mini-museum of casting things
  • consultancies
    • trying to learn how to scale and source things in China? Visiting China and want to talk to manufacturers? Get cheap and questionable advice (possibly while doing your nails :P)
    • where to source things and how to source them cheaply
  • shop safety education (with lots of disclaimers that we are not doctors)
    • have posters of what happens when you don’t treat epoxy respectfully
    • get nitty gritty street knowledge on what you actually need to do to be safe and what bad outcomes are like and how to treat them — what are the trade-offs you are making with your safety when you don’t wear respirators, long clothes, etc. without judging you if for whatever reason you don’t
    • teach people how to use respirators and pick the right cartridges so that the respirator is easy to use and doesn’t get in the way of glasses and safety glasses and long hair
  • hubmotors & misc. segging things from china
    • segstick buddy riding competitions
  • food
    • too annoying to get license perhaps… but
    • could sell food molds: nyancat pancake molds, chocolate molds, etc. for birthday gifts
    • cake decorating / cutting robots
  • robot / geeky earrings and tshirts
  • feminist apparel, greeting cards, jewelry, tshirts, dresses, scarves, hats, shoes
  • menstrual cup advice and models

feminism + engineering projects brainstorming

some off-the-walls brainstorming!
ideas list:
  • covering the ground around clinics in mobile robots (so there’s nowhere to step) that together display cute cat videos (to de-stress patients and employees) [3]
  • cute pop up robots, like in big hero six [2], that act as a wall of clinic escorts (automation is the future, after all) and project calming music / nature sounds
    • or project the stories of those who have had abortions and want to share their story, in a non-threatening and clearly automated way, so that if anti-abortion folks want to threaten anyway, they’re left threatening a cute robot. Maybe stick a gopro on them to tape the protestors violently taking down the robots, which it seems like they might be inclined to do so
    • punching bag for the really angry folks who could benefit to work off some steam
    • hand out survey cards to clinic bullies to collect their complaints and offer them cake and tea (remind them to be civil)
    • distract clinic bullies (or at least their kids) with cute cat videos projected onto the side of the clinic building
    • distribute pro-choice adorable plushies and toys to the kids there
  • water or chalk spray graffiti attachment to a bike for people commuting to promote civic action while on their way to work [4] [5]
  • light attachment for bike [6] [7]
  • birth control coffee kcup, many people easily remember to drink coffee every day at a regular time 🙂 might increase compliance
  • creating fashionable dresses out of feminine hygiene products with pro-choice slogans artfully worked into them [10]
  • selling pro-choice pasta [8]
  • a facebook plugin for people to easily show their support for choice / abortion, like the lgbt rainbow plugin [9]
  • hold a nail art party / saloon, or a fashion walk, or a hackathon, or a conference. fun and educational and empowering events, all day every day, next to the clinic(s). To make the contrast between hate-filled speech and things that make everyone laugh and have fun and let them just get on with their lives, even more clear
  • have a statue competition — build pedestals to stand on and get in makeup artists and so patients and employees are greeted with an interesting gallery of living art, like the performance artists who paint themselves like statues and hold really still, instead of hate and harrassment
  • hold feminist / women’s rights play/theater shows and documentary screenings next to the clinic
  • make it really annoying to be there.
    • Sell the protestors every day things, it must get really boring to keep talking about the same thing every day and they are the perfect captive audience.
    • Have a guy very persistently offer the male clinic bullies free makeup and perfume and lotion samples and manicures.
    • Have really annoying and loud teenager cellphone conversations in the middle of and completely ignoring the clinic bullies
    • Hold kids’ water balloon fights there in the summer! Maybe high school / university kids who know how to leave a clear path for patients and employees.
    • Set up mini water-dropping drones which hover over clinic bullies and give them their own personal rain cloud (or rainbow/disco spotlight + rick roll music).
  • Just make it extra super boring to be there. Like have a Speech / Toastmaster or high school debate competition outside near the clinic, or read the house codes / political bills non-stop for a while

[1] http://qz.com/435921/the-worlds-first-abortion-drone-will-deliver-pills-to-poland-this-weekend/

https://qzprod.files.wordpress.com/2015/06/abortion-drone-crop.jpeg?w=1434

[2] https://en.wikipedia.org/wiki/Big_Hero_6_%28film%29#/media/File:Big_Hero_6_%28film%29_poster.jpg

A big white round robot.

[3] http://www.wired.com/2014/05/disney-invents-swarming-robots-that-create-animations/

http://www.wired.com/wp-content/uploads/2014/05/disney-pixelbots-07.jpg

http://www.wired.com/wp-content/uploads/2014/05/disney-pixelbots-07.jpg

[4] http://media.treehugger.com/assets/images/2011/12/nicholas-hanna5.jpghttp://media.treehugger.com/assets/images/2011/12/nicholas-hanna5.jpg

[5] http://archive.wired.com/politics/onlinerights/news/2007/04/kinberg_0410

[5]

[6] https://en.wikipedia.org/wiki/Graffiti_Research_Lab

http://hackedgadgets.com/wp-content/Graffiti_Research_Lab_laser_Tag_4.jpg

[7] https://www.kickstarter.com/projects/embrooke/blaze-bike-light

http://i2.cdn.turner.com/cnn/dam/assets/130912121102-blaze-bike-light-horizontal-gallery.jpg

[8]  http://4.bp.blogspot.com/-K87vdmx-qwc/VSnUfG1XaGI/AAAAAAAAE20/AIezRXtjXec/s1600/a4.jpg

http://pastamachines.com/ravmolds/dies/shapes/

http://4.bp.blogspot.com/-K87vdmx-qwc/VSnUfG1XaGI/AAAAAAAAE20/AIezRXtjXec/s1600/a4.jpg

[9]

http://www.theatlantic.com/technology/archive/2015/06/were-all-those-rainbow-profile-photos-another-facebook-experiment/397088/

[10] http://thestir.cafemom.com/healthy_living/114448/5_Alternative_Uses_for_Tampons

http://cdn-ugc.cafemom.com/gen/constrain/500/500/80/2010/12/30/08/ds/fy/po5ad5eaok1ehm8.jpg

Personal projects status dump

Open Source CAD (CAD extensible toolkit): Backburner (eta re-opening: Nov 1, 2015)

Relationship / Sex Ed Prototypes: Backburner (eta opening: Jan 1, 2016)

  • Role-playing games to establish healthy, inclusive, non-judgemental models of asking someone out / responding to that / dealing with that response
  • Can it be not corny? Even if it’s corny, can it still be effective?
  • Filling whatever gap PUA fills for guys

6.01 robots: Backburner (eta re-opening: Oct 15, 2015) — potentially escalate to Sept 5th, 2015

Feminist Apparel: Backburner (eta opening: Dec 1, 2015)

  • Snarky tshirts, IUD/LED earrings, elegant dresses with feminist quotes, stickers, necklaces, henna art, nails, pocket sewing kits, feminist bread and cake,

Hobbyist-Priced Small Waterjet: Backburner (eta re-opening: Feb 1, 2016)

Grad school: Active

Swarmbuddy robots: Active

  • co-conspirators: Ethan B., Chris A.
  • shift to nrf51822 chip (breadboard the circuit)
  • new board: nrf51822, 1s battery, usb charging,
  • new mechanical layout: with actual wheels, cheaper continuous rotation servos (or steppers? for easier zeroing than using a screwdriver), and an origami case
  • servo with pot broken out? $$$?
  • App Inventor + Android programming
  • New Android application

Hack4Fem: Active

  • More workshops
  • More speakers
  • More participants

Boatwork: Active

  • hook up solar panel to small lead-acid for bilge pump
  • Sand and urethane the gunwhals
  • Attach stern pieces
  • Take underwater pictures
  • Test generator and bring on board
  • Cut hole in engine compartment to diagnose leak
  • Call admiral and Crystal about winter haul out to fix keel leak
  • Hook up small battery and solar panel to bilge
  • Machine rope clutches from picture, two
  • Machine running rigging blocks, around four
  • Buy spring line cleats for mid ships
  • Make a roller furler for jib out of bike parts
  • Climb the mast install weather station and Masthead lights
  • Find radar?
  • Install red lights and wiring
  • also make a solar cabintop! diy solar panel, ?diy charge balancer?, diy battery pack? (no, get lead acids)

Youtube Channel: (backburner, eta May 2016)

 

Things to learn:

  • more math: 18.06, more statistics
  • electronics: power electronics, 6.302
  • sewing / fashion (ask on craigslist)
  • drawing / animation / video work (ask on craigslist)
  • makeup / cross-dressing / cosplay (ask on craigslist)
  • how to make html5 webapps easily and quickly
    • skillswap
    • website for house (splitting rent, household items shopping reminders, utilities, landlord contacting, parties, guestbook reviews :])

Restarting Cinnamon after freeze without losing session information

Whoo! For some reason, cinnamon freezes extremely often (multiple times a day) on my desktop, and I had been resorting to “ctrl-alt-f1” to get to a terminal and running “killall cinnamon-session”, which brings me back to login screen. Fortunately, there is a better solution, aka “ctrl-alt-esc”.

Here’s the relevant excerpt from the Cinnamon blog (http://segfault.linuxmint.com/2015/06/cinnamon-2-6/):

Desktop freezes

In case of a freeze or if you need to restart Cinnamon for any reason, you can now do so via a keyboard shortcut. The default key combination is Ctrl+Alt+Escape. Pressing this combination of keys restarts nemo and cinnamon-settings-daemon in case they had crashed, and launches a brand new instance of the Cinnamon desktop. Unlike Ctrl+Alt+Backspace which terminates your session and brings you back to the login screen, Ctrl+Alt+Escape simply restarts Cinnamon itself, which means your session is exactly as it was, you don’t lose any work and all your windows and applications remain open.

 

NRF51-DK and Ubuntu 14.04: pt2, UART BLE Loopback with Android 4.4.4

NRF Toolbox UART log showing sent and received messages
NRF Toolbox UART log showing sent and received messages

In the previous post I described three quick steps (well… sometimes mbed is pretty slow) to get started with NRF51-DK on Ubuntu 14.04.

Yesterday I was able to get the NRF51-DK to talk to my phone, which was pretty exciting.

In short

For NRF51-DK:

  • Open mbed compiler
  • Import > Click on “programs” tab instead of “libraries”
  • Search for “BLE_LoopbackUART” > Import
    Note: Do NOT check “update libraries”, unlike what this Evothings post suggests, checking “update libraries” actually threw errors and failed to compile in the next step, whereas if I went back and re-imported checking “update libraries”, it compiled fine
  • Compile and save file
  • Copy to JLINK to upload.
    Note: Make the NRF51-DK is turned ON and connected to laptop

On Android:

  • Using Google Play, install NRF Toolbox from Nordic
  • Open and click on UART
  • Click Connect (say “yes” to turning on bluetooth if you haven’t already)
  • Click the “…” > Show log
  • Write “hello” > SEND
  • Click “↵” on your android phone or scroll to the bottom of the log
  • You should see it say “hey” sent and “hey received” 🙂

In Long (with screenshots)

  • Open mbed compiler
  • Import > Click on “programs” tab instead of “libraries”
  • Search for “BLE_LoopbackUART” > Import
    Note: Do NOT check “update libraries”, unlike what this Evothings post suggests, checking “update libraries” actually threw errors and failed to compile in the next step, whereas if I went back and re-imported checking “update libraries”, it compiled fine
    Screenshot from 2015-08-27 11:39:13
  • Compile and save file
  • Copy to JLINK to upload.
    Note: Make the NRF51-DK is turned ON and connected to laptop

On Android:

  • Using Google Play, install NRF Toolbox from Nordic
    Screenshot_2015-08-27-11-25-04
  • Open and click on UART
    Screenshot_2015-08-27-11-25-58
  • Click Connect (say “yes” to turning on bluetooth if you haven’t already) and select the “BLE UART” device near you
    Screenshot_2015-08-27-11-26-44
  • Click the “…” > Show log
    Screenshot_2015-08-27-11-27-02
  • Write “hello” > SEND
  • Click “↵” on your android phone or scroll to the bottom of the log
  • You should see it say “hey” sent and “hey received” 🙂

    NRF Toolbox UART log showing sent and received messages
    NRF Toolbox UART log showing sent and received messages

Tada! That’s it.

Next, servos and robots! Then, many hours of porting code from Arduino to ARM.

NRF51-DK and Ubuntu 14.04 in five minutes (Getting started with Nordic NRF51822 Bluetooth Low Energy Development Kit)

nrf51-2
Glorious new nails + NRF51-DK, which is Arduino-Due-shield-compatible.

Short Story

  1. Go to https://developer.mbed.org/platforms/, add the NRF51-DK platform, open the compiler, import the “mbed_blinky” example, hit compile, and download the *.hex file
  2. Plug-in the NRF51-DK with a microUSB cable and turn the switch to “on”.
  3. Copy or drag-and-drop the .hex file to the “JLink” drive, which should auto-mount and appear under “devices” in your file manager
  4. Voila! Light should now be blinking.

Background

Recently after a bit of head-scratching, I found out that it’s very easy to program ARMs on Ubuntu 14.04, or at least the ARM chip on the system-on-a-chip NRF51822, an integrated circuit made by Nordic Semi that has both a bluetooth low-energy module [1] and a 32-bit ARM® Cortex™ M0 CPU with 256kB flash + 16kB RAM.

I’m exploring this chip because the atmega328p chip by itself is around $2.5 in quantity, and this chip has both an ARM microcontroller (mcu) and ble built-in for $2.5.

[1] (2.4Ghz transceiver, so actually supports NRF24L01+ protocol as well, for which you can find transceiver breakouts on ebay for $2)

nrf24l01+
nrf24l01+ breakout

I bought the NRF51-DK recently on semiconductorstore.com for $70 plus shipping. This is the main page: https://www.nordicsemi.com/eng/Products/nRF51-DK .

Yea, not much of a “get started here” anywhere on the page. The PDF tells you to download NRFgo studio and is obviously on windows.

So here’s my getting started guide. Note: I followed https://evothings.com/getting-started-with-mbed-arms-new-iot-platform-and-the-nordic_semiconductor-nrf51-dk/ for the most part.

Overview

  1. We will use the mbed compiler to turn our code from “DigitalOutput(LED1)”-esque code into .hex files for our chip, the NRF51-DK.
    mbed is a browser-based compiler, so you hit “compile” and get a file to download. I believe it’s developed directly by ARM.
    mbed has a Microsoft XP look, which is quite strange-looking inside the browser, but it works.
  2. We will “program” our chip by copying the .hex file to the “JLink” drive that shows up in our windows manager, similar to how a USB drive or other external drive shows up.

mbed

  1. Create an mbed account
  2. Go to “Platforms” and search for NRF51-DK, then click “Add to my compiler.”
  3. Click on “open mbed compiler”Screenshot from 2015-08-26 13:26:00
  4. The mbed compiler takes a while (minutes) to load. Grab a cup of coffee.
  5. Click “import” then search for “mbed_blinky” by the Author “team mbed”.  Click on it and hit enter, and the program will be imported
    Screenshot from 2015-08-26 13:30:18
  6. Open the program and click on “main.cpp” in the root folder. No changes are needed. The url should be something like: https://developer.mbed.org/compiler/#nav:/mbed_blinky/main.cpp;
    Screenshot from 2015-08-26 13:30:50
    T
    he code is:

    #include "mbed.h"
    
    DigitalOut myled(LED1);
    
    int main() {
        while(1) {
            myled = 1;
            wait(0.2);
            myled = 0;
            wait(0.2);
        }
    }
    
  7. Hit “compile” and save the file that you are prompted to download.
    Screenshot from 2015-08-26 14:15:43
  8. All done with this step! Optional: Change the wait time to 0.2 seconds and download another .hex file.

J-Link Programming

For me, I just plugged in the dev board using a micro-usb cable, turned the switch on the board to “on”,  and it showed up (ubuntu 14.04) and auto-mounted and showed up under “Devices” in nautilus file manager.

I’m not certain if I installed drivers along the way, but if so it must have been something sudo apt-get installable, because I don’t remember it.

Screenshot from 2015-08-26 14:12:15
output of dmesg | tail after plugging in device
  1. Drag and drop the .hex file to the JLink drive (or otherwise copy it over). Warning: drag-and-drop in nautilus pastes the .hex file over, and it’s not preserved after the chip programs itself, so use ctrl-c ctrl-v (or otherwise copy instead of cut) if you want to keep it!
  2. The JLink “drive” will disappear and after a few seconds reappear. This is it programming itself and rebooting itself.

    Screenshot from 2015-08-26 14:11:53
    Drag-and-drop
  3. Your LED1 should now be blinking! Yay!
    You can double-check that there’s no “fail.txt” in the JLink drive.

    Screenshot from 2015-08-26 14:13:48
    No “fail.txt”1 Yay

That’s it! Whoo!

Congratulations, you’ve now programmed the NRF51-DK on Ubuntu 14.04 to do the “hello world” blink example!

Exploring the Harvard Personal Genome Project Dataset with Untap

Recently, my co-worker Abram Connelly scraped the phenotypes in the Harvard Personal Genome Project and made it available in a small SQLite database, publicly available for anyone to download. He made a small webapp around the database where people can play around with the data directly in their browser.

Webapp (first page has link to gzip of the database): curoverse.link/22d61dd43786c65cd175b04ad6954af0+3119/html/index.html 

dataset

The dataset consists of people who have completed the enrollment process and were free to upload their own data for public release and also answer the surveys online (but not necessarily people who have donated samples, had the samples sequence, or had the samples released publicly).

To put it concretely, there are around 4000 people enrolled, and around 200 people with whole genome sequences that were  sequenced, interpreted, and returned by Harvard PGP as of August 2015 (though keep your ears open for upcoming news). (Participants may have whole genomes sequenced independently and then elect to upload and donate the data to the Harvard PGP).

webapp

Returning to the webapp, there are a few default tabs, where you can do things like explore what year PGP participants were born, where you can see that our population is mostly young folks…

“Summary” Pre-Packaged View of Allergies of Participants

…or with two clicks see what allergies are most common in PGP participants. Note that this is a quick scrape of the Tapestry database and no clean-up has been done, so you’ll notice allergies being listed twice with different spellings.

SQL Queries for Participants with “Oak” Allergies

On the “queries” tab, you can query the sql database and see the results in neat table form in your browser.

Additionally, there are some pre-packaged but interactive visualizations, where you can edit the text and have the graph update to reflect your changes / newly requested data.

For instance, here’s a display of the participant gender ratio at different ages which I modify to display information about the allergies at different age buckets

before, displaying gender of participants

and after, displaying penicillin and house dust allergies

Obligatory cat statistics

Although one could hope that this graph shows that PGP participants are not more likely to develop allergies to cats as they grow older, we have a lot more younger participants and this is absolute and not percent frequency, so we might have to say the data points to the opposite. Sad!

(Disclaimer: Just for fun, no real thought put into this analysis :] )

Conclusion

Ever wanted a public genotype + phenotype dataset? The Harvard PGP has you covered!

We have phenotype surveys galore (including a recently released one that includes blood type and eye color), with responses available in CSV form. The questions on the survey forms are available on github for now.

I hope you all enjoy! Untap is on github

https://github.com/abeconnelly/untap

and Abram welcomes feature requests / issue reporting. We hope this is beneficial to the GA4GH working groups specifically and other researchers in general.

Enabling Multi-touch Gestures on Lenovo Thinkpad 2nd gen x1 with Ubuntu 14.04

I recently set-up multi-touch on my lenovo x1 2nd gen and got it to work (pinch and zoom, one-finger drag) on Chrome and Chromium, although not the (sadly less-featured right now) Firefox.

My  post on askubuntu.com follows.

Touchegg  (sudo apt-get install touchegg)  works for me — however apparently not on Firefox or Chrome, only on Chromium, do the multi-touch gestures work for me (out-of-the-box).

On Chromium, I can one-finger drag (on-screen touch, not touchpad), two finger scroll (touchpad), pinch and zoom (on-screen touch).

See: Firefox bug, http://askubuntu.com/a/664898/67349

To fix chrome, I had to follow both answers at Chrome + Touchscreen + Unity (14.04)

First,

  • Navigate to chrome://flags/#touch-events and
  • set Enable touch events Mac, Windows, Linux, Chrome OS to enabled.
  • I also set “Enable pinch scale. Windows, Linux, Chrome OS” to enabled (instead of default).

Second, I needed to start google chrome and tell it which device.

$ xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ ELAN Touchscreen                          id=9    [slave  pointer  (2)]
$ google chrome --touch-devices=2

My Setup

  • ubuntu 14.04
  • lenovo 2nd gen x1.
  • Chromium: Version 43.0.2357.130 Ubuntu 14.04 (64-bit)
  • Chrome: Version 43.0.2357.134 (64-bit)
  • Firefox: 40.0

My ~/.config/touchegg/touchegg.conf if it’s useful: http://pastebin.com/qGexA1gB

Rainbow!~ heart cookies (pt1)

I really like rainbow things. This has entailed baking an increasing amount of rainbow things. Here’s a brief blog, pt1, about rainbow heart cookies. pt2 is about challah, and pt3 about asian chiffon cake.

Update 9/4/15: Added pictures from webcam, which detail missing parts of the process

1) Rainbow Heart Cookies

Following these instructions ‘Eugenie Kitchen Rainbow Heart Cookies”: https://www.youtube.com/watch?v=I2yW_VONWco

The ideal

eugeniekitchencom

Ours didn’t turn out as pretty, but then again we didn’t use a ruler.

final cookie! missing a few colors, so it goes
final cookie! missing a few colors, so it goes

Full gallery: https://goo.gl/photos/yvgARo9pxZYsZwD26

2) Rainbow Challah

To be continued in the next post, pt 2!

 

WordPress Blogroll Links Import Fix & Google Spreadsheet to OPML Generator

In order to bulk import a list of titles & URLs for my friend’s blogs into wordpress, I created a google spreadsheet and then used an open-source opml-generator to turn the spreadsheet into OPML and import it into WordPress.

The hosted version at http://opml-generator.appspot.com/ was not working for me as of Aug. 2015, so I fixed it and ran it locally. Here are the fixes I made.

To Run

I had to install the google app engine python SDK, https://cloud.google.com/appengine/downloads#Google_App_Engine_SDK_for_Python

Also, I had to install django-utils and python 2.7

$ sudo pip install django-utils
$ sudo apt-get install python2.7-dev

Then, simply use the appserver included with the google app engine python SDK, give it this project’s directory

$ /path/to/google_appengine/dev_appserver.py /path/to/opml-generator

The happy output should look like

INFO     2015-08-17 03:30:37,516 sdk_update_checker.py:229] Checking for updates to the SDK.
INFO     2015-08-17 03:30:38,341 sdk_update_checker.py:257] The SDK is up to date.
INFO     2015-08-17 03:30:38,373 api_server.py:205] Starting API server at: http://localhost:40380
INFO     2015-08-17 03:30:38,375 dispatcher.py:197] Starting module "default" running at: http://localhost:8080
INFO     2015-08-17 03:30:38,376 admin_server.py:118] Starting admin server at: http://localhost:8000

and go to http://localhost:8080/

Enter the URL, the title, and the “opml” url should automatically populate.

Changes

Then I had to make a few changes to make app.yaml recognize the django-utils was needed, that I was using python 2.7,

$ vi app.yaml
threadsafe: no
runtime: python27

libraries:
- name: django
  version: "1.5"

I created the URL via “Share” > “Share with Others” > “Anyone can view” and it looked like

https://docs.google.com/spreadsheets/d/1GXkKX74boMLia2lIVwgN0E

It appears that the original code works with old google docs urls, which look like:

https://spreadsheets2.google.com/spreadsheet/pub?hl=en_US&hl=en_US&key=0Ah0xU81penP1dGlQbGZ6Si03M0ZOQTd2ZzRfUmdUTmc&output=html

Thus, I modified base.html to find the document key appropriately.

//var ssKey = ssUrl.split('key=')[1];
var ssKey = ssUrl.split('/d/')[1]; console.log(ssKey); 
//ssKey = ssKey.split('&')[0]; 
ssKey = ssKey.split('/pubhtml')[0];

Note: I also threw out some printouts to console.log to figure all this out. They can be found by using Chrome or Firefox, Ctrl-Shift-C, and going ot the “Console” tab.

Screenshot from 2015-08-16 23:50:09

I also edited the output URL which, for localhost, did not include the port.

//var opmlUrl = 'http://' + window.location.hostname + '/opml?sskey=' + ssKey + '&wsid=od6'; 
var opmlUrl = 'http://' + window.location.hostname + ':8080/opml?sskey=' + ssKey + '&wsid=od6';

Output OPML Format

In the end, I looked at the output OPML and think I should probably have just made the file by hand / with vim macros… it would have been easy enough. But I got to take a peek at Google App Engine, so that was nice.

Here’s what the OPML looks like, if you’re interested in creating it more manually instead of installing google app engine etc. etc. to run this code:

<?xml version="1.0" encoding="utf-8" ?>
<opml version="1.1">
 <head>
  <title>MITERS</title>
 </head>
 <body>
   <outline text="MITERS">
    <outline title="MITERS | MIT Electronics Research Society" xmlUrl="http://miters.mit.edu/blog/feed/"/>
    <outline title="nk | Nick Kirkby" xmlUrl="http://nkirkby.scripts.mit.edu/nk/feed/"/>
  </outline>
 </body>
</opml>

Or in screenshot form

Screenshot from 2015-08-16 23:31:43

WordPress Import Blogroll Fix

The error: when you try to import the OPML file into WordPress, it says “All done!” but when you check the blogroll manager, no links were actually imported.

Screenshot from 2015-08-16 23:34:13

The fix: Super simple. Just change all the instances of xmlUrl in the OPML file into htmlUrl .

Screenshot from 2015-08-17 18:27:12

Tada! The links now import properly 🙂