Emoji 翻译器:表情社交的黄金伴侣

186pjolmz9xl9jpg_meitu_1

Emoji 表情俨然快要成为一种新语言了,各类社交网络上,人们用 Emoji 恶搞、聊天、表达感情……甚至出现了这样一个群体,他们完全用 Emoji 表情进行交流,Emoji 就是他们全部的文字。

Emoji 并不同于一般的贴图或符号表情,它的简单性、多样性和拟物化使得它具有更强的可玩性,传播广而快。《火星文还是颜文字?不,Emoji》就分析说:

Emoji 和 QQ 表情、微信表情以及论坛里的表情不同的是,Emoji 里包含的符号不光只是用来表达情绪,那些鲜花、建筑、海浪等等与现实世界有对应关系的符号,构成一种比较严谨的符号体系。这让 Emoji 超越了一般表情的表达能力,让它得以构成一种特殊的语言,更重要的是,相比起火星文来说,Emoji 更加容易被人理解。

 

Emoji 的流行也催生了一些输入工具,比如 Emojimo,它是一个 Emoji 表情“翻译器”。一般而言,想要输入 Emoji,你要在表情框中挨个儿查找,插入文字。

Emojimo 的输入方式比较直接:实时翻译。在你输入某个词后,它会自动变成 Emoji 表情,比如输入“see”,输入法直接给出一双眼睛的表情。

当然,Emojimo 也不会把你输入的每一个词都翻译出来,大部分情况下,你打出的文本同时夹杂着文字和 Emoji 表情。

如果你不适应实时翻译,也可以选择“事后翻译”,在输入完成一段话中,用 Emojimo 一键转换成表情语言。这个过程也可以逆向,他人发来的文本如果包含 Emoji,而你无法理解透彻,Emojimo 也可以一键翻译成正常语言。只不过,由于 Emoji 本身没有语法和语序规则,包含着人的主观理解,所以翻译的准确度有所限制。

为 Emoji 而生的表情不止有 Emojimo,另一款 Emojiyo 键盘同样让人方便输入。不同的是,它提供的是单词和词组的 Emoji 建议选项,而不是直接翻译。

对于 Emoji 的流行,人们的反应不一,有人认为它有成为下一个“全球语言”的潜力,有人认为表情仅仅是表达情感的辅助方式。不管争论如何,一个事实是,Emoji 并没有像某些贴图表情一样仅仅“红极一时”,而是保持了旺盛的生命力,这也让围绕着 Emoji 而生的各类应用有了生存空间,让 Emoji 的玩法更加丰富。

Emoji 翻译器:表情社交的黄金伴侣,首发于极客范 – GeekFan.net

除了照明,这路灯还能给电动车充电

129

 

充电时间长、充电站少、续航不给力,这是消费者入手电动车主要的顾虑。汽车厂商们一面努力提升电动车的性能,一面也在想方设法推动充电站的普及。

而为了让更多的人对电动车产生购买欲,宝马在随处可见的路灯上做起了文章,该公司将充电站整合进了路灯中,推出了 Light and Charge 原型。

近日,宝马将 2 个 Light and Charge 路灯安装在慕尼黑宝马总部门前,日后这种路灯有望推广到德国其他的城市。

47

 

Light and Charge 路灯将发光二极管与 ChargeNow 充电技术结合起来,并接入当地现有的道路照明基础设施里。除了宝马旗下的 i3、i8 电动车外,其他品牌的电动车也能使用 Light and Charge 路灯。宝马此举是为了更快地推广相关技术,加速电动车的普及。

218

 

“如果我们希望未来会有更多的电动车在路上奔跑,那么无缝充电设施就显得非常必要。”宝马管理董事会成员 Peter Schwarzenbauer 谈到。

54

 

不过,Light and Charge 路灯并非免费为司机服务,后者需要通过手机 app 支付相应的充电费用。至于充电效率如何,宝马尚未给出答复。

宝马在充电技术上的探索动作频频。9 月份,该公司推出了比 i Wallbox Pure  更加智能的充电器 i Wallbox Pro。此外,宝马已与戴姆勒签署合作协议,将共同研发新一代无线感应充电标准化技术——司机只需将车开到充电器位置,然后按下车上的专用按钮即可充电。

今年 8 月,宝马在慕尼黑宝马博物馆旁安装了太阳能充电站 Point.One S。该充电站的外形类似一个拱形的鸟翼,以太阳能板作为顶棚,内部基于 LED 的电气照明系统可以跟用户进行交互式体验。Point.One S 靠收集太阳能为汽车充电,同时也将平日不用的能量重新输送回输电网。

1112

除了照明,这路灯还能给电动车充电,首发于极客范

树莓派上的立体视觉和深度知觉

随着树莓派超低成本的计算模块的发布(请看see www.raspberrypi.org/raspberry-pi-compute-module-new-product/),依赖于树莓派简单的编程环境,简单硬件扩展和丰富的开发资源,使我们利用树莓派创造大量的产品变得可能,

