自言自语

I'm Wang Xianyuan, writing for myself, more studying, more experience…

别让惯性思维误导了方向

By

我们总是有一个惯性思维——“多多益善”。《Facebook人均好友120人 SNS难扩人类社交规模》一文的导读中写道:

《经济学人》网络版今天撰文称,社交网站虽然让社交变得容易且轻松,但这并非如预想的那样,会扩大人类社交群体的规模。

事实上Facebook模式的实质任务并非“扩大人类社交群体的规模”,而是将人脉科学高效地管理起来。与此相反,众多基于SNS模式的网站在照搬Facebook的法则下,却掀起了各自“圈地”的战争。更有无数UC平台支持下的草根阵营也陷入了无谓的硝烟之中……

模式照搬、法则照套是一种捷径。但要做到真正的成功,则并非照搬照套所能达到。有句话叫“学我者生,似我者亡”,模仿加改进,把它做到极致,就是生存,反之则是死路一条,所以互联网上的照搬照套一定要认识到原先事物的本质。

博客将发挥其“门户”功能

By

互联网应用日益丰富的今天,作为一个不新又不老的互联网应用——“博客”,该如何定位其功能与价值呢?

早期形成的互联网应用如Email,实现了邮件功能,异步的;IM,同步短消息传递,后来有了群,主要功能是找到在线的人并与他们同步交互;社区,完成了多人话题讨论的功能。然后有了Blog,在我印象中最开始出来的是独立Blog,然后才是Blog门户,这个时候互联网慢慢Web2.0了起来。之后出现的应用就更丰富了,这是因为Web2.0的概念被得到了充分的重视和有意识的挖掘。播客,Twitter,Facebook之类的服务涌现出来,并相继出现了成熟的互联网应用产品,使得搭建这些站点服务的门槛降低。

这么一回顾,博客确实是一个说不上新,又谈不上老的一种互联网应用。其地位没有那么绝对了,但目前也不可能被其他类型的应用取代,就好像社区没法被其他类型应用取代一样。那么博客将会发展成一个什么样呢?还是就这么在功能上固化下来了呢?

在我看来,博客的基本功能早已固化,但其应用范围确是逐步扩大的,应用范围的扩大又使得其功能逐步丰富和完善,这正有力的证明了博客最原始的功能定位是非常成功的。我们已经可以看到一些明星大腕也在用博客发布个人动向,博客在里面充当了个人门户;很多的著名企业都以博客的形式来建设自己的企业文化,博客又在里面充当了企业文化走向大众的载体。看到这里,有些同志可能会开始怀疑我是不是在为博客做广告。非也,非也,我个人并不是博客产品的拥护者,但我却是博客的受益者。从博客应用范围的趋势中我看到博客的“信息门户”功能在突显。很多BlogSP没有将这一部分功能充分挖掘,导致他们的博客与SNS等互联网应用打了个平手,最终给用户的感觉就是博客正在被SNS等新兴应用所取代。然而事实并非如此,还是有很多优秀的独立博客和一部分BlogSP的博客服务是成功的,他们将博客成功的打造成为了个体信息的门户。

所谓信息门户(Portal),也就是信息收集、发布的平台。个体(可以是个人,也可以是团队,亦或者是企业)将信息从这个门户发布出去,同时这个门户的聚合功能又将各种对个体有用的信息收集回来。而这个收集信息的功能的强大与否取决于这个博客支持的外部接口的多少。理想情况下,任何信息只要遵循了一定的标准,都可以被集成、聚合,我想这将是今后博客应用发展的一个主要的空间与机会吧。

PS,博客支持的更多的接口和标准将被开发出来,有兴趣的朋友们可以从现在开始尝试着好好规划设计一下自己的博客,利用博客来包装自己喽。

Posted in Watch | Tagged: , | Comments Off on 博客将发挥其“门户”功能

Chrome 目前不支持 about:config

By

一直使用 Google 的 Chrome 浏览器,Chrome 是基于开源软件 WebKit 引擎二次开发的。但今个儿发现 Chrome 没有 about:config 配置页,而有时候却会提示 “请在浏览器中输入 ‘about:config’ 并回车”,一个小小的失误呵呵。

经查,目前 Chrome 支持的参数有以下这些:

about: //关于页面
about:network //显示网络I/O页面
about:dns //显示DNS
about:plugins //显示安装的插件
about:memory //显示页面内存使用
view-cache:[URL] //浏览此URL的缓存数据
view-source:[URL] //浏览此URL的源文件

希望 Google 能注意到这个小失误。

C#生成背景透明的GIF文件

By

在C#中调用Graphics.Clear(Color.Transparent) 生成 gif 格式透明文件时,设置的透明不起作用。使用 Bitmap.MakeTransparent 方法同样不起作用。这两个问题也是微软的设计使然,和 gif 文件格式有关系。下面一段代码可以生成背景透明的GIF文件。

