A 的个人资料XA's Documents照片日志列表更多 工具 帮助

日志


2008/5/11

5.10德中同行现场活动有感~(多图无码)

在出发前一天晚上,本人的内心就灰常的激动,预计会是一次难忘的经历,实际上果然如此~活动的全名叫德中同行文化交流活动,是德国与中国政府合办的,包括很多很多很多很多内容(在此省略1000字),其中就有我此行的目的 - Maximilian Hecker演唱会~先放一张活动地图~

IMG_0120

跟我一行的有2个同学,省略姓名样貌特征若干。下午2点多坐261出发,3点半我们到了人民大礼堂。先在人民广场转悠了好大一圈,以人民广场的大牌坊开头。说起人民广场还真算是我来重庆见到的第一个名符其实的广场的地方。

IMG_0007

虽然烈日灼人,但是广场里面人满为患,尤其以MM为甚。IMG_0006

跟以往初中同学的聚会活动一样,与豆友们集合的地点是“广场旗杆下”。广场旗杆下是灰常晒人的,默认偏移到旗杆旁边的德国黑啤店集合。德中同行活动进行的这几天,正宗的黑啤都是不限量供应的!虽然德国的啤酒是世界上最著名的,不过我不喝酒,对我来说也没多大感觉~

IMG_0009

这栋看上去像烂房子一样的烂房子,实际上是主会场之一,叫做文艺亭,当时正在进行张一白的摄影作品展,有他本人到场为观众解析《影像重庆》,很多会场是限制人数的,我没能挤进去。。。实际上由于各种有意思的活动实在太多太多太多,而且又都是免费的,只要是要排队才能体验的,我都没去,剩下的我倒是玩了个遍~

IMG_0015

中途暂停了一会,因为2个同学同时要求去上厕所。。。我在外面坐等,嗯环境不错,就是凳子晒得发烫。。。

IMG_0016

在文艺亭里面还有一项免费学德语活动(为什么前面都说了所有活动都是免费的这里还要加个免费二字呢?这就是中国人的习惯吧),只有每天下午2点才有,再次遗憾错过。。。

IMG_0019

再来一张文艺亭,照片中的志愿者MM其实是美女,经过交涉得知是来自川外的(省略交涉内容若干。。。)~

IMG_0020

除了文艺亭还有个主会场叫会议厅,像个小鸟巢,由于又没能挤进去,不知道里面在进行什么会议。。。IMG_0060

演出开始前我们基本上在到处看展览,展览布置和设计,以及展示内容都是经过用心规划的。首先惹眼的是西门子的这块放在入口的太阳能电池板。

IMG_0024

在安联保险集团的展区,有体验高尔夫的活动~

IMG_0025

在海瑞克公司的展区,有一个灰常酷的模型,这个巨大的机器叫做“双台式盾构机”,这个模型很仿真,实际上它的各个部件是在动的,可惜照片看不出来。请猜想一下这台机器是用来干什么的?(在照片下面公布答案。。。)

IMG_0031

答案是,这台机器是用来挖地铁隧道的!在最右端有一个旋转的挖掘头(模型上也是在旋转的),整个机器都可以在特殊的铁轨上面移动。也就是说,它的工作流程是:

do

{

挖;

前进;

}while (挖通了 == false)

可以边挖边前进,边挖边前进,边挖边前进。。。真是一台强大的机器,高科技啊~

值得一说的是,每个展厅都是由一种特殊的竹子支起来的,看上去很环保,环保且高效正是是本次展览的侧重点之一。

IMG_0037

在博世的放映厅有一个黑酷的东西,大家来找茬,看看在哪里?(提示:黑酷是重要线索)

IMG_0039

在左上角有一个又黑又酷的空调,这就是黑酷的东西~

博世一直是我比较敬佩的一个企业,下面有个古董级产品,注意,这是一种家用电器,注意,这不是滚筒洗衣机(工藤新一的日文发音。。。),是博世在1933年生产的世界上第一台带压缩机冰箱!

IMG_0054

广场上还有个平面设计展,是一名叫张扬的艺术家创作的,这次展览了他眼中德国与中国的不同,蓝色代表德国,红色代表中国,下面这幅说的就是我。。。但是我依然执着地把它拍了下来~

IMG_0077

在巴斯夫公司展厅展示的宝马Mini车~

IMG_0101

这是下午4点时的舞台~7点开始的Live show就在这里进行~

IMG_0109

整个会场纵览图~在三峡博物馆拍的~这里的地形概述就是:人民大礼堂和三峡博物馆把人民广场夹在了中间~

IMG_0111

随后我们去了人民大礼堂内部,门票5元,比较划得来~只放一图~

IMG_0163

用膳~IMG_0185

这是6点40时的现场观众一瞥,到后来以万计数一点不过分,所以本人能占到前排真是相当得意啊,哇咔咔~

IMG_0203

7点演出开始,首先是中国的器乐团~

IMG_0201

前面一哥们也太高了,而且明显不是音乐爱好者,别人都比较配合现场气氛,就他一SB动也不动表情之木讷仿佛公鸡中的呆若木鸡,以至于后来自觉无趣走了,我也因此能够顺势一下往前挤了好几个,后来前面都陆续有人走,我也一步步来到了MH的跟前~

IMG_0202

这是来自柏林的主持人,精通2国语言,说起中文来那腔调像说相声的,说起德语来那腔调像马戏团报幕的~

IMG_0213

然后是4LYN乐队,一支来自柏林的新金属乐队,他们在德语国家是非常知名的,在世界杯上给德国队加油唱的就是他们的歌~他们一来就把现场气氛带向了第一个高潮,4LYN的主唱很像GREEN DAY的主唱,从相貌到动作,再到身高。。。周围总是有一群SB,S问这是什么乐队啊,B说他们的名字叫柏林乐队;S举着一个五月天的手势,B们也跟着举起了五月天的手势,SB们一起举着五月天在那里摇摇晃晃;还有若干SB们的事例云云(省略1000字)~4LYN的鼓手今天刚好是32岁生日,现场乐迷在带动下,3,2,1,一起喊了一句“生日快乐”,鼓手马上来了一段Solo,相当精彩~4LYN说,这是他们演出15年来最棒的一次,他们第一次来中国,更是第一次来重庆,就感受到了充分的热情~

