Ubuntu 16.04 install iai-kinect2

install libfreenect2, choose the (other) and don’t forget to test bin/Pronect after install.

ATTENTION: I don’t have NVIDIA or AMD graph card. It might be different if you use them.

PROBLEM

when you face this problem

/usr/local/include/opencv2/flann/saving.h:113:63: error: exception handling disabled, use -fexceptions to enable
         throw FLANNException("Invalid index file, cannot read");

run

roscd kinect2_registrations

edit CMakeLists.txt, add

add_definitions( -fexceptions )

it will work.

使用fish – 一个新的shell

许多人都在推荐fish-shell,比如说阮一峰大佬和Reitz神;因此也要试试fish的魅力。虽然已经是z和zsh的老用户,但是对于效率的极致追求不能停。

注意:fish仅适用于某些开发场景,目前不适用于所有开发场景——在其他许多shell环境中,由于历史因素以及已经构建完成的大量生态,对于当前的开发影响是巨大的。

fish基本操作

fish不仅仅使用tab进行不全,还可以使用ctrl+f或者alt+f进行全行不全。

fish还可以通过安装oh-my-fish,对应到z-shell的oh-my-zsh。不过,一般情况下,fish本身就已经做的够好了,基本不需要再进行更多的配置。

fish中的export

使用set -x来替代。例如set -x HOME /home/svtter,即export HOME=/home/svtter

后记

后来我还是切换回了zsh;我使用的开发环境对于zsh已经支持的很好了,但是对于fish的支持还是差强人意。学习新的技术是需要成本的,如果有时间就对fish的支持进行完善,如果没时间,那么还是等它更加成熟再使用吧。

参考

http://www.ruanyifeng.com/blog/2017/05/fish_shell.html

使用Docker时遇到的sitemap问题

这两天感觉博客访问量已经不能靠用嘴宣传了,于是决定做一下sitemap,但是发现django自带的sitemap生成器存在这样的问题:生成的sitemap是依照container的hostname来显示的。

为此我查询了一下其他人是怎么搞的,发现他们都把nginx和django放在一个容器下——但是如此构建不仅麻烦,似乎违背了docker的构建思路,在一个container里面放了多个进程。因此,我认为下面的方案是合理的。

解决方案

Enabling the sites framework

To enable the sites framework, follow these steps:

Add ‘django.contrib.sites’ to your INSTALLED_APPS setting.

Define a SITE_ID setting:

SITE_ID = 1

Run migrate.

django.contrib.sites registers a post_migrate signal handler which creates a default site named example.com with the domain example.com. This site will also be created after Django creates the test database. To set the correct name and domain for your project, you can use a data migration.

In order to serve different sites in production, you’d create a separate settings file with each SITE_ID (perhaps importing from a common settings file to avoid duplicating shared settings) and then specify the appropriate DJANGO_SETTINGS_MODULE for each site.

>>> from django.contrib.sites.models import Site
>>> one = Site.objects.all()[0]
>>> one.domain = 'myveryspecialdomain.com'
>>> one.name = 'My Special Site Name'
>>> one.save()

代码写多了,对于Flask和Django也就十分释然了。两个东西都是利器,针对的东西不是很相同;编程语言也是,都有自己擅长的部分,如果你非要用某种编程语言花很大的力气去做一件小事,除非你是geek而且有追求,并且没有deadline在旁边催催催,否则不建议你这么做。

参考项目

https://github.com/flyhigher139/mayblog

pipenv入门指南

前言

pipenv是书写flask的大神kennethreitz的新作;pipenv集成了virtualenv和pip等工具,让你从requirements.pip以及virtualenv的环境中解放出来。并且他还集成了pyenv的选择python版本,可以说是所向披靡了。

这是他的原话:

You no longer need to use pip and virtualenv separately. They work together.
Managing a requirements.txt file can be problematic, so Pipenv uses the upcoming Pipfile and Pipfile.lock instead, which is superior for basic use cases.
Hashes are used everywhere, always. Security. Automatically expose security vulnerabilities.
Give you insight into your dependency graph (e.g. $ pipenv graph).
Streamline development workflow by loading .env files.

