不太开心的一天

明明已经请假,结果却让我自己换班

可能因为我说的太晚,可能他们不愿换班,反正结果是今天上午我要去上班

结果就是11点50,匆忙换好衣服,饿着肚子去地铁站

一路上还没有便利店可以买水,哭。。。

可是,签约到一半,打电话催我回去

顿时让我很无奈

接下来又是短信

越来越讨厌现在的工作环境,现在的同事

毕业

June 25, 2010

2010年6月25日,这是领毕业证的时间,从某种程度上来说,也是我们最后一次相聚在华理,今日之后,大家各奔东西。

依旧是周五,虽然是上午,学校已有很多学生拎着书包回家了,曾经的我们也是这样,每逢周五,上海的学生就大包小包的回家了,当然,这其中并不包括我。

走进会议室,好多同学已经在那里了

今天,并没有多少伤感,即使天空还是很配合下起雨了

也许是因为所有的伤感都已经在散伙饭的时候宣泄完了,也可能是因为我们班,除了三个出国之外,其余都在上海

我很庆幸在这个一个班级,一个团结的班级

大一,我们有自己的班级晚会,我们有金山古镇一日游

大二,我们故地重游回到金山,我们会班级风采大赛而努力,会我们的失利而哭泣

大三,我们继续发扬公共063的风格,一吃为主

大四,在这个毕业的季节,我们一起毕业旅行,一起散伙饭

翻阅四年的照片,感受颇多

至今清晰 记得第一次踏入金山校区的感受

那一天,也是下个雨,走进破旧的体育馆,走进空荡荡的寝室,身边都是陌生的面孔,人生中的第一次住寝室,那一晚,我哭了

离开了高中的朋友,觉得无助

但是,后来

遇到西西姐和噜噜姐是一件幸福的事情

三个人在10点跑出去吃夜宵,麻辣烫,烧烤。。。

在11点熄灯之后在寝室泡酸辣粉

曾经,一周去吃三次红星火锅

曾经,我们也一起在阳台偷拍帅哥

曾经,我们一起在阳台谈心喝酒

也曾经一起为考试而通宵复习

我们一起翻过墙,也一起疯狂的从学校骑车到奉贤

我们一起去唱歌,到最后却一起开始睡着

怀念在一起的每一天,我们快乐的每一天,疯狂的每一天,为考试痛苦的每一天

现在想来,都是那么美好。

大四,我们开始各自忙碌,我忙着实习,西西姐忙着出国,噜噜姐忙着考研

联系少了

最后,我们都还是工作了,回到那个最初开始的地方

今天之后,我们各奔东西了

但是,希望我们还是能像去南京旅行时说的那样,每年都会一起去旅行,一起见面相聚

大学四年,我生活中还有一个很重要的应该就是MLKZ

一个让我认识了很多人的地方

也让我遇到了猪

但愿能永远

从开始实习,就越来越觉得现在的工作不适合自己

虽然还未定岗,但摆在面前的可选的两个发展方面都不是我喜欢的

于是,踏上了重新投简历的过程

可到了这几个人,有关HR的这些职位越来越少,几个礼拜也许都没有职位的更新

即使偶尔有的面试,不是我放弃他,就是他对我不满意

到了6月份,大家的工作都尘埃落定了

我也好像不能改变现状了

说服自己要适应现状

可是,我真的能浪费这些时间吗?

矛盾中

 

SGM 2 weeks

April 21, 2010

到SGM两个礼拜了。很多感慨。却不知道如何说起。

对于IT的规模,虽曾预计过,但不可否认,仍超出我的想象。我也算终于知道张某人口中的一排监控屏是什么样子的了。

可是高度的自动化带来的IT上的风险转移。

看着这张架构图不由心里发汗,高可靠性,在这里比什么都重要。

工作上很多事情要做。。很多东西要记。。

对于记忆,我自认为从小就与众不同。

