Glusterfs 分布式存储系统

June 22, 2018 20:51


Glusterfs 是一个部署简单,使用方便的开源存储系统。

Init

方便起见,这里使用 docker 的方式来部署,下面是 docker-compose.yml

version: '3'

services:
  g1:
    image: gluster/gluster-centos:glust

SOCKS5 协议及简单实现

October 16, 2017 23:31


What's SOCKS5

SOCKS5 是一种网络传输协议,主要用于客户端与外网服务器之间通讯的中间传递。

VS HTTP Proxy

工作在比 HTTP 代理更低的层次(表示层和传输层之间),SOCKS 是会话层协议,还可以转发 UDP 流量和反射代理。

Show me the code

Client create a TCP

细胞自动机

August 14, 2017 23:03


特征

细胞自动机有三个特征:

  • 平行计算 (parallel computation):每一个细胞个体都同时同步的改变
  • 局部的 (local):细胞的状态变化只受周围细胞的影响
  • 一致性 (homogeneous):所有细胞均受同样的规则所支配

历史

细胞自动机最早由美籍数学家 冯·诺依曼(John von Neumann) 在 1950 年为模拟

瞎折腾:遗传算法、禁忌搜索、模拟退火

April 04, 2017 12:44


先给一个 TSP(Travelling salesman problem) 题目:

给定 64 点,计算出一条经过所有的点最后返回起始点的最短路径。

经典的 TSP 问题,需要找出 64 个点的最短路径,如果使用普通的遍历的话,时间复杂度为 O(n!),需要检查 64! ≈ 1.2689E89 个组合,如果每秒遍历一亿个组合,也要算到地老天荒了,虽然有各种优化

使用 C++,Go 来为 Ruby 写动态库

March 23, 2017 12:43


瞎折腾

之前在简单的提到使用 C 编写动态库,然后使用 FFI 调用,使用 C++ 编写时则略有不同,但他们在 Ruby 中使用都是一样的,因为最终编译出来的动态库在使用时,都是调用 C 接口。

首先说一下 C++,如果我们还是按照 C 的写法:

// hello.cpp
#include <cstdio>

