CSK.Blog--个人原创Weblog

写了个Tiger语言的IDE

编译大作业下周就要检查了,所以最近一直在完善它。不过我没时间去做真正的代码生成了,不过就目前做的东西总觉得太傻了些,所以今天集中精力写了下面这个东西:

功能和特点:
>源代码语法上色
>直接编译
>随意切换编译器
>产生图形化语法树(就是PrettyPrint)

IDE里面包括我写的tiger编译器,所以IDE可以直接运行,点击exec.bat即可
除了tiger编译器,我把IDE的所有原代码都放在一起了。 也可以把你写的编译器用于本IDE,而且不用修改任何代码也不用重新编译,只要把你编译
器的类路径放在本IDE目录下的配置文件里面,详见readme IDE会把Sytem.out.printf这类的输出,即stdout和stderr显示在ide环境里面,好比是cl
和vc ide关系

写的很匆忙,有bug多多包涵~

校内
ftp://Great_csk:public@public.sjtu.edu.cn/public-files/TigerBoxv1_csk.rar
校外:
http://www.csksoft.net/data/legacyftp/Products/APP/TigerBoxv1_csk.rar

Blog防止spam信息技巧

自从把我blog迁至专用服务器上,访问率不断提升,但同时增加的是烦人的垃圾广告,常称为spam信息。

就blog而言,这类信息主要通过2种途径传播

1.留言、评论信息

2.引用信息

其中,第一种是最直观的spam传播方式,也是比较常见的,至于第二种,利用文章的trackback来做spam,这不禁令我赞叹人类智慧的伟大!

和垃圾邮件一样,目前自然语言处理还没达到一定的高度,自然没有什么很有效的办法杜绝这类信息。不过作为一个站长,看着这些恶心的东西贴在自己网站上实在是受不了。

为此我最早采取的方式是关键字过滤,但防不胜防...最后发展出下面2招,供各位参考:

对付评论:

思想:由于一般spam是推销产品、网站为目的,其中自然少不了链接与网址,不过链接标签不是必要的,但网址(严格说是URL)一般是必须的。所以突破口就在其中。

方案:对于留言作关键字过滤,将"http://"作为关键词,如果发现有这个关键词,则禁止发送留言。这样基本上就不会有第一类spam干扰你了。

对付引用:

要知道,既然是trackback,那么url是必须的,而且自动会加上链接...这也是那些spamer的狡诈之处,上面的办法自然是无效了

不过也有解决之道(不讨论关闭trackback的方案):

1.只有本blog注册用户才能获取trackback地址

好处:可以比较有效杜绝此类spam,缺点:并不是人人都愿意为了做个处于良心(至少国人不大愿意作trackback的,可能我有些偏见)的trackback特地来你这注册

2.动态生成trackback地址

我之前在网上看过具体例子,大家可以找下,那人提供方法的。

实现起来比较复杂,为了做到每次产生的地址不同,要做很复杂的后台跟踪,而且网上有人实现的方案是一个trackback地址在24小时后自动失效...

这招绝对很有效,不过我实在没这个功夫..

3.作trackback地址变换

此话怎讲?下面我来分析下spam的特点:

不要以为那些发送spam的人有很好的耐心给你blog每篇文章手工去发那些trackpost。他们一般都使用外面流行的spam群发工具。

我没有具体研究过,如果要我编写,一般会遵循这个原则:

一般trackback地址的格式为http://xxxblog.xx.com/trackback.asp?id=xxx&....

是不是这样?在那个trackback.asp后面跟的querystring里面一般总会含有id这类的信息的,这是必须的,因为blog要知道是对哪篇文章作了trackback。

好,现在我们要做群发软件,所谓群发,就是一次性给一个blog发很多有效的spam,这自然不可能要发送者去提供每个页面的trackback地址了,往往软件会找出每篇trackback地址的规律:

太简单不过了,因为一般id就是一个数字,而且文章id都是连续的,那么直接循环发送就好了,比如:

for (int id=0;id<maxid;id++)

{

CString url;

url.Format("http://xxxblog.xx.com/trackback.asp?id=%d",id);

sendspam(url);

}

所以我们的突破口就是在把这个id值变成不能用上述代码枚举的形式

这里介绍我目前采用的办法:把每个数字用对应的罗马字表示:

1->I ,2 -> II , 6 -> VI 等

这样,诸如id=53的形式可以变换到:id=V,III

