作者: Keefe Dunn

  • Emacs 入门指南:说明

    为何使用 Emacs ?

    Emacs 为各种不同类型的任务提供了一个整合环境,使人们工作起来更高效:

    • 基本编辑命令一应俱全(数量那是相当多),足以应付各种任务:写代码、读手册、使用 shell 或撰写电子邮件等。
    • 用于打开、保存、搜索和处理文本的各项工具 Emacs 均有提供。

    这种一致性意味着在 Emacs 中工作,往往会比{为每项任务分别}学习使用一种单独的程序,来得更为便捷,因为每个程序通常定义有各自不同的编辑功能集合,以及{不同的}快捷键设定。

    如果对 Emacs 的工作方式不完全满意,我们可以使用 Emacs Lisp(Elisp)语言来定制 Emacs 、自动执行日常任务或添加新功能。Elisp 很容易上手且非常强大:可以用于变更或扩展几乎所有的 Emacs 功能。通过编写 Elisp 代码{进行扩展},Emacs 无所不能。关于这一论点,其论据是,上一节介绍的所有功能(以及本文此后将论及的更多特性)都是以 Elisp 编写而成。

    Emacs 同样具有可移植性。我们能在 Windows、GNU/Linux、Mac OS,以及许多其它平台上以相同配置运行 Emacs。

    在我们开始之前…

    如果已经装好 Emacs,我们可以按照本文介绍的例子学习使用它。开始使用 Emacs 之前,请务必阅读 Emacs 自带的教程。该教程提供了一种交互式实践过程,来让我们熟悉许多基本操作,包括:

    • 启动和退出 Emacs
    • 基础文本操作和编辑命令
    • 打开和保存文件
    • Emacs 概念:窗格、窗体、文件和缓冲区
    • 通过 M-x 快捷键调用命令

    要运行此教程,只需启动 Emacs 并输入 C-h t,亦即,按下 Ctrl-h 键之后再按 t 键。

    教程中所描述的全部功能特性都可以运行于 GNU Emacs 第23版之上。而某些功能不包括在 Emacs 早期版本中,但是可以单独安装。

    有时我们会说:

    获取更多信息,请查阅 (info "(emacs)Using Region")

    这是指 Emacs 手册中的一页,我们可以通过点击链接阅读其内容。另外,我们还可以通过 Emacs 内置的文档阅读器直接访问这些页面,我们称之为信息。要做到这一点,首先按下 M-:,然后输入 (info "(emacs)Using Region"),最后按下 RET 键{回车}:

    Info mode screenshot

    Emacs 手册是学习 Emacs 的最佳资源,我们可以输入 C-h r 来阅读它。我们也可以在网上阅读该手册

    Emacs 还有许多其它的帮助功能,其中一部分将在后面介绍。输入 C-h C-h 可以查看全部帮助项目列表。

  • 『波士顿大照片』20110201:冬季运动战胜冬日忧郁

    Russia Ice Swimming

    2011年1月30日,俄罗斯圣彼得堡,一名男子跃入冰冷刺骨的水中。圣彼得堡的气温约为零下3摄氏度。(AP Photo/Dmitry Lovetsky)

  • Emacs 入门指南:引言

    今起我将陆续发布 Emacs 官方使用指引 A Guided Tour of Emacs 的译文《Emacs 入门指南》,需要说明的是,本翻译完全出于兴趣爱好,与 Emacs 官方中文翻译组无关。

    Emacs 入门指南翻译说明

    为了使读者们能够快速准确地理解本文内容,在此首先对下面译文中出现的一些特别格式作出说明。

    • 原文已有的圆括号,即:(),在译文中原样保留,即:()。
    • 花括号内的文字是为了便于理解由译者添加的,即:{文本}。
    • 方括号加数字用于为译注标号,对应“Emacs 入门指南译注”一节的内容,即:[2]。
    • 本文提及的 meta/M 键对应 PC 的 Alt 键。

    Emacs 入门指南

    Emacs splash screen

    GNU Emacs 手册将 Emacs 定义为可扩展、可定制、自文档化的实时显示编辑器,但如此描述并未告诉初学者们 Emacs 能做哪些事情。为了让读者们就 Emacs 建立起一定的感性认识,下面列举一些能够借助 Emacs 完成的事务:

    除了能编辑纯文本文件,Emacs 还可以编写各种不同的人类语言和编程/标记语言:

    'Hello' in various languages

    Syntax highlighting in Latex mode

    Syntax highlighting in C mode

    (点击查看原始图片。)

    … 以及作为编译、运行和测试程序的工具。Emacs 可以整合 GDB 提供集成开发环境( M-x gdb ):

    GDB mode screenshot

    Emacs 还可以比较两个文件,并高亮不同之处( M-x ediff ):

    Ediff mode screenshot

    Emacs 既是一个文件管理器( M-x dired ):

    Close-up view of Dired

    Emacs 又是新闻、电子邮件和 RSS 源的阅读器( M-x gnus ):

    Gnus screenshot

    更有甚者,我们用 Emacs 玩玩俄罗斯方块也没问题( M-x tetris ):

    Tetris screenshot

    通过以上事例我们不难理解,为什么有些人认为 Emacs 不仅仅是一个文本编辑器,而几乎是一个完整的操作系统了。有些用户觉得自己可以用 Emacs 完成几乎全部工作。

    未完待续……

  • 『WordPress』条件加载JavaScript脚本实现SyntaxHighlighter语法高亮

    在前不久发布的《SyntaxHighlighter:无需插件的语法高亮解决方案》一文中,我们介绍了Syntax Highlighter的用法,通过调用远程javascript脚本实现了语法高亮效果。接下来我们要谈谈如何对其进行优化。

    syntax-highlighter-conditional-loading

    场景

    考虑到代码高亮仅在特定场合使用,亦即,仅当页面存有需要高亮展示的代码时。因此,我们只需在相应页面加载渲染用的javascript脚本即可,而无需在全部页面调用,如此一来可以进一步优化页面加载时间。

    分析

    于是我们的问题转化为:如何对带有代码的页面进行判断呢?以本站为例,与代码有关的文章都归属在分类“程序人生”及其子目录下,因而,我们可以在加载javascript时,对这一条件进行判断,然后选择是否进行Syntax Highlighter脚本的调用。我们通过WordPress提供的Conditional Tags不难解决这个问题。

    方案

    整个解决方案分两大步骤进行:

    1. 判断日志是否归属于某一分类或其子目录。
      这里我们需要构造一个做出此条件判定的函数。幸运的是,WordPress已经给出了答案,即:
      function post_is_in_descendant_category( $cats, $_post = null )
      {
      	foreach ( (array) $cats as $cat ) {
      		// get_term_children() accepts integer ID only
      		$descendants = get_term_children( (int) $cat, 'category');
      		if ( $descendants && in_category( $descendants, $_post ) )
      			return true;
      	}
      	return false;
      }

      我们只需将此函数附加到主题的function.php文件中即可。

    2. 修改header.php,利用上述函数判断并加载Syntax Highlighter的javascript脚本。

      首先我们利用WordPress的wp_enqueue_script函数,加上上面的条件判断函数,加载JS脚本,注意参数为分类ID:

      // 仅当显示指定目录或其子目录下的日志时才加载脚本。
      if ( in_category(100) || post_is_in_descendant_category(100) ) {
      	wp_enqueue_script('shCore', 'http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js');
      	wp_enqueue_script('shBrushPhp', 'http://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js');
      	wp_enqueue_script('shBrushSql', 'http://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js');
      	wp_enqueue_script('shBrushXml', 'http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js');
      }

      然后象往常一样加载CSS并调用使Syntax Highlighter生效的all()函数:

      <!-- Syntax Highlighter CSS -->
      <?php if ( in_category(100) || post_is_in_descendant_category(100) ) { ?>
      <link rel="stylesheet" type="text/css" href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css" />
      <link rel="stylesheet" type="text/css" href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeEmacs.css" />
      <?php } ?>
      
      <script type="text/javascript">
      	SyntaxHighlighter.all();
      </script><!-- End of Syntax Highlighter -->

    至此我们就完成了语法高亮的条件加载,节约了页面载入时间。

  • PENTAX的另类机身造型设计

    pentax-k-x-rainbow

    随着数码相机的日益普及,产品同质化的现象越来越严重,于是许多厂商另辟蹊径,为相机穿上时尚的外衣,试图以此为卖点争夺市场。这种包装方式最早出现在卡片机上,皆因其定位即是家用消费数码产品。

    如今单反相机(DSLR)也逐渐从专业领域进入大众视野,这一市场中,佳能、尼康、索尼三大家族呈鼎足之势,别家难撄其锋。PANTAX为了从中分一杯羹,效仿卡片机包装法,从机身外观入手展开另类竞争,不失为良策。

    一起欣赏K-x和K-r系列奇妙的机身设计:

    [galleryview id=9]

  • 『WordPress』SyntaxHighlighter:无需插件的语法高亮解决方案

    qq21-syntaxhighlighter-graphicsview

    引言

    需要用到代码的博客常常需要解决语法高亮的问题。方案通常有两种,第一是插件,第二是自动生成HTML高亮代码的网站。这二者各有其优缺点:

    1、插件
    不具体介绍,搜索一下能找到很多。
    优点:生成代码简洁无冗余,使用方便,变更样式容易。
    缺点:许多插件通过short-code的方式实现高亮,如果移除插件则样式失效。
    2、网站
    比如知名的发芽网
    优点:通过纯HTML标记实现,样式能持久保存。
    缺点:生成代码复杂,更改样式麻烦。

    以上两种是目前常用的语法高亮方式,这里都不赘述,为了规避上述方式的缺陷,本站决定另辟蹊径,采取引用第三方JS和CSS的方法解决代码高亮问题,即SyntaxHighlighter。

    安装

    基本步骤

    为WordPress添加SyntaxHighlighter支持只需遵循一下步骤:

    1. 为页面新增对基础文件的引用:shCore.js和shCore.css。
    2. 添加合适的笔刷文件,每种语言对应一个笔刷文件。
    3. 引用shCore.css和shThemeDefault.css。
    4. 调用SyntaxHighlighter.all()函数,完成。

    具体到WordPress上,只需在主题header.php文件中的<head />标签内加入以下代码:

    <!-- Syntax Highlighter -->
    <!-- Include required JS files -->
    <script type="text/javascript" src="https://alexgorbatchev.com/pub/sh/current/scripts/shCore.js"></script>
    <!--Include a brush for every language you want to highlight -->
    <script type="text/javascript" src="https://alexgorbatchev.com/pub/sh/current/scripts/shBrushPhp.js"></script>
    <script type="text/javascript" src="https://alexgorbatchev.com/pub/sh/current/scripts/shBrushSql.js"></script>
    <!-- Include *at least* the core style and default theme -->
    <link href="http://alexgorbatchev.com/pub/sh/current/styles/shCore.css" rel="stylesheet" type="text/css" />
    <link href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeEmacs.css" rel="stylesheet" type="text/css" />
    <!-- Finally, to actually run the highlighter, you need to include this JS on your page -->
    <script type="text/javascript">
    SyntaxHighlighter.all()
    </script>

    没错,以上EMACS编辑器高亮效果即是用本文介绍的方案实现的,除此之外还有多种高亮主题可供选择。

    <pre />标签方法

    pre 元素可定义预格式化的文本。被包围在 pre 元素中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体。<pre /> 标签的一个常见应用就是用来表示计算机的源代码。

    优势:简单易用;如果高亮方法出现问题,不会对已有样式造成大的影响;在RSS阅读器中显示为普通<pre />标签的效果。

    问题:必须对尖括号使用转义字符。即,“<”用“&lt;”,“>”用“&gt;”替换。

    SyntaxHighlighter会自动搜寻以适当class属性修饰的<pre />标签,然后调用相应的笔刷进行渲染,达到语法高亮的效果。class中唯一需要写入的参数是brush(详见配置),取值为笔刷短码

    以高亮php代码为例,使用时只需为代码段添加

    <pre class="brush: php"></pre>

    标签就能实现高亮。

    结语

    除了<pre />方法之外,还有一种<script />方法,在此不做介绍。

    本方法的优点包括:

    1. 代码简洁无冗余,只需添加几行对JS和CSS的引用即可。
    2. 样式持久保存,不依赖short-code解析。
    3. 变更样式容易,只需修改一行代码更换加载的CSS主题。
    4. 使用方便,无需每次手工粘贴代码到网站去生成HTML标记,只需给代码段增加pre标签。
  • 『索尼』历数PSP2注定失败的五大理由:下篇

    中篇》我们分析了PSP2注定失败的两个理由:大屏幕游戏采用大屏是有原因的、核心向游戏不再是杀手级应用。本篇我们讨论最后两个原因。

    四、社会化和本地化特性无用,因其达不到规模效应要求的保有量

    psp2-social-game

    任何社会化应用的关键因素是普及。Facebook之所以成功是因为每个人都在用它。iPhone的社会化应用之所以成功是因为iPhone的保有量很大,Android情况类似。任天堂的DS-to-DS功能很成功,因为在东京,一台DS与另一台的距离永远不会超过七、八英尺。然而PSP2能够达到足够的保有量,使其社会化应用普及开去吗?又或许,数千名玩家查看他们的“雷达”,却什么也看不见?

    我猜将会出现后面这种情形,尽管这样的猜测仅仅基于我对PSP2销售情况不容乐观的估计。此外,其机种设计明白无误地倾向于注重单人游戏体验,因而社会化应用的出现显得不那么协调。PSP2是为游戏而生,还是为社交应用而生?PlayStation应用程序呢?摆在什么位置?新型“PlayStation Phone”呢?在我看来,这些设备的社交体验在原始设计上的分离,将导致它们起步阶段即告失败。

    五、本有机会成为革命性产品,最终却不过新瓶旧酒而已

    索尼一股脑儿将所有技术都用上了。当然,这比没有好,但他们本可以精选、整合,制造出划时代的产品。读者们,请再忍耐我最后一秒钟。(译注:某些死忠索尼饭看到这里估计要发飙了…)如果新PSP完全无视大作游戏的体验,而把焦点完全放在PSN下载内容(如PixelJunk)上呢?设想一下:较低的配置(机能与PSP相当,但是运行效率更高)将使更轻更薄的设备成为可能,价格也更为低廉。你能想像可以访问所有PSN游戏的新款PSP以150美元的价格发售吗?我能。只需要一点资金做适当宣传,新款PSP完全可以换一个名号发售,然后将自身从其它类似设备(如平板电脑、游戏平台、手持设备等)中独立出来,避免直接竞争。而不是像现在这样,将重点放在与PS3较劲上。


    PSP2最大的问题在于,它是现有游戏平台PS3的简化版,或者从广义上说,它是PS3和360正在成为的家用游戏机和媒体中心。索尼应该目光更长远些,把重注下在PS3上,然后将PSP设计成一个原创游戏平台,而不是PS3的简化版。他们本可以成为游戏新世纪的弄潮儿,但却选择了原地踏步。

    全篇完。

    来源:CrunchGear

  • 『索尼』历数PSP2注定失败的五大理由:中篇

    上篇》中我们分析了第一个原因:缺乏真正独到的游戏特性。本篇我们讨论第二和第三个原因。

    二、大屏幕游戏采用大屏是有原因的

    big-screen

    PSP2承诺实现“PS3级”的图形和影音效果。我觉得很难理解为什么有人会想要将大屏幕的良好体验打包到小屏幕上。这不是说其图形硬件毫无价值,对开发人员而言,强大的图形机能肯定令他们感到欣喜,但即使在超大的5英寸屏幕上,要感受怪物猎人的恢弘景观或生化危机的环境气氛仍然很有难度。事实上很多大名鼎鼎的游戏(如使命召唤、战神、潜龙谍影)都有大屏幕PS3版本,那么PSP2的“PS3级”图形和影音效果又有什么意义呢?为了适应掌机的便携性和可访问性,游戏大作必将牺牲效果。在已有完整电视游戏版本的情况下,你会愿意在小屏幕上玩这些大作的缩水版么?

    在PSP上最畅销的游戏是手柄风格的游戏— 因为只有这类游戏可玩。与此同时,DS上销量最好的游戏比PSP上的(怪物猎人便携版3rd卖出4百万份)更卖座。从总体上看,核心向游戏没那么受欢迎。

    人们早已看清大预算游戏的本质:快餐式娱乐、宣传造势、缺乏原创性、由同一个制作公司发售、具有相同的星级、同一套设定、同样的操控方式。比以往任何时候更甚。并不是说这些游戏都不好—我们喜欢偶尔看看大片,比如变形金刚、阿凡达啥的,为了逃避现实,这是个完美的理由。不过,你会购买一台只能看快餐式商业大片的电视吗?

    三、核心向游戏不再是杀手级应用

    monster-hunter-portable-3rd

    过去几年中,最有趣和最畅销的游戏往往是一些不知所谓的、半休闲性质的游戏,因其符合普罗大众的诉求。愤怒的小鸟已售出5000万份。这差不多是PSP上最卖座的前15位游戏的销量之和,还要乘以2…当然,其成本更低廉、同时支持更多平台,所以你可以说这完全是两码事。不过问题是:两种产品目前是在同一个市场上竞争,而变形金刚现代战争的掌机版并不是游戏市场注资之处。PSP2并不需要过多地模仿苹果,但是说实话,触摸屏和3G连接的设计,说明他们正在这么做。

    其实他们在PSN上已经取得巨大进展:比如XBLA,吸引了众多年轻有为的开发人员,为其倾注有趣而独特的创意,创造出小而不贵的精品游戏。然而PSP2显然瞅准了其它方向—大力满足Rockstar、EA、Infinity Ward这类大公司的需求。(译注:Rockstar是侠盗猎车系列的开发商,EA自不消说,而Infinity Ward成功制作了使命召唤系列。)这不仅使产品成本大大提高,而且减少了玩家群体数量,虽然掌机游戏(包括iOS和Android,因为这些平台正在成为传统掌机的真正竞争对手)的发展方向不一定是休闲游戏,然而,肯定不是PSP2目前设计的方向。

    更多精彩分析,请关注下篇。To be continued…

  • 『索尼』历数PSP2注定失败的五大理由:上篇

    索尼已经发布的PSP2(暂定名为“次世代便携娱乐系统”),也许将成为掌上游戏机的王者。其机能远强于直接竞争对手—任天堂3DS,并结合社会化和本地化数据、3G、怪兽级5英寸OLED屏幕,以及其它一些先进特性,详细规格在此。它将成为索尼这一世界最知名娱乐电子公司的关键平台之一,也是其新游戏、新媒体和新服务的落脚点。但我认为PSP2没前途,注定失败。

    psp-sunset

    为什么?它几乎在每一项规格配置上都击败了竞争对手,它得到了索尼团队的全力支持,还有数以百万计的销售专营权等待付诸实施。PSP2怎么可能失败?原因在于PSP2没有关注掌上游戏机的基本要素,而且忽视了市场发展的趋势。
    在开始说明之前,我想首先对索尼团队致以由衷的敬意,他们制造出了一台杰出的硬件产品。没有人能诋毁这一点。索尼正在全速前进,不过在我看来,用错了力道、走错了方向。未来三年内索尼将会被任天堂(和苹果)全面压制,下面是几大因由:

    1、缺乏真正独到的游戏特性

    psp2-upside

    请不要误解:PSP2拥有许多独特的功能。其出色的屏幕、怪异的背部触摸板、双模拟摇杆、3G连接,无一不是别具一格的特性。但是PSP2的一堆新特性,不过噱头而已,还缺少一项杀手锏。DS的触摸屏和Wii的运动感应控制,这些才是杀手锏,因此这两个机种从竞争对手中脱颖而出,成为最畅销的产品。其成功的原因是:当某平台具有一种独一无二的游戏特性时(如双屏幕),则每个为该机种制作的游戏都会成为这一平台的专用游戏 。大多数DS游戏在掌机和游戏机届都是独一无二的,因为从根本上其设计必须围绕DS的硬件特性进行,这既保证了游戏的原创性又使这些游戏为DS平台所独占。任天堂希望在其新产品3DS上继续这一策略。

    PSP2就不同了,其硬件无比强悍,开发人员可以自由创作…他们为别的机种制作的游戏,简单移植即可。

    更多详细分析,请关注接下来的精彩篇章。To be continued…

  • 田间美图集

    预览:

    beautiful-fields-thumbnail

    全集在此,话不多说直接欣赏:

    [galleryview id=8]