0%

介绍

在Web应用中,用户交互是十分基本和重要的功能,而来自用户的输入又离不开键盘。现代Web浏览器已经在底层对键盘做了相对较好的支持(逐渐就能看出为什么是“相对”),并通过API的方式暴露给开发者。这包括针对按键的事件捕获,不同语言键盘布局(Keyboard Layout)的支持,对输入法的支持(涉及中、日、韩等东亚语言),以及对不同平台(Windows、Mac、iOS等)上组合键的支持,等等。在这个系列的开头,我们来过一遍浏览器提供的这些与键盘输入相关的基本技术特性,先有一个基本印象,后续再逐渐展开。

按键事件

对于按键事件(Keyboard Event)[1]大家应该都不陌生,在开发Web应用时或多或少应该接触过。一般来说,这类事件是你在键盘上按下某个键时最先触发的事件。“最先”的意思是还有后续的事件类型产生(比如input事件等),用于进一步的输入逻辑处理。而到这一步,你(或者说Web应用)能知道的是,浏览器从操作系统那里得到的按键信息。至于说这个按键会得到怎样的输入和文本,那就是后续事件的事情了。我前面还加上了“一般来说”,这是因为不同的浏览器,针对不同的输入场景(是否使用输入法),还有不同的实现。

阅读全文 »

python

需求

最近在阅读一些PDF格式的资料,经常会进行划线并做笔记,我希望这些内容在阅读结束之后能够方便地整理出来并回顾,于是探索了一下到处划线文字和笔记的方法。

首先,我去确认PDF阅读器是否提供了需要的功能。以Foxit Reader为例,它的确提供了评论导出的功能,但是有局限性:

  • 只能导出高亮的文字到文本文件
  • 笔记内容只能导出到.fdf格式,这就需要后续处理
阅读全文 »

闭包

与很多动态类型语言类似,Groovy也有对闭包的支持。这既能让程序更加灵活,也不像Java中匿名函数那么复杂。除了语法上的优雅,闭包还为函数将部分实现逻辑委托出去提供了一种简单、方便的方式。闭包可以作为函数的参数和返回值,这使得Groovy中也支持高阶函数

groovy

常用场景

闭包能够扩充、优化或增强另一段代码,你可以理解为闭包在给函数打补丁。闭包有两个非常擅长的具体领域:一个是辅助资源清理,另一个是辅助创建内部的领域特定语言(DSL)。比如:

阅读全文 »

引言

Groovy是一门运行在Java虚拟机上的语言,语言特性与Java很类似,又有所区别,既可以利用JDK中丰富的API,由有自己独特之处。我们熟悉的应用场景之一就是在CI工具Jenkins中编写集成脚本。这篇文章就从类型的角度来分享一下Groovy与Java的一些不同之处,供您参考。
groovy

动态类型

Groovy是动态强类型语言。静态类型语言的一个特点是编译时的类型检查,比如Java和C++语言。动态类型则可以把类型检查推迟到运行时。所谓类型的强弱,是指在运行时是否能及时发现类型错误。

比如C++,如果把一个变量强制转换为一个错误类型,编译器会并不会阻止,而在运行时是否出错、以及什么时候出现则不一定。根据内存如何配置,调用是否多态,虚函数表如何组织等不同条件,最终表现也很难预测。这就是“弱”类型语言的表现。从这个意义来讲,Java和Groovy是强类型语言,可以在运行时找出错误的类型转换。

阅读全文 »

前言

本文来谈谈Linux命名空间的机制,以及基于该机制的容器技术是如何实现的。

容器技术

我们如果想共享硬件资源,直接的方法是采用虚拟机技术。每台虚拟机可以分配到一定的硬件资源,有独立的操作系统。有时候,我们还想共享操作系统的内核,在更高的层次实现资源的共享和隔离,这就需要容器技术。

以Linux操作系统为例,如果我们想让不同的进程运行在同一个操作系统上,却能看到和使用不同的系统视图和系统资源,Linux分别提供了两种实现方法:Linux命名空间和Linux控制组(cgroups)。系统视图是指一个进程可以看到的系统相关的信息,如文件、进程、网络接口、主机名等。系统资源则是只具体的硬件资源,如CPU、内存、网络带宽等。

一个容器其实就是对应不同类型资源的命名空间的集合,这个集合构成一个系统视图,也可以将容器视为一种轻量级的虚拟机。想要理解容器,首先要理解Linux命名空间。主流的容器技术如Docker,就是基于Linux命名空间实现的。

cgroups (Linux Control Groups) 也是Linux内核的功能,用来限制一个进程的资源使用量,这使得一个进程不能过分使用资源导致其他进程无资源可用。

阅读全文 »

​本文是阅读老喻老师的新书《人生算法》的心得体会的下篇。前一篇我们谈到了何谓人生的算法,以及我认为算法中很重要的部分:模式。闭环和内核都是有用的模式。这一篇我们来说说愿景这个话题,以及这本书的重要主题:概率思维head

愿景

