CSK.Blog--个人原创Weblog

Autostereogram(立体画)的原理、观看以及制作

请点击文章标题进入正文下载附加讲稿

这里来炒下冷饭... 我在大一的时候曾经对立体画(Auto-Stereogram)研究过一段时间,并且开发过一个可视化的设计软件用于产生此类立体画。时间过得很快,转眼已经毕业了,这里分享一个我最近给目前组里边做的一个presentation:Auto-Stereogram Introduction。

立体画/立体图(Auto-Stereogram)相信各位从前都应该在不同地方看过,不过有可能并不知道他的真正学名:Auto-stereogram(wiki介绍)。如果你对他的实现原理感兴趣,或者希望了解如何去观看它,或者尝试自己制作(自己写程序或者基于已有软件),都可以来看看我这篇文章。同时,既然是炒冷饭,我Blog自然从前也提过此类主题。下面是我Blog以往的文章以及我开发的制作软件Stereoic的下载和介绍:

Stereogram的原理与制作

http://www.csksoft.net/blog/post/21.html

Stereoic的功能介绍

http://www.csksoft.net/blog/post/16.html

 

Stereoic的下载(位于主网站的程序作品区,需要Flash插件)

http://www.csksoft.net/index_mainsite.asp#SubView%3D2%26SubSection%3Dproducts%26ViewPos%3D23%26ViewType%3D2%26UID%3Dmainsite.site_data.ID53

 

因为是分享讲稿,文章本上就不过多介绍细节了,下面给出一些截图。本讲稿链接可以在文章末尾找到。对于想学习如何观看的朋友,在Stereoic软件的帮助文档中我曾经写过详细的观看提示。

 

自制的山寨版Sunjar

不知山寨这个词何时已经变成DIY的代名词了... Sunjar是什么呢?它是由英国的一家叫做Suck UK公司(这什么名字)设计的可以存储阳光并在夜间释放的玻璃罐。有兴趣的可以自行google下(关键词:sunjar 淘宝)。

虽然这个玻璃罐并非真正是将阳光“存储”了起来,不过创意还是十分的不错。尽管就是一个太阳能灯,但是通过罐子这个概念一包装,就给人新奇感。

但是,撇开如此好的创意,看到其正品的售价(¥200 + )实在上我觉得买它太不值得了。同时,不出我预料的国内已经有不少仿品了,且开价都低于60。同时还声称拥有多种其它功能。后来,那些卖正品的卖家估计是自身利益受损,就想尽办法在商品描述中“诋毁”那些山寨货。我觉得最经典的一句是:“那些仿品罐子还允许随意切换黄色或者蓝色的光线,这个主意看似很妙,实则很糟糕。要知道这是一个存储阳光的罐子,不是地摊上的变色灯……”原文大致如此,看得我实在觉得好笑...

好了,不胡扯了。与其花大价钱买这个玻璃罐,还不如自己做一个吧。实用价值还是有一点的,比如当小夜灯。于是,我花了2个周末作了2个山寨版Sunjar:

白天将它们至于阳光处(阳台上即可),到了晚上(光线变暗时),它们就开始发光了:

像不像Diablo里边的Mana药剂瓶...

 以上便是这山寨Sunjar的效果。自认为很不错。Sunjar这样优秀的创意,再加之自己DIY,其中的乐趣绝对要比在Taobao上花大价钱买一个好!同时,我认为它的电气特性要远远高于那些200多地“正规军”。下面我主要介绍制作过程以及原理和成本与性能分析。欢迎各位仿制,此为开源硬件项目。

原理和性能

Sunjar其实原理十分简单,就是一个太阳能储能装置+LED。或者说就是一个太阳能灯。不过实际作起来,并不是简单的将光伏电池、充电电池与LED接在一起如此简单。需要考虑几个问题:

  1. 玻璃罐限制了太阳能电池的功率,输出电压也不高
  2. 需要有光控电路控制LED仅在夜间发光

一般能装进玻璃罐的太阳能电池板一般开路电压都在1.5-5V左右,且短路电流一般不会超过200mA。同时考虑成本因素,一般3-4V 40-180mA的太阳能电池板是比较合理的选择。同时这里的数值是需要在室外晴天阳光照射下才能实现的。同时单晶硅或者多晶硅太阳能电池的弱光性差,在阴天和市内基本就不会有什么电流了。因此这样的配置下,充电电池一般考虑使用单节或双节的(1.2-2.4V)。这样的选择能确保在白天大多数情况下,太阳能电池输出的能量能尽可能充入电池。

但一般LED都需要2V以上电压驱动,尤其是蓝色和白色LED需要的驱动电压更高,即使2.4V的电压下白色LED的发光亮度也不高。因此很有必要设计驱动LED用的升压电路。将LED端的电压提升到3-5V。

对于上述第二个问题很好理解,实现起来就是一个简单的开关电路。

下面是本山寨Sunjar采用的电路图:

该电路并不复杂,所用元件也很少,且基本都能从已有的废旧设备上拆下。这里我就简要的介绍下原理,后文会提到材料的来源和选择问题。

