Nitro Hsu

Life

平凡的世界

去年春节老爸把《老农民》《温州一家人》两部电视剧看完了,今年来到北京本来是想让他看部都市剧《我的老婆大人是80后》,结果老爸还不感兴趣强烈要求换一个。想来想去就想到了根据路遥小说改编的《平凡的世界》,贴近农村生活的味道,果然老爸爱看。 一本小说被搬到荧屏也就是业内人士俗称的IP模式,最近比较火的《寻龙决》(改编自《鬼吹灯》)《九层妖塔》(改编自《鬼吹灯》)《琅琊榜》《花千骨》,当然还有这一部《平凡的世界》。相比朝代历史、玄幻虚构小说,平凡的世界贴切的反映了上世纪60~80年代的陕北农村生活的一幅幅画面。如果你先读了一本小说,然后再去看电影或者电视剧,骂娘的概率应该在六成以上,相反如果你一张白纸的去看电影,好评率可能要高很多,这就是印证了那句话-看小说,那是属于你自己的一部电影。 相比大家都能评头论足的四大名著,我仅仅是读了《红楼梦》,关键是还没有看完,也仅仅是断于前60回,结果还被家里伯伯说小孩子不应该读这种书,哈哈。后来随着四大名著都被拍成电视剧、学业逐渐加重,也便再也没有去仔细看剩下的三部。后来央视的百家讲坛借着这几部名著还成功造就了几位大家,至于解读是不是合情合理,大家见仁见
6 min read
Summary

元気-致2015

在电脑上看《绝命海拔》,川藏的每一个画面却不断浮现,不是3D,但能够想象的是冰雪与寒冷。如果现在给我一个胆量,珠穆朗玛峰可能是我不可逾越的顶峰。 今年北京的冬天异常的冷,当大家在晒PM2.5时候估计也没想到能把PM2.5冻在这里,零下十几度的冰冻,着实让我这个北方人也吓了一跳。走在大街上,谁都不想多说一句话,快步走着,走慢了寒冷可能已经把身后的气流漩涡凝固了。偶尔有人忍不住的咳嗽几声,也只能证明他的病情在加重。难得在入冬的时候感冒了一次,按照往常的规律,此冬再感冒的机率应该不大,但今年的老爸却不胜冬天的寒冷,在迎接除夕夜的这几天感冒了。 身为一枚互联网的Coder,不仅仅领略了此冬的寒冷,同样也感受到了资本与产业的寒风。如果说一家公司的倒闭意味着竞争对手的狂欢,那么一堆公司的倒闭和大裁员意味产业的迭代与穷途困境。虽然每天的发布会依然继续,但是另一面的裁员减薪潮也在暗中涌动。大家都在讨论着融资、独角兽、Idea,好似大家的创业都能够发一笔横财,立刻身价百亿,但当要成立公司,下手一搏时,却又畏手畏脚,此所谓当下众多蠢蠢欲动的少年之心。有时大家都会把一个人的不良“嗜好”归结为星座问题,好
5 min read
Life

晚风吹来

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

梦想的天边

由于之前的课题项目,今天和娃娃来到火的一塌糊涂的中关村创业大街逛了逛,相比李克强总理的两次造访,今天的创业大街冷清了很多,也许是天气渐冷的原因。扫码团队不见了,名片掮客少了很多,如果不是路边各式的咖啡馆易拉宝提醒着你,你可能以为这只是CBD、TBD的商务休闲区。背靠着中关村三大电子城、毗邻微软研发中心、普天、新东方、虽没有universal center的学派风,但这里一定是中关村的核心,海淀区的经济中心。 如果三十年前的改革开放下海是一场春雨滋润了大地,此时的全民创业口号可以说是激情燃烧了这片热土。国家鼓励创业、BAT中层不甘寂寞、资本爆发的投资人、互联网概念的此消彼长真正让大家在这里各显神通。 在这条创业大街上,最典型的咖啡馆莫过于3W咖啡、车库咖啡。虽然每天在微博微信都能看到两家各式各样的活动动态,今天却是第一次来到正在发生的现场。3W因为今天两次得到总理的厚爱参访而一炮走红,虽然没有发现受人热棒的“总理喝过的咖啡”,但来一杯拿铁咖啡也算是消遣。下午2点的时刻,不早也不算晚,咖啡馆一楼已经没有空余的位子,对座基本一人一个,人再多则索性占据更多的空间,一色的MacBook也算是
8 min read
Linux

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