或许是形象思维过强吧,写了这么多年的code也始终没记住过api,准确的说,是我压根就没去记过。当然,代码提示真是个好东西。

记得有个技术大牛跟我说过,脑子是用来想东西的。

工作上记得东西太多,最近别指望会费大量心思去coding了

coding始终是非常有趣的事情。

在未来的一段时间内恐怕coding都和这两个项目分不开,一是一个基于browser的web os,二是一个rpg游戏。

对于前者,这已经不是我第一次做这个题材了。如果没记错是第三次,回顾过往的每次,都陪伴了我技术上的飞跃。虽然可能也伴随了某些不好的回忆。

记得第一次应该是高一高二,纯js,当时技术怎一个烂字了得。第二次大三,ajax+asp.net,压根就不懂操作系统设计和oo,也难怪被这帮老头老太ooxx。

这次决定用sl做ui,以此增加了不少ui上的可靠性。也打算像真正operating system一样分离用户态和管态,这块的技术难点我也有所眉目了。只是前阵子和以前一样,在ui上花费了我太多的时间。

或许我注定是个色弱吧。

不过说归说,这块已经么啥大问题了。也完成了cs code和xmal描述的物理分离,代码的耦合已经降低的新的境界了。

当然这只是表层。

未完待续。。。

关于后者的游戏,前阵子还有朋友问我写的啥样了。其实早在wonders的时代已经开始计划,也确实写了不少代码。

倒不是真因为dr lee的梦魇打算囧他一囧。只是游戏一直在玩都腻了,换换口味罢了,其实rpg游戏说简单不简单说难确实不难。

当初尝试性的写了一部分游戏框架,只是偶尔间看到Farseer Physics,不由有些发毛,太烂了推倒重来吧。

咳。。仍是未完待续。。要做的事情太多了。。

不知道写了些啥。。。关机睡觉。

一起看过的电影

April 16, 2010

第一部应该是《木乃伊3》

10月4日,《画皮》

接下来么,记忆错乱中,应该有《南京!南京》《高考1978》《叶问》《金刚狼》应该都是在西南影城看的

然后就是《喜羊羊与灰太狼之虎虎生威》,《麦兜响当当》,《伯纳德行动》,《神秘代码》,《2012》

再后来应该就是最近的《极限空间》《神火之盗》《阿凡达》《爱丽丝漫游仙境》

接下来就是昨天的《杜拉拉升职记》

慢慢养成了收集电影票的习惯

欢迎来补充^_^

众所周知,Twitter和中国无缘。通常我们上twitter有2个手段,要么vpn,要么通过国内某些网站同步。

最近把自己的空间 用BlogEngine重新整了一遍,看到其自带的一个用于同步Twitter的widget颇为不爽,原因很简单,我的主机在国内,根本连不上。

在国内么,Follow5 是一个不错的微博,其本身就能用于同步Twitter消息。

于是便开发了这么一个widget。

 

效果见http://www.dumuzi.cn/

右图为管理员登录 

 

 值得注意的是,由于follow5访问api需要api—key,我提供的code中使用了一些手段避免了明文显示之。

当然,dotnet写的东西是可以反编译的,这我就么啥办法了。

各位如果需要其他用处,请直接去这里 申请。

 

源代码下载

 

我们的纪念^_^

March 22, 2010

第一次我们去吃哈根达斯,你吃得甜到不舒服,还带我在南站兜了一大圈。。。第一次你背着我

我们第一次的旅行,西塘,你迟到了

第一次的分手

在一起你的第一次生日,我亲手做了蛋糕

为你绣的卡 套(还在你的钱包里)

我的生日,吃DQ吃到想吐,收到你的玫瑰花蜡烛,一起看喜羊羊与灰太狼

一起去杭州,一次不太好的回忆,雨天,西湖很美,美的让人有点忧伤

一起去无锡,没有吃到羊肉的你,只能拍照留念:P

