存档

作者存档

云计算离我们有多远

2010年5月9日

由于做国外的电子商务网站,所以看云计算比较多,尤其是云存储。最近看了些资料,对云计算有了更多的了解。按照这篇An Architectural Map of the Cloud Landscape论文的框架,云计算分成的几个级别, 如下图

说明SaaS: software as a service; PaaS: platform as a service; IaaS:Infrustructure as a service。作者最后加上了Human as a service这个附加层。

也有人提出data storage as a service的概念,但是我认为多数互联网应用非流媒体等服务,对于P级以上数据存储的需求短期并非公共服务平台的需求。对于提供图片服务托管之类的公司完全可以使用一些开源分布式文件存储系统来实现大容量冗余存储的需求。

我看云计算的角度不是技术角度,而是从中小型电子商务网站的角度去看的。考虑的主要应用只是用来优化用户访问速度,对css和js做CDN,大牌如Akmai,limelight和Level3之类的服务商似乎不适合中小型电子商务网站。Amazon的S3价格貌似是最便宜的,Smugmug的一篇系统架构设计中提到他们就是使用Amazon S3来做CSS和JS的CDN。但是由于Nirvanix的SDN不对Request收费,所以对于平均文件在30k以下的来说,Nirvanix的TOS应该会更低一些。

其实国内中小网站的技术力量和的经济实力更低,也更需要低价的云存储和云架构服务。国内特殊的互联网环境,普遍较差的机房服务质量,网监的额外要求都会成为云计算应用和普及的重要障碍。不过,得到intel和dell的投资云计算服务商的Joyent好像已经开始与国内某市合作建立数据中心,似乎也有很大的信心在国内的云计算服务上进行投入。

inetdemon 系统管理

几条简单而有效的SEM优化原则

2010年5月9日

为达到最佳 Google 关键词广告效果,Google 公司要求代理商按照以下标准为广告客户提供优化,虽然是简单的原则,但是按照执行,可以起到很好的效果:

  • 多渠道投放广告,建议将搜索网络与内容网络广告分开预算。
  • 帐户关键字不少于50 个,并依照不同主题建立多个广告组;
  • 每组关键字最优数量在5-15 个之间;定期维护关键字列表,及时更改点击量低的关键字。

说明:广告系列按照关键字主题建立多个广告组,并在广告语标题中体现广告组的主题

  • 每个广告组建立至少两套以上不同特点的广告文字。
  • 将最为相关的网页作为广告组的目标网址。

质量筛选
CTR低于0.1%的关键字应该在再次优化的时候删除
对搜索无效的关键字数量不超过所有关键字数量的20% 
内容网络网络
每一个内容网络广告系列需具有至少3个否定关键字
任何一个广告组的关键字数量(5-30个)
改组关键字需共享一个词根
该组广告语内需包含至少一次本组的词根
对网站定位的广告,每个广告组的网站的数量不要超过15个

对于以上一些原则,也有SEM方面的朋友表示不同意见,值得参考一下。

inetdemon 搜索引擎 ,

Facebook SNS游戏排名

2009年12月19日

最近半年前5大游戏排名没有变化,但是一年前最流行的(Lil) Green Patch只有600万MAU,但现在,冠军FarmVille,则是有近6900万使用者。此外,数据显示,Facebook每月超过300万MAU的成长都來自Socail Gaming的贡献。

Top10中有过半的游戏都是由Zynga出品,占了6款,分別是FarmVilleCafe’ WorldMafia WarsFishVilleTexas HoldEm PokerYoVille

11月被EA收购的PlayFish在Top 10只占了两款,分別是Pet SocietyRestaurant city,而且Restaurant city竟然是呈负增长的状态,流失近70万的玩家。

inetdemon 电子商务

易趣10周年聚会

2009年9月19日

9月11日参加了海伦宾馆的易趣10周年聚会,虽然比不上阿里10周年纪念的规模,但也有不少人参加了,看到了一些很久没有见到的老同事,还是挺激动的。为了节约笔墨,上点图。

