• 2010-05-13

    请提供Fuck-All选项

    Views: 20579 | 5 Comments

    由于时间宝贵, 我们不可能弄清每一项东西. 所以, 当我们拿到一个新事物时, 我们会把它定义为某一个已经熟悉的事物的替代品, 用旧的方法来操作新的事物. 如果新事物的操作方法和旧事物相似(接口相同), 或者只经过非常符合大众逻辑的演绎(方法添加了默认参数), 那么, 我们就称这个新事物的学习成本很低.

    我开始使用 SVN, 要进行一次版本合并操作. 在操作之前我知道, 肯定会有大量的冲突, 比如至少有 20 个文件有冲突, 而且这些冲突不是由我一个人产生. 所以, 我希望把所有的冲突都列出来, 然后再由各个人手工解决冲突. 所以, 我执行:

    svn merge https://xxx...
    

    Continue reading »

    Posted by ideawu at 2010-05-13 13:27:55 Tags: ,
  • 2007-12-18

    Google Talk 界面开发分析

    Views: 14912 | No Comments

    有分析文章表明, Google Talk 的界面很大部分使用了 MSHTML 控件. 所以, 它的开发方式如前面的文章(GUI 的架构设计)提到的: 结构描述语言 + 样式描述语言 + 结构操作语言 + 虚拟机(包含渲染器, 命令解释器).

    如果你做过 Web 界面开发, 你应该能看出 Google Talk 在哪方面使用了 MSHTML 控件. 例如在设置窗口里的界面选项:

    google talk

    在 C:\Documents and Settings\XXXXX\Local Settings\Application Data\Google\Google Talk\themes\system\chat 目录下你可以找到每一个界面对应的 HTML 模板和 CSS 样式表(main.css). 修改某个主题的 main.css 文件, 然后在设置窗口里选择该主题, 你就能看到界面的样式已经改变.

    Status.html 文件的内容是:

    <div class='system1st' style='color:%color%'>%message%</div>
    <div id="insert"></div>
    

    %message% 是一种简单的变量替换. main.css 里标签的名称仍然使用大写字母, 也许在 Web 版的 Google Talk 开发时, Google 的开发人员还没注意到 Web 标准.

    Posted by ideawu at 2007-12-18 09:29:28 Tags:
  • 2007-11-25

    GUI 的架构设计

    Views: 14191 | No Comments

    当前的 GPU 仍然拘泥于像素的计算, 它们应该建立更高的逻辑, 正如在某些领域, 硬件单元在整合原来的软件功能. 当前应用程序的 GUI 的特点是文本和图片堆砌.

    1. 建议的 GUI 架构

    应用程序的 GUI 应该和应用的计算是完全分离的. 当前的 GUI 在架构上和应用的计算在二进制代码层面是不区分的, 而且在编程语言层面也没有区分, 两者是高度耦合的.

    在编程语言层面, GUI 和应用的计算不应该通过变量引用耦合在一起, 而是应该通过单一的通信通道进行通信.

    在二进制代码层面, GUI 和应用的计算应该分离, 例如在计算机的体系结构上引入 GUI 处理器, 将 GUI 的渲染, 编程等交由 GUI 处理器处理. GUI 处理器在硬件级别上和 CPU 进行通信, 当然, 这种通信应该建立在某种较高的层面上.

    2. GUI 的特点

    在很多 GUI 应用中, 界面是稳定的, 结构化的, 组合性的.

    例如在一个文本编辑软件中, 虽然文本编辑区域不断增删文本, 但是, 菜单栏, 工具栏, 状态栏等的结构几乎不改变. 这种稳定性决定了可以使用描述性的文本来描述界面.

    继续上面的例子. 工具栏的按钮可能动态地(在运行时)增加或者减少几个, 但是, 这种变化是结构化的, 可以使用 DOM 方式进行操作.

    因为界面是结构化的, 所以可组合性比较高.

    3. GUI 的开发

    GUI 开发 = 结构描述语言 + 样式描述语言 + 结构操作语言 + 虚拟机(包含渲染器, 命令解释器). 一个例子是 HTML + CSS + JavaScript + Web Browser.

    3.1 使用声明式语言来描述界面的结构和外观

    当前的 GUI 开发往往使用 C, C++, Java 等命令式语言来描述界面的结构和外观, 但是, 声明式语言更适合这项工作.

    假设使用 XML 来描述界面的结构, 那么 XML 文本文档的结构很直观的反映了界面的结构. HTML/XHTML, GTK Glade, ASP.NET, Mozilla XUL, WPF 等使用 XML(或类 XML) 来描述界面.

    CSS 之类的样式语言可以用来描述界面的外观.

    外观和结构分离.

    3.2 使用命令式语言来改变界面的结构和外观

    命令式语言被用来改变界面的结构和外观, 可以使用 DOM 方式. 同时, 命令式语言用来同外界通信. 当然, 虚拟机可以内置部分的通信功能.

    3.3 要求

    上面提到的语言应该是解释型的.

    TODO: 某些概念有些模糊

    Posted by ideawu at 2007-11-25 10:58:48 Tags:
  • 2007-07-07

    获取焦点便选中所有文本的文本框是用户友好的吗?

    Views: 15117 | 6 Comments

    Web表单和桌面程序中经常要用到文本输入框, 比如登录框中的用户名和密码输入. 在Web表单中, 文本框获取焦点后(鼠标点击或者Tab键切换), 其中的文本并不会被选中. 但是有一些人会画蛇添足, 在文本框获取焦点后将其中的文本全选中, 如 PHPMyAdmin. 听到画蛇添足这个贬义词, 你就知道我是反对这种作法, 下面我要分析该作法的错误之处.

    例如, 当我在某个网站的登录框中输入 ideawu2, 然后点击登录. 事实上, 我的用户名是 ideawu, 只是一时笔误. 那么当我要修改时, 我当然是直接选中2后点击键盘上的Backspace键., 或者将光标定位到该文本框最后(这种操作方式比选中单个字符更容易), 然后点击键盘上的Backspace键. 如果你自作聪明地把所有的文本选中, 那么你是想让我把所有的文本删除再重新输入一遍吗? 即使是只更改一个字符?

    从理论上讲, 该作法的错误根源是: 事物的状态不是凭空产生的, 而是从一个状态到另一个状态, 而且后一个状态一般是以前一个状态为基础的改变.

    我有理由相信这种愚蠢的作法源于Windows操作系统的文本框的默认行为, 这种文本框最重要地应用是资源浏览器和IE的地址栏. 在Linux操作系统下的Gnome中的文本框就不会有这种行为. 所以, 当我在Windows下使用浏览器浏览网页, 想在地址栏中输入一个新的网址时, 比如, 当前我正在浏览 http://www.ideawu.net/, 因为某种原因, 页面上并没有提供到 http://www.ideawu.net/ideablog/ 的链接, 最简便的作法是把光标定位在网址的末尾, 然后输入 ideablog 回车. 但是, 在Windows下我根本无法这样做! 无论我点住鼠标同时把鼠标上, 下,  左(至少会选中一个字符), 右移动, 都无法把光标定位在网址的末尾, 这让我很苦恼.

    奇怪的是, Windows的IE使用这种文本框的默认行为, 而Firefox的Windows版本的地址栏为什么也使用这种默认行为?

    我常想, 微软是不是应该改变Windows文本框的这个愚蠢的默认行为? Web开发者能不能放弃这个愚蠢的作法?

    Posted by ideawu at 2007-07-07 11:55:36 Tags:
|<<<1>>>| 1/1 Pages, 4 Results.