Pi具有强大的多媒体处理能力,但是因为通常在Pi上编程比较简单直接,最大限度的利用其多媒体系统和为它的VideoCore模块编程是较复杂的。

Argon Design精通于在此类系统上的编程,并且可以优化树莓派上的多媒体算法。为了评测计算模块的能力,展示我们的技能,我们设计了本次展示。

4784dd56c9ba9956688de933a7da5e28f3aaca

这次展示是关于立体深度感知-利用两个放置位置具有一定间距的摄像机,从不同的视角拍摄物体来获取深度信息。与此同时这还使用了树莓派计算模块的另一个令人兴奋的特性,那就是它支持双摄像头(标准树莓派仅仅支持单一摄像头)

###立体深度感知

—————————–

深度感知方面的文献中记录了很多好的算法。它们中很多使用了相同的视频压缩算法,Argon Design在这个领域有丰富的经验。都是基于把图像分成块,对于每幅图像中的每个块,在另外的一个或多个图片中搜索“匹配”的块。

ff455f208354e1f0bb9409215c070994143130

然而,与视频压缩相比,深度知觉需要更加可靠的结果。文献中还记载了很多改善输出的基本算法。因为这只是一个概念验证,所以我们的标准是选择那些不需要花费太长时间去实现的改进算法,这些算法不需要很大的计算量并且可以给出相当好的改善结果。基于块的视频压缩和我们最终的算法之间最基本的差别在于:

– 对比两个间距已知的摄像机同时拍摄的两幅图片。这表示我们在测量视差,我们可以通过它来得到摄像机和物体的间距。对于视频压缩我们则会去对比同一个摄像机在不同时期拍摄的几幅图片,所以这种算法意在测量运动。

– 假设摄像机都是水平对齐的。这使得二维搜索降低到一维,节省了大量的处理时间。这需要对摄像机进行校准,不过我们可以使用已知的方法来进行校准,人工的或者自动的都可以。

45353b9302a24a1e55a0cd8b44ce50b9195aff

– 使用更加准确(但是更加耗时)的方法来测量两块之间的相关性,基于如下两篇文章:
– [1]. Heiko Hirschmüller, “Improvements in Real-Time Correlation-Based Stereo Vision” CVPR 2001
– [2]. Olivier Faugeras et al, “Real t ime correlation-based stereo: algorithm, implementations and applications” INRIA 1993

特别的,我们决定结合使用[2] 中的”C5″相关方程(“C5″ correlation function)和[1]中提到的多窗口方案(multi-window scheme)。总的来讲,我们的程序既可以使用5×5窗口方案或是7×7方案。7×7的方案计算时间更长但是也会稍微准确一些。

###性能

——————————

使用了三种不同版本的实现方式:

– 原始版本使用Python和NumPy,用以评价其他方案的准确性。

– 使用C语言的版本,在变换中尽可能多的使用算法来增强效果。最大的改进来自于通过仔细的安排代码来避免冗余的计算,我们也使用了一个自定义的排序网络来替代通用排序算法(多窗口方案使用的算法),速度提高了大概4倍。

