生日

觉得自己记性还行,准确的说是对数字比较敏感——能够背出几十位朋友的电话(虽然这个能力现在已经毫无卵用),以及几百个人的生日。

生日这个东西其实不是刻意记住的。只是在QQ资料人人网资料微博资料之类的地方看到或者聊天时听到之后,这个四位或者八位数字就会成为我对这个人的印象(不只是初印象)的一部分然后完全没法抹掉。

记下来的这些生日像是在脑子里构造成了一个散列表,以至于每天一过零点看到手机上的日期就会想到,嗯今天似乎是某某的生日。有时候这样的思绪会带入到一整天的生活状态里,尤其是同一个日子如果是好几个人的生日的话,我有时甚至会觉得浑身不自在。比如一位很好的朋友、一个曾经还会写信但已经失联多年的旧友和一个这辈子再也不想有任何瓜葛的人的生日都在同一天,那每年的这一天对我来说只有错乱二字可以形容了。

其实每次想到“某某生日到了”的时候都有冲动想发一条祝福的消息,但真正发出的次数寥寥。总是会想得太多:他会不会觉得其实我们没有这么熟;她会不会认为我是cyberstalker;他会不会以为我是在把生日备注到昵称后面的那种例行公事的客套;她会不会觉得我要开始向她借钱或者有求于她… 想到这些就只好把冲动和祝福一起藏在心底了。

如果我认识或不认识的朋友们看到了这篇无聊的博文,希望你能接受到我诚挚的祝福——提前祝你生日快乐,每天都快乐。:)

随便写两句吧

突然发现好像这个地方像我开的其他坑一样——已经长达5年没有更新了。

但其实也没有这么突然?大概去年的这个时候突然接了一个维护团队项目 WordPress 插件的活儿之后,还是时不时有打开这个blog看看,甚至有一天还误发了一堆测试文章…

这几年来感觉自己的表达欲也在与日俱减,甚至有时候可以一整天不说话。今天恰好是1024,要不然随手写一下当下的所想吧。看了一下这个博客居然每天都有一些零散的PV,感谢每一位点进来的陌生朋友。

工作

5年前顺利毕业了,因为忙着转硕和毕业的事情,找工季与其他人相比已经滞后了太多,最后去了一个我在找工作之前完全没有听说过的公司——但好在同事们都特别nice,干活也不累,甚至一度让我有一种想在这个公司躺一辈子的念头。在那里度过了近五年里相对最开心的一年半之后,因为部门调整之后看起来毫无希望,于是我就赶紧跑路了。

因为着急跑路所以只投了面了一家公司就决定马上入职,这个决定现在回头看感觉还是挺冲动的,但这次的运气也不错,遇到了好老板、好同事和挺好的项目。到了现公司之后才发现”正规“的开发流程确实和之前的糙快猛的”敏捷“开发(其实不算真敏捷)大不相同——注重代码质量,有正式的design review和code review,有完善的测试计划……这对于之前React、jQuery和原生JS混搭能用就行、写完代码合并完PR直接往线上发布的我来说,完全适应确实花了不少时间,不过感觉这些变化对我自己还是帮助颇多的。

以及虽然换了家公司,但做的也不是纯前端… 在前公司写了Go,在现公司开始写了C#。

再然后就是机缘巧合,换了项目,然后换了组,开始做一些自己更感兴趣的事情。虽然也有不少压力,而且在有的同事看起来我过得并没有那么balance,不过整体的感受还是不错的。

生活

5年下来感觉自己也没发展什么新的爱好,除了偶尔会玩一玩Switch上的低智游戏之外,好像没有太大的变化。

前段时间捡起了在读书时候搞的阿卡贝拉,试了一下编曲到录音到修混到录像剪辑的全过程,还尝试在B站投了稿。自娱自乐也挺好的。

还是唱不好和声。有修音软件真好。

因为频繁搬家(其实是随便找了这么个理由),这些年也没怎么寄明信片了——当然,最近也没怎么出门了。

不确定现在的生活是不是自己最初期望的样子,不过年过三十好像也没有什么想要做出大改变的冲动了。

禁止APP内Webview页面跟随系统缩放字号

最近开始做适配移动端的网页,通过APP内部的Webview展示。为了在不同分辨率的设备上都能按相同的布局来展示,使用了rem布局的页面自适应方式:

(function (doc, win) {
  var docEl = doc.documentElement,
  resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
  recalc = function () {
    var clientWidth = docEl.clientWidth;
    if (!clientWidth) return;
    docEl.style.fontSize = 100 * (clientWidth / 320) + 'px';
    alert(docEl.style.fontSize);
  };

  // Abort if browser does not support addEventListener
  if (!doc.addEventListener) return;
  win.addEventListener(resizeEvt, recalc, false);
  doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window);

样式表中文字的字号,元素的高宽、间距等都以rem为单位。

但是测试的时候发现了一个很糟糕的问题,当Android手机将系统的字号大小设置为非标准时,页面的布局受到了严重的影响,包括字号在内,所有以rem为单位的属性都被放大或者缩小了。为了保证布局不受影响,在网上查阅了一些应对这个问题的解决方案,经过了自己的实践验证后整理如下:
继续阅读

最后还是做了改变

今天发现在校内门户上的身份已经从博士生变成硕士生了。

四个月前决定转硕以后,在很短的时间里经历了博士生综合考试与硕士毕业论文开题报告、办理转硕手续,决定转行后仓惶地刷书刷题开始连轴转地面试,再到选定最终的去向,对我这种一贯行事犹豫不决的人来说,可以说是一段很不一样的经历了。

在我对自己的人生规划有决定权后,几乎所有的“大决定”在做完以后我都没有后悔——当然对于读博这件事,头一两年里我也坚定地认为自己的选择是正确的。回想起过去的这三年多(算上大四的话就是四年多了),从一开始的志得意满想要在业界做出点东西,到后来的觉得能发够论文毕业就好大不了以后改行,再到近段时间的坐在实验室里半页paper几行代码都看不进去只是坐着和自己无谓地较劲,画在坐标系上就像是个下坡的曲线。想想也是,走得喘不过气时总会有种下一步就是上坡路的错觉,但其实更可能的是这条路完全不适合自己。

还是很感谢老板给了我再次选择的机会,现在的愿望就是顺利毕业吧。

Leetcode 365. Water and Jug Problem

题目描述

You are given two jugs with capacities x and y litres. There is an infinite amount of water supply available. You need to determine whether it is possible to measure exactly z litres using these two jugs.

Operations allowed:

  • Fill any of the jugs completely.
  • Empty any of the jugs.
  • Pour water from one jug into another till the other jug is completely full or the first jug itself is empty.

解题思路

这个问题实质上是求解关于a和b的方程ax+by=z是否有整数解的问题。a和b为正数时表示给一个空壶倒满水,负数时表示把一个水壶倒空。容易得知当且仅当z是x与y的最小公约数的倍数时,该方程有整数解,所以本题的关键是判断z被x和y的最大公约数整除即可,关键的算法是辗转相除法。

目前尚存在争议的一个问题是在最后量取的步骤中水壶能否被多次使用(比如x=1, y=2, z=5的情况,是否可以用1+2+2=5来实现),该问题的讨论区里也在讨论中。目前的test cases好像是认定为最终只能用两个水壶在某一时刻里存有的总水量来衡量,所以z>x+y的情况都判定为false了。

代码

class Solution {
public:
    int gcd(int x, int y)  
    {
        return y==0?x:gcd(y, x%y);  
    }
    bool canMeasureWater(int x, int y, int z) {
        if(z < 0 || z > x + y)
            return false;
        if(z % gcd(x, y))
            return false;
        else
            return true;
    }
};

福冈二日

去年秋天写的“京都二日”随着不靠谱空间提供商的服务器倒掉,连个快照都找不着了… 🙁

嗯,其实是承蒙老板关照,第一次参加校际的学术交流活动。实验室和日本两所大学相关专业的院系一起举办的活动,每年由三所学校轮流承办,今年是在福冈的九州大学。掐头去尾整整两天时间里,workshop的日程还是挺满的,没有时间到处逛,活动范围基本也只限定在会场与酒店周围——好在算是在市中心,也还算是挺繁华的。
会场所在的JR博多城

这个workshop的主题是Machine Perception and Robotics,然而两天的oral和poster session里,除了这个以外也有一些其他方向的报告,比如image processing、visualization、基于computer graphics的3D制作等等,都挺有趣的。可能对于三所学校来说,机器感知与智能这个专业下面都包含一些其他方向的工作吧。印象比较深刻的是另两所学校里有一些关于生物医学和机器人学的研究,从思路上看挺受启发的。
继续阅读

写了一个自动转发微博的bot

其实算是看到微博树洞微信树洞一类的东西都挺火的,于是动手写了一个。
也是因为微博的粉丝服务平台面向所有用户开放了,所以可以通过下发私信的方式去执行相应的操作:发微博在正文中 @平台帐号,给平台帐号私信指定的指令(比如uid中的某几位的运算结果),平台帐号转发微博。

首先是使用微博API的 statuses/mentions 接口,get接收到的最近的@主体帐号的微博(access_token直接给固定的粉丝服务平台的token即可),为了避免干扰可以筛选出原创微博;
从最新的微博id往前与sender_id进行比对,直到找到符合的微博或达到某个设定的阈值;
比较当前时间与sender_id上一次使用这个功能的时间(存入数据库或者直接粗暴地存在本地csv文件里),判断时间间隔是否超过阈值,以免滥用刷屏;
判断微博正文里是否有不希望出现的词或者链接中是否包含淘宝地址(直接用strstr()就够了;判断链接用 short_url/expand )等,视情况予以回复信息警告或拉黑;
使用 friendships/show 判断是否关注主体帐号,如果没有则提示关注后再使用(涨了不少粉..);
如果都没有问题的话,往 statuses/post post相应信息就好了,顺便把sender_id和微博id记录下来。

继续阅读

一个学期又过去了

已经懒得不会起标题了…

半年里发生了好多事,希望自己在以后的日子里能够有所进步吧。

这里还是没什么干货,虽然曾经发过(本地没有备份)因为服务器宕机再也找不回来了;
改编的2048在遭遇不断的山寨以后,这里每天还是能有400-500IP的访问,也是蛮神奇的;
还是唱不好和声。…

觉得Matlab除了调试不便以外还是挺有趣的。本科毕设的时候有一步卡在VS和Matlab混编那儿最后也没做完,其实动动手也就是几分钟的事情 🙁 ..还是自己太懒了。

新的一年,不能再碌碌无为啦。

总结一下这两天的一些想法吧


有网友已经并到ROC这一步了并且po图@了我,表示一下震惊。其实我自己在原版2048和所有不改变难度的2048变种里都还没玩到512呢… 当然可能是因为自己太懒了。 🙂

— 以下是正文 —

做这个变种的缘由很简单。
当时2048已经很火了并且人人网和微博上已经出现了各种奇葩变种,我作为一个喜欢瞎捣鼓的家伙也打算试试。于是有一天晚上跟基友聊天的时候有了下边一段对话:
继续阅读