Nitro's

Dec 26, 2015 - Comments - life

晚风吹来

风在吹,虽然它只是空调出风口吹出的一缕缕换气风,多少也给雾霾中泰然自若的人一点安慰。 或许美国大使馆也没有想到这个存在了N年的名词由它得以广而告之到千家万户。柴静的纪录片、禁止非官方发布气象数据、Twitter的@BeijingAir,一个个焦点带给我们身在北京的人的是一个个惊喜的意外,我们没病,我们没病,我们只是脑子有病。有人说,此刻的我们是平等的,无贫富,无贵贱,无荣辱,只要你还有一丝想活下去的渴求,那你我也便平等,一呼一吸见微尘… 北京人说是外地人的涌入导致了机动车摇不上号,雾霾挥之不去,房价只涨不跌,交通拥堵…北京人和外地人的区别在哪儿?户籍?父辈?父父辈?众口一词。虽然我们痛恨这个群体,痛恨那个群体,到最后才发现痛恨错了对象,所以我们依然在一块工作,在一块生活。 外地人说他有自由,想去哪里就去哪里,没偷没抢,他喜欢在北京所以在这里,这里有他的梦想,无论何种,只要他能生活下去,在北京就有理由。 一个制度让两个群体对立而坐,互相指责,有何意义? 去年的买的口罩,今日已所剩无几,何时我们不需要一个个面具示人,打声招呼都是生化危机的气势?

Dec 13, 2015 - Comments - hot life

梦想的天边

