2008年1月9日

心言意骂:很黄很暴力,CCTV and MOP

很黄很暴力

“黄色“和”暴力”加在一起,你的第一印象是什么?我脑子里最先跳出来的《Kill Bill》里身穿黄色紧身衣,手握日本武士刀的新娘Uma Thurman,或许还有她的“原型”——李小龙。

而13岁小萝莉嘴里的“很黄很暴力”是什么样子?不得而知,也许接个吻就算“很黄”了,也许成龙的动作片就算“很暴力”了。唯一的已知,她还未成年,没有正确辨别色情和暴力的能力,她的“很黄很暴力”无疑和社会的定义有些许差距。但就是这样一个不能对她的言论负责的“张殊凡”,被CCTV推到了反对言论自由和鼓吹网络管制的风口浪尖上。

张殊凡在新闻联播上说:“上次我查资料,突然蹦出一个窗口,很黄很暴力,我赶快给关了。”短短四个分句,我们可以用来质疑百度谷歌没有做好不良信息的隔离(“上次我查资料”),或者指责流氓软件的肆意妄为(“突然蹦出一个窗口”),又或者教育父母们使用有内容过滤功能的家庭网管软件(“很黄很暴力”),另外我们或许还能表扬一下青少年的自觉心(“我赶快给关了”)。但我们的媒体就像太和殿上的宣旨太监,明明就是个阉人,明明只会照本宣科,却以为自己是庙堂之上嗓子最响亮的一个人而洋洋自得——这句话被利用来给整个互联网扣上一顶帽子:很黄很暴力。

事情本来是那么简单:CCTV和新闻联播利用了社会对未成年人的无辜印象来完成其对网络的道德谴责,这是早已设计好的为广电总局的网络视频管制规定舆论造势。目的之阴险,手段之狡猾,无愧于官媒的称号,和全国收视率第一的地位。小萝莉只不过充当了一顶无辜的帽子。但是,网民们愤怒了,无聊人士手痒了,猫扑开始BT了,而事情开始变得有些糟糕了。

就像麦田说的

作为网络媒体平台,猫扑的"大杂烩"BT在于:如果别的网络平台上的热点事件,多少还有一些社会性(比如"年画老虎");那"大杂烩"其上几乎所有热点事件全部是针对普通人的攻击。几年来,从猫扑原发的事件概述有:03年恶搞小胖事件、06年铜须门事件、06年虐猫事件,直到今天的"很黄,很暴力"事件等等。梳理一下你会发现,几乎所有在mop原发的热点事件,都是针对普通人的群体性攻击!
在这个BT文化背景下,"很黄,很暴力"事件的爆发一点不出意外。这个事情能在mop引爆,关键在于小姑娘说的"很黄,很暴力"和mop的流行语"很好,很强大"句式相同,从而引起猫扑人的关注。这是最根本的。而随后争论,一些外站的人和独立博客,开始把这个话题和CCTV的强势之类挂钩,那都是"注解"了。说白了,对于mop热衷恶搞BT的网友,他们自始至终压根没在意什么CCTV,他们在意的仅仅是"很黄,很暴力"这样的——文本。Mop用户从来追求的不是事件的"意义",而是玩弄"文本"(图片)的快感,乃至于"玩人"的快感。

结果无非是把帽子甩到地上,狠狠的踩上两脚泄愤,正宗的怂人作风。但看看扣帽子的媒体们,怀里还揣着无数的帽子准备就绪呢。

播过了,闹过了,我们剩下了一些什么:小萝莉被利用完之后再被恶搞,猫泼们给网络“很黄很暴力”下了一个真实的注脚,而始作俑者CCTV最后却成了赢家——超预期的(?)完成了视频管制条例的宣传。

2008年1月3日

有备无患:2个javascript倒计时的应用(基于prototype库)