该电路主要分为2部分,一为驱动LED的升压电路,它可以整体上看作一个负载。当图中9012三极管集电极上施加0.6-3V的电压时,图中的8050以及电感构成了一个振荡电路,通过电磁感应会在输出端(LED两侧)产生峰值约为5V的脉冲电压。经过电解电容的滤波可近似看成直流。此时驱动LED将得到耀眼的光线。足以驱动玻璃罐发光。

电路另一部分为光控电路,其主要靠两个9013管的饱和/截至特性构成了非门,并经过末端的9012驱动升压电路工作。

经我测量,在使用单节镍氢电池(1.2V)供电时,电池出的输出电流在35mA。如果使用600mAh的充电电池供电的话,大致可以在整个晚上持续发光了。电路中采用了最高4V-180mA输出的单晶硅太阳能电池。虽然理论上存在将电池过充的风险。但是考虑到白天日照是不持续且不稳定的。因此该风险其实大部分情况是不存在的。且较高功率的太阳能电池也允许在室内将充电电池充满,并不一定需要在阳光下暴晒。可以说如此的山寨Sunjar性能应当是很强悍的。

成本、选材与制作

这里先介绍选材的问题。我想大部分人手头是不会留有什么元件盒这类东西的,因此这里我主要介绍如何从身边废弃物中取出有用的元件来制作电路。

首先是太阳能电池板,该组件直接关系到Sunjar的性能,前文已经提到了,我使用的是4V/180mA的单晶圆形太阳能电池,直径为80mm。采用的是压层封装,寿命在10-15年。太阳能电池板很多时候只能自己购买。目前taobao上卖太阳能电池板的商家十分多。要挑选自己合适的太阳能板是很方便的,这里要注意的是应当注重其寿命以及输出电流。我购买的单片价格约为¥9。如果不在乎寿命,使用滴胶封装的板子,价格应当会很便宜。

其次是充电电池,因为LED耗电并不好,一般选用600mAh的镍氢电池即可。没必要使用高容量的。我采用了GP AAA的600mAh镍氢电池。如果使用锂电池要注意充电电路,避免过充爆炸。

其次是电路中电感用到的磁芯,我推荐用环形的磁芯。也可用柱状的。环形的磁芯其实很好找,可以从废弃的电子镇流器或者节能灯灯泡底座(需要拆除)取出。然后使用0.5mm的漆包线或者单股导线分别绕9匝以及15匝。如果没有环形的磁芯,也可采用中波收音机内的磁棒。

上图中绕有漆包线的黑色环就是磁环

白色部分为用收音机磁棒天线制作的电感

其余元件基本都能从电子玩具废旧的电子设备里找到。或者可以替代。图中第一级9013集级处的可变电阻的目的是调节光控电路的灵敏度,也可忽略该电阻。

LED只要选用自己喜欢的颜色即可,不过最好采用高亮度,散色类型的。

如果能顺利搞到这些材料,细心的焊接好基本就能工作了。这里就不介绍元器件的常识了。

那么实在不想或者不会焊接电路怎么办?这里有2个办法:

  1. 其中的升压电路可以从地摊买到的单节电池驱动的LED手电,或者那种用单节五号电驱动的手机应急充电器中拆出。效果是一样的。
  2. 可以在taobao购买一个草坪太阳能灯,将所有电路拆出。

其实,如果你选择了第二个方案,其成本已经高出直接购买一个山寨版Sunjar了。但DIY的乐趣还是很值得的。

我先是做了一个原形电路来验证这个电路图,十分的原始,没有用PCB板,完全架空焊接。且用了2节充电电池供电/储能,因此驱动的LED比较亮。之后又在万用PCB上作了一个“精美版”,采用单节电池供电/储能。

对于罐子的选择,为了充分发挥山寨本色,外形上要和正版的类似。我用了宜家中卖的那种玻璃罐。其内径也正好是80mm。正好将太阳能板装入。不过宜家的罐子是全透明的,最好在内壁贴上磨砂纸这类的实现漫反射效果。

好了,下面就算算材料成本。

一个宜家的玻璃罐 ¥11

太阳能电池板 ¥9

充电电池 ¥10

电路部分 ¥0-10 (如果完全废物利用,就不算成本了)

这样算来总共花费还是很低的,虽然做工可能没有正品精美(其实有本事完全可以超越),但是性能上是远远超过正品的。并且我怀疑市面上销售的Sunjar无论是否正品,都采用的是滴胶工艺的太阳能电池,其寿命一般只有2-3年。进一步说,DIY的乐趣绝对不是花钱能买来的。如果做的很好拿去送人也很有面子(骗小姑娘?)。

如果你也对此感兴趣,欢迎仿制,有什么问题也欢迎交流。

topic:开发人员眼中的RIA,基于Flash实现

请点击文章标题进入正文以下载附加信息

前不久因为不少朋友对这个主题感兴趣,就在公司组里做了这个topic。主要从软件开发人员的角度来介绍flash的最新技术以及当今一些新兴的RIA应用。

