Group Polarization – 群体极化

最近把Cass Sunstein的两本书看了下,《网络共和国》和《极端的人群》。在《网络共和国》里面作者用了一个章节的内容里面说明了“群体极化”这么一个现象;《极端的人群》则是整本书都在围绕这个主题在展开。

一个团体的成员一开始就有某种倾向的时候,在经过商议讨论之后,人们会朝更加偏向该倾向的方向继续移动,最后形成极端的观点。 – 《网络共和国》by 桑斯坦

前两天在在知乎上看到有人问为什么世嘉的粉丝虽然为数不多但是却十分的疯狂与执着,大脑里第一反应就是“群体极化”这个词。

现在,“世嘉”这个词被提起的时候几乎已经是失败的代名词,这样就会加剧小圈子的极端化。因为只有在这个小圈子当中,自己支持世嘉的观点才会被赞同,找到与自己相同观念的人一起抱团强化这个观点。

相同的,网络上各种倾向的圈子如“锤子手机粉”、“任粉”、“五毛”、“美分”、“基督教”、“穆斯林”、“转基因”等等都有类似现象。收集了些知乎上的例子:

罗永浩现在被黑成这样,你为什么还支持他?
为什么要黑任天堂?
为什么国内有很多人提倡和鼓励移民?
是不是知乎上很多人讨厌穆斯林?
为什么在一些知乎问题下,基督徒和圣经受到了一定程度的反感?
为什么有人反对转基因?

以上这些讨论中都有很典型的“打标签”、“站队”的现象。而在一个讨论的环境中,如果每个人都已经知道自己被打上了某种标签,比如:(“索饭”、“任粉”、“xbox粉”、“世嘉粉”等)或者(“支持转基因”、“反对转基因”),那么这种讨论发生的过程中,人们就不太可能会去认真的听取标签不同的人的观点。在这些讨论之后,原本就有某种倾向的人往往会更加坚定自己原有的观点,大家都在圈子内的讨论中与反对者的嘲弄声中不断的走向更加的极端与坚定。

Continue reading “Group Polarization – 群体极化”

Difference Engine – 差分机

硅谷有一个计算机历史博物馆,很喜欢那里。
那有一个被实现的差分机,看到一个真实的实现在那的时候真的好激动。

diff

差分机,那么就来爽一把吧:

1.f(n)的差分:
\Delta f(n)=f(n+1)-f(n)

2. 从f(n) = n^2开始说起
则我们有:
\Delta f(n) = (n+1)^2 - n^2=2n+1;
\Delta (\Delta f(n)) = \Delta (2n+1)=2;
\Delta (\Delta (\Delta f(n))) = \Delta2 = 0;
为了方便表示,我们把\Delta (\Delta f(n)) 记作\Delta^{2}f(n),把\Delta(\Delta^{2}f(n))记作 \Delta^{3}f(n)
于是可以很容易的知道\Delta^{a+1}f(n)=0,a是f(n)的最高次项的次数

3. 利用差分来计算f(n) = n^3
我们可以列一张表:
f(0),\qquad f(1),\qquad f(2),\qquad f(3) \\
\Delta f(0),\quad \Delta f(1),\quad \Delta f(2)
\Delta^{2}f(0), \quad \Delta^{2}f(1)
\Delta^{3}f(0)
因为我们知道\Delta^{4}f(n)=0,所以最后一行全是常数。
当表中第一行写出来了,下面一行的数只需要根据差分的定义把它左右肩上的两数相减即可得到。
f(n) = n^3代入,上面的表就是:
0, 1, 8, 27
1, 7, 19
6, 12
6
因为我们知道对于任何n,\Delta^{3}f(n)=6, 所以我们又可以把这个表填成:
0, 1, 8, 27
1, 7, 19
6, 12
6, 6, 6, 6, 6, 6, 6, 6, 6,……
又因为根据差分的定义: \Delta^{i} f(n)=\Delta^{i-1}f(n+1)-\Delta^{i-1}f(n),而且我们已知了最后一行的所有值,于是把最后一行往上面一行叠加可得:
0, 1, 8, 27
1, 7, 19
6, 12, 18, 24, 30, 36, 42, 48, 54, ……
6, 6, 6, 6, 6, 6, 6, 6, 6, ……
倒数第二行又可以往上叠加,如此循环往复可得:
0, 1, 8, 27, 64,125, ……
1, 7, 19, 37, 61, 91, ……
6, 12, 18, 24, 30, 36, ……
6, 6, 6, 6, 6, 6, ……

