Philosophic musings

Filed under: philosophy — jlm @ 21:28

So, what is free will, really? Well, there’s enough answers to that question that another one can’t hurt. I consider free will to be the ability to consider the choices that one may make and decide among them. That would make the sensation of free will the feeling that one is considering choices and deciding between them.

This really boils down to what “ability” is though, and for all that it seems superficially simpler, it seems to be fundamentally tougher concept. I had corn flakes for breakfast today, but I could have had Cheerios — or could I have? This happened this morning, the past is fixed, so I couldn’t have had Cheerios because I didn’t. What does it mean to say “I could have had Cheerios.” when “I had Cheerios.” is false?

It means I was considering what to eat, and Cheerios was a choice under consideration. When we make choices, we model (consider) the result of the choices, and it’s to that model that “I could have …” refers.

The human mind is extremely complicated and poorly-understood. Let’s consider a far simpler system: A chess program on a computer. Does it have free will? Well, it needs to make decisions: Does it move this pawn, sac that knight, develop that rook? It calculates the results of all these possible actions, as thoroughly as it is able, and decides upon a move.

It goes through a lot of effort, but the programmer who designed it could tell you exactly why it chooses the move: It calculated this series of moves as being the best for both sides as near as it could figure, resulting in this board position, which it evaluated as superior to the board positions from the other possible moves, blah blah blah, the point is as a consequence of its programming it couldn’t have done anything other than queen takes pawn.

Those of us outside the program see it that way, but the program has to consider all these other moves. It has to model their consequences. It does a ton of calculation, and eventually makes a decision. It “could” have sacrificed the knight, in the sense that the decision mechanism has to consider that possibility. It “couldn’t” have done so, in the sense that its decision mechanism has to reject it.

I “could” have played hooky from work yesterday, in the sense that my decision mechanism considered the possibility and modeled the consequences. I “couldn’t” have played hooky, in the sense that my decision mechanism rejected it. That feeling of your decision mechanisms in action is the sense of free will.


Restarting firefox after a crash

Filed under: linux, web — jlm @ 15:11

After a crash, do you get messages saying firefox is already running and to shut down your old instance before starting up a new one? You need to delete the invisible “.parentlock” file in ~/.mozilla/firefox/$profile. It might also help to kill any gconfd processes and remove any files named ior anywhere under ~/.gconf (find them with find ~/.gconf -name ior).

Why can’t these apps store some kind of host-process identifier in their lockfiles, so they can detect staleness? (See eg. screen, which easily distinguishes local-live, local-dead, and remote.) gconfd is especially annoying, because it doesn’t report the errors except to the syslog, so the user just gets the mysterious symptom of their configuration settings disappearing.


Sea of gold

Filed under: biking, so. cal — jlm @ 17:00

It was a nice warm day today (unlike all of last week), so I rode down to the beach this afternoon as a break from work. Now, I’d heard the phrase “sea of gold” applied to the ocean before, but this was the first time I’d seen it. The angle of the sun made the vast expanse of the sea look like how you might imagine molten gold*. It was beautiful. It was also painful to look at because it was so bright. In ten minutes only the distant ocean looked golden, and in fifteen the entire effect was gone.


* Actual molten gold looks glowy red-orange, like pretty much any other molten metal, because the black-body radiation exceeds the reflected light.


Protecting running scripts from modifications

Filed under: programming — jlm @ 13:48

The shell reads scripts in as it runs, and not even nicely line-by-line, so when you modify a running script, weird things can happen as the shell gets inconsistent versions. Usually this just results in harmless errors like “/home/jlxmodmap not found”, but if you’re like me you worry about “rm tmpfile; process importantfile” turning into “rm importantfile”. The usual technique for the paranoid is to “mv script script.old; cp script.old script”; the shell sees the old script, which you keep unmodified, while you edit the copy. But it’d be nice if you didn’t have to do this everytime…

So, someone told me the trick of having all the work a script does happen in a shell function, which you call at the end of your script. I’m using this for my .xsession (canonical example of a script modified while it’s running), which looks like:

main() {
  do stuff
  do more stuff
  do even more stuff

voilà. It’s already read in all of main() by the time it runs it, so you can modify it freely, except when it’s just starting up and parsing things.


Men are from Earth, women are from Earth

Filed under: science — jlm @ 17:04

So, the results from the meta-meta-analysis (seriously) are in: Despite what well-selling relationship books may tell you, men and women are way more alike than different. Ha! I figured this was all over-exaggerated and over-weighted.

Popular science version

Real science version


Why to wear shoes, II

Filed under: biking, humor — jlm @ 07:17

[photo of my shoes]



Filed under: humor — jlm @ 14:19

This review of The Story about Ping made me (literally) laugh out loud.

[book cover art]

[link to amazon.com review]



Filed under: math — jlm @ 08:27

So, can spokes help hold our Orbital (see below post) together? After all, internal tension acts mostly transverse to the centrifugal force whereas a spoke would act mostly along it. How about attaching the spoke to its opposite point on the Orbital?

Well, centripetal acceleration at a distance r from the center we already worked out to be a = r·4π²/d². If the spoke has linear density σ, then the mass of a bit of spoke Δr long would be ΔM = σΔr and have weight Δw = aΔM = r·(4π²/d²)·σΔr. So the total weight of the spoke half would be w=∫dw=∫r·(4π²/d²)·σdr = (4π²/d²)·σ∫r dr = (4π²/d²)·σ·(r²/2) = (2π²/d²)·σr²   (integrating from 0 to the Orbital’s radius).

The tension on the spoke just from its own weight is that of both halves, or T = (4π²/d²)·σr². This gives a T/σ of (4π²/d²)·r² just for the spoke to be strong enough to support itself. With d = 86400 s and r = 2×109 m, we’d need a strength of 2×1010 m²/s², which is as much as we’d need for the Orbital to support itself with internal tension anyway! Tweaking values won’t help, as in both cases the equations work out to T/σ = a·r. I think this means that diametric spokes can only be less effective than a band at holding a spinning structure (of any size) together.

What if we add a hub? Then the tension on the spoke is halved, but we have the problem of holding the hub together. We can also vary the spoke thickness, because tension is not uniform over it: Near the Orbital, it’s only carrying the support load, but at the hub it has the load from its own weight as well. With constant specific material strength S = T(r)/σ(r) and support load s, and Orbital radius R, we get the integral equation T(r) = s + ∫rR dw = s + ∫rR r·(4π²/d²)·σ(r) dr, or σ(r)·S = s – ∫Rr r·(4π²/d²)·σ(r) dr.

This gives the differential equation σ'(r)·S = -r·(4π²/d²)·σ(r) with initial condition σ(R) = s/S. At this point, I had to go and dust off my old math books. In standard form, the diff. eq. is σ'(r)+(4π²/Sd²)·rσ(r) = 0. This has solution σ(r) = (s/S)·exp(-A(r)) where A(r) = ∫Rr(4π²/Sd²)·r dr = (4π²/Sd²) ∫Rr r dr = (2π²/Sd²)·(r² – R²).

This simplifies to σ(r) = (s/S)·exp((2π²/Sd²)·(R²-r²)). At the hub r=0, so we have σ(0) = (s/S)·exp(2π²R²/Sd²). So the tension on the hub is T(0) = s·exp(2π²R²/Sd²). Kevlar has a S = 2500 MPa/(g/cm³) = 2.5×106 m²/s². So, for each pound the Orbital supports, this would place exp(4000) = 101800 lb of tension on the hub. That’s farther beyond scrith’s capabilities than scrith is beyond ours. How about that miracle nanotube cable? S = 37 GPa/(g/cm³) = 3.7×107 m²/s², so T(0)/s = exp(286) = 10124. Trying to hold it together with a hub makes the problem much harder, not easier.

How big is an Orbital?

Filed under: math — jlm @ 06:38

In science fiction, it’s fairly common to use centrifugal force to simulate gravity in space. This is usually used for ships or space stations, but Larry Niven took it to an extreme with his famous Ringworld, which circles a star at orbital distance and spins enough faster than orbital speed to provide Earth-equivalent “gravity” against its inside. Iain Banks thought this was too extreme even for fantastically-powerful civilizations, so toned it down a bit by having a ring that revolves once per day and provides 1 g from its spin. (Niven’s Ringworld needed “shadow squares” between the ring and the star to provide night.) Banks calls these “Orbitals”, places them in planetary orbits, and implies that they’re of planetary dimensions. But, how big is an Orbital really?

Well, we want a period of about an Earth day (d), and centripetal acceleration of about an Earth gravity (g). Consider a point x on the Orbital at angle θ. x = r î cos θ + r ĵ sin θ. To provide an Earth day, the Orbital revolves through 2π radians in 1 d, so dθ/dt = 2π/d. Acceleration is the second derivative of position, so a=d²x/dt²=(-r î cos θ-r ĵ sin θ)(4π²/d²). We want ∥a∥ to be 1 g, so ∥a∥ = r·(4π²/d²) = g, or r = g·(d²/4π²). To match Earth, g should be about 9.8 m/s² and d about 86400 s, which puts r at about 1.9×109 m.

That’s huge! (Though not Ringworld huge.) The radius of the Earth is only 6×106 m, and Jupiter is “only” 7×107. An Orbital is 300 times as wide as the Earth. (Though potentially much shorter.) But still not orbital distances– it’s only 1% of the size of Earth’s orbit.

Now, how strong does an Orbital have to be? Well, let’s consider a small section of the Orbital subtending an angle Δθ. This will have length Δl = r·Δθ. If the Orbital has a linear density σ, this section will have mass ΔM = σ·Δl and weight Δw = g·ΔM = gσr Δθ. If the tension is T, the internal force at the edge of the section will be T î sin ½Δθ + T ĵ cos ½Δθ. The i component of this force holds “up” half of the section’s weight, the other edge providing the other half. Using the small angle approximation for sine, we get ½Δw = T·½Δθ, or T = gσr. So the strength we need is T/σ = gr = 2×1010 m²/s². If the Orbital’s cross-sectional area is τ, then the internal tensile pressure is P=T/τ so T = P·τ. If its material density is δ, then σ=δ·τ, so T/σ = P·τ / δ·τ = P/δ, which tells us that the 2×1010 m²/s² is the ratio of tensile strength to density we need. This is 10000 times as strong as existing high-tension materials like Kevlar (stuff like steel and titanium and diamond isn’t particularly strong in the tension department) and still 600 times as strong as the supposed carbon nanotubes that they say may make a space elevator possible. And this is just enough for the structure to not tear itself apart by its own spin, much less support anything you want to have on the Orbital. I thought solar tides might be an issue, being about 9×1020 N for each Earth mass of the Orbital, but the spin tension blows that away at 6×1025 N per Earth mass. So, sadly, even through this is orders of magnitude more feasible than the Ringworld, it’s still never going to work.


Berkeley DB locking

Filed under: programming — jlm @ 18:28

The locking in Berkeley DB is fundamentally broken.

This isn’t something that’s bitten me recently, but talk about it did come up recently, and many BDB users are unaware of the problem. It’s especially surprising when you first encounter it because BDB is so solidly done in the rest of its implementation and the problem isn’t advertised. Of course locking will work — everything else does!

The problem is that BDB locks are bare mutexs, and no forcible release mechanism is provided. There is no way to rollback to a state before a lock was acquired. There is no way to retry. You take the lock, do your modifications, and release. Or you take the lock, do some of your modifications, and the circuit breaker trips, power is quickly restored, the server reboots, and now your BDB is hosed. You can’t take the lock because BDB thinks your old instance has it. You can’t release the lock because you don’t have it. If you could release the lock, your database is inconsistent because you can’t rollback. The only way you can do anything is to blow away the BDB environment and make a new one (suffering collateral damage when you just want to destroy a mere lock) and hope that the partial transaction you’re unleashing as a result isn’t a problem (and if it isn’t, why did you need a lock?).

So, what can you do? You can try to build your own transaction system on top of BDB, but that’s a lot of work. A lot of work, when there’s better featured databases out there already. If you were using BDB and need more, MySQL is probably good enough for you. It has partial transaction support (probably more than you want to write!), and does have a library implementation (libmysqld) so you can avoid running a server and just use data files, like in BDB. If you need full transaction support (good luck implementing that on your own), there’s always ye olde enterprise-grade PostgreSQL. Or maybe you don’t need transactions after all? Then Berkeley DB is solid as a brick.

Powered by WordPress