Monday, June 13, 2022

Annoucement: Site Migration

I've created a personal blog website. If you like the posts on this blog, you could checkout my new site: https://ryansblog.xyz/tag/lang-English


Monday, October 30, 2017

self-study lab - Python Tutorial Basic

Error and Issue of Pytorch Installation




After a couple of trial and error, here is the most promising way to install Pytorch in Ubuntu.

If you have already tried different ways to install Pytorch or you have  followed different posts to fix your problem, you need to first uninstall everything related to Pytorch.

To uninstall pytorch, here is what is suggested by soumith(https://github.com/pytorch/pytorch/issues/2036).

conda uninstall -y pytorch
pip uninstall torch
pip uninstall torch # yes run this twice


Now, reinstall pytorch. From the official website, we have different options. Here we recommand using conda. Go to the Pytorch website and choose your command. For example,

conda install pytorch torchvision -c soumith

Now, if you go to your IDE and try to import pytorch, you may get some error similiar to the error message below:

ImportError: /home/ruikun/anaconda/lib/python2.7/site-packages/torch/lib/libTHC.so.1: undefined symbol: THLongStorage_inferSizeN


To solve this problem, type:

conda uninstall libtorch



Summary

1. uninstall pytorch completely
2. reinstall pytorch via conda
3. conda uninstall libtorch

Saturday, June 10, 2017

强烈推荐 - 信息简史 (图灵新知) ([美]詹姆斯·格雷克)




信息简史 (图灵新知) ([美]詹姆斯·格雷克)

“如果你对他说,有一台机器能削土豆,他会宣称这不可能;而如果你当面用机器削给他看,他又会宣称这玩意儿没用,因为它不能切菠萝。”[54]他们变得不再能把握重点之所在,总是挑发明的缺陷和不足,却忽视了其可能的用途。 “我们要怎么做才能摆脱巴贝奇先生和他的计算机器?”当时的英国首相罗伯特·皮尔(Robert Peel)在 1842年 8月写信给他的一位顾问咨询道,“可以肯定,就算得以完成,它对于科学也毫无价值……在我看来,它只是个非常昂贵的玩具。”而他也很容易在公职人员中找到对巴贝奇的不利之辞。其中最致命的抨击恐怕来自皇家天文学家乔治·比德尔·艾里(George Biddell Airy),这位思想僵化只认死理的人毫不含糊地说出了皮尔首相最想听到的话:“对于机器的有用性,我觉得他很可能是在白日做梦。”[55]就这样,皮尔的政府中止了这个项目。然而,巴贝奇的梦想却并未终止,并且早已转变方向,上升到了一个全新的高度。另外,他也已经结识了爱达·拜伦。 在伦敦劳瑟拱廊市集北端的河岸街上,坐落着由美国发明家雅各布·珀金斯(Jacob Perkins)创办的国家应用科学展馆。这是一个“寓教于乐”的地方,结合了玩具店和技术展



“如果你对他说,有一台机器能削土豆,他会宣称这不可能;而如果你当面用机器削给他看,他又会宣称这玩意儿没用,因为它不能切菠萝。”[54]他们变得不再能把握重点之所在,总是挑发明的缺陷和不足,却忽视了其可能的用途。

差异(differences)一词想必在威尔金斯的读者(尽管为数不多)看来是个奇怪的措辞。但这是有意之举,并且富有深意。威尔金斯正试图接近信息最纯粹、最一般的形式,而文字只不过是其中的一个特例:“因为我们必须意识到,一般说来,任何能够创造出有效的差异,可为某种感官所感知的东西,都足以作为表达思想的手段。”[75]这可以是“音调不同的两个钟”,或是“任何可见物,如火焰、狼烟等”,又或是号角、大炮或皮鼓。任何的差异都是一种二元选择,而任何的二元选择都可以拿来表达思想。在这里,在这份1641年不为人知的匿名专著中,信息论的核心思想浮出了人类思维的表面,却像土拨鼠一样看见了自己的影子,于是又沉没下去,消失长达三百多年



但这是有意之举,并且富有深意。威尔金斯正试图接近信息最纯粹、最一般的形式,而文字只不过是其中的一个特例:“因为我们必须意识到,一般说来,任何能够创造出有效的差异,可为某种感官所感知的东西,都足以作为表达思想的手段。”[75]这可以是“音调不同的两个钟”,或是“任何可见物,如火焰、狼烟等”,又或是号角、大炮或皮鼓。任何的差异都是一种二元选择,而任何的二元选择都可以拿来表达思想。在这里,在这份1641年不为人知的匿名专著中,信息论的核心思想浮出了人类思维的表面,却像土拨鼠一样看见了自己的影子,于是又沉没下去,消失长达三百多年。


差异(differences)一词想必在威尔金斯的读者(尽管为数不多)看来是个奇怪的措辞。但这是有意之举,并且富有深意。威尔金斯正试图接近信息最纯粹、最一般的形式,而文字只不过是其中的一个特例
:“因为我们必须意识到,一般说来,任何能够创造出有效的差异,可为某种感官所感知的东西,都足以作为表达思想的手段。”[75]这可以是“音调不同的两个钟”,或是
“任何可见物,如火焰、狼烟等”,又或是号角、大炮或皮鼓。任何的差异都是一种二元选择,而任何的二元选择都可以拿来表达思想。在这里,在这份1641
年不为人知的匿名专著中,信息论的核心思想浮出了人类思维的表面,却像土拨鼠一样看见了自己的影子,于是又沉没下去,消失长达三百多年。

表面上看来,这样一个命题是个错误的循环论证。但事实并非如此,因为一开始它仅仅是断言了某个定义良好的公式……是不可被证实的。只是后来(由于巧合),这个公式恰好就是表示该命题的那个公式。



并以此为题在1956年写了一篇仅有四段话的短文,特意进行提醒:“许多不同领域的科学家同人,为其浩大声势及其开辟的科学分析新思路所吸引,正纷纷将这些思想应用到自己研究的问题上去……尽管对于我们这些从事这个领域研究的人来说,这一波流行热潮固然让人欣喜和兴奋,但同时它其中也带有危险的元素。”[65]香农提醒人们,信息论的核心是数学。

“我很纳闷,你这年轻人是否意识到自己在摆弄的是些什么东西。” 要是你启动了一部这样的机械计算机,却忘了在出去吃午餐时关掉它,那会发生什么事呢?我来告诉你。它在美国就会像野兔在澳大利亚一样。在你算出 701 945 240乘以 879 030 546等于多少之前,这个国家的每个家庭就都有了一台自己的小计算机…… 香农先生,我无意批评你的这些实验,但坦率地讲,我对哪怕是一台计算机都丝毫没有兴趣。更别提要是有一堆计算机挤到我周围,又是乘又是除,又做其他什么它们擅长的事,那我一定会相当生气。 [73]


换句话说,H度量的是出人意料的程度。再换句话说,H是通过只允许回答是或否的问题来猜出一条未知讯息时所需问问题的平均数目。

这些远古的复制子并没有灭绝,毕竟它们是生存艺术的大师。不过现在你不会找到它们在海洋中四处漂流,因为它们很早便已经放弃了这种随波逐流的自由。它们如今聚集在一块块巨大的殖民地当中,藏身于笨重的机器人内,与外部世界相隔离,只是通过复杂的间接途径与其沟通,并通过远程控制对其进行操控。它们就在你我体内。它们创造了我们,包括身体和心智,而我们存在的终极目的只是为保全它们。这些复制子不断在完善着自己。现在它们被称为基因,而我们不过是它们的生存机器。[32] 可以想见,这样的说法势必会激怒某些不认为自己不过是机器人的人。1977年,史蒂芬·杰伊·古尔德就写道:“最近英国生物学家理查德·道金斯的说法,称基因才是自然选择的基本单位,而个体不过是它们暂时容身的皮囊,这令我十分不快。”[33]古尔德的同道者甚众。冈特·斯滕特说出了许多分子生物学家想说的话,称这位“三十六岁的动物行为专业的学生”的说法当中暗含着“万物有灵的这种古老的、前科学的传统”。[34] 尽管如此,道金斯这本精彩的著作还是引发了重大的转变,确立了一种对于基因的全新的、多层次的理解。乍看上去,自私的基因的思想不过是变换了视角,或像是开玩笑。塞缪尔·巴特勒在一百年前就说过(并且他并未宣称自己是第一个说这话的人),母鸡不过是



塞缪尔·巴特勒在一百年前就说过(并且他并未宣称自己是第一个说这话的人),母鸡不过是一只蛋用来制造另一只蛋的工具。

每种生物都有权以自己的方式“完成”自己的发育。蛋的做法可能看起来是绕了大弯,但那正是它自己的方式,我们人类没有多少理由对此说三道四。凭什么认为鸡比蛋更鲜活?又凭什么说是鸡生蛋而不是蛋生鸡?这些无法用哲学解释的问题,或许从另一个角度就可以解答,那就是考虑到人类的自负及其长久以来的、忽略一切不像自己的事物的习惯。

正如爱德华·奥斯本·威尔森在一百年后所说的,“人类中心主义是人类智识的一大残疾”。


但道金斯并没有动摇。他指出,基因说到底是关于差异。因此,他首先提出了一个与之密切相关的问题:是否存在对应阅读障碍症的基因呢? 为了确认存在对应阅读的基因,我们所要做的只是发现对应不会阅读的基因,比如某个会造成大脑损伤、进而导致阅读障碍症的基因。这种阅读障碍症患者可能在一切方面都正常且聪颖,但就是不会阅读。如果这种阅读障碍症被证明会稳定遗传,大概遗传学家也不会感到特别惊讶。显然,在这个例子中,该基因只会在有着正规教育的环境中才会展现其效应。在史前环境中,该基因的效应可能就看不出来,或者会产生不同的效应,比如在原始人的遗传学家看来,该基因的效应就是无法辨别动物足迹…… 那么遵照遗传学术语的常规,同一基因座上的野生型基因(这个群体中其余个体都携有两份剂量的该基因),就可以恰当地被称为对应阅读的基因了。如果你反对这种说法,那么你也势必要反对我们在谈论孟德尔的豌豆时所用的诸如对应高茎的基因等说法,毕竟在这两种情况中,使用术语的逻辑是一样的。我们感兴趣的都是差异,并且差异也都只在某些特定环境下才会体现。至于为什么简单如一个基因的差异竟能导致如此复杂的效应,比如一个人是否能阅读,或鞋带系得好坏,理由大致如下:无论这个世界某个给定状态有多么复杂,该状态与另一种可替代状态之间的差异则可能是由某些极其简单的东西所导致的。[46]


思想保留了生物体的某些属性。与生物体一样,思想也倾向于维持其结构并繁衍生息;它们也可以融合、重组或分离其内容;事实上,它们还可以进化,而在这个过程中,选择淘汰必定扮演着重要角色。[3] 莫诺注意到,思想有“传



所有生命通过可自我复制的实体的生存差别[有的复制子存活,有的死亡]实现进化”。哪里有生命,哪里就一定有复制子。或许在其他世界里,复制子也能从硅基化学物质中产生——又或者完全与化学物质无关。 完全与化学物质无关的复制子,这是什么意思?“我认为,一种新的复制子最近已经在这个星球出现,”道金斯在他1976年的处女作结尾这样宣称,“它已经显露无遗。它虽然仍处于婴儿期,还在其原生汤里漂游,但它进化的速度已让古老的基因望尘莫及。”[5]这“汤”就是人类文化,传递载体就是语言,而产卵场就是大脑。

对此,惠勒至少还有所表述:“概率,正如时间一样,都是人类创造的概念,所以人类也必须对与之相关的晦涩之处负责。”[6]

相较于用物理方法生成随机数,冯·诺伊曼承认:“当然,任何考虑用算术方法来生成随机数的人都犯下了僭越之罪。因为,正如已经被多次指出的,不存在一个随机数这样的东西——有的只是生成随机数的方法,而一种严格的算术方法显然不属于其中之一。”[12]


我们呼吸的空气是怎样一番奇妙的混沌啊!……空气本身就是一座宏伟的图书馆,其中的书页上写满了世间男男女女的高声低语。在那里,变化多端但准确无误的字符记录下了从古至今逝者的叹息、未实现的誓言以及未履行的承诺。这些声音通过每个粒子的统一运动变得不朽,成为人类意志之善变的见证。[5]

(艾略特就接着写道:“我们在生存中失落的生活在哪里?/我们在知识中失落的智慧在哪里?/我们在信息中失落的知识又在哪里?”)

。诸如这样的警示,其中不免含有几分怀旧的气息,但无疑也包含了一个无可否认的真理:在追求知识的过程中,慢反而好。徜徉在弥漫着旧书气味的图书馆内,在堆满了典籍的书架之间探索,自有其回报。阅读(哪怕只是浏览)一本旧书所能获得的养分是从一次数据库搜索中无从得到的。耐心是美德,饕餮是罪过,无疑也适用于此。

许多研究者发现,信息过量不仅会导致困惑和挫败感,还会导致视野受限和不诚实行为。

Sunday, June 4, 2017

Vim - C/C++ style indent

When edit C/C++ file with vim, sometime we have the problem that the close brace "}" cannot be indent correctly.

One solution is to use "=" utility in vim. In the normal mode, we can type gg=G. This will correct the indent issues in the current file. One of the inconvenience of this method is that you need to exit the insert mode and the edit process is interrupted.

Here is another solution. We still leverage the "=" utility in vim. In addition to that, we also need the command gi. it will send the cursor to the position where you were in the insert mode last time.

The full command is something looks like this:

    inoremap } <esc>a } ^]<s-v>=gi^]f}a

