Compile libjingle on ubuntu

Problem 1:

First, the library will not even compile (with gcc 4.x) without source
code modifications:
The first error is:
../../talk/base/stringutils.h:272: error: extra qualification
‘talk_base::Traits::’ on member ‘empty_str’

Solution:
This can easily be fixed by making the source change to ‘talk/base/
stringutils.h’:
From (will be found at line no. 272 in version 0.4 of libjingle, as already gven in the error message):
inline static const char* Traits::empty_str() { return “”; }
To:
inline static const char* empty_str() { return “”; }

Other errors can be corrected by applying a similar change to:
talk/base/base64.h
(i.e. change
Base64::Base64Table to Base64Table and Base64::DecodeTable[] to DecodeTable[] in line nos. 26 & 27)
talk/xmpp/xmppclient.h
(i.e. change XmppClient::GetStateName to GetStateName in line no. 141)

talk/p2p/base/sessionmanager.h
(i.e. change SessionManager::CreateErrorMessage to CreateErrorMessage in line no. 159)


Problem 2:

Second, the pcp example will not correctly run giving the error (on
the file ‘receiver’):
File transfer started.
Get temp failed
File transfer failed
session.cc(377): state_ == STATE_RECEIVEDINITIATE @ ChooseTransport
Aborted (core dumped)

Solution:

This error is caused because a temporary path is attempting to be
generated, but fails because the function incorrectly does not return
the result code ‘true’. The file that must be modified is ‘talk/base/
unixfilesystem.cc’:
simply add the line:
return true;
to the end of the function UnixFilesystem::GetTemporaryFolderI
resulting in:
bool UnixFilesystem::GetTemporaryFolderI(Pathname &pathname, bool
create,
const std::string *append) {
pathname.SetPathname(“/tmp”);
if (append) {
pathname.AppendFolder(*append);
if (create)
CreateFolder(pathname);
}
return true; //Insert this here at line no. 114
}
(more…)

Share
Posted in ubuntu, 网站. Tags: , , , . »

很恐怖、很强大、很暴力 人肉搜索引擎揭秘


成千上万的网友被这台无形的搜索引擎卷入其中,推动着这一世界上无比强大搜索机器的运转,从事着世界上“最黄最暴力”的事业,任何搜索引擎都难以望其项背(不管是百度还是谷歌),它的触角越伸越长、无孔不入……

“一个普通人,所有的一切突然之间在网络上成为关注的焦点了,是为什么?”

“他成名了。或者说,他出事了。”马建斌(化名)说,“最大可能,是被‘人肉搜索’引擎盯上了。”

在网上,马建斌有一个很“暴力”的网名:西方不败。说这话时,他正忙碌于游荡于天 涯、猫扑网中,和其他进行“人肉搜索”的网友一道,将艳照中每个层面的细节,包括内衣的价钱、艺人所用的饰品、不同摄影器材及其机位等一一暴露出来。这超 出了照片本身,却引来网络上看官一片叫好。

“很恐怖、很强大、很暴力的人肉搜索引擎。”马建斌一连引用了时下最流行的三个词语形容说。在“人肉搜索引擎”前,从卖身救母到网络虐猫、从铜须门到华南虎事件,一切都无所遁形。

“赏金猎人”在行动

两年前,“西方不败”从一件小事中切身体会到了“人肉搜索”引擎的威力。

一个高中同学给他说被一个猥琐男盗取了帐号和装备,还留下QQ号叫嚣要花钱才能买 回账号。“西方不败”闻讯后摆出MOP重金,号召众“赏金猎人”进行“人肉搜索”。几百名“赏金猎人”立即开始进行人肉搜索,通过QQ号,他们找出了猥琐 男的一切真实资料,在电话骚扰中,这个猥琐男最后崩溃求饶了。

