Profil de LinhaolinhaoxuPhotosBlogListes Outils Aide

Blog


17 septembre

Silverlight研究之 在Isolated Storage中存储BitmapImage

      这几天继续拾起SL来进行Web监控平台的技术探索。基本上摸索的差不多了,下面将分几篇来将其中的一些技术记录下来,也算跟跟风。

      所谓Isolated Storage就是Silverlight中的安全沙箱。为了保证Sliverlight的安全,同时为了一些应用能够做简单的本地存储,所以也就加了进来,就像Applet。不过其实Isolated Storage其实是将文件转移存储到了LocalSettings中的Application Data中了。其实如果SL不提供这个功能我也会采用类似的技术来化解大量地图数据传输所带来的网络压力。话题扯远点,目前要做的Web Gis系统为了提高传输效率拟采用3个技术:1>压缩传输;2>本地存储;3>Zooming。压缩传输比较简单,准备采用rar方式。下面就专门介绍用SL的IS来进行图片的本地存储了。代码贴如下:

public void OnPageLoaded(object sender, RoutedEventArgs e)
        {

            client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(OnProgressChanged);
            client.OpenReadCompleted += new OpenReadCompletedEventHandler(OpenReadCompleted);
        }

public void OnProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            tb.Text = String.Format("Progress of {0}%", e.ProgressPercentage);
        }

public void OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
       {

           using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication())
           {

               Int64 spaceToAdd = e.Result.Length;
               Int64 curAvail = isoStore.AvailableFreeSpace;
               if (curAvail < spaceToAdd)
               {
                   if (!isoStore.IncreaseQuotaTo(isoStore.Quota + spaceToAdd))
                   {
                       throw new Exception("Can't store the image.");
                   }
               }
               if(!isoStore.DirectoryExists("img"))
               {
                   isoStore.CreateDirectory("img");
               }

               string filePath = System.IO.Path.Combine("img", string.Format("{0}.jpg", picName));
               using (IsolatedStorageFileStream isoStream = new IsolatedStorageFileStream(filePath, FileMode.Create, isoStore))
               {                  
                   byte[] content = new byte[e.Result.Length];
                   e.Result.Read(content, 0, content.Length);
                   isoStream.Write(content, 0, content.Length);
                   isoStream.Flush();
                }
           }
      }

private void btnTest_Click(object sender, RoutedEventArgs e)
{
    if(e != null)
    {
        picName = 0;
    }

    string filePath = System.IO.Path.Combine("img", string.Format("{0}.jpg", picName));
    using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication())
    {
        if (picName == 3)
        {
            return;
        }
        using (IsolatedStorageFileStream isoStream = isoStore.OpenFile(filePath, FileMode.Open))
        {
            BitmapImage bmp = new BitmapImage();
            bmp.SetSource(isoStream);
            Pic.Source = bmp;
         }
    }
    picName++;
    btnTest_Click(this, null);

}
1 juillet

北斗卫星导航系统简介

从事北斗2年的时间了,不写点儿东西都觉得对不住自己了,呵呵。近几年北斗卫星导航系统(北斗一号)的应用得到了很大的发展,无论是军用还是民用,最为大家所熟知的就是前一阶段的抗震救灾中的应用...

1简介:

      北斗卫星导航系统是由中国建立的区域导航定位系统。该系统由三颗(两颗工作卫卫星发射星、一颗备用卫星)北斗定位卫星(北斗一号)、地面控制中心为主的地面部份、北斗用户终端三部分组成。北斗定位系统可向用户提供全天候、二十四小时的即时定位服务,授时精度可达100ns(单向授时)和20ns(双向授时),其定位精度与GPS相当(有点吹牛,也取决与各种外部条件)。北斗一号导航定位卫星由中国空间技术研究院研究制造,目前已经发射了4个卫星,发射时间为:2000年10月31日;2000年12月21日;2003年5月25日,2007年2月2日。

      北斗卫星导航系统采用三球交汇的原理进行定位,服务区域为中国及周边国家和地区(70°~145°(E) ,5°~55°(N)),它可以在服务区域内任何时间、任何地点,为用户确定其所在的位置信息 ,同时提供双向短报文通信和精密授时服务。

覆盖范围

      北斗一号卫星定位系统的英文简称为BD,在ITU(国际电信联合会)登记的无线电频段为L波段(发射)和S波段(接收)。  北斗二代卫星定位系统的英文为Compass(即指南针),在ITU登记的无线电频段为L波段。
      北斗一号系统的基本功能包括:定位、通信(短消息)和授时。