4. 一般化
设f(n)是n的r次多项式,则我们只需要把f(n)的前r个数值算出,机械的列出f(n)的r阶差分三角,我们即可机械性得到对于任意n的f(n)值

5. 加法器的实现
机械上面,使用齿轮实现一个加法器还是很容易的,如下图:
gear

被加数在左边这个齿轮上,加数在右边的齿轮上。齿轮动起来之后左边齿轮的数值就被加上相应转动的齿轮数,如果有进位,会拨动左上角这个小零件表示有进位。

5. 小数的表示
12位的差分机,存储1是这么做的:
000000000001.
加上7
000000000007.
等于
000000000008.
这不会有什么问题。

如果是这样:
000000000001.
除以7
000000000007.
等于
000000000000.
这样就不对了

于是我们这么表示1:
0001.00000000
除以7
0007.00000000
等于
0000.14285714
这样精度就大大的被提高了

6. 负数的表示
与计算机内部一样,用的是补码,不过是10的补
负3:
我们先写一个3
003.000000000

999.999999999


996.999999999
加上
000.000000001

997.000000000
这个就是用补码来表示的-3,和二进制补码一样,首位非0则表示该数是负数

我们来计算7加上-3:
007.000000000

997.000000000

004.000000000
首位为0,表示这是个正数
负数这么表示的重要性在于,我们可以用已有的加法器来实现减法

7. 计算sin,e^x等非多项式函数
我们有泰勒级数呀~
\sin x = \sum_{n=0}^{\infty} \frac{(-1)^n}{(2n+1)!} x^{2n+1}<br /><br /><br /><br /><br /><br /><br /><br />
e^{x} = \sum^{\infty}_{n=0} \frac{x^n}{n!}
利用泰勒级数,我们就可以利用多项式来计算任意函数f(x)

8. 分析机
有了以上的理论基础,疯狂的巴贝奇设计了个惊天地泣鬼神的机器 – 分析机
分析机用了类似汇编一样的语言进行输入,而且是图灵完备的
也就是意味着,我们现代计算机所能实现的功能,分析机都可以实现
这东西在历史上从来没有被实现过。

9. 蒸汽朋克
不同于电磁,机械是可触摸的,更加的形而下一些。
当我第一次看到有人在Minecraft里面实现了一个CPU的那个震撼感觉:
21023932888

用红宝石电路实现了一个电脑!真实可见可触摸的运算电路!
真的很想看看这东西如果是一个真实世界的大楼那样的存在会是何等的壮观。

如果,分析机被实现出来了,会不会是这样的摩天大楼?
如果,科技树是这么点的,我们的世界会不会完全的不一样?
Intel会不会正在宣传他们最新的集成齿轮核心已经做到了10nm工艺?
显示器厂商会不会说他们最新的活字彩色金属屏幕的分辨率已经到了1024*768?
快速傅里叶变换在那个时空会不会成为一个只是很美丽却找不到应用的算法?
20世界最伟大的算法会不会是“快速初值生成算法”?
这种机械体系下,齿轮所在的位置就表示了数值,所以不存在现代内存断电之后数据就消失的问题,也就是说开机是0秒启动。

