2016.08.直到猴年马月仍然没有更新本博客, 前来更新一下.

image

没更博客很久, 原因: 人懒, 货湿, 事多, 拖延

简单更新下近况, 依然在程序员的道路上一路过来, 技能树丛Win应用开发, 点到业余Web开发, 点到Android应用开发, 总觉得技术方面越做越浅, 虽然写业务更顺手, bug越写越少, 但是一直都没有什么质变, 做的东西难点不多, 琐碎事儿更多. 还好就是工作环境会偶尔变化变化, 隔段时间就会介入或开启个新的项目, 继续努力为项目做些小贡献, 小影响吧.

本来想努力成长成全栈工程师, 结果现在是仝栈工程师, 太多挖了填不上的坑, 精力有限, 兴趣太杂, 娱乐太多, 所以只能缩小一点眼界继续走着.

现在书还是老买, 还常常买电子书, 但看完全本的却越来越少, 似乎之过一遍脑子, 也没留下多少记录,

关于以前的链接推荐

最近这几年, 信息严重过载, 时间严重不够用, steam里边几十款游戏通关的只有个位数, 多看里边上百本书, pocket里1k+的条目, innoreader里边1w+的未读feeds

最近用相对多的服务/应用/产品

  • 即刻的app, 从最早期版本开始用, 大概占了手机看信息的大头
  • diaro, 用了几个月的日记服务, 从listpro->evernote->280daily到现在这个应用
  • wiznote, evernote国际版应该用了有3年会员了, 借着涨价机会, 换到wiz体验一把
  • 码农周刊, 码天狗, android weekly, 之所以不推荐链接, 是因为现在别人出的链接集合已经很有趣了, 而且多的看不完:(.
  • boxcrypt + 坚果云, 针对dropbox做个backup, 速度快, 免翻墙是个优势, 可以在移动端方便的存取文件.
  • pebble time, kickstarter早鸟版, 仍然是对电子手表有着固执的喜欢, 虽然用到的功能只有收通知, 表盘和定时器.

最近新技能get/老技能review

  • 小鹤双拼
  • android textview中span的各类应用
  • android 泄漏调优, 内存占用调优
  • 内嵌Webview应用
  • android gradle构建技巧
  • reactive基本知识
  • leancloud折腾
  • 统计数据分析入门
  • 桌上足球入门
  • 猫奴入门
  • 远程办公
  • 重温设计模式/OOD
  • 重温flask/celery/ansible
  • 重温PC开发

之后打算?

  • 当爹入门
  • 恢复运动, 跳绳锻炼
  • 重新写东西

相对苦恼的几个问题

  • 精力有限, 兴趣杂乱, 开坑太多
    • 开坑侠客风云传
    • 开坑Starbound
    • 开坑Minecraft
    • 开坑行尸走肉
    • 开坑JOJO
  • 社交闭塞
    • 里外的忙碌, 桌游活动停摆, 没机会社交啦
    • 昔日的好朋友, 梳于见面, 只是偶尔在im上问候一下
    • 最近沙龙的组织, 参与, 落下了好几期, 也是里外的忙碌

总结

博客停更的这么长时间里, 周边的事物还是不停的变化, 虽然自己也在不断成长, 但回看起来发现自己并不能完全适应某些变化:

  • 自媒体从博客, 到微博, 朋友圈, 公众号, 到现在的个人直播. —- 而自己主要的时间仍仅仅消费着博客.
  • 软件/互联网产品背后 大数据/分布式/微服务/深度学习/移动端优先/公众号开发. —- 而自己只能把握其中的部分, 更多尚且还没开坑.
  • 股票涨涨跌跌, 房价你涨我涨, 经济形势不断变化. —- 作为渺小的一位局外人, 只能望洋兴叹而已.

面对自己心中的浮躁, 需要那种"不动如山"的心境来平静一下, 提醒自己什么是自己真正想要的. 保持年轻的赤子之心, 但提醒自己不要因过于追逐表象而筋疲力尽, 踏实的挣扎的做一些持之以恒的事儿吧.

Posted in GLog | Leave a comment

GLog[2015.1] 过完年来说过年的意义

看了一条微博: "过年的意义不在吃喝,而在团聚。可是大多数家庭的人口越来越少。过去大家庭几十口人一起过年的事不再有了。…".

我自觉是同样的感受, 自己年龄长了, 离家出来上学, 毕业出来工作, 团聚越来越少了.

小时候是盼着过年, 那些天可以一页作业都不写, 放炮, 压岁钱, 到处野. 现在却害怕过年, 不长的假期, 耗费不少精力在路上, 看到感到长辈们一年年的变老.

今年过年和老婆一起去了她们家, 结婚摆酒后第一年, 根据当地习俗要走一遍亲戚家吃顿饭. 过年的时间一半用去了应酬, 另一半也几乎都被不规律的我废去了.

过年在steam上下了了个叫做铲子骑士的复古游戏, 难度适中, 对我来说有点儿挑战.

spring in action这本书四个部分, 看到最后一部分, 自己简单实践后的感觉是, spring里头带的各类的feature绝对是万金油啊. 是一个有历史很重的framework, 学习使用成本确实有一点, 经过折腾, 我可以用gradle+spring-core来做简单的schedule定时触发爬页面服务, 爬到再去写到数据库里. 通过spring-data操作数据库, 简单的场景完全不用写query语句. 不知道性能的代价会有多少(看到的评测数据gemini web比spring强十多倍), 也不知道哪些有名的项目在用它. 但是了解他对我在Android/Java方面的技术栈会是一个补足.

过年的意义, 对我而言大概是提醒自己又白白长大了一岁, 懊悔读了一年还没读完的书, 提醒自己应该更成熟和懂事, 提醒自己应该更珍惜某些东西. 今年是羊年, forever young, 希望保持一颗永远年轻的心.

脑洞依旧很大, 想些不找边际的东西, 只是也许哪天就又会被人实现了.

开工大吉.

Posted in GLog, GWeekly | Tagged , , | 2 Comments

GLog[2015.0] 新年, 你好!

ansatsu-class-ec

如题

新年你好, 越来越怕过年了. 还记上次猴年的春晚, 跨年时候主持人误将迎接猴年说成了迎接羊年.

那时候我最常上的BBS可能是猫扑, 那会儿和人面对面聊天会不好意思, 但是在QQ上却能很主动的去聊幼稚无聊的话题, 聊得无比开心.

而如今BBS优质内容不再, 信息爆炸, 而我还坚持用着有点没落了的rss, 可能是因为老了, 始终没法上手依赖微信.

时间有限, 从简说起.

  • 过了27岁, 工龄5年, 婚龄1年.
  • 身体方面, 偶尔打一些羽毛球, 锻炼不够.
  • 生活习惯, 晚睡晚起有所改善, 变得有点早睡早起了.
  • 工作方面缓慢长进, 感觉有一年多没有在博客中做回顾了, 想法总是更多一些, 做的总是慢一点.
  • 做微云这个产品一年, 继续成长, 独立做了一些大功能, 之后遇到些新变化, 做新的实验项目, 转战android平台.
    于是我从一个职业打杂的PC端Windows程序员, 业余的Web端程序员, 进而平行切换到了移动端Android程序员.
    以前的技能之后肯定还都有用的上的地方, 只是不断生疏是难免的, 需要有点时间多实践些想法. 渐渐发现技术的基础与深度还能多去探索一下, 现在感觉到继续做还来得及.
  • 业余关注的技术点还是有点杂, 除了用express.js写了个网站上线跑了一把, 别的就更不值一提了.
    办深圳swift-ios沙龙, golang-后台开发沙龙. 业余折腾的就是express.js, flask, golang浅尝辄止.
    认识些技术小伙伴, 偶尔能八卦下技术周边, 也许以后还能一起工作
  • 娱乐方面, 今年看过的电影感觉没什么值得一说的, 追几个番,<暗杀教室>,<无头骑士异闻录>.
  • 读过的书, 闲书在多看上看了一箩筐, android的书, packet出版社的翻了两本, 重新在看java并发编程, java中间件实现, 感觉没有过去看的系统, 而且也没做更多记录.

新年计划?

  1. 多更新博客, 有些想法来的快, 去的快, 其实可以记录一下的. 我基本不用微博, 所以不妨再次用博客记录好了.
    我之前用的feedsky的服务挂掉了, 所以阅读器上的那个rss源已经完全死掉了, 真是可恨. 但即使这样我还会继续更新博客, 可以用feedpress.me的feed链接来订阅.
  2. 发布独立app, 既然做android开发, 做独立app天经地义, 服务器端也要顺带做掉才行.
  3. 其他计划暂无

推荐链接:

好了, 就回顾到这里吧! 睡觉去了:)