由于之前的课题项目,今天和娃娃来到火的一塌糊涂的中关村创业大街逛了逛,相比李克强总理的两次造访,今天的创业大街冷清了很多,也许是天气渐冷的原因。扫码团队不见了,名片掮客少了很多,如果不是路边各式的咖啡馆易拉宝提醒着你,你可能以为这只是CBD、TBD的商务休闲区。背靠着中关村三大电子城、毗邻微软研发中心、普天、新东方、虽没有universal center的学派风,但这里一定是中关村的核心,海淀区的经济中心。 如果三十年前的改革开放下海是一场春雨滋润了大地,此时的全民创业口号可以说是激情燃烧了这片热土。国家鼓励创业、BAT中层不甘寂寞、资本爆发的投资人、互联网概念的此消彼长真正让大家在这里各显神通。 在这条创业大街上,最典型的咖啡馆莫过于3W咖啡、车库咖啡。虽然每天在微博微信都能看到两家各式各样的活动动态,今天却是第一次来到正在发生的现场。3W因为今天两次得到总理的厚爱参访而一炮走红,虽然没有发现受人热棒的“总理喝过的咖啡”,但来一杯拿铁咖啡也算是消遣。下午2点的时刻,不早也不算晚,咖啡馆一楼已经没有空余的位子,对座基本一人一个,人再多则索性占据更多的空间,一色的MacBook也算是说中那句流行语:点一杯咖啡,坐在窗边,打开MacBook,眉头紧锁,过不了几分钟一定会有投资人在背后问你需要融资吗。非常遗憾的是几个小时内这样的事情并没有发生。形单影只的人对着电脑略作思索,抑或是一个激情迸发的开发人员飞速的敲击着键盘,打磨着自己心爱的代码全然忘却这个世界的一切。虽然没有打一桌麻将的多人组合的欢乐,但几个人坐在一块难免需要沟通协商,多半也是窃窃私语,生怕项目细节泄漏太多。一杯咖啡就坐,再寻觅周遭后在二楼的角落落座,在开放的天井之间一楼的进进出出一览无遗。不时的出现一批批四五十岁的“老人”,拿着公文包,细细观看一下文化墙,扫一眼没有眼神回复的咖啡客,相互几个人聊慰几句,也便走出了咖啡馆。只有了解互联网的人可能会对文化墙上的各色中概股上市公司评头论足一番,在外加几句创业时局的评论。与一楼相对沉默寡言的各色咖啡客相比,二楼就像开放的批发市场,一面是急需资金的创业者,一面是show me the future的投资人,这样的场面不免让人回忆起阿里巴巴的故事:six minutes is 30 million dollars。创业者一个个的快速表达,生怕五六分钟的时间错过下一个人生的机遇,投资人只是略作思索,打断对面这个紧张而底气十足的创业者:请用20个字表达你的创意!请用20个字表达你的商业模式!请用20个字说明为什么我要投你!虽然这个创业者说明清楚了,但显然没有打动这个消瘦而又不耐烦的投资人,创业者只能一声谢谢的离开。一个创业型咖啡馆的6分钟缩影,没有百分之百的idea,也没有握手的million dollars,创业者或许是来探探资本的风向,投资人或许是来找找idea的灵感。时间流逝,人换了一波又一波,从时尚、珠宝、微信外围到纸媒杂志,无数的创业者遍布各行各业,都在用一个idea在改变自己,在改变这个行业的未来。令人可笑的是上述的那位投资人提及他投资的健康领域XX公司,回来详细搜索,不免“别有洞天”。几篇有关公司的视频博文能够排到搜索前几名,公司官方网站只能在搜索第二页中才能发现,更让人令人匪夷所思的是公司网站的展示信息首页竟然与内页完全是两个维度的产品,只能猜测网站copy没有做净化处理,呵呵。想想之前与他交流的几个创业者,不免感觉被坑爹了。 有句话说的好,这个世界最不缺的是idea,但是能把idea变成现实的寥寥。大家在经历了2010年的百团大战的一窝蜂团购后,或者习惯了你抄我,我抄你,我抄上你,我就把你嘿嘿嘿的想法。国外的一家创业公司开始融资,国内绝对会有N家公司开始C2C(Copy to China)-租车、外卖、众筹、P2P金融。互联网的残酷也决定了如若让你疯癫必先让你疯狂,一个细分行业前两名或者前三名能够盈利持续下去,剩下最终只会黯然倒闭。只要我融资高过你,烧钱烧过你,我就是No.1,所以这一切让创业者疯了,投资人也疯了,各种融资高潮、融资造假、发红包、扫码地推发现金大行其道。 疯狂的创业只是疯狂的开端,一个idea可以高谈阔论一整天,但落到现实真不见得是个创业公司。车库咖啡相比3W咖啡冷清了许多,下午5点多的车库刚刚结束了IBM的Bluemix宣讲活动,桌椅还残存着活动的痕迹,在房间的一隅几个人围在一起在讨论着未来公司的发展大计。咖啡馆的服务人员看到我们的突然闯入,送上一句话:你好,有什么创业计划吗?顿时不知道怎么回复这句话,赶忙回复说是随便看看。不知道是不是来到车库的人都会被问到这句话。一进门的左侧贴着各式个样的A4纸寻求创业合伙人,仔细一看不免心中生疑,这是真正的创业吗?-招Delphi大牛做即时通讯应用、有idea寻技术大牛、招硬件合伙人要求熟悉App开发网页设计,看到这满满的一墙招聘信息,心中只留下错愕和惊叹,这就是所谓的创业吗?他们真的想好了为什么要创业吗?互联网行业的迭代速度越快,互联网人也愈加地浮躁,无论是为了个人理想还是赶上这股浪潮抑或实现个人财务自由,衷心希望那一墙的合伙人招募信息能够找到梦想的前方。 一件事情越发疯癫的时候越是可怕的开始,互联网的世纪伤痛还没有退去,大家还是会谈起互联网泡沫,有人说此时有泡沫,也有人对此嗤之以鼻,所有的创业者都希冀我没有碰上,惊醒的人已经开始在心中默念:小心,小心,再小心。小米估值400亿美金的时候大家都在尖叫,但时至今日大家却在反思小米应该如何撑起这400亿的市值,而不是在等待下一个big gift的尖叫。BAT开始缩减的校招名额,外卖、租车行业O2O一家家创业公司的消失,美团点评、58赶集、携程去哪儿、百合佳缘联姻,互联网的寒冬将至了吗?没有敢说YES or NO,但现在的这条创业大街确实有些冷清。或许大家都该静下心来思考一下未来,当一轮新的经济周期开启时我是否能够独善其事。一时的冷清是孕育也是蓄势,互联网从来不会停滞,创业更不会停滞。 故事、股市,咖啡馆是一个故事到股市的起点。

Nov 25, 2015 - Comments - dev

Linux Shell (9)-函数

格式: function name { commands } ----------------- name() { commands } 函数名必须唯一 函数的参数使用专有参数环境变量,无法共享脚本参数值 默认情况下,脚本中定义的变量都为全局变量,脚本内部使用的变量用local定义 传递(返回)数组变量时需要单独传入(返回) $(array[*]) source 点操作符,载入函数库 source functionlib.sh . ./functionlib.sh

Nov 25, 2015 - Comments - dev

Linux Shell (8)-中断信号、脚本启动