各种各种可以大开的脑洞~这是人类机械设计智慧的巅峰,只是现代的科技树这里的点似乎都加到机械表上去了…
这是一棵从来没有被点开的科技树,一切的可能性,都只存在手稿上和想象中。
何夕的《伤心者》虚构了一个悲剧的数学家。
巴贝奇是个历史上真实存在过伤心者。
他是不幸的,因为他从来没有能够实现他的设计。
然而他也是幸运的,因为他不是孤独的一个人。
Ada Lovelace看到巴贝奇那个1/7完成版差分机时候,她的眼睛中的亮光,一定是看到了无限可能的未来。

后来,我终于在计算机历史博物馆看到了差分机的实现,听着这迟到了一个半世纪的机器转起来发出咔咔咔咔咔咔咔的声音激动&感动的浑身发抖。

工匠有时尽

怎么就没弄清楚这个问题呢,要是想弄个桌子凳子,我就找个工匠做。要是我要建个高楼大厦,怎么可能会找工匠做,这时候要找的是工程师。

手机的复杂度,不是工匠可以handle的了的,再有情怀都不行。

关键词:罗永浩,锤子手机

论折腾

关于两个操作系统的故事:Windows & Linux

和几乎所有人一样,买的第一台电脑,是个预装了Windows系统的。Windows XP,非常的好用,写文件上网玩游戏写代码无所不能。但是,我心里从来没有“自豪而骄傲的使用XP”的感觉。对呀,用XP有什么好骄傲自豪的呢?XP是如此的寻常平凡。

后来,我开始用了Fedora,一个很常见的Linux发行版。从普通用户的角度来看,这货难用极了,图形界面丑+速度慢,办公软件和MS的Office完全不是一个档次的,想玩的游戏很多都不能跑,各种配置还得要到命令行去,总之就是各种折腾。唯一的优点,或许就是系统对程序员十分的友好。但是,我却一直有“折腾并自豪的使用Linux”的感觉,我也会跟朋友们主动谈论起我在用Fedora(对于XP,这是我绝对不会做的事)

关于两辆模型车的故事:四驱车 & 预装好的四驱车

小学时候,随着一部四驱小子动画片的上映,奥迪双钻也适时推出了各种同款四驱车,各种大卖。那时候班上的男生们,都因为拥有一辆四驱车而自豪。

那时候推出的四驱车有两类,一种是零件,需要自己花时间看说明图纸一点点的拼起来的;还有一种是整车模型,买来就能跑。

我的记忆中,身边没有任何一个小伙伴买那种整车模型。买四驱车,就是为了享受拼装时候的折腾呀!如果已经装好了,那还玩个啥?(同理,没人买拼好的乐高玩具或者是拼好的高达模型)

关于追女生的故事

总是听到这样的故事,小A对那个付出了无数心思做尽每件好事(却怎么都追不上/才追上)的女生念念不忘。总是消耗无数沉没成本却无法及时止损。不是有这么一句话么,“人都是会犯贱的”。

PUA们甚至有个理论,追女生时候正确的做法应该是轻松的吸引对方,自己不要投资,而是要让对方为自己投资。

关于折腾

折腾,geek们把这个词视为褒义词,折腾并自豪着。然而折腾不一定是好事,Linux在桌面领域仍然份额那么小,备胎心中的女神依旧是那么遥不可及。

或许小米的做法才是最正确的吧,“小米,为发烧而生”,写的多好,让用户自以为在折腾,而事实上,真正折腾的麻烦事都被小米做掉了。

Individualized Sentiment Analysis

There are many characters in a novel, how to do sentiment analysis for each individual one of them? Is he/she feeling good in this chapter? Is this episode a good/bad scenario for someone?

Bigger questions: Is this news good/bad for one specific company? The events happened today are good/bad for each individual company? (One event can be good for Apple but bad for Google)

After reading some papers&articles, I came up with an idea.

Basic theory

