谦卑的程序员






         静水流深

November 24, 2008

Windows黑屏事件之后

Filed under: 4.Eric谈软件 — Eric Tou @ 9:11 am
Tags: ,

  黑屏事件过去也有一阵子了。因为至少也曾成为家庭餐桌上的话题之一,说明其影响范围确实波及到了广大人民群众。昨天看电视,头脑风暴节目又开始“严肃认真地”讨论此话题。好歹也算业内人士,便说两句。

 

  目前事件的主基调似乎是微软店大欺客,以黑屏这种不恰当的方式严重伤害了广大人民群众的感情。

  有能力的同志自然不担心,你有政策我有对策,此等小儿科手段还难不倒我等,我就是要继续用盗版。

  稍微搞得清楚状况的同志则开始寻求援助,我这个番茄花园版(对,就是前一阵被抓起来那个)有没有关系啊,哪里可以找到破解的方法啊?

  更多的同志很困惑,我的电脑是在XX电脑城买的,不知道是不是正版的。

  但总得来说你黑我屏幕就是不对的,于是便有了所谓的众怒。

 

  双方的心理活动大致如下
  微软:黑屏不爽你就花钱买正版啊!
  群众:你卖这么贵谁买啊?
  微软:嫌贵你就别用啊!
  群众A:不用这个我用什么啊?
  群众B:盗版有理!
  微软:盗版我就关你小黑屋。
  群众:你动我一下试试,我鄙视你。

 

  其实也不能怪人家微软搞垄断,很多年前,老祖宗买瓷器的时候,也是这么横。只此一家,别无分号。想盗版,门都没有,作坊门口有官兵守着呢。银子白花花地朝里进,换现在的话那叫贸易顺差,连着好几个世纪呢。一直到清朝那时候,才被强盗们大把大把地强了回去。不过现在洋人的瓷器倒是有卖得比咱们的贵,你说这个帐到底该怎么算呢。

  如今易地而处,这盗版,仍是一个海盗心态,你卖得贵,我买不起,买得起也不让你赚我这钱,我便盗,劫富济贫,只是换一种方式罢了。这两天索马里海盗又何尝不是这个口号。我们鄙视某些非洲人“我们穷,因为你们欧洲人殖民侵略我们,所以你们现在援助我们是应该的”的心态,其实盗版的心态又与之何异,弱国小民罢了。

 

  盗版也许能让我们拥有功能强大的软件,成百上千的CD、影碟,极大地开阔了我们的视野,却也使我们丧失了专注。有语云:“警惕那些只读过一本书的人”。看过数百遍星球大战的美国影迷、破纪录通关的日本玩家、用学生版软件开发出作品的印度学生,除了专注之外,没有盗版也是原因之一吧 :-)。

  盗版也许能让外国企业损失一些收益,但却对中国的相关产业造成了更大的伤害。小众的歌手因为唱片发行量萎缩而逐渐淡出,因为盗版。软件行业网游、网站、外包等领域大热,又何尝不是因为盗版。多年的积重导致了绝大多数人似乎都意识不到软件及其他有版权的东西应该是要花钱买的。  

  

  在通过对盗版的有意或无意的纵容获得一定短期利益,实现原始积累后,加强对版权的保护势在必行,是迟早的事情。只是对于决策者来说,从教育和推广各个角度,我们是否和微软这条船绑得太紧了。遥想多年前比尔盖茨访华、一系列的公关、采购案,看看今天大行其道的Windows,Office。价格总是通过供求关系的杠杆来平衡的,可如果有一天,我们不得不问自己:“我们还有其他的选择吗?”那时我们在某些方面将陷入完全的被动。

  当然我们选择是一直存在的。自从我发现了世界上还有一种叫做开源软件的东西以后,便如同发现了一个宝库。似乎耐心寻找,每一个商业软件都能找到一个开源的替代品。更关键的是,它们是免费的。以最常用的网络浏览器、办公软件和操作系统为例:正版的Office太贵,可以用OpenOffice;IE太不稳定,可以用Firefox【注1】;连Windows都不让用了,换Ubuntu Linux。【注2】
  

  不过开源软件虽然和商业软件各有千秋,但免费的午餐并不如此好吃。对于中文的支持,对于现有格式的兼容【注3】,相关支持的可获取度,使用习惯的差异等都使开源软件的推广并不容易。除了对用户的使用水平有一定的要求之外,短期之内造成TCO【注4】的上升是无法避免的事情。

  把电脑里的盗版软件全部请出去不是一朝一夕的事情,开源软件也不可能在所有场合代替商业软件,但现在开始积极地尝试总是件好事,比如为自己每月定一个“无盗版日”或是“开源软件日”“Ubuntu日”。关键不在于我们选择哪一个,而在于我们能够始终有选择。

 

  注1:可以去PortableApps.com下载移动版的OpenOffice和Firefox,PortableApps.com汇集了一些被广泛使用的开源软件,并将其打包成移动版本。可谓是居家旅行必备之法宝。)

  注2:Ubuntu 8.0版本提供了在Windows内安装的功能,可以作为应用程序安装在Windows系统内,并提供Windows和Ubuntu双启动。既免去了安装的复杂繁琐,也方便用户进行试用。

  注3:比如OpenOffice对Word的doc文档并不完全兼容,也有相当部分的网站不兼容Firefox。目前各国际标准组织已经开始通过制定标准的手段来破除这些技术壁垒。

  注4:TCO(Total cost of ownership),总体持有成本。开源软件虽然无需花费金钱购买,但转移至开源软件短期内可能造成时间和精力的大幅投入,导致效率的下降。

