<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Nuck_Cat的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Nuck_Cat</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Nuck_Cat]]></copyright><item><title><![CDATA[gin 使用 prometheus metrics]]></title><link>https://blog.youkuaiyun.com/Nuck_Cat/article/details/127050317</link><guid>https://blog.youkuaiyun.com/Nuck_Cat/article/details/127050317</guid><author>Nuck_Cat</author><pubDate>Mon, 26 Sep 2022 11:23:46 +0800</pubDate><description><![CDATA[更新指标调用 MetricsAgentNum 对应类型的相关操作接口。]]></description><category></category></item><item><title><![CDATA[Ubuntu vim  ctags/cscope 迁往 gtags]]></title><link>https://blog.youkuaiyun.com/Nuck_Cat/article/details/110427449</link><guid>https://blog.youkuaiyun.com/Nuck_Cat/article/details/110427449</guid><author>Nuck_Cat</author><pubDate>Tue, 01 Dec 2020 12:12:28 +0800</pubDate><description><![CDATA[gtags 使用

pip install pygments
sudo apt install libncurses5-dev libncursesw5-dev

wget http://tamacom.com/global/global-6.6.5.tar.gz
tar -xzf global-6.6.5.tar.gz
cd global-6.6.5/
./configure &amp;&amp; make &amp;&amp; sudo make install
cp gtags.vim ~/.vim/]]></description><category></category></item><item><title><![CDATA[golang 任务超时控制]]></title><link>https://blog.youkuaiyun.com/Nuck_Cat/article/details/109223456</link><guid>https://blog.youkuaiyun.com/Nuck_Cat/article/details/109223456</guid><author>Nuck_Cat</author><pubDate>Thu, 22 Oct 2020 15:41:36 +0800</pubDate><description><![CDATA[package main

import (
    "context"
    "fmt"
    "time"
)

func main() {
    ret := TaskWithTimeout(DoSomething, time.Second*3)
    fmt.Println("ret:", ret)
    time.Sleep(time.Second * 4)  // 等待，若无则看不到最后一行打印
}

func TaskWithTimeout(task func(), duration]]></description><category></category></item><item><title><![CDATA[golang mysql 操作]]></title><link>https://blog.youkuaiyun.com/Nuck_Cat/article/details/109188305</link><guid>https://blog.youkuaiyun.com/Nuck_Cat/article/details/109188305</guid><author>Nuck_Cat</author><pubDate>Tue, 20 Oct 2020 20:14:18 +0800</pubDate><description><![CDATA[func OpenDB(mysql_conf string) *sql.DB {
    db, err := sql.Open("mysql", mysql_conf)  // user:password@tcp(127.0.0.1:3306)/dbname
    if err != nil {
        beego.Error("open mysql fail:", err)
        return nil
    }
    db.SetConnMaxLifetime(time.Minu]]></description><category></category></item><item><title><![CDATA[beego log 设置]]></title><link>https://blog.youkuaiyun.com/Nuck_Cat/article/details/109188040</link><guid>https://blog.youkuaiyun.com/Nuck_Cat/article/details/109188040</guid><author>Nuck_Cat</author><pubDate>Tue, 20 Oct 2020 20:04:14 +0800</pubDate><description><![CDATA[func init() {
    runMode = "prod"
    logDirName := "logs"       
    logFileName := "myapp.log"
    parentDirPath, _ := os.Getwd()  
    // 这边的逻辑是向上层找日志目录，为了解决 go test 时，执行文件在子目录，无日志目录
    for {
        logDirPath := path.Join(parentDirPath, logDirName)
]]></description><category></category></item><item><title><![CDATA[golang redis cluster 操作]]></title><link>https://blog.youkuaiyun.com/Nuck_Cat/article/details/109187276</link><guid>https://blog.youkuaiyun.com/Nuck_Cat/article/details/109187276</guid><author>Nuck_Cat</author><pubDate>Tue, 20 Oct 2020 19:55:32 +0800</pubDate><description><![CDATA[1 创建客户端
func NewClient(redis_conf string) *redis.ClusterClient {
    client := redis.NewClusterClient(&amp;redis.ClusterOptions{
        Addrs: ["10.1.11.17:6379", "10.1.11.18:6379"], // master node ip list
    })  
    return client
}

