九天雁翎的博客
如果你想在软件业获得成功,就使用你知道的最强大的语言,用它解决你知道的最难的问题,并且等待竞争对手的经理做出自甘平庸的选择。 -- Paul Graham

新浪惊现通用云计算平台 Sina App Engine横空出世 支持PHP

write by 九天雁翎(JTianLing) -- www.jtianling.com

讨论新闻组及文件

当做电子商务的亚马逊在全球率先推出通用云计算平台时,让大家震惊了很久,随后Google也推出了App Engine,原来仅仅支持Python,现在已经支持了JAVA。2009年9月,阿里巴巴集团在十周年庆典上宣布成立子公司“阿里云”,叫嚣要提供比亚马逊更多服务的时候,我才开始看到国内游企业开始进军云计算平台的领域,但是,事实上,此事上新浪已经先行一步了,今天很惊讶的发现Sina App Engine已经开始内测了。。。。。

http://sae.sina.com.cn/,虽然sina还没有大肆的宣传,但是,从其命名上sae(Sina App Engine),加上其简单的定位“Sina App Engine - 简单高效的分布式Web应用开发与运行平台”,很明显能看出这是与Google App Engine类似的通用云计算平台,有意思的是,Sina不知道是有意的避免与Google进行直接的竞争,还是考虑到国内的网络开发国情,提供的是PHP+MySQL的服务:)

其服务列表上说明的是:

支持的服务:

  • PHP 5.3.0
  • Mysql 5.0.86
  • Memcache
  • Fetch URL

相当的类似本地开发,呵呵,广大的PHP开发者有福了。。。。。。想当年我为了尝试Google的App Engine还特意去学习了Python。。。狂汗-_-!当然,我还是没有福,因为我不实用PHP。

假如没有意外的话,Sina将是国内第一家推出通用云计算平台的企业,Sina作为国内三大门户,很不幸的没有像163,Sohu一样在新兴的网络游戏市场上分到大馅饼,(现在163,Sohu从营收来看更像是一家网络游戏公司,特别是163,Sohu的网络游戏分拆上市还好点)但是Sina估计痛定思痛,反而能沉下心来研究一些传统互联网公司应该研究的东西,这一次,Sina的赌注绝对没有下错地方,当然,首先还得SAE的确好用才行,我看了演示,应该还好,并且就我了解,国内的网页开发PHP也的确是主流,预祝SAE成功:)

另外,由于目前还在内测阶段,好像需要邀请码,并且现在已经不让注册了,导致我没有办法实际的去尝试一下了。。。虽然其实我不懂PHP。但是这里有个演示视频,大家可以先体验一下。再不过瘾,看看文档先?

以下是Sina在文档中对SAE的简介:

SAE简介

Sina App Engine(SAE),是由新浪公司开发和运营的开放云计算平台的核心组成部分。

SAE的目标是实现互联网应用在开发运维上的无缝整合,为App开发者提供稳定、快捷、透明、可控的服务化的平台,并且减少开发者的开发和维护成本。

同时通过对消耗资源的量化,反向作用于开发过程,促进新浪公司互联网应用服务的质量提升。

SAE具有以下特点:

  • 自动负载均衡 - - - - 根据应用压力自动调整服务规模,自动负载均衡

  • 自动分布式代码部署 - - - - 原子的将开发者代码部署到所有web前端

  • 自动健康检查 - - - - 所有设备自动健康检查

  • 故障系统自恢复 - - - - 发现故障服务自动内部无缝切换,故障报警和有限度自行恢复

  • 多平台简单SDK操作 - - - - 主流OS平台SDK支持,任何一台PC即可享受SDK

  • 快速分布式web应用开发 - - - - 提供多种分布式服务,接口友好封装,减少开发者学习使用成本

  • 团队开发协作 - - - - 开发者可以进行项目团队管理,代码管理、在线沟通方便有效

  • 资源自动分配 - - - - 符合云计算理念,所有资源在配额内,自动分配

  • 所付即所用 - - - - 符合云计算理念,最大粒度量化开发者成本,所付即所用,所付仅所用

  • 服务高可靠SLA保证 - - - - 全架构高冗余实现高可靠性

SAE为开发者提供以下服务:

  • PHP5 Runtime运行环境 - - - - 基于PHP 5.3.0内核

  • 支持读写分离的分布式数据库服务 - - - - 基于Mysql数据库

  • 分布式文件存储服务 - - - - 基于分布式文件系统

  • 基于Memcache协议的分布式缓存服务 - - - - 基于集群memcache系统

  • URLFetch远程数据抓取服务 - - - - 基于分布式proxy服务

  • Cronjob定时任务 - - - - 基于分布式定时器服务

  • SPP图片处理服务 - - - - 基于分布式高CPU计算服务

 

值得期待啊。。。。。。。。。。。

 

原创文章作者保留版权 转载请注明原作者 并给出链接

write by 九天雁翎(JTianLing) -- www.jtianling.com

阅读全文....

可怜的Sun公司,因为收购了MySQL,想卖自己都卖不了了

write by 九天雁翎(JTianLing) -- www.jtianling.com

讨论新闻组及文件

今天看到CSDN上的一则新闻《欧盟正式否决甲骨文收购Sun 甲骨文据理力争》后真是感叹啊。。。。

Sun也算是盛极一时的大公司了,因为JAVA语言而闻名于世,后来股票代码都改成JAVA了,虽然JAVA实际上没有为其带来太多的利润,但是Sun也算是能够自己提供硬件+软件全套的企业级解决方案的少数公司之一了,当年收购MySQL的时候还是风风火火啊,完善了自己产品链中最后的弱环,成就了开源世界最大的一笔收购案,Sun也从此有了从SPARC处理器 ,存储设备等硬件,到JAVA语言,Solaris操作系统,MySQL数据库等软件的完备产品链,一时间似乎成为了除IBM以外,服务器,工作站,企业级解决方案中最牛的公司,可惜啊可惜。。。。。

