如何配置终端

配置终端是许多人头疼的问题,比如配置之后没有达到自己预先想要的效果,但是又总是不知道哪里出了问题,或者配置完成之后又遭遇了很多烦恼。

本文的作用是解决这些问题,或者为解决这些问题提供一个思路。

颜色不对

颜色不对可能有很多原因,但归根结底是两个问题,一个是TERM环境变量没有设置好,另一个是当前使用的终端app不支持真彩色。

处理term可以使用

export TERM=xterm-256color

把它加载到你的rc文件里。有些人使用zsh,那么加入到~.zshrc里面。有些人使用bash,那么加入到~/.bashrc里面。

解决app真彩色问题,可以参考这个链接:https://gist.github.com/XVilka/8346728

Ubuntu14.04版本下默认的terminal是不支持真彩色的。

乱码

终端乱码很大程度上是因为当前的字体不支持输出的字符。这个时候安装一个字符集支持比较齐全的字体即可。常见的字体比如nerd fonts,包含了常用字体+许多的符号字体的集合,因此找到自己心水的字体,安装并且替换即可解决这些问题。

可能还有许多问题我没有想到,可以在留言区提出,我一并加上。

ROS 开发tips

这是我进行ros开发的几个比较有用但是ros-wiki中没有明确点出的。

使用catkin的清除命令

如果使用rosbuild进行此操作,可以使用:

rosmake --target=clean

如果使用catkin

$ cd ~/catkin_ws
$ rm -rf devel build install

执行以上命令后,可以像往常一下构建数据包

$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.zsh

重新构建单独的catkin包

$ cd ~/catkin_ws
$ catkin_make --pkg package_name

编译单独的包

catkin_make -DCATKIN_WHITELIST_PACKAGES='kinect2_viewer'

ROS image转换为cv::Mat格式,提供opencv使用

http://wiki.ros.org/cv_bridge/Tutorials/ConvertingBetweenROSImagesAndOpenCVImagesPython

参考

ROS消息开发

  • ROS常用的消息:http://wiki.ros.org/common_msgs
  • ROS消息wiki:http://wiki.ros.org/msg

ROS消息开发参照:

  • csdn
  • http://wiki.ros.org/cn/ROS/Tutorials
  • 定制自己的消息类型:csdn

开发自己的消息类型的时候要依据原本的消息类型来定义,定义消息的作用是,定义过的消息可以被python,以及cpp引入。进行开发的时候,可以参考给出的例子进行msg的开发。

使用Fabric进行部署

Fabric是一个可以在远程机器上运行命令的库

Fabric官方目前只支持Python2版本,但是有勤劳的人开发出了适配Python3的版本。具体可以查看这个fork

Fabric的使用

我在使用Fabric的时候主要是用于部署我的网站。使用时候,首先需要引入所有的API:

# 导入Fabric API:
from fabric.api import *

这样就可以导入Fabric的API进行远程控制啦。

具体问题

  • git需要输入密码
env.forward_agent = True
  • ssh通过秘钥链接
# 使用秘钥
env.key_filename = ['/Users/xiuhao/.ssh/key']
  • 使用root
# 服务器登录用户名:
env.user = 'ubuntu'
# sudo用户为root:
env.sudo_user = 'root'

一个简单的部署例子

这个部署例子结合了更新代码,进入指定目录,运行命令等。

BASE_DIR = '/home/ubuntu/django_blog'
def deploy():
    """
    deploy new changes
    """
    with cd(BASE_DIR):
        run('git pull')
        run('make down')
        run('make up')

写好文件以后,保存为fabfile.py,运行fab deploy即可部署。deploy对应着deploy()函数。

NOTE:不在远程服务器上使用ssh的git仓库,是因为担心服务器被hack连累我的git repo

参考资料

写博客这个事情

写博客这个事情不是我自发进行的,成因也很有趣,是在本科贺立坚老师的指导下坚持下来的。

写博客的优点其实可以想出很多,但是于我而言,其根本原因还是:

我做了一些让我自己很得意的东西,想给大家看看

这就是我的初衷。此外,排名的上升以及一些统计数据的观察也可以给我带来许多欢乐,这是一步步坚持下来收获的。

有许多优质的博客给我带来了许多收获,我不认为那些作者,做这种事情就是“有所图谋”的,很多时候都是无私奉献的一种精神,就像是开源软件一样。认真的去做一件事,长期做一件事情是很有成就感的,也是能够收获喜悦,升华自我价值的。当然,值得一提的是,奉献是开源精神所包含的精神之一,但不是全部。

我觉得写博客是一件很好的事情,有点像是QQ空间的升级版。写博客的过程中,会对博客题目进行反思,会对自己的文字进行思考,甚至可以在这个过程中对于之前一些没怎么在意的事情有了新的看法。比如,在写这篇文章之前,我没有意识到我写博客的真正目的,而随着这篇博客慢慢的完成,我意识到了这件事情。