IMG_0232

接下来是甜蜜的孩子(The Honeys)乐队,不得不说相对于4LYN,这哥们在现场受到了冷落~

IMG_0256

然后是一男一女的完全立体声(Stereo Total)乐队,他们的风格覆盖相当广泛,唱的歌比较诙谐~那男的混音的时候说:I like making love with 3 people!太邪恶了。。。

IMG_0282

到最后的Maximilian Hecker上场,现场完全已经High 翻,本人早已汗流浃背~

IMG_0308

MH演奏吉他,现场适时地安静了下来~

IMG_0314

大屏幕上飘起了雪花~意境很完美,音响设备很好,旁边一哥们说这是他看过的live里面声效最好的,很讽刺的是免费的演出声效比收费的还好~

IMG_0321

MH键盘耍起~安逸~

IMG_0343

MH说了很多的“谢谢”,而且说的很标准,还有“我爱你们”、“晚上好”等等,毕竟MH也不是第一次来中国了。MH唱了为数不多的几首歌~当MH说:I have to say this is the last song。下面全部在喊No,随后又一起喊One More,甚至有喊Encore的。可是天下没有不散的筵席。。。

IMG_0354

更多照片以及MH演出的视频录像,请联系本人索取~

今天的活动到此结束,大家晚安~

2008/5/6

《SQL Server 2000 数据库设计权威指南》学习不完全笔记(三)~

SQL Server 2000中,嵌套触发器选项是一个服务器全局设置,语法是

sp_configure 'nested triggers',1 | 0 这里1=ON;0=OFF

如果执行一个级联操作,所有相关表上的触发器都将启动。触发器操作最多嵌套32层。注意:我们有可能建立一个对表进行级联操作的无限循环的触发器。

而递归触发器选项是一个特定数据库的设置,语法是

sp_dboption '<dbName>','recursive triggers','TRUE' | 'FALSE'

这使得触发器在执行与其相关表的修改时重新启动触发器。

为了说明这2个选项的作用,先建立2个很简单的表

CREATE TABLE tableA

{

field varchar(40) NOT NULL

}

CREATE TABLE tableB

{

field varchar(40) NOT NULL

}

GO

然后创建2个非常简单触发器,每一个向另一个表插入同样的值。(省略创建触发器和插入的SQL代码N行)当服务器的嵌套触发器设置关闭时,将tableA中插入一行,则被触发的惟一触发器是tableA的触发器。但是当嵌套触发器选项打开,递归触发器选项关闭时,在tableA中执行同样的插入,这一次依次触发tableA和tableB的触发器N次(N=32,因为最多嵌套32层),然后由于超出限制次数报错。错误信息eg.:

Server: Msg 217,Level 16,State 1,Procedure tableB$afterUpdate$demoNestRescurse,Line 7 Maximum stored procedure,function or trigger nesting level exceeded (limit 32).

触发器的执行比约束慢得多,并且不是保护数据最好的方法。只有用约束处理不了的时候,才使用触发器。

2008/5/5

关于东方标准的笔试~

有2个问题,当时可能做的不对,现在补充一下。

第一个是问传递依赖属于第几范式,实在是忘记属于第几了。

答案是:第一范式就是原子性,字段不可再分割;
第二范式就是完全依赖,没有部分依赖;
第三范式就是没有传递依赖。

参考http://www.yiboit.com/?uid-347-action-viewspace-itemid-1136

第二个是要把一个前缀表达式写成后缀表达式。

貌似是属于编译原理的知识。

参考http://www.chinaaspx.com/archive/other/18887.htm

《SQL Server 2000 数据库设计权威指南》学习不完全笔记(二)~

当你有一个该表的更新后触发器,SQL Server将不采用在行内进行更新,而是行被先删除,然后再插入。这样才能在触发器中实现Rollback Transactions,有备份。

在所有可能的情况下使用惟一性索引,对于系统的性能来说是十分必要的。

使用2部分组成的名字(eg.:owner.objectName)来访问所有对象。

如果修改数据如下:

ALTER FUNCTION album$returnKeysByArtist

(

@artistId int

)

RETURNS TABLE

WITH SCHEMABINDING

AS

RETURN

(

SELECT albumId

FROM album  ----used to be dbo.album

WHERE artistId = @artistId

)

产生的错误中会有"……Names must be in two-part format and object cannot reference itself."

是用约束而非触发器的一个重要原因是:查询优化程序可以借此来优化查询。

如果使用char而非varchar作为LIKE掩码,可能带来填补空格的问题。

从查询分析器看到的错误信息由几个部分组成:错误编号,eg.:Msg 547;级别,Level 16;状态,State 1;行,Line 1;错误文本。

在下面的例子中建立了一个触发器,其中有2个类似的检验,对同样的行进行处理,但其中一个在获取多行时失效。

CREATE TRIGGER artist$afterUpdate$demoMultiRow

ON artist

AFTER INSERT,UPDATE --fires after the insert and update has occurred

AS

IF NOT EXISTS (

SELECT *

FROM INSERTED

WHERE name IN ('the who','the beatles','jethro tull')

)

BEGIN

SELECT 'Invalid artist validation 1'

END

 

IF EXISTS (

SELECT *

FROM INSERTED

WHERE name NOT IN ('the who','the beatles','jethro tull')

)

BEGIN

SELECT 'Invalid artist validation 2'

END

GO

在插入单行数据的时候,2种处理方式都没有问题。但是插入多行的时候,eg.:

BEGIN TRANSACTION

INSERT INTO artist (name,defaultF1,catalogNumberMask)

SELECT 'ROLLING STONES',0,' per cent'

UNION

SELECT 'JETHRO TULL',0,' per cent'

ROLLBACK TRANSACTION  --undo our test rows

这时只输出了

Invalid artist validation 2

第一种处理方式失效了,因为有一行满足条件('jethro tull')(我们有一行INSERTED.name 在测试列表中),所以只返回一行(有一行存在)。这是一个在编写触发器时相当普遍的问题。

《SQL Server 2000 数据库设计权威指南》学习不完全笔记(一)~

阅读本书最好有数据库系统原理的一些基础知识,以及SQL Server 2000的入门知识,建议阅读《Beginning SQL Programming》。