当年经济情况好的时候,大企业很Happy的烧钱,滋润了Sun这样的公司,但是,经济危机一到,大家收缩了银根,Sun就不好过了,开源的JAVA和MySQL都不可能拯救Sun。

最最可怜的是,今天Sun想把自己卖给Oracle,但是却因为MySQL的原因,导致在欧盟这里通不过,真是让人感叹啊。。。。。。

基本上,这也可以看做是IT历史上另一起因为盈利模式太单一导致的脆弱吧,哪怕是Sun这样的公司,犯了此错,也逃不了可悲的命运。

当年,谁又能想到,那是Sun对MySQL的收购案会导致现在这样的后果呢?只谈历史的戏剧性啊。

 

 

原创文章作者保留版权 转载请注明原作者 并给出链接

write by 九天雁翎(JTianLing) -- www.jtianling.com

阅读全文....

从C++到JAVA(1) 在CSDN博客中部署及运行JAVA Applet

write by 九天雁翎(JTianLing) -- www.jtianling.com

讨论新闻组及文件

 

前言

曾经,我有一个梦想,那就是我的程序能让人不需要下载就能通过浏览器运行,可惜学习的C,C++等都不具备此能力,学习完Python后,发现其也仅仅是以服务器端的开发为主,JS这种语言是慕名已久,买了著名的犀牛书,但是却一直未得时间细看,但是,JAVA会给我这个机会的。事实上,JAVA在最开始的时候就是因为JAVA Applet而流行起来。(参考二前言所言)因为以上原因,我学习JAVA也决定从JAVA Applet开始。

因为以后的工作会使用到JAVA,我不得不开始真正耐心的学习JAVA了,以前因为对Android的兴趣,浏览了《Thinking In JAVA》一书,但是一直没有真正的掌握和使用,工作压过来了,我算是彻底对JAVA缴枪投降了(事实上,作为C++程序员,很长时间我对JAVA有抵触情绪-_-!),这里,我以一个C++程序员的身份,提供一份从我C++到JAVA的学习记录,尽量将其做成从C++到JAVA的指南。首先说明一点的是,本人从来没有打算放弃C++,也不推荐任何人如此,从C++到JAVA仅仅指的是学习的流程而已,《JAVA Programming Language》与《Thinking In JAVA》两本书都非常不错,但是由于其目的的大而全,所以事实上对于C++程序员来说(比如我),篇幅过于巨大,熟悉了C++和OO的话也会碰到太多重复的内容,本人尽量将不同抽出来,忽略重复,提高学习效率。。。。要看完那两部大部头,实在得花太过不必要的时间。切记,本人假设读者非常熟悉C++及OO相关概念,重复内容一律不提,编程的基本知识更加是一律不提。

 

JAVA编程环境

毫无疑问,推荐先到http://www.java.com上去下载一个最新的JRE安装,而后,我出于方便,使用Eclipse作为IDE编辑和编译JAVA程序,运行嘛,由于我准备将左右的程序都做成JAVA Applet,所以,事实上,所有的程序都可以再浏览器中运行。JDK的话,可以使用Eclipse带的,也可以到JAVA的网页上去下载,这个随便,我是下载了一个。

 

JAVA Applet程序入门

为了使概念的演示更为直观,也减少大家对源代码运行的负担,首先学习的是JAVA Applet的编写,这样,以后的例子全部通过浏览器就能运行,大家可以在博客中直接查看运行效果,呵呵,这样也算利用JAVA的一点优势。。。。。将来我要是准备学习HTML,JS的时候都可以使用此方式,但是学习C++的时候。。。。。呵呵,就没有办法了。呵呵,在此离开老是依赖截图的日子吧。。。。。。。

首先看一个最简单的JAVA Applet程序:

import java.applet.Applet;
import java.awt.*;

public class AppletHelloWorld extends Applet
{
public void paint(Graphics g)
{
g.drawString("Hello Wolrd",10,50);
}
}
 
JAVA程序有个让C++程序员别扭的特点,完全以对象为基础,没有任何全局函数,在普通的JAVA程序中即使是使用Main函数都是弄成一个类的静态成员变量,扭曲的无以复加。。。。(个人观点)当然,习惯的人也许觉得没有什么,个人感觉有点太强制了。。。。也许用惯了C/C++的人都太习惯自由吧。。。。呵呵,也不仅仅是这样说,Python不也是一切皆对象吗?还是可以方便的定义全局函数和变量,不仅仅是C/C++程序员才拿自由说事儿。
 
当然,这种强制性的思想是想将大家都往面向对象的正路上拽(James Gosling认为这是正路吧),与C++这种兼容C存在的半吊子面向对象编程语言决裂,以防落入C++开发者常常使用的C思维,可惜的是,事实上需要全局函数和变量的时候大家还是变着法子的用,单件,资源类则如是。。。。
 
说多了题外话,看这个例子吧,因为目前主要是将JAVA Applet程序的编写和部署,为以后的演示提供方便,暂时不准备详细讲解JAVA,所以关于语法的东西一切从简了,但是基本上希望大家能理解此例子。
 
import类似于C++中的include,但是不仅仅是那样,因为import不是文件,而是包,应该来说,更像是Python中的import,当然,编程时这样做会更加的便捷一些,特别是当这些语言不再拘泥于C++形式的声明实现分离时。java.applet.Applet的引入是此JAVA applet例子必须的,因为后面的主要类就是继承自Applet。java.awt是java的界面库,以*的形式表示引入此分类下所有类。
 
唯一的类AppletHelloWorld继承自Applet,继承时以extends关键字表示继承。所有的applet程序都必须含有一个直接或者间接继承自Applet类的类。public class中的class不用我多解释了吧,呵呵,public用于修饰类,表示此为公用类,可被此文件外的类所引用,不然,仅仅能被此文件中的类使用,JAVA的这种以文件分割类的方式(还以目录分割包)本人比较欣赏,虽然又多了份限制,但是能强制性的更好的管理大型项目的目录结构。后一个public用于修饰paint函数,此处与C++中的作用类似。paint函数是Applet类从java.awt.Container继承过来的,用于绘制图形(类似于MFC中的OnDraw和Qt中的paintEvent)。
 
