!!

When I woke up in the morning, I looked at my iPad, she sent me some messages answering the last question I asked last night. I tried to examine the environment to see if I was in a dream, because I thought she would no longer send me any message. Soon, I fell asleep again. And then I did the same thing again. I woke up and saw her messages again. That time I thought that was real. But unfortunately I ended up waking up without any message, and right now, I am writing this article and this is the reality. I think I was thinking too much while I was sleeping.

!

Finally, I decided to send her a message. But I didn’t handle that well. I totally screwed it up. She thinks I am a strange man now. And I probably won’t talk to her in the near future as I am becoming annoying. ☹

We just met 5 days. And she gone away. From now, it’s been 2 months. I was preparing for what to say for days. I was afraid of losing her – as a friend or whatever. Well, to ask her out is the thing I wanted most, but she said she’s not here. I was thinking about her for weeks and now I failed, I think I can’t sleep tonight. FUCK!!!

Every time I am telling myself is OK somebody does not like you. I admit, I was thinking too much about her, too much beautiful things. And I don’t know if I should let these thoughts go away. I was also preparing to tell her all my thoughts. But I was so afraid of losing her that I didn’t say anything.

I wish some one could tell me what to do.

流量矿石hosts

最近流量矿石速度不行,曾经尝试修改hosts,不过作用不大。要知道矿石软件用到了那些域名进行通信,可以:

strings Miner.exe > strings

