关于作者

用户名:草莓小丑
笔名:草莓小丑
地区:
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



看看

周末再看

ref

friends

tools

海上风光

塔中岁月

天地心情

访问统计:
文章个数:38
评论个数:27
留言条数:11




Powered by BlogDriver 2.1

tough ain't enough

 

 Use OpenOffice.org

Get Firefox

a handful of dust | 一把尘土

文章

To the April
"Tiny Dancer" ::Elton John

Blue jean baby, L.A. lady, seamstress for the band
Pretty eyed, pirate smile, you'll marry a music man
Ballerina, you must have seen her dancing in the sand
And now she's in me, always with me, tiny dancer in my hand

Jesus freaks out in the street
Handing tickets out for God
Turning back she just laughs
The boulevard is not that bad

Piano man he makes his stand
In the auditorium
Looking on she sings the songs
The words she knows the tune she hums

But oh how it feels so real
Lying here with no one near
Only you and you can hear me
When I say softly slowly

Hold me closer tiny dancer
Count the headlights on the highway
Lay me down in sheets of linen
you had a busy day today

Blue jean baby, L.A. lady, seamstress for the band
Pretty eyed, pirate smile, you'll marry a music man
Ballerina, you must have seen her dancing in the sand
And now she's in me, always with me, tiny dancer in my hand
 
					  

- 作者: ???????ó 2005年04月22日, 星期五 10:42  回复(0) |  引用(0) 加入博采

yahoo 361
不 知道还有没有别人在buzz game上排队。
这可算是程序员每天早上从暖和被子里爬出来的最新动力——因为终于有一个地方可以买一点自己喜欢的编程语言再买一点自己喜欢的开发环境了。玩过 fantasy football的不用再看下去了。赶紧去注册一个帐号吧!
buzz game里用yahoo帐号开一个帐号,会有10k的本钱(?),然后到Markets tab里面去挑自己喜欢的新旧技术。把10k花掉。等它变多或者变少。。。在Account tab里查自己的帐,在Standings里是排行榜。
这东西很像赌博的,我估计现实技术发展趋势怎么也不会象这里预料的那样。出于一种横竖是输的心态,我买了很多的php和python ...还有一大堆wordpress。不知道那些net worth 3000k的人都是怎么玩出来的?!



- 作者: 草莓小丑 2005年04月10日, 星期日 13:36  回复(1) |  引用(0) 加入博采

好主意不一定非得是大主意
我 不仅喜欢flickr和douban的标签,还喜欢last.fm/yahoo10years的图片集。我决定把它们应用在一切可以应用的地方。。。等有时间的时候。

- 作者: 草莓小丑 2005年04月6日, 星期三 20:40  回复(0) |  引用(0) 加入博采

ruby on rails on slashdot
突 然发现用中文google搜索slashdot(或者midgard)都会把这个站揪到第二名去。但是这里其实关于slashdot的东西都是胡扯, 可惜不能设置让google不要搜索。恐怕blogchina的站长们可以偷偷笑了。看来这个域名的pagerank还是很高的。
吃宵夜的时候在那里看到ruby on rails和java的性能比较。大家很激动得讨论中有一篇我很喜欢的,其中讲到使用什么语言主要参考:

Maintainability
Ease of Use
Learning Curve
Clear Semantics
Support
Documentation
Standard APIs

而单纯的程序运行程度却不是那么有参考价值。我几乎想要插嘴问问熟练的程序员们midgard应该打多少分呢?(midgard和ruby on rails好像是差不多功能的东西) 当然这个不用问那些七嘴八舌的程序员们。过一段时间我们自己也会知道的。

另外一个消息是Wired news上的文章 学生们使用下一代下载软件。简单地说,就是大传媒公司们终于研制成功了可以自我销毁的媒体文件,并正 以大价钱在美国的高校中推广。我对媒体没什么兴趣,但是觉得mp3如果真的被这种自己会杀掉自己的档案文件取代,还是颇可惜的一件事。wired news的编辑肯定也这么觉得,因为同一期上另外一篇文章就是The best 90 minutes of my life,概括内容是缅怀当年录制(盗版)磁带的岁月以及后来的mp3。我生命中比较好的时间也都是 在mp3翻刻的CD音乐声中度过。