数据转换服务(DTS)可以在OLE DB数据源之间变换和转移数据,也就是说可以实现Excel与SQL Server甚至文本文件数据的批量导入导出,这是一个非常激动人心的功能。更多参阅《Professional SQL Server 2000 DTS》(ISBN 1861004419),这本书在本书封底的SQL Server书系树形图里位于顶端,也就意味着它的难度是很高的。曾经在创新杯决赛里看到清华大学的一个演示,就是把Excel里面的一些表整个复制,然后粘贴到网页中,就可以直接把数据导入到Web后台的SQL Server中,应该就是用DTS实现的。

关于对象的命名规则,建议使用大写字母划分词的边界。eg.:televisionScheduleItem

如果加上拥有者,则可以使用拥有4个部分的命名模式:

[<server>.][<database>.][<owner>.]<objectname>

在涉及到跨服务器或者跨数据库的数据操作时,这种命名模式非常常用。

在使用bit数据类型时,每8个bit列的实例占用1个字节,因为,当表中有8个bit列和有1个bit列的宽度一样。它通常用作Boolean型,因为SQL Server没有提供明确的Boolean型。但这样不太理想,因为bit型可以取NULL值。而且bit列不能加索引。

int型可以取值-231~231-1,大概就是正负20亿之间,占4个字节。int型的一个重要用途是用于存放IP地址,因为一个IP地址刚好是分为4个8位长字节组成的32位整数。

bigint型取值范围是-263~263-1,占8字节。smallint占2字节。tinyint占1字节。

当你确认每一行的字符串都具有相同的字符数且每一行都是非NULL的,才应该使用char类型。

如果你要在字符串中给出Unicode字符串,则需要在串前加一个N,eg.:

SELECT N'Unicode Value'

timestamp型(即rowversion)是数据库唯一值,只要修改数据库中任意一行,则会自动改变。

uniqueidentifier型(唯一标识符),全球唯一确认号码(Globally Unique Identifier,GUID)将会成为Microsoft计算的支柱。GUID根据网卡标识号(如果有的话),当前的日期和时间,取自CPU时钟的惟一数和某些“魔法数字”,这使得它几乎不可能重复。它占用16个字节。不可以将任何二进制数放入一个uniqueidentifier列,因为该值必须符合其生成标准。

索引分为簇式和非簇式的,簇式按照索引顺序安排物理表中的顺序,非簇式是一种简单地提高存取速度的一种完全不同的结构。索引是使用平衡树结构实现的,也叫B-树。簇式索引适用于:包含有限个不同值得码的集合;范围查询;数据顺序存取;返回大的结果集查询;常常被包括JOIN 或GROUP BY 子句的查询访问的码集。不要再经常改变的列上建立簇式索引,也就是,最好只读。

2008/4/22

Silverlight实践之XA的博客阅读器~

这是我第一个用Silverlight做的可执行程序,花了3个小时才算完工正常运行。。。

在这个程序中主要用到Silverlight的XML数据操作。

XAdoc1

主要文件xadoc.xaml的代码如下:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
    x:Class="XAblogreader.Window1"
    x:Name="Window"
    Title="XA的博客阅读器"
    Width="640" Height="480">

    <Window.Resources>
        <XmlDataProvider x:Key="xadoc" d:IsDataSource="True"   Source="http://xatest.spaces.live.com/feed.rss"//xml数据源的名称为xadoc
            <XmlDataProvider.XmlNamespaceManager>
                <XmlNamespaceMappingCollection>
                    <XmlNamespaceMapping Prefix="wfw" Uri="http://wellformedweb.org/CommentAPI/"/>
                    <XmlNamespaceMapping Prefix="cf" Uri="http://www.microsoft.com/schemas/rss/core/2005"/>
                    <XmlNamespaceMapping Prefix="dcterms" Uri="http://purl.org/dc/terms/"/>
                    <XmlNamespaceMapping Prefix="msn" Uri="http://schemas.microsoft.com/msn/spaces/2005/rss"/>
                    <XmlNamespaceMapping Prefix="live" Uri="http://schemas.microsoft.com/live/spaces/2006/rss"/>
                    <XmlNamespaceMapping Prefix="slash" Uri="http://purl.org/rss/1.0/modules/slash/"/>
                </XmlNamespaceMappingCollection>
            </XmlDataProvider.XmlNamespaceManager>
        </XmlDataProvider>
        <DataTemplate x:Key="title模板">  //这里使用了数据模板
            <TextBlock Text="{Binding Mode=OneWay, XPath=.}"/>  //数据绑定
//OneWay表示绑定是单向的,数据源变化之后绑定的对象随之变化,但是绑定的对象变化并不影响数据源
        </DataTemplate>
        <DataTemplate x:Key="item模板">  //这里定义了数据模板
            <StackPanel>
                <TextBlock Text="{Binding Mode=OneWay, XPath=title}"/>
                <Label Content="{Binding Mode=OneWay, XPath=link}"/>
                <TextBlock Text="{Binding Mode=OneWay, XPath=pubDate}"/>
            </StackPanel>
        </DataTemplate>
        <DataTemplate x:Key="item模板5">
            <StackPanel>
                <TextBlock Text="{Binding Mode=OneWay, XPath=title}"/>
                <TextBlock Text="{Binding Mode=OneWay, XPath=pubDate}"/>
            </StackPanel>
        </DataTemplate>
    </Window.Resources>
    <Window.Background>
        <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">  //使用线性渐变
            <GradientStop Color="#FF559032" Offset="0"/>
            <GradientStop Color="#FFC5EB82" Offset="1"/>
        </LinearGradientBrush>
    </Window.Background>

    <Grid x:Name="LayoutRoot">  //布局中使用了2个Grid面板来实现控件中的数据上下文共享
        <Image HorizontalAlignment="Left" Margin="8,8,0,0" VerticalAlignment="Top" Width="78" Height="72" Source="{Binding Mode=Default, Source={StaticResource xadoc}, XPath=/rss/channel/image/url}"/>  //Image控件绑定了博客的头像
        <Label Margin="103,21,296,0" VerticalAlignment="Top" Height="33" Content="{Binding Mode=Default, Source={StaticResource xadoc}, XPath=/rss/channel/title}" ContentTemplate="{DynamicResource title模板}" FontSize="16" FontWeight="Bold">
