游走于黑暗的风

3月 16, 2009

从应用和插件的异同看漫游应用的发展方向

归档在: 漫游应用 — 标签:, , — ywindf @ 9:26 上午

一、插件与应用各自的优点
插件是一些工作于站点上的代码,它们通常是为了实现一些产品本身所不具备的功能;应用是一些工作于开发者服务器上的代码,并通过漫游平台为站点提供一些新的功能。
代码工作的地点不同,既是形式上的不同,又是思考模式的不同。目前插件的模式主要存在于Discuz,uch上的插件相对来说要少一些。插件相对应用,最大优势是什么呢?我想应该是“协同合作”。一个站长,选择自己需要的插件,并通过这些插件来服务自己站点上的用户,由于代码和数据都是存储在站长自己的站点上,这就为各个应用之间的协同合作提供了可能。例如一个实名认证的应用为用户提供实名验证,而另外一个交易插件则可以直接使用验证插件的数据。插件相互之间是透明的。
再来看一下应用,这是一种全新的模式,它和插件的区别就像是google Docs和Office的区别。对用户来说,这两种模式并没有什么不同,因为他们面对的都是“功能”。对两者间区别感受最深的应该是站长,应用为他们提供的是“服务”,而不再是“代码”。相对于插件,应用模式最大的受益者是开发人员。漫游平台就像是一个“超市”,应用开发者把自己的应用放到这里,站长来此选购,节省了推广和对站长进行技术培训的成本,开发者可以把精力都放到如何提高自己应用的质量上。这里提出第一个问题:超市里的商品是不是顾客需要的?

二、插件与应用哪一个更能满足站长和用户的需求
大部分插件的诞生,往往是源于站长的需求。一个插件可能不会适用于所有的站点(站长),但由具体需求催生出来的插件更精准,更有针对性,插件作者往往可以在第一时间获得收益。
应用在节省了开发者推广成本的同时,也切断了站长与开发者之间的联系。开发者按照自己的想象去分析用户需求,然后按照自己的思路去做一个应用。这样做出来的东西,可能有通用性,却不具备针对性。
总结一下,插件体现的往往是站长的意志,而应用大多是开发者和自我表达。插件第一考虑的是站长,而应用的思路是直接面向用户,有时可能会忽略站长的需求。这也回答了我们提出的第一个问题,目前顾客只能选择那些“看上去适合自己”的商品,而没有真正的选择权。

三、插件与应用赢利模式的分析
前面说过,插件就像是传统软件,插件作者靠卖拷贝来赚站长的钱,站长靠插件实现的功能来赚自己站点上用户的钱。这就决定了插件作者需要承担一定的“盗版”风险,插件购买者的人品往往会影响到插件作者最终能出多少份拷贝。在站长购买了一个插件以后,由此插件所产生的收益就与插件开发者无关了。这种情况下,插件仅仅是站长实现自己经营思路一个工具。农夫找铁匠定做了一把自己顺手的铁锹,由这把铁锹挖到的土豆与铁匠没有任何关系,这看上去天经地义。
漫游平台从根本上解决了“盗版”的问题。应用开发者与站长之间没有形成明确的买卖关系,漫游的分成模式似乎把应用开发者和站长放到了同一个战壕里:开发者提供功能,站长提供用户,两者一起来赚用户的钱。这看上去是一种完美的合作,但我却认为这其中存在着很大的弊端,因为这个合作的过程忽略了站长的诉求,而站长却是最了解用户的人。在这个合作模式中站长是一个很被动的角色,提供了用户,却没有机会说出自己站点用户的真正需求。

四、如何结合站长的需求和开发者的生产力
开发者和站长需要交流。我们不能否认的是,站长比开发者更了解自己的用户。开发者的需求分析可能是基于自己的想象,而站长对自己用户的了解却是来源于更有说服力的数据。如何有效地结合站长的需求和开发者的生产力,使二者扬长避短,发挥自己的特长?下面说一下我的两点看法:
1、建立一个站长与开发者交流的平台。通过这个平台,站长可以提出自己的需求,由开发者帮助站长实现这个需求。这个平台可以是现有的开发者站点,也可能是uch后台的一个功能。
2、丰富应用的模式。现在的应用都是直接面向用户的,我们是否可以考虑让开发者做一些面向站长的应用。其实这一点是建立在第一点的基础上,要实现这一点的前提就是这个应用充分体现了站长的诉求。应用开发者通过为站长提供应用来赚站长的钱,而站长通过这些应用去服务用户,赚用户的钱。

垂直和门户,是目前对sns发展方向的两种不同声音,而我觉得两都并不是没有共存的可能。垂直是对门户的补充,一个站点很难满足用户的所有需要。就像一个上天涯的用户,还会去55bbs八卦,去蜂鸟玩摄影,这并不冲突。uch的定位不可能是门户,那么一味地跟着开心校内走并不见得是最好的选择。漫游平台上有各种各样的站点,有着比开心校内更丰富的需求,我们要做的就是让站长说出自己的需求,让开发者了解站长的需求。