paint函数的参数是个Graphics类的对象,java.awt.Graphics属于Java中显示的基本类,地位基本相当于Qt中的QPainater。此处用Graphic的drawString方法显示了"Hello World”字符串。
 
以上基本上就是这个简单的JAVA Applet程序的解释了。

 

JAVA Applet程序部署及运行

关于JAVA Applet的部署其实JAVA的官方主页上有一大节讲这个的,关于用Applet Tag部署的内容见《Deploying With the Applet Tag》。

首先,假如使用命令行操作的话,将上述代码保存成一个名为AppletHelloWorld.java的文件,并用javac编译,生成AppletHelloWorld.class文件。假如使用Eclipse的话就简单了,生成一个工程,文件名不要错了,然后build projects就好了(或者是自动编译的),然后(默认情况下)可以在工程的bin目录下找到AppletHelloWorld.class。

生成的class文件就是我们需要运行的文件,部署JAVA Applet时,需要建立一个如下简单内容的HTML文件:

<html>
<head><title>我的第一个JavaApplet程序</title></head>
</body>
<p>
<applet code=AppletHelloWorld.class
width=300
height=200>
</applet>
</body>
</html>

 
保存为html文件,并放在与class文件同一目录下,用浏览器打开此html文件即可看到运行效果,显示hello World字样,此文字并不是写死在HTML中的,而是由JAVA Applet动态运行生成并显示的。。。。。虽然在此例中还看不出区别-_-!但是,现在仅仅是个Hello World程序嘛,不用急。在官网上讲的所有applet tag部署内容都是假设jar或者class是在当前目录下的,这在自己做网站的时候或者本地实验没有什么,可以自己确定各个文件的位置,可是在CSDN博客上这一套就行不通了,还好我找到了HTML的applet tag的specification,其中有个官网没有讲到的确定文件位置的codebase tag。

此时,我将上述class文件上传到我在google code上托管的地方,(事实上,大家愿意上传到哪里都可以,只要提供了直接的链接地址就行)然后直接用codebase指定位置,然后直接将相关的html嵌入此博文,那么,大家就能直接看到运行效果了:)

代码如下:
<p>
<applet codebase="http://jtianling.googlecode.com/files/"
code="AppletHelloWorld.class"
width=300
height=200>

下面是一个java applet程序的运行效果:

并且发现,文档中明确说明:

“APPLET is deprecated (with all its attributes) in favor of OBJECT.”

让我大为郁闷。。。。。。。deprecated的东西了。。。。但是本人目前不准备深入的去研究HTML,仅仅是学习JAVA,甚至JAVA Applet的学习都是为了JAVA的学习时演示方便,所以,怎么将上述applet tag的例子转化为用OBJECT tag,我就不研究了,应该不难。

说明:本人学习JAVA时间较短,虽然尽量保证所写下的是有依据的东西,但是并没有讲C++程序时那么有把握,所以碰到不对的地方还请各位JAVA高手指正。

 

参考资料

1.《Thinking In JAVA》,英文版,第4版,Bruce Eckel著,机械工业出版社

2.《JAVA Programming Language》,英文版,第4版,Ken Arnold,James Gosling,David Holmes著,人民邮电出版社

3.《JDK 6 Documentation》,JAVA在线文档集合

4.《The Java Language Specification, Third Edition

5.《Java™ Platform, Standard Edition 6 API Specification

6.《HTML 4.01 Specification

 

 

完整源代码获取说明

由于篇幅限制,本文一般仅贴出代码的主要关心的部分,代码带工程(或者makefile)完整版(如果有的话)都能用Mercurial在Google Code中下载。文章以博文发表的日期分目录存放,请直接使用Mercurial克隆下库:

https://blog-sample-code.jtianling.googlecode.com/hg/

Mercurial使用方法见《分布式的,新一代版本控制系统Mercurial的介绍及简要入门

要是仅仅想浏览全部代码也可以直接到google code上去看,在下面的地址:

http://code.google.com/p/jtianling/source/browse?repo=blog-sample-code

 

原创文章作者保留版权 转载请注明原作者 并给出链接

write by 九天雁翎(JTianLing) -- www.jtianling.com

阅读全文....

Windows下多鼠标/双鼠标技术专题

首先要说的是,此文的主要内容都来自本人 在 湖南大学  郑善贤 老师指导下写的 毕业论文

可以在此http://groups.google.com/group/Single-Display-Groupware找到我参考的英文资料,也可以在此讨论相关问题。

建议先阅读此前言:

Windows中多指针输入技术的实现与应用(说在前面的话(1))

后面是正文:

Windows中多指针输入技术的实现与应用(2摘要及参考论文)

Windows中多指针输入技术的实现与应用(3 绪论)

Windows中多指针输入技术的实现与应用(4多鼠标输入的底层实现)

Windows中多指针输入技术的实现与应用(5 利用多鼠标输入框架软件实现)

Windows中多指针输入技术的实现与应用(6 Single Display Groupware Toolkit的应用)

Windows中多指针输入技术的实现与应用(7 分时多鼠标控制系统鼠标的问题)

