posts - 15,  comments - 74,  trackbacks - 0
公告
  2011年3月26日

ms 的 SEO工具,集成于IIS,使用WEB 平台工具安装

 

下载地址:http://www.microsoft.com/web/seo,安装后效果:

 

 

 

双击进入口效果:

 

若使用站点分析,则单击“Create a new analysis”

然后定义分析规则 

很快,站点的性能、链接、内容或SEO信息就得到反馈。然后你需要根据这些反馈和所提示的建议来修改你的HTML内容

工具很强大,可以做的远不止这些。大家可以自己试试

posted @ 2011-03-26 13:42 cyclone_dll 阅读(112) 评论(0) 编辑
  2011年3月9日

typedefstruct {

WORD wFormatTag;

WORD nChannels;

 DWORD nSamplesPerSec;

 DWORD nAvgBytesPerSec;

WORD nBlockAlign;

WORD wBitsPerSample;

WORD cbSize;

}WAVEFORMATEX;

 

以上为WaveFormatExC语言定义

 

C#中可以写成:

 

    [StructLayout(LayoutKind.Sequential)]

publicclassWaveFormatEx

    {

privateshortwFormatTag;

privateshortnChannels;

privateintnSamplesPerSec;

privateintnAvgBytesPerSec;

privateshortnBlockAlign;

privateshortwBitsPerSample;

    }

 

由于在PInvoke时传递的都是该结构的指针,所以为了方便编码这里就把它定义成类(若定义成struct的话则要做一些取地址再传指针的麻烦操作)。

这里也可以看出,class被称为引用类型,在作为参数传递时它就是以指针传递的

且由于要与非托管代码交互,所以要用固定内存布局[StructLayout(LayoutKind.Sequential)]来标记它。

 

WORD - typedef unsigned short WORD; 16位无符号整数

DWORD - typedef unsigned long DWORD; 32位无符号整数

既然都是无符号的,WORD就应写成UInt16(ushort).DWORD就应写成UInt32(uint).

那这里为何要用short int

我的个人建议:在平台交换时,应尽量使用CLS兼容的数据类型。并且,只要位宽一样,数据的表示总是对的,因为PINVOKE会自动调用转换,且转换的开销很小乃至无开销(熟悉计算机基础架构的人很容易理解无开销的意思,具体有没有转换要看.net是怎么设计的,我不了解)。

 

 

wFormatTag是格式标签,几乎都是已定义好的一些常数

pcm格式是0

Adpcm1

杜比Ac2 30

有好多。过后我会给出

其中最常用的就是PCM ADPCM

 

nChannels是声道数

nSamplesPerSec Samples per second ,即每秒的样本数量,也就是传说中的速率、采样率。每秒有多少个样本的确可以反应“率”的概念

nAvgBytesPerSec平均传输速率。如果是PCM的话,则该值等于nSamplesPerSec除以nBlockAlign

nBlockAlign        数据块调整度(块对其,字节),其值为通道数*样本的数据位值/8,播放软件需要与一次处理多个该值大小的字节数据,以将其中于缓冲区调整

wBitsPerSample           每个样本的位数。表示每个声道中各个样本的数据位数。如果有多个声道,对每个声道而言样本大小都一样

cbSize        该结构(类)的大小 

 

 常见的Format Tag:


 WaveFormatEx 完整定义:

posted @ 2011-03-09 13:12 cyclone_dll 阅读(403) 评论(0) 编辑
  2011年3月2日

为啥喜欢?就是我的生活。。几乎一模一样,特别是感情生活。

有些心痛。。。。。差点哭了

此后我想了很久 ,反省了很多 。唉

 

http://v.youku.com/v_show/id_XMTY4OTQ1MDA4.html

posted @ 2011-03-02 21:24 cyclone_dll 阅读(53) 评论(0) 编辑
  2011年2月23日

.net 4中的任务并行库很强劲,突然有些感触。回顾了下很久前的知识,与园内朋友分享

 

一些有用的资源 some useful resources:
msdn 并行博客 :http://msdn.microsoft.com/zh-cn/concurrency/default(zh-cn).aspx

任务并行库TPL(Task Parallel Library)
很明显,库中有两个核心内容:
任务、并行