得使劲儿提醒自己一下明天不能再迟到了。

- 作者: 草莓小丑 2005年04月5日, 星期二 00:52  回复(0) |  引用(0) 加入博采

自己建立一个MidCOM网站
介绍和自己动手中间(怎么用)那部分略掉了。全都是configuration和数据结构。
1. 安装MidCOM => 导入Repligard pakage.
    =======
散件生成
=====

建议将MidCOM安装在sitegroup0,configuration是每个站点独立的。
如果需要存储sitegroup-wise模块设置,你的sitegroup需要有一个散件目录/sitegroup-config
为每个模块建立子目录,存放设置。在模块Snippet中有默认设置模版,一般在_config目录下。

页面生成
=====

每个MidCOM站都需要一个切入点用来调用框架。实际上就是一个Midgard页,它的Type必须设置为Active,这样所有的URL可以传送到这一页。
例如 "mysite":

~Page "mysite"

content(); ?>

~Page Element "mysite/code-global"

$midcom_roottopic = "xxxxxx"; // GUID of your Topic "mysite-root"
mgd_include_snippet("/midcom/midcom");

// your sitegroup-global component configuration
mgd_include_snippet("/sitegroup-config/de.linkm.htmlfilter/config");
mgd_include_snippet("/sitegroup-config/de.linkm.taviewer/config");
...

//$midcom_debugger->disable();
?>

~page element "mysite/code-init'
codeinit(); ?>


~page element "AIS"

content(); ?>
~page element "AIS/code-global"

// make browsers don't cache anything
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); // HTTP/1.0

$midcom_roottopic = "xxxxxx"; // GUID of your Topic "mysite-ais"
mgd_include_snippet("/midcom/midcom");

// component configuration
mgd_include_snippet("/sitegroup-config/de.linkm.htmlfilter/config");
mgd_include_snippet("/sitegroup-config/de.linkm.taviewer/config");
mgd_include_snippet("/sitegroup-config/de.linkm.newsticker/config");
...

$midcom_debugger->setLogFile("/tmp/aou-ais.log");
// $midcom_debugger->disable ();
$midcom->cache->no_cache();
?>
~page element "AIS/code-init"
codeinit(); ?>


话题生成
=====

需要产生一个根话题Root Topic并且赋予一个模块。

Topic "mysite-root"

Parameters
midcom
component = de.linkm.newsticker


Topic "mysite-ais"

Parameters
midcom
component = midcom.admin.main


Topic "mysite-ais/mysite"

Parameters
midcom
component = midcom.admin.content
midcom.admin.content
nav_ellipsis = ...
nav_length = 45
root_page = xxxxxx GUID of your Page "mysite"
root_topic = xxxxxx GUID of your Topic "mysite-root"


样式生成
=====

应使用AIS将每个模块自己的子样式分配给对应的话题。
需要在样式文件的ROOT元素末尾使用
...
finish(); ?>

来通知缓存引擎输出结束。

- 作者: 草莓小丑 2005年04月1日, 星期五 21:34  回复(2) |  引用(0) 加入博采

Midgard|MidCOM 介绍之二
++ MidCOM [subsystem|子系统]概述
    ====================

+++ MidCOM 内核
      ========
    MidCOM 是midcom_application类的一个对象实例。
    [MidCOM Component Loader|MidCOM模块载入器]是内核的一个主要helper,它是midcom_helper__componnetloader的一个对象实例。
    它是负责将模块载入目前运行的框架中。由于它将模块和框架封装,内核只请求所需的接口类。
    [URL parser|URL 翻译器]是内核的第三部分,是midcom_helper_urlparser的一个实例。它映射argc/argv风格的参数数据到相应的 Midgard话题树上。它支持使用名字对话题,文章和附件的取用。并且支持把键-值对编码至和Midgard参数类似的domainname-key- value语法。这些都可以用来控制MidCOM部分核心功能。
    内核中还有其它子系统切入点的references。以及[Component Context Data|模块内容数据]以存储每个子请求的相应metadata,比如anchor prefixes,这些存储可以使用定义的常数从外部读取。

    两个为内核设置的全局变量配置系数,由散件 /midcom/midcom 取出并将其中包含的信息传给内核对象的constructor:
        $midcom_roottopic   => 这个string是MidCOM要处理的根话题的GUID
        $midcom_prefix      => 这是用来访问MidCOM站点的本地前缀,它通常包括host和页面前缀。以一个斜线开始,但是没有结束斜线。


