mywhere

我的地盘,听你的。Google Maps API mashup,Location Based Service, and other thinking about internet

星期四, 十一月 23, 2006

豆瓣blog申明拥有的验证

今天才知道豆瓣有“我上”这个功能(名字有点别扭,更别提“我去”了)。为了更好的推广mywhere.org,我也更新了我在豆瓣里面的设置,并申明我是这个blog的作者。
这是豆瓣的验证码:doubanclaim10ec6629a8af8db4
有很多人说,豆瓣这么做不好,应该采用Google提供的某些服务那样,在页面的代码中添加相应的验证码更为专业。但是我的看法是:
  1. 在代码中添加就意味着这个验证码会一直存在于你的blog里,但是目前豆瓣仅仅要求你在某一篇文章里提及就可以。相对来说,影响更小。
  2. 并不是每一位写博客的人都了解HTML,不知道如何来添加那段代码。同时有很多人的博客都是由BSP托管的,这意味着他们根本修改不了代码。

星期三, 十一月 22, 2006

IBM developerWorks是一个很好的资料库

很早就知道IBMdeveloperWorks,今天看到几篇里面的文章才切身体会到它的优点。
今天通过一篇blog的介绍发现了上面有关Ajax的几篇文档,讲解得非常透彻,连忙把它们加入到我的del.icio.us里面。同时在里面继续挖掘的时候,看到一个介绍Zend Framework的系列,文档通过一个比较流行的应用实例完全演示了Zend Framework的功能。通过查看它的代码,优化了不少mywhere.org的代码。
最重要的是,通过它的代码,懂得了在Zend_View中嵌套view的实践,这也是自己以前一直想做的。具体实现方法就是利用Zend_View::render方法:
$amazonView = Zend::registry("view");
$amazonView->title = "title";
$view->amazonContent = $amazonView->render("amazon.tpl.php");
echo $view->render("template.tpl.php");
这里做一个记录,以后日后使用:
最重要的应该是这个地址,以后多到这里看看。

IE6的一个bug?

今天晚上的工作进展不算很大,主要的收获是解决了IE6的一个bug。
因为我现在采用xml输出数据,然后javascript对数据进行解析、显示。因此不可避免的需要通过DOM来对动态显示的数据进行相关的设置。如果我想创建一个div,然后设置它样式的class,在Firefox中,可以通过如下的代码:
var node = document.createElement("div");
node.setAttribute("class","myclass");

但是这段代码在IE6下是无效的。Google了一下,找到这个解决方法
var node = document.createElement("div");
node.className = "myclass";

IE6可能有点固执,认为class这个不算属性,必须要显式的设置className的值。

星期二, 十一月 21, 2006

Google Reader的快捷键

Google Reader是一个很好地在线rss聚合和阅读网站。速度不错,同时有效地绕开了GFW,可以很好的阅读blogspot.com上的blog。
使用了一段时间,无论是在家还是在办公室。一开始遇到一个问题,就是在家里使用的时候,快捷键j总是有问题。但是空格还可以用,也就没怎么在乎。
突然又一次可以使用了,才发现了在加快捷键的问题所在。原来是家里的电脑,缺省的输入法是微软拼音。如果把输入法切换为英文的,快捷键没有任何问题。:)

使用Zend Framework输出xml各式的内容

这几天晚上都在忙着赶工mywhere.org,中间遇到不少问题。借助于google的帮忙,都还能找到解决办法。
才解决的一个问题是提供xml的动态输出。这里所说的输出不仅仅产生xml格式的字符串,同时要告知浏览器它所访问的内容是xml文档。由于url采用rewrite重写,没有.xml的后缀,要让笨笨的浏览器知道这是xml文档,必须利用header函数。比如:
header("content-type:text/xml")

但是当我试图在controller的任意action里面使用的时候,他总会输出:
Warning: Cannot modify header information - headers already sent by (output started at

我几乎搜索了zend framework的所有代码,也没有找到输出header的地方,除了那个Zend_Controller_Action::_redirect()函数。那为什么还会出现这种错误呢?
利用google搜索了好久,终于在一篇Zend framework tutorial的comment里面找到解决方法:
  1. 修改php.ini文件,将output_buffering参数设置为On
  2. 修改.htaccess文件,添加类似的设置,例如:php_value output_buffering "4096"

我本地的实验中,方法1毫无疑问解决了问题,但是方法2似乎有些问题。我利用方法2,打开网页,居然出现如下错误:

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, webmaster@mywhere.org and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log


不明白是不是什么地方不对,我的环境是windows+apache。

这还只是解决了第一个问题,更奇怪的是在后面,这应该是Zend framework的一个bug了。

现在万事俱备,就可以生成xml内容了。在php5中,DOM XML库是没法再使用了,需要使用DOM库。新的当然比旧的要好:)

简单的写了几行代码,做个测试,但是用浏览器访问,却得到如下的结果:


XML Parsing Error: not well-formed

Line Number 1, Column 2:


这个错误比前面那个更要奇怪。通过察看page source,xml内容的格式完全没有错误。开始以为是因为内容中间包含中文字符,因此可能是encoding方面的问题。但是无论encoding从utf-8改为gb2312还是iso之类,都没有任何改变,甚至更糟:中文成了乱码。在办公室的电脑测试,发现全部为英文也有这种错误。

只有求助于google了,不断的搜索,不断的变换关键字,终于找到了解决方法


ob_end_clean();
header("Content-Type: text/xml");


原因是,Zend Framework不知道在哪里提前输出了一些空格内容。

星期三, 十一月 08, 2006

Microsoft Virtual Earth Vs. Google Earth

因为google的存在,网络世界的竞争越来越白热化。这不,前不久Microsoft也推出了一个3D版的Virtual Earth。所有人都明白,用来对抗Google Earth
Microsoft的策略有所不同,它不像Google那样做一个桌面软件,而是采用了IE插件来实现的方式。这样对用户来说,安装应该更简单。但是,也许在用户体验上并不是很好。
  1. IE的名声不是太好,用户在慢慢减少。至少在中国,很多人因为流氓插件的方式不敢用了
  2. Google用单独的桌面软件的方式,可以提供更多的功能,同时提供更好的用户操作体验
但是有一点,Microsoft采用栅格影像贴图的方式来渲染3D影像,对比Google Earth的矢量模型,影像看起来更为逼真。从Virtual Earth的官方blog看到,它的3D渲染技术应该是采用Vexcel的技术。
可以这么说,因为Google Maps的推出,突然之间,GIS产业变得热闹起来,尤其是基于网络的webGIS。也同时由于Google Maps API得简单易用,越来越多地Google Maps Mashup刺激着各种各样的应用和想法在网络上蔓延。
作为传统的GIS软件厂商,ESRIMapInfoAutodesk,面对如此快速发展的市场变化,却表现得有一些措手不及。
GIS软件厂商如何发展?如何定义GIS软件?Google Earth是不是一个GIS软件?
按照目前发展的趋势来看,应该在五年之内,提供位置的服务或者软件应该会成为类似office一样的大众产品。确实,在日常生活中,其实我们和地理位置打交道的频率越来越高。出行,购物,旅游等等,只是目前的技术等因素,抑制了这些需求,或者由一些更为低级的方式解决。试想,如果有一天,我们的手机都带有GPS的功能,我们的能够快速的进行基于位置的查询,生活要更为惬意。
现在来考虑上面提出的三个问题。
GIS软件厂商如何发展?
我觉得这有些类似互联网和cisco的关系。cisco被比喻为互联网的管道,因为它的硬件构建了整个互联网(其他网络硬件厂商看了有些不高兴了)。同样的,目前的GIS厂商提供的很多都是GIS的制作工具,没有了这些软件,我们就没有办法创建数据。但是,这里就有一个市场的广度问题。Google Maps的用户是直接面向大众,而ESRI的用户仅仅是有限的专业领域的客户,当然是大众市场的潜力更大,空间更广阔。这就迫使着目前的GIS厂商进行产品的定位和产品线的扩充。就像Microsoft既提供程序员用的Visual Studio,又提供普通用户的Office。那么Autodesk可不可以既提供专业人员使用的Map 3D,又提供普通人使用的Location 3D呢?
如何定义GIS软件?Google Earth是不是一个GIS软件?
就像前面所说,GIS软件有着不同的目标客户。业界有一个说法, what is GIS?what the ESRI has done! 但是,很难想象,一个普通用户的电脑里面安装着ArcGIS.对于他来说,Google Earth是一个很酷,很实用的GIS软件。因为在那上面,他可以很方便的查询道路,附近的酒店,餐馆和景点。虽然他没有意识到什么GIS,但是他确实在使用一个GIS软件,使用一些标准的GIS功能。我不知道Google Earth自推出以来确切的下载和安装数据,但是它的用户肯定比ArcGIS/ArcInfo要多很多。
作为一个GIS和遥感专业毕业的学生,我第一眼看到Google Earth时觉得很汗颜。首先,不得不佩服他的创意;其次,震撼于它的技术,无论从遥感的角度还是GIS角度。
暂时写到这里。

EEMap共享地图

第一眼看到EEmap的时候,我感到很吃惊,也很沮丧。因为它所完成所实现的和自己的想法实在太接近了,而且在名称上也和我最初想的名称sharewhere差不多。
但是在研究了它的网站之后,我还是对自己的想法抱有希望。至少EEmap的主旨还是类似wiki的理念,让用户来共享自己所知道的地理位置。但是web2.0的主旨应该更强调个性化,personal.也就是说用户贡献内容的目的并不仅仅是为了共享这个地理位置,很重要的一点是因为它在自己的生活中很重要。
可以设想的一个场景,我把我在老家的一些位置标记出来,同时附上一些相关的记录性的文字,可以成为一个很好的地图故事。
当然,Google Maps最大的缺点是没有办法让用户之间共享一些私人的位置。所以,我们这些mashup的很大一个功能应该是便于用户创建,共享地理位置。
有竞争才能激发灵感,我希望能够和EEmap并行发展。当然,别人的产品已经推出,我的还在开发之中;别人是一个团队,而我,仅仅一个人。