一起去乌镇,你不止迟到,还记错地方

你的毕业照,仅有的两张照片

你的第二次生日,釜山料理,你吃光了我的蓝莓柚子沙拉,还把送你的钥匙包放在家里睡觉

我的第二次生日,喝醉了的你,让我有点生日,还是谢谢你的原宿娃娃

一切虽然平凡,却快乐

(仍在继续)

明天要加油哦,一定会过的

 

接着上回.

Dynamic也是Dotnet 4.0的一个重要的feature.

通常的动态语言,如JavaScript, Python, Ruby 都能做到动态.即其类型在编译时能不检查,而等到运行时方知.

当然,动态化通常受到了IDE,效率等影响.

.net 4.0引入 Dynamic Language Runtime (DLR),为其带来了动态语言的一些feature.

下面我们进行简单的研究.

类型动态 

            dynamic str = "string";
            Console.WriteLine(str.GetType().ToString());

 

 以上例子非常简单,输出了一个动态对象其真实的类型.其输出是System.String

或许你会认为其和var关键字起的效果是一样的.其实不然.

最明显的,你会发现,dynamic做了IDE屏蔽,其作为动态类型在编译时,是不推测其类型的. 

就以上文例子,其 GetType()方法在IDE(Vs2010)里被解释成了dynamic expression,其只有到了运行时方能被resolve

相反,var关键字是一个典型的语法糖,其在编译时已经被正确解析成自己真实的类型.

关于这点,有兴趣的朋友可以通过Reflector看看.

 

因为这个特点,我们反射时就不必再像以前那样了。

//以前的方法
Type type=...;
type.GetMethod(
"method name",...).Invoke(data,...);
//现在的方法
dynamic obj=Activator.CreateInstance(...);
obj.XXmethod()

 

Dynamic的几个实现

.net 4.0提供了几个dynamic类型或接口,如DynamicObject,ExpandoObject,IDynamicMetaObjectProvider

其都是在System.Dynamic命名空间下。

 ExpandoObject

 ExpandoObject提供了一个具有可扩充的动态对象。这里的可扩充,包括对其不同节点上的属性或是方法的扩充。

最简单的例子,通过这个对象,我们便可以实现类似json里的某些功能。

 //JS code

var test={
   name:
"test",
   func:
function(){
       alert();
   }
};

 

类似的Csharp代码如下

dynamic test = new ExpandoObject();
test.Name 
= "test";
test.Func 
= new Action(() => Console.WriteLine("alert "+test.Name));
Console.WriteLine(test.Name);
test.Func();

通过以上特点,我们在处理多节点对象(如XML)就非常方便了。

 

DynamicObject 

通常我们自定一个类去继承 DynamicObject,而当我们对某个dynamic 对象使用XX方法或属性时,其TryGetMember方法都能被拦截到。

所访问的方法或属性名是在 public virtual bool TryGetMember(GetMemberBinder binder, out object result);的GetMemberBinder.Name中得以体现。

举个例子吧

代码
    class Program
    {
        
static void Main(string[] args)
        {
            dynamic test 
= new TestDynamicObject();
            Console.WriteLine(test.Test);
            Console.ReadKey();
        }
    }

    
class TestDynamicObject : DynamicObject
    {
        
public TestDynamicObject( )
        {
           
        }
        
public override bool TryGetMember(GetMemberBinder binder,out object result)
        {
            
string nodeName = binder.Name;
            Console.WriteLine(binder.Name
+" run");
            result 
= DateTime.Now;
            
return true;
        }
    }

 

 以上代码输出类似如下:

Test run

2010-02-25 15:15:42

 

总结 

当然,DLR并非如上介绍的这么简单,其也支持了某些动态语言的binder,如IronPython等。在PDC09中,就有相关的video。 

本文也只是简单了介绍了DLR的一些皮毛罢了。 

 To Be Continue....

 