并行(Parallel)和并发(Concurrent)
  在并行程序设计的语境中,并行和并发是两个不同的概念,不能互换。当提到多个软件线程并行执行的时候,即意味着这些活动线程在不同的硬件资源或者处理单元上同时执行,也就是说多个线程在任何时间点都同时执行。当提到多个软件线程并发执行的时候,即意味着这些线程在同一个硬件资源上交替执行的过程,也就是所有活动线程在某段时间内同时执行的状态,但在某个给定的时刻都只有一个线程在执行。要提高并行性就必须利用多个硬件资源上的并发性。

至此我们几很好理解.NET 4中的几个新集合类型的含义了:
ConcurrentDictionary(Of TKey, TValue)
ConcurrentQueue(Of T)
ConcurrentStack(Of T)


挑战并行思维
  “一步接一步”的程序设计模式属线性思维的产物——从程序的一个入口点开始,通过一个任务序列来顺序完成所有工作。具有一定经验的程序员已可以轻松驾驭。这种思维模式相对简单。
  要采用并行程序设计模型来设计应用程序,设计人员就必须将自己的思维从上述线性模型中拉出来,重新对整个处理流程进行考虑。程序员应该将应用程序中能够并行执行的部分识别出来,而不是把自己的思维总是限制在串行执行的概念上。要做到这样,程序员必须将应用程序看作是众多相互依赖关系的任务的集合。将应用程序划分成多个独立的任务,并确定这些任务之间的相互依赖的关系的过程就称为分解(decomposition)。分解问题的方式主要有三种:

·任务分解 -  对应用程序根据其执行的功能进行分解的过程称为任务分解。设计的时候常为不同的程序行为采用不同的线程实现,常用于GUI应用程序。
  任务分解所针对的目标往往是具有天然可分解性的程序行为。
  通俗来说,线程就好比人,而任务分解就是不同人做不同的事。

·数据分解 -  数据分解也称为数据级并行,是将应用程序根据各任务所处理的数据而非按任务的天然特性来进行分解的方法。数据分解常用于对大规模数据量处理。
  通俗来讲:多个人做同一件事,每人做一部分

·数据流分解 -   一个线程的输出作为另一个线程的输入,要注意尽量消除启动和排空延迟。
  这是典型的生产者/消费者模型。I/O,编译器的设计属于此分解的典型应用。

各种分解方式都具有自身优势。从方便程序设计和任务划分的角度来讲,任务分解方式是最合适的选择。数据分解会给任务增加一些额外的代码复杂性,所以只有在数据容易分解且性能是主要考虑的情况下,数据分解方式才是更加适合的选择。
  选择使用怎样的分解方式取决于具体的应用场景,主要应考虑资源问题。相对于传统单线程程序设计而言,并行程序设计更需要以丰富的程序设计经验作为背景,从而对时序和评估作出正确的判断。切记“程序是调出来的”

并行程序设计的挑战
 

同步(Synchronization) 指两个或多个线程协调其行为的过程。如一个线程停下来等待另一个线程完成某项任务
通信(Communication) 指线程之间交换数据相关的贷款和延迟问题
负载平衡(Load Balancing) 指多个线程之间工作量分布的情况。负载平衡能够使各线程的工作量平衡均分配。
可扩展性、伸缩性(Scalability) 是衡量在性能更加强劲的系统上运行软件时能否有效利用更多线程的指标。例如,若一个应用程序是面向四核系统编写的,那么当程序在八核系统上运行时,其性能能否线性增长(即增加一倍)

要使应用程序性能达到最优 ,以上问题需要仔细综合考虑。

posted @ 2011-02-23 13:36 cyclone_dll 阅读(888) 评论(0) 编辑

有2个架构可以构建Windows Phone 应用,xna 和 silverlight。

 

Windows Phone Developer Tools RTW
 其中包括了:

下载:

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce&displaylang=en

这个下载是web安装包

也有iso的下载:

http://download.microsoft.com/download/6/0/9/6092A6EA-8638-4F4B-BD49-4A8FF77B2E99/WPDT_RTM_en1.iso

 

也可以用VB.NET开发Windows Phone应用

因为用VB的人最多,所以微软还是作了这个支持

可惜目前只支持Silverlight的开发

Visual Basic for Windows Phone Developer Tools - RTW 下载(没有ISO包):

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=4E97EA70-E479-4C05-814F-639D71690E5D

