Last updated by Venus on 27th January 2012 at 7:50 a.m. CST on behalf of Amit Chakradeo
[Languages: Marathi|
Hindi|
Gujarati|
Telugu|
Kannada|
Tamil|
Malayalam|
Bangla|
Films:
Bollywood|
Abhi-Ash|
Aamir|
Hritik|
Salman|
Shahrukh|
Music:
ARR|
Sonu|
S.E.L.|
Vishal Shekhar|
Vishal Bharadwaj|
Himesh Reshammiya|
Misc:
FinanceIndia
]
Google Searches that landed here!
Posted by Library (ek_contact@plymouthrocket.com) on January 27, 2012 03:00 PM · permalink
Posted on January 27, 2012 01:49 PM · permalink
A dozen companies committed to maximizing social good while turning a profit have filed papers with the state to become California's first "benefit corporations." It was the first business day they could register under a recently approved state law that gives companies a way to legally structure their businesses to consider social and environmental efforts as part of their missions.The Rise of Benefit CorporationsWhile that may sound like marketing hype, it's important from a legal standpoint because it helps shield benefit corporations from lawsuits brought by shareholders who say that company do-gooding has diluted the value of their stock.
California becomes the seventh state to adopt this relatively new corporate structure. Until now, California corporate law mandated that shareholders' interests trump those of all other parties. Entrepreneurs who wanted to incorporate green initiatives or social causes into their businesses were often forced to become nonprofits, limiting their ability to raise venture capital.
California's new category allows corporations to officially adopt policies "that create a material positive impact on society and the environment" as an integral part their legal charter. The Huffman legislation also expands the fiduciary duty of executives and board members to include the interests of workers and the community.
When America began, the states chartered corporations for public purposes, like building bridges. They could earn profits, but their legitimacy flowed from their delegated mission.Today, corporations are chartered without any public purposes at all. They are legally bound to pursue a single private purpose: profit maximization. Thus, far from advancing the common good, many for-profit corporations have come to defy the law, corrupt the officials charged with enforcing it and inflict harm on the public with impunity. The consequences are visible in the wreckage left by BP, Massey Energy, Enron, AIG, Lehman Brothers, Blackwater and Exxon Mobil, to name a few recent wrongdoers. Profits rule; anything goes.
We need a new business model inspired by the old one. Corporations should again come to bolster democratic purposes, not thwart them. To be sure, there will be no return to the legislative short leash, especially now that the Supreme Court has invited corporations to spend treasury funds electing pliant and obsequious lawmakers. But socially minded businesses should at least have the right to operate outside the straitjacket legal requirements of Delaware Code profit maximization. [...]
This is an important shift in law. The fear of shareholder litigation has driven many public-spirited businesses, most famously Ben & Jerry's, to take the high bid rather than the high road in a corporate takeover fight. Becoming a Benefit Corporation declares legal independence from the profits-ber-alles model. [...]
It may take a while to displace the rent-seeking leviathans that get rich off lobbying, power plays, pyramid schemes and defense contracts. Then again, a lot of those companies have relocated their operations abroad in search of cheaper labor, while the Benefit Corporations are taking root and blossoming right here in America, restoring the bonds of community while doing honest commerce. This is what economic recovery looks like.
Previously, previously, previously, previously.
Mirrored from jwz.org.
Posted by jwz (jwz@jwz.org) on January 27, 2012 01:22 PM · permalink
Read more of this story at Slashdot.
Posted by samzenpus on January 27, 2012 01:05 PM · permalink
Oklahoma state senator Ralph Shortey is concerned about the possibility that some nefarious person or entity is using aborted human fetuses in food, and has introduced legislation to put a stop to this. Or, to keep it from starting, because he isn't exactly sure that anybody's really doing this, or how or where they'd be doing it if they were. Still, can't be too careful.SB 1418 is, at least for the moment, just this one sentence:
No person or entity shall manufacture or knowingly sell food or any other product intended for human consumption which contains aborted human fetuses in the ingredients or which used aborted human fetuses in the research or development of any of the ingredients.[...] "People are thinking that this has to do with fetuses being chopped up and put in our burritos," Shortey said, something no one had been thinking until he said it. "That's not the case," he went on. "It's beyond that." That's right -- they are also in our chalupas.
[...] According to Shortey, there are companies out there "using embryonic stem cells to research and basically cause a chemical reaction to determine whether or not something tastes good or not." He said he read last year that a pro-life group was boycotting an unnamed company for this, and I guess if you've read someplace that somebody is upset about something that might be happening somewhere in the world, that's really all you need to know before writing a law banning what you believe that thing to be.
Mirrored from jwz.org.
Posted by jwz (jwz@jwz.org) on January 27, 2012 12:55 PM · permalink
Interesting article from the New York Times on password sharing as a show of affection.
"It's a sign of trust," Tiffany Carandang, a high school senior in San Francisco, said of the decision she and her boyfriend made several months ago to share passwords for e-mail and Facebook. "I have nothing to hide from him, and he has nothing to hide from me.""That is so cute," said Cherry Ng, 16, listening in to her friend's comments to a reporter outside school. "They really trust each other."
We do, said Ms. Carandang, 17. "I know he'd never do anything to hurt my reputation," she added.
It doesn't always end so well, of course. Changing a password is simple, but students, counselors and parents say that damage is often done before a password is changed, or that the sharing of online lives can be the reason a relationship falters.
Ethnologist danah boyd discusses what's happening:
For Meixing, sharing her password with her boyfriend is a way of being connected. But it's precisely these kinds of narratives that have prompted all sorts of horror by adults over the last week since that NYTimes article came out. I can't count the number of people who have gasped "How could they!?!" at me. For this reason, I feel the need to pick up on an issue that the NYTimes let out.The idea of teens sharing passwords didn't come out of thin air. In fact, it was normalized by adults. And not just any adult. This practice is the product of parental online safety norms. In most households, it's quite common for young children to give their parents their passwords. With elementary and middle school youth, this is often a practical matter: children lose their passwords pretty quickly. Furthermore, most parents reasonably believe that young children should be supervised online. As tweens turn into teens, the narrative shifts. Some parents continue to require passwords be forked over, using explanations like "because I'm your mother." But many parents use the language of "trust" to explain why teens should share their passwords with them.
Much more in her post.
Related: a profile of danah boyd.
Posted by schneier on January 27, 2012 12:39 PM · permalink
Posted by Lewis Wallace on January 27, 2012 12:30 PM · permalink
Posted by Hell for Leather on January 27, 2012 12:30 PM · permalink
Posted by Robert McMillan on January 27, 2012 11:30 AM · permalink
Posted by bdagosti on January 27, 2012 11:30 AM · permalink
Posted by Spencer Ackerman on January 27, 2012 11:30 AM · permalink
Posted by Spencer Ackerman on January 27, 2012 11:30 AM · permalink
Posted by Nat Torkington on January 27, 2012 11:00 AM · permalink
One theory of technology marketing and acceptance goes like this: A technology causes a media hypestorm and rising expectations. Then it crashes to Earth as the popular press and the public discovers that it's not all the hypesters said it would be--through no fault of the technologists who brought it to the world in the first place. Then, gradually, the truth about the technology seeps out until finally it reaches its use case--and then becomes that status quo, just waiting to be disrupted as it previously disrupted what came before.
While the violent vicissitudes of this chart make for good TV movies, in reality very few innovations follow this path. That's because it ignores 'being ignored.'
90% of the time, new technology triggers are widely and aggressively ignored. While we're more eager than ever for a savior that will change everything, the number of technologies, pundits, prophets and entrepreneurs is so large that there's now a line out the door. As a result, most of the things we now take for granted (cell phones, tweeting, insulated windows, email) didn't follow this curve at all.
In fact, just about every innovation I know of has to make it through the wilderness before it gets anywhere close to a hype cycle. The wilderness is the term for the years (or decades) that a founder/entrepreneur/artist/technology must spend being ignored and unfunded before the breakthrough of overnight success occurs.
Posted by Seth Godin on January 27, 2012 10:22 AM · permalink
Read more of this story at Slashdot.
Posted by samzenpus on January 27, 2012 10:21 AM · permalink
In this video, Hamst, a proud resident of Scunthorpe who enjoys taking photos of local landmarks for the Visit Scunthorpe site confronts two very nasty security guards for the Golden Wonder factory. The guards are furious that he is taking pictures of the factory from the public pavement and they shower him with threats and abuse (at one point, one of them encourages a colleague to run him down with a car). They cite imaginary laws that prohibit taking pictures of private buildings from a public place and repeatedly threaten to sic the police on him.
Hamst keeps an admirably cool head through the whole ordeal and is generally a model for how one should behave when corporations' representatives make illegal demands on photographers shooting in public places.
Golden Wonder Security
(Thanks, Roach McKrackin!)
Posted by Cory Doctorow on January 27, 2012 09:42 AM · permalink
Posted by Wally Wang on January 27, 2012 08:00 AM · permalink
Posted by Jack Dunning on January 27, 2012 08:00 AM · permalink
Posted by ComputorEdge Online - San Diego (ceedletters@computoredge.com) on January 27, 2012 08:00 AM · permalink
Posted by ComputorEdge Staff on January 27, 2012 08:00 AM · permalink
Posted by Digital Dave on January 27, 2012 08:00 AM · permalink
Posted by Jack Dunning on January 27, 2012 08:00 AM · permalink
Posted by Marilyn K. Martin on January 27, 2012 08:00 AM · permalink
Read more of this story at Slashdot.
Posted by samzenpus on January 27, 2012 07:55 AM · permalink
A modern electronica duo can only dream of being as good as Future World Orchestra. [via Robert Popper]
Posted by Rob Beschizza on January 27, 2012 06:10 AM · permalink
Read more of this story at Slashdot.
Posted by samzenpus on January 27, 2012 05:45 AM · permalink
I guess you could see "we support tyranny in each country individually" as an improvement over "we treat the whole world as the least common denominator of the world's most tyrannous country in which we want to make money" as an improvement. If you have very low expectations.
"But," you may say, "They have no choice but to obey the law in all the countries in which they have offices." That's true, but I must have missed the article about someone holding a gun to their head and forcing them to open offices there. So they chose to make themselves an uncomfortable bed to lie in. How about that.
When you're in the business of providing a communications medium -- or, if you happen to have a moral compass of any kind -- there are some people you just shouldn't do business with, because it makes you part of the problem.
They said:
One of our core values as a company is to defend and respect each user's voice. We try to keep content up wherever and whenever we can,and omitted,
...unless that interferes with our ability to make a buck.
Mirrored from jwz.org.
Posted by jwz (jwz@jwz.org) on January 27, 2012 05:06 AM · permalink
Posted by Ken Denmead on January 27, 2012 05:01 AM · permalink
Q: "Are they each from a single piece of paper?"A: Yes -- by far the most frequently asked question, and the easiest one to answer (I wish they all were simple yes/no questions). But it is usually followed up with "...because some of them look like they're woven..." which is not actually a question, but an observation, and an implied invitation for me to elaborate on the masks' construction. So I elaborate. It's a technique that is both structural and ornamental. Parallel folds make pleats that open up to form the convexities of the face and intersect with each other around the face. Where they intersect, twist folds are formed on the back of the piece which help to keep the pleats closed. The pleats get pretty tightly packed together, and where they run parallel to each other, the space between them looks like an individual strip of paper from the front. Where twist folds occur on the back, it appears that the "strips" of paper are crossing under and over one another.
Mirrored from jwz.org.
Posted by jwz (jwz@jwz.org) on January 27, 2012 04:45 AM · permalink
There's been lots of talk today about how various EU governments are agreeing to sign ACTA (which still needs to be ratified by the EU Parliament). It's gotten the most attention in Poland, where there were mass protests -- but the government there still signed. Of course, not everyone in the Polish government agreed. Amazingly, officials from the Palikot's Movement held up the famed Guy Fawkes/Anonymous masks in Parliament to protest the vote: Of course, we should note that, from the picture, it sure looks like those masks are "counterfeit" copies of the official Guy Fawkes mask that Time Warner holds the rights to. Good thing ACTA is coming into force to stop such blatant "counterfeiting," huh?
Previously, previously, previously.
Mirrored from jwz.org.
Posted by jwz (jwz@jwz.org) on January 27, 2012 04:38 AM · permalink