Windows中多指针输入技术的实现与应用(8 总结及继续MFC的讨论

Windows中多指针输入技术的实现与应用(9 我设想用来实现MFC多鼠标的透明窗口源代码。。。)

Windows中多指针输入技术的实现与应用(10 双鼠标五子棋源代码 全系列完)

 

一篇很有价值的译文:

在微软Windows中支持多指针设备(Supporting Multiple Pointing Devices in Microsoft Windows)

 

后记:全系列构成了本人的本科毕业论文,个人感觉基本上对得起中国的本科教育了,不说多么优秀,技术多么高,我本人还是下了功夫去学习和写的,虽然现在看起来原来那学生时代的水平,包括代码编写的风格都还是比较稚嫩的,而且现在回过头来看,其实真正核心的内容也就RawInput一点。-_-!呵呵,但是考虑到那是在几乎没有国内资料的情况下完成的,还是有一定的成就感,并且在微软举办博客征文比赛的时候曾经想以此文去蹭一个键鼠套件,结果仅仅获得优秀奖拿了件破衣服,汗颜-_-!有选择的话,我还不如混本《程序员》杂志强呢。。。。立此存照,以为纪念,相关资料还是有很多人问起的,本人懂得此文及其链接基本包括了。总结一下,以后发链接回答问题也快点。。。。。。别怪我偷懒。

devWOW博客获奖

最后,今天在查看此文链接时,竟然发现有人的论文在参考文献中引用了我的论文-_-!也算没有白写。。。。。。想起中国大学的某项制度,核心刊物发表论文+被引用计数。。。。我也算被引用计数一次了………

FireShot capture #006 - '多鼠标交互型PPT对中国课堂教学的启示' - www_zxqikan_cn_wz_200908_108851_2_html

阅读全文....

Win32 OpenGL系列专题

因为转来后格式混乱,所以在本博客不保留原文了,直接去CSDN看吧.

 

这个系列是当时边学OpenGL边写的,那个时候对OpenGL的理解非常肤浅,就是对着红宝书及一些网上的例子学习,现在回头来看,很多地方还是有不对的地方,绝对不推荐初学者不辨别对错的阅读,以免被我误导,可以作为学习之余添加的例子观看,因为我总是想着弄些好玩的东西,例子可以试试,也许可以增加你的兴趣。

阅读全文....

一切都"云"了,包括输入法,有感搜狐推出了云输入法

write by 九天雁翎(JTianLing) -- www.jtianling.com

讨论新闻组及文件

   
    IT行业最大的特点是喜新厌旧,伴随着这一特点衍生出来的就是商家喜欢炒作概念,这不,“云”一时间成为了最热门的词汇,于是一切都“云”了,Amazon最先有了通用云计算平台为这个推波助澜,Google这个本身就处于云端的公司也推出了App engine,一时间大家都“云”了,阿里也“云”了,Ubuntu9.10有了企业云,现在输入法都”云“了。何处不云阿。。。。。。。。。让人头晕。

    ”云“自然是好的,所以大家才集体“云”,类似Google Doc的应用改变了很多人的生活,包括我,所以今天能够脱离Windows也能够在Linux下很顺利和愉快的发布这篇博客,听说搜狐要发布云输入法了,还能跨平台,用于Linux,Mac,我是异常的兴奋啊,Linux下实在没有与搜狐输入法匹敌的输入法(Fcitx是我Linux下最喜欢的输入,但是虽然优秀,却还是只能算是上一代的产品了),我是引颈期盼,以为能在Linux下脱离低下的输入效率了,假如能够共享Windows下的个人词频记录那就更加完美了。
    怀着美好的憧憬,见识了一下云输入法,不得不说有些失望,搜狐的云输入法实在还不够成熟,虽然号称跨平台,有浏览器就能使用,事实上,我在Linux下(kubuntu9.10)+Firefox 3.5下测试,在Google Doc和Gmail中都只能看到一个输入法的标志,却不能正常使用,最后发现在Google首页的搜索框中可以正常使用-_-!难道因为Google Doc和Gmail也用了JS?(因为搜狐的云输入法前端明显是段JS)然后在Windows XP+FireFox3.5使用,与Linux一致,我最后再尝试用IE8,结果在Gmail中连搜狐云输入法都无法显示了,能够正常使用的就是Google的搜索框了,不知道搜狐自身有没有试过Google Doc,Gmail这样的AJAX产品-_-!但是Google Doc,Gmail这种按道理与"云"输入法搭配天衣无缝的绝佳“云”应用都无法使用。。。。不是让人有一点失望,那是非常让人失望,离搜狐宣称的有浏览器就能使用实在不是有一定的差距,那是有非常大的差距,最后,本文还是在可爱的fcitx工作下完成。

    作为概念输入法,搜狐并没有打算大规模推广和使用,仅仅作为创新的一个尝试平台,事实上,的确也还没有到那个成熟度,另外,在云计算没有完全普及之前,在真实的世界还不仅仅是浏览器时,仅仅只能在浏览器中使用输入法,还是有点让人接受不了,就算作为尝试创新的平台,起码也应该能够大体正常的使用才对。
    当然,搜狐的概念“云”输入法的一些概念还是不错的,也不能算作是普通商家的概念炒作了,毕竟这是真的“云”,计算是放在服务器端的,是通过网络调用的,也用了流行的B/S结构,让浏览器作为平台,意图达到有浏览器就能使用的目的(虽然还没有达到),因为计算在服务器,所以也能进行一些大胆的尝试,进行一些巨量(在客户端不能想像)的计算,提供超大的词库(据说4G),使用三元模型来匹配词组,客户端显示的词组都有服务器计算匹配返回,这些新鲜的东西,作为一个网络游戏服务器端的开发人员,我听起来还是感觉很新鲜的,天哪,一个输入法的开发都用了什么技术了啊,事实上,因为使用了“云”的概念,客户端的输入法也变成了一个单纯的显示平台。。。。。详细情况可以参考搜狐的网页,我看齐展示的技术的确有吸引人的地方,输入法最重要的是什么?自然是匹配率罗,首次匹配成功的几率越高,越能节省我们的时间,作为提高我工作效率的软件,我一概欢迎,我连Vim,AutoHotkey这样需要学习代价的软件都欢迎,更别说是像搜狗输入法这样不用学习就能提高效率的产品了。上面的那些新技术的出现自然不是为了彰显技术,而是以提高匹配率为目的的,事实上,虽然知道是搜狗首先有了将搜索引擎的数据与输入法挂钩的思想,但是今天才知道搜狗输入法的技术含量其实还是挺高的,不像想像的那么简单,我只希望,“云”输入法这样的产品要事实上能够实用起来,改善Linux下输入法的效率,而不是像现在这样,不能在浏览器以外的地方使用就算了,甚至连Google Doc,Gmail都无法使用。-_-!具体匹配率有怎么样的提高,说的玄乎又玄没有用,匹配率再高我首先也要能用吧。。。。。目前我能用到的地方就只在Google的搜索框-_-!
    呵呵,不得不承认,我很关注这样的“云”的产品,因为“云”产品在Linux下使用与在Windows下使用效果是一样的(我在Windows下也是用Firefox),加上数据存在服务器,我可以随时随地的获取到我要的东西,也不担心由于自己机器丢失,硬盘损坏,病毒,操作系统重装导致的数据丢失,Google Doc,Evernote就是其中最好用,最优秀的典型产品,“云”嘛,填平了操作系统间的鸿沟,浏览器就是操作系统,搜狐能有此先知先觉(不知道算不算),希望能够真的将产品做起来,而不是停留在概念输入法的阶段。毕竟,广大的Linux/Mac用户尚翘首以盼。。。。。。。。。
    不过说回来,搜狐在输入法这点上还真是下了本了,但是这个本钱花的即使不真得有有效的商业模式,同样还是划算,用这些钱开发一个普通大众几乎人人使用的软件比用大成本去做广告强,一个天天使用的好用软件本身就能在用户心中潜移默化的留下好的印象,何况这年头,互联网企业的杀手锏就是用免费培养用户习惯,然后收费。。。。虽然有的是以增值服务的方式提供的(那么多网络游戏其实都算),这笔生意在事后看起来是这么的清楚和划算,但是竟然一开始都没有人发现,(虽然现在很多公司发现了)任由MS的默认输入法在江湖上混了那么久。。。。。唉。。。。。。。。坐地分析一个东西容易,坐地发现一个这样的机会却难之又难,不知道第一个提出“云”概念的人/公司有没有想到会有这么一天,整个IT世界都往“云”上搬,甚至是输入法,甚至是操作系统呢?
    此文为本人博客第300篇文章,以为纪念。

write by 九天雁翎(JTianLing) -- www.jtianling.com

阅读全文....

Ubuntu 9.10升级完毕,两个我关注的功能(软件中心,Ubuntu One)体验

write by 九天雁翎(JTianLing) -- www.jtianling.com

讨论新闻组及文件

无论哪一个新版本的操作系统发布,都会是“空前的,划时代的”产品,别的不说,我感觉广告倒是每次都是“空前的,划时代的”。我不知道每次的操作系统升级到底有多少创新的东西,也不知道Ubuntu9.10与Ubuntu9.04与Ubuntu8.10之间到底差别有多大,也不清楚Windows 7到Windows Vista到Windows XP之间的跨度有多么大,我只在想,要是老是划时代,我们现在已经在哪个时代了?唉,也要理解理解,做个操作系统不容易啊。。。。。最近Windows 7出来了,我没有升级,等它普及,软件跟上再做吧,Ubuntu9.10恰好也出来了,我升级了,毕竟,点几下鼠标就升级了,因为很显然不会普及,所以,我也没有必要等它普及了-_-!

我用的其实是KDE,这里说的也应该是Kubuntu的才对。图形界面那就很简单多了,有自动弹出的提示,傻瓜式操作,我家还有台台式机只有命令行怎么办?网上也搜到了办法,安装update-manager-core包,

sudo apt-get install update-manager-core

然后运行之:

sudo do-release-upgrade -d

Ubuntu9.10与Ubuntu9.04的变化:

官方的介绍《Ubunt9.10新特性

中文参考此文:

Ubuntu9.10将会成为游戏规则改变者的十大原因

比较吸引我的有几点:

1:软件中心

新立得我感觉是真正属于划时代的产品了,只要不是想要最新的版本尝鲜,不然Ubuntu下的软件安装将比Windows下的还要简单,Windows下是 找地方下载-》下载-》安装,Ubuntu是选择-》应用。因为开源/免费的性质,使得Ubuntu能够有所突破,Windows下的迅雷,360想学,但是都学不来(别说还没有解决需要手动下一步安装的问题),这点我以前提过,也是我感觉Ubuntu最人性化的一点,在命令行下,我只能用apt,但是仅仅是使用apt,软件的安装也是无比的惬意,加上Ubuntu的公司建立的ppa(Personal Package Archives : Ubuntu),更加是让Ubuntu下的deb包源更加丰富,基本上想要的我还没有碰到过没有的。既然软件中心要替代原有的添加/删除软件工具,那么新立得和KPackageKit(远没有新立得好用)都要统一了吗?真好,那样会解决我不喜欢安装GTK+导致的新立得没有办法用的问题。(事实上,不用新立得的唯一好处就是我不会常常因为其软件太过丰富而导致头晕,花很多时间下载一大堆看上去很有意思但是实际我根本不会用到的软件),据说软件中心中还会添加进商业软件-_-!那更加是让人兴奋罗,赶快看看。作为KDE使用者接受的代价是装上一堆Gnome的东西-_-!我没有为新立得屈服,为软件中心屈服了……………

kubuntu9.11SoftWareCenter 下面是我选择安装KDBG是的情形。

kubuntu9.12SoftWareCenterKDBG 使用感觉是,软件界面重新设计了,软件的分类更加面向普通的用户(非程序员),现在是安装软件的应用来分类,见上面的截图就能看出来,基本与菜单启动分类一致,而以前是按照软件的实现来分类,比如Gnome,KDE,Python什么的。这样普通用户的使用应该是更加上手了,但是,我要是找一些东西还真不知道实在哪个分类里面的。。。。呵呵,我估计有的时候还是得用新立得才行。另外,因为两个软件都是以apt为基础的,所以不能同时运行。

另外,在other分类中,我也没有看到真正的商业软件,仅仅看到一些如flash pugin,ATI驱动等东西(也许就是上文所谓的商业软件),当然,他们不开源,但是免费,我还以为会提供oracle的Linux版本提供下载了-_-!(想远了)或者商业软件是指MP3解码器等东西?(的确不为真正的GNU开源卫士所接受)

kubuntu9.13SoftWareCenterrestricted 基本上,软件中心没有让我特别惊喜的地方,可能对普通用户更加方便吧,对于我来说反而感觉包难查到,并且批量安装,删除没有原来那样方便了。

 

 

2.Ubuntu One

同步文件,2G空间,天哪,真不错,虽然我已经有网易的网络U盘了,但是使用上别提多麻烦了,那是引导顾客多上其网页操作的设计,也没有提供其他访问方式,而且空间总是不嫌少嘛,何况是内置在操作系统内部的工具,带同步功能。这个很吸引我,现在不要再和我讨论东西放在网上和放在自己电脑上哪个更好的问题了,可以的话,我希望将操作系统都放到网上去(好像以前有个类似的东西)。

kubuntu9.14one

kubuntu9.15oneplan

很显然,要注册了,并且提供了两个版本,这也算是Canonical的创收之路之一吧^^我以前已经在launchpad.net注册过了,现在可以直接使用其账户,而且不仅仅有文件共享的功能,还有note,联系人等功能,最郁闷的是。。。。。继TortoiseHG以后,这个功能又是与Nautilus绑定的,我再次吐血和感叹我这样使用KDE被抛弃的孩子-_-!但是,使用Ubuntu One后,会在主文件夹下增加一个名为Ubuntu One的目录,此时只需要将文件复制进去,就会自动进行同步:),呵呵,还算是比较好用,这样的话,我将来就将此文件夹作为工作目录了,无论在哪,都不怕文件丢失,呵呵,就像有个备份硬盘一样,2G的空间也能使用够久了,还可以方便的在我的服务器上同步,(还需要研究命令行下的使用方法)