void hello(char *na

初接触遗传算法 (二)

March 10, 2017 14:33


之前讲了如何使用遗传算法解 01背包问题,下面讲一下使用遗传算法进化扫地机器人罗比的例子。

在一个 10x10 的方格空间中,每个方格都有 50% 机率存在可乐瓶,而罗比的目标就是在规定的操作数下,尽可能的清理更多的可乐瓶;罗比只能执行这些操作:向指定方向移一格、随机方向移动一格、捡取可乐瓶。

背包问题我们可以明确的知道,解必然是给定物品中的一个组合,那么上面的罗比机器人应该如何去解呢?

初接触遗传算法

February 15, 2017 13:01


遗传算法(Genetic Algorithm (GA))借鉴进化生物学,通过遗传、突变、自然选择以及杂交等方式,来寻找全局最优解。

通常的算法都是确定性的,在运行过程中,每一步都是确定的,相同环境下,无论运行多少次得到的结果都是一样的,而遗传算法是属于随机化算法中的一种,运行过程中使用了随机函数,随机函数的返回值将会影响到执行结果。

遗传算法中,每个个体都是由一组基因组成的,对应了问题的

Ruby trace function

November 12, 2016 11:08


set_trace_func 方法可以收到很多代码执行事件,下面列出所有的事件,

name desc
c-call call a C-language routine
c-return return from a C-language routine
call call a Ruby method
class start a class or

Lua 学习心得

November 06, 2016 12:41


table 数据结构

数组

list = {'a', 'b', 'c'}
print(list[1]) -- 'a' 好吧,他的索引是从 1 开始的
print(#list) -- 3, 数组长度

list[4] = 'd'
print(#list) -- 4,

list['a'] = 'hello'
print(#list) -- 4, 非数

Ruby 中的多进程与多线程

June 04, 2016 10:30


目标

  • 知道 Ruby 中线程和进程的区别
  • 知道在什么情况下使用多线程/多进程可以获得性能的提升

Ruby 线程的一些前置知识

  1. 线程可以共享程序内存,相对来说使用的资源更少
  2. 相对于进程,线程更加轻量,启动速度更快
  3. 相互之间通信也非常简单
  4. Ruby 由于 GIL(Global interpreter lock) 的原因,多线程并不

查找 Ruby 内存泄露

May 29, 2016 10:28


查找方式

基本上分为两种方式

  • 静态分析,一般都是人工检查代码或是使用代码分析工具来检查代码
  • 动态分析,通过比较程序不同时段的内存快照,或是追踪程序的内存分配

本文主要讲的是动态分析

检查 Ruby 对象分配

Dump Objects

通过 ObjectSpace#dump 方法,可以得到一个对象在内存的位置,及它的一些类型、内

Ruby C Extensions

January 14, 2016 22:43


一个简单的 C 扩展

#include <stdio.h>
#include "ruby.h"

VALUE hello(VALUE self, VALUE name) {
  printf("c: hello %s\n", StringValuePtr(name));
  return INT2NUM(RSTRING_LEN(name));
} 

voi

Rack应用简单的访问保护

September 15, 2015 23:01


简介

rack-attack 是一个基于 Rack 的中间件, 它可以按定义规则来禁止特定的访问,或是使用规则来限制访问频率

它对性能的影响极小,几乎可以忽略,每个请求在几毫秒内完成处理, 但是它会依赖你定义的规则的数量、规则匹配所使用的时间, 及与 throttle 使用的 cach

简单的对等网络玩后感

July 12, 2015 12:44


引子

某天,看到了一个有趣的工具:可以通过域名访问本机的运行的web服务。然后就一发不可收拾了。。

先是脑海里直接就想到一个实现方案: 用户访问代理网站,然后代理网站直接转发请求到本机了, 本机处理后返回代理网站,代理网站再转发给用户嘛

首先一个不了解的是怎么生成N多的二级域名,一搜索才知道有泛域名,那么第一个问题解决了, 代理服务器可以通过请求的域名去请求不同小网站了

创建自己的git 仓库

July 11, 2015 22:55


起因

由于有些不想直接放到公开的github仓库上,又不想花钱建立github private project。

然后有台渣渣VPS,又折腾不起gitlab,而且也懒的去折腾。。

那么,就用最简单的方法来创建一个简单的git仓库吧

介绍

Git有多种传输协议,我们就选最简单的ssh了,username@gitserver:/path/to/project.g

【读书笔记】禅与摩托车维修艺术

July 07, 2015 21:40


读到不错的地方,将会记录到回复中 :)

如何写一个简单的console?

June 03, 2015 12:34


前话

刚开始没头绪时,想着确定是比较麻烦,怎么写呢?

不过理一上思路,清楚之后,要做一个简单的控制台还是非常简单的

分析

一个自己的CLI无非是接受输入,然后输出结果。

这就是一个循环一直在做【接受输入】 => 【输出结果】这件事了

接收的输入需要解析命令及参数,简单的就可以使用空格来分割,第一个字符串为命令,后面的是参数

结构

多短信推送平台的客户端设计

April 19, 2015 15:07


现在云短信平台比较多,如云片、推立方、亿美、微米等等,各各平台的在使用上、 短信到达率及费用各不相同。为了让用户得到更好的体验,我们也不能把自己绑到一个平台上。 在选用时,我们可以同时选择多家平台,智能的在各平台之前切换, 以免因一家出问题,而导致用户接收不到消息。

那么我们如何写一个支持多个平台的短信发送客户端呢?首先来理一下基本的流程:



定义自己的Migration method

April 05, 2015 15:32


瞎扯

在团队中,大家是否出现,DB中的字段只有少数人知道这个字段是在做什么。或是折腾数据的同学,拿到我们的数据后,很多数据字段完全不知道是做啥的。

为了让大家更好的理解数据库各字段的意义,通常的做法是为各个字段加上注释。而加注释的方式也很多,不同的方式可以达到不同的效果。比如:

  • 直接使用文档,这样加了字段还要去另一个地方修改文档,很可能造成不同步
  • 直接migrat

定义自己的RSpec matcher

April 04, 2015 20:42


Examples

统计一个数组中匹配字符串的数量

ary = %w{aa ab bb bc}

# 通常会这样做
expect(ary.select {|s| s =~ /^a/ }.count).to eq(2)

# 如果有一个定义好的matcher,可以这样做
expect(ary).to match_total(/^a/, 2)

又如

新的blog上线了

March 14, 2015 16:20


原blog http://only-x.com ,由于是托管于github上,所以常常冒出一个有趣的想法时,又没法加到自己的网站上,所以这次直接使用Rails自己折腾了一个了。

过年时在家折腾了几天,框架搭好,回来后,没多少时间,只能每天晚上折腾一下,在多日折腾下,终于可以初步上线了,哈哈

不过还有一大堆东西还没弄起来,项目起步容易,想完善就需要非常多的精力,当然,能力有限也是原因之一

Newrelic

July 30, 2014 20:44


最近一两个月CPU都跑满了,人一直处于忙碌状态,今天终于又交掉一件工作, 瞬间感觉轻松了一点。。。

Newrelic是一个监控的服务,将本地程序的运行状况提交到Newrelic服务, 由他来生成相关的报表数据,像我使用的Web服务,他可以编译每个请求所用的时间详情, 如一个请求中DB查询消耗了多长时间,Redis用了多长时间,页面渲染用了多长时间,等等 , 他会把这些统计做成图表。当然不只是W

Unicorn DB connection 遇到的问题

July 20, 2014 20:44


由于不明白为什么在Unicorn before_fork中,ActiveRecord需要disconnect, 所以在一个使用Sequel的项目没管这个,看着运行好像也没什么问题,就不了了之了。

项目上线后,在高并发下,发现一直出错,并发一掉下来问题又没了。在几天的折腾下, 才发现是查询出来的数据有问题。也不知道是为什么,于是复制服务器上的配置, 在本地用Unicorn把项目跑起来。

Ruby标准库读后感

January 29, 2014 18:19


快过年了,这几天都没什么事,于是就想着去看看Ruby的标准库,说实在的,当初学ruby时还是1.8.7, 只看从Ruby锄头书上把语法看了个大概,后来开始用了,也没怎么再去学习基础了.

感觉不知道的太多了,闲来无聊就去 http://ruby-doc.org 上把2.1.0的所有Standard Library都粗看了 一遍,有兴趣的就动手写写,实践下。嗯,又长知识了,下面说些自己感兴趣的东东

Chrome extensions

November 15, 2013 21:12


自己的各种帐号的密码一直都是两个三相同的在使用,感觉略不安全,由于想弄个自动生成密码的, 本来不想重复造轮子,看了下1Password,要钱。。LastPass又感觉不爽,就感觉自己弄的才靠谱。 想着也比较简单,这两天就用下班时间写了个, ChromePwdExt

恩一个Chrome的扩展,密码生成基

Poj1013解题心得

October 28, 2013 21:17


好久没做题了,这两天回家略无聊,没心情玩游戏了,于是又开始来拿poj上的题目来练练了。

这题目,以前看过一会,后来没做了,昨天才开始拿起来解,由于昨天没怎么想,直接就动手, 用了1个多小时没解出来就去睡觉了,今天又花了一个小时的样子,还是乱摸,呃好吧, 确实一下弄不出来,于是把笔和纸来画了,思路如下:

首先,天平有三次比较数据,每次比较有三种结果,我采用了排除法来确实哪个是假的硬币, 有

Grit + Grape使用心得

October 21, 2013 19:58


最近做的一个小项目,使用了大概二十六七个小时, Grit + Grape, 同时也对Goliath了解了下, 写下使用心得体会,刚上手,感觉就了解这是做什么的,基本的使用。。

项目代码

Goliath

先说 [Goliath](https://github.com/postrank-labs

POJ 1011 解题心得

September 08, 2013 17:24


无聊了又去poj解题玩,今天早上9点到下午5点半,折腾了一天终于把poj 1011完成了,提交了几次, 一次16MS,两次32MS,懒的再优化了(能力有限,嘿嘿)

题目链接

早上一早上就是想着怎么解,递归搜索那是肯定要做的,期间思路不清楚, 浪费了几个小时,终于到下午吃完饭后想通了,慢慢实现,不过悲剧的是老是TLE, 计

Sinatra + AngularJS 与 SeaJS 使用体会

August 12, 2013 22:12


发现差不多一个月没写点东西了,最近么,工作略忙,回家又玩忙着建新blog去了(练手。。), 都快忘了这里了,无意间点进来才想起好久没写什么的,于是把最近练手体会写写了。 项目地址: Sky

后台用Sinatra搭,写起来略麻烦,不过我选的富前端,所以后台就提供API了, 用着还行,没Rails方便,习惯了Rails的环

2013杭州阿里技术嘉年华参会总结

July 14, 2013 22:12


12号提前下班与同事一起坐高铁冲到杭州,吃完饭便住到了会场边上的酒店

13号早7点便起来,在酒店里吃了早餐便冲向会场,签到拿卡,进场时,本想进后端开发的,居然不给进,原来我当前急着完成报名,直接下一步下一步的点完了,庆幸的是选的是前端,到场8点,开讲是9点,郁闷。

无聊了一小时,终于开讲了,第一块伯约讲的《用户行为监控》,这方面我还是有点兴趣的,感觉不错学习到了很多如监控页面元素与用户的

自己写 Ruby/Rails Api 文档的生成器

July 12, 2013 22:00


rails 写api一直纠结要写文档给别人看,文档嘛,写完代码后真心不想写,于是就要利用我写代码时的注释来生成一个简单的文档

rdoc吗,他对rails的api弄的不怎么好看,也非常混乱,于是开始自己写一个简单的生成器

一般我的api代码都会如下

class Api::UsersController < Api::BaseController
  # 取得用户列表

Linux service

May 21, 2013 21:04


好奇Linux的Service,于是来折腾下,说一下折腾心得

首先环境是在Ubuntu12.04下,service脚本位于 /etc/init.d 目录中, 以GoAgent为例来写一个service开机启动, 于/etc/init.d/goagent文件中:

#! /bin/sh -e

### BEGIN INIT INFO
# Provides: GoAgent

Logrotate初使用

April 21, 2013 14:35


一直以来都没管程序的log,不知不觉log文件已经有1.2G了,然后回头想查log日志时, 略麻烦,于是开始求助于logrotate功能

使用logrotate可以使得日志按不同的时间点分开存放不同的文件中,自动备份,以减小日志文件大小等, 好处多的就不用说了,它甚于cron,通过系统cron定时执行logrotate脚本(/etc/logrotate.conf), 在logrotate.co

Nginx + Unicorn + Rails

April 21, 2013 13:28


一直以来部署都是用别人写的代码,配置也是直接复制以前的,昨天在自己电脑上弄了下, 半天才用运行起来。其实也就是为了开发用,不喜欢打localhost:xxx了,于是把nginx弄起来。 然后自动生成nginx config,再自动在/etc/hosts中加入定义好的域名

我用的系统是Fedora 17, 至从Ubuntu换到Fedora来后,基本上两三天一次系统更新, 一直折腾。呃,跑题了。

Rails Cache

April 13, 2013 18:58


以前写代码一般没怎么管性能问题,慢点的也就是报表什么的,那也是几秒钟的事了, 因为数据量不多,呵呵

就在前些天,终于出问题了,数据也就几千条吧,API要把所有数据都取过去, (没办法,这个蛋疼的方式我无力吐槽了,还好数据目前也就几千条,几年后也就万把条吧。。) 由于在数据库里的树结构里面查找,自然有了递归,恩用了一两秒的样子, 其实以前就是调用别人的查找方法一层层找。。懒的再动了,现在又改为先

项目数据备份

April 11, 2013 22:00


以前,事情多,也略急,小项目也懒的去备份数据了,终于在昨天悲剧了,丢了数据了, 虽然弄丢数据的不是我,但还是因为我没有去备份数据而使的数据无法找回来了。

于是,昨天就决定今天把备份的弄好,项目部署时自动在服务器运行备份服务( 我想如果以前有这个,就不会出这事了,每次都要去服务器上写配置什么的,过懒的我懒的写。。。)

主要用到两个ruby的gem,一个backup,另一个whenever,

Rails action 动态调用

March 27, 2013 21:27


前两天在一个问题上纠结了好久,恩,一个全是API的项目B,要通过项目A才能调用到项目B的API。 本来是想全类似代理一样的过去,但考虑到不丗的API在项目A中的扩展,控制问题,不得不放弃此方法了。

我就写了一个通配的路由所有到B项目的API全走这个action,然后让此action来处理是走扩展的action, 还是自动直接去如代理一般的去请求,代码思路如下:

# routes

poj 1010 解题心得

March 16, 2013 21:33


上周吧,看到1010题时,思路有些乱,想了一会后没理清,然后这周有那么一两天下班弄了一两小时, 一看到这题又开始头大,就一直没管了。鉴于这周末太无聊,下午一觉醒来,外面居然下雨了,于是, 吃完我的晚餐泡面就着手解决此题。

和同事说过这题,让我叫背包问题,搜一下,恩,真的看不懂,还有什么NP问题,呃,真心不懂, 看不出个样来就自己理思路了。。。

首先要知道最佳答案,我就要知道所有的答案,用

poj 1009 解题心得

March 06, 2013 21:33


过年回来,下班后就去poj.org上做做题, 前天晚上弄到十二点半才把1009过了, Memory: 264K,Time: 79MS,弱爆了, 这里还是写一下心得吧,怎么说也弄到半夜了。。

题目大意就是给出一张图,然后求图中每点与边上的点的最大差值,首先给出图的宽度, 然后就是一堆RLE(run length encoding) 数据,第一个

大数的实现心得

February 22, 2013 19:23


JZlib,自己练习用一个C++库, 这两天为其实现了Bignum大数类,目前只支持整型,浮点还没写。。

这两天,了解了一些实现方法: 把字符直接转换成字符串,然后使用读书时便学会的计算方法进行计算求值,开始时我就准备用这种方式。。。 不过感觉有些蛋疼,就没弄了。。。。

然后就是使用二进制,使用和计算机相

Ruby编码

January 07, 2013 20:50


文件读取有外部编码和内部编码,具体的我也没深究了,暂时没用到现在只是把今天了解到的一点做个记录

File.open("path/to/file", "r:GB2312:UTF-8")

其中的GB2312为读取文件的外部编码,UTF-8内部编码,文件物理存储的编码格式不同, 也就必须使用不同的外部编码来读取文件,内部编码应该就是程序为读取到的文本使用的存储方式吧, 这个

最近C++使用心得

January 06, 2013 21:52


这一周把好久没用过的C++又拿出来练练手了,一直对第一次学的编程语言恋恋不舍啊,哈哈。

也就练练一些简单的东西。。熟悉下语法了,复杂的咱也不会了,发现这东西还真是用多自然会了,理解的也深刻了。。

开始写时,由于很多没用了,写着写着,突然发现写成了ruby,汗死,不时把判断写成这样的形式

a = 1 if b

然后又用end结尾。弄了一两天,12月31号去公

使用 NodeJS 做 http proxy

December 15, 2012 21:02


Origin Code

前两天突然冒出一个想法,为什么我不自己写个HTTP PROXY 来让我可以访问Google等网站呢?说做就做,开始兴奋的写http proxy

由于昨天晚上在公司写的一些代码忘了提交,今天中午吃完饭又跑去公司,最后悲剧的发现公司四道门我只能开一道

几经周折,终于在朋友的

Ruby Gem 的一些心得

November 27, 2012 19:32


rails的Generator

在MyGem/lib/rails/mygen/config.rb

class ConfigGenerator < Rails::Generators::Base
  def create_config_file
    create_file "config/config.yml", {foo: 1}.to_yml
  end
en

Ruby call chain

November 13, 2012 21:32


今天码字母,调试中出错,一看是链式方法调用的问

file.parent.parent.id.to_s

# 由于parent这一层出现了nil,然后随便改下

file && file.parent && file.parent.parent && file.parent.parent.id.to_s

写完后发现自己头都大了..这还是人写的么..

想想r

Jekyll 的html分割

November 07, 2012 20:18


这两天一直头痛怎么分割html,直接使用truncate吧,很大机率出现html标签没闭合,而造成页面混乱

接着找到了一个truncatehtml的插件,然后折腾一会,就是没起效果,然后又发现Github上不可以用plugins,太痛苦了

于是接着看Liquid的Document,看到split时,灵光一闪,这主不是现在的完美分割么,要分割的html文件中加入一个标记, 如我的就是 SE

使用Github与Jekyll制作Blog

November 04, 2012 19:42


以前也想过自己写年Blog,但由于各种原因,最后不了了之,今天再次想起,就直接用Github来当Blog引擎了。 在网上搜索了一翻,知道怎么在Github创建一个简单的blog:

先在Github中创建一个项目,项目名为 你的Github用户名.github.com,这样就可以直接使用这个地址访问你的Blog了,如果不用这样的名字,只能 你的Github用户名.github.com/项目名 来