//Label控件绑定了博客的标题栏
            <Label.Background>
                <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
                    <GradientStop Color="#FF82DB6E" Offset="0"/>
                    <GradientStop Color="#FF6AAA76" Offset="1"/>
                </LinearGradientBrush>
            </Label.Background>
        </Label>
        <Grid Opacity="1" DataContext="{Binding Mode=Default, Source={StaticResource xadoc}, XPath=/rss/channel/item}" Margin="8,80,8,12">
            <Grid.Background>
                <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
                    <GradientStop Color="#FF678165" Offset="0"/>
                    <GradientStop Color="#FF82DB6E" Offset="0.928"/>
                </LinearGradientBrush>
            </Grid.Background>
            <ListBox HorizontalAlignment="Left" Margin="8,8,0,8" Width="200" ItemTemplate="{DynamicResource item模板5}" ItemsSource="{Binding Mode=OneWay}" IsSynchronizedWithCurrentItem="True" Opacity="0.8" Background="#FF71DD8F"/>
//IsSynchronizedWithCurrentItem属性明确定义了数据上下文的共享
//ListBox控件绑定了博客的文章列表

            <Grid Margin="222,17,8,8">
                <TextBox AllowDrop="False" Text="{Binding Mode=OneWay, XPath=description}" TextWrapping="Wrap" Opacity="1">
//TextBox根据ListBox的选择,返回相应的文章,在本例中没有对返回的结果进行处理,使用返回的是文章的HTML代码
                    <TextBox.Background>
                        <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
                            <GradientStop Color="#FF76DDDF" Offset="0"/>
                            <GradientStop Color="#FF71DD8F" Offset="1"/>
                        </LinearGradientBrush>
                    </TextBox.Background>
                </TextBox>
            </Grid>
        </Grid>
    </Grid>
</Window>

值得注意的是面板的排布直接影响到数据上下文的共享,在Expression Blend中打开,可以看到布局的层次如图:

layout

最终完成的效果如下:(由于使用了Grid布局,最大化之后布局仍然是合理的)

result

源代码下载:XA Blog Reader Source Code.zip

2008/4/18

Pure Love Stories~

s2331338 s2554722

首先非常感谢方利庆在Q上传给我这2部电影,《情书》是我找了很久也没找到的,《傲慢与偏见》却是当时方同学推荐的。说实话当时我犹豫了一下是否要接这部电影,因为对名著并不是特别感兴趣。现在看来当初要是没接,那真的是我的傲慢与偏见。

《情书》没什么可说的了,几乎是公认的经典。最令我难以忘怀的,是女藤井树在山谷中,雪地里不断地呐喊:“你好吗?我很好!”喊到声泪俱下。

《傲慢与偏见》则尤其是超出我预料很多的一部惊艳之作。我很希望在08年里能再看到一部超过它的电影。这是一部如此可爱的电影,伟大的简·奥斯丁铸造了Lizze和Darcy 2个人的灵魂。电影中的每一帧画面,都美得如同油画,美得更加过分的是配上了如此恰到好处的古典音乐。百闻不如一见,以下选出10副截图:

snapshot20080417235733

snapshot20080418013108

snapshot20080418013255

snapshot20080418014243

snapshot20080418015910

snapshot20080418020059

snapshot20080418020147

snapshot20080418020916

snapshot20080418021142

snapshot20080418021511

2008/4/17

豆瓣九点验证~

doubanclaima69afbc24c7818a8

2008/4/15

《计算机操作系统》学习不完全笔记~

花了大概大半个月,研读完了西安电子科大出版社的《计算机操作系统》一书(汤子瀛 等 编著)。零零碎碎地记下一些吧。

PCB是进程存在的唯一标志,应该常驻内存。PCB的组织方式采用链接方式时,有一个执行指针及多个队列指针。

子进程可以继承父进程所拥有的资源。

整型信号量——居然又是伟大的Dijkstra的发明,包括2个原子操作(Atomic Operation)wait(S)和signal(S),分别成为P、V操作。可以描述为:

wait(S):while S<=0 do no-op;

                  S := S - 1;

signal(S):     S := S + 1;

可以理解为,P:检测资源是否可用,if 可用 then 占用,else 继续检测;V:释放资源。

发送进程不阻塞,接收进程阻塞,这是一种应用最广的进程同步方式。

线程切换比进程切换要快上几个数量级。

在撤销一个线程时,并不立即回收该线程的资源和TCB。

FCFS:First Come First Service先来先服务调度,SJF:最短作业优先调度。

优先权 = 响应比 = (等待时间 + 要求服务时间)/要求服务时间。

基于时间片的分时调度算法里面,多级反馈队列调度算法(Google it),不必事先知道各种进程所需的执行时间,而且还可以满足各种类型进程的需要,因而它是目前被公认的一种较好的进程调度算法。

实时系统属于计算机学院操作系统课程不学的内容,既然这本书上有相关的内容,我也看了一下。最常用的实时系统调度算法是最低松弛度优先算法,也叫LLF(Least Laxity First)算法。关于此算法网上的资料讲的很不清楚。松弛度就是一种优先级,例如一个任务在200ms时必须完成,而它本身所需的运行时间就有100ms,因此,调度程序必须在100ms之前调度执行,该任务的松弛度为100ms。又如,另一任务在400ms时必须完成,它本身需要运行150ms,则其松弛度为250ms。系统按一定的周期时间对所有任务进行检测,调度算法如下:(貌似live space的日志编写文字格式不支持多级缩进,只能缩进一级,其他的我只能手动打空格了。。。)

while 有未完成任务

do{

      step1:计算当前所有任务的松弛度;

      step2:把松弛度最小的任务优先执行;

      step3:直到执行完本任务或者到达了周期时间,继续while循环;

}

产生死锁的4个必要条件:互斥条件;请求和保持条件;不剥夺条件;环路等待条件。破坏至少一个条件就可以预防死锁。

安全状态是指,存在一个安全序列<P1,P2,P3……>,按此顺序对每个进程分配最大资源,可以使每个进程都顺利完成,那么此刻系统是安全的。