Distributional Hypothesis: words that are used and occur in the same contexts tend to purport similar meanings. The Distributional Hypothesis is the basis for statistical semantics.(http://en.wikipedia.org/wiki/Distributional_semantics)

There are many methods about how to represent words with vectors.(LSA, HAL, Topic models, etc.) Most of the methods are based on the Distributional Hypothesis. After changing the words to vectors, we can use top k nearest neighbors of the one word(in vector form) to represent the meaning of that word.

In order to get more accurate result, we always need to have a fairly large corpus.(for this is a hypothesis based on statistics) But, what if we don’t have a large corpus? What if we only have one book? What if we only have one article? Here is my hypothesis: Under this kind of scenarios, the top K nearest neighbors of one word represents the book’s/article’s perspective on the word.

Then I started do some experiments to verify my hypothesis.

Experiment 1, The Novel

Novel is a very good target to do experiment on. There are many characters in one novel, some are friends while some are enemies to each other. In this chapter this guy is one of the most powerful people in the world, but in the next chapter he becomes a dead man. Like rollercoaster.

Create LSA space for each individual chapter of one novel.

Get K nearest neighbors for some leading roles.

Do sentiment analysis based on these K words.

Read through the novel see if the SA result make sense.

I tested on 5 novels (two Chinese novels, three in English). The results were promising.

Here is the result of the Starks and the Lannisters from the novel A Song of Ice and fire: Game of Thrones by George R. R. Martin. Left column is the Starks, right is the Lannisters, the good/bad scale is [-10, 10], negative number means bad, positive means good. Click on the image below to view the original big picture.

lan_stark

As you can see above, when the Starks’ value is negative in one chapter, something bad happens to the Starks and vice versa. I have to point out C1 and C2 point in the graph. They are chapters about the Starks and the Lannisters having conflicts. In C1, the Starks win while the Lannisters lose. In C2, the Starks lose while the Lannisters win. (This is a case I mentioned before, “one event can be good for Apple but bad for Google”)

Experiment 2, IT News

After experimenting on novels, I started crawl news from Slashdot, Engadget and cnBeta(Chinese IT news website). Trying to answer the question: “The events happened today are good/bad for each individual company?” I think this can reflect the stock price of each individual company.

Then, here are some results that I get:

X-axis only from 0 to 250 for there are only 250 trading days in one year. The Y-axis is the (stock price of one day)/(stock price of the first trading day) *  100% with the Green line, (the good or bad value of one day + the value of the previous day)/(the value first trading day, which is 100) * 100% with the Red line.hpq2nokbbry

The result seems to be good, but a lot more experiments needed to be done to verify my hypothesis and there are a lot of improvements can be done with the algorithm and the process that I use in the experiments.

Some Social Media Related Things

I spent some time in analyzing about 2 millions tweets post on weibo.com from May 21th to 31st, 2012.

I don’t want to talk about the techniques in detail because that’s gonna take too long. If you have further interests, contact me or leave a message.

Just for fun~

1. Distributions of posts in a day. What is the most active hour?

按小时发微博数分布

Hourly Post Number
Hourly Post Number

Answer: 12 o’clock

2. What do people do in different hours?

每个小时都在做什么

Hourly hot topics
Hourly hot topics

3. What are hot in each day?

这段时间内每日的热点话题

2012-05-21: 共产党/美国/CEO/榜样, ATM/出错/英国/双倍, 热比娅, 日环食(Annular eclipse)

2012-05-22: 董伟/高帅富/败/家产/抢超市, 菲律宾/军舰/渔民/开炮, 科比/雷霆(Bryant/Thunder), 文颐/法语/非你莫属

2012-05-23: 上海医药, 卫生厅/打通任督二脉蚊香/睡觉/中毒

2012-05-24: 宜宾/五粮液/机场, 孔子/学院/美国尼日利亚(Nigeria)

2012-05-25: 人权/国别/报告Country Reports on Human Rights Practices),格力电器

2012-05-26: 孟晓苏/房地产永城/幼女, 周笔畅

2012-05-27: 击毙/裸体/啃食面部/迈阿密(Shot and Killed/Naked/Face Eating/Miami), 扎克伯格(Zuckerberg),猥亵

2012-05-28: 地震/唐山(Tangshan earthquake)比亚迪/GTR/飙车/肇事者

2012-05-29: 双汇/蛆虫赵普/革职

