Saturday, 1 June 2013

美国面cs职位的那些事

1. 如果你要问我最简单最轻松的拿到offer的方法是什么?我会告诉你,在summer的时候找到一份大公司的internship,之后你会拿到returning offer,剩下要做的就是潇洒的high完剩下的学期。据我所知道,Amazon和facebook好像不大发returning offer。

2. internship的面试会比fulltime的难度要低,当然有些大公司的难度是持平的,一方面你有可能不费多少力气拿到一个offer,另一方面你也比别人更早的进入找工作的模式,只有好处。我的观点就是,只要你想找工作,你都是需要苦逼一段时间的,早苦逼早超生。

3. 如果你没拿到offer或者不满意你实习的公司,那么你需要接着面fulltime。我可以负责任的告诉你,你大部分拿到面试的position都是和你暑假实习相关的,老外貌似不care你在大天朝做过些什么。我自己因为实习做的大部分是frontend的东西,结果一大堆公司让我面frontend,我只想说*,最后拿到onsite当中有三家都是前端。我室友summer做了mobile的开发,结果很多职位都是这方面的。

当然,没有找到summer intern不代表你比别人落后多少,只要你有实力和机遇,拿到offer是迟早的事。

 

投简历,可能很多帖子都没有提到的一件事,个人认为非常的重要。

 如果你投十份简历,可能拿到2次面试机会。但是你投100份呢?每一家公司你投5个职位而不是一个职位?每一家公司你投5次而不是一次呢?是的,这样你拿到面试的机会就会大大增加。还有记住,校招也是投简历的黄金时刻,潜在的机会往往比你看到的还要多。Tip:如果你被某家公司拒了,换个first name,邮箱和号码,接着投!

同时,要提到的就是,如果你有学长和学姐帮你做内推,拿到面试机会就更大了,他们也会给你很多建设性意见。没有学长学姐?那就勾搭出来吧。想说的就是network巨笔重要!人脉这玩意在美帝照样畅通无阻,本人不擅长这方面,但是什么校内啊,facebook,平日的聚会啊都是你获取资源的途径。还有linkedin和indeed,都会有很多recruiter还有很多校友,没准哪一个就是你的伯乐!!

 

最后就是刷题了。

 当然你若是好学生,题海战术型选手,么有意见,好好刷就是了,量变肯定会带来质变的。如果你不是,懒人一个,基本不去library,和我一样,平日不到due不到考试是不会看书的,剩下的玩玩dota打打球什么的(虽然现在残了),照样是有路可走的。

原则上就是效率,用最少的时间解决最多的事情。分门别类逐一击破,放弃过于简单的和过于难的,首先攻克自己擅长的和面试中出现概率大的类别,再普及到自己的弱项以及方方面面。每个类别,经典的题目也不过就那么多,大多数都有共同的数据结构和算法,每做一题希望有举一反三的效果,先看懂代码和题意,再尝试自己写。你面哪家公司,就多看哪家公司的面经和他们家要面的范围之类的题,绝不做无用功。对于cc150,每个人一开始都刷的书,我其实是只看了几中的几个章节,对于dp和math还有一些其他章节,根本么看。与其花一两个小时搞那些自己不一定能懂的东西,还不如多花时间在自己有可能提高或者补全的方面。还有,我为了节省看书时间,主动去思考一道题的时间很少,一旦想一会没有什么好的方法,我都回去看现成的代码,甚至一个答案看不懂,再看别的版本,直到自己能写出自己认为最简洁的版本。对于那些答案就长篇大论,代码量100行以上的,我很多都自动忽略了。因为在面试中,一道题的代码量也不过30来行。我水平其实很菜,平日写个代码多是copy+paste,连个api的方法名都不记得的,对于和我水平一样的同学,需要先多练一些各个分类的基础题,这个阶段是让你能写出代码,能在之后的白板当中不会写出低级的code。

一些总结:

1. time and space complexity: 不用怀疑,必问,好好理解透彻。

2. String/Array/List/Hashtable/Tree/Heap: 熟练度和难度逐级递增,同时,minheap和maxheap被问到很多次。

3. searching和sorting:最常见的算法问题,要非常熟练。

4. recursion和dynamic programming:前者必问,需熟练,后着有时间有能力就看吧,很多公司不一定问。

5. 对于编程语言和cs的basic consept:非常重要!我知道很多cs同学和我一样学过的东西也不一定能记得多少,那就好好补一下吧,不然可能第一轮电面就跪掉,切身体验!

6. Leetcode:我用的比较多的网站,上面有很多不错的题目,以及online judge,你可以选择java或者c++在上面直接写,它有已经生成好的test case,非常方便。类似的网站应该很多,找一个适合自己的就可以。还有一些网站,例如interviewstreet,会组织定期的coding比赛,想自虐的可以参加,成绩好了可以写在简历上。

7. 面经:Glassdoor和Mitbbs

8. 无论国内国外,很多人都有自己的技术博客,个人感觉非常有帮助,都是过来人的解题思路和经验。有事没事,去注册个github或者stackflow,很多面试官会在意这些。

9. 对于你的resume和做过的项目一定要滚瓜烂熟!!因为你会一次又一次的重复这些内容在每一次的面试中。

Wednesday, 22 May 2013

Friday, 10 May 2013

flashplayer sound in linux bug fix

 

I think nobody should use this solution. It does not fix anything, only hides the bug. Also, it is hard to use, you need to “fix” running environment for every application that uses libflashplayer.so.

