blog | 逍遥郡


  • Home

  • Archives

  • Tags

  • Search

使用gpg保护私密数据

Posted on 2012-01-01 |
鉴于前段时间csdn、天涯等等一群的爆库事件,虽然据说起源在于抗议实名制,但也暴露了国内网站的安全措施实在堪忧。而且现在云服务盛行,但是又有谁能打保票,保存在云端的数据就是安全的呢?所以个人数据的安全性只能依靠自己了。 gpg 是PGP的GNU开源实现,非常可靠,至少Linux的密钥管理都是用的它。我们拿来可以有俩用途: 加密解密 需要保存到云端的文件,使用公钥加密,只有自己的私钥+密码才能解密。 做数字签名 用私钥给自己生产的文件做签名,别人可以用公钥进行验证这份文件的可靠性。 下边列举一些常用场景,更详细的使用方法可以查manual。 生成密钥 第一步你需要生成自己的密钥才能使用: gpg --gen-key 按照如下步骤: 密钥种类可以选择 DSA and Elgamal。 按照提示输入Name、Email和备注信息,最终要求输入一个密码,用来保护私钥。其中,Name就是日后会用到的uid,建议不要设置得太长太复杂,这里假定Name设置为 foo 。 运行之后你的密钥就算生成了,生成的 ...
Read more »

在Apple Mail里删除Gmail邮件

Posted on 2011-12-30 |
Apple Mail和Gmail一直没有很好的搭配工作过。尤其Apple Mail里删除一封邮件的时候,其实在Gmail里只是Archive了这封邮件。这就很烦人,因为有时候你的确是想删除这封邮件,让它从你的视野里消失,而不是在将来搜索的时候,它又蹦到你眼睛里来了。 如果按照Gmail的help文档里设置,那是无法避免这个问题的。但是Apple Mail 5.0里的确可以通过设置实现上边的功能,需要三个步骤。 首先,在Gmail IMAP Settings里设置当删除一封邮件的时候把它移动到Trash里,而不是Archive。 然后,在Apple Mail里把[Gmail]/Trash对应到“废纸篓”,其他的几个邮箱也应该做类似的对应。 最后,在Apple Mail的Setting里设置“将已删除的邮件移动到废纸篓”。 设置完之后,Apple Mail的删除按钮的功能将和Gmail的删除按钮功能一致了。可能会有几秒到一分钟的延迟。 不过Apple Mail的归档按钮目前还是没法和Gmail的归档按钮一致。因为Apple Mail的归档会默认在Gmail里新建一个 ...
Read more »

决策树相关

Posted on 2011-12-16 |
[TOC] 决策树是一种很常用分类学习算法,它的学习结果非常易于理解和解释,就是一组用于划分假设空间的if-else规则的集合。决策树由结点和边组成。结点有两种类型:内部结点,表示一个特征或属性;叶结点,表示一个类别。边表示相应结点对应特征的取值。 决策树学习算法包含特征选择、树的生成和树的剪枝三个过程。决策树表示给定特征条件下类的条件概率分布,决策树的深浅对应着不同复杂度的概率模型。决策树根据不同特征对训练集的划分递归生成,对应于模型的局部选择,树的生成只考虑局部最优。决策树的剪枝则是为了避免决策树过拟合,提高决策树的泛化能力,树的剪枝考虑全局最优。 特征选择 信息增益 信息增益(information gain)在前文已有叙述。简单说就是,特征 $T$ 给系统带来的信息增益是系统原本的熵与固定特征 $T$ 后的条件熵之差。 \[g(T,C) = H(C) - H(C|T)\] 具体的特征选择方法是:对训练集数据计算每个特征的信息增益,选择信息增益最大的那个特征。 由于信息增益的大小是相对训练集而已,并无绝对意义。因此,在ID3中用信息增益选择属性时,总是偏向于选择分枝 ...
Read more »

虚函数和bind性能对比