The goal is to map } in the insert mode and correct the possible indent issue and then back to the insert mode.

Initially, we are in the insert mode, <esc> let us exit the insert mode. (a }^] is to add an empty space before "}". It is not necessary for the purpose of correcting the indent issue.) <s-v> let us enter the visual mode, = will correct the indent issue of the current line. gi^] send us back to the position where the last edit occurs. f}a find the "}" and put the cursor after "}" and enter the insert mode.


Tuesday, May 30, 2017

Install OpenCV2

Step 1: Install OpenCV software

Follow the following steps mentioned in
https://gist.github.com/dynamicguy/3d1fce8dae65e765f7c4

Here we copy the commands:

# install dependencies
sudo apt-get update
sudo apt-get install -y build-essential
sudo apt-get install -y cmake
sudo apt-get install -y libgtk2.0-dev
sudo apt-get install -y pkg-config
sudo apt-get install -y python-numpy python-dev
sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install -y libjpeg-dev libpng-dev libtiff-dev libjasper-dev

sudo apt-get -qq install libopencv-dev build-essential checkinstall cmake pkg-config yasm libjpeg-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev python-dev python-numpy libtbb-dev libqt4-dev libgtk2.0-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils

# download opencv-2.4.11
wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.11/opencv-2.4.11.zip
unzip opencv-2.4.11.zip
cd opencv-2.4.11
mkdir release
cd release