Much better solution is to fix relocation entries in libflashplayer.so. Downloadhttps://bugzilla.redhat.com/attachment.cgi?id=487982 , save it as “memcpy2memmove.cpp”, then compile it by running “g++ memcpy2memmove.cpp -o memcpy2memmove”, then run it like this “sudo ./memcpy2memmove /path/to/libflashplayer.so”. That’s it. This is correct, permanent fix if this bug (actually, fixing source code and recompiling is correct fix, but for closed source we have to fix the binary).

To me it looks like Adobe does not care at all. They so lazy that even after so many month (!) they “can’t” spend a minute of one person’s time to replace “memcpy” with “memmove” in their source code and do a proper release (actually, they shouldn’t be using memcpy in the first place).

Source: https://bugzilla.redhat.com/show_bug.cgi?id=638477#c244

sudo ./memcpy2memmove /opt/google/chrome/PepperFlash/libpepflashplayer.so????

Tuesday, 9 April 2013

Bonds

http://www.mitbbs.com/club_bbsdoc/Bond.html

http://www.mitbbs.com/clubarticle_t/Bond/31335339.html
http://www.mitbbs.com/clubarticle_t/Bond/31335343.html
Or look for kicker bond with higher yield to call in this low yield market
http://www.mitbbs.com/clubarticle_t/Bond/31335637.html

I do not have any muni bond fund/ETF because the interest risk is too high.
For bond fund in 401k, I recommend LSBDX or LSFIX or MXLMX, Loomis sayles 
bond fund or fixed income fund. They are multi sector bond funds which go up
with equity like stock or junk bond but down side risk is much smaller. 
Both have very good return in any 1,3,5,10 year period. 

By carefully choosing individual bonds with higher yield and shorter term, 
the interest risks are much smaller than bond fund or ETF. Kicker bond 
without call protection but yield to call is higher than normal bond, no 
risk if the ask price plus transaction fee is lower than call price, usually
$100. For example, 092840GQ4, 5% federal tax free interest, maturity date 7
/1/2018, bought at 99.92$. My tax free muni bonds have 4-6% yield (6-9% 
taxable equivalent yield) with average term less than 12 years, no bond fund
or ETF can beat that. My taxable bonds have 5-8% yield with term less than 
7 years, and for munis, most of them are insured by AGM or MBIA. For 
corporate bonds, I like falling angels best. Buy them for better liquidity 
than muni bonds and sell them when crisis is over, such as ILFC, AIG, BOA in
2009-2010, Jeffries in 2011, GNW, MS in 2012 and BBY, Dell this year. For 
bond funds, only multi sector or emerging market is useful like Daniel Fuss 
bet Ireland bond last year. Other than that, I think most of us can DIY 
individual bonds with higher yield (not junk bonds, but lower investment 
grade, especially muni bonds with insurance) than normal bond fund or ETF, 
so that the interest risk is much smaller than bond fund or ETF which 
usually put too much weight on treasury bonds, agency bonds, high rating 
investment grade bonds that are most sensitive to Fed rate, and yields are 
too low to offset the risk even you hold them.

For Roth IRA or IRA, mREIT like Agnc, BDC like Psec are good choice, 
currently study MLP like NTI and ALDW in taxable account.

Tuesday, 2 April 2013

Funtain Raptor LT codes

The Raptor code [4] (Fig. 3) is an error correc-tion code mainly used in environments with
packet losses.

Thursday, 14 March 2013

CS job advice

计算机()专业在美国最好找工作,Warald在《[美国就业Warald指数]数据分析各专业在美国找工作难易程度和工资水平》中已经指出。现在想找计算机软件工作的人很多,各个专业学生都有想转CS的。关于该如何动手、该学习哪些知识,网上有各种推荐、众说芸芸。

周星驰版的《鹿鼎记》里,陈近南指着高高的绝世武功书架,对不会武功的小宝说:我是看了三年,练了三十年,才有今天的境界。Warald不会像陈师傅那样,不会对着薄弱甚至零基础的你,潇洒指一下算法导论、career cup、leetCode,然后做高人状飘然而去,留下你硬啃天书~

Warald希望提供一个可行也相对容易实现的学习计划,希望你能从入门学起、循序渐进。Warald综合各种信息,针对如何在美国IT公司找工作,给出了下面这个书籍和课程名单。所有推荐的东西,在网上都有能搜索到、都有免费下载。

如果你基础很好,读算法导论易如反掌、应付各种面试题目不在话下,那你当然应该跳过这个文章,早点去搞定工作。Warald敬请您在找到工作之后,来一亩三分地找工求职版分享一下经验、提供一下公司内推,帮帮其他人。

Warald提供留学申请服务,每年都有客户转专业甚至零基础读CS类专业,我也提供后期就业辅导。这个帖子的部分内容,也来自于我跟客户之间的一些讨论。

先说两个网站,一个是udacity.com,一个是coursera.org,都提供免费的在线公开课程,很多功课全球几十万人一起学习。

《第一阶段》筑基

如果你不知道什么是for/while lopp、不知道什么是list,建议你先上这门公开课:
UDacity CS101:Introduction to Computer Science/Building a Search Engine
https://www.udacity.com/course/cs101

学完了以后,好歹对基本的programming control flow, very basic data structure熟悉一下。

绝大多数的理工科学生,本科期间是上了C语言的;如果你是美本,很可能上过其他编程语言,这就算消除了零基础了。

《第二阶段》入门

