月份: 2016-02

VMWare 安装 Ubuntu 出现『默认声音设备无法打开』的原因与解决办法

Update: Ubuntu 16.04 系的解决了这个问题。此文终结。


无标题

这个 Bug 出现在几乎所有版本的 VMWare Workstation、VMWare Fusion 而且按原理来说似乎也会出现在 VirtualBox 上(未验证)。用户选择右键点击喇叭图标手动连接,则可以使用一段时间,Rhythmbox 之类的也可以正常播放声音,但只要打开声音设置或其它类似操作就又会断开。

遇到这种情况,可以先尝试在宿主机接上麦克风/耳麦,随便弄个录音设置,或者把普通耳机插头插进录音孔也行。对的,尽管实际上录不了音,但只要让录音孔插着东西就行。无标题

然后重启虚拟机,如果一切正常该提示不再出现,就继续往下看真·解决办法,如果依然不行,很抱歉你的问题不是这篇文章所能解决的。

 

这个问题的真正原因是:Ubuntu 默认会检测音频硬件设备,包括音频输入和输出两种设置,但 VMWare 不能正常反馈宿主机声卡的状态。感觉更多的是 Ubuntu 的锅,它没有检测设备存在就直接调用录音设备。

解决办法:

安装 pavucontrol 软件包,然后在 Term 中输入 pavucontrol 启动旧版的音量控制:

Ubuntu 64-2016-02-27-20-44-14

在音量控制界面,选择『配置』选项卡,选择『模拟立体声输出』,不要选任何带“输入”的项。然后注销用户再重新进入桌面。

Ubuntu 64-2016-02-27-20-45-50

 

以上,VMware Ubuntu 就可以正常出声了。

无标题

补充一个数组公式的实际应用

关于数组公式解释见这里:http://kaikai.info/excel-array-formulas-explaination/

补充一个实际应用里出现的公式

作用是在 A组数据的各项文字中寻找到第一条包含 B 组词汇的数据,如图:

matchindex

原理是这样的,将 find()函数数组化,令其在 A4:A27 中逐个寻找 C4 中的『愿望』两字。当找到匹配时,Find() 函数会返回一个具体数值,即『愿望』两字在被查找的字串中在第几个字符出现;当找不到匹配时,则Find() 函数会返回 #Value!。在数组化后,返回的数组大致为 {#Value!, #Value!, #Value!, #Value!, 2, #Value!, …, #Value!}。

再通过 if() 和 iserror() 判断这个数组中每个数的有效性,转为 {0, 0, 0, 0, 1, 0, …, 0}。

再通过 Match() 函数将数值 1 的位置找出来,即数组第 5 项。最后再通过 Index() 函数把原歌词中的第五句摘出来,并返回到屏幕上。

通过这个组合数组函数,可以查找某个词在多个单元格中的某一个出现过。

将函数改造成:

则通过复制粘贴数组公式,可以知道 C4 这个词分别在哪几句中出现过,而不限于仅仅找出第一句。

Steam 上 3DMark 的搞笑评论

3DMark 是个显卡性能评测软件,通过运行一些实际的 3D 场景,给出电脑的 3D 性能评分。类似于国内的鲁大师评分之类的,只是 3DMark 更专注于 3D 性能评分而已。由于 3D 性能绝大部分实用场景都是玩游戏,所以 3DMark 自己的口号就是 『The Gamer’s Benchmark(是玩家就跑个分)』。

作为电脑的性能测试测试软件,自然是有不少榨压极限的测试项目,其中最耗资源的一项叫『Fire Strike』,寓意电脑满负荷运行时如同火烧一样。

就此为止这还是个正常的测试工具软件,然后软件公司就开了个脑洞。它添加了个全球排名榜(和打败了99%的电脑一样),还添加了 Steam 游戏成就……(⊙ˍ⊙)观赏一下:3DMark Game Archievements

于是一帮成就党和吐槽党就沸腾了:

Hevcy:
This game is the most pay-to-win game I have ever played. To have any hope of getting near the top of leaderboards you will have to spend at least 4-5k of your hard earned cash, and, to add to all of this, there is no gameplay to be found, just a series of cutscenes with no relevance to eachother at all. This is a grim sign of where the industry is headed.

– 这是我玩过的最氪金的游戏。你至少要花两三万辛苦搬砖赚的钱才有那么一丁点上榜的希望,关键是你攒起来了也没啥可玩的,就看那些没啥剧情的场景演示。这游戏行业怕是要走歪了。

MaxterChief:
I tried running the Fire Strike test. It just laughed at me, called me a loser and would have stolen my girlfriend if I had one.