IMG_8821易趣内部解决的同志们2.JPG聚会大合影2市场和Bo的10年纪念合影.JPG技术朱继盛.JPG

inetdemon 互联网圈

购买办公座椅的经历

2009年8月29日

电脑工作者通常都有职业病,如颈椎痛,脊椎痛等,年轻时生龙活虎的不觉得,5,6年后方才开始慢慢有所体会。我有一次去检查脊椎,医生说脊椎和颈椎已经钙化,骨龄比我实际年龄要老十几岁。想想在按摩方面的花费这几年来也不止几千,如果一把椅子能够端正坐姿,使得腰背更健康,那比打针吃药按摩还 治不好要来得划算得多。

至于是否应该买一把5,6千元乃至上万的椅子,我觉得台湾的一个网友说得好,请看:

我覺得有幾個指標,可以促使大家決定『是否要買一張這麼貴的椅子』:

  1. 每個月花在按摩整脊的費用超過2000元。
  2. 每天坐在爛椅子上超過8小時
  3. 屁股大腿常常悶熱無比
  4. 常常靠說脖子酸、手酸、肩膀酸、腰酸
  5. 貼立康、虎標、肌樂是你的好友

所以把我用过的和了解的一些办公座椅及其品牌介绍一下

震旦AURORA

在钢质椅子方面较强。最早的时候买过一些震旦的办公桌,没有买过震旦的椅子。

美时Lamex

公司新开的时候买了些二手的美时椅子,还算是耐坐。香港的牌子,质量还算不错,耐坐。和震旦一样算是很不错的选择。2006年被全球办公家具三强之一的HNI集团收购。而另外一个和美时超不多的香港品牌欧美/Ultra也在2007年被最大的办公家具公司Steelcase收购。

海沃氏Harworth

这家也应该算是全球帮工家具的前三强,他们家的家具看上去就是很耐用的感觉。中国区的总部就设在上海的新天地,在浦东有工厂。

Steelcase

因为以前公司用的都是Steelcase的Let’s B系列,所以印象很好,属于价廉物美了。这次到在Steelcase工作的朋友那里,听说淘宝一口气定了3000把。

Lets-BLets B2Lets B 4Lets B 3

Steelcase的Think系列也是获得多项设计大奖的经典款,很多公司在会议室中使用,也有不少公司作办公椅用。

steelcase Thinksteelcase think

think 3steelcase think in google office

这张照片显示google的office里用的也是steelcase think系列。

赫尔曼.米勒Herman Miller

Herman Miller的Aeron系列是该公司最畅销的椅子之一,由于其经典的人体工学设计,该椅子由Bill Stumpf设计,被收录为纽约现代艺术博物馆永久陈列品。

aeron chair6aeron chair12aeron chair14aeron chair0aeron chair7aeron chair

有些网友甚至拍摄了 Aeron Chair开箱全过程

Aeron之经典实在难以超越,因此Herman Miller在去年才推出了其最新款Embody,当然售价也相当的令人乍舌,基本款为12000元左右,而高配的款式则要18000元一把,淘宝上随便搜索下就知道了。当然无论从价位还是设计来看,似乎都不是很适合普通办公用途。

herman miller embody

岗村制作所

意大利设计师所设计的Contessa

contessa4contessa

inetdemon 家居生活

ZF1.8 DB字符集设定

2009年8月11日

的db 字符集设置,由于ZF的一个bug,以前在设置db的字符集为utf-8时,通常是在bootstrap中设定

 $db = Zend_Db::factory($this->_config->db);
 $db->query("SET NAMES utf8");  //setup encoding

这种做法的一个缺点就是DB的lazy loading机制变得无效,所有不调用数据库的页面也需要去打开一个数据库链接。困难之处在于每种数据库的charset名称并不相同,之前一直有一个提议,将charset做一个db的option来设置,ZF1.7开始将这个建议实施,现在我们可以用如下方法,设置db的option

 <?php
