特別聲明:
此次并非針對其他參與2013中國十大優秀開源項目的同行,體系有漏洞要譴責的是制定規則并從中獲益但不作為的權貴,草根們制定不了規則但可發現和利用漏洞,這是程序員應有反叛精神沒錯。但被作為道具不可接受。我代表FineUI請求CSDN公開數據,如果您覺得CSDN有必要撕下遮羞布,請共同呼吁。
============
有人說我太較真了,有人說我應該匿名舉報,還有人說有本事你也刷票呀,不過今天我還是要把我知道的說出來,我不會說哪些軟件在惡意刷票,我也沒有資格說哪些軟件在惡意刷票,我只是從程序員的角度對我獲取的數據進行實事求是的分析,最終的解釋權還是CSDN(因為他們有完整的數據),CSDN也必須正面這次的監管失誤,而不能采取躲躲閃閃、含糊其辭、姑息養奸的態度!
相信很多人都看過《云圖》,雖然整個電影很長并且晦澀難懂,但是中心思想卻異常明顯:知其不可而為之。一件事情只有你去做了,去努力了,才有進步的可能。同樣,中國的開源社區需要一個干凈的氛圍,才能進步發展,如果任由惡意刷票的行為春風得意,損害的是整個開源社區的信譽。今天我的這篇文章可能根本啥都改變不了,但至少我努力過。
我叫FineUI
我是FineUI的作者,FineUI控件庫經過5年的發展,目前已經發布100多個版本,有完善的文檔、教程、示例,有活躍的社區(目前QQ會員4000多人),有180多位網友參與代碼貢獻,有500多名捐贈會員(占論壇總用戶的10%以上)。而這次參加CSDN舉辦的《2013年度中國優秀開源項目評選》,也是我第一次的評選活動,因此非常重視。
因此,我發動同事好友給我投票,我在FineUI官方論壇發帖,在FineUI QQ群號召大家給我投票,我還分別于上星期一、星期五、星期天在博客園發表了三篇文章,由于推薦或者評論數比較高連續三天置頂,即使現在仍然留在“10天內推薦排行”里面,在每一篇文章的開頭,我都號召大家給當前排名前10唯一的.Net開源項目FineUI投票。我的努力沒有白費,我的FineUI項目一直沒有出過前10名,即使可能有人在惡意刷票,我最終的排名還在第5名。
有人說我是為了名次,這是完全沒有道理的,我的FineUI始終都在前20名,而我也清晰的知道最終前10名是由CSDN專家評的,并且送審時前20名應該是不區分名次的,因此我在投票中排第3還是第20對最終結果沒有任何影響,甚至有可能經過這件事,FineUI就更沒資格了。
有人說FineUI是不是也惡意刷票,我可以明確的告訴大家:沒有。FineUI從頭到尾沒有惡意刷票,我的票數都是同事好友和社區拉票來的,也歡迎CSDN查證。但是肯定存在一個網友給我多次投票的情況,這是誰都不能避免的。
那你FineUI為了什么?
為的就是程序員遇到不公平待遇時揭竿而起的勇氣,《好漢歌》大家都會唱“路見不平一聲吼”,那么到關鍵時刻也不能做縮頭烏龜。
社區拉票與惡意刷票
請在閱讀本文是一定要分清社區拉票和惡意刷票的區別:
- 社區拉票:是通過同事朋友,或者社區關系,號召大家為自己投票,最終投票的是人!當然別人有不投票的權利,你的作用只能是單向的。
- 惡意刷票:是指個人或者刷票公司通過機器注冊,或者通過網絡水軍投票,最終投票的是機器或者網絡水軍!而機器和網絡水軍沒有不投票的權利,因為你付出了金錢,因此這個作用是強制的。
注:鑒于有人對“五毛黨”這個詞很反感,就改成了“網絡水軍”。
發現問題
投票是從6-13開始,6-23號結束。開始我根本沒想到會出現惡意刷票的情況,直到6-21號星期五下班時,FineUI仍然排在第三名,超過第四名100多票。當我回家打開電視,興高采烈的看完湖南臺的《天天向上》,居然發現有一個項目超過了我100多票!!!尼瑪,有多少人星期五下班后還在堅持不懈的上網,還在堅持不懈的投票,有沒有???有的話請在評論中回復,我想大部分人都像我一樣在家看電視、出去吃飯、或者看電影啥的。
我的第一反應就是:刷票、惡意刷票!
總體分析
如果我把星期五晚上的數據采集下來,刷票曲線絕對完美,可惜當時沒有意識到要這么做,只知道那個項目很穩定的以每半分鐘一票的速度增長。
下面,我們來看下排名靠前的幾個項目從星期五到最后時刻的票數變化:
項目 | 6-21星期五下午5:30 | 6-22星期六下午5:30 | 最終結果 |
CnPack | 1528 | 1678(150) | 2100(572) |
goagent | 1523 | 1644(150) | 1948(425) |
FineUI | 1034 | 1256(222) | 1330(296) |
APDPlat | 962 | 1370(408) | 2094(1132) |
UbuntuKylin | 780 | 1292(512) | 2134(1354) |
ThinkPHP | 806 | 874(68) | 971(165) |
zTree | 739 | 793(54) | 860(121) |
JEECG | 623 | 705(82) | 887(264) |
禪道 | 615 | 702(87) | 777(162) |
DWZ | 576 | 727(151) | 930(354) |
注:
- 括號內為增加的票數。
- 6-21號的數據來自CSDN網站。
請大家一定不要誤解,并不是票數增加多的就是刷票,不是這樣的,我也不希望看這篇文章的網友下這樣的結論。我們看到的只是一個表面現象,我們也只能根據這個表面現象來進行分析,最終的解釋權還在CSDN。
這是星期六和星期天
請注意,這里的增加量是星期六和星期天兩天的數據,從投票時間上說只占據了投票總時間的 2 / 11 = 18%。
按照正常的理解:1. 最后兩天票數增加肯定很多,最后關頭嘛; 2. 星期六、星期天上網人數很少,投票數當然就少了。
我沒法對第一個理解進行證實,我只能對第二個理解進行稍微的說明,為此我特意在星期天在博客園發表了一篇文章,并在文章開頭號召大家為目前排名前10的唯一.Net開源軟件FineUI投票,由于評論數較多,在博客園置頂了一天。盡管如此,FineUI在星期天僅僅增加了 74 票,和哪些動輒增加 1000 多票的項目也太不協調了!
無罪假設
我們不能說票數增加的多就是惡意刷票,這絕無道理! 有罪假設是要不得的!
那么,我們就基于歐美流行的無罪假設,假設沒有任何人惡意刷票,大家的結果都是真實可信的,來看下每天的票數增長?
項目 | 總票數 | 平均每兩天增長數 | 星期六星期天增長數 | 星期六星期天增長率(平均18%) |
CnPack | 2100 | 381 | 572 | 27% |
goagent | 1948 | 354 | 425 | 22% |
FineUI | 1330 | 242 | 296 | 22% |
APDPlat | 2094 | 381 | 1132 | 54% |
UbuntuKylin | 2134 | 388 | 1354 | 63% |
ThinkPHP | 971 | 177 | 165 | 17% |
zTree | 860 | 156 | 121 | 14% |
JEECG | 887 | 161 | 264 | 29% |
禪道 | 777 | 141 | 162 | 20% |
DWZ | 930 | 169 | 354 | 38% |
如果大家的票數都是真實可信的,那么平均每兩天的增長率應該是 18%,最后兩天是星期六星期天上網人數少,但考慮是最后兩個投票日,所以投票人數會增加也是正常的,不過總不至于會超過 50% 吧,大躍進?
當然,上面分析的都是表面數據,我不能說哪個項目惡意刷票,我也沒資格說哪個項目惡意刷票了,具體的分析結果還是要看CSDN。
與CSDN溝通無果
本來,我希望通過向CSDN反映這個情況,CSDN自己解決這個問題就得了,甚至在昨天我還天真的以為CSDN是真的在嚴查這件事,但是我錯了!
2013-6-22 17:47
我通過郵件向CSDN的聯系人反映有人惡意刷票的情況,沒有回應。
2013-6-23 10::46
我通過郵件向webmaster@csdn.net反映有人惡意刷票的情況,沒有回應。
2013-6-24 08:34
我通過CSDN產品客服微博反映有人惡意刷票情況,中午12:22,CSDN老大蔣濤回了三個字“正在查”,我還很友好的把我的24小時統計數據全部發給了CSDN老大蔣濤。
2013-6-24 18:30
CSDN從北京打來電話說是正在查,的確存在同一IP多次投票的情況,但無法確認是社區投票和惡意刷票,但會按照同一IP算一票的結果重新排序。
我請求他們將同一IP算一票的結果,以及去除所有新注冊用戶投票數據發給郵箱看下,他們欣然答應。
然后,我就滿心歡喜地等待,我想CSDN老大都發話了,肯定會解決的(最終證明我還是太幼稚)。
2013-6-25 10:30
等不及的我給CSDN打了個電話,CSDN說無法區分是社區拉票和惡意投票,也不會公布同一IP算一票的排序結果。在我號稱要將24小時監控數據公布于眾的情況,他們說要請示下老大。
2013-6-25 11:08
我收到CSDN的一條微信,說是正在內部評審,不會公布任何數據!
我徹底憤怒了!我感覺被忽悠了,也感覺到了CSDN根本沒有解決問題的誠意,請看相關微博(當時有點激動,說話可能有點不文雅,請各位網友見諒):
程序員的思路
在星期五下午發現可能有人惡意刷票之后,我就一直在想,怎么樣才證明一個項目在惡意刷票哪?
如果做一條票數隨時間增長的曲線應該是什么樣子的呢?
理想的惡意刷票曲線
我們來簡單分析下比較笨的惡意刷票行為:
1. 必須有一個明確的起點,這個點前面票數沒有增加,這個點后面票數開始增加。
2. 起點后增長曲線如果是直線,則簡直一定就是惡意刷票了,因為直線表明有穩定的投票來源,并且票數的增長只和時間有關系,而和任何外部事件(比如通過博客拉票、論壇拉票)沒有任何關系,和不同時間點的上網人數多少也沒任何關系。
3. 必須有一個明確的結束點,而且這個結束點和大家的作息時間不一致,則簡直一定就是惡意刷票了。因為到晚上,上網人數是逐漸減少了,所以票數的增長也應該是逐漸放緩的,而不可能說在某個時間點之后票數增加戛然而止。特別是晚上12點后人數更少,如果晚上12點后,票數的增長幅度還和之前的一樣,那簡直一定就是惡意刷票了。
綜合上面的分析,我畫出了一個比較笨的惡意刷票曲線,當然也是最理想的惡意刷票曲線(手繪圖,畫的不好請見諒):
聰明的惡意刷票曲線
聰明的惡意刷票曲線會模擬實際的投票曲線,會出現多個波段,每個波段都近似為直線,一般會刷刷停停,比如某個項目的投票超過我了,就趕緊刷一段,超過假定的目標后就停一停。
但是模仿再像,也不是真正的社區拉票曲線,這個就需要結合真實數據具體分析了。
寫程序員的程序
經過上面的思考之后,我發現只要能寫一個小程序,抓取CSDN投票網站 24 小時的投票數據就行了,這就難不倒程序員了,20分鐘搞定:
1:
2: static void Main(string[] args)
3: {
4: timer(null, null);
5:
6: System.Timers.Timer aTimer = new System.Timers.Timer();
7: aTimer.Elapsed += new ElapsedEventHandler(timer);
8: aTimer.Interval = 30 * 1000;
9: aTimer.AutoReset = true;
10: aTimer.Start();
11:
12: Console.Read();
13: }
14:
15: private static void timer(object source, System.Timers.ElapsedEventArgs e)
16: {
17: string pageHtml = GetWebPageContent();
18:
19: HtmlDocument doc = new HtmlDocument();
20: doc.OptionFixNestedTags = true;
21: doc.LoadHtml(pageHtml);
22:
23: HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//a[@class='photo']");
24:
25: string datetime = DateTime.Now.ToString("yyy-MM-dd HH:mm:ss");
26:
27: for (int i = 0; i < 40; i++)
28: {
29: HtmlNode node = nodes[i];
30:
31: string title = node.Attributes["title"].Value;
32:
33: string nodeText = node.InnerText.Trim();
34: nodeText = nodeText.Substring(2, nodeText.Length - 3);
35:
36: int piaoshu = Convert.ToInt32(nodeText);
37:
38: Console.WriteLine(piaoshu + "\t" + title);
39:
40: WriteToFile(title, piaoshu, datetime);
41:
42: }
43:
44: Console.WriteLine(datetime + " waiting...");
45: }
46:
47: private static void WriteToFile(string title, int piaoshu, string datetime)
48: {
49: string filePath = Path.Combine(Environment.CurrentDirectory, @"result\" + title + ".txt");
50:
51: using (StreamWriter sw = new StreamWriter(filePath, true, Encoding.UTF8))
52: {
53: sw.WriteLine(datetime + "\t" + piaoshu);
54: }
55: }
56:
57: private static string GetWebPageContent()
58: {
59: WebClient MyWebClient = new WebClient();
60:
61: MyWebClient.Credentials = CredentialCache.DefaultCredentials;
62:
63: Byte[] pageData = MyWebClient.DownloadData("https://code.csdn.net/2013OSSurvey/gitop/codevote/vote_num");
64:
65: string pageHtml = Encoding.UTF8.GetString(pageData);
66:
67: return pageHtml;
68: }
接下來就是等待了,等待是否能夠出現我假設的理想惡意刷票曲線?
分析數據
第二天早上八點,我拿到了完整的數據。這個數據我會完全公開,大家可以下載后自己分析,因為我對數據統計不熟悉,所以只能看一些簡單的曲線了。有大學專業是數學的,這里的原始數據你千萬不要放過,好好運用統計學分析下,說不定有新的發現。
這里我只會把我做的統計曲線原封不動的放在這里,我不能說哪個項目惡意刷票,我也沒資格說哪個項目惡意刷票了,具體的分析結果還是要看CSDN。
我不會對上面的結果做任何評價,是非曲直任由網友和CSDN來評說!
到底有沒有人在惡意刷票?我不知道,大家也不知道,只有CSDN才能告訴我們真相!
有沒有人在惡意刷票?CSDN請告訴我!
本文非常客觀地描述了作為一個程序員所能做的事情,但是我不能說哪個項目惡意刷票,我也沒資格說哪個項目惡意刷票了,具體的解釋權還是要看CSDN。
而CSDN目前的態度卻是息事寧人、躲躲閃閃,不敢承認自己的監管失職!不敢將“同一IP算一票”的統計結果發布!更沒有誠信在CSDN首頁就自己的監管失職向廣大網友致歉!
這是一個號稱“全球最大中文IT社區”該有的態度嗎?
我所能做的就只有這些了,貌似我啥都做不了,我甚至連是否有項目在惡意刷票都不能確認,那還只有求助于CSDN了。
CSDN請告訴我:有沒有人在開源項目評選中刷票?
我真的建議CSDN能夠做到如下兩點:
1. 公布“同一IP算一票”的統計結果(也就是得票數),如果你有更好的統計規則也行;
2. 在CSDN首頁就自己的監管失職向廣大網友致歉。
注:“同一IP算一票”最初是CSDN告訴我的統計方法,我當然知道一般公司的出口IP只有一個,不過我想這個方法的結論應該還算公道,不過你有更好的統計規則也行。
和100多位開源作者交朋友
這次CSDN舉行的《2013年度中國優秀開源項目評選》,網羅了大量優秀的作品,很多作品的作者也是我認識和熟知的。我想絕大部分開源作者對惡意刷票是抵觸了,并且也和我一樣沒有那么去做,因此絕大部分開源作者應該會支持我的這次投訴,我這次不能去北京和大家一起交流,我感到很遺憾,也是莫大的損失,不過沒關系,網絡是沒有地域界限的,如果你想和我交朋友,歡迎關注我的微博:http://weibo.com/fineui/
評論注意事項
1. CSDN這次舉行的《2013年度中國優秀開源項目評選》絕對是對國內開源事業的一個促進,這點是毋庸置疑的,因此希望大家不要對CSDN進行無謂的攻擊。我們想要是只是CSDN正面自己的監管失誤,擔負起自己的職責。
2. 請不要說哪個或者哪些項目惡意刷票了,這個我不知道,你也不知道,上面給出的數據只是表面現象,我們只能期待CSDN給出官方答案了。
3. 請不要進行人身攻擊。
蔣濤老大的最后回復
蔣濤老大說“目前看到的結果,前20名中有17名都有刷票和拉票的情況,只有3家是比較少的”,我不知道這算不算某種暗示,是不是暗示FineUI也有這種情況,你FineUI就別在鬧了。當然這是我的臆想吧了,人家是老大,可能心胸會寬廣的多,我似我得想不開事情。
不過蔣濤老大,我一定要讓你明白“社區拉票”和“惡意刷票”是完全不同的兩件事,請千萬千萬千萬千萬千萬千萬千萬千萬千萬千萬千萬千萬千萬千萬千萬千萬千萬千萬千萬千萬千萬千萬不要把刷票和拉票放在一起說好不!!!
我已經不止一次的重復,FineUI所有得票都是靠同事朋友以及社區拉票來的,主要社區拉票來自于FineUI官方論壇和博客園連續三天三篇置頂文章,身正不怕影子斜,FineUI的投票數據也經得起分析,再次我還要鄭重承諾:FineUI沒有自己惡意刷票!也沒有花錢雇刷票公司刷票!
請蔣濤老大公布你們按照新規則統計之后的數據。
24小時監控數據完整版下載
如果你能從中發現新線索,一定不要忘了告訴我。
大家的反饋
- CnPack關于2013CSDN開源項目投票的說明:http://bbs.cnpack.org/viewthread.php?tid=12291
- GoAgent作者告知已經刪除在CSDN托管的代碼:https://code.csdn.net/u010971052/goagent
- G4Studio微博支持:http://weibo.com/afghan007
- 禪道作者發表文章:寫在禪道獲得2013年度優秀開源項目之后
- 莊表偉發表微博話題:#開源大家都能玩,但是請別玩壞了!#
后記
6月28日09:43 大會組委會在會上宣布了年度開源項目評選結果,經過網友近三萬張公開投票,并經過中國開源軟件推進聯盟專家委員會的綜合評選,Cocos2d-X、UbuntuKylin操作系統、APDPlat、ThinkPHP、DWZ(jUI)、Pomelo、FineUI、zTree、UEditor富文本編輯器、SpringSide、禪道項目管理軟件、Node-Webkit當選為2013年度優秀開源項目。
原來號稱《中國十大優秀開源項目》的評選評出了12個,并改名為《2013年度優秀開源項目》,唉....
看到禪道的文章,才發覺原來“第八屆中國開源世界高峰論壇是由中國開源軟件推進聯盟主辦,CSDN是這一屆活動的協辦方。”,又發現一直排名第一的GoAgent居然沒有入選,我似乎有點醒悟了,看來希望CSDN公布最終的投票數據是不可能了。
自從CSDN的Ada李力說出那句駭人的言辭“如果認為是游戲,就抱著玩游戲的態度來參與,就可是又這么在意用勁,給別人貼大字報,loser心態啊。”,自從CSDN的員工說出“認真你就輸了”的無恥言論之后,就再也不見CSDN的任何人拋頭露面了。
這件事也許很快就會被很多人淡忘,但我想CSDN的老大蔣濤應該不會那么快就忘記,希望你們在下一屆評選中認真一點,負責任一點,要記住你們的根本是廣大程序員的支持,不要再次寒了程序員的心。
請關注我的微博 FineUI控件庫,讓更多人參與到這次的#CSDN刷票門#事件來,只有更多人的參與,CSDN才會把我們程序員當回事!!
如果你喜歡這篇文章,支持FineUI揭竿而起的勇氣,請點擊頁面右下角的“推薦”按鈕。
文章列表