本来准备总结一下Linux桌面系统使用一年以来的一些感受,以及为什么选择Linux作为桌面系统工作学习的,但是构思了半个小时也没能想到要写些什么。所以还是来推荐一下一年以来在Linux桌面平台下的软件体验和推荐吧。由于我这一年多以来一直使用的是Fedora Workstadion,所以并不能保证这些软件能在其他平台下的体验与我一致,不过一般来说都是没有问题的呢。
0X00 vim + spacevim
首先说明我不认为Vim比IDE写代码更好用,但是我仍然在使用vim。一个原因是觉得使用盗版IDE有些不太道德,另一个也是想要提升一下自己的代码水平,毕竟vim给出的提示会更少一些。IDE用户可以在IDE上安装vim的操作插件,毕竟vim的操作方式还是能很大程度上提升效率的。
SpaceVim 呢是vim的一个插件打包配置集成之后的一个版本。由于它集成了大量精选插件和配置,所以用起来很舒服,就把他当成一个高级的文本编辑器来用就好的。spacevim还有官方的中文文档可以查阅,虽然学习成本相对高一些,但是带来效率和爽快感的提升可不是一点点的。
0X01 ulaunch…
0X00 Sentry是什么
Sentry是一个统一收集整理程序异常错误的服务。如果你有一个程序在跑,并且配置了日志,那么可以轻松的找到程序出错的地方;甚至可以在报错后发邮件通知自己以便抓紧处理。但是如果你的团队有10个项目和50个人,并且这50个人并不是每人只负责一个项目,此时此刻该怎么办呢?难道为每个项目都配置很多人,并且在人员变动和项目变动的时候都去再修改吗?这样就未免有点傻了,Sentry就是用来做这个的。
你可以在Sentry上为每个项目创建一个Project用于收集项目的错误,再为每位成员创建用户,由用户去关注项目,就可以实现上述复杂的功能了。
0X01 如何部署
为了流程简洁,默认安装了docker和docker-compose。
上述命令执行完成后,输出的最后一行类似乱码的东西是我们所需的secret-key,将其复制粘贴之docker-compose.yml文件的SENTRY_SECRET_KEY后面,形似
SENTRY_SECRET_KEY: '***'
SENTRY_MEMCACHED_HOST: memcached…
0X00 什么是“事务”
“事务”简单的说就是把一些数据库操作打包起来,要么就全部执行要么就全部不执行。
假设有一个操作是新建一个学生信息,有多张表分别记录了“基本信息、家庭信息、学校信息等“,那么就需要分成多步来新增这个学生的信息。但是如果在添加了”基本信息和家庭信息“两张表的内容后在添加”学校信息“时出现了错误那么数据库中就会存在该学生部分信息,从而使得数据库中的数据出现错误。
如果将这些操作放到一个”事务“中执行就可以在中途出现错误的时候所有数据库操作都不生效,当顺利执行完成之后使所有数据库操作都生效。总的来说就是”事务中出现错误则所有数据库操作都不生效,否则所有数据库操作均生效“。
具体可参见下面几个链接
Database transaction - Wikipedia
MySQL Document
0X01 将事务绑定到http请求…
0X00 Django Model中的空
Django的Model常见两个与空有关的参数:null和blank。其中null是数据库层面的是否允许为Null,而blank则将空处理为空值。比如一个CharField的blank=True,那么这个字段在没有赋值的情况下入库,这个字段就会是空字符串而不是Null。
如果将blank=False再不赋值该字段进行保存则入库的就是Null。
所以换句话说,null=True是数据库层面允许存储Null,而blank=True则是允许存入"空字符串"等表示空的值。
0X01 Django REST framework中的空
在Django REST framework的serializer中的字段,有三个与空有关的,都是在创建或更新中生效。分别是allow_blank/allow_null/require这三个。其中allow_blank=True表示着CharField/ListField等允许传入""/[]等空值;allow_null=True表示着允许传入{"name": null, "age":…
0X00 Model中要注意的几点
verbose_name 和 help_text 属性
Model中通常第一个参数指定的是verbose_name,还要手动指定一个help_text属性。其中verbose_name属性是用来我们自己读的,而help_text是用于提供字段描述类的功能,比如在DJango Admin中verbose_name会变成字段的中文名,而help_text则会变成改字段的描述。
unicode 方法
每一个Model类我们最好都要重写一下这个__unicode__方法,使之返回一个有意义的数据。比如一个学生信息的Model,我们不去重写这个方法,最后在ipython中或是项目中直接调的话就是这个样子的<QuerySet <Student: 1>, <Student: 2>, <Student: 3>]>。如果我们重写了这个方法
那么返回值就是`<QuerySet <Student: (男)小明>, <Student: (女)小红>, <Student: (女)小兰d>]>。不仅是在调试过程中还是程序里都会有不错的效果。
关于choices…
0X00 普通的查询
这种查询方式与普通的方式比起来没什么区别。
0X01 AND
把多个条件用逗号分割开就可以了,或者使用&符分割开。
0X02 OR
这里用|符号分割开筛选条件,最终筛选得到的是"所有女生、四川人和叫王铁蛋的人",也就是说相当于分别筛选了这三个条件,最终取了并集。这种查询如果用普通方法进行查询就会很麻烦,可能要写成下面这样:
0X03 NOT
使用Not查询的方式就比较诡异了
0X04 组合技
有的时候经常需要查询同样的条件多次,这种方法就可以一次编写查询条件多次执行
在Linux下安装软件通常会使用包管理工具自动处理依赖问题,在Fedora下一般使用dnf包管理工具。一般我们会给自己的源设置为国内的镜像源,比如
但是有的时候还是避免不了从国外源下载数据,这种情况下经常出现速度巨慢无比甚至会断开的情况。这种时候我们可以给dnf设置通过代理连接网络,这样一来下载速度就会快得多了。
sudo vim /etc/dnf/dnf.conf编辑dnf的配置文件,添加如下配置,保存后再执行dnf命令就可以使用代理的方式连接了。
需要注意的几点:
1. 本示例只是针对我自己的电脑,如果你自己的Shadowsocks配置跟我的不同,请根据自己的配置自行修改(没有密码的可以不写后两项)
2. 示例中使用了socks4://的协议,如果自己有其他方式的代理也可以使用,比如http://等
3. 当不再使用的时候记得将配置注释掉,以防连接国内源也使用代理
git stash save/apply/pop
在用git的时候经常会有需要临时切分支等操作,但是如果当前工作区进行了修改就不能直接切分支。这时候呢就得把当前的代码暂存起来,可以这么操作:
这样就吧上次commit到现在的修改都暂存起来了,可以使用git stash show来查看暂存区。我以前就是这样的,每次由两个或是两个以上的stash之后就蒙圈了,不知道那个stash做了哪些改变。虽然git stash show可以看到每个stash修改了哪些文件,但是还是不能准确的定位到自己需要的stash。
后来发现git stash后面还能继续接参数,这里得感谢git plugin for oh-my-zsh。当临时保存一些修改的时候可以这样:git stash save "fix:xxxxx",有多个stash的时候也可以用git stash show来看到每个stash的备注,就方便多了。
其中git stash pop是应用一个stash,并删除这个stash。git stash apply是只应用不删除。
善用git可以大幅提升效率哦
0X00 遇到了一个问题
前段时间自己的电脑重装了系统,然后公司内网的Docker hub出了点问题,没办法继续开发。后来经过一波Google找到了一个可以备份与恢复Image的方法,使用docker save / docker load命令。
0X01 备份与导入镜像
首先查看自己的镜像,然后找一个准备备份的镜像,找到他的IMAGE ID,假设选中的是ubuntu的镜像,那就使用dokcer save 0458a4468cbc --output ubuntu.tar就可以把ubuntu.tar文件拷贝到其他电脑上。
到另外一台电脑上执行docker load --input ubuntu.tar就可以把这个镜像导入进去。
0X00 enumerate是什么
enumerate()是一个Python自带的函数,用来同时遍历刻碟带对象和索引值.
0X01 enumerate怎么用
如果不在不使用enumerate()的情况下去除一个字符串列表中的字符串中的空格,那么通常会写出下面这种程序.
可以看到光是处理空格都用了四行,而且还并不怎么优雅.那么可以使用enumerate()来修改一下这个程序.
语法大概就是这for 索引, 对象 in enumerate(可迭代对象).用起来不仅干净优雅而且可读性也更强了.