Akawa

ETY001的博客

在centos下编译安装shadowsocks-libev,需要先安装必要的依赖,命令如下:

1
yum install -y gcc automake autoconf libtool make build-essential autoconf libtool gcc curl curl-devel zlib-devel openssl-devel perl perl-devel cpio expat-devel gettext-devel git asciidoc xmlto

然后克隆下源代码,

1
git clone https://github.com/madeye/shadowsocks-libev.git

从源码编译安装

1
2
3
cd shadowsocks-libev
./configure
make && make install

这样即可编译好一个新的ss,所有程序是以ss-开头,其他系统下面的编译安装,请参考
https://github.com/madeye/shadowsocks-libev

使用 brew 安装完 nginx 后,想用 launchctl 来实现 nginx 的开机自启动。
但是由于 80 端口属于 1–1024 间的端口,需要 root 权限,于是执行下面两条命令,
即可让普通用户也可以建立80端口。该方法其实就是给 nginx 加上 s 操作权限。
让普通用户可以以 root 权限执行。

1
2
sudo chown root:wheel /usr/local/Cellar/nginx/1.2.6/sbin/nginx
sudo chmod u+s /usr/local/Cellar/nginx/1.2.6/sbin/nginx

在使用ubuntu的apt-get安装php-fpm的时候,默认的nginx配置文件的php相关部分少了如下一行代码

1
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

把这行代码加在 include fastcgi_params; 之前即可。

最近项目需要做一个欢迎页,效果差不多就是有点PPT的样子,然后用鼠标滚轮可以控制页面切换。

在实施过程中,遇到的问题就是jquery的 mousewheel 事件触发的机制让人太纠结了。

由于我们一般滚动了 x° 的圆心角才认为是滚动了一次,而计算机在滚动 x° 的过程中,只要有度数的变化,
就会触发一次事件。这个在回调事件的第二个参数即可看出来,第二个参数叫做 delta,即变化量。
也就是说这个变量其实是存储的从开始滚动到当前滚动位置,滚动过的一个类似圆心角的值。

那么我们就需要在这个回调函数里面去做文章,让我们意识中的滚动一次能实现出来。

具体的方法是,加入一个全局变量,来记录每一次的滚动开始,并且每次开始后的一秒内,
不再执行回调函数,直到1秒钟的时候重置这个全局变量。之所以设置一秒是因为我们平时的习惯,
差不多就是1秒钟滚动一次滚轮。代码差不多就是下面的这个样子:

window.is_wheel = false;
$('body').bind('mousewheel', function(event, delta) {
  if(window.is_wheel==true)return;
  window.is_wheel = true;
  setTimeout(function(){
    window.is_wheel = false;
  }, 1000);

  if(delta > 0){
    next_page();
  } else {
    prev_page();
  }
  return false;
});

这样,频繁触发的问题就解决了。另外需要注意的是,如果翻页是个动画效果,那么请把翻页动画效果的时间设置在一秒内,
因为可以保证每次滚动滚轮只执行了一次翻页操作,即翻页动画的回调函数也会按照预期顺序执行。

自 Chrome 21.x 开始默认只允许从 Chrome Web Store (Chrome 网上应用店)安装扩展、应用及脚本,
虽然此举增强了安全性但也给众多依赖油猴及 Stylish 脚本的用户造成了很大的不便,
那么现在应当如何在谷歌浏览器安装 Web Store 外的第三方扩展程序呢?

以下三种方法将可解决“只可添加来自Chrome网上应用店的扩展程序、应用和用户脚本”的问题。

方法一、本地拖放安装

1. 下载扩展程序/脚本程序至本地计算机;
2. 将其直接拖拽到浏览器的“扩展程序”页面(设置-扩展程序)即 chrome://chrome/extensions 页面。

方法二、开启浏览器支持

右击 Chrome 桌面快捷方式,选择-”属性”-”快捷方式”,
然后在”目标”一栏尾部添加参数 -enable-easy-off-store-extension-install ,
然后再运行浏览器
就可以像以前那样正常安装 Web Store 之外的第三方扩展应用及脚本程序了。

方法三、开发模式安装

也是先将扩展程序下载保存到本地,
然后将下载来的文件后缀名*.crx 改成*.rar,
这样你就得到了一个压缩文件,
然后右键解压这个压缩文件得到一个文件夹。
然后在浏览器里打开扩展程序页面( chrome://settings/extensions),
选中右上方开发人员模式复选框,
然后再点击左上方的”载入正在开发的扩展程序“按钮,
选中刚刚解压出来的文件夹然后点确定即可

应用地址:https://oc.mypi.win

之前一直计划接触下 swoole 、redis 、docker。最近时间稍微宽裕些,于是就把这三者揉到一起,
把之前自己用的剪切板重新写了一遍,之前的那个是个nodejs版的。

redis在上一个公司有过接触,但是由于都是封装在底层的,平时用的时候,也只是调用方法,所以认识不够深刻。
这次读了些资料,主要是看了下redis提供的数据结构。现在我对这货的核心功能的认识就是,用C实现了一个安全操作层,
用来对内存进行读取写入操作,并且实现了几种数据结构,用于存储结构化的数据。

开发目标是应用要能允许建立多个剪切板,每个剪切板有个唯一标示,每个剪切板的容量是50条。因此先想到了队列,
于是最后用的是redis的list的数据结构,用户提供剪切板的name和进入剪切板的password,产生唯一标示的方法如下:

1
$hash = md5($password . $name);

然后用$hash作为这个剪切板list的key。

另外一个问题就是如何把websocket的frame_id 和 $hash 关联起来。
frame_id其实就是client_id,即连入到服务器的客户端的唯一标示,$hash和client的关系是,一对多的,
即一个剪切板,可能会有多台终端接入。

最后考虑了下,使用redis的hash数据结构和list数据结构来完成这个对应关系。hash数据结构用来存储
frame_id 到 hash 的关系,即通过该结构,提供 frame_id 即可找到 对应的剪切板list的key,即 $hash 值。

那么list结构是用来做什么的呢?list中存储的是 $hash 做key,每个 list 里面存储着当前连接到该剪切板的
所有终端的 frame_id,这个list的作用就是用来广播的,即同一个剪切板内的某个终端更新剪切板后,通知其他终端更新。

关于制作swoole的docker镜像,可以看这里 https://akawa.ink/2015/06/13/make-swoole-docker.html

代码:https://github.com/ety001/online-clipboard

swoole-docker:https://registry.hub.docker.com/u/ety001/min_swoole/

0%