Barack Obama sat down with the Atlantic’s Jeffrey Goldberg to discuss U.S. policy towards Israel, and for the first 95% of the interview, Obama offered a solid, uncontroversial position, which included effusive praise for the Jewish state.
Asked if he perceived Israel as “a drag on America’s reputation overseas,” Obama said:
“No, no, no. But what I think is that this constant wound, that this constant sore, does infect all of our foreign policy. The lack of a resolution to this problem provides an excuse for anti-American militant jihadists to engage in inexcusable actions, and so we have a national-security interest in solving this, and I also believe that Israel has a security interest in solving this because I believe that the status quo is unsustainable. I am absolutely convinced of that … I want to solve the problem.”
Describing the Israeli-Palestinian conflict as a source of instability in the region, and a dispute in need of a resolution, hardly seems controversial.
So, House Republican leaders changed Obama’s words to make him say what they wanted to hear. By any reasonable definition of the word, they lied.
Reps. John Boehner (R-Ohio) and Eric Cantor (R-Va.), the first and third highest ranking Republicans in the House, issued written statements. First Boehner…
“Israel is a critical American ally and a beacon of democracy in the Middle East, not a ‘constant sore’ as Barack Obama claims,” Boehner said. “Obama’s latest remark, and his commitment to ‘opening a dialogue’ with sponsors of terrorism, echoes past statements by Jimmy Carter who once called Israel an ‘apartheid state.’”
…and then Cantor.
“It is truly disappointing that Senator Obama called Israel a ‘constant wound,’ ‘constant sore,’ and that it ‘infect[s] all of our foreign policy.’ These sorts of words and characterizations are the words of a politician with a deep misunderstanding of the Middle East and an innate distrust of Israel,” Cantor said.
Pathetic. House GOP leaders are well past the point of shame, but if there’s even a shred of decency among them, Boehner and Cantor will say their statements were written by overeager staffers and apologize.
(Boehner’s reference to Carter was an especially ridiculous move, given that Obama specifically denounced it in the very same interview: “I strongly reject [Carter’s] characterization. Israel is a vibrant democracy, the only one in the Middle East, and there’s no doubt that Israel and the Palestinians have tough issues to work out to get to the goal of two states living side by side in peace and security, but injecting a term like apartheid into the discussion doesn’t advance that goal. It’s emotionally loaded, historically inaccurate, and it’s not what I believe.”)
Jake Tapper concluded:
…Boehner et al are falsely accusing Obama of besmirching a nation and a people. They are accusing him of being anti-Israel, even anti-Semitic. It is false.
This kind of twisting is unbecoming a party that claims to have superior ideas to Obama’s fairly orthodox liberal record. Voters may conclude that Republicans think they have to make things up to beat Obama. Which they don’t.
Actually, they might. If clowns like Boehner and Cantor had any confidence at all in the merits of the Republican agenda or the value of ideas, they wouldn’t perceive lies like these as necessary for electoral success.
Update: The Atlantic’s Goldberg, who is a conservative, also blasted Boehner, calling the Minority Leader’s attack on Obama “mendacious, duplicitous, gross, and comically refutable.” Goldberg called on Boehner to “do the right thing, and correct the record.”
Can you imagine a day when you never again have to pay for gas for your car? Or never pay for a tune up? Or never pay for the electricity that powers your house? Well, with some actual leadership from our elected officials, the days of cheap and clean energy are not some far-off pipe dream. Read this article from the SierraClub and imagine the possibilities.
SierraClub: (h/t Bill W.)
“Five years ago, I spent about $45,000 and got a brand new car (the RAv4EV) and the solar system,” he says. “We’re still driving the car every day, and the solar system will continue to make fuel for whatever EV we drive in the future. For $45,000 we bought a new car and fuel for the rest or our lives.”
Asked how long it will take for the PV system to pay for itself, Dickey replies: “If we think of everything in terms of what it costs us in the short-term, we’re screwed. It’s the same argument people use against the Prius: When will it pay back in gas savings? But that only accounts for the money paid at the pump. What of the billions of dollars that leave our economy for oil, or the billions of our tax dollars that go toward tax incentives for oil companies? What of the cost of the military and the lives lost to protect our oil?”
$45,000 is no doubt a significant amount of money. But if we invest in this now — like we should have been for the past 20+ years — the price will naturally come down. Darrell Dickey hits the nail on the head when he says we need to think of this modest investment in contrast to the billions of dollars that leave our treasury every year for oil.
Here’s my favorite quote:
My wife has not been to a gasoline station in seven years and 70,000 commute miles—not once!”
Imagine the possibilities.
Sometimes it is interesting to see that knowledge from the 10,000 B.C. period of web development can be used in new ways to create - to play it safely - interesting ideas.
Each window in a browser has a name property which became pretty much useless when we stopped using pop-up windows and tried to make them communicate with each other by name.
Thomas Frank, however wrote a small library that uses window.name to store session variables without having to resort to cookies and his research seems to prove that you can store up to two megabytes of data in window.name. As this property is available across page reloads it is a sort of session, but as the comments show the security aspects of it are just scary:
There is a cross domain flag in sessvars, but although it defaults to false, this just sees to that you don’t get any other sites window.name garbage inside your sessvars by mistake. The actual data you set will be available for other scripts on other domains to look at – and also to anyone able to type javascript:alert(window.name) in the browser’s address bar
One of the things we're thinking about while building stackoverflow.com is how to let users style the questions and answers they're entering on the site. Nothing's decided at this point, but we definitely won't be giving users one of those friendly-but-irritating HTML GUI browser layout controls.
I have one iron-clad design guide: this is a site for programmers, so they should be comfortable with basic markup. None of that nancy-boy GUI toolbar handholding nonsense for us, thankyouverymuch. If you can sling code, a little bit of presentation markup is child's play.
We will support some sort of markup language to style the questions and answers. But what markup language?
I mentioned in podcast #4 that we consider Wikipedia a defining influence. Let's see how Wikipedia handles markup syntax. This is what the edit page for Joel Spolsky's Wikipedia entry looks like:
It's an effective markup language, but I think you'll agree that it's more intimidating than humane. Wikipedia's How to Edit a Page and the accompanying Wikipedia syntax cheatsheet helps. Some. I'd argue that writing a Wikipedia entry is a step beyond mere presentational markup; it's almost like coding, as you weave the article into the Wikipedia gestalt. (Incidentally, if you haven't ever edited a Wikipedia article, you should. I consider it a rite of passage, a sort of internet merit badge for anyone who is serious about their online presence.)
Let's consider a simpler example. What we're looking for is some kind of middle ground, a humane text format. Let's start with some basic HTML.
Lightweight Markup Languages
According to Wikipedia:
A lightweight markup language is a markup language with a simple syntax, designed to be easy for a human to enter with a simple text editor, and easy to read in its raw form.Some examples are:
Markup should also extend to code:
10 PRINT "I ROCK AT BASIC!" 20 GOTO 10Here's what that looks like expressed in a variety of lightweight markup languages. Bear in mind that each of these will produce HTML equivalent to the above.
Textile Markdown h1. Lightweight Markup Languages According to *Wikipedia*: bq. A "lightweight markup language":http://is.gd/gns is a markup language with a simple syntax, designed to be easy for a human to enter with a simple text editor, and easy to read in its raw form. Some examples are: * Markdown * Textile * BBCode * Wikipedia Markup should also extend to _code_: pre. 10 PRINT "I ROCK AT BASIC!" 20 GOTO 10 Lightweight Markup Languages ============================ According to **Wikipedia**: > A [lightweight markup language](http://is.gd/gns) is a markup language with a simple syntax, designed to be easy for a human to enter with a simple text editor, and easy to read in its raw form. Some examples are: * Markdown * Textile * BBCode * Wikipedia Markup should also extend to _code_: 10 PRINT "I ROCK AT BASIC!" 20 GOTO 10 Wikipedia BBCode ==Lightweight Markup Languages== According to '''Wikipedia''': :A [[lightweight markup language]] is a markup language with a simple syntax, designed to be easy for a human to enter with a simple text editor, and easy to read in its raw form. Some examples are: * Markdown * Textile * BBCode * Wikipedia Markup should also extend to ''code'': <source lang=qbasic> 10 PRINT "I ROCK AT BASIC!" 20 GOTO 10 </source> [size=150]Lightweight Markup Languages[/size] According to [b]Wikipedia[/b]: [quote] A [url=http://is.gd/gns]lightweight markup language[/url] is a markup language with a simple syntax, designed to be easy for a human to enter with a simple text editor, and easy to read in its raw form. [/quote] Some examples are: [list] [*]Markdown [*]Textile [*]BBCode [*]Wikipedia [/list] Markup should also extend to [i]code[/i]: [code] 10 PRINT "I ROCK AT BASIC!" 20 GOTO 10 [/code]
None of these lightweight markup languages are particularly difficult to understand -- and they're easy on the eyes, as promised. But I still had to look up the reference syntax for each one and map it to the HTML that I already know by heart. I also found them disturbingly close to "magic" for some of the formatting rules, to the point that I wished I could just write literal HTML and get exactly what I want without guessing how the parser is going to interpret my fake-plain-text.
Which leads directly to this question: why not just stick with what we already know and use HTML? This c2 wiki page titled Why Doesn't Wiki Do HTML? makes the case that -- at least for Wiki content -- you're better off leaving HTML behind:
I'm not sure I agree with all of this, but it can make sense in the context of a full-blown Wiki. It's worth considering.
After all this research on humane markup languages, much to my chagrin, I've come full circle. I now no longer think humane markup languages make sense for most uses. I agree with the guy at fileformat.info -- HTML is generally the better choice:
If the source and destination are the web, why not use the native markup language of the web?
HTML is a bit less readable than the lightweight markup languages, it's true. But basic HTML is not onerous to read, particularly if we hide the repetitive paragraph tags.
With a bit of careful coding, it is possible to whitelist specific HTML tags that you will allow. This way you avoid exposing yourself to risky/vulnerable tags.
It's not at all clear that any existing lightweight markup language has critical mass, with the possible exception of Wikipedia's flavor. On the other hand, text parsers and tools will always understand HTML.
A lot more people know HTML than any given flavor of humane text. If you're a programmer, you damn well better know HTML. For the handful of wiki-like functions we may need, it's possible to add some optional attributes to the HTML tags. And wouldn't that be easier to learn than some weird, pseudo-ASCII derivation of HTML?
I do think we'll adopt some of the cleverer functions of Textile and Markdown, insofar as they remove mundane HTML markup scutwork. But in general, I'd much rather rely on a subset of trusty old HTML than expend brain cells trying to remember the fake-HTML way to make something bold, or create a hyperlink. HTML isn't perfect, but it's an eminently reasonable humane markup language.
[advertisement] Don't denormalize your data just to write reports! Data Dynamics Reports can use your existing data relationships when creating reports.
(author unknown)Seriously, what's aaaap. Oh, and pass me a beer.

TimesOnlineUK Slide show, that's what!
Sometimes it is interesting to see that knowledge from the 10,000 B.C. period of web development can be used in new ways to create - to play it safely - interesting ideas.
Each window in a browser has a name property which became pretty much useless when we stopped using pop-up windows and tried to make them communicate with each other by name.
Thomas Frank, however wrote a small library that uses window.name to store session variables without having to resort to cookies and his research seems to prove that you can store up to two megabytes of data in window.name. As this property is available across page reloads it is a sort of session, but as the comments show the security aspects of it are just scary:
There is a cross domain flag in sessvars, but although it defaults to false, this just sees to that you don’t get any other sites window.name garbage inside your sessvars by mistake. The actual data you set will be available for other scripts on other domains to look at – and also to anyone able to type javascript:alert(window.name) in the browser’s address bar
Well, the submission deadline for the first Android Developer Challenge has come and gone, the apps are in, the judges are finished, and the waiting is over. We got a lot of great submissions, and I can tell you personally that the competition was fierce. I didn't see all 1,788 submissions, but I saw quite a lot of them, and I uttered more than one wail of despair as some of my favorite submissions didn't quite make the cut, by razor-thin margins in some cases. But, the judges have spoken.
Speaking of the judges...we'll soon publish a list of who the judges are, but I know many of our developers are still curious: what were all those judges doing? Well, the short answer is that they were judging applications using a custom laptop configuration that we provided. But we thought some people might be interested in the "long" answer, so we put together this blog post. If you're not interested in the gory details of the judging, you can stop here; but if you are interested, read on!
How We Got Started
Making the Challenge fair was by far our primary goal. We knew we had to do whatever we could to make sure that the judges' scores are based solely on their review of the application. We automated as much as possible, to make it easy for judges to focus on judging, and not on administrivia or complicated setup.
The first thing we realized was that we were going to have way more submissions than any single judge could look at. No one could review all 1,788 submissions in a reasonable amount of time. On the other hand, we definitely needed more than one judge reviewing each submission. Our goal was to have each submission reviewed by four different judges, with a minimum of three.
The big question was then: how many judges would we need?
For 1,788 submissions, a panel of 4 judges per application meant that we needed a whopping 7,152 reviews to be performed. Since our judges would have to be crazy to agree to do more than 75 reviews, we needed at least 95 judges. In the end we recruited around 125, including backup judges.
Making Order out of Chaos
The next thing we realized was that judges need to be able to actually review the submissions. Since the judges came from our Open Handset Alliance partners and many are not engineers, we knew that we couldn't send instructions like "run the M5-RC15 emulator, open a terminal window, and run the command adb push geodb /data/misc/location—and don't forget the --sdcard option!" They'd think we were quoting Star Wars.
Besides that, we also knew that once we gave the judges their assignments, what they did was out of our hands. We couldn't control how the judges review the applications, but we could certainly make it as easy as possible for the judges to do a thorough review.
So, we built a program in wxPython that automates judging. This application launches a clean emulator for each submission, supports emulator features like SD card images and mock location providers, and allows judges to launch multiple emulators and simulate calls and SMS messages for applications which need that functionality. We asked our friendly neighborhood Google Tech Stop for 140 laptops, installed Ubuntu Linux and our software on one, and then cloned that installation for use on all the others. We then had a huge shipping party, where we imaged, boxed, and shipped 115 or so laptops in one day.
An important side effect of these custom laptops is that they are all identical. This means that each judge's experience of the submissions was the same, which eliminated the risk of one judge rating an app poorly just because it ran slowly on his personal computer.
Managing All that Data
Once we sent 100+ laptops all over the world, we needed a way to get the data back. Another goal was to eliminate as many sources of human error as possible. With 7,152 reviews to complete, and 4 categories per review, that's 28,608 scores to keep track of. Mistakes would be bound to happen, so filing paperwork or transcribing scores by hand from one file to another was out of the question.
Our solution was the Google Data web API for accessing things like Google Spreadsheets and Google Base. Here's how it worked.
This approach had two great things about it: first, it didn't require any new server infrastructure to make it work. Second, our "database" had a built-in rich "admin" UI for managing the data — namely, Google Spreadsheets itself. If any of our judges ran into problems or needed help, we could simply open that spreadsheet in our browser and review or fix problems.
This approach worked quite well, and I'd bet that the judges didn't even know the Spreadsheets API was being used, unless they actively poked around.
Tying Up the Loose Ends
Of course, our work wasn't done once we retrieved all the submission scores. We couldn't just average up the scores, you see. First, judges could recuse themselves from scoring specific submissions; perhaps they were assigned an application similar to one their own company is working on, or perhaps they realized they knew one of the authors. Second, despite our best efforts there was a chance that some judges might have a problem — for instance, if one judge had a poor network connection but reviewed an application that requires the network, then that judge might have scored the application unfairly poorly.
Here are the major outlier scenarios that we were concerned about:
For the first two cases, we simply discarded the outlying data points, if we had enough. For instance, if three judges reported good scores and one recused herself, we simply dropped that fourth score. If dropping the conflicting score would have brought the application below three reviews, we sent it back for review by a new judge to bring it up to our minimum number of judges per application.
The third case is more subtle. Just because a judge rated an application differently than others doesn't mean that that review is invalid, so we can't simply discard outliers. Instead, we took the highest and lowest scores in each category and gave them half weight. The effect is to bring the average scores a bit closer to the median scores, which helps minimize the impact of unusually high or low scores. This process was applied to all submissions (not just "suspicious" scores) since it has a minimal effect on submissions that don't have a large outlier.
We actually ran the whole process above twice: first we ran it to choose a first cut of the top 100 submissions from the original 1,788, and we then sent those 100 to a second group of judges for selection of the final 50. (Actually, the "top 100" were really "top 119", since we added a few more submissions to accommodate scoring ties in the first round.)
Wrapping Up
Now you know what we've been spending all our time on, and what's been keeping us up at night (sometimes literally)! Throughout, our key objectives were to keep the process fair, let the judges focus on judging, and give applications the benefit of the doubt in cases of scoring outliers.
What's next? Well, the 50 submissions that were awarded a prize now begin the refinement process for their Round 2 submissions, which will award the final, larger prizes to the top 20 applications. I also hope that the developers of the other great apps that didn't receive prizes will consider the second Android Developer Challenge, which should begin later this year.
To everyone, I'd also like to say thanks for participating, and congratulations on your hard work!
The Android Developer Challenge is a two-part contest whose goal is to encourage developers to build apps for the new Google mobile platform, code-named "Android." In this first round, dubbed "Challenge I," submissions were accepted up until April 14th. Yesterday, the top 50 entries were announced. Each of these application authors received $25,000 to fund further development of their app. We've dug through the list of winners to pick out our favorite apps and the ones we're most looking forward to.
On the phandroid blog, the top 46 winning apps, including descriptions, were listed. Why only 46? Apparently, four of the winners opted to continue their efforts in secret for now. Based on the descriptions of these under development apps, we think the following have potential:
Ten Future Android Apps
Beetaun - Social network around geographical content created by people and for people (from your neighborhood, from your city, from your country, from all over the world). By Sergey Gritsyuk and Dmitri Shipilov
BioWallet - A biometric authentication system for Android. This application features iris recognition and can act as a password safe and provide single sign-on for other Android apps. Jose Luis Huertas Fernandez
Diggin - Daniel Johansson, Aramis Waernbaum, Andreas Hedin; We can't find any info on this, but the title suggests a mobile Digg app, which would be cool.
Marvin - Marvin allows you to publish and browse geo-localized objects around you. Objects can be static or move by themselves and follow you. You publish and browse where you are, based on your current location or where you virtually are on the map. By Pontier Laurent.
Locale - Locale is one of 7 Android applications submitted by MIT students. It enables you to set up location- and time-based profiles for your phone, so you can make it shut up when you're at work, forward calls to your landline when you're at home. Clare Bayley, Christina Wright, Jasper Lin, Carter Jernigan.
Em-Radar - Em-Radar is a revolutionary mobile product that alerts you about emergencies and severe weather anywhere, any time. By Jack Kwok.
AndroidScan - Use your phone to scan a barcode, get pricing information from dozens of stores, product reviews and more. Never make a bad purchase again! (by Jeffrey Sharkey)
LifeAware - Mobile Tracking Service formed to help people be aware of where their friends and family are. A quick search on the Internet shows that approximately 700,000 children are classified as missing annually. The intent of Life Aware is to help you be aware of where you family and friends are. Gregory Moore, Aaron L. Obrien, Jawad Akhtar
Wikitude-the Mobile Travel Guide - Find points of interest based on your current location. By Philipp Breuss.
BreadCrumbz - Navigate your route using pictures instead of a map (there's also a map, if you like). Easily record routes using your smartphone. Share them with your friends, share them with the world. By Amos Yoffe
BreadCrumbz Video
ConclusionOf course, there are several without descriptions as well as those mysterious four that are yet to be announced, so who knows what else there might be out there. There will also be another round in the Android Developer Challenge which will launch after the first handsets built on the platform become available in the second half of 2008, and there are sure to be even more apps to discover at that time.
You may notice some similarities between the Android apps and the ones we listed earlier in the post "12 Future Apps for Your iPhone." It looks like some of those future iPhone apps - for example, reality tagging, physical social networks, personalized travel guides, and digital shopping - won't just be limited to iPhones after all, but will come to other future mobile platforms, like Android, as well.
Fedora 9, the latest version of the popular community-driven Linux distribution, has officially been released. It offers a cutting edge desktop software stack with GNOME 2.22, KDE 4, Firefox 3 beta 5, and version 2.6.25 of the Linux kernel.
Fedora 9, the latest version of the popular community-driven Linux distribution, has officially been released. It offers a cutting edge desktop software stack with GNOME 2.22, KDE 4, Firefox 3 beta 5, and version 2.6.25 of the Linux kernel.

dey c us trollin dey hatin
dey awl b hatin (via ihasahotdog.com)
picture: Indigo. lol caption: Magnie
[Link: A young Bill O'Reilly demonstrates the grace under pressure that ultimately led to a successful Fox News broadcasting career.]
Most Ruby developers should be familiar with Rack, an interface / library that abstracts away a lot of the banalities of hooking up application code to HTTP servers. It’s used by several Ruby Web application frameworks already, some as a default - such as Merb, and others as an optional extra - such as Rails. Rack is significant because it provides a standard for Web-facing Ruby applications and frameworks to adhere to and is rapidly becoming the de-facto standard in this space.
Nick Sieger has developed JRuby-Rack, a variant of Rack that runs on the Java-based Ruby implementation, JRuby. You can use it to run any Rack-compatible application (e.g. Rails or Merb applications) inside a Java application server. This is significant because it gives application developers an independent, abstracted way to roll out Ruby-based Web applications on a Java server with significant ease (at least, more ease than before!).
If JRuby’s of particular interest to you, you might also want to check out JRuby Inside, one of Ruby Inside’s sister sites, and one dedicated entirely to JRuby links and news.
This post is sponsored by Rails Kits — Looking to build a subscription-based or membership web site with Rails? Use the SaaS Rails Kit to skip having to write the billing code. Instead of starting from scratch, start with subscription management and recurring billing all ready to go.
Chatter
6 hours 5 min ago
15 hours 4 min ago
1 day 1 hour ago
1 day 2 hours ago
1 day 9 hours ago
2 days 1 hour ago
2 days 4 hours ago
2 days 7 hours ago
3 days 6 hours ago
6 days 9 hours ago