2012-05-30: 台办/国台办/两岸/马英九/德国梁光烈

2012-05-31: 喜之郎/果肉,吸烟(smoke – World No Tobacco Day)

4. How long will the hot topics last? (for example: 2012-05-22, Bryant/Thunder)

热点话题能在微博上持续多久?

科比&雷霆

People are just so easy to forget. Hot topics just disappear in 3 – 4 days.

5. What do people think when speaking of the Chinese Communist Party(CCP)?

人们在谈论到共产党(CCP)的时候都咋评论的?

执政(be in power) 独裁(dictatorship) 推翻(subvert) 专政(dictatorship)腐败(corruption) 社会主义(socialism) 人民(people) 毛泽东思想(Maoism) 利益(benefit) 人权(human rights) 掠夺(plunder) 既得利益(vested interests) 公信力(public credibility) 中南海(Zhongnanhai) 百姓(people) 农民(farmer) 土地(land) 征地(land acquisition) 开发商(real estate developers) 官商勾结(collusion between officials and businessmen) 谋利(make profit) 拆迁(relocation) 资本主义(capitalism) 公仆(public servant) 民众(people) 治国(administer a country) 国民(national) 拥护(support)

6. What time is the happiest time in a day?

(How happy are people hourly, 一天中啥时候最开心呢?)

Happy Hourly
Happy Hourly

Wait! Let’s go back to the first topic – Distributions of posts per hour

似乎和最早的这幅按小时分发微博数很相似呢?

Hourly Post Number
Hourly Post Number

It seems like these two graphs are similar huh? lol

People are more likely to share good things of them.

Now I’ve got a happiness baseline of average people. It must be abnormal if this person is always being either too positive or too negative.

7. I am just being the one that I want you to see

你看到的我,只是我想让你看到的我

Skype-call
The Skype Call by Rafael Alvarez

Some Self-hosted RSS Readers

I just learned a lesson from Google: host the web services by yourself!

Here are the list of self-hosted RSS reader that I found:
(Some of them are still in progress, so when you read this article, they maybe totally different as you see here.)

Tiny Tiny RSS, Selfoss, NewsBlur, Lilina, Leselys, ownCloud’s News app and Fever:

1. Tiny Tiny RSS

Very flexible, implemented all the functions that I need. API available, so there are mobile apps available, and desktop clients available. The default web UI is not so user friendly, but that is fine, you can customize the css. Here is a sample for you to make it like the old Google reader.

ttrss

Good Chinese support. You can import OPML subscription file exported from Google Reader.Multiple users, sharing, add star. And also, some plugins are also available.

2. Selfoss

Very beautiful but a little bit unnatural and confused UI(the newest/unread/stared and the TAGS below affect at the same time: so when you click unread, it’s won’t show all the unread articles, but only the unread articles under the tag you are current at):

selfoss

As far as I can see, there is no multiple users support, you can only have one user. And bad Chinese support:

selfoss_chinese

3. NewsBlur

There is nothing I can say, it’s so good and so easy to use. I love it.
It includes all the functions that I need: sharing, Good Chinese support, categories, everything.

newsblur

4. Lilina

Very intuitive UI, I like this 2 – 3 columns layout, but no categories support available(which makes me just skip it), Lilina is currently in development, and there is no stable releases yet. Hopefully they will become better:

lilina

lilina2

5. Leselys

Another simple one, no categories:

leselys

6. ownCloud’s News app

You can NOT import Google reader’s OPML here, Good Chinese support. There is no way to do any setting to change the UI elements unless you change the code. I think they are working on this too.

owncloud

7. Fever

No multiple user, and you need to pay. There is no way that I would use this one.

遗传算法实现用透明多边形片拼凑图形

很早就看到过matrix67上面的一个帖子:

强大的遗传算法:用50个半透明多边形重现蒙娜丽莎
http://www.matrix67.com/blog/archives/1113

当时一看那个帖子,立刻就被shocked了,跟边上的CX说,这他妈才是遗传算法;