当我们识别和挖掘了自己的内核之后,就可以基于这个内核,规模化复制,并选择一个平台或者市场,开启增长之路。

外在的需求需要与内核的特点契合,从而达到最佳状态,让增长可持续。这就要求建立一个反馈回路,不断发现新的增长点,甚至是建立新的内核。

从哪里获得反馈呢?答案之一就是愿景。企业和组织喜欢强调愿景,愿景听上去虚无缥缈,不是很实在,但我觉得还是很重要的。

之所以觉得”虚“,我认为有两个原因:一是因为我们没有把他与切身利益和行动联系起来,二是愿景本身不够清晰、明确、可度量。

阅读全文 »

​本文作为阅读老喻老师的新书《人生算法》的心得体会。之前阅读老喻的公众号《孤独大脑》就经常有启发和思考,这次阅读这本书也不例外。首先总结一下我的阅读感受,然后详细说说一些收获。

head

阅读感受

阅读很快,但需要后续反复思考、修正和实践,有一个把书读厚的过程。当内化为自己思考和行为习惯的一部分后,把握了精髓,就是把书读薄的过程。

注意从案例到个体的迁移。书中商业案例较多,这种迁移尤为必要。但这需要更深入的思考,很多道理可能一时还想不通,想不透,但不需要着急,可能需要未来的顿悟时刻。

每个章节的主题就像在头脑中种草,一些算法段落可能一时无用武之地,但某一天可能就无声息地长成参天大树,形成系统地思考框架。在书边做笔记就是想把草种的深一点。

阅读全文 »

​本书的作者是尼尔·波斯曼,你可能对他不熟悉,但他的老师你应该听说过,就是《理解媒介》的作者马歇尔·麦克卢汉。本书虽说是探讨技术对文化的影响,但行文过程中时刻不断有关于媒介的话题和背景。作者还有其他两本著作也比较出名:《娱乐至死》和《童年的消逝》。本文谈谈读完这本书的思考和感受。

head

1

总的来说,作者波兹曼批判的不是技术,而是对技术的投降。投降就意味着不抵抗,束手就擒,文化对于技术的入侵还有抵抗的余地,不应该放弃。

阅读全文 »

引言

最近看了一些金融学专栏,学到期货这种金融衍生品时,有了一些疑惑,毕竟自己没有做过这方面的实际操作。反复思考和探索了几天后,基本明白了期货的原理。实际上,它的原理不是很复杂,只是在实际操作时有一些规则和限制,如果不了解,就会对理解原理造成障碍,下面谈谈我的理解,仅供参考。

1

什么是期货呢?期货的对应词为现货,现货交易就是当场一手交钱,一手交货。期货就是约定在未来某个时间以某个固定价格交货。这个约定的书面形式就是期货合约。为什么要有期货这个东西呢?

我们知道金融的本质是人类对抗不确定性的工具,以及相关的制度安排。市场中不确定很高的属性之一就是商品的价格,人类如何对抗它呢?

以大米为例,卖米的米商要从种米的农民那里进货,因为大米是粮食,不易长期存储,因此每次进货量不会很大。但米商根据经验认为明年大米的价格可能会上涨,明年卖米就有亏损的风险,那么米商有什么办法呢?

比如,米商们可以跟农民约定,一年以后他们会从农民那里以1元每斤的价格购入1000斤大米,无论到时候的大米行情如何。这样即使未来米价上涨,米商也可以以原价购入大米,规避了风险。对农民来说,相当于固定了一笔交易的收入,这相当于农民把这个涨价的风险承担下来,况且未来的米价也不一定上涨。当然如果农民也认为大米价格会上涨,则这个约定不能成立。

阅读全文 »

head

1

这本书我花了两周读完。作者雪莉特克尔是麻省理工学院社会学教授、哈佛大学社会学和人格心理学博士。她对人与信息技术的关系进行了长达15年的系统研究。所谓群体性孤独,是作者认为的在新技术背景下的生活常态。

作者早期的电子宠物开始谈起,进而聊到了机器人、电话、手机、短信、互联网以及社交网络,通过大量的真实案例,探讨了技术的发展对生活方式和心理活动的影响。其中也不乏比较深刻的话题,比如人类与机器人的区别,人工智能发展对于人类的意义,应该拥抱技术还是应该怀有戒心,社交网络中人们的身份认同,等等。

不过我个人的感觉是,书中的案例十分丰富,但是比较零散而且稍显流于表面。有些相似的案例在不同章节反复出现也似乎没有必要。这使得阅读的体验有些单薄。然而,本书还有有一些话题和观点能引起我的共鸣,还是值得一读的。下面举几个例子。

2

在使用机器人照顾老人和儿童的问题上,作者认为机器人即便能表现出疼爱、友善等情绪,也只是一种行为,而不是态度。在机器人时代,也有着人类可以胜任而机器无法胜任的工作。无论科技发展到什么境界,我认为人类总有独一无二之处,有机器无法胜任之处,这是一种信仰。

阅读全文 »