“人肉搜索”,曾是猫扑中有趣的一幕:某人需要解决一个问题,就在猫扑发贴并 许与一定数量的MP作为酬谢(MP是猫扑大杂烩使用的一种虚拟货币,称作“猫扑币”或者“猫皮”)。很快,就会有赏金猎人看到这个帖子,利用其专业背景、 亲身经历、道听途说甚至冷嘲热讽去回答问题,获“赏金”MP币。

初战告捷,让拥有5年PS经历的“西方不败”兴奋不已,并就此变成一名“赏金猎人”,“投身”“人肉搜索”事业。两年下来,大大小小的战役,已是数不胜数。是否有MP币已不是关键,寻得刺激与快感才是真。

“虐猫事件”中,他在一个车友论坛中发现了一个ID为“Gainmas”的人,当 时,Gainmas是虐猫嫌疑人之一。一辆银灰色2003普力马,车号A2F782。这辆普力马的照片随即被贴到网上。有多名记者前往杭州进行调查,证实 该车为虐猫嫌疑人Gainmas所有。随后短短六天内,就将虐猫视频的三个嫌疑人锁定。“在这次搜索中,由于被搜索者在搜索中抹去了很多痕迹,包括车友论 坛中的照片和他发表的三个跟帖,但这些小动作旋即被我们一一记录在案,并养成了扫描网页,保存证据的习惯。”“西方不败”得意地回忆说,自己一手推进了虐 猫事件的发展。

华南虎事件中,西方不败接了一单活儿,他在百度华南虎吧仔细分辨了照片其左下 角的商标。他只认出来一个繁体的“龙”字。他用“龙年画”、“龙壁画”、“龙墙画”在网上搜索。他找到了有同样商标的浙江义乌威斯特彩印包装公司的“鑫龙 墙画”。“去义乌!去义乌”他激动得在群里和论坛里高呼。网友们也在打虎QQ群里纷纷大叫:“无敌人肉啊!”“人肉搜索引擎太强大了!”

“对于一个在互联网上生活多年,留下许许多多脚印的人来说,要找到他所不愿意 告诉我们的背景,对于现在这个时代来说,真是太容易了。”“西方不败”说,“但一个武松的做法绝不可取……所以现在只有全世界的武松联合起来……最后希望 大家认识到:我们的力量很强大。”

这或许是中国互联网上一个独特的景观。没有数据也无法统计目前有多少人在参与 “人肉搜索”,唯一可以肯定的是,在“人肉搜索引擎”中,网友们自发地寻找他们共同关心的人物或特定目标的所有信息,其搜索能力远胜于任何先进的网络搜索 引擎。互联网同样将显示器后面的人组装成超级大脑,简直无所不知,无所不能。

“很黄很暴力”的“人肉搜索”

但对人的搜索,同样是最有争议的搜索:成百上千个人从不同途径对同一个人进行搜索挖掘,很快能够收获关于一个人的一切信息。这样造成的结果是,一起成功的人肉搜索,就是对当事人的一次“剥皮行动”。

2007年11月“公主门”事件中,在“人肉搜索”强大威力下,33和77的QQ 号、手机号、所在公司、家庭住址甚至车牌号被一一曝光。在那段时间,网民的电话接二连三打到77所在的公司驻北京代表处。在天涯上的相关帖子里,网民们热 烈地交流着电话心得。一名参与了人肉搜索的网友坦言:我们就是要让该公司领导知道77“犯下的罪行”,直到其被公司开除走人。

事实上,人肉搜索在剥他人皮时,也让自己陷入了某种后遗症中,“眼皮一跳我就怀疑有人在互联网上搜索我。” “西方不败”开玩笑似的说。“现在的人肉搜索引擎‘很黄很暴力’。”

“很黄很暴力”是当下最流行的网络用语,在“人肉搜索”引擎威力下,几天内闹得满 “网”风雨。去年12月27日,只因这一句“很黄很暴力”,13岁的北京小学生张殊凡的视频、图片、信息、恶搞漫画、帖子一夜之间泛滥成灾,更有甚者将张 殊凡的出生年月、出生医院、所在学校、平时成绩以及受获奖励悉数跟贴出来。