网页使用页面:kubuntu9.15one2

 

最遗憾的功能是Quickly,本来多好的一个功能啊,(听起来)结果是针对gtk的-_-!我是无福消受了。被抛弃的孩子。。唉。。。。还有rhythmbox……我们不是不能用,要用的话代价是在KDE中再装个Gnome-_-!(虽然为了软件中心我已经装了。。。。)呵呵,但是Qt的很多工具已经够用了,我也不想太多了。

 

新浪也有新闻《Ubuntu 9.10正式发布》,竟然还提供了下载,才发现,原来新浪已经提供一些流行Linux发行版的下载了,呵呵,加上以前网易提供了一些Linux发行版的源(我没有用过,仅仅听说),现在Linux发展还不错嘛。

 

本来想写点完整的东西,最后光是找软件下载体验去了。。。。。。。遗憾,遗憾

 

 

 

原创文章作者保留版权 转载请注明原作者 并给出链接

write by 九天雁翎(JTianLing) -- www.jtianling.com

阅读全文....

Ubuntu 9.10总算出来了

这一次Ubuntu的更新可能是因为我正好在家呆着没有工作的原因,感觉等得特别久,平时忙起来更新反而没有怎么注意,呵呵。高兴更新中。

因为免费,开源,才能出现这样询问是否升级整个系统的对话框,什么时候,XP,Vista用户能看到MS提供的是否升级整个系统到Windows7的对话框呢?也就是因为免费,开源才能出现像apt-get和新立得这样将软件安装全部一键化的产品,Windows下的迅雷,360等想学但是要完全学会那就不仅仅是技术上的可行性问题了,呵呵,服务器开发人员的一点感慨,纯Windows开发人员请无视。

