新年第一个年签

以下纪元方式为农历.

去年最后一天, 我好像用光了自己所有的运气一样, 准备出门赶火车, 哎呀门坏了, 思考再三, 决定修门, 用锉和钳子忙活半天.

哎呀实在修不好了, 不管了, 稍微用锉别过来锁上, 然后拖着行李奔出去, 哎哟我的乖乖, 这个24楼的又搞装修还是啥地, 人是一波一波的, 这两个电梯最近改成只要有一边会停, 另一边就不停的, 我眼睁睁看着时间一分十分的过去了, 天啊我出门花了半小时, 然后从门口飞快的奔向车站, 我当时就傻了, 我奔到进站口时候, 发现这个始发专用进站口直接被锁了, 我研究了半天没法过去, 只好慢慢的拖着半身不遂的身躯去到前一个口一问, 开走了三分钟了.

我简直去车站超市胡乱买了点吃的, 然后才有力气继续拖着巨大的箱子去办理改签.

晚上回来好是凄凉啊, 人民广场这里人烟稀少

blog程序终于更新了, 顺便发今年第一个年签

话说俺用2.0用了有一年多都快两年了完全没有更新过, 以前在自己机器上有镜像的时候, 还追过k2的svn, 当时还报了一些bug和fix方式, 老外说give me your code, I’ll kick it into svn directory, 俺就记住了这个kick, 从此每次check in代码时候都不由自主的脑海里面浮现出邪恶的场景来.

说了这么多废话, 原来今年已经是08年了, 有些事情还是如07060504030201一样的过, 而唯一不劳而获的大概只有年龄了, 十几岁的时候或许盼着快点长大, 真傻, 当时脑子肯定被地铁夹过了.

06年#3分站是年中半路开张, 所以06年的流量也没有总结, 而07年简直关站了一个月, 原来放部落歌的服务器浮云了, 只得搬到了dreamhost.

07年一共12w的hits, 其中浏览器的主力还是IE6, 22710, 而排第二的是IE7, 4849, 两者中间的是雅虎百度google,yodao和msnbot这些机器人, 居然占了6W7, 简直一半还多.

剩下的就是非主流浏览器和在线/桌面订阅工具了, FF只有2k9, 而IE5.5也有1k2, 垫底的是Netscape, 959, 想到每天就有三个IE5.5的用户看俺的部落歌, 忽然我感觉离以前在网吧疯狂把IE5升级到5.5的日子没过多久似的, 当然还是某杂志赠送的光盘里面的IE, 因为下载来说会被其他人抽死吧.

相对06年的点击是6w3, 其实比较来说, 07的访问量很多是在访问06年的老帖子, 那个时候spaces上的和wordpress上的日志基本都是同步发的, 到了现在两个部落歌已经是分别更新的了, #2的space比较侧重于技术以外的东西, 而#3的ksxuxu质量明显要比#2高一些, 也不枉当时为了注册这个域名来鄙视百度知道的伪知识了.

再说说来的人都是看啥页面, 访问首页的是8w, 而排第二的就是安博士的劲舞壳门日志, 真是百感交集, 我嘲笑某组和某厂商的日志居然经常被小P孩们搜索为啥不能玩不能启动找到. 接下来还是oci8的疑难解答帖, 还是Oracle的Provider的解答帖 , 然后总算有了一篇感想帖, ECM的去世对我造成的冲击, 这帖我边写边流泪, 也只有1k的点击, 唉, ECM也会替这些只会搜索XXX不能玩的小P孩感到惋惜吧.

传入的google搜索关键词, 排第一的是….小萝莉, 看来都带草字头的拼写还是比较得到认同. 接下来是"跑路", 这就莫名其妙了, 拿出google一搜, 嗷, 俺的BT Mirror #3正好排在首位, 而之前的小萝莉画贴已经排到第一页最下面了, 真是所谓人心不古, 世态炎凉啊.

不用说, 接下来的全部是疑难发问的关键词了, 郁闷的是俺的日志被拷到N个完全不认识的人blog上面当作他的帖子, 就没人肯做一个trackback说明来源.