November 19, 2008

傻瓜教程:5分钟创建自己的Gtalk机器人

Filed under: 1.2 Web开发 — Eric Tou @ 9:01 am
Tags: , ,

  打开IMified.com,注册。

  打开API文档,直接找到Example Hello World bot部分,将实例代码贴入编辑器,保存为helloworld.php。

 
<?php

switch ($_REQUEST['step']) {
    case 1:
        echo "Hi, what's your name?";
        break;
    case 2:
        echo "Hi " . $_REQUEST['value1'] . ", where do you live?";
        break;
    case 3:
        echo "Well, welcome to this hello world bot, " . $_REQUEST['value1']
               ."<br>from " . $_REQUEST['value2'] . ".<reset>";
        break;
}

?>

  将helloworld.php上传至你的空间。

  登录IMified.com,点击New Application,添加一个新的机器人。

imified_add_bot

  为bot取名,输入之前上传的helloworld.php的url地址。点击“Add new Bot”完成。

  打开Gtalk,添加eric@bot.im为联系人,开始聊天吧。

  看看时间,应该没到5分钟。

—————————— 我是华丽的分隔线 ——————————

  Gtalk采用的是Jabber协议,也就是说能和使用Jabber协议的其他聊天工具互通。

  IMified.com提供API,让你不用去关心Jabber协议。同时还为bot提供服务器。

  helloworld.php中的_REQUEST、step、value、reset很好理解,所以这个bot做的事情也很简单。剩下的只需要发挥想象力:使用PHP能做什么呢?

November 17, 2008

关于Ubuntu Server的root用户

Filed under: 1.9 操作系统 — Eric Tou @ 10:41 pm
Tags: , , ,

环境:Ubuntu Server 8.10

  Ubuntu Server除了在安装的过程中会提示设置第一个用户(非root)的用户名和密码,直至安装完成都完全没有涉及到root用户的设置。root用户的密码是什么,又要如何设置root用户,对于刚刚开始使用的用户来说,比较让人困惑。

概述

  这里是Ubuntu Server的官方文档关于该主题的相关章节,其解释如下:

  Ubuntu开发者决定默认禁用root账号,这并不意味着root账号被删除了或是不能访问。它只是被赋予了一个难以破解的密码,因此不应直接用其登录。

  相替代地,用户被鼓励使用一个名为sudo的工具在执行系统的管理任务,sudo允许被认证的用户通过他们自己的密码临时获取root的权限,而无需知道root帐户的密码。这种简单有效的方法为所有用户的行为提供了可述性,并且给予了管理员诸如一个用户给予特定权限后可以执行那些操作这样的粒度控制。

  默认地,Ubuntu安装时创建的第一个用户属于”admin”组的一员,而”admin”组作为已认证的sudo用户已被添加到了/etc/sudoers文件中。