庆幸的是,当张殊凡的个人隐私资料越来越多地出现在网上时,一些“赏金猎人”突然意识到,“玩过头了”。

“这次应该算是误伤,我们也不愿意发生这种事情。”西方不败坦承说。“对一个未成人进行恶搞明显是不公平的、不厚道的,一个13岁小孩没有责任承担这一切。”

但人肉引擎仍在不停地播撒种子,开花结果。据记者了解,人肉搜索引擎目已在整个互联网蔓延,猫扑、天涯、西祠胡同、腾讯都聚集了大批活跃的“赏金猎人”。一有风吹草动,任何一个普通人都有可能被数以千计的“赏金猎人”放到显微镜下去观察。

对话“赏金猎人”

西方不败,上海人,29岁,某网络公司程序员,在猫扑网中多次参与人肉搜索。

记者:您觉得这种“人肉搜索”现象是正常的吗?

西方不败:一旦信息上了网,就相当于是脱光了衣服上大街,那还能不让人家看?

记者:为何这么拼命去爆隐私?

西方不败:就为了正义。只要你的故事让人气愤,大家就会不约而同聚到一起来。不是什么事都能上人肉搜索的,必须要能引起众多网友的兴趣。而且每一个强大的人肉搜索事件都需要网站管理者的帮助,至少是纵容,比如管理员的反复置顶推荐。

记者:这种“正义”不是也有误伤的时候么?

西方不败:我们只是讨伐不道德的东西。当然,有人会利用人肉搜索恶搞。我也承认很多事最后我们都无法收场。

记者:在“人肉搜索”过程中,是种什么样的心情?

西方不败:很激动,能体验侦探的快感。当然,也有一种偷窥到别人隐私的莫名兴奋感和成就感。

记者:你觉得人肉搜索需要理性吗?

西方不败:我们干吗要理性啊?为什么只强调理性不强调感性?人本来就是理性和感性 的综合体。其实很多时候,我们关注的不是事件的具体意义,而是其在网络上单纯的旋涡效应会有多大,以及自己将在其中扮演什么样的角色……谁都想在历史的里 程碑上留下记号,区别只是篆刻的名字还是墙角的尿渍罢了……

记者:那咱们换个词,“自制力”?

西方不败:“自制力”是对的。说实话,现在我眼皮一跳就怀疑有人在人肉搜索我。因此现在我们的搜索已逐渐体现在追求真相愿望上,每个人都需要自制力,每个网民也如此。

人肉搜索引擎战术大揭秘

战术原理:只要在网上“生活”过,就会留下脚印,就能搜索得出来。

常用战术:

1.利用GOOGLE、百度等超强的搜索功能,不断变换输入关键词。

2.从被查的人那里入手,比如查他朋友的博客,经常有意外的收获。

3.不放过搜索一些常用网站,如易趣、淘宝,或一些大型论坛,如天涯、猫扑、新浪等,对方都可能留下注册痕迹;

4.通过对方的ID或邮件地址,查出其IP号,可以获得各种“马甲”的真实身份;

5.如果知道对方所在城市,利用GOOGLE卫星地图查到他户外照片的确切所在地。

6.具备一定的逻辑分析能力,整合梳理庞杂信息,拼凑出可被验证的调查结果。

“人肉搜索”引擎升级5.0

-人肉搜索1.0(引擎首次发动)

◇以公布个人资料为重点。

2001年 微软陈自瑶事件——人肉引擎的首次发动:根据一张照片爆出照片主人的大部分个人资料。

-人肉搜索2.0(方法基本确定):

◇先在人格上进行分析

◇然后推测私人信息

◇最后发出通缉令

