chicagoboss return json

return {json, Data::proplist()}


erlang gen tcp

connect(Address, Port, Options) -> {ok, Socket} | {error, Reason}
connect(Address, Port, Options, Timeout) ->
    {ok, Socket} | {error, Reason}

shared ptr

#include <iostream>
#include <thread>
#include <memory>
#include <chrono>
#include <atomic>

AutoBuild(3)

今天svn提交莫名奇妙卡住,提交成功了,但svn命令一直不返回。强关了后cleanup,再更新后就没有更新了。 可见提交其实已经成功。删了重新checkout问题依旧。


分布式服务器设计

Jone Zhang’s Blog – 高并发服务端分布式系统设计概要


redmine

  1. 安装ruby


jekyll templates

Variables

Variables are surrounded by \{\{ and }} like this:

My first name is \{\{ first_name  }}. My last name is \{\{ last_name  }}.

Tags

Tags provide arbitrary logic in the rendering process.

\{\% if user.is_authenticated %}Hello, \{\{ user.username  }}.\{\% endif %}

Filters

Filters transform the values of variables and tag arguments.

\{\{ site.time | date_to_xmlschema  }}

Comments

Comments look like this:

\{\# this won't be rendered #}

Build

jekyll build

大宝


Auto-Refresh code in HTML

use meta tag

<meta http-equiv="refresh" content="5">
Please within the `head` tag of your html document, this `meta` tag  
will instruct the browser to refresh every `5` seconds.

AutoBuild系统中我想有个页面能够一直看到当前项目的状态,先用着这个方法去定时查询。 以后看有没有办法实现通知。^_^

click to refresh

<body onclick="window.location.reload();">
    ...
</body>

scroll to bottom

window.scrollTo(0, document.body.scrollHeight);

大宝


erlang执行shell

os:cmd(Cmd)


记录一次内存错误debug

项目在某页面崩溃,ide断在EventDispatcher::cleanToRemovedListeners()。 据断点处信息_toRemovedListeners里有的值retaincount已经为0了,一定是多释放了。 但找半天没找到哪些地方用的不对,都是在onEnter里添加监听,在onExit里取消监听。 去到2dx里代码仓库看最新的提交也没发现有修复类似bug的,应该还是自己代码的原因。 最后没办法了,在所有代码使用listener的地方,添加时先retain,remove时再release。 改着改着就发现一个自定义控件的一个方法在remove里没把listener指针置空,导致onExit时 又释放了一遍。再回头看崩溃页面,果然用到过这个控件。我*


My first post

Stay hungry, Stay foolish.
求知若饥,虚心若愚。
2016.1.10


小宝


AutoBuild(2)

Websocket


AutoBuild(1)

之前做过几个项目,项目版本发布管理都是件令人头疼的事。资源管理、程序打包有太多人工操作在里面, 只要涉及到人式操作就难免出错。使用打包脚本会减少部分操作,但是每次发版甚至是测试人员要包都很麻烦, 一着急还容易出错。一直想实现一个自动打包、发布系统,减少发布打包人为的修改操作。从页面上直接可以看到 项目各平台编译状况,测试也可以直接从上面下载安装。

架构、思路

                版本管理系统
                    |
               代码库版本变化
                    |
                ---------
                |       |
                V       V
            平台编译 平台编译
             服务器   服务器
                        |
                        V
                    编译、打包系统
                        |
                        |
                        V
                    管理服务器
                        |
                        V
                       结果
反向:从管理服务器发发布请求到指定平台,平台服务器再向代码仓库拉取最新代码,进行编译。

目前已经实现代码库变化,通知编译服务器编译、打包。该系统使用Erlang语言+各种脚本实现。遇到一些问题记录如下:

  1. svn提交通知,repos/hooks/下面参照post-commit.tmpl写post-commit脚本

  2. svn check update,svn status -u -q,返回结果前面带*的是要更新的

  3. erlang集群端口管理
    • epmd端口默认4369,使用erl的-epmd "epmd -port 5000 -daemon"参数调整
    • 结点通讯端口使用erl的-kernel inet_dist_listen_min 4000 inet_dist_listen_max 4000控制
    • 集群cookie必须相同, erl的-setcookie xxxxx可以设置,当然也可能通过HOME下.erlang.cookie文件修改
  4. 本想直接利用Erlang天然的分布式支持实现远程通知,可能因为svn服务器对外端口转发我做不了(没权限),最终没有实现。 我所在办公室做了外网端口转发的两台机器是可以实现的。理论上实现目前的功能,svn服务器只要远程调用通知我的编译服务器, 而我的服务器是做过端口转发的,应该能调到才前。不知道什么原因始终调不到。以后有时间再看是什么原因吧。也考虑过使用thrift, 但之前用过,感觉在erlang中使用不是很方便,再加上考虑到以后要有web界面展示,干脆使用ChicagoBoss实现算了。立马使用ChicagoBoss 创建工程,post-commit直接请求url通知,加上之前积累的编译、打包脚本,很快上面流程里的功能实现了。现在测试来要包立马就有新包了^_^

亲


markdown syntax

Markdown is a superset of HTML, so any HTML file is a valid Markdown.

Headings

This is an h1

This is an h2

This is an h3

This is an h4

This is an h5
This is an h6

This is an h1

This is an h2

Text styles

This text is in italics.
And so is this text

This text is in bold
And so is this text

This text is in both.

This text is rendered with strikethrough.

monospace

Paragraphs

This is a paragraph.

Now I’m in paragraph 2. I’m still in paragraph 2 too!

I’m in paragraph three!

Leave 2 spaces at the end of a line to to a
line break

This is a block quote. You can

manually wrap your lines and put a > before every line. You can also use more than one level

of indentation. How neat is that?

Lists

Unordered lists

  • Item1
  • Item2
  • Item3

or

  • Item1
  • Item2
  • Item3

or

  • Item1
  • Item2
  • Item3

Ordered lists

  1. Item1
    • Sub1
    • Sub2
    • Sub3
  2. Item2
  3. Item3

Code blocks

You can indicate a code block by indenting a line with four spaces or a tab.

-module(test).
-export([test/0]).

test() ->
    io:format("Hello World!~n").

json code block, use ```

{
  "data": {
    "uid": 4097
  }
}

tables

Mac 快捷键 Win 快捷键 作用 备注
Cmd + ← Fn + ← 将光标定位到当前行的最左侧 很常用
Cmd + → Fn + → 将光标定位到当前行的最右侧 很常用
Cmd + ↑ Ctrl + Home 将光标定位到文章的第一行  
Cmd + ↓ Ctrl + End 将光标定位到文章的最后一行  

xl000
l_xb@foxmail.com