存档的‘网站设计’分类

Yii 的布局框架

在Yii Demo和Yii Playground两个例子工程中,发现其Web Layout是这样的,\protected\view\layouts\main.php是主要的外部框架,定义了顶层菜单、右侧菜单和层级菜单,还有底部的注释等。而中部的主体部分由部分视图文件来定义:如column1.php根据BlueprintCSS定义了100%宽度,column2.php定义了两列方式,而如果需要定义自己布局,需要在该文件夹下定义各自的文件,如地图的map.php,搜索栏的search.php等等,一些小的布局,如占据100%宽度的照片缩略图,还是使用column1.php就可以了。
但是,奇怪的是,采用这种嵌套式视图文件,导致有container_class和content_id的CSS定义重复。其中container问题不大,毕竟类名允许重复,但是ID名应该是唯一的吧?将最内侧的content名称改为main_content之后,布局的确有些改变。
难道Yii设计者没有发现这一问题?

继续阅读 »

商用GAE支持SQL

Google AppEngine是许多人喜爱的虚拟主机服务,有Python和Java两种平台。但是GAE有着独特的限制:文件数、图像处理能力、能够使用网站框架、数据库等等。对于只熟悉LAMP服务器的开发者需要额外学习Python/Java和GAE本身的知识,有相当难度。尤其是使用BitTable限制了数据库全文检索的能力,限制了一些应用在GAE上的采用。一些用户不得不使用Remote SQL来替代。
Google AppEngine for Business 和免费的GAE相比,支持99%的SLA,SSL和SQL托管。这意味着Java/Python的一些原生框架可以在收费平台上直接使用。许多应用可以支持全文检索了。
收费:8美元至1000美元/月

继续阅读 »

将古老的ASCII字符用于视频编码

此文用于记录一个网站: dyne.org。防止我日后忘记。该网站提供了许多和音视频相关开源软件。其中一个HasciiCam,可以在低带宽情况下将视频信息专为ASCII字符后传输出去。这不仅仅是一个娱乐软件,实际在许多情况下(低带宽,单色,无视频加速,只有浏览器),这种软件有相当的作用。工作原理是将YUV中亮度根据字符的平均亮度进行计算,拼合而成。特别贴一张图让大家看看。

继续阅读 »

新的无线热点需求:广告服务器+Mesh网络

好久没有更新Ennovation WiFi网站了,最近接到新的需求。具体要求是使用开源无线热点网状网+强制门户+广告服务器。软件都是开源的,需要对于开源开发非常熟悉。
Mesh网络其实是扩展了原有的WiFi网络,只不过Repeater转发器多了些个;强制门户利用任何网站框架都是可以的;广告服务器却是头回儿听说。看了看规格,支持几乎所有种类的广告形式,还有计费,实时投放等一系列功能。基本上涵盖了原来设想的所有后台服务,还有许多我没有想到的。
看来,许多东西,尤其是自己知识范围之外的,往往都有开源的东西了。这启发我可以将广告服务器接入Ennovation的服务中。不过相对应的,强制门户需要改变。现在整个WiFi接入需要配置的组合是:

硬件(路由器、AP)
固件(何种开源固件操作系统)
无线热点(认证方案)
计费模式(计费、免费、支持漫游、广告支持)
广告模式(Banner、插播、文字、JS、图文、Flash或者其他)
广告交易(实时交易投放)
AAA服务器(RADIUS)

继续阅读 »

对比法学习Yii框架

其实,我发现Yii框架最简单的学习应该是对比法。目前网站上有三个例子:

Yiic 创建的 main;
Yii 提供的 Hello World, Hangman, Phonebook, Blog 四组Demo;
Yii Playground,在Google Code上托管;

这几个例子的难易程度均是从容易到高级,其中Yii Playground几乎包含了主流的Components/Modules如:多语种,AJAX,UI,JavaScript。使用BeyondCompare等对比工具,将高级代码一点点儿地加入到基础代码中,可以很容易地了解框架修改所需意图。当然,数据库Schema需要自己使用SQLite3/MySQL进行对比和迁移。遇到不懂的地方稍微看看文档即可。这样可以快速入门,甚至快速创建一个网络应用。

