If you’re doing a lot of simulations, optimizations or other muckity-muck, it’s easy to start writing down equations with matrices like A^{-1}B inside of them. And, depending on the application, it might be a really good idea to precompute this matrix. But there’s that pesky inverse operation, and generally inverting a matrix is a no-no since it can easily land you in trouble when that matrix isn’t really very stable.

So, here’s a trick you can use in these situations to avoid explicitly inverting the matrix A.  It turns out that instead we can just solve the system Ax=b a bunch of times in order to explicitly compute the product matrix A^{-1}B.

It’s pretty straightforward.  If we want to extract the ith column from A^{-1}B, we need to solve the equation x = A^{-1}B e_i, where e_i is the indicator vector with 0s everywhere except the ith entry, which is 1.  If we just massage this equation a bit, we get Ax = Be_i = b_i where b_i is the ith column of B.  Sweet!  If we have a good way to pre-factor A or otherwise prepare it for repeated solves, we can also keep this solution method pretty efficient.

via the wall street journal:

IKEA’s 3-D team is housed in the same building. Faced with a shortage of people capable of doing this work, the company is collaborating with photo schools to teach computer design skills. It is also retraining photographers to better create a scene without a camera. The company said it is retaining all photographers, carpenters and set designers and reapplying their skills to the 3-D environment.

via Paleofuture

This is the fifth post in a series of OpenGL “tutorials” explaining how to get a triangle on your screen using as few lines of code, in as many languages, and on as many platforms as possible.

So, as should be apparent from my last two posts, I’m switching over the front end of my research system to use the Qt GUI framework.  Naturally, since I’m trying out a new platform here, I want to post a simple way to get a triangle up on the screen as quickly as possible.

Read the rest of this entry »

This is just a quick note on how to get up and running really fast with Qt on a mac.

  1. Go ahead and download the installer from the Qt site.
  2. Install Qt and note where you created the QtSDK directory
  3. Add /…/QtSDK/desktop/…/bin to your shell path.  (This ensures qmake is on the path among other things)

That’s it.  I found a reasonable tutorial here.  BUT, there’s one more slight rub.

If you follow through that tutorial, you’ll see that Qt prefers you to use their own autotool-like cross platform build system.  This usually involves issuing the three shell commands “qmake -project” “qmake” and then “make” in succession.  However, on mac, doing this will get you an app bundle.  What if you still want to be able to print to standard out and launch the program from the terminal in the normal unix fashion?

This can be fixed by editing the project_name.pro file generated when you issue “qmake -project”  Simply add the following line:

CONFIG-=app_bundle

Then the qmake toolchain will generate a nice normal unix program.  If you want to create an app bundle to distribute, just remove the line, and you’ll be all set again.

I just decided to try switching over the front end of my project to Qt.  I was trying to make an immediate mode GUI before, but it turns out that’s actually a terrible idea.  There’s a couple of reasons why:

  1. major GUI toolkits have had a lot of people, time, and attention given to them, so they have many more features than you could hope to implement on your own.
  2. major GUI toolkits also have a tremendous amount of HCI wisdom and knowledge embedded in them.  If you use a good GUI toolkit, your program will probably be somewhat more usable even if you don’t know the first thing about usability.
  3. immediate mode GUIs scale poorly to more complicated interfaces.  They don’t have hierarchical layouts and more complex reactive functionality has to be hand coded.

I figured I should throw something up and warn people away from the siren’s call.

“Cyberspace. A consensual hallucination experienced daily by billions of legitimate operators, in every nation, by children being taught mathematical concepts… A graphic representation of data abstracted from banks of every computer in the human system. Unthinkable complexity. Lines of light ranged in the nonspace of the mind, clusters and constellations of data. Like city lights, receding…” — William Gibson, Neuromancer (1984)

Is TRON a good depiction of cyberspace, Gibson’s “nonspace of the mind”? I’m inclined to say no. Space in TRON is very physical and literal. On “the grid” time and space have their usual relationship: to get from point A to point B requires an amount of time proportional to the amount of space. There are concrete forms, buildings, hallways, corridors.  TRON looks really cool, but it fails to capture much of the essence of computers, the internet or digital interaction.

The problem is that cyberspace is a misnomer.  Almost every attempt to make our online experience spatial has failed.  Chat rooms are not rooms; online “stores” are more like mail-order catalogs; the distance between any two points is the same: a hyperlink.  Despite pervasive use of spatial metaphors, the internet is for all practical purposes simply not a space. Still, the idea of cyberspace persists, an alluring, romantic thought.  What does our massive interconnected network of computers, information, and people look like?  What is its shape, its architecture, its landscape? Read the rest of this entry »

Follow

Get every new post delivered to your Inbox.