唯一的2个trackback还是Junior.Spirit从俺这里的色稿翻制了一张线稿.

所谓06年我帮助了劳苦大众, 07年只帮助了小P孩, 而且善款还被人抢了.

好吧中午开始画个贺图吧, 如果睡醒的话. 还好有LiveWriter, 这篇日志肯定是今年第一个两边一起发的帖子吧, 也可能是最后一个了…

07年的贺图只发到了spaces好像, 还是刚才统计spaces访问量看到有人搜过来的…

今日のみなみけ(南家餐桌)资源吸出和游戏系统研究

这是一个即没有H也没有恋爱的同人游戏(官方介绍), 里面的每一个角色都是攻略不能的, 主题上还是属于收集系的游戏, 游戏以假期的一个月为一轮, 通关后追加若干菜单, 可以不按预定菜色做饭, 当然要确保当天负责做饭的三姐妹之一不会把饭做糊掉.
以上介绍完毕, 直奔主题, 这个游戏我觉得比较厚道的因素, 就是语音了, 虽然不是全程的, 可是在非ecchi游戏中, 特别是同人, 有语音的可谓少之又少鸟.
基本上都是一些事件对话和日常对话, 例如早上遇到今天第一次见面的人, 她们会和玩家互相问候, 有慢悠悠的敦子的慢悠悠欧哈由, 也有知晓秘密的内田的yahoo, 当然也有男生的阿斯, 也有真希中气十足的早上好.
诶, 说起来令人印象深刻的还有那个脑袋被地铁加过的保坂怪哥哥的热情的歌曲, 令我想起了酒剑仙那首有语音的诗…
也不由得想起当时反编译仙剑3的剧情脚本, 试验发现可以给对话同时加上语音后的寂寞感…
让夏娜姐姐给龙葵妹妹配音应该会让龙葵娇羞有坚强的性格更加印象深刻吧~~
扯远了, 占位更新图像资源的压缩存储格式.
这款游戏的安装目录的image文件夹下有大量的fzl文件, 开OD跟踪, 发现程序会先试图在image目录搜索同名的*.png文件, 搜索不到时候, 就改为打开*.fzl文件.
于是就找了一个logo_0.fzl来分析, 拿压缩工具一压, 没有压缩率, 应该是加密或者压缩后的格式.
先看文件大小是24712, 也即#$6088, 然后在$8处看到了一个#$6048, 又在$40处看到数据的开始, 而前面是#$20个pending的00. 那么$8这里应该是存储压缩后数据的大小, 而文件头的大小是#$40. 观察前#$40字节, 没有发现#$40的数据, 所以文件头的大小应该是固定的.
根据经验, 存储压缩数据大小的前后很可能就是压缩前数据的大小, 以便申请适当的buffer, 那么$4处的01肯定不是, 而$C处的#$40000则非常可疑.
继续向下看, $10开始是$#20,1,#$100,#$100, 自然前面两个是长宽的可能没了, 而#$100*#$100 * sizeof(tagRGBA) = #$40000, 应该是一个256*256的图片, 压缩前的格式是4字节一像素的数据流.
因为前面要打开png文件, 所以怀疑这里跟png有什么关联, 用KANAL看了看, 主程序用到的算法有ADLER32, CRC32, ZLib deflate, 那前面2个都是hash算法没法用来作数据压缩, 看来应该只有zlib一种选择了, 为了防止程序用自己的压缩方式来压缩, 跟踪了logo_1.fzl的数据读取, $40处的数据是在第四次读取fzl文件时候取出的,

