2008年10月24日星期五

别人说什么话你都相信,你不是傻逼谁是?

最近哈尔滨警察打死人事件,网上舆论一会支持受害者,一会支持警察,明显风吹两边倒。为啥,一方面网特太多,一方面傻逼太多,网特加傻逼,真的是舆论控制的绝佳拍档。

大家看这个新闻,不觉得奇怪吗?受害者的身份怎么那么容易就被人肉搜索,被一群傻逼网友挖出来了呢?当时的监控录像怎么流传出来的?流传出来的版本为什么还是警察剪切的版本?

网友的疑问:“酒吧录像资料乃重要物证,通过什么渠道为什么会流入网络传播?这个渠道和做法有没有违法之处?如果是不违法?那么杨+案的录像录音为什么不能公开?在法院没有审理之前,公开这个录像,会对谁有利?录像是证据之一,应该有其他的证据一起配合,才能证明谁是真凶,目前单凭这一个证据表现,明显缺乏说服力。”

有独立思考能力的网友对该流出录像的分析:“  已经播放的录像由下列场景组成——

场景一:酒吧门外:介绍在门外一车头前的林松林,说他在门口与穿便装的警察发生争吵。画面显示录像时间为:08年10月11日22时6分57秒-7分04秒。

场景二:酒吧门外:介绍从上、下两个方向停车下来的民警,说他们在门口与学生产生争吵。录像时间:8分26秒-8分57秒。

场景三:酒吧门内:介绍林松林进入酒吧,把东西放下,给人感觉是要出去干仗。录像时间:7分01秒-7分26秒。

疑问:根据从场景二到场景三的介绍,先是警察下车到场,与学生发生争吵,之后学生进入酒吧作打架准备,给人印象是学生先打人。但从时间上看,学生在酒吧内是在7分01秒-7分26秒,在前;警察下车来到门外并与学生争吵是在8分26秒-8分57秒,在后。为什么要把发生在前面的事情的录像剪贴到后面去,并作不可能属实的解释?学生怎么能预知有一些警察要来与他们发生争吵,因而在事前准备打架?

场景四:酒吧门内:介绍双方在酒吧的楼梯间发生了撕打,但画面上并无人打架,是林松林面朝外站在楼梯上酒吧门口,齐新先是在楼梯上往下走,接着返回身往上走,这时酒吧内突然大打出手,齐新进入酒吧,把林松林一下子摔下楼梯,林松林又爬起来上楼返回酒吧打架,齐新下楼,酒吧内继续混战。录像时间:9分58秒-10分23秒。

疑问一:从7分26秒跳到9分58秒,除了至8时57秒是场景二所述的警察到场并发生争吵外,剪掉了之后59秒的监控录像。为什么要剪掉?这近1分钟时间里发生了什么?

疑问二:从录像看,很象是齐新往楼梯下走时,林松林站在楼梯上继续与刘新争吵,身为哈铁公安局直属公安处刑警大队副大队长的齐新转身回嘴,下令酒吧内警察行动,于是酒吧内突然开打,也就是说,是警察先动手打人。

场景五:酒吧门外:林松林拾起一块砖头,等着齐新。齐新打电话出来后,林松林连续找机会用砖打齐新,录像时间:11分28秒-12时02秒。之后的画面上看不清时间。从13分42秒开始,林松林又继续打齐新,画面显示,此时林松林是左手拿砖,右手伸拳打齐新。接着警察们围殴林松林,林松林被逼到画面下监视器视野之外,然后又从左下角赤裸上身逃到酒吧远端墙后,不能再看见。警察们追过墙。这里特别引人注意的是,左手捂着头的齐新追过墙后,又回到墙这边,蹲下身拾起一样东西,应该也是砖头吧,然后又追过墙去。之后录像结束,时间在14分51秒。

疑问一:场景四结束于10分23秒,场景五开始于11分28秒,之间1分06秒被剪掉。为什么?这段时间里发生了什么?齐新是否在打电话前又暴打林松林,导致林非找他算帐不可?

疑问二:场景五从11分28秒起,到14分51秒止,共2分33秒,但实际播放时间只有1分41秒,其中又有52秒被剪掉?不知剪掉了什么内容?