整个topic主要分为下面几个部分:

1. RIA的介绍,当前状况

2. Flash的起源,内部运作模式,AVM2虚拟机构架

3. Flash10的最新应用:Pixel Blender以及3D渲染支持以及其意义

4. AS1/2/3语法比较,AIR构架

5. OpenSource Flash,Flex sdk与FD3

6. Flash和Silverlight的比较

7. Demos. 基于FlArtoolkits库的演示、现场演示制作音乐可视化特效、编译Flash实现的人脸识别程序

 

这里就把当时做topic用的ppt以及一些demo代码公布出来,其中那个音乐可视化特效会在后面花些篇幅解释下。其实我很久没接触AS3.0的东西了,很多数据和资料也是看了相关文献得到的,如果有错误或者遗漏,希望谅解,也欢迎给出纠正。

下面贴一些该topic ppt截图:

 

 

包含的Demo介绍

1. Flartoolkits 的应用

不得不承认现在AS3.0在JIT的帮助下性能的确提高了很多。以至于处理一些简单的CV都可以了。FlArtoolkits是一个基于Flash实现的artoolkits(主页介绍)库。在目前主流的计算机配置下,使用摄像头配合浏览器任何人都可以进行虚拟现实应用。这次介绍了一个Flash的虚拟鼓的应用,如下图。有摄像头的朋友可以直接去给出的链接中亲自体验。不过之前需要打印marker到一张A4纸上。大致意思就是将虚拟的3d物件影射到现实世界中,并且能和现实世界产生些“互动”。

上图以及该DEMO来源:http://www.squidder.com/2009/03/03/augmented-reality-drum-kit/

FlArtoolkit和上面这个demo都是开源的。

2. 音乐频谱的视觉化效果器

这个是我花了1个小时写的,演示了提取当前声音输出FFT频谱的功能。程序也比较简单,100行代码。比较适合新手了解Flex sdk以及FD3的使用。另外要说明的是该demo附带的音乐出自我表弟Somnia之手的WayOutWest-Melt,给他做下宣传,呵呵。

Linux下的语音天气预报脚本

请点击文章标题进入正文下载代码

这是最近我刚在家里部署的一个程序,主要功能就是在每天的特定时间(7:30 以及 18:30 )计算机将自动用中文人声朗读出当天以及后一天的天气情况/预报。天气预报的信息由程序采集自中国气象网(weather.com.cn)。如果你对此感兴趣,不妨了解下这篇文章。

其实类似的应用网上应该也不少,我完成这个应用其实大部分精力也并不是花在天气预报的采集上。而是解决如何将Windows的TTS引擎(MS SAPI)“移植”到Linux上,以及编写相关的服务框架程序。同时,这个应用实际上只是我之前提过的智能化家庭系统(IHES)的一个小应用,所以这次也会连带着发布ihes framework的一些代码(比较简陋,看过算过,哈哈)。在给出具体的程序代码之前,我将一步步介绍其中的一些细节问题,以便有兴趣的人自己实现类似的功能。

1.天气预报的抓取

前文已经提到,我使用的是weather.com.cn的数据。实际上这部分工作是通过一个bash script来完成的。从该网站抓取并提取我们需要的天气信息的一个难点是如何从内容繁多的html代码中有效的筛选我们要的内容。这里我偷了下懒,通过观察他们网站,我发现其wap版本网站内容简单,特别适合抓取:http://wap.weather.com.cn/wap/

基本除了我们需要的天气情况外,只有写简单的关于信息,而且主要都使用了文字。这里以我家所在地:上海松江为例,分析信息提取过程:

该网站wap版不同城市以及预报范围的组织很简单,仅仅通过url地址来标示,比如上海松江24小时(当天)的预报信息页面地址为:http://wap.weather.com.cn/wap/58462/h24/ 而对应的48小时天气预报(第二天)地址为:http://wap.weather.com.cn/wap/58462/h48/ 。很明显,前面的58462应当为地区的区域代码,而预报范围就是后面的h{24|48|...}。因此,实现当天以及第二天的预报提取,只要抓取这2个地址即可。

采用curl工具抓取网页

对于还不熟悉linux环境的朋友,可以在shell里面输入man curl来参看该命令相关信息。直接通过curl即可将对应html输出到stdout。

$curl http://wap.weather.com.cn/wap/58462/h24/
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="
http://www.w3.org/1999/xhtml" xml:lang="utf-8">
<head>
<title>24小时[松江]城市天气详情</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
...

接下来要做的就是仅提取出我们需要的预报信息,比如:

2009年3月15日 星期天:
[农历二月十九]:
松江  :
天气:晴 :
气温:17度到4度:
风向风力:西南风4-5级转3-4级:
紫外线指数:中等:

我做的处理首先是过滤掉所有html标签,观察curl抓取的html代码可以发现我们需要的信息没有被html tag包含,经过这一步处理,输出的文本中含有可读文字了。接下来需要将空白行去除。最后仅提取我们需要的文本所在的其实行以及终止行即可。这里采用sed过滤。这样一来,最终的处理命令为:

curl -s http://wap.weather.com.cn/wap/58462/h24/ | sed  's/<[^<]*>//g' |

sed 's/^M//g' | sed '/^[ ]*$/d' | sed 's/^.*$/&:g' | sed -n '3,9p'

这样便可得到上面要求的文本输出了。

2.Linux下部署SAPI以及TTS引擎

一定要采用SAPI主要还是因为linux下面我没找到原生的中文TTS库。因此只好想办法利用Windows下面的资源了。办法其实也很简单,用wine... 这里所说的部署,是指同样通过wine运行自己编写的windows程序调用部署在linux下的tts engine来进行朗读。实际上就是进行SAPI com组件以及需要的tts engine com组件的注册工作。这里有一个偷懒的办法:http://www.linuxdiyf.com/viewarticle.php?id=121686

接下来要做的其实就和windows下一样了,打开VC写一段SAPI的调用程序吧...

不过其实问题要复杂些,存在两个困难:

  1. 该windows程序如何与原生的linux程序/脚本交互(基于wine)
  2. SAPI依赖窗口消息,需要X-windows环境

可能对一部分人第二个并不是什么问题,不过我目前家里用作服务器的机器配置比较老,为节省资源平时完全禁用了XServer。我又没心思去修改wine来解决这个问题,所以XServer是必须启动的了,那么需要将他的资源消耗尽可能减少。而对于第一个问题,我的解决办法是将TTS发音功能做成一个C/S构架的体系。提供一个./readit的命令,该命令为linux的native程序,readit将需要朗读的文本用tcp报文发送给基于windows(wine)的server程序完成真正的合成朗读。同时我发现每次加载/结束使用sapi的程序,所在的XServer的虚拟内存都会无故增加。因此C/S构架是的server常驻系统也避免了潜在的内存泄露。还有一个好处就是在局域网内任何机器都可以调用该TTS功能。具体的实现这里就不给出了,有兴趣的可以去看源代码。文末给出了readit的linux/win32版本。我的实现中,readit支持如下2种方式调用:

./readit <Text to read>

echo "Text to read by pipe" | ./readit

后者的好处在于能够朗读超过命令行参数长度限制的文本,同时能很好的结合前面介绍的脚本。Linux需要终端设置为UTF-8编码。

对于TTS engine的选择这里就不介绍了,大家选择比较合适的版本即可(Windows自带的那个中文男声其实不怎么样),我采用了上次eArts中运用的TTS引擎。

3.部署

在上面几个问题解决后,就是部署问题了,我把天气预报获取的脚本抽象成命令GetWeather( 24 | 48 )。要朗读明天的天气,采用命令

./GetWeather 48 | readit

即可。在运行该命令前要确保我们的TTS server已经启动了。因为Server部分依赖于Wine和XServer。这里用下面命令来完成Server的加载:

X :3 -ac &

sleep 60
export DISPLAY=":3" && wine win_voice.exe  1>/dev/null 2>&1 &

其中win_voice.exe就是TTS server。可以在开机时配置该脚本。不过要注意脚本运行的当前用户要和部署TTS时,wine所在的用户要一致。

公布个我自己用的备忘录/日记系统

早在去年3月就打算写一个作为我记录日记以及当作备忘录的东西。同时又希望能通过手机访问,不希望拥有过复杂的功能。于是去年9月份左右用asp写了下面这个日志管理系统:

 

 

虽然功能很简陋,不过自己用着还行。主要有下面几个功能:

1. 支持TODO:关键字的高亮显示

2. 支持*strong*, #URL#的解析

3. 按照工作日跟踪遗漏的日志,会给出提示要求记录

4. 自动按季度进行日志存档

5. 允许创建多个日志并分别存储

6. 数据存储为xml形式

 

同时,如果希望一次性记录不同日期的日志,可以在相应日志前加上日期,系统将自动识别:

[2009-02-01]

Log of this Date

[2009-02-03]

Log of that Date

功能介绍就到此为止,如果感兴趣并打算自己部署一个的话,直接将代码放到你希望的目录即可。不过如果打算记录私人信息的话最好加上权限访问。公布的版本中是没有密码保护的。还有要澄清的是上图画面不是我正在记录的日志,是为了示意做的。

至于源代码,风格很糟糕,而且还是JS和VBS混合编程。所以关于代码就别抱怨了。呵呵。不过能帮我做些改进的话还是很感谢。

我自己基本上每天都会用这个系统写当天的日志以及做一些摘录、点子等。感觉还是很好用的。同时通过手机访问效果也很好。

说实话有了这个工具自己生活状态改变了不少,以前一直觉得活得漫无目的。后来想想大概是自己定的计划没有坚持一直时刻对照和反省。同时每天没有很好的进行当日的总结和第二天的计划。其实这些也不是因为一个工具就改变的。但毕竟有了这样一个工具,同时也坚持保持这样一种习惯,感觉还是很不错的。

人生就是要时刻提醒自己,也要时常做些记录和总结。好了,扯淡扯远了。

