搬砖感悟

最近年底了,职场上又有很多事情闹得沸沸扬扬。比如腾讯某部门年会出现的低俗活动,锤子某离职员工的吐槽等等,微信上也见有人说他们公司年会活动低俗之类的。

出现这种事情,挺让我震惊的,毕竟大公司,价值观应该是比较正的,竟然搞出这种事情来。其实,年会上这些“疯狂”的事情,归根结底是空虚的内心和工作得不到认同吧,要是一年都很忙,年底开个会,肯定正事都说不完。

虽然博主还没毕业,但是做到过的工作有七八份,兼职加全职。关于工作这件事,还是有点自己的想法的。

工作永远都做不完,做的开心最重要。现在我选择一份工作,最重要的是在这份工作中能学到多少东西。如果我认为一份工作是让我用自己的时间来换钱,做多长时间都不会有什么长进或者进步很慢的,我一定会毫不犹豫地辞职。

像程序员这种工作,我非常赞同只看结果。

因为就是有的人做得快,分配到的任务可能几个小时就写完了。有的人基础的东西要看很久。这时候做的又快又好的人下了班,做不完的人在加班,老板喜欢加班的人,那么老板八成是有病。所以我觉得上班时间学习是可以的,不加班是可以的,但是分配到的工作做不完,是不可以的。

公司文化、精神、价值观这种东西,都是耍流氓。我认为集体意识就是扯淡,文明的发展肯定是越来越强调个人的独立性,以前是这样,以后也肯定是这样。什么意思呢?要是公司的人自发都喜欢讨论技术,气氛很浓,这很好,要是公司大部分人都喜欢加班,不给加班费也自愿加班,也没啥问题。但是领导每天都号召大家加班,发扬某某精神,这就有问题了。请问你写到合同里面了吗?合同是六点下班,你要我加班,请问你给钱了吗?再说,工作都做完了,我在这里加班,你也得不到什么呀!要是我工作努力做都做不完,那你领导就要考虑一下分工的问题了。

所以嘛,对员工的要求都写到合同里面去,合同没写你还要我做,就不太好了。搞些什么价值观,这就没意思了,程序员又不是搞传销,代码又不知道他的组织是谁。

我看来,价值观这种东西纯粹就是忽悠人。借着价值观,就能搞一些不好意思明说的下贱勾当。以前在一个比较有名气的博客上看过,某博主在亚马逊上班的时候,想要用自己的博客宣传下公司,帮助公司招聘,他的上司不支持了,说:人们看你的博客,是因为你是一个独立的个体,如果你的立场不独立了,就失去他的价值了。后来这个博主到了淘宝,淘宝的上司却让他用博客给产品做广告,他不同意,结果上司就给他扣上了没有集体意识的帽子。我对个人的自由非常看重,如果公司让我做一件工作内容之外的事情,我没啥意见,但是公司逼我做,说你不做不行,那我肯定不乐意了。其实不光公司对员工有这种事情,也有很多员工占公司的便宜呐!比如用公司的打印机打印非办公的公司,去报销私人消费啦!本质上和加班没啥区别,都是要求契约之外的权益。肮脏得很呐!

说白了,就是我拿你的钱,给你做该做的工作。你要是对我好点,福利好点,那我工作就更认真一点,对得起你。但是我上班时间做什么,几点下班,你别管,我肯定能把工作完成就行。你别不乐意,不乐意你去找别人去,我找别的公司上班,就这样。都21世纪了,自由选择的权利肯定要有。

要是这么想,低俗年会就肯定不会发生了,除非你情我愿,那我没什么好说的。如果不是自愿的,那肯定一杯盐汽水泼到领导脸上,这尼玛什么鸡儿年会,老娘辞职!

不是自愿,又不想辞职,那只能低三下四任领导摆布。为什么会这样呢?还是不平等。工作就和谈恋爱一样,不平等了,才会有一些操蛋的事情发生。为什么不平等呢?因为你得到了一份和你能力不符合的工作,如果你辞职了,不能找到一份相当的工作。