你必须先学Java和SQL,Warald推荐的书籍如下:
1)Head First Java
目前市面上要求Object oriented programming尤其是Java的工作是最多的。这本书最大的优点就是容易读懂,无论是内容讲解还是大量图片设计,都非常容易理解。

2)A First Course in Database Systems,作者是Jeffrey D. Ullman, Jennifer Widom
用SQL查询数据库是基本技能。基本上你会英语就能读懂这本书、学会SQL。

Warald非常推荐转专业学CS的同学从这本书入手来培养兴趣,计算机/管理信息系统甚至Business/Marketing等行业,有些人的日常工作就是用SQL处理数据。

coursera之前有过Daphne Koller的database公开课,貌似下面要换成Jennifer Widom来教(https://class.coursera.org/db/class/index),上这门课程也可以。

读完这两本书,下面你要继续学Java和数据结构:
3)Data Structures and Algorithms in Java
Warald推荐Berkeley CS61b:http://www.cs.berkeley.edu/~jrs/61b/。这门课程是给大一新生上的,并不高深,里面推荐了head first java,也推荐了Data Structures and Algorithms in Java。据joyce在一亩三分地里说,这个老师是berkeley计算机系本科教课最清楚的老师之一,所有的lecture video都在youtube上,notes都可以自由下载。作业和projects也都在网上,可以自己练习。

另一个选择是coursera的algorithm课程,Princeton大学Robert Sedgewick教授开的,算法跟数据结构都有了,作业不错,也是用Java,以前开课时一亩三分地里有人组织一起上课:http://www.1point3acres.com/bbs/thread-37519-1-1.html。最近正好在开Round II。

公开课最大的好处是可以得到及时的feedback,而berkeley的CS61b这类传统的video下载观看模式,你只能闷头做题,作对作错都不知道。

如果你们学校有类似课程,你可以去选课或者旁听,但是一定要做作业、练习编程!否则这门课就算是白上了!

熬到这里为止,你已经具备最基本的能力了!如果这些你早就会了,恭喜!你的书没白念!

下面Warald建议你更深入的学习Java:
4)Thinking in Java
这本书很经典,但是不适合作为入门书籍。学完了前面两本java书,你可以翻着看看这本,会有帮助。

然后是一个重头戏:
5)Programming Interview Exposed
这本书籍不是“课本”,不是“课程”,而是教你做各种常见面试题目的。

很多人来问Warald:我是小白,请问该如何准备面试求职?这本书就是我的回答。熟练掌握这本书籍的内容,是你找到工作的基础。

完成了上面这五步,你就已经具备了在美国找工作的基本条件了;尽管没人敢保证你一定能找到工作,但是即使只会这些,你已经“有可能”找到工作,尤其是不瞄准google、facebook等热门公司,或者找对软件开发技能要求不高的工作。

各位同学,计算机/CS和其他专业一个很大的不同,就是容易上手、容易自学成才!你不需要焊电路板、做化学实验(这些都需要设备和钱),下载电子书和免费软件,spend your time,use your talent,就可以了! 你离在美国找到工作的距离,可能只有这五本书的厚度。

《第三阶段》进级

要全面扎实的掌握计算机学科知识,要想在找工作的时候稳拿offer、获得更多更佳的就业选择,当然不可能只学前面的五本书。基础教育可以有稳定可循的套路,而往高处进级就复杂了,有些人也未必能训练出来,否则岂不是人人都去google、linkedin、微软工作了?

从找工作的角度来看,下面是你应该做的:
6)刷career cup和leetcode题目
一亩三分地论坛有个编程算法面试题专版(http://www.1point3acres.com/bbs/forum-84-1.html),近期有人组织大家一起刷题讨论:http://www.1point3acres.com/bbs/thread-48094-1-1.html

同时,Warald建议你继续在udacity和coursera上课比如machine learning、artificial intelligence,学了都会很有帮助。如果你在本校选计算机课程没选上,那更是应该利用这种免费的机会,听斯坦福等牛校牛人讲课。

对于在美国读书的同学来说,进入这个进级阶段,往往也是你在美国读书的中晚期了,你已经上了网路、操作系统、软件工程等课程,简历逐渐充实了,甚至对于将来做哪个行业或者方向(data management/mobile/web front-end/etc)也大体有眉目了,然后就是根据自己的兴趣,补充相关专业知识了。

最后,Warald提醒:
1)如果你要在美国找工作,看书就看英文的。
2)如果要来讨论A语言比B语言好啊,C书籍比D书籍好啊,D功课讲的太浅啊,请去一亩三分地EECS专版或者编程算法面试题版块里找共鸣。Again,Warald提供这个名单的目的,是从在美国找工作的角度,循序渐进、从入门讲起,而且我也只讲较为主流的Java路线。
3)无论别人提供的书籍和课程名单有多好,最终还是要靠你坚持不懈学下来。
4)我不打算劝所有人转cs;要不要转,你自己拿主意。这个帖子的读者应该是已经决定要转cs的,我这里提供how。

Wednesday, 6 March 2013

Sublime Text2破解

目前最新版本的Sublime Text2破解方法:将sublime_text.exe复制一份改名为sublime_text_cracked.exe,用sublime text2打开这个sublime_text_cracked文件(新版sublime text貌似无法二进制写入,导致保存后无法识别为有效win32应用程序)用支持二进制写入的编辑器来改,搜索3342,改为3242保存(这里我搜出来只有一个3342,但是好多网友貌似会搜到多个,根据成功的网友反馈,遇到多个的情况可以把3032前面的那个3342改成3242),打开sublime_text_cracked文件,在help菜单里enter license,把下面注册码贴进去,包括begin和end那两行,完。

