|
I was thinking more about my previous post on decentralization and I realized that I was overloading the term "decentralization" in a potentially confusing way. There are some things that are "decentralized" in that there is no single central authority, but do not fall into the category of things that I was thinking about. For example, hotel rooms. I linked to Airbnb as an example of decentralized room rentals. But rooms in hotels are also decentralized - in most countries, there is no one single company that does all hotel rooms; instead, there is a decentralized network of competing hotel chains, each offering hotel rooms of different kinds and for different prices.
So I decided to come up with a new term for the specific subset of decentralized networks that I was thinking about - reciprocity networks. The distinguishing principle of a reciprocity network is that each node in the network can act as both a producer and a consumer. This seems to be what separates a network like Airbnb from normal hotel chains - people that use hotel rooms don't really provide hotel services to other people; but all users of Airbnb can act as both providers of rooms and consumers of rooms. The same is true of EBay auctions (minus the companies that sell stuff there), Prosper.com loans, and Fon WiFi.
Now that I understand the distinguishing principle of these networks better, it's clear that many of the advantages of these networks come from how the power is evenly balanced between producer and consumer. Also important is that when the nodes in the network are people, they generally abide by the Golden Rule, resulting in higher levels of satisfaction for everybody involved.
What would be cool is building reciprocity networks in domains that do not yet have them. Airbnb does this beautifully, in a domain that I would not have thought possible. Letting some stranger live in your home seems like it has trouble written all over it, but they make it work. A similar system could be implemented for car-sharing, and I think, could successfully compete with existing networks like ZipCar, which are not based on reciprocity.
Coming back to the Internet arena, Diaspora is an attempt at building a reciprocity-network version of Facebook, and although I think the idea has great potential, I'm not so sure about this particular implementation. In fact, I think the idea is so powerful that it's just about the only thing that can now topple companies like Facebook and Google.
[ 1 Comment... ]
Back when I was going through interviews for co-op positions (circa 2005), one of the questions I got asked was "what technology in the last decade do you think has had the greatest impact?" (or something along those lines). I thought about it for a few seconds, and then said Napster, because it really brought the concept of P2P to the public's mindset. (I didn't get the job.)
Fast-forward a few years, and the trend towards decentralization and peer-to-peer transactions has expanded into all sorts of different areas. Open-source software has always been one facet of this. Other, more tangible facets are things like auctions, peer-to-peer loans and even room rentals.
Decentralization has some obvious benefits. It allows for reduced dependence on single points of failure. It distributes much of the burden back to the individuals involved in the transaction, who actually have an incentive to perform well. It allows for greater customization. But it also has disadvantages. You lose the ability to mass-produce and take advantage of economies of scale. It's harder to ensure a consistent experience, and therefore harder to guarantee a minimum feature/quality/support baseline. Like most things, it's a trade-off.
I think most things start out in a centralized system because it's more convenient. It requires less of a commitment from the user to try. For example, if you've never bought a gizmo before, it's usually more convenient to go to the nearest hypermarket and pick one up than it is to scour the web and try to decide between the umpteen billion different varieties out there. However, as you buy more gizmos, you become aware of your specific needs, and are willing to pay more for specific features (and also not willing to pay for features you don't need). Then, scouring the web becomes a better option. Taken further, you might even decide to build your own gizmo because none of the umpteen billion varieties are perfectly suited to your needs and requirements, or because finding the perfect one is just too hard.
This is why I think it's hard to introduce a decentralized system for a new product or idea without first going through a phase where there is a centralized version. It requires too much of a commitment from the individual at a time when they do not yet fully understand the benefits it could provide. However, once they have had a chance to try the generic centralized version, they realize the benefits, and are more willing to invest the effort required for the decentralized and customized version.
Exercise to the reader: apply this idea to social networks (e.g. Facebook) and cloud storage and sync (e.g. iCloud), and see where it takes you. Please post your thoughts as comments.
[ 5 Comments... ]
This website is now IPv6-enabled. There should be a little message in the footer of every page indicating whether you are accessing it via IPv4 or IPv6. If you have an IPv6 connection set up, but your browser is defaulting to IPv4 anyway, you can add "2607:f298:1:106::ddf:7e9e staktrace.com" to your /etc/hosts file (and possibly restart your browser) to trick it into using IPv6.
[ 0 Comments... ]
World IPv6 Day is coming soon, on June 8. For those of who don't know what it is, it's when a bunch of major websites (Google, Facebook, etc.) will go dual-stack (serving their website via both IPv4 and IPv6 simultaneously). The reason this hasn't really been done yet is because according to previous measurements, this will break things for around 0.1% of clients.
If you haven't yet done so, you should go to test-ipv6.com from every browser/machine that you use to access the web, to see if you have an incompatible client. If you do, you should follow the instructions to fix things. If you don't, then a good chunk of the Internet will not work for you on June 8. More importantly, all those websites participating in IPv6 day will see a drop in users on that day, and revert back to IPv4-only. On the other hand, if you (and everybody else) fix your setup so that you can successfully browse dual-stack sites, then dual-stack is more likely to gain widespread adoption, thereby breaking the chicken-and-egg adoption problem IPv6 has been having so far.
Note that being compatible with dual-stack doesn't mean you have to do the more complicated setup to get yourself an IPv6 address. It just means that you can connect with IPv4 to a site that supports both IPv4 and IPv6. Although if you want to start using IPv6 now, you're quite welcome to do that as well.
[ 0 Comments... ]
And so begins the battle over 3D printing copyright. This is going to get interesting. 3D printing in general is one of those disruptive technologies that will have wide-ranging repercussions on society and how we live, so I really hope the right decisions are made early on.
[ 0 Comments... ]
It occurred to me today that one of the reasons religion is important is because it lets you practice faith. Faith, as I see it, is believing in something even if there is no rational reason to believe it. Even though I'm not a religious person, and generally dislike religion, I do think that being able to have faith is important.
The reason for this is that faith lets you bootstrap virtuous cycles. If you believe something good will happen, then it could become a self-fulfilling prophecy because your behavior changes so as to make it happen. The key is that you have to believe it will happen even if there is no rational reason to believe it. This requires faith.
If you've never experienced this before, or if you're an extreme rationalist, you may strongly disagree with the previous paragraph. And there's probably nothing I can say that will convince you otherwise, so I'm not going to try. You should probably stop reading now and go do something else.
Getting back to religion - the one fundamental thing that is common to all religions is faith. Every religion that I can think of requires you to have faith in the existence of some being or process, and to maintain that belief regardless of external evidence. While this has some rather obvious disadvantages, it does also have the advantage of giving you a lot of practice with maintaining faith. And if you have a lot of practice with faith, then it becomes easier to pull it out of your bag of mental tricks and use it when the need arises.
There's also the caveat that just because something could become a self-fulfilling prophecy doesn't mean it will. And that's true, it won't always work. Again having a lot of practice (think 10,000 hours) can improve your ability to determine when it will and when it won't.
[ 4 Comments... ]
Danny Hillis TED talk. Awesome because it's the first time I've seen somebody tackle this problem from an analytical point of view rather than a statistical point of view. As I've complained about before, I don't like how statistics are currently being used in complex human fields like biology. Instead of doing statistical analyses of how many people get heart disease after increasing their cholesterol intake, we should find the exact chemical pathway that starts at cholesterol and ends at heart disease. (Not that I believe cholesterol causes heart disease specifically; just an example). This is a step in right direction.
RIM recently got pwned by Jaime Murai in a scathing blog post. They responded with promises to do something. If you ask me, one of the first things they should do is copy Microsoft (I can't believe I'm saying this) and dogfood their developer program. There's a huge gap between the APIs that are available to RIM employees and those that are exposed to third-party developers. Unless RIM-internal devs start feeling the pain that third-party devs have to go through, the situation isn't going to improve. I recently discovered while trying to write a BB app that there's no publicly available StringTokenizer class in the API. I'm pretty sure I remember there being one in net.rim.device.api.util, but it just isn't exposed.
GeoHot is fighting Sony in court, and asking for donations. Donate. Sony sold people PS3s which could run Linux, and then removed that functionality via an update months later. This is the equivalent of selling you a couch, and then coming in a couple of months later and taking all the cushions back. If this sort of crap is legal then we're all doomed. It's one thing to license software with restrictions on distribution; it's entirely another to sell hardware and then destroy its value.
[ 0 Comments... ]
A couple of days ago I experienced the first significant data loss event I've had in a while. The hard drive on my Macbook Pro died. The last full backup I had was from December, although I did also have a partial backup from last week. Most of the data that I lost wasn't super-critical, but still quite annoying to lose. After diagnosing the issue (complete hard drive failure, since it didn't even show up in the Disk Utility on the recovery DVD-boot) I googled for potential fixes that didn't involve spending tons of money. I got a set of screwdrivers and took out the drive, cleaned off the connectors, and put it back in. Somehow this made things worse, since now it won't even boot from the DVD. Je ne suis pas doué avec l'hardware. In retrospect this may have been a good thing since the next step would have been to just get a replacement hard drive for an otherwise still-possibly-ok laptop. Had it failed after buying the replacement hard drive I would have been even more frustrated.
Anyway, I resigned myself to getting a new laptop. As with the last time I was in the market for a laptop, I would prefer to get a non-Apple laptop assuming it fits my needs. And my needs aren't all that extravagant, considering I'm increasingly becoming hardware and OS-agnostic. But as with last time, it seems to be ridiculously hard to find somebody who will actually sell me a laptop. Last time I tried this, I wasn't in a hurry so I looked around online, only to find out that most computer companies have non-functional websites that don't actually allow you to successfully place an order. This time around I was in more of a hurry to get a replacement, so I visited stores in the area. As it turns out, physical stores are no better at selling things.
First I went to Canada Computers. Of the 10-15 laptops they had on display, I narrowed it down to two, and after some contemplation, picked one. The sales guy checked his inventory and said that there were two somewhere in the back. He went off to find one, coming back 10 minutes later to inform me that a bunch of stuff back there was mislabeled and he would have to dig around some more. After another 10 minutes he came back with a box that looked promising, but unfortunately contained the wrong laptop. Finally he admitted defeat and told me that he could sell me the display model, which I didn't really want.
Next stop was Computer XS, where I got my desktop machine eons ago. They had a pretty dismal selection of laptops; the only sub-15" models were a bunch of underpowered Lenovo Thinkpads (I don't have anything against the new Thinkpads, but these were positively ancient - they had memory measured in MB instead of GB. Imagine that!). That was a quick in-and-out.
Final stop was FutureShop. Now they had a whole slew of laptops out, and unlike Canada Computers, some of them were even on! I could check out the screen brightness (albeit in their artificially-lit environment) and everything! They also had a bunch of HP laptops that were pretty good, and it took me a good 10 minutes to make a decision. But I finally settled on the one that best matched what I wanted, and asked to buy it. And then it was déjà vu all over again. Inventory tracking my ass. He said they'd have more coming in tomorrow so I'll be going back to see if they have it, but given my experiences so far I'm not very hopeful. I'm this close to just getting another Macbook.
I think the main reason that Apple is selling so many laptops is that, well, they don't go out of your way to stop you from buying them. How hard is it to put up a sign saying "out of stock" next to the display model? Or to keep track of how many you actually have in the back? Or to create a website that allows you to buy a laptop? Seriously. Given all the advertising and inherent human need to accumulate crapown stuff, people really want to buy new shiny laptops. Apple's are shinier than most, sure, but the others have their advantages too. And I, for one, would love to fork over my hard-earned money and actually buy one. If only they'd let me.
[ 9 Comments... ]
So I was thinking more about my earlier post on the music industry. The scheme probably won't work for any number of reasons, but it made me realize the fundamental difference between music and everything else - copying it is free. Of course this applies to anything that can be digitized, not just music. Software, movies, etc. all fall into this boat. Making and distributing copies is considered "piracy", but from a moral standpoint, is it wrong?
The answer depends on how you define theft. If you think of it as depriving somebody else of the ability to use the resource, then the answer is no, since the copy leaves the original intact. But if you think of it as obtaining something without paying for it (or in general, without contributing to the cost of production of the object), then the answer is yes. With physical objects theft does both of these things, so we never needed laws before that distinguished between the two facets. But for the digital domain, we definitely do. And as 3-D printers (Thing-O-Matic, RepRap, etc.) get more common and refined, this problem will apply to physical objects as well.
I believe that there is a "right" answer to this question, but I'm not sure what it is. There's strong arguments for both sides, and I think some of the implications of "free" copying are as yet unknown.
[ 0 Comments... ]
While I was initially impressed by Android's architecture and APIs, I am now somewhat less than impressed. I've been spending a lot of time over the last few days trying to add my own AccountAuthenticator and the results haven't been pretty. I followed the docs at first, but that failed miserably. After much investigation I found the SampleSyncAdapter code and figured out what it was doing and replicated that. That helped somewhat - at least I was able to get an account added.
If it was just that API then I wouldn't have a problem with it. But I think there's something underlying the Android implementation that is seriously messed up. There's a lot of cross-process communication going on under the hood, and there's a lot of hoops that the system jumps through when doing the IPC. I don't fully understand the process model in Android, but there's a lot of intricacies with permissions, protections, and hidden IPC calls that seem to be making things much more complicated than they appear.
As an example, at one point I tried calling BluetoothAdapter.getDefaultAdapter() from a helper thread and that died saying it couldn't create a Handler object from that thread because I hadn't called some Poller method. It was pretty absurd since it was trying to invoke the method via IPC and needed the Handler for the callback. But of course, this isn't documented anywhere and I only found out at runtime when it threw the exception. Unless every codepath gets exercised during testing, stuff like this has the potential to blow up apps in production, which is very, very bad.
I'm still having a problem where I call AccountManager.getAuthToken().getResult() from my app, which does get through to my AccountAuthenticator and obtains an auth token, but then that thread of execution just hangs somewhere. It never returns back to the app, and I have no idea why. I did try poking through the relevant AccountManager code but didn't have the time to figure out all the magic and abstraction going on in there. Debugging with Eclipse wasn't much help either since (a) there's no source jar distributed with the emulator and (b) after I got a source jar that somebody made available, it still wouldn't set breakpoints or let me debug that code, and I don't know why.
Another issue I keep running into is the number of different permissions I need to keep adding to my app to do things. I do like the idea of having fine-grained permissions so that the user knows exactly what the app is up to, but some of these permissions don't really map to concepts the user can readily understand. How would you explain to an average user the difference between the MANAGE_ACCOUNTS, AUTHENTICATE_ACCOUNTS, USE_CREDENTIALS and GET_ACCOUNTS permissions? The distinction is confusing enough for developers, let alone users. And not just app developers - the AccountManager.invalidateAuthToken() method documentation claims to allow both MANAGE_ACCOUNTS and USE_CREDENTIALS, but when I try to use with USE_CREDENTIALS it throws an exception. Clearly this stuff is complex for Android contributors too. It's also not clear to me which permissions are propagated when the under-the-hood IPC stuff happens.
Since I'm working against Android 2.1, I'm sure some of this stuff has been addressed in newer versions. And my experiences have been mostly confined to the accounts API, so they may not be representative of the platform as a whole. I also haven't spent a lot of time reading through the developer guide. I did skim it, but who really reads that stuff end-to-end? But I'm still worried because I'm starting to get the feeling that some of the fundamental design decisions behind the Android architecture are turning out to be poor ones.
[ 5 Comments... ]
|