现在我们考虑上面算法,虽然要写一个枚举这样id的程序实在很容易,但spam群发器的作者不会就为了这个情况特地去写这个算法吧。

而且对自己来说实现起来也很容易。

还有可以把数字用大写中文表示,或者英文,哈哈,就看各位想象了!

这个办法虽然不能绝对防止spam发作,但要知道在这个浮躁的社会,那些spamer们自然不会有工夫去研究你的算法的...

[开源]抽象语法树图形化显示程序

最近在做编译大作业需要将语法翻译好的抽象语法树(Abstract Syntax Tree)显示出来,教材使用了ANDREW W. APPEL的Modern Compiler Implementation in Java一书。

看过的人都知道其中要求将他定义的一种叫做tiger的语言先翻译成一棵抽象书,我们的大作业就到此为止,至于将这颗树显示可以采用作者提供的print.java以文本展现出来,也就是这样:

LetExp(
DecList(
TypeDec(myint,
NameTy(int),TypeDec(arrtype,
ArrayTy(myint))),
DecList(
VarDec(arr1,
arrtype,
ArrayExp(arrtype,
IntExp(10),
IntExp(0)),
true),
DecList())),
SeqExp(
ExpList(
varExp(
SimpleVar(arr1)))))finished

不过这样难免和我们直观的语法树理解差太远了,于是我就写了个程序,效果是这样的:

自认为还不赖,程序和原有的print.java类似,直接接受抽象树根节点,你再指定给他保存到的图片文件名和保存的格式就可以了。

我将源代码公布在下面,如果大家需要也可以用来玩玩^_^

下载地址:

公网:http://www.csksoft.net/data/legacyftp/Products/code_and_lib/PrettyTree_BY_CSK.rar

教育网:ftp://great_csk:public@public.sjtu.edu.cn/public-files/PrettyTree_BY_CSK.rar

说明:

作者保留源代码的著作权利,可以在不修改删除作者信息的前提下任意使用和分发。作者不对由于本代码产生的问题负责

代码采用SWT库开发,请将swt.jar以及相关的系统相关库文件复制到程序的根目录

使用例子:

package XTiger.parsersys;
import XTiger.parsersys.Absyn.Print;
import net.csksoft.PrettyTree.*;
public class Main {

public static void main(String argv[]) {
String filename = argv[0];
Parse myXParse = new Parse(filename);
if (myXParse.absyn !=null)
{
System.out.println("parse succeed");
System.out.println("Dump Trees");
System.out.println("Please Wait...it takes time :-)");
TreeMaker myTree=new TreeMaker();
myTree.renderToFile(myXParse.absyn,"dumpedTree.bmp",0);
System.out.println("finished");
myTree.dispose();
}
}

}

由于采用了SWT库,所以必须显式调用TreeMaker.dispose释放资源,否则将可能导致系统崩溃。

函数:renderToFile(absyn.Exp e,String destFile,int Type);

Type = 0/bmp 1/jpg 2/png

已知问题:在编译较大程序,比如queen.tig时候,由于产生的语法树图片过大会产生heap溢出异常。

模块音乐(Mod)的制作和使用,Demo程序的主体之一

这篇是特别为老弟DJ_Somnia准备的,同时也是上次的《Demo Scene:Principles,Techniques,and Tools》的后续部分

模块音乐(track)其实我们每个人都听过,再熟悉不过的例子就是FC游戏的音乐!当然那只是最简单的应用了。他广泛的应用在各类游戏背景音乐、电子乐器以及crack程序和Demo程序里面。

1.简介,对于Mod较为熟悉的话不妨略过

Module files (MODs) are a class of file formats used to represent music on a computer. They store several patterns or pages of music data in a form similar to that of a spreadsheet. These patterns contain note numbers, instrument numbers, and controller messages. The number of notes that can be played simultaneously depends on how many tracks there are per pattern.

Module files also give a list of the order in which to play the patterns. However, the biggest advantage of MOD family over standard MIDI files is that MODs include their own audio samples and should sound exactly the same from one player to another barring interpolation methods and any errors in players.

--Wikipedia

上面是wikipedia对于Mod音乐的解释。个人认为这个解释是恰到好处的,不过不够形象,下面我简要介绍下Mod的一些知识:

大家可以下载下面这个链接中的程序:

解包后,在资源管理器里面用鼠标把"my dirty old kamel.xm"这个文件拖放到"fmod_mini_player.exe"文件图标上,放开鼠标,此时就会启动这个程序开始播放音乐。

对于这个程序以及".xm"文件我稍候会作具体介绍。

现在你应该听到播放器里面传出音乐了,这就是所说的模块音乐,而那个程序就是一个播放器。

是不是和FC游戏的音乐很像呢?的确,他们就是同一类型的,但是这里的音质要好得多。

看了文件体积,你可能认为它是一种类似于midi音乐序列的文件,的确,他们之间有相似处。

Mod音乐和其他格式音乐文件的比较:

我们通常定义的音乐格式wav,snd,mp3,wav等各式音乐是直接对原始音频信号的采样,或者说就是把波形信息直接保存了下来,所以他们的音质自然是最佳的,但是体积也很大。不过由于直接采样,任何类型的声音都可以得以记录,除了各类乐器,还可以使人声

midi音乐序列:他好比是一首歌曲的曲谱,他只是记录了一首歌曲用到的乐器,以及每个乐器的弹奏信息(何时起音、音高等)。而具体乐器的音色信息是预先定义好并且事先存储在目标播放器上的。这就带了2个问题:

1.不同播放器上对同一乐器的音色可能存在差别:比如MS的midi波表中对于钢琴音色的采样要比老式yamaha声卡采用FM(频率调制)合成的钢琴音色好很多。这样产生的后果就是midi文件在不同设备上播放可能听起来不同。你的手机铃声是不是在pc里听起来和手机上不同?

2.midi中的乐器是固定的,也就是说midi中弹奏的乐器必须是midi已经定义过的,如果近期诞生了一种新的音色的乐器,那么除非midi修改播放器程序,这种乐器才能被支持,但是不可能全世界的midi播放器都会更改。这就好比24和弦铃声的手机无法播放48和弦音乐中的一些音色

Mod音乐格式正好位于上面2种格式之间,一方面它采用midi类似的乐谱定义,只保存了一首歌曲如何去弹奏的信息,而不是保存所有波形信息。同时,他可以定义每种乐器的音色,也就是说保存了其中用到的乐器的波形信息。

这样不但使得Mod具有很小的文件体积,同时可以表示几乎所有的音乐,甚至人声!(在fr团队的一些demo中就有这样的例子)

由于乐器波形是文件给出的,所以track在不同设备上播放效果几乎一样(当然还受DSP采样率和位宽限制)

基于上述特点,Mod自然是各类电子游戏和demo的首选

2.Mod的简要原理介绍

通常,用于制作Mod文件的编辑软件称为Tracker。Wikipedia对其的定义:

Tracker is the generic term for a class of software music sequencers which, in their purest form, allow the user to arrange sound samples stepwise on a timeline across several monophonic channels. A tracker's interface is primarily numeric; notes are entered via the keyboard, while parameters, effects and so forth are entered in hexadecimal. A complete song consists of several small multi-channel patterns chained together via a master list.

如果有用过一些节拍编辑软件,比如FL studio,那么track的原理就很好理解了

和这些软件类似,tracker除了保存一首歌曲的钢琴卷帘(paino roll)外,还保存了乐器的音色信息。一个音色称为一个模块(module,之所以叫做模块,是因为在早期的硬件合成器上,音色是通过一个通用的硬件波形发生器加上配套的滤波系统和包络器组成的。这样一个通用的音色系统就叫做模块,现在也沿用了当时的叫法,其实也是一样的)

Mod中记录音色的信息包括:

原始采样(sample),也就是一个音色原始的采样波形信息,他可能就是钢琴的C#音

包络信息(envelope),记录音色的起音、音长、释音信息

谐波信息(harmonic),可以用来控制音色的共振行为,使得音色悦耳

滤波信息,就是滤波器的具体参数

波形信息,用以控制再现的音色的基波类型:正弦、方波、锯齿、三角波

循环信息,可以记录在原始采用中用于循环播放的部分,这样可以把原始很短的采样音色延长

可以说一个mod文件就是简单的节拍编辑器的工程文件(其实就是如此)

3.mod音乐格式的种类和相关的编辑器

你可以为自己定义一个track的格式(貌似FC游戏就这样),但是已经有很多通用的标准了,每种标准都对应了各自的文件格式和相关的编辑器和播放器。利用他们可以使demo和游戏的开发大为简化(此部分本文最后会介绍)