综上所述,不能排除这种可能性:齐新命令警察先动手殴打学生,齐新本人暴打林松林,致使林先砖后拳,报复齐新,结果林又遭警察围殴追赶暴打,最后被齐新用砖头砸死。

此案中,警察是被告,负责侦查的也是当地警方,因此我们首先看到的就是警方单方面公布对被告警察有利、对原告学生不利的信息,而原告方三名学生则被完全剥夺了话语权。这很难让人相信此案会被完全公正处理。应当允许外省市第三方媒体采访三名学生当事人,并把采访结果公之于众,以使公众对案情有个比较全面的了解,这也有利于司法机关兼听则明,公正办案。”

最后我再说一下中国的官场权利结构,公检法,网警,网特,国安都属于一个系统,实际上就算受害者的家属真的在省里官再大也管不到。所以相对来说,死者家属依然是弱势。

为啥网上舆论一边倒,网特也属于公安系统的嘛,舆论当然是被警方控制的...


那些拿着警方提供的资料——什么受害者有背景,什么警方的剪切录像,什么受害者口碑不好的说法,来说事,就是傻逼一个,用点脑子,如果受害者真的有背景,哪个警察敢打?

阅读全文...

2008年7月27日星期日

请大家访问ggq.blogspot.com 谢谢大家!

因为GFW的关系,GG派请大家访问ggq.blogspot.com 谢谢。所有文章都只需把原域名GGPI改为GGQ就可以访问!

热门更新:利用bug让bloggger托管的blogspot彻底摆脱Navbar

如何在不改变以前修改模板的情况下增加新的页内评论功能

测试版Blogger增加数个重要功能——页内评论首次实现!
        

阅读全文...

2008年7月26日星期六

在自己的论坛上被垃圾信息所淹没……被强奸的没脾气了

实在对GG派论坛上的一些事情感到忍无可忍!



首先是当初我作为公益给出来的用来宣传大家的blogspot博客维基编辑页,是希望有幸在blogspot上共患难的朋友能多一个渠道互相认识。希望能利用我这个小博客的一己之力给众多在blogger上打拼的朋友悄悄带去一些流量。

结果总是有人非常自私的把自己的博客链接编辑的到处都是……我对这些人的警告也从苦口婆心的说服教育变成口头警告,到最后不得不直接封杀以儆效尤。



斗争从没有停止。但是最厉害的还不是这些偶尔破坏点规矩的人,是那些专门混谷歌论坛的垃圾广告机器人,居然可以一次性把别人所有的链接都编辑成他的垃圾广告链接……还好google论坛上的wiki页可以恢复以前的档案,不然真是损失惨重。



这一点也要指责谷歌google,在gmail上反垃圾邮件做的那么好,在谷歌论坛上咋就被打的一败涂地呢?这样下去谷歌论坛也要变垃圾场了……



另外一直以来我都很奇怪为啥有的朋友从写写改改到望月的blogspot博客上经常抱怨说留言系统垃圾广告多的烦人,我从来没有遇到过?大家看我的留言系统从来都不设什么验证码之类的,但是一个垃圾广告也没有遇到过……我博客的知名程度和流量应该都是算大的啊,咋垃圾广告没有赏脸呢?除了他们之外,还有人在blogspot上遇到垃圾广告吗?



最后说一下,继续征求GG派论坛的版主管理员,福利待遇是可以给你的博客在GG派论坛有各种显眼的大链接,以及封杀垃圾广告的特权哈哈。管得好的话,我个人考虑给一点手机话费充值之类的小礼物。希望大家踊跃报名了~~~

阅读全文...

2008年7月25日星期五

转贴:用文章供稿RSS时间设定做成的日历模组(Feed Calendar)

感谢作者Abin给大家带来的日历模组 (Feed Calendar)。因为我个人不用这个hack,所以懒得测试了……全文转载……大家有问题问作者哈。

另外作者博客被封,可能要用代理才能查看原文和询问作者。



似乎比较近似我以前发的一个HACKblogger:把博客归档变成日历的又一方法(再修正),相对简单的还有利用light box和30box制作出日历的方法,点击这里查看



作者原文的HACK增加方法:

第一個步骤,先塞入這個日曆外觀顏色的 CSS 樣式定義。如果你用過之前日曆,那就不用改啦,因為我用了一樣的定義,打開版面配置、修改樣板原始碼的 HTML,放在 <head> 標籤內、定義 CSS 樣版的區段裡:



/* Feed Calendar Styles */


#Calendar {


  margin: 0px;


}


#Calendar .act {




  color: #fff;


  padding: 4px;


}


#CalendarTable table {


  border-collapse: collapse;


  padding: 0px;


  border: 0px;




}


#CalendarTable table th {


  padding: 1px;


  color: #777;


  margin: 0;


}


#CalendarTable table td {




  height: 25px;


  color: #999;


  text-align: center;


  padding: 1px;


  margin: 0;


}




#CalendarTable table td a {


  display: block;


}


#CalendarTable .Today {


  color: #fff;


  background: #777;


}




#CalendarTable .Today a {


  color: #fff;


}


#CalendarTable .Weekend {


  color: #997777;


}

如果對顏色、字型大小、靠左靠右有特別需求的,請自行改上面的樣式。第二個步驟是重點,就是抓 Feed、產生日曆主要的 Javascript 程式碼,一樣是貼在 <head> 標籤後面,如果你之前也有 Hack 放過 Javascript,放在一起就好:



<script type='text/javascript'>


//<![CDATA[


<!-- Script functions for generating Feed Calendar: generateCalendar(), collectPost(), BrowsePrev(), BrowseNext(),  BackToday() -->


var baseURL = '';


var currentDay = new Date();


var today = new Date();


var monthLabels = new Array('01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12');




var monthDays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);


var weekLabels = new Array('一','二','三','四','五','六','日');





function generateCalendar(){


  var thisYear = currentDay.getFullYear();


  var thisMonth = monthLabels[currentDay.getMonth()];


  var thisDay = today.getDate();


  var nDays = monthDays[currentDay.getMonth()];




  if (currentDay.getMonth() == 1 &&(((thisYear % 4 == 0) && (thisYear % 100 != 0)) || (thisYear % 400 == 0)))


    nDays = 29;


  var IsitNow = currentDay;


  IsitNow.setDate(1);


  var startDay = IsitNow.getDay() - 1;




  if (startDay < 0)


    startDay = 6;


  var sCalendarCode = '<table><tr>';


  for (var index=0;index<7;index++)




    sCalendarCode+='<th style="width:25px;">'+ weekLabels[index]+'</th>';


  sCalendarCode+='</tr>';


  var nTableCol=0;


  for (index=0;index<startDay;index++) {




    if (nTableCol == 0)


      sCalendarCode += '<tr>';


    sCalendarCode+='<td>&nbsp;</td>';


    nTableCol++;




  }


  for (index=1;index<=nDays;index++) {


    if (nTableCol==0)


      sCalendarCode+='<tr>';


    if (index==thisDay && today.getMonth()==currentDay.getMonth() && today.getFullYear()==currentDay.getFullYear())




      sCalendarCode+='<td id="Day'+index+'" class="Today">';


    else {


      if (nTableCol < 5)


        sCalendarCode+='<td id="Day'+index+'">';




      else


        sCalendarCode+='<td id="Day'+index+'" class="Weekend">';


    }


    sCalendarCode+=index;


    sCalendarCode+='</td>';







    if (nTableCol==6) {


      sCalendarCode+='</tr>';


      nTableCol=0;


    }


    else




      nTableCol++;


  }


  if (nTableCol>0) {


    for (index=0;index<(7-nTableCol);index++) {


      sCalendarCode+='<td>&nbsp;</td>';




    }


    sCalendarCode+='</tr>';


  }


  sCalendarCode+='</table>';


  document.getElementById('CalendarTable').innerHTML = sCalendarCode;







  var sFeedURL = baseURL + '/feeds/posts/summary?orderby=published&published-min='+thisYear+'-'+thisMonth+'-01T00:00:00&published-max='+thisYear+'-'+thisMonth+'-31T23:59:59&max-results=50&alt=json-in-script&callback=collectPost';


  var script = document.createElement('script');


  document.getElementById('CalendarCaption').innerHTML = '<span class="loading">Loading <blink>...</blink></span>';




  script.setAttribute('src', sFeedURL);


  script.setAttribute('type', 'text/javascript');


  document.documentElement.firstChild.appendChild(script); 


}