posted @ 2011-02-23 13:05 cyclone_dll 阅读(264) 评论(0) 编辑
  2011年2月16日
 

xna 开篇

xna 是一个适合初学者和学生进行游戏编程的平台,这个平台提供了一些抽象,可以不关心游戏编程的底层细节。
遗憾的是国内市场并没有许多关于XNA的资料,此文章系列希望对你学习xna或游戏开发有所帮助。

目前最新版本为4.0,开发环境叫xna game studio。它集成于Vs2010中。支持平台:WindowsWindows Phone XBox。这是跨多个平台的运行

你可以从这里下载 xna game studio 4.0
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=9ac86eca-206f-4274-97f2-ef6c8b1f478f

我们从一个会跟随鼠标光标移动的Hello World小游戏作为学习入口点
效果截图:


确保安装完xna game studio 4后。用C#创建一个名为xna4_HelloWorldWindows Game (4.0)工程。如下图


创建后看到一个叫Game1的类,其中包含如下成员:

这些是一些硬编码工作,XNA的游戏工程模板已经为我们创建好这些基础,我们要做的只是加入自己的代码。现在我们来看看这些方法的用途:


这些游戏逻辑被拆分得很清楚,但如果你不了解基本的游戏编程的话,则会被这些东西弄得一头雾水。

游戏的基本编程:

以下内容摘自《Windows 游戏编程 大师技巧》 Andre LaMothe
一个简化的游戏循环结构
一:初始化
 
游戏程序执行标准初始化操作,如内存分配、资源采集、从磁盘载入数据等
二:进入游戏循环
 
在这一步中,代码运行到游戏主循环体内部。此时各种操作开始运行,运行持续到用户退出主循环为止。
三:获得玩家的输入信息
 
这一步里,游戏玩家的输入信息被处理和/或缓存,以备下一步人工只能和游戏逻辑使用
四:执行人工智能和游戏逻辑
 
这一步中包括游戏代码的主体部分,诸如执行人工只能、物理系统和一般游戏逻辑,其结果用于渲染下一帧图像
五:渲染下一帧图像
 
这一步中,玩家的输入和第四步中游戏人工智能和游戏逻辑执行结果,被用来产生游戏的下一帧动画。这个图像通常放在不可见的缓存区(也称为离屏区,OFFSCREEN BUFFER AREA)内,因为玩家不会看到它逐渐被渲染的过程。随后该图像被迅速拷贝到显示存储器中并显示出来。
六:同步显示
 
通常由于游戏的复杂程度不同,游戏在计算机上运行的速度会时快时慢。比如,如果屏幕上有1000个物体在动作,CPU的负载就比只有10个对象时重得多。从而游戏的画面刷新率(帧速率,frame rate)也会时高时低,而这是难以接受的。因此必须把游戏按照某个最大帧速率进行同步,并使用定时功能和/或等待函数来同步。一般来讲能达到30/秒的速率就非常好了。
七:循环
 
这步非常简单,只需回到游戏循环的入口并重新执行上述全部步骤。
八:关闭
 
这步是游戏的结束,表示将退出主程序或游戏循环,并回到操作系统。然而,在用户进行结束之前,用户必须释放所有的资源并清理系统,这些释放操作对其他任何软件都是同样要做的。

黄色高亮部分说明为什么游戏编程一般都会出现一个主循环。这种设计模式遵循线性模型。

在这里,由于我们要把Hello World !画上屏幕上,所以要有绘画类型:

       GraphicsDeviceManager graphics;

        SpriteBatch spriteBatch;

GraphicsDeviceManager:用于管理图形设备

SpriteBatch 用游戏的图形设备来画2D对象

 

这里我把 Hello World 包装成一个叫HelloWorldStr的类

     private void LoadContent()

        {

            hudFont = game.Content.Load<SpriteFont>("Fonts/Hud");

            stringSize = hudFont.MeasureString(helloWorldStr);

        }

 

字体Hud属于游戏内容,它来自于文件Hud.spritefont。装载的时候不能加扩展名

字体描述文件是个xml文件,包含字体名,字号,字符间距等信息。

 

CalStrLocation方法处理鼠标逻辑。它让鼠标在文字的中间,并确保文字不会移除窗口外。

 