$db = new Zend_Db_Adapter_Pdo_Mysql(array(
'host'     => 'your_host_or_ip',
'username' => 'your_myslq_username0,
'password' => 'mysql_pass',
'dbname'   => 'your_db_name',
'driver_options'  => array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'utf8\'')
));?>

除此之外,还可以在config中设置,不过由于config文件并不认得常量,因此只能用以下方式来设置:
db.params.driver_options.1002 = “SET NAMES utf8″
其中1002即PDO::MYSQL_ATTR_INIT_COMMAND这个常量的值。

如果想直接修改DB的charset collocation可以参考mysql的charset转化指南

感谢 julian的提醒,自从ZF1.8开始已经可以使用db.param.charset=”UTF-8″来设定; 如果使用的是Zend_Application,可以设定resource.db.params.charset=”UTF-8″.

inetdemon 程序开发

美国Steelcase公司介绍

2009年8月7日

Steelcase在1912年成立于美国密歇根州大瀑布城(Grand Rapids,Michigan),名为The Metal Office Furniture Company。1914年,获得首个专利——金属纸篓,成功解决了传统草编纸篓易燃的弊端,是当时一项重要发明品;随后,又研发了金属办公桌。沿着这条创新之路,Steelcase不断开发产品与服务。今天,Steelcase的产品仍贯彻办公环境的三个核心元素:室内结构、办公家具与精湛技术。1954年,企业更名为Steelcase,并于1988年上市。

公司大事记

1912-在美国密歇根州大瀑布市创立了Metal Office Furniture Company,公司专门生产文件柜和保险箱。

1915-销售首张防火钢板办公桌。

1937-Metal Office公司采用Frank Lloyd Wright的设计,生产椭圆形办公桌,这些办公桌用于美国庄臣公司办公大楼――财富杂志将其称为“20世纪最富想象力的办公大楼”。

1954-公司名称更改为Steelcase。

1968-引进Mobiles®专利产品,这是第一种使用系统家具概念的产品。

1972-开始采用木材制造办公家具。

1973-与Kurogane有限公司在日本大阪组建了一家合资企业,公司占有25%的股份。

1974-与Strafor S.A.公司在法国特拉斯堡组建了一家座椅合资生产企业,公司占有50%的股份。

1980-收购西德多特蒙德市Pohlschroder GmbH & Company KG公司50%的股份。

1981-收购Strafor S.A.公司及子公司50%股份,包括法国的5家制造和组装厂以及非洲的4家制造厂。

1987-组建Steelcase设计合作伙伴,这是由多家高端设计、领导市场的家具公司组成。

1989-Steelcase开设了企业开发中心作产品研发,企业开发中心的成立让Steelcase公司成为家具行业中拥有最大的研究专家。

1990-在美国设立Steelcase设计合作伙伴公司Details。

1992-Steelcase推出了可供信息管理的全球储存柜系列。

1993-与泰国领导的办公家具生产商Modern form Group Company Ltd.签订许可协议。

1995-Steelcase Inc.宣布与Godrej & Boyce签订许可协议,成为首家踏足印度市场的大型家具生产商。

1996-Steelcase宣布向美国加利福尼亚州Palo Alto市最大的一家独立生产和开发公司IDEO进行产权投资。

Steelcase位于德国Rosenheim及法国Sarrebourg的制造厂荣获ISO14001认证。

1997-Steelcase-Werndl位于德国Rosenheim制造厂荣获EMAS认证(环境管理及审查计划)。

Steelcase收购德国Durlangen的Waiko Büromöbel GmbH公司。

1998-Steelcase推出欧洲最畅销的办公桌组合TNT。

Steelcase在纽约证券交易所上市。

Steelcase推出欧洲最受欢迎的办公椅Please。

1999-Steelcase收购Strafor Facom S.A.公司的其余股份。

Steelcase推出高效能产品Leap®座椅。

2000-Steelcase GmbH成为控股公司,Pohlschröder GmbH成为集团公司之一。