Posted in GLog, GWeekly | Tagged , | 1 Comment

Basic IPv6 Configure/ IPv6 基础设置 on Ubuntu

如题, 简单的需要在一个分配了IPv6的VPS上用上IPv6, 能够ping6通只有ipv6的机器.

假设我这里的网卡设备是 eth0

查看路由

ping6 -c 1 ff02::2%eth0 #查看路由网关, 之后的{IPv6-Gateway}

设置路由

ip -6 route # 查看路由列表
sudo ip -6 route add default via {IPv6-Gateway} dev eth0 # 设置路由列表

设置IP地址

sudo ip -6 addr add {IPv6-IPAddress}/64 dev eth0 # 添加给你分配的IPv6全局地址
Posted in Useful Tips | Tagged | Leave a comment

Saltstack 与 Ansible

最近一个月业余时间主要又上手一些新的技术栈, 于是用express.js做了这样一个数据发布和展示的网站:VPSRecord.com.

得益于最近一直折腾saltstack, 让我可以随便在一个salt-minion上安装和初始化好nginx和mysql, supervisor等各种环境, 加上自己写的bootstrap.py的初始化脚本, 网站可以在一个全新的ubuntu系统上, 两个命令就快速部署.

在了解saltstack之余, 感觉到了一些saltstack使用上的一些长处和短处, 比如master/minion进程有时候会挺占用空间, 换一个master时候也有点麻烦, 有时候一个job执行, 收不到一些minion执行结果的返回, 用一个内网机器做master其他minion是没法连接你的.