2. 基本命令
func Get(rd]]></description><category></category></item><item><title><![CDATA[golang 周期性执行]]></title><link>https://blog.youkuaiyun.com/Nuck_Cat/article/details/108886063</link><guid>https://blog.youkuaiyun.com/Nuck_Cat/article/details/108886063</guid><author>Nuck_Cat</author><pubDate>Wed, 30 Sep 2020 15:30:52 +0800</pubDate><description><![CDATA[func PeriodicRoutine(period int, f func()) {
        ticker := time.NewTicker(time.Second * time.Duration(period))
        go func() {
                defer func() {
                        if p := recover(); p != nil {
                                beeg]]></description><category></category></item><item><title><![CDATA[python rotating logger]]></title><link>https://blog.youkuaiyun.com/Nuck_Cat/article/details/108863791</link><guid>https://blog.youkuaiyun.com/Nuck_Cat/article/details/108863791</guid><author>Nuck_Cat</author><pubDate>Tue, 29 Sep 2020 10:43:37 +0800</pubDate><description><![CDATA[按文件大小进行滚动

def get_rotating_file_logger(name, log_level_, log_path, log_max_byte, log_backup_count):
    log_level = log_level_
    ch = RotatingFileHandler(log_path, maxBytes=int(log_max_byte), backupCount=int(log_backup_count))
    ch.setLevel(log_level.]]></description><category></category></item><item><title><![CDATA[python 按日期统计折线图]]></title><link>https://blog.youkuaiyun.com/Nuck_Cat/article/details/104916011</link><guid>https://blog.youkuaiyun.com/Nuck_Cat/article/details/104916011</guid><author>Nuck_Cat</author><pubDate>Tue, 17 Mar 2020 10:30:10 +0800</pubDate><description><![CDATA[代码
from datetime import datetime

import matplotlib.dates as mdates
import matplotlib.pyplot as plt

data_map_list = [
    {'2020/03/16': [16, 21, 27, 69]},
    {'2020/03/17': [19, 11, 37, 65]},
]

# ...]]></description><category></category></item><item><title><![CDATA[docker 安装 ceph 集群]]></title><link>https://blog.youkuaiyun.com/Nuck_Cat/article/details/104682072</link><guid>https://blog.youkuaiyun.com/Nuck_Cat/article/details/104682072</guid><author>Nuck_Cat</author><pubDate>Thu, 05 Mar 2020 19:27:26 +0800</pubDate><description><![CDATA[机器

10.10.10.10    master
10.10.20.20    slave
10.10.10.30    slave


条件

1. 均安装了 docker
2. ceph 数据盘挂载在 /home/service/var
3. 目录存在 /var/lib/docker/


设置 master 通过 ssh 免密登陆 slaves

ssh-keygen
modify sl...]]></description><category></category></item><item><title><![CDATA[centos 安装最新稳定版 docker]]></title><link>https://blog.youkuaiyun.com/Nuck_Cat/article/details/104661915</link><guid>https://blog.youkuaiyun.com/Nuck_Cat/article/details/104661915</guid><author>Nuck_Cat</author><pubDate>Wed, 04 Mar 2020 20:42:58 +0800</pubDate><description><![CDATA[yum remove \
    docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

yum install -y ...]]></description><category></category></item><item><title><![CDATA[iozone 安装使用]]></title><link>https://blog.youkuaiyun.com/Nuck_Cat/article/details/104648476</link><guid>https://blog.youkuaiyun.com/Nuck_Cat/article/details/104648476</guid><author>Nuck_Cat</author><pubDate>Wed, 04 Mar 2020 10:36:35 +0800</pubDate><description><![CDATA[环境
centos 7

安装
wget http://www.iozone.org/src/current/iozone-3-489.src.rpm
rpm -ihv iozone-3-489.src.rpm

cd /root/rpmbuild/SOURCES
tar -xvf iozone3_489.tar

cd iozone3_489/src/current/
make linux-ia...]]></description><category></category></item><item><title><![CDATA[静态库通过动态库菱形链接共享]]></title><link>https://blog.youkuaiyun.com/Nuck_Cat/article/details/103190130</link><guid>https://blog.youkuaiyun.com/Nuck_Cat/article/details/103190130</guid><author>Nuck_Cat</author><pubDate>Thu, 21 Nov 2019 20:44:19 +0800</pubDate><description><![CDATA[菱形
可执行程序 test
动态库 libcat.so  libdog.so
静态库 libstatic.a
libcat.so 依赖 libstatic.a
libdog.so 依赖 libstatic.a
test 依赖 libcat.so libdog.so

问题：静态库 libstatic.a 中的变量和函数会在 test 中存在两份吗？
答案：只会使用一份
工程

