C#、软件工程、破解、骇入、应用程序
分页: 1/2 第一页 1 2 下页 最后页 [ 显示模式: 摘要 | 列表 ]


我覺得,在編程上,Vista 做了最重大的事情,是革掉了延用十年的 Win32 API的命,而代以 WinFX。

Win32 API包含的範圍極廣,無論是字處理、電子郵件、即時通訊軟件、殺毒以至 ERP系統,可以說任何應用軟件,都必然會和它打交道。

所以當 Vista以新的 API取而代之時,它必然也引入了近代的編程架構及理念。它的影響,就好比從 DOS應用,到Windows應用。又或者好似從 C語言,進化到包含了大量虛擬code理念的 .NET平台及 Java平台。

這能夠解釋為什麼 Vista的兼容性問題如此嚴重。Win95、2000、XP都是建立于 Win32 API之上,而 Vista卻是建立在 WinFX API上。(或者该说是主推?)

平台 API 的进化

DOS時代:DOS 5, DOS 6.2
Win3.1 :和 DOS時代 並存
Win32  :Win95、98、2000、ME、XP
WinFX  :Vista、以後的版本

也就是說,Vista 只是一個開始。它肩負了微軟未來十年的軟件開發平台的使命。它同時也將會是未來十年內最普遍的程式執行平台。(除非Linux取而代之……)

這同時也能夠解釋,為什麼現在對 Vista程式的改動,大多關注在畫面及界面上的差異。因為 API的改動,最快看到結果的,就是應用新的界面 API。

其他 WinFX API的用途,無論業界或者微軟本身,恐怕都需要相當長的時間探索。要先有軟件廠商挖掘出 API的潛力,做出上一代 API做不到的事情,再回饋到 Visual Studio這些開發平台,Vista-only 才會慢慢普遍化。

Vista 的最大竞争对手

我認為,現在對 Vista最致命的東西,是軟件開發逐漸不再是廠商的主力。現在每個人都 go for internet(我自己也是走網站應用開發)。適合做在網上的應用,誰願意做成軟件版本?

所以我認為 Vista最大的競爭對手,很可能不是 Linux,而是 Google這一類把應用以網站方式呈現出來的網絡公司。兩者的競爭,將發生于對開發人員的爭奪上。

如果大家都往網絡開發網站,應用程式的需求量就會減退,導致沒有足夠的業者,投入資源去挖掘 WinFX API的潛力。畢竟沒有必要放著好好的 XP 不用,而要為自己找麻煩。這樣 Vista系列就會失敗。
Tags: , ,

C# 真的太容易被反組譯了

[不指定 2006/08/17 17:28 | by haryewkun ]
聽說﹐幾乎沒有共享軟件(shareware) 是用 C# 寫的﹐因為﹐真的太容易被反組譯(Decompile)了﹐而且反組譯出來的源代碼﹐和原本的源代碼完全一模一樣。

當然﹐要是拿來做開發源代碼的專案﹐是再美妙不過了。不用聲明 GPL﹐也自動GPL。那個獃子要拿來盜版﹖根本無法封堵。

可是﹐要是拿來做商業產品﹐就很不妙了。比方說﹐SQL 的格式﹑資料庫的密碼﹐統統都可以被看光﹐怎樣做商業應用﹖網上著名的反組譯程式 Reflector 就是免費下載的。要看看自己做出來的 EXE 或者 DLL 會被反組譯到怎樣的程度﹐下載來看看就知道了。

另外﹐C# compile 出的 DLL 也是可以被 Decompile 的﹐已經測試過了。

Visual Studio 2003 裡面包含的 Dotfocastor 只是普通版﹐聽說效果超爛。真正professional 版要 1495 美金耶。而且也無法阻止人家看到代碼﹐只是名詞全部被換掉﹐要理解比較困難而已。

VTK Applet 的开发进度

[不指定 2005/01/06 12:38 | by haryewkun ]
VTK 是一种 3D 的 visualization 处理 API,由 kitware 发布的开源计划。听说在很多大学中都是被广泛用作 visualiation 的实作示范,它包含的 class 真的是多到很恐怖的。。。当然还有更大的专案,但对我来说,一人之力,这种 source file及 class 已经超过一千个的专案,已经算是够大了。

这几天见进度延后了,拼了。。。每天一起来就打开电脑继续研究,每天都通宵做到明天早上太太上班了,自己累倒了,才倒在床上睡觉。日复一日,做到电脑面前已经数不清有多少小时了。