所以啊,话又说回来,洒脱的资本还是个人的能力。做个程序员真好,付出就有回报,学到的东西就是你的。努力学习,发展自己,工作就谁的脸色都不用看。拿钱办事情,你尊重我我也尊重你,大家互利共赢,没必要妄自菲薄。

人生三分一的时间都在上班,要是上班就盼着下班,跟上课一样,那太折磨人了。不要做这样的工作,找工作的标准就是你上班的时候是不是想下班,要是想,那算了吧,太折磨人了。

新年了,祝你在新的一年,有一份不用盼着下班的工作!

 

VimScript学习笔记(1):基本映射及常用功能

1.messages

使用echo可以打印出变量的名字,echom同样也是打印命令,但是使用messages查看的话,只有echom的内容才会显示。

把echo的内容添加到vimrc里面,再每次启动vim的时候,会看到像下面的信息:

2.使用set设置变量值

set的用法是:

  • :set <name>或者:set no<name>设置布尔类型的值
  • :set <name>!直接将原来的值设置为相反的值。
  • :set <name>?查看变量的值
  • :set <name>=<value>用来设置非布尔类型的值

3.键位映射

使用map <key> <action>映射键位,特别的,nmap对应normal模式的映射,vmap对应visual mode的映射,imap对应Insert mode的映射。

如果<action>里面还有别的映射,vim会继续解释。这也许很有用,但实际上是很evil的,例如下面这个映射

本意是使用新的一行替代旧的一行,但是在解释的时候,遇到dd,又会使用这个命令自身进行解释,所以“无限递归”了。

所有的map命令都有对应的noremap命令,即noremap, nnoremap, vnoremap, 和 inoremap,推荐在任何情况下,都使用nore来代替map命令,完全避免嵌套。

键位一共就那么多,总会不够用,所以设置一个<leader>会是一个不错的选择。

然后就可以使用 :map <leader>- dd这样子设置映射了。这个映射的意思是,先按下逗号,再按下-,会删除本行(dd)。

vimrc是我们要经常编辑的文件,所以设置两个命令可以快速编辑和应用vimrc文件是个好主意。

肌肉记忆。推荐一个比较快速的方法:inoremap jk <esc>也就是说,在Insert Mode下按下jk会退出到Normal Mode。因为jk两个键在你最常用的地方,两个手指分开按会很快,如果在Normal Mode下面按错了也没关系,不会有任何影响。

一开始你可能会不适应,依然使用<esc>键退出。推荐设置新map的时候,删除旧的,强迫自己肌肉记忆。inoremap <esc> <nop>你会很快习惯的!如果觉得自己老是用导航键,删除他们,强迫自己用hjkl。

4.缩写

缩写(abbreviation)是一个非常实用的功能。试一下

然后去Insert模式输入You adn me会发现adn被替换成了and。

这个功能实现的原理是,每当用户输入non-keyword,vim就会将在iabbrev设置过的缩写替换掉。什么是keyword呢?使用set: iskeyword?可以查看。基本上常用字符,字母数字和下划线,都是keyword。

另外一个比较实用的地方,以前我翻译文章,都要在末尾留下原文链接,版权信息,但是用iabbrev就不需要每次都输入了。

为什么不实用inoremap呢?因为map会在输入之后立即生效,那么我们就打不出来原来的字符了,iabbrev会在被替换字符是单词的状况下才替换。而且map是针对键位按照顺序依次按下生效的,iabbrev针对的是印到屏幕上的单词,这里要理解。

好了,说了这么说map了,接下来玩个大的吧:

设置之后,回到vim,按下你的<leader>"看看发生了什么。是不是很强大?如果看不懂的话,答案在这里。

 

编译安装Vim

使用apt-get或者别的包管理工具安装的Vim可能不支持一些特性,比如python。通过vim --version可以查看所支持的所有特性。如果想要Vim支持Python或其他(即将Python编译进Vim),就需要重新编译。编译的步骤如下:

