全脑瘫IT时代(六)

这个系列我很久没更新了,因为脑瘫的软件和硬件确实不那么常见。不过,今天我又遇到了一个完美的素材。

Altova UModel

Altova UModel 应该是除了ROSE之外少数硕果仅存的UML工具之一,功能也确实没的说,很好,很强大。但是这软件的代码逆向功能却有一个真正全脑瘫的设计:

image

当我们选择从代码逆向生成顺序图的时候,遇到空的方法就会有这个提示。也许各位看官觉得,嚯,这算神马问题啊,多user friendly的提示啊。

当你正在逆向一个15w行代码的工程的时候,需要6个小时,可能会有600多次这样的警告的时候,一切就不那么好玩了。因为这个窗口是模态的,不点掉分析就会停止。于是,我们不得不傻逼兮兮的看着屏幕,盯着Altova UModel,如果没有及时点掉这个警告,那计算机可就怠工了。我试图找到关闭这种提示的选项,但是我没有成功。

另外每生成一张顺序图,Altova UModel都会即时刷新绘图区……嗯……这个有多么脑瘫不多说了,各位看官想象一下6000张顺序图打开6000个窗口的壮观景象吧。

一个号称工业级的UML工具,是不是只能用来分析不超过1w行代码的工程呢?

为什么没有“128位”的通用处理器

在专用领域,比如DSP,GPU中,通用寄存器通常都很宽,也就是说大于通常的32位或者64位。其原因在于,这些针对特定领域设计的处理器,其硬件架构是为问题服务的,举例来说,GPU处理颜色的时候,一个像素ARGB是四个32位或者16位的浮点数,所以寄存器有128位或者64位宽也就不足为奇了。

那么我们为什么没有见到,或者说市场上为什么没有“128位”的通用处理器呢?这有很多计算机体系结构的原因在里面,容我一一说来:

首先,我们得定义这个“128位”是什么。以传统的POWER、x86和x64来说,处理器的位数是用通用寄存器的宽度来定义的,即32位处理器的通用寄存器是32位,64位处理器的寄存器是64位,那么如果我们有了128位处理器,也应该一样。但是,这么做有必要么?常规的整数运算是用不到这么大的寄存器的,真正的大数运算也不会用这种方法来实现。而在现代的32位、64位处理器中,更重要的浮点运算所使用的浮点寄存器早已经是128位甚至256位了。所以128位通用寄存器在这里没什么意义。

那么就有人说,我们需要128位的寻址能力。好吧,64位的寻址能力是2^64字节,大约是1.84467441 × 1019 字节,如果你对这个科学计数法表示的数字没什么感觉,我用另外一种写法:18.45 EB 也就是大约18200000 TB,如果说这个不够用,那你需要的不是人类目前的硅芯片计算机,你需要求助于E.T.。

使用大地址空间有几个额外的问题,尤其是对RISC处理器来说,会带来致命的性能问题。很多用户,尤其是初级的计算机用户,并不知道RISC这四个字母下隐藏的计算机哲学,或者说艺术:所有的OP code都是定长。以POWER为例,访问32位的常量地址,需要分两次计算16位的地址,因为OP code中只有16bits来存放这样的数据,64位则需要四个OP存放。而在CISC处理器中,地址可以直接编码在指令里,导致指令明显变长,比如32位的跳转通常是5个字节,而64位下面甚至需要15个字节。这只是问题的开始:随着使用的OP的增多,对CPU总线和cache的压力也越来越大,原本一个时钟周期能fetch两条指令,现在可能一条都取不到;原本可以存放两条、四条指令的cache空间,现在只能存放一条指令。

另一个原因是程序中的数据结构。学过计算机科学初级内容的人都知道,现代数据结构中最最最最最基本的要素是:指针。大多数关键的数据结构都离不开指针:链表、树……,对于程序来说,从32位编译成64位会大幅增加运行时的内存消耗,道理很简单,指针本身变长了,存储指针自身需要的空间增加了。变成128位是什么样呢?可想而知。同样访问内存中的数据需要更多的时间,因为数据本身变大了,假设一个结构体里面有两个指针,32位下编译出来需要8个字节,64位就需要16个字节(假设4字节对齐)。同理,cache面临更大的压力。

上面是软件上的,或者说是理论上的,那么我们来看看硬件上的问题。既设我们需要制造“128位”的通用处理器,有128位的地址总线,128位甚至256位的数据总线,那么什么样的封装能满足要求呢?在现代处理器3~~4G的这个工作频率上,安排这么大量的总线连接,那么保守估计需要1500~~2500个针脚的封装才能稳定工作(需要大量的供电和接地针脚来瓶很电流和改善信号质量),而且这么高密度的,还有大电流,估计要12~~24层布线,设计生产这样的一块PCB本身就是挑战电子制造业,至于良品率和价格就不敢想了。

既然我们有了便宜的4核、8核处理器,为什么要设计生产完全不可行,没有任何工业和商业价值的“128位”处理器呢?所以,市场上没有“128位”通用处理器。

Delete Hibernation File

I’m using Windows7 and my computer has 8G RAM, because it is a desktop PC, I don’t need hibernation.

The hibernation file is about 6G, surely, this a huge waste of disk resource. How to remove this file and trun off hibernation?

it’s simple: rum cmd.exe, execute:

@powercfg -h off

Well, everything is OK.

全脑瘫IT时代(五)

Windows 7 有一个臭名卓著的bug。什么?你不知道?只要搜“windows7 explorer double click scroll”,排在结果第一的就是。

OK, let’s show it.

