新的笔记本电脑到手后应该做哪些事情?

吃水果要剥皮,用 Windows 也一样,如果是 Win 10 的话,刚装完系统就需要屏蔽一些功能,才能更顺畅快速:

1) 隐藏任务栏上的搜索框和小娜,需要搜索时win+s就会出现
2) 禁用开始目录的app自动推荐
3) 删除人脉图标
4) 删除任务栏上默认固定的邮件和商店(不是卸载)
5) 清理无用磁力贴,或者缩小,以图将开始菜单宽度缩减为原来的 2/3。
6) 禁止快速启动:经常会重启不干净。
7) 卸载5-8个左右系统捆绑应用。
8) 尽量让系统更新帮你自动装驱动,原厂驱动包经常各种捆绑。
9) 装完驱动后打开任务管理器,选择启动,然后把所有随驱动安装一起安装的自动启动10) 项目全部禁止(直接用任务管理器做不要安装任何电脑医生软件来搞)。
11) 资源管理器里,允许查看文件扩展名并取消文件使用历史。
12) 修改注册表,删除2-3个系统默认的置顶文件夹,比如 “3D对象”
13) 用windows 更新安装完所有补丁。
14) 浏览一遍所有系统服务,禁用1-3个没鸟用的服务,比如某些自动更新服务。
15) 此时应该做一次系统盘备份或者ghost。
16) 打开添加删除windows功能,允许沙盒功能,网上下软件时尽量先在沙盒中安装,没病毒没捆绑时再正式安装。
17) 每安装完一个软件,比如微信和qq,记得查看设置里是否有开机自动启动,有的话就禁止掉。
18) 避免安装一些黑名单内的软件,比如百度360全家桶,搜狗输入法及好几个国内杀毒软件,各种国内压缩软件。
19) 创建账号不要默认创建在线账户,先创建本地离线用户,再绑定微软账号。
20) 安装网盘软件时要记得关闭后台p2p加速服务。
21) 新装软件时不要盲目自动安装,先用手动安装查看会装些什么,有没有捆绑?有没有shell集成?每一个选项都要仔细阅读,不要被按钮的位置和颜色迷惑,看清楚按钮上面的字,反复确认三遍再点击。

国内用 Windows 就像骑着摩托飙高速,看着很爽,稍不留神就万劫不复。所以需要时刻留心,小心驶得万年船。

Loading

Posted in 大浪淘沙 | Leave a comment

如何长时间保存重要数据?

我大学毕业时把所有资料刻录成几张 dvd,才几年就发现读取不了了,而我老爸读大学时候的笔记本,几十年后仍保存完好。我前几年保存在移动硬盘里的照片,因为搬家时摔了一次,完全毁坏了,但是我家里小时候的相册却能几十年没有事情。

所以今天数据存储固然比过去更加方便,但是可靠性却大为降低。硬件坏了你还可以花钱再买,数据丢了,你就再也无力回天了。数据对我来讲是最宝贵的东西,无数血与泪的教训后,让我开始深入思考,怎么样才能让我的数据长期安全的保存几十年甚至终身?

可以用光碟么?

光碟是最廉价最受欢迎的介质,他们本来设计寿命是 10-20 年的,而一般情况你不要指望你光盘上的东西五年后还能正常读出来。即便一些号称长期保存百年以上的光盘,寿命也会由于我们各种不当行为大大降低,比如,没法按要求的条件保存(放桌面上被阳光暴晒变形),不小心刮花光盘,在盘面上留下指纹或者手上的油脂,这些都会促进光盘表面化学成分变质,最终导致你的数据损坏。

可以用机械硬盘么?

这两年 HDD/SSD 技术进步很快,成本越来越低。8T 的 HDD 差不多只 1000 元人名币的成本,1T 的 SSD 也从过去的好几千元降价到 600 多了。HDD/SSD 都能组成阵列,用虚拟逻辑卷的形式跨越物理大小的限制,为你提供超大规模的连续存储空间。

然而当你想要维护更大规模的盘阵时,你基础硬件设施的成本会大幅上升,4路阵列和8路16路的成本完全不一样。同时更新换代快,我过去保存的几块 IDE/SATA 接口的硬盘,今天我已经没有任何可用的设备来读取他们了。

遗憾的是,不管是 HDD 还是 SSD 他们都不能长期可靠的保存数据,每年有 1% 的概率由于磁场变化造成 HDD 数据损坏,这个损坏率会随着硬盘寿命逐年变大。而 SSD 的寿命比 HDD 更短,同时他们还会受到温度的影响,如果长期处在40度以上的工作温度,二者的寿命都会减半。