1. signal [https://www.nitrohsu.com/linux-shell-learning-2] Ctrl+C=SIGINT=kill  -9 Ctrl+Z=SIGTSTP=kill -18 1. trap 捕获信号 trap commands signals 捕获signals信号,执行commands trap commands EXIT 捕获正常退出,执行commands trap - signals 移除捕获signals 1. nohup nohup commands & 后台运行commands,输出到nohup.out 1. jobs 列出相关的作业列表 -l 列出进程PID和job编号 -p 列出作业PID -r 列出运行的作业
1 min read
Linux

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

1. read 读取用户输入 -n1 限定输入长度为1 -p 提示语 -t 等待输入的秒数 -s 将输入隐藏(密码输入等需求,这是个黑科技!!!) 若后面不加变量var的话,默认将输入存储在REPLY中 1. 标准文件描述符,一个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
2 min read
Linux

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

1. 定义 参数:命令行后面的数据值 选项:修改命令行为的单字符值,以-(破折号)开头 1. 命令行参数索引、长度: $0-程序或者脚本名称的完整路径,如果只需要获取名称可以使用"basename $0"; $1-第一个参数,$2-第二个参数,......,$9-第九个参数,${10}-第十个参数,此后的索引必须加{} 参数中不允许有空格,否则必须用引号; $#-命令行参数的个数,如果获取最后一个参数应该使用${!#}而不是${$#} $*-所有参数作为一个整体处理 $@-所有参数作为多个元素的集合处理 $**$**-当前脚本PID 1. shift 左移每一个参数,$0保持不变,  $1被丢弃 1. 命令行中参数选项以--(双破折号分隔),前为选项,后为参数 2. getopt 格式化选项、参数 getopt options optstring parameters optstring 标记选项是否需要参数,
1 min read
Linux

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
2 min read
Linux

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 移动到第一行 1. 编辑 x 删除当前光标字符 dd 删除当前光标行 dw 删除当前光标单词 d$ 删除当前光标至行末所有内容 J 删除光标行末断开线 A 追加内容到光标行末尾 num dd->p 剪切num行,然后粘贴 num y->
1 min read
Linux

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

1. 环境变量 printenv*export***set**unset\ 系统全局: /etc/profile 用户相关(一般使用其中一个): $HOME/.bash_profile $HOME/.bash_login $HOME/.profile 1. alias alias ll=‘ls -al’ 1. /etc/passwd 用户信息(登录名、密码、UID、组ID、帐户描述、HOME目录、默认shell) 1. /etc/shadow 密码信息(登录名、加密密码、密码上次修改时距离19700101的天数、距离能够修改密码时的最少天数、距离必须修改密码时的最少天数、距离密码逾期并警告用户修改的天数、从密码逾期到被禁用的天数、帐户已禁用天数、保留字段) 1.
2 min read
Linux

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之后恢复执行 1. kill 建议执行顺序依次(TERM->INT\HUP->KILL) 1. killall 可以使用进程名称以及通配符来匹配,谨慎使用 1. mount 显示当前挂载的介质设备信息(设备位置、在虚拟目录的挂载点、文件系统类型、访问状态) -o ro                     只读挂载rw                    只写user                 允许普通用户挂载check=none   挂载不执行完整性检查loop                 挂载某个文件
2 min read
Linux

Linux Shell (1)-基础、文件、监控进程

1. 脚本文件 # 为注释行shell不处理,但第一行#!/bin/bash为特例,标示着采用何种shell运行 `` 将内部命令行的执行结果赋值 > 输出重定向,覆盖 >> 输出重定向,追加 < 输入重定向 << 指定一个结束符,并以此结束符结束输入 | 管道符 exit 退出状态 0 命令完成 1 未知错误 127 无法找到命令 130 Ctrl+C终止 1. shell 提示符由变量PS1、PS2控制,通过格式符可以进行定制:PS1="\h\t\w$" Ubuntu中的sh默认指向为dash而非bash,这个需要注意。 1. ls -R 文件以及文件夹缩略信息 -l 文件类型+权限+硬链接数+所属用户+所属组+大小+修改时间+
3 min read
HTTP

博客正式启动HTTPS服务

博客从今天开始正式迁移至HTTPS服务,虽然国内各种阻挠SSH登录,但还是配置好了。 COMODO Positive SSL+Apache Httpd2.4+Wordpress配置,抽空详细写一下这个过程,在G面前你不得不用各种奇怪的办法曲线救国,实属无奈~ 环境:Ubuntu+Apache httpd+Wordpress 写一下具体的步骤: 1、选择SSL证书类型 namecheap上列出了四家证书注册商。以Comodo为例,它提供多达14个类型的证书,证书的差别在是否为单证书认证单域名、单证书认证多级域名,单证书认证多二级域名,多域名认证以及担保金额差异、服务支持差异、是否显示Trust Logo、128bit或者256bit加密区别等等。对于个人博客网站可能只需要单二级域名或者单三级域名的SSL认证,所以使用PositiveSSL、PositiveSSL Wildcard是最佳选择,如果是企业支付、电子商务服务就需要更高级别的SSL证书,nitrohsu.com使用的是PositiveSSL,价格上也是Comodo中最便宜的每年10刀。 2、生成CSR(Certifi
4 min read
Life

善始善终

微信微博慢慢占据了我们的琐碎时间,当夜晚下公交车不小心撞到前面妹子时,自己才突然发现,原来我没有抬头看前面的路。两个月的加班,5、6月在“996”模式中安全度过,7月在疲惫与心累中存活下来,是该找个时间休息一下了。 上周关系不错的一个同事离职,满心欢喜,一个新的起点,一个新的开始,结果换来的是BOSS可怕的压制与阻挠,因为新公司与我们公司为兄弟公司,BOSS们之间的某些关联,导致他最后也没能进入那家公司。当听到这个消息时还是特别惊愕,一来公司如果好心相留,那便和平分手,以后业务往来也会更加顺畅;二来自己的未来职业规划,作为一个前任公司应该是祝福而不是背后下黑刀,而且还是兄弟公司,业务线与经营范围根本不冲突,不存在竞业关系,俗话说的好:肥水不留外人田,可真到这一步,无论是HR还是BOSS,做出这个决定真是让每个人都感到心寒与惧怕。也希望同事尽早找到心仪的工作。 到现在为止,自己也经历了满满4年的职业之路,历经4家公司,从济南到北京,从传统IT到互联网。当谈到互联网这个行业,非同行都会对我们高频度的跳槽感到困惑与不解,哈哈。其实说到骨子里谁都不想离职,每个人都想追求安逸的环境与稳定的工
7 min read
HTTP

Burp Suite简明教程及代理配置

1. What Is 2. Editions 3. Preconditions 4. Tutorial One: Host Binding 5. Tutorial Two: SSL Pass 6. Tutorial Three: Proxy 7. Config Proxy-Windows 8. Config Proxy-OS X 9. Config Proxy-Android 10. Config Proxy-iOS 11. Config Proxy-Windows Phone * What Is WEB攻击工具? 网络爬虫? 漏洞检测工具? 代理服务器? 冷兵器? 这些它都可以完成,功能的区别在于内心的底线,你懂得! * Editions Free
4 min read
PHP

PHPStorm配置Debugger模式

开发环境: MacOS+PHPStorm Httpd2.4+PHP5.5+MySQL5.6 机器已经安装MySQL5.6、使用Mac原生PHP5.5,由于原生httpd权限各种问题,直接通过brew全新安装。 1、安装Apache Httpd 2.4 brew install httpd24 brew会自动查询依赖关系,下载相关依赖包。在下载过程中可能会遇到apr不存在但又没有下载的情况,通过 //首先升级当前brew brew update //更新brew中的依赖关系包 brew upgrade //诊断当前问题所在 brew doctor 诊断过程中可能会出现某些依赖包已经安装但是并没有关联到brew中,使用 brew link XXX(包名) 此时可能会由于权限问题,无法读写/usr/local目录,但是brew又不建议使用root用户来link,此时要修改/usr/local的所有权来解决这个问题,
2 min read
Android

Android Studio编译NDK工程

由于现在的开发都是基于AS的,但是当前AS对NDK的支持还不是特别完善,再切换ADT略显别扭,简单根据NDK文档写了一个Gradle脚本,来调用NDK ENV来编译。 目前的脚本仅能实现对*.c的编译,对NativeActivity的支持还不是特别完善。 主要分为3个步骤: 1)NDK编译链环境检查 2)编译 3)迁移编译后so文件、清理文件夹 //新建NDK compile任务 task compileNDK << { // TAG String TAG = ":" + project.getProject().name + ":ndk:" // Check NDK environment Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) def ndkDir = properties.getProperty('ndk.dir') ​ if
1 min read
Android