# compile and install
cmake -G "Unix Makefiles" -D CMAKE_CXX_COMPILER=/usr/bin/g++ CMAKE_C_COMPILER=/usr/bin/gcc -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D BUILD_FAT_JAVA_LIB=ON -D INSTALL_TO_MANGLED_PATHS=ON -D INSTALL_CREATE_DISTRIB=ON -D INSTALL_TESTS=ON -D ENABLE_FAST_MATH=ON -D WITH_IMAGEIO=ON -D BUILD_SHARED_LIBS=OFF -D WITH_GSTREAMER=ON ..
make all -j4 # 4 cores
sudo make install


We may get some errors when trying to install some of the libraries in command line. Since if highly depends on the system, we cannot give a general solution here. At the same time, many people have experiences the same problems and it is easy to find the solution through Google.

Step 2: Add Include path and Libraries.

If everything works, now we should have opencv2 installed. The next step is to configure our IDE. In my case, I use the eclipse. The instruction can be found here:
http://docs.opencv.org/2.4/doc/tutorials/introduction/linux_eclipse/linux_eclipse.html



Step 3: Test OpenCV

In this step, we use the first code example in the book Learning OpenCV (https://www.amazon.com/Learning-OpenCV-Computer-Vision-Library/dp/0596516134).

#include "highgui/highgui_c.h" // In the book, we have     
                               // #include "highgui.h"
                               // which is used in the old
                               // version of OpenCV


int main()
{
    IplImage* img = cvLoadImage(  "path-of-an-image-file"  );
    cvNamedWindow(  "Example1", CV_WINDOW_AUTOSIZE  );
    cvShowImage(  "Example1", img  );
    cvWaitKey( 0 );
    cvReleaseImage(  &img  );
    cvDestroyWindow(  "Example1"  );
 }


If we can see a new window of image pop up, we are all good.

Sunday, May 28, 2017

Raspeberry Pi - Connect to Wifi and send ip information to email



There is problem with the current setting of my Raspeberry Pi. Every time when it is started, I need to log into my account and connect to wifi. In order to use ssh on my desktop, I also need the ip information of the Raspberry Pi.

To automate this part, we need to write some autostart program. Essentially, we want to write scripts that can be executed upon the start.

In ArchLinux, it can be doen through systemctl. The documentation can be found here:
https://wiki.archlinux.org/index.php/systemd

It takes a while to read through all the sections. Some Useful examples can be found here:
https://www.freedesktop.org/software/systemd/man/systemd.service.html

Here is what we need to do:

Step 1: Create the script that need to be executed upon the start.

In our case, we want to have something like

#!/bin/sh
ip link set wlan0 down
netctl start home_wifi
ifconfig | mail -v -s "IP information" user@gmail.com


After editing the script, make it executable: chmod + x your-script

Step 2: Create a new service

Go to the /etc/systemd/system folder and create a new file
my-autostart.service

[Unit]
Description=Send ip information through email

[Service]
ExecStart=/path/your-script

[Install]
WantedBy=multi-user.target


Save the edit and enable the service by
systemctl enable my-autostart.service

Caveate
Though it can work, the configuration of the service may not be completely correct. It is better to have more fine control on it.