结构
···
.
├...]]></description><category></category></item><item><title><![CDATA[排序算法 c++ 实现]]></title><link>https://blog.youkuaiyun.com/Nuck_Cat/article/details/102934419</link><guid>https://blog.youkuaiyun.com/Nuck_Cat/article/details/102934419</guid><author>Nuck_Cat</author><pubDate>Wed, 06 Nov 2019 18:47:18 +0800</pubDate><description><![CDATA[代码
#include &lt;iostream&gt;                                                                                                                                                                            ...]]></description><category></category></item><item><title><![CDATA[valgrind 交叉编译 android arm/arm64 平台]]></title><link>https://blog.youkuaiyun.com/Nuck_Cat/article/details/102917710</link><guid>https://blog.youkuaiyun.com/Nuck_Cat/article/details/102917710</guid><author>Nuck_Cat</author><pubDate>Tue, 05 Nov 2019 16:02:58 +0800</pubDate><description><![CDATA[源代码目录运行编译脚本
#!/usr/bin/env bash

export NDKROOT=~/opt/android-ndk-r14b/
export AR=$NDKROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar
export LD=$NDKROOT/to...]]></description><category></category></item><item><title><![CDATA[C++虚函数表结构]]></title><link>https://blog.youkuaiyun.com/Nuck_Cat/article/details/91383407</link><guid>https://blog.youkuaiyun.com/Nuck_Cat/article/details/91383407</guid><author>Nuck_Cat</author><pubDate>Mon, 10 Jun 2019 16:32:18 +0800</pubDate><description><![CDATA[原文 C++ 虚函数表解析

相同类的不同对象共享同一虚函数表。
任何函数指针通过 cout 直接输出为 1，与原文描述有出入，也未找到 linux 每个表的结尾统一表示，待研究。
用long 类型指针，应其长度和所在机器指针长度一致。

$ g++ test.cpp -o test &amp;&amp; ./test

==== vitual function table ====
  [0] ...]]></description><category></category></item><item><title><![CDATA[线程安全查找表]]></title><link>https://blog.youkuaiyun.com/Nuck_Cat/article/details/90758709</link><guid>https://blog.youkuaiyun.com/Nuck_Cat/article/details/90758709</guid><author>Nuck_Cat</author><pubDate>Mon, 03 Jun 2019 20:45:22 +0800</pubDate><description><![CDATA[// thread_safe_lookup_table.h
#ifndef THREAD_SAFE_LOOKUP_TABLE_H
#define THREAD_SAFE_LOOKUP_TABLE_H

#include &lt;atomic&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
#i...]]></description><category></category></item><item><title><![CDATA[线程安全队列]]></title><link>https://blog.youkuaiyun.com/Nuck_Cat/article/details/90721938</link><guid>https://blog.youkuaiyun.com/Nuck_Cat/article/details/90721938</guid><author>Nuck_Cat</author><pubDate>Fri, 31 May 2019 19:39:36 +0800</pubDate><description><![CDATA[// thread_safe_queue.h
#ifndef THREAD_SAFE_QUEUE_H
#define THREAD_SAFE_QUEUE_H

#include &lt;string&gt;
#include &lt;memory&gt;
#include &lt;mutex&gt;
#include &lt;atomic&gt;
#include &lt;sstream&gt;
...]]></description><category></category></item><item><title><![CDATA[CAP 理论]]></title><link>https://blog.youkuaiyun.com/Nuck_Cat/article/details/89349083</link><guid>https://blog.youkuaiyun.com/Nuck_Cat/article/details/89349083</guid><author>Nuck_Cat</author><pubDate>Wed, 17 Apr 2019 09:14:30 +0800</pubDate><description><![CDATA[what
设计一个大规模可扩展的网络服务时要考虑三个特性：一致性（consistency）、可用性（Availability）、分区容错（partition-tolerance），三者不可能都实现。
证明
假设两个节点集{G1, G2}，由于网络分片导致G1和G2之间所有的通讯都断开了，如果在G1中写，在G2中读刚写的数据， G2中返回的值不可能是G1中写的值。由于A的要求，G2一定要返回这次读请...]]></description><category></category></item><item><title><![CDATA[python获取文件最后一行]]></title><link>https://blog.youkuaiyun.com/Nuck_Cat/article/details/89348514</link><guid>https://blog.youkuaiyun.com/Nuck_Cat/article/details/89348514</guid><author>Nuck_Cat</author><pubDate>Wed, 17 Apr 2019 08:00:45 +0800</pubDate><description><![CDATA[how
文件分大小两种情况，大文件从文件末尾逆序获取，为防止文件过大，通过 size_limit 控制返回；
小文件直接从头读取。

def get_last_line_of_file(file_name, size_limit=-1):
    file_size = os.path.getsize(file_name)
    with open(file_name, 'rb') as f:...]]></description><category></category></item></channel></rss>