0%

大家好我是来除草的。

由于 Hexo 更新了导致 blog 莫名奇妙跪了,于是我就很久没有更新了。(其实就是懒了不想更新了。)

于是趁着这个五一假期顺手把 hexo 修复了一下。所谓的修复,就是推倒重来……于是干脆物色了一个新的主题。当前这个主题看起来还不错,NexT.Mist。 看起来非常干净,很适合我这种……只想吐槽不想写公式的人。

在修复的时候遇到的一个奇葩错误,hexo server 老是启动不来,我也不知道为什么。 根据不停的二分哪个文件的哪一行的哪几个字符,终于让我找到了:{ # 这两个字符似乎不能同时出现……

于是 hexo server 终于能跑起来了,但是 Disqus 莫名其妙跪了我也不知道为什么,我几乎什么都没改…… 修了一下失败了,我还是不知道为什么……于是弃疗了。 找到是什么问题了……disqus_url 这是个啥参数呀,我注释掉就好了 = =

寒假的时候写了个小网站,本来想着一个月妥妥的写完,后来发现自己还是 naive。 寒假写了一个月没写完,回到学校后继续写又写了一个月,勉强能用了,但是还是有一堆 bug 要修。 用的技术大概就是 Koa 作为后端,MongoDB 数据库,AngularJS 前端。界面用的是 SemanticUI, 感觉写起来挺爽的,就是查 API 真蛋疼。

然后在这个学期刚开学的时候,由于 Arch 一堆问题要修,于是我就修 qi 复 liao 了一发,直接装了 Ubuntu,所谓的新学期新技术嘛…… Firefox 也换成了 Chrome,装了几个小插件,用起来也感觉还行。 印象最深刻的是一个加空格的小插件,简直好用的无与伦比。 密码管理也换成了 LastPass 。以前写的那个无聊的 HMAC 虽然还在用,但只是用来做兼容的了。

最近出了啥 Visual Studio Code 我也来玩玩。说起来这是要变成码农了吗……我可是青年理论计算机科学家 →_→

说起来上个学期刚开学的时候陪同学去买笔记本,然后我也顺手买了一台……Thinkpad New X1C,轻倒是挺轻的,到处带着基本没问题。 续航的话刚买回来 6h,现在大概 5h 。重装一次系统应该又可以回来。 上个学期天天出去自习,还去罗姆楼刷了几次夜,所以电池充放次数几乎是一天一次。 这个学期又赖在寝室出不去了……然后我也懒得装 Linux 了,用的 Windows 8 也还算凑合。Listary 实在是太好用。

计算机科协的那个啥 vpn9 实在是良心。妈妈再也不用担心我的流量了……但是不知道为什么经常掉线…… 我现在的用法是 Win8 上装了一个 OpenVPN ,树莓派上也装了 OpenVPN 。 然后树莓派上跑一个 cow ,iPad、iPhone、老笔记本全部用 cow 做代理,这样默认就是走 vpn 了……

上学期期末的时候在玩 Portal ,回家后我老弟要玩,那就给他玩呗……结果……结果…… 结果上来就直接联机对战,找到了一个好老师,我当时就被他吓得目瞪口呆。 寒假的时候老弟有时候吃夜宵,于是我也顺带着吃夜宵,老弟给我煮面、煮馄饨、炒蛋炒饭,真是太幸福…… 然后现在在玩炉石……技术实在是菜的不忍直视都快弃疗了。

寒假的时候到外面讲了几天课,然后回学校讲课,现在讲课也讲不动了,出题都出不动了。心好累……反正现在有一些存款,就不急着去圈钱了…… 三月底的时候去师大附中讲了两天课,这应该是最后一次讲课了。然后这几天在给一个大学出 ACM 模拟题,也应该是我最后一次出题了。 以后应该就见不到我在这方面活动了。这一代终究要退去。 CTSC 懒得去出了,其实也没有好的 idea ,于是放弃了。明天 CTSC day1,祝 cyb 小朋友好运吧。

现在就安心的和 papa 一起搞搞 TCS,继续上个学期的课题。但是现在似乎到了瓶颈期,我的所有 idea 看起来都用光了…… 原来想和 clj 一起上 ATCS 的,发现和博弈论冲了我就没上了。看 clj 现在的样子我发现自己真是 naive,不知道何时才能追上去。Anyway……

最近一段发生了一些情感上的事,然后发现我自己真是一个玻璃心的妹子。想太多,猜太多,遇到啥事都要紧张半天。 心情经常 biu 的一下就糟糕的无以复加。Anyway,我并不认为这样太糟糕,我也不打算改,就这样吧。

这学期的数值分析准备和老师套磁一发,用课程报告翘期末。 我写的主题是 Toeplitz 矩阵,其实现在主要在写 Circulant 矩阵的一些性质,把高中学的 FFT 又可以写上去,简直爽。 老师给的模板是 Word,然后我就去和老师套磁改成了 TeX,但是 TeX 模板仍然蛋疼……算了我就用 ctex 默认模板好了。

我现在急需一发鸡血……罗老师不行了,罗老师要倒了……

好吧我就是无聊了……

这玩意是为了解决这么一个问题的:我的 QQ 跑在虚拟机里面,因此里面有消息了我在外面并不知情。消息推送有几个可能的解决方案:

  1. WineQQ。我对稳定性产生怀疑。
  2. QQ for iPhone。其推送并没有那么及时。
  3. 戴上耳机就可以听到 QQ 的声音了。但是我的歌都放在 iPhone 里面且耳机只能用在 iPhone 上。
  4. 换成 Windows/Mac 系统。我没那么土豪。

于是就想能不能写一个小程序使得虚拟机里面有消息了就在外部的 KDE 里面出个提示之类的。

琢磨了以下,QQ 自带的提示似乎只能播放声音。于是第一想法是监听声卡播放。搜了搜没找到相关资料(其实是自己懒,觉得如果这样的话有得进行 WinAPI 编程。感觉监听声卡这还是比较底层的,感觉不好搞。),于是就放弃了。

第二想法是播放声音的时候肯定得访问声音文件,我记得 png 还是 jpeg 可以嵌入一个奇怪的东西,不知道 WAV 是否可以。搜了搜还是没找到类似东西。放弃。

第三个想法是监视屏幕,我打开一个 QQ 窗口,如果有消息过来了,其图标会有相应的变化。在我使用的这个版本里面,窗口合并后如果一个人有新消息,其名字后会出现一个橙色小圆圈,里面一个数字表示其消息数目。如果我定时扫描这个位置,获取此时此像素的颜色,就可以知道有没有消息了。后来想到,如果我把 QQ 不设置为当前窗口,那么当有新消息过来的时候 QQ 在任务栏里的图标会变成那种一闪一闪的黄色。于是我监视的点的位置基本上是不变的,只要我保证 QQ 在任务栏中的位置不变就好了。

于是就用了 AutoHotKey 这个小工具,代码大概就长这样:

#Persistent
#SingleInstance
SetTimer, CheckQQNotification, 1000
return

CheckQQNotification:
CoordMode, Pixel, Screen
PixelGetColor, col, 187, 775
; 颜色就是 %col%
return

现在我们知道颜色了。实践发现,图标的颜色不是两种颜色,新消息过来后,由于会闪所以可能会有其余的颜色。于是就直接用 RGB 三元组的 Manhatton 距离来判断处于什么状态了。

现在考虑如何将颜色这个信息传到 Linux 里面去了。第一想法是造一个小型 http 服务器。看起来没那么复杂,就开始写了。

框架用的 Node.js 的 Express 框架,而且我只需要得到一个信息,直接 POST 过去就好了。那么考虑在 AutoHotKey 中如何发送一个 POST 请求。据说 AHK 有一个包可以做这种事,但是我试了试发现不 work ,果断下了一个 curl for Win 然后直接 POST 过去。我很想吐槽 AHK 带参数运行一个程序,照着别人的程序写都发现不 work 。这里有个一个小细节,AHK 运行这种 Console 程序会闪出一个黑框,很影响用户体验。解决方法是找了一个叫做 Hidden Start 的程序, hstart /NOCONSOLE curl 就好了。Win 这边差不多布置好了。

在 Linux 这边,弹窗的话我用的是 notify-send 还附赠一堆小图标。由于请求是 1s 一个的过来的,不能对于每个 Active 的请求我都弹一个窗,于是就设置:如果上一次表示 QQ Active 的请求是在 5s 以前,那么就弹窗,否则不弹。另外如果我现在就在虚拟机里面操作也可以不弹窗。如何判断在是否在虚拟机里面?第一想法是在 Win 里面获取鼠标位置,发现不 work 。第二想法是在 Linux 里面获取活跃窗口,用的 xdotool getactivewindow getwindowname 搞的。为了好看还加了当前时间,moment.js

(我是不是又造了一个轮子?)

最近买了一个 Raspberry Pi ,原意是想鼓捣成一个支持 IPv6 的路由器。趁着放假先来玩一下。

Read more »

据说最近的墙越来越厉害了。

上次打 GCJ 的时候遇到了文件下不下来传不上去的情况,不能更囧。后来的几天内学习各种走出国门的知识,现在感觉已经差不多了。

hosts 大法

这个是我用的最久的方案之一了吧。其优点是迅速快捷方便,缺点同样非常明显,只对特定的网站有效,且封锁起来特别容易。

我用的是 Smarthosts,在前一段时间的封锁中不幸牺牲,经常出现 too much request 的情况。

卒。

去阿根廷

这个是最广为人知的方案(没有之一?)

优点是通用,流量虽有限制但是约等于没有。便捷,一个文件夹带着走天下,还可以给别人用。

缺点,部分人对速度要求较高。最近抽风率较高。

如果你愿意一层一层一层的拨开我的心

……我先去学学解剖学。

试了一下,速度慢出翔。

原理似乎是基于一层一层的节点转发,因此需要许多志愿者做中间节点。

优点不明。

VPN

免费的著名的有 vpngate.net 。

这是一个很奇怪的论证,你要上 vpngate.net 的话需要翻墙,但是你要翻墙需要 vpngate.net 上面的东西。

当然你要土豪可以自己买个。但是据说靠谱的不好找。

缺点是上国内网速度也不怎么样。当然用个什么 chnroutes 之类的来分流。不过这么高级的我就没用过了。

VPS

目前用的就是这个方案了。

直接蹭了 drd 的 VPS 。DigitalOcean 还算可以吧,最低端的都可以供一堆人一起用了。1T/month 肯定用不完。

具体方案是 shadowsocks 。蛋疼的是 shadowsocks 有好几种不同的实现,我不知道这些实现的区别。后来统一用的是 shadowsocks-libev ,全部是自己手动编译,反正不大,编译起来挺快的。听说 Singapore 的服务器有 ipv6 了,试图折腾了一下,失败。

后来考虑直接通过 tunnel 来搞。我用的是 HE IPv6 ,挺赞的。网上有一些教程。我在这里折腾了好久,原因是因为某些 shadowsocks 对 ipv6 的支持不好(或者是我姿势不对?)

这个月流量只剩下 300M 了,剩下的日子只能靠 IPv6 来打发了。

吐槽一下,看 jzp 买了一个极路由,于是我也查了查相关资料。查了半天没查到开发者资料,这是准备自己一个人写插件的节奏么……反观小米路由,虽然还没见到影子(还不一定抢的到是吧),但是人家的开发者教程已经出来了。如果极路由出了开发者教程的话我还可以考虑买一个,如果不出的话就我还是慢慢等小米路由好了。

不知道从什么时候从 Jekyll 转移到了 Hexo 。我觉得 Javascript 这门语言挺漂亮的,除了其奇怪的变量作用域。起码 Hexo 渲染比 Jekyll 快了一个数量级吧(喂这样比较真的合适吗!)。

转移过去的时候其实出了点问题。大致表现就是首页的 description 里面全是汉字的 unicode 码,然后 & 又被转义掉了,导致汉字一个都显示不出来。我试图在 ejs 里面找问题,似乎是某个地方多转义了一次(<%= %><%- %> 的区别)。修了很久没修好,最后 sudo npm install hexo -g 好了。

另外前一段时间的 Arch Linux 有 3 个 bug 我修不好(其实是不想修了):

  1. 输入法的快捷键。每次启动时我都要将快捷键重新绑定一次。
  2. 休眠后的 VirtualBox 不能启动 Win7 。
  3. 休眠启动后连不上 Wi-Fi 。

前两个还可以忍,最后一个简直不能忍。于是一怒之下换了 openSUSE (jzp 眼中的“长者 OS”)。不小心丢了 .emacs.d 呵呵呵呵呵幸亏有早期备份。现在的用户体验还算 OK ,毕竟新学期新系统,新系统新气象。fanhq 表示很喜欢里面的 YaST ,希望 Ubuntu 也搞一个,感觉有点不靠谱。不习惯的一点是 Ctrl-Backspace 的 delete-word ,这个 word 的判定似乎太严格了, tabopen google.com 我习惯 delete com 而不是 google.com

为了禁水,将人人客户端从移动设备上卸载了。于是少了一堆水的时间。同时带来的就是我越来越困了,按照 jzp 的介绍:“我的室友 lyp 已经连续几天十一点起床了。”臣妾睡不够啊……

发现让自己从悲伤中缓过来的最好的方法就是让自己忙起来 —— 不过,这算不算的上一种逃避?思考人生哲学问题什么的,一个人凌晨在外面散散心也是不错的——如果有人陪那就更加美妙了。当你想起大物、微积分、电原、线代等等科目都要考试,史纲论文还没写的时候真就没时间忧伤了。

有人说这东西发出来就是 public knowledge —— 反正你也不会看是吧。有些私人信息可以不说但是雷区范围让我难以接受 —— 其实我还不知道具体雷区。而我觉得自己去扫雷挺累的……所以就不管了,安全第一。(其实雷区不可怕,雷区比一般人都大这才可怕吧。)……(安全真的第一吗?)

三点了,去睡了。

为了庆祝 @hym 妹子过生日,他特意写了个游戏让大家玩,请戳 这里

作为他无聊的室友,我们就有了各种刷分的乐趣。还未 release 的时候是可以各种刷分的,因为当时 \(10^9\) 这种数的权值非常大。release 之后不那么好刷了,起码手刷不好刷了。我手刷最多只刷了 12w ,就是一轮中凑了两个 99999999 。

于是今天花了一天时间写了个自动刷分机,刷个 30w 基本没问题……

代码主要用 Livescript 写出来的,其实就是一个 GreaseMonkey 脚本 。

使用方法:

  1. Firefox:对不起 hym 不支持 Firefox;
  2. Chrome: 请先安装 TamperMonkey, 然后安装该脚本;
  3. 其余: 自行解决。

我写的主要就是随机一条路径,交给 NAN.Analyzer.analyze 去求值,每次选权值最大的那个……所以基本上没有什么代码。我随机选择了 3k 条路径,各位同学可以根据自己的机器进行相应的配置。

Javascript 代码在 这里 ,Livescript 源文件在 这里

2048 已经打入敌人内部了是吗……

problem

给定一种奇怪规则的 2048 ,问可能凑出来的最大的数是多少。

规则比普通的 2048 多了一条:如果这次合并后还可以继续合并,那么就不会出现新的方块。

注意每次可以出现 2 或 4 。

solution

其实 yy 一下就可以猜出答案是 \(2^{17}\)

怎么解释呢……一开始我的想法是在一个局面中出现两个相同的数是不优的,可是怎么证明是不优的呢。我觉得这显然,但是 Michael 说要给理由,于是我就没继续想下去了。

后来脑洞大开,yy 了另外一个思路。就是考虑整个局面中所有元素的和。每次这个和要么增加 2 要么增加 4 。注意到这个和的二进制表示中 1 的个数的意义,1 的个数表示这个局面中最少要多少个方块。如果要产生一个 \(2^{18}\) ,那么一定存在一个时刻使得整个和要么为 \(2^{18} - 2\) 要么为 \(2^{18} - 4\) 。注意到显然不能为 \(2^{18} - 2\) ,因为 \(2^{18} - 2\) 有 17 个 1,而 \(2^{18} - 4\) 里面有 16 个 1,已经把棋盘塞满了,游戏已结束,也是不可能的。所以 \(2^{18}\) 是不可能出来的。

这样的话就只要考虑 \(2^{17}\) 了。显然这是可能的,很容易构造的吧……

周末还有微积分考试,我现在是不是在作死……

cellBlockA

这一关很简单,就是走过去拿走 Computer ,再走到出口就好了。

theLongWayOut

也很简单。

分别在上面黑线和下面黑线处填入 /**/ 就好了。

validationEngaged

这一关限制了 # 的数目必须为多少,所以不能删掉代码……

改一下位置不就好了。

multiplicity

文件名已经告诉你一切了……

再放一个出口。

minesweeper

背景是红色的这是红果果的提示吧。

照模子画瓢把所有的 mine 标成另一种颜色好了。

drones101

那个 drone 很讨人嫌……

造几个 # 把他挡住不就好了。

colors

重点是要利用 phone 的 Callback 。(也只能利用这个吧)

在里面循环换颜色:红 -> 绿 -> 黄。用 phone 切换颜色。

intoTheWoods

注意 generateForest 这个函数是会清除已有障碍的。

所以你所需要的就是把 phone 的 Callback 设为 generateForest 然后使劲往出口走。走不动了就重新生成。

fordingTheRiver

在 phone 的 Callback 里面把 raftDirection 改掉。

ambush

把 Drone 的移动策略改掉:能向上就向上,否则向右。

robot

写一个简单的 AI 。

先向下,再向右,再向下。

robotNav

你可以用 robot 这一关的技巧继续加强,也可以用下一关的技巧。

robotMaze

迷宫会变,这使得这一关特别蛋疼,不能用 robot 的技巧了。

写个最短路什么的自然可以。

所以你在 behavior 里面写:如果 player 的位置在哪里就往哪边动。

相当于你通过操作 player 远程操作 robot

crispsContest

把使用 greenkeyremoveItem 后面的东西改成 empty 就好了哈哈哈。

然后你就可以不用 greenkey 了。依次进入左上、右上两个角最后再去取 Algorithm 就好了。

exceptionalCrossing

这关实在不会就看了教程。

这要利用 javascript 的异常处理机制。你在里面直接调用一个不存在的函数就不会进入 killedBy 这个过程。

@cxq 的方法就是主动把括号闭合掉,然后加一句 type: "item" 然后你就可以自由自在踏上去了。

lasers

laser 的颜色改掉然后继续用 phone 来切换颜色……

pointers

这一关过了纯属巧合。

我把所有的安全的 transporter 标了出来。手动 bfs 几次就过了。

后来又试了好几次,发现成功率不高……

superDrEvalBros

主动把 jump 闭合掉。

既然你用 timer 了那我也可以用是吧……

你的 gravity 是 45ms 一次,那我的 jump 就搞成 30ms 一次好了。

documentObjectMadness

你看代码中的 overrideKey 就知道了。

目标就是和红色的 @ 重合。

bossFight

这一关是我代码量最大的一关。

一开始的想法是——以子之矛攻子之盾。我也 define 一个奇怪的 boss ,发出横着的子弹来打那些 boss 。

但是由于 validateLevel 检测了 dynamic 物体的数目,所以我又添加了一种新的物体,动态的,通过 onCollision 去触发。触发后就放置两个我造的 boss 。

endOfTheLine

说起来也是看攻略过的……

其实重点已经差不多知道了啊……

我想在 placeObject 或者 placePlayer 的时候把 map.finalLevel 清空,但不知道为什么失败了。

结局就是把代码中判断 finalLevel 的地方改掉, /scripts/objects.js ,L28。

结局

似乎就是浪费了一个晚上。

啦啦啦一年一度的女生节到了~

友情提示:如果您是来看清华女生节的,为了方便您更好的阅读,请按Ctrl-w。

(一开始就参考了模板发现我还是不会写啊 T__T)

从有记忆的第一天起,某人总是扮演一个超级学霸的角色。作为纯种理科男,我表示语文等学科亚历山大,某人却表示毫无压力。回想起高二暑假某天路过成绩公告栏的时候,听到有人说“xxx还要再来虐一次啊”,某人急速溜走的场景。长期年级前十,虽然也有保送生模拟考试被虐的飞起的记忆,可无论怎样都遮住不了耀眼的光芒。

说起我刚进高中的时候,却也有有那么一点点的中二。看到个小da朋jie友jie,就忍不住欺mo负tou一番。后来一看这位小朋友成绩这么好,顿时就佩服得五体投地。于是不知道从什么时候开始,我就开始把自己定位成一个英er雄bi,要好好支持这个看起来弱不禁风的小朋友。年少时候的事迹虽然看起来很二逼,但是回忆起来也别有一番风味。愿意一起陪你 2b 的,或者见证过那些光荣事迹的人,又有几个呢。

记得一起做学习委员的时候,有时要到讲台上通知一下大家,或者做做一周的总结之类的。虽然平常总是贪生怕死,但是关键时刻在女生面前还是需要增加一点好感度的,于是我就英勇的走向讲台。作为大xiao哥di哥di,好感度还是很重要的。

你三年生日,高一时送了一只笔芯,高二时送了个笔盖,高三时准备送一个笔筒,看上去很完美。恩,看上去也很二逼。虽然现在还是不知道如何挑选礼物……你送我的那个笔筒,我现在还保留的着。

大部分和你在一起的时候都是在操场,两个人在操场上一圈一圈地逛着。说是运动运动,通常就是我一个人侃来侃去,想把我的欢乐带给你。想起来还和你解释了好久的 233 和 LOL 呢。说起来我平时话也不多,怎么和你在一起的时候就总想着说话呢……

上大学一来,碰面的机会就少很多了。(诶高中碰面的机会也不多)明知道你是吃货,但是却又不知道有哪些好吃的能带给你,真是遗憾。相反倒是你带我吃了 PKU 那边的好吃的。

说到策,我可是专业青姐策哦。三年也不知道策了你多少次。高一下期是策你的巅峰(还有海如语录),每次看着你说“atm别策了我还要写作业呢”,我才胜利者般的离开了,一点也没有打扰你学习的内疚 23333

平时看到你不开心,我都不知道怎么安慰你。情商有限,就只能陪你一起 sad 了。在高三下期的时候,你说你被那些专业书折磨的要疯了,希望我能给你一点支持安慰。但是我发现我不会,我没有特别的安慰技巧。看到你走回一教的背影,那一刻只能在心底里想我怎么这么没用 T_T

没想到你这么快就在 PKU 找 BF 了,真是吓了我一跳。或者我这身份有点尴尬,但我还是会在你身后支持你的。我没有韩雨骊那样的默契,也没有屹大王那样的暗语,我还是和三年前一样写着毫无修饰的句子说着平平淡淡的话听不到话中的话找不到该用的词,但还请留给我一份信任。祝你们幸福哦~

最后就祝某人生日快乐啦~顺便祝沸姐生日快乐~

Auld Lang Syne.

另外就不要吐槽什么我的文笔了(又变成形散神更散的散文了),光写出来就已经竭尽全力了。