1) signal Ctrl+C=SIGINT=kill -9 Ctrl+Z=SIGTSTP=kill -18 2) trap 捕获信号 trap commands signals 捕获_signals_信号,执行commands trap commands EXIT 捕获正常退出,执行commands trap - signals 移除捕获signals 3) nohup nohup commands & 后台运行_commands_,输出到nohup.out 4) **jobs **列出相关的作业列表 -l 列出进程PID和job编号 -p 列出作业PID -r 列出运行的作业 -s 列出停止的作业 列表中显示”+“的作业为默认作业,显示”-“的作业为默认作业完成后将成为默认作业,在某一个时间点,只能有一个默认作业(”+“)和待将成为的默认作业(”-“) 5) bg**fg** 后台\前台 重启停止的作业 bg**fg** number 将作业号为_number_的作业启动 6) nice**renice** 调整执行脚本的优先级(20~-20),默认为0 nice -n commands 指定优先级执行_commands_,如果为非系统用户只能降低优先级 renice number -p PID 调整运行中的进程_PID_优先级为_number_,非系统用户只能调整自己拥有的进程且只能调降 7) at**atq**atrm 定时执行作业\查询队列作业\删除队列作业 at -f shellfile time _time_格式:10:08\10:08PM\now、noon、midnight\MMDDYY\Juln 4\Now + 30minutes -q 执行优先级,默认为a最高优先级,a-z任一字母

Nov 23, 2015 - Comments - dev

Linux Shell (7)-输入输出-read、exec、lsof、mktemp、tee

1) read 读取用户输入 -n1 限定输入长度为1 -p 提示语 -t 等待输入的秒数 -s 将输入隐藏(密码输入等需求,这是个黑科技!!!) 若后面不加变量var的话,默认将输入存储在REPLY中 2) 标准文件描述符,一个shell最多可以打开9个文件描述符 0 STDIN 标准输入(默认键盘) 1 STDOUT 标准输出(默认终端显示器) 2 STDERR 标准错误 3) 错误输出到文件:ls -al aaa 2>error.txt 正常输出到文件:ls -al aaa 1>out.txt 所有输出到文件:ls -al aaa &>all.txt 4)重定向输出 临时重定向:>&2或者 >&1 永久重定向:exec 1>out.txt 5) 重定向输入 exec 3<&0 exec 0< file ……… exec 0<&3 6) exec 3<> file 创建读取写入文件描述符。注:读取、写入时的指针在同一位置 exec 3>&- 关闭文件描述符 7) lsof -a 连接两个选项的输出结果 -p 进程ID,当前进程用$$表示 -d 指定要显示的文件描述符编号 输出属性 COMMAND 进程命令行名称前9个字符

Nov 20, 2015 - Comments - dev

Linux Shell (6)-命令行选项、参数-shift、getopt、getopts

1) 定义 参数:命令行后面的数据值 选项:修改命令行为的单字符值,以-(破折号)开头 2) 命令行参数索引、长度: $0-程序或者脚本名称的完整路径,如果只需要获取名称可以使用”basename $0“; $1-第一个参数,$2-第二个参数,……,$9-第九个参数,${10}-第十个参数,此后的索引必须加{} 参数中不允许有空格,否则必须用引号; $#-命令行参数的个数,如果获取最后一个参数应该使用${!#}而不是${$#} $*-所有参数作为一个整体处理 $@-所有参数作为多个元素的集合处理 $$-当前脚本PID 3) shift 左移每一个参数,$0保持不变, $1被丢弃 4) 命令行中参数选项以–(双破折号分隔),前为选项,后为参数 5) getopt 格式化选项、参数 getopt options optstring parameters optstring 标记选项是否需要参数,有参数选项字母后加: -q 忽略产生的错误消息 **set – ‘getopt -q a:bcd “$@”’**,将原有的命令行参数选项替换为getopt格式后的形式 6) getopts 每次只取一个选项 getopts optstring variable 忽略产生的错误消息,需要在_optstring_前面加:(冒号) OPTARG 选项的参数值 OPTIND 选项的索引值 当选项获取完成后通过: shift $(( OPTIND - 1)) $* 读取剩下的命令行参数

Nov 18, 2015 - Comments - dev

Linux Shell (5)-if、case、for、while、until

1) if 四种结构: if condition; then commands fi ---------------------- if condition then commands fi ---------------------- if condition then commands else commands fi ---------------------- if condition then commands elif then commands fi ---------------------- condition: test _condition _通过test命令的退出状态来判断条件是否成立,换种写法为 [ condition** ]** —————number -eq 等于 -le 小于等于 -lt 小于 -ge 大于等于 -gt 大于 -ne 不等于 —————string = 等于 != 不等于 > 大于,标准ASCII排序,使用每个字母的ASCII数值来决定排序 -n str 长度是否大于0 -z str 长度是否为0 —————file -d _file file_是否存在且为一个目录