Continue reading

Loading

Posted in 随笔 | Tagged | 23 Comments

用 Vim/VsCode 来写 WordPress 博客

试用过一段时间各种静态页面博客系统,Hugo 这些,虽然发展的不错,但是比起 WordPress 来还是太弱了。WordPress 毕竟是发展了 15 年的东西各种功能和插件都比较完善。

所以这次回过头来重新使用 WordPress,顺便做了升级,速度更快了(升级 PHP7,引入页面缓存等),代码高亮等各种小功能也调优了一下,又加了一些类似热门文章和访问计数等小功能。

然后我写了一个命令行工具,可以让我在喜欢的文本编辑器里用 MarkDown 写博客,然后命令行发布到 WordPress,具体见 markpress 相关文档。

下面是一些调优后的效果,首先 Markdown 的代码块,使用 highlight.js 以后好看很多:

#include <stdio.h>
int main(void)
{
    printf("Hello, World !!\n");
    return 0;
}

这个插件支持 185 种语言(包括 Vim)的高亮,可以选择 89 种主题,是目前最强的代码高亮解决方案。

MarkPress 页面生成基本尊崇 Github 规范:

  1. 连接会被自动识别,只需要直写 URL,就会自动识别出来加上 <a> 标签。
  2. 比如双波浪线包围的内容 ~~测试~~ 会被划掉显示为:测试
  3. 比如 Github Emoji,直接写 :smile: 的 shortcode,就会变成 :smile:

除此之外还有很多 github 没有的扩展,比如:

折叠菜单点击左边箭头打开

第一行隐藏的折叠内容
第二行隐藏的折叠内容

MathJax 的内嵌公式,被 $ 符号包围住的内容会被识别成 latex 公式:

$z=\sqrt{x^2 + \sqrt{y^2}}$

得到:

$z=\sqrt{x^2 + \sqrt{y^2}}$

然后是 GraphViz 图形,现在在 MarkDown 中用 viz-{引擎名称} 开头的代码块:

```viz-dot
digraph G {
   A -> B
   B -> C
   B -> D
}
```

能被转换为内嵌 SVG 代码,并被主流浏览器正常显示:

Continue reading

Loading

Posted in 随笔 | Tagged | 4 Comments

kNN 的花式用法

kNNk-nearest neighbors)作为一个入门级模型,因为既简单又可靠,对非线性问题支持良好,虽然需要保存所有样本,但是仍然活跃在各个领域中,并提供比较稳健的识别结果。

说到这里也许你会讲,kNN 我知道啊,不就是在特征空间中找出最靠近测试样本的 k 个训练样本,然后判断大多数属于某一个类别,那么将它识别为该类别。

这就是书上/网络上大部分介绍 kNN 的说辞,如果仅仅如此,我也不用写这篇文章了。事实上,kNN 用的好,它真能用出一朵花来,越是基础的东西越值得我们好好玩玩,不是么?

第一种:分类

避免有人不知道,还是简单回顾下 kNN 用于分类的基本思想。

针对测试样本 Xu,想要知道它属于哪个分类,就先 for 循环所有训练样本找出离 Xu 最近的 K 个邻居(k=5),然后判断这 K个邻居中,大多数属于哪个类别,就将该类别作为测试样本的预测结果,如上图有4个邻居是圆形,1是方形,那么判断 Xu 的类别为 “圆形”。

第二种:回归

根据样本点,描绘出一条曲线,使得到样本点的误差最小,然后给定任意坐标,返回该曲线上的值,叫做回归。那么 kNN 怎么做回归呢?

Continue reading

Loading

Posted in 人工智能 | Tagged , , | 1 Comment

如何实现和优化 SVM(支持向量机)?

学习 SVM 的最好方法是实现一个 SVM,可讲理论的很多,讲实现的太少了。

假设你已经读懂了 SVM 的原理,并了解公式怎么推导出来的,比如到这里:

SVM 的问题就变成:求解一系列满足约束的 alpha 值,使得上面那个函数可以取到最小值。然后记录下这些非零的 alpha 值和对应样本中的 x 值和 y 值,就完成学习了,然后预测的时候用:

上面的公式计算出 f(x) ,如果返回值 > 0 那么是 +1 类别,否则是 -1 类别,先把这一步怎么来的,为什么这么来找篇文章读懂,不然你会做的一头雾水。

那么剩下的 SVM 实现问题就是如何求解这个函数的极值。方法有很多,我们先找个起点,比如 Platt 的 SMO 算法,它后面有伪代码描述怎么快速求解 SVM 的各个系数。