2006年2月“虐猫事件”——首次开始严重影响到“被通缉者”的工作生活:这是人肉搜索广为人知的标志性事件,短短六天之内将虐猫视频的三个嫌疑人锁定,第一次彰显了网络调查的能力……

-人肉搜索3.0(引擎升级):

◇效率越来越快

◇影响扩大

◇除了资料,开始曝露他人生活凭证

2006年4月“铜须门”事件——受害人群较前两次变得更多:网友调查到铜须的身份,还将他的求职简历、家庭电话、手机号、学校电话以及照片公布,发布“江湖追杀令”,呼吁社会封杀铜须。由此,一场网络事件,终于演变成一场大规模的社会讨伐。

-人肉搜索4.0(引擎升级):

◇速度更快,资料更全

◇无辜人群更众多

◇网络判决开始影响社会判决

◇攻击更猛,已然有些不顾及被谴责对象

2007年4月钱军打人事件——网络判决开始试图影响社会判决:几个小时之内,殴打老人者钱军和其妻子的电话号码、身份证号码、家庭住址、工作单位、孩子上学的学校全部曝光……网民试图通过影响由派出所来惩治钱军。

-人肉搜索5.0(人性化、理智化)

◇ 部分网友在面对人肉搜索时趋于理智

◇大部分网民开始理性地参与讨论

2007年底,由“打虎网民”层层推进的“华南虎事件”,大部分网民开始理性地参与讨论,意见和观点主要基于摄影、生物、常识等不同角度的技术分析,体现出追求真相的愿望。

人机之战不如人机合一

人机之战,是指只要搜索引擎还是应用最广泛的一种互联网应用,只要搜索引擎还是用户找到合适服务的最主要手段,人工和技术就是一场永远无法结束的战争。

对于一些八卦搜索、没有唯一答案、需要去挖掘答案的搜索,人肉搜索往往能得到更有 价值和吸引力的结果。这是因为,由于人肉搜索引擎聚集了各地的不同阶层,不同知识背景的人,得到帮助的几率也会大大增加。当然,人肉搜索引擎也有比不上机 器搜索引擎的地方,那就是速度。所以说,人肉搜索引擎的潜在力量比机器搜索引擎强大,但反馈速度就比不上机器搜索引擎。

而人机合一,则是百度Google应从人肉搜索强大威力中得到何启发,以此改进目前的引擎技术。目前,结合人肉搜索的搜索引擎也成为了新一代搜索引擎的思路, 一家名为“塔基草根专家网”的网站则正在进行自然人搜索引擎的研究。

这也是百度将搜索社区化确定为下一步发展重心的重要原因。目前,百度贴吧被看成是人肉搜索引擎的重要阵地,而推出不久的百度娱乐频道被看作是百度技术整合人肉的最新尝试。

换个角度来看,人肉搜索引擎其实就是搜索引擎的社区化。区别仅仅在于发动和执行流程的是人,还是机器。但两者都应警醒的是,搜索引擎对于公民隐私的破坏、误伤必须应该思考,如何理性地去体现追求真相、获得答案的愿望。

Share
Posted in 网站. Tags: , , . »

ajax calendar(PHP+JAVASCRIPT)

Click here to see the calendar

Result:

AJAX:

ajax.js

function HttpRequest(method,url){
this.method = method;
this.url = url;
this.init = CreateXMLHTTPObject;
this.self_url = self.location.href;
this.func = function () {};

this.go=function go(str_url){
self.location.href=str_url;
}

function CreateXMLHTTPObject(){
var xObject = null;
try {
xObject = new ActiveXObject(“Msxml2.xmlhttp.4.0″);
}
catch (e){
try{
xObject = new XMLHttpRequest();
if(xObject.overrideMimeType){
xObject.overrideMimeType(‘text/xml’);
}

}
catch (e){
try {
xObject = new ActiveXObject(“Msxml2.xmlhttp”);
}
catch (e) {
try {
xObject = new ActiveXObject(“Microsoft.xmlhttp”);
}
catch (e) {
alert(“Error: Unable to create XML HTTP object!”);
}
}
}
}
return xObject;
}

this.post = dopost;

function dopost(obj,func,param)
{
//alert(func);
//this.func = func;
obj.onreadystatechange = func;
obj.open(this.method, this.url, true);
obj.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded;charset=utf-8″);
obj.send(param);
}