于是又了解了一下ansible, 是一个不需要master/deamon, 只是基于ssh的配置管理系统, 内置模块仔细看了一下也挺齐全了, 准备有时间去试试, 官网还有10个节点以上需要付费的一套ansible UI控制面板.

这里列一些看过觉得不错的saltstack和ansible的slides吧:

saltstack

ansible

Posted in Lists, Useful Tips | Tagged , | 3 Comments

List of Continuous Integration & Deployment service, 持续集成和部署的服务一览

最近又在yy给自己的私有项目加一个CI, 列举一下现有的一些服务. 私有项目免费的几乎没有(codeship有限次的免费版), 用过public的travis-ci, 可惜没工夫折腾jenkins+vagrant这样的东西.

Provider/厂牌
Travis-CI
Drone.io
CircleCI
CodeShip.io
wercker
Bamboo
AppVeyor
Posted in Lists | Tagged , | 2 Comments

Nodejs tips: npm Installing a specific version of a package, NPM安装特定版本包

First, find the version of the package(handlebars etc.)

首先, 先看看这个包有哪些发布版本(这里以handlebars为例)

$ npm view handlebars versions

OUTPUT:

npm http GET https://registry.npmjs.org/handlebars
npm http 304 https://registry.npmjs.org/handlebars

[ '1.0.2-beta',
  '1.0.4-beta',
  '1.0.5-beta',
  '1.0.6-2',
  '1.0.6',
  '1.0.7',
  '1.0.8',
  '1.0.9',
  '1.0.10',
  '1.0.11',
  '1.0.12',
  '1.1.0',
  '1.1.1',
  '1.1.2',
  '1.2.0',
  '1.2.1',
  '1.3.0',
  '2.0.0-alpha.1',
  '2.0.0-alpha.2',
  '2.0.0-alpha.3',
  '2.0.0-alpha.4' ]