function collectPost(json) {


  document.getElementById('CalendarCaption').innerHTML = currentDay.getFullYear()+'-'+monthLabels[currentDay.getMonth()];




  var entries = json.feed.entry;


  var nDay = 0, nCount = 0, nActual = 0;


  var posts = new Array();


  for (var i = 0, post; post = entries[i]; i++) {


    nDay = parseInt(post.published.$t.substr(8,2),10);


    if (i>0&&nDay==parseInt(entries[i-1].published.$t.substr(8,2),10)) {




      var actualDay = post.published.$t.substr(0,10);


      var actualTimezone = post.published.$t.substr(23,6);;


      posts[nActual-1][1] = posts[nActual-1][1]+', '+post.title.$t;


      posts[nActual-1][2] = baseURL +'/search?updated-min='+actualDay+'T00%3A00%3A00'+encodeURIComponent(actualTimezone)+'&updated-max='+actualDay+'T23%3A59%3A59'+encodeURIComponent(actualTimezone);


    } else {


      posts[nActual] = new Array(3);




      posts[nActual][0] = nDay;


      posts[nActual][1] = post.title.$t;


      posts[nActual][2] = post.link[0].href;


      nActual++;


    }


  }   




  for (i=0;i<nActual;i++) {


    posts[i][1] = posts[i][1].replace('\"', '&#34').replace('\'', '&#39');


    document.getElementById('Day'+posts[i][0]).innerHTML = '<a title="'+posts[i][1]+'" href="'+posts[i][2]+'" target="blank_">'+posts[i][0]+'</a>';


  }




}





function BrowsePrev() {


  var thisMonth = currentDay.getMonth()-1;


  var thisYear = currentDay.getFullYear();


  if (thisMonth<0) {


    thisMonth = 11;




    thisYear = thisYear-1;


  }


  thisMonth = monthLabels[thisMonth];


  currentDay = new Date(thisYear+'/'+thisMonth+'/1 00:01');


  generateCalendar();


}







function BrowseNext() {


  var thisMonth = currentDay.getMonth()+1;


  var thisYear = currentDay.getFullYear();


  if (thisMonth>11) {


    thisMonth = 0;


    thisYear = thisYear+1;




  }


  thisMonth = monthLabels[thisMonth];


  currentDay = new Date(thisYear+'/'+thisMonth+'/1 00:01');


  generateCalendar();


}





function BackToday() {




  currentDay = new Date();


  generateCalendar();


}


//]]>


</script>

好啦!樣板原始碼的修改到此搞定存檔,接下來安排這個新日曆模組的位置。換到「網頁元素」的設定,在你想塞入日曆的地方新增一個網頁元素、選擇 HTML/JavaScript 類型。接下來給個標題,然後貼入以下的 HTML 程式:

<center>


  <table border="0" id="Calendar" cellpadding="0" cellspacing="0">




    <caption>


      <a href="javascript:;" onclick="BrowsePrev();" title="Previous Month">&lt;&lt;</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;


      <a href="javascript:;" onclick="BackToday();" title="Back to Today"> <span id="CalendarCaption"> </span></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;




      <a href="javascript:;" onclick="BrowseNext();" title="Next Month">&gt;&gt;</a>


    </caption>


    <tr>


      <td id="CalendarTable" class="act"> </td>




    </tr>


  </table>


  <script type="text/javascript">


    generateCalendar();


  </script>


</center>



儲存搞定!接下來就可以檢查新的日曆模組能不能動囉~當然,根據以上的原理來說,這個新的日曆模組應該沒啥問題(我自己所有的 Blog 也都裝來用啦),不過如同大部份透過 Feed 抓文章的 Hack 一樣,由於要仰賴 Feed 即時連線抓取資料來源,這點會受到網路影響,所以快速猛點連結時切換的反應會比較慢(這是 Feed 的原罪,沒辦法),所以如果日曆有出現、但該日期沒有文章連結,請先檢查 Feed 的內容是不是正常,如果貼完程式發現怎麼只有兩個箭頭,那就是程式貼錯地方或貼漏了,請自己再仔細檢查一下。