+++ ASE [Advanced Style Engine|样式引擎]
      =========================
    每个模块都至少有一个默认样式可以用在最少的无结构站点上。ASE允许你设立模块样式散件目录 snippetdir在站点-本地树上的元素缺少样式元素的时候使用。
    ASE不能载入页面元素。
    当一个正确初始化的模块的内容进入时,ASE自动载入样式元素style-init。Midgard 原生样式引擎和ASE的最大不同在于你不可以在后者中使用<[...]>语法。而必须使用全局方法midcom_show_style()。
    可以使用这个独立的URL参数来控制ASE的工作:
                                        midcom-substyle-$name

+++ NAP [Navigation Access Point|浏览切入系统]
       ===========================
    NAP将话题树和其下的数据转化为一个简单的包括[nodes|节点]和[leaves|页]的数学树。所有这些元素都有相应的[metadata|元数 据]。它们是:URL"=Name, displayable name, creation and modification timestamps 和 Midgard Person IDs
    URL"=Name大部分时候都等于话题或文章的Name fields.

+++ AIS[Administration Interface System|管理界面系统]
      =================================
    AIS提供全面自动系统生成包含有安装了的模块的管理界面。


+++ [Data Manager|数据管理]
        ===============
    Data Mamager提供在Midgard Data Object(通常是一篇文章)和所需实际的数据格式之间层。
    你可以使用PHP多维数组定义[data schema|数据结构]。可以选择不同的数据类型包括 'text', 'html', 'blob', 'image' ...在实际的对象field, 对象参数或者对象附件中存储。(在对象附件中将自动serialization)
    数据可以通过集成的表单生成器和表单处理器修改。只需要建立一个datamanager的实例并调用display_form 和process_form方法足矣。


+++ [Caching Engine|缓存引擎]
      =================
    在数据库更新后。生成的缓存一般失效。但是也可以为生成的页面设置过期时间。缓存本身是一个DBA database存储缓存元数据信息和实际的缓存文件。
    可以更改这三个全局变量来更改缓存引擎的行为方式:

    $midcom_cachedir
    $midcom_cachehandler           =>这是PHP DBA处理器,默认为DB2
    $midcom_helper__cache_disable  =>set to true 来完全禁止缓存引擎。一般在每个请求中使用调用$midcom->cache->nocache()更好。

    两个附加URL参数可以在请求中修改缓存引擎行为方式。

    midcom-cache-invalidate
    midcom-cache-nocache            =>防止当前页缓存。


+++ [Internationalizaion Service|国际化服务]
    ========================================
    翻译好的表格在它们自己的散件目录中存放,对应于相应的模块。i18n服务结构让你可以使用模块名称作为references载入翻译表格,或者'midcom'为基本表格。
    框架根据默认HTTP content negotiation自动决定目标语言。或者你也可以在cookie中使用一个('language' => $language)设置语言, 'charset' =>$charset设置语言编码。还可以使用i18n接口方法手工设置语言和语言编码。
    i10n服务用Base64-Encoded UTF-8存储所有的东西在散件目录中。



- 作者: 草莓小丑 2005年04月1日, 星期五 21:00  回复(0) |  引用(0) 加入博采

Midgard系统介绍之一
Midgard 系统介绍之一 & [MidCOM|模块框架] & [Program flow|程序流程]


+ MidCOM Midgard模块[framework|框架]
========================