install the 1.3.0 version.

安装1.3.0版本.

npm install handlebars@1.3.0 -g

OUTPUT:

npm http GET https://registry.npmjs.org/handlebars
npm http 304 https://registry.npmjs.org/handlebars
npm http GET https://registry.npmjs.org/optimist
npm http GET https://registry.npmjs.org/uglify-js
npm http 304 https://registry.npmjs.org/optimist
npm http 304 https://registry.npmjs.org/uglify-js
npm http GET https://registry.npmjs.org/wordwrap
npm http GET https://registry.npmjs.org/async
npm http GET https://registry.npmjs.org/source-map
npm http 304 https://registry.npmjs.org/wordwrap
npm http 304 https://registry.npmjs.org/async
npm http 304 https://registry.npmjs.org/source-map
npm http GET https://registry.npmjs.org/amdefine
npm http 304 https://registry.npmjs.org/amdefine
Posted in Useful Tips | Tagged , | Leave a comment

Github stars: 总结一下自己star过的项目

发现在github上面星标的项目太多, 回看起来太麻烦了, 在这里整理一下, 也作为分享.

2014 年:

eternicode/bootstrap-datepicker

一个datepicker控件, 依赖bootstrap风格的, 最近自己折腾的东东用到

Trimidea/inews

PHP写的一个小论坛, appin站推荐, 界面很简约.

jsdelivr/jsdelivr

一个CDN repo, 开发者可以把自己的js放在上边, CDN加速文件.

adunkman/connect-assets

express.js/node.js用来发布资源的辅助工具, 借鉴了rails pipeline的方式. (最近业余做express.js的开发, 考虑给静态内容做缓存)

serby/versionator

同样也是给express.js/node.js做资源版本, 以方便缓存的工具.

tomatofirmware/tomato

关于tomato的固件, 给自己的一个路由器刷了这个固件, 想看看具体是怎么实现的, 为什么要对每一个设备做特定的兼容.

ReliefLabs/EasyTomato

一个基于tomato的固件, 只支持我的路由器, 也想看看他的内部是咋回事.

devoopsme/devoops

一个基于bootstrap的dashboard控件, 里面依赖的很多组件都值得看看.

未完待续

Posted in Uncategorized | Leave a comment

Saltstack tips: 查找对应node的pillar配置

pillar配置用于保存一些敏感信息, pillar模块提供了一些基本的函数:

  • ext
  • get
  • item
  • items
  • raw

假设我的pillar设置:

mysql:
  root_password: 1234567
apps:
  app1:
    databases:
      - dbname
    database_user:
      name: gohan
      pass: 123

执行item来获取这两项pillar配置, (如果使用items不加参数, 会获取所有的配置项, 项目太多比较不好找关键的项目):

sudo salt "node1" pillar.item mysql apps
node1:
    ----------
    apps:
        ----------
        app1:
            ----------
            database_user:
                ----------
                name:
                    gohan
                pass:
                    123
            databases:
                - dbname
    mysql:
        ----------
        root_password:
            1234567

pillar.get 可以进一步取更深层次的值, 比如apps:app1, 但是经过我的实验, 这仅对minion已经加载了这个pillar时才起作用.

pillar.rawpillar.item 效果类似, 但文档中说明那个也是支队minion已经加载了pillar才起作用.

