为 PHP 做单元测试(UnitTest)

随便用 Google 百度一下就可以找到这个: PHPUnit – The PHP Testing Framework

貌似也还有别的类似框架或者自己写 PHP 脚本来完成,但这个就不在我们今天的讨论范围啦。

Getting Started with PHPUnit

Download

We distribute a PHP Archive (PHAR) that contains everything you need in order to use PHPUnit. Simply download it from here, make it executable, and put it into your $PATH, for instance:

1
2
3
4
wget https://phar.phpunit.de/phpunit.phar
chmod +x phpunit.phar
sudo mv phpunit.phar /usr/local/bin/phpunit
phpunit --version

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
class Money {
    private $amount;

    public function __construct($amount) {
        $this->amount = $amount;
    }

    public function getAmount() {
        return $this->amount;
    }

    public function negate() {
        return new Money(-1 * $this->amount);
    }

    // ...
}

TestCode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
use PHPUnit\Framework\TestCase;

class MoneyTest extends TestCase {
    public function testCanBeNegated() {
        // Arrange
        $a = new Money(1);

        // Act
        $b = $a->negate();

        // Assert
        $this->assertEquals(-1, $b->getAmount());
    }

    // ...
}

Run

1
2
3
4
5
6
7
8
➜  PHPUnitExample git:(master) ✗ phpunit --bootstrap src/Monkey.php tests/MonkeyTest.php
PHPUnit 5.7.5 by Sebastian Bergmann and contributors.

.                                                                   1 / 1 (100%)

Time: 95 ms, Memory: 8.00MB

OK (1 test, 1 assertion)

比较好理解,加载一个类,然后执行相应的单元测试。 PHPUnit 完整例子

还要看相应的文档,了解一下高级用法。

高级用法(TODO)

Refs

Getting Started with PHPUnit

Linux 开发备忘

Terminal 使用相关(Mac 下测试通过)

.bash_profile生效方法

1
2
source .bash_profile
exec bash --login

获取当前时间的unix时间戳

from: http://www.jb51.net/LINUXjishu/227114.html

1
date +%s

awk 命令

http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html

grep 查询日志

linux grep命令

1
grep -n "xxx" log/xxx.2016xxxxx* 

压缩解压

1
2
3
4
5
// unzip
tar -zxvf xxx.gz

// zip a dir
tar -zcvf xxx.gz dirName

Terminal 光标移动

http://blog.csdn.net/teng_ontheway/article/details/50159891

1
2
Ctrl + a    // 回行首
Ctrl + e    // 回行尾

Apple ATS 问题

苹果 ATS 的标准是 LTSv1.2 且 AES256 的 RSA.

有问题的两个URL:
1. 不可以在 App 中正常获取数据

1
https://ss0.bdstatic.com/9bA1vGba2gU2pMbfm9GUKT-w/timg?nuomina&size=w9999&quality=100&sec=1418745600&di=b0c7531995ca2ccad8b63d5ad53a1fff&src=http%3A%2F%2Fe.hiphotos.baidu.com%2Fbainuo%2Fcrop%253D0%252C1%252C979%252C592%253Bw%253D230%253Bq%253D79%2Fsign%3De9a35c7a3012b31bd3239769bb281a4b%2Ff11f3a292df5e0fe030b493c556034a85edf72f8.jpg

2. 可以在 App 中正常获取数据

1
https://gss0.baidu.com/7LsWdDW5_xN3otqbppnN2DJv/bainuo/pic/item/64380cd7912397dd597ec13f5e82b2b7d0a28782.jpg

这两个 URL 都符合标准,而且都可以使用苹果开发者论坛里面给出的方案来校验通过:https://forums.developer.apple.com/thread/14816

1
nscurl --ats-diagnostics https://www.example.com

解决方案

NSURLConnection 在iOS10上面会出现这个 9802,并不是服务器的问题。 需要切换为 NSURLSession 来解决这个问题。 后续的网络请求应该都不再使用 NSURLConnection,应该是苹果 SDK 的 bug,但因为这部分已经是不再维护的了,也别为难苹果了,使用最新的 API 吧。

Refs

Npm Install 本地安装与全局安装

研究 node.js 时,发现使用 javascript 也可以写 shell 脚本,用到了下面这个命令:

1
npm install shelljs --save-dev

顺带研究了一下 npm install 的使用,如果不带 -g 的话,是保存在当前目录下的【本地安装】,否则是全局安装。

--save--save-dev 这个适用于有 package.json 的情况。 保存在 dependenciesdevDependencies中。

Ref

npm install —— 从一个简单例子,看本地安装与全局安装的区别
请问 npm install —save 与 npm install —save-dev 的区别

Python - Virtualenv 基础使用

python 的环境折腾起来还是比较复杂,不说 macOS 下面有个默认 python,自己还需要装一个自己需要的版本(2.7或3.x)。然后不同的开发需求,可能就会使用 pip 安装不同的包,甚至不同的项目需要安装不同版本的包,这就麻烦了,需要 virtualenv 来协助了。

安装 virtualenv

