Mar 15, 2008
MIT '17, Computer Science
St. Louis, Missouri
About me
MIT student, programmer.

Activity Stream

BlueThen   -  Dec 30, 2014

Added a page to my portfolio for "Dough", a real time soft material simulator.

BlueThen   -  Dec 22, 2014

Just unburied a rigid-body physics engine that I made in 2012!

It's probably uncompilable right now, but I might return to it and polish it up a bit. Meanwhile, I'll be adding a page to my portfolio on Gazelle!

BlueThen   -  Dec 01, 2014

Finally published my newest portfolio:

No more Java applets!

BlueThen   -  Nov 30, 2014

I've been spending my spare time for the past couple of months redoing my portfolio.

I'm not very experienced with design, but this is turning into something that I'm feeling pretty good about.

Any feedback/opinions appreciated!

Edit: You can view the website live at

BlueThen   -  Oct 26, 2014

Maintaining DRY HTML

Question to web developers out there. How do you maintain DRY HTML? DRY, as in, "Don't Repeat Yourself".

For example, if you have a navigation bar to be shared across every page, what do you do to avoid having to copy-paste this code 10-20 times?

Among the solutions, I found JQuery/JS, PHP, Server-sided includes, iframes, object element, and Python.


Is client-sided, so it relies on the client having JS enabled.


PHP has a handy include function which lets us compartmentalize web components.

Server-sided Includes

This is apparently the HTML equivalent to PHP's include. It requires setting certain flags in Apache, and marking HTML files for parsing in HTML. I think this might be slower than PHP, because I read somewhere that it involves the server re-parsing and updating HTML files every single time they're being delivered.


This is useful for sandboxing HTML, but not so useful when you want JS and CSS to work cleanly across the entire page.


I couldn't find as much information about using object to embed HTML. This might have the same issue as iframe?


Really one could use any scripting language. Basically place special tags in your HTML file, like $$$header$$$, and then perform a find-replace in Python with the appropriate HTML whenever you wish to deploy or run the HTML file.

I had a dream about HTML last night, so this is really bothering me. What do you all think?

BlueThen   -  Oct 26, 2014


Can you add a dialog to "confirm navigation away from page" on the Create Page page? I just spent half an hour writing a page and accidentally backspaced out of the page when the text box wasn't in focus. Now all of the content is lost!

BlueThen   -  Oct 06, 2014

I'm not sure what your views are on this, but do you think could display full names rather than aliases (perhaps, as an option)?
I can see becoming another website people refer to on their resumes, portfolios, etc.

It's always a little awkward explaining to people (esp. potential employers) that BlueThen was an alias I chose during my gamer days when I was 9 or 10.

Another thought along this line is unique URLs for users. For example, vs

BlueThen   -  Sep 29, 2014

Some screenshots from a series of music visualizers I wrote for our dorm parties.

BlueThen   -  Jul 08, 2013


I made a video showing the progression of my algorithms.

BlueThen   -  Feb 06, 2013
BlueThen commented on a Page, Bad Words kick  -  Feb 02, 2013
on *:TEXT:F*ck:#: { /kick $chan $nick bad languages are not allowed in $chan }

I think this will kick you for say "Firetruck"

BlueThen   -  Jan 31, 2013

I made a 3D simulation of the Solar System... then hurled a sun-massed object through it

BlueThen   -  Jan 22, 2013

More destruction of the solar system:

In my opinion, these are all turning out very beautifully.

BlueThen   -  Jan 21, 2013

Here's what the solar system would look like if we were to move the sun over by about 112 million miles (180 million km or 1.2 AUs).

BlueThen   -  Jan 21, 2013

This is what the solar system would look like if a sun sized spaceship were to just casually pass through.

BlueThen   -  Jan 15, 2013

600,000 asteroid time lapse:

BlueThen   -  Jan 13, 2013

Every asteroid known to man. I'll be rendering a time-lapse pretty soon.

BlueThen   -  Jan 06, 2013

@Hawkee I just noticed that most of my Processing applet demos aren't working. (eg.

BlueThen commented on a Page, - find factors of numbers  -  Jan 05, 2013

Should line 4 be returning True if the number has no known multiples?

BlueThen commented on a Java App, FourierAnalysis - MouseMotion  -  Dec 24, 2012

Hi. I believe you can use [ code]

 tags on your code to keep it clean and indented.
BlueThen   -  Dec 10, 2012

What is's opinion on YouTube's new design?

BlueThen   -  Dec 08, 2012

@Hawkee I uploaded a new avatar quite awhile ago, and it hasn't changed. In fact, the avatar on my profile doesn't match the one in my account settings (which has the newer one).

BlueThen commented on a Page, Canvas Balls  -  Nov 25, 2012

@Hawkee Minor, but relevant: Your avatar uploader won't let you upload an avatar if it's more than 100x100 px ("The avatar must be less than 100 pixels wide and 100 pixels high")

Most other websites allow you to resize/crop your avatar on the spot. Would that be possible here?

BlueThen commented on a Page, Canvas Balls  -  Nov 23, 2012

There's no easy answer for that. Many simulators check for collisions several times in between drawn frames.

I'm not sure if your code does this, but having a fixed timestep really helps with stability for almost no matter what you do. Glenn Fiedler wrote an article about it:

Basically take your elapsed time, break it up into fixed chunks, and send the left over time to the next frame. For example:
35ms elapsed, do two 16ms updates, add 3ms (35 - 16*2) to the next frame.

There's also Continuous Collision Detection, which I know very little about.

BlueThen commented on a Page, Canvas Balls  -  Nov 23, 2012

Conscious: Each cell in the grid would be the width and height of the largest ball's diameter. Then, you check the ball against the balls contained in each cell adjacent to the one it's in.

My ~2 year old Balls applet has an array for each ball that keeps track of which balls they've collided with. It can probably be more efficient to iterate over the balls, and check against balls you haven't already iterated against.

For example:

for (int i = 0; i < ballCount; i++) {
  for (int c = i+1; c < ballCount; c++) {
    // check ball i against ball c

Although, that's probably not as easy using a partitioning algorithm. Perhaps if you only checked against Balls with higher ID's/indexes in the main array?

BlueThen commented on a Page, Canvas Balls  -  Nov 23, 2012

I love this kind of thing! I made a Java/Processing version back in January, 2011:

For a large number of evenly sized balls, I found that having a fixed sized grid for partitioning is a lot more efficient than quadtrees.

You also might want to check if they've already collided or not. Running the collision code twice for each collision may be what's causing some of the sticking.

Also, you should put a demo up somewhere!

BlueThen   -  Nov 11, 2012

@Hawkee I guess this is only inevitable. You should add a "report" button.

BlueThen   -  Nov 09, 2012

Alright, I made larger icons and removed the descriptions.

I'd like to make the banner javascript, but I'm having issues getting Processing to export working code.

I'm thinking about hiding the applets on the pages, and instead showing the gallery first (with maybe an expandable box containing the applet?)

More ideas/feedback/critiques appreciated.

BlueThen   -  Nov 06, 2012

I made a portfolio. Please give any feedback.

BlueThen   -  Nov 06, 2012

Hawkee, your notices are a bit funky now.

"Hawkee responded to a Status Update, Hawkee"

Clicking either the first or second Hawkee will bring me to your profile page (the second just having me scrolled down arbitrarily). I end up having to find the comment thread manually.

Are you sure you want to unfollow this person?
Are you sure you want to delete this?
Click "Unsubscribe" to stop receiving notices pertaining to this post.
Click "Subscribe" to resume notices pertaining to this post.