00564F5B  |.  6A 00                    PUSH 0                                   ; /pOverlapped = NULL
00564F5D  |.  50                       PUSH EAX                                 ; |pBytesRead
00564F5E  |.  8B03                     MOV EAX, DWORD PTR [EBX]                 ; |
00564F60  |.  FF75 10                  PUSH DWORD PTR [EBP+10]                  ; |BytesToRead
00564F63  |.  51                       PUSH ECX                                 ; |Buffer
00564F64  |.  FF3430                   PUSH DWORD PTR [EAX+ESI]                 ; |hFile
00564F67  |.  FF15 80405700            CALL NEAR DWORD PTR [<&KERNEL32.ReadFile>; \ReadFile

数据读出后, 在buffer处下内存访问断点, 断在一个三层循环处, 操作是读取

00545071  |. /E9 6B1E0000              |JMP 00546EE1
00545076  |> |837D EC 10               |/CMP DWORD PTR [EBP-14], 10
0054507A  |. |73 42                    ||JNB SHORT 005450BE
0054507C  |> |837D D4 00               ||/CMP DWORD PTR [EBP-2C], 0
00545080  |. |75 05                    |||JNZ SHORT 00545087
00545082  |. |E9 5F1E0000              |||JMP 00546EE6
00545087  |> |8B4D D4                  |||MOV ECX, DWORD PTR [EBP-2C]
0054508A  |. |83E9 01                  |||SUB ECX, 1
0054508D  |. |894D D4                  |||MOV DWORD PTR [EBP-2C], ECX
00545090  |. |8B55 C4                  |||MOV EDX, DWORD PTR [EBP-3C]
00545093  |. |33C0                     |||XOR EAX, EAX
00545095  |. |8A02                     |||MOV AL, BYTE PTR [EDX]

是一个结构漫长的函数, 向下翻动几页, 在同一个过程中发现invalid store blocks lengths和invalid code lengths set等信息, 那么这里可以确定读取fzl文件压缩数据的这段代码简直就是zlib的内层解压函数, 我就操出俺的zlibUI工具, 把logo_0.fzl的前面#$40字节减掉, 只留下#$40000, 拿去解了, 解出来的大小刚好是#$40000. 接下来, 不知道具体的原始数据的像素存储顺序前, 俺把解出来的文件名称改为logo_0.raw, 拿去xnview一看, 是混乱的重叠图像, kyouno三个字勉强可以看出十几个, 那么肯定不是RGBA了, 先不管这个, 接下来我就开始写XnView的插件, 用来查看fzl格式图片, 具体的像素排列就一边写一边分析了, 当然历经若干混乱的代码, 错位的, 黑白的, 有彩的, 色彩诡异的图像后, 终于完美解出了带透明的数据. 其中问题的解决还是无奈仔细手写了一个阵列然后手工排了一下可能的分布, 一举解出色彩诡异的形状正确图像后, 换了一下RGBA到BGRA就成功了.

这时候才忽然发现image目录下面除了fzl居然还有fzm文件, 给fzm文件增加解析花的时间比fzl更长, 虽然心里面大概有谱, 不过因为有谱导致的粗心, 写错鸟结构的长度, 发现bug后觉得这种依靠头脑清醒来保证代码正确不是办法, 就重新排查一遍加上重构了大部分硬性判断的代码, 改为载入文件时识别出像素和色深模式进行固定, 这下解析单行的代码看起来就工整了许多.

fzm呢, 基本上对等与8位的PNG, 所不同于大多PNG的是他在调色板使用了alpha透明, 对于alpha通道调色板的PNG, Fireworks支持, Iconworkshop支持, Xnview不透明, InfraView会进行合并.

继续补完这篇文章已经是一个月后的12月了, 不知为什么这个月过得格外的漫长, 或许是没有什么加班的缘故, 也或许是韬光养病的错觉, 感觉做了不少有意义和没意义的事情, 当然动画的minamike里也陆续出现了很多角色, 虽然原作中的角色还没有出全, 但是主要的几个配角, 例如成为这个游戏主线的女装版マコちゃん(眞子), 还有使得マコト无法正体复原的冬马, 当然还有令人呕心的保阪和同样具有幻想症状的アツコ(敦子), 说起アツコ呢还是觉得这个游戏里面的アツコ比较有漫画的风味, 或许是先入为主吧或许是声优表现出色, 感觉跟游戏里面的形象很切合, 软软的慢腾腾的傻傻的弱气娘啊. 而总是背着手笑的吉野的打招呼声音那是格外的清脆啊, 一看就是个好人, 可以入手大量的野菜种子, 果然是好人啊.


先写下要晚上要写的地方, 以免忘了

1. 乐呵呵的吉野的配音

2. NPC的有得没得的剧情

3. 梦幻合宿

4. 画面可动的诡异电视

5. 自己偷偷攒招待券的实久留店员

6. 家庭会议

7. 饭后甜点

8. 大叔C的厚道音乐

清理了机器上的软件

清理了一下机器上久未使用的软件.
有些一年未用, 有些都快两年了.
说起来自从到上海前一段时间, 连清理软件的力气都没了.
杀掉了一批总觉得什么时候会用到但是很久没有真的去用的软件
例如InkScape, Gimp, FontLab, RO Chrome, MicroAngelo Toolset 6, 和一些诡异的算法库.
还是按照那个诡异的原则, 3个月用不到的一概杀掉, 以后需要就下来装, 你有文件我有硬盘, 谁怕谁

山百合封库文件加密方式和archive格式

会以570, 两次均读入4字节到CC和D0.(01和0F)
然后每次读取3FC (0F*44), 并且开始解密.

00437C99  |.  50                       PUSH EAX
00437C9A  |.  8B45 00                  MOV EAX,DWORD PTR SS:[EBP]
00437C9D  |.  50                       PUSH EAX
00437C9E  |.  E8 3D040000              CALL LilianFo.004380E0
00437CA3  |.  8B06                     MOV EAX,DWORD PTR DS:[ESI]  EAX=0F
00437CA5  |.  83C4 0C                  ADD ESP,0C
00437CA8  |.  33D2                     XOR EDX,EDX    EDX = 0
00437CAA  |.  85C0                     TEST EAX,EAX    0F dec?
00437CAC  |.  7E 64                    JLE SHORT LilianFo.00437D12
00437CAE  |.  33FF                     XOR EDI,EDI    EDI = 0
I := 0;
00437CB0  |>  33C9                     /XOR ECX,ECX    ECX = 0
do begin
00437CB2  |>  8BB5 18010000            |/MOV ESI,DWORD PTR SS:[EBP+118]  do ESI = SourceAddr
00437CB8  |.  8BC7                     ||MOV EAX,EDI    EAX = EDI
00437CBA  |.  03C6                     ||ADD EAX,ESI    INC(EAX, ESI)
00437CBC  |.  B3 03                    ||MOV BL,3     EBX = 3
00437CBE  |.  8D3408                   ||LEA ESI,DWORD PTR DS:[EAX+ECX] ESI = 0 + I (Current)
00437CC1  |.  8AC2                     ||MOV AL,DL    AL = DL  (0, y)
00437CC3  |.  F6E9                     ||IMUL CL     AX = AL*CL (0,i*y)
00437CC5  |.  F6EB                     ||IMUL BL     AX = AL*3 (0,3*i*y)
00437CC7  |.  8A1E                     ||MOV BL,BYTE PTR DS:[ESI] BL = Buffer[ipos];
00437CC9  |.  04 3D                    ||ADD AL,3D    INC (AL, 3D) (3D,3D+3*i*y)
00437CCB  |.  32D8                     ||XOR BL,AL    BL = BL XOR AL
00437CCD  |.  41                       ||INC ECX     INC (I)
00437CCE  |.  83F9 3B                  ||CMP ECX,3B    CMP I, 3B
00437CD1  |.  881E                     ||MOV BYTE PTR DS:[ESI],BL Buffer[ipos] = BL
00437CD3  |.^ 7C DD                    |\JL SHORT LilianFo.00437CB2 while I < 3B 
end while I <= 3B
00437CD5  |.  8B8D 18010000            |MOV ECX,DWORD PTR SS:[EBP+118]  ECX = SourceAddr
00437CDB  |.  8B7424 10                |MOV ESI,DWORD PTR SS:[ESP+10]  ESI = [ESP+10]
00437CDF  |.  8B5C0F 40                |MOV EBX,DWORD PTR DS:[EDI+ECX+40] EBX = (SoruceAddr + 40)^
00437CE3  |.  8D440F 40                |LEA EAX,DWORD PTR DS:[EDI+ECX+40]  EAX = SourceAddr + 40
00437CE7  |.  81F3 AC59DFE3            |XOR EBX,E3DF59AC      EBX = EBX xor E3DF59AC
00437CED  |.  8918                     |MOV DWORD PTR DS:[EAX],EBX   (SoruceAddr + 40)^ = EBX
00437CEF  |.  8B85 18010000            |MOV EAX,DWORD PTR SS:[EBP+118]  EAX = SourceAddr
00437CF5  |.  8B4407 40                |MOV EAX,DWORD PTR DS:[EDI+EAX+40] EAX = (SoruceAddr + 40)^
00437CF9  |.  03F0                     |ADD ESI,EAX       ESI = ESI + EAX
00437CFB  |.  85C0                     |TEST EAX,EAX       IF EAX != 0
00437CFD  |.  897424 10                |MOV DWORD PTR SS:[ESP+10],ESI   [ESP+10] = ESI
00437D01  |.^ 0F84 CFFEFFFF            |JE LilianFo.00437BD6     ENDO?
00437D07  |.  8B45 10                  |MOV EAX,DWORD PTR SS:[EBP+10]  EAX = [EBP+10] (0F)
00437D0A  |.  42                       |INC EDX        INC(EDX)
00437D0B  |.  83C7 44                  |ADD EDI,44       EDI = EDI + 44
00437D0E  |.  3BD0                     |CMP EDX,EAX       CMP EDX, EAX
00437D10  |.^ 7C 9E                    \JL SHORT LilianFo.00437CB0
00437D12  |>  8B4D 00                  MOV ECX,DWORD PTR SS:[EBP]

加密方式应该是分为44字节一块, 其中0~3A个字节是使用动态xor, 然后3B~3F五个字节不加密, 40~43四个字节固定使用E3,DF,59,AC来xor.
动态xor的字节值是3*i*y+3D, 其中i为0~3A时候递增的循环内变量, 而y为按照每次44递增的上层循环变量.(0~F)

山百合是某人推荐给我的游戏, 因为总是挂, 没有精力去一次次通, 遂于当晚制作了99命的hack版, 然后第二天发现有隐藏组合, 是红玫瑰里面攻击力很弱的妹妹作为姐姐到手了一个很强的小小妹妹, 为啥米妹妹这么强因为其实这个被强推的是第一关最后面的BOSS, 哦也. 组合出现条件是完整的使用红白黄三对姊妹各穿关一次.

然后, 使用隐藏角色再次穿关, 在标题画面将出现special菜单, 可以进行无穷战, 限时战, 限分战, 千人讨四种训练场景, 和选择和各大小boss的对决战.

音乐很不错听, 为了rip下来, 决定按照国际惯例解之, 于是有上文.

很困了, VMBR和VFAT的分析需要先按照目前的分析将外层解掉, 过几天有空在作.

然后过了一天, 加班到两点, 脑子剧痛睡不着叫, 打开OD在读写文件调试了很久, 无果, 发现跟头部的读取不一样, 是CreateFileMapping后MapViewOfFile, 但是看着数据没有MPG头, 觉得不对, 做了种种的合理推测, 最后耐不住寂寞, 手动按照可能性很小的直觉拷贝了一段数据下来, 居然可以播放了….
原来, 除了文件头部分后, 直接指向的数据完全没有加密, 害得我在DSound.dll里面来回跟了半天thiscall的东西, 倒是记录下来一堆dss的东西.
也就是昨天得到的解密过程, 就是完全是目录区的解密.
意识稀薄中, 好像有人说所谓小心驶得万年船其实是本来只争朝夕的路程要跑一万年么…
然后推得vfat格式. 文件名部分, 从结尾$#0后, 应该是某种规律的填充, 冒充有意义数据.

tagRecBlock = packed record
  Filename:array[0..$3B] of Char;
  Offset: DWORD;
  Size: DWORD;
end;
tagVMBR = packed record
  r1: Cardinal;
  ItemCount: Cardinal;
end;

介个就是结构.
r1可能和数据排列方式/dummy entry等有关.
遂写了解压程序一个, 从00b.p解压出音乐14首. 第一个00无后缀名, 用途未知, 因为此文件内容有相当大的再压缩率, 所以应该不是mp3数据.
关卡, boss, 角色选择/OP/ED/清关等音乐都齐了.

2,952,882 BOSS1.MP3
2,755,187 BOSS2.MP3
3,196,552 BOSS3.MP3
  957,255 CHARASEL.MP3
  159,660 CLEAR.MP3
1,536,836 ENDING.MP3
  128,859 GAMEOVER.MP3
  192,807 OPENING.MP3
3,813,588 ST01.MP3
3,950,678 ST02.MP3
3,182,887 ST03.MP3
3,374,730 ST04.MP3
3,731,250 ST05.MP3
2,993,552 ST06.MP3

今天还有一个收获, 就是脑子抽筋打发时间的时候, 发现010 Editor的Template功能比我之前想象的自由得多, 给要编辑的结构化文件数据进行结构分析并着色, 列出各结构项目都是可以做到的, 不过使用中, 发现要隐藏掉某个field或者要禁止string/char[]展开, 后者没有找到功能, 前者也只能在上面的编辑器将颜色改为很浅, 下面的输出区还是有的.
上面的编辑区的原始数据的悬浮提示也很萌, 简直就是QuickWatch的感觉.
如果输出区允许非原始数据的输出的话, 直接在模板脚本里面完成解密应该也是可以的, 不过现在来说, 它发现你修改后, 就建议用它的计算功能和脚本(不针对特定文件, 没有模板的Inspector功能)去做, 但是用属性的read/write函数还是可以修改到原始数据, 目前好像只能这样了, 没法达到不编辑原始数据而在结果输出解密后的recblock项的, 而且因为read函数是单入的, 离奇到char xx[a]会执行a次, 每次函数需要处理一个char, 上面的需要上下文相关的解密貌似做不成了.
010 Editor, 03还是04年世纪上有人介绍, 那时用起来是惨不忍睹, 今年我忽然搞了一个一用, 多了很多特性, 少了以前的一些bug, 使用它的频率也高了很多, 有空给作者报报需求和bug去.
诶当年的小alice已经成为初有外形的小萝莉2.1.3版了, 希望不要成为winhex这种纯拿来用的欧巴桑啊~~

刚才谈到的后面数据加密是我过虑, 其实随后在接其他包(se音效包)时候, 发现数据果然有加密, 真是不枉废我对作者的期待, 然后我根据前面的作者风格, 推出数据加密的方式, 既是取文件项数据头部$2173字节, 文件项大小不满$2173的取该文件大小, 然后轮流取出vfat中该项文件名的每一个字节进行xor, 按照文件名长度轮回, 不包含文件名末尾0.
而前面的VMBR里面的r1(reserved1), 为1则是不加密, 为0则是用该办法加密.

预定的1111CG落空

鼻窦炎并发支气管炎, 差点以为自己挂点.
去了几个药店, 去买头孢拉定和头孢氨卞不给卖, 沿着附近跑了很远也没有其他药店.
好在估计是因为离开了恐怖的办公室还是因为丁香叶的效果,
目前症状缓解了不少.
中午和晚上嗑了另外一种中药.

这个悲惨的光棍节, 我独自一人在嗖嗖的东南风中寻找着传说中的抗生素们, 并且于归途流下了悔恨的泪水…
曾经我信阳的抽屉里, 有很多五花八门的日用药物, 曾经我以为上海可以很方便地买到更加五花八门的头孢一族.

本来打算很久一幅意象画,
一个破旧的说书人缩在站笼里
以失落的眼神看着眼前无视他的存在而路过的小男生和小女生们.

结果现在貌似提起精神都困难.
昨日忽然发现那边不能清唱, 否则有机会我应该把我每年保留的”萝莉和御姐都不是我的”重温的.

试用鸟 Adobe Fireworks 9

首次启动注意去设置语言.
目前SC环境下的资源文件貌似都是8的,要切到English(直接在选项里面设置,会自动生成Fireworks 9 Language.txt).
切换后出现橙色的新式Splash和About了.
安装程序貌似是向导创建还没有细致检查的,出现过
一共会安装12~13个组件.
当然Splash已经Remix化了,
Styles和Shapes貌似换过了.
打开PSD文件的支持没有丝毫改变,带效果的图层照例是位图化.
因此还是他是一个姓M而不是姓A的,满心指望他取色器A化的某说书人有点失望了.
前几天就收到Adobe的通知,去了后使用IE点击下载,到99%失败;
使用Adobe Downloads Manager,下载前2次均是损坏文件,昨天夜里重下第三次终于好了.

忽然想到的: ECM, DevCo, Lazarus

得到ECM离开的消息是在数月前,看KOL 2.37发布的news时候.
当时我下意识地看了下系统时钟栏,希望那里是4月1日…
因为前一段在论坛还看到ECM在关注新的想法和回复, 对于这个消息简直是夏娜告诉悠二你已经死了一样.

All the KOL community is shocked and sore knowing about an untimely death of our most active member, ECM (Michalichenko Eugeny) this month. Rip in peace, friend, we all shell remember You in our hearts.

最后一次和ECM君交谈是在05年末了,当时KOL的addon分离出来时候, 由于Vladimir Kladov 放出的补丁是和基本发布版不同版本上合并的, 导致编译通不过, ECM迅速的提供了workaround, 当然是俄文. 照着弄了数次而失败的某, 就无耻找到其ICQ号码去问. 可惜当时直接登的ICQanywhere, 也没能留下留念的记录.
就在2.37的发布新闻有很多ECM做的代码维护和增强, 如今名字已经框起来了. 不禁想有朝一日我过劳后, 名字会不会带上框, 出现在hanzify或者星迷圈的论坛呢….

然后就是错过的DevCo的消息, 有人欢喜有人悲, 李维最后没有被borland fire, 据说borland某元老级人物给了建议后, borland下决定放弃出售, 将IDE部门分拆为DevCo, 继而是Turbo系列的回归.
当初的Borland已经不在了, 或者说当初的borland灯塔形象从一开始就不存在, 至少从andres跑路那一刻起.
至少我们可以看出Borland出去的很多牛人, 对其保有的一种敬意, 也被关于.net和java的鼓噪所淹没了.
Turbo所目指的带给编程爱好者往日回忆再现的目标, 估计在国内是属于小圈子了, 大环境下的代码工人, 多半是不需要什么单纯的而纯粹的乐趣的.
随着MS自废Win32, 如果有朝一日bista2009突然宣称Fx4.0将作为用户层能够接触到的最基础框架, 估计会是有老外痛哭流涕, 我们的代码工人依然麻木的欢欣雀舞罢…

昨夜抓了Lazazus的0.9.18下来, 写了一个HelloLinux, 点击提示”moemoeonanoko”, 然后显示一个onanoko的图片.
只能编译为GTK1的程序, 然后去重新编译IDE, 官方说这功能0.9.18有问题, 以后的CVS可能修正, 然后就又拿了一个daily snapshot,
make了一下, 无事通过了, 不过当前貌似没有修正, 倒是发现IDE左侧加了code folder功能.
也是有这样异类的, 很早前用过这个可以自己编译自己的IDE, 这么多年他还是一点一点的, 不问世间白云苍狗, 默默地发展着.

附加一个编辑的言论:
不过接触的Java开发者多了,才发现,如Scott一般激情着不乏其人。如Hibernate的主创者在被Sun招安之后,每天都在Blog上大骂这人不好,那人不良之类的东西,惹的其他人直冒火。不知道哪位先者说过,语言是可以影响一个人的性格的,说她“特别讨厌搞Java的人,每个人都牛气轰轰的,好像自己有多厉害似的,其实什么都不是,但很喜欢搞Delphi的人,因为他们都是那么实在而儒雅,而Windows技术的人最好接触,因为他们多如农民一般实在”。对这句话,我深有同感。但可不是说Java界里面没有能人,我认识的朋友里面就很多技术不错的Java高手,也许他们是例外~~~

当然作为一个打混战的, 经常如果遇到以前在某语言做过的封装和函数现在另一个语言下面没有, 通常都是懒得去找大而全的库, 而是飞快地再移植一编, 在其中也会感觉到心情的微妙变化, 越是表层化的, 每个人都很难有资料去研究具体实现, 建立在我不知道的你也不知道的一种莫名其妙的自信中, 飞快地写着华丽地代码, 沉醉于我是李清照fans所以其他歌手都是狗屎的自我洗脑中.
结合到最近所表现的不理性, 我觉得很有必要保持我贫下中农说书人本色的时候提前来到鸟, 或许我会考虑给程序加上足量的注释, 当然还要去采购一套蓝马褂+竹板的cosply套装, 用心去做一个土土的, 让高手一看发出这丫代码写的太清晰, 一看就是没经验的评论的那种说书人

劲舞团不能在开启DEP的XP SP2和2003 SP1运行的workaround

表现为选择服务器后,进入全屏状态数秒后直接退出,(如果JIT不是静默的华生的话,会报 ntdll!KiFastSystemCallRet 错误)
主程序做过加壳,也做过变形,郁闷的是居然伪装为安博士的段名.
peid检查是upx,用upxripper脱壳失败,
OD载入后,按照UPX壳处理,断在5EF2B1,Dump下来可以运行,证明是UPX的壳没错.

估计是因为code段没有020(execute)属性引发DEP强烈抗议,推测添加后将不必去禁用DEP

可以在 系统属性->高级->性能->设置->数据执行保护 中将DEP设置为 “只为关键的Windows程序和服务启用数据执行保护”
(如果有硬件DEP的话,请在BIOS中禁止non execute protection)
对于喜欢Q&D方式的人,请移步来到c:\boot.ini,将你当前系统的启动项的/noexecute修改为OptIn(同上效果)或者AlwaysOff(完全禁用)
对于网吧或者家庭用户,如果感到上面的操作很郁闷,
请卸载SP2/SP1,或者格式化机器,华丽地安装2000/98.
做小工具去修改….
对之前的我或许早就提供下载了,不过目前我还是抓紧时间补觉的好….

这个故事告诉我们,玩壳不慎必自焚.

资料参考:
http://support.microsoft.com/default.aspx/kb/875352
http://www.microsoft.com/technet/prodtechnol/winxppro/zh-chs/maintain/sp2mempr.mspx

瓦尔特和萨拉热窝和刘备模式

发现自己堕落了,曾经发誓瓦尔特不再拯救小白来着.
今天习惯性的抓到一个bug,在进行自动频道搜索时候无法切换TV/AV状态.
对应的workaround是按Menu键,此时不会弹出OSD Menu而是取消搜索返回等待状态,则可以进行切换.
在取消OSD后,后面杀出一员大将摁下TV/AV并月: 切换TV/AV应该按这个键….

哦也一瞬间极其失落,仿佛钻到车下挂链条,刚挂好别人一踩油门告诉你开车应该踩油门一样.
我警告自己要保持誓言,口中却开始解释起来,继而更号称要赌钱以证明自己清白….

看来偶心中那次被小白鄙视症还是没有断根, 一度以为瓦尔特已经变身为为人低调的怪叔叔来着.
甚至坐在车上也总想着怎么可以既捍卫萨拉热窝又不放弃原则, 却忘了多次被众人证伪的命题:
要么一五一十从头到尾讲原理, 小白听了只会觉得没意思, 要么打个生动比方, 例如持续性动作或者按钮灰化,
但这和事实(其实是bug)又原则性不符.

也发现自己思考程序的模式开始堕落, 以前面对这种问题,
我摁一次马上就该预料到应该使用”设计者注目”原则寻找workaround,但是这次我居然打算去找Cancel键,
思维已经从原子态彻底蜕化为逻辑态了, 在会有这种bug的I2C微操码中,
(也不排除因加入为现场保护代码会超出ROM容量的原因而制作的know issue)
根本木得什么事件驱动模型, 纯是每个功能自行扫描键盘, 如果当前没有考虑对应的处理, 那么就不会有对应的处理.
但是设计者注目的按键, 则一定会不惜代码判读之.

谨以捕萝哥志之,再次提醒自己采用刘备模式,给小白糖吃,叫他以后继续发扬光大,哦也.