<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    stone2083

    2013年8月19日 #

    Camunda學習點滴

         摘要: 1. 主要包括:
    架構(gòu)總覽、核心概念關(guān)系、場景例子、源碼分析
    2. 建議閱讀順序
    2.1 從架構(gòu)總覽,了解整體camunda概念,包括DB表結(jié)構(gòu),內(nèi)心有概念和底層存儲的關(guān)系映射
    2.2 再解核心概念關(guān)系,建立業(yè)務(wù)概念、代碼模型、表結(jié)構(gòu)的映射關(guān)系
    2.3 通過場景例子,了解不同概念的使用場景,配置
    2.4 通過源碼分析,了解底層實現(xiàn),方便必要時對其做擴展  閱讀全文

    posted @ 2022-05-16 10:10 stone2083 閱讀(520) | 評論 (0)編輯 收藏

    IEEE 754 浮點存儲小記

    IEEE 754:

    https://zh.wikipedia.org/wiki/IEEE_754


    FLOAT:

    31  30         22       15          7          0

    +---+----------+---------+----------+----------+

    |   |          |                               |

    +---+----------+---------+----------+----------+

    + S +     E    +               M               +


    EXAMPLE(5.5):

    =============================

    int main() {

        float a = 5.5;

        int *p = &a;

        printf("%d\n", *p);

        printf("%X\n", *p);

    }


    gcc -o main main.c; ./main

    十進制:    1085276160

    十六進制:  40B00000

    =============================



    十進制 = 二進制 = 二進制指數(shù)形式

    5.5    = 101.1  = 1.011 * 2^2


    ==> S=0 E=2 M = 11


    31  30         22       15          7          0

    +---+----------+---------+----------+----------+

    | 0 | 10000001 | 0110000 | 00000000 | 00000000 |

    +---+----------+---------+----------+----------+

    + S +     E    +               M               +


    轉(zhuǎn)換成INT:

    二進制:    01000000101100000000000000000000

    十進制:    1085276160

    十六進制:  40B00000



    EXAMPLE(5.1):

    ===========================================

    int main() {

        float a = 5.1;

        int *p = &a;

        printf("Float:\t%f\n", a);

        printf("十進制:\t%d\n", *p);

        printf("十六進制:\t%X\n", *p);

    }


    gcc -o main main.c; ./main

    Float:    5.100000

    十進制:    1084437299

    十六進制:  40A33333

    ===========================================


    存儲形式:0b01000000101000110011001100110011

    有效尾數(shù):01000110011001100110011

    表達方式:1.01000110011001100110011 * 2^2 ==> 101.000110011001100110011


    101 ==> 5

    0.000110011001100110011 ==> 2^-4 + 2^-5 + 2^-8 + 2^-9 + 2^-12 + 2^-13 + 2^-16 + 2^-17 + 2^-20 + 2^-21


    實際表達:      5.09999990463256836

    保留6位小數(shù):   5.100000

    posted @ 2017-10-12 11:23 stone2083 閱讀(651) | 評論 (0)編輯 收藏

    socks協(xié)議+netty實現(xiàn)(協(xié)議部分)

    posted @ 2016-09-08 12:51 stone2083 閱讀(1740) | 評論 (0)編輯 收藏

    docker overlay network

         摘要: docker overlay network  閱讀全文

    posted @ 2015-10-21 15:14 stone2083 閱讀(5761) | 評論 (0)編輯 收藏

    四張圖了解iptables原理和使用

         摘要: 四張圖了解iptables原理和使用  閱讀全文

    posted @ 2015-05-08 13:01 stone2083 閱讀(8608) | 評論 (0)編輯 收藏

    mykeepass for command line

    命令行下的類似keepass一個東東.

    如何使用
    Command line for Keep Password.
    Usage:
      keepass.sh -l
      keepass.sh -e plain-text
      keepass.sh -d encoded-text
      keepass.sh -s encoded-text name

    -l
    展示保存下所有加密后的密碼信息
    -e
    將明文密碼, 加密, 密文自動保存到剪切板上
    -d
    將密文界面, 解密后的明文自動保存到剪切板上
    -s
    將密文持久化保存到文件中

    代碼實現(xiàn)
    #!/bin/sh

    DATA="$HOME/.password/data"
    declare -a passwords

    function enc()
    {
        #$1: plain text
        echo "$1" | openssl enc -des | base64
    }

    function dec()
    {
        #$1: encoded text
        echo "$1" | base64 -D | openssl enc -des -d
    }

    function sync()
    {
        for ((loop=0;loop<${#passwords[*]};loop++))
        do
            if [ -z "${passwords[$loop]}" ];then
                continue
            fi
            value="$value\n${passwords[$loop]}"
        done
        echo $value > $DATA
    }

    function save()
    {
        #$1 encoded password
        #$2 name
        for ((loop=0; loop<${#passwords[*]}; loop++))
        do
            info=${passwords[$loop]}
            password=$(echo $info | awk '{print $1}')
            name=$(echo $info | awk '{print $2}')
            if [ "$2" == "$name" ];then
                passwords[$loop]="$1 $2"
                return
            fi
        done
        passwords[$loop]="$1 $2"

        sync
    }

    function delete()
    {
        #$1: name
        for ((loop=0; loop<${#passwords[*]}; loop++))
        do
            info=${passwords[$loop]}
            password=$(echo $info | awk '{print $1}')
            name=$(echo $info | awk '{print $2}')
            if [ "$1" == "$name" ];then
                passwords[$loop]=""
            fi
        done

        sync
    }

    function list()
    {
        for ((loop=0;loop<${#passwords[*]};loop++))
        do
            echo ${passwords[$loop]}
        done
    }

    function help()
    {
        echo "Command line for Keep Password.
    Usage:
      keepass.sh -l
      keepass.sh -e plain-text
      keepass.sh -d encoded-text
      keepass.sh -s encoded-text name"
    }

    function init()
    {
        loop=0
        while read line
        do
            if [ -z "$line" ];then
                continue
            fi
            passwords[$loop]=$line
            loop=$(echo $loop+1 | bc)
        done < $DATA
    }

    init
    case "$1" in
        -l)
            list
            ;;
        -e)
            enc "$2" | tr -d '\n' | pbcopy
            ;;
        -d)
            dec "$2" | tr -d '\n' | pbcopy
            ;;
        -s)
            save "$2" "$3"
            ;;
        -r)
            delete "$2"
            ;;
        *)
            help
            ;;
    esac

    備注:
    1. 純shell打造
    2. 目前支持Mac shell, 理論上支持linux系統(tǒng)(唯一的改動, 把pbcopy改成linux下剪切板復制的命令即可)


    posted @ 2014-11-06 14:45 stone2083 閱讀(5602) | 評論 (2)編輯 收藏

    SCP限速邏輯實現(xiàn)--帶中文注釋的bandwidth_limit函數(shù)

    SCP限速邏輯實現(xiàn)--帶中文注釋的bandwidth_limit函數(shù)

    SCP支持限速, 通過-l參數(shù), 指定拷貝的速度
     -l limit
                 Limits the used bandwidth, specified in Kbit/s.

    具體實現(xiàn), 是在misc.c中的bandwidth_limit函數(shù)
    下面附上帶中文注釋的bandwidth_limit函數(shù)代碼
     1 struct bwlimit {
     2     size_t buflen;                 // 每次read的buf長度
     3     u_int64_t rate, thresh, lamt;  // rate:  限速速率, 單位kpbs
     4                                    // thresh:統(tǒng)計周期,read長度到了指定閾值, 觸發(fā)限速統(tǒng)計
     5                                    // lamt:  一次統(tǒng)計周期內(nèi), read了多少長度
     6     struct timeval bwstart, bwend; // bwstart: 統(tǒng)計周期之開始時間
     7                                    // bwend:   統(tǒng)計周期之結(jié)束時間
     8 };
     9 
    10 void bandwidth_limit_init(struct bwlimit *bw, u_int64_t kbps, size_t buflen)
    11 {
    12     bw->buflen = buflen;          // 初始化read buf長度
    13     bw->rate = kbps;              // 初始化限速速率
    14     bw->thresh = bw->rate;        // 初始化統(tǒng)計周期
    15     bw->lamt = 0;                 // 初始化當前read長度
    16     timerclear(&bw->bwstart);     // 初始化統(tǒng)計開始時間
    17     timerclear(&bw->bwend);       // 初始化統(tǒng)計結(jié)束時間
    18 }
    19 
    20 void bandwidth_limit(struct bwlimit *bw, size_t read_len)
    21 {
    22     u_int64_t waitlen;
    23     struct timespec ts, rm;
    24 
    25     // 設(shè)置統(tǒng)計開始時間, 為當前時間
    26     if (!timerisset(&bw->bwstart)) {
    27         gettimeofday(&bw->bwstart, NULL);
    28         return;
    29     }
    30 
    31     // 設(shè)置當前read長度
    32     bw->lamt += read_len;
    33     // 判斷當前read長度是否到達統(tǒng)計周期的閾值
    34     if (bw->lamt < bw->thresh)
    35         return;
    36 
    37     // 設(shè)置統(tǒng)計結(jié)束時間,為當前時間
    38     gettimeofday(&bw->bwend, NULL);
    39     // bwend變量復用, 這個時候, bwend含義為, 本次統(tǒng)計周期實際開銷的時間: 既read thresh長度字節(jié),花了多少時間.
    40     timersub(&bw->bwend, &bw->bwstart, &bw->bwend);
    41     if (!timerisset(&bw->bwend))
    42         return;
    43 
    44     // 將單位從Byte變成bit
    45     bw->lamt *= 8;
    46     // 根據(jù)限速速率, 計算理論應(yīng)該花費多少時間
    47     waitlen = (double)1000000L * bw->lamt / bw->rate;
    48     // bwstart變量復用, 這個時候, bwstart含義為, 本次統(tǒng)計周期理論開銷的時間
    49     bw->bwstart.tv_sec = waitlen / 1000000L;
    50     bw->bwstart.tv_usec = waitlen % 1000000L;
    51 
    52     // 如果理論開銷時間 >  實際開銷時間, 則需要做限速
    53     if (timercmp(&bw->bwstart, &bw->bwend, >)) {
    54         // bwend變量復用, 這個時間, bwend含義為, 理論開銷時間 和 實際開銷時間的差值, 既需要sleep的時間, 確保達到限速到指定的rate值
    55         timersub(&bw->bwstart, &bw->bwend, &bw->bwend);
    56 
    57         // 如果差值達到了秒級, 則需要降低統(tǒng)計周期閾值, 確保統(tǒng)計相對精確
    58         // thresh變?yōu)樵鹊?/2, 但不能低于buflen的1/4
    59         if (bw->bwend.tv_sec) {
    60             bw->thresh /= 2;
    61             if (bw->thresh < bw->buflen / 4)
    62                 bw->thresh = bw->buflen / 4;
    63         } 
    64         // 如果差值小于10毫秒, 則需要加大統(tǒng)計周期閾值, 確保統(tǒng)計相對精確
    65         // thresh變?yōu)樵鹊?倍, 但不能高于buflen的8倍
    66         else if (bw->bwend.tv_usec < 10000) {
    67             bw->thresh *= 2;
    68             if (bw->thresh > bw->buflen * 8)
    69                 bw->thresh = bw->buflen * 8;
    70         }
    71 
    72         // 乖乖的睡一會吧, 以達到限速目的
    73         TIMEVAL_TO_TIMESPEC(&bw->bwend, &ts);
    74         while (nanosleep(&ts, &rm) == -1) {
    75             if (errno != EINTR)
    76                 break;
    77             ts = rm;
    78         }
    79     }
    80 
    81     // 新的統(tǒng)計周期開始, 初始化lamt, bwstart變量
    82     bw->lamt = 0;
    83     gettimeofday(&bw->bwstart, NULL);
    84 }

    posted @ 2014-09-22 17:45 stone2083 閱讀(2474) | 評論 (4)編輯 收藏

    將圖片轉(zhuǎn)成HTML格式--原理&代碼

    之前的文章,因為貼了效果圖,導致無法編輯。
    @see http://www.tkk7.com/stone2083/archive/2013/12/20/407807.html

    原理

    使用table,tr/td作為一個像素點,畫點。



    代碼

     2 import sys, optparse, Image
     3 
     4 TABLE='<table id="image" border="0" cellpadding="0" cellspacing="0">%s</table>'
     5 TR='<tr>%s</tr>'
     6 TD='<td width="1px;" height="1px;" bgcolor="%s"/>'
     7 
     8 def rgb2hex(rgb):
     9     return '#{:02x}{:02x}{:02x}'.format(rgb[0],rgb[1],rgb[2])
    10 
    11 def get_image(name, thumbnail=1):
    12     if(thumbnail >= 1 or thumbnail <= 0): 
    13         return Image.open(name)
    14     else:
    15         img = Image.open(name)
    16         return img.resize((int(img.size[0] * thumbnail),int(img.size[1] * thumbnail)))
    17 
    18 def convert(img):
    19     trs = []
    20     for height in xrange(img.size[1]):
    21         tds = []
    22         for width in xrange(img.size[0]):
    23             tds.append(TD % rgb2hex(img.getpixel((width, height))))
    24         trs.append(TR % (''.join(tds)))
    25     return TABLE % (''.join(trs),)
    26 
    27 parser = optparse.OptionParser('Usage: %prog [options] image')
    28 parser.add_option('-c''--compress', dest='thumbnail', default='1', metavar='float', help='specify the compress value (0, 1)')
    29 parser.add_option('-o''--out', dest='out', default='out.html', help='specify the output file')
    30 opts, args = parser.parse_args()
    31 
    32 if(len(args) != 1): 
    33     parser.print_help()
    34     sys.exit(-1)
    35 
    36 html = open(opts.out,'w')
    37 html.write(convert(get_image(args[0], float(opts.thumbnail))))
    38 html.close()

    下載地址 

    https://code.google.com/p/stonelab/downloads/detail?name=img2html.py#makechanges

    posted @ 2013-12-20 14:28 stone2083 閱讀(3146) | 評論 (0)編輯 收藏

    將圖片轉(zhuǎn)成HTML格式--用HTML畫圖

         摘要: 介紹 img2html,將圖片轉(zhuǎn)成HTML格式。 用HTML來畫圖。 效果 原始圖片 轉(zhuǎn)成HTML后的效果(壓縮1倍后的效果--主意:請查看html源碼,這邊沒有src圖片屬性,全是通過html代碼渲染) ...  閱讀全文

    posted @ 2013-12-20 14:18 stone2083 閱讀(2793) | 評論 (0)編輯 收藏

    pystack--python stack trace--讓python打印線程棧信息

    pystack: python stack trace. 類似java中的jstack功能.
    使用方式:
    1. https://pypi.python.org/pypi/pdbx/0.3.0 下載, 或者直接通過easyinstall安裝
    2. python scripts中, import pdbx; pdbx.enable_pystack(); 開啟pystack功能
    3. kill -30 pid , 就可以打印stack信息了. 
    如:
    "CP Server Thread-10" tid=4564467712
        at self.__bootstrap_inner()(threading.py:525)
        at self.run()(threading.py:552)
        at conn = self.server.requests.get()(__init__.py:1367)
        at self.not_empty.wait()(Queue.py:168)
        at waiter.acquire()(threading.py:244)

    "CP Server Thread-9" tid=4560261120
        at self.__bootstrap_inner()(threading.py:525)
        at self.run()(threading.py:552)
        at conn = self.server.requests.get()(__init__.py:1367)
        at self.not_empty.wait()(Queue.py:168)
        at waiter.acquire()(threading.py:244)

    "CP Server Thread-1" tid=4526608384
        at self.__bootstrap_inner()(threading.py:525)
        at self.run()(threading.py:552)
        at conn = self.server.requests.get()(__init__.py:1367)
        at self.not_empty.wait()(Queue.py:168)
        at waiter.acquire()(threading.py:244)

    "CP Server Thread-7" tid=4551847936
        at self.__bootstrap_inner()(threading.py:525)
        at self.run()(threading.py:552)
        at conn = self.server.requests.get()(__init__.py:1367)
        at self.not_empty.wait()(Queue.py:168)
        at waiter.acquire()(threading.py:244)

    "CP Server Thread-4" tid=4539228160
        at self.__bootstrap_inner()(threading.py:525)
        at self.run()(threading.py:552)
        at conn = self.server.requests.get()(__init__.py:1367)
        at self.not_empty.wait()(Queue.py:168)
        at waiter.acquire()(threading.py:244)

    "CP Server Thread-2" tid=4530814976
        at self.__bootstrap_inner()(threading.py:525)
        at self.run()(threading.py:552)
        at conn = self.server.requests.get()(__init__.py:1367)
        at self.not_empty.wait()(Queue.py:168)
        at waiter.acquire()(threading.py:244)

    "MainThread" tid=140735286018432
        at app.run()(raspctl.py:173)
        at return wsgi.runwsgi(self.wsgifunc(*middleware))(application.py:313)
        at return httpserver.runsimple(func, validip(listget(sys.argv, 1, '')))(wsgi.py:54)
        at server.start()(httpserver.py:157)
        at self.tick()(__init__.py:1765)
        at s, addr = self.socket.accept()(__init__.py:1800)
        at sock, addr = self._sock.accept()(socket.py:202)
        at pystack()(pdbx.py:181)
        at for filename, lineno, _, line in traceback.extract_stack(stack):(pdbx.py:169)

    "CP Server Thread-5" tid=4543434752
        at self.__bootstrap_inner()(threading.py:525)
        at self.run()(threading.py:552)
        at conn = self.server.requests.get()(__init__.py:1367)
        at self.not_empty.wait()(Queue.py:168)
        at waiter.acquire()(threading.py:244)

    "CP Server Thread-8" tid=4556054528
        at self.__bootstrap_inner()(threading.py:525)
        at self.run()(threading.py:552)
        at conn = self.server.requests.get()(__init__.py:1367)
        at self.not_empty.wait()(Queue.py:168)
        at waiter.acquire()(threading.py:244)

    "CP Server Thread-3" tid=4535021568
        at self.__bootstrap_inner()(threading.py:525)
        at self.run()(threading.py:552)
        at conn = self.server.requests.get()(__init__.py:1367)
        at self.not_empty.wait()(Queue.py:168)
        at waiter.acquire()(threading.py:244)

    "CP Server Thread-6" tid=4547641344
        at self.__bootstrap_inner()(threading.py:525)
        at self.run()(threading.py:552)
        at conn = self.server.requests.get()(__init__.py:1367)
        at self.not_empty.wait()(Queue.py:168)
        at waiter.acquire()(threading.py:244)


    核心代碼:
    # pystack
    def pystack():
        for tid, stack in sys._current_frames().items():
            info = []
            t = _get_thread(tid)
            info.append('"%s" tid=%d' % (t.name, tid))
            for filename, lineno, _, line in traceback.extract_stack(stack):
                info.append('    at %s(%s:%d)' % (line, filename[filename.rfind('/') + 1:], lineno))
            print '\r\n'.join(info)
            print ''

    def _get_thread(tid):
        for t in threading.enumerate():
            if t.ident == tid:
                return t
        return None

    def _pystack(sig, frame):
        pystack()

    def enable_pystack():
        signal.signal(signal.SIGUSR1, _pystack)

    有需要的朋友,趕緊拿走吧.

    posted @ 2013-08-19 13:15 stone2083 閱讀(8058) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲色偷偷综合亚洲AVYP| 国产成人免费网站在线观看| 日韩免费一区二区三区在线| **俄罗斯毛片免费| 在线免费视频一区二区| 亚洲成av人在片观看| 久久香蕉国产线看观看亚洲片| 久久久久亚洲av无码专区| 99久久国产亚洲综合精品| 立即播放免费毛片一级| 亚洲高清国产拍精品26U| 91在线亚洲精品专区| 亚洲日本天堂在线| 黄床大片免费30分钟国产精品| 99精品一区二区免费视频| 成人免费视频小说| 亚洲综合伊人久久大杳蕉| 亚洲国产福利精品一区二区| 国产亚洲人成在线影院| 少妇太爽了在线观看免费视频| 精品国产一区二区三区免费看| 中文亚洲AV片不卡在线观看| 亚洲乱码中文字幕小综合| 中美日韩在线网免费毛片视频| 中文字幕免费视频| 亚洲成a人片在线播放| 亚洲黄色在线播放| 一级毛片完整版免费播放一区| 最近免费2019中文字幕大全| 日韩亚洲国产二区| 91嫩草亚洲精品| 精品97国产免费人成视频| 成年大片免费视频| 午夜亚洲www湿好大| 国产精品久久久久久亚洲小说| 午夜视频在线免费观看| 国产伦精品一区二区三区免费下载| 亚洲av日韩av不卡在线观看| 亚洲日韩在线中文字幕综合| 一二三区免费视频| 欧洲精品成人免费视频在线观看|