Hardware hack and supply chain security

Bloomberg just made big news.

In its recent issue, it featured a cover story: “The Big Hack: How China Used a Tiny Chip to Infiltrate U.S. Companies“, detailed how Chinese military planted malicious chips into motherboards manufactured by Taiwanese supplier, supplying motherboards to a major server provider whose servers were used by almost 30 US companies, including Amazon and Apple. And by  doing this, Chinese military gains potential access to these companies and even US military.

Here’s the malicious chip on the motherboard:

Here’s a illustration of that process directly from their website:

You don’t have to be a genius to know how big this is, in many ways.

Technically, this is very advanced. Just compare to what the NSA was found doing back in 2014:

NSA

I mean, what the NSA has done can be accomplished by just any organization with a team of security experts. What the Bloomberg described, needs collaboration of experts from different areas spanning different industries. It needs state level sponsorship. The only thing that comes comparable, is the Stuxnet.

But even Stuxnet pales in comparison in terms of long term impact. When Stuxnet was made public in 2010, it has already done its tasks. There were a lot of speculation before US and Israeli officials “half confirmed” its origin, but ultimately, its impact is largely limited to technology world.

The hack described in Bloomberg’s article on the other hand, will help re-shape the global supply chain in the years to come. It would be naive to think this is pure coincident that this hack was published almost the same time when Mike Pence spoke at the Hudson Institution.

Despite its length, the article actually doesn’t describe the hacking in detail. The chip in its cover photo (shown below) was dismissed by experts as a very cheap passive component, “not possible to do anything remotely related to hacking”.

The way the chip supposed to work is also vague. From the article, it seems the chip may hijack the code verification process to bypass some security check. But it is unclear whether it was the IPMI code verification or the UEFI code verification or both.

As of this writing, both Apple and Amazon have denied the claim the hack claim. However, the shell has been dropped and the storm is still brewing. Because despite all these refusals, it successfully made people believe that this kind of hack is possible, and it is only possible in mainland China. The seed has been planted. How lucky we are, to witness such historical drama unfolding before our eyes.

Call for smart asses

Some of you may have seen this video, since it has been around for several years:

(For those you feel so compelled to up-vote this video, sorry I don’t have such a button on my blog, but you are welcome to go to YouTube and search for “Short Comedy Sketch” and express your sympathy there. :))

After being exposed to it several times, I started to think, well, maybe, just maybe, it is not entirely, ridiculously impossible? So after some sketching, I came up with something like this:

It’s just a re-interpretation of what the business people are saying.

    • When they say 7 lines perpendicular to each other, they probably mean some lines are perpendicular to others;
    • When they say draw red lines with transparent ink, they probably mean red line with some transparency;
    • When they say draw red lines with green ink, they probably mean green ink overlaying red lines;

I proudly showed this to some friends and was called (not surprisingly) a smart ass. But that didn’t stop me from showing this in lectures and explaining to the audience how you can manage conflicting requirements – make sense out of it.

But then, today, I just found a even better solution to this seemingly impossible requirement:

[YouTube link here: https://www.youtube.com/watch?v=xNWt0VuMbHA]

This solution is way better than mine in 2 aspects:

  • It actually draws red lines with blue ink;
  • All 7 lines are perpendicular to each other;

It is still not perfect, but it makes me think, maybe there are even better solutions? Smart asses out there, wanna try it out?

从防火墙内下载的pycharm有问题!

昨天重装电脑,需要重新安装很多软件。到pycharm网站一看,已经2017.2.1了,于是点击下载准备安装。点击链接,转向下载页面。。。

一切都非常熟悉,非常正常。下载速度有点慢,等着也是等着,我就点开了SHA-256 checksum的链接,把内容拷贝到Downthemall里面,等待下载完了验证。

我知道下载可能会有问题,我知道怎么用checksum,但是的确不是每次都用,谁都有懒得时候……

下载完毕,Downthemall开始验证,然后提示我,verification failed!

继续阅读从防火墙内下载的pycharm有问题!

The sum of all natural numbers…

The notion of 1+2+3+4+…=-1/12 has become so wide spread that quite a few of my friends actually feel convinced that it’s actually a true statement in general, even though it is very counter intuitive.

The point is, in order to evaluate an expression, that expression has to be well-defined.

Expressions like a+b is well defined in the sense that we know it is a binary operation, we know what are we supposed to do to get the result.

Expressions like a+b+c+… is not well defined, because there are multiple operators involved, and the order of evaluation is not clearly specified.

Take the sum of the alternating series as an example:

继续阅读The sum of all natural numbers…

聊记一笔

头天下午看到朋友圈里分享的文章,原以为是朋友分享错了,结果是原文就写错了。

因为FT中文网我也经常看,于是晚上写邮件给责任编辑,指出错误,第二天上午再看就纠正过来了。有意思的是,几天过去了一直没有收到责任编辑的回复。。

花时间搜索了一下,meta narration的用法,实际上只有百度百科有。在百度百科上,也只有概述部分用了这个错误的meta narration,其它部分都是meta narrative,偏偏这个概述部分会出现在百度搜索的预览中,所以流毒甚广。

推测起来,作者对于这个词汇可能并不熟悉,行文时顺便在百度上搜索了一下进行确认,搜索之后也并未打开页面认真检查,就上了百度的当。

如邮件中所说,这个错误并不影响刘远举先生文章本身的价值,只是从责任编辑和刘先生的反应来看,想来也觉得这个错误犯的有些低级,所以不好回应。记在这里为自己和后来者戒。

Chapter 02 The First Algorithm

摩西快速学习了算术和几何……
这些知识他是从埃及人那里学到的。埃及人研习数学和其它学问。

《形而上学》亚里士多德

算法 是用以完成某项计算任务的有限步骤。算法跟计算机编程有紧密的联系,以至于大多数知道这个词的人以为算法的使用是从计算机科学开始。但实际上,人们使用算法已经有几千年的历史。数学中充满了算法,有一些我们到今天还在使用。学生们学习的长加法就是一种算法。

尽管使用算法的历史很长,算法这个概念并不是一开始就存在,它是后来发明出来的。尽管我们不知道是谁首先发明了这个概念,却明确知道有些算法至迟在4000多年前的古埃及就存在了。

 

古埃及文明的核心是尼罗河,因为其农业有赖于尼罗河泛滥带来的肥沃泥土。问题是,尼罗河一发水,用来划分权属的界标也都被冲掉了。埃及人惯用绳子测量长度,因此发展出一套方法,可以根据书面记录重建界标。一群制定的祭司专司此事,他们学过这些数学技术,因此成为“拉绳子的人(rope-strecher)”。希腊人后来会把他们叫做几何学家(geometers),意思是“土地丈量者”。

很不幸我们并没有多少古埃及数学知识的文字记录,当时的数学文件仅有两篇留存至今。我们关心的一个,叫做Rhind Mathematical Papyrus,名字来自于19世纪在埃及买到它的苏格兰收藏者。这篇文献成于约公元前1650年,抄写者名叫Ahmes。文献中有一系列算术和几何问题,还有一些辅助计算的表格。其中包含一个快速乘法技术和一个快速除法技术,是最早的有记录的算法。我们首先来看一看这个快速乘法算法,(我们很快会看到)它至今仍然是重要的计算技术。

2.1 埃及乘法

跟其它古文明一样,埃及人使用的数字系统中没有数位概念,也没有零。因此,乘法非常复杂,只有少数专家能够掌握。(想象一下只使用罗马数字进行两位数乘法)

首先,什么是乘法?粗略地说,乘法就是“把一个数跟它自身反复相加”。严格一些,我们可以首先把乘法分为两种情况:乘以1,或者乘以一个大于1的数。

乘数为1的乘法的定义是:

$$1a=a$$                                   (2.1)

然后,我们考虑如何计算比我们已经计算出来的再多一倍的情形。有些读者可以意识到这是一个递推,我们会在后面正式使用这个技术。

$$(n+1)a=na+a$$                 (2.2)

计算na的厂家做法是把n个a加起来。但是,在n很大的时候,这可能非常繁琐,因为需要进行n-1次加法。使用C++,这个算法是这样的:

int multiply0(int n, int a){
    if (n==1) return a;
    return multiply0(n-1, a)+a;
}

这样两行代码对应于(2.1)和(2.2)。a和n都必须是正数,古埃及当时的约定也是如此。

Ahmes所描述的算法,这个算法在古希腊被称为“埃及乘法”,而很多现代作者则称之为“俄罗斯农民算法”,建立在如下洞察上:

$$ 4a=((a+a)+a)+a=(a+a)+(a+a) $$

这个优化利用了加法的结合律:

$$a+(b+c)=(a+b)+c $$

这样,我们只需要计算一次a+a,减少了计算次数。

核心思想在于,不断地把n取半,同时把a加倍,使用数的2的次方倍相加来计算乘法结果。在当时,人们不会使用变量a和n来描述算法,而是由作者给出示例,然后说“其它数字同理”。Ahmes也是这么做的,他使用下面的表格来演示这种算法,n=41,a=59:

1        ♦         59
2                  118
4                  236
8        ♦        472
16                944
32      ♦      1888

每个条目的最左边是2的幂,右边是前一条目的数字的倍数(数字加倍相对容易计算)。有标记的值对应41的二进制表示中数值为1的位。这个表格的意思是说:

$$41*59=(1*59)+(8*59)+(32*59)$$

其中右边的每一个乘积可以由对59加倍响应的次数而得到。

这个算法需要检查n是奇数还是偶数,所以我们可以推断古埃及人知道它们的区别,尽管我们没有直接的证据,但是古希腊人,他们自称从古埃及人那里学到数学,显然知道奇偶的区别。下面是他们的定义方法用现代数学标记表达出来:

$$n=n/2+n/2$$    说明n是偶数
$$n=(n-1)/2+(n-1)/2+1$$  说明n是奇数

我们也将使用这个特点:

odd(n) 意味着 half(n)=half(n-1)

下面是埃及乘法的C++实现:

int multiply1(int n, int a){
    if (n==1) return a;
    int result=multiply1(half(n), a+a);
    if (odd(n)) result=result +a;
    return result;
}

odd(x)很容易实现,测试x的最低位就可以了,half(x)则可以通过对x进行一次右移实现:

bool odd(int n) { return n&0x1;}
int half(int n) { return n>>1; }

multiply1需要进行多少次加法运算?每次调用这个函数,我们需要在a+a的地方进行一次加法,因为我们是不断对n取半,我们需要调用这个函数logn次。在某些时候,我们还需要在result+a的地方进行加法运算,因此加法运算的总次数为:

$$\#(n)=logn + v(n)-1$$

其中v(n)是n的二进制表达中1的个数(population count或者pop count)。由此我们把一个O(n)算法优化成了O(logn)算法。

这个算法已经最优了吗?不见得。比如,如果我们要乘以15,使用之前的公式,我们需要

$$\#(15)=3+4-1=6$$

进行6次加法。但是我们使用下面的办法,就只需要5次加法运算:

int multiply_by_15(int a){
    int b=(a+a)+a;    //b == 3*a
    int c+b+b;        //c == 6*a
    return (c+c)+b;   //12*a + 3*a
}

这样一系列加法运算又称为加法链。这里我们发现了15的最优加法链,尽管如此,Ahmes的算法在多数情况下已经足够好了。

练习2.1

为n<100的数找到最优加法链

有读者可能已经注意到其中有些乘法运算可以更快,只要我们在第一个参数大于第二个参数的情况下交换一下参数顺序就可以了(比如,3*15会比15*3更容易计算)。的确如此,而且古埃及人也知道这一点。但是我们不会在这里进行这样的优化,因为到第七章我们会发现,我们最终要把算法推广到不同的数据类型。在这种情况下,参数的顺序是不能交换的。

2.2 改进算法

函数multiply1的加法运算次数还可以,但是它还要进行logn次递归调用。鉴于函数调用的开销很高,我们希望能够优化程序以避免这个开销。

我们将要利用的一个原则是:It is often easier to do more work rather than less. 特别地,我们准备计算

r+na

其中r是加法计算的中间结果,也就是说,我们要实现一个乘法累计函数,而不仅仅是乘法函数。这种思维方式不仅仅适用于程序编写,也适用于硬件设计和数学——比如在数学中,时常有一般性判断比特定判断更容易证明的情形。

这里是我们的乘法累计函数:

int mult_acc0{int r, int n, int a) {
    if (n==1) return r+a;
    if (odd(n)){
        return mult_acc0(r+a, half(n), a+a);
    }else{
        return mult_acc0(r, half(n), a+a);
    }
}

这里有一个不变形式:r+na=r0+n0a0,其中r0、n0和a0是r、n和a这些变量的初始值。

我们可以通过简化递归获得进一步优化。注意在上面的两行递归调用代码只有第一个参数不同,这样对于奇数情况和偶数情况分别进行递归,不如我们在进行递归前根据情况修改第一个参数的值:

int mult_acc1(int r, int n, int a) {
    if (n==1) return r+a;
    if (odd(n)) r=r+a;
    return mult_acc1(r, half(n), a+a);
}

现在我们的函数是尾递归函数——递归仅仅发生在返回值里面——我们马上会利用这一特点。

我们注意到两点:

  • n=1的情况很少发生;
  • 如果n是偶数,则完全没有必要判断它还是不是1.

因此,我们可以首先判断n的奇偶性,这样把n与1进行比较的次数降低一半:

int mult_acc2(int r, int n, int a) {
    if (odd(n)) {
        r=r+a;
        if (n==1) return r;
    }
    return mult_acc2(r, half(n), a+a);
}

有些程序员认为编译器可以为我们做这样的优化,其实不太可能。编译器不能把一种算法优化成另外一种算法。

到目前为止都很好,不过我们的目标是避免递归以节省函数调用的开销。要达到目的,如果我们的函数是完全尾递归就好了。

定义2.1 一个完全尾递归函数是一个所有递归调用的形式参数都跟函数本身一致的函数。

同样地,我们可以通过在递归调用之前给变量重新赋值来达到这个要求:

int mult_acc3 (int r, int n, int a) {
    if (odd(n)) {
        r=r+a;
        if (n==1) return r;
    }
    n=half(n);
    a=a+a;
    return mult_acc3(r,n,a);
}

到了这里,把它转化成一个循环就很简单了,只需要使用一个while(true)结构替换掉尾递归就可以了:

int mult_acc4(int r, int n, int a) {
    while (true) {
        if (odd(n)) {
            r=r+a;
            if (n==1) return r;
        }
        n=half(n);
        a=a+a;
    }
}

使用这个全新的乘法累加函数,我们可以写一个新版的乘法函数:

int multiply2(int n, int a) {
    if (n==1) return a;
    return mult_acc4(a, n-1, a);
}

注意我们在调用mul_acc4的时候预先把累加结果置为a,这样就减少了一次循环。

效果很不错,除了在n是2的幂的时候。由于我们第一次调用就把n减去1,这样mult_acc4函数被调用的时候第二个参数是一个二进制表达是全1的数,这对于我们的算法是最坏情况。因此,我们要在n是偶数的情况下做一些预处理,以避免这种情形。我们把n取半(同时把n加倍),直到n变成奇数。

int multiply3(int n, int a) {
    while (!odd(n)) {
        a=a+a;
        n=half(n);
    }
    if (n==1) return a;
    return mult_acc4(a, n-1, a);
}

但这样的话,mul_acc4就没有必要再检查n=1的情况了,因为n是奇数,n-1是偶数。因此,我们可以在调用的时候直接把n-1取半,把a再加倍,这样就是我们的最终版:

int multiply4(int n, int a) {
    while (!odd(n)) {
        a=a+a;
        n=half(n);
    }
    if (n==1) return n;
    return mult_acc4(a, half(n-1), a+a);
}

重写代码

在不断变换我们的乘法算法的过程中,可以看到重写代码是很重要的。没有谁一上来就能写出很好的代码,很多时候需要反复尝试才能找到最高效或者最通用的方法。程序员不应该有一遍就过的想法。

在重写过程中你可能会想,一条指令的多少不见得能造成多大的区别。但是也可能你的代码在后来很长时间内被重用很多次(实际上,临时处理措施经常变成代码里面存活时间最长的部分),而且,本来可以省掉的操作现在不起眼,留下来也可能会被修改成非常开销非常高的代码。

努力追求效率的另外一个好处是,在此过程中你不得不逼迫自己深入理解问题本身。与此同时,理解深入必然带来更有效率的实现,这是一个良性循环。

2.3 本章的思考

初等代数的学生都会学习如何通过变换表达式的形式来简化它们。在我们实现埃及乘法的不同实现中,我们也经历了类似的变换过程,重新安排代码语句,使之更清晰更高效。每个程序员都应该养成尝试对代码进行变换的习惯,直到得到最佳形式。

本章我们看到了数学在古埃及是怎样出现的,如何留下了第一个有记录的算法。我们要到靠后面的内容才会回到这个算法并对其进行推广。接下来,我们要向后跳跃1000年,领略一些古希腊人的数学发现。

写在前面的话

上周翻书柜,又翻出这本《From mathematics to generic programming》,再到亚马逊上一搜,果然还没有中文版。我是Alexander Stepanov的粉丝,书一出来我就上美亚买了,就是打算翻译的。

买回来之后尝试翻译了几章,然后找了XX出版社,出版社看了告诉我说他们已经签了版权了,估计6个月中文版就出来了,于是只好撂下了。哪知道如今快两年过去了,中文版也还没影。

这几天我会跟作者联系,看看版权到底是个什么状态,同时会在这里放出以前翻译的草稿,欢迎批评指正。

 

 

Writing Pix4D compatible tags into pictures

If you’re looking for a method to write camera pose information into JPG files so that it can be read by Pix4D, as shown in the below screenshot:

pose_info

Here is how to do it with exiftool:

  • First, you need a configuration file for exiftool. In the configuration file, you need the following content:
%Image::ExifTool::UserDefined = (
    'Image::ExifTool::XMP::Main' => {
        Camera=> {
            SubDirectory => {
                TagTable => 'Image::ExifTool::UserDefined::Camera',
            },
        },
    },
);
%Image::ExifTool::UserDefined::Camera = (
    GROUPS => { 0 => 'XMP', 1 => 'XMP-Camera', 2 => 'Other' },
    NAMESPACE => { 'Camera' => 'http://ns.flyingfishtechs.com/Camera/1.0/' },
    WRITABLE => 'string',
    GPSXYAccuracy=> {},
    GPSZAccuracy => {},
    Pitch => {},
    Roll=>{},
    Yaw => {},
 );
  • Then you can using exiftool to add the information to any JPG file.
exiftool.exe -config config.min.cfg -Pitch="1.02" -Roll="2.03" -Pitch="3.04" original.jpg

If the command outputs: 1 image files updated. Then you’re done. Now the JPG file has the camera pose information encoded in. If you have more than 3 such pictures (only because Pix4D needs at least 3 pictures to work), you can see that Pix4D can get the data from the pictures.

The final twist, Pix4D displays Omega, Phi and Kappa instead of Pitch, Roll and Yaw. Basically, Pitch, Roll and Yaw are angles relative to the horizontal plane – orthogonal to the gravity while Omega, Phi and Kappa are related to earth. That means, with a fixed set of Pitch, Roll and Yaw, if you change your GPS location, you’ll get a different set Omega, Phi and Kappa. Personally I don’t see why should Pix4D use earth as the frame of reference instead of horizontal plane. Maybe just to hide the raw information in the pictures. Anyway, know you know how.

To My Dear Fellow Misfits

下午刚刚看了这个视频,忍不住把它翻译下来。

So I know TED is about a lot of things that are big, but I want to talk to you about something very small. So small, it’s a single word. The word is “misfit.” It’s one of my favorite words, because it’s so literal. I mean, it’s a person who sort of missed fitting in. Or a person who fits in badly. Or this: “a person who is poorly adapted to new situations and environments.” I’m a card-carrying misfit. And I’m here for the other misfits in the room, because I’m never the only one. I’m going to tell you a misfit story.

我知道在TED上应该讲重大的事情,但是我想说的事情,很小,只是一个词,“错位者”。这是我最喜欢的词之一,因为你可以望文知义:一个与周围格格不入,或者难以适应的人。或者,“一个不能很好地适应新的环境和条件的人”。我就是一个不折不扣的错位者,我上来讲,是希望引起其他错位者的共鸣,因为我从来都不是一个人。我来告诉你,我是如何错位的。

0:54 Somewhere in my early 30s, the dream of becoming a writer came right to my doorstep. Actually, it came to my mailbox in the form of a letter that said I’d won a giant literary prize for a short story I had written. The short story was about my life as a competitive swimmer and about my crappy home life, and a little bit about how grief and loss can make you insane. The prize was a trip to New York City to meet big-time editors and agents and other authors. So kind of it was the wannabe writer’s dream, right? You know what I did the day the letter came to my house? Because I’m me, I put the letter on my kitchen table, I poured myself a giant glass of vodka with ice and lime, and I sat there in my underwear for an entire day, just staring at the letter. I was thinking about all the ways I’d already screwed my life up. Who the hell was I to go to New York City and pretend to be a writer? Who was I?

在我三十岁早期的某一天,我的梦想,成为作家的梦想,来敲门了。它以一封信的形式进入我的邮箱,告诉我,说我之前写过的一个短篇故事获得了一个重量级的文学奖。故事讲的是我,一个游泳选手的一生,他糟糕的家庭生活,以及哀痛和殒灭如何使人发狂。奖励是去纽约会见大牌编辑、经纪人和作家。每个未来作家的梦想,对吧?你猜收到信件的当天我干了什么?我与众不同,我给自己倒了一大杯伏特加,加了冰和酸橙,穿着内衣,盯着那封信坐了一整天。我不断地回想自己是如何一步步沦落到如此田地。我是他妈的谁啊,竟然要人模狗样地去纽约,装成一个作家?我是谁啊?

2:06 I’ll tell you. I was a misfit. Like legions of other children, I came from an abusive household that I narrowly escaped with my life. I already had two epically failed marriages underneath my belt. I’d flunked out of college not once but twice and maybe even a third time that I’m not going to tell you about.

我告诉你我是什么人。我是一个错位者。像众多其他孩子一样,我来自一个暴虐的家庭,后来得以侥幸逃出生天。当时已经有过两次狗血般的失败婚姻。大学里面两次弃学,可能还要第三次,原因我现在都没法说。

2:29 (Laughter)

2:31 And I’d done an episode of rehab for drug use. And I’d had two lovely staycations in jail. So I’m on the right stage.

还因为吸毒进过一段戒毒所。还有两次监狱游记。还真是正当时呢。

2:44 (Laughter)

2:47 But the real reason, I think, I was a misfit, is that my daughter died the day she was born, and I hadn’t figured out how to live with that story yet. After my daughter died I also spent a long time homeless, living under an overpass in a kind of profound state of zombie grief and loss that some of us encounter along the way. Maybe all of us, if you live long enough. You know, homeless people are some of our most heroic misfits, because they start out as us. So you see, I’d missed fitting in to just about every category out there: daughter, wife, mother, scholar. And the dream of being a writer was really kind of like a small, sad stone in my throat.

但我想,我觉得错位的真实原因,也是我至今不能释怀的是,我女儿出生当天就去世了。女儿去世之后,我有相当长一段时间无家可归,在立交桥下苟且存活,因为殒灭和哀痛变成了麻木的行尸走肉。在座有人可能有这样的经历。如果活的够长,可能每个人都会遇上。你看,无家可归者是最壮烈的错位者,因为错位只是他们的起点。而我,我在所有能错位的地方都错位了:作为女儿,作为妻子,作为母亲,作为学者。成为一个作家,就是我心中小小的,浇之不灭的梦想。

3:45 It was pretty much in spite of myself that I got on that plane and flew to New York City, where the writers are. Fellow misfits, I can almost see your heads glowing. I can pick you out of a room. At first, you would’ve loved it. You got to choose the three famous writers you wanted to meet, and these guys went and found them for you. You got set up at the Gramercy Park Hotel, where you got to drink Scotch late in the night with cool, smart, swank people. And you got to pretend you were cool and smart and swank, too. And you got to meet a bunch of editors and authors and agents at very, very fancy lunches and dinners. Ask me how fancy.

最后我基本是不情不愿地坐上了飞机,飞到了纽约这个作家的扎堆的地方。错位者们,我几乎能看到你们的脑袋在发光。我能一眼看出谁是错位者。一开始,你肯定会喜欢。你可以选三位你想见的知名作家,然后就有人会帮你找到他们。你被安排在格拉梅西公园酒店,在里面你可以那些又酷又潮又机灵的人们一起喝威士忌喝到夜里。然后你也可以假装很酷很潮很机灵。你还可以见一些编辑、作者和经纪人,跟他们一起吃非常非常高档的午餐或晚餐。你们不问问我有多高级?

4:30 Audience: How fancy?

多高级?

4:33 Lidia Yuknavitch: I’m making a confession: I stole three linen napkins —

我要忏悔,我从三家餐馆

4:37 (Laughter)

(笑声)

4:39 from three different restaurants. And I shoved a menu down my pants.

各顺走了一条亚麻餐巾。还拿走了一套菜单。

4:43 (Laughter)

(笑声)

4:45 I just wanted some keepsakes so that when I got home, I could believe it had really happened to me. You know?

我就是想留下点念想,这样等我回家了,我还能确信这一切是真的发生了。你明白吗?

4:54 The three writers I wanted to meet were Carole Maso, Lynne Tillman and Peggy Phelan. These were not famous, best-selling authors, but to me, they were women-writer titans. Carole Maso wrote the book that later became my art bible. Lynne Tillman gave me permission to believe that there was a chance my stories could be part of the world. And Peggy Phelan reminded me that maybe my brains could be more important than my boobs. They weren’t mainstream women writers, but they were cutting a path through the mainstream with their body stories, I like to think, kind of the way water cut the Grand Canyon.

我当时想见的三位作家是Carole Maso, Lynne Tillman和Peggy Phelan。她们当时并不是非常知名的畅销书作家,但是对我来说,她们是女性作家中的巨人。Carole Maso写了一本书,这本书后来成为了我的艺术宝典。Lynne Tillman让我相信,我的故事也可以是这世界的一部分。而Peggy Phelan提醒我,我的大脑可能要比我的胸前几两更重要。她们都不是主流视野之内的女作家,但我时常想,她们用自己的身体写作,在主流之外开辟出新的路径,就像水流冲刷出大峡谷一样。

5:40 It nearly killed me with joy to hang out with these three over-50-year-old women writers. And the reason it nearly killed me with joy is that I’d never known a joy like that. I’d never been in a room like that. My mother never went to college. And my creative career to that point was a sort of small, sad, stillborn thing. So kind of in those first nights in New York I wanted to die there. I was just like, “Kill me now. I’m good. This is beautiful.” Some of you in the room will understand what happened next.

跟这三位五十多岁的女作家交往的愉悦几乎要耗尽了我。因为我从未有过这样的愉悦。我从未在这样的圈子里呆过。我的母亲从来没有上过大学。而我的创作生涯在此之前一直不足为外人道,随时都要胎死腹中。所以在纽约的第一天晚上,我有点想就此死去。我觉得,“就这样死了吧,我过够了,太美好了”。接下来发生的事情,在座中有些人应该能够理解。

6:15 First, they took me to the offices of Farrar, Straus and Giroux. Farrar, Straus and Giroux was like my mega-dream press. I mean, T.S. Eliot and Flannery O’Connor were published there. The main editor guy sat me down and talked to me for a long time, trying to convince me I had a book in me about my life as a swimmer. You know, like a memoir. The whole time he was talking to me, I sat there smiling and nodding like a numb idiot, with my arms crossed over my chest, while nothing, nothing, nothing came out of my throat. So in the end, he patted me on the shoulder like a swim coach might. And he wished me luck and he gave me some free books and he showed me out the door.

首先,他们带我去了Farrar, Straus和Giroux出版社的办公室。Farrar, Straus和Giroux是我的超级梦想出版社。想想看,T.S. Eliot和Flannery O’Connor在这里出书。主编让我坐下,跟我谈了很长时间,想说服我出一本书,一本关于游泳选手的生活的书,类似一本传记。他跟我说话的时候,我就坐在那里,笑着点头,胳膊交叉在胸前,像个麻木的白痴,什么都没说,一直到最后。最后,他像个游泳教练一样拍了拍我的肩膀,祝我好运,送了我几本书,然后送我出来了。

7:08 Next, they took me to the offices of W.W. Norton, where I was pretty sure I’d be escorted from the building just for wearing Doc Martens. But that didn’t happen. Being at the Norton offices felt like reaching up into the night sky and touching the moon while the stars stitched your name across the cosmos. I mean, that’s how big a deal it was to me. You get it? Their lead editor, Carol Houck Smith, leaned over right in my face with these beady, bright, fierce eyes and said, “Well, send me something then, immediately!” See, now most people, especially TED people, would have run to the mailbox, right? It took me over a decade to even imagine putting something in an envelope and licking a stamp.

接下来他们带我去了W.W. Norton出版社,当时我觉得我肯定会被叉出去,因为我脚上穿了一双Doc Martens。但是并没有。能够进W.W. Norton出版社就好像够到了夜晚的天空,摸到了月亮,而星星在夜空中串成你的名字。这就是我当时的感觉,你明白吗?他们的主编,Carol Houck Smith,凑到我面前,闪光明亮的眼睛凶狠地盯着我说,“那么,发点东西给我们,尽快!”你看,绝大多数人,尤其是TED圈的人,可能马上跑到邮箱前准备寄信,对吧?我花了超过十年的时间来想象把东西放进信封,贴上邮票。

7:59 On the last night, I gave a big reading at the National Poetry Club. And at the end of the reading, Katharine Kidde of Kidde, Hoyt & Picard Literary Agency, walked straight up to me and shook my hand and offered me representation, like, on the spot. I stood there and I kind of went deaf. Has this ever happened to you? And I almost started crying because all the people in the room were dressed so beautifully, and all that came out of my mouth was: “I don’t know. I have to think about it.” And she said, “OK, then,” and walked away. All those open hands out to me, that small, sad stone in my throat …

在最后一个晚上,我在国家诗歌俱乐部朗诵诗歌。朗诵结束时,Kidde, Hoyt & Picard文学社的Katharine Kidde走上前来,跟我握手,当场要做我的代理。我站在那里,好像聋了一样。你们有没有这样的经历?我觉得我几乎要哭出来了,因为每个人都穿的那么漂亮,而最后我说出来的是,“我不知道,我要想想。”她说,“那好吧”,然后就走开了。所有这些都向我,向我心中那小小的块垒张开双臂。

8:50 You see, I’m trying to tell you something about people like me. Misfit people — we don’t always know how to hope or say yes or choose the big thing, even when it’s right in front of us. It’s a shame we carry. It’s the shame of wanting something good. It’s the shame of feeling something good. It’s the shame of not really believing we deserve to be in the room with the people we admire.

你看,我想传达一些像我这样的错位者的特点。错位者,面对太美好的事情,经常不敢奢望,不敢答应,不敢追求,即使这好事就摆在眼前。因为我们身负耻辱,耻于奢望,耻于沉湎于愉悦之中,以及,觉得自己不配与敬仰的人为伍。

9:15 If I could, I’d go back and I’d coach myself. I’d be exactly like those over-50-year-old women who helped me. I’d teach myself how to want things, how to stand up, how to ask for them. I’d say, “You! Yeah, you! You belong in the room, too.” The radiance falls on all of us, and we are nothing without each other. Instead, I flew back to Oregon, and as I watched the evergreens and rain come back into view, I just drank many tiny bottles of airplane “feel sorry for yourself.” I thought about how, if I was a writer, I was some kind of misfit writer. What I’m saying is, I flew back to Oregon without a book deal, without an agent, and with only a headful and heart-ful of memories of having sat so near the beautiful writers. Memory was the only prize I allowed myself.

如果可能,我希望回到过去,像那些帮助过我的五十多岁的女作家一样,指导我自己。我会教自己该如何奢望,如何争取,追求那些美好。我会对她说,“你,就是你,你属于这里。荣光属于这里每一个人,少了任何一个,我们就什么也不是。”然而,我静悄悄地飞回家,当俄勒冈的雨滴和常青树映入眼帘,我已经在飞机上喝了很多“悔恨专用”酒。我在想,我要是个作家,也是个错位的作家。我是说,我从纽约飞回俄勒冈,没有签下一个合同,一个经纪人,只有满满的记忆,记得我曾经离那些迷人的作家们如何得近。记忆是我许给自己的唯一的奖励。

10:16 And yet, at home in the dark, back in my underwear, I could still hear their voices. They said, “Don’t listen to anyone who tries to get you to shut up or change your story.” They said, “Give voice to the story only you know how to tell.” They said, “Sometimes telling the story is the thing that saves your life.”

然后,回到家里,只穿内衣坐在暗处,我还能听到他们的声音在耳边回响。他们说,“不要听信任何让你闭嘴或者改变故事的人”,他们说,“把那些只有你知道的故事讲出来”,他们说,“有时候讲故事能改变人生”。

10:42 Now I am, as you can see, the woman over 50. And I’m a writer. And I’m a mother. And I became a teacher. Guess who my favorite students are. Although it didn’t happen the day that dream letter came through my mailbox, I did write a memoir, called “The Chronology of Water.” In it are the stories of how many times I’ve had to reinvent a self from the ruins of my choices, the stories of how my seeming failures were really just weird-ass portals to something beautiful. All I had to do was give voice to the story.

现在,你能看到,我是一个五十多岁的女人。我是一个作家,一个母亲,还正在成为一个教师。猜猜我最钟爱的学生是谁?虽然没有在我收到信件的当时发生,我后来还是写了一本传记,名字叫做“The Chronology of Water”。其中讲述了我如何从废墟中重建自我,也讲述了为什么说那些挫折其实都是通往人生妙境的通道,不管其面目如何怪异。我所做的,就是讲出这些故事。

11:26 There’s a myth in most cultures about following your dreams. It’s called the hero’s journey. But I prefer a different myth, that’s slightly to the side of that or underneath it. It’s called the misfit’s myth. And it goes like this: even at the moment of your failure, right then, you are beautiful. You don’t know it yet, but you have the ability to reinvent yourself endlessly. That’s your beauty.

很多文化都有寻梦的迷思,叫做英雄历程。我更喜欢一种不同的迷思,比英雄历程更边缘更底层一些,我叫它错位者迷思。它是这样的:即使在你最失败的时候,在彼时彼刻,你就是动人的。你可能不知道,但是你总能够重新塑造自我。这就是你的动人之处。

11:58 You can be a drunk, you can be a survivor of abuse, you can be an ex-con, you can be a homeless person, you can lose all your money or your job or your husband or your wife, or the worst thing of all, a child. You can even lose your marbles. You can be standing dead center in the middle of your failure and still, I’m only here to tell you, you are so beautiful. Your story deserves to be heard, because you, you rare and phenomenal misfit, you new species, are the only one in the room who can tell the story the way only you would. And I’d be listening.

你可能是个醉鬼,可能刚刚逃出虐待,可能刚刚出狱,可能无家可归,可能身无分文,可能没有工作,可能没有伴侣,最糟糕的情况,可能刚刚失去孩子。你甚至可能失去意识,可能正处在一切失意的最低谷,但是,我来这里就是要告诉你,你仍然如此动人,你的故事应该被听到。因为你,你这罕有其匹的错位者,你这新物种,只有你才能用你的方式讲出这故事。而我,会静静地聆听。

12:43 Thank you.

谢谢!

12:45 (Applause)

AC-3 support gets back again in VLC for iOS

A year ago, VLC on iOS was forced to remove its support for AC3 codec. I found almost all my videos on iPad were muted.

Since then, I haven’t bothered to check other options. I don’t mind paying a few dollars but I’ve been using VLC since years on all of my computers and mobile phones. There’s simply no other comparable alternatives that works equally well on Windows, Linux, OS X as well as iOS.

Today, I opened VLC on my iPhone again and noticed that I can play my videos with sound again! I checked the official website for sure and got this:

https://forum.videolan.org/viewtopic.php?f=36&t=124115&sid=c0ad097c62e429e8e5fe5f68aa14fc54&start=20#p441786

The link on iTunes also confirmed this. However, nowhere did I find details how did the developers solved the patent issue. Let’s hope it’s fixed for good.