下面就介绍目前比较常见的3种格式

Fast Tracker(.xm)

就是上面例子中的格式了,下面是摘自wikipeida对他的描述:

Fast Tracker, specifically Fast Tracker 2 (FT2), is a program that was one of the most widely used trackers in the world. It was created by Fredrik "Mr. H" Huss and Magnus "Vogue" Högdahl, two members of a PC demo group called Triton (now commonly known as Starbreeze Studios) which set about releasing their own tracker after breaking into the scene in 1992 and winning several demo competitions.

从这段文字就能看出track和demo有着多么奇妙的联系了!它就是demo比赛中产生的

和下面将介绍的编辑器一样,他们都是dos时代的产物,当然目前有基于win32和linux平台的替代品,但dos版本是无可替代的经典

*前面给出的例子音乐是Razor 1911的作品parasight_razor_11.exe中提取出来的,这个程序你应该在一些Diablo II的破解版本目录中找到(原因我就不解释了:-)

Fast Tracker2的官方网站:www.fasttracker2.com

其经典版本是dos平台的2.09,最近又放出了win32的Fasttracker 3 0.25 BETA。不过这个版本极端的不稳定!

下面是他们的一些截图信息,如果一定要用Fast Tracker开发,建议用Dosbox运新那个2.09版本。win32版本是通过dx加速的

主界面,点击察看原始尺寸

包络编辑,点击察看原始尺寸

采样波形编辑,点击察看原始尺寸

Impulse Tracker(.it)

Jeffrey "Pulse" Lim 的作品,同样也是DOS时代的作品了,完全由asm编写。目前较为流行的版本是linux下的cheesetronic (http://www.reduz.com.ar/cheesetronic).

Tux Racer中的背景音乐就是这种格式的文件。

主界面,点击察看原始尺寸

Scream Tracker(.STM,.S3M)

和上面类似,看wikipedia的解释:

Scream Tracker is a versatile multi-track digital sequencer created by members of Finland's Future Crew (FC), legendary in the PC demoscene. It was coded in C language and assembly language. Versions prior to 3.0 created STM files, later ones used S3M.

上面我简要罗列了3个流行的tracker程序和他们对应的格式,可以说目前demo程序中一般就是用这3个格式的了。其中以xm较多见

对于更详细的格式,可以参看wikipedia的条目:http://en.wikipedia.org/wiki/List_of_audio_trackers

3.mod的创作

这是我只是介绍mod创作软件的选用,至于如何创作这应该去参考音乐合成器和节拍器的教程

其实大部分信息我在上面章节已经给出了,你可以直接使用我介绍的软件,对于选用的格式,我推荐用xm文件。

基于下面这个原因:可以采用现成的fmodmini库作为播放前段,对于开发demo和cracker这是非常方便的。fmodmini本文最后部分会介绍

如果你打算直接使用上面的软件,推荐去下载他们的DOS稳定版本,然后配合DOSBOX使用。不过一般除了怀旧和炫耀(我觉得这个软件的界面就是用来炫耀的,否则为何到了win32版本还要dx加速...)外还是推荐你采用一些比较“现实”的版本,比如linux下用cheesetronic。

一个Win32的通用版本:ModPlug Tracker

他采用插件模式,基本上已经支持目前常见的各类mod文件的创作了

更好的消息时他是100%free的,可以从其官网上下载到:http://www.modplug.com/

同时可以在sourceforge找到他的代码:http://sourceforge.net/projects/modplug/

仿Fasttracker2界面的跨平台替代品:MilkyTracker

如果喜欢Fasttracker的界面,但又受不了模拟器模拟的效果,不妨试试这款编辑器,不过他的主推平台是linux。但经过我的使用,winNT版本也相当稳定。同样采用DX加速,界面不知比ModPlug 好多少(不过推荐有能力的用linux去跑它:-)

同时他的官方网站还提供了他的使用视频教程:http://www.milkytracker.net/?HOME

4.如何在程序中使用mod

如果要作大规模应用,完全可以采用fmod组件,如果仅仅为了用于demo或者crack程序,可以做下面尝试:

1.使用fmodmini

虽然也叫做fmod,同样也是官方产品,但他说白了就是xm播放组件。主要是minifmod.lib这个文件,通过合理设置编译头文件xmeffects.h可以编译出体积很小的播放程序,如例子中给出的只有11kb(采用UPX加壳后)

2.采用cheesetronic提供的播放器代码

这个我没有测试,代码可以在cheesetronic首页中找到,目前有BSD、linux、win32、OSX、PPC等版本。

3.亲自编写

我也没有亲自写过一个真正的tracker player,所以就不多说了:-)