Sudo简单应用

  使用创建的第一个用户(比如Bob)登录后,如果要执行需root权限的命令,比如reboot,则输入

sudo reboot

  命令执行时会提示输入Bob的密码,在15分钟内有效,即在15分钟内再使用sudo命令无需重复输入密码。

 

  如果因为某些原因需要启用root用户,需要赋予root一个密码

sudo passwd root

  系统会提示输入Bob的密码,并为root设置新的密码

[sudo] password for username: (enter your own password)
Enter new UNIX password: (enter a new password for root)
Retype new UNIX password: (repeat new password for root)
passwd: password updated successfully

 

  使用完毕后,应该立即锁定root用户。

sudo passwd -l root

 

  如果你想要让其他的用户通过sudo获得完整的root权限,你只需要简单地将其加入到admin用户组中即可。比如新用户Sam

sudo adduser sam
sudo adduser sam admin

 

Sudo的特点

  Redhat发行版的Linux中(Redhat,RHEL,Fedora)默认使用的是su,而Debian发行版的Linux中(Debian,Ubuntu)则默认启用了sudo。su为切换用户,在执行命令时实际上是切换为root用户运行,切换时需要输入root的密码。而启用sudo,默认将root用户锁定,密码未知,执行相应命令时输入当前用户的密码,由sudo用户判断是否有相应权限。此外

  1.sudo能够限制指定用户在指定主机上运行某些命令。
  2.sudo可以提供日志,忠实地记录每个用户使用sudo做了些什么,并且能将日志传到中心主机或者日志服务器。
  3.sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机。它默认的存放位置是/etc/sudoers。
  4.sudo使用时间戳文件来完成类似“检票”的系统。当用户执行sudo并且输入密码后,用户获得了一张默认存活期为15分钟的“入场券”(默认值可以在编译的时候改变)。超时以后,用户必须重新输入密码。

  

  以下是一些个人的总结

  安全角度:sudo默认将root锁定,无论是本地、远程,SSH或桌面都无法登录,想要字典暴力破解root基本是不可能,想要破解只能从其他用户下手。首先得知道用户名,其次破解了该用户也未必有足够的权限。

  用户角度:执行命令时需要输入密码以提醒用户再次确认,同时输入密码有一定的有效期,避免了以root登录可以在任何时候做任何事的情况。

  管理角度:可以为不同的用户指定不同的权限(要实现这个还需要进一步学习sudo的配置),而且还可以通过日志记录用户的操作。

November 6, 2008

VMWare克隆后Ubuntu的"No such device eth0"错误

Filed under: 1.9 操作系统 — Eric Tou @ 10:30 pm
Tags: , , , ,

环境:VMWare 6.5,Ubuntu 8.10 Server

  在本地为Ubuntu创建VMWare的虚拟机后,复制,创建一个新的克隆镜像,启动,网卡无效,显示错误”eth0: ERROR while getting interface flags: No such device”。

原因

  新克隆的虚拟机镜像的网卡mac地址已经变更。打开虚拟机的.vmx文件,ethernet0.generatedAddress项记录了该虚拟机的mac地址。

查看所有适配器信息

ifconfig -a

发现除了原来的eth0外,Ubuntu已经将新网卡命名为eth1。
Ubuntu保存网卡mac地址和设备名的配置文件在

/etc/udev/rules.d/70-persistent-net.rules

网卡的网络配置保存在

/etc/network/interfaces

该配置文件中只有原来eth0的配置信息。

 
解决方案1

移动/删除rules文件。(未验证)
重启后Ubuntu会创建新的rules文件。
将新网卡辨认为eth0,沿用原eth0的网络配置。
如果网络配置是自动获取IP,则无需做其他修改。