每个MidCOM应用程序都配有一个特别定义接口的模块。
控制系统作为一个[topic|主题]树,而不是一个[page|页面]树,让人可以更灵活地使用。代码本身也是被封装在散件中的,让复制特别 容易。

一个框架被用来管理公开站和私人站以及它的管理站点的模块。


++ [Specs|特征]
========
+++ [Architecture|架构]
============

++++ 内核

------Loading components
------Basic URL handling
------Running Components
------Helper functions

++++ [Advanced Style Engine|样式引擎]

MidCOM样式引擎被设计为可以在高层取代Midgard自身的样式引擎。它的主要改进包括在运行时动态转换使用的样式和允许模块使用自带缺省样式

++++ 浏览[Access Point]系统

NAP系统独立于特定的提供给站点设计者动态access站点内容结构

++++ [AIS|管理界面系统]

++++ [Data Manager|数据管理]

将随意的数据存储在内容树中。

++++ [Caching Engine|缓存引擎]

++++ [I18n Service|国际化服务]

目前仅限于界面本地化,基于NameinLocalization library。


+++ 再怎么强调[namespace|命名空间]也不为过。
===========================

MidCOM 命名空间使用类似于Java's package的继承系统,即internet domain name hierarchy。模块开发只能在全局命名中间中的一部分定义自己的域来生成元素。

++++ [Component Identifiers|模块识别标记]

package使用dot来作为继承系统的区分标记。从顶级domain向下至模块的实际名称,来定义这个模块的名称。命名空间的每个部分必须符合下面的 RE:

[a-z][a-z0-9]*
=========

使用underscores下划线来代替dot,可以取得[prefix|前缀]用来给所有全局命名元素 (类,变量。。。)。
使用slashes斜线来代替dot,可以取得[snippetdir|散件目录](root)路径到本模块的存放位置。


++++ [private elements|私有元素]

所有以underscore下划线开始的识别标记全部默认为私有的。这些元素只能在定义它们的模块中使用。
在这些以下划线为开始的识别标记前再加上全局命名标记为本地名称。

++++ [Reserved Elements|预留元素]

Package hierarchy midcom.* 及其命名空间为MidCOM框架预留。
以下名称不能用做模块名称:_code, _i10n, _midcom, _config, _doc, _style
需要全局变量作为布局或网站专属的global.* 和layout.*都可以使用。故不能在MidCOM的任何instance中使用。

++++ 在[Topic Tree|话题树]中的参数。

所有的模块都只能使用它自己的模块路径作为参数域存储随意的数据。MidCOM会自动在configure环节将目前处理话题的模块的话题参数提出,
midcom domain 是特制用来控制MidCOM自身的。参数midcom.component很重要,它提供到MidCOM应该load的模块的路径和包含有将被ASE使用 的样式的midcom.style

一个话题或文章应该有提供configuration数据给多个模块。在系统中多次使用。





+++ [Program Flow|程序流程]
================

MidCOMs将程序流程分解为五个部分,这些部分可以被一般的Midgard程序流程特别调用,或者用调适好的midgard-root.php自动调 用。

++++ [MidCOM Startup|MidCOM启动]

include the snippet /midcom/midcom
==========
它会依次产生全局MidCOM core instance ($midcom), 将它初始化,启动它的核心服务包括缓存引擎。
一些低端的参数(如debugging filename 或cache location)可以在include /midcom/midcom之前通过设置相应的全局变量来设置。在[subsystem|子系统]spec中有更多说明。

++++ [Request Handling|处理请求]

在这里不应该产生任何输出。但是可以送HTTP headers。处理错误通常使用系统生成的HTTP errors。在MidCOM不能找到URL所请求的话题或者一个模块生成请求是不合法的时候,会出现404错误。
一个无输出条例的例外是在模块输出数据的特别表现形式的时候(比如 RSS),MidCOM会在此处理阶段进行输出,并且常规退出。

++++ [Data Output|输出数据]

如果处理请求成功完成,模块的常规输出机制被激活,通常发生在常规的Midgard样式模版中<[content]>元素中,这个模版是全站 设计模版。系统一矣进行模块的输出代码,MidCOM的格式引擎就可以启动。