this.utf16to8 = utf16to8;
function utf16to8(str) {
if(str==”){
return ”;
}
var out, i, len, c;

out = “”;
len = str.length;
for(i = 0; i < len; i++) {
c = str.charCodeAt(i);
if ((c >= 0×0001) && (c <= 0x007F)) {
out += str.charAt(i);
} else if (c > 0x07FF) {
out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
out += String.fromCharCode(0×80 | ((c >>  6) & 0x3F));
out += String.fromCharCode(0×80 | ((c >>  0) & 0x3F));
} else {
out += String.fromCharCode(0xC0 | ((c >>  6) & 0x1F));
out += String.fromCharCode(0×80 | ((c >>  0) & 0x3F));
}
}
return out;
}

this.$ = $;
function $(id){
return document.getElementById(id);
}

this.tagNameParam = tagNameParam
function tagNameParam(name,obj){
var objs = obj.getElementsByTagName(name);
var param = ”;
for (i=0;i<objs.length;i++){
param = param + objs.name+”=”+escape(utf16to8(Trim(objs.value)))+”&”;
}
return param;
}

this.form2param = form2param
function form2param( objs, ignore ) {
/**                     //getElementsByClass(‘test’)
* 调用方法: form2param(document.getElementsByTagName(‘*’), Array(‘submit’));
* param1: 一般不需要修改
* param2: 需要忽略的表单域名称
* retrun: 字符串
*/
var param = “”;

function add2param( str_param, tagName, value ) {
var param
if (str_param.length==0) {
return tagName+”=”+escape(utf16to8(value));
}
else {
return str_param+’&’+tagName+”=”+escape(utf16to8(value));
}
}

function arrayToObject(arr) {
var obj=new Object();
for (i=0; i<arr.length; i++) {
obj[arr[i]]=null;
}
return obj;
}

var tagnames = new Array(“input”, “textarea”, “select”);
var chkboxs = new Array(“checkbox”, “radio”);
var obj_tagnames = arrayToObject(tagnames);
var obj_ignore = arrayToObject(ignore);
var obj_chkboxs = arrayToObject(chkboxs);

for (var i=0; i<objs.length; i++) {
if (objs[i].tagName.toLowerCase() in obj_tagnames) {
if ( (!(objs[i].name.toLowerCase() in obj_ignore)) && ( objs[i].name.indexOf(‘save_’)==-1 ) ){
if (objs[i].type.toLowerCase() in obj_chkboxs) {
if (objs[i].checked) {
param = add2param(param, objs[i].name.toLowerCase(), objs[i].value);
}
}
else {
param = add2param(param, objs[i].name.toLowerCase(), objs[i].value);
}
}
}
}

return param;
}

this.checkboxToArray = function (form,tag){
var objs = form.getElementsByTagName(tag);
var param = null;
for (i=0;i<objs.length;i++ )
{
if(objs[i].type==”checkbox” && objs[i].checked){
param+=objs[i].name+”=”+escape(utf16to8(objs[i].value));
}
}
return param;
}

this.load = function( url ){
var ss = document.getElementsByTagName(“script”);
for( i=0;i<ss.length;i++ ){
if( ss[i].src && ss[i].src.indexOf( url ) != -1 ){
this.onsuccess();
return;
}
}
s = document.createElement(“script”);
s.type = “text/javascript”;
s.src = url;
var head = document.getElementsByTagName(“head”)[0];
head.appendChild(s);
var self = this;

s.onload = s.onreadystatechange = function(){
if( this.readyState && this.readyState == “loading” )
return;
self.onsuccess();
}
s.onerror = function(){
head.removeChild(s);
self.onfailure;
}
};