阅读全文....

CMake简介 - 一个现代软件构建系统

第一次见到CMake应该是在Eclipse中的编译工具链选项,但是一直没有太过在意,然后再次认识CMake与许多人一样,是通过KDE的源代码,当我上次查看KDE中右键菜单编辑时,接触了KDE的源代码时,很自然的需要KDE的构建系统,CMake,但是光是用用,也没有在意,直到我看到《通向KDE4之路》系列文章《通向KDE4之路(八):CMake,新的KDE构建系统》时,(KDE使用者推荐阅读,写的实在是太精彩了!Linux伊甸园的转载版本是比较好的,但是不全,其他很多版本都不带图,少了很多阅读乐趣,KDECN的版本文章较全,就是没有图)对KDE4从autotools工具链转向CMake有了深刻印象,有了一探究竟的想法,毕竟,当年我学习autotools系列工具的时候,压根就没有用心,在公司也没有类似工具的使用氛围,一般都是通过一个简单的模板手工编写makefile,然后整个工程的先后顺序依赖等事情通过bash脚本来管理-_-!呵呵,虽然说实话,因为毕竟公司的工程的改动并不大,而且当时以移植Windows的服务器程序为主,所以还算够用。。。。。另外,要是不是现在没有工作比较清闲,还真没有闲工夫去学习这些东西。

阅读全文....

懒惰是程序员的美德! 懒惰程序员的最爱AutoHotkey 尝鲜


懒惰是程序员的美德! 懒惰程序员的最爱AutoHotkey 尝鲜

write by 九天雁翎(JTianLing) -- www.jtianling.com

讨论新闻组及文件

Don’t Repeat yourself在编程领域成为DRY原则,是知道我们编写强壮代码的重要指导原则之一,但是,事实上在其他领域也是一样的(我也不知道此原则是否最先出现在编程领域)。Larry Wall的懒惰是程序员的美德的话我是记忆深刻。作为一个对计算机着迷,对程序无比投入的人,深知学海无涯,但是,正是因为学无止尽,更迫切的需要我们做追求效率的程序员,将重复的工作交给最擅长做重复工作的电脑去做,只有这样,我们才能将更多的时间节省下来,去干我们自己想干的事情。(虽然工作时不太可能-_-!但是起码能赢得一句手快的评价,再次-_-!)学习VIM,Bash,Python,Lua,Qt,SQL都是如此,在这条路上已经走了这么远的我们,又何惧为了更加提高效率,再多学AutoHotkey这样一个小工具呢?既然选择了远方,就只顾风雨兼程,既然选择了编程,就只能忘了远方。-_-!敲自己的键盘,让别人走路去吧。

