Fade Temple
@小差小差- Posts
- Categories
- Galleries
- Dixit
-
Apr 29, 2018
使用gRPC创建简单聊天程序
作为一篇gRPC调研的总结,本篇主要介绍了gRPC在go语言上的使用方式,并着重记录了如何使用gRPC创建一个简单的聊天程序。 gRPC介绍 gRPC是Google开源的一款远程进程调用(RPC)框架。它使用http/2传输协议,使用Protocol Buffer作为编码协议。 这使得框架本身就带有全双工,消息压缩,节省带宽,跨语言等特性。 环境准备 在安装好go语言环境的情况下,还要额外安装以下工具和库。 获取gRPC库 go get -u google.golang.org/grpc 安装Protocol Buffer v3相关工具 下载protoc编译工具 可以在github上下载现成的二进制包。 解压,并将protoc命令工具移入PATH环境变量中。 下载go语言的protoc插件 protoc需要对应语言的插件才能把pb文件转换成对应的语言,所以下载完protoc之后,需要下载pb的go语言插件: go get -u github.com/golang/protobuf/protoc-gen-go 同样,将protoc-gen-go加入到PATH环境变量。 pb文件定义 简单例子 pb中可以使用service关键字定义对应的RPC服务集合,并使用rpc关键字定义对应的方法名、接收参数和返回参数; 例如,我们要定义聊天服务,并定义一个交换姓名的RPC接口,可以定义如下pb文件: service...
Read More -
Mar 12, 2018
加权随机抽样
原论文《Weighted Random Sampling》来自Efraimidis、Spiraki, 发表于2005年,以下为部分翻译 问题定义 不放回随机抽样(random sampling without replacement(RS))问题要求从大小为\(n\)的集合中,随机抽取\(m\)个不同元素。如果所有的元素被抽取出来的概率一致,则称之为均匀随机抽样(uniform RS)。一次遍历解决均匀随机抽样问题在推荐阅读的[1,5,10]中有讨论。在数据流上使用蓄水池类型(Reservoir-type)均匀随机抽样算法在推荐阅读[11]给出。推荐阅读[9]给出了一种可并行计算的均匀随机抽样算法。对于加权随机抽样(weighted random smapling(WSR)),它指的是所有元素都含有权重,每一个元素被取出的概率是由元素本身的权重决定的。WSR问题可以使用以下算法D来定义: 算法D,WRS定义 输入:含有\(n\)个带权重元素的集合\(V\) 输出:含有\(m\)个元素的加权随机抽样结果集\(S\) 1: for \(k = 1\) to \(m\) do 2: 元素\(v_i\)在第\(k\)回合被选出来的概率为\(p_i(k)=\frac{w_i}{\sum_{s_j\in V-S} w_j}\) 3: 从\(V-S\)中选出\(v_i\),然后插入到S中 4:...
Read More -
Mar 4, 2018
蓄水水池抽样---从未知长度的序列中随机抽取m个元素
在遇到问题时,突然发现了一种精妙的算法,那可真谓是美丽的邂逅。 场景描述 在一个链表(l)里,随机获取m个元素,这m个元素满足给定的条件,并且保证所有满足条件的元素被取出来的概率相等。假设满足条件的元素个数为n,则每一个元素被取出的概率为\(\frac{m}{n}\) 解法 package main import ( "container/list" "math/rand" ) // 假定目标的数据结构 type Data struct { Condition int Value int } func ReservoirSample(l *list.List, m int, cond int) []*Data...
Read More -
Feb 14, 2018
致格沫
如果 你愿意 我可以静静地凝视 你甜甜的微笑 印在我脑海里 你无与伦比的美丽 如果 你愿意 我可以慢慢地倾听 你柔柔的言语 化在我心海里 你花开般的声音 如果 你愿意 我可以细细地珍藏 你留下的东西 放在我梦里 你与我美好的回忆 那么今天 我捧着一颗真诚的心 在远方的冬日里 向你讲述我的思念 向你表白 我的心意 格沫 对于今后那 无尽的晴空 满天的繁星 我们一起度过 你愿不愿意...
Read More -
Feb 11, 2018
苹果电脑上的软件使用技巧
macOS版本:10.13.3 High Sierra VirtualBox的文件夹共享 下载安装完VirtualBox(版本号5.2.6 r120293) 使用另外下载好的ubuntu-17.10.1-server-amd64.iso安装Ubuntu17.10 (Guest OS) 从Settings=>Shared Folders=>点击添加按钮=> 选择宿主机文件夹(如/Users/liqingshou/Work)=> 文件夹名称(随意,如Work)=> 勾起Auto-mount(自动挂载)和Make Permanent(永久创建) 遇到问题 设置完之后,无法在系统里找到对应的挂载文件 发现/mnt或者/media目录都是空的,/dev也找不到,查了才知道需要安装GuestAdditions 下载Extendsion Pack: Oracle_VM_VirtualBox_Extension_Pack-5.2.6-120293.vbox-extpack,并双击安装 启动Ubuntu 在VirtualBox的菜单上找到Device=>Insert Guest Additions CD Image 如果出现 Unable to...
Read More