Bill DeRouchey (@billder) was the opening presentation at CyborgCamp and was wonderfully entertaining and informative. Here are some quick notes I took:

  • How did the "Play/Pause" button become univerally understood?
  • Typewriters choose the winning "letter symbols"
  • Symbols evolve.
  • Are we losing some types/modes of literacy? Is that such a bad thing?
  • @ - commerce symbol "each at", then location, then identity
  • # - means a group on twitter "context, topic"
  • Mouse pointer ~1984
  • Future directions in the evolution of tech languages?
  • Splintered groups of tech languages
  • Emotional bandwidth
  • Gatekeepers of knowledge, screening out less knowledgeable people




A metric tensor g_{mn} is used to measure distances based on a given coordinate system. In terms of the Jacobian, the metric tensor can be found from g_{mn} = (J^T J)_{mn} where J^T is the transpose of the Jacobian. Since J^T J is a symmetric matrix for any matrix J , the metric tensor is always symmetric. (In fancy-pants math lingo this is called a symmetric bilinear form.) What is the real-life consequences of this? The distance from a to b is always the same as the distance from b to a , no matter what kind of crazy coordinate system you are living in!
If we want to calculate the length of a parameterized curve x^r = x^r(u) where u is a parameter with respect to some coordinate system, then we can write an infintesmal displacement element as dx^r = p^r(u) du . The length of this displacement is ds = \sqrt{g_{mn} p^m p^n} du  and the length of the curve from u=u_1 to u=u_2 is L =  \int_{u_1}^{u_2} ds = \int_{u_1}^{u_2} \sqrt{g_{mn} p^m p^n} du .
So we need the metric tensor to define distance along a curve when we are in non-cartesian coordinate systems, such as spherical or toroidal. From the metric tensor one can then start to study the "curvature" of a coordinate system. More soon!
In Tensor Calculus, a Jacobian is a matrix defined asJ_{mn} = \frac{dy^m}{dx^n}  where the y^i 's are a new coordinate system defined in terms of the original coordinate system, the x^i 's. (Note that we are using subscripts, x^2 denotes the second element of the \mathbf{x} vector.) The determinant of this matrix J=det([J_{mn}]) is important because this represents the constant of proportionality between volumes in the old coordinates and in the new coordinates. As a simple example polar coordinates is the transformation  (x,y)= (r \cos {\theta} , r \sin {\theta} ) . When we want to perform an integration in cartesian coordinates by transforming into polar coordinates, we write \int f(x,y) dx dy = \int f(r,\theta) r dr d\theta  , the factor of r is precisely the Jacobian. So in general, to convert an integral in the x^i coordinate system to the y^i coordinate system we have \int f(\mathbf{x}) d\mathbf{x} = \int    f(\mathbf{y}) J(\mathbf{y}) d\mathbf{y}  where \mathbf{x}=(x^1,x^2,\cdots,x^n)  and \mathbf{y}=(y^1,y^2,\cdots,y^n) .

In differential equation theory, the Jacobian matrix plays a key role in defining the stability of solutions. As a simple example, consider the matrix ordinary differential equation \dot{\mathbf{x}} = A \mathbf{x}  where A = \left(\begin{array}{cc}a&b\\c&d\end{array} 
ight) . Because this is a linear system, the solution will always be a linear combination of exponentials \mathbf{x} = \mathbf{v_1} e^{\lambda_1 t} + \mathbf{v_2} e^{\lambda_2 t } where \mathbf{v_{1,2}} are the eigenvectors and \lambda_{1,2} are the eigenvalues, and t is time, which is positive. Since t > 0 , we must have  Re(\lambda_{1,2}) < 0 for the solution to decay to a steady state. If this is violated for any \lambda_i then that exponential "blows up" as t 
ightarrow \infty , since it is an exponential with an ever-increasing postive argument. Note that if the eigenvalues are complex then the imaginary part of the eigenvalue is related to the oscillatory part of the solution.

A  \lambda_i  would be called an unstable eigenvalue of the system and also forms part of the vector space called the unstable manifold. Instability is defined as the tendency for a system to shoot away from a certain state when it is slightly disturbed (perturbed) from that state. Stability is the feature of a system to come back to a certain state if it is slightly perturbed from that state.

Stability has important consequences for applications, because it can determine if your chemical/combustion reaction will go out of control, of if the species in your mathematical model go extinct, etc, depending on what the differential equations describe. Whatever your equations describe, knowing if the solutions are stable is pretty important and usually the first step of an analysis. If you have stable solutions, then you can reasonably trust numerics but if you are trying to numerically simulate an unstable solution of an equation, you must be much more careful. In these situations you want to use specialized integration algorithms that preserve certain properties of your solutions, like if it is symplectic. More about this later!

LaTeX finally works

