vending machine / start of epic asia trip

well speed update
made cardboard proto of vending machine, final project of mas.863

then CAD’d and emergency lasercut one, but still didn’t have time to do electronics :/ (buttons are just stuck on there, and i didn’t leave space to route servo wires, and i’m using janky self-made continuous rotation servos / zip tie couplers to springs

but first time really CADing the full thing before creating it! compare hexa-not-quite-dancingpod, which was cut by hand and then CAD’d

anyway, open house happened, then I emergency packed and we took T Red line > south station > lucky star bus to NYC (11:30 pm) … arrive around 4 am and take J nyc metro to JFK airport.

derp! didn’t get on flight seattle > narita, (yay standby) due to some weight balancing fail. (flight left with 34 empty seats)

that’s okay, we got to meet cathy’s family! (cathywu.posterous.com)

well got on next day

ack! have to get on flight narita > taiwan now.

[edit: for more updates on vending machine, see: http://www.orangenarwhals.com/search/label/vendingmachine]

emergency motor controller fail

just an update to say no, i did not successfully make a motor controller in 48 hours 🙂
(see previous post for schematic: http://www.orangenarwhals.com/?p=152)
what was it? a 6.131 final project / motor controller for hexarideablepod (derived off of an instructables):

which works, but uses an arduino and two victor speed controllers — total overkill. also, terrible UI: it uses a hard to reach switch for fwd/bwd and foot pedals, which little kids have issues reaching even with the awesome!adjustable-car-seat.

block diagrams! ewww.

https://github.com/nouyang/hexapodtroller for the eagle sch/brd. You can see terrible routing here:

power board (4 FETs to make a full H-bridge)
sig board — attiny44 and four FET drivers (21844s). also, chain voltage regulators from 24v battery to 15v for drivers to 5v for attiny logic.

speed routing and my inexperience led to use of 24 zero ohm resistors and I still used a jumper 🙂

hai zero ohm resistor friends
If you look closely, you can see some of the trace fails (compare IRL to board layout) which were probably due to too high error allowances when the fab module was creating the roland modela machine code. See: pins 8 and 9 on the top right side of the topmost IC, the attiny44. They’re connected on the board but not on the schematic. I used eagle’s erc/drc and it didn’t point out a warning so I’m going to assume it was mill code generation settings, not limits of mill capability.
I discovered how useful eagle layers are, even in the interface is terribly clunky.

I create zero-ohm resistors a dumb way that actually turns out to be helpful when populating a lot of them. Since they each have an air wire, I can set air wires to a nice contrasting color and see where they all are:

Another note, I milled out the moles CNC-ly too using GIMP to get the traces I needed, but :/ milled them out too small and had difficulty getting the 3.5mm spacing power connectors to go through the board — had to carefully use a vise.

This is what the final half-populated boards looked like:

MIT Course Majors Male Female Ratio, Fall 2011 (scraping with google docs)

as seen at stata; click to see larger pic

when i saw this in stata a few days ago i legitimately wondered for a few seconds which way this was color-coded until I saw a note (cropped out in this pic), which made me smile. At MIT and hopefully in the general world the imperfect gender ratios are really not so noticeable unless you’re looking for it. MIT is wonderful (I say this now because I have no finals this term, all project classes that I loved even if I didn’t do as well as I’d’ve liked)

Anyway, there were no citations! so I decided to go off and investigate on my own and treat it as a data visualization exercise (hi, upcoming IAP / startlabs / c2c / metrify).

EDIT: Derp! I data-failed. You can see civil/environmental engineering (course 1 — see http://web.mit.edu/catalog/subjects.html if you’re confused by the numbers) is definitely off. : / messed up copying and pasting somewhere. Will redo this for realz one day (they have data for multiple years, I want to clean it up automatically).

sorted by %
sorted by course number

~~

http://www.quora.com/MIT-1/What-is-the-gender-ratio-for-each-of-the-majors-at-MIT
data source
Here’s the data I used (I should just email them for the csv’s, but I thought this would be a simple data scraping exercise):
http://web.mit.edu/registrar/stats/gender/index.html
http://web.mit.edu/registrar/stats/yrpts/index.html
What tripped me up is that the women vs. everyone listing of majors is ever so slightly off, and I have to decide how many distinctions I want to make. Do I really care about 2 vs 2A? not really. If I care about 6-1 vs 6-2 vs 6-3, do I just drop 6-7?

assorted google spreadsheets of data from those sources
cleaned data for charts
https://docs.google.com/spreadsheet/ccc?key=0Atr0HZeoMbmgdHFNZU5mbEdYU2VIOE1BUTRLZHJJVkE

raw data sorted for female / undergards
https://docs.google.com/spreadsheet/ccc?key=0Atr0HZeoMbmgdFg0Vk14RW9JQjJtSFFsMXJBZ2hnSEE

raw scraped html table data
https://docs.google.com/spreadsheet/ccc?key=0Atr0HZeoMbmgdFYzNUdEN2NKM2lGbHV6OVN4YkJNTmc

where i tried to (see script editor) automagically clean up the data and failed:
https://docs.google.com/spreadsheet/ccc?key=0Atr0HZeoMbmgdFRkSXp5SW9teEJiT0t5U2FJeTBUVnc&hl=en_US#gid=0

the
google apps code 
I used for that last gdoc

function loadImport() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var data_sskey = "0Atr0HZeoMbmgdFYzNUdEN2NKM2lGbHV6OVN4YkJNTmc";
var row_init = "13";
var col_ug = "G";
var col_grad = "M";
var col_total = "O";
var col_courseName = "A";
var col_courseNumber = "Q";

var cols = [col_ug, col_grad, col_total];
//create arrayformulas for copying selected data over
//e.g. =ImportRange("0Atr0HZeoMbmgdFYzNUdEN2NKM2lGbHV6OVN4YkJNTmc","Women!G13:G")

//Add Course Names
var finalRanges = [ '=ImportRange("' + data_sskey + '","Women!' + col_courseName + "13:" + col_courseName+ '")'];

//Add Enrollment Data in alternating female / all
for (var i = 0; i < cols.length; i++){
femRange = '=ImportRange("' + data_sskey + '","Women!' + cols[i] + "13:" + cols[i]+ '")';
finalRanges.push(femRange);
everyoneRange = '=ImportRange("' + data_sskey + '","Everyone!' + cols[i] + "13:" + cols[i]+ '")';
finalRanges.push(everyoneRange);
}

//Add Course Numbers
finalRanges.push('=ImportRange("' + data_sskey + '","Women!' + col_courseNumber + "13:" + col_courseNumber+ '")');


// Sets the column header names to match copied data.
//sheet.getRange("A1").setValue(range);
var columnNames = ['Course Name', 'Fem UG', 'All UG', 'Fem Grad', 'All Grad', 'Fem Total', 'All Total', 'Course Number'];
var headersRange = sheet.getRange(1,1,1,columnNames.length);
headersRange.setValues([columnNames]);
//var dataRange = sheet.getRange(2,1,1,columnNames.length);
for (var j = 0; j < columnNames.length; j++){
sheet.getRange(2, j+1).setValue(finalRanges[j]);
}

}
//method getRange(row, column, optNumRows, optNumColumns)



Google Docs Scripting Tutorials
An excellent step-by-step free tutorial on ImportXML (similar to importHTML that I used), how I heard of xpath (which I didn’t end up need to use due to importHTML magic): http://www.distilled.net/blog/distilled/guide-to-google-docs-importxml/
other useful tutorials I referred to
http://blog.ouseful.info/2008/10/14/data-scraping-wikipedia-with-google-spreadsheets/
http://blog.fastfedora.com/2011/08/how-to-use-open-apis.html *shudders* speaking of government apis, I really should be less terrible and fix my github codeforamerica repos which I left half-finished. AUGH. I FAIL. This is why I haven’t applied to any jobs yet. Upcoming: post on why you shouldn’t hire me (with the caveat that I feel okay listing these because these are past mistakes that I don’t intend to make again).
http://blog.ouseful.info/2010/02/15/creating-a-winter-olympics-2010-medal-map-in-google-spreadsheets/
eeee shiny http://pipes.yahoo.com/pipes/
I also attempted to use google fusion tables but did not have a good experience.
http://code.google.com/googleapps/appsscript/articles/writing_spreadsheet_data.html
http://code.google.com/googleapps/appsscript/service_spreadsheet.html
To investigate: http://www.propublica.org/nerds/item/using-google-refine-for-data-cleaning

projects blog (nouyang)