继续阅读 »

利用Micolog建立自己的全景设计博客

利用开源Micolog在谷歌GAE平台上建立了一个新的全景摄影博客。主要讨论如何针对不同的全景摄影要求进行数据采集(摄影器材如DSLR+鱼眼镜头),后期处理(拼合软件)和网站呈现进行专门讨论和业务承揽。
宝丽多维全景工作室
大家可以体会到利用Google免费资源的快捷。网站速度不慢,虽然一开始会有个几秒钟,之后速度会很快。

继续阅读 »

Yii(易框架)容易么?

这个问题我在不同时间段的答案是不同的。
我原来使用CodeIgniter,当时的主要理由是PHP4兼容性。CI小巧、可爱、快捷、易学。我至今依然喜欢CI,认为它是PHP平台上的优秀框架,文档和社区支持非常好。但是CI没有内置一些关键的如用户模块,曾经使得我有些受挫折。但是FreakAuth等社区开发模块解决了此事。使得我放弃CI开发新项目的原因则是:我的虚拟主机在扩展OpenID时受到了限制,对于大流量的支持等等。基本上不能够说是CI的原因,而是虚拟主机的原因。CI目前版本基本上不再升级,主要是其开发者为了和其商业版框架做出一定的区分。
在谷歌上检索Yii,大量的都是其文档翻译。很少有网站设计公开。不同Yii的确有自己的Demo、教程和一个开源的Yii Playground网站设计可供下载。按理来说,很足够了。这是许多博客推荐Yii的主要原因。也是我采用Yii的理由。
不过,这也是我在选择新项目的时候偏好使用新框架的主因,无论是OpenID,流量或者扩展能力都没有问题。Yii恰恰在这方面进行了重点的优化和宣传。此时,我认为Yii是容易的。
CodeIgniter虽然也采用了OOP/MVC的编程模式,但是它容忍了许多开发者从PHP4学习之初就有的开发习惯。同时,Yii无疑在许多方面和CI有所不同。
CodeIgniter中,有关View的代码可以留在View中,也可以在Controller|action中,利用HTMLhelper来做。我个人喜欢将View留给View,Controller不太涉及View的工作。如此,我需要将View中的布局CSS文件,客户端工作JavaScript文件和图形资源文件都在View中进行编码。当然,CI也可以使用嵌套View来实现共享主题框架的方式。但是CI从来就是将CSS/JS/Image这种资源文件单独放在某个全局文件夹中的。
到了Yii,一切都改变了。首先Yii的首选CSS是Blueprint,首先JS是jQuery,这和CI有所不同。其次,Yii中每个视图对象,如Menu,Form,NavigationBar,Calendar都是独立的Components。每个Components可以有自己的CSS/JS/Image,这样有个好处,可以在不同页面中复用。但是这对我原来的使用经验是一次冲击。最要命的是,Yii居然没有重点提及和其他框架的此点不同。于是,我花了一天时间做了新的Layout,View,Controller|action,才将最简单的谷歌地图呈现出来,到处是补丁。让自己很不满意。此时,我认为Yii框架和易经一样难懂。
昨天花了一天时间看了看它的Definitive Guide,记了点儿笔记,总算有了新的了解。所有的东西先到extension中去找找看。发现一个GoogleMap扩展。下载、解压、在View文件中将代码嵌入。So easy, so simple !
当然了,这只是我目前的想法,Yii的这种组件方式有其优点:快速配置复用组件,而且在主体CSS已经加载后,在尾部加载JS/局部CSS可以使得整体网站非常快捷地呈现在使用者眼前(参考雅虎的可扩展网站设计之前端优化)。缺点是:在后端组件中混合了JS/CSS/Image/View/Controller,是否符合大型网站的开发流程?关键是前端和后端代码混在一起了。是否有维护上的麻烦?
而且,此种方式真的对框架初学者是一种很大的使用习惯上的冲击。这也为什么Yii框架有人称之为较难掌握的原因之一吧。

继续阅读 »

PRADO vs Yii