virtualenv 不是 python 自带的,需要独立安装

1
pip install virtualenv

创建一个指定 python 版本的环境

1
virtualenv -p /usr/bin/python2.7 ENV2.7

激活

1
source ./bin/active

关闭

1
deactive

Refs

Python—Virtualenv简明教程

redis-源码研究之-INCR

调用类似微博的关注 Feed 流的实现时,发现早在2009年,redis 官方就写过这样一篇文章:通过 redis 的各种 API 来做数据存储,方便的实现 Push 的关注流。

简单研究了一下,最终改了一点点代码,详情见 Github

今天主要研究一下这个命令 INCR ,看 redis 是如何实现这个命令在多线程访问的。

微信小程序初步调研

先做下说明,本文基于各路网友的观点做了下总结,给大家分享,都有相关的转载链接,如有遗漏请大家联系我添加。

什么是小程序

小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。也体现了“用完即走”的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用,但又无需安装卸载。— Allen Zhang

张大大在年初发布应用号时也说过一些定位:

1.关于给谁做:很多服务和功能用户需要的频次很低,还会在手机上有推送,其实没必要。开发一个APP的成本很高,很多小的商户或者企业承担不起,也没必要。
2.关于做成什么样子:应用会静静的呆在那里,你需要的时候就去用。
3.关于放在哪:公众号之中也可以插入服务之类的,但是体验不好,用户也不好找。

这几句话也不是很清晰,但应该也可以理解一些。整体来说,小程序还是会比较符合微信价值观:好产品应该是用完即走,微信应该是给用户提供便利,而非浪费时间。希望用户在微信里看到的都是自己愿意看到的东西,也希望用户能够留出来更多的时间去做其他的事情。 所以微信正在尝试做减法,为微信用户提供一个类似APP模式的账号一样,不主动推出骚扰用户,用户需要的时候在去找这个应用号。

可能会有哪些入口呢?

小程序入口在哪里?用户怎么实现触手可及,随时随地可用,用完即走的体验?目前透露的方式是通过搜一搜、扫一扫。可能的方式很多种…

iOS 10 OTA Beta Profile 使用

每一年的 iOS 系统更新,都可以通过开发者账户进行下载试用。不过下载更新前,还是建议先将手机备份一下,使用 iTunes 备份即可。然后开发者的话,还是同时下载最新 Xcode 8 Beta,以免手机更新了不能调试~

今年的 iOS10 (也许之前也有,只是我不知道而已)推荐使用配置文件的方式进行,见下图:

具体操作如下:
1. 在 iOS 设备上直接打开这个界面,下载配置;或在 Mac 上下载配置,通过 AirDrop 或者其它工具将配置下载到 iOS 设备上
2. 按提示操作,安装配置文件
3. 安装完成后系统重启
4. 进入系统-设备-通用-软件更新, 这时就可以看到 iOS10 的更新信息了,像正式版一样安装更新即可。

注:
1. 如果一直卡在『正在验证』,请耐心等待,我等了十几分钟还不行,重启N次后还是等才解决问题。当然也有同学说,把 Sim卡 弹出,再插入解决了问题;
2. 如果系统空间不足,按提示信息确认应用稍后下载即可,这个为苹果点赞,方便!目测这些应用还是你不太常用的 App。

希望能对更新 iOS Beta 软件的同学有点帮助~

端性能测试之连拍王

iOS 性能测试,有很多种技术手段。
1. 打点
2. Instruments 检测

但这两个常用的办法,有时也不能给出非常合理的数据。比如最近在研究 ReactNative,它在渲染时真实消耗的时间就不太好搞(如果有误请帮忙指证)。
– 打点的话,都是一些内部时机,想找到渲染成功的点,还需要在 RN Native 部分源码打点才行吧。
– Instruments 跑了一下,看到了各种 JS 与 OC 交互的耗时,并没找到渲染结果的时间。。

最后实在没办法,跟 QA 聊了下,使用『极速连拍王』拍照分析时间消耗。
1. 在 AppStore 搜索『极速连拍王』或 点此链接
2. 打开进行拍照授权;
3. 然后就直接开拍啦。。。

默认设置是30张/秒,具体耗时就数多少张照片即可。
另外这个 App 的稳定性不太好,查看图片部分并不太好用,全部删除照片的话,要长按某张照片,然后全部选中,点删除(滑动到下面长按不容易Crash)。

Study FE Skills With FreeCodeCamp

偶然的机会,让我结识了 FreeCodeCamp 这个在 JavaScript 语言中 Star 数排名第一的项目。
这是一个很好的学习前端技能的平台,Free

不管是否有基础,想学一些编程,都可以从前端开始学起,很好的网站。目前我已经用了有空的两天时间断断续续的学习了一些课程,大概总共用了3-4个小时左右,我更了解HtmlCSS的一些东西。
在这里可以学到以下东西:

  • 前端技能
  • 数据处理相关
  • 后端技能
  • 开源项目(公益)

这是我的学习主页,大家有兴趣可以一起学~~
http://www.freecodecamp.com/shjborage