Monthly Archives: March 2009

地球一小时

        昨晚8:30到9:30倡导大家熄灯一小时,来引起人们对全球气候变化的重视。媒体们也大力度报道,其实这也是好事情,让更多人知道了这件事,慢慢就重视起来了。不过要我说,比较有效的方法就是大家都自觉地,低调地,把灯关了,睡一个小时觉,然后开灯,就当什么事都没发生过,要不然做宣传所用的电力以及造成的环境污染比起这一个小时的节约来说有些得不偿失。以后气候变暖了,海平面上升了,游泳就成了必要的生存技能,不会的同胞可要抓紧学习了。
        传说国内又把youtube给封了,看看我博客上的几个连接也都成了白色方块。哎,河蟹太强大了,反抗不了,好好享受吧。

中超第一金牌球市

        来西安的外地人强烈建议去体育场看球,西北汉子在这里豪爽。小结一下:
        赛场里:
1、对方球员被放倒在地后,数万人齐喊:“假摔!”,若倒地不起,喊:“装!”;
2、浐灞球员被放到后,数万人齐喊:“贼!”,随接:“红牌!红牌!”;
3、对方球员被放到,裁判向浐灞队员出示黄牌,数万人齐喊:“黑哨!”“换裁判!”;
4、双方球员发生小冲突,不等裁判上前排解,数万人齐喊:“打!”;
5、对方球员面对门将或空门,将球踢飞后,球迷:“进国家队!”;
        看台上:
6、人浪经过,大家站起来欢呼;在对面看台断掉后,这边球迷向对面齐喊:“贼!”;
7、球迷协会有一胖哥们,每场比赛在看台必绕场一周,组织各看台球迷为浐灞加油。每到一看台,此处球迷齐喊:“脱!脱!脱!”,胖哥们随除去上身衣物,大家心满意足一阵热烈掌声,然后随他给浐灞加油助威。离开此看台时他再将短袖穿上。有图为证:

8、原来看台上还有一哥们,扮《英雄儿女》中王成的样子:背后背电报机,头上缠绷带,带领大伙加油。今天看球hx问:“咦,传达室那个小伙咋没来?”,随被鄙视;
9、今日一球迷举标语:“不爱浐灞的小伙不是好小伙”,上面印一个大力水手的肌肉图。该球迷很敬业,一直举着标语,最后后面的球迷受不了了,先喊:“伙计,坐哈看!把人挡住咧”,没听见;一美女温柔喊:“大力水手,快坐下!”,当然还是没听到;另一哥们大喊:“吃菠菜的!赶紧坐哈!”,该球迷听见,随放下标语。有图为证:

ArcGIS Server for Silverlight API已出,欢迎大家试用

        http://resources.esri.com/arcgisserver/apis/silverlight/
        ESRI已推出for silverlight api的beta版,这让我们的开发又多了一种选择:
javascript api
flex api
silverlight api
========
java api
.net api
        引用James Fee blog上一句话:Looks simple enough to leverage and I’m guessing since Microsoftdevelopers are in love with Silverlight, it won’t be long before theJSAPI is pushed aside.
        最直接的感受就是比javascript和flex api的地图要平滑许多。相信RIA在silverlight上会有更好的表现。和flex要一较高下了
        enjoy~~~
        vista系统之外要安装silverlight插件,和flash一样,装吧

在ArcGIS Server程序中连接GIS Server的注意事项

        为什么要在ArcGIS Server的程序中来连接GIS Server呢?通常有两个理由:1、连接后,创建ServerContext,之后创建更多的AO对象,从而在程序中调用AO来工作;2、连接后,可以用来管理GIS Server,比如重新启动某个服务。
        先解释两个概念。这里所说的ArcGIS Server程序是指利用了GIS Server上资源的程序,包括了Desktop Application,Engine Application,但最常见的还是Web Application;要调用AO来服务自己的AGS程序,就必须通过局域网直接连接到SOM机器,因为ArcObjects实际上寄存在SOC机器上,而我们是不能与SOC直接打交道的,只能通过SOM来完成这项工作(通过Internet连接的方式只能连接到Web Server)。
        好了,要通过程序来连接到GIS Server,主要有两个对象可以使用:ESRI.ArcGIS.Server.GISServerConnection(实现了IGISServerConnection2接口)和ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection。前者是com对象,后者是原生的.net对象。
        先来看ESRI.ArcGIS.Server.GISServerConnection。使用方法如下:
ESRI.ArcGIS.Server.IGISServerConnection2 pGISSC = new ESRI.ArcGIS.Server.GISServerConnectionClass();
pGISSC.Connect(“yourservername”);
ESRI.ArcGIS.Server.IServerObjectAdmin pAdm = pGISSC.ServerObjectAdmin;
注意,要成功获得pGISSC.ServerObjectAdmin属性得有一个前提条件,就是运行当前AGS程序(注意看前面对AGS程序的解释)的用户必须是agsadmin组里的成员。那么接下来就可以通过IServerObjectAdmin来对GIS Server进行管理了;如果运行当前AGS程序的用户只是agsuser组里的成员,那么你只能获得ServerObjectManager,从而通过IServerObjectManager来创建AO对象,但是不能对GIS Server进行管理;如果运行当前AGS程序的用户既不是agsuser成员也不是agsadmin成员,那么在connect的时候就会报错了。可以看出ESRI.ArcGIS.Server.GISServerConnection对象不能显式指定连接GIS Server的用户。那么连接GIS Server的用户身份很重要吗?下面通过Web Application来说明一下。
        新建一个website,在其中使用如上的代码,调试,通过;将网站发布,浏览,将会出现“拒绝访问”的错误。这正是因为连接GIS Server的用户身份发生了变化。在VS中调试的时候,调用的是VS自带的ASP.NET程序,而不是IIS中的ASP.NET。如下图:
可以看出,调试的进程是以系统管理员身份运行的,而通常在安装完AGS后会将系统管理员添加到agsadmin组中;网站发布后,web app运行在IIS进程中,而IIS进程通常以ASPNET账户身份运行,正常情况下,这个账户当然既不属于agsadmin也不属于agsuser了。
        同理,如果是Desktop或者Engine的程序,在调试阶段和上面的情况是一致的,如果程序部署到了其他机器上,那么就得考虑一些添加用户的工作了。
        下面再来看ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection。这是ADF中的.net对象,通常推荐使用这个对象来进行连接工作,因为它可以指定使用特定的账户身份来连接GIS Server,就是下面的Identity:
ESRI.ArcGIS.ADF.Identity identity = new ESRI.ArcGIS.ADF.Identity(“yourusername”, “yourpassword”, “yourdomain”);
ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection agsconnection = new ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection(“yourgisservername”, identity);
agsconnection.Connect();
ESRI.ArcGIS.Server.IServerObjectAdmin pAdm = agsconnection.ServerObjectAdmin;
同样的,要成功获得pAdm,Identity中指定的用户必须是agsadmin成员。如果你的网站,在调试时可以运行,而发布后“拒绝访问”,那么首先检查web.config的identity,如果使用了以上代码,请确保使用的user在正确的用户组中。
        再来看看这个Identity与web.config中的identity属性的区别。1、此处的Identity优先级比web.config中的identity属性要高。举例说明,如果在VS中已经做过Add ArcGIS Identity,添加了一个agsuser成员,那么可以在此处用agsadmin成员来连接GIS Server,依然可以获得对SOM机器的管理权限。2、web.config中的identity是在process级别上的impersonation,而此处的Identity是thread级别上的impersonation。如果服务是pooled,low isolation,那么并发请求发生时,会有多个instance运行在同一进程中,而这些instance(thread)就可以通过上面的Identity来以不同用户身份对GIS Server进行连接了。例如:
public partial class _Default : System.Web.UI.Page
{
private UserThread m_thread;

protected void Button1_Click(object sender, EventArgs e)
{
m_thread = new UserThread();
Thread t = new Thread(new ThreadStart(m_thread.Connection1));
t.Start();
Thread t2 = new Thread(new ThreadStart(m_thread.Connection2));
t2.Start();
}
}

public class UserThread
{
public void Connection1()
{
ESRI.ArcGIS.ADF.Identity id = new ESRI.ArcGIS.ADF.Identity(“user1″, “pass1″, “domain1″);
ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection agsconn;
agsconn = new ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection(“server1″, id);
agsconn.Connect();
}

public void Connection2()
{
ESRI.ArcGIS.ADF.Identity id = new ESRI.ArcGIS.ADF.Identity(“user2″, “pass2″, “domain2″);
ESRI.ArcGIS.ADF.Connection.AGS.AGSServerConnection agsconn;
agsconn = new ESRI.ArcGIS.ADF.Connection.AGS.AGSServer
Connection(“server2″, id);

agsconn.Connect();
}
}

