小名开开

在春天的光影里喘息

一个需求:如何批量建立 Github 帐号下的库。

Github 库通常的建立方式是通过网页,其次是通过 Github 客户端 Publish。

但这两种方式都无法批量建立库,每新建一个库都需要用户重复操作一遍。

查了一下,还真有这样的办法。Github 提供了 Restful API 来帮助企业管理代码库。不光是批量建立,还包括添加删除用户组等等,非常完善。就建库这一需求,Github 提供了这样的一个 API:

https://developer.github.com/v3/repos/

第5节就讲的是如何 Create 一个库,提供了非常详尽的设置参数:

Name Type Description
name string Required. The name of the repository
description string A short description of the repository
homepage string A URL with more information about the repository
private boolean Either true to create a private repository, or false to create a public one. Creating private repositories requires a paid GitHub account. Default: false
has_issues boolean Either true to enable issues for this repository, false to disable them. Default: true
has_wiki boolean Either true to enable the wiki for this repository, false to disable it. Default: true
has_downloads boolean Either true to enable downloads for this repository, falseto disable them. Default: true
team_id integer The id of the team that will be granted access to this repository. This is only valid when creating a repository in an organization.
auto_init boolean Pass true to create an initial commit with empty README. Default: false
gitignore_template string Desired language or platform .gitignore template to apply. Use the name of the template without the extension. For example, “Haskell”.
license_template string Desired LICENSE template to apply. Use the name of the template without the extension. For example, “mit” or “mozilla”.

当然其中大部分参数可以忽略,理论上只有库名是必须的。

所以使用以下命令就可以在不登录网站或者客户端的前提下建立一个库,通过 Sublime Text 等多行文本编辑软件(甚至通过 Excel)编辑一个多行批处理文件,然后运行即可:

1
2
3
4
5
curl -u "Github用户名:Github密码" https://api.github.com/user/repos -d '{"name":"库一名字"}'
curl -u "Github用户名:Github密码" https://api.github.com/user/repos -d '{"name":"库二名字"}'
curl -u "Github用户名:Github密码" https://api.github.com/user/repos -d '{"name":"库三名字"}'
curl -u "Github用户名:Github密码" https://api.github.com/user/repos -d '{"name":"库四名字"}'
curl -u "Github用户名:Github密码" https://api.github.com/user/repos -d '{"name":"库五名字"}'

库名重复时,Github 会自动报错,并不影响批处理继续执行。

#Update:

改进了。现在的样式如下:

0

第一步,先做一张报销单:

从自动化的角度来说,尽量采用公式帮助计算、限定单元格可输入的内容、以及设置单元格格式。在这张单据里,编号单元格为 K1

公式:

对于报销单而言,使用 =SUM() 和 =VLOOKUP() 通常就足够了,至多再加个 =SUMIF()、=COUNTIF() 就足以做出挺复杂的报销单了。

单元格格式:

选定单元格后 『右键→设置单元格格式』。标准的可以选择第三类货币格式,复杂的可以自行定义格式,使用#代表一个数位,使用0代表『当这个数位是最高位但为0时依然显示』。

step1-2

限定填充序列:

选定单元格后菜单栏选择『 数据→数据验证→数据验证』。允许序列,来源直接写入需要的内容,用英文逗号分隔。

step1-3

第二步,添加 Excel 的开发工具菜单:

依次点击菜单上的 『文件→选项→(跳出 Excel 选项窗口)→自定义功能区→☑开发工具』打钩。

step2

第三步,设置打印宏:

点击菜单上的 『开发工具→Visual Basic』,打开 VBA 面板,左侧双击 『ThisWorkbook』,把以下代码粘贴到出现的窗口内,然后关闭窗口

注意 K1 为这篇文章中的编号位置,其它表单需要相应调整。

1
2
3
4
5
6
7
8
9
Sub PrintWithNumber()                                       '定义宏名
Dim startnum, loopnum, N As Long '定义变量:起始编码,打印份数和循环值
loopnum = Application.InputBox(Prompt:="需要打印多少份?") '定义打印份数
startnum = Sheet1.Range("K1") '读入表格上的份数的起始值
For N = startnum To startnum + loopnum - 1 '开始循环
ActiveSheet.PrintOut '打印当前表格
Range("K1") = N + 1 '份数加一
Next N '下一个循环直到结束
End Sub '结束

step3

第四步,添加宏按钮:

点击『开发工具→插入→按钮(窗体按钮)』。

step4

然后用鼠标在 Excel 空白处拖出一个方块,当松开鼠标时,会自动跳出『指定宏』窗口,选择窗口内的『ThisWorkbook.PrintWithNumber』,然后确定。

step4-2

右键点击该按钮,选择『编辑文字』,修改为『打印报销单』。

step4-3

第五步,设置打印区域:

这一步是为了防止把按钮本身也打印出来。

全选需要打印的区域,选择菜单 『页面布局→打印区域→设置打印区域』。

step5

第六步,另存为 xlsm:

由于使用了 vba,必须把文件存为 xlsm 格式。(启用宏的 Excel 格式)

完工。


今天接到一个小任务,寥寥一记。

在 Excel 中,常见的一种需求是打印带份数号码的各种表单,例如报销单、外出单等。通常财务都会提供模板给员工自行填写,再由财务按入帐顺序统一写上序号。但当某人一次性要写几十份,或者说类似的需求,需要一次性打印 N 份时,有没有办法让打印的表格上自动带上序号?

