forecho 的独立博客

把生命浪费在美好的事物上

为什么要开源

2015年12月17日

我写了一个开源项目

2015 年初的几个月,Yii2 框架发布了,出于对 Yii2 的热爱,再加上是年底,工作没那么忙,本着学习和致敬 Ruby-China 的心态, 我开始用 Yii2 开发一个社区。其实 PHPhub 社区也不错,但是没有 Yii 节点,呵呵。

由于以前有一点的 Yii1 的基础,所以 Yii2 上手起来还算顺利。在网上找了一下资料,多看官方文档,开发起来也是很快的。

开发的过程中参照了几个项目,去读他们的源码,学了不少东西。

我一个人把基本功能开发完之后,然后发帖宣传了一下,还欢迎大家一起来参与进来,也建立一个 QQ 群,陆陆续续有人加进来,但是实际上参与开发贡献代码的的人只有几个。

Forecho 的利器

2015年12月15日

介绍一下你自己和所做的工作。

Hi,大家好,我是 forecho,目前在做程序后端开发,主要是 PHP,业余时间也折腾下 iOS 和 Python AND Ruby。工作已经有4年多了,目前在深圳。

你都在使用哪些硬件?

  • 一台2012年款的 MacBook Pro 15寸的中配,8G 内存,2年前被我换成 256G SSD 之后,除了没有 Retina 屏和有点重之外,其他的都还好。
  • iPhone5 用了3、4年,自己换了 home 键和电池,打算再坚挺1年,直到 iPhone7.
  • 戴尔(DELL)UltraSharp U2412M,配合 MacBook 做双显示器用。自从买了一个电视盒子,也用来看电视了。
  • Kindle5 对于爱看书的我,2012 年年底就买了,一直用到现在,看过不少书,真心觉得是最值的一个电子设备,每天上班比背着。前几天买了海淘了个 KPW 3 还没到货。
  • iPad mini 2,之前有一个 iPad Air 1 的后来嫌太重了,换了 mini 了。本来打算用来用 PDF 的,现在沦落到看各种视频,给女朋友打游戏的地步了。
  • 极路由,当然其他智能路由器也是可以的,配合 Shadowsocks 可以实现路由器翻墙,设备只要连接这个 WiFi 就在墙外,在家可以自由的刷 Twitter,看 YouTube。
  • 天猫魔盒,当初买这个就是图他便宜,感觉越用反应越慢。
  • 酷冷至尊的一款 87 键茶轴机械键盘。本来打算买个 FILCO 圣手二代,但是感觉太贵,没下手,换了这个中等价位的,感觉还可以。

处理 Git 忘记切分支修改代码的情况

2015年12月15日

场景

有时候没注意分支,直接在 master 上做开发了,但是这是团队开发的大忌。那如果发生了这种情况怎么办,也不用着急, 我教你怎么解决。

解决问题

假设你现在在 master 分支上已经修改了文件,那么我们可以使用下面的命令把当前未提交到本地(和服务器)的代码推入到 Git 的栈中:

1
$ git stash

查看效果:

1
$ git status

创建分支 && 切换分支:

1
$ git branch dev && git checkout dev

还原代码:

1
$ git stash apply

ok,问题解决。下面我们再补充点知识。

如何让团队里的工程师对工作不厌烦

2015年11月30日

原文:《Coding is boring, unless…》

作为一名工程师,我从来没有坚持同样的工作超过两年了。

每个新工作是一个不错的职业选择,高薪在我们行业中也是很常见的。但是我离职让我之前的老板不是很高兴。其中一些试着说服我,但是我觉得留下来很无聊,所以我不能留下来。

(免责声明:我很幸运的生活在一个编程工作比程序员更多的地方,所以我换工作有很多选择的余地。)

我现在作为 Enki 公司的联合创始人兼首席技术官。因此,我负责了公司的工程师文化。我工作的一部分是要确保我们的开发人员不会像我过去有时候一样的无聊。

为了帮助我们的团队,我们已经设计了一些策略对抗无聊并且已经应用到我们公司。因为这种策略目前运行良好,我想在这里分享下。

Ubuntu 使用 PPA 安装 PHP 扩展

2015年11月19日

简介

PPA,即 Personal Package Archives 缩写,也就是个人软件包集。

有很多软件因为种种原因,不能进入官方的 Ubuntu 软件仓库。 为了方便 Ubuntu 用户使用,launchpad.net 提供了 ppa,允许用户建立自己的软件仓库, 自由的上传软件。PPA 也被用来对一些打算进入 Ubuntu 官方仓库的软件,或者某些软件的新版本进行测试。

使用

我一直不太喜欢用源码编译的方式安装 PHP 扩展,主要是麻烦。然后偶然发现了这种方式安装 PHP 扩展,真是太方便了。

下面我们来讲讲怎么使用:

安装 PPA

1
2
sudo add-apt-repository ppa:ondrej/php5
sudo apt-get update

安装 php mcrypt 扩展

1
sudo apt-get install php5-mcrypt

PHP 中的动态属性和 StdClass

2015年11月08日

翻译 Dynamic Properties in PHP and StdClass

JavaScript 和 Python 允许对象实例的动态属性。事实证明,PHP 也是如此。看官方 PHP 对象和类文档可能会导致你相信动态实例属性需要自定义 __get 和 __set 魔术方法。其实不用。

简单,内置的动态属性

看看以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class DynamicProperties { }
$object = new DynamicProperties;
echo isset($object->foo) ? 't' : 'f'; // f
echo PHP_EOL;
// Set Dynamic Properties foo and fooz
$object->foo = 'bar';
$object->fooz = 'baz';
// Isset and Unset work
isset($object->foo); // true
unset($object->foo);
// Iterate through Properties and Values
foreach($object as $property => $value)  {
    echo $property . ' = ' . $value . PHP_EOL;
}
// Prints:
// fooz = baz

