高效率键盘布局Workman

我们日常使用的QWERTY布局并非为了尽可能提高输入速度而设计,而是为了避免在旧式机械打字机上因为输入速度过快“卡键”,它有意将一些使用最频繁的字母放在了手指输入并不方便的位置(关于这点还存在一些争议,但它效率不高是公认的)。而另一些键盘布局,如1930年代出现的Dvorak,以及近些年出现的Colemak布局则重点针对输入性能而设计。

在电子计算机中,完全不存在“卡键”的问题,但由于大众已经习惯机械打字机的QWERTY布局,尽管Dvorak等布局在输入效率和舒适度上更有优势,但只有很少用户使用(程序员和作家为主)。Dvorak键盘布局的例子常被用来说明一个道理——更好的设计并不总能在市场中取胜。

不过总有人不满足现状,希望追求更高的输入效率,Workman布局的设计者OJ Bucao就是其中之一。

他最初选择了Colemak布局,但在使用中,渐渐发现这种布局中一些不方便的地方。例如输入HE组合不方便,而这个组合在英语中出现的频繁程度仅次于TH(如the、where、when)。

Colemak布局

在尝试微调Colemak布局没能达到理想的效果后,他开始尝试设计一种全新的键盘布局——Wrokman(起这个名字是因为他说想为“以键盘为生的劳动人民”设计,而发布日当天又是劳动节)。

在设计一种新的键盘布局时,主要会考虑两个因素:手指击键时的移动距离(有垂直、横向和斜向移动),以及手指的生理特性(不同手指的力量和长短不同)。综合这两个因素,他对不同按键的敲击难度赋予了不同权重(敲击最容易的是1,最难的是5)。

因而Workman布局的设计从以下原则出发:

  • 优先使用中间一排字母按键(home row);
  • 如果手指上下移动不可避免,优先考虑长手指(例如食指、中指)伸展,以及短手指(小拇指)蜷曲;
  • 尽量使用有力的手指敲击使用频繁的按键;
  • 常用的双字母组合容易敲击。

根据这些原则设计的Workman布局如下:

为了写代码时方便输入符号,另一种经过微调的Workman for Programmers布局如下:

通过一些长篇幅的文学作品为做输入测试,可以看出Workman在手指移动距离的指标上大大优于QWERTY。相比Dvorak和Colemak,Workman也有数据上的优势(不过这几种布局的设计初衷并不相同,所以不能单以OJ Bucao给出的数据作为评判标准)。

Workman布局中,键盘上使用最频繁的按键是下图中黄色的部分。

Workman布局

好奇的你对于尝试Workman布局动心了么?在尝试前,还有几点提醒:

  • Workman是针对英文输入优化的,但中文的输入效率提升不一定这么明显(对全拼输入法估计有效,但五笔等字形输入估计无效);
  • 软件大多只针对QWERTY布局进行优化,如果你在编辑器或者其他常用软件中很依赖快捷键,可能会遇到很多困难;
  • 当你习惯一种键盘布局后,使用别人的电脑会比较困难,另外移动设备大多只支持QWERTY布局;
  • 即便对于英文输入,若想尽可能地提高输入速度,Workman大概也还不是终极选择,一方面它权重模型等细节上还有优化的可能,另一方面人手单键敲击的速度有上限,赶不上类似速录机使用的和弦等方式(不过学习的难度要高多了)。
  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您想使用 Workerman 作为 WebSocket 客户端,可以按照以下步骤操作: 1. 安装 Workerman 首先需要安装 Workerman,可以使用 Composer 进行安装: ``` composer require workerman/workerman ``` 2. 创建客户端脚本 在您的项目中创建一个 PHP 脚本,例如 `client.php`。 在脚本中引入 Workerman: ```php require_once __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; use Workerman\Connection\AsyncTcpConnection; ``` 接下来,可以创建一个异步 TCP 连接对象,用于连接 WebSocket 服务器: ```php $ws_connection = new AsyncTcpConnection('ws://your.websocket.server'); ``` 在连接对象创建后,可以设置一些回调函数用于处理连接事件。例如: ```php // 连接成功回调 $ws_connection->onConnect = function() { echo "WebSocket 连接成功\n"; // 发送消息 $ws_connection->send('Hello, WebSocket Server!'); }; // 接收消息回调 $ws_connection->onMessage = function($data) { echo "收到消息:$data\n"; }; // 连接关闭回调 $ws_connection->onClose = function() { echo "WebSocket 连接关闭\n"; }; // 连接错误回调 $ws_connection->onError = function($e) { echo "WebSocket 连接错误:$e\n"; }; ``` 最后,启动客户端并开始连接: ```php Worker::runAll(); ``` 完整的客户端代码示例: ```php <?php require_once __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; use Workerman\Connection\AsyncTcpConnection; // 创建异步 TCP 连接对象 $ws_connection = new AsyncTcpConnection('ws://your.websocket.server'); // 连接成功回调 $ws_connection->onConnect = function() { echo "WebSocket 连接成功\n"; // 发送消息 $ws_connection->send('Hello, WebSocket Server!'); }; // 接收消息回调 $ws_connection->onMessage = function($data) { echo "收到消息:$data\n"; }; // 连接关闭回调 $ws_connection->onClose = function() { echo "WebSocket 连接关闭\n"; }; // 连接错误回调 $ws_connection->onError = function($e) { echo "WebSocket 连接错误:$e\n"; }; // 启动客户端并开始连接 Worker::runAll(); ``` 注意:上述代码仅为示例,您需要将 `ws://your.websocket.server` 替换为您实际的 WebSocket 服务器地址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值