Home
Drama goes here. [entries|archive|friends|userinfo]
Sean Lynch

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

A dairy ferry for Ephemerisle [Oct. 6th, 2009|01:22 pm]
[Tags|]

[info]spoonless observed that the rope ferry that we used to get people back and forth from the houseboats to the main platform at Ephemerisle was made of milk crates and milk jugs. Instead of just commenting, I figured I'd do a full-fledged post about it, since I spent a couple of hours helping put it together.

The original plan was to use the milk crates to build bridges between the platforms. The idea was to fill them with a floaty material (styrofoam) and connect them together with zip ties, creating flexible floating bridges. Unfortunately, bare styrofoam turns out to shed bits in the water, making a huge mess, so a bunch of us volunteered to help re-do them when James Hogan asked. At Chicken John's direction (he was off taking care of other stuff), we swapped the styrofoam for (brand new, empty) milk jugs someone had obtained after first sealing the caps with silicone caulk and screwing them on. Four milk jugs turn out to fit perfectly in milk crates. Go figure ;-)

I'm not sure how helpful or necessary the silicone was, and it was definitely the most labor intensive part of the process. It might have been better to put it on the jugs instead of the caps, but we pre-loaded the jugs into the crates in order to avoid having to hold them while putting the caps on. The crates were held together in rows of four with two zip ties per junction, then held to the next row with four zip ties per row, on one side. The idea was to put the zip ties on the bottom and still have some ability for the bridge to flex.

The platform layout ended up getting changed due to significant underestimation of the construction labor/time/challenges, so the bridges ended up being unnecessary. One of the two we managed to finish was used to support the table for the group dinner Saturday night. The other ended up being repurposed as a rope ferry to cross the 40 feet from the houseboats to the platform. It saw quite a lot of use.

The milk crates themselves were a little too bendy and difficult to stand on by themselves, so someone got the idea to tie four long 2x4s across the top of them, lengthwise, one for each column or crates. Once the 2x4s were laid out across the top of the 4x20 milk crates it turned out to be remarkably stable.



I suspect not all the crates were held together with the same number of zip ties; when we reconfigured them we just left groups of them tied together, and I think some of them were held to neighboring crates with just one zip tie. In spite of this, I was the only person to end up putting his foot through the platform, on Sunday during the teardown. You can also see that the front row of crates has no milk jugs. We put the crates together in 4x4 sections with the intention that at least one of them be flipped over, but they all ended up getting put together facing the same way, leaving one end open. Still, with 128 lbs of flotation per row and the 2x4s to spread out people's weight, I think only a couple people ended up getting wet. From the ferry, not at Ephemerisle ;-)

Update: Here's some video of the Dairy Ferry in action. It's right at the end, not that that helps since Vimeo doesn't seem to let you skip ahead.
link5 comments|post comment

Lessons learned at Ephemerisle [Oct. 5th, 2009|10:31 am]
[Tags|, ]

These are things I personally learned at Ephemerisle, things I plan to do differently/better next time, well, except #7 which I hope will be the same next time ;-)

8. Roll with the punches.

This isn't really a lesson for me, because I have the most fun with the least structure, but since Ephemerisle is about learning how to live on the water, almost everything was by necessity very ad hoc, because almost nothing went exactly according to plan. Anyone who expected to have everything laid out for them probably didn't have a very good time. We were making Ephemerisle and deciding what it was going to be, whereas some (very few) people there seemed to expect to have Ephemerisle delivered to them fully baked on a silver platter.

7. Matt Bell is a friggin genius.

Matt Bell is the inventor of Reactrix and his Ephemerisle projects were amazing. The Ripple Theater, the Achievement Lounge, and the RC boat decorated with electroluminescent wire were like acid trips for the sober. Not that I was sober, mind you.

6. Don't bring the laptop.

I wasn't worried about the laptop being stolen so much as misplaced, and I didn't end up using it at all, even though my aircard works fine out there. My cellphone worked fine for everything I wanted to do internet-wise.

5. If you're on a houseboat, make everyone who hasn't done it before go through the orientation.