最后,用一句话来概括我这篇文章的核心思想:一个好的应用,应该更多地体现站长的诉求,因为站长的诉求往往就是用户的。

1月 28, 2009

测试一下windows7的writer

归档在: 心情 — ywindf @ 12:21 下午

让我们来测试一下这个东西是否好用?

11月 29, 2008

我的php configure

归档在: linux, php, 漫游应用 — 标签:, , , , , , , — ywindf @ 12:56 上午

freebsd+nginx+php,安装uchome的时候提示找不到xml_parser_create(),php -i ,发现libxml是enable的状态。google了一下没有找到解决方案。在php手册里发现了expat的信息,看上去像是另一个xml解析库。既然libxml无效,只好试一下这个了。

下载expat(http://sourceforge.net/projects/expat/),编译,安装,然后是重新编译php。手册里提示需要在configure的时候加入“--with-expat-dir=DIR”,如法炮制发现这个选项是错误的。于是configure –help了一下,发现应该是“--with-libexpat-dir=DIR”(如果你是按默认配置安装的expat,那么DIR的值应该是/usr/local),修改一下,一切ok。再试xml_parser_create(),问题解决。

附上我的php configure参数:

./configure  –with-layout=GNU –with-config-file-scan-dir=/usr/local/etc/php –disable-all –enable-libxml –with-libxml-dir=/usr/local –with-libexpat-dir=/usr/local –enable-reflection –program-prefix= –enable-force-cgi-redirect –enable-discard-path –enable-fastcgi –with-regex=php –with-zend-vm=CALL –enable-zend-multibyte –disable-ipv6 –prefix=/usr/local –mandir=/usr/local/man –infodir=/usr/local/info/ –with-mysql –with-gd –enable-gd-native-ttf –enable-gd-jis-conv

11月 25, 2008

如何提高漫游应用的速度

归档在: 心情, 漫游应用 — 标签:, , , , , — ywindf @ 11:13 下午

抛开服务器配置和网络速度等问题不谈,要加快漫游应用的速度,主要有两个方法,第一个是缓存必要的数据,第二个是合理地使用漫游接口。下面我就从这两个方面来谈一下如何加快漫游应用的速度。

一、缓存

缓存是提高程序效率永远有用的方法。不论是discuz还是uchome,都使用了缓存技术。将缓存技术使用到极致,应该就是静态化技术了,但这显然不适用于漫游的应用。这里的缓存是指对一些必要数据的缓存,将这些信息存到应用所在的服务器,不再每次都跟漫游的服务器通信。

需要缓存的数据并没有一定之规,不同类型的应用需要缓存不同的数据。但不管怎样,缓存应该遵循这样两个原则:一是缓存的数据可以减少与漫游服务器的通信次数,二是只缓存可以缓存的数据。第二条看上去像是一句废话,稍的我会对此做详细的解释。

被缓存的应该是这样的一些数据:它们往往是不会改变的,或者被改变机率的很小。这样的数据主要有下面这些:

  1. 站点id。这个id是不会改变的,一般来说这对应用是一个关键数据,已经可以脱离缓存的范围了。
  2. 用户id。这是用户的唯一标志,也不用多说什么了。
  3. 用户的性别。或许很多开发者没有意识到这一点,但在应用中体现性别会是不错的用户体验,而且缓存用户的性别并不需要太多的额外开销。
  4. birthday,用户的生日。这个数据一般来说是不会改变的,而记录这个数据的目的可以有很多。用户生日的时候收到一句问候或是一个小礼物一定可以让用户牢牢记住你的应用。

大多数情况下上面的这四个数据都可以缓存到本地,这些数据也是一些最基本的信息。之所以把站点id放到用户id的前面,是提醒开发者注意到这样一个属性。还有一些信息取决于uch站点的设置及管理策略,如用户的真实姓名,用户的权限。缓存这样的数据需要承担一定的风险,因为这些数据是可能发生改变的,尽管改变的频率不会很高。但换一个角度来说,这些数据才是真正的缓存,你需要有一个定时更新的策略来保证数据的有效性。一个合适的更新频率可以在尽量不影响用户体验的情况下大提高程序的效率。

还有一些数据是不需要被缓存的,这就是前面提到的“只缓存可以缓存的数据”。用户的好友关系,头像等就属于不可以被缓存的数据。用户的好友属于基本信息,不管你是否需要,漫游都会在每次通信时把这个信息传给你。而且用户的好友关系属于更新频率比较高的数据,缓存这样的数据并不是一个明智的选择。用户头像也一样,如果不是十分必要,缓存用户头像也是一件很傻的事情,myml完全可以满足你的要求。

二、合理使用接口

漫游为你提供了丰富的接口,但这并不意味着你可以无限制地使用它们。如果你在循环中使用了接口,那你最好还是修改一下你的程序。api,myml,myql,这三者就像是积木。他们可能在功能上会有一些重合,这种时候就需要你选择一个最合理的方式去获取数据。除了一些基本的信息(如用户的好友关系,具体有哪些你可以在你的应用中输出一个$_POST变量看一下),每次通过api取数据的时候你的服务器都需要与漫游通信,尽可能地减少这些通信的次数。你可以把漫游当成一个用户信息的仓库,但不要把漫游当成你手边的抽屉,不要想当然地认为这些信息伸手就可以拿到。

大多数据时候myml应该是你的第一选择。不管你的页面里有多少myml,它们都会被漫游一次性解析。构成myml只需要很少量的动态数据,而且这些数据通常都可以缓存在本地。用myml也可以实现一些简单的判断,如果用户的好友关系等。

myql也是一个不错的选择,不仅可以减少与漫游服务器的通信次数,还可以把一些复杂的计算交给漫游来做。

在使用api之前,你需要清晰地了解自己的应用要用到哪些数据。这其中哪些是缓存在本地的,哪些是需要去漫游取的。合理地组织这些数据,尽量减少与漫游通信的次数。

11月 24, 2008

调整自己

归档在: 心情 — ywindf @ 9:25 下午

最近感觉压力有点大

一直不是很擅于应对压力。总是想很多办法在压力来临之前化解它,这似乎也是逃避的一种。一旦同时有多方面的压力压到自己身上,我似乎总是会下意识地支逃避。看上去像是一个无法应对多线程的cpu。

我相信自己不是缺乏应对的能力,而是缺乏应对的态度。

面对,不要逃避。在被压倒之前找到自己真正的极限!

郁闷了一下午

归档在: 心情, 杂谈 — ywindf @ 9:04 下午

做一个漫游的应用,在修改一个JS函数的时候被郁闷了。

本来这个函数是可以正常工作的,新的功能需要在里面多加一个判断。

让我郁闷的事情发生了,不管我在这个函数里添加什么内容,哪怕是只是定义一个变量,js就不能正确编译。两百来行的代码,反反复复地看了得十遍,却始终找不到解决的方法。

无奈至及,出去抽了一根烟。烟抽完了,更让我郁闷的事情发生了,这个函数恢复了正常。

11月 20, 2008

js倒计时函数

归档在: js — 标签:, — ywindf @ 10:43 下午

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<script>
function $(id){
return document.getElementById(id);
}

function countDown(seconds){
c1 = setInterval(function(){
if(seconds <= 0){
clearInterval(c1);

//倒讲时结束,这里可以触发一些调用,如刷新页面等
alert(’The End!’);
return;
}
day = Math.floor(seconds / 86400);//天
hour = Math.floor((seconds - day * 86400) / 3600);//小时
minute = Math.floor((seconds - ((day * 86400) + (hour * 3600))) / 60);//分
second = seconds % 60;//秒

//格式化输出时间为x天x小时xx分xx秒
output = ”;
output += (day <= 0) ? ” : (day + ‘天’);//天
output += (hour <= 0) ? ” : (hour + ‘小时’);//小时
output += ((minute <= 0) ? ” : (minute < 10 ? (’0′ + minute) : minute) + ‘分’);//分
output += ((second < 10) ? (’0′ + second) : second) + ‘秒’;//秒
$(’countdown’).innerHTML = output;

seconds–;
}, 1000);
}

function clearCountDown(){
clearInterval(c1);
}

</script>
<title>无标题文档</title>
</head>

<body>
<div id=”countdown” style=”color:#FF0000; font-size:14px;”></div>
<a href=”#” onclick=”countDown(93666); return false;”>倒讲时</a><br />
<a href=”#” onclick=”clearCountDown(); return false;”>清除倒讲时</a><br  />
<a href=”#” onclick=”tt(); return false;”>测试</a>
</body>
</html>

11月 18, 2008

vim常用操作技巧

归档在: linux — 标签:, — ywindf @ 1:59 下午

在这里记录下一些常用的vim操作技巧,有的是自己man的,有的是向高手请教的,有的是google出来的,随时更新。

1、改变文件编码
:set fileencoding=utf-8
或者简写成:
:set fenc=utf-8

2、分屏编辑多个文件
:sp filename(水平分屏)
:vs filename(垂直分屏)

3、复制并粘贴当前行
yyp

4、代码折叠。
zn、zc、za、zc….

5、让vim根据代码缩进折叠
set fdm=indent(在.vimrc中加入此句)

6、转到第10行
10G

WordPress中文版 提供驱动