作者: meathill

  • 2016年计划

    2016年计划

    辞旧迎新,继续做总结和规划。

    过去的2015年

    我对来到广州之后的生活很满意,食物好吃不贵,交通比较顺畅,空气好,四季都有鲜花盛开。广州房价不高,居住环境也有了很大改善。

    工作方面,虽然不太情愿,不过游戏项目还是停掉了。也好,集中精力做更有价值的事情。上半年设计和开发了自主后台,诞生了作为接下来工作基础的两个项目:Tiger Prawn + Lemon Grass。前端贯彻 MVP + SPA + 组件化的思路,后端提供 RESTful API,前后端彻底分离,很好的提高了工作效率。

    业余时间也没有荒废,虽然没啥特别像样的产出,不过最后一个季度还是抓紧时间感受了下各种新技术,并且好好的思考了一下下一代后台怎么去做。明年应该会投入更多的精力,希望能够玩成。

    糖尿病

    去年最大的变化,是糖尿病。广州天气比较热,我又喜欢喝饮料,去年有点不加节制。从九月份开始,就感觉自己在变瘦,一开始还挺高兴,幻想是饮食习惯改变带来的好处,后来发现瘦的趋势没有变化,体重下降了将近20kg,赶紧去医院,果然是糖尿病。住了一周多的院,如今靠嗑药维持。

    糖尿病最惨的地方在于自身的调节机制不可靠了,必须随时自测血糖,吃东西宁可少吃不可多吃,因为饿的体验是唯一的,饱则有各种程度差别。

    坏消息是现代医学没有证据证明糖尿病可以治愈,即胰岛功能彻底恢复;好消息是人不大需要100%的脏器功能,比如肾和肺,一个是备用的。

    坏消息是年纪大了以后,脏器本来就会衰竭,恢复到70%,可能扛不到最后;好消息是胰岛素是可以人工合成的,血糖控制的好没有并发症也不是大问题。

    哎,总之,告别胡吃海喝的岁月,顺势锻炼减肥吧。

    新年计划

    1. 妈的今年体重竟然达成105KG的目标,我不知道该笑还是该哭。明年继续努力,目标98KG。
    2. 篮球恢复到ZOL水平。
    3. 能够跑下超迷你马拉松,5KM。
    4. 完成后台新产品设计和开发。
    5. 好好吃改造成血糖记录和餐食分享工具。
    6. 升级博客,建立国内镜像。
    7. 完成几个系列文章
      1. 企业级后台开发
      2. Hybrid应用开发
      3. 插件模式(考虑改成HTML5……)
    8. 旅行呢,春节日本肯定去不了,东南亚没啥特别要列出来的,更远的地方限于买房买车两个大头有点不太现实……所以今年这方面就不许愿了
    9. 技术书籍最大的问题是没那么多值得看的……5本!
    10. 小说+电影,20本/部!
    11. 每周至少写一篇博客
      1. 重写 HTML5 文件 API
      2. 重写导出 Excel
      3. 完成草稿里的几篇文章
    12. 几个 Side Project
      1. 肉大师复活。
      2. 在线游戏平台。
      3. 上传插件 ES6 重构
    13. 买房!

    新的一年,继续加油吧。

  • Jetpack的博客总结2015

    Jetpack的博客总结2015

    WordPress的插件Jetpack如期给出了2015年的博客访问报告

    根据他们家的统计,过去一年里博客访问量约12000,不算太高。下半年墙的各种调整,各种出国流量收窄造成不小的影响,继续鼓励病魔早日战胜方校长,并希望ta有空去拜访下其它为筑墙工作的人。

    过去一年写了41篇日志,从量上来看大约完成了计划的80%。希望来年能完成。不过热门文章都是更早之前写的,年初计划的文章升级完成的不太好,继续放到来年吧。


    移动互联网时代,写长文变得很困难。很多博客都停更断更,硬派技术文越来越少,社交媒体上大多是《10种你可能不了解的JavaScript技术》、《15种2016年可能的前端趋势》,话语权近一步向金字塔尖汇聚,阮先生这种低端博主(仅就其技术言论)竟然能直接进入阿里做P8,名家无营养的文章开通打赏随随便便收几千上万……

    不过还是继续写吧,明年争取写更多,更高质量的文章,抽时间搞直播和视频,反正好为人师如我不这样做总有热情无处安放。就当积累人品好了。

    (图片来自于Google 和 http://happynewyear2016imagesy.com/merry-christmas-happy-new-year-wishes-messages-images-pictures.html

  • 直播写代码

    晚上直播写代码啦!如果有人看的话,大概10点半到11点半。

    以 Web 相关技术为主,写的多半是各种 side project。

    地址:http://www.douyutv.com/meathill

    欢迎光临,可以点播。

  • 我司行政的牛逼之处在于,每次出差都能在最后把我整的心里不爽,而且每次的方式都不一样。艹!

  • Surface Pro 移动办公

    Surface Pro 移动办公

    图文终于相关一回

    晒出住院照之后,各路亲朋好友基本都送来早日康复的祝福,这里一并感谢。不过有几位似乎很关注 Surface 的使用情况。经过这几天密集使用,尤其是在医院病房这种本身不是为办公设计的环境中使用(之前即使用多半也是在办公室里),我自觉积累了一些经验,在此分享给大家。

    整体环境

    整体环境请看照片。基本上,就是一张床,一个床头柜,一把椅子。床头柜有可以拉出来的小餐桌,旁边有足够多的插座。Surface 可以放在床头柜上,高低比较合适;小餐桌拉出来放键盘轨迹球;手机可以卡在键盘后面。病房里空间还算富裕,所以我可以放心霸占自己这条过道。

    底座

    我觉得底座还是很有必要的。首先 Surface 为了放便携带重量较轻,很容易移动,或者说,被线扯动。有了底座之后,稳定很多。其次,像我随身携带好多设备,充电也是个大问题,底座自带5个USB,基本可以不需要别的插头了。

    而且我还要使用键盘鼠标,Surface 本身只有一个USB,即使扩展也很难满足。想象一下,没有底座的 Surface,为了连上这些设备,拖一个巨大的 USB Hub,还能稳定使用么?

    有了底座,还可以更好的规制其它线缆,比如耳机。

    键盘鼠标

    键盘盖是个好东西,不过可能只在咖啡厅好用,这个时候我还是喜欢分离的键鼠。首先,机械键盘的手感自不消说。其次,带着键盘盖实际上对平面的要求更高,反而不如分解后适应性强。这点普通笔记本也一样。最后,键盘盖上的触摸板使用面积太小,实在不方便。

    最后说到应用优化。由于大部分 Windows 设备都是标准分辨率,跟苹果刚好相反,所以绝大多数 Windows 应用都没有针对高分屏做过优化,导致的结果就是可视面积可操作面积很小,虽然Surface是触屏,但真正能用指头点的机会并不多——Windows平板应用也太少太差。笔就更不用提了,手臂悬空点来点去想想就累。所以鼠标仍然是最重要的操作媒介。而狭小空间里,轨迹球就是最佳选择,操作精准,反应迅速。

    应用

    应用软件仍然是 Windows 系统下最大的优势,虽然 iOS 和 Android 也有一些类似产品,但使用体验实在不可同日而语,比如完全不支持快捷键,输入定位很糟糕,大量功能缺失等等。这也没办法,面对纯触摸设备设计的产品,它们的交互要求必然是简单直接,传统桌面软件借助键盘鼠标实现精准操作的体验很难达到。

    新的交互方式出现之前,平板类产品只能作为消费产品,很难成为生产工具。

    总结

    Surface 是个很棒的产品,便携性一流,配置完善,散热也很好。Windows 10也不错,新版界面和触摸屏相得映彰。只是其它应用要么未经优化,要么压根就没有,整体使用体验并不好,无法离开键盘鼠标,自然对环境的要求也比较高。不过软件本身的性能效果都很棒,远非平板类能及。

  • “作作作,作ju作够你就知道了”

    语出我妈。

    小时候我经常被我妈用这句教训。长大了之后教训少了,于是便作了起来。来到广州之后,一来天热,二来也没人管束,一时间忘乎所以,把饮料当水喝,终于喝出糖尿病。

    于是这辈子第一次住院,而且一住就是半个月。感谢我司领导允许我在医院半工半休,感谢家人的支持。

    奉劝各位不要不信邪,大家都是普通人,有问题赶紧看,平时要自律。

    我好饿。

    PS:好的方面是许了3年的105KG即将达成……

  • PHP匿名函数使用父作用域的变量

    PHP匿名函数使用父作用域的变量

    (自古图文不相关)

    同事问为什么要用 array_maparray_filter之类的函数,用 foreach 不就好了?

    答:这样写出来的代码语义更清晰,阅读更容易。

    那么如何使用其它变量呢?global 么?

    答:global 肯定不合适,不过怎么写我也不知道。待我查查。

    在PHP中,不能像JS那样直接使用闭包里的其它变量,必须通过声明继承的语法,写出来是这样的:

        <?php
    
        $arr = [1, 2, 3];
        $split = 2; // 分界
        $arr = array_map(function ($value) use ($split) {
          return $value < $split ? 0 : $value;
        }, $arr);
        var_dump($arr);
    
        // 输出
        // 0, 2, 3
    

    重点是那个 use ($split)


    参考:

  • npm start, npm stop

    npm start, npm stop

    使用 npm 可以直接调用 package.json 里面 scripts 标签里定义的脚本。比如,Astinus 项目中,index.js 是入口JS,并且需要 ES6 支持,就可以这样:

        // package.json
        {
          "scripts": {
            “start": "node index --harmony"
          }
        }
    

    然后直接运行

        npm start
    

    即可。

    那么怎么终止进程呢?

    首先要在 index.js 里增加一句

        process.title = 'astinus';
    

    声明该应用的标题是“astinus”,然后增加脚本:

        {
          "scripts": {
            "start": "node index --harmony",
            "stop": "killall SIGINT astinus"
          }
        }
    

    之后就可以

        npm stop
    

    参考:

  • Compass + cleancss 导致的灵异小问题

    Compass + cleancss 导致的灵异小问题

    问题不大,不过很诡异。代码如下:

    SASS:

    .some-class
      display: none
    
    .other-class:blank
      display: none
    

    HTML:

    <div class="some-class">...</div>
    

    理论上说,这样这个div应该不显示。在本项目中,它的确没显示;但是在另外一个将本项目作为依赖的项目中,它却显示出来了。

    经检查,本地开发和部署时,直接使用 compass compile 生成CSS,compass 配置中,设置输出模式(output_style)为 compressed,结果是这样的:

    .some-class{display:none}.other-class:blank{display:none}
    

    而在作为依赖时,用到的则是 grunt-contrib-cssmin 处理过的CSS,刚才那句就被压缩成

    .some-class,.other-class:blank{display:none}
    

    :blank伪类尚未被Chrome中支持,于是整条规则都被忽略,导致div显示出来。

  • 啊,前端的轮子啊

    啊,前端的轮子啊

    时势造英雄。

    IT科技几十年来诞生过不少概念,但直接拿来就能作为宣传材料的不多,HTML5算一个。借助智能手机、微信微博快速普及带来的平台优势,HTML5快速成长,接连攻陷投资界、创业界、广告界,现在说起H5,在我的圈子里几乎无人不知无人不晓。

    资金充裕,整个行业自然地位上升,财务上升;继而自然从业者增加;继而就会出产大量的产品。而作为前端从业人员,最大的感觉就是:轮子真TM多啊……这不,我前几天计划学习一下近来出现的各种新技术,今天正好看到Bable最新入门The Complete Guide to ES6 with Babel 6,正好我写xgame-api的时候饱受node不能完全支持ES6之苦,马上坐正准备好好看。

    然后就看到:

    Keeping up to date

    Here’s a little story: while writing these guides, I learned that the require hook in babel-core used by Gulp and Mocha is already set to be deprecated.

    跟上变化

    讲个段子:就在我写这套入门的时候,babel-core里的require钩子,就是Gulp和Mocha使用的那个,被标记为“弃用”

    Babel6是24天之前发布的,这套文章是上周写的,核心API已经发生变化了。这让我不禁去想,紧跟业界潮流的成本会不会太高了?ES6的确提供了不少语法糖,以及终于像样的模块管理。如果现在就开始使用ES6,不仅可以提前享受到这一切,到标准真正到来的时候,可以省去升级的时间。

    不过这里面之考虑了标准变化,没有考虑需求变化和产品变化。如果是抽象性很强的代码,比如某种算法库,或者某个功能组件,那么从开发之日起,遇到的变化可能不会太多太大。但如果是业务代码,就不得不遭遇各种各样的修改和变化,于是功能稳定便于维护就更加重要。紧跟潮流,意味着必须付出多余的精力去应对各种不稳定导致的节外生枝,一不小心,业务逻辑就要延期交付鸟。

    又有个切身例子。Tiger Prawn(后面简称TP)立项的时候,模块管理无论是AMD还是CMD还是sea.js都难以让人满意,所以我就用了最简单的直接引用和命名空间。前几日用Browserify感觉不错,赶上TP遇到个问题,就寻思着重构下。结果努力一天之后,架构变化还是太复杂,遂放弃。次日修正实际问题只花了半天。生产中,还是优秀的架构设计更重要,毕竟开发和维护效率至上;追新追潮流几乎都可以算是作死的行为。

    那么什么时候学习新技术呢?程序员都应该做业余项目,不是私活,而是根据一些平日里瞎想出来的需求,用一些新技术去实现,即使实现不了,也能够实地演练各种新技术。这样,有朝一日新技术成熟了,就可以很快应用到新产品中。