星期三, 十月 18, 2006

专业与人文

“专业只是谋生的手段,而人文才是生活的本质”。对于一个有远大理想的人并且想依靠专业起步的人来说,专业化道路意味着首先须热爱本专业并以专家为愿景,他必须有一个良好的专业基础(本科课程中的核心课程)和code基础。但仍不足以满其怀,思维开阔,有条理,善于思考是必须的。首先做好每一件事的思维,然后有自我解决问题之道的思维,自信,脚踏实地。
现代社会对人本身的要求很高,表达沟通能力要强,包括中英文的。力臻取完美,做好一件是真的不容易。机会稍纵即逝,总之耐心积累,不可太过急功近利,机会主义者需要耐心。
专业化+机会主义。

星期四, 十月 12, 2006

MYODBC install

./configure --prefix=/usr/local/MyODBC --with-iodbc=/usr/local/iodbc --with-mysql-path=/usr/share/mysql --with-mysql-libs=/usr/share/mysql/lib --with-mysql-includes=/usr/share/mysql/include --enable-shared=yes --enable-static=yes

星期三, 十月 11, 2006

iodbc install

version:3.52.4
./configure --help
./configure --prefix=/usr/local/stow/iodbc --with-gtk --enable-gui && nice make
make install

Linux下软件的安装与卸载