2定位原理:三球交汇

      北斗一号卫星定位系统采用三球交汇的定位原理,具体如右图所示。系统的工作过程是:首先由中心控制系统向卫星1和卫星2同时发送询问信号,经卫星转发器向服务区内的用户广播。用户响应其中一颗卫星的询问信号,并同时向两颗卫星发送响应信号,经卫星转发回中心控制系统。中心控制系统接收并解调用户发来的信号,然后根据用的申请服务内容进行相应的数据处理。 对定位申请,中心控制系统测出两个时间延迟:即从中心控制系统发出询问信号,经某一颗卫星转发到达用户,用户发出定位响应信号,经同一颗卫星转发回中心控制系统的延迟;和从中心控制发出询问信号,经上述同一卫星到达用户,用户发出响应信号,经另一颗卫星转发回中心控制系统的延迟。由于中心控制系统和两颗卫星的位置均是已知的,因此由上面两个延迟量可以算出用户到第一颗卫星的距离,以及用户到两颗卫星距离之和,从而知道用户处于一个以第一颗卫星为球心的一个球面,和以两颗卫星为焦点的椭球面之间的交线上。另外中心控制系统从存储在计算机内的数字化地形图查寻到用户高程值,又可知道用户出于某一与地球基准椭球面平行的椭球面上。从而中心控制系统可最终计算出用户所在点的三维坐标,这个坐标经加密由出站信号发送给用户。

3五大优势

1>同时具备定位与通讯功能,无需其他通讯系统支持;

2>覆盖中国及周边国家和地区,24小时全天候服务,无通讯盲区;

3>特别适合集团用户大范围监控与管理应用和数据采集用户数据传输应用;

4>融合北斗导航定位系统和卫星增强系统两大资源,提供更丰富的增值服务;

5>自主系统,高强度加密设计,安全、可靠、稳定,适合关键部门应用。

4和GPS的比较

1>覆盖范围:北斗导航系统是覆盖我国本土的区域导航系统。覆盖范围东经约70°一140°,北纬5°一55°。GPS是覆盖全球的全天候导航系统。能够确保地球上任何地点、任何时间能同时观测到6-9颗卫星(实际上最多能观测到11颗)。
2>卫星数量和轨道特性:北斗导航系统是在地球赤道平面上设置2颗地球同步卫星颗卫星的赤道角距约60°。GPS是在6个轨道平面上设置24颗卫星,轨道赤道倾角55°,轨道面赤道角距60°。航卫星为准同步轨道,绕地球一周11小时58分。
3>定位原理:北斗导航系统是主动式双向测距二维导航。地面中心控制系统解算,供用户三维定位数据。GPS是被动式伪码单向测距三维导航。由用户设备独立解算自位解算在那里而不是由用户设备完成的。为了弥补这种系统易损性,GPS正在发展星际横向数据链技术,使万一主控站被毁后GPS卫星可以独立运行。而北斗一号系统从原理上排除了这种可能性,一旦中心控制系统受损,系统就不能继续工作了。
4>实时性:“北斗一号”用户的定位申请要送回中心控制系统,中心控制系统解算出用户的三维位置数据之后再发回用户,其间要经过地球静止卫星走一个来回,再加上卫星转发,中心控制系统的处理,时间延迟就更长了,因此对于高速运动体,就加大了定位的误差。此外,北斗一号卫星导航系统也有一些自身的特点,其具备的短信通讯功能就是GPS所不具备的。

5适用领域
  由上所述特点,北斗一号导航系统特别适用于以下应用(民用):

1>通信量不大,定位频度不高的应用。

2>边远地区、山区等基础通信条件薄弱或可靠性不强的地区(如这次的地震地区)。

3>中、近海船舶定位、导航、通信。

4>安全要求高的应用(不受GPS,伽利略,格洛纳斯限制)。

12 juin

Web GIS 选型

今天终于将募投项目落实到人,我主要负责Web GIS的工作。总体的要求是“多、快、好、省”的完成任务。时间感觉倒不是很紧,再说前面也做了一些准备工作,故直接进入需求、选型阶段。Web GIS的总体做法无非采用GIS开发平台做二次开发或者自己从头来做,一般来说二次开发平台都是比较贵的,而且没什么技术含量,呵呵-_- 所以打算自己做。自己做也大概可选用3种技术:

1.ActiveX,可以从目前的C/S版上借鉴很多东西,从根本上来说也是C/S的。
2.一般Web技术,采用ASP.Net或者JavaEE,2年之前写过很多这种应用,有点不太想重走过去的路,况且有些性能上的要求要实现必须写很多javascript或者利用Ajax,工作量其实并不小。
3.RIA,用Flex/Flash或者SilverLight,没有仔细研究过Flex,两者应该半斤八两,比SL应该成熟一些。这两天主要看了看SL,也写了几个例子,觉得上手很快,并且开发很便利。尤其是SL2Beta2发布之后有了一些新的改进很优雅的解决了我的本地存储和出图问题,呵呵。要是在SL1或者Beta1的时候还真是不敢用。现在可以考虑放心大胆的先用着了,等Release版快出来吧。

11 juin

大规模位置数据存取、查询方案(Hercules)

前一阶段投标涉及到很严苛的性能指标,尤其是在位置数据存储、查询方面。目前做这些应用的厂家基本上都采用了主流的数据库,在相同的硬件环境下基本上速度不会差一个量级。前几天陈老大想自己做一个简易数据库,自己没太大把握,就拉我入伙了。很激动,因为经过几番细致讨论和计算,性能提高2个数量级没有太大问题。不过性能提升的前提是损失通用性,不过仔细分析了针对位置信息的消费类型也无非以下3种:

1.基于时间的位置查询
2.基于空间的位置查询
3.基于对象的位置查询

其他的应用基本上都延伸于这三种,故我们的大规模位置数据存取、查询方案的实施有了基本的前提。后面就是一轮一轮的设计、开发、测试的迭代了。截至今天基本完成,很优雅、很简洁也很快!今天也在监控软件的新增“出入港管理”上应用了该查询方式,效果很是不错。

小赞一下这个方案,也小赞一下和陈老大的敏捷过程实践,很爽!对了,这个方案软件我们将其命名为:Hercules。

23 mai

AIS系统简介

前一段时间进行了将AIS系统和北斗平台融合的工作,更加丰富了我们的产品和服务。从一开始接触AIS的时候就产生了浓厚的兴趣,也和客户以及一些专家一起讨论了很多的研发、实施的内容。先来一片总体介绍,后面将会陆续将一些技术整理出来发布。如果有同仁有做相关研究或者应用的欢迎沟通。

AIS(Automitic Identification System, 以下简称AIS),是一种新型的助航设备,可以及时传递、接收船舶对船舶、船舶对港口(基站)之间的安全、位置信息。AIS终端分为A、B两种,价钱和功能上有些差异。AIS—A系统集信息采集处理、无线电数据传输、地理信息系统于一体,能直接在AIS显示屏上“看到”周围航行船只的航行情况,并通过相关计算,了解本船与其他船只相遇的交会点,极其方便预测船只航行的动态,给船舶航行安全提供了有效的保障。国际海事组织已规定300总吨以上国际航线船只、500总吨以上国内航线船舶,所有客运船舶必须配备该设备,中国海事部门已要求以上船舶在2008年7月1日前全部配备完毕。目前浙江省在进行AIS-B系统测测试。

AIS使用甚高频(Very High Frequency,以下简称VHF)来传输,频段为156.025MHz-162.025MHz.采用TDMA(Time Division Multiply Access)的广播方式,每分钟可以发送2250个Message。

Message是AIS系统定义的一些消息,目前有20多个,表达了不同的含义,具体如下:

Message ID    Name 

1  Position report
2  Position report
3  Position report
4  Base station station
5  Static and voyage related data
6  Binary addressed message
7  Binary acknowledgement
8  Binary broadcast message
9  Standard SAR aircraft position report
10  UTC/date inquiry
11  UTC/date response
12  Addressed safety related message
13  Safety related acknowledgement
14  Safety related broadcast message
15  Interrogation
16  Assignment mode command
17  DGNSS broadcast binary message
18  Standard Class B equipment position report
19  Extended Class B equipment position report
20  Data link management message
21  Aids-to-navigation report
22  Channel management(6)
23  Group assignment command
24  Static data report
25  Single slot binary message
26   Multiple slot binary message with Communications State

下图为AIS的应用架构图: 船载终端采用GPS(或其他)定位,通过VHF发送位置、航程、报警信息等,陆地监控台站可以通过基站接收到附近(约50海里,和天气状况有关)的船舶的信息,可以进行监控。

系统架构

6 juin