Draw(SpriteBatch spriteBatch) Game Draw()调用,以绘画文字。

 

在主游戏中:

 

我用了个HandleInput()方法处理键盘鼠标输入,包括(游戏板)

这里要根据鼠标位置计算文字位置:

            MouseState mouseState = Mouse.GetState();//获取鼠标状态

            mouseLocation.X = mouseState.X;

            mouseLocation.Y = mouseState.Y;

            hws.CalStrLocation(mouseLocation);//传入鼠标坐标

 

同时我想能在按下键盘的左CtrlX时退出游戏:

            KeyboardState keyboardState = Keyboard.GetState();

            if (keyboardState.IsKeyDown(Keys.X ) && keyboardState.IsKeyDown( Keys.LeftControl ))// 处理键盘输入

                this.Exit();

 

Draw(GameTime gameTime)中,要先调用spriteBatchBegin,再画,再End。

 

好了,就样就完成了一个文字会跟随鼠标移动的xna的游戏。

代码下载:Demo_xna4_HelloWorld

posted @ 2011-02-16 18:29 cyclone_dll 阅读(2145) 评论(11) 编辑
  2011年1月22日
摘要: Windows是基于GUI的(gdi32\user32),我们所看到并频繁与之交互的按钮、菜单、文本编辑器等(包括其中的文本)都是画出来的。他们本来都只是看得见却摸不着的东西,经过一些处理,我们让他们变得看得见也摸得着。这是计算机可交互图形学的概念,也是设计图形化操作系统的重要基础。 下面我通过基于.NET的一个例子来说明可交互图形在2D场景下的基础概念。我定义了表示一个2D场景的抽象基类:Public MustInherit Class Shape Public Property Position As Point '形状的位置 Friend MustOverride Function Is阅读全文
posted @ 2011-01-22 15:52 cyclone_dll 阅读(1512) 评论(4) 编辑
  2011年1月8日
摘要: 深刻感受到大家都在“搭积木”,是的,我们都在用别人做好的工具或作“积木”来拼凑成一个个工程。这样做,我们就只需学习那些“积木”的用法就可以实现工程,确实大大提高了生产力,为工程的竣工省下不少时间,从而更大盈利。遗憾的是,我们却离“创造积木”的深层思想本质远了很多(如:为什么积木要这样设计,这样设计的好处坏处是什么,综合各种因素的话这样设计是最好的吗?)我不甘心只用别人的东西,所以在有空时我就会自己做一些如小型数据库,多媒体系统,编译器等。在这样的实践过程中我都深刻体会到同类型的一流作品的设计模式及他们的设计者的思维模式,就像在与他们进行强烈的思想交流,让我受益匪浅。  计算机语言-这里把它称为阅读全文
posted @ 2011-01-08 00:48 cyclone_dll 阅读(1619) 评论(5) 编辑
  2011年1月4日
摘要: cs ConsoleAppCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->classProgram{staticint[]arr=newint[]{0,1,2,3,4,5,6,7,8,9};staticvoidMain(string[]args){varresult1=arr.Where(newFunc<int,bool>(Filter));//用Func委托和Filter方法varresult2=arr.Where(delegate(intval阅读全文
posted @ 2011-01-04 01:35 cyclone_dll 阅读(111) 评论(0) 编辑
  2010年12月28日
摘要: 以上列表中的文件并不是来自于某个文件夹中的所有jpg文件,而是来自于这个文件。将多个文件合并为一个文件在许多应用领域都十分有用。亲自实现这样一个程序一定不但过瘾且在许多时候可以帮助我们构建更高效的程序。这里我做了一个方案例分享给大家。由于合并后的文件就像一个包裹,所以下文中都把这样的文件称为“包文件”主构思:要把多个文件合并成一个包文件,还要可以区分其中的某个文件并提取出来。我们需要知道文件的名称和这个文件在包文件中的位置及长度,也就是所谓的地址偏移。由于包文件常常会比较大,所以不应该让它的内容常驻于内存,只应该需要某部分的时候再从包文件中提取。我是这样做的:一个管理器类,提供一些外围的方法_阅读全文
posted @ 2010-12-28 13:00 cyclone_dll 阅读(2566) 评论(12) 编辑
仅列出标题  下一页