使用银行家算法可以避免死锁,命名原因是该算法能用于银行系统现金贷款的发放。此算法又是Dijkstra发明的,真是一个full of niubility的人物啊~其中有一个子算法,叫安全性算法,用于验证某一步资源分配策略是否具有安全性,非常经典。

资源分配图(Resource Allocation Graph):用圆圈代表一个进程,用方框代表一类资源。箭头方向:进程请求资源,Pi指向Ri;资源被分配给进程,Ri指向Pi。

资源分配图1

资源分配图2

资源分配图的简化方法是:

①删除不处于等待状态的进程(即没有从该进程出发的边);

②依次删除当前的叶顶点。可以证明,简化后还存在边的不可简化的资源分配图存在死锁,其中的有边进程为死锁进程。

若能消去所有的边,那么该图是可完全简化的;若不能通过任何过程使该图完全简化,则称该图是不可完全简化的。文献已经证明,所有的简化顺序都将得到相同的不可简化图。S为死锁状态的充分条件是:当且仅当S状态的资源分配图是不可完全简化的。该充分条件被称为死锁定理

环保护机构:一个程序可以访问驻留在相同环或较低特权环中的数据;一个程序可以调用驻留在相同环或较高特权环中的服务。传说中的Ring 0到Ring 3就是来自这里的。

多通路I/O系统:就是把一个设备连接到多个控制器上,而一个控制器又连接到多个通道上。

DMA控制方式的特点:数据传输的基本单位是数据块;数据直接送入内存;传送开始或结束时才需要CPU干预。

RAID是Redundant Array of Inexpensive Disk的缩写,廉价冗余磁盘阵列。

文件系统中的索引表本身是一个定长记录的顺序文件。

 

总体来说,这本书适合学习操作系统入门知识的人看,整本书以各种算法的分析比较为重点,覆盖面广,编写者肯定是态度认真的,在细节上把握都很到位。其中少许讲到这些知识在多个操作系统实例的应用,包含DOS,Mac,Windows,Linux,Unix,尤其以Unix为重点。

2008/4/13

AES加密和解密算法的C++实现~

参考了N多资料,最有价值的几篇如下:

AES算法的主要步骤:

http://www.cnblogs.com/henryzc/archive/2005/11/08/271851.html

AES算法的综合感性认识,以及针对32位机的快速实现:

http://www.wangchao.net.cn/bbsdetail_147266.html

MSDN上关于AES的C#实现和详解:

http://www.vckbase.com/document/viewdoc/?id=1068

AES算法课件,很清楚

http://cis.sjtu.edu.cn/personal/wanglibin/sec/sec-chap04.ppt

AES(Rijndael版)作者的英文论文详解

http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf

还有1个flash演示视频,整个过程讲解得非常清楚,我打包放在了MZH BLOG可以下载

AES算法flash演示~

教材上讲到的是其中最简单、最理想的一种情况,而且讲得非常简略。

在程序的实现过程中,用到了C++的位运算和内存操作。用得最多的位运算当然是异或,在C++中用^表示。内存操作用到了memset()和memcpy()。这2者的资料参见:

http://www.cplusplus.com/reference/clibrary/cstring/memcpy.html

http://topic.csdn.net/t/20021230/22/1314691.html

在上面CSDN里面倒数第二个解答很好(处理了空指针的情况),最后一个解答的例子很好,不过有很多错误,正确的应该这样写,在我的电脑上测试通过:

#include<iostream.h>  
#include<string.h>  
void main()  
{  
          char str1[10]="hehe";  
          char str2[5]="haha";  
          memcpy(str1+1,str2+2,3);  
}
  

最后结果是str1变成了“hha”。

http://blog.donews.com/skyfei/archive/2004/11/20/176430.aspx

http://www.cplusplus.com/reference/clibrary/cstring/memset.html

http://rakeone.blogdriver.com/rakeone/752021.html

2008/4/9

国内星际2试玩首个战报+暴雪官方壁纸下载~

现在还在玩星际1的可能都没几个了,我还在玩。。。

我的目标就是玩到星际2出来,直接顺利过渡到星际2。。。

很可惜,有试玩资格的不是我。。。发这个战报的是来自《游戏天地》杂志的一名记者,他接到暴雪的邀请函,前去试玩,并且跟职业选手和非职业选手较量了几盘,发了一篇图文战报:http://fight.pcgames.com.cn/starcraft2/yanjiu/0803/1040991.html

这个战报看得我是直流口水~1040991_2_thumb

选取战报中的一段文字并附图:

对手是职业玩家,我不敢掉以轻心。手选神族,双兵营开局,手指狂舞,农民探路。我运气不错,第一时间发现了虫族的地衣(虫蔓),星际里的虫族地衣像是波力海苔,星际Ⅱ的就更恶心了,我都舍不得让农民跑上去。但量小非君子,无毒不丈夫,我的农民还是捏着鼻子冲进了虫族基地,对方的雄蜂正在有条不紊的采矿,我立刻让农民迎面焊去。

1040991_3_thumb

星际2,你快点来吧,我的下一台电脑配置就取决于你了~

最后放出2幅星际2的官方壁纸,只有1024 x 768的版本,其他分辨率的版本可以在http://fight.pcgames.com.cn/starcraft2/找到。

894172_wall3-1024x768

934361_wall4-1024x768

2008/4/8

居然不得不开始使用Dr.COM登录客户端了~

今天下午我的帐号突然显示,只能在ip 0.0.0.0上使用,意思就是说:我的帐号目前被封停了。我打网络中心的电话问了一下,网络中心的人居然不知道,然后他们查了一下,说查好了打电话告诉我,让我留了我的号码。结果过了1个多小时还没有回复。。。我于是再打过去,我说不能在Web方式下登录,接电话的MM声音很温柔,比虎溪的那个自以为美女的好多了,MM说我这个帐号虽然不是学生帐号,但是本来也就不能在Web下登录,因为现在网络重新更换了设备重新调试好了,所以全部帐号都要使用万恶的客户端登录。。。

想念以前Web登录的时候(其实就是昨天……),一次登录上去,就不用下线。把电脑开关,把网线插拔,都会自动登录,并且几乎感觉不到登录的过程。

