tag:blogger.com,1999:blog-159297192024-03-07T19:15:29.402-08:00Van Couvering Is Not a VerbOngoing musings, tips, and observations from a Van Couvering, not someone who is going to Vancouver.Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.comBlogger678125tag:blogger.com,1999:blog-15929719.post-49745699619206811912015-01-29T10:17:00.003-08:002015-01-29T10:17:57.332-08:00Well, I haven't written a post for many years, but hey, maybe it's time to start writing again. As long as you don't mind anything too carefully thought through, time is of the essence... I am not sure who I am writing for anyway, besides myself :)Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com1tag:blogger.com,1999:blog-15929719.post-53438058921590947032012-11-23T15:32:00.003-08:002012-11-23T15:32:31.555-08:00Tax the poorEveryone keeps saying how we don't want to raise taxes, but actually taxes are being raised all the time. Because cities are no longer getting enough revenue from the state and the federal government, they are finding other ways to bring in revenue. One particularly lucrative source is traffic tickets. I recently got a ticket in a spot that is marked (very poorly) as no stopping from 3-7 on weekdays. That cost me $64. A moving violation costs $500.<br />
<br />
What particularly irks me about this is that this charge is the same for anyone, regardless of their income. At least with income taxes you pay as a percentage of your income.<br />
<br />
I heard that in Sweden (I believe it's Sweden), the amount you pay is a percentage of your income. This means that a rich person is just as motivated to abide by the law as a poor person, because the monetary pain experienced is the same. I would love to see something like that implemented here, except of course the rich run this country...<br />
<br />Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com1tag:blogger.com,1999:blog-15929719.post-45381506729163292952012-10-17T11:16:00.000-07:002012-10-23T14:00:44.107-07:00HTML5 Dev Conference Trip Report<span style="font-family: Tahoma; font-size: 13px;">The last two days i attended the HTML5 conference at the Palace Hotel in San Francisco, and I thought I'd share some of my takeaways.</span><br />
<span style="font-family: Tahoma; font-size: x-small;"><br /></span>
<br />
<div style="font-family: Tahoma; font-size: 13px;">
I took notes at the sessions I went to and put them into an Evernote notebook, published here:</div>
<div style="font-family: Tahoma; font-size: 13px;">
<br /></div>
<div style="font-family: Tahoma; font-size: 13px;">
<a href="https://www.evernote.com/pub/davidvc/html5devcon" target="_blank">https://www.evernote.com/pub/davidvc/html5devcon</a></div>
<div style="font-family: Tahoma; font-size: 13px;">
<br /></div>
<div style="font-family: Tahoma; font-size: 13px;">
Here are the major themes I saw out of the conference:</div>
<div style="font-family: Tahoma; font-size: 13px;">
<br /></div>
<div style="font-family: Tahoma; font-size: 13px;">
- Web development continues to be way harder than it should be. Lots of discussions on improving productivity, tooling, testing, etc. Stacks and stacks of APIs and libraries and tools and it keeps churning. It's amazing how complex this world continues to be, having cut my teeth on very simple MVC thick client environments in the old days of client/server.</div>
<div style="font-family: Tahoma; font-size: 13px;">
<br /></div>
<div style="font-family: Tahoma; font-size: 13px;">
One tool that looks to have the right approach to improving web development is AngularJS. They understand the value of declarative, they understand the old thick client architectures that have worked so well: MVC, data binding, dependency injection, etc. Looks very promising.</div>
<div style="font-family: Tahoma; font-size: 13px;">
<br /></div>
<div style="font-family: Tahoma; font-size: 13px;">
I also really liked the tooling I saw where in one window you are editing source, and *as you type*, the browser is highlighting the section you're editing and refreshing itself as you change data, behavior and styling. It's seriously close to WYSWYG development. I don't quite know how it works, but it's awesome. Generally called "Live Editing". Check it out.</div>
<div style="font-family: Tahoma; font-size: 13px;">
<br /></div>
<div style="font-family: Tahoma; font-size: 13px;">
- HTML5 is going through growing pains. There was a good talk by someone from Mozilla about where HTML5 is and where it should go. He was good at identifying issues, not so good at identifying solutions. I loved his one example API, there is a method "canPlayType(mediaType)" which returns null, "probably" or "maybe". :) See my notes on "HTML5 Broken Promises"</div>
<div style="font-family: Tahoma; font-size: 13px;">
<br /></div>
<div style="font-family: Tahoma; font-size: 13px;">
Another good point he made here is, you need to design systems that degrade gracefully when certain HTML5 features are missing. This is an aspect of responsive design (see below). One quote he had which made me laugh: "The way you tell something is HTML5 is, if you run it on IE and it doesn't work, it's HTML5". He used the example of an escalator vs. an elevator. If an escalator stops working, it's still functional as a set of stairs. A broken elevator is just a small hot room that doesn't make any sense. So he was encouraging us to build escalators, not elevators.</div>
<div style="font-family: Tahoma; font-size: 13px;">
<br /></div>
<div style="font-family: Tahoma; font-size: 13px;">
- In a caching talk, a reminder to be explicit with caching directives using cache control headers. Caching has the biggest impact on performance, over network speed and Javascript interpreter. 50% of the top 200 sites don't use cache control headers. Another interesting point - a large percentage of users come in with a completely cold cache. Reason suspected: cache corruption or other bad behavior forces them to regularly clear their cache.</div>
<div style="font-family: Tahoma; font-size: 13px;">
<br /></div>
<div style="font-family: Tahoma; font-size: 13px;">
- EVERYONE is getting impacted by mobile. There were very interesting sessions on how to work with multitouch, and a general buzz was that "responsive design" was the New Thing - basically your app adjusts elegantly to the screen constraints of the current device. </div>
<div style="font-family: Tahoma; font-size: 13px;">
<br /></div>
<div style="font-family: Tahoma; font-size: 13px;">
One thing I thought was very interesting were the new Windows 8 devices which are many creative combinations of desktops and large multitouch devices. The important takeaway: right now we usually check to see if a device is multitouch or pointer, but that's no longer valid - devices can be both; you can even have mouse events and touch events happening at the same time, and have it mean something. Microsoft is proposing a standard event API/model for multi-touch that looks pretty good.</div>
<div style="font-family: Tahoma; font-size: 13px;">
<br /></div>
<div style="font-family: Tahoma; font-size: 13px;">
- Lots of demoing of rich media experiences, including capturing media sources from the person's machine and integrating it into your web app. I think this is probably because it demos so well; not clear of the usefulness. Two examples: capture your camera, and when you swipe your hand, you go back and forth in pages in a document/book. Really nice for dirty hand work with tablets. Another example: capture your camera, and it detects your fingers, and use your fingers to play a xylophone. But these are just "cool demos" The question is, how might we use these kinds of ideas to improve engagement with your site. Hm...</div>
<div style="font-family: Tahoma; font-size: 13px;">
<br /></div>
<div style="font-family: Tahoma; font-size: 13px;">
Cheers,</div>
<div style="font-family: Tahoma; font-size: 13px;">
<br /></div>
<div style="font-family: Tahoma; font-size: 13px;">
David</div>
Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com1tag:blogger.com,1999:blog-15929719.post-19675861852016596762012-08-23T12:25:00.001-07:002012-08-23T12:25:53.750-07:00Time to stop feeding the beast...I've been thinking a lot about the frustration many of us feel towards the way our government and our corporations are behaving towards obvious long-term critical issues such as climate change - corporations actually hiring people to sew doubt into the message so that the status quo will be maintained.<br />
<br />
The thing it, corporations can't do anything different. A corporation is measured by its stock price and earnings, quarter by quarter. If the leaders of a corporation do not make decisions that optimize earnings they are fired.<br />
<br />
This means that a corporation can not take any actions motivated by other concerns, particularly longer-term concerns such as the impact on the environment say 20 or 50 years from now or the impact on society or long-term health of populations. Corporations are not structured that way. We can't <b>really</b> blame the people in charge of these corporations. If they did not behave this way, they would be moved aside and leaders who do focus solely on the bottom line would replace them.<br />
<br />
I suspect that many corporate leaders would like to behave differently, would like to transform a company that truly takes long-term impacts of their decisions into account, but they just can't - if they did this, they would be fired.<br />
<br />
What drives this short-term approach? Wall Street. Mutual funds are measured by their performance on a quarterly basis. And why are mutual funds this way? Because people leave mutual funds who aren't giving them positive performance every quarter.<br />
<br />
So who is really to blame? You and me - the investors. If you are investing in mutual funds or in stocks and buying and selling based on quarterly performance, you are the core of the problem.<br />
<br />
If we truly want to create change, we need to address this core problem. Personally, I am getting out of mutual funds. I am canceling my 401K and moving to a self-directed IRA, and I work to make long-term investments in companies I feel good about. I am tired of feeding the beast.Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com3tag:blogger.com,1999:blog-15929719.post-228836905397410472012-06-08T14:40:00.002-07:002012-06-08T14:40:37.856-07:00Advanced queue policy acronymsWe already know about <b>FIFO</b> (First-In First-Out) and <b>LIFO</b> (Last-In First-Out). Over the years I have encountered a few more queue policies:<br />
<br />
<br />
<b>FIFS </b>- First In Front Seat<br />
<br />
<b>LIRE - </b>Last In Rotten Egg<br />
<b>LOTL</b> - Last Out Turns off Lights -- applied at failing companies<br />
<b><br /></b><br />
Any others?<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com0tag:blogger.com,1999:blog-15929719.post-8310549803714757942012-06-05T09:42:00.004-07:002012-06-05T09:42:44.629-07:00Neti pots, free will and destinyMy son has been struggling with allergies, and is up very late at night sniffing and sniffing trying to clear his sinuses. He gets very unhappy and miserable. <br />
<br />
So I did some research, and found out that something that can provide a lot of relief is a Neti Pot. This is a very simple thing, a pot of water with a spout. You fill it up with distilled water and a saline solution, and then gently pour the water through one nostril and it drains through the other. All sorts of gunk comes out this way. <br />
<br />
I showed him the video, showed him how happy the little girl was who used this. He said sure and we got the pot.<br />
<br />
But when I tried it, it was just too uncomfortable for him to have water going up his nose. So he won't use it, even though he is so miserable. I let him make that choice, but I thought it was funny how he couldn't see how much happier he'd feel if he just put up with the discomfort of the Neti pot.<br />
<br />
Then today I was thinking about all the things that make me unhappy - old stored up emotions or habits or physical ailments - and I know there are things I can do to make them better - certain changes in habit or lifestyle or diet. But I get nervous. Those things aren't always fun; they can even be uncomfortable or difficult. I know they'll help me feel better. But for some reason I prefer the pain I know to the pain I don't know.<br />
<br />
Luckily, the Universe is patient. I won't be forced to make those changes. But I will experience the consequences of my decisions. To me this is the mystery of free will in God's universe. Alternatives are offered. Choices are made. Very often we hold on and hold on as long as we possibly can. But the consequences of our choices are experienced. So there is free will, and there is destiny, the consequences of our actions. In this way, very naturally, growth occurs, and (inch by inch) we learn how to live harmoniously in this world.<br />
<br />Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com3tag:blogger.com,1999:blog-15929719.post-42270100280287299052012-05-24T22:47:00.000-07:002012-05-24T22:47:03.490-07:00Ruby on Rails, sure, but at some point, you need JavaFor the past year I've been working part of my time with Ruby on Rails. I had heard great things about Ruby on Rails and was excited to get a chance to work with it.<br />
<br />
Over the time, I've formed some perspectives about RoR that I thought I'd write down.<br />
<br />
First of all, I'm working with an older version of RoR, 2.3.11. Upgrading to Rails 3 is a Big Project that our team has not been ready/able to take on. So some of these opinions may be out of date.<br />
<br />
My overall first impression - wow, this is really productive. I can make quick changes to web pages very fast and turn around new features quite quickly. I really do think that's the strength of Rails. So I think it's a great choice for an early startup that is quickly trying to get a minimum viable product to market and then start iterating very fast as the company adapts to what it learns.<br />
<br />
However, there is a certain point at which the strengths of RoR become weaknesses. <br />
<br />
For example, it is easy to rely on Active Record to provide a very simple, fast, easy abstraction to the database. But when you start scaling up, you can be slammed by the incredibly inefficient ways that ActiveRecord talks to the database. So you find yourself writing more and more raw SQL to try and process the data faster, and get the performance you need.<br />
<br />
Then there's the dynamic nature of the language. You don't have to mess with the verbose nature of static type definition or time-consuming steps of compilation and deploy. <br />
<br />
But the result of that is you end up working without a net. You just can not tell whether a change you make is going to break something, because you get no warnings from a static compiler telling you you're breaking a contract somewhere. We have classes with tons of methods that *seem* to be obsolete, but nobody dares to remove them because you never know if some code path, in production, is going to call that method and cause a stack trace. Even if you search for the signature everywhere, that is no guarantee, because someone could have built up the method call using string concatenation and invoke it using runtime evaluation.<br />
<br />
The other problem is the tools just can not reliably do global refactorings like moving classes around or renaming things. This severely limits your ability to adjust and rethink your application as the design reveals itself more and more or your requirements change.<br />
<br />
The argument is that to address this you write lots of unit tests, and that gives you the net you need. I think unit tests are invaluable, but I really don't like having to basically write a compiler using unit tests. I'd rather let the compiler do that for me. As much as everyone says they are writing unit tests, can you really rely on that? If you can, well, you must have a collection of very disciplined programmers on your team. I personally have never seen that...<br />
<br />
Finally, the performance of Ruby just can not hold a candle to Java. Every time we migrate some logic from Ruby to Java, the difference in performance we get is quite astonishing.<br />
<br />
So, here are my thoughts about how to go about building a system...<br />
<br />
Fine, use Ruby on Rails to whip out your initial product quickly. But have in your plans moving things over to Java as things stabilize and specific services begin to reveal themselves in your design. This means, in particular, I would implement a domain layer between the front-end code and the Active Record models. This allows you to migrate the underlying implementation of the domain layer from Active Record to backend services written in Java.<br />
<br />
An alternative that I really like as an approach, but have never had the opportunity to try, is to write only services on the server side, and write all the UI using one of the new client-side Javascript UI frameworks like backbone.js.<br />
<br />
Java has the performance, tools, APIs and stability to be the powerhorse of mature, highly scalable, robust middle tier infrastructures. Ruby really can not hold a candle to it. Having this kind of infrastructure becomes essential as a company scales up and matures, and customers begin requiring a high quality of service as well as new features. <br />
<br />
In general, if you use a domain-driven design, where you focus on building a domain layer that is well thought through, and then provide APIs to the view and third parties, and pluggable interfaces to your lower-level services, you have the foundation for an architecture that can move through the evolution from a quick Ruby on Rails app to a highly robust, scalable system with numerous independent services written in a strong, high-performance language like Java.Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com4tag:blogger.com,1999:blog-15929719.post-52412071705551489892012-05-02T10:02:00.001-07:002012-05-02T10:02:22.142-07:00This morning I was listening to a Planet Money podcast, and an economist was saying that we need to stop kidding ourselves - if we like the social programs (Medicare, Medicaid, Social Security), then we have to pay for them, and the only way to pay for them is to eliminate the Bush tax cuts, eliminate the tax deduction for mortgage interest, and eliminate the tax deduction for employer-provided health insurance.<br />
<br />
The interviewer asked, but wait, you're assuming that we can't do anything about health care costs, which are the primary driver of the projected increased debt. The economist said that he has talked to people on the right and the left, and nobody believes we can do anything about reducing health care costs.<br />
<br />
But he was talking about doing anything at the government level. Although I still hold out hope, and I know that many government agencies are making heroic efforts to try and fix things, I agree that trying to do things at the government level is slow, risky, and could potentially fail.<br />
<br />
But this interview happened before the news came out recently that <a href="http://www.nytimes.com/2012/04/29/health/policy/in-hopeful-sign-health-spending-is-flattening-out.html?_r=1">health care costs had actually not grown as fast as had been expected</a>, and that one likely contributor was high deductible health plans (HDHP).<br />
<br />
And it became clear to me how important it is what we're doing here at <a href="http://www.castlighthealth.com/">Castlight Health</a>. If we can't rely on the government to solve this health care mess, then part of the solution needs to come through the private sector.<br />
<br />
By providing price and cost transparency, Castlight Health and companies like it are making it possible for members of these HDHPs to make intelligent choices and introduce market forces into the health care market. By giving individuals more skin in the game and a transparent market, we can help bring more reasonable costs to the health care world.<br />
<br />
I think that investors agree this is a huge and important opportunity, given that we <a href="http://techcrunch.com/2012/05/01/castlight-100m/">just received $100 million in Series D funding</a>. I think that the health care world is on the threshold of a huge change in how business is run, and if we do this right, giving both cost <b>and</b> reliable quality data, then individuals, companies, the country as a whole are winners. The only losers are those making way too much money off of a historically hidden and back-door-negotiated market.Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com0tag:blogger.com,1999:blog-15929719.post-85410642115894952602012-03-22T00:19:00.000-07:002012-03-22T00:24:49.408-07:00The visual life of a programmerI've been doing a big push at work this week, lots of late nights, and I woke up this morning with all these images flashing through my mind. They were not images of anything in the physical world. They were my mental models of the software I was working on.<br />
<br />
As I observed more carefully, I could see I had a mental shape for all the constructs I was working with, and I saw these energetic flows move between these shapes as the entities interacted with each other. I had a physical structure in my mind and I was interacting with it, moving things around, optimizing, finding where the issues were.<br />
<br />
It was quite amazing to me, that I could hold this entire mental model in my head and work it through its paces.<br />
<br />
And then I pictured all of us at work, each of us sitting at our desks, mentally moving our images around as we worked to get our software to work. Here we were, an entire construction crew, but instead of using trucks and cranes and power diggers we were using our fingers, just our fingers. Creating entire worlds with our fingers, managed and maintained in a mental world that nobody sees and I can't show it off to anyone.<br />
<br />
Engineers of prior generations created beautiful structures that everyone could walk through, experience and admire. With software, people do get to experience what we create, but only the result, not the structures themselves, the complex, and often beautiful design structures behind the product, which have life and weight and form, but only within the mind.<br />
<br />
So when my children wonder what I do, all they see is me in front of a screen using my fingers. They can not see nor appreciate the rich, beautiful (OK, and sometimes hacky) structures that I am creating. I've always been sad about this - I can't say "see, see what I'm building, ain't it cool?" It's a strange feeling, my entire career has been creating things nobody can see but me...Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com2tag:blogger.com,1999:blog-15929719.post-40884737234786544482012-03-03T20:12:00.003-08:002012-03-03T20:12:50.191-08:00My life as an artist<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfXQu_3qk3Djl8D_NvsAFchexNOpE2BQ-Mz86EGP30GrhJv8rk1W-HeZWGpldL6llIl1Or6GM61SdySczoXCWDhODcw6ecqHAW9LYHyzgmUdF8q4y96GcaP0ONkQM_eImM4Os/s1600/unfinished_sculpture.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfXQu_3qk3Djl8D_NvsAFchexNOpE2BQ-Mz86EGP30GrhJv8rk1W-HeZWGpldL6llIl1Or6GM61SdySczoXCWDhODcw6ecqHAW9LYHyzgmUdF8q4y96GcaP0ONkQM_eImM4Os/s320/unfinished_sculpture.jpg" width="218" /></a></div>
<span style="background-color: white; font-family: Arial, sans-serif; font-size: 13px; line-height: 20px;"><br /></span><br />
<span style="background-color: white; font-family: Arial, sans-serif; font-size: 13px; line-height: 20px;">I was talking with a friend last night who is a wonderful artist. As he shared what it meant to lead the life of an artist, I found myself filled with a bit of longing. I have a somewhat romantic, artistic side to myself, but here I am as a career programmer.</span><br style="background-color: white; font-family: Arial, sans-serif; font-size: 13px; line-height: 20px;" /><br style="background-color: white; font-family: Arial, sans-serif; font-size: 13px; line-height: 20px;" /><span style="background-color: white; font-family: Arial, sans-serif; font-size: 13px; line-height: 20px;">Then I thought about it some more, and began sharing with him that actually, building software is a very creative act for me. He asked in what way. I said that I love that feeling of letting a design reveal itself to me. I said that the use cases and tests that I put *around* a system are like the negative space that define the system. As I add more test cases and refine the design, a form starts taking shape. That experience of revelation, and of uncovering the elegance in the raw marble that is the initial design, is incredibly satisfying.</span><span style="font-family: Arial, sans-serif; font-size: x-small;"><span style="line-height: 20px;"><br /></span></span>Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com0tag:blogger.com,1999:blog-15929719.post-26373887517157447052011-05-10T16:15:00.000-07:002011-05-10T16:15:00.582-07:00Running spotlight from your Mac terminal windowA colleague just showed me this most excellent little command you can add to your .profile on the Mac to do Spotlight-indexed searches from the command line. Very nice.<br />
<code><br />
function slocate() {<br />
mdfind "kMDItemDisplayName == '$@'wc";<br />
}<br />
<br />
config[master]% time slocate my.cnf<br />
/private/etc/my.cnf<br />
/opt/local/var/macports/sources/rsync.macports.org/release/ports/databases/mysql4/files/my.cnf<br />
real 0m0.018s<br />
user 0m0.006s<br />
sys 0m0.006s<br />
<br />
</code>Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com0tag:blogger.com,1999:blog-15929719.post-57092078946521388222011-01-13T14:56:00.000-08:002011-01-13T14:58:27.257-08:00How I do a smart phone on the cheap<img height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2uF-WZpxXbQJhseW9h4130dt8B3klou5SutVlPj0B0XqsQJCkWRseubUxqxGvV9e3IGjbecbGpMLir8MxnVx_W03zubr3cTWc5CsKH9eAahK5dUs89yw6LDwdr5f92qz2PQj3ug/s400/smart_phone.jpg" width="316" /><br /><br />I really like having a smart phone, but I don't think it's worth shelling out almost $80-100 a month for service, especially since I almost never use the data services and only make about 70-100 minutes of calls a month.<br /><br /><img height="240" src="http://macbigot.com/media/iPhoneWallpaper300x225.jpg" width="320" /><br /><br />For the longest time, what I had was an unlocked iPhone Classic with a T-Mobile prepaid plan where I paid .10c a minute, and no data plan. Very cheap - I spent $100 for 1000 minutes in November, and I still have 500 minutes left.<br /><br />But there are times when I really could use data. But I only wanted to pay for it when I needed it. Also, I have watched various disasters in the last few years and having access to information, particularly through your cell phone, is very very important.<br /><br /><img height="200" src="http://thenewsoftoday.com/wp-content/uploads/2010/09/virgin-mifi.jpg" width="166" /><br /><br />Then, a few months ago, Virgin Mobile came out with a MiFi plan of $30/month unlimited or $10/100MB/10 days. This was what I was looking for. I'm in casual carpool in the morning - I turn on my MiFi, do a little email, turn it off. I'm driving somewhere and want to find a restaurant - just turn on my Mifi, search, get the map, turn it off. I can manage my own costs, rather than paying these huge fees for plans. Plus, I'm on T-Mobile - I don't get dropped calls like many of my friends do.<br /><br />My iPhone started having problems recently, and I researched the iPhone 4, but it's very very hard to unlock, and it's very expensive. So I researched various Android phones, and I had a colleague who raved about his T-Mobile Vibrant by Samsung.<br /><br /><img height="236" src="http://latestpriceindia.com/wp-content/uploads/2010/07/samsung-vibrant.png" width="320" /><br /><br />I finally splurged when T-Mobile offered this for free with a 2-year plan (sorry, this offer seems to be gone now). I have to wait a month for the "buyer's remorse" period to end, then I can cancel the plan ($70/month) and switch to prepaid and pay the $200 early termination fee. All I had to do was replace the GSM chip that came with the phone with my existing prepaid chip - I didn't even need to unlock the phone, Works for me!<br /><br />I also just found out that T-Mobile just started offering Internet-for-a-day on their prepaid plan. You pay $1.20, and you get unlimited data on your phone for 1 day. Now that's what I'm talking about! Prepaid data as well as prepaid minutes. I am still keeping my MiFi for now, since I use a leetle bit of data every day, so it ends up being cheaper. But I think finally somebody (T-Mobile) is getting the idea that not everybody wants or can afford the big whopping post-paid plans.<br /><br />Android positive: I can do things Apple would never let me do on my iPhone. Like using an mp3 I bought on Amazon for a ring tone. Like playing Rhapsody in the background. Like easy synchronization with Google calendard and Gmail.<br /><br />Android negative: nasty battery usage. I have to monitor very carefully, shutting down GSM, Wifi, background apps, display very carefully or I can't even make it through the day. I never had this problem with the iPhone.Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com3tag:blogger.com,1999:blog-15929719.post-19349979644886772592010-12-30T13:41:00.000-08:002010-12-30T13:41:05.424-08:00An expression of joy<img src="http://being.publicradio.org/programs/2009/rumi/images/dervish-thumb.jpg" width="400" /><br />
<br />
A friend just posted this poem by the great Sufi saint Hafiz:<br />
<blockquote>I am happy even before I have a reason. <br />
<br />
I am full of light even before the sky can greet the sun or the moon. <br />
<br />
Dear companions, we have been in love with God for so very, very, long. What can Hafiz now do but forever dance!</blockquote>Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com0tag:blogger.com,1999:blog-15929719.post-90561296090754097662010-12-23T19:40:00.000-08:002010-12-23T19:40:37.485-08:00Wow, taking the train rocks<div class="separator" style="clear: both; text-align: center;"><a href="http://www.rrpicturearchives.net/pictures%5C13276%5CAmtk_84_East_Manuelito_edited-2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="275" src="http://www.rrpicturearchives.net/pictures%5C13276%5CAmtk_84_East_Manuelito_edited-2.jpg" width="400" /></a></div><br />
This Christmas we decided to take the train to my Mom's place in New Mexico rather than fly. What a wonderful experience. <br />
<br />
For the same cost of a flight, we got first class service on the Southwest Chief from Los Angeles to Albuquerque. <br />
<br />
Someone gave us and our luggage a ride to checkin and then another ride straight to our car on the train. We had a porter who turned down our beds at night and made them back into chairs in the morning. Free meals, coffee, paper, juice. Hot steaming washcloths to refresh your face, and hot showers with towels and soap provided. Serious leg room, quiet quiet cars, an observation car to hang out in, and incredible, gorgeous views. I mean, incredible, gorgeous views.<br />
<br />
Quiet, relaxing, the kids were happy, we were happy, and arrived in Albuquerque refreshed and relaxed.<br />
<br />
Then I think about airplanes. Long lines, zero leg room, security checks, kids are not allowed to move around and have nothing to do.<br />
<br />
I'm telling you, trains are the hidden secret of travel. I highly recommend it.Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com1tag:blogger.com,1999:blog-15929719.post-7910690890503747222010-09-27T17:15:00.000-07:002011-01-13T20:25:30.710-08:00Foxmarks closing its doors<div>Update: Foxmarks was bought by LastPass, which is also a great company, so it's great to hear they'll stick around! We'll see how LastPass monetizes this; it's a great service!</div><div><br /></div><div>----------</div><div><br /></div>I love the <a href="http://www.xmarks.com/">Foxmarks </a>service. But it appears <a href="http://blog.xmarks.com/?p=1886">they couldn't come up with a business model</a>.<br /><blockquote>For four years we have offered the synchronization service for no charge, predicated on the hypothesis that a business model would emerge to support the free service.</blockquote><br />I am amazed people are still finding investors for a business plan like this. Oy vei..<br /><br />Remind me, when and if I ever join a startup, to make sure there is money coming in from day one.<br /><br />I guess I'll need to move to sync for Firefox and Chrome. Sorry to see a cross-browser solution go...Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com0tag:blogger.com,1999:blog-15929719.post-14565578527155273252010-09-27T11:23:00.000-07:002010-09-27T11:23:58.221-07:00BigCouch: HA, clustered, scalable CouchDBNot sure how I missed this one, this is awesome news. <br />
<br />
<!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves/> <w:TrackFormatting/> <w:PunctuationKerning/> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF/> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>JA</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:SplitPgBreakAndParaMark/> <w:DontVertAlignCellWithSp/> <w:DontBreakConstrainedForcedTables/> <w:DontVertAlignInTxbx/> <w:Word11KerningPairs/> <w:CachedColBalance/> <w:UseFELayout/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> <m:mathPr> <m:mathFont m:val="Cambria Math"/> <m:brkBin m:val="before"/> <m:brkBinSub m:val="--"/> <m:smallFrac m:val="off"/> <m:dispDef/> <m:lMargin m:val="0"/> <m:rMargin m:val="0"/> <m:defJc m:val="centerGroup"/> <m:wrapIndent m:val="1440"/> <m:intLim m:val="subSup"/> <m:naryLim m:val="undOvr"/> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal"/> <w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/> <w:LsdException Locked="false" Priority="39" Name="toc 1"/> <w:LsdException Locked="false" Priority="39" Name="toc 2"/> <w:LsdException Locked="false" Priority="39" Name="toc 3"/> <w:LsdException Locked="false" Priority="39" Name="toc 4"/> <w:LsdException Locked="false" Priority="39" Name="toc 5"/> <w:LsdException Locked="false" Priority="39" Name="toc 6"/> <w:LsdException Locked="false" Priority="39" Name="toc 7"/> <w:LsdException Locked="false" Priority="39" Name="toc 8"/> <w:LsdException Locked="false" Priority="39" Name="toc 9"/> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/> <w:LsdException Locked="false" Priority="10" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Title"/> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/> <w:LsdException Locked="false" Priority="11" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/> <w:LsdException Locked="false" Priority="22" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Strong"/> <w:LsdException Locked="false" Priority="20" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/> <w:LsdException Locked="false" Priority="59" SemiHidden="false"
UnhideWhenUsed="false" Name="Table Grid"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/> <w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 1"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 1"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 1"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/> <w:LsdException Locked="false" Priority="34" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/> <w:LsdException Locked="false" Priority="29" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Quote"/> <w:LsdException Locked="false" Priority="30" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 1"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 1"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 2"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 2"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 2"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 2"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 2"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 3"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 3"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 3"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 3"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 3"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 4"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 4"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 4"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 4"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 4"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 5"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 5"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 5"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 5"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 5"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 6"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 6"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 6"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 6"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 6"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/> <w:LsdException Locked="false" Priority="19" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/> <w:LsdException Locked="false" Priority="21" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/> <w:LsdException Locked="false" Priority="31" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/> <w:LsdException Locked="false" Priority="32" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/> <w:LsdException Locked="false" Priority="33" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Book Title"/> <w:LsdException Locked="false" Priority="37" Name="Bibliography"/> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/> </w:LatentStyles> </xml><![endif]--><!--[if gte mso 10]> <style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Table Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin:0in;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;}
</style> <![endif]--> <br />
<div class="MsoNormal"><a href="http://github.com/cloudant/bigcouch">http://github.com/cloudant/bigcouch</a></div><br />
“BigCouch is a highly available, fault-tolerant, clustered, mostly api-compliant version of <a href="http://couchdb.apache.org/"><span>Apache CouchDB</span></a>. While it appears to the end-user as one CouchDB instance, it is in fact one or more nodes in an elastic cluster, acting in concert to store and retrieve documents, index and serve views, and serve CouchApps. BigCouch has been developed and is continually maintained by <a href="http://cloudant.com/"><span>Cloudant</span></a> who offer hosted CouchDB as a service.<br />
Clusters behave according to concepts outlined in <a href="http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html"><span>Amazon's Dynamo paper</span></a>, namely that each node can accept requests, data is placed on partitions based on a consistent hashing algorithm, and quorum protocols are for read/write operations”<br />
<br />
I worked with the <a href="https://cloudant.com/">Cloudant </a>team, the folks who created BigCouch, when I was doing some CouchDB work on the side, and they seemed like a smart, fun, dedicated team.<br />
<br />
This puts CouchDB on my short list of technologies to consider when looking for a scalable data storage solution.Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com0tag:blogger.com,1999:blog-15929719.post-78134547337251888652010-09-24T21:07:00.000-07:002010-09-24T21:07:34.119-07:00Republicans promise to abolish all governmentI love this line from<a href="http://www.nytimes.com/2010/09/24/opinion/24krugman.html"> Krugman's editorial about the Republican budget proposals</a> (where they propose to continue the Bush tax cuts, while the only cut they propose is TARP, and that they will keep their hands off Social Security, Medicare, and the defense budget).<br />
<blockquote>Howard Gleckman of the nonpartisan Tax Policy Center has done the math. As he points out, the only way to balance the budget by 2020, while simultaneously (a) making the Bush tax cuts permanent and (b) protecting all the programs Republicans say they won’t cut, is to completely abolish the rest of the federal government: “No more national parks, no more Small Business Administration loans, no more export subsidies, no more N.I.H. No more Medicaid (one-third of its budget pays for long-term care for our parents and others with disabilities). No more child health or child nutrition programs. No more highway construction. No more homeland security. Oh, and no more Congress.” </blockquote>Of course what is obviously really going on is that the Republicans are using the populist fiscal responsibility tune as a Trojan horse for handing money to the people who are funding their elections. It's basically a smoke-and-mirrors approach to looting the treasury and handing out gifties to their buddies. They don't really care about balancing the budget, they're just using that as a cover.<br />
<br />
So what should we do about it? I don't know. It seems that the only time people are really ready for change is when the truth can no longer be denied. It's true for addiction, and I suspect it's true for governance and economic policy as well...Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com0tag:blogger.com,1999:blog-15929719.post-29311074358146553012010-09-23T15:14:00.000-07:002010-09-23T15:14:37.136-07:00Personal favorites for upcoming Java 7 featuresThrough the power of a Twitter search column in Tweetdeck, I found a <a href="http://www.infoq.com/news/2010/09/javaone2010-d2general">great InfoQ article</a> which did a quick summary with lots of links to what's new for Java 7.<br />
<br />
After reading through this, here are some of my favorites:<br />
<br />
<a href="http://mail.openjdk.java.net/pipermail/coin-dev/2009-February/000009.html"><b>Automatic Resource Management</b></a><br />
Tired of closing input streams, SQL connections, sockets, and so on? You will no longer need to in Java 7. Sweet!<br />
<br />
<a href="http://mail.openjdk.java.net/pipermail/coin-dev/2009-February/000009.html"><b>Generic Type Inference</b></a><br />
Allows you to leave off specifying generic types if they can be easily inferred. <br />
<br />
I'd show you an example but this stupid Blogger editor gets completely confused with all the less-than and greater-than symbols, and I simply don't have the time to futz with it.<br />
<br />
<a href="http://cr.openjdk.java.net/%7Emr/lambda/straw-man/">Closures through Lambda Expressions</a><br />
This looks like a very promising implementation of closures in Java. Of course the devil is in the details, but I look forward to making use of this - personally I'm quite tired of anonymous inner classes. <br />
<br />
<a href="http://openjdk.java.net/projects/jigsaw/"> Modules (Project Jigsaw)</a><br />
I have worked with NetBeans modules and played around with OSGi, and I have seen the power of a well-defined module framework. I look forward to seeing this as part of the language (again, hoping it is implemented well. We'll see of course).Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com1tag:blogger.com,1999:blog-15929719.post-11500495289442958102010-09-16T08:17:00.000-07:002010-09-16T08:24:50.850-07:00Calvin demonstrates socialism for the richI've always loved this particular Calvin and Hobbes strip. It's still as appropriate today as when it was written, if not more so...<br /><br /><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="http://www.dianahsieh.com/blog/uploaded_images/CH-economics-716094.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img src="http://www.dianahsieh.com/blog/uploaded_images/CH-economics-716094.jpg" border="0" height="444" width="640" /></a></div>Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com0tag:blogger.com,1999:blog-15929719.post-64493423103482159152010-09-15T20:57:00.000-07:002010-09-15T20:58:22.930-07:00My visit to Ground ZeroI had the honor and fortune to pay my respects at Ground Zero today, coming back from a business meeting. It really is quite awesome to place yourself there where it all happened. I also feel I got a chance to pay my respects to all those who lost their lives here, whose lives were affected, and who gave (and continue to give) their hearts and bodies to saving lives, digging through the rubble, cleaning it up, and now building new buildings and memorials that honor the power and sacredness of this place.<br /><br />I watched the construction workers working on the new memorials, and I thought, whereas most construction is "just a job", those working here are truly blessed and are doing a labor of love.<br /><br />I also went to the small little museum in honor of 9/11. What an incredible, moving exhibit. It was all so personal, with simple artifacts and quotes and stories from those who lived through it. Each artifact had meaning and impact - the melted, destroyed window from a plane, a half-burnt menu from Windows on the World, a fireman's helmet and torn jacket, and a wall covered with copies of all the "missing person" leaflets that were placed out by desperate families looking for their loved ones. I am not one to cry easily, but I was in tears many times as my heart leaped to my throat.<br /><br />Then, downstairs, was a place you could leave a note for everyone, and many of these were placed lovingly on a wall for all to read. People from around the world expressed their love, their sadness, and their hope. This place is impactful, important, and very moving. I highly recommend everyone try to make it here at least once.<br /><br />I also saw the plans for the new memorial. Truly beautiful - two square waterfalls going into the ground in the place of the original towers, with the names of all who perished around the walls of the waterfall, inset in a beautiful contemplative garden of oak trees.<br /><br /><img src="http://weblogs.baltimoresun.com/features/gardening/groundzero%20memorial.jpg" /><br /><br />Today was a crisp, clear blue September day here in New York, much like the day 9 years ago when this happened. What happened here was so horrific, but now it feels like there is a power here that holds it with great care, with gentle, loving hands. You feel yourself bow inwardly in prayer and respect, and offer your love and blessings.<br /><br />So, in honor of the memories of all who lost their lives and their loved ones here, I offer my blessing:<br /><br /><i><b>May we all experience and offer love and protection, and may we always remember that each and every life in this world is supremely precious and sacred.</b></i><br /><br /><i><b>Om Shanti Shanti Shantihi (OM peace, peace, peace).</b></i><br /><br /><img src="http://photos.travelblog.org/Photos/136729/441646/t/4321754-A-Fireman-s-Helmet-from-the-September-11th-Attacks-0.jpg" />Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com1tag:blogger.com,1999:blog-15929719.post-41767887187203538302010-07-20T13:18:00.000-07:002010-07-20T13:18:50.288-07:00Mass extinctions, basalt flows, and usVerbatim from my Pa (Dr. John Van Couvering, geologist and all-around Scientist), who wrote this up for a his local neighborhood newsletter in upstate New York<br />
<br />
<i>Most of us have heard of the great extinction that wiped the dinosaurs off the face of the earth. Of course this didn’t really happen, because birds – aha! -- are dinosaurs. But few may be aware that the human presence on the planet follows, not one, but four narrow escapes from extinction, going all the way back before dinosaurs even evolved. We are rather like Fearless Fosdick (Li’l Abner’s comic hero) who pops up unscathed, with the lid on his head, from his hiding place in a trash can that has been riddled to shreds by the mob’s tommy guns. The crooks are gobsmacked. “Fosdick! We shot ya fulla holes!” “Took a bit of dodging,” he jauntily replies.</i><br />
<br />
<i>What did we dodge? In fact, those “extinction events” are deadly beyond belief: moments in planetary history when nearly everything on land dies, as well a great deal of marine life. In the last of these, 65 million years ago, four entire orders of dinosaurs were exterminated, plus all but the airborne varieties of a fifth order, as well as two out of three orders of coral and entire groups of other marine life. To put the extinction of an order in perspective, extinguishing the modern Carnivora would require that every single living animal in that order -- every last cat, lion, tiger, leopard, cheetah, puma, jaguar, hyaena, aardvark, civet, dog, wolf, fox, bear, panda, seal, sea lion, walrus, weasel, mink, skunk, badger, wolverine, otter, raccoon, kinkajou, coati mundi and meerkat – would have to perish. If even one lonely pair of any of these species survived to reproduce, so would the Order Carnivora. The magnitude of disaster that can totally erase not one but a dozen orders is difficult to comprehend. </i><br />
<br />
<i>Huge meteorite impacts have been found to coincide with some major extinction events, but they may have been just the last straw. For one thing, giant impacts are turning out to be surprisingly common, with little or no extinction effect. While the asteroid that punched into Yucatan may have finished off Tyrannosaurus and the tetracorals, they were apparently sick and dying already. A few million years later, the equally large flying rock that blew a 57-mile wide hole into the bedrock under what is now Delaware and Maryland had no effect on earthly life whatever. Not only that, no impact has been found to coincide with the worst extinction of all, the Permo-Triassic event 250 million years ago, that killed off all but one species of non-amphibian land animals – which species, of course, is our ancestor. The real cause of extinction events appears to be flood basalts – extraordinary volcanic episides that go on for a million years as flow after flow of lava wells from cracks in the continent to build up country-sized mounds called “traps”. It is probable, but not yet proven, that the gases emitted from the thousand of cubic kilometers of flood basalts create toxic pollution of land and sea. The Deccan Traps of central India mark the end of the dinosaurs, while the traps that underlie the steppes of Siberia are the same age as the great Permo-Triassic extinction. </i><br />
<br />
<i>Given the odds, it is to be expected that mass extinctions have chancy, even unfair consequences. After the Permo-Triassic massacre our ancestral line succesively developed into anapsids (turtles), synapsids (mammals) and diapsids (everything else). Each of these is a higher stage of evolution, with a basic physiology better adapted to life on land. By some freak chance, a single lowly synapsid got through the 190-my extinction at the end of theTriassic, along with a variety of diapsids.on their way to crocodiles, lizards, and all kinds of dinosaurs. This primitive synapsid line, which seems to have favored bugs and fruit, quietly developed warm-blooded circulation, milk glands and eventually a uterus. And when the grand house of the dinosaurs came crashing down, guess who was hiding under the ruins? </i><br />
<br />
<i>Our final lucky break came around 48 million years ago, when a solitary species of primitive primate got stranded on the (then) island of Africa, never to see its many relatives in North America and Asia again. Bingo, Columbia River basalts. This was not one of the great extinction events, but it was enough to kill every primate in the world – except for that forgotten waif in Africa. Now, many lemurs and lorises and monkeys and apes later, here we are, self-importantly going on about our human-caused extinction event. If we knew how far we have yet to go, perhaps we just might give it up. </i>Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com2tag:blogger.com,1999:blog-15929719.post-69580775086446869572010-07-16T10:25:00.000-07:002010-07-16T10:25:22.571-07:00Apache Cassandra: materialized queries (one table per query please)<a href="http://maxgrinev.com/">Max Grinev</a> has done an excellent job giving a <a href="http://maxgrinev.com/2010/07/09/a-quick-introduction-to-the-cassandra-data-model/">quick overview of Cassandra here</a>, and then has a followup blog post that discusses <a href="http://maxgrinev.com/2010/07/12/do-you-really-need-sql-to-do-it-all-in-cassandra/">how to accomplish various SQL-style operations such as select, join, and group by</a>. Very helpful, thanks, Max!<br />
<br />
Note that in every example, you don't write a query against the existing data. Instead, you create a new column family to represent the query. It's as if you write your query as a data structure. It's basically a <a href="http://en.wikipedia.org/wiki/Materialized_view">materialized view</a>. Max argues that this is OK for most applications: "However, typically in Web applications and enterprise OLTP applications queries are well known in advance, few in number, and do not change often." <br />
<br />
OK, fair enough, but it is definitely something to keep in mind: if you want to support ad-hoc queries in your application, then Cassandra is probably not the right choice.<br />
<br />
It also looks like it is your job as a user of Cassandra to update all your various views when data changes. I agree with Maxim that <a href="http://en.wikipedia.org/wiki/Denormalization">denormalization</a> and "push on change" rather than "pull on demand" is probably the<a href="http://highscalability.com/blog/2009/10/13/why-are-facebook-digg-and-twitter-so-hard-to-scale.html"> right approach for highly intertwined systems like Twitter and Facebook</a>. But it would be nice if the system helped you maintain consistency across all these denormalized copies.<br />
<br />
For example, <a href="http://couchdb.apache.org/">CouchDB </a>has a very similar model of materialized views, but their views are defined as map/reduce operations on the primary document(s), and CouchDB takes care of keeping the views in sync as you update your data. That saves me a lot of time and worry. <br />
<br />
Perhaps something like that exists in Cassandra and I don't know about it?<br />
<br />
Anyway, I've been very interested in Cassandra, and Max's blogs were quite helpful in helping me get my head around it. I highly recommend reading them if you'd like to learn more about Cassandra, or what a distributed column-oriented key/value store looks like (Cassandra is modeled after Google's <a href="http://en.wikipedia.org/wiki/BigTable">BigTable</a>).Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com0tag:blogger.com,1999:blog-15929719.post-3075130192698297982010-05-14T13:11:00.000-07:002010-05-14T13:21:43.197-07:00Facebook's deal with the Devil<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://thumbs.dreamstime.com/thumb_383/123885678235vtW8.jpg"><img style="cursor:pointer; cursor:hand;width: 300px; height: 303px;" src="http://thumbs.dreamstime.com/thumb_383/123885678235vtW8.jpg" border="0" alt="" /></a><br /><div><br /></div>I wanted to share what I thought was a <a href="http://www.zephoria.org/thoughts/archives/2010/05/14/facebook-and-radical-transparency-a-rant.html">very enlightening blog post by Danah Boyd </a>on the recent ruckus around Facebook and her issues with how Facebook is handling all this.<div><br /></div><div>I think she particularly nailed what's bothering me here:</div><blockquote> I’d be a whole lot less pissed off if people had to opt-in in December. Or if they could’ve retained the right to keep their friends lists, affiliations, interests, likes, and other content as private as they had when they first opted into Facebook. Slowly disintegrating the social context without choice isn’t consent; it’s trickery.</blockquote>It's clear that Facebook really really <b>really</b> wants to make all the content people are posting as public as possible, because they are not making money on ads. <div><br /></div><div>I can just see all these marketers from Big Companies in Big Conversations with Facebook execs in closed rooms waving wads of cash at them saying "Boy do we want this content! People are telling us exactly what they like and what they care about! Just make this content available, and we will give you so much money you'll be swimming in it." </div><div><br /></div><div>In the other room are the board members saying "so, when are you going to monetize this big thing you've got going?"<div><br /></div><div>So, you take the Devil's deal, what's a little privacy, I mean, people want to be transparent anyway. Rationalize and justify, I know that path. So, hoping nobody's watching, and putting on a show of "choice" and "options", you open up the content, and the guys with the money cheer.</div><div><br /></div><div>If it were me, and I were at Facebook, I'd have a bad taste in my mouth right now...</div></div>Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com0tag:blogger.com,1999:blog-15929719.post-87728417336959356522010-05-06T23:08:00.000-07:002010-05-06T23:10:47.647-07:00Time to tie my camel to the treeI like to not worry too much about security, and try to feel relaxed about living my life on the planet. But I also know that you need to take necessary care. As the old saying goes "trust in God, but tie your camel to the tree."<br /><br />I read today in the New York Times that <a href="http://www.nytimes.com/2010/05/03/technology/internet/03facebook.html">hackers have made 1.5 <b>million</b> Facebook user credentials for sale</a>.<br /><br />I also got a phone call today from someone saying they were extending my Popular Science subscription, and confirmed my address and name. Then they said if I could just give them my credit card number they could go ahead and extend my subscription.<br /><br />When I refused, they were OK, but asked for my email so they could send me an email confirmation. When I refused again, they wanted to have me talk to their "manager" and I just hung up. This is the second time I've gotten a call like that. This isn't just random identity theft - this is a <b>business</b>. And I suspect a very profitable one.<br /><br />I also was reading about online payment services, and how PayPal is targetted for attacks on a regular basis.<br /><br />And I have a feeling it's only going to get worse - the hackers are on the attack, and from what I know about online sites, they <b>try</b> to be secure (maybe) but with dynamic client-side code and phishing and Trojan horses and worms and insider attacks and just dumb human error, the weaknesses will be found and taken advantage of, more and more and more.<br /><br />I can't protect myself from all of this, but I do need to take necessary precautions. We already have a shredder and shred anything that has our personal information on it. But I've been lazy about my passwords. I've kept the same one for years; it's short, and it's everywhere. Well, that changed tonight. The key passwords have all been changed, and I'll do more as I bump into them.<br /><br />Symantec has me change my password every three months. I'll be using that as a trigger for me to change all my online passwords.<br /><br />I've had enough, it's time to tie my camel to the tree.Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com2tag:blogger.com,1999:blog-15929719.post-34553274931057788332010-05-05T09:46:00.000-07:002010-05-05T09:46:37.721-07:00Diagrammr - very cool diagramming toolI just want to do a shout out for a very nice diagramming tool I bumped into via a referral from my Twitter stream.<br />
<br />
<a href="http://www.diagrammr.com/">http://www.diagrammr.com</a> lets you write simple English phrases that describe either relationships between entities/objects/concepts or interactions between them. For each sentence, the tool creates two nodes (subject and object) and a path between them (either a relationship or an interaction). You can easily share this, collaborate, or embed it, as below (just right-click on diagram and copy the image URL, and paste it into an <i>img</i> tag)<br />
<br />
<img src="http://www.diagrammr.com/png?zx=0.19363206066191196&key=d6gBWWiGfhX" /><br />
<br />
I can imagine even doing this live during a design walkthrough or presentation, to help make the learning more dynamic. <br />
<br />
The web site doesn't say who the author is, but kudos to whoever they are, very creative and very simple. Thanks!Anonymoushttp://www.blogger.com/profile/04898259486137280102noreply@blogger.com1