this.onsuccess = function(){};
this.onfailure = function(){};

//去掉字符串 的左边 空格
this.LTrim = LTrim ;
function LTrim(str){
var i;
for(i=0;i<str.length;i++)  {
if( str.charAt(i)!=” ” && str.charAt(i)!=null )
break;
}
str = str.substring(i,str.length);
return str;
};
//去掉字符串 的右边 空格
this.RTrim = RTrim ;
function RTrim(str){
var i;
for( i=str.length-1;i>=0;i– ){
if( str.charAt(i)!=” “&&str.charAt(i)!=null )
break;
}
str = str.substring(0,i+1);
return str;
};
//去掉字符串 的 左右边 空格
this.Trim = Trim ;
function Trim(str){
var trimRe = /^\s+|\s+$/g;
str = String(str).replace(trimRe,”");
return LTrim(RTrim(str));
};

//去掉字符串 的 左右边 空格
this.strReplace = strReplace ;
function strReplace( string ){
string = String.replace(/(^\s*)|(\s*$)/g,”");
return string ;
};

}

int_step = 0;

function show_loading() {
div_hint = document.getElementById(‘hint’);
if (!div_hint) {
var hint_text = “正在处理您的请求…”
div_hint = document.createElement(“div”);
div_hint.id = “hint”;
var div_hint_image = document.createElement(“div”);
div_hint_image.id = “hint_image”;
div_hint.appendChild(div_hint_image);
var img_loading = document.createElement(“img”);
img_loading.src = “/images/animated_loading.gif”;
img_loading.alt = hint_text;
div_hint_image.appendChild(img_loading);
var div_hint_text = document.createElement(“div”);
div_hint_text.id = “hint_text”;
div_hint.appendChild(div_hint_text);
var text_loading = document.createElement(“strong”);
text_loading.innerHTML = hint_text;
div_hint_text.appendChild(text_loading);
document.body.appendChild(div_hint);
}
else {
div_hint.style.display = “”;
}
}

function hide_loading() {
div_hint.style.display = “none”;
}

——————————————————————————–

(more…)

Share
Posted in JAVA SCRIPT, 网站. Tags: , , , . »

How to create a calendar by php?

<?php
function getCalendar($year,$month){

global $current_user;
$first_day = get_option(‘start_of_week’);
$first_of_month = gmmktime(0,0,0,$month,1,$year);
$per_line = 7;
$total_days = date(‘t’,strtotime(“$year-$month”));

//echo “$year-$month-2″;
//$first_day = date(‘N’,strtotime(“$year-$month-1″))
$line = 1;
for($i=1;$i<=$total_days;$i++){
$day = date(‘w’,strtotime(“$year-$month-$i”));
$array_data[$line][$day] = $i;
if($day==6){
$line++;
}
}
return $array_data;
}
$iid = $_REQUEST['iid'];
$did = “d_vfcalendar”;
$year= ($_REQUEST['year']==”")?date(“Y”,strtotime(“now”)):$_REQUEST['year'];
$month = ($_REQUEST['month']==”")?date(“n”,strtotime(“now”)):$_REQUEST['month'];
$calendar = getCalendar($year,$month);
$prev_month = date(“n”,strtotime(“$year-$month -1 month”));
$next_month = date(“n”,strtotime(“$year-$month +1 month”));
$prev_year = date(“Y”,strtotime(“$year-$month -1 month”));
$next_year = date(“Y”,strtotime(“$year-$month +1 month”));
$prev_month_name = date(“M”,strtotime(“$year-$month -1 month”));
$next_month_name = date(“M”,strtotime(“$year-$month +1 month”));

?>

(more…)

Share
Posted in 网站. Tags: , , , , . »