Saturday, October 19, 2013

Saturday: Part 2: Sushi and a lot of crazy tinkering

Sushi:

I had a nice seat at position #1, so I could spy on the new things coming out and plan ahead.

And then, just when I was about to order a salmon and an ahi, a giant pile of them appeared on the belt.  Today was the first time in a long time that I've been able to draw solely from the belt and not order anything.
Crazy Tinkering 1: Google

There are a lot of problems that are in general hard to get right.  Specifically, converting speech into machine usable text strings.  Linux has a few programs that attempt to do this, but they tend to be not that great, or require a lot of training runs, or restriction to a small corpus of words.  Apple came out with their magic Siri, and Google followed soon after with their non-anthropomorphic "Speech API."  They added this API somewhat sneakily to chrome browsers, but since part of that code is open source, it didn't take long for people to find the magic and post details.

My first attempts kept failing, but after doing a bit more research, it seems that the "status=5" error I was getting is not "bad file type" that the internet people were trying to claim, but rather "no match found."  This would be returned for a bad file type, but actually means that no words were detected, and so no text could be constructed.  Switching my test sound clip from one taken at a bit of a distance to one taken by speaking directly into my laptop made it clear that this was the problem my test code was having.

Conveniently, Google also provides the inverse operation as well:  given a text string, they can convert it into a sound file using the same voice that my phone's search thing uses when I ask it a question.  The problem this raised?  The speakers attached to teddiursa aren't driven strong enough to be heard over downtown noise.

I think that these two similar problems suggest that the right solution to the problem would be to get a bluetooth headset thing, and use that to connect to a speech to text to speech program.

"Why would you want this, and what would you do with it?"

I don't know.  That's not really the point right now.  I'm sure I could come up with something.

Intermission:

Holy shit, TCM is showing this movie.  I assumed it was a generic Italian/Spanish horror movie, and then I saw Shatner.  There's only one movie commonly in the intersection of {Shatner,horror movie,non-English}.  As a side note, the reason I couldn't place the language is because it's in Esperanto.  The other commonly known fact about the movie.

Crazy Tinkering 2: Wait, that's actually an easy problem.

I live in a tall apartment building, and everyone has wireless routers.  Everyone.  That immediately presents the obvious question: where exactly are all these routers located?

"Wait, huh?"

Yeah, if you have signal strength measurements for all the routers, you should be able to triangulate things back and come up with a solution.

"But, isn't that like a lot of variables?"

Surprisingly, no.  You need to minimize the equation:
r = d(t)_i^2 - ( (x(t) - X_i)**2 + (y(t) - Y_i)**2 + (z(t) - Z_i)**2)
where d(t) is the signal strength distance, (x,y,z)(t) is your current position, and (X,Y,Z)_i are the assumed fixed positions of all visible routers, indexed by i.  This means you have 3*i fixed position values to find, and 3*j samples of your own position.  This position is listed as a function of time, as you should be moving around to break the degeneracy of the problem if you don't.  You have i*j samples, which is larger than 3*(i+j) for most values of i,j.

A quick google search led me to this page, which gives the equation:
d(t) = 10**((27.55 - (20 * log10(F * 1e3)) - S)/20)
where F is the channel frequency the router is using, S is the signal level in dB, and d(t) is in...meters?  I assume it's of order meters, based on the values I get for my own router.

How well does it work?  This is where the whole thing fell apart, as I don't have linear algebra code for perl that I know well, so that means I need to write the solver in C, which moves this from a "quick hack" to "actual problem."  I know the Jacobian values:
J_nm = \pm (2 x_n - 2 u_m)
so the solution is just solving
J^T J \beta = J^T r
until it converges.

Plotting up the raw d(t) values makes it look like this is plausible.  Index 1 is my router, and index 3 is what I suspect is my neighbor's.  I moved around t=1650, went to sit on my bed for a minute or so, then returned to the couch.  There's a clear increase in distance, followed by a return to the "couch" normal.

Videos:

I kind of want to play this game again.  In my head, the name is "Betrayal of Haunting at House on the Hill of Haunts."  The real name is much shorter.



Cool, Squirrel Girl.  I've gotten good at recognizing voices, as I immediately guessed it was Tara Strong.



Links:
  • I really can't imagine what absolute assholes live in Maryville, Missouri.
  • The truth is that we don’t know the truth. Mary Jones, founder of the North Texas Tea Party Patriots, could be murdering puppies and babies all this time, drinking their blood, and fashioning bizarre hats from their bones. I just don’t know, all I'm doing is asking the question.
    • Side note on this absolutely ridiculous story: have you ever looked at lists of Tea Party groups? It's Life of Brian, but in real life.  Go look at this list.  "North Houston Tea Party," "North Houston Tea Party Patriots," "North Texas Tea Party", "North East Texas Tea Party Patriots". It wouldn't surprise me if a lot of these are various flavors of "you're doing it wrong, so I'm going to start my own team!" or "you can't tell me what to do, you're some sort of collectivist!".
  • Pika-kiss!

No comments:

Post a Comment