Orgatec展览中展示了Werndl’s成为Steelcase集团一份子后首次推出的产品。

2001-Werndl Büromöbel AG正式改名为Steelcase Werndl AG。

Steelcase成为财富500强公司之一(美国500大公司)。

Steelcase在密歇根州的全新制木家具工厂,成为全球首家荣获LEED (Leadership in Energy and Environmental Design)认证的工厂。

Steelcase与在东南亚占领导地位的马来西亚Artwright Holdings Berhad公司签订制造厂协议。

Steelcase收购PolyVision公司,专门制造视觉沟通工具。

2002-IBM和Steelcase宣布开展一项名为BlueSpace的全球性计划,对未来办公室进行设计。创造出将建筑、家具与先进科技结合在一起的创新工作环境。

“最受赞赏的公司”是《财富》杂志在全国对企业按其具有的社会责任感进行的排名,其中Steelcase列第六。

2003-Steelcase引入灵感办公室的概念,提供了以科学为基础的顾问过程,企业可引导员工发挥所长,以及改善公司整体效率。

Steelcase在Best of NeoCon评选中,赢得6项金奖、3项银奖。

Steelcase密歇根工厂在进行金属表面处理时,成功消除几乎全部有机挥发物(VOCs)的排放,这是公司另一环保里程碑。

Steelcase宣布与Johnson Controls公司成为合作伙伴,共同研发把Leap® 技术用于汽车座椅上。

2004-Steelcase推出Think座椅—这是种明智、简单及环保的座椅产品,满足客户对中等价位座椅的需求,更符合人体工学原理。此产品在芝加哥的年度展会上赢得最佳NeoCon项奖。

在德国科伦举办的全球最大办公室展览Orgatec上,Steelcase推出最新产品- Think座椅以及全新办公建筑系统Forward。

2005-Steelcase在英国Design Prima展览中展示Forward产品。

2006-Steelcase加入U.S. Environmental Protection Agency的Climate Leaders计划,这是一项工业部门与政府的合作计划,旨在开发综合性的长期应对气候变化。参加计划后,Steelcase承诺将减少温室气体排放。

Steelcase International在法国斯特拉斯堡附近,设立了新的全球总部WorkL@b,其引入激发创意的设计,既配合Steelcase的国际文化,也提高雇员的工作经验。

Steelcase的工业城(City of Industry Plant)是公司首家获得Shingo奖的生产设备,该奖项是北美地区生产企业的最高奖项,用于表彰企业追求卓越的精神。

2007-Steelcase宣布超过20条生产线获得Scientific Certification (SCS)颁发的Indoor Advantage™认证,以改善室内空气质素。

inetdemon 家居生活

美时办公家具有限公司

2009年8月5日

美时Lamex自1977年成立以来已发展成为中国最大的家具生产商,代理世界各地著名品牌如Frezza, Forma, Sedus, Dauphin, Girsberger等。另外,美时亦致力设计,研发及生产美时的家具,提供过千种产品。美时现时拥有超过50多家特许经营商及分行遍布中国、香港、澳门 及台湾。

美时已发展为首屈一指的家具生产商。生产厂房位于东莞,面积超过十万平方米,为国内最大型的生产厂房。主要生产线分为四种,包括屏风家具系列,办公桌, 文件储存系统及办公室座椅。LAMEX厂房为一所综合大楼,集生产厂房,品质测试中心,设计及发展,货仓,行政中心,培训中心及陈列室等,使公 司运作更有效率。

公司大事记:

1977-美时公司成立

1978-首家香港办公室家具公司提供5年产品保用

1989-首家香港办公室家具引入本地屏风系统生产线

1990-开始进入中国市场

1991-首家香港办公室家具公司提供电脑绘图和电脑生产线

1992-所有座椅产品采用不助燃海绵

1996-自行研发革命性的支柱式屏风系统 – 338屏风系统

1997-首家办公室家具公司在国内引入特许经营方式

