分类
原创作品 视觉主题

原创主题《金光碧色》

笔者偶尔会抱怨BlogEngine.NET的主题太少,很羡慕WordPress丰富的主题资源。前段时间手痒想给博客换个新主题,但找遍WordPress TOP20之类的排行榜也没有发现特别满意的,一想到就算找到满意的也得花功夫改写成BlogEngine.NET的格式,倒不如释放一下自己的原创热情。

evis-me_royalgold-theme_screenshot

素材

首先是页面的CSS布局,从零开始搭CSS是很折腾人的,一个CSS布局模板可以省掉很多辛苦。CSS-Tricks网站提供了一个“完美的自适应宽度的布局”: http://css-tricks.com/the-perfect-fluid-width-layout/,其特点如下。

  • 左右两栏式;
  • 在主流浏览器下效果良好;
  • 宽度最小可以缩减到780px,最大可以增加到1260px;
  • 侧边栏保持固定宽度,并与主内容区域同高;
  • 页面内容在极大分辨率下保持居中。

笔者基于这个布局的源码,将侧边栏移到了右边,微调了最小最大宽度,最主要的,加入了一系列包括边框、阴影之类的背景图片。这个“完美布局”模板在使用时有以下几点需要注意。

  • 侧边栏是float:right属性挤过去的,这意味着主内容区域里不能很早就用clear:right或者clear:both来清理浮动,否则会造成清理之后的内容与之前的内容间产生很大片空白;
  • 主内容要设计min-height,以避免侧边栏内容高度大于主内容时,下半截没有背景的情况;
  • 这个模板包含一些针对IE的CSS-hack,在IE下人工改变浏览器宽度时,渲染效果会有不稳定的情况。

然后是背景。只所以这个主题会有金色系这样的配色,主要还是因为偶然找到了这样的图案纹理: http://speckyboy.com/2010/04/08/6-free-vector-seamless-backgrounds-source-files/。矢量纹理的好处是后期加工很方便。

还有就是纯CSS的层叠菜单。Google了很多,最后还是采用了http://purecssmenu.com/提供的代码。笔者针对自己的需要,砍掉了不少代码。

HTML源代码

早期版本的HTML、CSS、切图都可以在Google Code上找到,SVN地址如下:

https://evis-lab.googlecode.com/svn/themes/royalgold/src

《金光碧色》主题

主题为什么取这名字就不要深究了。

在上述HTML版本之后,笔者就将HTML代码合并到BlogEngine.NET的Standard主题中了,后来的开发、除错都是基于ASP.NET页面进行的。从结果来看,主题有如下特性。

  • 金色系配色;
  • 纯CSS(CSS2.1)布局,左右两栏,最窄780px、最宽1000px自适应,侧边栏宽度固定为300px;
  • 纯CSS层叠菜单;
  • 在IE7/8,Chrome,Maxthon2/3下测试通过;
  • 适用于BlogEngine.NET 2.0RC及2.0,之前版本尚未测试。

已知bug:

  • 在IE7/8下,Google广告之类的iframe内容会将弹出来的层叠菜单遮住;
  • 在IE7/8下,任何时间都会出现横向的滚动条。

最新版本的《金光碧色》主题可以从这里下载,解压缩至BlogEngine.NET相关目录即可使用。

如果有哪位朋友有兴趣将主题迁移到WordPress,同样请留言,笔者会提供相应支持。

后记

果然是自己从未尝试过的色系,看久了多少有点眼晕的感觉……

制作主题这种事情,笔者认为最舒服的还是做效果图的阶段。神马Web Standard,神马HTML5、CSS3,业界推广这么长时间了,想做个布局、加个边框之类的,开发量还是这么大,甚至避免不了CSS Hack。这么多年了,多浏览器兼容仍旧是个大问题。有时想想,还是表格布局来的畅快。还有,开发工具还是这么单薄……等等各种抱怨。

说回来,Web页面开发这类工作,还得是设计师和前端工程师合作来做,别太期待团队里出来一个英雄,从美工到前端,加上体验设计,甚至再到后端,把一个网站硬生生的扛下来。领域太广、细节太多、耗时太长。哦,笔者可没说自己是这样的人物。

分类
原创作品 技术

IronRuby+IIS+Typo的尝试和对Ruby跨平台性的质疑

一开始,我只是想找一个当前博客程序的替代品。而我发现了Typo这样令人激动的基于RoR的开源博客程序,跃跃欲试想把Typo运行在IIS + IronRuby + IronRuby.Rack上。

Typo 5.5依赖于Ruby 1.8.7 + Rails 2.3.8。IronRuby 1.0基本兼容Ruby 1.8.6,我想问题应该不大。

XP系统,一个崭新的IronRuby 1.0安装版。安装Rails:

igem install rails -v 2.3.8

为了方便,打算使用SQLite数据库,在IronRuby下,sqlite3-ruby这样的gem是不能用的,需要用sqlite3-ironruby这样的替代方案。早在这一步我就应该注意到一些问题了,但我当时没有在乎:

igem install sqlite3-ironruby