今天在折腾mysql用state来安装和创建数据库, 在ubuntu环境下比较轻易就成功了. 安装mysql时候用debconf自动设置数据库用户root的密码, 同时用pip的state去安装mysqldb-python, 这样才能让saltstack来使用mysql的module进一步创建数据库和用户.

Posted in Useful Tips | Tagged , | Leave a comment

Nodejs Tips: 在virtualenv下使用nodejs

如题, python的辅助工具virtualenv, 让python的扩展库版本独立, 且不会污染主环境, 最近在用express.js写页面, 也希望能用到类似virtualenv的工具, 没发现一个特别合适的, 于是我的想法是直接装一个node到virtual的bin下面, 额外修改一下环境变量.

在ubuntu 12.04环境下一切正常. 这里虚拟环境路径以virtenv为例

1. 安装node到虚拟环境(virtenv).

1.1 直接用的是官网二进制包 (Gohan觉得用二进制包比较方面快速)

# 安装额外工具
$ sudo apt-get install curl

project$ virtualenv virtenv
project$ wget http://nodejs.org/dist/v0.10.28/node-v0.10.28-linux-x64.tar.gz
project$ tar zxvf node-v0.10.28-linux-x64.tar.gz
project$ cp -r node-v0.10.28-linux-x64/* virtenv/
project$ rm node-v0.10.28-linux-x64.tar.gz

1.2 直接用源码编译安装

# 编译需要额外安装编译工具
$ sudo apt-get install curl build-essential openssl libssl-dev pkg-config

# 先激活现有的virtualenv环境
project$ . virtualenv virtenv
(virtenv)project$ curl http://nodejs.org/dist/v0.10.28/node-v0.10.28.tar.gz | tar xvz
(virtenv)project$ cd node-v0.10.28
(virtenv)node-v0.10.28$ ./configure --prefix=$VIRTUAL_ENV
(virtenv)node-v0.10.28$ make install
(virtenv)node-v0.10.28$ deactivate
(virtenv)node-v0.10.28$ cd ..
(virtenv)project$ deactivate
# 删掉所有node源码
project$ rm -rf node-v0.10.28/

2. 修改virtualenv的active脚本

为了让virtualenv下的node也能用全局的NODE_PATH环境.

编辑虚拟路径下的active脚本(virtenv/bin/active)

找到修改virtualenv中PATH的地方

_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH

# 在这里照猫画虎写一段NODE_PATH的重定义
# 如果存在$NODE_PATH, 则追加, 否则直接定义一个NODE_PATH
_OLD_NODE_PATH="$NODE_PATH"
if [ -n "$_OLD_NODE_PATH" ] ; then
    NODE_PATH="$VIRTUAL_ENV/lib/node_modules"
else
    NODE_PATH="$VIRTUAL_ENV/lib/node_modules:$NODE_PATH"
fi
export NODE_PATH

在deactive()函数中, 找到还原virtualevn中PATH得地方

deactivate () {
    # ...
    if [ -n "$_OLD_VIRTUAL_PYTHONHOME" ] ; then
        PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME"
        export PYTHONHOME
        unset _OLD_VIRTUAL_PYTHONHOME
    fi
    # 在这里照猫画虎NODE_PATH的还原
    # 如果之前的_OLD_NODE_PATH没有定义, 则不去处理, 否则就还原. 这里我查到了-v的用法, 不确定非bash能不能支持.
    if [ -v _OLD_NODE_PATH ] ; then
        if [ -n "$_OLD_NODE_PATH" ]; then
            NODE_PATH="$_OLD_NODE_PATH"
            export NODE_PATH
            unset _OLD_NODE_PATH
        else
            unset NODE_PATH
            unset _OLD_NODE_PATH
        fi
    fi
    # ...
}

3. 完事儿

好了, 现在在virtualenv下头可以放心用npm install -g了不用担心环境被污染了.

Posted in Useful Tips | Tagged , | Leave a comment