测试环境:sublime text2 32bit在win7 ultimate 64bit sp1,xp professional 32bit sp2,windows server 2003 32bit,BackTrack 5。

linux和mac下的sublime text破解过程与windows下的同理。

—–BEGIN LICENSE—–
hiwanz
Unlimited User License
EA7E-26838
5B320641E6E11F5C6E16553C438A6839
72BA70FE439203367920D70E7DEB0E92
436D756177BBE49EFC9FBBB3420DB9D3
6AA8307E845B6AB8AF99D81734EEA961
02402C853F1FFF9854D94799D1317F37
1DAB52730F6CADDE701BF3BE03C34EF2
85E053D2B5E16502F4B009DE413591DE
0840D6E2CBF0A3049E2FAD940A53FF67
—–END LICENSE—–

Friday, 22 February 2013

samba mount

sudo mount -t cifs //192.168.0.7/H/ /home/seanchu/H/ -o username=Sean

Thursday, 21 February 2013

Wednesday, 20 February 2013

Install tmux on server

ssh username@server.com
mkdir local
mkdir tmp
mv tmux-1.4.tar.gz tmp
mv ncurses-5.7.tar.gz tmp
mv libevent-2.0.10-stable.tar.gz tmp
cd tmp
tar xvfz tmux-1.4.tar.gz
tar xvfz ncurses-5.7.tar.gz
tar xvfz libevent-2.0.10-stable.tar.gz
cd libevent-2.0.10-stable
./configure --prefix=$HOME/local
make
make install
cd ../ncureses-5.7
./configure --prefix=$HOME/local
make
make install
cd ../tmux-1.4
./configure
CPPFLAGS="-I$HOME/local/include -I$HOME/local/include/ncurses" LDFLAGS="-static -L$HOME/local/include -L$HOME/local/include/ncurses -L$HOME/local/lib" make

/***make install DOESN'T WORK, SO DON'T EVEN TRY, also -static makes it so we don't need to dynamically link shared files in $HOME/local/lib meaning exporting a LD shell variable. We can just copy it and run it. Note: that whole long line above is a single command, run it all together!***/

cp tmux ~/local/bin
export PATH=$HOME/local/bin:$PATH

/***At this point, you should be able to just type tmux on the command line and have it work. Otherwise, the binary was installed to $HOME/local/bin, and you can run it by changing directories to there.***/

 sometimes ./configure --prefix= will do the trick

Monday, 18 February 2013

kill process in Linux

linux下查找进程及终止进程操作的相关命令

使用linux操作系统,难免遇到一些软件“卡壳”的问题,这时就需要使用linux下强大的kill命令来结束相关进程。这在linux系统下是极其容易的事情,你只需要kill xxx即可,这里xxx代表与此软件运行相关的进程PID号。

首先,我们需要使用linux下另外一个命令ps查找与进程相关的PID号:ps aux | grep program_filter_word

1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。

2)ps -A 显示所有程序。

3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。

4)ps -e 此参数的效果和指定"A"参数相同。

5)ps e 列出程序时,显示每个程序所使用的环境变量。

6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。

7)ps -H 显示树状结构,表示程序间的相互关系。

8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。

9)ps s 采用程序信号的格式显示程序状况。

10)ps S 列出程序时,包括已中断的子程序资料。

11)ps -t<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。

12)ps u 以用户为主的格式来显示程序状况。

13)ps x 显示所有程序,不以终端机来区分。

最常用的方法是ps aux,然后再通过管道使用grep命令过滤查找特定的进程,然后再对特定的进程进行操作。

其次,使用kill命令结束进程:kill xxx

1)作用
kill命令用来中止一个进程。

2)格式
kill [ -s signal | -p ] [ -a ] pid ...
kill -l [ signal ]

3)参数
-s:指定发送的信号。
-p:模拟发送信号。
-l:指定信号的名称列表。
pid:要中止进程的ID号。
Signal:表示信号。

4)说明
进程是Linux系统中一个非常重要的概念。Linux是一个多任务的操作系统,系统上经常同时运行着多个进程。我们不关心这些进程究竟是如何分配的,或者是内核如何管理分配时间片的,所关心的是如何去控制这些进程,让它们能够很好地为用户服务。

Linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性。交互进程是由一个Shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。批处理进程和终端没有联系,是一个进程序列。监控进程(也称系统守护进程)是Linux系统启动时启动的进程,并在后台运行。例如,httpd是著名的Apache服务器的监控进程。

kill命令的工作原理是,向Linux系统的内核发送一个系统操作信号和某个程序的进程标识号,然后系统内核就可以对进程标识号指定的进程进行操作。比如在top命令中,我们看到系统运行许多进程,有时就需要使用kill中止某些进程来提高系统资源。在讲解安装和登陆命令时,曾提到系统多个虚拟控制台的作用是当一个程序出错造成系统死锁时,可以切换到其它虚拟控制台工作关闭这个程序。此时使用的命令就是kill,因为kill是大多数Shell内部命令可以直接调用的。

5)应用实例
(1)强行中止(经常使用杀掉)一个进程标识号为324的进程:
#kill -9 324