Martin Fowler讲座也不怎么样

      今天去徐汇听了Martin Fowler的讲座,很是失望。传说中的大师居然在几百人面前用ruby写puts "Hello World!"这类的程序,真是关公玩铅笔刀。后来又在圆桌讨论上进行了Ruby以及极限编程的讨论,几个国内很活跃的开源领袖和软件工程专家的表现真是不敢恭维,憋足的很,平时牛气冲天的样子都没了。Martin当然还是兜售他那套极限编程了。不过林老师的一些说法还是很赞的,我从心底里面佩服和赞成。至于XP和UP,虽然两者并不是绝对的冲突,但是林老师的观点认为:中国目前的情况是不适合大规模搞XP的,因为美国经过了几十年的软件发展,也经历过很严苛的软件过程的历练,所以比较有'资本'来搞XP,中国很多的软件开发连成熟和严苛的过程阶段还没有经历过,盲目跟从是不对的。
 
      虽然Martin是带着商业上的目的来的,但是有一些观点还是拓宽了我们的视野的,比如谈到对“失败软件”的理解,对XP和UP的关系的解释以及UML和UP的关系的澄清等等。ruby也确实是蛮有生产力的语言,以前觉得有必要学一们类似的脚本语言,去年也看了一些python的书,写了些代码,不过说实话印象已经快淡忘了。后面的时间里面看看ruby还是不错的。也算不虚一听。
 
 
18 mai

BEA讲座归来

      为了今天的BEA Dev2DevDays2006,昨天都没有看欧冠的决赛。早上七点多就起来准备了,可惜天公不作美,下了一天的雨。尤其回来的时候顶着风、淋着雨,到寝室全身都快湿透了。
 
      第一次参加BEA的这种活动,一天下来大概都是讲用workshop studio来开发J2EE应用程序,当然都使用了一些时下比较流行的开源工具: structs, spring, hibernate,,最后讲了讲kodo,感觉还是蛮不错的。中间夹杂了AMD的一个64位产品的宣讲,具体的技术细节没怎么听懂,大概就是推销产品之类的吧。
 
      讲座的两位gg明显准备得很充分,内容也算浅显易懂,其实这种开发在HP的时候就差不多,所以基本上收获也没什么。不过还是看到了workshop studio以及kodo的强大之处,以后可以尝试着用用。中午的饭菜也不是很好,比起上次在oracle的OTS上差远了,也难怪,OTS主要是面向CIO和CTO的,而Dev2DevDays主要是面向Developers的,归结到两个字:阶级。
 
      回来的车上和章程gg以及张思博gg研究了一下所谓的精美礼品:T-Shirt。原来我们拿的时候都没有注意衣服的大小,结果我拿的是L,章程拿的是S,张思博M,于是我就和章程换了。没想到当章打开他的衣服的时候,发现小得可怜,基本上穿不了,然后大家狂骂BEA。不过最后还是和章程换了过来。。哈哈,不厚道了一把。
 
     
25 décembre

好像近期很少写技术的东西了

      也难怪,现在搞得都是Portal&SOA那部分的东西,所有的写技术的欲望都拿来去做PPT了,其实也没什么可写,都是BEA的东西,看文档,写DEMO,做PPT,不过觉得BEA那一套确实是不错的。现在感觉如果我们以前的东西用这个来写的话恐怕一天两天就全部搞定了。不过不是opensource的东西用起来就是不爽,不知道他里面具体是怎么搞得,纯粹是装备员。支持开源!不过说到开源,昨天终于收到了ubuntu寄过来的光盘,正好做圣诞礼物,一共五张,现在已经送出三张了。还有一张可以送出,有需要的从速订购,逾期不候。
 
      今天打算整理一下近期学到的东西,有必要的话就贴一下,不然让人觉得咱是每天只会发牢骚,抒发感情的人呢。主席说的好:本行还是不能丢的。
 
     
 
     
7 novembre

失败的 PES5

      终于忍受不了PES5了,玩这个简直就是一个煎熬,虽然感觉有些地方做得还是蛮真是的,不过控球也太夸张了,感觉在被耍弄。玩游戏的本意无非是要放松一下,但是这个却很难让人玩后有爽的感觉。而且在玩的过程中还发现了几个bug(呵呵),删掉、删掉。
3 novembre

搞定老师课件的方法

      许多老师不会在课程进行当中把课件给学生,总是等到快考试的时候才给,或者根本就不给。不过对于学计算机的来说还是很容易搞定的。本周就不厚道了一次,不过也没办法,下周要去实习了,自修的话没有课件还是很困难的。再说了,ms哪位贤人说过偷书有理的话。其实老师一般都是用u盘装课件的(自己带笔记本的就困难些了),U盘的话只要写几行batch就可以了,当然也有其他的方法,不过这种方法简单易行而且复用性高一点。至于具体的batch就不贴在这里毒害青少年了。很简单的,重要的是当遇到问题的时候怎么想办法用自己学过的知识来搞定。
 
      选择计算机方向还是很有好处的。
 
 