运行资源管理器,展开一些文件夹,让左边的树列表滚动条充满,找一个子文件夹比较多的文件夹,就比如c:\windows,双击windows,很大概率滚动条跑到上面去了,你双击的文件夹被放在了屏幕最下面。

我们双击一个文件夹展开它基本上是因为我们想看到它的子文件夹,如今却被滚动到看不到的位置,每次双击都要手工去调整滚动条的位置。

这是一个几乎每天都会遇到,甚至可以说是如影随形的bug,但是却一直没有被修正(注意只有windows7才有这个问题)。

Update,现在有一个解决办法,使用开源的 Classic Shell:

CodeProject

SourceForge

问题的原因:

Explorer 向 TreeView 发送了两次 TVM_ENSUREVISIBLE,第一次发送给顶层Item,第二次发送给选中的Item。发送给顶层是没有什么意义的,这导致了bug,但是不知道微软这样做的意义。

解决的办法可以参考 Classic Shell 的源代码,ExplorerBHO.cpp line 39:

    if (uMsg==TVM_ENSUREVISIBLE && (dwRefData&1))
    {
        // HACK! there is a bug in Win7 Explorer and when the selected folder is expanded for the first time it sends TVM_ENSUREVISIBLE for
        // the root tree item. This causes the navigation pane to scroll up. To work around the bug we ignore TVM_ENSUREVISIBLE if it tries
        // to show the root item and it is not selected
        HTREEITEM hItem=(HTREEITEM)lParam;
        if (!TreeView_GetParent(hWnd,hItem) && !(TreeView_GetItemState(hWnd,hItem,TVIS_SELECTED)&TVIS_SELECTED))
            return 0;
    }

Windows Live Messenger

Windows Live Messenger 可以算是现在微软所有软件产品中最傻逼但是还不得不用的楷模。

从微软的开发团队来说,我还没见过或者听说过技术糟糕的,那么Windows Live Messenger这样一个产品到底是怎么回事呢?

我不善于从微软获取一些八卦,咱们今天在这里暂时从这个糟糕透顶的软件的表现来分析一下:

  • 错误代码:很多人肯定见过Windows Live Messenger不能登录或者其他一些时候的错误代码,0x????????。OK,作为一个错误报告机制,你把这玩意直接丢给用户是什么意思?而且这些白痴一样的代码既不是Win32 error code,也不是COM,是完全自定义的,从常用的工具中,比如GetLastError,或者ErrorLookUp中根本就找不到,即便上网查找也经常遇到含糊不清的各种猜测(显然,你我都不知道,老外当然也不知道)。
  • 群:Windows Live Messenger的群功能我就不说了,这个实在是没法说了,简直就是一滩屎。
  • 功能衰退:我很好奇,作为微软的产品竟然有功能衰退。比如以前版本点在联系人的头像上可以看他space的更新,但是现在没有了。
  • 不兼容:Windows 7 发布这眼瞅着一年了,Windows Live Messenger不能缩到系统托盘到底你妈逼还改不改啊???

OK,OK,不继续列举了,从Windows Live Messenger已知的技术文献来看,架构和协议设计的都还好,那到底是怎么出来现在这样一个傻逼的产品?我的推测是:

  1. 扯皮。从各种现有的八卦来看,微软这样的软件恐龙企业在很多年前已经在研发环节有了大规模的扯皮现象(vista开始菜单),Windows Live Messenger有很多功能是和比如space集成的,那必然有扯皮。
  2. 产品定义混乱。简单的说就是产品经理也不知道要做什么,或者说不知道竞争对手在做什么,亦或是他根本就没用过Windows Live Messenger。

Foxit vs Adobe Reader

foxit体积小,启动快,确实比较方便。

adobe reader体积大,垃圾多,但是不存在兼容性问题。

刚才用foxit看pdf,突然觉得别扭,于是用两个阅读器简单比较一下,截了张图:

pdf

同样设置是100%比例显示,foxit要小一些,而且文字渲染质量很糟糕。

该来的终于来了

PS3的OtherOS惨遭升级阉割,消费者今日终于将SONY告上法院……

出来混的迟早要还的。

原文:Sony Sued For Removal Of Linux Support From PS3

相关文档

其实无所谓,反正我只用Linux

全脑瘫IT时代(四)

公司里中有些中病毒的机器,必须得用防火墙。于是装了ZoneAlarm……

又因为计算任务,连续开了几天机器然后C盘就一点可用空间都没了,我操!

tv

原来是这个Truevector Internet Monitor,不知道这玩意是哪个脑残设计的,总有人抱怨Windows臃肿占用大量硬盘空间,我看又是微软背黑锅了(这个tvdebug是放在windows目录下面的)。

微软近期产品使用感受

Windows 7:非常棒的产品,除了explorer里面展开子目录会自动滚到到最下面这个bug以外,堪称完美。

Office 2010:和Office 2007相比,可谓是百尺竿头更进一步。

Visual Studio 2010:WPF重新定义了VS的UI,从语言到代码编辑器每一个改动都非常有用,比如按住Ctrl可以缩放代码编辑器,比如头文件目录现在是per-project,比如start页面加了一个“打开工程后关闭”的选项。

全脑瘫IT时代(四)

嚯, 这是老子用了十几年计算机碰到的最牛鼻的条款

corel

如果你回国登机前买了瓶可乐下飞机被可口可乐告知需要交5000人民币才能合法的喝下去,

如果你是个老外带笔记本来中国出差三天下飞机被笔记本厂商告知交5000人民币电脑才是你的,

如果你出国旅游买了个LV的包回来被告知交5000才是真货……

嘿,这世界肯定草泥马了。