1.准备一些可能遇到的库

先在系统中安装好可能需要的库,如果你不知道准备什么,可以等到第三部configure报错的时候,缺少什么再回来安装。

2.卸载原来的Vim

依次执行下面的命令卸载。

3.下载Vim源代码,解压

下载地址是:ftp://ftp.vim.org/pub/vim/unix/vim-7.4.tar.bz2 可以通过wget命令直接下载,也可以下载别的版本。

4.make安装

先执行config,参数可以根据自己的需要修改。

这个时候如果你缺少库,就会得到提示。比如我就遇到了下面这个错误:

查了一下,是缺少ncurses-dev,使用sudo apt-get install ncurses-dev直接安装就可以了。

最后make,搞定。

 

 

维护博客:手动升级wordpress,全站HTTPS

最近wordpress升级到4.7了,我有点强迫症,一直都跟着最新的版本。以前很好,只要点击立即升级,马上就升级好了,现在不知道为什么,两个周之内我试过很多次,都是失败的。今天实在是受不了了,就手动更新了一下,记录一下更新的步骤。

  1. 备份数据库(废话)。
  2. 禁用所有的插件,这是官方推荐的,照做(注意如果是升级到2.7那么这一步是必须的,不过现在没有人还用这个版本了吧)。
  3. 下载最新的版本,解压。
  4. 用FTP上传新版本的wordpress,这里最好先删除wp-includes, wp-admin两个文件夹,因为上传的时候文件是可以直接覆盖的,文件夹覆盖可能出现问题,注意不要误删了wp-content,这个文件夹存放的是你的静态文件。我用linux的命令行登录ftp上传文件显示的是553 Could not create file.,也不知道为什么,删除是有权限的。然后视图安装filezilla,去管网一看,太麻烦了……需要自己编译安装呢!于是懒得我就去问joyme现在有没有时间帮我上传一下,他说可以用apt-get安装filezilla啊,好吧,竟然不知道图形软件也可以通过apt-get 安装。
  5. 上传覆盖之后,还需要更新一下数据库。方法是访问update页面,其实我们直接登录admin就可以,它会提示你访问的。
  6. 更新完成,讨厌的升级提示消失了!

期间我还遇到一个问题:admin首页的仪表盘都不见了!变成了四个空的框,也没有上面的“显示选项”按钮可以让我调出来内容。后来发现是wp-cache搞得,直接删除缓存,搞定。以后遇到问题都可以先删除缓存试一下。

升级好了之后,我打算部署全站https。这是2017年的计划之一。

话说西部数码有点坑啊,不能自己部署,需要交100块钱让他们的工程师部署,我觉得好坑,两分钟就能搞定的事情。好吧,加上买ip的钱,阿里云便宜多了,速度也快多了。不过西部数码的好处是不用备案,他们的客服帮解决问题也挺省心的。

扯远了。回到https上来。证书我是在知乎上面看到大家说腾讯云只要验证了域名是你自己的,就可以颁发免费证书。可以,这很免费,我回头试了一下接着Firefox就把你标为不安全网站了。好吧,回头得搞一个靠谱的,花点钱就花一点吧,毕竟都2017年了,要普及https。

拿到证书和私钥,这部分的部署就和wordpress没关系了,也不是很麻烦,我交了100块没操作,这部分就略过去。

回到wordpress,要将站点的域名设置一下的,不然内链会有很多出错。我的很多静态资源都出错了,也不知道怎么回事,最后的解决办法是使用sample ssl的插件解决了事。这个软件软件推荐在部署之后去google的console和analytic上面设置一下,不是很麻烦,跟着教程做一下。

然后就是做一下全站的https了,到这里就有点心疼了。首先,国内所有的分享插件都是http代码实现的,当然不能用了。不过我发现也没有几个人把我的文章分享到别的地方嘛……删掉就删掉吧,分享也可以用链接。

七牛的cdn我没有https的,也不能用了。以后所有的流量都要走自己的。也还好,我的流量不是很大,目前来说不算什么,就是速度有点慢了。