26 octobre

OOO还真不错

      刚看到open office .org2.0版发布了,下载装了来玩一玩,还是很不错的,比1.*好多了,也不是很大。
14 octobre

Google搜索技巧2005版--From it专家网

       注意:文中[]符号是为了突出关键词,在实际搜索中是不包含的;本文采用的是意译;本译文已经征得作者许可;本译文可任意转载,请保留本文的头信息
 
  1. 双引号可以用减号代替,比如搜索["like this"]与搜索[like-this]是一个效果
 
  2. Google不会处理一些特殊的字符,比如[#](几年前还不行,现在可以了,比如搜索[c#]已经可以搜到相应的结果),但是还有一些字符它不认识,比如搜索[t.]、[t-]与[t^]的结果是一样的
 
  3. Google充许一次搜索最多32个关键词
 
  4. 在单词前加~符号可以搜索同义词,比如你想搜索[house],同时也想找[home],你就可以搜索[~house]
 
  5. 如果想得到Google索引页面的总数,可以搜索[* *]
 
  6. Google可以指定数字范围搜索。搜索[2001..2005]相当于搜索含有2001、2002直到2005的任意一个数的网页
 
  7. 搜索[define:css]相当于搜索css的定义,这招对想学习知识的人很有效;也可以用[what is css]搜索;对中文来说,也可以用[什么是css]之类的
 
  8. Google有一定的人工智能,可以识别一些简单的短语如[whenwas Einstein born?]或[einstein birthday]
 
  9. 通过[link:]语法,可以寻找含有某个链接的网页,比如[link:blog.outer-court.com]将找到包括指向 blog.outer-court.com超级链接的网页(最新的Google Blog Search也支持这个语法),但是Google并不会给出所有的包含此链接的网页,因为它要保证pagerank算法不被反向工程(呵呵,可以参见那两个Google创始人关于pagerank的论文,可下载)
 
  10. 如果在搜索的关键词的最后输入[why?],就会在结果中出现链接到Google Answers的链接http://answers.google.com ,在里面可以进行有偿提问
 
  11. 现在出现了一种兴趣活动,叫做Google Hacking,其内容是使用Google搜索一些特定的关键词,以便找到有漏洞的、易被黑客攻击的站点。这个网站列出了这些关键词:Google Hacking Database( http://johnny.ihackstuff.com/index....ule=prodreviews )
 
12. 在Google 中输入一组关键词时,默认是“与”搜索,就是搜索包含有所有关键词的网页。如果要“或”搜索,可以使用大写的[OR]或 [|],使用时要与关键词之间留有空格。比如搜索关键词[Hamlet (pizza | coke)],是让Google搜索页面中或页面链接描述中含有Hamlet,并含有pizza与coke两个关键词中任意一个的网页。
 
  13. 并非所有的Google服务都支持相同的语法,比如在Google Group中支持 [insubject:test]之类的主题搜索。可以通过高级搜索来摸索这些关键词的用法:进入高级搜索之后设置搜索选项,然后观察关键字输入窗口中的关键字的变化
 
  14. 有时候Google懂得一些自然语言,比如搜索关键词[goog], [weather new york, ny], [new york ny]或[war of the worlds],此时Google会在搜索结果前显示出一个被业内称为“onebox”的结果,试试看吧!
 
  15. 并非所有的Google都是相同的,它因国家版本(或是说语言版本)而异。在US版下,搜索[site:stormfront.org]会有成千上万的结果,而在德语版下,搜索[site:stormfront.org]的结果,嗯,自己看吧。Google的确与各国政府有内容审查协议,比如德国版,法国版(网页搜索),中国版Google新闻
 
  16. 有时候Google会提示你搜索结果很烂,比如你搜索关键词[jew]试试,Google会告诉你它给出的搜索结果很烂,然后给你一个解释:http://www.google.com/explanation.html
 
  17. 以前,搜索某些关键词如[work at Google] 时会看到Google给自己打的广告。可以去http://www.google.com/jobs/了解Google的工作
 
  18. 对于一些“Googlebombed”(大概意思是指Google搜索的结果出问题了)的关键词,会有一个广告链接到:http: //googleblog.blogspot.com/2005/09/googlebombing-failure.html (中国大陆需要代理才能访问)。比如搜索[failure],第一条是美国布什总统介绍
 
  19. 虽然现在Google还没有支持自然语言,但这里有一段录像显示了支持自然语言的搜索引擎的使用效果:http://blog.outer-court.com/videos/googlebrain.wmv
 
  20. 有人说在Google中搜索[president of the internet],其结第一条表明了president of the internet是谁,我也是这么认为的,而且你还可以使用这个logo支持本文作者:http://blog.outer- court.com/files/president.gif
 
  21. Google现在不再有“stop words”(被强制忽略的关键词),比如搜索 [to be or not to be], Google返回的结果中间还列有相关的完整短语搜索结果
 
  22. 在Google 计算器(http://www.google.com/help/features.html#calculator )中有个彩蛋:输入[what is the answer to life, the universe and everything?]时,会返回42。(关键词翻译过来的意思是指“生命、宇宙和一切的答案”,这是一个著名科幻小说中的情节,详情参见http: //en.wikipedia.org/wiki/The_Answer_to_Life,_the_Universe, _and_Everything)。试试吧,哈哈
 
  23. 你可以在搜索时使用通配符[*],这在搜索诗词时特别有效。比如你可以搜一下["love you twice as much * oh love * *"] 试试
 
  24. 同样,你的关键词可以全部都是通配符,比如搜索["* * * * * * *"]
 
  25. www.googl.com是在输错网址后的结果,也是个搜索网站,但搜索结果与Google完全不同。而且此网站也赚Google的钱,因为它使用Google AdSense
 
  26. 如果你想把搜索结果限制在大学的网站之中,可以使用[site:.edu]关键词,比如[c-tutorial site:.edu],这样可以只搜索以edu结尾的网站。你也可以使用Google Scholar来达到这个目的。也可以使用[site:.de]或[site:.it]来搜索某个特定国家的网站12. 在Google 中输入一组关键词时,默认是“与”搜索,就是搜索包含有所有关键词的网页。如果要“或”搜索,可以使用大写的[OR]或 [|],使用时要与关键词之间留有空格。比如搜索关键词[Hamlet (pizza | coke)],是让Google搜索页面中或页面链接描述中含有Hamlet,并含有pizza与coke两个关键词中任意一个的网页。
 
 
 
28 septembre

周立功讲座

      昨天听了两场讲座,一个是周立功,另一是柏林工大的**教授(不好意思名字忘了)。基本上第二个没怎么听明白那个算法,只了解了一下JPEG2000的特点什么的。周立功的还是很好的。以前好像隐约听说过这个名字,没想到他的人生也很有传奇色彩。高中毕业之后就搞出了单片机,那还是八十年代初期。其实像这些能够到交大这种学校来做演讲的人哪个没有些本事呀,问题是成功人士之所以成功是因为具备了一般人不具备的素质,绝对不是《头文字D》中的神人论那样的。
 
      远大的理想与目标是周从小就有的,这是重要的一点。其实人人都有理想,但是成功人士贵在能够坚持自己的理想与方向而努力,并且能够在权衡中做到正确的选择。这一点上和前天沈向洋的“闭关15年没人能够战胜你”是差不多的。只不过像沈这种做研究的人更能够有条件来“与世隔绝”。
 
      其实有些道理大家都懂,成功的人需要的素质大家也都知道,比如刚才说的理想,毅力,智力,沟通力等等。问题是知道不等于做到,眼高手低的人多的是,其实自己也不例外。这几天也比较深的反省了一下自己,觉得有必要去更加严格要求自己了。做优秀的人,从现在做起!
 
 

business is important!

      这些天无论是上课还是听讲座,都会听到老师们在一遍一遍地强调“business is important!"。一开始我觉得我懂得这句话的意思,业务当然重要,不然谁买你的软件。Terry讲他在面试的时候得一些经验,他在面试别人的时候总是问:你做过什么项目?这些项目都用起来了吗?这些项目现在还在运行吗?如果它不存在了,即使你写得很好,也只能称作开发得成功的软件,不能成为成功的软件。
 
      今天我仔细的想了想自己编写软件的过程,觉得很多时候都没有强调business,主要表现在需求的理解上。就连前几天那个MessageBoard的解决方法也是不好的。想一想,Message只不过是要通知客户端有新的消息到了,顶多提供链接和标题内容。为什么我要想什么socket,什么webservice呢?干吗要为了扩大这部分,体现出架构性而作这么多无用的工作呢。我只要一个MSN的接口就好了,有消息直接调用即可。干吗还要自己写Server和Client呢?用户用着能比MSN更方便吗?我的Client能保证在各种平台上都跑起来吗?不能得话我就只支持windows吗?用户要的无非是简便高效,这也是这个Portal创建的初衷呀,为什么我还要这么复杂的去考虑呢?唯恐别人不知道自己设计的巧妙性吗?真有种”为赋新词强说愁“的感觉。如果早这么想的话恐怕连一天也用不了就差不多了。
 
      有些时候确实考虑事情忍不住地去往复杂的地方钻,人都有这种毛病吧,为了显示自己的大脑有多复杂。不过经常反省一下也是很好的。至少不会浪费太多的时间去做无用的行军。
 
      Business的东西还是要好好的学习的,就像今天Terry给我们的那个filelity.com的架构题目,他在那里给我们看那上面的内容,我却不是很理解里面的东西。还得好好的去看呀。
 
 
26 septembre

软件学院科技周之沈向洋报告---研究的魅力与乐趣

      今天是软件学院科技周开幕的日子,来了不少的牛人,IBM中国区总经理邱晓萍、微软亚洲研究院院长沈向洋、上海徐家汇商城副总王斌等等。主要是两个实验室揭牌仪式以及科研成果展示,还有沈的讲座。

      沈大牛国真功力又增了不少,至少演讲功力是增加了很多。记得前年微软来搞活动的时候他也做过虚拟现实方面的演讲,虽然技术上很吸引人,但是讲故事的能力却不敢恭维。那两个经典的故事至今还作为我们的茶余饭后的谈资(踢足球,喝酒的故事)。

      这次主要讲了他做研究的一些心得。中间不乏引经据典的精彩部分,很好。虽然像我们这些本科生以及大部分的研究生都谈不上做什么研究,但是道理确实相通的。其中一些经典的话趁热写下来:S&M是拚今天,Developer是拚明天,Researcher是拚后天;Research的分解解释-arch-search-research;研究的三个境界(王国维的三句经典的语录居然能够用到任何的领域,果真牛);一流高手提问题,二流高手解问题,三流高手抄问题;KISS&KICC原则等等。在说到如何做好研究的时候还提到了挖洞法,枪扎一条线,棍扫一大片,吸星大法等有趣的方法。收获还是比较多的。

      期待着以后的几场演讲更加精彩!
 
 
25 septembre

Opera还不错

今天看到了一篇文章介绍Opera的下载量几天之内超过了1m,也凑热闹下一个试一试。觉得还不错。无论从界面还是程序的运行速度都还不错,定制功能也很好,就是ms内存消耗太大,两个网页居然要46M。不过还没有仔细的看定制项,可能用了很多的缓存来提高速度。不管怎样,觉得比firefox爽多了。玩两天看看吧。
23 septembre

C#实现Windows托盘 Message主动提醒技术

      Message主动提醒的功能需要实现类似MSN的提醒方式,觉得比较帅。首先要解决的就是Windows托盘ICON化。还好.NET中有NotifyIcon类,就是来处理这种东西的。只要把Form隐藏就好了,然后再在NotifyIcon上面添加菜单,添加相应的菜单处理函数就好了。下面的是部分程序的示例:
 
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace MessageClient
{
 /// <summary>
 /// Form1 的摘要说明。
 /// </summary>
 public class Form1 : System.Windows.Forms.Form
 {
  private System.Windows.Forms.NotifyIcon notifyIcon_Message;
  private System.Windows.Forms.ContextMenu contextMenu_main;
  private System.ComponentModel.IContainer components;
  public Form1()
  {
   //
   // Windows 窗体设计器支持所必需的
   //
   InitializeComponent();
   Initializenotifyicon();
   //
   // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
   //
  }
  /// <summary>
  /// 清理所有正在使用的资源。
  /// </summary>
  protected override void Dispose( bool disposing )
  {
   if( disposing )
   {
    if (components != null)
    {
     components.Dispose();
    }
   }
   base.Dispose( disposing );
  }
  #region Windows 窗体设计器生成的代码
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {
   this.components = new System.ComponentModel.Container();
   
   //
   // Form1
   //
   this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
   this.ClientSize = new System.Drawing.Size(320, 56);
   this.ControlBox = false;
   this.MaximizeBox = false;
   this.MinimizeBox = false;
   this.Name = "Form1";
   this.ShowInTaskbar = false;
   this.Text = "消息接受客户端!";
   this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
  }
  #endregion
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main()
  {
   Application.Run(new Form1());
  }
  /// <summary>
  /// 初始化icon
  /// </summary>
  public void Initializenotifyicon()
  {
   System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));
   this.notifyIcon_Message = new System.Windows.Forms.NotifyIcon(this.components);
   this.contextMenu_main = new System.Windows.Forms.ContextMenu();
   //
   // notifyIcon_Message
   //
   this.notifyIcon_Message.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon_Message.Icon")));
   this.notifyIcon_Message.Text = "接受软件学院办公自动化系统的消息";
   this.notifyIcon_Message.Visible = true;
   notifyIcon_Message.Click += new System.EventHandler ( this.click ) ;
 
    MenuItem [ ] mnuItms = new MenuItem [ 3 ] ;
    mnuItms [ 0 ] = new MenuItem ( ) ;
    mnuItms [ 0 ] .Text = "显示消息提醒" ;
    mnuItms [ 0 ] .Click += new System.EventHandler ( this.showMessage ) ;
    mnuItms [ 1 ] = new MenuItem ( "-" ) ;
    mnuItms [ 2 ] = new MenuItem ( ) ;
    mnuItms [ 2 ] .Text = "退出系统" ;
    mnuItms [ 2 ] .Click += new System.EventHandler ( this.exitSystem ) ;
    mnuItms [ 2 ] .DefaultItem = true ;
    contextMenu_main = new ContextMenu ( mnuItms ) ;
    notifyIcon_Message.ContextMenu = contextMenu_main ;
  
  }
  /// <summary>
  /// 单击事件处理函数
  /// </summary>
  public void click(object sender , System.EventArgs e)
  {
  
  }
  
  /// <summary>
  /// 点击菜单项上显示消息提醒处理函数
  /// </summary>
  public void showMessage(object sender , System.EventArgs e)
  {
  
  }
  /// <summary>
  /// 点击菜单项上退出系统处理函数
  /// </summary>
  public void exitSystem(object sender , System.EventArgs e)
  {
  
  }
 }
}

Message的主动提醒解决方案

      想把自己那部分的MessageBoard功能扩大,最好能成为一个消息中间件。提供给其他Portal模块的接口早就写好了,但是还需要进一步的集成和改进。那天答辩的时候有评审说到了主动提醒功能,其实我早就想过了,只是觉得那个时候时间不太充足,只忙于主要功能点的实现。现在可以自己的研究一下主动提醒的问题了。看了一些资料,也和轻而探讨了一下,觉得还是有很多解决途径的。
 
      主动提醒必须有客户端和服务端,服务端我是用MDB和EntityBean以及一些辅助接口及类来开放给本来的MessageBoard界面的。现在如果让客户端也这么做的话恐怕不是很好,要求在客户端写访问EJB的client程序,而且用EJB这种网络消耗大的东西去实现也不合算(主动提醒最起码要20s,如果从client访问server,我想),那样100个client的话就要支持到每秒钟5个EJB调用,再加上Portal本身的开销,似乎很大(感觉上的,未经查证)。曾经想用Webservice来解决服务问题,这样能做到很好的跨平台性,可以在Windows上用C#来写类似MSN的提醒,看其来很帅,而其WebService目前比较的“热”,估计评审的人员也会比较“哈”吧,但是开销也是问题。以上两种都貌似主动提醒,但是却是短时间被动提醒造成的主动提醒的假象。第三种就是用Socket分别写两端,可以做到真正的主动提醒,但是考虑到监听端口和url以及用户名密码的加密,做的工作还是很多的,但是明显这种方案最好,至少我是这么认为的。
 
      今晚看看相关的技术,打算这两天搞定,加油了!
 
 
15 septembre

Reading Paper

      Terry的课上给了一些Paper要我们课下去阅读,而且他的思想是作为一个架构师一定要多阅读东西。Paper的东西只要抓住其中的中重要观点并领会就行了。这种说法我还是很赞同的,多读绝对有好处,就像轻而,读的东西很多,自然功力就大增了。我的书也不少,可是真正的完完全全读下来的却不多,利用这些天的时间一定多读书,多学习。争取在实习之前再有一个新的提升。在读Paper的时候顺便把收获感想写下来也不错,Blog上又可以增加内容了。
 
 
14 septembre

mvnForum的部署(Jboss4.0.2)

      决定把bbs改为mvnForum,越南人写的,评价还不错的。下面是部署的具体步骤,为了方便以后部署的方便,还是记下来吧。

      1、下载mvnForum的包
      2、创建context:mvnforum.war
      3、将下载包中webapp下面的所有文件copy到context中
      4、数据库采用的mssqlserver,建立mvnforum数据库,执行mvnforum-1.0.0-rc4_04-bin\sql添加表和数据
      5、更改mvnforum.war\WEB-INF\classes中mvncore.xml和mvnforum.xml中的部分配置,尤其注意log文 件和mvnForumHome的设置,详细参见install.txt
      6、删除mvnforum.war\WEB-INF\lib\log4j1.2.8.jar
      7、其他的修改只需要更改配置文件或者通过admin更改。

      OK了