日历

« 2008-07-26  
  12345
6789101112
13141516171819
20212223242526
2728293031  

我的好友

音乐欣赏

统计信息

  • 访问量: 14468
  • 日志数: 21
  • 图片数: 4
  • 商品数: 1
  • 文件数: 3
  • 书签数: 6
  • 建立时间: 2005-09-21
  • 更新时间: 2008-04-21

RSS订阅

我的最新日志

  • 开源Licenses简介对比

    2008-4-21

    作为一个软件开发者,不可避免的要与Open Source打交道,不管是因为你要选择使用一个开源产品还是你也要加入到开源当中。那么你可有想过为自己的开源项目设立一个合法的保障,保障自己以及使 用者的权益,或者如果你使用一个开源产品的话,可有考虑过是否因为是开源就可以随意滥用?

        很不幸的是,在中国,很多人甚至很多企业对License这个东西满不在乎(众所周知的事情),导致了中国软件业没有大客户的可悲局面!那么,既然你是一个Developer,怎么还能不在乎License而间接地让自己丢饭碗呢?

        既然与开源打交道是不可避免的事情,那么就就一起来了解几种开源License,并进一步的对比一下它们。

        基本上每一种License都会有以下几点:

    1. Grant of rights (授权)
    2. Redistribution (再部署)
    3. Warranty (质保)

        其中作为开源License,都会授予你免费使用,获得源码的权利,并且不承诺任何质量相关的保证。每种License的最大不同,基本上就在于第二点, 也就是Redistribution方面了。以下列表列举了几种不同License在Redistribution方面的不同特点。

    License

    Must ship code

    Combine with proprietary

    GPL

    Y

    N

    LGPL

    Y

    Y

    New BSD

    N

    Y

    Apache Software License 2.0

    N

    Y


        这里的Combine with Proprietary的意思是可以将开源产品融入到自己的产品中然后再重新发布(也就是换一个License)。从以上表中可以看出,GPL非常的严 格,商业软件是不能在自己的最终产品中包含有任何在这个License之下的产品或组件,因为GPL license是不能变的,这意味着含有GPL组件产品的源代码必须是公开的且是GPL License的。这对开源类库的开发来说是非常不合适的,试想有谁敢用这类的类库呢!正因为考虑到这点,LGPL出现了,它允许library在其他 License下发布,但是要求发布者必须提供library可扩展的形式或源代码,所以LGPL的产品不管在哪里都会有源代码。

        LGPL相对GPL宽松了许多,不过要求必须附带源代码这点还是有些不舒服,所以这种情况下可以选择更宽松的New BSD License或者Apache Software License 2.0,New BSD License基本上没有任何限制,Apache Software License 2.0则对Contribution等方面有更详细的定义。

        这里只是简单介绍并对比一下不同的License,详细还请参考OSI网站(www.opensource.org/licenses/)

       一般来说,不推荐使用GPL,因为它太不灵活了,一切都固定的太死了。

  • 惊叹:支持Ubuntu的袁萌教授倒戈 被微软收买

    2008-3-19

    一直在关注袁萌教授在LUPA的官方博客。 http://www.lupaworld.com/64092
    最近发现很奇怪的问题:
    最初强烈支持Ubuntu,对微软嗤之以鼻。
    后来被微软叫去谈话了一次,回来之后就开始宣传微软产品,态度上也有了180度转变。

    比如之前极力反对OOXML,现在又开始全力支持。

    相信袁萌教授不会再提Ubuntu了。

    实在令人惊讶,也再次感慨下人民币的力量。。。。。
  • 如何写计划 8个偏方成就你的2008

    2008-3-10

    一年是很好的整块时间——长得足以完成较大的项目,短得足以把终极目标尽收眼底。同时,一年也是可以用来好好描绘你生命的“大蓝图”的绝好时间段——你做错了什么、做对了什么、想改变什么。

    我要利用接下来的几周时间好好考虑我今年想完成的事情:我想开始的新项目、想结束的旧项目、想克服的个人缺陷、想培养的个人优势等等。以下就是能帮你在新的一年实现愿望的8个法宝:

    l 按SMART原则设定目标。不要只是设定目标,而是要按SMART原则设定目标。SMART的定义来自于George Doran,它们分别代表:

    u Specific—精准的:目标必须尽可能地精准。比如说,不要只是说诸如“减肥”或“赚更多钱”而要说“减轻10磅”或“让收入增长到10,000美元/年”。

    u Measurable—可衡量的:该目标的进度必须是可衡量的。你可以在一张表上记录减去的重量,或看看你的收入是否接近了新的收入目标。但你没法衡量诸如“更快乐”之类的目标。

    u Achievable—可达到的:无法达成的目标会让我们彻底失去信心,因此,要设定现实的目标。所以“减轻10磅”比“减轻150磅”要好;如果你以前从不跑步,“跑五公里”就比“完成铁人三项全能运动”来得现实。

    u Relevant—恰当的:这个目标是否a) 对你的生活有重大影响 b) 是你已做好准备去追求的?如果不是,也许你的目标就该是:首先获得你需要用以解决更远大目标的技能和资源。

    u Time-bound—有期限的:给自己定下一个达成目标的截止日期。这会给你紧迫感,也能让你保持注意力集中——你想在6月减掉10磅,而不是在你生命中随便某个时间,对不对?

    l 制定计划。要是没有计划,你今年怎能取得成功?计划是很多人的“痛脚”——我们也许有个笼统的框架,但到了该坐下来做些什么的时候,我们却不晓得该干什么。写下一连串详尽的、各自独立的及可行的能帮你达成目标的行动,一条条列出来。如果有些步骤必须视情形而定,或是有些条件你目前还不了解,也要尽可能草拟一番。同时也要制定一份应对意外事件的计划,防止事情往不尽人意的方向发展。

    l 承诺完成日期。通览你的任务列表,为每项任务制定一个截止日期。对你脑海中模糊的“我想做这些事”的念头也采取同样的办法。我一般采用这样的格式“到3月31日,我将完成这里填上目标”,接下来列出我到时要完成的所有任务。同样再定下6月30日、9月30日和12月31日要完成的事。也许按季度划分并不适合你;倘若如此,那就另选一种划分办法,关键是要去做。

    l 公开你的目标。与他人分享你的目标和承诺——你的伴侣、父母、朋友和同事、你博客的访客、任何人——这样能让你的承诺更真实。如果告诉所有人你要在6月30日前写完你的小说,那就会有种强大的动力驱使你去把它完成。他们也会帮你,就算帮不上,也会时常对你耳提面命吧。

    l 寻找支持系统。一群想法相近、目标相似的人会成为强大的动力。他们不但理解是什么拖了你的后腿,甚至可能提示你该如何去克服障碍。假如没有,他们也可能正跟你一样,在努力克服同样的困难,而你就能由此知道这不是你一个人的问题,并可以跟大家一起齐心协力地对付它。

    l 坦然地接受失败——并继续向前。在任何事情上你都有可能遭到失败。接受这点,动手去做。如果你真的失败了,则检查一下原因,然后继续向前。唯一真正的失败就是没有从错误中吸取经验。

    l 改变你自己,而不是环境。太多人以为他们可以用钱买来快乐——用一种新产品就能让他们有条不紊,有一辆新车会让他们更自信,等等。改变你的态度,而不是环境——如果你条理混乱,那就找出你为什么就不能把东西放到能记得住的地方的原因,然后改掉它;如果你没自信,那就检视自己的生活,看看哪方面出了问题,而不是去寻找所谓的心理补偿,这对改善让你不快的原因毫无用处。

    l 停止自责。了解你自己和破坏你自己可不一样。不要去管脑海中那些喋喋不休地说你还不够好、不够聪明、不够漂亮之类的声音。设定目标、制定计划、义无反顾向前走。很快,这种声音对你的影响就会越来越小。它可能不会消失,但你不必让它搅乱你的生活。

    今年,跟任何一年一样,都是迈出新步伐的好时机。新年快乐,并祝你好运!

  • Ubuntu下笔记本电池供电时对硬盘损害问题的解决

    2008-3-04

    Ubuntu下笔记本电池供电时对硬盘损害问题:
    安装 sudo apt-get install smartmontools,
    然后查看 sudo smartctl -a /dev/sda | grep Load_Cycle_Count
    Ubuntu下笔记本电池供电时对硬盘损害问题的解决方案 sudo apt-get install laptop-mode-tools
    然后,sudo vim /etc/laptop-mode/laptop-mode.conf
    设置CONTROL_HD_POWERMGMT=1
  • 德国大众面临被收购

    2007-10-25

    欧洲最高法庭欧洲法院周二作出终裁,决定推翻一项长达47年的法律,后者旨在保护欧洲最大汽车生产商德国大众汽车不被敌意收购,又被称为“大众法”。分析 人士普遍认为,这一裁决可能为同为德国汽车巨头的保时捷公司收购大众铺平了道路,保时捷目前已是大众的最大股东,持股约31%。而且,这一做法也可能令欧 洲其他受政府保护的企业巨头面临被收购的命运。

      股价应声下跌

      德国“未能证明为什么要出台这样一个法律来保护少数 股东的利益”,法院的判决称。分析人士指出,对于保时捷公司而言,欧洲法院的最终裁决意味着该公司朝着打造“汽车帝国”的目标又迈进了一步。今年以来,市 场对于保时捷可能寻求全面收购大众的预期日增,后者的股价也已翻番有余。

      在最新消息传出后,大众汽车在法兰克福的股价受获利盘打压下跌5.3欧元,报175欧元左右,跌幅2.9%。此前,该股的股价已累计上涨100%以上,市值达到629亿欧元(约392亿美元)。

      保时捷最早在两年前开始收购大众的股份,该公司一直称,愿意保护两家公司之间的战略合作关系。自2002年以来,大众一直为保时捷的一款SUV生产车身。

      今年3月,保时捷出资359亿欧元全面收购大众,该要约已在5月29日到期。按规定,保时捷现在可以随意增持大众的股份直至50%,而无须发出全面收购要约。

      欧盟状告德国

       1960年,大众公司最早被私有化向股份公司转型时,“大众法”通过,该法旨在保护该公司不容易被外资收购。根据该法律,任何单一股东都不允许在大众汽 车中获得超过20%的投票权,不管其持有多少股份。因为按规定,涉及公司收购等重大问题需要超过80%的多数票通过才行,这在事实上使得德国政府只要拥有 20%的表决权,就可以阻止任何收购行动。该法同时赋予大众所在的德国下萨克森州超过20%的股份和表决权,而地区及德国政府都在大众董事会中占有席位。

       欧盟委员会在2005年将德国政府告上法庭,在2月份提交给法院的一份文件中,欧盟委员会的一位顾问指出,“大众法”“限制了资本的自由流动”。欧盟一 直将“大众法”与在欧洲其他国家实行的所谓“黄金股”做法做比较,即政府可以在一些公司拥有一定数量的具有否决权的股份,但是欧盟委员会认为,“黄金股” 的使用范围应该仅局限在关系国防能源等要害领域,显然大众汽车公司不在这个范围内。

      德国政府认为,“大众法”旨在保护德国的就业,而欧盟委员会则认为,类似的法律不利于企业自由竞争,并对欧盟27个成员经济体之间的跨境自由投资形成壁垒。

      截至发稿,大众汽车本身尚未就法院的最新裁决发表声明。德国下萨克森州总理克里斯蒂安·沃尔夫则在一份电子声明中表示:“下萨克森州政府接受欧洲法院的裁决,我们会继续保持对大众的持股。”

      作为大众的前两大股东,保时捷公司和下萨克森州政府昨天均表示,州政府继续保有在大众监事会的两个席位。

      保时捷表示欢迎

      在欧洲法院作出裁决后,保时捷昨天发布声明,称对这一裁决表示欢迎。不过,公司也表示,无意立即作出增持大众汽车公司股份的决定。

       目前,保时捷持有大众31%的股份。公司昨天在一份声明中表示,公司将行使作为大众股东之一的权利。不过,声明同时称,公司没有计划在欧洲法院作出此项 决定后立即增持大众汽车公司股份。增持股份需要公司监事会的批准,下一次监事会会议将在11月12日举行,会议的讨论内容将由公司管理层决定。

       德国政府当天则表示,将采取必要监管措施废弃“大众法”。德国司法部一位发言人表示,通过一项法案通常需要6个月的时间,但鉴于这个特殊案例,时间可能 会缩短。他称,欧盟法院未能同意德国提出的一些意见,德国政府对此表示遗憾。德国方面认为,“大众法”是为确保德国作为一个投资场所以及为保护就业而制 定,并未赋予哪一方特殊的权力。
  • 如何划分中国互联网的三个“发展阶段”

    2007-10-24

      中国互联网已经十年有余,风风雨雨,起起落落,可谓历经沧桑。最近和朋友聊起《中国互联网史记》的大纲,首要的问题是要给过去的10年和不远的未来一个大致的划分。中国互联网究竟应该划分为几个阶段?

      划分阶段无非是为了更好理清历史,明晰背景,指手画脚才不会脱离现实。
    因此,几个阶段并不重要,重要的是能够有助于说清楚事情,说清楚产业。每个阶段都要有一些根本性的标志:比如主要的技术、比如资本市场状况,比如热门人物,比如重要公司,比如新的理念和概念等。不但当下有效,要在十年二十年之后依然有效才行。

      我自己在2000年就大致搞出过一个划分阶段的方法,主要参考了罗杰斯的创新扩散理论。但是,搁在当下的中国互联网,我还是想更鲜活点。我想大致可以化分三个阶段:

      第一阶段:互联网热潮阶段:1996年—2000年,互联网第一轮浪潮,以几大门户为绝对主导;网民普及率不到1%;

      第二阶段:互联网低潮阶段:2001—2003年,2000年转折之后,就步入冬天。冬天磨砺了盛大、百度、腾讯等公司,网民普及率不到10%;

      第三阶段:互联网2.0阶段:2004—未来3、5年,2.0新兴公司从概念、到资本到商业模式,到市场力量的逐渐崛起,第二次浪潮时期,将诞生一批新的互联网实力派公司。网民普及率不到25%。

      经过这三个阶段的磨砺,中国互联网将构成老中青三代互联网公司,数十家各有特色的互联网公司,构成了一个能够相对持久的中国互联网生态图。这三个阶段完成之后,中国网民普及率将达到20%左右,按照中国社会经济发展现状,20%的网民普及率就开始进入一个相对成熟期,基本格局大致确定。当然,很多精彩还会每年发生,但是互联网作为最活跃最剧烈最带劲的领域,都基本在这三个阶段中完成了。后续的第四阶段,将是更平稳的深入发展阶段。

      所以,未来3—5年,是互联网创业和拼搏的黄金时期,好好把握这次机会吧。过期不候的!
  • ajax留言祝福系统测试

    2007-9-24

    其实是LUPA社区的二周年祝福
    刚发现是用AJAX实现的,比较有意思,包括翻页效果。
    支持下。。

    http://subject.lupaworld.com/libsmarty/zhufu.php
  • wine优化 Ubuntu安装IE

    2007-7-14

    默认安装的 wine 是不大好用的,所以需要优化一下。

    首先安装 0.9.36 或更新版本的 wine(在命令行下面输入 wine –version 查看版本号),这样可以避免和 scim 输入法冲突、以及 GBK 字体导致的运行缓慢问题。如果没有更新版本,那么可以自己编译一个,运行速度比默认编译的还快一点。

    接下来用 ies4linux(ies4linux 官方网站) 自动安装 IE6。

    之所以要使用 ies4linux 来配置 wine 环境,是因为 ies4linux 会附带安装一些基本组件和字体。这样在使用其他 Windows 程序时可以少不少麻烦。

    不过 ies4linux 把 wine 配置文件放到 ~/.ies4linux 了,所以需要按照下列操作修改一下:

    cd ~
    rm -fr .wine
    mv .ies4linux .wine
    cd .wine
    mv ie6/* .
    rmdir ie6

    这样修改后,ies4linux 在桌面上创建的 ie6 快捷方式就不能启动 ie 了,还需要修改一下 ~/bin/ie6 这个启动脚本:

    cd ~/bin
    rm ie6
    ln -s ~/.wine/bin/ie6 ie6
    gedit ie6
    用搜索替换功能,将 .ies4linux/ie6 提换为 .wine,保存退出。

    上面的工作做好后,从桌面启动一下 ie6,如果没问题,说明配置成功。
    接下来就是设置字体,让 Wine 跑的 Windows 程序看起来好看些(参考:http://forum.openrays.org/simple/index.php?t4309.html)。

    步骤:

    1. 初始设置
    2. 运行 winecfg,把模拟的 Windows 系统设置为 Windows XP 或者 Windows 2000。

    3. 准备字体
    4. 为了让 Windows 应用程序看上去更美观,所以需要 Windows 下面的字体。

      由于我已经将 simsun.ttc 复制到 /usr/share/fonts/windows/ 目录中了。所以我只需要在 ~/.wine/drive_c/windows/fonts/ 目录中为 simsun.ttc 创建一个符号连接:

      cd ~/.wine/drive_c/windows/fonts
      ln -s /usr/share/fonts/windows/simsun.ttc simsun.ttc
      ln -s /usr/share/fonts/windows/simsun.ttc simfang.ttc

      创建一个 simfang.ttc 是许多 Windows 应用默认使用 simfang.ttc 字体。

    5. 修改 ~/.wine/system.reg
    6. 装好字体后,还要修改一下 Wine 的注册表设置,指定与字体相关的设置:

      gedit ~/.wine/system.reg

      (一定要使用 gedit 或其他支持 gb2312/utf8 编码的编辑器修改这些文件,否则文件中的中文可能变乱码)

      搜索: LogPixels
      找到的行应该是:[System\\CurrentControlSet\\Hardware Profiles\\Current\\Software\\Fonts]
      将其中的:
      “LogPixels”=dword:00000060

      改为:
      “LogPixels”=dword:00000070

      搜索: FontSubstitutes
      找到的行应该是:[Software\\Microsoft\\Windows NT\\CurrentVersion\\FontSubstitutes]
      将其中的:
      “MS Shell Dlg”=”Tahoma”
      “MS Shell Dlg 2″=”Tahoma”

      改为:
      “MS Shell Dlg”=”SimSun”
      “MS Shell Dlg 2″=”SimSun”

    7. 修改 ~/.wine/drive_c/windows/win.ini
    8. gedit ~/.wine/drive_c/windows/win.ini
      在文件末尾加入:

      [Desktop]
      menufontsize=13
      messagefontsize=13
      statusfontsize=13
      IconTitleSize=13

  • ruby on rails 命令大全

    2007-7-08

    一.铁道
    1.1 创建一个Rails应用程序
     $ rails app_name
     可选项:
     -d, database=xxx 指定安装一个数据库(mysql oracle postgresql sqlite2 sqlite3 ), 默认情况下是数据库
     -r, ruby-path= 指定Ruby的安装路径,如果没有指定,scrīpts使用env去找Ruby
     -f, freeze (冻结)freezes Rails在vendor/rails目录
     
    1.2 API Documentation
     $ gem_server
     启动一个WEBrick服务器。这时候你可以通过Http://localhost:8808/ 打开浏览器去查看rails API文档
     
    1.3 Rake
     rake db:fixtures:load
      # 载入fixtures到当前环境的数据库
      # 载入指定的fixtures使用FIXTURES=x,y
     rake db:migrate
     # 迁移数据库通过在db/migrate目录下的脚本.可以指定版本号通过VERSION=x
     rake db:schema:dump
     # 创建一个db/schema.rb文件,通过AR能过够支持任何数据库去使用
     rake db:schema:load
     # 再入一个schema.rb文件进数据库
     rake db:sessions:clear
     # 清空sessions表
     rake db:sessions:create
     # 用CGI::Session::ActiveRecordStore创建一个sessions表为用户
     rake db:structure:dump
     # 导出数据库结构为一个SQL文件
     rake db:test:clone
     # 重新创建一个测试数据库从当前环境数据库中
     rake db:test:clone_structure
     # 重新创建测试数据库从开发模式数据库
     rake db:test:prepare
     # 准备测试数据库并在入schema
     rake db:test:purge
     # 清空测试数据库
     rake doc:app
     # 创建HTML文件的API Documentation
     rake doc:clobber_app
     # 删除Documentation
     rake doc:clobber_plugins
     # 删除 plugin Documentation
     rake doc:clobber_rails
     # 删除Documentation
     rake doc:plugins
     # 产生Documation为所有安装的plugins
     rake doc:rails
     # 创建HTML文件的API Documentation
     rake doc:reapp
     # 强制重新创建HTML文件的API Documentation
     rake doc:rerails
     # 强制重新创建HTML文件的API Documentation
     rake log:clear
     # 清空目录log/下的所有日志文件
     rake rails:freeze:edge
     # Lock this application to latest Edge Rails. Lock a specific revision with REVISION=X
     rake rails:freeze:gems
     # Lock this application to the current gems (by unpacking them into vendor/rails)
     rake rails:unfreeze
     # Unlock this application from freeze of gems or edge and return to a fluid use of system gems
     rake rails:update
     # Update both scrīpts and public/javascrīpts from Rails
     rake rails:update:javascrīpts
     # Update your javascrīpts from your current rails install
     rake rails:update:scrīpts
     # Add new scrīpts to the application scrīpt/ directory
     rake stats
     # Report code statistics (KLOCs, etc) from the application
     rake test
     # Test all units and functionals
     rake test:functionals
      # Run tests for functionalsdb:test:prepare
     rake test:integration
     # Run tests for integrationdb:test:prepare
     rake test:plugins
     # Run tests for pluginsenvironment
     rake test:recent
     # Run tests for recentdb:test:prepare
     rake test:uncommitted
     # Run tests for uncommitteddb:test:prepare
     rake test:units
     # Run tests for unitsdb:test:prepare
     rake tmp:cache:clear
     # 清空tmp/cache目录下的所有文件
     rake tmp:clear
     # 清空session, cache, 和socket文件从tmp/目录
     rake tmp:create
     # 为sessions, cache, and sockets创建tmp/目录
     rake tmp:sessions:clear
     # 清空所有在tmp/sessions目录下的文件
     rake tmp:sockets:clear
     # 清空所有在tmp/sessions 目录下的ruby_sess.* 文件
     
    1.4 scrīpts
     scrīpt/about
     # 输出当前环境信息
     scrīpt/breakpointer
     # 启动断点server
     scrīpt/console
     # 启动交换式的Rails控制台
     scrīpt/destroy
     # 删除通过generators创建的文件
     scrīpt/generate
     # -> generators
     scrīpt/plugin
     # -> Plugins
     scrīpt/runner
     # 执行一个任务在rails上下文中
     scrīpt/server
     # 启动开发模式服务器http://localhost:3000
     //以下几个不知道怎么去使用
     scrīpt/performance/profiler
     scrīpt/performance/benchmarker
     scrīpt/process/reaper
     scrīpt/process/spawner
     
    1.5 Generators
     ruby scrīpt/generate model ModelName
     ruby scrīpt/generate controller ListController show edit
     ruby scrīpt/generate scaffold ModelName ControllerName
     ruby scrīpt/generate migration AddNewTable
     ruby scrīpt/generate plugin PluginName
     ruby scrīpt/generate mailer Notification lost_password signup
     ruby scrīpt/generate web_service ServiceName api_one api_two
     ruby scrīpt/generate integration_test TestName
     ruby scrīpt/generate session_migration
     可选项:
     -p, --pretend Run but do not make any changes.
     -f, --force Overwrite files that already exist.
     -s, --skip Skip files that already exist.
     -q, --quiet Suppress normal output.
     -t, --backtrace Debugging: show backtrace on errors.
     -h, --help Show this help message.
     -c, --svn Modify files with subversion. (Note: svn must be in path) 
     
    1.6 Plugins
     scrīpt/plugin discover
     # discover plugin repositories
     scrīpt/plugin list
     # list all available plugins
     scrīpt/plugin install where
     # install the a
  • 《坏蛋是怎样炼成的》[全]

    2007-6-27

    作品相关 题内故事(1)~~智慧

      
      7月15日上午,天空中布满了乌云,让人感觉昏暗,心里象压了快大石头。蒙蒙细雨洒落在大地,清洗城市里的灰尘,空气里充满了新鲜的味道。

      路上行人稀少,就是零星的几人也是步伐匆忙。二中旁边的一家游戏厅却是顾客爆满,里面挤满了人。玩游戏的人满头大汉,嘴里不停的嘟囔着什么。

      这里最火暴的要数扑克机了,输赢只在一瞬间,游戏厅的收入也主要来源于此。人们虽知道它是一个无底洞,但是为了那千分之一的可能性,为了一时的剧烈心跳感,还是无怨无悔的把钱投在它的身上。

    更多内容

    http://post.baidu.com/f?kz=7593356

我的最新图片

我的最新商品

Open Toolbar