我的blog似乎冷清了不少,偶尔发写文章貌似回复的也不多。看来自己太堕落了,以后要重新培养时常写blog的习惯。争取本周再发布两篇文章吧,应该都会比这篇有实际内容...

差点忘记了,本文提到的系统的代码下载地址:http://www.csksoft.net/data/Log_Tracer.rar

发下牢骚

感觉这两周里一直被ADSL的事情烦着。先是住处ADSL线路被电信无故切断,报修后维修人员竟然花了2天才修好。接着是家里ADSL线路被莫名限速至512kbps(一年前还是3Mbps)。上周末无奈去松江电信办理带有2M带宽的e8套餐。却被告知之前已经过期的IPTV业务无法取消,工作人员给出的理由是“已经自动帮我办理20元新套餐,且无法取消套餐”。这和强盗有何区别...(同时,IPTV早在2个月前无法使用了)。

不过早对电信的低劣服务有所耳闻,也不去多想了。谁知今天家里网络从14:00开始无法链接。可能你要问这又和问题?

关键在于,目前基本我左右的数据和资料都是通过家里的中央服务器管理的(所有代码的SVN,个人日志,档案信息)。现在断网基本可以宣告周末前我日常工作要瘫痪了。

看来还是不能太依赖计算机网络了。曾听过一个说法,人类文明越是发达,该文明也将会已越快的速度灭亡。想想也有道理,现在虽然建立了个RAID1的数据仓库,只要一把火、强盗的一榔头、电信“不小心”断了下网、小偷一光顾,便什么都没了。看来只能怪自己。如果自己活得落后点,也不会去用啥ADSL,自然也没那电信的事情了。

牢骚到此为止。想了解最近我有啥进展的朋友,请期待近阶段将发布的文章。

Linux下监控的Santak MT-500pro系列UPS信息

程序源代码请点击文章标题进入完整阅读模式获取

这段时间一直在"筹建"以前提到过的智能化家庭系统(IHES)。前不久购买并配置了500G的RAID 1存储阵列服务器,为了保证数据安全,同时又购买了Santak MT-500pro智能型UPS。

这里说智能型可能不是很专业,其实就是说该UPS提供了相关的接口允许从服务器上读取出UPS的相关状态信息。比如:

外部交流供电电压、负载端电压、负载功率、蓄电池电压等信息

不过,其实最需要关心的就是希望能够在发生断电情况下ups能即时告知。以便服务器机组能在UPS逆变供电实效前自动关机。毕竟不可能让我24小时监控家中服务器状况。

以上可以算是背景介绍了,现在面临的问题是,这个品牌的UPS虽然在官方提供了相关的监控和管理软件Winpower。不过使用后,存在许多不足:

  1. 程序采用java (1.14) 开发,甚至连与ups通讯的部分也完全采用java
  2. 该程序实现上十分低效,监控目模块间通讯需要采用java rmi
  3. 没有命令行接口,可制订性差

当然这些问题不是所有人都会抱怨的,不过目前考虑到家里的中央服务器还采用P3 CPU, 512mb内存,以及没有安装X Server环境。纯命令行下WinPower完全无法工作。同时采用java的实现虽然从厂家角度降低了porting成本,不过绝对是一个低效的实现。我测试过仅仅开启了Winpower中的监控模块,java进程就消耗了近20Mb的资源。同时还不考虑低效的实现(我逆向工程过其class文件,实现很糟糕)。仅仅为了监控ups信息而做出如此的资源消耗实在不值得。

另一方面,如果选用APC品牌的UPS,linux下则有现成的Apcupsd。当然东西都买下了,后悔也没用。于是,我实现一个满足我需求的ups监控程序。这里提供一个原形程序的代码以及整个整个制作过程的叙述。支持的型号是Santak MT-500pro。不过我相信通过源代码以及按照我的制作思路,其他型号也很容易做出对应的程序。原形程序是纯命令行的,很容易用bash shell写一个断电后一定时间内控制服务器自动关机的daemon脚本。

下面是制作介绍部分,没兴趣看得话代码在文章末尾给出了,请自行编译使用。Windows版本的也可以很容易修改而成。

MT-500pro的相关信息:

毕竟不是给人家做广告,这里什么技术参数就不给了。

该UPS采用串口(COM)提供自身的状态信息。串口的通讯采用2400bps速率,目前已知的状态信息有如下2种形式:

  • "#220.0 004 12.00 50.0\r"
  • "(231.4 231.0 231.4 011 50.1 13.9 25.0 00001001\r"

这里先暂时不介绍相关的通讯协议。在上面的状态信息中,第一条应当为该UPS的标准参数(即正常情况下理论值)。这几个数据每次都是固定不变的。其含义依次为:

<输出(或输出电压)> <未知> <蓄电池电压> <输出(或输入)频率>

而第二项则为当前UPS的实际数据,这也是我需要关心的内容。其可能含义依次为:

<外部电压> <内部电压(具体未知)> <输出电压> <负载率%> <电源工作频率(Hz)> <蓄电池电压> <UPS机内温度(摄氏度)> <状态标志>