– 我试着跑了下火焰冲击测试,然后就被它嘲笑了。它喊我卢瑟,还想抢走我女友,如果我有女友的话。

Modified420:
most expensive program ever.
1. Buy it.
2. Run it.
3. Go buy CPU/GPU.
4. Run it again.
5. Repeat from step 2.

史上最贵的程序
– 1. 买买买。
– 2. 运行软件。
– 3. 升级电脑。
– 4. 再次运行。
– 5. 从第2步开始重复。

Modified420
Just when you think you have a pretty good rig. This program will smack that thought right out your head, Stomp on that dream, and crush any hopes of possibly obtaining that Master PC status again until tax time. 10/10

– 你以为你搞了台牛机。这软件会狠狠拍醒你,告诉你别做梦了,也别觉得自己的机器能打败多少人了,还是搬砖去吧。

Señor Freezer
Cool software if you want your heart, hopes and dreams broken

– 你想让你心灵受伤希望幻灭梦想破碎的话这软件很不错。

Super Saiyan Papyrus
Pros:
Amazing Visuals
Intuitive menus
Global ranking system (by different classes)
Really fun to compete and see who is the best between all of your friends
Cross platform support for Windows Phone, Anroid, and iOS

Cons:
Pay to win

– 优点:
– 惊艳的视觉效果
– 直观的菜单
– 全球分类排名
– 基友之间撕逼谁最牛确实很爽
– 跨平台支持,包括 Windows Phone、安卓和 iOS

– 缺点:
– 氪金

Arctiix
Overclocked till my computer hit temps of 100 degrees Celsius to get achievements… No regrets.

– 超频到电脑 100℃ 拿成就……我不后悔(>﹏<)

moist
I got the CPU bottleneck and GPU bottleneck achievements at the same time

– 我同时拿了『处理器不够用』成就和『显卡不够用』成就。

Systemworks
Bought Alienware x51 gaming PC.
Ran standard Fire Strike test.

I bought a potato.

– 买了外星人 X51 游戏电脑。
– 运行标准火焰冲击测试。
– 我买的个山芋啊!(Hot potato 比喻棘手的问题、烫手山芋、使人厌恶的事。难题。)

♠ DgO ♠
The Fire Strike Ultra is so real that my PC got on fire.

– 超级火焰冲击很真实,我电脑着火了。

HEMI™
Lets face it we need this app to test our hardware and just make ourselves feel better about spending vast sums of cash on more hardware we really didn’t need just wanted 😉

– 其实吧,我们是需要这个 app 的。花了大价钱买了口水但实际根本用不上的硬件时,用它测两下,心里就不那么内疚了。

kinsey430
成就:0(以及以后若干年也会是0)
卡片:无
为什么买:要问2天前的我,顺便帮我劝劝他。

༼ つ ͡° ͜ʖ ͡° ༽つ
I own two Gtx 780’s and got the cpu bottleneck achievement.

– 我整了两块 GTX780 显卡然后拿了个『处理器不够用』成就。

Aoi
没成功运行过一次,歧视我没四路泰坦吗

[fwdcp] tsc
This is the most disgustingly pay-to-win game that I’ve ever played, and it’s not even interactive, more like a movie. I’m very disappointed.

– 最烂的氪金游戏,没啥互动,像个电影,我很失望。

Xenom73
Couldn’t handle firestorm at even 30fps. My epeen is deflated. Computer not worth any achievement score. Think i’ll cry myself to sleep.

– 火焰风暴跑不到 30 桢,我痿了。这电脑连个成就都挣不到,哭着睡了。

Drifter
Spent $1250 on a high-end computer.
Spent $5 to know that I made a terrible decision.

– 花 8000 买了台牛逼电脑。
– 花 30 发现我错了。

喵啦啦
卡吧标配游戏

Greenpool
I want to achieve the ultimate pleasure in life by unlocking all achievements. This is now my sole purpose to overclocking.

– 追求成就全解锁时的终极快感是我超频的唯一原因。

矢泽妮可
终于知道了我的电脑是战5渣..

观光链接:

header
http://store.steampowered.com/app/223850/

Excel 数组公式的概念解释

Excel 公式,本质就是输入原始数据,处理后再输出结果数据,放在公式的单元格里。

有些公式,输入是一个数据,输出也是一个数据,例如取整 int()、10 底对数 log()。若 A1=5.5,=Int(A1) 显示为 5。

有些公式,输入是一组数据,输出一个数据,例如 Sum。这一组数据整个是一个参数。若 A1:A5={1,2,3,4,5},输入公式 =Sum(A1:A5),显示为 15。A1:A5 数组是 Sum() 的一个参数。