《你在红楼 我在西游》

        蕴涵深厚中国文化底蕴的《西游记》、《红楼梦》成为太多人当代的记忆,它们已经不再是单纯意义上的文学著作,更不是简单的电视剧作品,它带给当今人们更多的是回忆,是反思,是与这一代成长的人密不可分的时代烙印。这张专辑便是包括万晓利,苏阳,大小乔,二手玫瑰,与非门等个人或乐队对两部电视剧经典插曲的全新诠释,赶在张纪中导演重拍之前。
        我没有看过《红楼梦》,十分可惜,即使将来再看,感觉也不会一样了。就好比你如果5岁的时候看了海绵宝宝肯定会认为这是经典动画,我打赌。《西游记》大家都看过,其实仔细想想,唐僧当时出发没有地图,没有帐篷,没有登山鞋,没有冲锋衣,没有太阳眼镜,没有保温瓶,没有防晒霜,没有数码相机,没有mp3,买有gps,没有饭店,没有路!而且我觉得他在当时肯定没有加入任何一个户外俱乐部,也不拉赞助,更没有什么西安–印度攻略之类的参考资料了。再来想想他的目的,是多么的单纯。就是一个理想,一个爱好,为了自己喜欢的东西,开着世界上最好的SUV,背一个锅盔,一个瓢,就朝着心中的圣地义无反顾了。说的应该是陕西话吧?“把人饿成马咧!嘿,伙计,北扣摸吃!(掰口馍吃)”。比之现在骑自行车去拉萨,开摩托绕中国,要来的更加纯粹,更加专业。据说唐僧在路上走了14年,从昆明或成都骑去拉萨平均需要30天,按一个月算,连续开世界上最好的SUV,强度肯定不比骑车爬高原小,他凡人肉躯等于连续骑车去圣地至少178回,而且,没有数码相机和mp3!对他的精神评价只能升华为四个字:太 伟 大 了!这种精神实在该好好学习才是。为他在大雁塔南边立一座雕像,值。再说了,没有他也就没有大雁塔了。
        如果西游记不是真的,那么吴承恩老先生就更伟大了,让语文老师随便分析一下写作意图,作者思想,很轻松的,他老人家堪比如来!
        上面除了对唐僧那种精神的敬仰,其余纯属吹牛,如有雷同,概不负责。其实这几首歌曲都还蛮好听的,这里贴出来其中一首,一块分享一下。