这里需要对状态标志做下介绍,因为我在逆向分析时无法重现所有可能情况,这里只给出我知道的几个标志位:

00001001
|     +--- UPS输出关闭位
+--------- 外部供电失效位

虽然只知道2个标志位含义,不过我想应该足够了,最高位表示当前交流供电是否异常,如果为1就表示断电了。UPS输出关闭位有效则表示当前UPS没有工作。

知道这些格式信息后,下面的问题就是如何知道相关的请求代码,即通讯协议。

监听串口通讯:

我曾想过通过把Winpower逆向工程来研究通讯协议,毕竟java 1.5以前的class文件可以很容易被反汇编(应该说是反代码)。不过后来放弃了,这里就不多说了...

目前采用的办法是监听串口的通讯。这里介绍一个相对使用什么本机COM1与COM2对接等方法简单多得手段。在Windows平台下可以采用一款叫做HHD Free Serial Port Monitor的免费软件。或者Sysinternal上也提供了相关工具。他们都通过hook IOCTRL函数来截获COM的通讯内容。

使用这类工具,开启Winpower后,相关的通讯协议也一目了然。其实根本不能算协议,十分的简单:

 Request: 2009-2-7 20:00:19.95264 (+0.9013 seconds)

  46 0D                                             F.

 Answer: 2009-2-7 20:00:19.01264 (+0.0601 seconds)

  23 32 32 30 2E 30 20 30 30 34 20 31 32 2E 30 30   #220.0 004 12.00
  20 35 30 2E 30 0D                                  50.0.

 Request: 2009-2-7 20:00:20.97364 (+0.8913 seconds)

  51 31 0D                                          Q1.

 Answer: 2009-2-7 20:00:20.03364 (+0.0601 seconds)

  28 32 32 35 2E 39 20 32 32 35 2E 39 20 30 30 30   (225.9 225.9 000
  2E 30 20 30 30 30 20 30 30 2E 30 20 31 33 2E 38   .0 000 00.0 13.8
  20 32 35 2E 30 20 30 30 30 30 31 30 31 31 0D       25.0 00001011.

 

因此,上面提到的2组信息分别对应的请求数据为:

"F\r"

"Q1\r"

Linux下的轻量级监控程序:

有了上面的分析结果后,很容易的就能自己编写一个监控程序。为了各位方便,我提供一个简单的原形程序。用法如下:

# ./upsread [port name]

如果忽略了port name,则默认采用/dev/ttyS0。 程序会先输出第一项UPS信息,然后以1秒为间隔打印出第二项状态信息,如:

./upsread
#220.0 004 12.00 50.0
(233.9 234.3 233.9 011 50.1 13.9 25.0 00001001
(234.3 233.9 234.3 011 50.1 13.8 25.0 00001001
(234.3 234.3 233.9 011 50.1 13.9 25.0 00001001
(234.3 234.3 234.3 011 50.1 13.9 25.0 00001001

 

FlashSite V2++

很久没有更新Blog了。或许让各位觉得我不再维护这个网站,其实不然。

虽然一直没有写Blog,不过我一直在对这个网站做修改,尤其是07年出发布的Flash Site V2。当时因为经历了近2年的开发周期,因此十分急切的想把这个网站发布出来。同时也因为那时想尽快抽出时间忙学习的事情,在开发的后期有点马虎。现在看来当时发布的版本存在许多问题与不足。这些问题随着发布后使用过程中慢慢暴露,直到我也觉得忍无可忍的地步。因此从去年开始我就开始一直计划着对这个网站(确切地说是网站的运行库ReformCore)进行大规模的改善。而本文就是对之前一段时间内我对这个网站所作的修改的总结。当然,那些一直希望了解该网站实现细节或者想得到源代码的朋友也可以关注此文,因为我现在开始计划把ReformCore的部分组件开放:OpenReformCore。

直观起见,先给个目前网站的截图:

网站截图

图:改善后的SiteV2

这次修改后的版本暂称为Site V2++。主要增加了网站整体的执行效率,同时改善了浏览体验。对ReformCore的一些Bug做了修正。本文后续部分将针对部分修改部分介绍。文末将介绍这次增加的一个插件ReformUI Spy以及OpenReformCore的一些设想。

网站部分的改善

07年网站发布时,有不少批评针对当时网站背景声音过于嘈杂,同时也反映动画表现不流畅的。同时当时时间比较紧张,没有对一些细节部分处理好,比如菜单部分那些图标一直在使用着这个网站原形期间临时选取的那些图片。也有人批评说网站过于眩目。

目前改善的版本已经重新设计了首页和菜单的图标部分。同时也更换了背景图片以及背景音效。至少目前在我看来,应该不会给浏览者带来嘈杂感了,同时网站风格上也比较统一。至于批评说网站眩目花哨的,不好意思,目前看来仍旧很花哨。不过我已经将一些不必要的成分去除了,比如整个网站只有一张背景图以及一套背景音乐。

这次新采用的背景音乐已经不是之前很俗套的循环音效,循环的音效无论如何都会给人带来烦躁感。至于新背景音乐的效果还是各位亲感受下吧。网站在设计上从起初就以到背景、音乐等修饰手段不得干扰正常浏览为原则。所以音乐和背景图片与网站的浏览是不同步的,换句话说,在网速缓慢的情况下,访客可以先进行网站内容的浏览,而背景图片和音乐会在后台加载完毕后才得以呈现。因此如果想体验新的音效的话可能需要等待一段时间。

对于网站的执行效率问题,其实就是针对Flash渲染效率的优化问题,这次也有很大的改善。至少目前在我看来比以前整个网站渲染速度提升了30%-40%。同时,以前进入网站是要经历的2次“嘟嘟”声的阶段也被合并在一起。

对于用户体验的提升方面,这次的修改还增加了网站高度会随浏览内容自动修正以及网站浏览的资料将与URL地址同步等功能。URL地址同步其实就是BackButton,具体效果可以尝试如下链接:http://www.csksoft.net/index_mainsite.asp#SubView%3D4%26SubSection%3Dlab%26ViewPos%3D1%26ViewType%3D2%26UID%3Dmainsite.site_data.ID75

其次是修正了网站对Webkit(如Chrome)以及Opera浏览器的兼容性。不过代价是在这2类浏览器下网站将无法使用Backbutton。

剩下的修改部分还有许多,不过基本都是一些小改动。这里还要提一下现在的ReformScript终端窗口可以改变大小了!同时支持脚本导出功能。这点将在后面的ReformCore改善部分介绍。

ReformCore的改善

ReformCore中主要对UI组件进行了大幅修改,其中主要针对XWindow部分,即类似ReformScript终端的这些窗口。

  1. 增加了Resize功能
  2. 改善了窗口层次的管理,增加了窗口聚焦的特征。

还有一些其它的UI修改,这里就不具体介绍了。如果今后ReformCore开源了,这些部分也会包含。

图:增加了动态尺寸改变特性的XWindow,以及其他的UI改动

图:修正了层级管理以及增加了窗口焦点特性

图中可以看出XWindow已经越来越像是个OS的UI了。不过毕竟有点重新发明轮子的味道,但是Flash下还真的没有啥捷径。

另外,对ReformCore的后台代码修改也展了很大的部分,不过这部分因为难以用直观的图像形式表达,就不再具体涉及。不过可以提一下开发的用于Puxos管理的Puxos Explorer。

图:Puxos Explorer

Puxos Explorer属于网站的后台管理部分,同时我目前还没有找到其他人会对此工具感兴趣的理由,因此这个工具就不公开了。Puxos因为采用了XML来保存数据,本身自然就是以树状存储的。所以可以套用文件系统的概念,自然要做UI的管理器的话,就会做成Windows Explorer那样。当然,我做的很简单...

ReformUI Spy

这次更新过程中顺便做了一个有用的小工具,ReformUI Spy。这个工具可以在网站的“创意与演示”板块找到。至于其用处,估计用过Microsoft Visual Studio中自带的Spy++的朋友应该可以猜到:用它可以察看当前Flash中任何MovieClip的信息!这个工具并非只能用于我的网站,任何AS2.0的Flash只要能够加载进此工具都可以工作。

 

 图:用ReformUI Spy 观察ReformScript窗口中TxtHolder组件的属性

 

图:鼠标拖动观察游标进行组件选取时的画面

不过因为Flash采用了sandbox的机制,不同域名下swf不能进行脚本级交互。所以想用这个工具做偷窥是不可能的了,不过用于自己作品的辅助调试应该还是大有帮助。另外,要偷窥我网站还是可以的:-)。

另一个好消息是这个工具是开源的,所以实现原理我就不说了,大家看代码。当然我相信肯定有Flash的高手已经知道这点用处。同时,为了将来开放ReformCore的考虑,这个工具的代码也可以作为ReformUI API使用的具体例子。

试用请点击:http://www.csksoft.net/index_mainsite.asp#SubView%3D4%26SubSection%3Dlab%26ViewPos%3D1%26ViewType%3D2%26UID%3Dmainsite.site_data.ID75

代码下载:http://www.csksoft.net/data/fla/reformSpy.rar

OpenReformCore

已经有不少朋友希望我公布网站全部或者部分的代码了。我也觉得有时候还是全部公布代码了比较好。毕竟如果能被其它人使用才是我工作价值的最好体现。不过考虑的下面的几个问题,我一直没有这么做:

  1. 网站自身安全性
  2. 坐享其成的使用或者盗用
  3. 本身的质量问题

对于网站自身安全性考虑应该比较好理解,尤其是后台部分。因为ReformCore还用来管理我个人信息,如果公布了代码可能会造成自身的安全隐患。我承认ReformCore安全性不好。同时,如果只公布前台,可能有些地方的代码就不好理解了。

对于第二个考虑,我想我有时也做的不好。毕竟国内盗版软件大家天天用、平时抄作业、专门有网站公布各类代码给大家直接拿去用于各类用途。大家似乎觉得这些已经没有什么了。我不介意有人用这个网站的代码拿去赚钱。如果真那样,那真是我最大的荣幸。不过我看不惯那种坐享其成式的挪用和盗用。挪用:直接将网站原封不动的用于自己作品,或者仅仅改动文字和图片。盗用:声称是自己的。说起盗用,我还记得有人真的拿我之前做的高手挑战说是自己做的。不过也说明有人认可这个...可能是我心胸狭窄吧,不过我想我们平时习以为常的这些举动真的应该吗?

好了,现在说说OpenReformCore。上面已经说明了我的态度,所以今后要公布代码,一个原则就是公布出去的代码不可能直接编译后就运行。同时后台部分可能会不公布。不过这个主要是我觉的不好意思拿出手。现在外面都采用ASP.net了,我这代码还是ASP 3.0。而根据大部分人的反应,我想他们最感兴趣的应该是ReformUI部分。因此这部分代码会最早的公布。不过既然要公布,也不是说随便打包给出链接那样简单。那样不但对别人不负责,也是对自己不负责。所以还需要作一些额外的事:写注释、例子、帮助。当然,还有版权申明(应该说是分发许可申明)。至于时间安排上,我想说得是尽量。

 

好了,我认为已经把这次改动部分值得介绍的部分写完了。总体来说,这次改动的着重点就是使得Site V2能够搞好的派上用处:发布和展示我作品的平台。希望这次改动能给浏览者带来较好的体验。同时,我又一次注意到自己不但不是学设计出生,也没有这方面天赋。既然ReformCore本质不是Site V2这个Flash网站,那么希望这次修改也能使我停止长达2年+这2个月的Flash制作中。希望今后不要再被人理解成我是专作Flash的了...

这次网站的改善也让我重新对我这个网站(www.csksoft.net)的用途有了新的理解。今后Site V2的主要职责对外将用于我作品的发布和展示,同时借助其RIA的特性,一些新的想法、需要多媒体借助的部分也将使用Site V2。而Blog将发布平时写的一些文章。包括会在各类不大不小论坛灌水的长篇大论或者平时的胡思乱想。有人觉得这2年Blog文章更新满了是啥啥的表现,其实这是不正常的。不过的确不能像以前想说什么说什么了...

eArts'08中作品的介绍

点击文章标题察看全部内容。

作品名称:你,或者你们,或者我们,或者我

创作时间:2008

展览: Shanghai eArts Festival 2008

展区:蓄与化——青年新媒体艺术作品展

展览时间:2008-10-18 ~ 2008-11-08
官方网站介绍页面:http://www.shearts.org/index.php/?p=591&lang=zh-cn (可能会失效)

Flv视频播放:

局部图案

 

全景图1

全景图2

欢迎来参观本届eArts Shanghai中我的艺术作品

经历了近1个月的神秘倒计时,或许大家已经猜出来了,不过还是要正式申明。

 

很荣幸在本届上海电子艺术节( eArts Shanghai Festivial )中有我的作品。 下面是作品名和相关介绍:

 

《你,或者你们,或者我们,或者我》[参展作品]


作品名称:《你,或者你们,或者我们,或者我》
艺术家: 何为&陈士凯
作品类型: 网络信息装置
创作时间:2008年

作品概念:
搜索引擎作为现代网络最普遍的信息工具,起着便捷沟通用户与全网络的作用。如果我们将用户使用搜索引擎的过程定义为一种交流方式。那么可以说,用户由发问到引擎反馈,以机器为中介为反馈完成了整个问答的交流过程。用户在网络中的自行创作被捕捉作为引擎反馈的语素。为达到更优的反馈效果,用户的操作行为在无意间为引擎引用为缔造新反馈语序的依据。对话获取者是用户,而对话的创作革新者恰又是用户本身是如此应用反复类推的结果。看似借助机器和群体智慧的对话在用户操作及机器规则中完成的选择性的对话恰成为一种无选择性的自我对话。
作品以真实接入的社区搜索关键词为根基。试图探讨对蓄智慧一身的网络及搜寻演化可能及关于信息用户自体身份的迷失。跟踪的数据采用每前一天相应时段的信息以保证正常运行。

eArts将于2008-10-18,对,就是今天开展。下面是蓄与化——青年新媒体艺术作品展区的地址信息:

“蓄与化——青年新媒体艺术作品展”

活动时间:2008年10月18日 ~ 11月8日
活动地点:创智天地-创智天地广场

 

eArts官方网站:http://www.shearts.org/index.php/?page_id=15

 

最近为此准备已经好久没正常休息了,今天恐怕也没法好好睡觉。还是不多说了。如果对此感兴趣欢迎前来捧场~ 至于作品,我觉得质量上不会让各位失望的:-)

 

好了,以后有时间再好好总结下巴

分页:[«]6[7][8][9][10][11][12][13][14][15][16][17][18][19][20][»]

日历

<< 2015-6 >>

Sun

Mon

Tue

Wed

Thu

Fri

Sat

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

Copyright Shikai Chen 2000-2012. Powered By Z-Blog(CSK Modified)