public Bitmap MakeTransparentGif(Bitmap bitmap, Color color)
{
    byte R = color.R;
    byte G = color.G;
    byte B = color.B;

    MemoryStream fin = new MemoryStream();
    bitmap.Save(fin, System.Drawing.Imaging.ImageFormat.Gif);

    MemoryStream fout = new MemoryStream((int)fin.Length);
    int count = 0;
    byte[] buf = new byte[256];
    byte transparentIdx = 0;
    fin.Seek(0, SeekOrigin.Begin);
    //header
    count = fin.Read(buf, 0, 13);
    if ((buf[0] != 71) || (buf[1] != 73) || (buf[2] != 70)) return null; //GIF

    fout.Write(buf, 0, 13);

    int i = 0;
    if ((buf[10] & 0x80) > 0)
    {
        i = 1 << ((buf[10] & 7) + 1) == 256 ? 256 : 0;
    }

    for (; i != 0; i--)
    {
        fin.Read(buf, 0, 3);
        if ((buf[0] == R) && (buf[1] == G) && (buf[2] == B))
        {
            transparentIdx = (byte)(256 - i);
        }
        fout.Write(buf, 0, 3);
    }

    bool gcePresent = false;
    while (true)
    {
        fin.Read(buf, 0, 1);
        fout.Write(buf, 0, 1);
        if (buf[0] != 0x21) break;
        fin.Read(buf, 0, 1);
        fout.Write(buf, 0, 1);
        gcePresent = (buf[0] == 0xf9);
        while (true)
        {
            fin.Read(buf, 0, 1);
            fout.Write(buf, 0, 1);
            if (buf[0] == 0) break;
            count = buf[0];
            if (fin.Read(buf, 0, count) != count) return null;
            if (gcePresent)
            {
                if (count == 4)
                {
                    buf[0] |= 0x01;
                    buf[3] = transparentIdx;
                }
            }
            fout.Write(buf, 0, count);
        }
    }
    while (count > 0)
    {
        count = fin.Read(buf, 0, 1);
        fout.Write(buf, 0, 1);
    }
    fin.Close();
    fout.Flush();

    return new Bitmap(fout);
}

Posted in Study | Tagged: | Comments Off on C#生成背景透明的GIF文件

本博程序升级,博易v1.8 的新增功能抢先看

By

经过一天基于 BlogML 的数据转换程序开发,本博的数据得以从原先的 SQLServer 数据库方式转换为 XML 文件方式。转过来之后的效率大家可以体验、比较。个人感觉 XML 方式比数据库方式在10万数量级数据下性能要优越。

这次上的是 博易v1.8 beta 版,新增功能主要有

1.评论新增插入表情面板(见下面评论编辑区域);

2.嵌套式评论,可以针对某一评论进行回复,以树状方式显示,这个功能很酷,有兴趣的可以在本文下面评论测试;

3.FCKediter 彻底取代了原来的 TinyMCE 编辑器;

4.可以同意设置显示一定长度的字数作为文章摘要显示在文章列表;

5.增加了对日语的支持;

6.新增 Visitor Info 部件,可以显示访客的信息,提示他的最后一条评论后面是否有人评论,还能帮助访客根据自己的偏好文件(APML文件,如果有)筛选他可能感兴趣的文章,给人感觉比较亲切(见本博右侧上方);

7.文章点击次数统计;

新版还改进了很多细小的地方和一些 BUG。3月1日正式发布之前请大家多来本博测试,发现问题哦。有什么问题在这里发邮件给我

Lambda 表达式,BlogEngine.NET使用了 .net 3.0 特性

By

完成了 博易v1.8 与 BlogEngine.NETv1.4.5 的功能同步,其中遇到一个小问题——Lambda 表达式。
“Lambda 表达式”是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型。 所有 Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”。该 Lambda 运算符的左边是输入参数(如果有),右边包含表达式或语句块。Lambda 表达式 x => x * x 读作“x goes to x times x”。可以将此表达式分配给委托类型,如下所示:

delegate int del(int i);
del myDelegate = x => x * x;
int j = myDelegate(5); //j = 25

详见:http://msdn.microsoft.com/zh-cn/library/bb397687.aspx

BlogEngine.NET 的这个改进将使其在 .net 2.0 的开发环境下编辑时出错。而博易考虑了兼容性方面的问题,在同步的时候以 .net 2.0 的编码方式重写了这些代码。博易v1.8 将于 2009.3.1 发布,选择这一天是有特殊意味的,这一天是博易自第一个版本发布以来的一周年纪念。新版本将有一些颇具创意的功能出现,从这些功能上的改进我们不难看出,BlogEngine.NET 开发团队是一只有着创新思维的开发团队,他们对博客的理解是独到的;博易是一个具有发展潜力的博客产品,我们应该对它的未来抱有希望,并且相信它将越来越好地为人民服务:p。