I have not found the artist's official site, but "Image Search" is a nightmare factory.
Mirrored from jwz.org.
Posted by jwz (jwz@jwz.org) on January 27, 2012 04:26 AM · permalink
Workers have installed the first of 137 strands of the nearly mile-long main cable. Each strand is comprised of 127 individual wires.The SAS's cable is anchored into the east end of the roadway, traveling up and over the single tower to wrap around the west end before traveling back up and over the tower to anchor back into the east end. The cable features 118 miles of 2 1/2-inch steel strands and more than 17,000 5mm wires. The cable weighs 5,291 tons or nearly 10.6 million pounds.
Mirrored from jwz.org.
Posted by jwz (jwz@jwz.org) on January 27, 2012 04:18 AM · permalink
It can take a leap of faith to close the gap between where you are and where you want to be.
Posted by YogiRavi on January 27, 2012 03:57 AM · permalink
Read more of this story at Slashdot.
Posted by samzenpus on January 27, 2012 03:22 AM · permalink
"Hey, Mr. Kotter, I got a note!" Robert Hegyes who played Juan Luis Pedro Philippo DeHuevos Epstein on "Welcome Back Kotter" has died.
"Robert Hegyes dies at 60" (Variety)
Posted by David Pescovitz on January 27, 2012 01:56 AM · permalink
Read more of this story at Slashdot.
Posted by samzenpus on January 27, 2012 01:00 AM · permalink
Read more of this story at Slashdot.
Posted by samzenpus on January 27, 2012 12:15 AM · permalink
Rachel Hobson of CRAFT correctly figures (in my case, anyway), " you'll enjoy this series of vintage photographs that have been transformed into portraits of superheroes by artist Alex Gross."
Posted by Mark Frauenfelder on January 26, 2012 11:25 PM · permalink
Read more of this story at Slashdot.
Posted by timothy on January 26, 2012 10:50 PM · permalink
[Video Link] A bank robber in Brazil shot himself in the foot. In the video he is seen limping away with his cohorts. He was later arrested while receiving treatment at a nearby hospital. (Via Arbroath)
Posted by Mark Frauenfelder on January 26, 2012 10:31 PM · permalink
Posted by Xeni Jardin on January 26, 2012 10:24 PM · permalink
Goli of MAKE says:
Two young makers from Toronto, Mathew Ho and Asad Muhammad, both age 17, successfully sent a Lego minifig and four cameras to roughly 78,000 feet elevation on a homemade weather balloon. After a 97-minute flight, the balloon returned to Earth with great footage of the journey. Inspired by a similar project done by MIT students, they were determined to make everything from scratch, down to sewing the 5-foot-diameter parachute. After about five months worth of weekends devoted to the build, they did it, and have some great photos to show for their hard work. Check out the video posted on the Toronto Star to hear them talk about their project and to see their balloon pics.
Posted by Mark Frauenfelder on January 26, 2012 10:19 PM · permalink
Posted by Xeni Jardin on January 26, 2012 10:17 PM · permalink
Posted by Kim Zetter on January 26, 2012 10:16 PM · permalink
Posted by Xeni Jardin on January 26, 2012 10:13 PM · permalink
Posted by NMattise on January 26, 2012 10:10 PM · permalink
Read more of this story at Slashdot.
Posted by timothy on January 26, 2012 10:09 PM · permalink

Cloths embroidered with signs are seen in front of the Supreme Court of Justice in Guatemala City January 26, 2012. Former Guatemalan dictator Efrain Rios Montt, who ruled the country from 1980-1982 during a bloody civil war, went to the Supreme Court of Justice to declare for the genocide accusations committed during the armed conflict. Rios Montt is one of those accused by Spain of genocide during the 36-year conflict in which some 250,000 people died and 45,000 disappeared from 1960-1996. The sign reads, "In memory of the victims of armed conflict."
Below: Montt speaks on the phone at the Supreme Court of Justice in Guatemala City, while indigenous Maya protesters outside carry banners with the faces of "desaparecidos," relatives who disappeared during his military era.