最心疼的是微博秀了和豆瓣的推荐了,我一直把微博当博客的展示插件,作为短博客来写的,所有发在微博的东西都会以在博客的显示为首要目的,这下子没有了。不过微博不提供https也是坑啊。豆瓣可以自动显示我最近看过的书、电影、音乐并且打5分以上的,也没有了。有好多人问过我这个很好看,是怎么做到博客上的,现在不能用了有点可惜。

还有就是disqus,这个是个好东西啊,国内的评论插件都不好看,被disqus甩了八十条街,而且不支持https。disqus的评论在wordpress也会有,不像别的插件完全把你的数据拿走了。关于disqus的优点,比起国内的评论插件来,能说一本书。可惜的是这货被墙了,只好用自带的评论系统了。

这样,全站https也算是显示了。下一步应该去买一个更可靠的证书,然后博客重新搞一搞,针对seo做一下,以后多写一点文章。


更新:关于Firefox对证书不信任的问题。通过腾讯云平台申请的免费的证书是TrustAsia DV SSL CA – G5,直接部署这个证书,Firefox依然会将你的网站列为危险网站。但是不代表这个证书有问题,是中间签发机构的问题。解决方法是:下载Startssl的根证书,然后放到自己的证书的后面,Firefox就认为这个证书可以信任了。

参考:解决startssl证书在android手机浏览器或Firefox不信任的问题

完美!治好我的强迫症。如果后面再看到站内存在混合资源的话,估计是我什么地方手贱用了http的绝对链接,看到一个改一个就好了。

 

对PyObject的一点理解

很久之前看过一篇有关Python的list的博客,里面提到,Python中list的数据结构是这样的:

我很不理解的是,list完全可以存储×ob_item就可以了啊,为什么要存放××ob_item呢?

只要list的每一个元素存放的是指向PyObject的指针,就已经可以实现增删改查了,维护一些指向PyObject的指针就可以了,而且指针只有一层,还比“指向指针的指针”更快一些。百思不得其解,去stackoverflow上面提问,有个人回答,这样的话,如果要修改list的值,只要将指针指向另一个“指向PyObject的指针”就可以了。但是我觉得,即使是存一层指针,repoint也不是很麻烦。

后来自己就想了很长时间,跟朋友吃饭讨论过,跟张哥也讨论过。

昨天晚上,我感觉自己有点理解了。

首先,PyObject肯定是不能拿来用的,因为这就是文件系统的blob一样,我们用的是指向它的node,看他的文件块没有意义。所以一般来说,我们用的是×PyObject来操作Python对象。换句话说,我们基本上不会去直接搞PyObject,×PyObject一般是我们能获得PyObject的唯一方式。那么如果在list里面存放一层指针,即×PyObject的话,就差不多是复制这个对象进去了(虽然存放的也是指针)。参考下图:

PyObject

这个时候,如果从list的索引改了PyObject,那么×PyObject也会受影响,是指向了同一个对象(这个地方和××PyObject)是一样的。但是考虑这样一种情况:

假如是我想象的list存放的是×PyObject的话,我们将tom添加到list之后,重新给tom赋值了一个对象,也就是说,tom指向了另一个对象。但是li中的tom是直接指向一个对象的。也就是说,tom的repoint就和li中的tom关联不到了。

可能说的有点绕,和指针相关就比较麻烦,简单来说,就是:如果list存放的是×PyObject,那么变量重新指向别的对象的话,list存放的变量还是指向原来的对象,我们无法通过引用给list中的元素重新指向了(只能通过list的索引重新指向)。这就点像软链接和硬链接的区别。

但是如果存放的是××PyObject,那么引用(×PyObject)指向的什么,数组里面就存放的什么:

PyObject -pointer

另外,如果list存放×PyObject,那么list的元素改变之后,旧元素很可能没有指针指向它了,很可能被作为垃圾回收。

以上,是我这几天的理解,没有经过验证,很可能都是错误的。