Android Gradle相关浅析

开发环境:Mac OS(10.10)+Android Studio(1.0) Android Studio(下称“AS”)目前在安装包中已经集成了Gradle的编译运行时环境,安装完成后会在AS的gradle文件夹下。 在介绍Gradle前,先看一下AS创建工程与导入工程的过程分析: 1、AS create project: AS在创建new project时会根据$Android_SDK_HOME/tools/lib/templates/projects下的模版创建默认project,依次创建Intellij Project Structure、Launcher Icon以及AndroidMainfest.xml,同时拷贝gradle wrapper(settings.gradle、build.gradle、gradle wrapper文件夹、gradlew)环境,此时android project的结构已经有了,但是还没有包含Gradle运行时环境的定义,下一步就是将$
3 min read
HTTP

浅析宽带运营商劫持

今天请求公司主站裸域会导致莫名奇妙的跳转到yiqifa.com然后再跳转回www域的诡异问题,清理Cookies、更换DNS均无效,郁闷!在公司群里讨论了一下大概可以锁定为宽带运营商劫持,由于之前安装了Wireshark也没怎么用,正好出现类似问题,使用HTTP抓包工具分析再好不过了。关闭大部分的可能产生网络连接的软件,Start&Action! 去掉正常的请求响应包,锁定到302请求,依次向下查看,果然发现了一些猫腻。截图如下: 96号 百度HM请求包61.135.185.140 URL:http://hm.baidu.com/h.js?ca88bf7b092f300a228b2c153a0a9fc8 97号 百度HM响应包61.135.185.140 HTTP 302 Location= http://122.141.234.60:51234/bdpop.sl.php?http://hm.baidu.
2 min read
Life