在某篇文章中看到Yii开发者来自PRADO框架团队。两者都是PHP5的OOP框架。今天抽空看了看,果然PRADO和Yii的概念,甚至网站结构都类似。但是仔细看看Yii的论坛,很明显来自中国和俄罗斯的用户较多。
对于开源软件来说,哪个项目跑在前面,关键在于Leadship是谁。不管如何,有两个选择总比没得选要好得多。

继续阅读 »

PHP框架对比:CodeIgniter vs Yii

最近在免费主机上设计网站原型,由于CodeIgniter在某些方面受到局限(或许是虚拟主机受到局限)导致我想找到一个备选的,至少是代表将来趋势的新的PHP框架。实际上我已经选用Yii进行尝试了,但是不顺利,非常不顺利。让我很搓火。
找到一篇博客:
Choosing a PHP framework round2 , Yii vs CodeIgniter vs Kohana | Beyond Coding
该篇文章作者其实也没有真正使用过Yii,但是他认为很有希望。和我一开始的想法是一致的。但是实际使用下来,尤其是使用过CodeIgniter这种简洁风格的框架的用户,会发现有些格格不入。
我的应用主要围绕谷歌地图,jQuery插件,OpenID和图形处理。其中最简单的两个问题绕了我相当长的时间。如何定制View/Layout和管理JS/CSS/Image资源。
由于谷歌地图的API自成系统,一般来说jQuery也不会对GoogleAPI进行大的修改,如果在CI上,基本上就是将jQuery,GoogleAPI等JS放置在根目录下,同理,CSS和图形文件也放置在同一级目录下。这样CKEditor/TinyMCE/jQuery插件/UI都可以工作。简单有效。
但是这一切在Yii中,第三方Widget和自己的JS/CSS是在controller(可能View中也可以)中通过框架注册并在线复制到根目录下。这种方法在第一次运行大型JS库中如ExtJS会出现复制文件产生的时滞。最让人困惑的是,Yii对这种方法没有特别强调,而且在blog demo中也找不到在哪里注册用户脚本。(还是我没有找到?我使用grep来找的。)
至于Yii为什么喜欢在后端PHP框架中操纵前端JS代码,这明显和前后端(服务器和客户端分离)的实践相悖,其理由是在第三方Widget扩展时可以获得灵活性。我现在还没有体会,或许是这样,但是我必须有耐心学到那一步才行。
在没有学会跑步之前,还是先爬吧。我定制了一个新的View,里面主要在头部添加了硬编码的JS文件。按照文档“暗示”增加了view\layout\map.php,view\site\map.php两个文件,在controller\SiteController.php中添加了mapAction(),里面重载了layout和view。可是居然发现有部分 div tag 被遗漏了。原来默认的设计为:main.php->column1.php->index.php,我重载了第一个和最后一个,中间没有做处理,它直接成了两级的布局,而文档中也没有叙述,至少没有完整的定制视图的描述。不得已,我用最恶心的方式打了个补丁,在main.php中直接添加了两级 div。OK,工作正常。
看看,我在资源管理和布局上就花了N多时间,现在看来有些不划算。时间才是最重要的。条条大路通罗马,问题在于你愿意抄捷径,还是经历风雨享受过程。各种框架的配合关键是要省心省力,费力劳神的框架需要时间呐。

继续阅读 »

From PHP4 to PHP5

迁移PHP4环境涉及到服务器方方面面,不到万不得已总是希望PHP4能够继续使用。但是现在PHP6都逐渐成熟了,不得不考虑PHP5迁移问题。
现有CI是兼容PHP4/PHP5的,但是FreakAuth基本上还是PHP4的代码,所以在Ubuntu的LAMP上总是出现:Assigning the return value of new by reference is deprecated 的错误。
仔细一看是www\ci\system\application\helpers\freakauth_light_helper.php 第33行中:
$obj->freakauth_light = & new MyFAL();
将其改为:
$obj->freakauth_light = new MyFAL();
之后,问题消失,可以在PHP4.4以上运行,所以可以做到PHP4/5兼容。目前我的开发环境是:

Windows:XAMPP 1.6.8,PHP4/PHP5可切换;
Linux: Ubuntu 10.04 + Apache2 + PHP5 + MySQL + SQLite

生产环境:

FreeBSD + PHP4.4 (LAMP)
Linux + PHP5 (LAMP)

继续阅读 »