Posted on 2011-12-08 |
前几天水木上有人讨论虚函数和标准库tr1::bind的性能问题,一致认为虚函数性能比bind好得多;但我觉得可能有待商榷,于是做了个测试,结果发觉bind的性能也并非那么不堪。 使用g++的测试结果: g++ 4.2.1, -O0 virtual function :132833us bind :564099us g++ 4.2.1, -O2 virtual function :60687us bind :59534us 可以看出在关闭优化的情况下,bind的性能的确要差很多,时间开销是虚函数的四倍还多;然而,在打开优化的情况下,bind的性能和虚函数在伯仲之间,甚至还稍微好一些。 思考一下虚函数和bind的实现: 虚函数一般的实现都是基于vptr和vtbl。在运行时每个对象会有一个vptr,它由ctor、copy assignment等维护,指向该类的vtbl。vtbl是一个函数指针表,保存着该类所有虚函数的实现地址,该表独立于类对象存在,是在编译期就可以确定的。当调用一个虚函数时,经历这样 ...
Read more »

Boost.Asio的使用技巧

Posted on 2011-11-29 |
[TOC] 最近尝试使用了一下Boost.Asio,不知道是否因为各大公司都有自己相对成熟的网络库的缘故,网络上Asio相关的资料实在不多,而且很多翻来覆去就是那几个简单的示例,所以打算自己小结一下。总的来说Boost.Asio是个非常易用的库,避免了你在各种系统底层API之间的挣扎,让你可以非常迅速的开发出高并发的网络服务器程序。 基本概念 asio基于两个概念: I/O服务,抽象了操作系统的异步接口 boost::asio::io_service::service: boost::asio::io_service I/O对象,有多种对象 boost::asio::basic_io_object: boost::asio::ip::tcp::socket boost::asio::ip::tcp::resolver boost::asio::ip::tcp::acceptor boost::asio::local::stream_protocol::socket 本地连接 ...
Read more »

文本分类技术基础

Posted on 2011-11-28 |
[TOC] 问题定义 分类:给定一个对象,从一个事先定义好的分类体系中挑出一个或多个最适合该对象的类别。 文本分类(Text Categorization):在给定的分类体系下,根据文本内容自动的确定文本关联的类别。从数学角度看,文本分类是一个映射的过程,它将未标明类别的文本映射到已有的类别中,该映射可以是一对一或一对多的映射。 \[f: A \to B\] 其中, $A$ 表示待分类的文本集合, $B$ 表示分类体系中的类别集合。 文本分类属于有监督的学习(Supervised Learning),也是NLP的一个子领域,基本步骤如下: 定义分类体系,即确定具体要分类的类别。 将预先分类过的文档作为训练集,对文档做分词、去停用词(stop words)、去无用词性、去单字词等准备工作,对英文等语言还需要做词干提取(stemming)。 确定表达模型,对文档矩阵进行降维,提取训练集中最有用的特征。 应用具体的分类模型和算法,训练出文本分类器。 在测试集上测试并评价分类器的性能。 应用性能最高的分类模型对待分类文档进行分类。 评价指标 混淆矩 ...
Read more »

给终端下的Emacs找回ctrl-s键

Posted on 2011-11-20 |
经常在终端下工作的估计都遇到过烦人的Ctrl+s键的问题,虽然可能在从前网速很慢的情况下很有用,但是现在看来这类所谓的Flow Control已经没有什么意义了。更何况,它总是跟Emacs的isearch-forward 这个常用命令的默认键位冲突,所以如果Ctrl+s不好用,那真的太麻烦了。 所幸一般的终端下都能够处理这个问题,最不济的话也可以通过stty命令进行设置,比如: $ stty -xon $ stty stop undef 但是最近公司跳板机上的securecrt居然死活不放弃Ctrl+s,怎么设置都会吞掉,真是太恶心人了。于是在它的设置里翻了一下,发觉有个workaround。打开菜单 Session Options → Terminal → Emulation → Mapped Keys,可以利用它内置的键位映射功能,先把Ctrl+s绑定到另外一个键位上,可以选择一个Emacs里不常用的键位,比如Ctrl+],发送的字节是 \035。如果偶尔要使用Ctrl+],就直接 Meta+x abort-recursive-edit 吧。 然后,可以在Emacs里打开 ...
Read more »