有些公式,输入是两个参数,输出一个数据,例如 Match(A2,A1:A5)。两个参数,A1 是一个待查数据,参数二是被搜索的数组。

而数组公式,则是输入一组数据,输出一组数据

以 Match() 为例,Match 公式的形式为 =Match(lookup_value, lookup_array, [match_type]),其中 第三参数 match_type (查询模式)在本文讨论中忽略。则本文讨论的简化为 =Match(lookup_value 待查询数值, lookup_array 被搜索数组)

可以看到,一个 Match 公式一次只能在 lookup_array 里查找一个数值。而把 Match 公式改写为数组公式,并用 Ctrl+Shift+Enter 确认以后,实际公式则变成了 {=Match( lookup_value_array, lookup_array, [match_type] )}。

在公式里,本来应该是单一数值的地方,被替换成了一个数组,待查询数值 变成了 待查询数组。则 Excel 会自动响应 Ctrl+Shift+Enter 命令,把该公式拆分成多次分别执行,每次取待查询数组里的一项,单独给出一个结果,然后循环到该数组里的每个元素都被查询一遍。

例如,选择 C1:C5 单元格并在公式栏中输入 =Match( B1:B5, A1:A10, 0 ) ,按 Ctrl+Shift+Enter 回车。Excel 会自动内部展开五次 =Match() 查询,每次查询在第一个参数位分别填入 B1 – B5。即在 A1:A10 中分别查找 B1 – B5 的值,查 5 遍,并把 5 个结果分别放在对应的 C1:C5 单元格里。

array_match

所以:

1. 因为往往有多个输出结果,使用数组公式需要先选择好输出位置,再在公式栏写公式,写完用 Ctrl+Shift+Enter 确认。注意,这多个单元格包含的是『一个公式』。

2. 数组公式需要你在写公式时,把『一个数据』的参数改写为『一组数据』。(例子中 Match() 函数本来的 lookup_value 即『需要查找的值』改成了『需要查找的数组』。)Excel 会自动循环这个改写数组里的每一个数据,然后把公式计算结果填到对应的单元格里。

3. 数组公式修改起来较为费劲,经常会出现『不能更改数组的某一部分』,正确的方法是先按 Ctrl+/ 全选该数组公式的整体占用位置,然后再在公式栏进行修改。

4. 某些公式,例如 Sum()、Len() 使用数组公式和直接使用该公式往往没有区别。所以如果你见到某个教程在以 Sum 举例讲数组函数时就不用往下看了。百度搜出来有不少是这样的。

5. 一般来说,常用的数组计算 Excel 都已经提供了特定的函数,比如 Logest()、Frequency 等。如果返回的值有两个以上的,也通常都拆成了多个公式,比如线性回归的 Slope()、Linest()、Steyx() 等。当需要多个计算结果时,也无需使用数组公式,使用 Excel 的公式复制粘贴就可以完成绝大部分工作。上文的例子即是如此,选择 C1:C5 然后输入 Match() 数组公式,和先在 C1 输入普通的 Match 公式 =Match( B1, $A$1:$A:$10,0 ),然后把公式复制到 C2:C5 上,效果是一样的,后续处理起来还方便一些。

 

那么数组公式有什么用呢?

大部分情况其实没什么用,确实没什么用,所以很多人用了好久也没用过数组公式。哲学点地说,等到你需要用数组公式时,数组公式就有用了。

数组公式的最大特点是『输出的是一个数组』,所以它需要用多个单元格才能放下,同时,它可以作为数组参数供其它函数使用。所以数组函数最大的使用场景是通过复杂嵌套函数,实现更大程度的 Excel 自动化。

例如,去除重复单元格,可以使用 Alt+A+M 的『删除重复项』实现,但这样意味着每次数据更新,都需要重新进行人工操作,当处理步骤较多时,往往意味着后续步骤也需要重新操作。而使用数组公式,则可以一劳永逸地解决这个问题。

因为『删除重复项』本质上就是一个『输入一个数组,输出一个数组』的操作。在这个例子里,Match() 函数的第一个参数和两个 Row() 参数进行了相同的对应循环,并把每个计算结果填入相应的单元格里。

而另一个例子

则相当于把 A1 单元格中的每个字符都单拆出来。辅以其它公式嵌套,可以比较方便地计算诸如『若干个单元格一共包含多少个特定字符』之类的问题。

 

一句话总结:当你在使用 Excel 时,需要处理『处理若干个数据,过程中包含若干数据,结果也是若干个数据』时,在宏程序之外,还可以考虑使用数组公式。

命令行批量建立 github 库

一个需求:如何批量建立 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)编辑一个多行批处理文件,然后运行即可:

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