Javascript实现逐帧分解gif动态图

最近手上的一个项目需要用fabric.js实现将gif图片导入canvas的功能。由于fabric.js不原生支持gif,因此使用fabric.js的sprite类来实现。
要将gif转换为sprite sheet,需要先将gif逐帧分解。

我们使用的是原作者基于jsgif魔改的库。

代码

https://github.com/hyriamb/gif-splitter

Demo

https://hyriamb.github.io/gif-splitter/

参考资料

http://www20.atpages.jp/katwat/wp/?p=5544

Javascript代码同步化

我最近一直在写js。在这期间,我在群里提的最多的问题就是

函数a在函数b执行之前就执行了,我应该怎么办?

我有一个用python写的网易云音乐的下载器,我最近在试图把它用nodejs重写一遍。
它的逻辑非常简单。但是我写了一半就写不下去了,因为一层一层的回调嵌套,代码已经成了 >形。

js一个重大的特点就是异步非阻塞,但是在一些情况下,下一步的操作需要依赖上一步的执行结果。这样就会有回调中再回调的情况出现。 当业务逻辑一复杂,回调的嵌套越来越多,可读性就会变差,维护起来也会很困难,这就是回调地狱。
node有很多第三方的模块用来将异步调用同步化,来解决这个问题。
Continue reading “Javascript代码同步化”

使用 scrapy

我们以爬取www.xinli110.com上的部分文章标题为例

新建一个scrapy项目

scrapy会初始化一个项目,项目文件包括:

  • items.py定制需要储存的文件的域,类似于orm
  • pipelines.py管道
  • settings.py设置相关参数
  • spider文件夹 定制爬虫

scrapy爬虫的组成

scarpy抓取一个页面的大致流程:

  1. 下载器下载HTTP响应内容
  2. 下载器传给执行回调函数进行解析
  3. 解析后调度器进行过滤,查重等等
  4. 将数据传给管道,作进一步处理

Continue reading “使用 scrapy”

ubuntu升级内核及开启BBR TCP拥塞控制

最近了解到了BBR这个东西。BBR是Google开发的一种TCP拥塞控制算法。很多人反映境外的VPS用上BBR之后,速度得到了明显的提升。
如果有兴趣了解一些原理上的东西,可以参考这里:Linux Kernel 4.9 中的 BBR 算法与之前的 TCP 拥塞控制相比有什么优势?
从Linux内核4.9起,BBR已经被整合进Linux内核中,所以直接升级内核到4.9以上的版本并开启BBR模块即可。
只有KVM和Xen架构的VPS可以自行升级内核,因为OpenVZ无法进行内核层级的操作。
Continue reading “ubuntu升级内核及开启BBR TCP拥塞控制”

macOS Sierra下安装配置nginx, php7与mysql

首先我们需要安装macOS上的包管理器HomeBrew。
访问brew.sh,执行首页上的那行命令即可。
完成后可以把brew源换成国内的镜像源,参考LUG@USTC
完成后 brew update

php7

HomeBrew的默认源里不包含php,需要先tap

Continue reading “macOS Sierra下安装配置nginx, php7与mysql”

PHP获取微信小程序的带参数二维码

最近公司的一款产品需要用到微信小程序的带参数的二维码。虽然微信提供了现成的API,但是整个过程中有非常多的坑。
微信的官方文档:获取二维码 · 小程序

获取Access Token

获取二维码的接口需要用到应用的Access Token。只需要向微信的提供的接口发送 AppIDAppSecret即可获得Access Token。每个Access Token的有效期为7200秒,我们的方案是获取到Access Token之后将其写入Redis并设置7200秒的过期时间。
Continue reading “PHP获取微信小程序的带参数二维码”

Google Daydream View开箱体验

在今年10月初的Made by Google 发布会上,Google发布了早在6月的I/O大会上就提及了的Daydream VR平台。

购买

10月中旬,Daydream 已经上线包括Google Store、Verizon、BestBuy在内的美国各大线上平台。
我10月中旬在Google Store下单了一台Slate颜色的Daydream View。11月中旬从位于Mira Loma的Google仓库发货,经过4天的运输到达转运公司仓库,再经过大约10天的国际转运,清关,国内转运等等流程,在11月26号到达我的手中。
总共的花费大约是标价79刀 + 税6刀 + 运费80软妹币。

开箱

包裹和国际运单
%e6%97%a0%e6%a0%87%e9%a2%98
Daydream包装
619a2bc4993684296d809ccbc05cad53
Daydream View本体和控制器
78f61fe1cccfa249d76ba104c6f59035
Daydream控制器上有一个可点击的触控板,一个APP按钮,一个Home按钮,和音量键。使用USB C接口充电。
f65ef181fef66865d80632448fae948e
Continue reading “Google Daydream View开箱体验”

Laravel 学习笔记

安装

Laravel 可执行文件位于 $HOME/.composer/vendor/bin
使用 laravel new创建新项目

配置

目录权限

Directories within the storage and the bootstrap/cache directories should be writable by your web server or Laravel will not run.

Application Key

.env配置文件中设置 Application Key,它应该有32 个字符长。
使用

生成一个key。

美化链接

Laravel自带 .htaccess文件,需要开启Apache的 mod_rewrite模块
– nginx配置

Continue reading “Laravel 学习笔记”

使用Composer

Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。

安装

让 composer 可以在全局进行调用

将官方数据源修改为国内镜像

Continue reading “使用Composer”

使用命令行登录校园网无线认证

我校校园网使用的是网页Portal认证,需要使用curl之类的命令模拟浏览器请求来实现自动登录。

抓取POST请求

在点击登录前打开Chrome审查元素,在Network选项卡中勾上 Preserve Log
点击登录,选中登录时发送的请求,即可获取POST的表单内容。

使用wget命令

使用curl命令

在Android上使用curl和wget

Android的BusyBox不自带curl,wget命令则十分老旧且充满bug。因此,不建议使用Android的BusyBox上自带的命令。
Termux是一个包含 apt包管理器的,极其强大的终端模拟器。安装Termux后,使用 apt install安装相关命令或依赖,然后即可使用上述方法实现自动登录校园网。
如果需要桌面快捷方式,需要另外购买Termux:Widget插件。