随着计算机应用的日益广泛,越来越多的应用软件投入使用,软件的安装与部署、配置与数据的多点同步等问题逐渐受到更多的关注。针对这些问题,应用软件的发展有以下几个趋势:
一、网络化
网络状况的改进提供了硬件保障,Ajax技术丰富了用户体验,Web2.0应用的流行使用户的上网行为不在仅限于浏览网页,而逐渐转向发布-分享的模式。
如最常用的网页收藏夹(
del.icio.us
、
Google Bookmarks
)和输入法配置(
搜狗输入法
、
Google输入法
)的网络存储。
如笔记软件(
Google Notebook
、
Evernote
)
如Office软件(
Google Doc
、
Office Online
、
Zoho
)
如Todo-list软件(
Remember the Milk
)
如协作平台(
Basecamp
、
Central Desktop
)
此类应用可以说是SAAS(软件即服务)的最好诠释。一个网址代替了原有的安装程序(还有服务器)。
优点是用户不必再关心软件的安装和升级。配置信息和数据都在网络集中存储,可以方便地在移动办公时多点访问。因为应用是基于网络,可以很方便地分享与协作。而且此类应用目前大部分是免费的。
缺点是对于网络连接的依赖,在离线时会影响数据访问。除了Google外,很多应用的受众并没有考虑到中国的用户,既没有中文的版本,在中国的访问速度也很成问题。最后,网络形式的用户操作体验与本地运行的程序还是有一定的差距。
二、Portable化
因为技术、功能或是商业方面的限制,某些软件并不适合网络化。得益与移动设备的普及,以及移动媒介容量和速度的提升,将现有的软件改造成适用于移动设备的Portable版本,一次安装,随处运行,把应用软件的配置与数据随身携带也是趋势之一。
比如
U3
与移动媒体厂商合作推出捆绑Portable软件的U3 Smart Drive,
Ceedo
也提供收费的Ceedo Personal版本Portable软件包
相对的
PortableApps
和
winPenPack
提供了免费的Portable软件包。
The Portable Freeware Collection
则收录了大量Portable软件以及如何将软件Portable化的资源。
Portable软件,或者称可移动软件,绿色软件。
此类软件与网络化的软件相比,优点是不依赖于网络链接,运行速度有保证。程序、配置和数据随身携带。
缺点是安装与升级仍需要用户的介入。同时由于移动设备的特点,比较容易遗忘以致造成不便,甚至影响到数据安全。
因此Portable化比较适合个人应用目的的,不附带太多用户数据的软件。
三、Application Virtualization(应用程序虚拟化)
简单地来说应用程序虚拟化为每个软件创建一个虚拟的空间,容纳软件运行所需要的各种资源和文件,以隔离其对操作系统的影响,同时将程序文件与其配置和数据分离,便于多个软件实例的运行。从某个角度来说Portable化也是某种应用程序虚拟化。
当然主要面向企业应用的应用程序虚拟化并不如此简单。它往往包括了一个服务器,用于发布和管理已经针对不同操作系统虚拟化后的软件包;一个客户端,用于安装、升级和运行虚拟化软件包。
代表性的产品有
Microsoft Application Virtualization
,之前名为Microsoft Softgrid,企业级的应用,需要Windows Server Active Directory的支持。
其他同类产品有
moka5
、
Ceedo
的Enterprise版本,还有国产的
虚拟盒子
企业版。
四、其他
以下是比较难以分类的虚拟化产品,可以说是应用程序虚拟化的另类Portable实现
虚拟盒子
个人版,并不预先为支持的软件制作Portable版本,而是通过虚拟盒子软件将用户的电脑环境、应用程序以及相关文档进行封装,并在其它电脑上重现。
云端软件平台
,可以看做是一个客户端,从作为服务器的官方网站上下载已经定制好的软件,收录很多常用软件,面向普通用户,免费。关注。
环境
CodeSmith Professional 5.0.3 Revision 5757
Microsoft .Net Framework 2.0
最近开始认真地折腾CodeSmith,在非常起始的阶段,为数据库的Table按照模板生成代码时遇到问题,对于初学者来说真是非常挫折。过程如下:
1.在Schema Explorer中创建数据库连接
2.在Template Explorer中选择要使用的模板。
比如TableProperties,它可以为Table生成包含相应属性的类
3.设置模板的参数
在此处填入要生成代码的Table名称,点击Generate,即可自动生成代码。
然而事情并不一番风顺,CodeSmith提示
System.TypeLoadException:
Could not load type ‘System.DateTimeOffset’
from assembly ‘mscorlib, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089′.
经过测试,在其他的数据库相关的模板中也出现以上错误。经过SQL Server 2000、SQL Server 2005 Express、Access 2003的测试和错误重现,也排除了因为数据库平台的原因。
祭出google搜索,关键字CodeSmith + System.TypeLoadException,返回的结果不多,在CodeSmith Community中的一篇
<Error when trying to run NetTiers in CodeSmith v5>
提到了相似的问题。
System.DateTimeOffset是.Net 3.5支持的新数据类型,CodeSmith 5.0支持.Net 2.0 3.0 3.5,但是似乎版本的兼容有些问题。我用的可是2.0。
翻到第二页,发现解决的方法是:安装
Microsoft .Net Framework 2.0 Service Pack 1
。
Framework是随Visual Studio一起装的,VS的SP1装了,Framework的没有。想当然以为VS的SP1就是Framework的SP1,乌龙事件,差点把这个正解漏过。下载,安装,再试,问题解决。
这个问题,究其原因,也许是安装CodeSmith的时候环境要求漏看了。不过安装过程中也没有提示,出错也没什么提示,对于刚开始试用的初学者来说,还是很容易受打击的,希望之后的版本能改进吧。
总得来说是一个小错误,分享一下免得有人再走弯路。
Office中的Word和Excel是我们常用的文档工具,Word以章节段落的线性方式而Excel以行与列的二维方式记录信息,而对于超出藩篱之外的放射性思考(Radiant Thinking)则显得力不从心。比如你可能很难用Word或Excel很好地记录和表达以下形式的信息。
图1:手写的思维导图(引用自
维基百科
)
Office系列中的制图工具Visio提供了一种头脑风暴图(Brainstorming Diagram)来满足此类的需要,其实这正是被广泛应用的思维导图(Mind Map)工具的一种表现形式。
Mind Map:思维导图、脑图、
心智图
,由英国的Tony Buzan于1970年代创立的一种整理、组织和记录想法、观点以及信息的方式。可用于创意、规划、记录、整理、分析、解决。增进记忆、方便组织,激发创造力。与传统的方式有跳跃式的差异。个人认为比较重要的概念:
放射性思考
(Radiant Thinking)和
语义的网状结构
(Semantic network)
用思维导图能够:
-
头脑风暴
-
组织计划
-
知识管理
-
项目管理
-
…
还是来点实在的吧:上课记笔记,读书记笔记,会议记记录,画网站地图,编族谱,编电话薄,玩成语接龙,闲极无聊画猫猫...
要绘制思维导图,可以简单地从一张白纸和一支笔开始,也可以使用专门的软件。商业软件除了Visio之外,还有
MindManager
和
Inspiration
。而免费方面则有多次入选
Sourceforge
月度精粹的开源的
Freemind
,以及国产的由商业软件转为提供免费开源版本的
XMind
。
Freemind
Freemind基于Java开发,支持Windows、Linux和Mac OS多平台,有中文版,默认无便携版本(需配置),目前版本为0.81,完全版安装包大小约9M。这是我目前使用的笔记工具。
XMind
Xmind是国产软件,由商业软件开源而来,现分为Pro版和开源的免费版本。同样基于Java开发,支持Windows、Linux和Mac OS多平台,支持Eclipse Plugin。有中文版,有便携版本,目前版本3.01,Windows安装包16MB,支持多平台含JDK的便携版本62MB。
了解XMind是通过
善用佳软
的
介绍
。XMind的界面比Freemind更为美观;额外支持鱼骨图、二维图、树形图、逻辑图和组织结构图;支持MindManager和Freemind格式的导入;支持思维导图的上传与共享。与Pro版相比仅缺少了录音、PDF导出等功能。还是相当值得一试的。
目前XMind与Freemind相比缺失的比较重要的功能是“目录结构导入”。
因为有相当的笔记使用Freemind格式,转换平台所需要的学习成本,决定暂时还是停留在Freemind,对XMind持观望的态度。新丁当可自由选择。
最近参与一个项目,客户送来的“设计”图,在某个“商品入库”的界面大致有一个如下的区域:
-
[登录用户] ________ YYYY/MM/DD
-
[更新用户] ________ YYYY/MM/DD
-
[审核用户] ________ YYYY/MM/DD
大致的意思是谁输入了这条信息,谁更新了而谁又审核了,至于一个应该叫做“审核”的小按钮倒是没有见到。
因为之前的功能清单里并没有提到审核,于是便发了QA去问,QA内容大致是这样:
Q:入库不需要审核? A:入库需要审核。
可是我还是不明白,“怎样”审核呢?于是我有了更详尽一些的解释:
A:对XX的商品入库不需要审核,对XX的商品入库都需要审核。
可是我还是不明白,到底“怎样”审核呢?由怎样的人(角色)来审核,审核一些什么内容,记录什么信息,是否有简单的流程比如通过/不通过什么的,要是不通过怎么办?Come on, man! 好在还有稍有价值的只言片语。
A:审核后才影响库存。
为什么我对“审核”如此紧张呢,因为根据一个“有经验的专业人士”的“专业的经验”,“审核”二字可以从一个仅仅需要记录审核人和审核日期的小函数扩展成为一个不大不小的工作流,信息、节点、参与者、权限。从欺负一只小花猫到上山打老虎,反差还不是一点点啊。
也许是我反应过激了,不过防微杜渐么,需求蔓延这种问题,还是无情地扼杀在襁褓之中为好。
除了更有技巧地问问题之外,怎么做才能更好的挖掘并确认客户的需求呢,更为专业的专业人士有时候会使用一种叫做UML的东西,画一种叫做User Case的图(主体是由一个圆圈和几根线条组成的阿呆),制作一种叫做User Story的卡片(故事的开头可以是“在一个漆黑的夜晚…”)。
当然作为一个需求分析的小白,在还没有掌握如此体面的技术的前提下,所需要的只是一些“想象”。这想象并不需要入Lennon唱得那样:“Imagine that’s no heaven …”,而只需要小学语文课的基本技巧即可:“时间、人物、地点、事情的起因、经过、结果。”
接下来让我给大家描述一下在我的想象之中的几个场景:
场景1:
凌晨时分,一辆卡车驶近了[XX研究所]的门口,在几声喇叭的轰响中,值班的看门老头骂骂咧咧地起身打开了院门,并朝着院内的一幢楼大喊了一声:“小李,来货了。”卡车缓缓倒进了院子,车上下来了两个壮实的中年人开始卸货,不一会楼上下来了一个睡眼朦胧的年轻人在一旁清点。过了半响,货物清点完毕,一位中年人拿出一张单据,对年轻人说:“李办事员,这单子你给签了吧。”“这…”年轻人面露难色:“数量是不错,可这审核,得张处长签字啊,他这两天可休息。”中年人一听有些急了:“前三天就说好要来,怎么就休息了呢,您说这大老远的,我们来一趟多不容易,厂子里还有事急着让回去呢,李办事员您年轻有为,深受领导器重,您签还不是一样。”这年轻人一听多少有些飘飘然,不过还是对着看门的老王头喊了一声:“老王头,你可看见了,我这也是与人方便”…
场景2:
一个月黑风高的夜晚,一个马队悄无声息地进了商家堡。在堡门口,一个身上挂彩的蒙面汉子跃众而出,来到一个白衣人面前,说道:“属下参见堂主,这次路上点子扎手,龙门帮倾权力而出,好在有镇远镖局这个幌子分散了他们的注意力,绕是如此还是折损了十几名兄弟,所幸幸不辱命,将东西送到。”那白衣人看不出几许年纪,精光内敛,双目微陷,一望便知是精修内家的高手,听到这话,淡淡地回到:“弟兄们辛苦了,将东西送到城中分舵后便好好休息吧。兹事体大,这东西的安排,帮中已经派出了左护法,想来几日内便到,到时再做处置。待事情一了,帮中自然重重有赏”…
场景3:
洛克洛克星,宇宙海盗和雇佣军的天堂。一艘飞马级地球战舰缓缓驶进了宇宙港,舱门打开,走出正是闻名遐迩的Stargate SG-1小队。同时,战舰的周围围上了一群皮卡丘星人。这皮卡丘星人虽然看起来人畜无害,但其实是臭名昭著的宇宙海盗。SG-1此行的目的是用皮卡丘星人指定的卡比之星换取击败复制者的秘密。双方各派出一人来到人群的中央进行交易,SG-1方面当然是奥尼尔中校,而皮卡丘族则派出了一只黄金皮卡丘。只见双方交换了物品,黄金皮卡丘忽然一阵大喊:“皮卡、皮卡…(东西是假的)”。通过语言翻译机听到的中校心中暗道不好,但还是镇静地说“审核不通过退货就是了,买卖不成仁义在么。”只见黄金皮卡丘又是一阵大喊::“皮卡、皮卡…(想退货没这么容易,我们没有审核不通过流程)”。于此同时,周围的几百只皮卡丘星人同时转过身去,同时对着SG-1翘起了PP,尾巴上电流的流动火星四溅,正是皮卡丘星人的成名绝技:百万伏电击。…
看见没,其实想象并没有那么难。接下来也许就是在某个阳光灿烂的下午,在会议室和客户谈谈你的梦境,也许大家会惊喜地发现,存在于想象中的事件也真实地存在于现实之中,又或者客户会给你说说他想象中的故事。
软件的流程往往就是现实流程的某种程度的体现,用开发的软件去规范客户流程这样的高阶目标我们暂时就不奢望了,但相对忠实地再现想来还是可以企及的。
网站迁移到Wordpress不久,几天没关心就评论十几页,可惜都是卖蓝色小药丸的,我XX。看来这个域名被锁定了,以后配置Anti-spam校验的优先级看来要提前了。
Anti-spam的方式多种多样,Wordpress的插件也是数不胜数。不过以前在drupal平台上使用的就是reCAPTCHA(
这里
有相关介绍),除了校验顺便还能帮着识别一下古籍,虽然评论会麻烦点不过小众站点也就无所谓了。
照例还是在
WPMU DEV
里面找,
WP-reCAPTCHA
插件倒是Wordpress和Wordpress mu通用。
下载安装包后解压得到wp-recaptcha目录,上传到/wp-content/mu-plugins/,将该目录下的wp-recaptcha.php移动至上层目录(真是很神奇的说明)。插件无需启用即已运行。
通过[Site Admin] –> [reCAPTCHA]打开设置界面。
左边是常用的评论和注册保护设置,右边是邮件地址保护设置,意思都比较清楚。需要注意的是Public Key和Private Key需要到
recaptcha的官方网站
免费注册获取。设置完成后点击Update Options保存,再打开评论,你将可以看到如下的验证框。
除了提交sitemap之外,对网站点击的流量、来源等进行分析,并对网站的内容进行相应的调整也是SEO不可或缺的一部分。
Google Analytics
(Google分析)是Google提供的这样一款免费工具,可以对访问者、流量源、内容等方面生成详尽的报告,并且还可以很好的和Google Adsense结合。
使用你的Google账号登录Google Analytics后,为网站创建一个Analytics的Account,将得到一段js代码,将该段代码复制到想要跟踪分析的网页的</body>标签之前即可。
CMS的网页大多是动态生成,不可能逐页复制,因此需要将这段代码复制到模板中。修改模板的缺点是如果更换模板或者系统升级则需要重新更改,因此有人开发了插件来实现。
Wordpress的
Ultimate Google Analytics
就是一款插件,设置项也非常多,但是它只能为整个站点添加一个Google Analytics跟踪,对于Wordpress mu的用户来说,如果你想为站点里的每个博客添加分别的Google Analytics跟踪,UGA恐怕满足不了你的要求。
于是继续在
WPMU DEV
里需找适合Wordpress mu的插件,找到了一款
Google Analytics Plugin For Wordpress MU – Revised- English
。
下载安装包后解压,得到一个rafik_ga.php文件和一个rafik_ga目录,将其上传至/wp_content/mu-plugins/目录,无需启用即开始运行。
如果想要为整个站点设置Google Analytics,打开[Site Admin] –> [Google Analytics]。
如果项要为某个特定的博客站点设置Google Analytics,则打开[Setting] –> [Google Analytics]。
设置的界面很清爽,只需要将js代码中的一串类似”UA-xxxxxxx-x”或 “UA-xxxxxxx-xx”的字符串填入文本框,然后点击Update Options保存设置即可。接下来的就是耐心等待Google Analytics的分析数据了。
为站点生成站点地图能够方便用户浏览,而生成XML格式的Sitemap文件则方便Google等搜索引擎了解网站的结构和更新情况,更好更快地收录网站的内容,为网站带来浏览量。
一般Sitemap文件都是由发布平台的插件自动生成,比如Wordpress平台上有
Google (XML) Sitemaps Generators
。Wordpress mu是Wordpress的多用户版本,因为涉及到多用户独立配置的需要,两者的插件并不完全能通用。为了符合要求,有时还需要修改插件的源代码。当然,修改源代码一般是最后的解决方案。
在
WPMU DEV
列出了一些专门适用于Wordpress mu的插件,目前总共有150多个,每页10个,没有分类也没有站内搜索,翻翻找找找到了
Standard XML Sitemap Plugin
。
这个插件会为Wordpress mu中的每个站点分别生成sitemap文件。比较特别的是它并不生成静态的XML文件,而是在每次收到请求的时候自动生成。
下载安装包后解压,得到两个php文件。将’xml-sitemap.php’上传至’/wp-content/mu-plugins/’,将’feed-sitemap.php’上传至’/wp-includes/’。因为这是全局的插件,上传完成后无需启用就已经在运行了。
如上所述,该插件不会在站点的根目录生成sitemap.xml,要确认效果只需要访问
http://your-wordpressmu-site/blog/sitemap.xml
即可。
接下来就是向搜索引擎提交sitemap,比如
Google Webmaster Tools
,一般按照界面提示将sitemap的URL地址填写并提交即可。
问题:
在
作者的站点
,有几位用户留言提到了两个主要的问题:一个是日期格式如’2008-10-07T19:35:50 +0000’当中的空格会导致Google Webmaster Tools提示Invalid Date的警告信息(这个问题很奇怪的在我的两个站点中只有一个提示)。一个是sitemap.xml列出的post数量太少。
对此一位名叫sirjoe的用户给出了他的
修改
。文章是用意大利语写的,但代码就是最好的交流语言。
编辑feed-sitemap.php
源代码第19行和39行,将
‘Y-m-d\TH:i:s +0000′
修改为
‘Y-m-d\TH:i:s+00:00’
,去除+前面的空格,在00前添加: 。解决Invalid Date的问题。
源代码第26行,将
‘SELECT … DESC LIMIT 100’
中的100改为你想要的数字。
最终还是修改了源代码,不过开源软件就是这样。修改一个Wordpress mu的插件的问题还是比修改一个Wordpress的插件让它来适应mu要好一些。