The orientation goes faster with fewer people (unless they're pretty girls who distract the person giving said orientation), but having fewer people know what to do means that you can get really screwed if the oriented people are unwilling to help. I had to move the boat to the houseboat flotilla practically by myself.

4. Bring personal water transportation.

I didn't mind swimming to the platform and back to our antisocial houseboat, but that meant running around in just my swimsuit and not really being able to bring stuff back and forth. An inflatable kayak would have been awesome to have, and I'll definitely bring one next year. And don't forget the paddles/oars for whatever kind of boat you bring! Several people had kayaks/dinghies without paddles/oars!

3. Cotton does not dry.

There were plenty of opportunities to get wet, intentional or otherwise. My jeans, underwear, and t-shirt got soaked when I went in the floating human hamster ball and the zipper broke open. It was a good excuse to run around in my sexy Diesel underwear, but it was cold, especially when I fell in going out to the Achievement Lounge. Fortunately, I had a pair of nylon backup pants, which was also fortuitous when I put my foot through the rope barge and ended up with a whole leg underwater on Sunday. Wear quick-drying synthetics or bring lots of spare clothing. My speedo took 30 minutes to dry, even when I was wearing it. My hiking pants barely stayed wet at all.

2. Unless you know you're leaving on the same boat you stayed on, keep your stuff in a small number of bundles.

I ended up being separated from my suitcase, which had my car key, when we were heading back. Fortunately the person whose boat I left it on was still unloading when we got back to the dock. A stuff sack would have made a huge difference, as I could have put my chairs and bedding in it. The extra folding chairs were totally unnecessary.

1. Know the expectations of the people you're going with, especially if you're sharing transportation/sleeping/living space.

Practically all of the houseboats ended up shutting down at some point because at least one person on each of them wanted to sleep. Getting my boat to raft with the newly forming flotilla was like pulling teeth. My boat was the second houseboat to leave on Sunday, and three of us ended up pulling our stuff off the boat because we wanted to party a little longer and help tear down.


link1 comment|post comment

Calling an invasion an invasion [Sep. 14th, 2009|05:30 pm]
I stopped reading antiwar.com a while back because their tendency to use heated rhetoric to make their point gets on my nerves after a while; I can't stand reading articles I agree with that I can't show to someone who isn't already converted because the language just makes them look like whack-jobs to the general public.

Then along comes a tweet from kalimkassam: "BREAKING: US Confirms Somalia Invasion http://bit.ly/11prEc". "Holy shit!" I thought. "Opening a war on a new front? How stupid can you get?"

Then I realized I was reading this on antiwar.com, so I decided to check Google News. Sure enough, everyone else refers to it as a "raid," and instead of "helicopter-backed troops" it's just "helicopters." Kalimkassam eventually agreed with me that yes, raid was a better term. George Donnelly, on the other hand, broke out his New Oxford American Dictionary and began beating me over the head with it, saying that any incursion into someone else's territory is an invasion.

Well, sure, this is true, it is technically accurate to call it an invasion. But given that in most people's minds that raises images of infantry, tanks, conquest, and most of all, sticking around,
it seems like the only reason to use the term "invasion" in this case is if you're trying to rile up some anger. Which is fine, if your goal is to preach to the converted. If, on the other hand, your goal is to report what's happening, you'd try to use the term that's most likely to conjure up the correct image in someone's mind: that of helicopters going in and blowing up a few targets. Something like, oh, maybe "raid."

Along with the dictionary-head-bashing, George accused me of suffering from statist brainwashing. I'm starting to think I'd be better serving the cause of liberty by educating libertarians about not driving away the general public than by educating the general public about liberty. Not that I'm one to talk, here. Still, it's disheartening to hear this sort of response.

linkpost comment

Defending against real-time attacks [Aug. 25th, 2009|10:00 am]
[Tags|]
[Current Location |Mountain View, CA]

NYT has an interesting article about how attackers are using trojans to capture authentication in real time, this defeating most existing forms of two factor authentication. If all you have to do to "prove" possession of the token is to pass numbers to and from it (or just from for time-based tokens), then it doesn't matter if the attacker is sitting at your computer with the token or sitting 6000 miles away with his own software on your computer.

Because the display, keyboard, and all peripherals of a computer are controlled by the operating system, if the operating system is compromised, nothing displayed or entered that passes through the OS and that the OS can manipulate undetected can be trusted. One way around this would be to have some external hardware, perhaps part of the computer itself, that computed a checksum of the code it runs, disallowing any surreptitious changing of the code. But in this day and age of bloated software and zero-day exploits, this would be unworkable because it would make software update very difficult, and it likely could still be compromised.

Imagine, though, that instead of doing your banking online, you simply used your computer to type up letters to the bank. You write up the letter in a word processor or some application that made it easy to generate instruction letters for the bank, then you'd print them out, read them, sign the letter, and mail it to your bank. Malware on your computer could alter the letter, but that could easily be discovered when you read the letter. This would be inconvenient, but it would not be very vulnerable to attacks by malware. A similar technique is used by (decent) electronic voting machines to prevent tampering: they print a record that you can read and verify for yourself, then that printed record is stored for possible later audit. In this case, though, the printout is the action order, rather than just an auditing tool.

Obviously this technique defeats the purpose of online banking, but it is possible to use an analogous technique that would actually be more secure because it would not be vulnerable to signature forgery. The bank gives the customer a device with a USB interface that has a small LCD screen and a PIN pad. The device contains an SSL certificate or PGP key and associated private key, encrypted with the user's PIN. To communicate with the bank, the user plugs in the device, fires up their web browser, and brings up the bank's web site.

The device, upon being told by the computer that the user is talking to the web site, asks the user for their PIN and creates a secure connection to the bank using its SSL certificate and authenticating the bank's certificate. The channel between the device and the bank is secure. No amount of software or even hardware on the computer side can violate this; only tampering with the device itself could. The connection is basically a secure tunnel through dangerous territory.

Once the device is connected, the user need not authenticate to the bank at all via the browser. The user can navigate the site, but any private information is displayed only on the device's LCD screen, never in the browser. The browser itself becomes an untrusted control channel by which the user makes requests and navigates around only. If the user wants to do something other than request information, they do all the normal things in their browser. For example, say I want to transfer $10,000 from my bank to my brokerage account. I initiate the transaction using my browser, the request is sent to the bank, and then the bank asks my secure device if it's OK. The device displays the request on the screen, including account numbers, accounts, names, etc., and asks me if this is what I want. I choose yes, the device signs the request, sends it back to the bank, and the bank performs the transaction.

In order to avoid mistakes reading account numbers, the bank would do the same thing banks normally do for online transactions, requiring extra validation for any account numbers I hadn't had transactions with in the past. The bank or the device could easily store my aliases for each account and display them instead of the account number for any transaction, making it very obvious if a bogus request was sent by the browser.

Assuming all requests are signed by the device only with user verification, and that no input from the user via the browser is ever trusted, and that the device itself is secure, this technique should be safe from any tampering with the user's computer or any eavesdropping on the path between the device and the computer or the computer and the bank. It would also be as convenient as current two-factor authentication, possibly more so. It would be more expensive due to the need for a larger display and a PIN pad on the device, but hardware is getting cheaper all the time.


linkpost comment

The Paradox That Wasn't [Aug. 7th, 2009|12:53 pm]
[Tags|, , , ]

When I was just starting college, my father's uncle sent him an article talking about how our entire monetary system was going to collapse because all money is lent into circulation and interest is charged on it. Increasing amounts of money must be lent in order to pay the interest, and it would eventually all come crashing down under a mountain of interest payments.

This caused me to become interested in how money actually *is* created, and why it hadn't already come crashing down if it was true that increasing amounts needed to be lent to service the interest on the money already in circulation.

Let's say that I started a bank and issued my own currency. For some reason, people use my currency. Let's call my currency $eans. I lend $ean1000 into circulation, charging 10% interest, compounded daily. The formula for compound interest is:

A = P\left(1 + \frac{r}{n}\right)^{nt}

1000 * (1 + 0.1/365.) ** 365 == ~1105.1557816162326 after a year. I round up to $ean1105.16 and give the remainder to Richard Pryor.

Now, obviously there aren't $ean1105.16 in circulation, so it looks like I might be in trouble. And if this were the only transaction I engaged in, I certainly wouldn't end up making any money being a bank, because the customer would just default. But it's probably not going to be my only transaction.

Let's say after six months I loan $ean500 to a second customer. Over the course of things, my two customers engage in transactions with one another, enough for the first customer to have earned that extra $ean105.16 to pay my interest. My first customer pays me off. What do I do with the money I just received?

The answer to this question comes from looking at my balance sheet. My assets and liabilities must balance for me to be a solvent bank. So what are they? Well, $eans are claims on *me*, so any $ean in circulation is a liability. The loans themselves are my assets. So I have $ean1000 in liability corresponding to the first loan and $ean1105.16 in assets. To wipe out that liability, I only need to destroy $ean1000, not the entire $ean1105.16! So I now have $ean105.16 in my hands. These are still a liability to me, however, because they came from the second loan of $ean500, but now I only have $ean500 in circulation.

Now, another six months later, the second customer owes me 500 * (1 + 0.1/365.) ** 365 == 552.58. As you recall, he paid customer 1 $ean105.16, so customer 2 only has $ean394.84 from the original loan. Fortunately, in the meantime I've loaned a third customer $ean250, leaving $ean750 in circulation, of which I'm holding $ean105.16. Since my two remaining customers are the only people in the world holding $eans or having $ean-denominated debt, they have a HUGE incentive to do business with one another. Customer 2 does some consulting for customer 3, for which customer 3 pays $ean157.74, giving customer 2 enough to pay off his loan, leaving $ean250 in circulation, of which I'm holding $ean157.74 and customer 3 is holding $ean92.46.  Again, not enough to pay off his loan.

But note that while I keep needing to make loans to keep the business going in the normal fashion, I've been *reducing* those loans and the total amount in circulation over time. Let's say I want to stop making loans, so I don't take any more customers after customer 3. However, I've been keeping the bank open, which means I have expenses, so I've paid out that $ean157.74 for a teller and a cleaning lady, and I've also bought myself an Xbox 360. That money finds its way to customer 3 since customer 3 owes me money. But he can only pay me back the principle of $ean250 with $eans because that's all that's in circulation.

No matter, I expected that since I don't want to give loans any more. So I accept something else as payment for the interest. Gold, help shutting down the bank, whatever. I only *need* to get back the $ean250 in $eans, since that's my only remaining liability for having printed money. The remainder is just payment for being such an awesome banker.

And that's exactly how the Federal Reserve System works. They have been granted the authority to print money by the feds. They don't generally loan it directly into circulation, though; instead they buy up treasury bonds on the open market to increase the money supply, sell them to decrease it, making interest in the process. They take the original principle out of circulation, using the interest to pay their costs, and the remainder just goes back to the treasury. Strangely enough, the remainder keeps getting smaller and smaller as the FED gets bigger and bigger, though.

There are plenty of problems with the FED, but an interest "paradox" is not one of them.

link1 comment|post comment

Linux >> OS X for running the Second Life viewer [May. 5th, 2009|08:33 am]
I just "upgraded" my MacBook Pro 5,1 (the late 2008 unibody model) from OS X to Ubuntu Jaunty Jackalope. The trackpad doesn't work quite as well as it did under OS X, and at best I can get sound out of one speaker (my USB headset works fine), but the performance of the Second Life viewer is absolutely amazing. I get a smooth 30 fps even in complex scenes with all the shaders enabled ("high" quality graphics). Under OS X these same scenes would drop to 0.8 fps, which I imagine is actually some kind of bug in the viewer but even when it wasn't happening I'd almost never get above around 20fps, and that only at "medium" quality, i.e. with the atmospheric shaders disabled. Voice works significantly better under Linux as well; people complained that my voice was choppy under OS X but I sound crystal clear under Linux.

I've heard a rumor that the major difference between these two OSes from a 3D standpoint is that Apple wrote the OpenGL drivers for OS X and nVidia wrote the drivers for Linux. Perhaps Apple is trying to sabotage OpenGL? They've certainly sabotaged themselves when it comes to courting me as a user. I can do without speakers, a perfect trackpad, and automatic dual screen switching if it means I get a more responsive OS with better 3D support.

Incidentally, I'm actually dual booting, with rEFIt in the OS X partition loading Grub in the Linux partition when I want to boot Linux, which is always.
linkpost comment

Reason has no reason [Apr. 12th, 2009|08:33 am]
[Tags|, , ]

While listening to an interview with Temple Grandin on NPR, I was struck by something she said: a lot of people don't think animals have feelings. To her it's obvious that they do. They feel fear, pleasure, happiness, and probably the full gamut of what humans feel.

I suspect that people who say animals don't have feelings (or emotions, whatever they want to call them) have some special definition in their head of what emotions are: they are this thing that supposedly separates humans from animals. But in fact emotions come from the most primitive part of our brains, and we could probably at least survive on emotion alone.

From the perspective of AI research, I think God "cheated" when he made people. We have a cognitive system that persists in deluding itself that it controls our behavior, when in fact it spends most of its energy trying to rationalize what our limbic system makes us do and acquire the things our reptile brains want. Sometimes, on good days, it manages to defer short term gratification in favor of longer term goals. On good days. (Note: I'm not a creationist. I'll leave it as an exercise to the reader to figure out what I mean by "God.")

Humans are just a bundle of emotions coated by a thin veneer of cognition. When we feel something, it isn't communicated directly to our conscious mind as "you feel fear" or "you're in love" or "you feel jealousy." Emotions affect our physiology and our behavior, and if we can figure out consciously that we're feeling something and what it is we're feeling, we're lucky.

So why is it that practically all AI attempts are trying to simulate cognition? This is seen as the "hard" part of the problem, yet human minds aren't cognitive engines. Cognition is this impressive thing we do that we're actually aware of doing, but it's not really what drives us. We're driven by our emotions and our cognition is enslaved to them. If an AI team ever succeeded in building a machine capable of thought, I think it would just sit there without any emotions to drive it, because without emotions, there really isn't any reason for it to do anything. Logic, by itself, does not even give one a reason to keep on breathing. Only the pain of not breathing and the desire to survive keeps us alive.

Our most basic emotions are completely hardwired. When we see pain on the face of another or hear them cry out in fear, we feel the same thing. We feel love for our children and for those who fit a certain set of proportions whom we have sex with (sorry to de-romanticize it for you, but oxytocin is becoming fairly well understood), We hate those who stand in the way of our goals. To build an AI, wouldn't it make the most sense to start with hardwired feelings and then worry about cognition later?

Facial pose estimation and voice stress analysis have advanced to the point where a machine can determine at least the most basic emotions someone is feeling fairly easily. If an AI were made to feel pain when it saw someone in pain, happiness when they were happy, addiction to the presence of people who make it feel happy, sadness at their departure, then it could potentialy be motivated to want to please people. It could feel revulsion at the sight of blood and love for all human-shaped things the way we feel love for babies; the low-level equivalents of Asimov's three laws of robotics. It would have behavior even if it did not have cognition. Then, add even a primitive cognitive system, and you might get interesting results.

I've made several logical leaps here in the interests of keeping the post short. It probably should have been multiple posts, but it was the AI part I wanted to get posted and that would have been at least the second or third post. I'm happy to expand on any point that doesn't make sense.


link4 comments|post comment

Don't use ATI's latest drivers on Liinux (at least on Macbook Pro) [Feb. 26th, 2009|10:39 am]
[Tags|, ]

Proving that the AMD acquisition hasn't improved ATI's abilitiy to write drivers, my attempt to "upgrade" to the drivers from February was a complete disaster. Dual head support became useless because there was a large empty space above my laptop screen where my upper gnome panel, windows, and Nautilus icons would end up (I suspect this is actually "improved" xrandr support screwing me) and the Second Life viewer would just crash instead of running. Downgrading back to the version that comes with Intrepid has fixed all these problems.

I will admit the possibility that I was somehow running the Ubuntu kernel module with the ATI proprietary driver, but I had uninstalled all the Ubuntu fglrx stuff before installing ATI's stuff. The only reason I attempted to upgrade is that the SL viewer was occasionally slowing to 2-3 fps when it normally runs at 15-20 fps. It looks similar to the old texture thrashing problem I had under OSX, but I don't see any evidence of texture thrashing.
linkpost comment

Ubuntu Intrepid Ibex on Macbook Pro 2,2 experience [Feb. 18th, 2009|01:23 pm]
[Tags|, , , , ]

Finally having become fed up with Apple's "you will do it our funky way or not at all" approach and their shitty OpenGL support, I decided to set up Ubuntu as a second OS. Unfortunately, neither Boot Camp nor Disk Utility would allow me to resize my OSX volume, even after I turned off the safe sleep file and deleted some other big files as suggested online. Boot Camp said "some files can't be moved" and said I should back up and erase my OSX volume. Disk Utility just said "no space left on device."

So I followed Apple's advice and erased the OSX volume, giving me a whopping 110 gigs of space! That was far more than I would have gotten simply using Disk Utility or Boot Camp. Thanks for the great advice, Apple! Unfortunately, I didn't realize that rEFIt lived in the HFS+ volume, but this turned out not to be a problem.

So, as I mentioned, I'd installed rEFIt as suggested in the Ubuntu docs. I burned a 64 bit Intrepid install CD and booted from it using rEFIt's nice boot menu. I then manually partitioned the drive (as OSX was taking up the whole thing) leaving the EFI partition as the first one (I discovered later I didn't really need to do this, as rEFIt doesn't live there and the machine doesn't need it to boot Linux, but it's there in case I need it for something). I made a 1 gig /dev/sda2 for swap and made /dev/sda3 an ext3 root partition. I then went into "advanced" as suggested in the docs and told it to put the boot loader (grub) on /dev/sda3. This turns out to have been a mistake because that only works if you're using rEFIt, which I'd blown away with the OSX partition.

After completing the install and rebooting the system would pause at a white screen for 20 seconds and then say "Operating system not found." This is because rEFIt had been blown away with the OSX partition and the system didn't know to look on /dev/sda3 for a boot loader. So I used Liz's machine to burn rEFIt to a CD (weird on OSX: you just burn the exact .dmg file that it's distributed in!) and booted from that. The rEFIt CD allowed me to boot from /dev/sda3 and everything started the way it would have had I not blown away the OSX parittion.

Not wanting to use a CD to boot, I just guessed that I could put a boot loader in /dev/sda, so I edited /boot/grub/menu.lst to make /dev/sda the boot device, leaving /dev/sda3 as the root, reran grub-install (or was it update-grub?), and rebooted. Voila! After the system waits around for 20 seconds waiting for God to tell it it doesn't have an EFI boot loader, it finally gives up and loads grub, booting me into Linux like a normal computer.

The funny thing is, even with that 20 second delay, Linux still boots in about half the time of OSX, and the delay between logging in and doing useful work is also shorter. Suspend works "out of the box" after updating everything and changing the power management settings, and unsuspending and unlocking seem far faster than they were under OSX.

The issues I encountered were:

- The mouse pointer would become corrupted. Switching to the proprietary ATI driver (fglrx) using System -> Adminstration -> Hardware Drivers and turning off "effects" in System -> Preferences -> Appearance fixed that.

- It took me a while to figure out how to handle two screens. You do *not* want Xinerama or "dual head" unless you don't want to be able to drag windows between screens. I ended up using "resapplet" to configure the screens. The secret is that you need a virtual desktop area large enough to encompass both screens, which resapplet will configure for you, after which you will need to log out and back in. I probably could have done this manually with xrandr or with grandr as well. At this point, all I have to do to switch between two screens and one is to unplug or plug the second monitor and go into "Configure display settings" in resapplet and hit apply. No logout is necessary just to switch back and forth. I'd like to eventually automate this, but I suspect someone will do it for me if I wait long enough.

- The Second Life viewer seems slower on Linux than it was on OSX, though this seems to be intermittent and possibly related to texture thrashing. It's also possible it may just have been because I had "run multiple threads" enabled under OSX and not under Linux. Since I enabled this and restarted the viewer I haven't noticed it being particularly slow.

- It took me a while to figure out how to get audio to come out the right place. It turns out Linux is *much* better at this than OSX, once you know which applet to use. You want "padevchooser," which allows you to pick the output device on the fly for any stream, and to mute and control volume for each stream separately. On OSX, I had to restart applications in order to change which device they output to.

- The touchpad sucks. I haven't yet figured out how to get it to turn off while I'm typing; touchfreeze complains about SHMConfig being disabled even though it's not. Disabling tapping works for now, but you need to use F12 (versus three-finger-tap) as right click, which sucks as I use my right hand for the touch pad and having to move my hand up to the F12 key is STUPID.

Firefox, which is supposed to be really slow on Linux, is *much* faster than it is under OSX. Every GUI thing imaginable, in fact, seems way zippier. This could well be due to the lack of eye candy on Linux. But I'd far rather have a responsive GUI than eye candy any day of the week. Too bad Apple won't let you turn off the eye candy.
link3 comments|post comment

Drobo update [Feb. 18th, 2009|01:01 pm]
[Tags|, , , ]

Don't rename your drobo if you plan to use any DroboApps on your DroboShare, because some of them hardcode the name of the volume. I had to update the netatalk and rsync configs after installing them because both of them failed in uninformative ways.

The two 1.5TB Seagate drives I bought for it haven't failed me yet, but I have been very careful about shutting down before unplugging power, and I don't think I've ever dropped power to the Drobo or DroboShare without shutting it down first; it's on a UPS. So I can't say this is a recommendation of those drives. Hopefully they will continue to not fail me.

Time machine has been working great using backmyfruitup, though I haven't been backing up long enough to know if it's going to try to use more than the 300 gigs I allocated it when creating the sparsebundle using the provided automator script. Time will not tell until I get Liz using it too, however, because I've blown away OSX in favor of Ubuntu (which I will write about next). Strangely enough, time machine seemed to work fine over CIFS as well, but it probably would not have continued to work.

I'm backing my Linux box up using rdiff-backup to the mounted CIFS volume. This required turning off the listing cache and some other straightforward tweaks, but those are easy to find online (rdiff-backup detects the problem and tells you what it is, and there are plenty of other people who do exactly this with a DroboShare). I will back up my newly Ubuntuized laptop the same way.
linkpost comment

WeRMP3.com are spammers [Feb. 17th, 2009|06:01 pm]
[Tags|]

Just got SMS spammed by wermp3.com, and a quick search shows that they've been doing this for a while, along with attempting to blog spam all over the place.

If you do business with them, you will go to the Hell of People Who Do Business With Spammers. If you want cheap music, pirate it instead; it's just as legal and the people making it will get just as much money, but you will have the satisfaction of knowing you at least didn't help fund a bunch of assholes who think it's OK to cost millions of people 2-20 cents a pop (not to mention interrupting whatever they were doing) to receive their "targeted" communications.
link3 comments|post comment

Virtual world state as video [Jan. 29th, 2009|11:10 am]
I've been thinking a lot about multiprocess models for virtual world simulators. The Second Life simulator is fairly monolithic, with external processes only for communicating with the databases and for proxying HTTP requests from clients. It even handles instant messages and transactions on behalf of any Resident standing in its region. This means when something goes wrong it frequently results in a crash that logs everyone in the region out.

It would be fairly straightforward to handle physics simulation (dynamics, collision detection, etc) in a separate server process that only performed the most simplistic of communication with the outside world. This simulator would receive commands to update its state (transactionally, within a single frame, so that the simulation never needs to stop) and send out messages about changes to that state due to the simulation itself and due to other clients' update commands, and events such as collisions. With an external client's being responsible for keeping track of and persisting the simulator's state, a crash need not do anything other than cause the simulation to freeze while a new simulator comes up and is sent the last state.

Trying to send the entire state of the simulation to clients every frame would consume a lot of bandwidth. It would be fairly straightforward to send only changes to the state, especially if clients (of the simulator itself, *not* virtual world clients) were expected to receive every update. However, if only updates are sent, bugs or network losses could easily result in the client's state getting out of sync with the simulation's.

Sending out state updates for a large number of elements is very similar to video: with video, you have, say, 640x480=307200 pixels with R, G, and B values that have to be updated in every frame. "Raw" video consumes a lot of bandwidth, so video codecs use tricks like only sending pixels that have changed since the last frame.

Anyone who has streamed video over the Internet has seen the artifacts that result from exactly the problem I describe of the state's getting out of sync. These usually clear up pretty quickly due to the fact that inserted in the video stream are periodic "key frames" (an unfortunate overloading of a term from animation), also known as "intra frames" or "I-frames" that contain every pixel's current state.

This solution easily carries over to our simulation problem: send only the state that changes each frame, but send the *entire* state every second, for example. If the entire state can't be sent in a single frame due to bandwidth limitations, pieces of unchanged state can simply be interleaved with the parts of the state that have changed.

For example, if the simulation is running at 45 fps and we want the entire state to be received within a second, we can simply iterate through all the state elements sending each element that has changed since the last frame *and* each element that has not been sent within the last 45 frames. For each unchanged element that gets sent, we update a counter and stop sending unchanged elements when we reach a dynamically computed threshold intended to keep the data sent per frame as constant as possible.

The reason we use a dynamic threshold rather than sending exactly the right amount of data is that ideally we'd like to make only one pass through the simulator state per frame, and we always want to send changed state to keep latency as low as possible. Such a threshold should be fairly easy to compute because we know the fraction of the state that changed in the last frame, and the percentage of state that changes in *this* frame should be about the same due to Newton's first law.

The nice thing about sending out state this way is that only one data stream needs to be computed and it can be sent to all clients that are able to handle the amount of bandwidth required. Like with video streaming, one of the clients could be a "streaming server" that "transcodes" the state updates for other clients (such as viewers) that can't handle the full bandwidth. This could involve buffering the updates and only sending the most recent if the client isn't accepting all of them, prioritizing changed state over static state, filtering updates and only sending updates for objects that are within the viewer's view frustum, etc.

Since this approach is based purely on a stream of messages, the streams to and from the simulator could be sent through a standard message queuing system such as RabbitMQ. Given that RabbitMQ has been used for streaming video, this should be well within its capabilities. We'd probably want to use only one message per frame though (as the streaming video app does) rather than one message per state element.
link1 comment|post comment

Finding God [Jan. 27th, 2009|01:16 pm]
A friend just asked me what God had to do with my last post. Liz's post on the topic does a better job of explaining it than mine. But here's my explanation.

God is the fifteen billion years of evolution that led to the genes that produce the deep structures in our brains that make us who we are without our having any conscious awareness of how this is so. God is the voice that speaks to you and tells you the right answer and gives you the certainty that the answer is correct. God is what makes you flail around and repeatedly revisit an issue when you haven't worked through it yet.

And God is the love I feel for Liz that let me finally decide to stop keeping options open for myself, and the one who gave me the knowledge that this was exactly the right thing to do.

I still consider myself an atheist. I just happen to be a particularly spiritual atheist these days.


linkpost comment

I found God. He lives in my shower. [Jan. 27th, 2009|11:13 am]
As any regular reader of my LJ knows, Liz and I have been practicing polyamory since we got together. There are a lot of details involved in the story I'm going to tell here, but instead of bore you with them I'm just going to cut to the meat of the matter.

I recently was in the process of starting two new relationships with girls I really liked. At the same time, Liz was realizing that she didn't need or want to be poly any more. The timing wasn't entirely coincidental but I seriously doubt it could have been much better. Liz realized how much strength a friend of ours gains from his devotion to his wife, and her devotion to me gave her the strength to avoid doing something that would have harmed our relationship.

On Friday night Liz started hinting that she might want to become monogamous. Saturday morning she decided that she really did. My answer was, "Then let's do it!"

If only I'd been as certain as I'd felt at that moment.

I broke things off with the two other people I was seeing on Sunday morning, then completely broke down. I scared the hell out of Liz because she was probably fairly certain I was going to break up with her. Then I felt better again. I tried to remain friends with one of the girls, but I just kept liking her more and more and regretting that I couldn't be with her.

Then, this morning, Liz said it was OK for me to have a relationship outside of ours. She'd kept saying this to me when I'd express doubts, but never had she been so convincing that she actually believed it was OK as this morning. I felt relieved and excited. She said that she thought it was probably a mistake but that it was a mistake *I* had to make. That didn't change my mind.

We got into the shower, but then Liz decided she couldn't shower with me and got out. I stayed in the shower because I needed to get ready for work. Then it hit me: I didn't have to fall in love with this girl. All I had to do was to break off contact with her. And Liz had done exactly the right thing by saying I could have a relationship with her: she'd made it OK for me to make that decision, because I wasn't making it for *her*. I was making it for me. It was if God had spoken to me in that moment. Tears of joy filled my eyes because I knew it was exactly the right decision and I realized that Liz had done exactly the right thing to allow me to make that decision.

I got out of the shower and found Liz in bed. I told her I had found God and that He lives in our shower. Then I went out to the living room and sent the email I needed to send. She came out and I showed it to her while I went to shave. Liz said that God had also spoken to her and that she'd become completly OK with my having a relationship at the same time as I was realizing I didn't have to fall in love with someone else.

We passed!

Update:
Liz has written about this from her point of view.
linkpost comment

Backups! Yay! [Jan. 26th, 2009|02:38 pm]
My DroboShare finally arrived, about a week after the Drobo so I've been chomping at the bit. Along with two Seagate 1.5TB drives (which freebsdgirl tells me I may regret), I now have my media files (bittorrented TV shows, ripped DVDs, music, porn, etc) on redundant storage, and I have Time Machine working over the network into a (hopefully) 300G sparse bundle, which I hope means it won't fill the thing up. Next step is to set up regular backups of the disk that will remain in my desktop/MythTV box, after which I will move the two other 500G drives from that box to the drobo for a total of 2.5GB of storage (500G * (4-1) + 1T * (2-1)) and get a smaller case for the MythTV box so I can fit it on or in my new media stand.
link4 comments|post comment

Finally figured out what those random fish spams were [Jan. 26th, 2009|02:05 pm]
[Tags|, , , ]

Project Upstream is apparently scraping AIM and Yahoo screen names from LJ profiles and sucking them into their service. Getting a random "hi" contact and then suddenly being connected to someone who has no idea what's going on has resulted in my blocking them on each occasion. Now that I know what it is, I sort of regret that. Of course, once I submitted my screen name to the service and got a solicited contact, the other person *still* had no idea what was going on and probably blocked the bot.


linkpost comment

Genes don't care about individuals [Jan. 26th, 2009|12:24 pm]
[Tags|, , ]

The common idea goes that we are slaves to our genes, and that our genes desire to propagate themselves, so we behave in a way that maximizes our chances of producing offspring and our offspring's surviving to produce their own offspring, ad infinitum. However, this theory fails to predict (though it can explain) altruistic behavior.

My favorite form of altruism is entrepreneurship. Entrepreneurship has negative expected returns to the entrepreneur, yet it continues to exist and thrive. The most successful societies on Earth are the ones with the greatest level of entrepreneurship. Why is this? No rational self-interested individual should ever take part. However, there is a persistent delusion that *I* can do better than everyone else, in spite of the fact that this is in fact a bad bet.

On the other hand, entrepreneurship actually has quite large positive expected returns for the society as a whole, whether it's the entrepreneur's town, state, nation, or the whole planet. Humanity has benefited from Google far more than those who have worked for Google, at least adjusting for risk; the cost to society of Google's failure would have been pretty close to zero.

Genes are just molecules. The universe doesn't "know" the difference between a particular gene's offspring and an identical gene from an unrelated individual. Therefore, evolutionary pressure should be toward behaviors that benefit people in proportion to how many genes they share with you. Obviously your own offspring are likely to share the most genes with you, but the percentage difference over your neighbor is in fact extremely small, particularly when you consider that we share 98% of our genes with *chimpanzees*.

So, in fact, altruistic behavior isn't just unsurprising: it's absolutely inevitable.

Suddenly all these supposedly irrational behaviors are explained: people's inexplicably spending more time becoming politically informed than is justified by the economic benefit to them of voting correctly. Donating to charity. Cheating on your taxes less than you can get away with. Sacrificing one's own life to save others.

More to follow in this vein.
linkpost comment

Don't hedge your bets [Jan. 23rd, 2009|11:55 am]
[Tags|, ]

Hedging is an important tool in portfolio management because it allows us to choose the level of risk we can tolerate by giving up a certain amount of return on our investment. But when we use it in relationships, it means we're giving up some upside in order to protect ourselves from the possibility of being hurt, and in some cases it may just make it more likely we're going to end up without a relationship, or we'll end up hurting the other person.

Love is all about risk. We can't open our heart to someone without risking its being broken. So instead of hedging, pick someone who's worth the risk to you, or wait until you can stomach the risk. It's the only thing that's fair to yourself or to them. The worst thing you can have in life is a Plan B.
linkpost comment

Choose someone who brings out the best in you [Jan. 23rd, 2009|11:16 am]
[Tags|, ]

I've been in plenty of unhealthy relationships with people I found attractive and who liked me, but who brought out traits in me that I really didn't like very much. And even if they weren't trying to turn me into someone other than who I "am," I started turning into someone else.

I think that it's very important in a relationship that you like who you are when you're with that person. A lot of people claim to always be themselves, but this is bullshit. The self doesn't even exist without interactions with others.

Of course, it's important to have a good idea of who you are if you're going to find a decent relationship. If you don't know who you are or at least who you want to be (are these really separate?), you're likely to end up with someone who just walks all over you, or who represents something you think you want.

As an example, I dated someone who to me represented my "lost" 20s. I started hanging out with people much younger than me, colored my hair, and started wearing different clothes. I thought this was what I wanted, but it wasn't me. On top of that, she really brought out some negative traits in me. I became submissive and irritable and started doubting my own intuition and everything I believed. But, I liked her, and she liked me. The problem was that I stopped liking me. I'm pretty sure I probably made her worse, too.

I am absolutely ecstatic about who I am when I'm with Liz. She perfectly complements me. We are not alike, but the ways in which we're different balance extremely well. She notices things I don't, and vice versa. When she makes an observation about me that conflicts with what I believe, I simply assume she's right, because she almost always is. When she has problems or tell me that something I've done has hurt her, I don't despair, because I know she tells me because she wants our relationship to work, not because she's trying to make me feel bad about it.

You can't improve without being able to admit uncomfortable things about yourself. Having people in your life who make you feel safe enough to be able to bring your darkest demons to light makes improving yourself infinitely easier. I feel incredibly lucky (and indeed spoiled) to have someone who fills that role in my life.
link1 comment|post comment

Feelings are hard [Jan. 23rd, 2009|11:06 am]
[Tags|, , , ]

It's sometimes difficult to tell what you're feeling. This is especially true when the feeling contradicts who you think you are or who you'd like to be.

I had convinced myself that I wasn't a jealous person, so when Liz told me I had been acting jealous the other night, at first I thought that was impossible, because I knew what jealousy felt like and that wasn't it. But whenever Liz tells me something I always assume she's right. It turns out that while I'm perfectly ok with her having sexual relationships with other people, I'm bothered if someone else is able to make her feel flustered.

Perhaps birth control has eliminated anxiety about someone else impregnating my woman, so now I'm only worried about losing her heart, not her uterus. For some reason, I had always thought sex was the hard part when it came to jealousy. But I guess that's just because I'm a guy and the natural instinct is to protect your female "property" from being used to birth other guys' kids. Once you get past that, her feelings really become important, and you really have to believe that she loves you and is not going to leave you no matter how flustered someone else might be able to make her feel.
link4 comments|post comment

navigation
[ viewing | most recent entries ]
[ go | earlier ]

Advertisement