美时创办人林正华先生获颁香港青年工业家奖

1998-338屏风系统于广州国际家具展获得金奖

1999-美时获得国际ISO9002品质认证

2001-美时投资二百五十万美元引入CNC Combima先进生产技术

美时为APEC会议的指定会议家具供应商

2002-美时荣获香港十大名牌

2003-美时荣获广东十大名牌,ISO9001及IQ Net

2004-美时荣获ISO14025 III 型环境认证。

美时获香港社会服务联会颁发“商界展关怀”。

2005-美时再度荣获“香港名牌”的奖项以及“商界展关怀”的嘉许状。

美时的销售员荣获“杰出推销员奖”。

inetdemon 家居生活

Zend Framework 1.8 中的Model

2009年8月1日

在ZF1.8以后Module的问题得以完善,但是仍然有很多领域需要改进,Model就是其中一个

Model的类型用DbTable<->Mapper<->Model的DataMapper Pattern (同时参照IdentityMapUnitOfWork)来调用,其中对象Model用于导入对象,导入后就由UOW拥有的Identity对象来跟踪,以此来保持数据的同步。比如一个Users表,我们有如下类:

Model_User是业务域模型(domain Model),关于domain design的模式可以参见domain driven design一书

Model_UserMapper来完成Model对象和数据库的映射关系

Model_DbTable_Users extends Zend_Db_Table_Abstract类负责数据库方面的设定

以上pattern的使用在这篇帖子Zend 的proposal中有讨论到。这个Pattern的好处是,如果你将来不用数据库来保存数据,而换用文件或者Memcached,那么你就不用修改你的Controller了;从来引来的一个缺点是几乎每个调用都需要来定义Mapper,从而导致复杂度提高。通常情况下对于不是比较复杂的情况,1:1的应用来说,Table Gatewy, Row, Rowset的Pattern已经足够使用。

关于DataMapper的Model使用模型还在更新过程中,同时还有个datashuffler在ZF上的实现目前也在研究中。

inetdemon 程序开发

ZF1.8 快速上手

2009年7月30日

ZF有段时间没有弄了,自从ZF1.8出来之后改动比较大,把一些东西整理一下,温故而知新。

首先是下载ZendFramework,由于ZF的版本更新很快,一些小版本基本是2周出一次下载最新的ZF,下载后将ZF放到系统类库目录,我们假设是/usr/local/lib/,

其次,将ZF添加到系统目录中去,可以修改php.ini(如果不确定php.ini所在目录,可以通过phpinfo查看),在include_path中增加如下目录:include_path=”.:/path/to/zf:/usr/share/php:/usr/share/pear”,对于以ZF为主的系统,将ZF包含目录放在最前面有助提高效率,详细请看这篇文章。在进行下一步之前,我们需要先确定目录构造,请参见ZF所推荐的Zend Framework的目录结构

开始工作,首先index.php比较简单:

<?php

// Define path to application directory
defined('APPLICATION_PATH')
 || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// Define application environment
defined('APPLICATION_ENV')
 || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
 realpath(APPLICATION_PATH . '/../library'),
 get_include_path(),
)));

/** Zend_Application */
require_once 'Zend/Application.php';  

// Create application, bootstrap, and run
$application = new Zend_Application(
 APPLICATION_ENV,
 APPLICATION_PATH . '/configs/config.ini'
);

$application->bootstrap()
 ->run();

接下来是bootstrap.php我最开始写ZF的时候最麻烦的部分就是bootstrap,花了不少时间调试。Bootstrap,顾名思义就是系鞋带,指出发之前做的准备工作。自从 1.8以后,ZF出了Zend_tool和Zend_Application,因此Bootstrap有了比较大的调整,基本来讲,只需要在index.php中调用Zend_Application,就可以直接免去过去设定config文件,DB,view等。如果需要对这些做特别设置,可以在Bootstrap中扩展Zend_Application_Bootstrap_Bootstrap,用_init*资源函数来设定,BootStrap将依顺序逐个调用这些_init*资源函数,然后执行dispatch。用这里有篇是介绍如何将老的Bootstrap迁移到ZF1.8上。需要注意的有几点,