我现在在做的东西是,要在 Java Applet 上面实现 VTK,换言之,signed-applet + JNI + VTK wrapper 是实现唯一的选择。这个提议是我自己向上司提出的。。。毕竟要是要靠原本的手动用 Java 一个个 visualization method 实现下去。。。要做到何年何月才能做得出来?而且这是重复发明轮子,比方说 contour/ isosurface 这些实现方式,早在 VTK 中就写出来了。为了要在 Applet 上面使用(目的是要跨平台、在browser 上面使用),而用 Java 一个个程式再写过去,并不是明智之举。尤其是只有我一个人手。。。要写到什么时候呢?

我硬着头皮向上司提出,尝试在 Java 里面,用 applet 驱动 VTK 的 DLL (VTK 是用 C/C++ 写的)。对于我这个毛头小子来说,牵涉的技术未免稍微超过了我的能力范围了。。。要在browser 里面运行的 applet 中驱动属于 C/C++ 的,JNI 是唯一的解法。要使用 JNI,第一步就必须用 signed-applet 穿透 JVM 的 sandbox。。。要不然,applet 是没办法读取 native 的 VTK DLL 的。。。

这第一关,花了一定的时间,托 Google 之福,大约知道了要怎么做成 signed-JAR,然后就能在 client-PC 上面横行无忌了。。。第二关,就是该 applet 到底要驱动 VTK 的什么东西?我就在这边踢到了铁板。我以为只要用 JNI 驱动 VTK 的 DLL 就好,但我忘记了,VTK 是一个 visualization 的 API classes,它设计的目的,就是向荧幕输出影像,在 native 下面是没有问题,在 browser 的 applet 环境下面,怎么向它 pass screen 的 buffer?这真的是大大的麻烦!

最后,找到了一些方法解决到了(VTK 有提供相关的 wrapper classes)。。。坦白说我也不是很明白解决方法的工作原理。所以还是有隐忧的。中间还有种种问题,就不一一细说了。

到了几小时之前,终于在荧幕面前做出了骷髅头的 3D 模型!最大的技术难关应该算是实现了,这才稍微松了一口气。比如用 JFileChooser 选择本地的档案、或者要怎样拿网上的 file 下来给 VTK class 处理(没办法,VTK 的 reader 是 file-based 的)。。。这些大概都有方法实现。

整个过程,其实承受了蛮大的压力。这绝对不是劳力活,也没人知道这样子尝试到底行不行得通。新的尝试是自己跟上司争取的,可一上 VTK 的 forum 看看,之前尝试过要把 VTK 用在 Applet 上面的人其实并不少,可是几乎全都哀嚎连天,好像没有听说过谁成功过的!我自己对 Java 的底层运作一无所知,只好硬着头皮模着石头过河!还不知道河有多长,搞不好那不是河,是海!事实上,我现在也还没走到对岸,是看到了陆地的影子,搞不好那只是荒岛的影子。。。

我的部门里面,没有 senior 了(如果照年资,我自己也算是 senior 了),所以没人可以在前面带路了。事实上我找了Google 很久,也没看过谁成功做出来过(当然也可能有人做出来了没公布,或者我没找到)。所以,在全世界的范围,也没有成功者在前面带路,大家全都是模着石头过河。。。我心里不是不怕的,成果做不出来,这两、三个月的时间就白花了。上司追究下来,以后的信用度就没了。没别的方法,唯有多加苦功,尝试看做不做得出来再说了。

希望一切顺利吧。。。如果一切顺利,两个星期内我就可以看得更清楚了。不止要考虑能不能 implement 出功能,还要知道到底能不能达到需要的适用程度。。。不是说能运行就行了,有些东西不在我控制的范围之内,例如 VTK 的 classes。。。如果全放在 JAR 里面下载,就要 700 KB 以上。。。VTK classes 的数量不是我能控制的。。。有时候,可能 VTK + applet 这个点子像炼金术那样,从一开始就注定了是行不通的。我怕的就只是这样。若真如此,不管付出了多少的努力都是白费的。

如果可以行得通,那就有意思了grin,听上司本来的意思,是有打算要拿来 open source 的。或许可以投给 VTK 的 development team,或许可以有一部分的源代码可以做成 framework。。。grin





JAR 是一个很好的压缩性工具,可以把许多 classes 档案压缩进一个 JAR 里面,节省了 HTTP request connection 的需求。在这同时,也只有把程式压缩成 JAR 的格式,才有可能做出数字签名(signed applet),也只有数字签名,才能让 user 选择要 break the sand box: 也就是 bypass Java 的 security。