5.总结

最近发现自己成“理论家”了——只说不练,所以其中的一些东西我介绍的并不是很具体,希望给各位有一定的参考意义,具体的实行还是要靠亲自的实践。

到现在一个事实已经很明朗了:crack、demo和mod,这3者的起源和发展有着千丝万缕的联系。虽然后2者在国内基本上没有起步,至于mod,至少出了本文我就再没见过别的中文文章了。

不过很荣欣我周围的朋友正好可以涵盖这3个领域,所以借此机会把本文发到每个领域对应的论坛,毕竟Computer Science是一门艺术,它并不是死板的书面理论,crack、demo和mod就是最好的例证!(回归现实,看我的龙书了)

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

本文遵照Creative Commons 2.5/cn 发表,欢迎转载和传播,请保留作者信息

CSK 2006

[分享]Undocumented Windows 2000 Secrets PDF拼合版本

书名:UNDOCUMENTED WINDOWS 2000 SECRETS: PROGRAMMERS COOKBOOK

作者:SVEN B. SCHREIBER

发行商: Addison-Wesley

 

这本书相信涉及windows内核开发的朋友不会陌生了,与他类似的还有UNDOCUMENTED WINDOWS NT等

这是一本涉及windows2000内核调试器、本地API(native API)、内核驱动、win2k对象管理(Windows 2000 Object Management)等方面的书籍,其价值性可以从UNDOCUMENTED 字眼中表现出来。

对于开发系统级程序、安全软件、木马病毒(但愿你不是这个目的),她是一本不可多得的好书。

之所以在此共享,基于下面2个原因:

1.在本书网站:http://www.rawol.com/?topic=41 

作者的一段话:

Well - the solution is here! I am indebted to the kind people at Addison-Wesley for returning the copyright of Undocumented Windows 2000 Secrets back to me. I'll use this right to publish the entire book free of charge in PDF format on this web site. Feel free to "spread the word" - please distribute the address of this page to anyone interested in my work!

2.作者发布的pdf版本是一章为单位分割的,虽然在学校0day上的电子书大多是这样,但我还是不习惯,所以手工拼合了下。

当然,突然放出这个东西绝对不是没有道理...毕竟reformCore已经进展到一定程度了,同时有一个计划...

 

好了,希望各位能喜欢^_^

 

算法作业2,着色和随机函数

这次是验证拉斯维加斯算法进行着色问题和实现一个rand随机数函数。

算法没什么技术含量,觉得有用的可以下来看看:-) 什么拉斯维加斯算法,明显就是乱算...

代码和程序:

http://www.csksoft.net/data/legacyftp/Products/code_and_lib/pigmentation_csk.rar

 

VS2005 mfc7.0编写 无需额外运行库

[号召贴]Demo Scene:Principles,Techniques,and Tools

看到这个标题不要害怕,实在是最近看那本龙书看傻了....

说在前面的:

看到老弟最近心血来潮,打算五年后能组队代表中国参加国际Demo Scene比赛,呵呵,我心里也有了些冲动。

是啊,当我第一次看Demo Scene时也有过这样的念头。我看得第一个作品是Heaven Seven。在那时看来如此和画面、音效产生的意境+64kb不到的体积,这样的程序不是当今顶级的hacker(注意,我不希望把hacker翻译成“黑客”)那还有谁能做出来?当然这只是当时我幼稚的想法。

后来又陆续看了些别的作品,大多都是http://www.monostep.org/上推荐的。虽然现在能让我记住的不多,但那些唯美的画面和恰到好处的sound track都不断的吸引着我。

随着自己阅历的积累,才知道64kb的体积其实并不是想象中那么神奇。一个优秀的coder+优秀的优化编译器+UPX加壳就足够能把任意的实时图形演算程序控制在64kb内了。至于声音,可以采用FM技术动态合成。

Demo Scene在国内还基本上是0起步的东西,不过也有人打算组团参加比赛了,这里不得不介绍http://www.sycini.com/(中国Scene盟会),虽然我对其中的作品并不苟同,但那也为我们提供了不可多得的资料。