第一步:实现传统的 SMO 算法

现在大部分的 SVM 开源实现,源头都是 platt 的 smo 算法,读完他的文章和推导,然后照着伪代码写就行了,核心代码没几行:

Continue reading

Loading

Posted in 人工智能 | Tagged , , | 1 Comment

如何实现传统神经网络?

传统神经网络最早我 2008 年我用 C 实现过一版,当时打算用它来炒股,结果一塌糊涂,不过程序是调试通顺了,主要实现了四个模块:

  • 神经元:存储权重和激励函数,能够根据输入矢量计算出单一输出值。
  • 层:由多个神经元组成一个层,不同层的输入输出可以串起来。
  • 网络:由多个层串起来的网络结构。
  • 训练:BP 算法训练每层上不同神经元的权重。

今年拿出来整理了一下,补写了很多注释,并又照着 C 版本实现了一个 Python 版本的(非 numpy 实现),没用 numpy,因为我觉得 numpy 矩阵套矩阵一串操作猛如虎,看起来会比较头疼,就用基础类型写清楚每步运算会更清晰一些。

项目地址:

包含两个实现,C 和 Python,神经网络的正向推理是很简单的,就是一路乘加调函数,直接看代码和注释问题不大;但要看懂后面的训练代码,会碰到 BP 算法这个难点,说白了就是要理解什么是链式求导:

感觉讲的最清楚的就是 cs231n 的:

先前看过很多其它二手内容云里雾里讲半天,真的很难明白,但 cs231n 的视频,顺着一步步从最后推导过来,一下就能让你明白怎么回事情,建议找这节课的视频出来看一看。

看懂 Lecture 4,回过头来看代码也就可以对照一下,这些公式具体是怎么落到代码上的了。

Python 版本末尾有一段测试程序,训练和测试 XOR 计算,经过几轮训练,神经网络能够轻松的计算出 XOR 的结果来,但你可以试试,将前面随机数初始化权重那里注释掉,然后你就发现所有计算结果都是 0.5 了。

为什么呢?因为神经网络不像其它类似 kNN 或者 SVM 的模型,SVM 得到的是解析解,而神经网络目前的 BP 算法得到的只是近似数值解,很容易就陷入局部最优解里出不来,所以必须初始化随机数,初始化的不同,训练结果也有细微差异。

而 SVM 根本就不需要随机数初始化系数 C,全部用 0 初始化就行,最终得到的都是唯一最优的解析解,所以从理论模型上来讲,SVM 的确更漂亮,但不得不说,神经网络这个中医,很多时候还是挺管用的。

相关阅读:

Loading

Posted in 人工智能 | Tagged , , | Leave a comment

为什么图形学人才这么少?

图形学人才变少了,原因说起来很简单,就是锻炼的机会越来越少了呗,以前是家游戏公司都要研发自己的图形引擎,没有标准化,也没有成熟的商用引擎,更没有完善的开源引擎。

那么你但凡一家公司要做产品,势必要有一批人研发自己的引擎,大公司有时间自己慢慢搞全新的,中小公司没资源从头做,至少也要会修改 irrlicht 和 ogre,改着改着也就成自己的东西了,不想改也没关系,挖个拿着上家公司祖传源码的 “牛人” ,过来魔改一堆接口名称,一个新的引擎就诞生了。

那么你一个才毕业的应届生,即便以前从没碰过这一块,只要灵光点,是有很多机会接触到相关工作的,引擎要不断的升级,不断的开发周边工具,经过一个个项目的实战,总能不断成长,哪天碰到公司内外的新项目机会或者上面的人离职了,就能够把各大引擎按照自己的想法再抄一遍,再一不小心给新项目挖几个坑,有幸填完的话,一个新的图形学人才就这么锻炼出来了。然后进可以到大公司从事更专业的工作,退可以到中小公司当个“大牛”。

大公司肯定需要这样的人,发财的中小公司愿意两倍薪水挖这样的人,没发财的中小公司会意识到自己没发财很大原因是没有牛人导致图形效果不好,卡顿和崩溃。

所以人才得以上下流动,对应届生也能一步步的阶梯化成长。而现在就完全反过来了。

除了大公司外,98%的中小公司老板不愿意投资引擎,风险高,见效慢。而且关键是但凡一家外包美术公司,如果你用标准引擎,他们都能给你按标准格式输出各种素材,都能熟练使用标准引擎的各种上下游编辑器。游戏公司自己即便作出个引擎来。周边工具的缺失和非标准化所带来的成本是无可估量的。

