飞 的个人资料程序人生照片日志列表更多 工具 帮助

日志


8月31日

最近一段时间

最近很繁忙,一堆事情要做。

劳民伤财的奥运结束了,对此最大的感觉就是导致几个我常常去的网站没法访问,比如CSDN,非常可恶,搞不懂技术网站有什么好封的,搞得我每天早上都没新闻看。

买了一个台式机,有640G的硬盘,我分区的时候,分了两个40的,然后后面想了半天就不知道怎么分了,随便分了一下,19宽屏,写代码的时候,两边的窗口可以展得非常开,本来想要买22寸屏幕的,貌似太大了,看惯了14寸本本之后根本不习惯。

装了一个vista跟一个server2008,都还不错,就是挺占空间的,不过空间对我来说也无所谓了。

另外现在开始玩一个叫做开心网的网站,它的意思就是一个社区,认识的人在里面分享一些信息。有一个主框架,就是登录啊,用户个人信息,互相发消息之类的,然后可以添加很多插件,比如说可以加一个插件把朋友买成奴隶来蹂躏,可以攒钱买车子,可以炒股,可以出题目看看朋友对自己的了解程度,这种模式挺有意思,值得效仿。

基础模块加插件来构成一个系统,然后在上线之后还可以不断添加功能,每个用户可以自己定义显示哪些插件,每天都在添加修改功能。

另外一个值得思考的就是里面的奴隶买卖功能,每个人都可以被买成奴隶,然后身价会提高,拉一个人来注册可以加一些钱,然后大家在互相炒作奴隶,奴隶买来之后可以打工一次,交一些中介费。这个模式让我想起了一个东西,就是房子,大家炒作,然后让这个奴隶价格提高,于是显示的个人总资产就高起来了,但是呢,如果你这个奴隶放在手里,一直没人来买了,那么就跟房子一样,变不了现金,这个价格也就没有意义了。

不过游戏毕竟是游戏,如果买奴隶次数多了,还可以每天安抚,奴隶发奋挣一些钱给主人等等,所以基本上是不会形成实际状况下的高价房子没人买的情况,而每个人的资产也是逐步增加的。

另外一个特色功能是我的足迹,这个有一个地图,你在地图上点一个地方,然后发表感想,对这个去过的地方有什么评价,最后都填好了,地图上会自动填色。看到自己去过的地方逐渐覆盖整个中国,那感觉还是不错的,而且也可以看到好友的足迹的并集。

这个网站邀请朋友很有特色,它采用一种隐式强迫的做法,怎样增加用户呢?怎样使得用户主动推荐自己的好友加入,前面提到的奴隶买卖是一个,推荐好友,自己增加一些钱,于是可以买更多奴隶,或者可以买好一点的车子,这样大家都使劲推荐好友来了,好办法。

8月20日

使用Python创建Silverlight控件

其实关注Silverlight很久了,只是最初的版本令我很失望,1.0的Silverlight在我看来,就相当于强化版的VML或者SVG而已,多年以前(04年)我一直期待微软能出一个强大的web端插件,能够跟flash竞争,这么久以后,这个东西才逐渐变成现实。

好吧,Silverlight 2有了,尽管它还是beta 版,先玩玩吧。我搞了一个Visual Studio 2008 Express版,装了Web跟C#,竟然都不支持2.0的Silverlight开发,有没有搞错,就是冲着那些控件才来玩SL的,这怎么办。

这可郁闷死我了,于是我只好乖乖装完整版本的Visual Studio 2008,这玩意大得很,我把硬盘空间整理了又整理,勉强弄出一点地盘给它,N久之后终于装完,折腾了半天,那个该死的插件又装不上,搞了好久还是不行,我很生气,算了,不搞它了。

于是我决定不要VS2008了,听说Silverlight 2.0支持动态语言,好,来玩玩。我以前是做JavaScript的,换个吧,我来玩玩Python,于是我就找例子,一找找到了,怎么呢,我来写了:

这里是XAML文件app.xaml

<Canvas xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="System.Windows.Controls.Canvas" x:Name="Page" Width="400" Height="300">
    <TextBlock x:Name="MsgText" Canvas.Top="10" Canvas.Left="10"></TextBlock>
    <Button x:Name="TestButton" Canvas.Top="40" Canvas.Left="10" Content="Test"></Button>
</Canvas>

这里是Python文件app.py

from System.Windows import Application
from System.Windows.Controls import *
from System.Windows.Browser import *

class App:
    def __init__(self):
        self.scene = Application.Current.LoadRootVisual(Canvas(), "app.xaml")

    def start(self):
        self.scene.TestButton.Click += self.TestButton_Click

    def TestButton_Click(self, sender, eventArgs):
        self.scene.MsgText.Text = "Hello, world!"

App().start()

其他的没什么悬念了,Chiron /d,开始跑,http://localhost:2060/index.htm上出现了效果,一个文本框,一个按钮,点一下按钮,框里面出来一个hello, world!

1

于是我就很激动,原来是这么好玩的啊,貌似写起来也很简单的哇,那我来搞两个复杂一点的控件。什么控件比较帅呢,我一想,日历吧,这个东西好,那我就开始了,我加了一行

<Calendar x:Name="TestCalendar" Canvas.Top="10" Canvas.Left="10"/>

好了,开始跑,咦,不对,说找不到Calendar这个东西,研究了一下文档,发现这个是包含在System.Windows.Controls.Extended.dll里面,于是我把这个dll拷到app目录下,还是不行,怪啊,这要怎么办呢,到处找了一遍,发现竟然没有有关Python调用SL扩展控件的文章,这可痛苦了。

但是我不甘心,我相信微软不会这么不友好,于是我继续查帮助,咦,Calendar前面要加一个前缀做命名空间,但是XAML头上怎么定义呢,我想了想,实在想不出来,然后我很猥琐地想到了Blend,嘿嘿,我下载了一个,安装,创建项目,然后创建控件,这个时候只有内部控件可以用,然后我在项目上添加引用到SDK目录下的System.Windows.Controls.Extended.dll,于是就可以创建日历了。

我要的可不是这个哦,切换到XAML栏,看到没有,这行代码:

xmlns:System_Windows_Controls_Extended="clr-namespace:System.Windows.Controls; assembly=System.Windows.Controls.Extended",原来就是它在起作用呵,于是我照样定义了一遍,仍然不行。。。

这是怎么回事?继续发奋研究文档,终于发现,在Python文件里面也要写东西的,我贴完整代码了哦,app.py

import clr
clr.AddReference("System.Windows.Controls.Extended")

from System.Windows import Application
from System.Windows.Controls import *
from System.Windows.Browser import *

class App:
    def __init__(self):
        self.scene = Application.Current.LoadRootVisual(Canvas(), "app.xaml")

    def start(self):
        # TODO: replace this with your application start logic
        self.scene.TestButton.Click += self.TestButton_Click

    def TestButton_Click(self, sender, eventArgs):
        HtmlPage.Window.Alert(self.scene.TestCalendar.SelectedDate.ToString())

App().start()

呵呵,看到没有,最开始那两句,它是起作用的关键。下面是app.xaml

<Canvas xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:System_Windows_Controls_Extended="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Extended"
x:Class="System.Windows.Controls.Canvas" x:Name="Page" Width="400" Height="300">
    <System_Windows_Controls_Extended:Calendar x:Name="TestCalendar" Canvas.Top="10" Canvas.Left="10"/>
    <Button x:Name="TestButton" Canvas.Top="180" Canvas.Left="10" Content="Test"></Button>
</Canvas>

好啦,预览一下,非常帅:

2

好了,今天的试验到这里结束啦,以后我们再来玩复杂些的。