解决办法需要依赖 Excel 中的宏程序,在 Excel 中按 Alt+F11 可以直接打开宏编辑器。或需要先通过『视图』→『宏』→『录制宏』,再经由编辑宏的办法来打开。

核心宏程序如下,一目了然:

1
2
3
4
5
6
7
Sub test()
Dim N As Integer
For N = 1 To 10
Range("E1") = N
ActiveSheet.PrintOut
Next N
End Sub

E1 为需要填序号的单元格。程序先定义一个变量用来作为页码,然后不断用它替换指定单元格中的值,每替换一次就打印一张。这一方法硬要说有什么缺点的话,大概也就是打印任务数比较多,可能在几千份时会占用不少内存。

更完整的模板还需要在界面上做个按钮和两个输入框,以便让完全没有宏能力的财务也能定义起始和结束页码并打印。但今天这需求仅仅是帮助打印而不是做个新模版,所以这任务也就完成了不再搞复杂了。

样例下载 模板-日常费用报销表

Chrome 在更新到 44.0.2403.125 m 后,存在一个由拼写检查导致的性能低下 bug,该 bug 只在 win 版 Chrome 下呈现,同时影响 32 位和 64 位版本。

chrome-44-about就是这货

具体表现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
p {margin: 20px;font-weight: bold;text-align: center;width: 33%}
.input {display: block;width: 33%;margin: 20px;border: 2px solid #999;}
.editor {display: block;width: 33%;border-radius: 4px;margin:20px;overflow: scroll;padding: 8px;min-height: 100px;max-height: 400px;}
.area {border: 2px solid #fa0;}
.div {border: 2px solid #0af;}
</style>
</head>
<body>
<input type="text" class="input">
<p>Textarea</p>
<textarea class="editor area"></textarea>
<p>Contenteditable DIV</p>
<div class="editor div" contenteditable='true' role='textbox'></div>
</body>
</html>

将上面这段代码另存为 html 网页,在 Chrome 44 (win) 版本下打开。

用文本编辑器制造 10000 行会被触发单词拼写识别的文本,比如使用 Excel 连续生成 10000 行『AKB0048』。复制粘贴到橙色 Textarea 框中,然后用鼠标点击灰色 Input 框……

你会发现,非常的卡,光标在三个输入框中切换,每次切换都需要花费很长时间,对于性能不佳的电脑,和彻底进入死循环没区别了。

刷新页面重置数据后,再将这 10000 行粘贴到 Contenteditable DIV 的蓝色框里,第一次粘贴也略有卡顿,毕竟数据量比较大。但等卡顿过后,鼠标再在三个框中反复切换,就非常顺畅毫无迟滞感了。

10000linta

这就是这个 bug 的真身了:

在 Textarea 有大量会触发拼写检查的内容时,Chrome 44 的 Spellcheck 功能会极大消耗计算机资源,使得整台电脑近乎死机。

解决办法

由于这是浏览器 bug,前端程序员对此几乎无能为力,只能绕过这个 bug。

通常来说,HTML5 已经提出了 Textarea 的一些标准属性,比如 spellcheck=”false” 可以强制浏览器不检查内容,webkit 内核支持这一属性。正常来说,这似乎是很容易解决的一个兼容性问题。

但偏偏 Chrome 却强制忽略了这一设置,就像它强制忽略 font-size < 10 时那样。禁用拼写检查只在用户手动输入时有效,而对于 Ctrl+V 进来的内容,拼写检查依然正常运行,搞死你机。

即使你把相关属性全部列全:

1
<textarea class="editor area" spellcheck="false" autocapitalize="off" autocomplete="off" autocorrect="off"></textarea>

也是然并卵,在别的浏览器一切正常,而 Chrome 下依然故我。并没有解决问题。

解决方法一:

你可以通过 JS 检查当前浏览器是否是 Chrome,在需要粘贴大量内容的 textarea 上提示用户去关闭 SpellCheck 功能,具体位置为:

Chrome 菜单 → 设置 → (最下方)显示高级设置 → 语言和输入设置 → 启用拼写检查。

但这并不是一个好方法,尤其是需要用户主动去对 Chrome 进行设置。

解决方法二:

使用 JS,将一次的粘贴行为,模拟为连续字符添加的行为。比如当用户 Paste 后得到 Text 值,立刻删除该 Textarea 元素再重建一个。然后根据 text.length 使用 JQuery 插件 Jquery.Caret 不断循环插入字符。

这一方法缺点更多,首先是作为 walkaround 的方案,引入了太多并非用户参与的互动。其次,这一 bug 本来就是在大文本量 paste 下才会出现,如果再使用额外的一重循环,并不会使得体验有太多改善。最后,假如 Chrome 的再次升级把 JS 插入字符也纳入拼写检查的话,就会导致页面更 n 倍重的卡顿,到时候大概是再高性能的电脑都扛不住了。

解决方法三:

使用带 contenteditable=’true’ 属性的 DIV 元素代替 Textarea,并使用 innerText 或者 $.text() 来获取用户填写的文本内容。

10000lintv

这也是这篇博客所写的内容,这样的方法是最合法且绕过 Chrome 44 拼写检查 Bug 的方法。完全相当于是『有两种实现方法选择了另一种』。contenteditable = ‘true’ 属性的 DIV 往往也是很多 JS 版所见即所得编辑器的常用办法。比如 WordPress。这一方法不需要用户操作,也只需要少量 JS 代码。最后,即使这个 BUG 的影响范围继续蔓延,也不过是和现有的情况一样,不会更坏。

关于 MAC 版 Chrome:

Mac 下无此 bug,是因为暂时还没有拼写检查功能。

==== edit ====

现在 Mac 下也有了。

==== edit ====

现在修正了。

先上代码:
1
2
3
4
5
6
7
8
9
10
> new Date("2015-07-08")
< Wed Jul 08 2015 08:00:00 GMT+0800 (中国标准时间)
> new Date("2015/07/08")
< Wed Jul 08 2015 00:00:00 GMT+0800 (中国标准时间)
> new Date("2015 Jul 08")
< Wed Jul 08 2015 00:00:00 GMT+0800 (中国标准时间)
> new Date("2015 Jul 08 GMT+400")
< Wed Jul 08 2015 04:00:00 GMT+0800 (中国标准时间)
> new Date("2015-07-08 GMT+400")
< Wed Jul 08 2015 04:00:00 GMT+0800 (中国标准时间)
再说结论:

在 Javascript 中,当为某个变量只赋值日期时,会默认使用该日期的 0 点 0 分 0 秒作为完整的值。而根据表现格式的不同,在具体赋值时会使用不同的时区时间赋值。

当使用『-』作为年月日的分隔,即 YYYY-MM-DD 的格式时,赋值会根据 GMT/UTC 时间的当日 0 点赋值,再根据浏览器提供的系统时间,折算为当地时间。也就是说,如果你在北京,并且电脑时区正常。那么当你为某变量赋值『今天』时,实际上赋的值是 0 时区的 0 点 0 分 0 秒,换算成北京时间为早上 8 点。如果在东京,则是早上 9 点。

也就是说,无论是在哪个时区,相同的一套代码在不同的电脑上,会得到相同的值。

而当使用『/』作为年月日的分隔,即 YYYY/MM/DD 的格式时,赋值则根据电脑时间,取到本地时间该日的 0 点 0 分 0 秒。由于各时区都差一个小时整,实际上会导致 JS 代码在不同时区电脑上执行相同代码时,得到的时间值在绝对值上并不相等。即在北京时区时,会取到北京时区的 0 点 0 分 0 秒,同一时刻在东京则已经是当日 1 点 0 分 0 秒了。

换句话说,不同客户端执行相同代码会取得不同的值。

但即使如此,两者也有表现相同的时候。只要在赋值时就明确指定时区,则两者的值可以是相同的。例如:

1
2
3
4
> var a = new Date('2015-07-01 GMT+800')
> var b = new Date('2015/07/01 GMT+800')
> a.getTime() == b.getTime()
< true

同时,无论是哪种情况,当通过 JS 转换成时间戳时,其值都是相同的。原因在于时间戳本身的定义,就是指当前时间距 0 时区的 1970 年 1 月 1 号 0 点 0 分 0 秒的秒数。所以在执行环境中,函数会根据电脑的时区设置来加减相应的小时数,先转换为 0 时区,然后再进行时间距离的计算。

参考:

http://www.w3schools.com/js/js_date_formats.asp

起了个小学生式标题。

这东西又是浏览器历史的一桩恩怨……当最初的 HTML 标记式的语言结构逐步成形后,人们开始对网页内的互动有了要求。当然,这事本来并不难,所有的用户互动归根结底就是『触发事件 – 判断当前状态 – 执行相应命令』的逻辑,而 HTML 本身就已经通过开标签和闭标签组对的形式,很好地形成了后来被称之为『DOM 元素』的数据结构,理论上只要把触发事件分别加到一个个的元素上,或者按需加到某些特定的元素上,就可以执行命令了。

然后问题就来了。

由于 HTML 的表现是盒式结构,都是一些大框框包含小框框的情况。比如如下代码:

1
2
3
4
5
6
7
<div id="blue">
<div id="green">
<div id="red">
sometext
</div>
</div>
</div>

形成的 DOM 盒式包含结构大约就是这样:

无命名

当用户点击红块时,实际上浏览器是无法判断这次点击的意图的,也就是说,到底应该是点在红块上,红块对这次点击作出反应,还是点在绿块上,亦或是蓝块上。即使是三者都算作被点到了,三者都有反应,那怎么也得有个先后顺序吧。

有两种顺序都可以,一种是先子后父,先里后外,红绿蓝顺序;第二种是先父后子,先外后里,蓝绿红顺序。

两者都可以,两者都有理,然后老 IE 用的是前者,老 Netscape 用的是后者……结的梁子够多了,也不差这一个了。

于是新的协议为了兼容,提出了 DOM 事件流的三个阶段的设计,即……首先,都别争了,顺序就按『蓝绿红绿蓝』这么来吧……然后,这一顺序又分成三个阶段,第一阶段我称之为『下沉』,顺序为蓝绿;第二阶段『触底』,系统发现红色已经是最底层 DOM 元素了,第三阶段『上浮』,顺序变成了红绿蓝。

这三个阶段是有标准的命名的,分别是『捕获阶段』、『目标阶段』、『冒泡阶段』。并且严格来说,捕获阶段不包括最底层元素,而冒泡阶段包括目标阶段。盗图一张:

001108_Ry8q_214423

尽管规范上来说,要求捕获阶段只注册事件,而在冒泡阶段执行相应阶段。但事实上各浏览器在实现时,都允许在捕获阶段也执行相应的事件。结果就是,对于一个目标,有两次执行事件的机会。这在为 DOM 元素添加事件的 JS 函数里就写得很明白:

1
addEventListener(type, listener, useCapture)

其中第三参数就是决定这个事件是否在捕获阶段就开始执行的。

当我们使用 jQuery 等第三方库时,这一特性被 jQuery 很好地隐藏封装起来了,并良好地处理了各浏览器不一致的特性,使得我们可以通过 .click() 函数方便地添加点击事件,并不用考虑三个阶段的问题。

开宗明义:

一、死亡对你也许是一种震慑,但对别人不一定是。

二、贩卖人口在目前的量刑下已是重罪。

三、法律适罪量刑,并不是保护罪犯,而是在保护受害者不遭受更严重的伤害。

四,贩卖儿童的特殊之处,在于『孩子还活着』这点上,人贩和儿童父母的利益一致。这很别扭,但正是最能承载『找回孩子』这一希望的。如果一律死刑,那么孩子几乎是不可能找回了。


突然之间被鼓吹『拐卖儿童一律死刑』的给刷屏了。

在我的朋友圈里,要求拐卖儿童一律死刑的,一半是有孩子的,另一半是没孩子的。怎么说呢,有孩子的,多少可以理解爱子之情。没孩子还这样的,呵呵。善良得久了,脑子里只剩水和面了。

『今亡亦死,举大义亦死,等死,死国可乎?』

『民不畏死,奈何以死惧之?』

归根结底,在于你们安生日子过久了,就以为死刑是种多么大的震慑,但事实上未必。死对你也许是一种震慑,但未必对所有人都是。为什么叫『亡命之徒』,正是因为那些人并不把死亡当成是件无限巨大的震慑,而只不过是利益天平上可以衡量的一种损失而已。而法律,也并不像你想像的那样,是人人遵守违者天罚的无上神圣规则。其实在我看来,法律恰恰是与这些突破底限的罪犯之间的讨价还价而已。

『如果你做出怎样的行为,就可能会面对怎样的惩罚,』,这是法律的前半句,而更关键的是后关句,『如果你不做出怎样的行为,就不会有怎样的惩罚。

这才是法律的制定和执行中,更为根本和重要的一环,如果说前半句是在震慑犯罪者,那么后半句则是在拯救受害者。

如果抢劫就是死刑,那么确实不会再有单纯的抢劫了,只是必然会有大量的受害人死亡。因为受害人活着,只会对抢劫犯不利。如果强奸一律判处死刑了,那么所有的强奸都会变成奸杀。如果贪污受贿一律死刑,那么所有的官吏一但开口,就会迅速巨贪并转移财产。如果驾车撞人一律死刑,那么一定会造成大量的撞人拖曳血肉模糊。如果盗版一律死刑,……哦,这时大概又会是同一帮人跳出来说,凭啥死刑。

适罪量刑,是为了让罪犯每施加更多的伤害,就需要承担更重的刑罚,这样,当罪犯无论达到或者不达到目的时,都会出于利益考虑,不向受害者施加更重的伤害。

且问,如果你的孩子正在人贩手上,警察正在追捕,并且很有希望抓住了。你是希望犯人逃跑无望束手就擒呢,还是挺而走险杀了孩子自己再轻身跑路呢?正常来说,你都希望无论犯人怎样都行,自己的孩子能平安归来吧。然而你支持的却是『一律死刑』,你觉得犯人会乖乖交人?还是会友善地扔下孩子自己跑路?

你未免太过自以为是了吧。

再说一遍,适度量刑,是在保护受害者不遭受更严重的伤害。

再说两遍,适度量刑,是在保护受害者不遭受更严重的伤害。

再说三遍,适度量刑,是在保护受害者不遭受更严重的伤害。

那么,你为什么在拐卖,甚至是购买儿童上,就支持『一律死刑』了呢?除了伪善和杀人欲,我没看见别的。

我真心觉得,之前无论转发多么脑残的东西,雾霾也好,炸鸡也罢,顶多是为那些认真工作的人平添一些麻烦,或者伤害一下他们的感情,虽然难受,但不至于伤筋动骨。

但这次,你们这帮脑残,真的是想杀人啊。

一,在转发这个观点时,你是否查阅过现行法律体系下的量刑尺度?是否已经存在死刑的可能性。事实上据我所知,拐卖妇女儿童情节严重的是确实可以处以死刑的。注意,是情节严重。

二,你鼓吹过一律死刑,是否考虑过可能会造成的其它后果,比如犯人为了逃避罪责,直接把小孩弄死再逃跑的情况?

三,你如何确定以死刑震慑,就会让拐卖的犯罪率下降。如何确保不因为刑罚上升,导致贩卖小孩的价格升高,有更多的人挺而走险?同时因为一律死刑的存在,而造成受害人更严重的伤害。

这些事情,无法预测,也没法实验。

从更广阔的情况来看,『一律死刑』是有类似的现实映证的。在我国,运输、贩卖海洛因等强成瘾性毒品,超过 50 克,一律死刑。然后,你再自己去查查辑毒人员为此付出的巨大代价,他们的家人为此付出的代价。但区别在于,毒品的受害人是间接受害人,并不在犯罪过程中出现,不会有毒贩『残忍杀害抛弃自己手上的毒品』,无论打击贩毒多严重,都不会造成毒品受害者更大的伤害。但贩卖儿童却真的可能存在更严重的恶行,因为儿童是在人贩手中的。

事实上贩卖儿童最特殊的恰恰是,孩子活着才有利润,死了就什么都没了。在『孩子活着』这点上,人贩和孩子父母是利益一致的。这很别扭,但恰恰是这点,是最大的希望,也是我最反感『一律死刑』并叱之如此的原因。死刑只会割断最后的希望,把孩子的性命完全吊在人贩本已无几的同情心上,并让遇拐父母位陷于万劫不复之地。

我们应该做的,是改善儿童找回的渠道,建立更好的防拐防丢体系,改进儿童领养的现状,甚至邪恶地说,还可以『创造供给』,从那些虐待亲生子女的父母身边剥夺他们的抚养权,然后交给那些想抚养孩子的父母。

这才是正道。

而当法律失去了『更重的犯罪,会有更严重的惩罚』的惩罚能力,如何阻止犯罪者的罪行升级?指望死刑解决一切问题么?指望死刑阻止犯罪么?横竖是死,发什么善心?

死刑只会让人贩开出更高的价格,只会引来更多的亡命之徒拐带儿童,只会造成被拐卖的儿童非卖即死的惨况。

还是那句话,本来他们就是把自己的性命当作成本,价格更高只能让他们更疯狂。


观点:

一,只有死刑才能遏制贩卖儿童。

这条不解释了,社会运行自有规律,每个人都会选择最自己最有利的办法,键盘侠们也是,吹牛显正义,道德占高地,也不过是对自己的形象最有利罢了,哪管他人死活。

第二,你不是被贩卖儿童的家长,根本无法体会那种痛苦。

请问转发者们,你们是贩卖儿童的家长吗?我不想在这点上讨论。更可怕的是,还有真的孩子父亲评论说,『因为我不知道我孩子是生是死,如果被拐,相比于我无尽的搜索与痛苦,我宁可他死了』。

第三,失去孩子对家长来说比杀了他们还痛苦,所以一定要判死刑。

我不想在痛苦的程度上作辩解,这并无意义。

重点在于,以这种理由判断贩卖者应该施加何种刑法无疑是将孩子当作父母的一种私人财产,这种私人财产的剥夺对父母产生的伤害程度的大小决定了刑法的轻重。

这是荒诞的逻辑,因为父母对孩子是有监护权,但不是谁完全属于谁、谁是谁的私人财产的关系。人贩贩卖孩子,应以对孩子造成的伤害为主要量刑依据,这是我的看法。不然,孩子父母的痛苦,无疑也会造成父母的亲朋的痛苦,那么这份痛苦也要向罪犯赎回吗?

如果讨论的是精神伤害的罪名,通常也只关注直接伤害的那部分,而『通过对亲密关系或者试图建立的亲密关系进行打击从而伤害到某一方的感情』这种情况是难以处理的,孩子青春期跟父母闹别扭,是不是也让父母心如刀割,是不是也应该把孩子抓起来毙了?追求女神,女神爱理不理,是不是也应该把女神抓起来毙了。我明天就去找二马,他们不理我就让国家把他们毙了。

当然这是一个过于敏感话题,从政治正确性上说,如果父母不在这件事情上『比死还痛苦』的话,就不足以说明他们对于孩子的爱。然而就我个人看来,这种爱与仇恨无异了。这种态度甚至反映出某种现状,太将情感和希望寄托在孩子身上了,这种爱并不包含无私、尊重和理解,往往只是一种对家庭中所有人的负担。

最后,还是祝愿天下太平,祝愿务实理性的人,做事能不受傻逼的干扰,祝愿自以为好心,实际办坏事的人,始终办不成事,即使这恐怕很难。

前文: <很是喜欢这个微信表情包:小哥斯拉么>

么么出了第二个表情包,另外在 2015 贺年表情中也露了一次脸。现在她有了陪伴,体形也越发可爱,大概这是一个美好的结局吧。依然,我还是找不到作者,不知道哪里有卖衍生品。

么么2:monmon2

肉肉哒 陪着你 抱抱 不理你
肉肉哒 陪着你 抱抱 不理你
不要啦 新年快乐 我要减肥 都怪你
不要啦 新年快乐 我要减肥 都怪你
好无聊 摸摸头 我错了
好无聊 摸摸头 嗨 我错了
亲亲 点赞 圣诞快乐 没问题
亲亲 点赞 圣诞快乐 没问题

然后是新年萌物表情包,只有一部分是么么:5f656f4dacb0cee887adc091619380c8

恭喜发财 身体健康 福到 发发发 万事兴
恭喜发财 身体健康 福到 发发发 万事兴
羊年大吉 暖洋洋 新春快乐 元宵快乐
羊年大吉 暖洋洋 新春快乐 元宵快乐

剩下是同一表情包里无么么的表情:

吃吃吃 心想事成 年年有余 红红火火 过年啦
吃吃吃 心想事成 年年有余 红红火火 过年啦
喜气洋洋 十全十美 发红包 吉星高照 恭贺新禧
喜气洋洋 十全十美 发红包 吉星高照 恭贺新禧
同乐 万事如意 抢红包 财源滚滚 一帆风顺
同乐 万事如意 抢红包 财源滚滚 一帆风顺

年前发过一个微信状态:

事实上,用户要求,有时并不是用户需求。随口一提不费钱,或者别有意图不能直说。说没某功能就不买的,有了也不会买。说买去是干嘛的,改进了有时也起反作用。这很容易理解,如果你是学校对面小旅馆老板,因为每天少男少女们来开房『找个安静地方学习』夜夜爆满,会把旅馆改造成自习室?
__tdrd.org_att.php_s.51.42974.596.jpg_唱得好....

这是例行搞笑的。但用户需求却确实是件需要仔细琢磨的一件事情。他们说出口的,常是谎言。

一,不好意思说真实原因的。

这个是最常见的。上面的笑话是一例,生活中还有更多例子,大家可以自行琢磨一下。我这里先举个不那么常规的。

日本动漫里的热门人物角色往往也会被制造成各种小人玩偶,做工相当精细,称之为『手办』。有些更会备有大量同比例可更换的衣服。手办通常都是价格不菲的,一个 30cm 高的手办有时就价值 RMB 数千甚至数万元,所以这一开始就是很小众的东西,也只在少数日本动漫专营店放着,作为店长的个人收藏品,兼『镇店之宝』。

这些玩具店是要做生意的,而大部分生意都是几十块钱一件的大路货,卖得最好的通常也是卡片纸、印刷品之类。

于是总有妈妈带着小孩来店里逛的,于是总有小孩眼尖发现了这个镇店之宝的,于是总有缠着妈妈要的,然后就有如下的对话了。

『这个多少钱啊?』

『抱歉,这个不卖的。』

『不卖?』

『嗯,不卖的,放着看的。』

『你家的东西放店里还有不卖的啊,孩子要你就卖他呗。』

『这位妈妈这个真的不卖的。』

『奇了怪了,咋了怕我买不起啊。』

『真不是这意思,这位妈妈,这是花了大价钱专门弄回来的限量版,就是吸引人气用的,真不卖。(真就是这个意思,太贵了你买不起)』

『你不就说贵么,多少钱。你再进一个不就行了,三百顶多了吧。四百?五百?你说你这人摇什么头啊你倒是说清楚啊当我傻逼是不是?』

『阿姨,这东西光每星期保养费就不止四百。我弄来就花了一万多。』

『……』

『…………』

『………………』

『你坑傻子啊,就这东西一万多?就这做工……(发现做工确实挺好)……手脚根本就不能动!哟!这姿势那么撩骚,这是要当鸡的样子啊。你开个玩具店放这么淫秽的东西还放小孩子进来?我要去举报你,趁早倒闭吧你个黑店!』

or

『你这东西还要每星期保养啊?哦哦,钱不是问题,但我家孩子玩劲大爱拆东西,玩两天就要买新的了,算了吧。看你也不是正经做生意的,以后不来了这种黑店。』

你看,很常见吧,买不起时,就找一大堆理由,证明某样东西不值这个价,并试图向围观群众说明,她不是买不起,只是这个东西不符合她的需求,尽管可能旁边连个人都没有。她只是要找个理由说服自己,甚至要依靠打倒对方的人格、名誉,来证明自己『不选择』的正确性。

在这过程中提出来的所有需求,都不是真正的需求。

二,为了获得愉悦感。

常见的无非是讨价还价的各种奇葩理由。

我小时候,经常看大人们默契地合演一出戏。这边问多少钱,那边说多少钱,这边说好贵这么小,那边说这可新鲜了,这边说旁边那家店一样的才卖多少,那边说我这足斤足两,这边说多少钱,那边说真卖不了,这边转头走,那边喊回来回来,这边喜滋滋掏钱算着省了多少钱,那边装苦脸心里暗爽多赚了多少钱。

完美配合演绎鸡同鸭讲+欲擒故纵+双簧。演出费两人各……两毛。

虽然钱不多,但是开心呀。

所以那一串理由都不是理由。买东西当然是需求,但讨价还价背后却不止于东西本身了。客户需要的还包括近身白刃搏杀后胜利的愉悦感。

码农们有时就理解不了商务那边的兜兜转转。他们总觉得报个一口价就完了,为什么要扯那么半天皮呢。但在砍价这事上,固然有节约成本的因素,但也有砍杀以后的愉悦。如果你直接一步让到位,不但自己吃亏了,客户那边也没有享受到愉悦。他势必会继续往下砍,直到获得足够的愉悦感为止。

扯会皮,满足了客户,自己也能多赚点,为什么不呢?

三、他需要感觉到你的努力。

这是比较隐形的需求了。

首先,客户需要某种特性,是真需。比如需要产品能防水,那是真要。他需要在狂风骤雨的户外使用。因此防水是必须的。

但仅仅有防水,很多时候还是不够。原因在于人的感知与认同。事实上,利用现在的纳米拒水材料,完全可以做出带很多细微网眼的防水材料,足以让产品放入水下依然能见到盒子内部漂亮而脆弱的电路,却如出水芙蓉,滴水不沾。

透光不透水,见干不见湿,要逼格有逼格,要高端有高端。

但是在防水设计上,未来很长一段时间都不可能用这种方案。原因就在于,你的客户并不这么想,而你却没有机会向他演示以改变他的观念。即使演示了,也会被认为是障眼法。或者用一个完全无法反驳的理由回绝:『现在不出问题,怎么保证以后不出问题。』

正常来说,用一个带严实的橡胶密封圈的盒子,用卡扣紧紧卡上,发出的『啪』的一声,才能为客户带来足够的安全感。这比任何高科技都有效。如果说防水的成本有 5 块钱,大约有 3-4 块钱都是花费在让用户感觉上的。

四、他需要感觉到自己的妥协,但希望选妥协尽可能小的。

没有成本的东西不足以让人认真对待。别提互联网免费策略,这里的成本可不一定指钱。

我们有两款产品,A 款非常美观,但缺乏某个特性。B 款拥有这个特性,价格还便宜将近一半,但美观性稍差一点。事实上 B 款的出现,也是因为所有的客户几乎都在抱怨 A 款缺乏的那个特性。但结果是,自从有了 B 款以后,A 款的销量反而更好了。

如果你不理解,我再举一个《经济学人》杂志的例子。

《经济学人》有三种定价,电子版 59 美元,印刷版 125 美元,电子版 + 印刷版 125 美元。印刷版的定价让人感到莫名其妙。便宜一点有 59 美元的电子版,付出同样代价又可以同时拥有电子版 + 印刷版,125 美元光购买印刷版,又是何必呢?

看上去《经济学人》提供了一个无意义的产品和定价。但印刷版的定价起到了诱导消费者心理和行为的作用。丹·艾瑞里当时为了验证《经济学人》定价的作用,把学生分为两组人,进行对比测试。结果发现,如果没有125 美元只购买印刷版的选项,84% 的人会选择购买 59 美元的电子版,只有 16% 的人购买 125 美元的电子版 + 印刷版。而如果价格表里,出现了 125 美元印刷版的选项,消费者的购买行为就发生了有趣的变化,只有 32% 的人选择购买电子版,而足足有 68% 的人购买了电子版 + 印刷版。

当进行消费的时候,除非是这个领域的专业人士,否则一个东西应该值多少钱,其实我们不是很清楚的。这时候我们判断的依据就是做一个笼统的测试,粗陋的横向比较,根据结果来决定自己应该买哪个。第二个方案放在这里,它的用途是让第三个方案感觉超值。

虽然产品设计可能和最后定价略有区别,但本质上,定价也是产品的一部分。

五、他需要克服自己对你的不信任感,需要安全感。

其实在商务中有很有意思的一点:一个客户对你的质问越多,往往就越愿意选择你的产品。

原因其实也很简单,他作为一个非专业人者,如何去判断产品本身的价值?如何去判断产品是否有看不出来的偷工减料?他是没办法判断的。那么他就会转而通过其它外部信息作出判断,例如品牌、广告、其它人的使用评价等。

很多东西都会指向企业的实力,而实力一定程度上代表着品质。在央视砸了几亿做广告,结果做出来的产品很烂,没人买,这损失可就大了。而街边小摊,顶多城管查抄了,也损失不到哪里去。这就是选择建立信任感的某种方式。

而用户很多让码农觉得麻烦的行为,也正是因为建立双方信任感的需求。其中之一,就是将销售问到无言以对,或者问到自己问不出来。这时,他并不是追求愉悦感,而是追求安全感。他面对的销售有多深的知识积累,就意味着这个产品有多专业,从而产生多大的信任感。买过汽车的同学们可能感受会深一点,卖过汽车的大概已经在微笑了。

而更日常化的最终用户的产品,信任感由更多地来自于品牌宣传、口碑、负面新闻等。因此除了对品控的高要求以外,大型品牌也都愿意每年花费巨资去经营、监测、预警网络上关于品牌的各种消息。舆情监测行业也早已是个水深如谷的行业了。

六、人们需要的不是趁手工具,而是被赞美。

少数 Geek 向的玩具,粗糙的质感与不完善的结构,反而可能引发那一小部分人的好奇心。但大多数产品,对大多数人而言,都不过是获得赞美的工具。所以人们才会用各种顶级品牌去标榜自己的品味,用各种先进工具去装饰自己的能力,用各种奇趣玩艺证明自己的知趣广博,用 PHP 去写世界上最好的程序。所以产品设计,要不能为人博得赞美,要不能为人带来赞美。前者靠的是优秀的做工、设计,后者靠的是巨大的人气与流量,比如社交软件。

企业客户在这点上其实也没什么区别。企业客户,往细了分无非也就是建议者、决策者、执行者一系列角色。无论是哪一类,都希望自己做的事情是正确的,能获得上级的肯定,平辈的艳羡,下级的赞美的。这些,则是由内在的可靠性、优雅的外观、良好的服务、精心设计的流程和用户的充分参与,来一步一步完成的。

七、用户不懒,只是缺乏动机。

有些产品经理说的用户很懒,其实是不对的。你根本想不到很多人会为了装一个逼能做出多么匪夷所思的行为,根本不理解很多人会为了朋友圈向领导暗示勤奋有多么的勾心斗角,根本不懂得人们心底的欲望可以驱动他们去做多么奇葩的事情。

啊,或许你能理解。

以前我觉得学上网实在是太难了,但后来我发现网上可以下载免费 A 片,瞬间我就学会了。

为了获得赞美,人们无所不用其极。苹果的 Keynote 用的是 『影院效果,彻底迷倒观众』。相比之下,微软用的『做出非凡演示,节约时间,随处访问』就差上一截了。

我真的不在乎节约时间,更讨厌随处都得做 PPT,你再好用有毛用,我在家就想休息不想再碰什么 PPT 了。但如果观众们能惊叹,我能装个逼,那再难用的软件我倒也认了。

————开开心声。

我不认为微软的文案是傻逼,大企业内部的人际历练,对人心的洞察一点不少。但也是同样的原因,让他们在做文案的时候,选择的是讨好公司自己的文化,而不是讨好用户。

用户不懒,只是缺乏动机。

结束

用户需求不是『我认为』如何的。每个人处于不同的环境,基于不同的利益,都有不同的诉求。生活中的,工作中的,个人的,家庭的,集体的。同一个人都会有诸多变化。

甚至也不是数据分析能得出来结果的,诚然,数据分析有助于你发现问题,但揣摩背后的意思,还是需要有一颗又能正经又能变态的心。

我品过甜美,也咽过苦涩,但依然觉得那些随口说出的谎言,包括自己的谎言,是世界上最美丽的声音之一。

我总是觉得,『好奇』是搜索来的蛋糕教程,你愿意去花时间寻找免费信息,仔细阅读,去了解它的真实内容;『兴趣』是西式糕点培训班。你愿意支付可以承担的费用,获得免费信息无法给予的进一步提升;『爱好』是一夜无眠后泛着倦意淡淡的笑容。你愿意牺牲生活中的其它东西,但仍乐在其中。

你想知道美味的饭菜是怎么做的,你会挑选自己喜欢的若干个菜,去网上搜索免费食谱。你会拿纸笔把菜谱整理成购物清单,并找邻居老太太打听农贸市场的位置,去市场精挑细选,但忘了讨价还价被坑了一大波。然后你回来又去超市买了锅碗瓢盆油盐酱醋,回家看着一堆材料兴致勃勃照着菜谱做到了最后。

可能焦了,可能没熟,可能你最后还是点了外卖,或者是忍着说服自己『这也挺好吃的』强咽下去。你可能更有兴致迫不及想明天再做一遍,或者意味索然从此打算仰仗外卖终身。

但你最初的从未尝试,到最后完成了整个过程。你至少了解了真相,自己体会了过程和结果。

这是好奇。

你听过几次免费的钢琴课,看过免费的视频教程,你知道四分音节,你刚学了五线谱。尽管不熟练,但至少能在 88 键上找到那个音符的位置。你找了很多材料读,也有不少迷惑得不到解答,于是你愿意去参加一个培训班,你需要找老师解答一些疑惑,你需要专业的人帮你听听,确认你的水平,告诉你下一步的学习方向。

你可能能进一步提升,也有可能仍然迷茫。但是至少你知道真相,知道横亘在面前的困难,但仍然,或者抱着随缘的心态去学习提升,或者跃跃欲试想更升一步。

你愿意接受重复练习享受水平的提升,你愿意为此花费时间与金钱。

这是兴趣。

你喜欢轮滑,无论是短途、长程、花式、极限,你都愿意试一试。你越过了最初的好奇与兴趣的阶段,你已投入了很多,把水平提升到了一个身边人群中很高的层次。你必须参加专门的爱好者组织,才能找到与你水平相当的人。你越过了迷茫期,找到了学习与提升的路径。这路无限地长,但你知道是正确的路,只取决于你能走多久。

或者幸运地在学业中找到方向,或者是从好奇中发掘出宝藏,总之你找到了一样你觉得值得投入,甚至可以不计回报地投入的事物。你愿意牺牲生活中的其它东西,不止是金钱与时间,仅仅是为了保证你在这样事物上能有令自己满意的投入。能让你享受的是练习与提高的过程,而能让你兴奋不已的是你有创造的能力。

唯一能限制你继续提升的,也许真的只有天赋的上限。即使如此,你也并不视之为不幸,而是当作努力的目标。

这是爱好。

所以在我看来,很多人的生活中,其实连好奇都没有,更别提兴趣与爱好。

来源于一个钓鱼笑话:

有一次,爱迪生把一个铯块交给来自中国的助手,请他算一算铯块的体积,助手拿直尺量了 又量,列出了一排排的算式,还是没有最终计算出铯块的体积。爱迪生等得不耐烦了,拿过 铯块,浸在水中,将溢出的水倒在了量杯里量出体积,就知道了铯块的体积。僵化的体制, 落后的思维,永远也培养不出伟大的科学家!

笑话钓鱼钓得厉害。

铯是钾系元素,最外层单电子,化学性质极为活泼。遇水则剧烈反应,生成氢气和氢氧化铯……这话很熟悉吧,高中做钠与水的实验就做过。

铯的反应强度更大,实际上就是爆炸了。优酷搜了一下还真有视频:

不过百科时有一条好奇的是,铯是金黄色金属,为什么其英文名 Caesium 或者 Cesium 却是来自于拉丁文 coesius,意为『天蓝色』呢?

好奇查了一下,原来是因为铯极度活泼,人们是从光谱表上第一次发现铯这种元素的。而光谱是这样的:

Cesium spectrum吸收光谱和发射光谱

所以『天蓝色』的来源实际上是科学家的一个小浪漫,铯的光谱蓝色确实非常漂亮。

0%