(2)解除Linux系统的死锁
在 Linux中有时会发生这样一种情况:一个程序崩溃,并且处于死锁的状态。此时一般不用重新启动计算机,只需要中止(或者说是关闭)这个有问题的程序即可。当kill处于X-Window界面时,主要的程序(除了崩溃的程序之外)一般都已经正常启动了。此时打开一个终端,在那里中止有问题的程序。比如,如果Mozilla浏览器程序出现了锁死的情况,可以使用kill命令来中止所有包含有Mozolla浏览器的程序。首先用ps命令查找该程序的 PID,然后使用kill命令停止这个程序:
#kill -SIGKILL XXX
其中,XXX是包含有Mozolla浏览器的程序的进程标识号。

(3)使用命令回收内存
我们知道内存对于系统是非常重要的,回收内存可以提高系统资源。kill命令可以及时地中止一些“越轨”的程序或很长时间没有相应的程序。例如,使用top命令发现一个无用 (Zombie) 的进程,此时可以使用下面命令:
#kill -9 XXX
其中,XXX是无用的进程标识号。

然后使用下面命令:
#free
此时会发现可用内存容量增加了。

(4)killall命令
Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,例如:
# killall -HUP inetd

kill process in Linux

linux下查找进程及终止进程操作的相关命令

使用linux操作系统,难免遇到一些软件“卡壳”的问题,这时就需要使用linux下强大的kill命令来结束相关进程。这在linux系统下是极其容易的事情,你只需要kill xxx即可,这里xxx代表与此软件运行相关的进程PID号。

首先,我们需要使用linux下另外一个命令ps查找与进程相关的PID号:ps aux | grep program_filter_word

1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。

2)ps -A 显示所有程序。

3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。

4)ps -e 此参数的效果和指定"A"参数相同。

5)ps e 列出程序时,显示每个程序所使用的环境变量。

6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。

7)ps -H 显示树状结构,表示程序间的相互关系。

8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。

9)ps s 采用程序信号的格式显示程序状况。

10)ps S 列出程序时,包括已中断的子程序资料。

11)ps -t<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。

12)ps u 以用户为主的格式来显示程序状况。

13)ps x 显示所有程序,不以终端机来区分。

最常用的方法是ps aux,然后再通过管道使用grep命令过滤查找特定的进程,然后再对特定的进程进行操作。

其次,使用kill命令结束进程:kill xxx

1)作用
kill命令用来中止一个进程。

2)格式
kill [ -s signal | -p ] [ -a ] pid ...
kill -l [ signal ]

3)参数
-s:指定发送的信号。
-p:模拟发送信号。
-l:指定信号的名称列表。
pid:要中止进程的ID号。
Signal:表示信号。

4)说明
进程是Linux系统中一个非常重要的概念。Linux是一个多任务的操作系统,系统上经常同时运行着多个进程。我们不关心这些进程究竟是如何分配的,或者是内核如何管理分配时间片的,所关心的是如何去控制这些进程,让它们能够很好地为用户服务。

Linux操作系统包括三种不同类型的进程,每种进程都有自己的特点和属性。交互进程是由一个Shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。批处理进程和终端没有联系,是一个进程序列。监控进程(也称系统守护进程)是Linux系统启动时启动的进程,并在后台运行。例如,httpd是著名的Apache服务器的监控进程。

kill命令的工作原理是,向Linux系统的内核发送一个系统操作信号和某个程序的进程标识号,然后系统内核就可以对进程标识号指定的进程进行操作。比如在top命令中,我们看到系统运行许多进程,有时就需要使用kill中止某些进程来提高系统资源。在讲解安装和登陆命令时,曾提到系统多个虚拟控制台的作用是当一个程序出错造成系统死锁时,可以切换到其它虚拟控制台工作关闭这个程序。此时使用的命令就是kill,因为kill是大多数Shell内部命令可以直接调用的。

5)应用实例
(1)强行中止(经常使用杀掉)一个进程标识号为324的进程:
#kill -9 324

(2)解除Linux系统的死锁
在 Linux中有时会发生这样一种情况:一个程序崩溃,并且处于死锁的状态。此时一般不用重新启动计算机,只需要中止(或者说是关闭)这个有问题的程序即可。当kill处于X-Window界面时,主要的程序(除了崩溃的程序之外)一般都已经正常启动了。此时打开一个终端,在那里中止有问题的程序。比如,如果Mozilla浏览器程序出现了锁死的情况,可以使用kill命令来中止所有包含有Mozolla浏览器的程序。首先用ps命令查找该程序的 PID,然后使用kill命令停止这个程序:
#kill -SIGKILL XXX
其中,XXX是包含有Mozolla浏览器的程序的进程标识号。

(3)使用命令回收内存
我们知道内存对于系统是非常重要的,回收内存可以提高系统资源。kill命令可以及时地中止一些“越轨”的程序或很长时间没有相应的程序。例如,使用top命令发现一个无用 (Zombie) 的进程,此时可以使用下面命令:
#kill -9 XXX
其中,XXX是无用的进程标识号。

然后使用下面命令:
#free
此时会发现可用内存容量增加了。

(4)killall命令
Linux下还提供了一个killall命令,可以直接使用进程的名字而不是进程标识号,例如:
# killall -HUP inetd

Wednesday, 13 February 2013

tmux run

tmux new-window

tmux attach || tmux new

transmission remotely add torrent

NAME

     transmission-remote - a remote control utility for transmission-daemon(1)
and transmission(1)

SYNOPSIS

     transmission-remote [host:port | host | port] [-a torrent-files] [-b]
