微信小游戏-海盗来了打金初体验

引子

假期在家空余时间, 发现微信小游戏突然火了, 群友推荐一款名为: 海盗来了 的小游戏
稍微体验了一把感觉很不错, 真正实现了微信对小程序的期望 —- 取代原生 app
得益于日益强大的 js 引擎, 在手机端也能做出很华丽的效果, 而且性能也不算很差
回到正题: 此款游戏有所谓金币的概念, 而获取金币的一个方式是不断的点击转动转盘
寻思如何让脚本来代替我们来干苦力, 便有此文

Read More

小米武研 web 后端开发面试杂记

引子

2018/03/20 多云

我参加了小米武汉研发中心的面试, 岗位是 web 后端开发
当中还有一个小插曲, 在当天的上午接到人事电话, 约好当天下午 3 点现场面试
电话结束前说好了以电邮的形式告知详细信息, 然后一直到当天下午 2 点都没收到电邮
可能是被拒了我也没在意, 直到当天下午 3 点一刻的时候, 人事打来电话询问到哪了
我回复没有收到电邮, 没有准备动身… 最后还是定好当天下午 6~7 点进行现场面试

Read More

公众号开发 - 保证不超过 5 秒 (fpm + nginx)

引子

做微信公众号开发的时候会遇到超时问题
例如被动消息回复, 微信有限制必须在 5 秒内得到相应
否则就会提示 该公众号暂时无法提供服务, 请稍后再试

解决方案

fpm + nginx

使用 nginx 的配置保证 5 秒内必须响应

1
2
3
4
5
6
7
8
9
10
11
error_page 504 =200 /custom_504.html;
location = /custom_504.html {
return 200;
}
location ~ \.php$ {
# 这里只设置了 read 的超时
# 因为另两个多用于大型架构
# 单机运行用不上
# 设置 4 秒是因为还需计算网路传输时间
fastcgi_read_timeout 4;
}

效果

2017-08-28 开始明显看到变化

refs

http://www.imooc.com/video/9120

FFmpeg 乱记

misc

1
2
3
4
5
6
7
# 转码
ffmpeg -i Busines.mp4 -c:v libx264 -crf 19 Busines.flv

# 裁切
# -ss is the starttime and -t is the duration
# ref: https://vollnixx.wordpress.com/2012/06/01/howto-cut-a-video-directly-with-ffmpeg-without-transcoding/
ffmpeg -i Busines.flv -c copy -ss 25 Busines_cut.flv

drawtext

https://ffmpeg.org/ffmpeg-filters.html#drawtext
https://superuser.com/questions/939357/ffmpeg-watermark-on-bottom-right-corner

concat

https://stackoverflow.com/questions/34803506/how-to-push-a-video-list-to-rtmp-server-and-keep-connect

1
2
3
4
5
6
7
8
import os

prefix = '/home/ubuntu/DX-BALL2-Video'
with open('../videos.txt', 'w') as fp:
for each in os.listdir():
if each == 'tmp.py':
continue
fp.write("file '{0}/{1}'\n".format(prefix, each))

laravel-from-scratch-2017 笔记

ref: https://laracasts.com/series/laravel-from-scratch-2017/

Model

Scope function

ref: http://laravelacademy.org/post/6979.html#toc_18
在 Model 中定义 scope 开头的 public function
相当于创建一个作用于当前 Model 对象的(这和普通写法有什么区别?)新的链式调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
/**
* 只包含活跃用户的查询作用域
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopePopular($query)
{
return $query->where('votes', '>', 100);
}

/**
* 只包含激活用户的查询作用域
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeActive($query)
{
return $query->where('active', 1);
}
}

调用时不需要加上 scope 前缀
$users = \App\User::popular()->active()->orderBy('created_at')->get();

如果是普通写法会产生这样的问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
public static function custom_wh($data){
return static::where_in('categories_id', $data, 'AND');
}
}

// this works fine
$posts = Post::custom_wh(array(1, 2, 3))->get();

// but this says custom_wh is not defined in the query class
$posts = Post::where_in('tags', array(2, 3, 4), 'AND')->custom_wh(array(1, 2, 3))->get();

Querying Relationship Existence

ref: http://laravelacademy.org/post/6996.html#toc_11
查询存在的关联关系, 例如
博客有许多 tags, 我们不希望显示没有 post 的 tag

1
2
// Retrieve all tags that have at least one post...
$posts = \App\Tag::has('posts')->get();

View

View composer

ref: http://laravelacademy.org/post/6758.html#toc_2
网站的公共部分需要 assign 变量的时候, 比如 blog 的 sidebar 需要博客归档
可以使用 view composer 来避免在不同方法中重复 assign 变量
在 AppServiceProvider 中的 boot 方法中

1
2
3
4
5
6
7
public function boot()
{
view()->composer('view.name', function($view) {
// just like data assign in controller
$view->with(['var name here' => $var]);
});
}

Controller

RESTful Controller

ref: http://laravelacademy.org/post/6745.html#toc_6
php artisan make:controller TasksController -r
Route::resource('tasks', 'TasksController');

1
2
3
4
5
6
7
GET    /tasks => TasksController@index  // 列出所有 task
GET /tasks/create => TasksController@create // 显示创建 task 的表单页
POST /tasks => TasksController@store // 创建 task
GET /tasks/{id} => TasksController@show/{id} // 列出指定 task
GET /tasks/{id}/edit => TasksController@edit/{id} // 显示编辑指定 task 的表单页
PATCH /tasks/{id} => TasksController@update/{id} // 编辑指定 task
DELETE /tasks/{id} => TasksController@destroy/{id} // 删除指定 task