sudo mv /etc/udev/rules.d/70-persistent-net.rules
    /etc/udev/rules.d/70-persistent-net.rules.old

解决方案2

修改rules文件。(未验证)

sudo pico /etc/udev/rules.d/70-persistent-net.rules

原内容如下

# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*",
    ATTR{address}=="00:0c:29:50:xx:xx", ATTR{type}=="1", NAME="eth0"

# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*",
    ATTR{address}=="00:0c:29:36:xx:xx", ATTR{type}=="1", NAME="eth1"

删除eth1的配置,用eth1的mac地址替代eth0的mac地址。

# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*",
    ATTR{address}=="00:0c:29:36:xx:xx", ATTR{type}=="1", NAME="eth0"

重启后Ubuntu同样会将新网卡辨认为eth0,沿用原eth0的网络配置。
如果网络配置是自动获取IP,则无需做其他修改。

解决方案3

修改interfaces文件。(已验证)

sudo pico /etc/network/interfaces

将所有的eth0替换为eth1。
如果是静态地址则同时修改相应设置。

November 5, 2008

Ubuntu Server网络配置

Filed under: 1.9 操作系统 — Eric Tou @ 8:37 pm
Tags: , , ,

环境:Ubuntu Server 8.10

  Ubuntu Server默认没有安装图形界面,网络配置需通过命令行来完成。

  如果是自动获取IP,Ubuntu会自行完成网络配置。如果要设置静态IP,在安装Ubuntu时或安装完成后都可以进行设置。

1.安装时设置

  用Ubuntu安装光盘启动后,出现选择语言界面,选择后,注意将光标停留在”Install Ubuntu Server”,按F6 – Other Options,在Base Options栏末尾输入

netcfg/disable_dhcp=true

ubuntu_install

  之后的安装过程中会逐步提示输入网络配置信息。

2.安装后设置

2.1 设置主机名

2.1.1 查看主机名

sudo hostname

2.1.2 临时修改主机名,命令执行后即时生效

sudo hostname yourhostname

2.1.3 永久修改主机名,将新的主机名写入,重启系统后生效

sudo pico /etc/hostname

2.2 设置IP地址及网关

2.2.1 查看网络配置,如果返回结果中只有lo,表示网卡未被配置

sudo ifconfig

2.2.2 临时修改IP地址,命令执行后即时生效。系统重启后,恢复原来的设置

sudo ifconfig eth0 xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx

2.2.3 查看路由信息

sudo route

2.2.4 临时修改缺省网关,命令执行后即时生效。系统重启后,恢复原来的设置

sudo route add default gw xxx.xxx.xxx.xxx

2.2.5 临时删除缺省网关,命令执行后即时生效。系统重启后,恢复原来的设置

sudo route del default gw

2.2.6 永久修改IP地址及网关

编辑保存网络配置的interfaces文件

sudo pico /etc/network/interfaces

默认的配置是DHCP自动分配,内容如下

auto eth0
iface eth0 inet dhcp

将其修改为,其中network和broadcast项不是必须

auto eth0
iface eth0 inet static
address xxx.xxx.xxx.xxx
netmask xxx.xxx.xxx.xxx
network xxx.xxx.xxx.xxx
broadcast xxx.xxx.xxx.xxx
gateway xxx.xxx.xxx.xxx

2.2.7 让永久修改后的新配置生效

方法一:重启Ubuntu

sudo reboot

方法二:使用重启networking命令

sudo /etc/init.d/networking restart

方法三:重启网卡,优点是可以指定网卡,不影响其他网络接口

sudo ifdown eth0
sudo ifup eth0

2.3 设置DNS地址

编辑保存DNS信息的配置文件

sudo pico /etc/resolv.conf

最多可以使用3个DNS地址,内容如下

nameserver xxx.xxx.xxx.xxx
nameserver xxx.xxx.xxx.xxx
nameserver xxx.xxx.xxx.xxx

对resolv.conf文件的修改是即时生效的,可以使用nslookup命令进行查询。

WPMU Theme pack by WPMU-DEV.