此外,在叙述一个不清楚的事情的时候,写博客是一个梳理思路的好方法,就如同给别人陈述一遍你的思路一样。只是,这个听众并不局限于你的地理位置,而是通过互联网广泛传播。

戒骄戒躁,继续努力。

一个小的助记工具

花了一小段时间撸了一个助记工具,运行起来就是把“复制”的词汇自动保存到规定的json文件中,并累计次数。如果后面有时间继续做下去,可能会考虑做一些可视化的工作,以及调用一些第三方API等等。

可能一些词典工具本身已经带有这个功能,不过自己开发的东西自由度会更大一些,学习成本不高。

github repo: wordRecorder

roadmap

  • leancloud云端保存!
  • 还没想好

我的vim配置

现在使用vim最好是使用neovim或者vim8版本,来获得async特性,防止运行补全命令的时候卡顿。

我的配置文件在coding gist

相应的安装方法也写在其中。

插件管理器

安装我的配置文件,首先需要安装一下插件管理器。

curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

使用字体:

nerd-fonts https://github.com/ryanoasis/nerd-fonts/tree/master/patched-fonts

运行

把.vimrc移动到~/.vimrc

打开vim,输入::PlugInstall

安装完成即可。

语言补全

需要个别语言的补全,查看completor

因为是自己手动慢慢写成的vim配置,因此想要我定制或者修改不需要额外的学习成本。如果想要更好的配置,可以考虑spacevim,SpaceVim是参考Spacemacs制作的IDE,非常有趣,二者相爱相杀,促成的产物。

博客的二次提升

今天晚上我在rss上花费了不少时间,由于效率不高,算是娱乐了一下吧。

标记语言考察

markdown现有的一些python-parser,比如python-markdown虽然已经做得很好了,但是对于todo等我想要的需求还没有支持,因此想要考虑使用其他的标记语言,比如restructedtext,这个用于sphinx这个用于构建文档框架中的标记语言。

于是,简单查看了docutils的文档,发觉其对于我想要的特性支持也并不是十分优秀,准确讲,只有一个暴露在外的接口,并无其他。这个接口的例子:

>>> from docutils.core import publish_parts
>>> print publish_parts("*anurag*", writer_name='html')['html_body']
<p><em>anurag</em></p>

自然,目的是文档,标记语言只不过其中的产物,也没有必要做多余的事情。倒是我想的简单了。

在搜索了许多材料之后,发现IBM的开发中心很不错,有很多有意思的东西,文章也写得深入浅出。也算是意外收获。

最后还是放弃了对于markdown的更新,还是按照老路子,如果有时间,就给python-markdown提一个pull request自己造轮子。

rss相关研究

我的博客rss常年挂出500,其中主要原因是内容中编码出错的问题。我一直没有定位到这个bug的出处,可能是SQLite的bug或者django-form的bug?文章中总是会混入\\x08这种类似的xml无法编码的数据。有时间仔细排查一下。这个问题才是主要问题,不过我的精力主要放在下面这个问题上了。

为了解决rss渲染的时候,description的问题,我引入了safe希望不要把<div>类似于这种标签进行转义,不过我失败了。我查询了关于django的safe过滤器,其中safe过滤器可以通过一个函数来搞定,就是这个:

This ought to do it:

from django.utils.safestring import mark_safe
foo = mark_safe(foo)

引入之后依然进行了转义。于是我决定暂时进行一次清除,用一篇博文来替代所有的description。如果后面有时间看看rss,把这个功能做完。最好还可以自己写一个rss阅读器,来方便自己进行博客订阅。
在网络上一个不错的教程,来自自强学堂。看完这个rss以后,可以考虑从官方文档入手。

也不能老换

因为看到大家都用node来搭建博客,又一次简单的翻阅了一下ghost——一个基于nodejs开发的文档,我感觉效果不大。一方面,学习nodejs于我而言,可能是一个比较高的学习成本,我没有多余的时间进行nodejs学习。对于nodejs,我仅仅是了解一部分的皮毛知识。

在查询之后,判定切换成本比较高。如果要直接用博客系统,考虑使用Zinna,以及Mezzanine进行二次开发。

当然,使用hexo也是一个非常不错的选择。可以使用跨域来解决访问量统计不准确的问题。

总结

整个娱乐过程没有比较好的产出,主要原因可能是没有在做事之前,简单规划一下。试想,如果规划的比较优秀,可能时间上节省大半吧。因此强势安利一波trello,和国内的teambition相似,不过UI设计上更加简洁明快一些。

参考资料

未列出

Ubuntu下最舒爽的输入法

私以为,Ubuntu下最舒服的输入法是Rime,建议在Ubuntu下安装fcitx-rime

安装

# 1.安装
sudo apt-get install fcitx-rime
# 2.配置 fcitx 为默认. 然后重启
im-config
sudo reboot

我的系统环境是Ubuntu 16.04

安装完成以后,使用ctrl+grave。grave就是tab上方的反引号。

rime是佛振,我国开发者进行开发的,充满了Hack精神的输入法引擎,在条件允许的情况下,可以进行捐助。