Nov 16, 2015 - Comments - dev

Linux Shell (4)-vim

vim,号称史上最复杂的编辑器,当然也是黑的最没边的编辑器,哈哈~ 1) 移动定位 k上移一行,h左移一字符,j下移一行,l右移一行  k↑ h← l→  j↓ PageDown**Ctrl+f** 下移一屏幕 PageUp**Ctrl+b** 上移一屏幕 G 移动到最后一行 num G 移动到第_num_行 gg 移动到第一行 2) 编辑 x 删除当前光标字符 dd 删除当前光标行 dw 删除当前光标单词 d$ 删除当前光标至行末所有内容 J 删除光标行末断开线 A 追加内容到光标行末尾 num dd->p 剪切_num_行,然后粘贴 num y->p 复制_num_行,然后粘贴 u 撤销 v 进入可视模式,移动光标选中所需要操作的文本 3) 搜索替换 :/keywords 按Enter键,输入n继续搜索 :s/old/new/g 查找一行的old替换为new :s/old/new/gc 查找一行的old替换为new,每次替换均弹出提示 :%s/old/new/g 查找全文的old替换为new 4) 其他 Ctrl+v 列模式 选中模式下,U转换大写、u转换小写 $ 行末 ^ 行首

Nov 14, 2015 - Comments - dev

Linux Shell (3)-环境变量、权限、用户、用户组

1) 环境变量 printenv**export**set**unset** 系统全局: /etc/profile 用户相关(一般使用其中一个): $HOME/.bash_profile $HOME/.bash_login $HOME/.profile 2) alias alias ll=‘ls -al’ 3) /etc/passwd 用户信息(登录名、密码、UID、组ID、帐户描述、HOME目录、默认shell) 4) /etc/shadow 密码信息(登录名、加密密码、密码上次修改时距离19700101的天数、距离能够修改密码时的最少天数、距离必须修改密码时的最少天数、距离密码逾期并警告用户修改的天数、从密码逾期到被禁用的天数、帐户已禁用天数、保留字段) 5) useradd -D 查看或修改创建用户时的默认值,其中默认 GROUP 添加到哪个组 HOME 用户默认主目录 INACTIVE 密码逾期帐户是否禁用 EXPIRE 是否逾期 SHELL 默认shell SKEL 拷贝此内容到主目录,如果需要在所有创建用户的主目录下添加删除某些东西,可以通 过/etc/skel来实现 CREATE_MAIL_SPOOL 是否创建一个文件用户账户接收邮件 -G 指定用户组 -e 指定过期日期 -p 默认密码 -d 主目录 6) userdel 慎用 仅从/etc/passwd中删除 -r 一并删除账户主目录和邮件目录 7) usermod -g 修改用户组 -l 修改登录名 -L 锁定帐户使其无法登录 -p 修改密码 -U 解锁账户 8) passwd 后面跟用户名,则修改此用户的密码,如果没有指定则修改当前登录用户的密码 -e 强制用户下次修改密码

Nov 13, 2015 - Comments - dev

Linux Shell (2)-进程、文件、磁盘空间、压缩

1) Process Signal 1 HUP 挂起 2 INT 中断 3 QUIT 停止运行 9 KILL 强制终止 11 SEGV 段违例 15 TERM 条件终止 17 STOP 强制终止,但未停止 18 TSTP 停止或暂停,但继续在后台之行 19 CONT STOP或TSTP之后恢复执行 2) kill 建议执行顺序依次(TERM->INT\HUP->KILL) 3) killall 可以使用进程名称以及通配符来匹配,谨慎使用 4) mount 显示当前挂载的介质设备信息(设备位置、在虚拟目录的挂载点、文件系统类型、访问状态) -o ro 只读挂载 rw 只写 user 允许普通用户挂载 check=none 挂载不执行完整性检查 loop 挂载某个文件 mount -t type device directory:以type类型挂载device在directory目录 5) umount umount directory device 卸载设备 6) df 显示已挂载磁盘使用信息(设备位置、1K数据块总容量、已使用、剩余可用、已使用百分比、设备挂载点)。运行中进程已创建或删除某个文件没有释放的话,这个值不会显示在剩余可用中 7) du -h:已可读形式输出大小 –max-depth=1:显示目录深度为1,如果目录特别深,一定要添加这个参数。 8) sort 文本排序