mongo的findAndModify应用之实现原子锁

Posted on 2016-12-06 13:35:29 | 2 comments | 6722℃ | Mongo

打开自己的博客,发现已经1个多月没有更新博客了,不忍直视!-_-|||

决定下班后来一发!

通常们会用mongo的findAndModify来生成类似mysql的自增ID,例如


/**
 * Generate a increase id.
 * @author Hisune <hi@hisune.com>
 * @param string $name Key name.
 * @return int Increase id.
 */
public static function generateId($name)
{
    /* @var $variable \MongoCollection */
    // !!! 以下所有Collection::get君代表返回对应mong...

关于PHP的curl的ssl验证CURLOPT_SSL_VERIFYPEER及为什么需要验证ssl证书

Posted on 2016-10-28 07:09:40 | 0 comments | 8133℃ | PHP

序言

先来看几个PHP的curl设置参数的文档解释:

  • CURLOPT_SSL_VERIFYPEER:禁用后cURL将终止从服务端进行验证。使用CURLOPT_CAINFO选项设置证书使用CURLOPT_CAPATH选项设置证书目录 如果CURLOPT_SSL_VERIFYPEER(默认值为2)被启用,CURLOPT_SSL_VERIFYHOST需要被设置成TRUE否则设置为FALSE。
  • CURLOPT_SSL_VERIFYHOST:1 检查服务器SSL证书中是否存在一个公用名(common name)。译者注:公用名(Common Name)一般来讲就是填写你将要申请SSL证书的域名 (domain)或子域名(sub domain)。2 检查公用名是否存在,并且是否与提供的主机名匹配。
  • CURLOPT_CAINFO:一个保存着1个或多个用来让服务端验证的证书的文件...

关于windows下npm的node_modules目录过长无法删除的问题

Posted on 2016-09-20 16:48:04 | 3 comments | 4578℃ | Javascript

序言

一个天坑,之前在用nwjs开发一个公司的项目的时候,发现有的人的电脑不兼容,无法正常打开应用,出现nwjs的默认页面,但有的电脑又没问题。后面发现是node_modules过长的原因,之所以会有的电脑没问题,是因为不同的人会把你的应用装到不同的地方,如果某个人的安装路径本身就比较长,那么恭喜你,你掉坑里了!

windows的目录长度

先来看一下这个windows的目录长度限制:

https://msdn.microsoft.com/en-us/library/aa365247.aspx

In the Windows API (with some exceptions discussed in the following paragraphs), the maximum length for a path is MAX_PATH, which...

临时统计脚本耗时测试PHP vs NodeJS

Posted on 2016-08-17 04:36:23 | 2 comments | 4849℃ | Javascript

序言

由于前段时间需要写一个脚本统计一个日志里面的某个字段的值出现的次数,需要写一个脚本。一开始是使用php写的,写完后执行,发现实在是太慢了,不能忍,于是用nodejs写了一遍,对比测试后惊呆了。

配置

  • 总记录条数 29w 条
  • 文件大小 190MB
  • 系统 I5 win7
  • php版本 5.5.12
  • node版本 4.4.2

对比

php


$account = [];
$i = 0;
$started = time();

$handle = fopen("hour.log", "r");
if ($handle) {
    while (!feof($handle)) {
        $buffer = fgets($handle, 4096);
        $array...

SockIO PPT, the programmer's PPT!支持远程控制的html ppt开源了

Posted on 2016-08-02 06:49:33 | 6 comments | 4529℃ | Javascript

关于SockIO PPT

https://hisune.com/view/42/sockio-ppt-remote-control-html-ppt

Online demo

有句话叫做,不会写PPT的程序猿不是一个好美工,那么究竟怎么样才能做一个高逼格的PPT呢?

为了做一个公司内部的PPT,花了几个小时写了个简单的html版的PPT,那么他有什么特性呢?

特性

  • 简单,常用PPT展示功能实现,包括翻页、点击显示、提示器。嗯,代码也很简单
  • 快捷...

谨慎使用MySQL5.7

Posted on 2016-07-29 06:47:30 | 0 comments | 4608℃ | Mysql

粗大事了

几个月前使用了MySQL的5.7版本,具体版本号是mysql5.7.10,用了几个月没问题。

突然有一天,某位同事告诉,后台数据有点异常。查了一下,惊呆了,果然有问题,并且是mysql查询语句(distinct)的结果有问题导致的。最直观的表现:


SELECT
    count(DISTINCT ooo)
FROM
    xxx
WHERE
    reserve = 1047
-- 结果 81915
SELECT
    count(*)
FROM
    (
        SELECT DISTINCT
            ooo
        FROM
            xxx
        WHERE...

composer用不了怎么办?npm用不了怎么办?

Posted on 2016-07-16 07:47:53 | 9 comments | 605526℃ | PHP

问题来了

image

遇到这样的情况怎么办?公司的网络是国外网站都走翻墙的,家庭的网络只针对gfwlist做了处理,compser和npm用不了了怎么办?

看看访问了哪些域名

composer

抓了个包瞄了瞄:

  • composer:
  • packagist.com
  • cacert.digicert.com
  • api.github.com
  • codeload.github.com

把这些加入到自定义的gfwlist里面,完美解决。

npm

  • registry.npmjs.org

理论上来说npm只需要加入上面这个域名。

汇总

如果是github...

翻墙之一:程序猿的专属翻墙姿势,ssh翻墙

Posted on 2015-06-07 07:24:06 | 0 comments | 3825℃ | 杂文

序言

翻墙是一个程序猿的基础技能之一,如果你有一台境外服务器的ssh权限,那么你可以在不用给服务器安装任何服务的情况下使用这台境外服务器实现翻墙。

配置Xshell

下面以Xshell的配置为例(SecureCRT也是一样的):

添加隧道

1.打开服务器属性添加一条隧道

image

选择协议

2.选择socket5的姿势翻墙

image

设置端口

3.设置自定义端口,可以随意设置,习惯1081,然后保存。到这一步SSH翻墙配置完成 ![image](/uploa...

一个简单的websocket协议的客户端服务端nodejs实现

Posted on 2015-05-28 12:32:54 | 3 comments | 4999℃ | Javascript

协议内容

http://chenjianlong.gitbooks.io/rfc-6455-websocket-protocol-in-chinese/content/index.html

文档最重要,一开始,直接过一遍文档再说。

实现协议就以下几点:

  • 握手
  • 获取数据内容
  • 发送消息

关于握手

  • 服务端获取到Sec-WebSocket-Key
  • 将这个key与字符串258EAFA5-E914-47DA-95CA-C5AB0DC85B11相连
  • 对新的字符串通过sha1散列算法进行计算
  • base64编码
  • 写入"Sec-WebSocket-Accept"响应给客户端
  • 完成握手

// 获取响应string
exports.getHandshake = function(header)
{...

Mongodb logs日志含义说明

Posted on 2015-05-13 05:24:18 | 0 comments | 5768℃ | Mongo

关于mongodb的日志含义,中文资料没有,只好自己动手了,下面是的总结,拿去不谢!

ntoreturn:1 keyUpdates:0 numYields: 1 locks(micros) r:1503023 reslen:48 952ms

ntoreturn:1   请求返回的文档个数
keyUpdates:0  请求导致的索引更新个数
numYields:1   请求产生的锁的次数
locks(micros) r:1503023 时间单位:微妙,数据库读取的锁时间,其他锁:
R - 全局读锁
W - 全局写锁
r - 数据库读锁
w - 数据库写锁
reslen:48  长度单位bytes,返回的结果长度
952ms     执行这条语句的时间,默认100毫秒mongo...
UP