AutoHotkey的名字大家说不上如雷贯耳,久仰大名,起码也是早有耳闻了吧。让我们不惧艰险(又是一种脚本语言-_-!)将AutoHotkey作为饭后甜点好好品尝一下吧吧^^

 

AutoHotkey是什么

AutoHotkey简单来说是一个附带键盘宏录制的脚本工具,但是因为功能太过强大了,叫做自动化工具也许较为合适。从自动化工作这一点来看,AutoHotkey类似Linux下的Bash,都不以脚本语言的逻辑表达能力取胜,专门针对自动化工作设计,只不过Bash是命令行下的,对窗口一无所知,而AutoHotkey可以说是专门针对Windows的窗口平台的,有对快捷键和窗口环境的强大支持。(我见人将其称作GUI-Scripting,实在贴切)也许可以说AutoHotkey就是GUI环境下的Bash。既然Linux下Bash是必学的(的确应该学),那么AutoHotkey也就顺便学了吧。

 

安装配置

下载安装我就不多说了,真的不知道这里有个地址可以去看看。善用佳软的AutoHotkey 0级教程,顺便推荐下善用佳软,推崇并介绍了很多好用的免费软件,个人很喜欢。

AutoHotkey的脚本是以ahk为后缀的文本文件,用你自己最喜欢的编辑器编辑吧,对于vim来说,已经内置了对ahk的语法高亮,我习惯将AutoHotkey的安装目录添加进环境的PATH中,这样用vim编辑脚本的时候可以直接简单的通过!Autohotkey %来运行脚本。(事实上我将其map到了F5上)但是愿意的话,其实.ahk文件在AutoHotkey安装后是与其关联的,直接双击也可以运行此脚本。

 

初步

首先编个最简单的脚本,看看效果先。

Run http://www.jtianling.com

将上一行的代码保存成文本,双击运行,或者用autohotkey运行之,会自动开启你机器上的默认浏览器登录我的博客,建议大家每天运行100次以上^^这个功能有点像Python的os模块的startfile函数,通过解析后面的字符串来判断应该使用什么与其关联的程序运行。当年工作的时候我有个开机脚本就是用Python此函数做的,功能就是开启工作需要的一大堆程序,VS,MSDN,TotalCommand自动一个一个开启并打开合适的工程或目录。现在这个功能也可以交由autohotkey来完成了。就是一条Run命名。

相对来说,对于特定用途的工具(比如Bash,autohotkey)来完成其擅长的事情是会比通用工具(比如Python)来的简洁的,此即一例,Python中虽然也能完成这样的工作(在没有学习Bash前,在linux下它都是我的脚本工具),但是,需要进行import模块,函数调用等一堆难看的东西,autohotkey只需要一个Run。这里之所以讲的多点,是想说明一个特定工具哪怕并不是完成了什么不可能完成的任务,也许仅仅是将任务完成的更加简洁高效和优雅,也是一个工具的用途体现。至于值不值得为了这份优雅付出学习的代价,那就见仁见智了。

再看个例子:

Run c:/DirTest.txt

此脚本会自动的用你机器配置的文本编辑器开启此文件。(文件必须存在)

但是以下脚本

Run notepad.exe c:/DirTest.txt

无论文件存在不存在都会开始记事本,其中的区别,大家自己体会一下。事实上解析的强度比一般人能够想象的还要厉害,帮助文件中有这个示例:

Run mailto:someone@somedomain.com

呵呵,什么意思大家都知道,牛吧。可惜我一般不用客户端写邮件-_-!

 

快捷键

AutoHotkey自然对Hotkey又特别支持啦,脚本中用符号表示快捷键,一次排列,几个常见的修饰键对应符号是#Win, !Alt,^Control,+Shift。那么什么叫依次排列呢?看下面的例子。

#space::Run http://www.jtianling.com

以上的例子即将Win + space 键设定为访问我的博客,运行后发现没有直接的反应,不像上述例子,此时AutoHotkey以trayicon小图标的形式运行于右下角,当你输入Win + space的时候会触发其运行默认的浏览器开启网站,并且一直有效,直到你将其关闭。(此例也推荐大家每日运行100遍^^与前面第一个例子结合交叉运行效果更佳)同理,要ctrl+space就是^space,要ctrl+alt+space就是^!space。

事实上,一个快捷键可以对应多个命令,也可以多个快捷键对应一个命令,格式有点不多,见下例。

#space::
Run http://www.jtianling.com
Run http://hi.csdn.net/vagrxie
return

#^a::
#^b::
Run http://www.jtianling.com
return

此例即是在按下Win + space时打开我的CSDN博客和空间两个网页,并且CTRL + WIN + A与CTRL + WIN + B都是打开我的博客。举这两个例子主要是告诉大家AutoHotkey的格式相对比较灵活,比如这里的一对多和多对一。当不是一对一并且写在一行时,需要以return来表示脚本的结束。

 

信息窗口

这也许是最先应该说的,MsgBox

MsgBox Text

即可以通过MessageBox弹出Text的信息,比较方便

可以通过MsgBox弹出Yes Or No等选项,并获取,以判断分支执行程序。

MsgBox, 4,?,Yes or No?
ifMsgBox Yes
    MsgBox You Said Yes!
else
    MsgBox You Said No?

分支执行的语法比较奇怪,通过if结合MsgBox构成一个IfMsgBox特别应对MsgBox的选择。

 

对窗口的控制