前两天因为Dr. VPhan的课上要找个人讲讲遗传算法,当时我就说我去讲吧。

于是就把matrix67贴子上面的那个东西的源代码看了一下,发现这个代码并不是完全的遗传算法,而且效率不高,生成那个蒙娜丽莎需要3小时这样。

于是我就想着把它给改进下,变成纯粹的遗传算法,看看效率会不会更好。

修改之后,只需要一小时就能得到那个蒙娜丽莎满意效果。

于是,我就开始用这东西生成了一下这些图:

虽然这里只有50个半透明多边形,每个多边形最多只能有10条边,它们却能组成最漂亮的画。
就像我们之间每分每秒在一起快乐的时光拼出来的心。

下面这个是原图:

PS:最难的部分就是下面那四个字母,特别是那个L和那个o,因为颜色突变很大,而且有棱有角的。

                                                                                                   – 爱你,每分每秒每件小事。

Linux驱动程序中的I/O

在第一篇文章中只是介绍了下Linux驱动的整体结构,并没有对具体实现进行说明。

这篇文将简单介绍一下在实现Linux驱动程序中I/O操作的实现。

I/O操作最基本需要实现的函数有三个: read(), write(), ioctl().

read(), write()
一个是从硬件读数据,一个是向硬件写数据。

来看怎么与硬件交互数据:


1. I/O port读写函数:
inb, inw, inl, outb, outw, outl;

2. I/O memory读写函数:
readb, readw, readl;
writeb, writew, writel;

还是在I/O memory中的函数,这三个是一点小福利
memset_io, memcpy_fromio, memcpy_toio;
这三个东西和memset,memcpy的用法基本完全一样。

ioctl()
略,将会有一篇小文章专门说它~

User Space 与 Kernel Space的交互

请注意一下,我们写的这些函数的参数其实都是由用户程序给传过来的。

而我们现在是在内核态,内核态不能使用用户态的内存。

所以我们在写驱动程序的时候不能直接读写用户态的资源。

怎么办呢?

copy_from_user() 与 copy_to_user()

第一个函数多用于write()的实现中,它可以把用户态数据拷贝到内核态去:

ssize_t xxx_write(struct file *filp, const char *buf, size_t count, loff_t *f_pos)

用户通过给驱动程序传送const char *buf这个参数来表示要写给硬件的数据。

一般在驱动程序使用这样的用法:

copy_from_user(kernel_memory, buf, count);

这样来把buf中的数据给拷贝到kernel_memory这块内核态的内存空间中。

然后驱动程序就可以通过读出kernel_memory的数据并写入硬件就好了。

第二个函数用法和第一个差不多,多用于read()中,可以把内核态数据拷贝到用户态去

回头写一个简单的示例程序来演示一下,这样直观一些。

Linux驱动程序架构(一)

(转载请注明出处)

上一篇文章有说到用户程序调用C标准库函数的时候,会对应到驱动程序file_operations中函数指针所指向的一个回调函数上去。

现在来分析一下这个调用的过程(图片在墙外):

对于这图,我想要说的有:


1.struct file数据结构:
        它与file_operations一样,也是在/include/linux/fs.h中定义的。这是一个内核数据结构,不会出现在用户态。

        file结构其实代表的是一个被打开的文件,每一个被打开的文件在内核空间都有一个对应的file结构。在open一个文件的时候,这个结构会被创建。

        struct file中有一个元素:struct file_operations *f_op;
        在open设备文件的时候,这个f_op会被初始化为驱动程序中的file_operations

        这样,对设备文件的操作就被映射到驱动程序中的实现上去了

2. VFS(Virtual File System) Layer
        因为设备文件它并不是真正意义上的文件,只不过是起到了将system calls映射到驱动程序中的操作上罢了。所以我们把它叫做Virtual File.
        (明晰一个概念:设备文件就是VFS)
=====
话说在linux下面有没有好用的画图工具啊?类似Visio那样的。上面那个图画的我辛苦啊。