我在开发中遇到一个问题,我的所有 class 档案太大了,我的 Java project 包含了一个很庞大的 class 库,至少有一百个 class 档案。很不巧的,我的 main class 需要 bypass Java 的 security (因为必须要用到 JNI),所以很明显,我的 main class 一定要被包装进 JAR 里面。

如果全都包装进 JAR 里面,档案太大了。而且不是每个档案都会有用到。可是,如果不把全部档案包含进去,只把 main class 放入 JAR,其他的使用 class 的话,main class 又找不到其他的 class 档案(因为它们不在 main class 所在的 JAR 里面)

解决方法是:
添加一个 manifest.mt 的档案,里面内容加写说
Class-Path: clsHello.jar

那么,这个 clsHello.jar 就算被列入 main JAR 寻找的 classpath 范围内了。也就是说,mainHello.jar 里面的 class,可以呼叫 clsHello.jar 里面的 class 了。

这些知识对于 Java 高手应该是轻而易举,我只是要记录下来怕自己忘记了而已。

附注:如果 main JAR 被 signed 的话,其他 classpath 内的 JAR files (例如 clsHello.jar) 也必须要被 signed。否则会出现数字签名不对的问题。

至于这样搞,download main JAR files 的时候,会不会顺便也 download clsHello.jar,还是等到有用到clsHello 里面的class file的时候才装上,我就不知道了。因为除非监视 IIS或者apache 的log file,否则要查出来也是不容易的。
以前读大学的时候,有些同学,从来没有做过系统,只会学校教的C++,JAVA的基础,甚至连VB都不会,却能凭他保持中上的水平成绩。而一些高手,从基础课开始读起,侧重程序忽略理论,PROJECT很好,但FINAL成绩却很滥。

这是否教育制度的错?我也曾经有过这样的感受。。。

后来,我是想开了。因为我发现了这样的想法其实是矛盾的。原来,我开始的时候,是把心目中的冀望投射在教育制度的冠军之中。当我不再要求教育制度为了我而改变的时候,我就看清了真相。且听我仔细讲讲。。。

首先,我觉得那些没有 programming 能力的人也能拿到很好的成绩,是羞耻的。其实我心里在想的是「应该要很强 programming 的人才应该拿到很好的成绩」。

再细看,我心中其实是这样认为:「project 好但考试差的人,不应该比那些只会考试的人差」。

所以,我的结论是:「只会考试的人,成绩却在会做 project 的人之上,是错误的。这是教育制度的错误。」

后来,我发现了矛盾。

第一,我们是不是低估了优等生?如果有一天,教育制度的设计不一样,全部以 project 的成绩来决定优劣的话,那些优等生把全部的时间投入在project上,可能成绩也一样在我们之上呢!

这绝对不是无中生有。我发现,优等生的时间管理(Time Management)及努力程度一向都十分地高。这才是大公司聘请他们的真正原因。我们以为他们不擅长 programming,其实是错的。

他们知道programming 占的分数不多,所以不想投入太多时间在这边,而投入更多时间在课本上。所以他们赢,我们输,programming 很快就会outdate,他们大可以在毕业过后再迎头赶上!

第二,教育制度是不是真正错误呢?programming 的能力好坏到底是不是 computer science 的重要环节?

要怎样衡量是一个问题。这里用最简单的想法:那一个人可以做比较大的 project,可以得到收入比较高。就实战的衡量,那些programming 很好的人,往往只能做 programmer,收入两千、三千不到。

可是,那些优等生却往往有能力担任 project leader,收入四、五千元以上。不由得不让我深思,那一种人才能为社会作出更大的贡献。

我发现的矛盾就在这边。如果 programmer 高手的价值比较高的话,那么我也不应该在意教育文凭,何必去在意呢?只要我能挣到更好的收入、管理更大的专案,那才是真正衡量我的地位的东西。我再也不会对无法在大学拿到优等文凭而在意。

BILL GATE 本身就没有大学文凭,但他知道他可以创立微软来证实他自己的价值。我一是选择优等生的做法,努力读书考好成绩,另一则是继续钻研 programming,考试勉强及格就好,然后出来社会后,证实自己的价值。看看谁的收入比较多。通过实践证实到底是社会错还是我错。
分页: 1/2 第一页 1 2 下页 最后页 [ 显示模式: 摘要 | 列表 ]