特征工程(Feature Engineering)

Posted on 2011-10-23 |
[TOC] 一个典型的数据科学处理流程长这样: 项目调研/数据收集 探索性分析 数据清洗 特征工程 模型训练(包括交叉验证和超参数的精调) 项目交付和见解 什么不是特征工程? 最初的数据收集 创造目标变量 数据清洗(移除重复变量、处理丢失的数据、修正遗失的标签等工作) 规则化或者归一化(交叉验证过程) 利用PCA选取特征(属于交叉验证过程) 有哪些特征工程方法? 交互特征,如特征相加、相减、相乘、相除 特征表示,如映射数值到分类(离散化)、合并稀疏特征(rare) 外部数据,如时间序列、地理编码、外部API(搜索、图像等) 错误分析,如误差分析、类型分割、非监督聚类(误分类的基础上) 数据清洗 缺失值的处理 针对缺失值常用的处理方法有:设置为均值、设置为众数、设置为Unknown等,或者这个样本不学习缺失特征的权重。 异常值检测和处理 通过特征取值的分布情况可以比较容易识别出异常的取值,取分位点做上下限截断以及对特征值做分桶后做值平滑是简单易操作的异常值处理方法。 特征处理(Feature ...
Read more »

文本相似性计算

Posted on 2011-09-25 |
[TOC] 相似性计算常常是聚类分析、数据去重、信息检索以及推荐系统的一个基础工具,这里列举了一些常用的特征提取和相似性计算方法。 集合模型 基于集合模型的相似度计算可以先使用所谓k-Shingling的办法,对一个句子或者文档做切片,对于中文文档可以把每个汉字当作一个token,每k个token作为一个切片,然后对得到的切片集合计算Jaccard系数 1: \[J(A,B) = {|A \cap B| \over |A \cup B|}\] 向量空间模型 基于向量空间模型(VSM)的相似度计算一般会先对文档进行分词,然后对每个词计算其权值,常用的办法是TF-IDF。TF-IDF的主要思想是:如果一个词在一篇文档中出现的频率越高,其他文档中出现越少;或者 如果包含该词的文档越少;则认为该词有很好的类别区分能力,适合用来分类。词频TF、逆文档频率IDF及该词对应权值计算很简单: \[\mathrm{tf}(t, d) = \frac{|\{t \in d\}|} {|d|} \\ \mathrm{idf}(t, D) = \log \frac{|D|} {|\{d \in ...
Read more »

Berkeley DB的使用

Posted on 2011-09-20 |
最近碰到一个项目需要多进程读写一份共享数据,并且共享数据的几个字段需要有倒排索引方便查询,想利用现有数据库快速建立一个原型,于是调研了一下流行的一些nosql数据库。发觉Berkeley DB虽然是一个既古老又流行的开源数据库,但是关于BDB使用的文章却很少,甚至公司DBA对BDB的特性都不太了解……于是花了好几天读了一遍BDB的references和c api,发觉BDB还是个相当复杂的系统。以下对一些常见问题做一个笔记: 数据存储 Berkeley DB的数据存储可以抽象为一张表,其中第一列是key,剩余的n-1列(fields)是value。 BDB访问数据库的方式,或者套用MySQL数据库的说法是存储引擎,有四种: Btree 数据保存在平衡树里,key和value都可以是任意类型,并且可以有duplicated keys Hash 数据保存在散列表里,key和value都可以是任意类型,并且可以有duplicated keys Queue 数据以固定长度的record保存在队列里,key是一个逻辑序号。这种访问方式可以快速在队列尾插入数据,然后从队列头 ...
Read more »
1 … 6 7 8 … 19
Julian Qian

Julian Qian

记录编程、Hack和自娱自乐的一些玩意。

189 posts
60 tags
RSS
Creative Commons
© 2024 Julian Qian
Powered by Jekyll
Theme - NexT.Mist