恋恋小事

从初中到大学每届运动会总有出现自己的身影但又不没站在领奖台上,好像最好名次也是第八名,每次开始跑我都下定决心一定要紧盯着前三名以免被他们落下太多。当站在起跑线上时除了紧张还是紧张,生怕错过发令枪啪一声的几个毫秒,幸好参加的多是长跑,对于抢跑规则的检查不是特别严格,看过100米短跑的就能感受到当裁判吹抢跑哨时郁闷,明明万事俱备了结果又来一个制造紧张气氛的。发令枪一响,运动员加速前进同时拼命的向内道聚拢抢占有利位置,十七八个人一块跑都要去挣50cm的内道,摩擦与碰撞在所难免,前面的只能再加速与后面保持距离,就这样在抢争中跑完第一圈,过后第一集团就会剩下10余人左右,因为一开始的紧张加上起跑后的加速跑就会导致第一集团的开始继续分化,能够加速跑三圈的将把原速度维持的落下,在第二三圈时基本分化完毕,第一集团只剩下四五个人,这些人后面比拼的就是耐力、中途跑变速、和最后的冲刺了。我基本属于第二集团军,但又是这里面不前不后的队员,跑下来没问题,名次没有可能,累积分勉强能算上1-3分。从运动会上的3公里、5公里再到平常的10公里、20公里,印象中里程最长的一次是高三上学期国庆放假三天,从县城跑回镇上总共
5 min read
Android