相信随着pipenv更加流行,许多工具也会在自己的环境中对pipenv提供支持,解决许多令人不舒服的问题,也能更好的提高编辑的舒适度。

安装pipenv

$ pip install pipenv

创建虚拟环境 virtualenv

  1. 当不存在一个虚拟环境的时候,pipenv将会自动创建一个环境
  2. 你也可以手动创建虚拟环境:
    1. $ pipenv --three 创建Python3虚拟环境
    2. $ pipenv --two 创建Python2虚拟环境
  3. 其他的东西和virtualenv是一样的。

安装包

比如你要使用requests(是的也是这个大神写的)。

$ pipenv install requests

安装完成后,会生成Pipfile以及Pipfile.lock;这一点很像npm.

其他命令

  1. 激活当前虚拟环境 pipenv shell
  2. 运行虚拟环境中的命令 pipenv run python
  3. 把你的依赖图输出出来 pipenv graph
  4. 安装当前目录的相关依赖 pipenv install

使用问题

目前我使用的时候也会多少存在问题,比如说我看不见下载的进度条,默认不是开启的;
然后就是因为网络环境的问题,我的pip.conf设置不能应用到pipenv上,我需要自己手动更改Pipfile,这一点有些麻烦。

后记

本身我想把这个文章针对的群体稍微降降,针对一些技术能力不是特别高的群体,但是存在一些问题,比如有些东西是需要一定知识才能看懂的。如果出现了不懂的内容,尽量自己查找一下吧。

使用Docker安装Spark

在国内加载Dockerhub上的镜像速度会比较慢,对此我们可以通过设置mirror镜像的方式来加速images的下载。

此外,如果是ipv6的网络,在一些mirror可以直接走ipv6通路,速度非常客观。这里以USTC的mirror为例。

我这里的环境是Ubuntu 14.04,对于不同的Linux环境,修改的方式都差不多;修改文件/etc/docker/daemon.json,如果没有这个文件,创建一个,注意,此处可能需要root权限。修改完成后,运行命令sudo service docker restart重启docker服务。