阅读全文...

我是坚定的谷歌Google诺基亚Nokia合作支持者!

其实大家从这个博客上的数篇文章已经能看到我对谷歌和诺基亚的合作一直是充满了期待。从去年G-Phone操作系统能敌诺基亚?开始关注google推出的手机操作系统Android以来,我就一直不看好谷歌google自己推出手机操作系统。那篇文章我就提出“诺基亚目前在智能手机市场上有90%的占有率,S60的各种人性化设定一直在根据用户的反馈而进行修订。”是谷歌很长时间无法战胜的对手。



Symbian声称可以和谷歌Google进行操作系统层面的合作这篇新闻的报道中,我就分析了谷歌google推出手机操作系统是醉翁之意不在酒,而是为了增加自己在该领域的发言权,以便能和诺基亚、Symbian进行讨价还价。这不是逼得诺基亚 全资收购Symbian,推出Symbian基金会让Symbian系统开源免费吗?这项措施一出,谷歌诺基亚不仅没有任何利益冲突了,还增加了大量的共同利益。我在那篇文章里最后就得出了结论:商业世界有冲突都能克服,何况目前是有利益呢?个人非常期待谷歌直接加入Symbian基金会。



也正是预测到谷歌与诺基亚这两大我最喜欢的公司将展开波澜壮阔的竞争与合作,我月初决定把整个博客的都改成以谷歌,诺基亚为基调。另外我这里说的诺基亚不仅仅是指诺基亚手机,主要是指诺基亚的网络转型以及手机Symbian操作系统



今天再明确说这个问题,是发现国外媒体报道市场研究与咨询机构J. Gold于周四发布研究报告称,诺基亚旗下的Symbian和谷歌(Google)带头研发的Android最终将合并成为一个开源的智能手机操作系统。



看来不仅仅是我注意到这个趋势了。这个分析员也注意到了:

J. Gold表示,这两款操作系统的合并有望在三到六个月内开始,这主要是由于诺基亚和谷歌均利用自己的技术坚持类似的开源战略.在智能手机操作系统市场上,Symbian占有的市场份额最大.J. Gold认为,诺基亚和其它Symbian用户并不希望在操作系统市场上展开竞争;而搜索引擎巨头谷歌进军这一领域是为了推动这一市场的开放度,并为手机应用与服务创立一个公平的平台.



J. Gold称:“我们预计在三到六个月之内,Symbian和Android就将合并为一个单一的开源操作系统.因为他们的很多合作伙伴同时参与了这两个倡议.”



近期,诺基亚收购了Symbian的所有股份,并宣布将成立一个新的Symbian基金会,研发开源操作系统.这种新的开源操作系统将于2009年上半年提供给基金会成员.同样寻求开源策略的谷歌及其支持者已经成立了基于Android的开放手机联盟(Open Hands Alliance),其成员包括摩托罗拉和日本的DoCoMo.这两家公司同时也是Symbian基金会的成员.



J. Gold表示,双方均有充足的理由进行合并.谷歌在Android进行投资的主要目的并非为了通过推出兼容的应用而获得收益.另一方面,诺基亚并不会利用 Symbian向其它手机厂商施压,因此这可以巩固其在手机操作系统领域的地位.J. Gold预计,Symbian与Android合并之后,手机操作系统的平台数量就会减少,开发人员就可以更为容易地编写程序,这意味着这一市场将出现更多的软件.另外,Symbian与Android的合并意味着更低的支持成本.



目前,不少运营商为控制用户而通过专门定制的手机推出特有的用户体验,这种做法不利于手机应用的发展.而Symbian与Android的合并可以减少这种机率.J. Gold表示:“Symbian与Android的合并对行业有利,对谷歌和Symbian均有利.此举还可以推动应用和服务的发展.其负面影响非常之小.这是一个共赢的前景.”



当然,我也不排除谷歌和诺基亚两家公司发蠢,不进行合作而进行竞争的可能性。其中我分析诺基亚发蠢的可能性更大一点……毕竟是老牌企业,容易脑袋秀逗。目前诺基亚推出的几个网络服务都属于比较垃圾的....

阅读全文...