存档

‘Coding’ 分类的存档

胡子手册:mustache — Mustache processor

2011年8月1日 没有评论
No Gravatar

这是部关于“胡子”的手册。传说中应用于PHP, Java, Ruby, Python, JavaScript, erLang等牛掰事物上的模板。至于这么介于牛A和牛C之间的事务为什么叫做胡子,据某不大健康的思路大致如下:
1. 可能如果以男人为模板,胡子大概是比较重要的部分,虽然现代人的社会大部分男人的胡子都脱不了被刮除的风险。
2. 如果有了胡子,则可以更为男人一点。如果使用了mustache模板,则上通五湖,下达四海,各类前端工程师可以游刃于纯美之间,无需考虑各种开发的小小刀片之差异。
3. 大棵一点的是有了胡子,至少么还象个男人,谁还在于您阳货之不具耶?
4. 更恶的一点:胡子么,既名之曰mustache,这痛么必然是有一点点的,反正痛过了就没事了:D。
5. 胡子挡住了你的嘴,所以你说的内容胡子上是看不出来的,这样用户真不会关注你后端的实现办法了。:)
以上胡扯,如有愿意对号入座者,自行分辨,或者可以自行摸一下,是不是硬硬的还在:D。若是觉得一个mustache就可以解决您公司复杂的python/Java/RoR/PHP之类混乱开发方式引起的使用了django/grails/rhtml/smarty之类模板的混乱,窃以为切切不可。
下面开始翻译mustache模板手册:

MUSTACHE(1) MUSTACHE MANUAL

NAME/名称
mustache — Mustache processor

SYNOPSIS/摘要
mustache
mustache –compile
mustache –tokens
DESCRIPTION/描述
Mustache is a logic-less templating system for HTML, config files, anything.
Mustache是一个用于HTML/配置文件或任何一种文档的无逻辑模板系统。
The mustache command processes a Mustache template preceded by YAML frontmatter from standard input and prints one or more documents to standard output.
mustache命令会使用由标准输入预提供的YAML数据,然后打印一个或者多个文档到标准输出。
YAML frontmatter beings with — on a single line, followed by YAML, ending with another — on a single line, e.g./该YAML的输入格式由一行—开始,跟着是YAML内容,再由另一行—结束。例如

---
names: [ {name: chris}, {name: mark}, {name: scott} ]
---

If you are unfamiliar with YAML, it is a superset of JSON. Valid JSON should work fine.如果你对YAML不熟悉,它是JSON的超集。合法的JSON也可以工作得很好。

After the frontmatter should come any valid Mustache template. See mustache(5) for an overview of Mustache templates./在数据之后跟着合法的Mustache模板。参见mustache(5)来获得Mustache模板的概况。

For example/例如:

{{#names}}
Hi {{name}}!
{{/names}}

Now let’s combine them/现在让我们来整合它们.

$ cat data.yml


names: [ {name: chris}, {name: mark}, {name: scott} ]

$ cat template.mustache

{{#names}}
Hi {{name}}!
{{/names}}

$ cat data.yml template.mustache | mustache

Hi chris!
Hi mark!
Hi scott!

If you provide multiple YAML documents (as delimited by —), your template will be rendered multiple times. Like a mail merge./如果你提供多个YAML文档(用—来分隔),模板会渲染多次。就象邮件合并。

For example/例如:

$ cat data.yml


name: chris

name: mark

name: scott

$ cat template.mustache

Hi {{name}}!

$ cat data.yml template.mustache | mustache

Hi chris!
Hi mark!
Hi scott!
OPTIONS/选项
By default mustache will try to render a Mustache template using the YAML frontmatter you provide. It can do a few other things, however.缺省地mustache命令会试图用你提供的YAML格式数据来渲染一个Mustache模板。当然,它还可以做一些其它的事情。

-c, –compile
Print the compiled Ruby version of a given template. This is the code that is actually used when rendering a template into a string. Useful for debugging but only if you are familiar with Mustache’s internals.
打印给定模板的编译后Ruby版本代码。这个代码是将模板渲染成字符串时真实使用的代码。这个代码对于高度来说是非常有用的,但是仅适用于你对Mustache内部非常熟悉的情况。

-t, –tokens
Print the tokenized form of a given Mustache template. This can be used to understand how Mustache parses a template. The tokens are handed to a generator which compiles them into a Ruby string. Syntax errors and confused tags, therefor, can probably be identified by examining the tokens produced.
打印指定Mustache模板标记后样式。这个可以用来理解Mustache是如何解析一个模板的。这些标记由一个产生器来处理,这个产生器将它们编译到一个Ruby字符串中。语法错误和令人糊涂的标签,就可能通过检测标识的产生来被认知。

INSTALLATION/安装
If you have RubyGems installed/如果你已经安装了RubyGems:

gem install mustache

EXAMPLES/例子

$ mustache data.yml template.mustache
$ cat data.yml | mustache - template.mustache
$ mustache -c template.mustache
$ cat < ---
name: Bob
age: 30
---
data

COPYRIGHT/版权
Mustache is Copyright (C) 2009 Chris Wanstrath

Original CTemplate by Google(源自Google CTemplate)

SEE ALSO/参见
mustache(5), mustache(7), gem(1), http://mustache.github.com/

http://mustache.github.com/mustache.1.html

注:
在Ubuntu下,如果没有安装ruby,请安装。如:

$ sudo apt-get install ruby rubygems
$ sudo gem install mustache

之后,它是安装到了/var/lib/gems/1.8/bin/。调用/var/lib/gems/1.8/bin/mastache或者加入路径吧。

本文的内容感谢@shellexy的帮助。

懒惰了,写段bash代码

2011年7月30日 2 条评论
No Gravatar

一直比较喜欢DS系的小车。今天想下载两张漂亮的图片看看,居然顺道促成了两件事。

其一是由于DS网站上一共80张图片,每张图片居然都是zip下载,里面只存了一张照片。这样就需要下载了之后解压,然后再删除zip文件。很不爽,如果一个一个来的话估计午饭不用吃了,手还会抽筋。还是写段shell程序来得实在。虽然用python也能干,不过一直没写过shell也不算真正用过Linux不是么。

代码如下,虽然很简陋,不过用起来还真是爽,缺点是70对应的图片扩展名是大写,没有处理好:

for i in $(seq 1 80)
do
	if !(test -f Citroen\ DS_19201200_$i.jpg)
	then
		wget -c http://www.dscitroen.com.cn/image/loadPic03/Citroen%20DS_19201200_$i.zip ; unzip Citroen\ DS_19201200_$i.zip ; rm Citroen\ DS_19201200_$i.zip
	fi
done

其二是原来的wordpress url一直用的是/年/月/日/%postname%格式,一直想简化成%postname%格式,一直以来Godaddy君的服务器老是因为某些原因(可能是由于超卖?.htaccess文件重写出问题)犯500错误,要不就是访问起来犹如接上了一根小水管,没有来得及处理,因此上这事一直没做。参考不能不知的wordpress中的.htaccess应用就解决了。重点是:
1. 先去后台控制面板把永久链接的形式修改为只有/%postname%/
2. .htaccess里加入:RedirectMatch 301 /([0-9]+)/([0-9]+)/([0-9]+)/(.*)$ http://www.yourblog.com/$4
参考文章:
1. 不能不知的wordpress中的.htaccess应用
2. 雪铁龙DS系列官网
3. linux中shell编程for循环问题
4. UNIX Shell 编程 条件判断
5. shell编程简介感叹呐,居然是老何同志的手笔
6.shell if 如何取非? CSDN太恶心了,广告正好盖住了主题,还没有叉叉可以关掉
7.

PHP元编程

2011年7月3日 1 条评论
No Gravatar

1

<?php
class _Meta_Base {
		function __call($method, $arg_array) {
				echo $method . "<br />";
		}

		function doCallable() {
				$this->doCallBefore();
				$this->doCaller();
				$this->doCallAfter();
		}
}

class MetaClass extends _Meta_Base {
	function doSomething() {
		echo parent::doSomething();
	}

	function doCaller() {
			echo "A good solution for PHP meta programming<br />";
	}
}

$mc = new MetaClass();

$mc->doSomething();
$mc->doNothing();
$mc->doCallable();
?>

2

执行结果

$ php meta-test.php
doSomething
doNothing
doCallBefore
A good solution for PHP meta programming
doCallAfter

Wearther.com的天气预报嵌入

2011年5月24日 没有评论
No Gravatar
<img style="visibility:hidden;width:0px;height:0px;" border=0 width=0 height=0 src="http://c.gigcount.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEzMDYxNDEwODE*MDMmcHQ9MTMwNjE*MTA5OTg3MCZwPTEyMzQ*ODEmZD1BZGRUaGlzXzM2aHJ2MS4xLjAmZz*xJm89/OGNlYTdlNjhmOGEwNDFmZGJiZGY1MTY4YTNkM2FmNTQmb2Y9MA==.gif" /><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="twc-widget-wrapper-36hour" width="300" height="250" codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
<param name="movie" value="http://s.imwx.com/v.20110211.111141/img/swf/twc-widget-wrapper.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<param name="wmode" value="transparent" />
<param name="allowScriptAccess" value="always" />
<embed src="http://s.imwx.com/v.20110211.111141/img/swf/twc-widget-wrapper.swf" quality="high" bgcolor="#ffffff" wmode='transparent' width="300" height="250" name="twc-widget-wrapper-36hour" align="middle" play="true" loop="false" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" FlashVars="site=weather&moduleSrc=http://s.imwx.com/v.20110211.111141/img/swf/twc-widget-36hour.swf&preview=http://s.imwx.com/v.20110211.111159/img/common/twc-widget-node-36hour.png&origin=true&locationId=CHXX0019&tempUnits=c&country=CH">
</embed>
<param name="FlashVars" value="site=weather&moduleSrc=http://s.imwx.com/v.20110211.111141/img/swf/twc-widget-36hour.swf&preview=http://s.imwx.com/v.20110211.111159/img/common/twc-widget-node-36hour.png&origin=true&locationId=CHXX0019&tempUnits=c&country=CH" />
</object>

其中:tempUnits有两处,指定c为摄氏度,指定f为华氏度,缺省为华氏。

分类: Coding, 随笔 标签:

Google Maps嵌入参数

2011年5月24日 没有评论
No Gravatar

最近接了个不赚钱的活。需要嵌入Google的地图到网页中。算是有点收获。

关于maps.google.com/maps参数的说明很少。我们在links里生成的链接大概如下所示。但是具体参数的涵义没有说明,对于想要定制显示方式来说,还是有点难度。

http://maps.google.com/maps?

f=d
&source=s_d
&saddr=%E5%A4%A7%E8%BF%9E%E5%B8%82%E9%A9%AC%E6%A0%8F%E5%AD%90
&daddr=38.91975132975439,121.4334236830473+to:%E4%B8%AD%E5%9B%BD%E8%BE%BD%E5%AE%81%E7%9C%81%E5%A4%A7%E8%BF%9E%E6%97%85%E9%A1%BA%E5%8F%A3%E5%8C%BA%E5%A4%A7%E7%9F%B3%E6%B4%9E%E6%9D%91
&hl=en
&geocode=FfTbUQIdeOU-BykxnaYr6mCPNTHVguEj3oZWBw%3BFUfeUQIdT-08ByknRgvPumiPNTGKyUnse2QZBw%3BFU4hUQIdxYE8Byn5i2qrrm-PNTGPGMyTpTQ_zw
&mra=ls
&mrsp=1
&sz=12
&via=1
&sll=38.87509,121.48244
&sspn=0.219706,0.233459
&ie=UTF8
&ll=38.87509,121.48244
&spn=0.219706,0.233459
&output=embed

查了一下,只找到一篇英文的wiki算是比较全。尝试翻译一下。以下是翻译,不完全是翻译。
注:听从@sagasw的建议,将中文和英文内容分开。

Google Map参数


下面是一个关于可以传递给maps.google.com(以及.co.uk/.be等)的一些参数的清单。如果你想通过Google Maps显示驾驶路线,而这些API并没有提供,你就可以使用它们。

一般性的内容


q=
这是最常用的参数。
查询 - 所有被传入这个参数的内容会被象maps.google.com中的查询输入框中所输入的内容一样被处理,特别是:

  • 要查找的精确地址,标记点或者在某个特殊点上显示的信息框。
    • 提示:在附近不能有类似或者著名的地点的查询值才是可靠的。例如,给出一个会议通知,告诉人们去128号门牌号码的地点,但是只能在街区信息中发现一个12-8的位置(比如6/2010,谁会知道它以后会被匹配到什么信息?)
  • 城镇名字,或者前面的部分邮政编码,会显示到标记或者信息框里。
  • 由纬度和经度信息指定的位置,用十进制形式,比如(52.123N,2.456W或52.123,-2.456),或者采用度/分/秒来表示(52 7 22.8N,2 27 21.6W或52 7 22.8,-2 27 21.6),或者度和分(52 7.38N,2 27.36W或52 7.38,-2 27.36)。
  • 在信息窗口和侧边栏中以粗体显示的文本内容,增加括号()。你可以在不希望断行的的时候使用%A0防止断行发生。你还可以在行尾增加足够多的%A0,并在后面跟一个空格(在URL中使用+号)来强制产生断行。例子如原文指出:URL: http://maps.google.com?q=New+York,+NY+(Mapki%A0is%A0a%A0very%A0good%A0Wiki%A0for%A0Google%A0Maps!%A0%A0%A0%A0%A0%A0%A0%A0+The%A0previous%A0line%A0is%A0now%A0sufficiently%A0long!)
  • to和from需要激活驾驶线路规划功能。
  • 关键字near和loc:会激活本地搜索功能。
  • 两个街之前可以用空格&空格形式,但是在URL里需要使用+%26%或%20%26%20,而不是+&+或+&amp;+。
  • 需要指出的是+号,其实它与,号的作用相同。
  • 位置信息也可以由在@符号后的十进制形式来表达,如(@52.123,-2.456)。这个方式应该会自动给出一个较低的缩放比例。使用这种格式会影响到查询的其它参数。@符号,而不是near或者loc:可以形成单一的查询结果。而其它的方式可能返回数以千计的结果。
  • q=10+Downing+Str+is+not+here@51.50335,-0.227721
    可以在指定的地址放置一个自定义的提示标记,比如q=唐宁街10号不在这里@51.50335,-0.227721。 

    • 这个标签不能是国家的名字,或者没有显示出标记的时候。但是当给出座标的情况下,它可以是空白的。
  • 座标之外增加()标签可以为Google地图提供一些提示。
    1. http://maps.google.com/maps?q=24.197611,120.780512
      我们的位置正好在某被错误标识的知名地点附近。读者应该可以注意到正确的绿色箭头。
    2. http://maps.google.com/maps?q=Dan@24.197611,120.780512
      Dan标签可以扩展成为某机场的名字(Danville Regional Airport)
    3. http://maps.google.com/maps?q=24.197611,120.780512+(Dan)
      这种情况会安全一些。但是显示的是一个黄色的标记。
    4. http://maps.google.com/maps?q=loc:24.197611,120.780512这是一个精确的地点表示。
  • 要注意用%表述非ASCII字符,比如(和)还有+是安全的,但是空格必须以%20表示。注意它们可能被用户的浏览器解释错误。
  • sky:前缀用来查询由Sky产生的KML内容。这个参数是被Google Sky使用,并产生KML输出。
  • 包含GeoRSS数据的Google Earth .KML/.KMZ文件或者RSS输出的完整URL,可以被Google Earth使用,里面包含的信息可以被显示在地图上。

near=
可以使用位置信息的一部分,而不是象q=参数那样输入全部信息。

g=
这是一个给q参数提供额外上下文信息的地址或位置。Google Maps在这里自己用来保存上一次运行的搜索。注:如果这是第一次运行,它将包含你所开始的位置信息。所以它有潜在的信息泄露的风险,你需要检查你是否真的明白并且要分享这个参数所对应的信息。

Search Mode/查询模式


  • mrt=指出查询的类型(空白表示所有内容-缺省)
    • mrt=all值为all指出查询所有内容。
    • mrt=loc值为loc指出是进行位置信息查询,它需要q=参数。
    • mrt=yp值为yp指出是商业查询(即:黄页),它也需要q=信息,一般情况下是位置信息。
    • mrt=websearch值为websearh指出映射的web页面。这些网页通过GoogleBot能够指出地理位置信息。
    • mrt=realestate值为realstate为固定资产查询。
    • mrt=ds值为ds时为相关的地图。Google的GeoRSS源索引(可能是KML?)
  • start=start=参数会跳过前(start-1)个匹配结果。
  • num=num=参数显示,最多这个数量的匹配结果。合法的范围是0到20(但是0有点没有用处)。

Location/位置信息


  • ll= 显示地图时中心点的纬度、经度信息。要注意次序。而只接受十进制数值格式才可以。
    如果使用了这个参数但是没有使用查询,那么地图就以这个点为中心点显示,但是没有标记或信息窗口显示。
  • sll=
    商业查询执行时指定的点的纬度和经度。你可以使用它来执行一个偏离中心的商业搜索。Google使用它,所以在执行完一个商业查询后,中心移动后可以使用“链接到此页”来记录地图位置。使用<math>map.getBounds().getSouthWest().toUrlValue()</math>将返回与maps.google.com相同的结果。
  • spn=spn=大致的经纬区域。如果没有指缩放参数z=,那么将调整缩放水平到一个合理的数值。
  • sspn=
    屏幕区域,计算方法:
    <math>new GLatLng(map.getBounds().getNorthEast().lat() – map.getBounds().getSouthWest().lat(), map.getBounds().getNorthEast().lng() – map.getBounds().getSouthWest().lng()).toUrlValue()</math>
  • latlng=这是一个奇怪的参数。它有3个由,号分隔的数字。前两个数字(大概相当于纬度和经度的100000倍)被忽略。第三个数字似乎是Google内部用来处理特殊业务的企业ID。比如latlng=0,0,14944637421527611642代表Blackpool社区教堂。指定此参数会执行一个针对该业务面页的Google搜索,并显示一个小地图。其它参数,特别是q=参数,必须是有效的内容(但不一定涉到目标业务)。
  • cid= Similar to latitude and longitude, but generating a different map size.
    这个值似应该是地点的编号。原文的表述与latlang重复。
  • geocode=
    geocode值似乎是在线路规划时各关键点的编码。每个geocode之间使用%3B来分隔。
  • radius=在指定半径内采用本地化信息。需要sll参数指定信息或者类似中心点位置才能使用。单位会采用英里,但是在公制国家可能会采用公里。这个参数有助预防Google结果远离了结果城市,并让它被限制在指定区域。

Map Display/地图显示


  • t=地图类型。m=>常规地图,k=>卫星地图,h=>混合地图,p=>地域地图,e=>GoogleEarth
  • z=缩放级别,取值范围1~20。1比例尺最大,20比例尺最小。
  • layer=激活图层。目前t表示交通情况。
  • lci=激活可以层叠的图层。用,号分隔。
    • com.panoramio.all 来自Panoromio的图片
    • com.youtube.all来自YouTube的视频
    • org.wikipedia.en维基百科(英文)
    • com.google.ugc.c752d13e87c4fbd7来自Webcams.travel的网络摄像头。
    • transit公共交通
    • bike自行车线路
  • view=这个参数在测试的时候没有看出分别。

Directions/路径规划


  • saddr= 出发点地址。
  • daddr=目标地址。
    “+to:” 可以使用+to:子句增加多地点线路规划时的目标地址信息,比如daddr=大石洞村+to:马栏广场+to:棠梨沟
  • mra ?? 此参数涵义未知,可能的取值:dm/dpe/cc/ls…
  • mrcr ??此参数涵义未知,可能的取值:0
  • mrsp解析座标到街名。
    • mrsp=0打开从座标解析街名
    • mrsp=1关闭从座标解析街名
  • mrad= 附加目标地址。如果你的行程有三个地点,你可以用saddr=,daddr=和mrad=表示,而不采用+to:子句。
  • dirflg 路线类型。
    • dirflg=h避免高速公路。
    • dirflg=t避免收费路段。
    • dirflg=r采用公共交通。仅在一些区域可用。还可以提出附加的时间信息。
    • dirflg=w步行方式。仍在测试状态。
    • dirflg=b骑行方式。仅在某些区域可用,仍在测试状态。
  • via=用,号分隔的经由地址。
  • doflg=距离单位。缺省的是国家的法定标准。
    • doflg=ks ??这个真不知道。
    • doflg=ptk输出距离单位显示为公里。
    • doflg=ptm输出距离单位显示为英里。
  • ttype= 时间类型。在dirflg=r的状况下采用公共交通工具的时候date和time参数的解析类型。 
    • ttype=now现在就出发,这个会忽略date和time参数。
    • ttype=dep 出发时间。
    • ttype=arr 到达时间。
  • date= 出发/到达日期,格式mm/dd/[yy]yy。由ttype决定是哪个日期。
  • time= 出发/到达时间,格式hh:mm am|pm。由ttype决定是哪个时间。
  • sort= 公共交通线路的排序 
    • sort=def缺省的排序方式。最快的行程优先。
    • sort=num最少的换乘优先。
    • sort=walk最少的步行优先。
  • start=与搜索模式很象,选择第n个结果。

Street View/街景


  • cbll= Latitude,longitude for Street View.街景的经纬度信息。
  • cbp= Street View window that accepts 5 parameters街景窗口可以接受5个参数:
    1. 街景/地图安排,11=上半部街景,下半部地图,12=大部分是街景显示,角部为可以调整角度的地图
    2. 移轴角度,范围是-90到90度。
    3. 缩放范围,0~2
    4. 斜度(采用度数表示),-90~90,缺省值是5
  • panoid=这里的ID是附近的全景对象的ID。全景对象采用可以点击的小箭头,你可以移动到下一个对象。

Output Control/输出控制


  • hl=主机语言。仅支持一部分语言,如hl=fr表示法语
  • om=这个参数指定下方缩略图是否显示。如果指定一个1以外的值,缩略图会关闭。(经过测试1,2会显示)。如果参数会被省略或者指定了值1,则显示。
  • ie=指定输入的字符编码,比如ie=UTF8。
  • oe=指定输出的字符编码,比如oe=UTF8。
  • output=指定输出格式,空白(缺省值)是标准的网页格式。 
    • output=html在整合到Google地图前使用旧风格的Google本地页面格式,显示小地图和大的边栏风格。
    • output=js输出Google地图使用的JavaScript对象和函数调用,包括驾驶线路的多边形编码和HTML格式的场景信息。
    • output=kml输出包含当前地图信息的KML文件。
    • output=mobile针对移动设备的格式输出。在地图中央位置显示一个简单的红色图钉。所有的移动基于链接而不是鼠标的移动。
    • output=nl输出Google Earth和Google Maps可以获取NetworkLink信息的KML文件内容。
    • output=embed输出可以嵌入到第三方网站的HTML内容。这个参数仅与加密的s=参数一块工作,据推测可能是阻止显示不可预知的内容。
    • output=dragdir返回JSON对象。此对象包括反向的地理位置编码和针对给定saddr(线路开始点)和daddr(线路结束点)线路的多边形编码。
    • output=georss 针对当前地图(可能仅适用于MyMaps)的GeoRSS输出。
  • f=控制查询表单的显示风格。 
    • f=d显示成路径规划表单(有两个输入框,始点、终点)
    • f=l此参数似乎没有作用了。
    • f=q缺省的显示方式,单一输入框。
  • pw=激活打印模式,初始化打印。与原文不同,pw=1/2两个值均可以。测试环境是Ubuntu 11.04+Google Chrome。
  • v= 如果指定了output=kml,则此参数指定kml的版本。缺省是2.0,如果想指定是2.2,则v=2.2。

提示信息窗口


信息显示窗口就是漫画书中的对话气球框。

我的地图


  • msa=参数目前应该没有意义了。

杂项


  • vp= 这个参数会使Google地图切换到版权服务模式。它以JavaScript格式返回所有者的版权信息而不是返回可以画出地图的html内容。vp参数指出视图位置(即地图的中心位置)。版权服务仅在提供了spn=z=参数的情况下才可以工作。它们分别代表区域和缩放比例。一还有一些可选的参数,比如t=,它用来指出地图的类型,key=用来指出站点用来执行查询时所用到的API key。例如:http://maps.google.com/maps?spn=0.030372,0.068665&z=6&t=h&vp=53.859462,-3.038235
  • ftr=0 这个参数是用来关掉所有Google地图实验室特性的。当你遇到这些特性出现问题或者无法载入地图,这个特性可能提供有用的途径。使用这个参数之后,你需重新激活那些实验室特性。比如访问:http://maps.google.com/maps?ftr=0。这个链接会提示你关掉了哪些特性,并且会提示是否保存这种改变。
  • source= 未知。一个值是s_d,另一个是s_q。
  • noexp= 未知。其中一个值是0。
  • noal= 未知。其中一个可取值是0。
  • oi=nojs 在它合并到Google地图之前使用旧风格的Google本地页面格式,使用小地图和大的边条,就象前面指定output=html选项那样。这个选项需要停止JavaScript的工作。
  • 参考资料:

    1. Google Map Parameters

阅读全文…

关于php快速应用多个函数

2011年3月15日 1 条评论
No Gravatar

前几天偶然看到好象是@yegle发的一个关于PHP应用多个函数的文章:由Karthik Viswanathan的How to Quickly Apply Many PHP Functions。其中提到了一个采用字符串分隔执行多个函数的方法,最后简化成的精华如下:

function apply( &$var, $list ) {
	$functions = split( '\|', $list );

	foreach( $functions as $change ) {
		$var = $change( $var );
	}
}

这样调用就可以写成:

$str = "      heLLO HoW ARE you?        ";
apply( $str, 'trim|strtolower|ucwords|strip_tags' );

echo "'" . $str . "'";

执行结果:

'Hello How Are You?'
Function 'apply' costs 0.071048736572266ms

个人非常不习惯这种方式。
更习惯采用类似于jQuery的方式,就是类似于$strObj->trim()->strtolower()->ucwords()->strip_tags()。

版本一:

class StrApply0 {
	var $str = '';

	function __construct($s) {
		$this->str = $s;
	}

	function trim() {
		$this->str = trim($this->str);
		return $this;
	}

	function strtolower() {
		$this->str = strtolower($this->str);
		return $this;
	}

	function ucwords() {
		$this->str = ucwords($this->str);
		return $this;
	}

	function strip_tags() {
		$this->str = strip_tags($this->str);
		return $this;
	}

	function toString() {
		return $this->str;
	}
}

与函数方式比较的执行效果:

'Hello How Are You?'
Function 'apply' costs 0.063896179199219ms
'Hello How Are You?'
Class 'apply' costs 0.014066696166992ms

可以看出,性能方面还是具有一定优势的。
阅读全文…

分类: Coding, 随笔 标签: ,

Switch to our mobile site