[-d number | -D] [-er | -ep | -et] [-f] [-g files]
[-G files] [-h] [-i] [-l] [-m | -M] [-n user:pass]
[-p port] [-ph files] [-pl files] [-pn files] [-r]
[-s | -S] [-t all | id | hash] [-u number | -U] [-v]
[-w download-dir] [-x | -X]

DESCRIPTION

     transmission-remote is a remote control utility for transmission(1) and
transmission-daemon(1).

By default, transmission-remote connects to the transmission session at
localhost:9091. Other sessions can be controlled by specifying a
different host and/or port.

OPTIONS

     -a --add torrent-file(s)
Add torrent-file(s) into transmission.

-b --debug
Enable debugging mode.

-d --downlimit limit
Limit the download speed to limit kilobytes per second.

-D --no-downlimit
Remove the download limit.

-er --encryption-required
Encrypt all peer connections.

-ep --encryption-preferred
Prefer encrypted peer connections.

-et --encryption-tolerated
Prefer unencrypted peer connections.

-f --files
Get a file list for the current torrent(s)

-g --get all | file-index | files
Mark file(s) for download. all marks all all of the torrent’s
files for downloading, file-index adds a single file to the
download list, and files adds multiple files to the download
list, such as "-g1,3-5" to add files #1, #3, #4, and #5 to the
download list.

-G --no-get all | file-index | files
Mark file(s) for not downloading.

-h --help
Print command-line option descriptions.

-i --info id | torrent-hash
Show details of the current torrent(s)

-l --list
List all torrents

-m --portmap
Enable portmapping via NAT-PMP or UPnP

-M --no-portmap
Disable portmapping

-n --auth username:password
Set the username and password for authentication

-p --port port
Set the port for use when listening for incoming peer connections

-pn --priority-normal all | file-index | files
Mark file(s) as normal priority. all marks all of the torrent’s
files as normal priority, file-index sets a single file’s
priority as normal, and files sets multiple files’ priorities as
normal, such as "-pn1,3-5" to normalize files #1, #3, #4, and #5.

-ph --priority-high all | file-index | files
Mark file(s) as high priority.

-pl --priority-low all | file-index | files
Mark file(s) as low priority.

-r --remove
Remove the current torrent(s). This does not delete the
downloaded data.

-s --start
Start the current torrent(s)

-S --stop
Stop the current torrent(s) from downloading or seeding

-t --torrent all | id | torrent-hash
Set the current torrent(s) for use by subsequent options. all
will apply following requests to all torrents, while specific
torrents can be chosen by id or hash. To set more than one
current torrent, join their ids or hashes together in a list,
such as "-t2,4,6-8" to operate on the torrents whose IDs are 2,
4, 6, 7, and 8.

-u --uplimit limit
Limit the upload speed to limit kilobytes per second.

-U --no-uplimit
Remove the upload limit.

-v --verify
Verify the current torrent(s)

-w --download-dir directory
Use directory as the default location for newly added torrents to
download files to.

-x --pex
Enable peer exchange (PEX).

-X --no-pex
Disable peer exchange (PEX).

EXAMPLES

     Set download and upload limits to 100 KiB/sec and 20 KiB/sec:

$ transmission-remote -d100 -u20
$ transmission-remote --downlimit=100 --uplimit=20

List all torrents’ IDs and states:

$ transmission-remote -l

List all torrents from a remote session that requires authentication:

$ transmission-remote host:9091 --auth=username:password -l

Start all torrents:

$ transmission-remote -tall --start

Add two torrents:

$ transmission-remote -a one.torrent two.torrent

Add all torrents in ~/Desktop:

$ transmission-remote -a ~/Desktop/*torrent

Get detailed information on the torrent whose ID is ’1’:

$ transmission-remote -t1 -i"

Get a list of a torrent’s files:

$ transmission-remote -t1 -l"

Download only its second and fourth files:

$ transmission-remote -t1 -Gall -g2,4"

Set all torrents’ first two files’ priorities to high:

$ transmission-remote -tall -ph1,2"

Set all torrents’ files’ priorities to normal:

$ transmission-remote -tall -pnall"

AUTHORS

     Charles Kerr, Josh Elsasser, Eric Petit, and Mitchell Livingston.

SEE ALSO

     transmissioncli(1), transmission-daemon(1), transmission(1)

http://www.transmissionbt.com/

Tuesday, 12 February 2013

export PATH in linux

在Linux里设置环境变量的方法(export PATH)

在Linux里设置环境变量的方法(export PATH)

一般来说,配置交叉编译工具链的时候需要指定编译工具的路径,此时就需要设置环境变量。例如我的mips-linux-gcc编译器在“/opt/au1200_rm/build_tools/bin”目录下,build_tools就是我的编译工具,则有如下三种方法来设置环境变量:

1、直接用export命令:
#export PATH=$PATH:/opt/au1200_rm/build_tools/bin
查看是否已经设好,可用命令export查看:
[root@localhost bin]# export
declare -x BASH_ENV="/root/.bashrc"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="localhost.localdomain"
declare -x INPUTRC="/etc/inputrc"
declare -x LANG="zh_CN.GB18030"
declare -x LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD="/opt/au1200_rm/build_tools"
declare -x PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/opt/au1200_rm/build_tools/bin"
declare -x PWD="/opt/au1200_rm/build_tools/bin"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
declare -x SSH_AUTH_SOCK="/tmp/ssh-XX3LKWhz/agent.4242"
declare -x SSH_CLIENT="10.3.37.152 2236 22"
declare -x SSH_CONNECTION="10.3.37.152 2236 10.3.37.186 22"
declare -x SSH_TTY="/dev/pts/2"
declare -x TERM="linux"
declare -x USER="root"
declare -x USERNAME="root"

可以看到,环境变量已经设好,PATH里面已经有了我要加的编译器的路径。

2、修改profile文件: 
#vi /etc/profile 
在里面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"

3. 修改.bashrc文件:
# vi /root/.bashrc
在里面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"

后两种方法一般需要重新注销系统才能生效,最后可以通过echo命令测试一下:
# echo $PATH
看看输出里面是不是已经有了/my_new_path这个路径了。

-----------------------------------------------------------------------------------------------------------------------

“/bin”、“/sbin”、“/usr/bin”、“/usr/sbin”、“/usr/local/bin”等路径已经在系统环境变量中了,如果可执行文件在这几个标准位置,在终端命令行输入该软件可执行文件的文件名和参数(如果需要参数),回车即可。

如果不在标准位置,文件名前面需要加上完整的路径。不过每次都这样跑就太麻烦了,一个“一劳永逸”的办法是把这个路径加入环境变量。命令 “PATH=$PATH:路径”可以把这个路径加入环境变量,但是退出这个命令行就失效了。要想永久生效,需要把这行添加到环境变量文件里。有两个文件可 选:“/etc/profile”和用户主目录下的“.bash_profile”,“/etc/profile”对系统里所有用户都有效,用户主目录下 的“.bash_profile”只对这个用户有效。

“PATH=$PATH:路径1:路径2:...:路径n”,意思是可执行文件的路径包括原先设定的路径,也包括从“路径1”到“路径n”的所 有路径。当用户输入一个一串字符并按回车后,shell会依次在这些路径里找对应的可执行文件并交给系统核心执行。那个“$PATH”表示原先设定的路径 仍然有效,注意不要漏掉。某些软件可能还有“PATH”以外类型的环境变量需要添加,但方法与此相同,并且也需要注意“$”。

注意,与DOS/Window不同,UNIX类系统环境变量中路径名用冒号分隔,不是分号。另外,软件越装越多,环境变量越添越多,为了避免造成混乱,建议所有语句都添加在文件结尾,按软件的安装顺序添加。

格式如下():

# 软件名-版本号

PATH=$PATH:路径1:路径2:...:路径n

其他环境变量=$其他环境变量:...

在“profile”和“.bash_profile”中,“#”是注释符号,写在这里除了视觉分隔外没有任何效果。

设置完毕,注销并重新登录,设置就生效了。如果不注销,直接在shell里执行这些语句,也能生效,但是作用范围只限于执行了这些语句的shell。

相关的环境变量生效后,就不必老跑到软件的可执行文件目录里去操作了。

cmake: how to use

 

CMAKE的使用

Version 1.0

2009-3-18

一、      基本使用

安装:下载二进制包后可直接解压使用

从源码安装则执行命令:./bootstrap; make; make install——尝试执行bootstrap失败

使用:cmake dir_path,生成工程文件或makefile文件

二、      概念

out-of-source build,与in-source build相对,即将编译输出文件与源文件放到不同目录中;

三、      基本结构

1,依赖CMakeLists.txt文件,项目主目标一个,主目录中可指定包含的子目录;

2,在项目CMakeLists.txt中使用project指定项目名称,add_subdirectory添加子目录

3,子目录CMakeLists.txt将从父目录CMakeLists.txt继承设置(TBD,待检验)

四、      语法

1.       #注释

2.       变量:使用set命令显式定义及赋值,在非if语句中,使用${}引用,if中直接使用变量名引用;后续的set命令会清理变量原来的值;

3.       command (args ...)  #命令不分大小写,参数使用空格分隔,使用双引号引起参数中空格

4.       set(var a;b;c) <=> set(var a b c)  #定义变量var并赋值为a;b;c这样一个string list

5.       Add_executable(${var}) <=> Add_executable(a b c)   #变量使用${xxx}引用

6.       条件语句:

if(var) #var empty 0 N No OFF FALSE... #非运算使用NOT

       

else()/elseif() … endif(var)

7.       循环语句

Set(VAR a b c)

Foreach(f ${VAR})       …Endforeach(f)

8.       循环语句

WHILE() … ENDWHILE()

五、      内部变量

CMAKE_C_COMPILER:指定C编译器

CMAKE_CXX_COMPILER

CMAKE_C_FLAGS:编译C文件时的选项,如-g;也可以通过add_definitions添加编译选项

EXECUTABLE_OUTPUT_PATH:可执行文件的存放路径

LIBRARY_OUTPUT_PATH:库文件路径

??????CMAKE_BUILD_TYPE:build 类型(Debug, Release, ...)CMAKE_BUILD_TYPE=Debug

BUILD_SHARED_LIBSSwitch between shared and static libraries

内置变量的使用:

>> CMakeLists.txt中指定,使用set

>> cmake命令中使用,如cmake -DBUILD_SHARED_LIBS=OFF

六、      命令

project (HELLO)   #指定项目名称,生成的VC项目的名称;

>>使用${HELLO_SOURCE_DIR}表示项目根目录

include_directories:指定头文件的搜索路径,相当于指定gcc-I参数

>> include_directories (${HELLO_SOURCE_DIR}/Hello)  #增加Helloinclude目录

link_directories:动态链接库或静态链接库的搜索路径,相当于gcc-L参数

       >> link_directories (${HELLO_BINARY_DIR}/Hello)     #增加Hellolink目录

add_subdirectory:包含子目录

       >> add_subdirectory (Hello)

add_executable:编译可执行程序,指定编译,好像也可以添加.o文件

       >> add_executable (helloDemo demo.cxx demo_b.cxx)   #cxx编译成可执行文件——

add_definitions:添加编译参数

>> add_definitions(-DDEBUG)将在gcc命令行添加DEBUG宏定义;

>> add_definitions( “-Wall -ansi –pedantic –g”)

target_link_libraries:添加链接库,相同于指定-l参数

>> target_link_libraries(demo Hello) #将可执行文件与Hello连接成最终文件demo

add_library:

>> add_library(Hello hello.cxx)  #hello.cxx编译成静态库如libHello.a

add_custom_target:

message( status|fatal_error, “message”):

set_target_properties( ... ): lots of properties... OUTPUT_NAME, VERSION, ....

link_libraries( lib1 lib2 ...): All targets link with the same set of libs

七、      说明

1CMAKE生成的makefile能够处理好.h文件更改时只编译需要的cpp文件;

八、      FAQ

1)  怎样获得一个目录下的所有源文件

>> aux_source_directory(<dir> <variable>)

>> dir中所有源文件(不包括头文件)保存到变量variable中,然后可以add_executable (ss7gw ${variable})这样使用。

2)  怎样指定项目编译目标

>>  project命令指定

3)  怎样添加动态库和静态库

>> target_link_libraries命令添加即可

4)  怎样在执行CMAKE时打印消息

>> message([SEND_ERROR | STATUS | FATAL_ERROR] "message to display" ...)

>> 注意大小写

5)  怎样指定头文件与库文件路径

>> include_directorieslink_directories

>>可以多次调用以设置多个路径

>> link_directories仅对其后面的targets起作用

6)  怎样区分debugrelease版本

>>建立debug/release两目录,分别在其中执行cmake -DCMAKE_BUILD_TYPE=Debug(或Release),需要编译不同版本时进入不同目录执行make即可;

Debug版会使用参数-gRelease版使用-O3 –DNDEBUG

>> 另一种设置方法——例如DEBUG版设置编译参数DDEBUG

IF(DEBUG_mode)

    add_definitions(-DDEBUG)

ENDIF()

在执行cmake时增加参数即可,例如cmake -D DEBUG_mode=ON

7)  怎样设置条件编译

例如debug版设置编译选项DEBUG,并且更改不应改变CMakelist.txt

>> 使用option commandeg

option(DEBUG_mode "ON for debug or OFF for release" ON)

IF(DEBUG_mode)

    add_definitions(-DDEBUG)

ENDIF()

>> 使其生效的方法:首先cmake生成makefile,然后make edit_cache编辑编译选项;Linux下会打开一个文本框,可以更改,该完后再make生成目标文件——emacs不支持make edit_cache

>> 局限:这种方法不能直接设置生成的makefile,而是必须使用命令在make前设置参数;对于debugrelease版本,相当于需要两个目录,分别先cmake一次,然后分别make edit_cache一次;

>> 期望的效果:在执行cmake时直接通过参数指定一个开关项,生成相应的makefile——可以这样做,例如cmake –DDEBUGVERSION=ON

8)  怎样添加编译宏定义

>> 使用add_definitions命令,见命令部分说明

9)  怎样添加编译依赖项

用于确保编译目标项目前依赖项必须先构建好

>>add_dependencies

10)        怎样指定目标文件目录

>> 建立一个新的目录,在该目录中执行cmake生成Makefile文件,这样编译结果会保存在该目录——类似

>> SET_TARGET_PROPERTIES(ss7gw PROPERTIES

                      RUNTIME_OUTPUT_DIRECTORY "${BIN_DIR}")

11)        很多文件夹,难道需要把每个文件夹编译成一个库文件?

>> 可以不在子目录中使用CMakeList.txt,直接在上层目录中指定子目录

12)        怎样设定依赖的cmake版本

>>cmake_minimum_required(VERSION 2.6)

13)        相对路径怎么指定

>> ${projectname_SOURCE_DIR}表示根源文件目录,${ projectname _BINARY_DIR}表示根二进制文件目录?

14)        怎样设置编译中间文件的目录

>> TBD

15)        怎样在IF语句中使用字串或数字比较

>>数字比较LESSGREATEREQUAL,字串比STRLESSSTRGREATERSTREQUAL

>> Eg

set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)

set(AAA abc)

IF(AAA STREQUAL abc)

    message(STATUS "true")   #应该打印true

ENDIF()

16)        更改h文件时是否只编译必须的cpp文件

>> 

17)        机器上安装了VC7VC8CMAKE会自动搜索编译器,但是怎样指定某个版本?

>> TBD

18)        怎样根据OS指定编译选项

>> IF( APPLE ); IF( UNIX ); IF( WIN32 )

19)        能否自动执行某些编译前、后命令?

>> 可以,TBD

20)        怎样打印make的输出

make VERBOSE=1

参考文献:

[1] CMake_Tutorial.pdf

[2] CMake使用总结,http://blog.csdn.net/keensword007/archive/2008/07/16/2663235.aspx

[3] http://www.cmake.org/

[4] 安装包中文档

[5] Andrej CedilnikHOWTO: Cross-Platform Software Development Using CMakeOctober, 2003

[6] CjackerCMake实践.PDF