个人感觉,对窗口的控制是AutoHotkey的精髓所在,这也是为什么我将其比作GUI下的bash。这里我还是通过从简单到复杂的例子来描述。比如,我现在在编辑文档的时候常常会需要打开AutoHotkey的帮助文档查看,一般我的操作是用鼠标点击其最小化的窗口以激活,或者我也会需要开启gvim以编辑示例程序,也是需要用鼠标去激活,因为用atl+Tab的方式还不如用鼠标快,有了AutoHotkey,我们就有更方便的Hotkey去完成这样的任务了。

SetTitleMatchMode 2
#tab::
ifWinNotExist, GVIM
{
    MsgBox GVIM is not running
    return
}
IfWinNotActive,GVIM
    WinActivate,GVIM
else
    WinActivate,Windows Live Writer
return

如上脚本,先判断是否有标题包含GVIM的窗口存在,不存在则报告GVIM没有运行,不然WIN+TAB键的效果就是在GVim与Windows Live Writer之间切换,非常方便。ifWinNotExist如其名,用于判断一个窗口是否存在,ifWinNotActive也如其名用于判断一个窗口是否激活,第一个参数都是表示窗口标题文字的匹配,匹配模式由SetTitleMatchMode决定。

1: A window's title must start with the specified WinTitle to be a match.
2: A window's title can contain WinTitle anywhere inside it to be a match.
3: A window's title must exactly match WinTitle to be a match.

我们使用的是2,表示任意位置都匹配,默认是1,速度最快,必须是开始位置匹配。if一组的函数都还支持其他参数,具体的请查看帮助文档了,我这里主要是展示一下用途。

实际上AutoHotkey对窗口的控制还有很多强大的功能,一篇小文无法一一尽数,这里再举个例子:

SetTitleMatchMode 2
Loop, 10
{
    Random, x, 0, 50
    Random, y, 0, 50
    WinMove,GVIM,, %x%, %y%
    WinHide,GVIM
    Sleep, 100
    WinShow,GVIM
}

上述程序运行后,GVIM窗口会变的疯狂。。。WinMove,WinHide,WinShow的意思都很明显,分别是移动,隐藏,显示窗口,这里有两个有新意的地方,一个是Random和x,y,有点编程知识的人都看出来了,AutoHotkey是允许设定变量的,此处的x,y就是,引用变量的方式是前后各1个百分号,与windows批处理程序的一样。另外就是Loop,10表示的循环结构了。

 

操作记录器

这个功能有点像国内一个也比较强大的软件键盘精灵的功能(当年玩那种泡菜网络游戏没有少用过它,单纯的键盘鼠标模拟功能不比AutoHotkey差),就是将键盘鼠标操作记录下来,自动生成AutoHotkey的脚本。省去了重复工作的脚本编写之苦。带GUI界面,截图如下:

image 点击左上角的Record按钮就开始记录键盘鼠标的操作了。然后通过点击录制时屏幕左上角的Stop停止录制。上面的脚本是我录制的一段激活Windows live Writer和最小化Windows live Writer的过程。

WinWait, ,
IfWinNotActive, , , WinActivate, ,
WinWaitActive, ,
MouseClick, left,  1159,  889
Sleep, 100
WinWait, xfsdlaf.ahk (E:/work) - GVIM,
IfWinNotActive, xfsdlaf.ahk (E:/work) - GVIM, , WinActivate, xfsdlaf.ahk (E:/work) - GVIM,
WinWaitActive, xfsdlaf.ahk (E:/work) - GVIM,
MouseClick, left,  908,  17
Sleep, 100
WinWait, ,
IfWinNotActive, , , WinActivate, ,
WinWaitActive, ,
MouseClick, left,  33216,  32891
Sleep, 100
WinWait, Don’t Repeat yourself 懒惰是程序员的美德 AutoHotkey 尝鲜 - Windows Live Writer,
IfWinNotActive, Don’t Repeat yourself 懒惰是程序员的美德 AutoHotkey 尝鲜 - Windows Live Writer, , WinActivate, Don’t Repeat yourself 懒惰是程序员的美德 AutoHotkey 尝鲜 - Windows Live Writer,
WinWaitActive, Don’t Repeat yourself 懒惰是程序员的美德 AutoHotkey 尝鲜 - Windows Live Writer,
MouseClick, left,  1362,  10
Sleep, 100
MouseClick, left,  1387,  10
Sleep, 100

会发现自动生成的代码较人工的代码还是乱了很多-_-!机器嘛,不是那么聪明。上面代码很重要的一个就是通过MouseClick来模拟鼠标的点击,有了这个功能,想干什么都可以了………………顺便提及一下,也可以通过

Send Keys
SendRaw Keys
SendInput Keys
SendPlay Keys
SendEvent Keys

来模拟键盘的输入。下面是一个当你暂时离开机器却有不想锁屏时可以提出警告的脚本。:)

SetTitleMatchMode 2
SetKeyDelay 50
Words = WARNING{!} DO NOT OPERATE MY COMPUTER{!}

KeyWait, LButton, D
run,gvim YouAreUnderMonitored,,Max
WinWait,YouAreUnderMonitored
Send i%Words%{Esc}

此脚本等待鼠标左键单击,然后自动开启gvim并最大化,然后一个字一个字输入警告信息^^不明就里的人一看估计碰鬼了。

 

小结

对于AutoHotkey这样强大的东西,一篇3000来字的小文实在是无法详细尽数其功能,而本人的目的也就是提供给觉得AutoHotKey复杂而不去学习的人尝个鲜,知道了AutoHotkey没有那么难以后,伴随着使用,参考着帮助文档,慢慢的会发现AutoHotkey也是一个离不开的工具了。我就在网上看到很多人狂喊,Linux下什么都好,就是没有AutoHotkey-_-!(其实类似的言论非常多,比如也没有Windows Live Writer equivalent)

原创文章作者保留版权 转载请注明原作者 并给出链接

write by 九天雁翎(JTianLing) -- www.jtianling.com

阅读全文....