Monthly Archives: September 2012

I think is time to blow this thing, get everybody the stuff together.
Okay 3, 2, 1 Let’s Jam!
My friend’s then-groom/now-husband breakdanced to Cowboy Bebop music at their wedding two weeks ago.

It was super surreal being at her wedding. She was a good middle school friend, and someone I hadn’t seen in ages.
She looked amazing, and her wedding was a lot of fun.

One of the most memorable moments of the night, aside from the official wedding ceremonies, was when Gangnam Style came on during the dance.

It was an awesome time.

A plankton sticker arrived in my mailbox yesterday, from Bigelow Laboratory for Ocean Sciences. It brought back all the wonderful memories of a trip my friends and I took to see their public opening.

During the last breath of summer, my friends and I went on an epic weekend adventure to the lovely state of Maine.

We drove up on sun-beamy Friday, savored the spreads and Peasant Bread sandwiches of Stonewall Kitchen, and headed for the Bigelow Laboratory for Ocean Sciences.
After a tour of the facilities, we drove to Red’s Eats, for a feast of giant lobster rolls.

lobster roll

The afternoon ended with watching the sunset over the waters of Wiscasset and walking along the railroad tracks. It had a rustic charm that fueled my agrarian fantasies.
rail road tracks

When darkness finally fell, we made our way to the sleepy town of Camden, and promptly drifted off to sleep.

Mt. Battie

The next day started with a climb to Mount Battie. The view up there was gorgeous. From the ruins of a castle, we looked out into the bay, gawking at the stretches of water peppered with islands.


image courtesy of Dan

After a snack at the 3 Dogs Cafe, and under the setting sun, we ventured to a local lighthouse, trekking over jagged rocks to the middle of the bay.

Saturday night ended with delicious Mexican fare and oodles of our new favorite show: Adventure Time.

Adventure Time

We ended our trip at Pemaquid lighthouse, admiring the strange rocks that formed the coast. We looked out from the light housing lookout, portrayed in Maine’s state quarter.

It was a marvelous weekend, an excellent conclusion to a eventful summer, and a perfect trip. I got to explore new lands, eat delicious goods, all with the awesome company of my friends.

I only hope there’s many more like this one to come.

[updated: 3D-Printed Enzyme – Proof of Concept]


While animating a short for the 2011 MIT iGem team, I came up with the idea to 3D print enzymes from the vast number of structure-characterized proteins in the RCSB Protein Data Bank (PDB). There are lots of slick software out there to render the PDB files into gorgeous 3D models. Exporting those models to be 3D-printing compatible is only a few clicks away.




The simplest approach is to use USCF Chimera to render a protein from PDB. Chimera can export the protein into an STL file, which can be uploaded to Shapeways or other 3D printing vendors to print.

While Chimera renders ribbon diagrams very beautifully, it lacks more sophisticated mesh-based renderings and user customization. Molecular Maya can be a good alternative. It harnesses all the customization power of Maya, while easily importing PDB files. To go the Molecular Maya route, proteins can be exported into OBJ files to upload to Shapeways. Currently, Molecular Maya does not render ribbon diagrams or secondary structure.


ecoRV rendered with mMaya [PDB ID: 1RVA]


DNA ligase

DNA ligase [PDB ID: 1DGS]




My recent order of funky socks came with an awesome gift from the lovely folks of Modcloth.
wire headband

I could not figure out what it was. It was similar to a soft clothes hanger but lacked the hook and the structural integrity. Its beautiful cloth exterior concealed thing wiry structure underneath.

I was so ready to ask my more fashionable roommate, when the aha moment came. It was a wire headband!
I can see!

Nowadays, I wear it in my daily busing about. It does a wonderful job of keeping my now-too-long bangs at bay.



Graphviz now has SBOLv 1.0 support!

I implemented the Synthetic Biology Open Language (SBOLv) symbols for Graphviz to easily generate SBOLv compliant diagrams.

see my original post on using Graphviz to draw genetic circuits

Gene Expression Symbols:

digraph G {

promoter -> operator [arrowhead=none];
operator -> cds [arrowhead=none];
cds -> utr [arrowhead=none];
utr -> terminator [arrowhead=none];

promoter [shape=promoter labelloc="b"];
operator [shape=square width=0.2 label=""];
cds [shape=cds];
utr [shape=utr labelloc="b"];
terminator [shape=terminator labelloc="b"];


digraph G {

insulator -> ribosite [arrowhead=none];
ribosite -> rnastab [arrowhead=none];
rnastab -> proteasesite [arrowhead=none];
proteasesite -> proteinstab [arrowhead=none];

insulator [shape=insulator label=""];
ribosite [shape=ribosite label="ribonuclease site" labelloc="b"];
rnastab [shape=rnastab label="rna stability" labelloc="b"];
proteasesite [shape=proteasesite label="protease site" labelloc="b"];
proteinstab [shape=proteinstab label="protein stability" labelloc="b"];


DNA Construction Symbols:

digraph G {

origin -> primersite [arrowhead=none];
primersite -> restrictionsite [arrowhead=none];
restrictionsite -> noverhang [arrowhead=none];
noverhang -> assembly [arrowhead=none];

origin [shape=circle width=0.2 label=""];
primersite [shape=primersite label="primer site" labelloc="b"];
restrictionsite [shape=restrictionsite label="restriction site" labelloc="b"];
noverhang [shape=noverhang label=""];
assembly [shape=assembly label=""];


digraph G {
rankdir = LR;

fivepoverhang -> signature [arrowhead=none];
signature -> threepoverhang [arrowhead=none];

fivepoverhang [shape=fivepoverhang label=""];
signature [shape=signature];
threepoverhang [shape=threepoverhang label=""];



Download from the official Graphviz site

All the development snapshots newer than 2.29.20120924 should have SBOLv compliant symbols, as well as the non-SBOLv circuit symbols (lpromoter, rarrow, etc.).

Example Diagrams:

digraph a {

subgraph cluster0 {
node [style=filled fillcolor=white];
a -> b [arrowhead=none];
b -> c [arrowhead=none];

a [shape=promoter label=""];
b [shape=cds label="rtTA"];
c [shape=terminator label=""];

Dox -> rtTA;
b -> rtTA;

subgraph cluster1 {
node [style=filled fillcolor=white];
d -> e [arrowhead=none];
e -> f [arrowhead=none];

d [shape=promoter label=""];
e [shape=cds label="Alfa"];
f [shape=terminator label=""];

rtTA -> d;
e -> Alfa;

subgraph cluster2 {
node [style=filled fillcolor=white];
g -> h [arrowhead=none];
h -> i [arrowhead=none];

g [shape=promoter label=""];
h [shape=cds label="Alfa"];
i [shape=terminator label=""];

Alfa -> g;
h -> Alfa;


digraph G {

subgraph cluster0 {
node [style=filled fillcolor=white];
a -> b [arrowhead=none];
b -> c [arrowhead=none];
c -> d [arrowhead=none];

a [shape=promoter label=""];
b [shape=cds label="rtTA"];
c [shape=cds label="LacI"];
d [shape=terminator label=""];

Dox -> rtTA;
b -> rtTA;

subgraph cluster1 {
node [style=filled fillcolor=white];
e -> f [arrowhead=none];
f -> g [arrowhead=none];
g -> h [arrowhead=none];

e [shape=promoter label=""];
f [shape=cds label="Charlie"];
g [shape=cds label="Alfa"];
h [shape=terminator label=""];

rtTA -> e;

c -> LacI;
IPTG -> LacI [arrowhead=tee];

subgraph cluster2 {
node [style=filled fillcolor=white];
i -> j [arrowhead=none];
j -> k [arrowhead=none];
k -> l [arrowhead=none];

i [shape=promoter label=""];
j [shape=cds label="India"];
k [shape=cds label="Bravo"];
l [shape=terminator label=""];

LacI -> i [arrowhead=tee];

f -> Charlie;
g -> Alfa;
j -> India;
k -> Bravo;

subgraph cluster3 {
node [style=filled fillcolor=white];
m -> n [arrowhead=none];
n -> o [arrowhead=none];
o -> p [arrowhead=none];

m [shape=promoter label=""];
n [shape=cds label="Charlie"];
o [shape=cds label="Alfa"];
p [shape=terminator label=""];

n -> Charlie;
o -> Alfa;
Alfa -> m;

subgraph cluster4 {
node [style=filled fillcolor=white];
q -> r [arrowhead=none];
r -> s [arrowhead=none];
s -> t [arrowhead=none];
t -> u [arrowhead=none];

q [shape=promoter label=""];
r [shape=cds label="India"];
s [shape=cds label="Bravo"];
t [shape=cds label="EYFP"];
u [shape=terminator label=""];

r -> India;
s -> Bravo;
t -> EYFP;

subgraph cluster5 {
node [style=filled fillcolor=white];
v -> w [arrowhead=none];
w -> x [arrowhead=none];

v [shape=promoter label=""];
w [shape=cds label="Hotel"];
x [shape=terminator label=""];

Charlie -> v [arrowhead=tee];
w -> Hotel;

subgraph cluster6 {
node [style=filled fillcolor=white];
y -> z [arrowhead=none];
z -> aa [arrowhead=none];

y [shape=promoter label=""];
z [shape=cds label="Foxtrot"];
aa [shape=terminator label=""];

Hotel -> y [arrowhead=tee];
India -> y [arrowhead=tee];

z -> Foxtrot;

subgraph cluster7 {
node [style=filled fillcolor=white];
bb -> cc [arrowhead=none];
cc -> dd [arrowhead=none];
dd -> ee [arrowhead=none];

bb [shape=promoter label=""];
cc [shape=cds label="EBFP2"];
dd [shape=cds label="Foxtrot"];
ee [shape=terminator label=""];

Foxtrot -> bb;
dd -> Foxtrot;

cc -> EBFP2;



Color and labelling doesn’t work as nicely as the non-SBOLv symbols.

Labels that include a double-stranded DNA line, such as the promoter, has to have labelloc set to “b”. This is to avoid the intersection of the label and the double-stranded DNA line, since labels are automatically placed in the center of the nodes.

Hef1a [shape=promoter];

Hef1a [shape=promoter labelloc="b"];

Also, for the aforementioned shapes, colorfill has to be specified instead of color. color will color the outline of the node shape, potentially causing non-consistent colorations of the double-stranded DNA line between connected nodes.

Hef1a [shape=promoter labelloc="b" style=filled colorscheme=greens3 color=3];

Hef1a [shape=promoter labelloc="b" style=filled colorscheme=greens3 fillcolor=3];


Thanks to Reshma Shetty and Jake Beal for the inspiration.

I was pet-sitting my friend’s hamster, Crayon, for the weekend.
She was a spunky little thing, always scurrying around her cage.
luv luv

Come Saturday morning, I noticed Crayon was a little droopy. She poked her nose out of her cage, staring into the great yonder of our apartment living room.
Awwwn, I thought. I’ll cheer her up with a good roam.

Carefully, I placed her in her plastic ball. Crayon spung to life immediately! She dashed about in her round enclosure, hitting furniture legs with a repetitive clang clang clang. I then went about my Saturday morning happenings.

A little while later, I realize the apartment was quiet…too quiet..oh no! I ran to search for Crayon only to find an empty hamster ball. Crayon was missing!
oh noes

One by one, I secured each bedroom and narrowed down the possible places Crayon could be. Scratching sounds under cabinets notified me that Crayon was in the living room / kitchen area. So I became a couching tiger and waited.
crouching tiger

Eight hours later, in the dark of night, faint footsteps came from a corner of the living room.
I turned my head and leaped upon sight of the merrily trotting hamster. However, Crayon was too fast. She darted under luggage cases, just out of my reach.

I attempted to lure her out with a yogurt treat.
Despite her great love for sugary snacks, Crayon retreated back into hiding the moment she sensed my looming hand poised to snatch her up.

Time for a more clever plan.

I blocked off all other exits from that luggage case and placed her case at its sole entrance. Crayon, ever curious, step by step climbed back into her cage.

A huge sense of relief washed over me.
I hope to never have a hamster disaster again.