for domain in $(grep -Eo '[a-z0-9-]+(\.[a-z0-9-]+)*\.(com|net|org|cn)' strings | sort -u); do
  IPv4=$(dig +short $domain | grep -Eo '[0-9\.]{7,15}' | head -1)
  printf "${IPv4} %*s ${domain}\n" $((15 - ${#IPv4}))
done

这样,将得出的结果复制到C:\WINDOWS\system32\drivers\etc\hosts,当然你也可以用BAT文件一键生成添加。

60.55.32.68      agent.daddymami.net
61.130.9.245     agent.vlogin4.yunfan.com
121.201.99.4     client.jiaoyi.yunfan.com
222.186.3.147    cloud.daddymami.net
60.55.34.215     cloudcfg.daddymami.net
23.5.5.163       crl.thawte.com
23.5.5.163       crl.verisign.com
23.5.5.163       csc3-2010-aia.verisign.com
23.5.5.163       csc3-2010-crl.verisign.com
23.5.5.163       logo.verisign.com
183.60.41.76     mtracker.yunfan.com
23.5.11.27       ocsp.thawte.com
23.5.11.27       ocsp.verisign.com
65.52.103.126    schemas.xmlsoap.org
175.6.0.42       statis.daddymami.net
110.34.226.140   stun.daddymami.net
110.34.226.140   stun1.daddymami.net
222.186.3.165    track.qvod.com
23.5.5.163       ts-aia.ws.symantec.com
23.5.5.163       ts-crl.ws.symantec.com
23.5.11.27       ts-ocsp.ws.symantec.com
222.186.3.156    tspeed.yunfan.com
222.186.3.154    update.daddymami.net
60.55.34.183     upload.tfs.kbimg.cn
183.60.41.199    vlogin4.yunfan.com
175.6.0.106      www.qvod.com
69.58.181.89     www.verisign.com

大规模服务器和流量矿石软件监控

这段时间在和人合作挖矿,很多人会认为流量矿石前景黯淡或者是徒劳,但我至少系这个项目上学会了XenServer,和监控这些一百几十台服务器的技术。

监测每部VM的网卡速度比较容易,因为XenServer是Linux,读取 /proc/net/dev 就可以了。我也参照了部分官方的代码,自己用C编写了监控读数的软件。

因为最初没有设计太多,没有安装很多软件,通常我是只利用一台服务器用来编译软件,然后打包这些软件,放到其他服务器直接使用,其他服务器就无需安装任何软件即可使用,这个就会比较方便,唯一的缺点就是开发C会比较耗费时间,但是可靠性、方便性和运行速度上会有保证。当然也可以选择 Python 或者 Node.JS 。

Windows下的流量矿石软件比较“不寻常”,我利用各种获取窗口文字的软件,尝试获取矿石软件的流量读数,但是没有结果。

之后我尝试用监控每个进程的网络流量进行记录,之后汇总。不过我发现矿石连接数很多,处理起上来可能十分无效率,而且有部分可能是无用的。

montage

最终还是用图像识别的方法,截图,然后识别文字。这里要用到 Capture2Text 。唯一缺点是要处理很多情况,因为读出来的读数不是 100% 正确,要进行各种测试。

循环每隔几秒,利用 XenStore 储存读取读数,然后主机读取,然后主机集中发送到网站上,网站推送数据给用户浏览器,即时看到速度。

不过这个方法也有一个缺陷——就是关掉远程后或者远程窗口最小化后,屏幕变成黑色,所以截图也是黑色,无法读取数值。

最小化的问题可以通过利用注册表解决。但是关掉远程这个问题,网上有很多人提出不同的解决方法,但是都无用。

我最后找到了解决方法,就是当用户退出远程后,通知主机通过 VNC 登录 Windows ,当然这一步要输入密码,你可以通过 vncdotool 等工具,利用命令,模拟输入用户名和密码的过程,不过这里也有很多不确定的情况。只要主机登录到 Windows,读数就会继续。当然你不能设置任何屏保或者覆盖矿石软件读数的东西。当然,如果你设置了透明度,背景也是会影响读数的。

当然你要使用和了解 Windows 2003 下的 Session 0 ,否则会给你很多问题。

大致就是这样的过程。

因为是 Linux ,你可以做很多东西,比如截图,也可以将全部 VM 的截图合并,也可以在图片加入文字,另外可以利用 nginx ,这样截图就可以在浏览器定期刷新而获取最新的截图。

Ubuntu 无法登录的解决办法

如果你某次重启后发现怎样登录自己的账户都无法启动自己的桌面,即使密码正确,而登入其他账户如root就正常,这是因为Ubuntu执行自己的.bashrc或.profile等文件时出错,可能是因为权限或者不存在的原因,这次我安装了nvm,nvm在.profile插了一段,重启后发现登录不到,删了后正常登录,将该段命令转到了.bashrc。

你可以在登录界面按ctrl-alt-f1进入命令行界面,或者用root账户登录图形界面。

WINDOWS下的终端(Terminal)

如果迫不得已要在Windows下开发软件,使用类似终端的东西,而又觉得Windows的命令行工具很渣,可以考虑:

1. 安装包含git bash的msysgit

因为msysgit用的是Windows的命令行工具,所以要下载个比较好看的终端:

2. 下载mintty的msys版

3. 把mintty.exe移到msysgit的安装目录,如C:\Program Files\Git\bin。

4. 创建mintty.exe的快捷方式,放到桌面或者你想要的地方,然后右击编辑属性,目标一栏填写:

"C:\Program Files\Git\bin\mintty.exe" -c "C:\.minttyrc" "C:\Program Files\Git\bin\sh.exe" --login

其中C:\.minttyrc是配置文件存放位置,如果是Windows 7,因为权限问题,可以存放在自己的用户目录下,或者其他磁盘。如果不指定这个,诸如界面编码等设置都不会被保存。

后面的"C:\Program Files\Git\bin\sh.exe" --login其实跟Git Bash自己的快捷方式类似,启动带Git的Bash。

安装完软件后记得要往环境变量的Path添加exe或者库的所在路径。

PyQt Retina

前几天买了MBP Retina,发现用PyQt4编出来的Mac app不是Retina,Widget和窗口的左上角的三个按钮都是模糊的,一查发现Qt5开始支持Retina,于是就去装了。

PyQt4贪方便,用了Homebrew安装,于是继续安装PyQt5,发现除了个问题,就是Mac OS X 10.9就把libstdc++改成了libc++,导致PyQt5不能安装,上到Homebrew的Github Issues找答案,有可能需要重新安装大部分软件。

于是还是不能偷懒,去把Qt5和PyQt5的源码下载,自己从源代码build。

第一次Build分别用了Python2.7和Python3.3,都成功,Python3.3可以用,但Python2.7不能用,会出现Symbol not found的错误。

为什么特别要用Python2.7呢?因为PyInstaller目前支持到Python2.7,而另外一个Package软件Pyside又不支持Qt5。所以如果PyQt5不能在Python2.7使用,基本上要Python写的Qt程序不能用Retina。

后来发现PyInstaller需要一个叫SIP的软件,由于学这个时间只有几天,不知道是什么,最后还是把那个也用Python2.7装了,最终可以在Python2.7使用PyQt5,OK。我估计原因是之前的SIP是Homebrew用Python3安装的。

Qt4迁移到Qt5也是一个问题,因为网络上几乎没有任何Qt5的教程,如果现在入手PyQt5,无奈地要看PyQt4的教程,然后安装迁移提示升级。

Qt5安装:

官网上有Mac的安装软件,可以安装到家目录下:~/Qt5.2.0

SIP安装:

cd sip-4.15.3
python2.7 ./configure.py
make
sudo make install

PyQt5安装,–qmake的路径根据Qt5的目录,里面肯定有个叫qmake的程序,–sip和–sip-incdir根据之前SIP安装的输出结果,sudo make install时会列出sip和sip.h这两个文件的路径,分别填入目录和文件路径即可:

cd PyQt-gpl-5.1.1
python2.7 ./configure.py –qmake /Users/caiguanhao/Qt5.2.0/5.2.0/clang_64/bin/qmake –sip-incdir /usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/include/python2.7/ –sip /usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/bin/sip
make
sudo make install

现在应该可以用PyQt5生成app了。但还不是Retina的。

当然还有一步,根据这里,在生成的app文件下找到Info.plist,加入:

<key>NSHighResolutionCapable</key>
<string>True</string>

当然这不能通过填写spec文件自动修改,因为PyInstaller生成的Info.plist是固定的,你要更改PyInstaller/build.py大约1500行的位置

用以下命令直达该目录:

cd $(python2.7 -c "import site; print site.getsitepackages()[0]")/PyInstaller

我先自己加了

Ruby in Mavericks

如果你升级到了 OS X Mavericks,会发现以前跟Ruby有关的软件出现问题,使用brew重新安装ruby,虽然Ruby可以用,但是用gem安装某些软件时会出错:can’t find header files for ruby ruby.h。

因为系统比较乱,建议还是删除 /System/Library/Frameworks/Ruby.framework 和 /Library/Ruby 目录,删除/usr/bin目录下的erb, gem, irb, rdoc, ri, ruby, testrb, bundler 等等。然后用rbenv安装最新版的Ruby 2.0。

为了使用最新软件,删除你的Ruby项目中的Gemfile.lock和更新各Gem的版本号,使用旧版本软件也可能出现安装编译时出错。

极路由:SSH

家里路由器开始出现问题,于是去找了。搜索翻墙路由时无意发现一个叫极路由的东西最近发布,而且还要邀请码,于是进入了他们的QQ群索取了一个,花了270多元买了。

今天路由器到了,设置好了之后,固件要更新,否则是不能连接添加app的功能。

原本我以为SSH这些app是下载到路由器,然后在路由器设置。但不是,你至少需要在路由器的官网上 https://app.hiwifi.com/ 输入你的SSH用户密码!另外他们目前的SSH只能通过密码方式使用(不能使用密钥),你要重新启用SSH的密码验证功能才可以用。

这个动作太危险了。先不说极路由的人在路由器中或是官网上收不收集用户名密码,这些明文保存的用户名密码对服务器危害极大。

另外我开启了密码功能测试连接速度。智能判断模式不能判断 twitter 等网站。我试过只能在全局模式下,在终端用curl下载twitter.com首页,发现使用了接近30秒的时间才完成,超级慢!算了,我不用这个app了。

除了这些外,包装是好的。如果翻墙功能做得这么差,这个路由器根本没有什么出众的地方,和其他100多元的路由器差不多,有些被人搵笨的感觉。

QQ群上尽是那些“趋炎附势”的人,一群不接受批评的人,于是我退出了那个QQ群。

或者他们会在之后更新中补救,但是他们对于安全考虑如此不周到,真让人心寒。(还是不要过多期望路由器级别的翻墙)