发2张截图怀念一下,这是以前Web登录的时候:

DRCOM

这是现在,流量0.000M啊~

DRCOM2

Silverlight 2 学习笔记(二)~

在TerryLee的Silverlight 2教学实例中,终于看到一个接近我需要在项目中应用的实例,是他的图形图像篇的最后一篇:7.一步一步学Silverlight 2系列(32):图形图像综合实例—“功夫之王”剧照播放

实现效果如图:TerryLee_Silverlight2_0163_3

在这个例子中很多值得学习的地方,除了Silverlight 2特性的一些流畅运用,特别是一个职业程序员的专业素养。举一例,看下面一段代码:

private void leftImg_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    index = index == MIN ? MAX : index - 1;
    Play();
    myStoryboard.Begin();
}

这段代码的意思是说如果把鼠标单击左边的图而处理的事件。应该是3个图片循环右移一位。index一行简洁地表示了边界条件的情况。

继续翻MSDN,发现一张Silverlight的架构图,这张架构图是包含SL1和SL2的,以后继续更新下去可能还会包含SL3、SL4……可见SL2真的是比SL1增加了很多好用的东东~

Bb404713.SLarch_1(en-us,MSDN.10)

2008/3/31

Visual Studio 2008安装文件ISO的UDF文件系统之谜~

下下来的Visual Studio 2008安装.iso文件,用winiso打开之后,3G多的容量,发现只有一个README.TXT,打开之后有如下的一段话:

This disc contains a "UDF" file system and requires an operating system
that supports the ISO-13346 "UDF" file system specification.

额的神那,那不是意味着我还要换一个支持UDF文件系统的操作系统。于是我把上面这段话在网上搜索,还有搜索“Windows XP下 识别UDF”,均无果。。。

后来发现了http://blog.chinaunix.net/u/8681/showart_454782.html,才知道原来是WINISO的问题,引用:

WinISO 不能打开微软VS2008的这种格式, 虽以ISO后辍以, 实质上是DVD UDF格式, Ultra ISO(8.6.5.2140)可以

于是换用UltraISO,果然有用,顺利解压!

ISO格式真是麻烦,以前用WINRAR打开ISO,有时候解压之后中文变成乱码,于是受人推荐换用了WINISO,这次发现WINISO也有这样的问题,以后支持UltraISO了~

2008/3/30

Silverlight 2 学习笔记(一)~

接受Sixsix的建议,直接从Silverlight 2开始学起,貌似2是个更加成熟的平台,相信1不久将会被2取代~希望不要在刚把2学得差不多的时候,3又出来了。。。其实更新速度不算快,人家竞争对手Flash不是都更新9了么~

 

http://www.microsoft.com/taiwan/msdn/columns/huang_jhong_cheng/Silverlight_beta1.htm

Silverlight 2.0 Beta 1 之初體驗  作者:黃忠成

看MSDN总是会有收获的。台湾人写的,主要是介绍了SL2的新特性,并给出了一个应用WCF和SL2结合的简单实例,浏览一遍即可~文中有Silverlight 2.0 Beta 1 SDK的下载地址

silverlightbeta1

 

http://blog.joycode.com/scottgu/archive/2008/02/29/114918.aspx

Silverlight 2 入门教程中文版~

貌似英文原版就是Silverlight的开发者写的~一共用8个部分细致地讲解了如何拥Silverlight 2创建一个Digg应用,虽然作者说时间仓促翻译的不好,但是作者明显谦虚了~看了这个教程你会清楚Silverlight是做什么,怎么做的,以及SL2的新特性如何使用~

在这个教程当中涉及到用LinearGradientBrush 来获得 DiggPanel 上的好看的渐变背景效果,http://bbs.blueidea.com/thread-2834417-1-1.html 提供了另外一种方式,可以用Blend制作出来,然后导入XAML。

在第7部分中,作者有一个CloseButton UI上的巧妙实现,作者用"Webdings"字体的"r"文字,显示出来的是一个叉状的符号,比用字母X或者其他什么的效果更加专业一些。

 

Grid.rowspan属性是控制什么的?跟ASP里面类似,用于控制表格中单元格的合并。

 

在设置表格长宽时,“50*”的意义:

#11楼 2007-03-28 11:27 ququ [未注册用户]

To zhouyinhui
你好:
问一个题外话,在表格中,行和列的定义,
<ColumnDefinition Width="50*"/>的50后面带*是什么意思,我只知道,如果是窗口的一半用0.5*,剩余部分用*,那么50*是不是和窗口宽度一半有关系呢?还有,行高,为什么也是25*,到底什么意思呢?
新手,请指教!
回复 引用 查看

#12楼 [楼主] 2007-03-28 11:43 周银辉

TO: ququ
指定表格的大小时,可以有三种方式:
1,GridUnitType.Auto:自动,其大小取决于其内容(Content)的大小,在Xaml中你可以这样书写<ColumnDefinition Width="Auto" />
2,GridUnitType.Star:按比例,比如<ColumnDefinition Width="50*"/>表示该列占据整个表格宽度的50%
3GridUnitType.Pixel:表示指定的值为像素数。在Xaml中你可以这样书写<ColumnDefinition Width="50"/> 

Silverlight确实是非常cool的东西,微软做东西一直强调cool & innovation,今天李开复在演讲中却说他获得的最深刻的教训之一就是不要只做cool的东西,而要做实用的东西,能cool当然更好。这也许也是企业文化的不同吧~

2008/3/27

开始邀请开通百度IM公测权限~

http://im.baidu.com/

想要立即开始体验的请留下你的百度ID或者注册百度帐号的email,我会发邀请给你。

邀请发出之后登录百度passport,可以在站内消息中看到受邀信息,并附带最新版下载地址。

2008/3/25

百度IM产品开始邀请制内测~

详情见http://im.baidu.com/

我刚申请了,看什么时候给我一个内测资格,到时候我来发邀请。

2008/3/24

Java ME中的位运算~

一直以为,Java在位运算、内存操作等底层方面的处理比C++、ASM这样的语言要弱势很多,今天看到了Java的位运算~不过由于Java是运行在虚拟机里,内存操作估计是不大现实了。。。

