tag:blogger.com,1999:blog-15940979327192090602024-03-12T21:23:49.076-04:00Guillaume MarceauGuillaume Marceau's blog away from homeGuillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.comBlogger79125tag:blogger.com,1999:blog-1594097932719209060.post-74863339807380517502015-05-08T10:57:00.001-04:002015-05-15T13:44:48.791-04:00What's so scary about gmos? ContinuedLet's recall, the question on my mind is "what's so scary about gmos?". As curious individual trained in the sciences, it is our responsibility to understand and explain this fear fairly, with an insight that will be sufficiently penetrating that it will clearly indicate a route through which it might be addressed.<br /><br />My argument is that the scientific and journalism professions have abdicated their responsibility to provide true popular transparency on the issue. <br /><br />Let's be honest, the page at on <a href="http://www.loc.gov/law/help/restrictions-on-gmos/usa.php">gmo regulations at loc.gov</a> might as well been written to intimidate. The language is thick, the font is tiny. It spends most of the space naming authorities, but very little on the substance of their enforcement. Hunting through the document for the most substantive passage, I settled on this one:<br /><br /><blockquote>
The consultation procedure is meant to enable the FDA to determine if regulatory action is needed with respect to food derived from the new variety such as “significantly increased levels of plant toxicants or anti-nutrients, reduction of important nutrients, new allergens, or the presence in the food of an unapproved food additive.”<br />In a 1992 policy statement, the FDA reaffirmed that in most cases it would treat foods derived from GMOs like those derived from conventionally bred plants, and that most foods derived from GM plants would be presumptively GRAS. </blockquote>
<br />This is not a popular science document. To anyone who remembers the environmental catastrophes of the '50 and '60, who have fought industrial Goliaths with sweat and tears, who have suffered the blunt edge of the baton of the police officers sent to repress their protests, and who have passed on the memory of these fights to their children, this reads as stonewalling and naive. A "consultation" with once-murderous industries, which generally leads to a potential toxic product being stamped as "generally recognized as safe"? You've got to be kidding, they will say. The actual work the FDA might very well be excellent, but to a justifiably skeptical reader the language on that page gives the opposite impression.<br /><br />There have been recent efforts to improve the situation. <br /><br />The web newspaper Vox.com was created for the explicit purpose to address the explanation deficit that I am highlighting. I rejoice at their existence, but their piece on <a href="http://www.vox.com/cards/genetically-modified-foods/how-are-genetically-modified-foods-regulated">gmo regulation is too short</a>, and lacks specifics.<br /><br />My own favorite piece on the topic is from July 2013, when a reporter at the fantastic reader-supported Grist Magazine made a heroic attempt to <a href="http://grist.org/food/the-gm-safety-dance-whats-rule-and-whats-real/">investigate the regulatory situation</a>. And yet, after much effort and searching, even Grist, the best environmental reporters of all, failed to bring clarity in such a way that it could inspire confidence. This, above all, gives a measure of the information deficit that has been allowed to take place.<br />Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0tag:blogger.com,1999:blog-1594097932719209060.post-53845991773885533022015-05-02T01:54:00.002-04:002015-05-08T10:39:59.291-04:00What's so scary about GMOs?A GMO can easily be made to be as toxic to as any pesticides. So think DDT, 2,4-D, Chlordane, Agent Orange, Heptachlor and all that.<br />
<br />
To be technologically precise, one could not literally put these molecules in a plants' genome, but other similarly dangerous molecules are quite feasible.<br />
<br />
Presumably, pesticide can be studied carefully, scientifically, and deployed under the supervision of an agriculture engineer who will express utmost respect for the health of their neighbor, and for the environment that supports all life including humanity's. In practice, that's not what happened.<br />
<br />
Pesticides were applied indiscriminately, with wanton abandon and callous disregard for safety. Farm employees died, cancer rates exploded. It was decades after the publication of Silent Spring, the birth of the modern environmental movement, and massive million-people protests throughout the country that national politics began to take notice of the issue. Only then were somewhat effective regulation put in place.<br />
<br />
So given the history here, it seems justifiable to expect large agriculture companies to behave with as little care for the health of the broader community as they displayed back then. Similarly, American politicians could be expected to be as laggard as they were back then, or perhaps worse in the eyes of anyone who believes this political system has been switching from democracy to plutocracy.<br />
<br />
In sum, like all other novel technologies with potential for both profit and harm --medicine, cars, planes, rollercoaster rides, bodypiercings, etc-- GMOs raise questions of trust, regulation, enforcement, transparency, and struggles of interests. Technologists like myself and yourself would much prefer to see technology used wisely as a matter of course. Alas, it cannot be the case, and thus GMOs necessarily have a political dimension.<br />
<br />
Given this, the question we should be asking is: what are the key features of the body of law that regulates the safety of GMOs, and can these be trusted to be effective?<br />
<br />
Here with hit a wall. It is nearly impossible to know. Let's out me as the rather obsessive readers of news that I am. I can speak about the FDA drug enforcement rules, the FCC's, the EPA, the WHO, the Feds', the Dodd–Frank Wall Street Reform and Consumer Protection Act. I could probably fill a page or two with details of how Obamacare work and why it works. I love watching crash test dummies videos; I listened to the all the Plane Crash Engineering Investigation episodes I could get my hand on. And yet, I have no clue about GMO regulation.<br />
<br />
I challenge this reader to find a long-form piece in any national American newspaper, let's say between 1990 and now, that explains how this country establishes the safety of a GMO in a legally binding manner, and what penalties are scheduled for abuses. Who introduced the bill and who paid for their reelection campaign? What were the different schemes considered? How do American GMO safety regulations compare with those abroad? Are they better, worst, same? Nobody knows.<br />
<br />
American science journalists have done a pitiful job of providing transparency to the situation. Now that it's 2015, there is nobody left to do it since nearly all science journalists at large newspapers were fired when Craiglist cannibalized the papers' ad revenues. A well-earned popular distrust of GMOs grew into that vacuum and it's just a sad situation all around.Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0tag:blogger.com,1999:blog-1594097932719209060.post-48347727482920089282015-01-27T16:25:00.000-05:002015-01-27T16:25:06.597-05:00What renewable energy products on the market today are capable of heating a Boston brownstone in winter?The title started as a rhetorical question. Turns out it is actually quite easy to give a practical answer.<br />
<br />
Step 1: Hire an architect house with experience in energy efficiency retrofits on old New England houses, such as the folks at <a href="http://zeroenergy.com/">http://zeroenergy.com</a>.<br />
<br />
Step 2: Bring up the insulation rating of the house up to the Passive House standard. Think of it as LEAD Silver, one step higher. Check out <a href="http://nypassivehouse.org/">http://nypassivehouse.org/</a>. This costs around $200 per sqft.<br />
<br />
Step 3: Reap the savings. After the retrofit, heating costs are reduced five-fold, from $8 per sqft to $1.50. This has a Return-On-Investment period of 10 years, afterwards the energy savings are money in the bank.<br />
<br />
Step 4: Generate the energy needed to heat the passive house by buying shares of a windmill coop. You will need one-fifth of 1/6000 of the <a href="http://berkshirewindcoop.org/">Berkshire Wind Power Coop</a> project, which is a one-time cost of around $2100 plus a few cents for maintenance.<br />
<br />
Done.<br />
<br />
The only reason people don't do this is because, either (1) they actually enjoy giving oil company their money (ah!) (2) they don't own their house, or (3) they don't know that the technology is available today, or (4) they cannot stomac the 10-year investment horizon.<br />
<br />
If you are in that 4th case, keep an eye open. There are banks that specialize in doing these sorts of investments, <a href="http://www.solarcity.com/">Solar City does it for solar panels</a>, for instance. But overall they are few and hard to find at the moment. Still, it's totally worth doing.<br />
<br />
<a href="http://www.ft.com/intl/cms/s/2/dfaca190-8f4a-11e3-be85-00144feab7de.html#slide0">This article</a> at ft.com talks about some folks in New York who did just that.Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0tag:blogger.com,1999:blog-1594097932719209060.post-87409305735053876042014-11-19T21:48:00.001-05:002014-11-20T08:25:26.532-05:00Lesson of a Rosetta Scientist's ShirtThe <a href="http://www.nytimes.com/2014/11/20/fashion/the-lessons-of-a-rosetta-scientists-shirt.html">New York Times just wrote a fair piece </a>on Matt Taylor, the British Scientist from the Rosetta Mission team who showed up on the big day with the wrong shirt.<br />
<br />
It's a heart warming story, truly. A dear friend hand-makes a fun, bold bowling shirt, for their scientist friend. The scientist decides to honor the gift by wearing it on the glorious day when their mission makes humanity's first ever landing on a comet. Wow! Hurrah for science! Hurrah for breaking down stupid stereotypes of lab coat scientists and injecting some personality in the day!<br />
<br />
Except there is just one thing: the shirt shows, among other things, sexist images of women.<br />
<br />
The debate is on. What exactly is wrong with the shirt? And what should be done about it?<br />
<br />
Let's break down its many layers.<br />
<br />
Layer #1-- Taken literally and absent of any social dynamic, the illustration on the shirt is sharply unpleasant to look at for many women. That's on a purely aesthetic basis. <br />
<br />
Layer #2-- The shirt exists in a cultural context in which many women nurse old wounds of <a href="http://www.washingtonpost.com/news/morning-mix/wp/2014/10/29/video-woman-harassed-108-times-as-she-walks-around-new-york/">objectification</a> and sexual aggression. To them, the illustration is a reminder (or an outright trigger, the case may be), which piles on the unpleasantness of Layer #1. <br />
<br />
Layer #3-- Absent of any intent, the shirt is a reliable signal that the wearer is at least unaware of its impact on many women. Knowing that at least one man in the organization lacks that awareness suggests the place does not value developing in its members the kind of understanding of other people's perspective that's needed to work well as a diverse team. That always makes things hard when you are the underdog. <br />
<br />
Layer #4-- The shirt opens the possibly that the wearer does in actuality love the shirt, at least in part, because it displays a woman entirely <a href="http://en.wikipedia.org/wiki/Gaze#The_.22male_gaze.22_in_feminist_theory">"as a heterosexual man sees her"</a>, removed from any depiction of her own agency. Granted, it's not a given that the person is an <a href="https://www.youtube.com/watch?v=ihd7ofrwQX0">avowed misogynist</a>. Granted, it's not at all a given that the shirt is used as a kind of twisted awareness campaign supporting objectification, let alone supporting rape culture --this shirt is not as grossly unambiguous as the ones that read <a href="http://www.thecrimson.com/article/2010/11/12/yale-dke-harvard-womens/">"no means yes, yes means anal"</a>. But the possibility is open all the same, and that's uncomfortable. <br />
<br />
Layer #5-- Once the possibility is open, stereotype threat kicks in. <a href="http://en.wikipedia.org/wiki/Stereotype_threat">Stereotype threat</a> can easily kill 60% of someone's performance in a controlled environment. In an organization, this means many great women will leave for an environment where the whole 100% of their creativity can express itself.<br />
<br />
These five layers are active regardless of the wearer's intent. Here, morals of intent and morals of impact split. What exactly should we do with a very negative impact done by someone with no ill intent?<br />
<br />
One of the best attitudes I know is Hacker School's: <a href="https://www.hackerschool.com/manual">"[once your impact is pointed out to you], apologize, reflect for a second, and move on." </a><br />
<br />
Unfortunately, Matt Taylor's case doesn't make that possible. He participated in a major cultural event, at the very same time two other large misogyny conversations are burning all over the internet: (1) <a href="http://www.clickhole.com/article/summary-gamergate-movement-we-will-immediately-cha-1241?utm_campaign=default&utm_medium=ShareTools&utm_source=facebook">gamergate</a> and the associated terrorizing of outspoken women in the game industry. (2) <a href="http://www.ultrasaurus.com/2008/11/declining-number-of-women-studying-computer-science/">the exiling of women</a> out of computer science, out of the Valley, and in particular <a href="http://time.com/3595318/uber-sexism-tech-delete-app/">Uber being outed in a big way this week</a>. It's unavoidable then that Matt would become a symbol of a greater problem. Strictly speaking, that's unfair to the individual involved. Still, when history knocks at your door, isn't it one's duty to answer it with greatness?<br />
<br />Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0tag:blogger.com,1999:blog-1594097932719209060.post-39047174961830493532014-04-04T13:21:00.000-04:002014-04-04T13:21:27.778-04:00On Mozilla's new CEO Brendan Eich stepping downRecall, Mozilla is not a technology company. It is a civil right organization that works in the technology space. It believes that freedom of speech, freedom of assembly, and notably freedom from being spied by upon for political gain by powerful people, can only be guaranteed so long as the technologies that make up the internet remains free, open and controlled by the people -- not by corporations and not by governments.<br />
<br />
That is its reason for existence. Everybody within Mozilla powerfully resonates with that mission, else they wouldn't be there.<br />
<br />
When we discover that the NSA <a href="http://arstechnica.com/security/2014/03/report-rsa-endowed-crypto-product-with-second-nsa-influenced-code/">makes secret deals with private companies</a> to <a href="http://www.theregister.co.uk/2013/11/27/microsoft_encryption_nsa_spying/%29">insert spying code into commercial software</a>, which is then used to spy on <a href="http://www.spiegel.de/international/germany/gchq-and-nsa-targeted-private-german-companies-a-961444.html">international leaders during world trade negotiations</a>, the <a href="http://www.wired.co.uk/news/archive/2014-01/15/mozilla">Mozilla foundation redouble its effort to construct a spying-proof browser</a>. Call it <a href="http://www.ibtimes.com/reddit-mozilla-others-protest-nsa-spying-honor-aaron-swartz-day-we-fight-back-1538148">applied technological civil right activism</a>.<br />
<br />
Civil rights, in essence, means defending the powerless against bullying by the powerful. Defending the poor against class war from the rich. Defending the minority against imposition by the majority.<br />
<br />
Thus for the Mozilla Foundation and its supporting community, is it unavoidable that its leadership must be judged by the excellence of their judgement in matters of civil right. Eich failed in two ways. First by taking the heteronormative position, he participated in harming a minority (He has since <a href="https://brendaneich.com/2014/03/inclusiveness-at-mozilla/">apologized for that harm</a>.) Second, by using his wealth to bend the democratic process, he participated in <a href="http://www.sfgate.com/politics/article/Out-of-state-money-floods-to-Prop-8-3202371.php">corrupting the one-person-per-vote principle</a> that is so important in protecting the voice of the people against moneyed interests.<br />
<br />
<br />
<br />Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0tag:blogger.com,1999:blog-1594097932719209060.post-52678153351853426582014-03-23T14:37:00.000-04:002014-03-23T14:47:11.722-04:00Quick personality quiz for libertarians: are you a Free Marketeer?, or a Pro-Capitalist?A free marketeer is someone who believes that through the free flow of information, free choice and free exchanges, we will see arise a healthy, prosperous and fair society.<br />
<br />
A pro-capitalist is someone who believes that society will, on the whole, be better-off if important decisions about society's efforts and production potential are made by the people who control a lot of monetary capital.<br />
<br />
Both attitudes are currently flying under the banner of "Libertarianism". Yet they are very different and distinct. What's more, both claim Adam Smith for their camp, when he clearly repudiated one of them.<br />
<br />
We can tell the two apart with the following litmus test.<br />
<br />
Over the last eight years, 37 technology companies have come together and agreed to never hire each other's employees, since the waves of hire-rehire were raising salaries and eating into their profits. The agreement was made in secret through verbal communication between CEOs and kept off the record as much as they could manage.<br />
<br />
Should this be illegal? And if so, how severe should the punishment be?<br />
<br />
Under free marketeering, this is called collusion by market-controlling players to fix the free prices of the market. It amounts to wage theft and the punishment should be at least as severe as if the company had stolen the money directly from their employees' bank accounts and called it "profit."<br />
<br />
Under pro-capitalism, the CEOs' judgement is de facto authoritative, following a conviction that if these CEOs have made this much money, certainly this is a proof of good judgement, and their calls have no need to be second-guessed. This is the view the Adam Smith abhorred.<br />
<br />
Investigative reporter <a href="http://pando.com/2014/03/22/revealed-apple-and-googles-wage-fixing-cartel-involved-dozens-more-companies-over-one-million-employees/">Mark Ames at Pando has been writing track of the legal action taken against the companies</a>:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://pando.com/2014/03/22/revealed-apple-and-googles-wage-fixing-cartel-involved-dozens-more-companies-over-one-million-employees/"><img border="0" src="http://pandodaily.files.wordpress.com/2014/03/techtopusii.jpg?w=934&h=441" height="151" width="320" /></a></div>
<br />
<br />
In the comments, many individuals are defending the CEOs along pro-capitalist lines. I suspect -- I worry -- that these folks think of themselves as Adam Smith-style libertarians, when they are no such thing. Perhaps they have not actually read him.<br />
<br />
Reading "The Wealth of Nations" I found myself learning a whole lot more about the price variations of wheat and of tariffs in the 18th century than I thought I ever would. I also learned about the rampant misery and poverty then. Adam Smith largely blamed this sad affair on market collusion by heavy actors, often through cartelling to fix the free market, alternatively through lobbying and corrupting the government.<br />
<br />
Needless to say, it was eye-opening to see the distance between the fantasy made of Adam Smith's position by the pro-capitalists with the writing of the man himself.<br />
<br />
I would urge the honest free-marketing libertarians to speak up loudly in these cases when their ideals are being co-opted by the pro-capitalists.<br />
<div>
<br /></div>
Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0tag:blogger.com,1999:blog-1594097932719209060.post-63179125211779185282013-12-30T13:25:00.002-05:002013-12-30T13:25:54.501-05:00How to Pen a Political Takedown Note, in the style of Krugman<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
One short sentence announcing what is happening, in general, absent of this particular feud. Two sentences stating your opponent's opinion, in a manner that is fair and they they would recognize. A few words stating that they are wrong (or very wrong, or catastrophically wrong, the case being.)</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
A promise of a detailed explanation later, but first, come context.</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
One or two or five paragraphs of necessary historical and philosophical context, as most questions deserving of a detailed response are really deserving of essay-length reflections. But this is the internet, five paragraph will have to do.</div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
Two or three paragraphs articulating your rebuke to your opponent, in light of the historical context. The key here is to help the reader put two and two together -- resist the temptation to lean on any sense of authority. Now is not the time to be the delivery person of the Judgement Inc. Corporation. Present the argument fairly and sternly. </div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
<br /></div>
<div style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">
One line calling your opponent a ditwit or some such. By the time you get here, you've earned it</div>
Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0tag:blogger.com,1999:blog-1594097932719209060.post-53583194360649325522013-09-21T22:36:00.000-04:002013-09-21T22:48:38.793-04:00Health care in America is funded by the government to a greater extent than in Canada (reprise)Little known fact: Health care in America is funded by the government to a greater extend than in Canada. Between Medicaid, Medicare, Military Health Care, and emergency room services for the non-insured or the under-insured, the American government pays <b>US $2,728</b> per person per year for health care.<br />
<br />
In Canada, the government pays only <b>US $1,893</b> per person per year. That's 30% less.<br />
<br />
With that money, the Canadian government manages to cover everyone with world-class quality care. Even though the American government is paying more per head, its money only manages to cover a small fraction of its population, with the rest being left to fend for themselves with private insurance companies. These companies charge higher prices for coverage than even the USA government spends, let alone the Canadian government (about US $8000 per year) and outright refuses to offer their services to 20% of the population.<br />
<br />
This leaves the United States with the largest population in the world without access to health care, and the highest rates of bankruptcy. In the US having a medical emergency often means going bankrupt. Bankruptcies arises whether or not you have private health insurance coverage since private insurances cover so little (when they do offer coverage) that their disbursement are rarely sufficient to avoid bankruptcy. <a href="http://strikedebt.org/medicaldebtreport/">62% of all bankruptcies are caused by medical events</a>.<br />
<br />
The strangest aspect of American health care is the presence of folks who are rabid defenders of the American system, who speak without any awareness of the current system's failings, and without any knowledge of the alternatives.<br />
<br />
The case of death panels angst is particularly poignant, since one keystone pillar of the new health law is to force private insurances to abolish their "Do Not Treat" list -- from 20% (mentioned above) down to near zero. The law:<br />
<ul>
<li>Forbids insurance companies from discriminating based on a disability, or because they were the victim of domestic abuse in the past (yes, insurers really did deny coverage for that)</li>
<li>Says health insurance companies can no longer tell customers that they won't get any more coverage because they have hit a "lifetime limit".</li>
<li>Says insurers can't just drop customers once they get sick.</li>
<li>Forbids "pre-existing conditions" for kids under the age of 19.</li>
</ul>
and on January 1st, 2014,<br />
<ul>
<li>no more refusal of care because of pre-existing condition at all.</li>
</ul>
The law does all this without establishing any new form of government coverage (Medicare, Medicaid, Military health care, and uninsured health care remain largely unchanged.) What list could "death panels" possibly be referring to? Nothing at all, that's what.<br />
<br />
Then there are the claims about the amount of money different governments have to spent, claims that certain numbers ought to be ruinous, yet the arguers never put in the effort needed to look up the numbers. In many anti-Obamacare posts, the key thing to notice are the appearances of the word "handout", which reveal the nature of their conception of the role of government.<br />
<br />
While governments are generally constructed to take care of domains where the private sector does poorly (such as health care -- the specific economic reasons are too long for this post, but are covered in most introduction to economics textbooks, if you are curious). Anti-handout people understand governments principally as a transfer of wealth to receivers of handouts. This attitude is also known as class-war-ism, and is one of the most corrosive forces in modern American politics.<br />
<br />
<a href="http://en.wikipedia.org/wiki/Comparison_of_Canadian_and_American_health_care_systems#Government_involvement">Government Number Source, Wikipedia</a><br />
<br />
For more details on the content of the new Obamacare law, read <a href="http://www.reddit.com/r/explainlikeimfive/comments/vb8vs/eli5_what_exactly_is_obamacare_and_what_did_it/c530lfx">this fantastic post in the fantastic subreddit titled Explain It Like I'm Five</a>.<br />
<br />Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0tag:blogger.com,1999:blog-1594097932719209060.post-41493270779879935462013-06-06T23:41:00.000-04:002013-06-07T12:31:46.208-04:00Scary hypothetical: Your email account just got hackedOuch, your email account just got hacked. Sorry this is happening to you. We live in an age of computer security where the spammers and scammers have the upper hand. Hopefully the wind will turn soon.<br />
<br />
Very possibly, the spam the hacker sent went to all sort of people, not just to your contact. Very possibly they also emailed to a list of targets the spammers have grabbed from around the web, and from other hacks. They merely used your account as a conduit to make their email fly with artificial legitimacy, so they wouldn't trip the recipient's spam filter. That sucks, I know.<br />
<br />
Here's what you need to do, from most urgent first:<br />
<ol>
<li>Change your password at Gmail or Yahoo, or whichever service you used. Hopefully you already did this. Preferably, change your password from a different computer than your usual one: In the worse case, there is an attack virus on your computer watching you enter the password updates. That would be bad.</li>
<li>Change your password on all sites where you have used the same password, or a derivative of the password, or a similar password-generation scheme.</li>
<li>Turn on two-factor authentication on your account. This will be a huge win in securing your account going forward. <a href="http://lifehacker.com/5938565/heres-everywhere-you-should-enable-two+factor-authentication-right-now">Lifehacker describes the feature in details</a>.</li>
<li>Start using <a href="http://keepass.info/">Keepass</a> to generate and store securely a different password for every website you have a password with. Every password will be super random and super long, and thus super secure. <a href="http://blog.gmarceau.qc.ca/2013/04/happy-world-backups-day.html">See my blog post on this topic here</a>.</li>
<li> Do a thorough scan of your computer for viruses and trojans. <a href="http://www.metafilter.com/user/77879">Follow the instructions here.</a> If that seems intimidating, bring your computer to a friendly local computer repair shop.</li>
</ol>
If you find Keepass intimidating, the alternative is to change all your passwords to fresh passwords generated using <a href="http://xkcd.com/936/">XKCD's excellent (and fun!) schema</a>. Then you write them down on a sheet that you keep by your computer. Then make some copies and store them in different secure places, such as where you keep your tax information and what not. <br />
<br />
It might seems counterintuitive, but these days, physical security is vastly stronger than online security, so while this practice isn't exactly as strong as using Keepass, and not as convenient, it is sufficiently strong for most purposes. Petty thieves are just not known for rooting around people's house for printed password lists, and if they found the list they wouldn't know what to do with it.<br />
<br />
When choosing passwords, adding a punctuation mark doesn't nearly work as well as it used to. The reasons are two-folds:<br />
<ol>
<li>Most hacks don't actually involve breaking the password. They get in by defeating the security of either the website itself, or that of your computer, or through a phishing email. That's where two-factors authentication really shines. http://en.wikipedia.org/wiki/Phishing</li>
<li>Hacks made by breaking passwords involve a website being hacked and its users password list getting stolen. The thief then cracks as many passwords as they can, offline, using massing supercomputers rented by the hour. They then proceed to attempt to login into other websites using those credentials. You can read the story the devilish effectiveness of this technique in <a href="http://arstechnica.com/security/2013/05/how-crackers-make-minced-meat-out-of-your-passwords/">this fantastic long-form article at the always top-notch publication Ars Technica</a>. </li>
</ol>
Thus my recommendations in support of two-factor auth and Keepass.<br />
<br />
And in case you are asking, yes, Macs are just as vulnerable. Now that everything has moved online, it doesn't matter much which kind of machine you are running. The more prominent attack vectors I was describing, breaking into the website and phishing, don't involve your machine at all. An attack into your laptop most likely would involve your browser, and those are largely the same across platforms. I know plenty of Macs who have been hacked, and in some ways, getting your Mac hacked is worse, since Apple controls the machine so deeply. A salient story here is that of the famous technology reporter at Wired, <a href="http://www.wired.com/gadgetlab/2012/08/apple-amazon-mat-honan-hacking/">Mat Honan, who had his Mac hacked and destroyed remotely</a>.<br />
<div>
<br /></div>
<div>
<div>
To end on an up-note, I do feel the wind is turning. This new two-factor authentication feature many websites have began implementing is a huge breakthrough for everyone's security online. As two-factor become popular and widely used, I have great hope that we will see a stunning decrease in the number of people affected by hacks and hackers. Plus, at this point we can more or less trust that hardly no one clicks on the links sent by these attacks, which demonstrate how far we've come along educating each other about this new topic of online computer security that was imposed onto everyone a few years ago. This too, deserves to be celebrated and it bodes well for the future.<br />
<br />
Good luck. </div>
</div>
Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0tag:blogger.com,1999:blog-1594097932719209060.post-25294817235399147182013-04-01T00:09:00.002-04:002013-04-01T08:55:02.766-04:00Happy World Backup Day!Today I am grateful that my electronic devices remembers all those pesky little wonderful things for me – such as my wedding pictures and what not.<br />
<br />
Would like to invite everyone to check and make sure that all the files are secured and properly backed up at least once a year. And what better day for this than March 31, the day before the Internet goes silly.<br />
<br />
In that spirit, I would like to share my very own backuping recipe.<br />
<br />
Our two Windows laptops both run <a href="http://dropbox.com/">Dropbox </a>in order to protect the most important files. One laptop runs on the free plan, the other we pay $8 per month for some extra space. Some of the larger files are are impractical to backup at Dropbox, specifically our videos and raw-format pictures. For these, we have a USB hard drive plugged into a <a href="http://www.amazon.com/gp/offer-listing/B00387G6R8/ref=as_li_ss_til?tag=gmarceauqcca-20&camp=213381&creative=390973&linkCode=am1&creativeASIN=B00387G6R8&adid=1H5DMW5CY99DKD8SFME1&&ref-refURL=http%3A%2F%2Frcm.amazon.com%2Fe%2Fcm%3Flt1%3D_blank%26bc1%3D000000%26IS2%3D1%26bg1%3DFFFFFF%26fc1%3D000000%26lc1%3D0000FF%26t%3Dgmarceauqcca-20%26o%3D1%26p%3D8%26l%3Das4%26m%3Damazon%26f%3Difr%26ref%3Dss_til%26asins%3DB00387G6R8">Asus RT-n16 router</a> which acts as a small file server. This drive is the destination for two processes. First, the laptops run the free software <a href="http://duplicati.org/">Duplicati.org</a> which copies recently changed files to that hard drive over our home Wi-Fi every night. And second, we use the free version of the program <a href="http://www.macrium.com/reflectfree.aspx">Macrium Reflect</a> to make for images of our hard drives every so often. This way if a laptop gets stolen or damaged, we don't have to reinstall everything from scratch.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://img.youtube.com/vi/EL_g0tyaIeE/0.jpg" height="266" width="320"><param name="movie" value="http://youtube.googleapis.com/v/EL_g0tyaIeE&source=uds" /><param name="bgcolor" value="#FFFFFF" /><param name="allowFullScreen" value="true" /><embed width="320" height="266" src="http://youtube.googleapis.com/v/EL_g0tyaIeE&source=uds" type="application/x-shockwave-flash" allowfullscreen="true"></embed></object></div>
<br />
<div style="text-align: center;">
<i>The story of how Pixar almost lost Toy Story 2</i></div>
<br />
That little hard drive could the stolen at once, so I wouldn't rely on it without some form of off-site backup. For this, I installed a copy of the open source software <a href="http://www.polarcloud.com/tomato">Tomato</a> on the Asus router which lets me run small Linux programs on it. I have a script that copies the file from the hard drive to <a href="http://aws.amazon.com/s3/">Amazon S3</a> file storage service which offers some of the most inexpensive hard drive space rentals available.<br />
<br />
The logic here is, our laptops are not <i>ON</i> at home for as long as you might imagine. In true New York style, we move about town a lot and spend copious amount of time slipping overpriced coffee, using various coffee shop's free Wi-Fi. It would seems impolite to backup large files over their connection. Better to backup to the small drive at home, over the super-fast 802.11n connection, and let the daemon process running on the Asus router upload at leisure throughout the day.<br />
<br />
All our hard drives are encrypted using the open source program <a href="http://www.truecrypt.org/">TrueCrypt</a>, to protect our privacy and identity in case of theft of the devices. All our passwords are unique, randomly generated, and stored encrypted in the open source program <a href="http://keepass.info/">Keepass Professional</a>. Keepass's encrypted file itself is in our Dropbox folder, this way it gets backuped in turn.<br />
<br />
Finally we upload our music to Google's music locker, at <a href="http://music.google.com/">music.google.com/</a>, which is free up to 20,000 songs<br />
<br />
I must say, this setup is the best I've felt about our backup setup in years (knock on wood). All our data eventually makes it to off-site storage, and all the most important steps are automatic.<br />
<br />
<div style="text-align: center;">
<a href="http://www.worldbackupday.com/">http://www.worldbackupday.com</a></div>
<br />
What is your backuping recipe?<br />
<br />Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0tag:blogger.com,1999:blog-1594097932719209060.post-51606499213908593692012-04-23T22:24:00.000-04:002012-04-25T22:12:35.755-04:00Dear UofCS, it's really too late to be talking about light bulbs<br />
<div class="gmail_extra" style="font-family: arial; font-size: small;">
Union of Concerned Scientists asked:</div>
<div class="gmail_extra" style="font-family: arial; font-size: small;">
<br /></div>
<div class="gmail_extra" style="font-family: arial; font-size: small;">
<a href="http://www.coolersmarter.org/">> Choose the one that best describes how you spend your free time:</a></div>
<div class="gmail_extra" style="font-family: arial; font-size: small;">
<a href="http://action.ucsusa.org/site/R?i=mQr9jkD3j6NuXfpdgmZJSg" style="background-color: white; color: #1155cc; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; text-align: -webkit-left;" target="_blank"><img alt="Unchecked" border="0" height="12" src="http://action.ucsusa.org/images/content/pagebuilder/Unchecked-radio.jpg" width="12" /></a><span style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; text-align: -webkit-left;"> Working in my garden and tending to my lawn.</span><br />
<a href="http://action.ucsusa.org/site/R?i=mQr9jkD3j6NuXfpdgmZJSg" style="background-color: white; color: #1155cc; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; text-align: -webkit-left;" target="_blank"><img alt="Unchecked" border="0" height="12" src="http://action.ucsusa.org/images/content/pagebuilder/Unchecked-radio.jpg" width="12" /></a><span style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; text-align: -webkit-left;"> Lying on a beach or teeing it up on the golf course.</span><br />
<a href="http://action.ucsusa.org/site/R?i=zmEtGlOxftxflmnBWFEW3A" style="background-color: white; color: #1155cc; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; text-align: -webkit-left;" target="_blank"><img alt="Unchecked" border="0" height="12" src="http://action.ucsusa.org/images/content/pagebuilder/Unchecked-radio.jpg" width="12" /></a><span style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; text-align: -webkit-left;"> Playing in the snow or reading a book by the fireplace.</span><br />
<a href="http://action.ucsusa.org/site/R?i=RcSiGKu4_Q-oq5HWURezeg" style="background-color: white; color: #1155cc; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; text-align: -webkit-left;" target="_blank"><img alt="Unchecked" border="0" height="12" src="http://action.ucsusa.org/images/content/pagebuilder/Unchecked-radio.jpg" width="12" /></a><span style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; text-align: -webkit-left;"> Playing video games or watching the latest blockbuster.</span><br />
<a href="http://action.ucsusa.org/site/R?i=uhk03nTuLoAcmtSSOqE9xA" style="background-color: white; color: #1155cc; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; text-align: -webkit-left;" target="_blank"><img alt="Unchecked" border="0" height="12" src="http://action.ucsusa.org/images/content/pagebuilder/Unchecked-radio.jpg" width="12" /></a><span style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; text-align: -webkit-left;"> Enjoying a book on my e-reader.</span>
</div>
<div class="gmail_extra" style="font-family: arial; font-size: small;">
<span style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 19px; text-align: -webkit-left;"><br /></span></div>
<div class="gmail_extra" style="font-family: arial; font-size: small;">
Hi UofCS, I love your work. However, this particular question misses the mark.</div>
<div class="gmail_extra" style="font-family: arial; font-size: small;">
<br /></div>
<div class="gmail_extra" style="font-family: arial; font-size: small;">
You see, as I matter of fact, I do not spend my free time in any of the activities you have suggested. I spend my free time advocating for bold climate change mitigation policies. I spend my free time teaching the science of global warming, or writing articles describing the science of global warming that draw hundreds of thousands of views. Such as this one:</div>
<div class="gmail_extra" style="font-family: arial; font-size: small;">
<br /></div>
<div class="gmail_extra" style="font-family: arial; font-size: small;">
<a href="http://www.reddit.com/r/askscience/comments/reo35/the_discussion_of_climate_change_is_so_poisoned/c45ciej">http://www.reddit.com/r/askscience/comments/reo35/the_discussion_of_climate_change_is_so_poisoned/c45ciej</a></div>
<div class="gmail_extra" style="font-family: arial; font-size: small;">
<br /></div>
<div class="gmail_extra" style="font-family: arial; font-size: small;">
Your current messaging suggests that this problem can be solved via individual actions. You and I both know that is not the case.</div>
<div class="gmail_extra" style="font-family: arial; font-size: small;">
<br /></div>
<div class="gmail_extra" style="font-family: arial; font-size: small;">
China will build enough coal-fired power plants this year to relegate all our lightbulb changes to a footnote. There are powerful interests at work who are bent on burning every pound of fossil fuel available on this great Earth, in the name of their own profit. Turning down our living room's thermostat will do naught to stop them. We have to consider the stark reality and ask, what will it take to stop these people from destroying humanity, from destroying themselves?</div>
<div class="gmail_extra" style="font-family: arial; font-size: small;">
<br /></div>
<div class="gmail_extra" style="font-family: arial; font-size: small;">
We need to teach the science of global warming which such conviction in our voice, and with such unbearable clarity, that our fellow Americans will join us in Washington the next time. They will have to courageously stand to be arrested in the mist civil disobedience actions, along with me, my friends, and McKibben and Hansen.</div>
<div class="gmail_extra" style="font-family: arial; font-size: small;">
<br /></div>
<div class="gmail_extra" style="font-family: arial; font-size: small;">
How does talking about light-bulbs-talks helps this? I don't think it does.</div>
<div class="gmail_extra" style="font-family: arial; font-size: small;">
<br /></div>
<div class="gmail_extra" style="font-family: arial; font-size: small;">
I would invite you to consider pivoting to a different messaging frame for your next cycle.</div>
<div class="gmail_extra" style="font-family: arial; font-size: small;">
<br /></div>
<div class="gmail_extra" style="font-family: arial; font-size: small;">
Teach people the science. Teach them the true extent of the dangers of the A1B scenario we are tracking at the moment. Then teach people how to teach the science and find them stages and audiences. Teach them how to defend those who teach against the brutal slanderous attacks of our opponents. But above all, teach them that if we are to you get out of this crisis, they will have to be more implicated in the politics of their country than a mere vote every two years.</div>Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0tag:blogger.com,1999:blog-1594097932719209060.post-11643885402698113712012-04-18T14:35:00.000-04:002012-04-18T14:36:08.893-04:00Me, Dragon NaturallySpeaking at 70 WPM<br />
This is a video of me dictating the text of this blog post.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/h8YG_3ue_Nc/0.jpg" height="266" width="320"><param name="movie" value="http://www.youtube.com/v/h8YG_3ue_Nc?version=3&f=user_uploads&c=google-webdrive-0&app=youtube_gdata" />
<param name="bgcolor" value="#FFFFFF" />
<embed width="320" height="266" src="http://www.youtube.com/v/h8YG_3ue_Nc?version=3&f=user_uploads&c=google-webdrive-0&app=youtube_gdata" type="application/x-shockwave-flash"></embed></object></div>
<br />
I posted a longform article on how to use Dragon on my blog, which you can find here:<br />
<br />
<div style="text-align: center;">
<a href="http://blog.gmarceau.qc.ca/2010/09/dictate-to-your-computer-like-pro.html">http://blog.gmarceau.qc.ca/2010/09/dictate-to-your-computer-like-pro.html</a></div>
<br />
The short story is, modern dictation software works out-of-the-box. Forget about training, there is no training anymore.<br />
<br />
With a fast CPU, lots of memory, a solid-state hard drive, a good microphone, and good pronunciation, you can effortlessly hit 100 words per minutes, or more if you happen to be the kind of person who talks quickly. I even know a number of people who have discovered themselves as authors thanks to the productivity-boost of dictation.<br />
<br />
It does not take a crazy machine. I have a HP EliteBook, a i7 M620 2.67 GHz CPU, four gigs of RAM, and a Intel SSD. Perhaps the most important piece is the microphone. I used to have a Sennheiser headset microphone, which was great at cutting off the voices of people talking around me in the office. But then I switched to a self-standing USB microphone because I would rather not have something on my head all day. <a href="http://j.mp/HQdSpP">You can find it on Amazon</a>.<br />
<br />
The point is, the dictation is great.<br />
<div>
<br /></div>
<div>
<div>
In the video, I'm giving you a sense of how quickly I correct the recognition mistakes as I go along. I don't bother with "scratch that" or Dragon's other correction commands. You can see how I use the mouse liberally and I jump in with the keyboard when I know Dragon won't hear the word I'm about to type. The only words Dragon did not know about were i7, M620, and EliteBook (which I added to its dictionary beforehand). Everything else is built-in.</div>
<br />
<div>
After dictating, I quickly scan the text correcting the mistakes, missing one ("it" instead of "hit").</div>
<div>
<br /></div>
<div>
All-in-all, it took 3 minutes to dictate about 200 words, including all the fiddling, which adds up to 66 WPM.</div>
</div>Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0tag:blogger.com,1999:blog-1594097932719209060.post-39916106961543985832012-04-12T23:11:00.000-04:002012-04-12T23:11:44.438-04:00Here's what a real liberal solution looks like.<br />
Create a nation-wide network of government-run daycare. This cost $100 million. Net result, lots of competent, talented women who wished to get a job but couldn't because they couldn't afford daycare now get jobs. These women pay $147 million in taxes from their new job, which pays back the $100 million the government started with, and let it lower taxes by $47 millions. Everybody wins.<br />
<br />
A Libertarian would never think of trying this.<br />
<br />
But in Quebec, <a href="http://www.radio-canada.ca/nouvelles/Economie/2012/04/12/016-garderie-subventionnees-rentables.shtml">it's the first thing you try</a>.Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0tag:blogger.com,1999:blog-1594097932719209060.post-73982614423623970502012-02-11T02:35:00.001-05:002012-02-11T14:04:13.257-05:00So, you want to learn how to program and build a websiteGeneric advice for non-technical people who are contemplating starting a website project. It's generic advice, but it's important.<br />
<br />
There is a level of complexity that cannot be built without learning about the technology, not at any price. Technology is a funny thing, there is a point where throwing money at the problem cannot substitute for actually knowing the technology. I would say in the last 10 years, this effect has become even more powerful than it was before.<br />
<br />
It's pretty common for people to try to start technology-based businesses by hiring programmers, but that fails because if you don't understand the technology, you can't control the programmer's work. Programming is a peculiar craft. There are no discipline where the information asymmetry is larger. When a programmer tells you "I promise I'll be ready next week", you have no way to verify whatsoever, unless you have significant technology training yourself.<br />
<br />
If you have trusted technology friends on board, then you are good to go. So long as you don't need to hire programmers, you're golden.<br />
<br />
But look at how many people it took <a href="http://www.kickstarter.com/team">to build kickstarter</a>. I guarantee you most people on this page are elite technologists. Building website gets real hard, real quick, knock-your-socks-off quick even. Or look at <a href="http://padmapper.com/">Padmapper</a>. At first view it might appear to be a rather simple website. But the guy who built it is MIT Computer Science '07. <a href="http://www.linkedin.com/profile/view?id=16194074&authType=OUT_OF_NETWORK&authToken=eGhW&locale=en_US&srchid=96af5cec-700d-490c-a2b0-dd5616099774-0&srchindex=2&srchtotal=2&goback=%2Efps_PBCK_padmapper_*1_*1_*1_*1_*1_*1_*2_*1_Y_*1_*1_*1_false_1_R_*1_*51_*1_*51_true_*2_*2_*2_*2_*2_*2_*2_*2_*2_*2_*2_*2_*2_*2_*2_*2_*2_*2_*2_*2_*2&pvs=ps&trk=pp_profile_name_link">He lists</a> as programming languages: <i>Objective-C (iPhone/iPod Touch), SQL, PHP, Ruby on Rails, Javascript, JQuery, Java, C, HTML, CSS, Google Maps (see PadMapper), Microcontrollers</i>. Again, not someone who spent the last week reading a web page on how to program. We're talking about top-of-top-line, world class programmers. These people cost $100'000 to $200'000 a year, but you probably can't hire them because they are too busy starting their own thing, and even if they weren't, people like that don't work for people who don't know tech. That's how hard this stuff gets.<br />
<br />
There are three paths forward for non-techies:<br />
<ol>
<li>Associate yourself with trusted techie friends who believe in you and will work alongside of you (you can't be their boss.)</li>
<li>Start brainstorming ideas for businesses that aren't so tech-heavy.</li>
<li>Learn a lot of tech.</li>
</ol>
And of course, the more of #3 you do, the more techie your #2 can be. Otherwise, <a href="http://wordpress.org/">Wordpress</a> goes a long way, even in the hand of someone with limited tech knowledge. And if you take a short course on web technologies, it should empower you to make Wordpress sing with <a href="http://wordpress.org/showcase/tag/non-profit/">all its got</a>.<br />
<br />
The good news is, as a 2nd reason for why programming is a peculiar craft, it is actually possible to learn how to program at a professional-level without taking classes. But not everyone can pull it off. So, if you are going to take a course, get the most out of your money. Which means, try to learn as much programming as possible on your own before starting the course.<br />
<br />
Good resources:<br />
<ul>
<li><a href="http://tryruby.org/">Try Ruby</a></li>
<li><a href="http://www.codecademy.com/">Code Academy</a></li>
<li><a href="http://www.quora.com/How-can-I-learn-to-program-in-Python">How can I learn to program in Python (at Quora)</a></li>
<li><a href="http://www.khanacademy.org/?video=introduction-to-programs-data-types-and-variables#computer-science">Khan Academy's programming course</a></li>
</ul>
There is no need to spread wide. Pick one teacher (a single book, etc) and follow them for a while. The first task in front of you is to learn how to program. Once you know how to program, you can pick up 10-20 languages easily. Learning a new programming language is super easy, learning how to program is hard.<br />
<br />
If you are in for the long term, and you want a principled, in-depth, Computer-Science-y approach, then learn with Racket as a starter language, then transfer to a popular pro language.<br />
<ul>
<li> This is <a href="http://www.ccs.neu.edu/home/matthias/HtDP2e/">the Racket book</a>, and this is <a href="http://www.wescheme.org/">WeScheme</a>, the tool to write your programs with. </li>
</ul>
<div>
<br /></div>
<div>
<br /></div>Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0tag:blogger.com,1999:blog-1594097932719209060.post-20505269130294844682012-01-15T17:35:00.000-05:002012-01-15T17:39:19.742-05:00Instant run-away-from-this voting systemThe rumor is that the Liberal Party of Canada has just voted in caucus to support a switch to <em><a class=" imgScanned" href="http://j.mp/xN2Wcf" rel="nofollow" style="color: #336699; text-decoration: none;">instant runoff voting</a> (IRV)</em>. With IRV, you rank the candidates. Once all the votes are in, candidates are eliminated one-by-one from the bottom, until someone wins.<br />
That's good news, IRV is a vast improvement over first-past-the-post. Except it is not the best system. It is too complicated -- enough that the UK's tentative to switch to IRV failed, in part because the pro camp couldn't explain it --, it has some trouble spots, and a simpler system performs better.<br />
<div style="margin-bottom: 5px; margin-top: 5px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">
Check out this <a href="http://j.mp/zQVBMu" rel="nofollow" style="color: #336699; text-decoration: none;">fantastic visualization of the differences between the different voting systems</a>. IRV, like first-past-the-post, will sometimes elect someone nobody really wants.</div>
<table align="center" cellpadding="20" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://j.mp/zQVBMu" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://zesty.ca/voting/sim/12,28_85,70_39,28_97,14_app.png" /></a></td><td style="text-align: center;"><a href="http://j.mp/zQVBMu" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://zesty.ca/voting/sim/12,28_85,70_39,28_97,14_irv.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Approval Voting</td>
<td class="tr-caption" style="text-align: center;">Instant Runoff Voting</td></tr>
</tbody></table>
<div style="margin-bottom: 5px; margin-top: 5px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">
In the images, the dots are candidates, and the colored regions around the dot label the range of pooling results which leads to that candidate winning. Under IRV (right-most image), the red, the yellow and the blue candidates all intrude on pooling space that ought to belong to the green candidate.<br />
A better alternative is <em><a class=" imgScanned" href="http://j.mp/A443kj" rel="nofollow" style="color: #336699; text-decoration: none;">approval voting</a></em>: people vote for as many candidates as they want, then the candidates with the most votes wins. It is simpler at the pooling box -- no need to tediously order the candidates -- and vastly simpler to explain.<br />
Here's how things went when I found myself describing these two voting systems (at different times, in different working groups):<br />
<br /></div>
<hr style="background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: small; margin-bottom: 0px;" />
<h2 style="background-color: white; color: #336699; font-family: verdana, arial, helvetica, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">
Approval Voting</h2>
<div style="background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: small; margin-bottom: 5px; margin-top: 5px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">
-- Vote for however many candidates you want. You can vote for one, for two, for some of them, or for all of them. However you want. The person with the most votes wins.</div>
<div style="background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: small; margin-bottom: 5px; margin-top: 5px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">
-- Ok.</div>
<div style="background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: small; margin-bottom: 5px; margin-top: 5px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">
<br /></div>
<hr style="background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: small; margin-bottom: 0px;" />
<h2 style="background-color: white; color: #336699; font-family: verdana, arial, helvetica, sans-serif; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">
Instant Runoff Voting</h2>
<div style="background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: small; margin-bottom: 5px; margin-top: 5px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">
-- Don't worry what IRV means, just list your three favorites candidates. Spot 1 is for your most-favorite candidate (don't be confused, it <b>doesn't</b> mean 'Spot 1 receives 1, points Spot 3 receives 3 points.') When all the votes are in, your vote will go to your #1 candidates. If s/he doesn't win, s/he's out of the race, then we count again, but your vote now goes to your #2 candidates. And so forth, until there is only one candidate left. That person is the winner.</div>
<div style="background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: small; margin-bottom: 5px; margin-top: 5px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">
-- What do you mean "And so forth?"</div>
<div style="background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: small; margin-bottom: 5px; margin-top: 5px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">
-- I mean it's an algorithm and we had a programmer code it into a computer because the old people who volunteer at poling places sometime don't understand it.</div>
<div style="background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: small; margin-bottom: 5px; margin-top: 5px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;">
-- <em>confused look.</em> I don't understand. Can you explain it again?</div>
<hr style="background-color: white; font-family: verdana, arial, helvetica, sans-serif; font-size: small; margin-bottom: 0px;" />
<br />
That's why I would rather advocate for approval voting. IRV is near impossible to explain to a non-algorithmically-inclined mind. Its opaque name echoes its complicated procedure. And it for all its trouble, it has worse mathematical properties than approval voting.Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0tag:blogger.com,1999:blog-1594097932719209060.post-32771824587810218202012-01-10T18:37:00.000-05:002012-01-11T18:28:44.464-05:00How to turn a Python loop into a Clojure 'reduce'<i>This is <a href="http://stackoverflow.com/a/8812027/35902">my answer</a> to this <a href="http://stackoverflow.com/questions/8720073/idiomatic-clojure-equivalent-of-this-python-code/">Stack Overflow question</a>.</i><br />
<br />
<blockquote class="tr_bq">
<span style="background-color: white; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; text-align: left;">I wrote a simple stack-based virtual machine in Python, and now I'm trying to rewrite it in Clojure, which is proving difficult as I don't have much experience with Lisp.</span><span style="background-color: white; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; text-align: left;"> </span><a href="http://pastebin.com/SAcnAxti" rel="nofollow" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4a6b82; cursor: pointer; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; text-decoration: none; vertical-align: baseline;">This Python snippet</a><span style="background-color: white; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; text-align: left;"> </span><span style="background-color: white; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; text-align: left;">processes the bytecode, which is represented as a list of tuples like so:</span></blockquote>
<br />
<blockquote class="tr_bq">
<span style="background-color: white; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; text-align: left;"><br /></span><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[</span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="str" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">"label"</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">,</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="str" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">"entry"</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">,
</span></code><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="str" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">"load"</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">,</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="lit" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">0</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">,
</span></code><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="str" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">"load"</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">,</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="lit" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">1</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">,
</span></code><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="str" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">"add"</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">,</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">,
</span></code><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="str" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">"store"</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">,</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="lit" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">0</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">]</span></code></blockquote>
<br />
<blockquote class="tr_bq">
<span style="font-family: 'Courier New', Courier, monospace;">pc <span class="sy0" style="color: #66cc66;">=</span> <span class="nu0" style="color: orangered;">0</span></span>
<br />
<span style="font-family: 'Courier New', Courier, monospace;"><span class="kw1" style="color: #ff7700; font-weight: bold;">for</span> inst <span class="kw1" style="color: #ff7700; font-weight: bold;">in</span> <span class="kw3" style="color: crimson;">code</span>:</span>
<br />
<span style="font-family: 'Courier New', Courier, monospace;"> <span class="kw1" style="color: #ff7700; font-weight: bold;">if</span> inst<span class="br0" style="color: black;">[</span><span class="nu0" style="color: orangered;">0</span><span class="br0" style="color: black;">]</span> <span class="sy0" style="color: #66cc66;">==</span> <span class="st0" style="color: darkslateblue;">"label"</span>:</span>
<br />
<span style="font-family: 'Courier New', Courier, monospace;"> label <span class="sy0" style="color: #66cc66;">=</span> inst<span class="br0" style="color: black;">[</span><span class="nu0" style="color: orangered;">1</span><span class="br0" style="color: black;">]</span></span>
<br />
<span style="font-family: 'Courier New', Courier, monospace;"> <span class="kw2" style="color: green;">self</span>.<span class="me1" style="color: black;">labels</span><span class="br0" style="color: black;">[</span>label<span class="br0" style="color: black;">]</span> <span class="sy0" style="color: #66cc66;">=</span> pc</span>
<br />
<span style="font-family: 'Courier New', Courier, monospace;"> <span class="kw1" style="color: #ff7700; font-weight: bold;">else</span>:</span>
<br />
<span style="font-family: 'Courier New', Courier, monospace;"> <span class="kw2" style="color: green;">self</span>.<span class="kw3" style="color: crimson;">code</span>.<span class="me1" style="color: black;">insert</span><span class="br0" style="color: black;">(</span>pc<span class="sy0" style="color: #66cc66;">,</span> inst<span class="br0" style="color: black;">)</span></span>
<br />
<span style="font-family: 'Courier New', Courier, monospace;"> pc +<span class="sy0" style="color: #66cc66;">=</span> <span class="nu0" style="color: orangered;">1</span></span></blockquote>
<br />
<br />
<div>
<div style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;">
I'm going to give you a general solution for these kind of problems.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;">
Most loops can be done effortlessly with a strait forward <em style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">map</em>, <em style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">filter</em> or <em style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">reduce</em>, and if your data structure is recursive, naturally the loop will be a recursion.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;">
Your loop, however, is a different kind of loop. Your loop accumulates a result -- which would suggests using <em style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">reduce</em> -- but the loop also carries a local variable along (<em style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">pc</em>), so it's not a strait reduce.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;">
It's a reasonably common kind of loop. If this was <a href="http://racket-lang.org/" rel="nofollow" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4a6b82; cursor: pointer; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;">Racket</a>, I would use <a href="http://planet.plt-scheme.org/package-source/untyped/unlib.plt/3/24/planet-docs/unlib/for.html#%28form._%28%28planet._for..ss._%28untyped._unlib..plt._3._23%29%29._for/fold1%29%29" rel="nofollow" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #4a6b82; cursor: pointer; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; vertical-align: baseline;">for/fold1</a>, but since it's not, we will have to shoehorn your loop onto <em style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">reduce</em>.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;">
Let's define a function called <em style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">load</em> which returns two things, the processed code and the processed labels. I will also use a helper function called <em style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">is-label?</em>.</div>
<pre class="lang-lisp prettyprint" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; line-height: 18px; margin-bottom: 10px; max-height: 600px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; text-align: left; vertical-align: baseline; width: auto;"><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">defn load </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">asm</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">]</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">defn is-label? </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">x</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">]</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">=</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">first x</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="str" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">:label</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">))</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">{:</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">code </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><<<</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> CODE GOES HERE </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">>>></span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">:</span><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">labels</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><<<</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> CODE GOES HERE </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">>>></span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">}</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span></code></pre>
<div style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;">
Right now, your loop does two things, it processes the code, and it processes the labels. As much as possible, I try to keep loops to a single task. It makes them easier to understand, and it often reveals opportunities for using the simpler loop constructs.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;">
To get the code, we simply need to remove the labels. That's a call to <em style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">filter</em>.</div>
<pre class="lang-lisp prettyprint" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; line-height: 18px; margin-bottom: 10px; max-height: 600px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; text-align: left; vertical-align: baseline; width: auto;"><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">{:</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">code </span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">filter </span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">complement is-label?</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> asm</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">:</span><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">labels</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><<<</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> CODE GOES HERE </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">>>></span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">}</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span></code></pre>
<div style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;">
Reduce normally has only one accumulator, but your loop needs two: the result, and the local variable<em style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">pc</em>. I will package these two into a vector which will be immediately deconstructed by the body of the loop. The two slots of the vector will be my two local variables.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;">
The initial values for these two variables appear as the 2nd argument to <em style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">reduce</em>.</div>
<pre class="lang-lisp prettyprint" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; line-height: 18px; margin-bottom: 10px; max-height: 600px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; text-align: left; vertical-align: baseline; width: auto;"><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">first
</span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">reduce
</span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">fn </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[[</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">result</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">,</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> pc</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">]</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> inst</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">]</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><<</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> MORE CODE </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">>></span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[{}</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="lit" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">0</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">]</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> asm</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">))</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span></code></pre>
<div style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;">
(Note how the initial values for the variables are placed far from their declaration. If the body is long this can be hard to read. That's the problem Racket's <em style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">for/fold1</em> solves.)</div>
<div style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;">
Once <em style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">reduce</em> returns, I call <em style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">first</em> to discard to the local variable <em style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">pc</em> and keep just the result.</div>
<div style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;">
Filling the body of the loop is straight forward. If the instruction is a label, <em style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">assoc</em> into the result, otherwise increase <em style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">pc</em> by one. In either case, I construct a vector containing new values for all the local variables.</div>
<pre class="lang-lisp prettyprint" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; line-height: 18px; margin-bottom: 10px; max-height: 600px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; text-align: left; vertical-align: baseline; width: auto;"><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">fn </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[[</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">result</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">,</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> pc</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">]</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">_ arg </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">:</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">as inst</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">]]</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">if</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">is-label? inst</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[</span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">assoc result arg pc</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> pc</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">]</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">result </span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">inc pc</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">]</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">))</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span></code></pre>
<div style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; clear: both; font-family: Arial, 'Liberation Sans', 'DejaVu Sans', sans-serif; font-size: 14px; line-height: 18px; margin-bottom: 1em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline; word-wrap: break-word;">
This technique can be used to convert any accumulator-with-locals loop into a <em style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">reduce</em>. Here's the full code.</div>
<pre class="lang-lisp prettyprint" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; line-height: 18px; margin-bottom: 10px; max-height: 600px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; text-align: left; vertical-align: baseline; width: auto;"><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">defn load </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">asm</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">]</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">defn is-label? </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">x</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">]</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">=</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">first x</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="str" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">:label</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">))</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">{:</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">code </span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">filter </span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">complement is-label?</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> asm</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">:</span><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">labels</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">first
</span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">reduce
</span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">fn </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[[</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">result</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">,</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> pc</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">]</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">_ arg </span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">:</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">as inst</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">]]</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="kwd" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: darkblue; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">if</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">is-label? inst</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[</span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">assoc result arg pc</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> pc</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">]</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">result </span><span class="opn" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">(</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">inc pc</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">]</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">))</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">
</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">[{}</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> </span><span class="lit" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: maroon; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">0</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">]</span><span class="pln" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"> asm</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">))</span><span class="pun" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">}</span><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;">)</span></code></pre>
<pre class="lang-lisp prettyprint" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 10px; max-height: 600px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; text-align: left; vertical-align: baseline; width: auto;"><code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span style="font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif;"><span style="font-size: 14px; line-height: 18px;">(println
(load
[[:label :entry]
[:load 0]
[:load 1]
[:label :exit]
[:add]
[:store 0]]))
</span></span></span></code></pre>
</div>
<div style="text-align: left;">
<code style="background-attachment: initial; background-clip: initial; background-color: #eeeeee; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><span class="clo" style="background-attachment: initial; background-clip: initial; background-color: transparent; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; vertical-align: baseline;"><br /></span></code></div>Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0tag:blogger.com,1999:blog-1594097932719209060.post-58536830108457359972011-09-27T12:09:00.000-04:002011-09-27T12:13:40.887-04:00President Obama Finally Calling Out the Deniers<span class="Apple-style-span" style="background-color: #f7f7f8;"></span><br />
<br />Obama finally called out the anti-science position of the GOP candidates:<br /><blockquote>
“Has anybody been watching the debates lately? You’ve got a governor whose state is on fire denying climate change. It’s true. You’ve got audiences cheering at the prospect of somebody dying because they don’t have health care and booing a service member in Iraq because they’re gay.”</blockquote>
<br />People who would like to go beyond soundbites, and go see actual science of global warming being done can read <a href="http://j.mp/nvTOT8">John Nielsen-Gammon (American meteorologist and climatologist</a>)'s <a href="http://j.mp/o7CxLp">Analyses of the Impact of Global Warming on the Texas Drought</a>.<br />
<blockquote style="border-left-color: rgb(51, 102, 153); border-left-style: solid; border-left-width: 2px; padding-left: 6px; ">[after long discussion of the climate science...]<br /><br />This record-setting summer was 5.4 F above average. The lack of precipitation accounts for 4.0 F, greenhouse gases global warming [edited 9/11/11] accounts for another 0.9 F, and the Atlantic Multidecadal Oscillation (La Niña and friends) accounts for another 0.3 F.<br /><br />Does an extra degree or degree and a half matter? No question it made it a bit more unpleasant. For farmers and ranchers, it made it a little bit harder for plants to survive, it made soils dry out faster, and it made stock tanks dry up much quicker because cattle needed more water at the same time water was evaporating from the tanks at a faster rate. The same applies to reservoirs: greater heat means less water making it all the way to the reservoir, water evaporating faster from the reservoir, and greater demands for water from the reservoir.<br /><br />For wildfire, it made the grasses and trees a bit drier and killed more trees than would otherwise have died. It thus made fires more likely to start and allowed them to spread more rapidly. Presumably some fires would not have started at all, but we have no way of knowing which ones.</blockquote><br />In other words, one-fifth of the tragedy was caused by the this country's government's and the world's government's failure to stop burning coal, oil, and gas.<br /><br />People have already started to die of global warming. And it's going to get worse before it gets better.Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0tag:blogger.com,1999:blog-1594097932719209060.post-18189451612822336622011-09-25T19:27:00.004-04:002011-09-25T19:59:20.649-04:00Simon Johnson, chief economist at the IMF, and the Wall St protestsOne thing that truly unexpected thing about <a href="http://j.mp/q9hLT5">the Occupy Wall Street protest</a> is that it finds itself on the same side as the IMF.<br />
<br />
<br />
The IMF is the International Monetary Fund. They are well known for their work coordinating last-resorts loans to bankrupted countries. The IMF has frequently <a href="http://en.wikipedia.org/wiki/Imf#Criticism">come under severe criticism</a> from social justice groups, since their loans are always attached to strict conditions on the country's policies. It's always a loss of national sovereignty, and people resent that, and the demands often seem to be set against the interest of the people, such as forcing them into mono cultures (in the name of specialization and market efficiency,) which leaves farmers vulnerable to pest epidemics.<br />
<br />
<br />
Simon Johnson was the <a href="http://j.mp/osILJC">chief economist at the IMF until 2008</a>. He wrote a very nice <a href="http://j.mp/ooulJr">Op-ed in The Atlantic</a> describing how the United States' economic ills are very much of the same nature as that of the 3rd world countries they restructure all the time.<br />
<br />
The summary of his thesis is that, in the absence of enough watchfulness on the part of the people, over time the finance industry eventually succeeds in <a href="http://j.mp/oIB6Oq">capturing the regulatory agency in the government</a>. Once the regulation is disabled, the banks proceed to pursue their selfish interests (as businesses should.) But the sum total of the effort takes down the economy, and everybody ends up worse off than when they started.<br />
<br />
Things worsen further when the banks socialize their losses, as it was done in the United States. There is no moral justification for this; to the contrary, it is the canonical example a <a href="http://j.mp/qhLwqe">‘moral hazard’ in economy theory</a>. Plus, it doesn't address the problem. It solves individual banks’ problem, up to the scope of responsibility of the businessmen who run them, but it leaves the banking system as a whole dysfunctional.<br />
<br />
Simon Johnson’s words for this are:<br />
<br />
<blockquote>
<i>The first problem is a desperately ill banking sector that threatens to choke off any incipient recovery that the fiscal stimulus might generate.</i></blockquote>
<br />
His prescription is to use the standard Federal Deposit Insurance Corporation process (basically a government-managed bankruptcy procedure for banks):<br />
<div>
<ul>
<li>Wipe out bank shareholders;</li>
<li>Replace failed management;</li>
<li>Clean up the balance sheets;</li>
<li>and then sell the banks back to the private sector.</li>
</ul>
Once that's done, it remains necessary to fix the regulatory capture. Simon Johnson’s words for this are:</div>
<div>
<blockquote>
<i>The second problem is a political balance of power that gives the financial sector a veto over public policy, even as that sector loses popular support.</i></blockquote>
<br />
His recommendations are:<br />
<ul>
<li>Big banks should be sold in medium-size pieces, divided regionally or by type of business;</li>
<li>Where this proves impractical, break them up within a short time;</li>
<li>And banks that remain in private hands should also be subject to size limitations.</li>
</ul>
I had the chance to spend some time amongst the crowd at the Wall Street Occupation. I participated in a group conversation which attempted to discover a consensus (if any) diagnosis for what exactly is the problem with Wall Street, amongst the 30 or so people present. I am quite thankful to the two talented moderators who skillfully ensured everyone’s contribution could be heard. In the end my presentation of Simon Johnson’s 2-paneled diagnosis (socialized losses plus regulatory capture) was received with a cheerful round of applause.<br />
<br />
It was at that moment that it occurred to me that those people on the street, those who speak for the 99%, have found themselves on the same side as the IMF. And that's a remarkable thing.</div>
Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0tag:blogger.com,1999:blog-1594097932719209060.post-11147479341109378272011-07-28T15:10:00.003-04:002011-07-28T15:45:05.848-04:00Articles written by the Heartland Institute<span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; line-height: 18px; ">There is an anti-climate science <a href="http://j.mp/oIDati">article written by the Heartland Institute</a> that's doing the rounds (11'000 facebook-likes, 900 tweets), about Roy Spencer's new paper.<br /><br />Be careful. The Heartland Institute is a professional disinformation firm. Their business is to write plausible-sounding lies, then trick media outlets into publishing them.<br /><br />If the Heartland Institute writes something, it's not just wrong, you can expect the reverse is true. Moreover, it also tells you that some big corporation is throwing large amount of money to ensure you are staying in the dark. In this case, <a href="http://j.mp/nWW1OK">ExxonMobil paid The Heartland upwards of $500'000</a> as part of a <a href="http://j.mp/qtZjyx">larger effort to delay cap-and-trade legislation in Washington</a>.<br /><br />The Heartland Institute is scary scary stuff. They rely on the fact that constructing proper counter argument takes vastly more effort than to make stuff up. If people consistently insist for proper counter-argument to their articles, they will stay ahead, and they win. <a href="http://j.mp/rrMp6Y">It's a technique called Gish Gallop</a>.<br /><br />The scientist, Roy Spencer, has destroyed his credibility in matters of global warming, by <a href="http://j.mp/rb8Dvg">publishing flawed results, being caught</a>, but then nevertheless <a href="http://j.mp/qDq3uB">encouraging disinformation firms to use his papers for advocacy</a>.<br /><br /><br />References:<br /><br /><a href="http://j.mp/pTZlIM">What if you held a conference, and no (real) scientists came?</a><br /><br /><a href="http://j.mp/o9A8xB">The Heartland Institute Publishes a Bogus List of Scientist with Doubts</a><br /><br />a<wbr>nd a documentary on the issue, documenting how the Heartland's tactic was first developed by the tobacco industry to fight lung-cancer science :<br /><br /><a href="http://j.mp/o9Gpsv">Naomi Oreskes talk on Merchants of Doubt: How a Handful of Scientists Obscure the Truth about Climate</a><br /><br /></span>Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0tag:blogger.com,1999:blog-1594097932719209060.post-53149336747335969472011-04-26T00:05:00.005-04:002011-04-26T12:43:30.479-04:00Exxon does not speak for us at WPI Commencement<a href="http://www.postcarbon.org/files/RH-headshot.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 110px; height: 153px;" src="http://www.postcarbon.org/files/RH-headshot.jpg" border="0" alt="" /></a><span class="Apple-style-span" style="line-height: 24px; font-family: Georgia, 'Bitstream Charter', serif; color: rgb(51, 51, 51); "><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; ">It is my pleasure to announce that Richard Heinberg, the Senior Fellow-in-Residence of the Post Carbon Institute, will be speaking as a counterpoint speaker to the official speaker, Rex Tillerson, the CEO of ExxonMobil. This will not take place on the WPI Quad where the official ceremony is situated, but will instead take place at a nearby (walkable), separate location. All are welcome to come hear him speak.</p><div style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; "><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; ">Many of the students graduating this year find that <a href="http://www.ucsusa.org/global_warming/science_and_impacts/global_warming_contrarians/exxonmobil-report-smoke.html" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: rgb(0, 102, 204); background-position: initial initial; background-repeat: initial initial; ">Exxon’s disinformation campaign</a> and its efforts to undermine Americans’ trust in their scientific institutions are entirely incompatible with their values and their future careers. Many students will be walking out of the commencement ceremony before the CEO of ExxonMobil, Rex Tillerson, speaks, to instead hear Richard Heinberg.</p><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; ">Richard Heinberg’s work is a powerful symbol of our wishes for WPI: a university which, in line with its budding green image, chooses to honor someone with leadership and vision, rather than a baron of the past, a force of the status quo.</p><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; "><strong style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; font-weight: bold; background-position: initial initial; background-repeat: initial initial; ">When:</strong> Saturday, May 14 · 11:00am - 2:00pm, near Worcester Polytechnic Institute.</p><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; "><a href="http://www.postcarbon.org/speaker/36200-richard-heinberg" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: rgb(0, 102, 204); background-position: initial initial; background-repeat: initial initial; ">Check out the Richard Heinberg’s profile at the Post Carbon Institute</a></p><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; "><span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; font-size: small; background-position: initial initial; background-repeat: initial initial; "><span class="Apple-style-span" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; line-height: 24px; background-position: initial initial; background-repeat: initial initial; "><a href="http://www.facebook.com/event.php?eid=179629662085892" style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; color: rgb(0, 102, 204); background-position: initial initial; background-repeat: initial initial; ">Visit the Facebook gorup</a> or <a href="http://wpi2011.wordpress.com/">the official website for the event</a>.</span></span></p><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; "><span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; font-size: small; background-position: initial initial; background-repeat: initial initial; ">News coverage: </span></p><p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 24px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; background-position: initial initial; background-repeat: initial initial; "><span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-style: initial; border-color: initial; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; vertical-align: baseline; font-size: small; background-position: initial initial; background-repeat: initial initial; "><a href="http://www.worcestermag.com/city-desk/top-news/Oil-and-water-119785344.html">Worcester Mag: Oil and water, WPI faculty and students launch separate dissenting campaigns </a><br /></span><span class="Apple-style-span" style="font-size: small; "><a href="http://www.telegram.com/article/20110411/NEWS/110419982">Telegram: Eco-conscious at WPI grumble about grad speaker </a><br /><a href="http://www.necn.com/04/11/11/WPI-graduation-speaker-controversy/landing_business.html?blockID=501942&feedID=4209">NECN: WPI graduation speaker controversy<br /><br /></a></span></p></div></span>Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0tag:blogger.com,1999:blog-1594097932719209060.post-82134265316811952032011-01-16T13:02:00.007-05:002011-01-17T19:00:11.936-05:00Science is About Strength of Evidence: Nutrition<span style="font-weight: bold;">Book review</span><br /><br /><blockquote><a href="http://www.amazon.com/Eat-Drink-Be-Healthy-Harvard/dp/0684863375">Eat, Drink, and Be Healthy: The Harvard Medical School Guide to Healthy Eating</a>, by M.D. Walter C. Willett<br /></blockquote><br /><span style="font-style: italic;">Eat, Drink and be Healthy </span>discusses a wide range of ways diet affects health. Eat, Drink is remarkable for the amount of respect it hands to issues of strength of evidence. The entire <a href="http://books.google.com/books?id=RhW3v6x9n44C&lpg=PP1&dq=eat%20drink%20be%20healthy&pg=PA27#v=onepage&q&f=false">Chapter 2</a> is dedicated to deepening the reader's intuition of strength evidence. It discusses the different kinds of medical studies people do, and how the confident we should be in each. A study with 20 genetically-modified mice is not the same as a study with 200,000 randomly chosen nurses (which is also not the same as a study of 18 hand-picked children, ran by a <a href="http://www.bmj.com/content/342/bmj.c5347.full">fraudulent doctor who gets money from an ambulance-chaser</a>, but I disgress.)<br /><br />The book is worth reading for its Chapter 2 alone. Reading it grants a heightened standard for the reporting of nutrition news, a standard that most (all?) newspapers will immediately fail. Each recommendation should come with a citation of the primary research, with a discussion of effect sizes for each recommendation, and with a discussion of the strength of evidence. <span style="font-style: italic;">Eat, Drink</span> methodically provides all three for every one of its recommendations.<br /><br />I found <span style="font-style: italic;">Eat, Drink</span> to be a vastly better than <span style="font-style: italic;">The China Study</span>. <span style="font-style: italic;">Eat, Drink</span> draws from a wider base of studies, and it deploys more care to ensure that each of its recommendation is delivered with a thorough description of the scientific evidence. In contrast, I found <span style="font-style: italic;">The China Study</span> to be too narrowly focused on their own study, and too self congratulatory. I found nothing in the <span style="font-style: italic;">China Study</span> that wasn't covered better in <span style="font-style: italic;">Eat, Drink.</span><br /><br />The book chapters starts from the corner with the strongest evidence, then follows the trail down:<br /><br /><blockquote><span style="font-weight: bold;">Chapter 1: </span>Don't smoke. If you smoke, stop reading. Smoking is going to kill you faster than anything else and nothing in the book can help you.<br /><br />[<span style="font-weight: bold;">Chapter 2: </span>Discussion about strength of evidence.]<br /><br /><span style="font-weight: bold;">Chapter 3: </span>Don't be overweight. If you are, stop reading.<br /><br /><span style="font-weight: bold;">Chapter 4: </span>Avoid all trans-fats like it is a poison. Reduce saturated fat; transition from beef to pork, from pork to chicken, from chicken to fish, and from fish to veggies. Reduce butter and whole-fat milk, prefer olive oil and soy milk instead.<br /><br /><span style="font-weight: bold;">Chapter 5: </span>Minimize refined sugars, including natural white-sugar-equivalents like white rice and potatoes.<br /><br /><span style="font-weight: bold;">Chapter 6: </span>Eat from a wide-variety of protein sources, especially plant-based proteins (since animal protein comes loaded with much saturated fat, c.f. Chapter 4.) The wide variety is a must if your are vegetarian, and it is good for you all the same if you're not.<br /><br /><span style="font-weight: bold;">Chapter 7: </span>Veggies, eat a lot of them, to your heart's content. It is the best food. Eat from a wide-variety of vegetables. Their gifts are spread across all the kinds.<br /><br /><span style="font-weight: bold;">Chapter 8</span> covers drink (water, juice, alcohol, coffee, tea.)<br /><br /><span style="font-weight: bold;">Chapter 9 </span>debunks the calcium scare.<br /><br /><span style="font-weight: bold;">Chapter 10 </span>debunk the vitamin scare.<br /><br /><span style="font-weight: bold;">Chapter 11 </span>is the conclusion.<br /><br /><span style="font-weight: bold;">Chapter 12 </span>is a quite good recipe book with too few vegetarian recipes.<br /><br /></blockquote>Along the way, Eat, Drink debunks many diet ideas which are floating in our culture that do not have scientific support. These non-recommendations are as valuable as the rest. They will free a lot of people from pointless anxieties and open a lots of delicious cooking options (c.f. Chapter 12.)<br /><br />Enjoy.Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0tag:blogger.com,1999:blog-1594097932719209060.post-67382007162273003682010-12-14T01:44:00.004-05:002012-03-28T21:01:56.445-04:00Science is About Strength of Evidence: Climate Change<h3>
Not in dispute</h3>
CO2 absorbs infrared light. Air is mostly blue (it absorbs non-blue light), but it is also complement-of-infrared, in the sense that the CO2 in the air absorbs infrared. You can confirm this with a <a href="http://j.mp/GSX8sw">cool tabletop experiment involving a candle and an infrared camera</a>, cue the BBC. <a href="http://j.mp/GSXoI5">The Myth Busters have their version too</a>.<br />
<br />
The Earth surface radiates 390 W/m2 of longwave, while the top of the atmosphere radiates 240 W/m2. The difference is the longwave energy absorbed by the atmosphere (around 150 W/m2).You can tell which gas is absorbing the energy by looking at the colors carefully. Water vapor absorbs the most. CO2 absorbs around 30 W/m2. (<a href="http://j.mp/GSVKq1">ref</a>)<br />
<br />
The industrial age has brought up the concentration of CO2 concentration by 30%, from 280 parts per million to 390 parts per million. We burned roughly 500 billion metric tons of carbon in 150 years. That's enough carbon to raise the atmosphere's concentration of CO2 to nearly 500 ppm, but 110 ppm have been absorbed by the ocean in the biosphere. (<a href="http://www.realclimate.org/index.php/archives/2004/12/how-do-we-know-that-recent-cosub2sub-increases-are-due-to-human-activities-updated/">ref</a>) We know the carbon is our because, aside from there being exactly the right amount, its isotope signature exactly matches that of fossil carbon. (<a href="http://j.mp/GSVLds">ref</a>)<br />
<br />
<h3>
Data points with uncomfortably large error bars/Being researched further</h3>
This 30% increase in CO2 (along with increases in other greenhouse gases) have increased the amount of energy captured by the atmosphere by 2.5 W/m2. Other chemicals we have released have generated a cooling effect of 0.9 W/m2. So the net extra amount of energy at the moment is 1.6±1.0 W/m2.<br />
<br />
Generally, more energy translates directly into warmer temperatures. But the climate has many positive feedbacks and many negative feedbacks, so the relationship is not that direct. If you add up all the known feedback (positive and negative) you get 0.75°C warmer temperatures for each W/m2 of additional energy (with rather large error bars (<a href="http://j.mp/GSVNSx">ref</a>)). This number is called the climate sensitivity. Since the extra energy at the moment is 1.6±1.0 W/m, if we stopped all emissions today, we should expect 1.2°C of warming. We measure 0.7°C, so another 0.5°C is "in the pipe" even if we stop all emissions now.<br />
<br />
We have burnt 500 billion metric tons of carbon so far. How much is there left? If we burn all of it, how high will the CO2 concentration get? Credible numbers range from <a href="http://j.mp/GSVO9h">450 ppm</a> to <a href="http://j.mp/GSVRSx">1300 ppm</a>. If we are really unlucky, and there is a whole lot of carbon, and the climate sensitivity is super high, how hot does it get? MIT calculated 7°C of warming. (<a href="http://j.mp/H6C7QJ">ref</a>)<br />
<br />
What are the consequences of 7°C of warming? Warmer air holds more moisture (<a href="http://j.mp/GSVSWo">ref</a>). At 7°C, the air sucks all the moisture out of the ground and nothing can grow. Food production collapses, and humanity dies. (<a href="http://j.mp/GSVQOt">ref</a>)<br />
<br />
<h3>
Not settled/Being researched</h3>
<ul>
<li>The ocean and the biosphere have absorbed 110 ppm so far. Can they absorb much more?
Are there big negative feedbacks we haven't discovered yet?</li>
<li>This would be great news, and people are looking as hard as they can, but nothing so far. But we are allowed to hope.</li>
<li>Are there any big positive feedbacks? These would make global warming even more catastrophic than the current predictions.</li>
<li>There are many candidates at the moment which are being studied
Are there ways to take the carbon out of the atmosphere? Soil carbon sequestration looks promising (<a href="http://j.mp/GSVWFF">ref</a>).</li>
<li>Are there ways to increase the 0.9 W/m2 cooling effect caused by our pollutants (most of which are toxic) without poisoning people?</li>
<li>Which one will come first, peak oil (causing a crisis in transport), peak coal (causing a crisis in energy), population collapse due to climate change, or the deployment of forward-looking practices in commerce, in government, and in our lives, that will give us a chance to avoid all three catastrophes?</li>
</ul>
<i>[Based on the post <a href="http://j.mp/GSVUhc">The CO2 problem in 6 easy steps</a>, by <a href="http://j.mp/GT1RdO">Gavin Schmidt, climate modeller at the NASA Goddard Institute for Space Studies in New York</a></i> (PhD in Applied Mathematics from University College London), and contributor at <a href="http://j.mp/GSVUO9">realclimate.org</a><span id="goog_94861663"></span><span id="goog_94861664"></span><a href="http://www.blogger.com/"></a>.<i><br /></i><br />
<h3>
A Short History of Global Warming Science</h3>
In <b>1896</b> a Swedish scientist published a new idea. As humanity burned fossil fuels such as coal, which added carbon dioxide gas to the Earth's atmosphere, we would raise the planet's average temperature.<br />
<br />
In the <b>1930s</b>, the United States and North Atlantic region warmed significantly versus the previous half-century; the amateur G.S. Callendar scientist suggests greenhouse warming might be on the way.<br />
<br />
In <b>1960</b>, painstaking measurements confirm the level of the CO2 is in fact rising in the atmosphere, year by year.<br />
<br />
Through <b>the '60s</b> we see the appearance of the first quantitative global warming forecast, suggesting that average temperatures would rise a few degrees within the next century.<br />
<br />
Also <b>during the '60s</b> smog pollution balances out greenhouse pollution and for a moment the Earth temperature stops rising. Smog is toxic, and smog causing power plants are made illegal by the <a href="http://j.mp/GT5gJD">Clean Air Act</a> in 1970. The smog dissipates, and the world's temperature resume their rise.<br />
<br />
During <b>the '80s</b>, readings of the planet's long history reveal that the climate is a chaotic system. Once provoked, it cannot but trusted to return, or stabilize. Policy makers across the world take notice.<br />
<br />
At the <b>UN in 1992</b>, the work on the <a href="http://j.mp/H6uD03"><span id="goog_1124391260"></span>Kyoto Protocol<span id="goog_1124391261"></span></a> begins.<br />
<br />
And on <b>11 December 1997</b>, the Kyoto Protocol is signed, confirming the world's commitment to prevent catastrophic climate change, somehow.
Based on the (fantastic) web book <a href="http://j.mp/H6uh9H">A Hyperlinked History of Climate Change Science</a>, by the American Institute of Physics<br />
<br />
------------------------------<br />
<br />
So, yeah, humanity's destruction is in the cards. If we land in the high-end corner of the probability curve, and if our political institutions continue their head-in-sand approach, we're screwed. It's hard to imagine the politico would stay so aloof in the mist of people dying by the billions, so that's two somewhat big ifs.<br />
<br />
I would like to add a personal note to help make sense of all of this.<br />
Let's compare this situation with the threat of total nuclear war. Since the arrival of nuclear weapons, if our politicians insist on being maximally-stupid, we all die. It's not a comfortable place to be. On the other hand, for all their faults, political institutions have not blown us up yet, and they usually do come around to big problems. The <a href="http://j.mp/GSW87U">dust bowl</a> was addressed. We used to have <a href="http://j.mp/wvihZ9">rivers on fire</a> and that got fixed too. Nuclear war has been avoided and the Vietnam War got stopped. It sometimes take a lot of popular pressure from the public to help our politicians along, but that's why we're here.<br />
I help out with <a href="http://j.mp/GSW6gc">350.org</a> and <a href="http://j.mp/GT1K1Y">justandstable.org</a>, and I have re-oriented my career to work in green building. It helps to channel the anxiety into something productive.Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com2tag:blogger.com,1999:blog-1594097932719209060.post-14629520315353869062010-10-25T16:46:00.002-04:002010-10-26T13:00:03.921-04:00Measuring the Effectiveness of Error Messages Designed for Novice ProgrammersMy latest paper was accepted at <a href="http://www.sigcse.org/sigcse2011/">SIGSCE</a>. I will be speaking in Dallas in March.<br /><br />If you have any interest on teaching programming to beginners, I invite you to read the pdf. It's an exploration of one factor that is largely ignored when people choose a language to teach with: how well do the error messages support learning? Of course, the answer is "not very well." But the surprise is that, even in a project that has spent considerable amount of time thinking and refining its error messages, we found considerable opportunity for improvement, simply by looking at students' behavior closely.<br /><br />Here's the abstract, and a link to the paper.<br /><br /><blockquote><div style="padding: 15px; line-height: 150%; text-align: justify; background-color: rgb(255, 255, 255); border-style: solid;">Good error messages are critical for novice programmers. Many projects attempt to rewrite expert-level error messages in terms suitable for novices. DrScheme's language levels provide a powerful alternative through which error messages are customized to pedagogically-inspired language subsets. Despite this, many novices still struggle to work effectively with DrScheme's error messages. To better understand why, we study the effectiveness of DrScheme's error messages. Unlike existing work in this area, we study messages at a fine-grained level by analyzing the edits students make in response to various classes of errors. We present our rubric, apply it to a course-worth of student lab work, and describe what we have learned about using the rubric effectively.<br /><br /><a href="http://gmarceau.qc.ca/papers/Marceau-2010-Measuring-Effectiveness.pdf">[pdf]</a><br /></div><br /></blockquote>Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0tag:blogger.com,1999:blog-1594097932719209060.post-39109994383244356812010-09-18T14:57:00.007-04:002012-04-23T11:43:40.207-04:00Dictate to your computer like a proDo your wrists hurt? If you program all day, or write prose, or otherwise spend most of your time typing on a keyboard, chances are you'll develop some pain. The intensity of the pain will fall somewhere between not much at all and this somewhat rare catastrophic wrist failure I got.<br />
<br />
The details of the risk factors of repetitive stress injury (RSI) are still being mapped out. People suspect influences from your overall health and constitution, your amount of stress, your general level of intensity at the keyboard, how many breaks you take and how effective they are. However, the largest factor is well known: it's the amount of time spent at the keyboard. According to the medical literature, anyone who types more than four hours per day is at risk -- though that's in part caused by medicine's low thresold for calling something a risk.<br />
<br />
The point is, at four hours the risk is measurable, then it goes up from there.<br />
<br />
As I was saying in my article on <a href="http://gmarceau.qc.ca/articles/your-wrists-hurt-you-must-be-a-programmer.html">wrist health</a>, the best way to prevent (or alleviate) RSI is to remove the hours spend typing emails from the equation. Dictate them instead. Because this strategy targets the #1 risk factor, it is more effective than any fancy keyboard, or any posture training.<br />
<br />
Since 2005, I have been using Dragon NaturallySpeaking to dictate email messages and other documents of all sorts. Dragon's recognition accuracy has improved so much over the years. Across the last couple of version releases, it has gone from being accurate enough to use if you don't have an alternative (v7 and v8), to being fine if you speak with an impeccable accent (v9), to being faster than anyone can humanly type on a keyboard, for pretty much everyone (v10). I have no reason to suspect the new Version 11 doesn't continue this progression.<br />
<br />
Since I have spent so much time with Dragon, I have a collection of tips and tricks to offer.<br />
<br />
<h3>
[1] Get the cheap version of Dragon NaturallySpeaking, at $50</h3>
<br />
The more expensive versions of Dragon provide fancier support for complex programmed commands, and little else. Unless you are a doctor, a lawyer, or you need a bilingual version (such as the French+English version available at amazon.fr), save the money.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://ecx.images-amazon.com/images/I/11YRsRx07tL._SL500_AA300_.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="http://ecx.images-amazon.com/images/I/11YRsRx07tL._SL500_AA300_.jpg" width="200" /></a></div>
There is no need to bother with Dragon's large set of voice commands. Everything you can do with Dragon's commands you can do more easily with the mouse or through a few keyboard shortcuts. If your hands hurt too much to use a mouse, get a <a href="http://www.amazon.com/Smartcat-Cirque-Glidepoint-Technology-Touchpad/dp/B000FVIHY0/ref=dp_cp_ob_e_image_3">GlidePoint usb touchpad</a>. The only commands I use are "Cap that," to turn text into title-case, and "Switch to dictation mode", which turns off a few useless commands that only get in the way.<br />
<br />
<br />
<h3>
[2] Get a decent noise-isolating USB microphone</h3>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://ecx.images-amazon.com/images/I/31snieiku0L._SL500_AA300_.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="http://ecx.images-amazon.com/images/I/31snieiku0L._SL500_AA300_.jpg" width="200" /></a></div>
First, the microphone has to be USB, or it has to be plugged into an <a href="http://www.amazon.com/gp/product/B000BVV2IC/ref=oss_product">external USB sound pod</a>. Any soundcard inside the case of the computer will pick up the interference from the CPU and hard drives and more or less ruine the sound quality. I would advise to get the USB pod even if your computer happens to have some internal shielding, else you won't have the option of switching computer.<br />
<br />
Second, the microphone has to be noise-isolating. Dragon has essentially no ability to tell apart your voice from any background noise. You depend on your microphone's ability to filter them out. If you use the microphone that comes with Dragon, you will have to sit alone in a perfectly silent room, wondering whether it's the songs of the neighborhood birds' or the sound of your computer's fan that's undermining your recognition accuracy. My microphone might be expensive, but I can dictate papers while on the road to Washington, and that's awesome.<br />
<br />
<a href="http://ecx.images-amazon.com/images/I/41oZ+yeZKdL._SL500_AA300_.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="http://ecx.images-amazon.com/images/I/41oZ+yeZKdL._SL500_AA300_.jpg" width="200" /></a>Third, it's better if your microphone has a good sensitivity. You almost have to yell into the stock microphone to get good enough sound quality. It's annoying, it's obnoxious to your neighbors, and it will give you RSI of the vocal cords if you do it for too long. With a microphone worth above 100$ or so, you start being able to dictate in hushed tones, and that's quite nice.<br />
<br />
Fourth, you will spend many hours with this microphone, better find a microphone that's not fragile, plasticy and uncomfortable, like most gaming headsets are.<br />
<br />
My favorites are the <a href="http://www.amazon.com/gp/product/B005BRET3G/ref=wms_ohs_product?tag=aflattrcomx244-20">Buddy FlamingoMic 7G</a> , the <a href="http://speechrecsolutions.com/microphones_sennheiser.htm">Sennheiser ME3</a>, or possibly the <a href="http://speechrecsolutions.com/microphones_radioshack.htm">Sennheiser ME3 Knock Off</a>. But there are more good microphones on <a href="http://www.proaudiosuperstore.com/headset-microphones.html">this list</a> and <a href="http://www.pcspeak.com/products/microphones.shtml">this list</a>.<br />
<br />
<br />
<h3>
[3] Make sure you have enough RAM. Boost your CPU. Upgrade to a SSD drive.</h3>
The performance of your computer will have a huge impact on your recognition accuracy. After you speak, Dragon launches a search through a list of utterances you might have said. Dragon sets itself a deadline of around half a second per word to choose its best guess. The faster your machine, the deeper Dragon can search, and as in chess, the deeper the search, the better the choice.<br />
<br />
Nothing kills Dragon accuracy more than <a href="http://computer.howstuffworks.com/virtual-memory.htm">swapping</a>. If you don't have much RAM headspace, the first few sentences you pronounce after turning the microphone on will get terrible accuracy, guaranteed, because Dragon will be busy swapping itself into RAM and will miss its deadline. But the effect of RAM shortage will be felt throughout your dictation session. Each time Dragon will touch the RAM limit, it will hit the disk and make a mistake. It's frustrating.<br />
<br />
<a href="http://ecx.images-amazon.com/images/I/21dgSLdM50L._AA300_.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="http://ecx.images-amazon.com/images/I/21dgSLdM50L._AA300_.jpg" width="200" /></a>Once you have enough RAM, get the fastest single-threaded processor you can afford. In laptops (at the moment) it's the Intel i7-M620, which is not that expensive of a CPU, actually. The more expensive CPUs sacrifice single-threaded performance to satisfy the marketing department's need for more cores. The i7-M620 runs at 1.6 Ghz when all four core are engaged, but it runs at 2.8Ghz when running single threaded. And in single threaded benchmarks, the CPUs are faithful to their maximum megahertz ratings.<br />
<br />
Finally, upgrade to a solid state hard drive. They are expensive, but they are also a hundred fold faster than normal laptop hard drives. It will all strange delays Dragon otherwise sometimes has.<br />
<br />
<h3>
[4] Learn to be patient with the Dragon</h3>
<br />
It's natural to get frustrated when someone repeatedly fails to understand what you say. You cannot have the same attitude when speaking to Dragon -- you would go crazy. Meditate, if needed. Don't hesitate to make a correction with the keyboard when Dragon is being stubborn (to the extent your wrists will allow). It will help.<br />
<br />
If your accuracy is bad all of a sudden, lunch <a href="http://audacity.sourceforge.net/">Audacity</a> or some other audio software and listen to the sound quality coming out of your microphone. It's often eye-opening. Listen for common sound quality problems: gaussian noise, interferences being picked up by your sound card from the CPU and hard drive, or booms caused by the wind of your voice hitting the microphone element.<br />
<br />
<h3>
[5] Go to preference dialog box and remap the keyboard shortcuts</h3>
<br />
Get into the habit of pressing Ctrl-Z instead of saying "Scratch that." Scratch that is too tedious and unreliable. If you're like me, you're hands are not in so bad of a shape that you can't afford to press Ctrl-Z.<br />
<br />
Bind "Correct that" to F1. This way your fingers are automatically nearby the keyboard shortcuts needed to select from the correction options after you bring up the correction menu (press ALT+number). ALT-F1 should be bound the dictation box. Then choose one function key to use for Microphone On/Off, possibly F7. Turn on "Double click to correct". When correcting (aka, when the correction menu is shown,) switch between the utterances with the left and right arrows.<br />
<br />
This arrow keys trick won't work well if you're dictating emails straight into Firefox, or into any other application that doesn't have native support from Dragon. Dragon has native support for Microsoft Word, WordPad, and Notepad. All other applications run in compatibility mode. In that mode, Dragon can't read the text you're editing, which means that all features that require knowledge of the text outside of what you have just dictated are disabled. Saying "Select foo" when "foo" isn't something you just said won't work, neither will the left and right arrows.<br />
<br />
The fix is to install the <a href="http://www.listary.com/text-editor-anywhere">Text Editor Anywhere</a> program or the <a href="https://addons.mozilla.org/en-US/firefox/addon/4125/">It's all text</a> Firefox add-on and configure it to launch WordPad on Ctrl-F1. My Gmail is set with the rich text box off (otherwise <i>It's all text</i> doesn't work) and has keyboard shortcuts turned on. This way, to reply to an e-mail I press in sequence: "a" for reply-all, Shift-F1 for the microphone, Ctrl-F1 to launch WordPad, then I leave my left index finger to F1, with the thumb on the left-side ALT key, so that I am ready to select corrections.<br />
<br />
<i>Text Editor Anywhere</i> works out of the box. For <i>It's all Text</i>, you need to set WordPad as the default editor. In the preference dialog box, use this path: "C:\Program Files\Windows NT\Accessoires\wordpad.exe", then set <i>It's all text</i>'s character set to "iso-8859-1" (without the quotes).<br />
<br />
<h3>
[6] Run the email corpus training</h3>
<br />
After the 15 minutes initial voice training, the email corpus training will give your recognition accuracy another factor of improvement. Dragon learns from this training a sense of the words used to talk about the things you talk about. It actually doesn't matter that much if it's your writing or somebody else's. What matters is to give Dragon an opportunity to rule out words you never, or rarely ever use.<br />
<br />
<h3>
[7] Teach Dragon new words as you go</h3>
<br />
If you have a new word, just pronounce it. Dragon will write rubbish of course, but then press the correction shortcut key twice, once to bring up the corrections, then once to bring up the spell dialog box, then type the correct word. That's sufficient to train a new word. Dragon remembers the pronunciation and will associate it with the spelling.<br />
<br />
<h3>
[8] Don't hesitate to move the speed-vs-accuracy slider to the right</h3>
<br />
If Dragon is making mistakes, move it to the right. The added speed is never worth the frustration of the mistakes. Don't move it all the way though. The last tick mark is very demanding on the computer and not that useful. Try setting it 95% to the right.<br />
<br />
<h3>
[9] Apply corrections by repeating yourself</h3>
<br />
After pressing F1, you have two options. You can either pick a correction amongst the ones offered in the menu, or you can repeat what you just said. Repeating is surprisingly effective. When you repeat yourself, Dragon takes into account that its first guess was wrong and goes looking for a new interpretation. It's often faster than reaching for the mouse to choose a correction.<br />
<br />
Finally,<br />
<br />
<h3>
[10] If you're not a native English speaker, take an accent-training course</h3>
<br />
Seriously, Dragon NaturallySpeaking is excellent accent practice. Dragon will flag your mispronunciations like no polite friend ever dared to. On your own it's just frustrating, but with the help of a teacher you'll learn to mouth the missing sounds, and Dragon will mark your progress.Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com6tag:blogger.com,1999:blog-1594097932719209060.post-75511942268473564872010-08-16T12:34:00.004-04:002010-08-16T12:44:00.397-04:00Climate Change Activists: For or Against Nuclear?On one hand, if you look at France, nuclear has a track record of being inexpensive, safe, environmentally sound (in the sense that much less radiation is released into the environment by a nuclear power plant than a coal power plant), and has an overall low CO2 footprint. I'm going to state sources below for each one of these statements as a matter of course, even though my impression is that most of my readers are well aware of these characteristics of a nuclear power.<br /><br />On the other hand, this great track record hinges on having a very high level of trust in the quality of the regulation apparatus. In a country like France, where the political system is somewhat healthy, and on the whole accountable to the people, it is easier to support nuclear. In the country that gave birth to the Deepwater Horizon disaster, it's harder. Furthermore, this judgment call on the quality of the political system has to be made for now, and for far into the future. For some people, no political system can uphold such a demanding long-term guarantee of stability. Again, I'm confident that everyone here is well aware of this dynamic.<br /><br />Thus, whether one supports for opposes nuclear energy depends on a careful weighting of of three somewhat subjective impressions: How much do you trust your politicians?, versus how dire is the climate situation?, versus what alternatives are there? If you would like to see the difficulty of resolving these three questions play out in a large conference room, amongst a crowd of smart, well-informed people of all specialties, I'll recommend the following TED Talk:<br /><br /><blockquote><br /><a href="http://www.ted.com/talks/debate_does_the_world_need_nuclear_energy.html">TED Talk Debate: Does the world need nuclear energy?</a><br /></blockquote><br /><br />In short, a well-informed environmentalist can come to either conclusion, for or against nuclear power; that's what's happening in our group. I don't think it is possible to resolve this diversity of opinions. I doubt the world can come to a consensus, no matter how much time we spend.<br /><br />Thankfully, I do not see the need to come to a consensus. Not now at least. There is plenty of solutions to global warming calling for our considerations before the questions of nuclear energy becomes unavoidable. I would humbly suggest we focus everyone's efforts on these other solutions.<br /><br /><br /><h3>Inexpensive:</h3><br /><a href="http://books.google.co.in/books?id=IBCJNmvWWMQC&pg=PA11&dq=%22The+Projected+Costs+of+Generating+Electricity%22&source=gbs_toc_r&cad=0_0#v=onepage&q=%22The%20Projected%20Costs%20of%20Generating%20Electricity%22&f=false">Projected costs of generating electricity: 2005 update By OECD Nuclear Energy Agency</a><br /><br />Their investigation of the cost of numerous power plants identified the following cost brackets for different technologies.<br /><br /><table style="border-collapse: collapse; width: 186pt;" border="0" cellpadding="0" cellspacing="0" width="248"><col style="width: 75pt;" width="100"> <col style="width: 111pt;" width="148"> <tbody><tr style="min-height: 15pt;" height="20"> <td style="min-height: 15pt; width: 75pt;" height="20" width="100"><span style="font-size:85%;">Nuclear: </span></td> <td style="width: 111pt;" width="148"><span style="font-size:85%;">21 to 31 $USD/MWh</span></td> </tr> <tr style="min-height: 15pt;" height="20"> <td style="min-height: 15pt;" height="20"><span style="font-size:85%;">Coal: <span> </span></span></td> <td><span style="font-size:85%;">25 to 50 $USD/MWh</span></td> </tr> <tr style="min-height: 15pt;" height="20"> <td style="min-height: 15pt;" height="20"><span style="font-size:85%;">Gas: </span></td> <td><span style="font-size:85%;">35 to 50 $USD/MWh</span></td> </tr> <tr style="min-height: 15pt;" height="20"> <td style="min-height: 15pt;" height="20"><span style="font-size:85%;">Wind: </span></td> <td><span style="font-size:85%;">35 to 95 $USD/MWh</span></td> </tr> <tr style="min-height: 15pt;" height="20"> <td style="min-height: 15pt;" height="20"><span style="font-size:85%;">Micro-hydro: <span> </span></span></td> <td><span style="font-size:85%;">40 to 80 $USD/MWh</span></td> </tr> <tr style="min-height: 15pt;" height="20"> <td style="min-height: 15pt;" height="20"><span style="font-size:85%;">Solar: <span> </span></span></td> <td><span style="font-size:85%;">150 to 300 $USD/MWh</span></td> </tr> </tbody></table><br /><br /><h3>Safe:</h3><br /><a href="http://nextbigfuture.com/2008/03/deaths-per-twh-for-all-energy-sources.html">Deaths per TWh for all energy sources:</a> Rooftop solar power is actually more dangerous than Chernobyl. (Construction workers fall off the roofs all the time)<br /><br /><h3>Environmentally sound:</h3><a href="http://www.scientificamerican.com/article.cfm?id=coal-ash-is-more-radioactive-than-nuclear-waste">Coal Ash Is More Radioactive than Nuclear Waste. </a>By burning away all the pesky carbon and other impurities, coal power plants produce heaps of radiation.<br /><br /><h3>Low CO2 footprint</h3><a href="https://lightbucket.wordpress.com/2008/02/20/carbon-emissions-from-electricity-generation-the-numbers/">Carbon emissions from electricity generation: a life-cycle analysis.</a><br /><br /><table style="font-size: small; margin-top: 2ex; margin-bottom: 2ex;" align="center" cellpadding="0" cellspacing="0"><caption><b>Table 1.</b> Total lifetime releases of CO<sub>2</sub> from electricity generating technologies</caption> <tbody><tr align="center"> <td style="border-top: 2px solid black;" align="right" width="27%"><br /></td> <td style="border-top: 2px solid black;" width="12%">Coal</td> <td style="border-top: 2px solid black;" width="12%">Gas</td> <td style="border-top: 2px solid black;" width="12.5%">Solar PV</td> <td style="border-top: 2px solid black; font-weight: bold;" width="12.5%">Nuclear</td> <td style="border-top: 2px solid black;" width="12%">Wind</td> <td style="border-top: 2px solid black;" width="12%">Hydro</td> </tr> <tr> <td style="border-bottom: 1px solid black;"><br /></td> <td colspan="6" style="border-bottom: 1px solid black;" align="center"> kg CO<sub>2</sub>/MW<sub>e</sub>h</td> </tr> <tr align="center"> <td align="right">ExternE <sup>[1]</sup> </td> <td>815</td> <td>362</td> <td>53</td> <td style="font-weight: bold;">20</td> <td>7</td> <td>-</td> </tr> <tr align="center"> <td align="right">UK SDC <sup>[2]</sup> </td> <td>891</td> <td>356</td> <td>-</td> <td style="font-weight: bold;">16</td> <td>-</td> <td>-</td> </tr> <tr align="center"> <td align="right">U. of Wisconsin <sup>[3]</sup> </td> <td>974</td> <td>469</td> <td>39</td> <td style="font-weight: bold;">15</td> <td>14</td> <td>-</td> </tr> <tr align="center"> <td align="right">CRIEPI, Japan <sup>[4]</sup> </td> <td>990</td> <td>653<sup>(a)</sup></td> <td>59</td> <td style="font-weight: bold;">21</td> <td>37</td> <td>18</td> </tr> <tr align="center"> <td align="right">Paul Scherrer Inst. <sup>[5]</sup> </td> <td>949<sup>(b)</sup></td> <td>485</td> <td>79</td> <td style="font-weight: bold;">8</td> <td>14</td> <td>3</td> </tr> <tr align="center"> <td align="right">UK Energy Review <sup>[6]</sup> </td> <td>755</td> <td>385</td> <td>-</td> <td style="font-weight: bold;">11–22</td> <td>11–37</td> <td>-</td> </tr> <tr align="center"> <td align="right">IAEA <sup>[7]</sup> </td> <td>968<sup>(c)</sup></td> <td>440<sup>(c)</sup></td> <td>100<sup>(c)</sup></td> <td style="font-weight: bold;">9–21</td> <td>9–36</td> <td>4–23</td> </tr> <tr align="center"> <td align="right">Vattenfall AB <sup>[8]</sup> </td> <td>980</td> <td>450</td> <td>50</td> <td style="font-weight: bold;">6</td> <td>6</td> <td>3</td> </tr> <tr align="center"> <td style="border-bottom: 1px solid black;" align="right">British Energy <sup>[9]</sup> </td> <td style="border-bottom: 1px solid black;">900</td> <td style="border-bottom: 1px solid black;">400</td> <td style="border-bottom: 1px solid black;">-</td> <td style="border-bottom: 1px solid black; font-weight: bold;">5</td> <td style="border-bottom: 1px solid black;">-</td> <td style="border-bottom: 1px solid black;">-</td></tr></tbody></table>Guillaumehttp://www.blogger.com/profile/00722827827627546541noreply@blogger.com0