Related coverage: Amnesty International, BBC News, NYT, LAT, and an LAT op-ed today. The Wikipedia entry on Montt is pretty comprehensive, and includes reminders of Montt's many links to the US: he was trained at the School of the Americas, was involved in the 1954 CIA-backed coup, and was longtime pals with US power-evangelicals Pat Robertson and Jerry Fallwell. (photos: REUTERS)
Posted by Xeni Jardin on January 26, 2012 10:01 PM · permalink
If The Osmonds were a death metal band, "Crazy Horses" might have sounded something like this. Dangerous Minds' Marc Campbell added the visuals. "ARMAGEDDON ROCK: THE VERY METAL SOUND OF THE OSMONDS" (Thanks, Tara!)
Posted by David Pescovitz on January 26, 2012 09:54 PM · permalink
Read more of this story at Slashdot.
Posted by timothy on January 26, 2012 09:25 PM · permalink
[Video Link] Shot by multimedia journalist Dan Grossman, who writes:
The nomadic people of Mongolia don't stay in one place for long. That's why they live in gers (which American's know by the Russian name, yurt), a home that is fast and easy to assemble and disassemble. Putting up a ger (pronounced gair) is fast and easy, but its best done by an entire family. This ger was moved by the family of Shagdarsuren Herelchuluun, on the east side of Lake Hovsgol, in northern Mongolia, not far from the Russian border.
(via @pulitzercenter)
Posted by Xeni Jardin on January 26, 2012 09:14 PM · permalink
Posted by ScienceNow on January 26, 2012 08:45 PM · permalink
Read more of this story at Slashdot.
Posted by timothy on January 26, 2012 08:41 PM · permalink
Posted by Scott Gilbertson on January 26, 2012 08:30 PM · permalink

NASA today released a so-called 'Blue Marble' image of Earth captured by the VIIRS instrument on NASA's most recently launched Earth-observing satellite, the Suomi NPP. The composite image above "uses a number of swaths of the Earth's surface taken on January 4, 2012." Larger sizes here (hello, new computer desktop image!)
Posted by Xeni Jardin on January 26, 2012 08:29 PM · permalink
This splendid work, by Aurich Lawson, is a perfect aperitif for Sean Gallagher's wonderful article about the ridiculous but astoundingly successful con artist, Quake cheat and entrepreneur Kim Dotcom.
Posted by Rob Beschizza on January 26, 2012 08:14 PM · permalink


Oh, this makes me so sad. Tony Alleyne, the trekkie, club DJ, and "house-modder" who redesigned his British flat to be a faithful replica of the Starship Enterprise? Looks like he may lose it in divorce proceedings. His ex owns the flat, and wants to sell it as "a conventional dwelling," according to tabloid reports.
I did a story about him for NPR way back in 2006 (MP3 Link). I remember him as one of the most cheerfully obsessed Star Trek fans I've ever met (and buddy, I've met a lot of Star Trek fans in my time).
British tabloid The Sun broke the bummer news a couple of days ago, and quoted Alleyne: "To say I'm gutted is an understatement. It is my life's work. I admit there were tears."
Alleyne estimates that redoing the project in a new apartment would cost more than USD $150K.
More from MSNBC, which also covered the tale of Alleyne's epic Trek home when it first made the internet rounds five years ago:
When msnbc TV reported on the apartment back in 2006, Alleyne was about to file for bankruptcy over the money spent on renovations, and said he had hoped to start a business transforming homes for other "Star Trek" fans. Msnbc TV did another segment on Alleyne in 2007 when he was apparently also hoping to sell the tricked-out home, which includes a mock transporter.
"Most people thought I was barmy," Alleyne said at the time. "I mean, you could go spend the time down the pub or in a nightclub or whatever ... I decided to live in a spaceship." He says on his website, which bills him as a "24th century interior designer," that he became hooked on science fiction at age 11.
Posted by Xeni Jardin on January 26, 2012 08:01 PM · permalink
Posted by Rhett Allain on January 26, 2012 08:00 PM · permalink
Posted by Brandon Keim on January 26, 2012 07:59 PM · permalink
Posted by Dave Mosher on January 26, 2012 07:59 PM · permalink
It's not hard to see why Bloomberg Businessweek chose not to run with this remarkable illustration of Republican presidential candidate Mitt Romney. The creative director is Richard Turley; the rest of the design crew follows:
Creative Director: Richard Turley Design Director: Cynthia Hoffman Graphic Director: Jennifer Daniel Graphics Editor: Kenton Powell, Evan Applegate Director of Photography: David Carthas Art Director: Robert Vargas Designers: Maayan Pearl, Lee Wilson, Chandra Illick and Shawn Hasto Design Manager: Emily Anton
Compare to NYMag's latest cover, which uses the same theme, but is so crudely, cartoonishly photoshopped that it lacks the Bloomberg image's bloody impact.
[via Cover Junkie]
Posted by Rob Beschizza on January 26, 2012 07:39 PM · permalink
Posted by Sean Gallagher on January 26, 2012 07:36 PM · permalink
Posted by Rob Beschizza on January 26, 2012 07:35 PM · permalink
Posted by Xeni Jardin on January 26, 2012 07:34 PM · permalink
Posted by Christina Bonnington on January 26, 2012 07:26 PM · permalink
Posted by Kim Zetter on January 26, 2012 07:25 PM · permalink
Read more of this story at Slashdot.
Posted by timothy on January 26, 2012 07:19 PM · permalink
Posted by Spencer Ackerman on January 26, 2012 07:15 PM · permalink
Posted by Maryn McKenna on January 26, 2012 06:20 PM · permalink
Posted by Scott Gilbertson on January 26, 2012 05:26 PM · permalink
Posted by Robert Beckhusen on January 26, 2012 05:00 PM · permalink
Unless someone does, things start to fray around the edges.
Often it's the CEO or the manager who sets a standard of caring about the details. Even better is a culture where everyone cares, and where each person reinforces that horizontally throughout the team.
You've probably been to the hotel that serves refrigerated tomatoes in January at their $20 breakfast, that doesn't answer the phone when you call the front desk, that has a shower curtain that is falling off the rack and a slightly snarky concierge. This is in sharp relief to that hotel down the street, the one that costs just the same, but gets the details right.
It's obviously not about access to capital (doing it right doesn't cost more). It's about caring enough to make an effort.
If we define good enough sufficiently low, we'll probably meet our standards. Caring involves raising that bar to the point where the team has to stretch.
Of course, the manager of the mediocre hotel who's reading this, the staff member of the mediocre restaurant who just got forwarded this note--they have a great excuse. Times are tough, money is tight, the team wasn't hired by me, nobody else cares, I'm only going to be doing this gig for a year, our customers are jerks... who cares?
Caring, it turns out, is a competitive advantage, and one that takes effort, not money.
Like most things that are worth doing, it's not easy at first and the one who cares isn't going to get a standing ovation from those that are merely phoning it in. I think it's this lack of early positive feedback that makes caring in service businesses so rare.
Which is precisely what makes it valuable.
Posted by Seth Godin on January 26, 2012 04:06 PM · permalink
As part of writing my PhD I am currently thinking about the relationship between PyPy's meta-tracing approach with various previous ideas to automatically get a (JIT-)compiler from only an interpreter of a language. One of the most-researched ideas along these lines is that of partial evaluation. Partial evaluation has basically the same goals as PyPy when it comes to compilers: Write an interpreter, and get a compiler for free. The methods for reaching that goal are a bit different. In this series of blog posts, I am trying to explore the similarities and differences of partial evaluation and PyPy's meta-tracing.
To be able to clearly understand what "partial evaluation" is and what "meta-tracing" is I will show an "executable model" of both. To that end, I am defining a small imperative language and will then show what a partial evaluator and a tracer for that language look like. All this code will be implemented in Prolog. (Any pattern-matching functional language would do, but I happen to know Prolog best. Backtracking is not used, so you can read things simply as functional programs.) In this post I will start with the definition of the language, and a partial evaluator for it. The code written in this blog post can be found fully here: http://paste.pocoo.org/show/541004/
The language is conceptionally similar to PyPy's flow graphs, but a bit more restricted. It does not have function calls, only labelled basic blocks that consist of a series of linearly executed operations, followed by a conditional or an unconditional jump. Every operation is assigning a value to a variable, which is computed by applying some operation to some arguments.
A simple program to raise x to the yth power in that language looks like this:
power:
res = 1
if y goto power_rec else goto power_done
power_rec:
res = res * x
y = y - 1
if y goto power_rec else goto power_done
power_done:
print_and_stop(res)
To represent the same program as Prolog data structures, we use the following Prolog code:
block(power, op1(res, same, const(1),
if(y, power_rec, power_done))).
block(power_rec, op2(res, mul, var(res), var(x),
op2(y, sub, var(y), const(1),
if(y, power_rec, power_done)))).
block(power_done, print_and_stop(var(res))).
Every rule of block declares one block by first giving the label of the block, followed by the code. Code is a series of op1 or op2 statements terminated by a jump, an if or a print_and_stop. op1 statements are operations with one argument of the form op1(res_variable, operation_name, argument, next_statement). Arguments can be either variables in the form var(name) or constants in the form const(value).
To run programs in this flowgraph language, we first need some helper functionality. The first few helper functions are concerned with the handling of environments, the data structures the interpreter uses to map variable names occuring in the program to the variables' current values. In Python dictionaries would be used for this purpose, but in Prolog we have to emulate these by lists of key/value pairs (not very efficient, but good enough):
lookup(X, [], _) :- throw(key_not_found(X)).
lookup(Key, [Key/Value | _], Value) :- !.
lookup(Key, [_ | Rest], Value) :- lookup(Key, Rest, Value).
write_env([], X, V, [X/V]).
write_env([Key/_ | Rest], Key, Value, [Key/Value | Rest]) :- !.
write_env([Pair | Rest], Key, Value, [Pair | NewRest]) :- write_env(Rest, Key, Value, NewRest).
remove_env([], _, []).
remove_env([Key/_ | Rest], Key, Rest) :- !.
remove_env([Pair | Rest], Key, [Pair | NewRest]) :- remove_env(Rest, Key, NewRest).
resolve(const(X), _, X).
resolve(var(X), Env, Y) :- lookup(X, Env, Y).
The implementation of these functions is not too important. The lookup function finds a key in an environment list, the write_env function adds a new key/value pair to an environment, remove_env removes a key. The resolve function is used to take either a constant or a variable and return a value. If it's a constant, the value of that constant is returned, if it's a variable it is looked up in the environment. Note how the last argument of lookup and resolve is actually a return value, which is the typical approach in Prolog.
So far we have not specified what the primitive operations that can occur in the program actually mean. For that we define a do_op function which executes primitive operations:
do_op(same, X, X).
do_op(mul, X, Y, Z) :- Z is X * Y.
do_op(add, X, Y, Z) :- Z is X + Y.
do_op(sub, X, Y, Z) :- Z is X - Y.
do_op(eq, X, Y, Z) :- X == Y -> Z = 1; Z = 0.
do_op(ge, X, Y, Z) :- X >= Y -> Z = 1; Z = 0.
do_op(readlist, L, I, X) :- nth0(I, L, X).
do_op(Op, _, _, _) :- throw(missing_op(Op)).
Again the last argument is an output variable.
Now we can start executing simple operations. For that an interp predicate is defined. It takes as its first argument the current environment and as the second argument the operation to execute. E.g. to execute primitive operations with one or two arguments:
interp(op1(ResultVar, Op, Arg, Rest), Env) :-
resolve(Arg, Env, RArg),
do_op(Op, RArg, Res),
write_env(Env, ResultVar, Res, NEnv),
interp(Rest, NEnv).
interp(op2(ResultVar, Op, Arg1, Arg2, Rest), Env) :-
resolve(Arg1, Env, RArg1),
resolve(Arg2, Env, RArg2),
do_op(Op, RArg1, RArg2, Res),
write_env(Env, ResultVar, Res, NEnv),
interp(Rest, NEnv).
First the arguments are resolved into values. Afterwards the operation is executed, and the result is written back into the environment. Then interp is called on the rest of the program. Similarly easy are the unconditional jump and print_and_stop:
interp(jump(L), Env) :-
block(L, Block),
interp(Block, Env).
interp(print_and_stop(Arg), Env) :-
resolve(Arg, Env, Val),
print(Val), nl.
In the unconditional jump we simply get the target block and continue executing that. To execute print_and_stop we resolve the argument, print the value and then are done.
The conditional jump is only slightly more difficult:
interp(if(V, L1, L2), Env) :-
lookup(V, Env, Val),
(Val == 0 ->
block(L2, Block)
;
block(L1, Block)
),
interp(Block, Env).
First the variable is looked up in the environment. If the variable is zero, execution continues at the second block, otherwise it continues at the first block.
Given this interpreter, we can execute the above example program like this, on a Prolog console:
$ swipl -s cfglang.pl
?- block(power, Block), interp(Block, [x/10, y/10]).
10000000000
Let's look at what a partial evaluator for this simple flowgraph language would look like. Partial evaluation (PE), also called specialization, is a program manipuation technique. PE takes an input program and transforms it into a (hopefully) simpler and faster output program. It does this by assuming that some variables in the input program are constants. All operations that act only on such constants can be folded away. All other operations need to remain in the output program (called residual program). Thus the partial evaluator proceeds much like an interpreter, just that it cannot actually execute some operations. Also, its output is not just a value, but also list of remaining operations that could not be optimized away.
The partial evaluator cannot use normal environments, because unlike the interpreter not all variables' values are known to it. It will therefore work on partial environments, which store just the know variables. For these partial environments, some new helper functions are needed:
plookup(Key, [], var(Key)).
plookup(Key, [Key/Value | _], const(Value)) :- !.
plookup(Key, [_ | Rest], Value) :- plookup(Key, Rest, Value).
presolve(const(X), _, const(X)).
presolve(var(V), PEnv, X) :- plookup(V, PEnv, X).
The function plookup takes a variable and a partial environment and returns either const(Value) if the variable is found in the partial environment or var(Key) if it is not. Equivalently, presolve is like resolve, except that it uses plookup instead of lookup.
With these helpers we can start writing a partial evaluator. The following two rules are where the main optimization in the form of constant folding happens. The idea is that when the partial evaluator sees an operation that involves only constant arguments, it can constant-fold the operation, otherwise it can't:
pe(op1(ResultVar, Op, Arg, Rest), PEnv, NewOp) :-
presolve(Arg, PEnv, RArg),
(RArg = const(C) ->
do_op(Op, C, Res),
write_env(PEnv, ResultVar, Res, NEnv),
RestResidual = NewOp
;
remove_env(PEnv, ResultVar, NEnv),
NewOp = op1(ResultVar, Op, RArg, RestResidual)
),
pe(Rest, NEnv, RestResidual).
pe(op2(ResultVar, Op, Arg1, Arg2, Rest), PEnv, NewOp) :-
presolve(Arg1, PEnv, RArg1),
presolve(Arg2, PEnv, RArg2),
(RArg1 = const(C1), RArg2 = const(C2) ->
do_op(Op, C1, C2, Res),
write_env(PEnv, ResultVar, Res, NEnv),
RestResidual = NewOp
;
remove_env(PEnv, ResultVar, NEnv),
NewOp = op2(ResultVar, Op, RArg1, RArg2, RestResidual)
),
pe(Rest, NEnv, RestResidual).
The pe predicate takes a partial environment, the current operations and potentially returns a new operation. To partially evaluate a simple operation, its arguments are looked up in the partial environment. If all the arguments are constants, the operation can be executed, and no new operation is produced. Otherwise, we need to produce a new residual operation which is exactly like the one currently looked at. Also, the result variable needs to be removed from the partial environment, because it was just overwritten by an unknown value.
The potentially generated residual operation is stored into the output argument NewOp. The output argument of the recursive call is the last argument of the newly created residual operation, which will then be filled by the recursive call. This is a typical approach in Prolog, but may look strange if you are not familiar with it.
Note how the first case of these two rules is just like interpretation. The second case doesn't really do anything, it just produces a residual operation. This relationship between normal evaluation and partial evaluation is very typical.
The unconditional jump and print_and_stop are not much more complex:
pe(jump(L), PEnv, jump(LR)) :-
do_pe(L, PEnv, LR).
pe(print_and_stop(Arg), Env, print_and_stop(RArg)) :-
presolve(Arg, Env, RArg).
To partially evaluate an unconditional jump we again produce a jump. The target label of that residual jump is computed by asking the partial evaluator to produce residual code for the label L with the given partial environment. print_and_stop is simply turned into a print_and_stop. We will see the code for do_pe soon.
Conditional jumps are more interesting:
pe(if(V, L1, L2), PEnv, NewOp) :-
plookup(V, PEnv, Val),
(Val = const(C) ->
(C = 0 ->
L = L2
;
L = L1
),
do_pe(L, PEnv, LR),
NewOp = jump(LR)
;
do_pe(L1, PEnv, L1R),
do_pe(L2, PEnv, L2R),
NewOp = if(V, L1R, L2R)
).
First we look up the value of the condition variable. If it is a constant, we can produce better code, because we know statically that only one path is reachable. Thus we produce code for that path, and then emit an unconditional jump there. If the condition variable is not known at partial evaluation time, we need to partially evaluate both paths and produce a conditional jump in the residual code.
This rule is the one that causes the partial evaluator to potentially do much more work than the interpreter, because after an if sometimes both paths need to be explored. In the worst case this process never stops, so a real partial evaluator would need to ensure somehow that it terminates. There are many algorithms for doing that, but I will ignore this problem here.
Now we need to understand what the do_pe predicate is doing. Its most important task is to make sure that we don't do the same work twice by memoizing code that was already partially evaluated in the past. For that it keeps a mapping of Label, Partial Environment to Label of the residual code:
do_pe(L, PEnv, LR) :-
(code_cache(L, PEnv, LR) ->
true
;
gensym(L, LR),
assert(code_cache(L, PEnv, LR)),
block(L, Code),
pe(Code, PEnv, Residual),
assert(block(LR, Residual))
).
If the code cache indicates that label L was already partially evaluated with partial environment PEnv, then the previous residual code label LPrevious is returned. Otherwise, a new label is generated with gensym, the code cache is informed of that new label with assert, then the block is partially evaluated and the residual code is added to the database.
For those who know partial evaluation terminology: This partial evaluator is a polyvariant online partial evaluator. "Polyvariant" means that for every label, several specialized version of the block can be generated. "Online" means that no preprocessing is done before the partial evaluator runs.
With this code we can look at the classical example of partial evaluation (it's probably the "Hello World" of partial evaluation). We can ask the partial evaluator to compute a power function, where the exponent y is a fixed number, e.g. 5, and the base x is unknown:
?- do_pe(power, [y/5], LR).
LR = power1.
To find out which code was produced, we can use listing:
?- listing(code_cache)
code_cache(power, [y/5], power1).
code_cache(power_rec, [y/5, res/1], power_rec1).
code_cache(power_rec, [y/4], power_rec2).
code_cache(power_rec, [y/3], power_rec3).
code_cache(power_rec, [y/2], power_rec4).
code_cache(power_rec, [y/1], power_rec5).
code_cache(power_done, [y/0], power_done1).
?- listing(block)
.... the block definition of the user program ....
block(power_done1, print_and_stop(var(res))).
block(power_rec5, op2(res, mul, var(res), var(x), jump(power_done1))).
block(power_rec4, op2(res, mul, var(res), var(x), jump(power_rec5))).
block(power_rec3, op2(res, mul, var(res), var(x), jump(power_rec4))).
block(power_rec2, op2(res, mul, var(res), var(x), jump(power_rec3))).
block(power_rec1, op2(res, mul, const(1), var(x), jump(power_rec2))).
block(power1, jump(power_rec1)).
The code_cache tells which residual labels correspond to which original labels under which partial environments. Thus, power1 contains the code of power under the assumption that y is 5. Looking at the block listing, the label power1 corresponds to code that simply multiplies res by x five times without using the variable x at all. The loop that was present in the original program has been fully unrolled, the loop variable y has disappeared. Hopefully this is faster than the original program.
In this blog post we saw an interpreter for a simple flow graph language in Prolog, together with a partial evaluator for it. The partial evaluator essentially duplicates every rule of the interpreter. If all the arguments of the current operation are known, it acts like the interpreter, otherwise it simply copies the operation into the residual code.
Partial evaluation can be used for a variety of applications, but the most commonly cited one is that of applying it to an interpreter. To do that, the program that the interpreter runs is assumed to be constant by the partial evaluator. Thus a specialized version of the interpreter is produced that does not use the input program at all. That residual code can be seen as a compiled version of the input program.
In the next blog post in this series we will look at writing a simple tracer for the same flowgraph language.
Posted on January 26, 2012 01:44 PM · permalink
Read more of this story at Slashdot.
Posted by samzenpus on January 26, 2012 01:05 PM · permalink
"By the end of my second term we will have the first permanent base on the moon." [NPR. Photo: Eric Thayers/Reuters]
Posted by Rob Beschizza on January 26, 2012 12:38 PM · permalink
Posted by Rob Beschizza on January 26, 2012 12:33 PM · permalink
Posted on January 26, 2012 12:26 PM · permalink
Posted by Chris Kohler on January 26, 2012 11:38 AM · permalink
Posted by Brandon Keim on January 26, 2012 11:31 AM · permalink
Posted by Samuel Arbesman on January 26, 2012 11:30 AM · permalink
Posted by Cade Metz on January 26, 2012 11:30 AM · permalink
Read more of this story at Slashdot.
Posted by samzenpus on January 26, 2012 10:36 AM · permalink
ACTA, the Anti-Counterfeiting Trade Agreement, is the notorious, unprecedented secret copyright treaty that was negotiated by industry representatives and government trade reps, without any access by elected representatives, independent business, the press, public interest groups, legal scholars, independent economists and so on. Time and again, the world's richest governmental administrations (only rich countries were in the negotiation) told their own parliaments and congresses that they could not see what was in the treaty, nor know the details of the discussion.
The European Parliament was one of the bodies that asked its administration to share the treaty discussions with the elected members, only to be turned down. Cables in the Wikileaks dumps showed US officials orchestrating this secrecy because they knew how unpopular this one-sided, heavy-handed copyright treaty would be. Freedom of Information requests to the Obama administration confirmed that the reason for the secrecy was the experience in transparent negotiation at the UN, which resulted in an uprising by developing nations, who saw stricter, more expansive copyrights as a means of extracting rents from the world's poorest people.
Now the European Parliament is being arm-twisted into ratifying ACTA, which contains many of the worst provisions that Americans rejected in SOPA and PIPA. We need your help and input to resist this terrible, dirty, punishing treaty from coming to Europe.
Previous BB coverage of ACTA
(Thanks, noc314!)
Posted by Cory Doctorow on January 26, 2012 08:24 AM · permalink
Mirrored from jwz.org.
Posted by jwz (jwz@jwz.org) on January 26, 2012 07:18 AM · permalink
Announcing the Modesto Scripting Languages Meetup. Central Valley Pythonistas, Rubyists, PHPers, etc all welcome.
Read MorePosted on January 26, 2012 06:36 AM · permalink

Bees 'could deter vandals' at Greenfield heritage park
My beekeeping pal says, "I was using that as a selling point for putting bees in junkyards, etc. Except then people used wasp spray on my hives at Hayes Valley, and they cost about $1k each."
Previously, previously, previously, previously, previously, previously.
Mirrored from jwz.org.
Posted by jwz (jwz@jwz.org) on January 26, 2012 06:33 AM · permalink
Read more of this story at Slashdot.
Posted by samzenpus on January 26, 2012 05:24 AM · permalink
On constitutionalism, a competent state and the importance of strengthening federalism
For quiet contemplation on Republic Day:
On constitutional morality; the need to get basic functions right; and on the wages of an imperfect federalism.
Join the Indians for a Strong Republic page on Facebook.
The Three Thoughts Archive:
Three thoughts on on Republic Day 2011, 2010, 2009, 2008, 2007, 2006, 2005;
and on Independence Day 2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004.
Posted on January 26, 2012 04:48 AM · permalink
Great news, everybody! Shoulder pads and face spikes!
Mirrored from jwz.org.
Posted by jwz (jwz@jwz.org) on January 26, 2012 04:34 AM · permalink
Posted on January 26, 2012 01:30 AM · permalink
Read more of this story at Slashdot.
Posted by samzenpus on January 26, 2012 01:03 AM · permalink
Posted by django CMS Blog on January 26, 2012 12:27 AM · permalink
Posted by django CMS Blog on January 26, 2012 12:27 AM · permalink
Posted by django CMS Blog on January 26, 2012 12:27 AM · permalink
Posted by django CMS Blog on January 26, 2012 12:27 AM · permalink
Posted by django CMS Blog on January 26, 2012 12:27 AM · permalink
Posted by django CMS Blog on January 26, 2012 12:27 AM · permalink
Posted by django CMS Blog on January 26, 2012 12:27 AM · permalink
Posted by django CMS Blog on January 26, 2012 12:27 AM · permalink
Posted by django CMS Blog on January 26, 2012 12:27 AM · permalink
Posted by django CMS Blog on January 26, 2012 12:27 AM · permalink
Read more of this story at Slashdot.
Posted by samzenpus on January 26, 2012 12:17 AM · permalink
"Because the experts and leaders of the open source tools we are using are going to be there, I want to attend PyCon sprints. All my time at the sprints will be focused on sitting around them and working on our tools. I'll focus on things that directly impact our agency / company / organization, specifically things I wrote down on this list."
"Why not just use IRC or email?"Then you say something like,
"Well, IRC/email is not the same as sitting next to these people. I'll be so much more productive there!"
Posted by Daniel Greenfeld on January 26, 2012 12:16 AM · permalink
Posted on January 26, 2012 12:01 AM · permalink
Posted on January 26, 2012 12:01 AM · permalink
Stephen Jay Gould once said that LIFE photographer Fritz Goro, who died in 1986, was "the most influential photographer that science journalism (and science in general) has ever known." LIFE.com has posted a gallery of his truly wonderful photos. Above, Goro's 1962 shot of inventor Allyn Hazard testing his "moon suit mock-up" that contained oxygen and a food supply. "Fritz Goro's Photos: The Art of Science"Posted by David Pescovitz on January 25, 2012 10:11 PM · permalink

Posted by Google Analytics team (noreply@blogger.com) on January 25, 2012 10:10 PM · permalink
Read more of this story at Slashdot.
Posted by samzenpus on January 25, 2012 10:05 PM · permalink
Things I did not know before viewing this adorable video shot by Surrey Wildlife Trust Mammal Project Officer Dave Williams:

1) The dormouse, a little rodent species you'll find in Britain, hibernate in the winter in nests they hide on the ground.
2) The dormouse spends up to one-third of its life in hibernation, and typically begin that winter "sleep" when the first frost hits, and their food sources are gone.
3) They loose about a quarter of their body weight during hibernation.
4) The word "dormouse" comes from the Anglo-Norman dormeus, which means "sleepy (one)"
You can donate to support the Surrey Wildlife Trust's nature conservation work here.
(via @joeljohnson, photo: Dave Williams, Surrey Wildlife Trust)
Posted by Xeni Jardin on January 25, 2012 09:48 PM · permalink
Read more of this story at Slashdot.
Posted by samzenpus on January 25, 2012 09:22 PM · permalink
Posted by Rob Beschizza on January 25, 2012 08:08 PM · permalink
Read more of this story at Slashdot.
Posted by samzenpus on January 25, 2012 07:58 PM · permalink
Among others, the BBC interviewed two snipers. Both have killed many people, but they are very different men. One affirms the humanity of his targets, and worries at how ideology sends them into battle. One considers them subhuman, and worries about himself.
Here's Chris Kyle:
"You're running everything through your mind. This is a woman, first of all. Second of all, am I clear to do this, is this right, is it justified? And after I do this, am I going to be fried back home? Are the lawyers going to come after me saying, 'You killed a woman, you're going to prison'?"
Married with two children, he has now retired from the military and has published a book in which he claims to have no regrets, referring to the people he killed as "savages".
Here's Anon:
Snipers almost never referred to the men they killed as targets, or used animal or machine metaphors. Some interviewees even said that their victims were legitimate warriors.
"Here is someone whose friends love him and I am sure he is a good person because he does this out of ideology," said one sniper who watched through his scope as a family mourned the man he had just shot. "But we from our side have prevented the killing of innocents, so we are not sorry about it."
Guess which of these two men tallies more than a hundred kills whose circumstances are unaccounted for by the military.
What goes on in the mind of a sniper? [BBC]
Posted by Rob Beschizza on January 25, 2012 07:53 PM · permalink
Read more of this story at Slashdot.
Posted by samzenpus on January 25, 2012 07:36 PM · permalink
Posted by Rob Beschizza on January 25, 2012 07:31 PM · permalink
Read more of this story at Slashdot.
Posted by samzenpus on January 25, 2012 07:15 PM · permalink
The U.S Supreme Court has ruled that the police cannot attach a GPS tracking device to a car without a warrant.
EDITED TO ADD (1/26): It seems I was wrong when I said that the ruling forces the police to get a warrant before placing a GPS tracking device on a car. The ruling is much more complicated and nuanced.
Posted by schneier on January 25, 2012 06:54 PM · permalink
The second problem from this year facebook hackercup sound like the classic knapsack problem. But the solution is much easier (words are in fixed sort order). Feel free to find a smarter algorithm or comment my python solution.
We are starting preparations for Hacker Cup 2013 really early. Our first step is to prepare billboards to advertise the contest. We have text for hundreds of billboards, but we need your help to design them.Read more
Posted on January 25, 2012 06:50 PM · permalink
Posted by Library (ek_contact@plymouthrocket.com) on January 25, 2012 06:00 PM · permalink
Posted by Cory Doctorow on January 25, 2012 05:55 PM · permalink
Jeff sez, "Communicore Weekly is a brand new, online VidCast/Podcast with George Taylor and Jeff Heimbuch, exploring Disney news and obscure history. With segments such as the Bathroom Break & The Five Legged Goat, you'll never look at Disney the same way again. You'll laugh, you'll cry, and you'll have a new favorite online show. Come on and get geeky with Communicore Weekly!"
Communicore Weekly - Week Of Jan 23rd, 2012 - Episode 2
Posted by Cory Doctorow on January 25, 2012 05:54 PM · permalink
Michael Geist sez,
Recent revelations that the content industries are demanding that Canada implement SOPA-style provisions into its copyright law have raised concerns the law could be used to target legitimate sites. Industry lawyers say there is no reason for worry, yet an analysis of the proposed law set against the claims made by Viacom against Youtube show that there is a very real possibility that new law could be used to target the Internet's most popular video site.
That would create a huge chill in the investment and technology community in Canada. Online video sites, cloud computing sites, and other online services may look at the Bill C-11 and fear that even a lawsuit could create massive costs, scare away investors, and stifle new innovation. Indeed, a recent study by Booz & Company found this to be a very real problem, with a large majority of the angel investors and venture capitalists saying they will not put their money in digital content intermediaries if governments pass tough new rules allowing websites to be sued or fined for infringing digital content posted by users. The U.S. has dropped for SOPA, but now incredibly Canada may consider the very provisions that causes investors to become skittish.
Would a SOPA Version of the Canadian Copyright Bill Target Youtube?
Posted by Cory Doctorow on January 25, 2012 05:52 PM · permalink
This absolutely stunning video was created from a series of still images taken on the International Space Station. From NASA's Gateway To Astronaut Photography of Earth page:
"Gateway To Astronaut Photography of Earth"The sequence of shots was taken January 3, 2012 from 15:01:30 to 15:08:17 GMT, on a pass from the Indian Ocean, just west of Australia, to south of Australia, west of Tasmania. The pass begins looking eastward toward southern Australia at the Aurora Australis. The crew captures the aurora just before the sun begins to come up in this short video. A few orbiting satellites pass by throughout the video as well.
Posted by David Pescovitz on January 25, 2012 05:39 PM · permalink
Posted by Library (ek_contact@plymouthrocket.com) on January 25, 2012 04:00 PM · permalink
Over the last couple of years several of my colleagues have been organizing code jam[1] events where developers get together to write software for charitable causes. A good example is a regular code-jam in New York that works on RapidFTR. Chris George, a ThoughtWorker based in New York, helped organize a one-off event in New York in August 2010. The group didn't get as much done on the day as they had hoped, but in a bar afterwards decided to try to get together more regularly. Since then they've been meeting every week. It's a small group, still mostly ThoughtWorkers and friends, with a core of 3-4 people rising to a dozen when we've had a big project in town.[2]. (Chris is happy to have more people join the group, so if you are interested drop him an email.)
Many people have found these events to an enjoyable way to use our skills for purposes that we find rather more fulfilling than many day jobs, and a way both to learn new skills and learn from a different group of people. So I thought I should share our thoughts on how to set one up.
The first thing is to find a suitable effort to contribute to. We look to contribute to projects producing open-source software for NGOs - the open source model fits well for such organizations. The two that we've built up most of a relationship are RapidFTR and OpenMRS. RapidFTR is a system designed to help reunite families after a natural disaster or other calamity. It allows people to quickly input information about either a lost child, or a child found without parents - then provide search facilities to match them up. OpenMRS is an open source medical records system, designed to support various forms of health care delivery work. It's used by many health care groups all over the world (and not just in the developing world).
Like New York, most of our code-jams begin as one-off events, a single evening or all day event. These days we advertise heavily, and hope to get a good sample of local developers to come along and take part. One-off code jams like this don't usually produce much useful software, since they are too short to really accomplish much. But they still have value. Firstly they generate awareness, exposing the local development community both to the specific project and the notion of working on open-source efforts for NGOs. More directly they can be the seed for an regular code jam, so it's useful to put together activities that will encourage getting back together later.
A regular code jam gets together on a schedule, with core of people who come most weeks. Such a group can make some significant contributions to a code base. People come because they get to work on some different technologies, with a different group of co-developers, to an audience that (unlike most open-source projects) isn't just other developers.
To make meaningful progress, you need someone to prepare for each code jam by breaking down work-items into something small enough that people will be able to finish them during the time at the jam. Whatever people may say and hope, they'll rarely work on the project outside code jam hours, and the schedule is too infrequent to want half-done things hanging over. Small tasks allow teams to make perceptible progress each jam - which helps keep motivation high. We like to put these tasks online before each event so people can prepare if they want to, or just get a feel for what we're working on. We also set up a mailing list to keep up regular communication on the jam and support anyone who does contribute outside of the jam.
Our regular code-jams succeed best when the group has a couple of champions who take the lead in organizing the event. It's best to have more than one champion, to cope with the work load and provide some resilience if they are absent for a while.
We try to ensure the development environment is set up to allow people to come in quickly and become productive. Much of this is the same kind of thing that we do on projects anyway to enable continuous integration - make sure that installation and build are automated so people can quickly install the code base and get it working. It's important to mention this in the advertisements for the event - people are often put off from coming due to a concern that they'll never get started due to these issues. Even so, make sure that each event has at least one person who is familiar with the code base and build environment, she can then help others find their way around. Often someone will give a short overview of what the system does and how it works for new people at the start of the jam.
We usually provide food to each event - that's an easy thing for us to do as a corporate contribution. As any XPer knows, sharing food when working is an important part of gelling a team.
So, if the idea of a code-jam appeals to you, why not give it a try? Find a suitable project to contribute to, a group of a few people to act as a core, and spend a few sessions to get things going. (There are developer guides for both OpenMRS and RapidFTR to help you get started if those projects appeal to you.) If you get going on a stable basis - post in a blog somewhere so we see what code-jams are avaialable and learn more about how to get them going.
1: "Code-jam" is a problematic name for these events. As far as I can determine, the term "code-jam" was originally used for competitive events where programmers would try to best their peers in some programming challenge. The events I describe here are the utter opposite of this, on many levels, but have attracted the same name.
2: When one of the team went down to our Porto Alegre office, he got a group contributing there too.
Posted on January 25, 2012 02:39 PM · permalink
"Because the experts and leaders of the open source tools we are using are going to be there, I want to attend PyCon sprints. All my time at the sprints will be focused on sitting around them and working on our tools. I'll focus on things that directly impact our agency / company / organization, specifically things I wrote down on this list."
"Why not just use IRC or email?"Then you say something like,
"Well, IRC/email is not the same as sitting next to these people. I'll be so much more productive there!"
Posted on January 25, 2012 01:36 PM · permalink
The NSF is funding research on giving organizations information-security risk ratings, similar to credit ratings for individuals:
Existing risk management techniques are based on annual audits and only provide a snapshot of a partner's security posture. However, new vulnerabilities are discovered everyday and the industry needs a solution that enables a business to continuously monitor changing risk posture of all its partners and proactively manage assumed risks. The Phase II research objective is to build a scalable fully-automated ratings system. The research will focus on identifying and incorporating new data sources, improving the statistical properties of the ratings model, and making the ratings predictive of future behavior.Historically, credit scoring has been a "cost and time-saving technology" that has provided tremendous value to lenders and borrowers alike by reducing costs, predicting future performance, and improving credit accessibility and affordability. Unlike credit scoring, no industry standard scoring service exists to rate business with respect to their information security risk. With Saperix's ratings service, businesses and government will have the potential to reap the same time and cost savings that lenders do from credit scoring services. If the research is successful, Saperix's solution would provide market incentives for improving security outcomes, which would be a significant change in how security investments are viewed by businesses.
I have no idea if this is snake oil or if it actually works, but note that this is a Phase II award. There was already a Phase I award, and the NSF must have liked the results from that.
Posted by schneier on January 25, 2012 12:44 PM · permalink
# Opera: see http://wiki.debian.org/Opera (replace squeeze accordingly)Then run:
deb http://deb.opera.com/opera squeeze non-free
# Chrome
deb http://dl.google.com/linux/chrome/deb/ stable main
$ aptitude updateAdd the keys to trust the new repositories:
$ wget -q -O - http://deb.opera.com/archive.key | apt-key add -Finally re-update and install the packages:
$ wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
$ aptitude updateSelenium also requires ChromeDriver to be able to interact with Chrome. Download chromedriver_linux64_X.zip or chromedriver_linux32_X.zip here (depending on your system). This zip contains an executable named chromedriver which should be in the PATH. Copy it in /usr/local/bin for example.
$ aptitude install iceweasel opera google-chrome
$ aptitude install vnc4server imagemagickThen, on the account running Jenkins, execute the following command to avoid prompts (password must be at least 6 characters):
$ vnc4passwdPassword:Your environment is now ready. In our next blog post, we'll see how to write Selenium tests for a Python web project based on Django.
Verify:
Posted on January 25, 2012 11:03 AM · permalink
Posted by Nat Torkington on January 25, 2012 11:00 AM · permalink
About a year ago, I wrote a small web browser, called De Vicenzo just for fun.
But hey, someone went and madeit useful for something! Specifically, to provide previews when doing sphix docs
That's cool :)
Posted on January 25, 2012 10:33 AM · permalink
Often, we're hesitant to identify a problem out of fear we can't solve it. Knowing that we have to live with something that we're unable to alter gives us a good reason to avoid verbalizing it--highlighting it just makes it worse.
While this sort of denial might be okay for individuals (emphasis on might), it's a lousy approach for organizations of any size. That's because there are almost certainly resources available that can solve a problem if you decide it's truly worth solving.
Put yourself and your people on a path to finding problems without regard for whether or not they are capable of solving them. Queue them up, prioritize them and then go find the help your organization needs to solve them.
Just because you don't know what to do about it doesn't make it less of a problem.
Posted by Seth Godin on January 25, 2012 10:27 AM · permalink
Posted on January 25, 2012 09:56 AM · permalink
Inline allows you to write foreign code within your ruby code. It automatically determines if the code in question has changed and builds it only when necessary. The extensions are then automatically loaded into the class/module that defines it.
You can even write extra builders that will allow you to write inlined code in any language. Use Inline::C as a template and look at Module#inline for the required API.
Changes:
1 bug fix:
Posted by zenspider on January 25, 2012 08:12 AM · permalink
minitest provides a complete suite of testing facilities supporting TDD, BDD, mocking, and benchmarking.
"I had a class with Jim Weirich on testing last week and we were
allowed to choose our testing frameworks. Kirk Haines and I were
paired up and we cracked open the code for a few test
frameworks...
I MUST say that mintiest is *very* readable / understandable
compared to the 'other two' options we looked at. Nicely done and
thank you for helping us keep our mental sanity."
-- Wayne E. Seguin
minitest/unit is a small and incredibly fast unit testing framework. It provides a rich set of assertions to make your tests clean and readable.
minitest/spec is a functionally complete spec engine. It hooks onto minitest/unit and seamlessly bridges test assertions over to spec expectations.
minitest/benchmark is an awesome way to assert the performance of your algorithms in a repeatable manner. Now you can assert that your newb co-worker doesn't replace your linear algorithm with an exponential one!
minitest/mock by Steven Baker, is a beautifully tiny mock object framework.
minitest/pride shows pride in testing and adds coloring to your test output. I guess it is an example of how to write IO pipes too. :P
minitest/unit is meant to have a clean implementation for language implementors that need a minimal set of methods to bootstrap a working test suite. For example, there is no magic involved for test-case discovery.
"Again, I can't praise enough the idea of a testing/specing
framework that I can actually read in full in one sitting!"
-- Piotr Szotkowski
Changes:
2 minor enhancements:
Posted by zenspider on January 25, 2012 08:08 AM · permalink
minitest provides a complete suite of testing facilities supporting TDD, BDD, mocking, and benchmarking.
"I had a class with Jim Weirich on testing last week and we were
allowed to choose our testing frameworks. Kirk Haines and I were
paired up and we cracked open the code for a few test
frameworks...
I MUST say that mintiest is *very* readable / understandable
compared to the 'other two' options we looked at. Nicely done and
thank you for helping us keep our mental sanity."
-- Wayne E. Seguin
minitest/unit is a small and incredibly fast unit testing framework. It provides a rich set of assertions to make your tests clean and readable.
minitest/spec is a functionally complete spec engine. It hooks onto minitest/unit and seamlessly bridges test assertions over to spec expectations.
minitest/benchmark is an awesome way to assert the performance of your algorithms in a repeatable manner. Now you can assert that your newb co-worker doesn't replace your linear algorithm with an exponential one!
minitest/mock by Steven Baker, is a beautifully tiny mock object framework.
minitest/pride shows pride in testing and adds coloring to your test output. I guess it is an example of how to write IO pipes too. :P
minitest/unit is meant to have a clean implementation for language implementors that need a minimal set of methods to bootstrap a working test suite. For example, there is no magic involved for test-case discovery.
"Again, I can't praise enough the idea of a testing/specing
framework that I can actually read in full in one sitting!"
-- Piotr Szotkowski
Changes:
2 minor enhancements:
Posted on January 25, 2012 08:08 AM · permalink
I'll bet they still require you to register with your "real" name, but then they'll graciously allow you to have a linked nickname or two, meaning they're still fully prepared to roll over on you to authoritarian governments or advertisers at the drop of a hat.
Yup, that's exactly what they did. EFF's post more-or-less translates Google's latest press release into English and softly and timidly explains that this doesn't really mean anything.
(I understand that EFF feels the need to continue to fellate Google on this issue so that Google will return their phone calls, but calling this bullshit anything other than "bullshit" is bullshit.)
Google emphasizes how few people are affected by this policy by pointing out that only 0.1% of users have submitted name appeals, and of that 0.1%, only 20% were seeking to use a pseudonym, but even though their numbers are small, these are often the people who need social networks the most. These are the revolutionaries, the bloggers in authoritarian regimes, the isolated minorities reaching out to the rest of the world for understanding and support. If Google+ hopes to be a global company on the side of those seek to use technologies to build a free society, it needs to make room for the people working (often under adverse conditions) to create that world, instead of dismissing them as edge cases.
I have heard a vicious, unsubstantiated rumor that that last sentence -- before EFF's Google-apologists watered it down by projecting unbelievably high-minded aspirations onto Google -- originally read:
If Google+ hopes to be anything other than a room full of white middle-class Western men talking to one another, it needs to make room for these people instead of dismissing them as edge cases.
Oh, also, Google announces privacy changes across products; users can't opt out.
Previously, previously, previously, previously, previously.
Mirrored from jwz.org.
Posted by jwz (jwz@jwz.org) on January 25, 2012 05:27 AM · permalink
Posted by Hawkeye (noreply@blogger.com) on January 25, 2012 05:21 AM · permalink
Posted by GoDjango - Django Screencasts on January 25, 2012 04:30 AM · permalink
Read more of this story at Slashdot.
Posted by timothy on January 25, 2012 01:45 AM · permalink
Read more of this story at Slashdot.
Posted by timothy on January 25, 2012 12:39 AM · permalink
Read more of this story at Slashdot.
Posted by Unknown Lamer on January 24, 2012 10:53 PM · permalink
Read more of this story at Slashdot.
Posted by Unknown Lamer on January 24, 2012 09:28 PM · permalink
Read more of this story at Slashdot.
Posted by Unknown Lamer on January 24, 2012 09:02 PM · permalink
Read more of this story at Slashdot.
Posted by Unknown Lamer on January 24, 2012 08:46 PM · permalink
Posted by Library (ek_contact@plymouthrocket.com) on January 24, 2012 06:00 PM · permalink
Hello everyone! This is the 15th post in the node.js modules you should know about article series.
The first post was about dnode - the freestyle rpc library for node, the second was about optimist - the lightweight options parser for node, the third was about lazy - lazy lists for node, the fourth was about request - the swiss army knife of HTTP streaming, the fifth was about hashish - hash combinators library, the sixth was about read - easy reading from stdin, the seventh was about ntwitter - twitter api for node, the eighth was about socket.io that makes websockets and realtime possible in all browsers, the ninth was about redis - the best redis client API library for node, the tenth was on express - an insanely small and fast web framework for node, the eleventh was semver - a node module that takes care of versioning, the twelfth was cradle - a high-level, caching, CouchDB client for node, the thirteenth was jsonstream - streaming JSON parsing library, the fourteenth was about everyauth - a module for authenticating your webapp with facebook, twitter, etc.
Today I'm gonna introduce you to procstreams by Marco Rogers. Procstreams is a little experiment with shell scripting in node. Here is an example:
var $p = require('procstreams');
$p('cat lines.txt').pipe('wc -l')
.data(function(stdout, stderr) {
console.log(stdout); // prints number of lines in the file lines.txt
});
This example executes the shell command cat lines.txt, then pipes the output to wc -l, and then collects the output through a callback that prints the number of lines in lines.txt
Here is another example:
var $p = require('procstreams');
$p('mkdir foo')
.and('cp file.txt foo/')
.and('rm file.txt')
.on('exit', function() {
console.log('done');
});
This example executes mkdir foo, and if that succeeds, it executes cp file.txt foo/, and if that succeeds, it executes rm file.txt.
The .and(...) is the same as && in the shell scripting.
Procstreams also support .or(...), which is || in the shell and .then(...), which is ; in the shell.
See procstreams documentation on GitHub for full info on other thingies it supports.
You can install procstreams through npm as always:
npm install procstreams
Procstreams on GitHub: https://github.com/polotek/procstreams.
Doing a node.js company and want your ad to appear in the series? The ad will go out to 14,000 rss subscribers, 7,000 email subscribers, and it will get viewed by thousands of my blog visitors! Email me and we'll set it up!
If you love these articles, subscribe to my blog for more, follow me on Twitter to find about my adventures, and watch me produce code on GitHub!
Posted by Peteris Krumins (peter@catonmat.net) on January 24, 2012 04:21 PM · permalink
Posted by Library (ek_contact@plymouthrocket.com) on January 24, 2012 02:30 PM · permalink
Posted on January 24, 2012 01:39 PM · permalink
Posted on January 24, 2012 01:39 PM · permalink
We often hear from users that taking care of old tasks can really help to feel better about what's left to do. After cleaning up tasks you added long ago, this week's tip, shared by kateoneill, suggests also looking at cleaning up postponed tasks.
My morning RTM routine involves marking as "complete" any tasks that I did actually complete the day prior, but postponing the rest. This means that some tasks that don't grab my attention can end up deferred for days, weeks, and yes, sometimes even months. But I have two Smart Lists to help me address this:
one called "ORLY?" with
postponed:"> 5" AND priority:1
so that I can see any supposedly high-priority items I've been procrastinating on and either handle immediately or determine true next steps forand one called "Clutter!" with
postponed:"> [whatever the highest number that yields results is]"
which allows me to go in periodically and clear out ALL old tasks, and then revise the smart list to a smaller number so that it continually tightens my view on my overall tasks.
Thanks for sharing this tip, kateoneill! You're our Tips & Tricks Tuesday winner this week.
Do you have a suggestion for our weekly Tips & Tricks post? Got an interesting set-up or idea? Head over to the Tips & Tricks forum, add a new topic, and let us know how you use Remember The Milk. Each week we'll give away a 1 year Pro account to the user whose idea inspires the Tips & Tricks Tuesday blog post for that week.
Posted by Andrew Conkling on January 24, 2012 12:56 PM · permalink
Turns out you can create unique signatures from plant DNA. The idea is to spray this stuff on military components in order to verify authentic items and detect counterfeits, similar to SmartWater. It's a good idea in theory, but my guess is that the security is not going to center around counterfeiting the plant DNA, but rather in subverting the systems that apply, detect, and verify the chemicals.
Posted by schneier on January 24, 2012 12:46 PM · permalink
Posted by Nat Torkington on January 24, 2012 11:00 AM · permalink
... and that's the problem.
I was picking out the mat for a framed photo and there were a thousand colors to choose from. The framer uttered the scary invocation, putting the choice back to me.
So many things are now completely up to us, more than ever before. Where and how and when we work and invest and interact and instruct and learn...
If you think you have no choice but to do what you do now, you've already made a serious error.
It seems to me that passing the buck on this merely because it's easier than choosing is precisely the wrong strategy. It enables an abdication of power that will be very hard to reverse. It's up to you, and that's part of the power that you've got.
Back to the framer: I picked, because that's my job.
Posted by Seth Godin on January 24, 2012 10:06 AM · permalink
Posted by Between engineering and real life on January 24, 2012 08:53 AM · permalink
"Guru Meditation #00000004.0000AAC0", it did not go on to say.
It seems to pop up this dialog every few hours if my phone is in the vicinity of my iMac but not physically docked to it.
Mirrored from jwz.org.
Posted by jwz (jwz@jwz.org) on January 24, 2012 07:38 AM · permalink
I correctly interpreted that as, "It is time for you to reduce your programming package again." So I went through the list of all of the programs (including "suggestions") that my DirecTivo had recorded in the last 5-ish months and generated the list of channels that I actually watch things from. It turns out that the list is:
In other words, I receive 626 channels, and watch shows from about 14 of them ever.
So here's how evil DirecTV is:
And this is all for plain old SD. I see they've finally released an HD DirecTivo, made of 3-ish years old tech, but you can't buy it outright: there's some kind of monthly licensing fee in addition to the higher rates for an HD feed, so it looks really, really rapey.
A few months ago I tried the "just torrent everything" approach for a few weeks, just to see if it was yet feasible to use the Internet as my television, and it's not. I tried using Ted for a while, and it... almost worked, but it was still a huge pain in the ass and ended up being an extremely manual process compared to what a DVR does.
Soon.
Soon.
Mirrored from jwz.org.
Posted by jwz (jwz@jwz.org) on January 24, 2012 06:21 AM · permalink
[16] git checkout f4a56 Note: checking out 'f4a56'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b new_branch_name HEAD is now at f4a560b... FooAs you may have gathered from this long warning, you most likely don't want to be in a detached head setting, you probably just meant to create a branch or wanted to rollback a commit but typed the wrong thing. Which is why there are lots of pages about what this means and how to get yourself out. My contribution to this literature can be found below the fold.
Posted on January 24, 2012 03:01 AM · permalink
Hoe is a rake/rubygems helper for project Rakefiles. It helps you manage and maintain, and release your project and includes a dynamic plug-in system allowing for easy extensibility. Hoe ships with plug-ins for all your usual project tasks including rdoc generation, testing, packaging, and deployment.
See class rdoc for help. Hint: ri Hoe or any of the plugins listed
below.
For extra goodness, see: http://seattlerb.rubyforge.org/hoe/Hoe.pdf
Changes:
3 minor enhancements:
2 bug fixes:
Posted by zenspider on January 24, 2012 01:15 AM · permalink
Hoe is a rake/rubygems helper for project Rakefiles. It helps you manage and maintain, and release your project and includes a dynamic plug-in system allowing for easy extensibility. Hoe ships with plug-ins for all your usual project tasks including rdoc generation, testing, packaging, and deployment.
See class rdoc for help. Hint: ri Hoe or any of the plugins listed
below.
For extra goodness, see: http://seattlerb.rubyforge.org/hoe/Hoe.pdf
Changes:
3 minor enhancements:
2 bug fixes:
Posted on January 24, 2012 01:15 AM · permalink
I have a Django project called RandoPony that handles event registration for the BC Randonneurs Cycling Club. It's on an annual release cycle; i.e. I spend the few weeks that pass for winter in Vancouver updating the project. That's when I bump it to the latest version of Django, fixing minor bugs, and adding new features that I and other users have come up with during the preceding year. Once I release a new version for the new year, I usually don't have to worry about the code until the next winter. The pony just works, facilitating people doing hundreds of thousands of kilometres of crazy long cycling events, and we like it that way!
My workflow at the beginning of the annual update looks something like:
I recently started working on the 2012 release of RandoPony and was blown away when I ran the test suite because there were over 60 failing tests! It took me way longer than it should have to figure out why things were so massively broken.
The problem was that the test fixtures weren't being installed. They weren't being installed because they are YAML files and I had forgotten to install PyYAML in the virtualenv. What's really annoying is that the fixtures files were being ignored silently.
It turns out that if you specify a YAML fixture for a Django TestCase:
class TestPopulairesListView(django.test.TestCase): """Functional tests for populaires-list view. """ fixtures = ['populaires']
without giving the fixture file a .yaml extension, the fixture will be silently ignored if PyYAML isn't installed. Really, Django?!
So, the number 1 thing that I should have done to save myself from this thrash was to explicitly specify the serialization format of my fixtures:
class TestPopulairesListView(django.test.TestCase): """Functional tests for populaires-list view. """ fixtures = ['populaires.yaml']
Then the Django test runner would have told me:
Problem installing fixture 'populaires': yaml is not a known serialization format.
I'll take the hit for ignoring the PEP 20 aphorism "Explicit is better than implicit". But shouldn't Django get docked for "Errors should never pass silently"?
The other thing I should have done was use a pip requirements file for the project.
RandoPony has 2 requirements files now. requirements.txt for the packages required for the production deployment, and requirements-dev.txt for the additional packages, like PyYAML, required for development work. Now I just have to hope that I'm smart enough when I start work on the 2013 release to do:
(randopony)$ pip install -r requirements.txt (randopony)$ pip install -r requirements-dev.txt
Posted on January 24, 2012 12:14 AM · permalink
Mirrored from jwz.org.
Posted by jwz (jwz@jwz.org) on January 23, 2012 11:27 PM · permalink
Posted by Daniel Greenfeld on January 23, 2012 10:16 PM · permalink
DARPA is funding research into new forms of biometrics that authenticate people as they use their computer: things like keystroke patterns, eye movements, mouse behavior, reading speed, and surfing and e-mail response behavior. The idea -- and I think this is a good one -- is that the computer can continuously authenticate people, and not just authenticate them once when they first start using their computers.
I remember reading a science fiction story about a computer worm that searched for people this way: going from computer to computer, trying to identify a specific individual.
Posted by schneier on January 23, 2012 05:49 PM · permalink
We've heard a lot about "piracy" in the last few months. But as you'd
expect, there's a lot of confusion, particularly by the folks doing
the name-calling, about what pirates really are.
Pirates aren't petty thieves, snatching a video or two from the local video rental shop. Pirates were (and are) after the big kill: the galleons filled with gold from the new world, the oil tanker that can be held for a few million dollars in ransom. If we're going to talk seriously about piracy, it's not kids downloading the odd song or TV episode, nor is it third-world software developers downloading the ebooks that I've edited and written. That's shoplifting at worst, and while I'm not going to condone shoplifting, it's a cost of doing business, and not a particularly large one. As Tim O'Reilly has argued, and as O'Reilly's sales indicate, the additional exposure you get through piracy more than compensates for any "lost sales," especially since the sales you lose are the sales you were never going to make in the first place. Sites that sell copyrighted music that they have not been licensed to sell are a more serious problem, but again, this is a problem that's easily solved by making your work as widely available and as easily accessible as you can; this will put parasites out of business.
That's not to say that piracy isn't an issue. Just that it's a different issue than the one the MPAA wants us to think about. There is some major league piracy going on, and it's all about the abuse of copyright by the major copyright holders. It's hard to think about Righthaven except as an instance of piracy. (And Righthaven ended up where most pirates historically ended up.) The Digital Millennium Copyright Act (DMCA), which has been widely used to suppress parody, unfavorable reviews, and the like, was a huge intellectual property land grab that fully deserves the name "piracy." At O'Reilly, we had a narrow escape a few years ago. "Head First Java" starts each chapter with an image taken from an old movie for which the copyright had expired, placing the movie in the public domain. Someone collected several of those movies into DVDs and copyrighted the DVD. Luckily, we discovered it (and were able to find new images) before we published the book and ended up with a court summons. That too is piracy. So is much of the patent trolling that's currently going on: one small but particularly painful example is Luma Labs' decision to take their product off the market because of a worthless patent claim. They determined that they'd almost certainly win in court, since their product was demonstrably based on prior art going back to 1885, but they'd almost certainly go bankrupt paying the legal fees.
The Stop Online Piracy Act (SOPA) and the PROTECT IP Act (PIPA) have to be understood in this light: it's just another IP land grab. It's an attempt to frighten those who would compete with the established media companies, an attempt to assert monopolistic control over creativity. The ability to take domains offline without due process, even on the basis of inadvertently linking to copyrighted material, is nothing if not an attempt to legitimize theft on a grand scale. Because there is no due process, a defendant can't respond until he's already out of business; and then, it's a matter of whether the defendant can outlast Hollywood in their ability to pay legal fees. "Justice" is meaningless if you run out of money before you get to the end of your case.
Let's look at what would have happened historically if we had today's copyright regime. Many of Shakespeare's plays are based on older works. Many of the histories go back to Holinshed's " "Chronicles of England, Scotland, and Ireland," and if you've read Holinshed and Shakespeare side by side (I have), there's more than just an occasional chance echo. What would Shakespeare have owed to the Holinshed family? Would they have been able to take him "offline" under the DMCA? "Hamlet" is believed to be based on a lost, earlier "Hamlet" (called the Ur-Hamlet, possibly written by Thomas Kyd, one of Shakespeare's contemporaries) that has been lost. With modern IP law, we'd still be paying royalties to the unknown author of the Ur-Hamlet, and we wouldn't have Shakespeare's masterpiece.
Then as now, borrowing wasn't limited to theatre. Mashups, which have been repeatedly attacked by the entertainment industry, are by no means a new art form; they've been central to creativity for years (related examples are embedded below). Bach's "Goldberg Variations" incorporate a number of popular songs of the era, including the always popular "Cabbages and Beets drove me away from you," in its entirety, along with "Get closer to me, baby" (that's what the German really means, except the "baby" part). So did Beethoven's sonatas, particularly the second movement of the magnificent Opus 110 piano sonata ("Our cat had kittens" and " I'm a slob, you're a slob"). I could list examples for pages; musicologists spend entire careers searching for this stuff. The complexity with which these songs are woven into a much greater piece is amazing, but they're there, they've obviously there once you know what to look for, and they go way beyond what would survive "fair use" and the DMCA, let alone SOPA and PIPA.
Even more fundamentally, there is no such thing as creativity that doesn't rely on the past. Sometimes the links are very subtle and hidden; sometimes they're out in the open, and we don't notice them only because we've declared Bach and Beethoven "great composers" and forgotten the popular music of their day. Our peculiar post-Romantic notion that all real artists somehow create their works out of nothing is partly to blame. Nothing could be further from the truth. And it's not just art. In a very rare moment of humility, Isaac Newton said "If I have seen further it is by standing on the shoulders of Giants."
So the notion that creativity can be owned, and that any use of someone else's ideas requires compensation, is nothing but an attempt to steal all of creativity. Whoever can pay their lawyers the most wins. Anyone smell pirates in the room? I am not willing to sacrifice this generation's great artists on the altar of Hollywood. I'm not willing to have the next Bach, Beethoven, or Shakespeare post their work online, only to have it taken down because they haven't paid off a bunch of executives who think they own creativity.
The Constitution of the United States provides a legal basis for copyright and patent, but it's for a specific purpose: it's "To promote the Progress of Science and useful Arts." We've gone way beyond that now, with patent and copyright piracy: our notion of intellectual property is now hindering both science and art.
In Book IV, section 4, of St. Augustine's "The City of God", Augustine tells the parable of a pirate captain who is captured and brought before Alexander the Great. The emperor says "How dare you terrorize the seas"? The pirate captain replies, "How dare you terrorize the whole world? Because I only have one ship, I'm called a pirate; because you have a great navy, you're called an emperor." The difference between a pirate and an emperor is one of scale only. And that's the position we find ourselves in here: the Motion Pictures Association of America (MPAA) and its allies have twisted the discussion so we're talking about the wrong thing. We shouldn't be talking about the small-scale piracy of individual movies (which probably helps sales in the long run, as we've observed in the publishing business). We should be talking about the real piracy, the wholesale takeover of creativity by the media industry. That's the piracy we should be outlawing.
Photo: Jolly Roger by Joe Shlabotnik, on Flickr
Related:
Posted by Mike Loukides on January 23, 2012 04:00 PM · permalink
Posted on January 23, 2012 01:49 PM · permalink
Posted on January 23, 2012 11:25 AM · permalink
Years ago, my bosses and I needed to finalize the pricing for a new line of software I was launching. In the room we had MBAs from Harvard (2), Stanford, Tuck and, I think, Wharton. We had three prices in mind, and the five of us couldn't agree. So we did the only scientific thing: we flipped a coin (two out of three, just to be sure).
Pricing your product is actually simple, as long as you consider it from the buyer's point of view. How much it costs you to make something is irrelevant. They don't care (of course, you can't price something at a loss and hope to stay in business for long). The two keys to the analysis:
Substitutes: Every purchase is a choice, and that means the buyer can choose to do nothing or buy something else instead. If there are easy and obvious substitutes to what you sell, that has to be built into your pricing. If you make something rare and unique, you still might not be able to charge a lot--because people can always choose to buy nothing. A 42 carat diamond, for example, might be hard to replace, but it's not worth $100 million unless someone actually chooses to buy it.
Part of the work of design and marketing is to help people understand that there are no good substitutes for what you have to offer, meaning, of course, that you can happily charge more.
Story: The other half of the pricing formula is the story the price itself tells. A Prius at $40,000 or a Prius at $10,000 is the same car, but the price becomes a dominant part of the story. You can tell a story of value/cheapness/affordability, or a story of luxury. If you price your product or service near the median, you're telling no story at all with the price, giving you the chance to tell a story about some other element of what you sell.
If you're not happy with your pricing options, focusing on your costs might not be the right path. Instead, focus on how the design or delivery change the availability of substitutes, and how the price becomes part of the story of your product.
Posted by Seth Godin on January 23, 2012 10:32 AM · permalink
let me tell you a story
a story that never ends ..
let me tell you a story
a story that never began
let me tell you a story
that was there when God found himself
and will still be there when God
forgets who he is
let me tell you a story
a story of love
Posted by shekhar on January 23, 2012 10:25 AM · permalink
Posted by Hawkeye (noreply@blogger.com) on January 23, 2012 06:13 AM · permalink
Posted by Reinout van Rees' weblog on January 23, 2012 03:49 AM · permalink
After some sorting, it comes out as follows...
| Currency | Count | Value (nominal) | Value (USD) |
| USD | 3 | 3 | 3 |
| CAD | 7 | 100 | 98.55 |
| CZK | 2 | 2100 | 106.40 |
| GBP | 1 | 10 | 15.55 |
| EUR | 1 | 20 | 25.79 |
| INR | 1 | 100 | 1.99 |
| RUB | 9 | 1570 | 49.97 |
| Total | 24 | - | 301.25 |
In other words, out of 24 total pieces of paper valued at over $300, I had three spendable pieces of paper valued at $3. Oh, and a couple of United beverage vouchers which expire in 9 days. I ended up going to the ATM.
Posted on January 23, 2012 02:35 AM · permalink
Posted by Reinout van Rees' weblog on January 23, 2012 01:18 AM · permalink
Posted by Reinout van Rees' weblog on January 23, 2012 01:18 AM · permalink
Posted by Reinout van Rees' weblog on January 23, 2012 01:18 AM · permalink
Posted by Reinout van Rees' weblog on January 23, 2012 01:18 AM · permalink
Posted by Reinout van Rees' weblog on January 23, 2012 01:18 AM · permalink
Posted by Reinout van Rees' weblog on January 23, 2012 01:18 AM · permalink
Posted by Reinout van Rees' weblog on January 23, 2012 01:18 AM · permalink
Posted by Reinout van Rees' weblog on January 23, 2012 01:18 AM · permalink
Documenting projects is hard, hosting them shouldn't be. Read the Docs was created to make hosting documentation simple. I think that we have solved this problem well, but now we need to start thinking about the larger picture.
Along with hosting, Read the Docs was created with 2 other main goals. One was to encourage people to write documentation, by removing the barrier of entry of hosting. The other was to create a central platform for people to find documentation. Having a shared platform for all documentation allows for innovation at the platform level, allowing work to be done once and benefit everyone. Having run the site for over a year now, I think there is a third thing that we should be striving for. That is to make the quality of documentation better.
I think that we can help a documentation culture flourish within the open source world. Django is a shining example of what a project with great documentation can do, and it has a community that values docs more than the norm. I think we can help spread this culture throughout the Python world, and beyond. This has already started, and I want to think about how something like RTD can help.
I think that having a guide for writing useful documentation would be a great step towards helping people along the path of documentation enlightenment. Jacob Kaplan-Moss has started down this road with his blog series and Pycon 2011 talk on this subject. I think that we could start by collecting these into a section of the site.
We could build on top of that great start with simple guides for how to get started with Sphinx, best practices for documentation, and providing a general place to learn more about how to write good documentation. Since we host a lot of documentation, we could point to live examples of techniques, and provide helpers for people to enable the techniques.
I have started a reStructedText Philosophy document that is meant to help people understand the ideas behind how reST works, so that it isn't as mystifying. This reST cheatsteet also appears to have similar goals. These are a very basic start, and I think some more along these lines would really help a lot of people get over the barrier to starting and continuing to write good documentation.
I think that we could also help create contributors to projects, if we could find an easy way to provide patches to documentation. If you could go to the project documentation, and fix small typos, or help add a paragraph in the tutorial, it would lower the bar to helping.
However, it isn't a wiki. These changes would be represented to the project author as pull requests in their VCS, and they would still be responsible for tending the garden. This gets rid of the "Just Edit The Wiki" solution of documentation, and also helps new contributors get started in an easier fashion.
The Plone community has built a proof of concept, linking to Github's edit pages for the current document. I think we can integrate this at the platform level, and make it available to everyone.
Read the Docs is open source. You can help by writing docs for the site, writing code for the site, or just writing documentation in general. People can also help just by using the site, and reporting bugs. Telling us how to make the site better helps everyone in the long run. Come join us on Freenode in the #readthedocs channel as well.
Another area that we're hurting is in the design front. We have been adding features over time, and the design of the site is getting a bit strained. Having someone with a good sense of design help re-think and re-architect some of the features and ideas that we've been working on I think would help a lot.
A lot of the RTD contributors will be at Pycon 2012, where we will be having a sprint on the site. If you want to get started contributing, that is a great place to come and get started.
Posted on January 23, 2012 12:38 AM · permalink
MPAA Directly & Publicly Threatens Politicians Who Arent Corrupt Enough To Stay Bought on Techdirt.
Posted by Matt on January 22, 2012 08:43 PM · permalink
class User(CacheModel): username = Key() email = Field() full_name = Field() user = User( username = 'bob', email = 'bob@hotmail.com', full_name = 'Bob T Fredrick', ) user.save() ... user = User.get(username='bob') user.email == 'bob@hotmail.com' user.full_name == 'Bob T Fredrick'
Posted on January 22, 2012 07:55 PM · permalink
Posted by Library (ek_contact@plymouthrocket.com) on January 22, 2012 07:00 PM · permalink
Posted on January 22, 2012 03:05 PM · permalink
Now that everyone has a media platform, look for even more of the mutual back scratching that comes from tracking favors.
The most corrosive sort of this network amplification goes like this: I do something for you unasked. Then I do something again. Perhaps I even tout you or your work a third time. Then I come to you, point out how generous I've been and ask for you to do something for me. Or I network my way to one person and then use that platform to reach three more, and repeat until I've worked the entire digital room.
Humans have a natural openness to reciprocity. It's a time-honored survival technique, one that allowed us to live together in villages for millenia. Someone who doesn't reciprocate is less likely to be protected by his peers, right? Not only have we been taught reciprocation since birth, but it feels right. It's baked in.
The problem occurs when the trading of favors become mercenary, when alert individuals start manipulating the system for personal gain. Suddenly, every favor is suspect, measured and not at all generous. Suddenly all the likes and links and blurbs become nothing but currency, not the honest appraisals of people we can trust. It means that bystanders have trouble telling the difference between honest approval and the mere mutual shilling of traded favors.
Yes, you can trade your way up, but at some point, the very people who were influenced by all your trades start to realize that you can't be trusted.
Mutual funds deserve to be rigorously measured and relentlessly traded. Favors and taste and allegiances, though, not so much. Like is too important to be something you do because you have to.
Posted by Seth Godin on January 22, 2012 10:04 AM · permalink
</a> Please enjoy jwz mixtape 108.
I've fallen behind, and already have 3+ more mixtapes worth of new-ish videos in the queue after this one!
Mirrored from jwz.org.
Posted by jwz (jwz@jwz.org) on January 22, 2012 03:24 AM · permalink
We all know how much a picture is worth. What about a good short video? (hit the play button and watch for thirty seconds--here is the large version). And here's one about obesity.
Posted by Seth Godin on January 22, 2012 12:10 AM · permalink
Posted by Debashish Chakrabarty on January 21, 2012 09:00 PM · permalink
The IBM Powers of Ten video is a classic: as the stolid narrator ticks off powers of ten, the camera pulls back or zooms in and a new layer of complexity is revealed. We need a Powers of Ten video for SOPA.
At the initial scale, Hollywood lobbyists convinced Congress to push a bill through that would give Hollywood a measure of control over Internet sites by facilitating DNS takedowns, placing liability on site operators, and generally placing restrictions on Internet businesses designed to benefit existing content distributors. The depressingly smooth passage of the bill meant serious measures were called for: the blackout day. On that day, tens of millions of people became alerted to the consequences of SOPA and wrote to their representatives. SOPA has stalled, possibly died. And there was rejoicing.
But step out a power of ten and you see SOPA was just the latest in a series of legislative manipulations by existing media companies to benefit their coffers. Whether it's extending the term of copyright, criminalizing the circumvention of DRM, or trying to ban repeat-downloaders from the Internet, these media companies are powerful and use their power to extend their profits. Sometimes they even exploit their access to the user to perpetuate their cause, for example by putting unskippable pre-roll anti-piracy messages on every legitimately-purchased DVD. There's no indication that a victory over SOPA means there won't be a SOPA 2.0 in six months time.
Step back further and you see that Internet companies have set themselves up as new distribution channels while the old distribution companies were napping. Amazon can take an author's book and put it in consumers hands without ever involving a publisher, and Apple are following suit. Amazon, Apple, and Google all distribute movies. The legacy distribution companies are owned by the content production companies, and their "save our business" message muddles whether it's content production or legacy distribution that's threatened by these new Internet companies. Congress put their legislative thumb on the scales in a business dispute: old money vs new money, incumbent rent extractor vs upstart.
Step back further and you see that Congress thumbs the scales all the time. Between the money that can be earned from corporations and unions as a lobbyist after leaving Congress, and the money needed to run a campaign to be elected in the first place, there are a lot of reasons for Congressional representatives to be receptive to advances from monied interests. This means their legislative attention is not on the good of society or even the majority, but for the good of those willing to spend money to buy it. This is the big picture view, the root of the problem.
Congress is a flea pit. We can crack the fleas one at a time as they bite us, or we can clean house. I see widespread jubilation on the success of the SOPA skirmish, but only one or two people thinking and talking about how we win the war. We win when we end this stream of Internet-breaking bills, and that will only happen when Congressional election campaigns are no longer paid for by monied interests. An independent Congress will still listen to business and unions, it just won't have to roll over and beg when money whistles.
This is, obviously, a bigger problem to solve. Lessig has called it a "generational" problem: pernicious money will take 30 years to eradicate, so we may end up cleaning up the country for our children. The size of the change doesn't make it impossible. It's a strategy problem, like every other: spend time and money at every power of ten, more where it's urgent and important, investing in R&D where a way forward isn't immediately obvious.
What does it mean to attack it at every power of ten? Simply:
You'll notice I don't have "get Internet giants to lobby Congress" on my list. I'm sure they'll do that already, but I don't believe you can fight this fire with fire. They may need to lobby tactically, but strategically you fight fire by taking away its fuel or oxygen and that means taking obligation-creating campaign donations away from Congress.
If we don't do this, we'll keep scratching and crushing the fleas one at a time until we're miserable from all the bites. We need to zoom out a few powers of ten and clean house to solve the underlying problem.
Posted by Nat Torkington on January 21, 2012 07:05 PM · permalink
Posted by Library (ek_contact@plymouthrocket.com) on January 21, 2012 02:30 PM · permalink
Posted by Library (ek_contact@plymouthrocket.com) on January 21, 2012 02:30 PM · permalink
Long-lasting systems can't survive if they remain insatiable.
An insatiable thirst for food, power, energy, reassurance, clicks, funding or other raw material will eventually lead to failure. That's because there's never enough to satisfy someone or something that's insatiable. The organization amps up because its need is unmet. It gets out of balance, changing what had previously worked to get more of what it craves. Sooner or later, a crash.
More fame! More money! More investment! Push too hard and you lose what you came with and don't get what you came for.
An insatiable appetite is a symptom: There's a hole in the bucket. Something's leaking out. When a system (or a person) continues to demand more and more but doesn't produce in response, that's because the resources aren't being used properly, something is leaking.
If your organization demands ever more attention or effort or cash to produce the same output, it makes more sense to focus on the leak than it does to work ever harder to feed the beast.
Posted by Seth Godin on January 21, 2012 10:28 AM · permalink
Posted on January 21, 2012 06:37 AM · permalink
Posted on January 21, 2012 12:01 AM · permalink
On December 5, Massachusetts Governor Deval Patrick joined with state treasurer Steven Grossman to create an open government initiative with the promising moniker Open Checkbook. The site launched to some acclaim and has received over 220,000 hits. I decided to take a look at what's offered and what's missing from this site, and to ask someone in the government here in Massachusetts to describe their thinking in creating the site. The results can give us some insight into the effort it takes at each stage to release government data--and even more significantly, what it takes to increase the data's value.
As a finance project, Open Checkbook hones in on one area of open government: how it spends. With Open Checkbook you can find out where the money goes in the Massachusetts state government, right down to particular salaries or particular payments to vendors. This is highly welcome in a tight economy, especially in a state that is still often unfairly tarred as "Taxachusetts," decades after tax rates were lowered--a state where news of patronage and pension scandals is common enough to get tiresome--a state where cynical voters have put referendum questions on the ballot in favor of lower taxes at least three times.
I discussed Open Checkbook with Jeffrey Simon, who works for the Governor as the director of the state's economic stimulus program and who was involved in the Open Checkbook from the beginning. The site is run by a steering committee formed by the Governor and Treasurer and made up of members of their staffs. The approach being used in Open Checkbook is based on the experience they had developing the state's stimulus program, and the website that Director Simon's office created for that program. The steering committee has been eager to add context to data, helping visitors who are uninitiated in the arcanery of state budgeting get a sense of what expenditures are for.
A first look at the web site
Let's take a quick tour of this service. To get to the home page, visit the main Massachusetts government portal, look down the right-hand side, and click on "Open Checkbook." You can then explore finances a
Posted on January 24, 2012 12:01 AM · permalink