++++ [cleanup|清理]

在每次请求处理完成的阶段,即在Midgard主模版完成发送之后,需要一个最终清理阶段。缓存引擎需要这个hook来建立页面缓存。
原则上这需要在退去前通过``falling of the end" of <[ROOT]>元素或者调用exit() 来调用MidCOM的finish"=Method。

++++ [Subrequests|子请求]

可以在MidCOM运行时发动子请求。此机制让你可以指定一个(相对于目前MidCOM页面的)URL并如同直接访问此URL一般执行。唯一的差别是 Midgard样式不再显示。只使用模块的样式。style-init和style-finish 是允许特制显示内容样式的关键元素。

++++ URL处理
MidCOM对每个请求都经过一套检查条例来定义哪个模块处理请求使用哪个话题作为数据源。

通常模块管理一个话题和隶属于它的文章。MidCOM使用Midgard生成的argv 数组来处理URL,将取出的名字映射到话题或者附件上。
MidCOM从根话题开始遍历树结构,使用在argv里注明的话题名称向下行进。不管模块是否能够处理请求,每次模块被赋指定话题时候,剩余的argv都 会传递给模块进行监测。其后会有三种可能:

首先,模块可以处理请求。we're done.
其次,模块不能处理请求,但是全局argv中最后的元素符合最后找到的话题的一个附件,那么返回附件。
其它的情况返回HTTP 404 error。


- 作者: 草莓小丑 2005年04月1日, 星期五 17:53  回复(0) |  引用(0) 加入博采

可怜的Word Press
今 天不仅slashdot, 简直整个blog界(虽然我只看了两三篇)都在讨论 Wordpress,但是可怜的wp是被揪出来啦,准确地说,是它的小动作。Slashdot上也有人很同情地说: You just can't be a joker on slashdot anymore 这种同情当然和我的同情也不太一样。我个人觉得,即使wordpress偷偷塞了一些关键词,也不是什么严重的错误。google要ban掉它才真是太自 以为是了。何况人家并不影响到任何人。我有时候也发现一些页面上奇怪地多了一个小黑点,打开源代码一看,是一大群关键词!这可不是愚人节发生的。说实话, 这种方法其实可爱。当然我一直觉得有很多spam都非常可爱。可能是因为我从来也没有被spam过吧!

我喜欢Wordpress的代码风格,也喜欢它的颜色配置。竟然有人很激动地说这是商业!很严肃的!人格问题!。。。我真不喜欢这些激动得维护所谓正义的 人们。对了, 这里有matt自己的说明。我个人的意见是,open source是程序,而不是商业。所以不管open source组织者在做什么商业活动,只要那还是open source的,就可以无条件的支持。

今天还发现,千言万语也比不过一张旧照片,用旧照片是因为那时我年轻:) 我自以为思考了很多在这里罗嗦,一个新朋友都没有找到,可是到yahoo 360上发了一张几年前的照片,过了十几个小时就有新朋友啦,我得在这里好好地偷偷笑一阵。然后回信给当初慷慨邀请我到yahoo 360上的人,告诉她我终于明白yahoo 360是个交友网站!(这还差不多,一个人哪里会需要这么多的blog呢)




- 作者: 草莓小丑 2005年04月1日, 星期五 15:06  回复(2) |  引用(0) 加入博采

midgard CMS 介绍之零
Midgard,这也是一种游戏,它的中文名字被翻译成"尘世"
不过我们要讨论的是同名的CMS。

Midgard的文档太全面了。挑几条大致翻译了一下。

+ 概念和功能
 ==========

尘世CMS使用自然树结构来表达:

程序员-----开发-->页面元素
美工-------设计-->格式元素
内容编辑---撰写-->文章
+-------+ +----+ +-----+ +-----+
| 文章 | = |页面| + |格式 | + |话题 |
 +-------+ +----+ +-----+ +-----+
|Article| |Page| |Style| |Topic|
+-------+ +----+ +-----+ +-----+

