"alloca" vs "placement new"

WHAT?!

For most time, we use malloc or new for memory allocation, which will get it on heap.

However, access memory on heap is not as effective as the memory on stack, because the heap is "free-floating region of memory". To the contrary, memory on stack is managed by CPU …

more ...

Quartile and Normal Distribution

What is Quartile?

Quartile is a concept of descriptive statics. The quartiles of a ranked data set are the three points that divide the data set into four equal groups, each group comprising a quarter of data.

Definitions

first quartile (Q1)

First quartile, also known as lower quartile, splits off …

more ...

破解节操的下限

啥?

节操精选

节操精选是一个没有下限的文字图片聚合类移动应用,现在支持Android/iOS移动平台。

界面

本人是一个非常懒的人,有电脑就不想碰手机。。。于是萌生了一个在PC端使用这个应用的想法。。。

HowTo

从界面上我们可以看出,这个App的逻辑其实比较简单。重要的部分有如下几个:

  • 获取CS通信协议(最重要)

  • 频道间切换(精选 - 热门 - 音频- 阅读)

  • 展示某一条精选

  • 在某一条精选中播放语音

获取通信协议

节操还是非常良心的!并没有在后台数据通信中进行任何加密的措施。

抓包工具我使用的是在Windows环境下的Fiddler

这个工具可以建立一个HTTP代理,手机通过代理上网,在电脑上就可以截获所有的数据包进行分析。

在Linux下,可以使用TinyProxy + Wireshark进行抓包,不过配置小麻烦。不过我一直是在Windows下抓包,然后在Linux下做分析和开发的。=。=。。。

图就不上了,如果大家有兴趣自己来搞的话,可以抓来试试。

简而言之,我们从HTTP包中的Content-type字段中,发现了我们想要的信息 —— application/xprotobuf

我去!真良心~

Protobuf简介 …

more ...

GeoHash算法

GeoHash

Geohash is a latitude/longitude geocode system invented by Gustavo Niemeyer when writing the web service at geohash.org, and put into the public domain. It is a hierarchical spatial data structure which subdivides space into buckets of grid shape.

简单说,GeoHash是一个将经纬度信息编码成一个string的算法。从而便于储存、查找。

GeoHash算法的步骤

GeoHash对经度纬度分别编码,原理是迭代做二分,进而逼近真实值。

我们以纬度举例 …

more ...

如何判断一个网站的地理信息

啥?

面试题:

有一个网站,如何判断这个网站的地理信息

方法

使用反向DNS

当我们只有网站的IP地址时,我们可以使用反向DNS来获得这个IP地址对应的域名。

反向域名解析,Reverse DNS。反向域名解析与通常的正向域名解析相反,提供IP地址到域名的对应。

我们可以使用dig -x来进行查询

$ dig -x 75.126.43.235

; <<>> DiG 9.8.1-P1 <<>> -x 75.126.43.235
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26688
;; flags: qr rd …
more ...

Codeforces Round #223 (Div. 2) 不完全不正确题解

由于大号已经进Div. 1了,所以接下来的几场Div. 2都是用小号做的。

等有实力切D题了,再去打一区。(弱

事情一直很多,所以题解落后了好久才发。

A. Sereja and Dima

纯模拟,Python随便搞

n = int(raw_input())
pokers = map(int, raw_input().split())

v = [0, 0]
p = 0

for i in xrange(n):
    if pokers[0] > pokers[-1]:
        v[p] += pokers[0]
        del pokers[0]
    else:
        v[p] += pokers[-1 …
more ...

用Misaka做为pelican的Markdown解析器

为啥?

Pelican内置python-markdown做为默认解析器,用来将用户的Markdown格式的文章转为网页格式展示。

然而python-markdown模块的解析逻辑有严重的Bug。例如一个未标明语言的代码块会被标出很多莫名奇妙的错误;还有C++中的指针符号*会被解析为斜体的符号*SomeText*,在代码块中会产生大量和语法高亮无关的斜体字。

在网上寻找了很久的答案,终于找到了一篇日文博客,其中讲到了使用misaka来替换python-markdown来解析日志。

两难的Metadata

我使用了上文提到的日志中的方法来替换解析器,效果拔群,日志中的解析问题完全解决了。但是日志中的Metadata并没有被隐藏,而是显示在了日志的最前面,非常影响心情(强迫症?)。

于是我分析了解析模块的代码。原来的解析模块使用了python-markdown的一个处理Metadata扩展,用来解析Metadata,并从正文中删除这一部分。

但是Misaka并不支持这种语法 …

more ...

读书 - 《Head first 设计模式》

Head first设计模式

豆瓣读书

为什么读这本书

在面XX家的时候,被问过一个设计模式问题。当时连面向对象都搞不懂,更不用说设计模式。

于是入了“四人帮”的设计模式来看,被里面的内容彻底搞晕。然后只能找了这本看起来很娱乐化的书来读。

这本书大概有600多页,比“四人帮”书厚很多。一个原因是这本书是“范例驱动”的,包含很多“项目”背景介绍,以及实现思路;第二个原因是,这本书的示例代码用的是Java

(笑,不黑了好嘛。。。

为什么要设计模式

这世界唯一不变的,就是变化

(没有逼格的人连名人名言都引用不好。。。

我们的代码总是需要不断的改变来适应现实世界中不断的变化。(烧死那个PM!)

我们需要一种对代码影响最小的方式来修改软件以适应变化。这就是我们使用设计模式的原因。

“内隐知识”

设计模式有了名字,人们就可以认识到它的存在。对于没有名字的东西,人们几乎不可能认识到它的存在,并对之进行讨论。这种不能用语言表达的知识我们称之为内隐知识。

其实我们在写程序的时候,或多或少都用到了“设计模式”,只是我们没有意识到而已 …

more ...

匈牙利算法

概念

交错路

交错路:设P是图G的一条路,如果P的任意两条相邻的边一定是一条属于M而另一条不属于M,就称P是一条交错路。

通俗点来说,就是把一个图中的路径染成红黑两种。然后找出一条路,使这条路红黑交错

注:交错路是无向图,图中的箭头只是为了便于观察。

例如下图中的:(3) -> (2) -> (1)

图1

从端点扩张交错路

假设我们已经有一个红黑交错路P,其端点为AB,其路径被标记为黑红。此时,我们向P中的一个端点(假设为A)加入一条边T

此时我们有边T + 交错路P(黑红)。当我们将边T标记为黑色时,我们就扩展了交错路P。 如果我们要保持红黑交错路的性质。则我们必须将边T …

more ...

Codeforces 3C - Tic-tac-toe

啥?

Tic-tac-toe是我很久之前在CF上做的一道题。非常考细心的模拟题。

最近有同学和我讨论过类似的问题。于是拿出来重新做一遍。练练手。

原题做法

没有任何“算法”成分。纯模拟。

又由于数据量实在是太小(3 × 3的矩阵),所以只要是思路正确。代码怎么写都能过。

于是在这里就不赘述。手快的众位10分钟切此题无压力。

What's new?

如果我们扩展一下这个问题。如果让你设计一个Tic-tac-toe的对战系统(人机对战、人人对战等),你将如何设计?

the STATE pattern

我们可以看出,这个对战系统其实可以用一个状态机来表示。

https://github.com/Wizmann/assets/raw/master/wizmann-tk-pic/blog-tick-tac-toe.png

于是我们的对战系统也可以写成一个状态机的模式。

show me the CODE

首先我们声明一个State接口类型。

由于Tic-tac-toe游戏只有两种操作类型:P1 moveP2 move

所以我们的接口就很简单。

class State {
public:
    State …
more ...