Life is Hard

捡起了多年没有更新的博客,做项目或者有意思的东西会往上更新,尝试让自己输出。

在ClickHouse使用Kudu codegen遇到的编译问题

Apache Kudu - Fast Analytics on Fast Data是一个优秀的列式存储系统,现阶段我们把Kudu存储对接在Clickhouse上作为一个存储引擎。本文首先介绍了ClickHouse在编译的时候怎么实现降低二进制对操作系统的依赖的,然后讲述了Kudu如何使用LLVM来实现Codegen功能,最后介绍了编译和运行的时候遇到的一些编译上的坑以及方案。 ...

2023-06-11 · qhsong

几个有趣的面试概率问题汇总

最近经历了一些面试,总结了一些有意思的两个问题。他们用到的概率只是都很简单。但是想不到就是想不到。 ...

2018-09-23 · qhsong

两个C++小问题汇总

本文对近期使用C++的两个问题进行汇总。 ...

2018-01-07 · qhsong

C++指向成员函数指针

C++的语法总是会隐藏在一些边角上的语法,让你觉得还能这么干。最近在了解boost::bind的时候发现了这个语法,之前都不了解这个语法的。拿出来介绍一下,也算记录一下。这个语法在boost::bind还有Inside C++ Object Model中都有用到。 代码和表达均来自与ref[1]。 成员函数指针 废话不多说,上代码: class Foo { public: int f(string str) { cout<<"Foo::f()"<<endl; return 1; } }; int main() { int (Foo::*fptr)(string) = &Foo::f; Foo obj; (obj.*fptr)("str"); Foo *p = &obj; (p->*fptr)("str"); } 如上代码所示, int (Foo::*fptr)(string)定义了一个Foo类中的一个成员函数指针,其指向了Foo::f函数。相比起普通函数存放的是函数所指向的地址,其存放的是这个函数在类中相对的offset,这样只要是有相同的内存offset的均能互相转换。 所以要调用它,必须绑定在对应的class object的地址上,才能调用该函数。 ...

2017-10-15 · qhsong

使用Caddy快速搭建http2 proxy

Caddy介绍 Caddy是一个使用Golang开发的http服务器,其主打的特点就是快速支持https和HTTP2。本站的博客也是使用它搭建的,详细搭建过程可以参考这里。最近在其更新的0.10.7中,支持了Froward Proxy,Chrome浏览器也内建了对HTTP2 proxy的支持。 Caddy的Proxy支持一下功能: HTTP2 Proxy Probe resistance,当验证错误时,不会返回HTTP 407 错误。当有Probe进行探测时,其不会就直接暴露出自己是一个Proxy(实验阶段,比较有意思) Basic Auth IP hiding Servers PAC file ...

2017-09-24 · qhsong

sofa-pbrpc源码分析(1)

介绍 sofa-pbrpc是百度开源的一个C++ RPC库,使用Google Protobuf作为序列化协议,Asio网络库开发的一个C++ RPC库,现在有很多公司也都在使用。用他来学习boost::asio,C++11的一些新语法是个不错的选择。 计划会通过一系列的文章来研究这个库,并且学习他的一些用法,以及C++语法的笔记。 一个典型的服务器端程序如下所示: int main() { SOFA_PBRPC_SET_LOG_LEVEL(NOTICE); sofa::pbrpc::RpcServerOptions options; options.work_thread_num = 8; sofa::pbrpc::RpcServer rpc_server(options); if(!rpc_server.Start("0.0.0.0:12321")) { SLOG(ERROR, "start server failed"); return EXIT_FAILURE; } sofa::pbrpc::test::EchoServer *echo_service = new EchoServerImpl(); if (!rpc_server.RegisterService(echo_service)) { SLOG(ERROR, "register service failed!"); return EXIT_FAILURE; } rpc_server.Run(); rpc_server.Stop(); return EXIT_SUCCESS; } RpcServerOptions类里面主要是启动server的一些参数,位于rpc_server.h文件中,主要定义的是Server的启动参数,如工作线程数量、io_service 池大小、keep_alive时间等。 ...

2017-05-26 · qhsong

使用Caddy和Hugo构建个人博客

介绍 Hugo是一个强大的静态博客生成器,由spf13使用Golang开发。在性能和生成文章的速度上都不错。目前的版本是0.20.6,依然没有迈出1.0的大版本号。一直在用Hugo进行博客的写作。(半年多没有更新博客了,逃 Caddy同样也是一个由Golang开发的HTTP server,其最大的亮点就是内建了HTTPS和HTTP2的支持,同时自动能够向Let’s Encrypt申请证书。同时,支持Middleware的功能,使用Golang撰写的Middleware能够支持各种各样的功能,同时任何人都可以撰写自己的Middleware,个性化这个HTTP Server。 ...

2017-04-30 · qhsong

Yubikey 4 入手心得和折腾体会

Yubikey 4 介绍 Yubikey是国外一家公司出的用来做OTP的一个硬件设备,同时它也是一个GPG 的smart card。买它的原因是因为公司需要我们使用Github的人都最好有一个GPG Key对我们的Commit做个签名,而证书的管理是个难题,证书拷过来拷过去的也就没有什么安全性可言了。这东西在Tuna那边已经被安利了好久了,于是就买了。结果发现玩的根本停不下来,太有意思了。OTP功能到哪里都适用,最近都把我的ssh登陆换成了使用Yubikey来认证,感觉比我那个证书登陆不知道高到那里去了。 Yubikey 4功能 Yubikey 4主要有两个功能,一个功能是OTP和两步验证,另外一个功能是GPG smart card。 ...

2016-10-15 · qhsong

在Centos7.3下开设一个饥荒服务器

Centos7.2下建立饥荒服务器 坑爹的Klei,2年前把新建服务器的方式换了,然后饥荒wiki上不更新。找了很久才找到教程,主要参考: Klei论坛Linux配置教程(配置文件有问题) 知名博主ttionya(配置文件主要参考) Klei论坛关于配置文件解释 思路上来说,主要需要先安装Steam,然后通过Steam安装DST(Don’t Starve Together)。然后进行相关配置文件,然后run就好了。要新建一个服务器需要开启2个DST实例,每个实例大概需要500-600M内存,再加上其他mod啊什么乱七八糟的,建议在2G内存服务器上开服。1G内存的服务器基本开不起来。CPU倒不是太大问题,基本上单核也就能吃得消。 忘了说了,请不要在root账户下开服,不安全。除了第一步,其他请在另外非管理员账户下做。 ...

2016-10-03 · qhsong

从男人开始学习bash(1)

man是大家经常用的命令,但是学习bash的时候有很多书。今天发现man bash是一个不错的资源,摘抄一些供大家学习。 脚本加载顺序 When bash is invoked as an interactive login shell, or as a non-interactive shell with the –login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The –noprofile option may be used when the shell is started to inhibit this behavior. When a login shell exits, bash reads and executes commands from the files ~/.bash_logout and /etc/bash.bash_logout, if the files exists. When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists. This may be inhibited by using the –norc option. The –rcfile file option will force bash to read and execute commands from file instead of ~/.bashrc. 当bash作为一个交互式的登陆程序启动时,首先会读取/etc/profile里的内容,然后依次找~/.bash_profile, ~/.bash_login, and ~/.profile。退出时,也是执行/.bash_logout ,/etc/bash.bash_logout。当以不登陆的shell启动时,就执行~/.bashrc。 ...

2016-08-30 · qhsong