交织的页面和格式元素提供了一个灵活强大的模版系统,并且可以容纳编辑说明和附加的多媒体
内容。
文本内容可以被即时格式化为基本的html格式。
一个或多个网站集合被分装为[Sitegroup|网站组],分别由指定的网管组来管理。
网站组内部是Unix模式的系统权限管理,根据用户所属的组限制他们对下属(树)结构的写权限。
[Snippets|散件]被放在[Snippetdirs|组件目录]中,散件目录是另外一个树结构,用来存储
和共享页面[Page]或格式
[Style]元素。它将成为尘世CMS的模版和应用程序的共享库。
[Asgard]是web-based的管理界面。
[Repligard]是command-line的备份程序。


+ 数据库
  ======

1.4版的尘世CMS使用MySQL来存储内容,模版元素,用户信息,和代码库。数据库使用一个PHP API来提供管理。


+ i18n
  ====

++ UTF-8 character encoding UTF-8 编码格式
   ============================

在尘世CMS中使用UTF-8编码格式,要在midgard-data.conf文件中设置:

    MidgardParse russian /* russian是parser的名字!*/

将已经成立的Midgard数据库转化为UTF-8:
1. 将数据库dump成[replligard]形式。
2. 在[repligard]中设置数据库编码为UTF-8。
3. 导入数据库,强制对所有数据覆盖。

++ Multilingual content 多语言内容
   ===============================

在多语言版本的Midgard CMS中,[page|页面], [pageelement|页面元素], [element|元素], [snippet|散码], [article|文章]对象可以有各种语言的不同内容。[parameter|参数]和[attachment|附加文件]对象可以加上属于特定语言的标签。

在使用多语言功能的时候,对象会产生不同语言的版本,它们的内容记录会有不为0的语言参数值。除了 mgd_get_object_by_guid_all_langs(),其它函数都限制于一种语言的对象。因为一个对象总有一个结构记录和一个内容记录。如果这个对象没有目前语言的内容记录,就不能对之进行mgd_get或者其它操作。

/**
        obj => { structure_record, content_record)
 */

所有的对象都有一个缺省的lang=0内容记录。如果要处理所有语言的对象。要将lang设置为0,可用mgd_get_object_by_guid_all_langs来获得不同语言版本的同一对象。

目前的语言是全局范围的。它可以用mgd_get_lang()来读取。这个函数返回语言表中一个记录的id值。内容语言可以有几种设置方法:

+++ mod_midgard 看是否有一个cookie叫做[MidgardLang],可以设置语言至这个cookie的值
+++ 如果[MidgardLang] cookie没有设置,或者设置为0,mod_midgard 根据目前的host的[lang field]设置。
+++ mgd_set_midgard($lang)设置语言。在处理请求的过程中可以被多次执行。但是不能重设

当前页面或任何[preparsed|预设置]的页面和格式元素,因为他们是在mgd-set-lang被执行前由mod-midgard预设置的。

如果不设置任何语言设计,它将一直是0 (即无语言设置),对应的,内容将带着lang=0参数被嵌入

记录中,每个结构记录和内容记录是1-1的关系。


+ [Quota|配额]
  ============

使用midgard配额,可以设置[Sitegroup|网站组]范围内的限制包括:

+++ 每个表中的记录数目
+++ 每个表中内容的最大值。(并且可以定义表中的哪些field计入内容)
+++ 附件的最大值
+++ 一个网站组中所有对象的内容总和的最大值。

如果在建立或更新记录中达到配额,会生成一个MGD_ERR_QUOTA错误信息。
在打开附件时达到配额同样生成错误信息。

++ 安装配额
   ========
            ./configure --with-quota

使用在/data中的quota.sql生成配额表。

++ 设置配额
   ========

[New apache configuration directive:]

            MidgardCheckQuota(On|Off)default: Off


++ 实例
   ====

/* as $midgard->root: |作为root可以设置quota */

/* The total size of all content fields of table page_i may not exceed 1000 KB for sitegroup $sg
   sitegroup $sg 中page_i表中所有的内容不能超过1000KB */
mgd_create_quota($sg, 'page_i', 'content', 0, 1000);