.net 4 和对应的vs2010已经出来一阵子了.从最早的beta1到如今的RC,已愈发向正式版靠拢.

最近闲来无事,又似乎有些假日综合症之嫌,于是静下心来对dotnet 4.0从头到底好好研究一下. 

首先我们来研究MEF 。

 所谓MEF (Managed Extensibility Framework)

 

通常,由于应用需求的变化频繁,导致应用软件可扩展性越做越差,很难加入新的功能.在NET4.0中,加入了MEF(托管可扩展框架)就为了解决了简化可扩展应用程序和组件的设计这个问题.

由于MEF已经包含在.net 4.0之中,我们不需要额外下载其类库,当然,如果对其实现原理感兴趣,可以在http://www.codeplex.com/MEF看到其源代码.

 

如何创建一个MEF Application

通常,创建一个MEF Application需要实现以下几个步骤.

  1. 使用[Import]属性标记可扩展的地方,并将其已接口形式表达
  2.  创建进行扩展的组件,实现(1)的接口的同时使用[Export]标记

 

我们接着用一个简单的例子来做以上2步。

首先,我们申明了一个可用于扩展的属性Message,并实现了其调用时的方法Do().

注意,Import属性是在System.ComponentModel.Composition下,需要在项目中引入System.ComponentModel 

    class MEFTest
    {
        [Import]
        
public string Message { getset; }
        
public void Compose()
        {
            CompositionContainer container 
= new CompositionContainer();
            CompositionBatch batch 
= new CompositionBatch();
            batch.AddPart(
new Extension1());
            batch.AddPart(
this);
            container.Compose(batch);
        }
        
public void Do()
        {
            Console.WriteLine(Message);
            Console.ReadKey();
        }
    }

 

 接着,我们要具体实现一个被扩展的对象。

 class Extension1
    {
        [Export]
        
public string Message
        {
            
get
            {
                
return "I am extension 1";
            }
        }
    }

  这样,在我们需要正式初始化MEFTest实例并调用其Do方法之前,自然需要一个方法将可扩展的Message对象“绑定”到Message这个接口之上。而这就是 Compose()方法的作用。在其之中,我们创建了一个CompositionContainer容器用于绑定该属性。

请注意,任何Export标记过的都必须有对应的Import在容器中,反之却可以通过 Compose()。

 关于实际应用

 通常,我们在实际应用中没有上文来的这么简单。MEF支持通过程序集或目录(DirectoryCatalog)或2者结合等方式绑定可扩展的对象。

 CompositionContainer  container = new CompositionContainer(

new DirectoryCatalog(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)));

 

 如果在新建CompositionContainer容器时,使用了DirectoryCatalog,则在该目标路径下的所有程序集都会被遍历查询,用于寻找实现Import接口的具体class。

 当然,请在标记Export时使用[Export(typeof(接口))]来精确定位。

 另外,通常使用时,我们需要使用一些特定的元数据(metadata)来进一步描述或说明某些特定接口(如果安全性,速度等)。我们可以使用PartMetadata标记class,使用ExportMetadata标记实现方法。 

 

总结

 本文主要介绍了何为MEF,以及MEF的简单应用。望广大网友指正。

 To Be Continue....

 

Code7 Contest 的杯具

February 2, 2010

咳....又想起了那个破悲剧Code7 Contest比赛...

杯具有三:

  • 棋差一招 得了个Run-Up...与PDC09失之交臂
  •  奖品还么寄到杯具先到了
  • 杯具长得很杯具
直接上PP吧...杯具一个....

 

 

-----------------------------------------------------------------------------------------------------------------

| 戴佳顺 | msn:edwin19861218@hotmail.com | QQ:1961218 | Web:http://www.dumuzi.cn |

Tag标签: Code7,杯具
0
0
 
(请您对文章做出评价)
 
« 上一篇:XNA入门教程----(三) 简单的动