| | Comments (0) | TrackBacks (0)
Yes, now I can write Euler's Identity properly: e^{i \pi } + 1 = 0 . This required some heavy hacking on the MTLaTeX plugin, mostly in telling LaTeX where to find style files and fonts. I fixed some glaring security bugs waiting to happen and improved error reporting. Once I started looking at the source, it was pretty apparent that it was translated from PHP *wince*. I started an overhaul, but it definitely needs a rewrite from the ground up. It would be nice to have config parameters viewable and changeable within MT. Thankfully MT has some pretty good documentation.

LaTeX makes math jokes so much more fun:

\int{ \frac{1}{cabin} } = \log{ cabin} + C

Don't forget the + C , it's important. 

Thesis Revisited

| | Comments (0) | TrackBacks (0)
Enough time has passed after the defense of my masters that I can stand looking at it again, so I did a git svn clone of my old svn thesis repo and put it on my gitweb. The scary-sounding title of my thesis was: Solitary Wave Families In Two Non-Integrable Models Using Reversible Systems Theory. It is 48 pages of gobbleygook unless you have some decent differential equations and linear algebra background. The presentation that I gave during my defense is at least a tiny bit more digestible. It at least has a Sherlock Holmes quote and some pretty pictures. One sentence english translation of my thesis: I found some solutions to some equations that people hadn't found before.

One chapter of my thesis was accepted and published in Communications in Nonlinear Science and Numerical Simulation. Here is the abstract. The actual print publication date is Volume 14, Issue 5, May 2009, Pages 1999-2005, but it is "pre-published" online.

Next on my list is to get LaTeX rendering to work in MovableType.

People Pay for Oracle?

| | Comments (0) | TrackBacks (0)
I was utterly amazed when I had the pleasure of interacting with an Oracle database at work and realized that even the latest and greatest Oracle 10 command-line shell has no readline support.  Are we still in the days of vacuum tubes? Seriously people! Thankfully there is a spiffy utility called rlwrap which saves the day. It acts as a buffer between another interactive program and provides proper command completion and history. 

GitX 0.5 has Gravatar Support!

| | Comments (0) | TrackBacks (0)
GitX just auto-upgraded itself and the interface just keeps getting prettier and more functional! Check out the spiffy Gravatar and one-click gist creation: gitx-gravatar

Running a Factor Script

| | Comments (0) | TrackBacks (0)
For those who are put off by the interactive UI part of Factor, you can run a script from the command-line like so

#! /Users/leto/git/factor/factor  -script

USING: gsl gsl.sf.result gsl.sf.bessel gsl.sf.log kernel tools.test ;

"gsl.sf" test

Note the space after the ! is necessary because every "word" in Factor must be separated by a space. The practice of running factor as a non-interactive script is not encouraged, but in certain  situations it wins the day. The above script could be factored to take an argument of a subsystem to test and then I would make a key-binding in vim (or emacs or whatever) so that when I am editing a file and I type ,t it shows me the results of that subsystems tests.

All of this stuff can be done in the interactive UI, but I think people will fiddle with Factor more  if they can easily bolt it onto their current workflow. People tend not to even try things that require totally changing their current tool chain. For me, I am editing the source of the GSL bindings in VIM, so having that script is invaluable. I hack on the source and whenever I change anything important I run the tests by hitting 2 keys. It is really important to make running and writing tests as easy as possible, or they won't get written at all. 

Today ...... is a good day to hack.

New Factor Git repo

| | Comments (0) | TrackBacks (0)
You can view my new factor repo's gitweb. Or you can clone my repo with

git clone http://leto.net/code/factor.git

This should start getting pulled upstream into the main factor repo sometime soon.

The GSL bindings are now in "extra/gsl", which is the extra.gsl namespace in Factor. I have bindings to all of GSL's special functions, I am currently working on documenting the Bessel functions and writing tests for the functions which take/return gsl_sf_result structures. If you would like to see another subsystem, just ask and I will let you know if it is doable. There are almost 50 subsystems, so if you want to help: clone, hack, commit and push!

CouchDB talk at OpenSourcery

| | Comments (0) | TrackBacks (0)
I attended a presentation at OpenSourcery by Chris Anderson about CouchDB. He showed off  Futon, which is CouchDB's online web interface, which allows one to do normal CRUD, as well as set up replications, run tests and set configuration variables. It has some simple JavaScript functions which are basically map/reduce elements and it seems to be tightly integrated with jQuery. When I asked about Prototype I got the "Why are you still using Prototype?" spiel. Perhaps I should actually look into why people think jQuery is so much better.  Anyway, Here are my rough notes of the interesting features of CouchDB that caught my eye:

HTTP server + JSON Doc DB (key/value pairs), RESTful

Incremental Map reduce views

peer-based replication

multi-master  OR push all changes to one write-master and + read slaves

concurrency over serial speed

Ex: lotsofwords.com = 120GB database, 200ms response

written in Erlang

sharding via hash functions

documents vs. relations

each doc has a "revision"

first in wins

standalone apps via _external servers 

p2p replication - this is really cool and powerful

_external servers - api to parse request as json, filter it and then return

rollup = reduce 

re-reduce phase =~ aggregate



Clicky Web Analytics 42