/* The total size of all value fields of table pageelement_i may not exceed 1000 KB for sitegroup $sg
   sitegroup $sg 中pageelement_i表中所有的内容不能超过1000KB */
mgd_create_quota($sg, 'pageelement_i', 'content', 0, 1000);

/* The total size of all content & abstract fields of table article_i may not exceed 1000 KB for sitegroup $sg
   sitegroup $sg中article_i表中所有的内容和摘要不能超过1000KB */
mgd_create_quota($sg, 'article_i', 'content,abstract', 0, 1000);

/* The total size of all value fields of table element_i may not exceed 1000 KB for sitegroup $sg
   sitegroup $sg中element_i表中所有的[value]不可以超过1000KB */
mgd_create_quota($sg, 'element_i', 'value', 0, 1000);


/* as normal user: | 作为一般用户可以查询quota*/

$qinfo = mgd_get_quota_info_by_tablename('blobsdata');
$qinfosg = mgd_get_quota_info_by_tablename('wholesg');

/* Test if file $filename could be written into an attachment according to quota rules
   测试看文件 $filename是否能根据配额条例来写入附件。*/

if ($qinfo->eff_space + (filesize($filename) / 1024) >= $qinfo->space or $qinfosg->eff_space + (filesize($filename) / 1024) >= $qinfosg->space) { echo "File too big"; }



+ Host, URL和动态页面参数
  ================

由浏览器发出的一个URL请求包括三个独立信息部分:

 +++ host name
 +++ page name
 +++ path

和各种可能要传给目标页的参数。

Midgard在Apache上挂了一个过滤器检查每个请求来判断它是否要到midgard的页面。它的转译处理器检索出Midgard Host记录符合如下条件:
 +++ 最长的符合host记录中name值或者name值和前缀的
 +++ host记录中端口或者为0(任何),符合请求的端口号,或者是缺省的80
 +++ host记录中online field设置为online

如果没有找到符合的记录,处理器会拒绝转译,Apache处理恢复。

到一个页面的路径在页面树结构中,而不是Apache的server root下的目录中。参数可以用midgard指定的模拟传统文件目录的语法来传递。

http://foo.org:80/foo/Geeks/Functions/ffunky/fcool.html?arg1=kiki&arg2=koko
       |____________| |_____________| |_______________||____________|
       host + prefix       path to page           arguments            more arguments
                                                           (Midgard syntax)    (usual syntax)

在这里 Functions是页面。如果目标页许可了[virtual paths|虚拟路径],剩下的[token]以C模式的[$argc $argv[]]来存储为参数。
        $argc=2 and $argv=["ffunku", "fcool"]

这种结构让网站可以被搜索引擎爬虫爬过。.html后缀加强配适性,将在URL转译中去掉。其他的后缀保持不变。你也可以使用一般的参数语法。

- 作者: 草莓小丑 2005年03月30日, 星期三 02:24  回复(1) |  引用(0) 加入博采

Harder, Better, Faster, Stronger
May my codes and I grow together.

其实生活在小空间/速溶咖啡/perl/php/design pattern和javascript中感觉很不错。除了想到deadline略有一些不安。但是如果能够这样生活十年几乎应该算是幸福的。
十年以后生活会是怎么样呢?参见:
a coder in courierland
所以要保持自己在十年之中:
1. don't have children
2. don't have family
3. don't have career ambition
4. don't have financial obligations
保证基本的生活质量(每个月去两次书店,读一些书。听一些音乐。学习一些知识。为别人做一点事情。)之余,远离这些琐碎的需求才能保证十年之后 仍然拥有自由。是的,能够在十年之后还自由,这可比什么都重要,特别是对于一个已经不年轻的人来说。
null另外我很高兴地向你们推荐Patterns of Enterprise Application Architecture 这本书中国电力出版社出版影印版的五十块钱一本。就算是用手纸印刷的也值得了。而事实上纸张还不错。开本也很顺手。不像以前影印版小开本翻起来那么不舒服了。



- 作者: 草莓小丑 2005年03月20日, 星期日 19:20  回复(0) |  引用(0) 加入博采