在Windows下安装软件时,只需运行软件的安装程序(setup、install等)或者用zip等解压缩软件解开即可安装,运行反安装程序(uninstall、unware、“卸载”等)就能将软件清除干净,完全图形化的操作界面,简单到只要用鼠标一直点击“下一步”就可以了。而 Linux好象就不一样了,很多的初学者都抱怨在Linux下安装和卸载软件非常地困难,没有像使用Windows时那么直观。其实在Linux下安装和卸载软件也非常简单,同样也有安装向导或解压安装的方式,不相同的只不过是除了二进制形式的软件分发外,还有许许多多以源代码形式分发的软件包,下面就来详细地讲一讲这些软件的安装与卸载:
一、二进制分发软件包的安装与卸载Linux软件的二进制分发是指事先已经编译好二进制形式的软件包的发布形式,其优点是安装使用容易,缺点则是缺乏灵活性,如果该软件包是为特定的硬件/操作系统平台编译的,那它就不能在另外的平台或环境下正确执行。1、*.rpm形式的二进制软件包安装:rpm -ivh *.rpm卸载:rpm -e packgename说明:RPM(RedHat Packge Manager)是RedHat公司出的软件包管理器,使用它可以很容易地对rpm形式的软件包进行安装、升级、卸载、验证、查询等操作,安装简单,而卸载时也可以将软件安装在多处目录中的文件删除干净,因此推荐初学者尽可能使用rpm形式的软件包。rpm的参数中-i是安装,-v是校验,-h是用散列符显示安装进度,*.rpm是软件包的文件名(这里的*.rpm特指*.src.rpm以外的以rpm为后缀的文件);参数-e是删除软件包, packgename是软件包名,与软件包的文件名有所区别,它往往是文件名中位于版本号前面的字符串,例如apache-3.1.12- i386.rpm和apache-devel-3.1.12-i386.rpm是软件包文件名,它们的软件包名称分别是apache和apache- devel。更多的rpm参数请自行参看手册页:man rpm。如果你不喜欢在字符界面下安装或卸载这些软件包,完全可以在X-Window下使用图形界面的软件包管理程序,如glint、xrpm这样的图形接口,或者是KDE的kpackge等,这样对软件包的安装、升级、卸载、验证和查询就可以通过点击鼠标来轻松完成。2、*.tar.gz/*.tgz、*.bz2形式的二进制软件包安装:tar zxvf *.tar.gz 或 tar yxvf *.bz2卸载:手动删除说明:*.tar.gz/*.bz2形式的二进制软件包是用tar工具来打包、用gzip/bzip2压缩的,安装时直接解包即可。对于解压后只有单一目录的软件,卸载时用命令“rm -rf 软件目录名”;如果解压后文件分散在多处目录中,则必须一一手动删除(稍麻烦),想知道解压时向系统中安装了哪些文件,可以用命令“tar ztvf *.tar.gz”/“tar ytvf *.bz2”获取清单。tar的参数z是调用gzip解压,x是解包,v是校验,f是显示结果,y是调用bzip2解压,t是列出包的文件清单。更多的参数请参看手册页:man tar。如果你更喜欢图形界面的操作,可以在X-Window下使用KDE的ArK压缩档案管理工具。3、提供安装程序的软件包这类软件包已经提供了安装脚本或二进制的安装向导程序(setup、install、install.sh等),只需运行它就可以完成软件的安装;而卸载时也相应地提供了反安装的脚本或程序。例如SUN公司的StarOffice办公软件套件就使用名为setup的安装程序,而且在软件安装后提供反安装的功能,目前这种类型的软件包还比较少,因其安装与卸载的方式与Windows软件一样,所以就无需多讲了。
二、源代码分发软件包的安装与卸载Linux软件的源代码分发是指提供了该软件所有程序源代码的发布形式,需要用户自己编译成可执行的二进制代码并进行安装,其优点是配置灵活,可以随意去掉或保留某些功能/模块,适应多种硬件/操作系统平台及编译环境,缺点是难度较大,一般不适合初学者使用。1、*.src.rpm形式的源代码软件包安装:rpm -rebuild *.src.rpmcd /usr/src/dist/RPMSrpm -ivh *.rpm卸载:rpm -e packgename说明:rpm --rebuild *.src.rpm命令将源代码编译并在/usr/src/dist/RPMS下生成二进制的rpm包,然后再安装该二进制包即可。packgename如前所述。2、*.tar.gz/*.tgz、*.bz2形式的源代码软件包安装:tar zxvf *.tar.gz 或 tar yxvf *.bz2 先解压然后进入解压后的目录:./configure 配置make 编译make install 安装卸载:make uninstall 或 手动删除说明:建议解压后先阅读说明文件,可以了解安装有哪些需求,有必要时还需改动编译配置。有些软件包的源代码在编译安装后可以用make install命令来进行卸载,如果不提供此功能,则软件的卸载必须手动删除。由于软件可能将文件分散地安装在系统的多个目录中,往往很难把它删除干净,那你应该在编译前进行配置,指定软件将要安装到目标路径:./configure --prefix=目录名,这样可以使用“rm -rf 软件目录名”命令来进行干净彻底的卸载。与其它安装方式相比,需要用户自己编译安装是最难的,它适合于使用Linux已有一定经验的人,一般不推荐初学者使用。
关于Linux下软件的安装与卸载lanche已经讲了这么多,但可能还会有人问怎么知道一个tar.gz/bz2包是二进制文件包呢还是源代码包?如果你用过压缩工具就会明白,压缩包未必就是软件,它也可能是备份的许多图片,也可能是打包在一起的普通资料,要分辨它到底是什么最好的办法就是查看包里的文件清单,使用命令tar ztvf *.tar.gz / tar ytvf *.bz2或者在X-Window下使用图形化的ArK压缩档案管理工具都可以,源代码包里的文件往往会含有种种源代码文件,头文件*.h、c代码源文件 *.c、C++代码源文件*.cc/*.cpp等;而二进制包里的文件则会有可执行文件(与软件同名的往往是主执行文件),标志是其所在路径含有名为 bin的目录(仅有少数例外)。原来这么简单呀,还不快点自己试试!

星期一, 十月 02, 2006

八皇后递归解法--c#

发信人: CSharp (The RETURN of the King), 信区: Algorithm
标 题: 八皇后递归解法--c#
发信站: 兵马俑BBS (Mon Oct 2 11:22:48 2006), 本站(202.117.1.8)


using System;
using System.Collections.Generic;
using System.Text;

public class Queen8
{
//用于记录行、列和两个斜线上是否有queen
bool[] row, column, firstDiagonal, secondDiagonal;
List all;
public string[] getPlacement()
{
row = new bool[8]; column = new bool[8];
firstDiagonal = new bool[15]; secondDiagonal = new bool[15];
all = new List();
DP(0, "");
return all.ToArray();
}

void doit(int curRow, String curSol)
{
if (curRow == 8)
{
all.Add(curSol);
return;
}
for (int i = 0; i < 8; i++)
{
if (!column[i] && !firstDiagonal[curRow - i + 7] && !secondDiagonal[curRow + i])
{

row[curRow] =column[i] = firstDiagonal[curRow - i + 7] = true;
secondDiagonal[curRow + i] = true;

doit(curRow + 1, curSol + (char)('1' + curRow) + (char)('A' + i));

row[curRow] =column[i] = firstDiagonal[curRow - i + 7] = secondDiagonal[curRow + i] = false;
}

}
}
}

大家努力割题啊,找工作很有用

发信人: Shader (九阴白骨瓜), 信区: ACM_ICPC
标 题: 大家努力割题啊,找工作很有用
发信站: 兵马俑BBS (Sun Oct 1 14:03:11 2006), 本站(202.117.1.8)

这两年我发现一个很有意思的现象,就是一个学校的ACM/ICPC竞赛情况决定了该校生源流入Google, Microsoft, Trilogy等公司的多寡。从Google的新工程师组成情况来看,北大、清华、浙大的占了80%以上。另外据不可靠消息,Trilogy的人员也以浙大、上海交大生源为主。

但事实上,你能不能加入这些公司,是否获过奖并不重要,关键在于你的算法和编码经验。ACM/ICPC是训练这方面能力的最好一个途径,所以既然大家都有这个基础,不妨好好利用一下。

今年Google招聘小组对这次西安之行不是很满意,说大家编码方面还不是很好,碰到个编码好的算法也不是很扎实。不少人写个冒泡排序都写不出来。

其实找一个好工作并不难,现在所有的跨国IT公司不是人太多,而是严重缺人。换句话说,只要你基础足够好,进这些公司根本不是问题。如果你还有些特殊技能(如学术方面有什么成就,刚好又是他们需要的),那你进去就是贵宾待遇。大家也看到了,今年Google试题比去年容易了不少,相信大家知道这暗示着什么。

在基本功里,我觉得最重要的是C++和算法。我建议大家读三本书:

算法:Introduction to Algorithms
这本书太重要了,前面的章节一定要通读,至于网络流,线性规划等偏僻的东西就随便了。后面的练习很重要!尤其是算法设计题,很多面试题都是从这里变过来的。

最后就是多割题了,如果你编码已经很好,设计一个解决方案就行,重要的是训练脑子。

C++:Effective C++/More Effective C++
这套书一定要吃透,看了这本书我才对C++有初步了解。以前虽然写过一些程序,但是基本上是当C用。语言不要学多了,精通一门就好。其实C++应该算最复杂的语言,学好了再学其它语言(包括lisp, python等风格迥异的语言)都是小菜一碟,甚至可以去公司再学。至于编码练习,写个游戏最好,因为里面对象的概念最清楚。

至于考证啦、做网页啦,学时髦语言啦,这个公司并不是很看重,甚至根本不看。当然如果你很有兴趣,可以当作娱乐活动。开阔眼界,好处也是很多的。但不要本末倒置。

希望大家来年找到好工作~