Android开发要点

1、自定义View如果作为ListView Item不要对View单独设置setClickable、setFocusable,如果设置后ListView的Selector会失效。 2、ListView Item中CardView如果设置cardElevation值,Item选中的ripple效果会被置为底部,造成UI效果不理想,在ListView中添加android:drawSelectorOnTop="true"将背景前置到顶部可以解决。 3、Android WebView如果HTML内容内嵌iframe此时通过shouldOverrideLoadingUrl方法不能捕获到iframe内部跳转的URL,此时需要调用shouldInterceptRequest()来捕获,这个方法不仅仅会捕获的URL跳转,对HTML内容的HTTP资源请求也会捕获,比如css、js等。 4、微信分享时出现“分享受限,由于hit push hold!!无法分享到微信”,原因是分享用的微信账号在其他手机登录,但是本机还没有退出登录,导致没有权限分享,重新进入微信并登录就OK
3 min read
SCM

Gitlab重置管理员密码

现在Linode日本的IP进入邮件服务商黑名单的越来越多了,联系客服更换了两次IP发送到Outlook都被拒收,实属无奈,只能等待月底新加坡机房建设好后,迁移过去。 邮件发送服务挂了,导致Gitlab找回密码功能直接被废,更悲剧的是管理员密码竟然也忘记了。无奈之下只能通过console来重置密码。 GItlab服务器上使用 #Gitlab安装路径 cd /home/git/gitlab #进入Rails控制台 sudo -u git -H bundle exec rails console production ominbus上使用 sudo gitlab-rails console or sudo gitlab-rake rails console 进入控制台,如果知道需要修改用户的邮箱,使用如下,直接修改 user = User.find_by(email: 'admin@local.host') user.password = 'secret_pass'
1 min read
Life

年前团队聚餐,第一次喝到吐,N杯下肚翻江倒海极度难受,神经却高度兴奋,喝到高处,一同事助兴挑逗,略感不爽,高喝一声:来!我和你喝!周围的气氛顿时紧张,大家都会觉得砸场子的来了,哈哈。其实真没那个意思,不过这是酒场,大家的思维已经把你摆在了一个醉酒的状态。在Team Leader的劝说下那酒也没喝成,起初我还是很有趣味的起哄热闹一下,但最后发现你的话到最后都要变成酒喝下去,直到吐。起先酒兴正浓小品几口算是惬意,后来开始互相敬酒,开始小有醉意,钻桌子晃悠身体话也开始随意起来,其间去厕所小便,同事忙提醒我,千万别看便池,我还在好奇有什么忌讳吗?进门一看,顿时惊愕,原来是有人翻江倒海都吐到便池里面了,蒸腾起的酒味让我也有了一丝想吐的感觉,迅速撤离现场。后来各种找理由喝喝喝,敬敬敬,快要撤离酒桌时才发现自己脚下已经开始站不稳,轻飘飘,酒精彻底麻醉了神经,自己已经无法站立,同事赶忙过来搀扶,他还在那里吐槽我挑逗着竟然让他喝那么多!几个同事喝的实在不行了结束后各回各家了,我被同事搀扶着去了不远的KTV继续唱歌,说是去唱歌其实是去醒酒。9点多的饭店周围打出租车还算方便,但在车上我却突然想吐了,同事连连
4 min read