{
    "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

配置好以后,选择2.1.0版本的spark进行docker下载。

docker pull p7hb/docker-spark:2.1.0

或者直接运行

docker run -it -p 4040:4040 -p 8080:8080 -p 8081:8081 -h spark --name=spark p7hb/docker-spark:2.1.0

参考

  1. https://lug.ustc.edu.cn/wiki/mirrors/help/docker
  2. https://github.com/P7h/docker-spark

Shell-tips

重启终端

执行命令,修改环境变量等等之后可以通过此命令来简单重启shell

exec "$SHELL"

查找文件

$ find ~ -name "*.txt" -print #在$HOME中查.txt文件并显示

locate findname

编辑变量

zsh中,编辑$HOME/.zshenv;在bash中,编辑.bash_profile

Ros Kinect Configure Note

This blog for my kinect-v2 ros configure.

Environment

  • Thinkpad P70
  • Ubuntu 14.04
  • indigo

Reference to https://github.com/code-iai/iai_kinect2

Install

Before start, make sure the cuda, cudnn has been configured correctly.

First, you need to install libfreenect2.

I recommend to use export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64 in your .zshrc or .bashrc (more professional, in bash_profile or .zshenv). You will avoid some problems about library error.

When installing libfreenect2, Use cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2 -DENABLE_CXX11=ON to generate Makeifle at build/

Then Install iai-Kinect

I use catkin_make -DCMAKE_BUILD_TYPE="Release" -Dfreenect2_DIR=$HOME/freenect2/lib/cmake/freenect2 to Compile iai-Kinect because installing to $HOME/freenect2 before.

NOTE:

  1. enable C++11 by using cmake .. -DENABLE_CXX11=ON instead of cmake ..
  2. If something is not working, check out the latest stable release, for example git checkout v0.2.0.
  3. check your opencv version: pkg-config --modversion opencv.
  4. NEVER EVER use sudo prime-select intel.

Error

I missed sudo apt-get install beignet-dev; so I got this error:

Building CXX object iai_kinect2/kinect2_bridge/CMakeFiles/kinect2_bridge.dir/src/kinect2_bridge.cpp.o
Building CXX object iai_kinect2/kinect2_bridge/CMakeFiles/kinect2_bridge_nodelet.dir/src/kinect2_bridge.cpp.o
[100%] Built target kinect2_viewer
/home/svtter/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp: In member function ‘bool Kinect2Bridge::initPipeline(const string&, int32_t)’:
/home/svtter/catkin_ws/src/iai_kinect2/kinect2_bridge/src/kinect2_bridge.cpp:427:28: error: expected type-specifier
       packetPipeline = new libfreenect2::OpenCLKdePacketPipeline(device);

Write with Vim – 2

Vim的下一步

对我自己而言,也是在这一步。

现在你对Vim已经有所了解,hjkl肯定会,f也能熟用,,可能被你映射成了<leader>,或者等等。但是我还是想要写这个blog,来指引新手(诚然,也是指引自己)。

这个时候,我建议你将Esc映射成ii,然后禁用Esc

" 强迫自己不使用ESC
inoremap <Esc> <nop>
inoremap ii <ESC>

Write with vim – 1中,记录模式我已经用的比较习惯了(@+寄存器),但是正则表达式用的一般般,仍然需要好好的努力才行。

想要用好Vim,离不开github

大概更多人喜欢在 http://www.vim.org 上寻找自己心仪的插件,但是我认为还是在github上找更好。为什么?

  • 因为许多的开源项目都已经在github上扎根,许多优秀的插件都能在github上找到其身影。比如:Nerdtree, YouCompeleteME, airline, etc.
  • 你可以通过github的star数量来判断这个项目的优秀程度。当然,更确切说,是把star做为参考标准之一。

等等优点,想到我再补充。

使用插件管理器,管理你的插件

我个人比较推荐 Plug
插件使用git更新插件,将vimscripts分离,控制不同功能的插件可以放在不同的位置,保证了vimrc的整洁。从而提高了个人配置的维护性。

Plug 是首当其冲的插件,有了他,你会发现更新插件,安装新的插件一切都是那么的简单。

Plug 的使用方法在 README 里面有,但是如果英文比较差 — 没关系,也能看懂。

下一步的学习

很多人觉得vimscript学习起来有些困难,这里有份非常好的文档。准确说是翻译。翻译者辛苦了。

http://learnvimscriptthehardway.onefloweroneworld.com/

Write with Vim – 1

本文最初发表于2015年,但是个人认为写的尚可,就搬运到这里来,其中有些知识有些老旧,有时间的时候再更新一下。

Write with Vim – 2

前言

[2014]

大约在一年前使用vim?这个也是个不确定的时间。具体什么时间使用Vim早已经忘记了。现在用的还算顺手,但是很多东西其实都还没有认真的学一下。最简单的比如说一部分正则表达式的匹配,以及vimscript的写法等等。也是没有具体时间去认真的深入,毕竟信息科技的世界里有太多太多可以探索的东西了= =。

在大多数情况下我还是认为自己写一些前人已经有的blog毫无价值,但是转念一想写blog又是为了谁呢,还不是为了自己吗。总结过去,才能更好的前进走向未来。

另外最近又在开始看emacs了。不过总感觉这样是不好的行为——vim我还没有钻研透彻,就跑去了E去到处乱看,最后哪个都搞不好——谁又知道呢?废话也是少说,写本文是给新手入门的。
另外今天发现K的作用是查找命令(默认是!man)[2014-09-27]

本文是利用vimperator(firefox)+ gvim进行书写的,还有了markdown的高亮等等插件。

[/2014]

入手Vim

首先我认为你是在Linux下使用vim的,而不是windows。如果是windows,我建议你寻找类似的
取代方案,或者等着我以后补充。如果给你带来不便了,你来咬我啊~

当年学习vim的时候遵从诸位大神的理解,跟着vimtutor走了一趟,感觉还是比较不错的。
最关键的还是自己要多多使用vim,不能停,就算是一开始很不爽,也要坚持使用下去

  1. 第一步是学习vimtutor,这个毋庸置疑。最关键的输入i, 还有移动hjkl记住了就可以了
    之后最关键的任务就是不停的用vim,就算是觉得慢也用——当然在慢的过程中要思考如何能快。
    学习使用vimtutor就是在命令行中输入:
    vimtutor
    第一步我个人认为是最难的一步。尤其是度过那一段干啥都很慢,狂点鼠标还用不了的阶段。

  2. 然后不是跳到问题3就是跳到本问题了。慢慢发现熟悉的<C-c>(就是Ctrl+c)不能用了,到了Vi
    m里面变成了终止退出命令了(就像是Esc)(原本也是使用ESC来退出编辑模式的,但是后来发现<C-c>
    比较快捷,于是就使用他了。(如果你没看懂,重新返回第一步练习)。然后在vim中寻找关于复制,
    粘贴的使用方法——至少我是这样。然后就会理解vim中的寄存器的相关信息。

  3. 然后就开始找那些可以让自己快速编辑的命令了,比如说w|e|f。我个人比较喜欢f,这个可以让我
    快速定位一句话中的一个字母,欲罢不能。w,e倒是用的比较少,b的位置我不是很喜欢。在这个
    过程中大概d | s | c这些家伙也慢慢出现了。

  4. 再然后就开始发现数字和大写字母的好处了,从小写到大写也是一个慢慢认识的过程,也是不用
    记忆到底是如何运作的,只需要看好了出现的位置就行了。用多了自然就会了。

  5. 然后习惯了以后就是换行,查找,替换等等操作了。在这个过程中查找用的还是比较多的,
    但是替换的命令我就经常忘记如何使用了——没办法,经常忘记。换行更多的使用的是行号g,或者
    :行号然后等等等。

进阶

你也可以直接下载我的配置使用,其中的插件配置可以在一定程度上给出指导。

  1. 都是一步一步过来的但是我也忘记我是怎么走过来的。依然很水,不会的配置上网搜索然后copy到自己的vimrc中。走到进阶就差不多懂得.vimrc为何物——因为可能受不了自己vim中的字体,配色,以及目录——或者括号匹配等等问题。这个时候vimrc的作用就出来了。
    这个时候我推荐你使用我的配置,也是基于网络上十分流行的一个版本:
git clone http://github.com/Svtter/MyVimrc
./install

如果出现什么问题,参见README.md中的FAQ

这样就可以安装运行了。出现一个问题很正常,如果不在意就继续使用,在意的话自己百度。出现很多
问题可能是因为Vundle没有装好,使用
git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle

  1. 我是在.vimrc之后才发现的这种神奇的编辑的。分块编辑的确能够极大的提升效率。然后不停
    的阅读vimrc吧!然后从help中吸取精华吧!

  2. 下一步我要熟练使用记录模式和正则匹配,以及vimscript的写法等等。希望本文对于想要学习Vim的
    你有所帮助。

给小白的IPython Notebook指南

这是给“小白”的notebook指南。notebook是算法开发经常使用的工具。

安装notebook

$ pip install notebook

运行notebook

$ jupyter-notebook .

在终端下运行这个命令可以启动notebook

使用IPython-Notebook

点击右方的New按钮,选择Python3,以此来启动一个新的NoteBook。

这时会新创建一个文件。

In [ ]:后输入要运行的代码,然后点击Run即可运行。例如:

使用Terminal

Terminal就是之前在Windows下的cmd,MacOS下的terminal,点击之后见到这个界面:

尝试输入python,就可以像之前那样进行命令行编程了。