尝试了几次RubyGems直接安装Typo都失败了,我自己从ZIP里解压了一份Typo 5.5。

在config目录下创建database.yml:

production:
  adapter: sqlite3
  database: db/typo.db
  timeout: 5000

然后执行rake操作DB:

rake db:create RAILS_ENV=production
rake db:migrate RAILS_ENV=production

问题来了,rake报告有一系列需要依赖的gem没有安装。那就让它装:

rake gems:install

找不到gem命令,没问题,把igem.bat复制一份命名为gem.bat。

再执行,大部分安装都成功了,除了json、bluecloth 2.0.5和RedCloth 4.2.2。报错都在编译Native Extension上。

去RubyForge上找齐了这三个的Windows预编译版本,再用RubyGems单独从本地安装,成功。

再尝试之前的DB Migrate操作,rake却依然报告找不到两个gem依赖:

Missing these required gems:
  bluecloth  ~> 2.0.5
  RedCloth  ~> 4.2.2

经过各种google,终于在IronRuby官网(Documentation –> Real Ruby Applications –> RubyGems –> Native gems)上得知了一个噩耗:

Native extensions are not supported by IronRuby. Currently, there is no known way of avoiding native gems. When you install gems, you will have to manually exclude gems with win32 in the name.

本来就是希望跨平台采用了IronRuby,结果这又出现平台依赖的要素了。这不得不令我质疑之前自己对Ruby跨平台性的认识。

现在的疑问是Native Extension在Ruby开源界占有多大比重?IronRuby在缺少此类支持的情况下,能为我带来多少好处?

分类
Web2.0 原创作品

游动物园引发的思考:LBS服务在公共场所的强制应用

这个(上个)周六难得有个好天气,我突发奇想并付诸行动——去动物园散步。托朋友的福,终于见到了传说中的神兽(草字辈的那只),它们一家三口,貌似在喝奶的那只最有神兽的范儿。当然也看了保留项目的大熊猫,金丝猴等等。

在动物园的动物们都是明星。作为明星自然少不了粉丝的追捧:观赏、叫喊、投食、拍照、闪光……一只在享用树叶的金丝猴(名字忘了)显然不喜欢观众们打扰它进食,在一个个闪光后,它断然躲到了远处的树枝上,弃观众于不顾。虽然不是动物保护主义者,我也有些担心动物们是否被频繁的闪光灯所伤害,而印象中电视上也有过类似的报道。

Google之,看来并不像我想的那么糟:

http://www.naturescapes.net/042004/do0404.htm

Flash does not cause permanent damage to the eyes of animals or people, even at close range.

文章大意是说只要不是长时间持续的强光直射,眼睛是不会有永久性损伤的。

但我当时想当然认为使用闪光灯对动物园的动物拍照是无公德的行为。玩CS的同好们都知道,自己穿过A门马上被闪光弹击中,只能凭感觉躲在箱子后面,而视觉恢复的同时却莫名发现自己倒在A门外的空地上……这是多么的郁闷啊。我的思路也走向了如何禁止闪光弹,厄,不,是禁止在动物园对动物的闪光行为。

在某一特定公共场所,能约束某一特定行为的方式无外乎:道德、规章制度、法律法规、人为监管、技术手段。工程师的思路自然是技术手段。

第一个进入思路的关键字是GPS。拍照者以手机为工具的不在少数,而最近的手机普遍拥有GPS功能。即是说手机上如果安装了这样一款应用,读取手机用户的的经纬度位置信息,如果发现用户进入了预先定义好的区域,如动物园熊猫馆,则调用照相应用的接口,强制关闭照相的闪光灯功能;当离开此区域,将恢复闪光灯在强制关闭之前的状态。那数码相机呢?经过搜索很惊奇的发现,现在还真有带有GPS功能的相机了。

这基本上就可以归纳为LBS应用了,但显然这不是一个用户会乐于主动选择的应用。这需要管理此公共场所的行政机关、手机行业管理部门,乃至手机厂商的合作。类似的,剧场、电影院等演出场所也可以强制设置入场者的手机静音(至少调成震动)。人性化一些,这些公共场所入口应显著表明其内部将限制用户手持设备部分功能的使用。

当然这个思路也有明显的不足。手机用户如果在这一时间点如果关闭了GPS服务,这一强制就不成立。另一种可能性就是用手机代替或辅助这一场所的入场券,进门划手机——那出门也得划吧,否则闪光灯就再也打不开了。

还有智能手机普及率之类的种种限制。看来LBS服务在公共场所的强制应用似乎还难有较大用武之地,但我个人认为,需求还是存在的:

  • 说回闪光灯,就算动物不怕好了,但名胜古迹是怕的,闪光灯会加速其老化和损坏。
  • 还有前面提到的剧场、电影院乃至学校课堂,不欢迎手机来电铃声打扰的。
  • 医院特定区域、加油站等不允许手机接打电话的地方。
  • 甚至提醒你身边数米内有安装了心脏起搏器的人,建议远离后再接打电话——这有些远离主题了。

总结一下,能亲眼见到神兽真是太高兴了。