25岁之后

2015年09月13日

现在是2015年9月13号17点53分54秒,是我迈向26岁之后的第三天了。过生日的方式是请了几个好朋友吃饭,大家一起聊聊天,女朋友送了我礼物,很是开心。

2011年11月8号的时候我在知乎回答了一个问题,26 岁的时候你正在做什么?想要做什么?由于当时只有21岁,所以我写下了下面这个希望:

我现在21岁了,还没毕业,大三没读了,暑假出来实习就没回去上课了,一直到现在。 所在的公司呢?是个创业型的小公司,刚开始干着挺有激情的,现在感觉有点累了,不过,还是要挺住,多学习一点东西。 26岁的时候,我希望能有着一群朋友,然后我们组成一个团队,有着一个共同的梦想,那时候的我们正在为之而奋斗,像《海贼王》中的路飞他们团队。 26岁的时候,我希望我希望我的父母、弟弟、爷爷、以及身边的亲人、朋友身体都很健康。 26岁的时候,我希望我也能做出一个百万级用户的互联网产品出来,至于做什么,我现在都还在想。 26岁的时候,我希望我已经找到了一个能懂我的女生。 26岁的时候,我想我已经创业了。 26岁的时候。。。。

那么现在我已经26岁了。时间过的真的很快啊,离这个回答都4年过去了,我来深圳也3年多了。那时候的我是在第一家公司,而现在的我都不知道换了几家了,但是现在的这家公司我待了快2年了,我自己都不敢相信自己能在一个公司待上这么久。

关于健身

2015年09月04日

前言

意识到我们这行职业天天坐办公室,再加上自己身体平常也比较虚,平常也比较懒,不爱运动。

一直有在关注跑步的事情,一天突然知乎上看了很多关于跑步的事情,整个人就跟打了鸡血一样,然后决定去跑步,拉上兔子一起。

开跑

啥废话也别说,先跑起来再说。一个周日我们早早吃完晚饭就去附近一站远的体育场跑步去了。刚开始跑第一圈就有点累,然后就开始走了,总之那天我们基本上是走一圈跑一圈的状态,跑了三圈,一圈600-700米左右吧。

感觉还是个很不错的开头的。一开始是打算每天去跑的,但是想想难度有点大,然后确定了每周2、4、7去跑。

确定之后就开始买了「装备」了,买了运动短裤和手机的肩带,后来又买了运动蓝牙耳机。

「跑步日」那天下班之后我们会现在公司那边先吃饭,然后再坐地铁回家,提前一站 - 也就是体育场下车,体育场旁边正好有一个沃尔玛,方便了我们存包。

刚开始我们还去换运动短裤,后来就懒得换了,再后来也懒得去跑了……

坚持了半个月左右吧。放弃是因为兔子来大姨妈了,我一个人也不想跑了。其实我每次去跑之前都有点想放弃,但是不敢也不想说,但是每次跑完之后感觉还是很好的。跑步之后大汗淋漓的感觉很舒畅!

感觉有些事情你一旦放弃了,后面就很难坚持了,哪怕就放弃了一天。当然我们还会去跑的!

解决「vagrant Up」timeout 问题

2015年07月30日

前言

之前我有写《Windows 开发利器》文章提到使用「VirtualBox + Vagrant(打造 Linux 开发环境)」, 到现在为止在公司使用也有几个月了,到现在为只出现过两次问题。

第一次启动不了

第一次主要是我电脑下班之后没关机,睡眠模式,结果半夜停电了,导致强制关机了,最后导致 vagrant up 命令启动不了了,最后我又重新安装了我的 vagrant。 所以,切记,一定要学会打包自己的 vagrant

打包自己的 vagrant

1
2
3
4
5
6
$ vagrant package
[default] Attempting graceful shutdown of VM...
[default] Clearing any previously set forwarded ports...
[default] Creating temporary directory for export...
[default] Exporting VM...
[default] Compressing package to: /Users/astaxie/vagrant/package.box

有了这个备份就是可以放心的使(zhe)用(teng)vagrant 了。

下面我们重点来讲讲今天遇到的这个坑。

Yii2 高级版新建一个 Api 应用

2015年07月27日

先在项目的根目录下复制一份 backend 为 api:

1
cp backend/ api -r

拷贝 api 环境

1
2
cp -a environments/dev/frontend environments/dev/api
cp -a environments/prod/frontend environments/prod/api

修改 environments/index.php 文件之后的代码(主要是添加了一些 api 相关的代码):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
return [
    'Development' => [
        'path' => 'dev',
        'setWritable' => [
            'backend/runtime',
            'backend/web/assets',
            'frontend/runtime',
            'frontend/web/assets',
            'api/runtime',
            'api/web/assets',
        ],
        'setExecutable' => [
            'yii',
        ],
        'setCookieValidationKey' => [
            'backend/config/main-local.php',
            'frontend/config/main-local.php',
            'api/config/main-local.php',
        ],
    ],
    'Production' => [
        'path' => 'prod',
        'setWritable' => [
            'backend/runtime',
            'backend/web/assets',
            'frontend/runtime',
            'frontend/web/assets',
            'api/runtime',
            'api/web/assets',
        ],
        'setExecutable' => [
            'yii',
        ],
        'setCookieValidationKey' => [
            'backend/config/main-local.php',
            'frontend/config/main-local.php',
            'api/config/main-local.php',
        ],
    ],
];