作为游戏项目的技术团队,如果同时有公司内闭源引擎和 u3d,除非公司强制,或者前者特定领域下能秒杀后者,否则大部分时候都会选用u3d,因为于公而言,内部引擎文档匮乏,找人困难,培训时间长,找个有经验的人进来也要熟悉一半天。于私而言,自己花几年把经验积累到公司内部引擎上,换家公司,这些经验就白费了,人家需要的东西自己还很不熟,何必呢?

所以当有成熟引擎可用时,不论老板还是员工,因公还是因私,利益最大化的选择都是用现成的而非自研。

你可以说用同样引擎的游戏画面千篇一律,u3d做出来都像乐高玩具,ue34做出来画面看起来都很脏,cry做出来太刺眼,3A大作都有自己的引擎,所以画面才有自己的特点。

这说的没错,但是还有一个边际效应问题,现在不像过去做端游,手游夜游生命周期平均也就几个月,你能指望公司养你半年做引擎?而一款成熟的自研引擎无疑都是要成年计算的迭代时间和无数个项目的试错才可能成熟。游戏生命比过去缩短了三倍,然而引擎的研发周期和复杂度却增长了三倍,人员工资也上涨了三倍,相应整体投资风险也比过去也就高了二十七倍了。

所以除不差钱的大公司外,上到老板,下到项目组和上下游企业,都更愿意选择标准化的外部引擎而不是自研的话,原有的引擎团队的重要性就会降级,就会被打散或者重组,或者没有高薪资自然被分流。

那么一个毕业生,就再也难以有机会从事到相关工作中去了,没有真刀真枪的项目锤炼,没有百万用户终端上填过各种坑的技术,是很难有突破性成长的。

就算你有幸进入到了还有引擎团队的公司里去,你也会因为担心离开这里不好找对口的工作,而不得不考虑转方向的后路。

和以前任何一个图形程序员离职一堆公司疯抢的情况已经完全不同了,需求直接砍去了一大半。

当然,你特别牛的话就可以照样跳出三界外不在五行中,我讨论的大量普通水平的从业人员。而今天的牛人也是从过去普通水平的人里进化出来的。

而现在需求断了,导致人才流动的路径变窄,最终锻炼机会没了,三角循环,自然人才就少了。

Loading

Posted in 图形编程, 大浪淘沙 | Leave a comment

内网穿透:在公网访问你家的 NAS

家里 Nas 中安装了一系列服务,如果外网访问不了,手机上连不上,就十分不方便。所以我们需要内网穿透,方法主要有两个:动态域名和反向代理,下面对比一下:

动态域名

最早期的方法,要求家中拨号网络有一个外网 ip,每次断线拨号虽然 ip 变了,通过定时请求动态域名提供商的一个接口,把域名指向改成你最新的外网地址,这样其他地方就可以通过域名访问你家里的 IP 了。

一般动态域名路由器都支持设置,不支持也没关系,你家里的服务器的定时请求一次 DDNS 服务商接口即可,比如 no-ip 的 ddns.net 域名更新:

https://USER:PASSWD@dynupdate.no-ip.com/nic/update?hostname=test.ddns.net

在家里服务器的 crontab 中设置每 15 分钟 curl 访问一下上面的地址,把用户名密码和hostname替换成你申请的域名,即可更新。

最后家中路由器需配置端口转发,比如把外网 ip 的 443 端口转给内网服务器的 443 端口。

这是最廉价的解决方案,基本没成本,各类 DDNS 服务商也是免费的。唯一问题是当 IP 更新后,最长可能需要 15 分钟才能更新域名指向(更新接口调用快会被 ban),再算上各级 DNS 缓存时间,前后可能会有半小时你无法访问,不过我一周顶多碰到 1-2 次。

如果家里有外网 IP ,这是首选方案,现在越来越多宽带新开户无法得到外网 IP 地址,比如电信。联通还好,曾经不经我允许把我换成内网 IP,然后我打电话去骂,骂来了一个外网ip。但随着 IPv4 资源减少,IPV6 普及以前,外网 IP 肯定越来越少,所以我们需要反向代理。

反向代理

家中没有外网 IP 时,如果你有一台固定 IP 的外网 VPS,那么可用它做跳板访问家里内网端口。在 VPS 上启动一个反向代理服务,同时在家里内网服务器上启动另外一个映射服务,那么链接外网 VPS 的 443 端口,可以被反向代理转发到内网的 443 端口上。

Continue reading

Loading

Posted in 未分类 | Tagged | 6 Comments