– 使用VideoCore的视频处理单元(VPU)的汇编程序,使用了C版本的结构但是利用了VPU的架构特性(比如说它的16路向量单元(16-way vector unit )和16KB的处理器局部储存器(processor-local memory)

fda3ed7ee2b4eeb153b49d40e45bdfb5b856c8

一个中等大小(768×576像素)的图像,在不同版本下的处理时间大概是:
– Python, on x86 (~3GHz): 63 seconds
– Python,x86平台(~3GHz):63秒
– C, on x86 (~3GHz): 56 milliseconds
– C,x86平台(~3GHz):56毫秒
– C, on Pi ARM core (700MHz): 1 second
– C, 树莓派ARM内核(700MHz): 1 秒
– Assembler on VideoCore VPU (250MHz): 90 milliseconds
– 汇编,VideoCore视频处理单元 (250MHz):90毫秒

请注意VideoCore版本仅仅比x86平台上的C版本耗时长大约50%,而x86平台比VideoCore的时钟速度快了12倍。

我们还编写了一个演示程序,它会从两个摄像机获取图像,处理他们并且把计算得出的深度数据以彩色的方式显示。摄像机的处理和展示会添加少量的补偿,来对我们减小图像尺寸到VGA (640×480)进行补偿
最终的帧速率是12fps。对于概念验证已经足够,同时在某种程度上展示了图像处理工作,而且我们可以用比较合理的开发速度在树莓派上实现它。

###应用

我们创建的示例程序可以以下面三种不同的方式进行展示

– 仅显示摄像机原始图像
– 把视差数据转换为彩色数据并覆盖在图像上
– 把距摄像机某个距离上的所有点全部移除

结果的截图如下,同时还有一些用到的设备的照片。

784de1bb92719537f2c0b93a1815d78850348e

然而,能做的不仅仅只有这些,还包括:

– 把两个或多个摄像机的图片缝合形成全景图

– Argon之前做过的一个项目是使用扩展卡尔曼滤波(Extended Kalman Filter)来分离摄像机的运动和一个场景中物体的运动。结合这些可以生成某个环境的动态的3D地图。

– 展示程序中的背景一处会切掉物体的一部分,这个问题可以结合边缘检测滤波的结果来进行补救。

– 这一算法非常适合在FPGA上执行,因为大多数的计算都可以并行工作。因此上面介绍的任何东西都可以轻松的提高到实时处理1080p30或4K视频。

###使用到的技能

[软件工程](http://www.argondesign.com/what-we-do/#software_engineering),

[处理器架构](http://www.argondesign.com/what-we-do/#processor_architectures),

[算法及运算](http://www.argondesign.com/what-we-do/#algorithms_mathematics),

[图像处理](http://www.argondesign.com/what-we-do/#image_processing),

[多媒体](http://www.argondesign.com/what-we-do/#multimedia )

树莓派上的立体视觉和深度知觉,首发于极客范 – GeekFan.net

骑上这只轮子,其他交通工具都黯然失色

141552197631

 

独轮车是一种短距离交通解决方案,近一两年走入大家视野,但骑上这款,可不止代步那么简单! 外形威猛似擎天柱,动力强悍如大黄蜂,小造(trendmakers)真想用世上最彪悍的词语来形容这款颇具科幻色彩的电动独轮摩托车。

0

 

电动独轮摩托车名为 RYNO,由波特兰摩托车制造商 RYNO Motors 今年推出,据说开发需求来自他家老板的女儿,女儿在游戏里看到一款摩托车感觉很酷,爸爸于是经过5年研发创造了了 RYNO。

0 (1)

 

RYNO 主要部分就是一个25英寸(约合63.5厘米)摩托车轮胎,重量为57公斤,虽然通过电力驱动,最高时速也可达40km/h。

0 (2)

 

其内置了一块可拆卸的锂离子电池,一次充电需 90 分钟,充电1000次以上没问题。RYNO 可以应付最高30度斜坡,在地势较高地区也可以正常使用。

0 (3)

 

RYNO 只能坐一个人,最大载重仅为113公斤,这就是一个轮子的代价呀!带女友去兜风正常体位就甭想啦,除非你们能发掘个新姿势。

0 (4)

 

单个轮子操作平衡一定是难度最大的,但 RYNO 采用独有的自平衡技术,操作方式也和普通电动独轮车相同,前倾加速,后倾减速,即使驾驶者身体倾斜幅度过大也能保持平衡。

0 (5)

 

RYNO 的通途十分广泛:可以用来公园遛弯散心;也可以开着它进电梯然后直奔办公桌;最主要的还是骑着它刷街、勾搭妹子神马的,绝对是神器中的神器!

0 (6)

 

如此扮酷耍帅的独轮电动摩托车当然价格也不会太亲民,不然如何彰显其逼格范,目前其官网售价为2250英镑,约是咱天朝货币22029元~

骑上这只轮子,其他交通工具都黯然失色,首发于极客范 – GeekFan.net

偷了『半条命2』源代码的那小子

2004年5月7日早6点,德国小镇黑林山区舍瑙,Axel Gembe醒来时发现床边围满了警察。全自动武器指着他的头,耳边响起一句“快起床,不准碰键盘”。

Geme知道他们此行的目的,但睡眼惺忪的,他还是问了原因。

(『半条命2』壁纸)

“你被指控入侵Valve公司网络,窃取视频游戏『半条命2』,泄露到互联网上,造成的损失超过2.5亿美元,”对方回答到。“穿好衣服。”

七个月前,2003年11月2日,在美国西雅图,Valve公司主管Gabe Newell醒来时发现公司开发了近五年的游戏源码被泄露到互联网上。

这个游戏本应该在几周之前发布,但由于团队开发滞后导致延误。滞后了12个月。半条命2要推迟发布,Newell还未承认会推迟多久。这次的泄露不只是经济上的威胁,也是一个很尴尬的场面。

思考这些迫在眉睫的问题片刻之后,Newell的脑中闪过许多问题。这件事是如何发生的?泄露是从公司内部流出的吗?团队中的哪些成员花费多年时间编写这个游戏却又可能在最后关头危及整个项目?

黑林山区舍瑙小镇,Gembe 2003年和他父亲居住的地方

如果不是内部问题,这件事又是如何让发生的?有人能够访问过Valve公司的网络服务器吗?

但是所有问题中最突出的,也是任何一个曾经被盗过东西的人都无可避免会想的问题:这是谁干的?

反叛者1号

“我进入黑客领域是在自己被病毒感染之后,”Gembe今天说。“那是一个伪装成魔兽争霸3密钥生成器的程序,我愚蠢地运行了那个程序。那是sdbot程序,当时很流行的一款恶意软件。”

这个年轻的德国人很快意识到他在自己的电脑上安装了什么。但是他没有删除该恶意软件,也没有遗忘,而是对该程序进行逆向工程,查看它是如何工作的,做了哪些事情。

被控制的恶意软件引导他进入IRC服务器。通过追踪,Gembe能够定位恶意软件的操纵者。Gembe没有举报这个人,而是就这款恶意软件向他请教了些许问题。他有了一个计划。.

“虽然现在我的Steam账户上有2000欧元,但是在那时我买不起游戏,”他解释道。

“所以为了解锁那些我想要玩的关卡,我编写自己的恶意软件用来窃取光盘密钥。它立刻成为当时最优秀的恶意软件之一,主要是因为我开始利用Windows平台的漏洞编写一些补丁。”

跟随弗里曼

一发现突破口,Newell的第一个想法是去警局。第二个想法是去接近游戏玩家。

2003年11月2日晚上11点,Newell在『半条命2』官方论坛上发布一则消息,题为“我需要社区援助。”

“是的,已经发布的源代码是『半条命2』的源码,”消息中他承认。Newell接着概述了Valve公司到目前为止能够团结在一起的事实。

他解释道,有人在近三周前登录了他的邮件账户。不仅仅如此,公司里的大部分主机上都被安装了击键记录程序。据Newell所言,这些程序是专门以Valve公司为目标所创建,所以这些程序不能被任何的病毒扫描程序发现。

不管是谁做的,这个人聪明能干,对他的公司非常感兴趣。但为什么要这样做?

进入地点

虽然不可否认剥削和伤害,但Gembe编写恶意软件的罪行是受游戏热情驱使而并非利润。

他最喜欢的游戏是半条命。在2002年,像很多系列粉丝一样,Gembe对即将发布的续集的细节非常痴迷。当时他就产生了这种想法。如果他能入侵Valve的网络,他就可能发现一些其他游戏玩家不知道的东西。

一个不善社交,在艰苦环境中成长的人,通过吸纳社区玩家提供内幕消息能够在社区中获取地位。这值得尝试。

“我真没期望能得到什么,”Gembe说。“但是第一次入侵很容易。事实上是偶然发生的。”

“当时我正在浏览Valve网站,查找我认为可能存放游戏的可访问网页服务器。Valve的网站对外部来说非常安全,但缺点是他们的域名允许匿名AXFRs,这给了我很多信息”

AXFR全称是匿名完整区域传送,一个用于同步主服务器数据到备份DNS服务器的工具。但这也是黑客们用来偷窥一个网站数据的协议。通过传输这些数据,Gemebe发现ValveSoftware.com所有子域名。

“在端口浏览记录中,我发现一个很有趣的服务器,它从Valve网站延伸到另一家名叫Tangis的公司,这家公司致力于可穿戴计算设备,”他说。

“该服务器网页根目录是公开可写的,这样我能够上传ASP脚本到该目录并通过网页服务器执行这些脚本。Valve在内部网络中没有对该服务器使用防火墙。”

Gembe首次尝试就发现一个无防备的通路可以进入网站。

“Valve的主域控制器用户名为‘build’,密码为空,”他说。“这允许我找出系统的哈希密码。于此同时, Eidgenössische Technische Hochschule Zürich 提供了一个在线的哈希破解器”,所以我能立刻破解密码。“

”一旦我完成了那些…那么,基本上我就拥有了通往这个王国的钥匙。“

牵连设备

此时,Gembe并不担心踪迹的掩盖。到目前为止,他没有什么要隐藏的。但是随着探索的深入,他想确认自己是否仍未被发现。

“那时我唯一关心的不被踢出,”他说。”但是我能够访问数量无限的代理服务器,所以我并不担心。首先,我找到一个可以建立某种隐藏的主机。“

Gembe开始四处查找游戏的信息。他发现了各种游戏开发的设计文档和备注。这正是他期望查找的,也是他此行的目的。

过了几周时间,Gembe意识到Valve内部没有人注意到他存在于公司网络中。他开始一点点前进。

就在那个时候他点击了下载,获取了期待已久的游戏的源代码。

这太有诱惑力了。在2003年9月19号,Gemebe点击了下载按钮,偷走了Valve的王冠。

“获取源代码很容易,感谢Perforce客户端的网络性能,但用SourceSafe客户端获取游戏数据却很可怕,”他解释道。

“因为这个原因,我编写了自己的客户端,该客户端通过TCP有自己的数据传输机制,通过散列检测发生变化的文件并进行传输。”

“游戏并不能在我的计算机上运行。我对一些代码做了修改让它在一个基本形式下运行,没有着色器或其他任何设备,但这并不好玩。还有,我仅仅拥有游戏开发的主分支。他们有很多开发分支以至于我甚至没有来得及去检测它们。”

直至今日,Gembe依旧坚持他不是上传源代码到网络的人。但是不可否认的是让将源代码给了那个上传代码的人。

“我不这么认为,”他说。“当然,这有一些吹嘘的成份。但我分享源代码给那个人时,他承诺我不会外传。但他没有。”

一旦游戏出现在BT上,它就无处不在。

“事情已经发生,”Gembe说。“你无法能阻止网络。”

“好日子”

社区对Newell的求助响应不一。有些人对失窃表示同情,其他人感觉被Valve欺骗,因为他们本一直相信游戏会按计划在2003年末发布。

除了一些领导,没人能提供可能的犯罪信息。联邦调查局参与到调查中来,但却一无所获。

由于泄露事件,此时Valve公司奋战数月的的团队有些不知所措。这个游戏的开发每月花费公司一百万美元,而且还远未结束。此次的泄露不仅造成了经济损失,而且打消了本已疲惫不堪的团队的积极性。一位年轻的设计者问Newell,“这会导致公司破产吗?”

2004年2月15日上午6点18分,Valve的总经理收到一封来自‘Da Guy’的无标题邮件。

邮件在宣称对数月前入侵Valve网络负责之前,以“你好,Gabe”开篇。

Newell起初不确定是否应该相信这封邮件。但是邮件中的两个附件只有拥有Valve服务器特定领域访问权限的人才能获取,这表明了邮件中的信息是真实的。

在『半条命2』被发布到网上五个月后,所有领导都不再关注这件事后很久,Newell的人出现在他的门前。

沙地陷阱

Gembe为什么发送那封邮件?”因为我对发生的事情感到抱歉,“他说。”我希望他们知道这事是谁干的,而不希望事情按他们的方式解决。“

但Gembe做的并不止这些。这个年轻人找到了弥补自己罪行的正面方式,对双方都有利。在一封邮件中,他询问Newell是否愿意雇佣他。

“我那时很单纯,”他说。”能在一家游戏开发公司工作一直是我的梦想,所以我问了他们。希望他们能够原谅我做的事,主要因为那不是故意的。”

令Gembe惊讶的是,过了一些日子Newell回复并同意了,Valve对他很感兴趣。Newell问Gembe是否愿意进行一次电话面试。

这项提议背后的真正动机并不是去评估Gembe是否是公司岗位的合适人选。而是为了让Gembe坦诚对泄露事件负责。这是联邦调查局的老套路,通过满足对方的自豪感来获取供认。

Gembe虽然有所顾虑,但还是将顾虑抛至脑后。“希望事情向好的一面发展,”他说。“但事实上我并不是很聪明。”

他回忆了与Counter-Strike和Steam游戏开发者Alfred Reynolds以及Portal作家Eric Wolpaw的电话面试,但他可能错了。(事实上,Wolpaw说他当时尚未加入公司。)

“首先,他们想知道我是如何黑进他们的网络。我详细地告诉了他们。然后,他们了解了我的经验和技能。我仍然记得他们对我能说一口不带任何口音的流利英语非常惊讶。”

三人谈论了四十分钟。在自己的英雄事迹面前,Gembe所有的愧疚感都消散了。但比起当他收到二次面试时肾上腺素上升,这根本算不上什么。这将是一次在美国西雅图Valve总部的现场面试。

设置好陷阱之后,Valve和FBI需要获取Gembe的签证(以及他的父亲和兄弟,并询问他们能否一起陪他来美国)。但是他们担心Gembe一直访问Valve的服务器会造成潜在损害。所以FBI联系了德国警方,提醒他们这项计划。

17号高速公路

没过多久,Gembe醒来时发现自己躺在枪杆之下。他穿上衣服,在武警战士的护送下挤进他父亲家狭小的走廊走下楼。

“在离开前我能弄点吃的吗?”Gembe问。

“没问题,”其中一个警察说道。

Gembe伸手拿了一把面包刀切几片面包。“屋内所有的警察对我举起步枪,”他说。

喝了一杯咖啡,抽了一根雪茄,他爬进一辆面包车尾部,被带向当地警局。在那里局长接见了他。局长走向Gembe,看着他说,“我们在你登机前找到你,你有没有觉得自己很幸运?”

Gembe被警察审讯了三个小时。“他们问的大部分问题是关于Sasser-Worm,”他说,Sasser是一种特别厉害的恶意软件,该软件会让计算机运行易受攻击的Windows XP和Windows 2000版本。

“由于某种原因,他们认为我和Sasser有关,但我矢口否认。Sasser是当时的大新闻,在一次联合行动中,其作者Seven Jaschan和我在同一天被突击搜查,因为他们认为我会提醒他。”

“和他一样,我的bot也利用了LSASS服务中相同的漏洞,除了没有让主机系统崩溃,所以我猜他们认为我给了他漏洞检测代码。当然,我否认了这一点,并告诉他们我从未写过如此劣质的代码。”

警察开始意识到Gembe与Sasser-Worm无关之后,他们开始问了Valve的事。

“我本可以拒绝回答并要求见律师,但我选择了毫无保留的告诉他们我知道一切,我猜他们很赞赏,”他说。“问我问题的人很喜欢我,因为他说’你并不向其他大部分人一样是个混蛋。‘那个部门主要负责儿童色情案件。”

“我想当时我对他们很开放,因为我并不认为自己做了什么错事。“

Gembe被拘留候审两周。警察一度认为他不会逃跑后决定将他释放,条件是在他审讯前三年,每周要向他们登记三次。

我们的恩主

在他等待出庭的日子里,Gembe努力工作以改善自己的生活。他学成出师,在安全部门找了份工作,负责编写Windows程序,用于系统安全管理、数据库优化和服务器管理。

Axel Gembe的审讯持续了7个小时。尽管期间有《华尔街日报》的人出现,但Valve公司却没有人出席。除了安全漏洞,没有一项证据表明Gembe需要对『半条命2』的源代码在网络上发布负责。

然而Gembe承认入侵了Valve公司的网络。法官判他缓刑两年,他坎坷的童年以及他为改变生活所做的考量为他争取宽大的处理。

在审判时,『半条命2』已经售出860万套,它的成功似乎没有受到2003年11月4号泄露的影响。

现在Gembe 28岁。近十年来,他对『半条命2』的泄露极为后悔。

“我当时很年轻,做了一些自己不该做的事,”他说。“本应该好好利用自己的时间。我很后悔给Valve带来了困扰和经济损失。我也很后悔将一些大学作为恶意软件测试对象,给其带来经济上的损失。”

“我对当时我做的所有非法事情感到后悔…我很庆幸在我被捕之前没做什么要用我一生来交换的事。”

这个偷了游戏人是谁?现在Axel Gembe会对Gabe Newell说什么?

“我想说:我对自己做的事感到十分抱歉。我并非有意伤害你。如果能重新再来,我一定不会那么做。想到这些仍使我很伤感。我就喜欢就呆那儿,看你做的事,但最后我搞砸了。”

“你是我最喜欢的开发者,我会一直支持你的游戏。”

(注:限于译者水平有限,不足之处恳请指正。)

偷了『半条命2』源代码的那小子,首发于博客 – 伯乐在线

用Python实现KickStarter跟踪器(1)

自从发现了HDMIPi KickStarter,我就经常关注KickStarter上其它的众筹项目。我现在就粉着4,5个项目。它们能实现目标吗?还是会失败呢?这很值得关注,但是密切关注1个或2个以上的项目是很浪费时间的。如果我能让一个小小的电脑和屏幕替我关注这些项目,比如,每分钟访问一次,然后再回馈它们的状态给我,不就很棒吗?

我知道一个非常赞的Python模块,urllib2。我以前就用它做过一些简单的事情。那么它到底有多难呢?答案是,真的不太难。我花了大概一个半小时用它来搭建基本框架,跟踪了1个项目。但是用了更多的时间来把其它的项目也添加进去,还有,把输出弄得好看一点(你也会这么做)。

所以怎么实现呢?

和所有程序一样,你只要把它分解为几个小部分就可以了。然后你就开始搬砖,记得每部分搬完之后要进行测试喔。其实基本上只要有个树莓派就够了…

  • 访问跟踪项目的Kickstarter页面
  • 在html中查找我们想要的数据
  • 把这些数据抓出来
  • 让它优雅地出现在屏幕上
  • 等一会儿
  • 再全部执行一次

所以我们需要做的第一件事情就是想办法在网页的html中找到我们想要的数据。这需要费一点手动研究的功夫。

查找数据

许多浏览器都能查看html源代码。你只要访问你想跟踪的那个项目的网页,然后让你的浏览器查看就行了。在Mac上使用Chrome的话,它的步骤是这样的:

View > Developer > View Source

programming a kickstarter1

在这段源代码中使用快捷键CMD+F(PC是CTRL+F)来查找字符串pledged,我找到了一行有3个有效数据的代码。这是HDMIPi KickStarter page的第842行。

我想要的大多数数据它都有,但我还想要知道项目的剩余时间。然后我在网页的上部找到了它。(HDMIPi page的第88行)

当然啦,进行中的项目所剩时间肯定和这个不一样的。(比如,16个小时或者24天什么的,而不是0秒)

所以我们就找到从2行HTML中抓有效信息的方法啦。

data-goal=”55000.0″ 告诉我们目标资金是多少(单位是英镑或者美元)

data-percent-raised=”4.750008363636363636363636364″ 这个数字乘以100就是现在已经达到目标的百分之几了。在程序里,我们会把它分为两个部分。

data-pledged=”261250.46″ 告诉我们现在已经筹集到多少钱了

twitter:text:time” content=”0 seconds” 告诉我们这个项目还剩多少时间。

现在我们要做的就是让电脑找到它们,把源代码分离出来,切出数据,然后用你喜欢的方式来把它显示出来。听起来是不是灰常简单呀:)

开始搬砖

所以要想知道如何找到数据,或者至少要知道它在哪一行的话,我必须要做点urllib2的功课了。我以前就知道它可以用来加载一个网页,只是方式比较野蛮。我在Python官方文档里面发现了一个超棒的方法来完成。基本上,就是导入urllib2中所有需要的对象,然后把urlopen() 塞进 try: except: 中的空白就好了。这样的方法能够处理断网或者网页没有响应的情况。它不会退出程序,而是进入“Exception”,告诉你出什么错了,然后再运行一次。所以我刚才说它“野蛮”。

现在我们加入URL

如果我们不给someurl 一个URL网页地址的话,这段代码就是一个花瓶。所以我们就在上面添加传递地址的代码,并且让程序在html文件中查找我们需要的源代码行,找到之后把它们打印出来。

这个结果是在…

programming a kickstarter2

现在我们要分离代码行啦

所以那2行源代码已经被我们找到了。现在我们要做的是将数据从源代码行中切出来。那这是怎么做到的呢?我们将用一个神器级函数, split() 来实现。

下面代码的第20行,我们写到

days_left=line.split(‘”‘)[3]

这是用 split() 来把整行源代码分离成…

<meta property=”twitter:text:time” content=”0 seconds”>

…N个字符串。每遇到字符 ” ,它就将前后字符串分离(并且删去 ” )。所以它就会把这行源代码分离成一个包含一下元素的变量列表:

<meta property=
twitter:text:time
content=
0 seconds
>

如果把 line.split(‘”‘) 打印出来的话,就是这个样子的…

[‘<meta property=’, ‘twitter:text:time’, ‘ content=’, ‘0 seconds’, ‘>’]

列表第一个元素的位置是0。这就是它的下标。我们要找的‘0 seconds’,这个数据的下标是3。所以我们用[3]来“切出”我们所需的元素。

days_left=line.split(‘”‘)[3] (这个[3] 叫做“切片标记”)

完整的代码来了

26行到34行是进一步的分离和切片。在使用此数据进行计算处理之前,我们还需要把这些数据转化成浮点型。

print ‘target: %.2f’ % float(target[1]) 这行代码把‘target’的第2个元素转化成浮点数,然后用 .2f 来保证打印出来的数字只含有2位小数。

结果就是这个样子滴

programming a kickstarter3

显然,你该在第4行的代码里换一个进行中的项目地址。

目前为止我们做了…

  • 加载一个网页
  • 查找数据所在的源代码行
  • 分离此行源代码然后将所需的数据切出来。
  • 把数据转化为我们能处理的东西(浮点数)
  • 只在屏幕上显示两位小数

这是一个很好的开端。下一部分,我们将继续完成…

  • 给输出结果“化个妆”
  • 添加更多项目
  • 每过一段时间将它们循环一次

用Python实现KickStarter跟踪器(1),首发于极客范 – GeekFan.net

Adafruit的树莓派教程第十三课:电力控制

概览

树莓派可以成为你家里强大的自动化控制终端,但最实用的应该是控制家用电器以及灯的打开关闭了。那就意味着小派应该能够安全的控制110V电力。

lesson13_1

这节课里,你将学习把在第十二课中接触到的PIR\(人体热式传感器\)与Adafruit电力开关尾插Module 2型结合,在检测到与运动时自动开关设备。

你需要的

要完成这节课的内容,你需要下面的东西:

PIR 人体热式传感器

lesson13_2

电力开关尾插2型模块(Powerswitch Tail 2 Module)

lesson13_3

树莓派扩展板

lesson12_4

小块面包板

lesson12_5

树莓派

lesson12_7

一把跳线

lesson12_6

硬件部分

Adafruit电力开关尾插2型看起来是一个110V插头中间带了一个小盒子。

如果你主要使用的是220V电压,那么这篇教程不适合你 – 如果我们获悉了某种等效的220V电力控制器,我们会在这里附上链接的

lesson13_3

那个小盒子实际上是一个光隔离固态继电器。光隔离的意思是实际上在低电压与100V主电压转换之间并没有电力连接。这对于小派来说非常的安全,大大降低了烧毁小派的可能性。

更进一步的是它的控制输入电流是3mA,输入电压是3.3V,这意味着我们能够直接通过小派的输出针脚控制它。

PIR传感器将会连接到与第十二课不同的针脚上,所以请确保黄色针脚连接正确。

lesson13_4

电力开关尾插带有一个LED指示灯来显示它是否是开着的,所以你不需要在上面连接高电压。

软件部分

这个项目可能是所有自动控制灯项目中被过度设计(over-engineered)的一个。实际上你不需要一个树莓派来开关电力,但是这个实例可以很容易的被应用到其他用途上。比如,你可以通过结合温度,湿度,光线或者一些互联网的天气预报信息来控制加热器,风扇或者是加湿器。

import time 
import RPi.GPIO as io 
io.setmode(io.BCM) 

pir_pin = 24 
power_pin = 23

io.setup(pir_pin, io.IN) 
io.setup(power_pin, io.OUT)
io.output(power_pin, False)

while True:
    if io.input(pir_pin):
        print("POWER ON")
        io.output(power_pin, True)
        time.sleep(20);
        print("POWER OFF")
        io.output(power_pin, False)
        time.sleep(5)
    time.sleep(1)

这个程序首先设置了两个用到的GPIO针脚,一个用于把PIR传感器作为输入,另一个输出到电力开关尾插上。

主循环一直等待PIR传感器侦测运动,然后打印一条信息,之后打开电力开关,等待20秒之后关闭开关。

一旦输出被打开,那么将会等待5秒防止在5秒内重新触发输出。

然后每次循环会延迟一秒。

测试与配置

有许多方式可以连接到你的树莓派上。也许最简单的方式是使用SSH(见第六课)并使用下面的命令打开一个编辑器:

nano powerswitch.py

然后粘贴代码,并按Ctrl+X保存。

lesson13_5

在开始运行之前,拿东西改在PIR传感器上,这样它就不会在你没准备好之前激活了。

然后使用下面的命令运行程序:

sudo python powerswitch.py

拿走PIR上面的覆盖物你应该能看到一条”POWER ON”输出然后电力开关上的小LED会点亮,并在20秒之后熄灭。

在代码里不要猛烈地开关电力。许多设备,包括灯泡在频繁开关时都会造成损坏。这种设计至少要等待几秒再打开或关闭电力。

Adafruit的树莓派教程第十三课:电力控制,首发于极客范 – GeekFan.net

Adafruit的树莓派教程第十二课:感知运动

概览

在这节课里,你将学习到如何使用PIR人体热式传感器连接GPIO来激活门禁。

lesson12_1

这节课,我们将把注意力放到感知运动和激活门禁开关上。我们会在第十三课构建这个安全感知系统,使用小派作为数字输出来在侦测到运动时控制电力设备。

你需要的

要完成这节课讲述的内容,你需要下面的东西。

PIR人体热式传感器(Adafruit 189号产品)

lesson12_2

电磁门禁传感器(Adafruit 375号产品)

lesson12_3

树莓派扩展板

lesson12_4

小型面包板

lesson12_5

一把跳线

lesson12_6

最后,当然是小派啦

lesson12_7

硬件部分

我们将会把两个传感器都连接到树莓派上。两个传感器都不需要额外的部件。

lesson12_8

PIR人体热式传感器是带插座的引脚。一定要确保引脚插得是正确的,红色的应该插在5V上,黑色接地,黄色的插在扩展板的18引脚上。

lesson12_9

尽管PIR传感器需要5V的电源供电,但它的输出却是对小派友好的3.3V,所以它可以直接连接到GPIO的上作为输入。

门禁开关使用了一个叫做磁簧开关(reed switch)的东西。在一个玻璃管里装着两个簧片相互连接,然后外面包裹着塑料。当一个磁性物体(另一个白色方块)靠近这个磁簧开关的时候,两个簧片接触,然后开关关闭。因为这是个开关,所以正着接反着接都行。

我们会利用小派自身来在磁簧开关针脚上创建一个内部的上拉电阻,所以我们就不需要额外的上拉电阻了。

软件部分

这个程序只是一个循环,在侦测到运动的时候打印一个消息,或者磁力从门上移除。

程序使用了Rpi.GPIO类库。见第四课

import time
import RPi.GPIO as io
io.setmode(io.BCM)

pir_pin = 18
door_pin = 23

io.setup(pir_pin, io.IN)         # activate input
io.setup(door_pin, io.IN, pull_up_down=io.PUD_UP)  # activate input with PullUp

while True:
    if io.input(pir_pin):
        print("PIR ALARM!")
    if io.input(door_pin):
        print("DOOR ALARM!")
    time.sleep(0.5)

程序里把pir_pin置为一个普通的输入针(a plain old input)。这是因为PIR传感器有一个3.3V或0V的数字输出。与之相比,door_pin是一个开关,不会产生电压作为数字输入。所以,这个输入针使用了一个额外的参数(pull_up_down=io.PUD_UP)。这将激活一个内部的电阻使得输入变高(上拉)除非有更强的电流(比如开关接地)来把它拉低。

然后循环轮流读取输入然后打印一条响应的消息。记住门禁开关报警只会在磁力从传感器附近移除时才会被激活。

配置与测试

有许多方式可以连接到你的树莓派上。也许最简单的方式是使用SSH(见第六课)并使用下面的命令打开一个编辑器:

nano switches.py

..然后把代码粘贴进去,按Ctrl+X保存。

lesson12_10

在开始运行程序之前,把磁铁靠近开关并且在PIR传感器上盖上一些东西。

然后使用下面的命令运行程序:

sudo python switches.py

..然后你可以看到终端有输出了,当你移走磁铁,或者把盖在PIR传感器上的东西拿开。

一个好的方式或许是把你的孩子放在PIR传感器前面,看他们能坚持多久!(译者:这主意简直棒(sang)极(xin)了(bing)啊(kuang))

Adafruit的树莓派教程第十二课:感知运动,首发于极客范 – GeekFan.net