第一个应用实现了类似下载Firefox扩展之前,3秒倒计时的“安装”按钮的功能。第二个应用实现了在倒计时的同时,用背景色表示“压力”程度,一开始是淡黄色,逐渐转变成更有紧迫感的红色。两个应用都是基于prototype库,另外还用到了Stoyan Stefanov写的rgbcolor.js——一个实用的将字符串转换为Hex、RGB等格式色彩的javascript类。

倒计时按钮包括函数buttonCountdown,输入倒计时秒数,按钮的element或id,倒数时候的标签。


代码:buttonCountdown


function buttonCountdown(seconds, element, label) {
 if (typeof element == 'string') element = $(element);
 element.disabled = true;

 Element.addMethods({
     updateButton: function(num, sec, elt, lab) {
   var remaining = sec - num;
   if (remaining == 0) {
          elt.value = lab;
          elt.disabled = false;
      } else {
          elt.value = lab + " (" + remaining + ")";
   }
        },
    });

    if (element.tagName == 'BUTTON' || 'INPUT') {
        for (var i = 0; i <= seconds; i++) {
            Element.updateButton.delay(i, i, seconds, element, label);
        }
    }
}

背景色渐变倒计时包含两个函数divisionCountdown和CalculatePresentColor。divisionCountdown和buttonCountdown类似,输入秒数,element或id,标签。CalculatePresentColor输入倒计时的百分比,倒计时开始时和结束时的色彩。


代码:divisionCountdown和CalculatePresentColor


var START_COLOR = "#fff1a8";
var END_COLOR = "#b31e1e";

function divisionCountdown(seconds, element, label) {
    if (typeof element == 'string') element = $(element);
    
    Element.addMethods({
        updateDivision: function(num, sec, elt, lab) {
            elt.style.backgroundColor = calculatePresentColor(
                Math.round(num / sec * 100), START_COLOR, END_COLOR
            );
            var remaining = Math.round(sec - num);
            if (remaining == 0) {
                elt.innerHTML = lab.toUpperCase();
            } else {
                elt.innerHTML = lab + " (" + remaining + ")";
            }
        },
    });
    
    if (element.tagName == 'DIV') {
        for (var i = 0; i <= seconds; i+=0.1) {
            Element.updateDivision.delay(i, i, seconds, element, label);
        }
    }
}

function calculatePresentColor(percentage, startColor, endColor) {
    startColor = new RGBColor(startColor);
    endColor = new RGBColor(endColor);

    if (startColor.ok && endColor.ok) {
        var r = Math.round(startColor.r > endColor.r ?
            startColor.r - Math.abs(startColor.r - endColor.r) * percentage / 100 :
            startColor.r + Math.abs(startColor.r - endColor.r) * percentage / 100);
        var g = Math.round(startColor.g > endColor.g ?
            startColor.g - Math.abs(startColor.g - endColor.g) * percentage / 100 :
            startColor.g + Math.abs(startColor.g - endColor.g) * percentage / 100);
        var b = Math.round(startColor.b > endColor.b ?
            startColor.b - Math.abs(startColor.b - endColor.b) * percentage / 100 :
            startColor.b + Math.abs(startColor.b - endColor.b) * percentage / 100);
        return 'rgb(' + r + ', ' + g + ', ' + b + ')';
    }
}

点击查看演示

2008年1月2日

有备无患:用curl获取内网的外部ip

对拥有独立ip的主机来说,可以用ifconfig查看自身的ip。对只有内网ip的主机来说,可以借助互联网上一些提供ip查询的网站获取自身的外部ip。除了用Firefox浏览以外,还可以用linux下的curl命令。curl是一个和wget同享盛名的下载工具,但和wget将下载的数据保存为文件不同,curl可以直接输出到stdout。


$ curl -s http://www.cz88.net/ip/viewip468.aspx | egrep -o -e '[0-9]+(\.[0-9]+){3}'
121.76.54.xxx

订阅我的博客

搜索我的博客

正在加载...

我的豆瓣广播

分享阅读

豆瓣秀

休斯敦火箭

我的文章归档

版权申明