1.  在initView的时候尽量不要标注Response属性,这样这个Bootstrap不会在layout之前实例化Response;

2.  可以判断ajax的request头,用以去除layout, ViewRender,errorHandler和Exception的输出,这样就免除在ajax页面里面单独进行设定了。

3. ZF1.8之后可以通过设定driver option的方式对ZF的DB charset进行lazy load方式的设定了。

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
 protected $_config;
 protected $_cache;
 protected $_requesttype;

 public function run() {
 $frontController = Zend_Controller_Front::getInstance();
 $frontController->dispatch();
 }

 protected function _initAutoload(){
 $autoloader = new Zend_Application_Module_Autoloader(array(
 'namespace' => '',
 'basePath'  => APPLICATION_PATH,
 ));
 return $autoloader;
 }

 protected function _initConfig(){
 // config
 $this->_config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/config.ini', APPLICATION_ENV);
 Zend_Registry::set('config', $this->_config);
 Zend_Registry::set('env', APPLICATION_ENV);

 //Load Application Level configure
 $appconf = new Zend_Config_Ini(APPLICATION_PATH . '/configs/app.conf', APPLICATION_ENV);
 Zend_Registry::set('appconf', $appconf);

 if (1 == (int)$this->_config->debug->showpageinfo){
 Zend_Registry::set('PageStartTime', microtime(true));
 }
 }

 protected function _initDB(){
 if($this->_config->db) {
 $db = Zend_Db::factory($this->_config->db);
 if($this->_config->cache->tablemeta && isset($this->_cache)) //setup Metacache to speed up
 Zend_Db_Table::setDefaultMetadataCache($this->_cache);
 Zend_Db_Table_Abstract::setDefaultAdapter($db);
 Zend_Registry::set('db', $db);
 }
 }

 protected function _initView(){
 // view and layout setup
 $view = new Zend_View(array('encoding'=>'UTF-8'));
 $view->addHelperPath(APPLICATION_PATH.'/default/views/helpers/');
 //$viewRendered = new Zend_Controller_Action_Helper_ViewRenderer($view);
 //Zend_Controller_Action_HelperBroker::addHelper($viewRendered);

 Zend_Dojo::enableView($view);
 $view->dojo()->setDjConfigOption('parseOnLoad', true)
 ->requireModule('dijit.form.FilteringSelect')
 ->requireModule('custom.PairedStore');
 //$view->addBasePath(realpath('./templates/default/'));

 //if ajax submit
 if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'){
 $this->_requesttype="ajax";
 }else{
 $this->_requesttype="html";
 Zend_Layout::startMvc(array(
 'layoutPath'=>APPLICATION_PATH . '/layouts',
 'layout'=>'layout'
 ));
 }
 $view->doctype('XHTML1_STRICT');
 Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->setView($view);
 }

 protected function _initFrontController(){
 $frontController = Zend_Controller_Front::getInstance();
 $frontController->setControllerDirectory(APPLICATION_PATH .'/controllers');
 $frontController->setParam('env', APPLICATION_ENV);
 if ("ajax" == $this->_requesttype){
 // Disable the ErrorHandler plugin
 $frontController->setParam('noErrorHandler', true);
 // Disable the ViewRenderer helper
 $frontController->setParam('noViewRenderer', true);
 }
 $frontController->throwExceptions(false);
 $frontController->setBaseUrl('/');
 // action helpers
 Zend_Controller_Action_HelperBroker::addPath(APPLICATION_PATH .'/controllers/helpers');
 }

 protected function _initSession(){
 if (isset($this->_config->session)){
 $session = $this->_config->session;
 if (empty($session->save_path))
 $session->save_path = APPLICATION_PATH. "/../data/sessions/";
 }
 Zend_Session::setOptions($this->_config->session->toarray());
 }

 protected function _initCache(){
 /**
 * Setup Core Cache
 */
 if ('true' == $this->_config->cache->caching){
 $CacheFrontendOptions = array(
 'lifeTime' => $this->_config->cache->lifetime,  // cache lifetime of half a minute
 'caching' => $this->_config->cache->caching,
 'automatic_serialization' => $this->_config->cache->automatic_serialization,  // this is default anyway
 'automatic_cleaning_factor'=>$this->_config->cache->automatic_cleaning_factor,
 'logging' => $this->_config->cache->logging,
 );
 switch($this->_config->cache->backend){
 case 'memcached':
 $MemcachedBackendOptions = array(
 'servers'=>array(array(
 'host' => $this->_config->cache->memcached->host,
 'port' => $this->_config->cache->memcached->port,
 'persistent' => $this->_config->cache->memcached->persistent
 )));
 $this->_cache = Zend_Cache::factory('Core', 'Memcached', $CacheFrontendOptions, $MemcachedBackendOptions);
 break;
 case 'file':
 default:
 $FileBackendOptions = array(
 'cache_dir' => APPLICATION_PATH.'/../data/cache/',
 'read_control'=>true,
 'read_control_type'=>'md5',
 'hashed_directory_level'=>'1'
 );
 $this->_cache = Zend_Cache::factory('Core', 'File', $CacheFrontendOptions, $FileBackendOptions);
 break;
 }//End of switch
 Zend_Registry::set('cache', $this->_cache);
 }
 /**
 * Setup Page cache
 */
 if($this->_config->cache->page->caching){
 $pageCacheRegexpsConfig = array(
 'cache_with_get_variables'=>true,
 'cache_with_post_variables'=>true,
 'cache_with_session_variables'=>true,
 'cache_with_files_variables'=>true,
 'cache_with_cookie_variables'=>true,);
 $pageCacheFrontendOptions = array(
 'lifetime' => $this->_config->cache->lifetime,
 'debug_header' => $this->_config->cache->page->debug, // for debugging
 'regexps' => array(
 // cache the whole IndexController
 '^(.+)-lc-(.*).html' => array_merge($pageCacheRegexpsConfig,array('tags'=>array('lc'))),
 )
 );

 if (empty($FileBackendOptions)){
 $FileBackendOptions = array(
 'cache_dir' => APPLICATION_PATH.'/../data/cache/',
 'read_control'=>true,
 'read_control_type'=>'md5',
 'hashed_directory_level'=>'1'
 );
 }

 // getting a Zend_Cache_Frontend_Page object
 $page_cache = Zend_Cache::factory('Page',
 'File',
 $pageCacheFrontendOptions,
 $FileBackendOptions);
 $page_cache->start();
 }
 }

 protected function _initTranslation(){
 //Setup Locale
 Zend_Locale::setDefault('en');   //fallback locale
 $locale = new Zend_Locale('auto'); //auto detection for user locale
 if (isset($this->_cache)) Zend_Locale::setCache($this->_cache); //cache locale to speed up
 Zend_Registry::set('Zend_Locale', $locale); //set up application-wide locale
 //Setup Zend Translate

 //$this->_cache = Zend_Cache::factory('Page','File',$frontendOptions,$backendOptions);
 //Zend_Translate::setCache($this->_cache);
 $translate = new Zend_Translate('gettext','../data/locales/',NULL,array(
 'scan' =>Zend_Translate::LOCALE_DIRECTORY,
 'disableNotices' => true
 ));
 Zend_Registry::set('Zend_Translate', $translate);
 //Zend_Validate_Abstract::setDefaultTranslator($translate);
 Zend_Form::setDefaultTranslator($translate);
 }

 protected function _initRoutes(){
 //$router = new Zend_Controller_Router_Rewrite();
 //$router->addConfig($appconf, 'routes');
 }
}

inetdemon 程序开发

页: 1 2 3 4 5 6 7 8 ...12 13 14 后一页