在此我希望通过介绍目前自己已经了解的信息,能让各位知道SceneDemo其实更多的是灵感和艺术,对于其中的技术层次并没有那么的奥秘。也希望能将此文作为号召贴,各位如果希望能够成为一名Scener的话,可以在此文后面留言,我们一起努力!

1.你需要知道的(更多信息可以参看http://www.sycini.com/

Demo Scene简介:

首先要明白Demo并不是所说的“Demo版本”,这里的Demo是通过计算机实时图形运算配合原创音乐展现给人们的一段艺术视觉效果。

Demo其实是一个很早就有的东西,一些游戏一开始的演示动画就有demo的感觉。事实上,正是早期的计算机游戏的条件,使得开场画面需要实时的演算,才造就了今天的Demo Scene。比如以前的C64,nes系统。

如今,为数不少的Demo Scene组织中的coder都正供职于各类游戏公司。对于他们,实时的图形演算已是家常便饭。这也给Demo Scene的创作打上了坚实的基础。

同时,Demo Scene发展也和目前的cracker行业有着密切的联系。各位是否注意到很多crack程序都是配有背景音乐甚至是动画的。这里不得不提著名的razor 1911(http://www.razor1911.com/)(有没有在你的diablo2目录下发现一个1911字样的动画呢?)他们的不但在crack界内享有盛名,在Sence demo圈内也是小有名气。

由于对汇编的敏锐嗅觉,Demo Scene程序基本上都以精巧著称。

不过Demo Scene并不能只有coder,更重要的是有优秀的CG和sound track。唯美的画风和动听的音乐才是Demo Scene吸引观众的所在。

Demo Scene团队:

正像上面说的一个Demo Scene团队主要由以下几类人组成:

coder,他们是Demo Scene的核心人物,优秀的coder可以写出强大而又精巧的demo引擎,这正是一切的基本。一般coder在1-3名

美术设计人员,1-2名,主要负责demo的构思和图片素材的建立

音效师:1-2名,这个就不用多说了

其中,无论在团队中的角色如何,编程功底应该是每个人都具备的。

对于美工人员,他在设计画面的同时,也要考虑色彩的位深、贴图的尺寸、画面的特效以便于更好的能够提升cpu和显卡的处理效率。

对于音效师,对于64kb intro的demo。他们的职责就不是简单的产生mp3文件那么简单,由于64kb无法存储一个波形文件,此时的sound track都是通过程序实时波形演算合成而来。基本上一个成熟的团队都会写一个自己的FM发音引擎,这和8位红白机的音乐一样,好的音效师,可以利用波形合成在简单的FC游戏中产生与mp3一样的音效,而完全不懂FM合成的音效师则可能只能让团队的FM引擎发出“嘀嘀”的正弦波形了

2.Demo Scene的一些原理

我没有亲自涉足这个领域,因此很多问题上只是泛泛而谈。

1.如何控制文件尺寸。

这当然对coder有很大的要求,但并不至于完全要用汇编写程序的地步。由于demo中的图形基本是实时演算的,加上采用FM音频,所以不加任何修饰,一个合格的coder就可以把程序控制在300kb以内,然后利用编译器的优化特性,这个尺寸还有望减少50-100kb不等。最后利用著名的UPX或者ASpack压缩加壳,64kb的目标是很容易达到的

2.FM引擎

当然,FM音乐合成器最终还是希望自己写一个引擎出来,但也可以利用第3方函数库,比如十分著名的fmod,你的wow中就有个fmod.dll。利用它,播放一些mod(模块音乐)还是不在话下的。当然这里尤其要推荐的是fmodmini,他仅仅提供了xm音乐的支持,并且播放函数库可以植入程序体中,成为很多crack程序的首选,找个flashget破解程序来看看?

对于xm这类mod模块音乐,因为以成为格式标准广泛采用,音效师应该不难直接将自己的midi序列导出到这些格式。

3.图形演算

图形处理是demo的核心,基本思路和编写3d游戏几乎没有区别。不过对于demo有一个问题需要考虑:

每个demo都需要重写图形处理代码?

事实上对于图形的演算,无非是运动+特效的问题,前者用矩阵变换,后者则可以用常用的特效代码。所以如果为了长久之计,优秀的团队应该写出属于自己的demo引擎。

优秀的引擎可以达到这样令人惊奇的效果:今后的demo制作基本上不需要写代码,甚至可以像flash创作那样,设置好图、设置好关键帧补间、配上音效。便可以直接产生理想的exe程序了。关于这个问题我最后会特别介绍。

3.demo scene的起步

一开始就写出自己的demo引擎、FM合成器实在是不可思议的事,而且这样很快就会丢失激情。所以一开始的demo可以仅采用mp3、oog音乐,对于图形,可以直接针对画面写程序也可以使用其它团队已经开发出来的优秀引擎:

Werkkzeug farbrausch组织的demo引擎

德国著名的farbrausch团队的 demo制作工具,只要你有基本的3d建模能力和动画制作程序,就能产生体积很小的demo程序。

不过界面实在是简陋

对于他的使用可以参考http://www.sycini.com/tutlist.asp?tutid=14,该引擎可以在sycini.com 得到,或者可以email向我索取。

著名的the product.就是用它渲染得,不过这是他的第一版本,已经过时很久了(所以他们才会公布)

aDDict conspiracy团队demo引擎

对于conspiracy,我已经佩服的没话说了,看了他们的制作引擎~天哪,他拥有华丽的界面+简单的操作。其中可以直接编辑3d模型和处理纹理,基本上是一个简易的3ds max!

不过他们之所以能公开引擎,自然也有道理:你不能生成Exe。不过conspiracy曾在自己的团队网站承诺,可以将你的工程文件交给他们帮你生成Exe...

这个引擎系统目前很难找到了,教程和下载可以参考上面的连接,如果没法下到程序,可以单独与我联系

demopaja moppi团队的引擎

界面很像个简易的flash编辑器,moppi对我来说就是那个Assembly 04的invitiation demo。我曾经修改了这个demo作为协会和以前松江二中毕业留念中的demo。

他更适合2d demo的制作,虽然我还没弄清怎么用,并且貌似很难找到使用资料。并且这个程序目前几乎已很难再找到了,所以需要的话直接email联系我把

4.说在后面

上面就是我目前对Demo Scene已经了解的情况,当然很多细节这里就不说了。最后说到的那些制作引擎固然好用。而且sycini.com 的很多作品都是用他们做的,但这不是我们的目标。所以大家如果对demo这行有兴趣,不妨先用这些引擎练手,有实力的coder可以尝试写我们自己的引擎了。

那些引擎实现也不难,关键就看我们有没有这个胆量和执著的追求了。

在flash site release 2完成以后,我将花力气研究AI和图形算法。各位有没有兴趣一起组建一个scene团队呢?

[开源]查找建筑边界GUI版本

算法不难,程序也不烦,只不过是算法课一道题目而已

当然按我的作风,尽力写个漂亮的GUI,顺便巩固下MFC。生疏了……汗

src:

http://www.csksoft.net/data/legacyftp/Products/code_and_lib/FindBorder_CSK.rar

 

使用VC2005 MFC8.0编写,SDI框架,主要就是一些GDI的调用

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

推荐个Flash游戏:http://www.samorost.net/samorost2/

FlashForward 2006 Austin的原创声音奖

GUI的起源和发展[1]

最近不太喜欢写教程,因为觉得自己没学过什么..不值得说。这篇东西原本是打算作为一次协会讲座的。现放出来让大家分享吧

1.GUI的起源

扫盲:  GUI - graphic user interface

直观点说,GUI就是你现在正是用的windows、linux、mac等的那些窗口、按钮和相关的功能的总合。

相信对于大多数人而言,GUI可能就等于win32的图形子系统。实际上GUI的系统的起源和windows没有任何关系,windows在这方面可以说是一个抄袭者(作者偏激的语言,仅供参考)

作为一个完全图形化的环境,她虽然给用户操作提供了极大的便利,但对于开发人员来说,尤其在初期,开发GUI环境的程序简直是个噩梦。(这也是为什么许多hacher\cracker喜欢写console程序的原因之一)

公认的世界上第一个GUI环境是由Xerox公司开发的Xerox Star系统,他是由施乐公司帕洛阿尔托研究中心(Xerox Palo Alto Research Center,PARC)开发的,对应的图形系统称为:WIMP(意为:Windows, Icons, Menus and Pointing device)

以下是他的界面图片:

(点击察看原始尺寸图片)

(点击察看原始尺寸图片)

(点击察看原始尺寸图片)

 图中可以看出,一些基本的GUI元素,如window、button、scrollbar、folder等已经出现了

 随后,Steve Jobs 参观了Xerox PARC研究中心,并将WIMP的理念带进了apple系统中,从而一个具有传奇意义的os:Macintosh

之后,随着windows 1.0的发布,才有了现在的windows系统占领天下的局面。

这里提供一个windows1.0运行画面的地址:http://www.digibarn.com/collections/software/microsoft/windows10/page_02.htm

当然,也可以直接安装它来看效果

这里推荐一个比较好的介绍GUI前期历史的网站:http://toastytech.com/guis/index.html

2.X windows

家喻户晓的Windows系统这里我就不介绍了,同时随着Mac OSX x86版的顺利破解,大家也可以直接去体验这个超级华丽的系统,同时也能感受MS在制作Vista时候花了多少心思用于抄袭

(记得今年WWDC上的一个横幅上的文字:Microsoft has a cat,yes,a Copy Cat.......)

UNIX、Linux和X11

UNIX是一个对计算机发展有着十分深远意义的OS,这一点可以直接从他的衍生系统中看出来:Mac OS、Linux。至于windowsNT,也不能说它和UNIX就没有任何联系

不过以UNIX古老的历史,它诞生的时候世界上还根本没有GUI这个东西,到了后期,才出现了X Window System,因为目前的稳定版本为11,所以常称其为X11。(可以在Mac或者linux目录/etc/x11找到他的影子)

这个图形系统的特色在于它是基于服务器、客户端模式运行的。换句话说,应用程序和图形子系统是经过“网络”通讯的。

其实WindowsNT开始也有类似的机制,Win32图形子系统csrss.exe也是基于CS构架。但X11很夸张的采用了socket模式,只要服务器监听远程网络,那么很容易就实现了远程桌面。而且只要网速够快,远程屏幕的显示效果和本地是一模一样的。相信Vista永远不会有这个能力吧...

目前x11是一个开源、免费的项目,由Xfree86负责维护:http://www.xfree86.org/

 

随着linux的发展,自然x11便成为linux下的图形系统。

KDE和Gnome:

和Win32图形系统不同,X Window System只是负责最基础的图形系统功能,对于图形元素、窗口、按钮,还需要程序的具体绘制,于是便出现了KDE和Gnome环境,它们是一个桌面环境+窗口管理器的集合。

 (很不恰当的比喻:X11好比是windows中的GDI系统+基本的窗口事件管理,KDE、Gnome好比是user32.dll)

对于使用Linux的朋友,这2个图形库系统应该是非常的熟悉了。常见的linux图形环境的样子,就是由他们造就的。

由于X11的高开放性,KDE和Gnome可以在同一个桌面环境中运行。KDE对应的图形库称为qt,而Gnome采用Gtk库

这点对于windows开发人员来说可以理解成,直接使用X11开发GUI程序和用win32 sdk开发一样,所有功能都是需要自己一步步实现的,以至于连按钮的样子都要由你画出来(win32 sdk至少还不用自己去画个按钮)。

而KDE和Gnome已经将一些低层的工作封装了,好比采用MFC开发程序,这样在同一个图形库的程序,比如用KDE,他们的界面是相同的,但是不同的图形库的程序界面就相差很大。因为Gtk和qt在绘制一个button上细节就差了很多。

这也导致了目前linux下程序界面十分的不统一。

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

先写这些,以后有空再写~

 

分别用C++和java实现的表达式编译器

最近忙着做ez-uml,所以象征性的放些好玩的东西吧

表达式编译应该不陌生了,就是计算一段数学表达式的程序。如果你还是不懂就别看这篇文章了~

这个的算法各类数据结构教程中应该都有介绍,但基本上没有给出完整代码的,关键就在还需要写个自动机来获取符号。

今天就把我编写的2个语言版本的代码贴出来吧,方便大家:-)

C++版本是我高中自学数据结构编的,所以其中OO和自动机的思想还不是很明显,JAVA是最近的作业,呵呵,完全的OO,过分的OO了……

开源归开源,不过作者信息应该还是要保留的把~

其实高中还写过一个版本,混乱版……在我还不知道堆栈是什么的时候,用野蛮办法实现了表达式编译~算了,不好意思拿出来了

分页:[«][1][2]3[4][5][»]

日历

<< 2015-6 >>

Sun

Mon

Tue

Wed

Thu

Fri

Sat

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

Copyright Shikai Chen 2000-2012. Powered By Z-Blog(CSK Modified)