[youtube=http://www.youtube.com/watch?v=PjddVTm5hpA]

在ArcGIS Server中调用ESRI自带符号库的一个问题

        在ArcGIS Engine中,如果要调用ESRI自带符号库中的一个符号,比如图中的ColorRamp:

        可以利用以下代码来得到:
IStyleGallery pSG=new ServerStyleGalleryClass();
pSG.ImportStyle(“ESRI.ServerStyle”);
IEnumStyleGalleryItem pESGI = pSG.get_Items(“Color Ramps”, null, null);
IStyleGalleryItem pSGI=pESGI.Next();
while(pSGI!=null)
{
if(“Pastels”==pSGI.Name)//pastels是该colorramp的名字
break;
pSGI=pESGI.Next();
}
IColorRamp pColorRamp=pSGI.Item as IColorRamp;

        但在AGS中发现,执行完IStyleGalleryItem pSGI=PESGI.Next();后,pSGI始终为null,但pSG.ClassCount却为22,表明已经导入了符号库文件,原因后面。但pSG.get_Items()方法执行时也不报错,且在engine下都没有问题……最后发现,在pSG.get_Items()之后,pESGI.Next();之前,插入一句pESGI.Reset()问题就解决了,比较无厘头。

[广告]Really Fast

打开5个word文档仅需0.5秒;打开53个程序仅需10几秒;5秒之内完成磁盘碎片整理;拷贝一部DVD所需的时间比你把DVD从2楼扔下去的时间还短;最后,即是带着硬盘跳舞也不用担心质量问题……硬盘已经成了电脑中最拖后腿的部件了,在笔记本上表现的尤为抢眼。SSD的诞生是硬盘发展史上的一次革命,但目前仍在起步阶段,看看下面这个视频吧,利用SSD和RAID(简单理解就是把硬盘并联在一起大幅读写提高速度)能带来什么样的变化。24块256GB的SSD,对于它们带来的速度,只能说:哈利路亚……其实这是一个三星的广告:)
[youtube=http://www.youtube.com/watch?v=96dWOEa4Djs]

相信在不久的将来,我们都能用到这样的电脑了。不过我想象中的电脑是这样的:首先是一体机;屏幕是软塑料的,可以随意弯曲,比如像手表一样缠到手腕上,而且可以随意拉伸,办公拉成14寸的,看电影拉成64寸的;剩下的就是键盘鼠标了,当然都做成虚拟的,利用屏幕的光投影出来供我们操作;还有呢?就是硬盘cpu之类的,全都在上面那个屏幕里面了,速度要多快有多快,容量要多大有多大;电池?当然出厂就安好了,用核原料也罢,太阳能也好,或者自己能够进行光合作用,反正够用几万年的,不用充电……10年时间,能不能做到呢?

音乐就是这么神奇

        昨晚睡前的听后感,补上。
————————quotation start————————
        赵已然,别名赵牧牛、赵老大。男,约40岁,宁夏银川人。
        我本该是一名化学教师,阴差阳错,不幸做了鼓手。十多年来,不求上进,碌碌无为,混迹于狭小的地下音乐王国,沉迷于越来越糊涂越来越荒唐的卡通境地,信以为真地在有限的几位朋友面前义正辞严、斩钉截铁地鼓吹着“垮到极处”的寄生虫哲学。从没有过工作,后以借钱为生。
        后来,我慢慢变成了一个人。只有一双拖鞋、一只牙刷,住在了农村,且越搬越远。
        再后来,我笑得有些难看了,因为我越来越没钱。以至于常常被迫求告家人,艰难度日。
        有一天,我终于发现,磕不动了,再也垮不下去了。我头天让酒喝醉,吐了;第二天一早,酒还没醒,咣叽,又让茶给喝吐了。
        那一天,我发现,我的脸特别难看,太难看了。我终于知道,我太不漂亮了。
        我一生热爱漂亮女人,痴情于不敢面对、不敢亵渎的漂亮女人,然而我自己却从没漂亮过,从没漂亮过一次。
        我也知道了,在我所追求的自由中,我没有自由过一次。
        于是,我终于倒下了。
        于是,在深夜里,在不要钱的灿烂阳光下,在只有神或鬼才能看得见的微笑或悲痛中,我想起了那些曾经会唱的歌。
        于是今天,被逼无奈,我端正了思想,换了身份,不做鼓手,稍不情愿地自觉有些滑稽般地坐在了这里,怀着年轻时代的美好梦想,准备唱歌。
————————quotation end————————
        想想30年后你对现在的自己会有一个什么样的评论?希望不会像赵老大的唱腔一样,如此悲怆。听听下面他的歌声,感觉是一个50岁的人和他自己20岁的时候在进行对话。借用豆瓣上一片评论的标题:青春远未逝,只是赵已然。
《再回首》 by 赵已然
[youtube=http://www.youtube.com/watch?v=mLf99dEKCcw]

保增长,拉内需

        保增长,拉内需,再买一个照相机。
        由于相机维修价格接近购买价格的50%,考虑再三后,决定做出最合理的选择,重新购买,然后争取把旧机器出掉。在这里友情提示各位,爱护好自己的相机啊。
        在lx3和gx200之间经过几番对比,觉得后者画质上的微小劣势完全可以由外观和价格上的优势来弥补,最后选择了gx200,我的新伙伴。lx3外观华丽,小资,金属,这也使他体积稍大,重量较重;gx200外观内敛,闷骚,最主要是非常低调,符合我的口味。唯一遗憾的是高iso依然是致命伤,这也是与单反最大的区别了,不过考虑到夜晚扎堆的场合我出现的概率比较少,也能接受了。看到别人拿出ixus 40的时候,我很羡慕,羡慕小家伙和它主人感情深厚,数码产品能用5年还是很不容易的。gx200,咱俩的感情就从今天开始培养吧。
        现在最想做的事情就是带上相机,和man vs wild里的Bear Grylls一样,去天人合一吧。
        附上说明书一角:

ArcGIS Server网站发布后地图显示空白的原因之一

        一般来说,在地图网站发布后,如果地图区域显示为空白,但可以看到其他控件,可能是因为:1、引用的service运行不正常;2、通过local方式连接而没有添加arcgis identity;3、Web Server机器名中含有下划线“_”。但实际情况可能不止这些,碰到这个问题后只能耐心寻找原因来解决问题。
        今天刚好碰到了这个情况:用模板程序发布一个网站,mapresource manager中添加了一个经过cache的map service,本机浏览正常,但通过外网浏览的时候,界面显示正常,地图区域空白;如果引用一个没有经过cache的服务的话,外网和本机浏览都正常。网络是这样的,web server和gis server都在本机上,本机处于局域网中,通过路由的转发规则设置外网访问网络ip时自动转到本机ip上来。cache和非cache的服务区别就在于显示地图时,前者是直接获取服务器上的图片,而后者是gis server动态生成图片然后发送到客户端。那么可以看出是在获取缓存图片时出问题了,而本机可以访问到,外网却访问不到,那么估计可能和虚拟路径有关。在外网机器上查看http请求,发现如图情况:

        可以看出,在获取其他控件的图片时,使用了网络的对外ip,而获取cache图片时使用的确实本机名。毫无疑问是cache路径的虚拟目录设置不对。一般安装完ags后,设置cache,job,output所对应的虚拟路径时,习惯用hostname作为域名,这和iis设置相符,但如果要对外发布的话,要考虑到这个情况。更改了cache路径的虚拟目录后,外网浏览就程序就正常了。