今天在看代码的时候,看到一个用DFS思想的迷宫生成算法,对比我以前“自主研发”的DFS迷宫生成算法,要快很多。。。由于Java ME里面的虚拟机是KVM,框架和库精简到了最小化,所以在其他桌面程序中很常见的一些算法,在Java ME中可能很多需要用位运算来代替,这使得编写和理解都更加困难~

选取其中的2句:

maze[x] &= ~(0x1 << y);

上面这句真是精简,而且前后10行内没有注释。。。看了半天。。。

maze[]是一个long型数组,每个long型占64个bit,那么可以存放64个状态,A &= B就是A = A & B,~是逻辑非~,<<是左移位,maze[]数组的每个元素初始值为-1,在计算机中以补码表示就是64个1,所以此语句的操作是将maze[x]的从低往高第y位赋值为0,从而修改了一个状态值。

补充知识:>> 右移(左边以1补齐),<< 左移,>>> 无符号右移(左边以0补齐),&与,|或,~非,^异或

if((((maze[i] & shift) == 0) || (j == (maze.length - 1))) && (startX >= 0))

注意这句有4层括号。。。而且注意区分&和&&。。。这句判断在整个程序中起到了非常重要的作用。

最有帮助的资料:http://www.blogjava.net/rosen/archive/2005/08/12/9955.html

从数以bit位的表示,到各种基本操作,都讲得很清楚。

2008/3/22

Thinkpad X300的广告,no-compromise毫不妥协~

据说卖的很贵~

据说针对苹果~

bizdev_lenovo_hero-03-04

2008/3/21

人月不是神话 - 《人月神话》~

本文由XA原创。做人要厚道,转载请注明出处。

这篇读书笔记的发表,代表XA正式启用了Live Space。由于网速原因,如果需要2M~5M附件上传的时候,我还是会发表在原来的MZH BLOG上,其他的日志,我会尽量发表在Live Space上。使用Space的原因很简单:很多朋友都在用,交互起来更加方便。废话少说了,开始正题。

为什么要读这本书?
让我给你2个理由:
1.这本书的作者是图灵奖和美国国家科学技术大奖的获得者,创立了美国北卡罗莱纳大学计算机科学系。这么NB的人一般都很忙,这么忙的人还能抽空写出一本书,那么这本书肯定是精华。
2.就在我们身边,印度的软件产业已经崛起,数家企业通过了CMM5级认证,成为世界第二大软件出口国。目前中国经济发展水平可能领先印度10年,但中国软件产业却落后将近10年,原因何在?很多人认为,软件开发是吃青春饭的,金山公司总裁雷军说:“在印度,包括在美国,我见到的项目经理都是三四十岁的人,他们'越老越值钱',有些人甚至拥有超过20年度行业经验。”为什么中国的程序员总在不断学习新的开发工具、钻研程序代码,而不能逐步提升自己的视野、思维和经验

总体上来说,本书指出了很多在软件工程中一直沿用的错误概念和做法,以及某些理解上的谬误。Brooks从软件的架构设计一直到测试发布,针对20多年来的各种实例结合自己的成功经验,发表了很多对软件工程领域贡献或大或小的观点。

  • 报上经常会出现这样的新闻,讲述2个程序员如何在经过改造的简陋车库中,编出了超过大型团队工作量的重要程序。接着,每个编程人员准备相信这样的神话,因为他知道自己能以超过产业化团队的1000代码行/年的生产率来开发任何程序。其实真正最后成型的的软件产品,是复杂的编程系统产品(请百度这个名词),2人组合并不适用于所有的情况。
  • 书中解答了编程为什么有趣?这和我的观点是一致的,因为编程跟其他艺术一样,是一种以人的智慧和灵感创造事物的纯粹快乐!这并不是说编程没有苦恼的时候。
  • 以传统的“人月”为单位作为度量软件工程的规模和进度安排是过于乐观的,这是一个危险和带有欺骗性的神话。它暗示着人员数量和时间是可以相互替换的。而人数和时间的互换仅仅适用于以下情况:某个人物可以分解给参与人员,并且他们之间不需要交流。沟通增加的负担由2部分组成:培训和相互的交流。书中以一个例子说明,假如一个项目进度滞后了,单纯地增加人手,不仅不会按时完成,很可能比原来更加严重地滞后。
  • 一个软件开发团队在分工明确之后,才可能以很高的效率开发,具体的分工是首席程序员、副手、管理员、编辑、2个文秘、程序职员、工具维护人员、测试人员。其中首席程序员和副手了解所有的设计和全部的代码(这一点在如今可能有几百万行代码的大型系统中不再适用,这里针对的是小型团队开发小型项目)。
  • 在一个系统的设计阶段,概念完整性应该是最重要的考虑因素。概念的完整性要求设计必须由一个人完成,或者非常少数互有默契的人来实现。系统的体系结构是指完整和详细的用户接口说明。体系结构描述的是发生了什么,而实现描述的是如何实现。书中讨论了几个经常出现严重谬误的问题(甚至我先前也是这么认为的),难道结构师才是最NB的,题目专门来告诉可怜的实现人员如何工作?是否所有的创造活动都被这样的人独占了额,实现人员仅仅是机器中的齿轮?难道不能民主地从所有员工中搜集好的创意,以得到更好的产品,而不是将技术说明的开发工作仅限于少数人?
  • 对于最后一个问题,当然并不是只有结构师才有最好的创意,新的概念常常来自实现人员和用户,然而,系统的概念完整性决定了其使用的容易程度。不能与系统基本概念进行整合的良好想法和特色,最好放到一边,不予考虑。就算出现了一些很重要但是不兼容的构想,那么最好抛弃原有的设计,在新概念的合并上重新开始。关于第二个问题,实际上实现人员同样需要创造性的工作、新的思路和卓越的才华,结构师的工作并不一定比实现工作更富有创造性。因为产品的成本性能很大程度上依靠实现人员,就像易用性很大程度上依赖结构师。
  • 整个创造性活动包括了三个独立阶段:体系结构(Architecture)、设计实现(Implementation)和物理实现(Realization)。在实际情况中,它们往往可以同时开始和并发地进行。在作者管理OS/360的经验中,体系结构团队需要工作10个月完成书写规格说明,并且出色地完成任务,这比预定的进度多了3个月,而150名程序实现人员在这10个月就只能坐在那儿干等10个月?作者决定让程序实现人员参与体系结构团队的工作,实际上,工作非但没有按时完成,而且仍将推迟3个月,而且质量更加低劣。那么看来正确的做法就是只能让实现人员坐等着了?不对,只要由一些系统功能雏形设计出来了,实现人员可以设定时间和空间目标,了解产品运行的平台配置,设计模块的边界、数据结构、算法以及所有的工具。还有个办法,其实也是在其他工程领域的办法,就是,在实现的时候才雇佣实现人员。
  • 结构师必须牢记开发人员承担创造性和发明星的实现责任,所以结构师只能建议,而不能支配,但是时刻准备着为所指定的说明建议一种实现的方法。
  • 第二个系统是一个很危险的系统,一个结构师可能在自己设计的第一个系统时非常谨慎,不会把新鲜但是可能出错的功能模块加入,而力求第一个系统的正常和稳定;而在第二个系统中,结构师可能会想把自己在第一个系统中由于小心谨慎而没有试过的功能模块统统加入进来,这就导致了第二个系统的危险性,结构师在设计第二个以及以后的系统时应该约束自己,避免这样的危险。
  • 在软件的手册说明以及帮助文件中,形式化定义的语言是精确的,倾向完整,但是形式化定义的缺点是不易理解。在面对用户数量很大的系统中,精确往往比生动更加重要。
  • 在对设计进行变更时,如果在会议上大家达成了共识,那很好,如果没有,则由首席结构师决定。
  • 什么样的项目能够完成?有哪些先决条件?他们是否有清晰的目标、人力、材料、足够的技术、足够的时间、交流和组织
  • Brooks说每个编程人员应该了解所有的材料,即在办公室内应保留一份工作手册的拷贝。这是Brooks在本书中为数不多的错误观点。通过OO模型,我们应该充分运用封装继承来隐藏自己不需要知道的东西,这样会更加高效而且更加正确。
  • Brooks说思考者很少,实干家更少,即是思考者又是实干者的太少了。所以产品负责人和技术主管是同一个人的可能性不大。应该让产品负责人作为总指挥,技术主管充当其左右手。产品负责人必须对技术主管的技术才能表现出尊重。
  • 除了前面提到的“人月”,编程工作量可以以什么来衡量?编程工作量是程序规模的函数:

工作量 = 常数 X 指令的数量1.5 

  • 当你的程序在空间预算过多的时候,如果实现程序规模的减小?有2个常用的办法,在保持速度不变的情况下,可以削减功能来换取空间,第二个技能是考虑空间-时间的折衷(特别在使用新语言或新机器时,培训很重要)。曾经一名IBM 650的开发人员,编写了一个解释器的解释器,将最后程序所占的空间减少到了不可思议的程度。
  • 软件项目需要哪些文档?
    内容:目标
    内容:产品技术说明
    时间:进度
    资金:预算
    地点:工作空间分配
    人员:组织图
  • 对于大型项目,管理上的问题不再是“是否构建一个试验性的系统,然后抛弃它?”你必须这样做!
  • 为变更组建团队比为变更进行设计更加困难。应该采取一定的措施使管理人员和技术人才具有互换性。贝尔实验室废除了所有的职位头衔,每个专业人士都是“技术人员中的一员”。IBM保持了2条职位晋升线,如图所示,相应的级别在概念上是相同的。当然了,微软也有类似的做法。
     

IBM职位

  • 在开发中,个性化的工具妨碍、而不是促进沟通。开发和维护公共的通用编程工具的效率更高。
  • 实验室研制和试制的模型产品或早期硬件不会像定义的那样运行,不会稳定工作,甚至不会保持不变。
  • 在确定进度表时,每一件事都被成为“里程碑”。里程碑的选择只有1个原则,那就是里程碑必须是具体的、特定的、可度量的事件,能够清晰定义。在做估计日期的时候,要做到没有偏见的估计,而不是那些合乎心意的乐观估计或者自我保护的保守估计。
  • 老板必须规范自己,对项目经历可以解决的问题做出反应,并且决不在检查状态报告的时候做安排。Brooks曾经认识一个老板,他总是在状态报告的第一个段落结束之前,拿起电话发号施令。这样的做法肯定会压制信息的完全公开。
  • 软件的复杂性是根本属性,不是次要因素。因此,抽掉复杂度的软件实体描述常常也去掉了一些本质属性。数学和物理学在过去三个世纪取得了巨大的进步,数学家与物理学家们为复杂的现象建立了简化的模型,从模型中抽取出各种特性,并通过试验来验证这些特性。这些方法之所以可行,是因为模型中忽略的复杂度不是被研究现象的根本属性。当复杂度是本质特性时,这些方法就行不通了。
  • 软件的客观存在不具有空间的形体特征,因此,没有已有的几何表达方式。流程图等只是在软件完成后可能补充的一种无用的、被过度重视的图。对VLSI芯片设计方法的类推是一种误导——芯片设计是对两维对象的层次设计,几何特性反应了它的本质特性,而软件系统则不是这样。
  • Parnas澄清了“人工智能”的2种定义。AI 1:使用计算机来解决以前只能通过人类智慧解决的问题。AI 2:使用启发式或基于规则的特定编程技术。而“专家系统”是包含归纳推论引擎和规则基础的程序,比如医生专家诊断系统。
  • 技术工作的生产率公式:

任务时间 = 求和(频率i X 时间i

  • Brooks曾经预言MS-DOS不会是个激动人心的产品,这也是他说错的话。
  • 瀑布模型是错误的,它的基本谬误是它假设项目只经历一次过程。
  • Parnas产品家族树:Parnas产品家族树
  • 在项目的早期添加人力比在后期添加人力更加安全一些。指出“人件”概念的DeMacro和Lister的观点是:“我们行业的主要问题实质上更侧重于社会学(sociological)而不是科学技术(technological)。”还有“管理人员的职责不是要人们去工作,而是创造工作的可能。”
  • 任务可以成功地转移给其他人完成,但是项目不可以,只有重新开始。

最后,发现书中有个有趣的团队名称叫Coding War Games,好像Sixsix的Peace War Found团队,哈哈。