像愤青一样回答问题

作为技术版面的版主,回答问题应该让人感觉如沐春风,打不还手,骂不还口,可惜我的境界一直不够。

发信人: lcrystal (小水晶), 信区: Linux
标  题: 如何取得当前系统的进程
发信站: 天大求实BBS (Mon Mar 16 12:41:51 2009), 转信(bbs.tju.edu.cn)

要用c写个函数给java用,接受个参数为系统的进程名,取得当前系统的进程,看这个进程
名是否已经运行,是就返回true,不是返回false

现在的问题是,如何取得系统的所有进程名来比较,用ps的话,我目前只能想到定向到个文
件,然后再读文件,感觉有点不正规,有什么函数可以取得系统的所有进程,返回个
struct什么的,我知道在windows下有这样的函数,不过linux呢?

发信人: yudianzhiyu (yudianzhiyu), 信区: Linux
标  题: Re: 如何取得当前系统的进程
发信站: 天大求实BBS (Mon Mar 16 12:42:55 2009), 转信(bbs.tju.edu.cn)

找本关于linxu下编程的书看看
【 在 lcrystal 的大作中提到: 】
: 要用c写个函数给java用,接受个参数为系统的进程名,取得当前系统的进程,看这个进
程名是否已经运行,是就返回true,不是返回false
: 现在的问题是,如何取得系统的所有进程名来比较,用ps的话,我目前只能想到定向到个
文件,然后再读文件,感觉有点不正规,有什么函数可以取得系统的所有进程,返回个
struct什么的,我知道在windows下有这样的函数,不过linux呢?


发信人: darksun (大个 | 单身主义), 信区: Linux
标  题: Re: 如何取得当前系统的进程
发信站: 天大求实BBS (Mon Mar 16 23:17:41 2009), 转信(bbs.tju.edu.cn)

man一下kill
kill一下init应该就可以
ps:这种问题完全可以用google解决
【 在 lcrystal (小水晶) 的大作中提到: 】
:
: 要用c写个函数给java用,接受个参数为系统的进程名,取得当前系统的进程,看这个进
程名是否已经运行,是就返回true,不是返回false

发信人: lcrystal (小水晶), 信区: Linux
标  题: Re: 如何取得当前系统的进程
发信站: 天大求实BBS (Tue Mar 17 11:35:03 2009), 本站(bbs.tju.edu.cn)

楼上的真没劲,你g一个我看看,你知道windows下的如何写吗?你自己g一下看看,然后再
看看你说的那个和我要的一样吗?

于是乎,我决定如同愤青一样的骂回去,孔老夫子说:“以德报怨,何以报德。”所以我要骂回去,还要骂得有水平!
对解决该问题有兴趣的请参阅引用的两段材料,对8g有兴趣的请直接参阅最后一部分,看电视剧学英语最大的收获就是骂人。

I’m very upset when I finish my work today in 11.p.m. So I’m more upset when I see your words.
This is good answer for you, cause I want to yell sb. & you’re that guy, so I must give you sth. to start the yelling.
about the kill function in linux environment.
——______—–_____—–_____——______—–_____—–_____——______—–_____—–_____——______—–_____—–_____——______—–_____—–_____
10.9. kill and raise Functions
The kill function sends a signal to a process or a group of processes. The raise function allows a process to send a signal to itself.

raise was originally defined by ISO C. POSIX.1 includes it to align itself with the ISO C standard, but POSIX.1 extends the specification of raise to deal with threads (we discuss how threads interact with signals in Section 12.8). Since ISO C does not
deal with multiple processes, it could not define a function, such as kill, that requires a process ID argument.

#include <signal.h>

int kill(pid_t pid, int signo);

int raise(int signo);

Both return: 0 if OK, 1 on error

The call

raise(signo);

is equivalent to the call

kill(getpid(), signo);

There are four different conditions for the pid argument to kill.

pid > 0
The signal is sent to the process whose process ID is pid.

pid == 0
The signal is sent to all processes whose process group ID equals the process group ID of the sender and for which the sender has permission to send the signal. Note that the term all processes excludes an implementation-defined set of system
processes. For most UNIX systems, this set of system processes includes the kernel processes and init (pid 1).

pid < 0
The signal is sent to all processes whose process group ID equals the absolute value of pid and for which the sender has permission to send the signal. Again, the set of all processes excludes certain system processes, as described earlier.

pid == 1
The signal is sent to all processes on the system for which the sender has permission to send the signal. As before, the set of processes excludes certain system processes.

As we’ve mentioned, a process needs permission to send a signal to another process. The superuser can send a signal to any process. For other users, the basic rule is that the real or effective user ID of the sender has to equal the real or effective
user ID of the receiver. If the implementation supports _POSIX_SAVED_IDS (as POSIX.1 now requires), the saved set-user-ID of the receiver is checked instead of its effective user ID. There is also one special case for the permission testing: if the
signal being sent is SIGCONT, a process can send it to any other process in the same session.

POSIX.1 defines signal number 0 as the null signal. If the signo argument is 0, then the normal error checking is performed by kill, but no signal is sent. This is often used to determine if a specific process still exists. If we send the process the
null signal and it doesn’t exist, kill returns 1 and errno is set to ESRCH. Be aware, however, that UNIX systems recycle process IDs after some amount of time, so the existence of a process with a given process ID does not mean that it’s the process
that you think it is.

Also understand that the test for process existence is not atomic. By the time that kill returns the answer to the caller, the process in question might have exited, so the answer is of limited value.

If the call to kill causes the signal to be generated for the calling process and if the signal is not blocked, either signo or some other pending, unblocked signal is delivered to the process before kill returns. (Additional conditions occur with
threads; see Section 12.8 for more information.)
——______—–_____—–_____——______—–_____—–_____——______—–_____—–_____——______—–_____—–_____——______—–_____—–_____

—— This is from the APUE, I don’t know if this is the correct things you are looking for, but I think it can help you a little.
And if you want to get all process by C language, you can look this

——______—–_____—–_____——______—–_____—–_____——______—–_____—–_____——______—–_____—–_____——______—–_____—–_____

/* vi: set sw=4 ts=4: */
/*
* Mini ps implementation(s) for busybox
*
* Copyright (C) 1999,2000 by Lineo, inc.  Written by Erik Andersen
* <andersen@lineo.com>, <andersee@debian.org>
*
*
* This contains _two_ implementations of ps for Linux.  One uses the
* traditional /proc virtual filesystem, and the other use the devps kernel
* driver (written by Erik Andersen to avoid using /proc thereby saving 100k+).
*
*
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple
* Place, Suite 330, Boston, MA 02111-1307 USA
*
*/

#include “internal.h”
#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
#include <errno.h>
#include <fcntl.h>
#include <ctype.h>
#include <sys/ioctl.h>
#define BB_DECLARE_EXTERN
#define bb_need_help
#include “messages.c”

#define TERMINAL_WIDTH  79      /* not 80 in case terminal has linefold bug */

#if ! defined BB_FEATURE_USE_DEVPS_PATCH

/* The following is the first ps implementation —
* the one using the /proc virtual filesystem.
*/

#if ! defined BB_FEATURE_USE_PROCFS
#error Sorry, I depend on the /proc filesystem right now.
#endif

typedef struct proc_s {
char
cmd[16];                                       /* basename of executable file in call to exec(2) */
int
ruid, rgid,                            /* real only (sorry) */
pid,                                           /* process id */
ppid;                                          /* pid of parent process */
char
state;                                         /* single-char code for process state (S=sleeping) */
} proc_t;

static int file2str(char *filename, char *ret, int cap)
{
int fd, num_read;

if ((fd = open(filename, O_RDONLY, 0)) == -1)
return -1;
if ((num_read = read(fd, ret, cap – 1)) <= 0)
return -1;
ret[num_read] = 0;
close(fd);
return num_read;
}

static void parse_proc_status(char *S, proc_t * P)
{
char *tmp;

memset(P->cmd, 0, sizeof P->cmd);
sscanf(S, “Name:\t%15c”, P->cmd);
tmp = strchr(P->cmd, ‘\n’);
if (tmp)
*tmp = ‘\0’;
tmp = strstr(S, “State”);
sscanf(tmp, “State:\t%c”, &P->state);

tmp = strstr(S, “Pid:”);
if (tmp)
sscanf(tmp, “Pid:\t%d\n” “PPid:\t%d\n”, &P->pid, &P->ppid);
else
fprintf(stderr, “Internal error!\n”);

/* For busybox, ignoring effective, saved, etc */
tmp = strstr(S, “Uid:”);
if (tmp)
sscanf(tmp, “Uid:\t%d”, &P->ruid);
else
fprintf(stderr, “Internal error!\n”);

tmp = strstr(S, “Gid:”);
if (tmp)
sscanf(tmp, “Gid:\t%d”, &P->rgid);
else
fprintf(stderr, “Internal error!\n”);

}

extern int ps_main(int argc, char **argv)
{
proc_t p;
DIR *dir;
FILE *file;
struct dirent *entry;
char path[32], sbuf[512];
char uidName[10] = “”;
char groupName[10] = “”;
int len, i, c;
#ifdef BB_FEATURE_AUTOWIDTH
struct winsize win = { 0, 0 };
int terminal_width = TERMINAL_WIDTH;
#else
#define terminal_width  TERMINAL_WIDTH
#endif

if (argc > 1 && strcmp(argv[1], dash_dash_help) == 0) {
usage (“ps\n”
#ifndef BB_FEATURE_TRIVIAL_HELP
“\nReport process status\n”
“\nThis version of ps accepts no options.\n”
#endif
);
}

dir = opendir(“/proc”);
if (!dir)
fatalError(“Can’t open /proc\n”);

#ifdef BB_FEATURE_AUTOWIDTH
ioctl(fileno(stdout), TIOCGWINSZ, &win);
if (win.ws_col > 0)
terminal_width = win.ws_col – 1;
#endif

fprintf(stdout, “%5s  %-8s %-3s %5s %s\n”, “PID”, “Uid”, “Gid”,
“State”, “Command”);
while ((entry = readdir(dir)) != NULL) {
uidName[0] = ‘\0’;
groupName[0] = ‘\0’;

if (!isdigit(*entry->d_name))
continue;
sprintf(path, “/proc/%s/status”, entry->d_name);
if ((file2str(path, sbuf, sizeof sbuf)) != -1) {
parse_proc_status(sbuf, &p);
}

/* Make some adjustments as needed */
my_getpwuid(uidName, p.ruid);
if (*uidName == ‘\0’)
sprintf(uidName, “%d”, p.ruid);
my_getgrgid(groupName, p.rgid);
if (*groupName == ‘\0’)
sprintf(groupName, “%d”, p.rgid);

sprintf(path, “/proc/%s/cmdline”, entry->d_name);
file = fopen(path, “r”);
if (file == NULL)
continue;
i = 0;
len = fprintf(stdout, “%5d %-8s %-8s %c “, p.pid, uidName, groupName,
p.state);
while (((c = getc(file)) != EOF) && (i < (terminal_width-len))) {
i++;
if (c == ‘\0’)
c = ‘ ‘;
putc(c, stdout);
}
if (i == 0)
fprintf(stdout, “[%s]”, p.cmd);
fprintf(stdout, “\n”);
}
closedir(dir);
return(TRUE);
}

#else /* BB_FEATURE_USE_DEVPS_PATCH */

/* The following is the second ps implementation —
* this one uses the nifty new devps kernel device.
*/

#include <linux/devps.h> /* For Erik’s nifty devps device driver */

extern int ps_main(int argc, char **argv)
{
char device[] = “/dev/ps”;
int i, j, len, fd;
pid_t num_pids;
pid_t* pid_array = NULL;
struct pid_info info;
char uidName[10] = “”;
char groupName[10] = “”;
#ifdef BB_FEATURE_AUTOWIDTH
struct winsize win = { 0, 0 };
int terminal_width = TERMINAL_WIDTH;
#else
#define terminal_width  TERMINAL_WIDTH
#endif

if (argc > 1 && **(argv + 1) == ‘-‘)
usage(“ps-devps\n\nReport process status\n\nThis version of ps accepts no options.\n\n”);

/* open device */
fd = open(device, O_RDONLY);
if (fd < 0)
fatalError( “open failed for `%s’: %s\n”, device, strerror (errno));

/* Find out how many processes there are */
if (ioctl (fd, DEVPS_GET_NUM_PIDS, &num_pids)<0)
fatalError( “\nDEVPS_GET_PID_LIST: %s\n”, strerror (errno));

/* Allocate some memory — grab a few extras just in case
* some new processes start up while we wait. The kernel will
* just ignore any extras if we give it too many, and will trunc.
* the list if we give it too few.  */
pid_array = (pid_t*) calloc( num_pids+10, sizeof(pid_t));
pid_array[0] = num_pids+10;

/* Now grab the pid list */
if (ioctl (fd, DEVPS_GET_PID_LIST, pid_array)<0)
fatalError(“\nDEVPS_GET_PID_LIST: %s\n”, strerror (errno));

#ifdef BB_FEATURE_AUTOWIDTH
ioctl(fileno(stdout), TIOCGWINSZ, &win);
if (win.ws_col > 0)
terminal_width = win.ws_col – 1;
#endif

/* Print up a ps listing */
fprintf(stdout, “%5s  %-8s %-3s %5s %s\n”, “PID”, “Uid”, “Gid”,
“State”, “Command”);

for (i=1; i<pid_array[0] ; i++) {
uidName[0] = ‘\0’;
groupName[0] = ‘\0’;
info.pid = pid_array[i];

if (ioctl (fd, DEVPS_GET_PID_INFO, &info)<0)
fatalError(“\nDEVPS_GET_PID_INFO: %s\n”, strerror (errno));

/* Make some adjustments as needed */
my_getpwuid(uidName, info.euid);
if (*uidName == ‘\0’)
sprintf(uidName, “%ld”, info.euid);
my_getgrgid(groupName, info.egid);
if (*groupName == ‘\0’)
sprintf(groupName, “%ld”, info.egid);

len = fprintf(stdout, “%5d %-8s %-8s %c “, info.pid, uidName, groupName, info.state);

if (strlen(info.command_line) > 1) {
for( j=0; j<(sizeof(info.command_line)-1) && j < (terminal_width-len); j++) {
if (*(info.command_line+j) == ‘\0’ && *(info.command_line+j+1) != ‘\0’) {
*(info.command_line+j) = ‘ ‘;
}
}
*(info.command_line+j) = ‘\0′;
fprintf(stdout, “%s\n”, info.command_line);
} else {
fprintf(stdout, “[%s]\n”, info.name);
}
}

/* Free memory */
free( pid_array);

/* close device */
if (close (fd) != 0)
fatalError(“close failed for `%s’: %s\n”, device, strerror (errno));

exit (0);
}

#endif /* BB_FEATURE_USE_DEVPS_PATCH */

——______—–_____—–_____——______—–_____—–_____——______—–_____—–_____——______—–_____—–_____——______—–_____—–_____
it’s the code of ps command in linux environment.
OK, here is the end of the good answers.

——______—–_____—–_____——______—–_____—–_____——______—–_____—–_____——______—–_____—–_____——______—–_____—–_____
Let’s start the bad answer.
Don’t say thanks to me, I cost lots of time to answer this stupid question not for some stupid words which said by stupid people.
I don’t care how the shit Windows API do this function.
I don’t care what function you really want.
And I’m angry when I cost time looking for answer by google.com but received the words ” you’re boring so much.”
by the way, go to hell, “g.cn”.

想卖给Zeiss了

其实我原来很不安分,并不是说蔡司哪里不好,只不过我不知足,理想又太虚幻。

不过这次来大连,我到有点想留在Zeiss了,说原因嘛,可能是因为开眼的机会虽然比较少,但是还是有的。

德国Zeiss过来的老外并没有让我感觉到如何神奇,和绝大多数接触过的德国工程师一样,认真负责且死钻牛角尖。不过这次接触到的东西还是很神奇的。

我们公司的软件功能很强大,我是个实事求是的人,虽然我没用过其他公司的软件,不过我觉得不会有更方便的软件了,当我刚进公司的时候,最感兴趣的是PCM选项,我开始以为是parametre control measurment,后来发现是parametre-code measurment,不过无论是哪个,都是难得的发挥code能力的机会,但是后来慢慢的发现,根本没有机会用到这玩意,这东西很贵,功能对客户来说太强大,对专业人士来说又有很多限制,于是在国内几乎没有机会见到。

不过这次我见到了,虽然依旧有我提到的缺点,但是他们解决了,第一他们有钱,第二他们有时间有条件来使用这个强大的功能,第三他们有超级变态的技术人员把限制搞定了,他们自己写了个软件。

于是乎软件还是我们的软件,限制还是限制,在你的软件里虽然不能做就放到我们的软件来做,如此的简单。也难怪这面的中方负责人很直白的说,我们和你们部门打交道的机会不多,遇到问题都是直接找老外,找你们也解决不了。我一口气就憋在了嗓子眼就说不出话来,的确是实情,虽然并不取决于我们,我们只是个贸易公司,于是这面的领导认为我们是个贸易公司,德国也认为我们只应该是个贸易公司,于是我曾经被人排除在技术类工作之外,我同样无话可说。

就像这次,德国老外从我们这面叫人只是因为他不想做重复性的简单工作,亦或是他们要节约往返的成本,叫我只是为了为将来做准备。而客户这面却想每次都叫这个老外来,我当然可以理解,这个老外一直在做这个项目,就算新机器的安装挺傻逼,验收是走过场,过来个好用的技术人员也可以解决点其他的问题。虽然说中方负责人水平蛮好,我对他的印象也不错,不过他明显不信任我,不过我也习惯了,如果我的供应商派来个工作不到两年的85年小毛孩,说这是我们非常有经验的工程师,就算他高大威武,我也会觉得扯蛋的。不过我无所谓,以后客户不让我来我这次就白来了,等于免费大连游了,附加先进技术参观。不过其实还有点不爽,真的较真的话,老外那个东西给我两个白天我就可以搞清楚了,又不是什么太麻烦的东西,还有一大堆注释让我看。
有些跑题了。客户的软件有自己的名字,不过我没记住,我和德国老外交流时称之为Peter’s Software,据称全部是由一个人搞定的,这个软件到底有多少功能我还没搞清楚,不过看他需要处理的东西来看,光是输入输出的处理就够他写上个半年了,而且老外和我说,每次他来,软件对他来说都是新版本……真是佩服那个老家伙的精力啊……
晚上和老外出去吃饭,找了家稍微好点的饭馆,然后让他付帐,就算出了点意外,也不能连续两天拉着我加班吧,吃饭的时候和他抱怨国内根本没机会用这玩意,他说不只是这一家,他还替另一家客户做过类似的东西,不过也是给瑞典企业做的,强烈怀疑这两家有猫腻。
不管怎么样,总算看到了点方向,虽然希望很渺茫,不过还是有机会发展的,就算不能自己一个人搞定一个软件,超越眼前的这个德国老头还是很easy的,问题就是我不是德国人,我也没有瑞典客户,就算我超过他也不一定能有机会用了。

培训

今天晚上应该是受到客户美好生活的刺激了,怨念了一晚上,稍微冷静点了,于是去看手册(还是不太冷静),忽然想起看的这部分曾经有老外过来给我们培训过,简单的来说,那次的培训是扯蛋,这部分他讲了两天,真正听了有用的也就2个小时,其他的东西没什么好讲的,早就会了,正好公司内部群发了一份培训资料,某教授给某企业做培训的资料,随便翻翻,感觉如同那次培训一样,该会的都会了,很少的一部分可以看一看。问题就是,谁也没办法控制有用部分到底有多少,虽然总是很少。

然后我就想,其实就算是培训一个完全没接触过的东西,效果也是很有限,就如同原来上学,对于我这种智商水平的,老师讲的不是一听就会就是怎么想也想不会(前提是老师讲的没问题)。对于学生,任务就是学会所有的东西,但是对于现在工作的我来说,有重复学习的时间不如进行更有效率的其他内容的学习,也许观点偏激,不过对于我这种还没有人生方向的人来说,学更多的东西可能是发展的好办法。

不过我的确是对形形色色的培训失去信心了。

大连工作初体验

首先是老外——昨天在北京机场接老外,电话打了好几个愣是没找到,最后约在星巴克门口见,结果北京机场里有两个星巴克,不过最后总算找到了。还好,我的英语比以前有进步了,虽然依旧吃力,不过总算可以交流了。老外比较好相处,非常喜欢中国菜,随便什么,标准的死脑筋德国人,看他干活我都累,中间说了次德国国骂,可惜没听懂……

然后是环境——北京从方庄坐机场大巴很方便,走路5分钟就是始发站,而且才16块,简单快捷。北京机场依旧大的像迷宫,安检走到登机口要将近20分钟,大连依旧那个样子,你可以说大连很好很漂亮,但是也不要期望过高,尤其是冬天,不对大连开发区相对于其他城市的来说要繁华了许多。

客户——客户的负责人是我们客户中的传奇人物,的确是闻名不如见面,这年头找个不傻逼的客户太难了,更难得客户有水平,有理想,有追求还有适合他发挥的环境。我真的觉得SKF是个好单位,至少这家伙如果来了Zeiss就废了。
一开始见面就被雷,人家是开着车上班的,最多也就比我大两届吧,然后看名片继续被雷,果然如传言一样,每次我们公司派人来这里,他都会升职。人家工作桌子前面贴着”My Creed”,里面黑体加粗的词条都是Refresh,challenge,honest,never give up,我想了下如果我有什么creed的话,太多的想不起来,可能有三条吧
1.family is important
2.be a nice guy
3.enjoy yourself
看来我是个纯享乐主义者……自惭形秽啊

工作——客户虽然不傻逼,但是工作挺傻逼,干了半天才了解为啥让我过来,老外估计觉得烦了,大老远跑过来干这么傻逼的活,而且一干还得干个五六次,于是乎从中国叫个人过来看,这样后面几次就可以让我来了……我到是无所谓,这活只是重复性有点烦人,和我前两个礼拜的活比,那简直就是高科技啊。不过我看客户的意思,看不上我,还是要让老外来,我无所谓啊,白来大连玩一次……
中间还遇到一次灵异事件,莫名其妙的卡死一次,然后老外充分发挥一根筋的精神,非要重新弄一次,我建议好几次用旧的配置备份试试都不理我,整个重新来,我无所谓啊,反正只是学怎么弄而已,其实给我个文档我自己就可以全搞定了……
反正整个过程就是无聊而且我无所谓……boring & I don’t care…出问题时我问老外what happend?答曰:I don’t know, … , shit happend.
太精辟了,这句名言用这里刚刚好。

旅馆很CD,晚10点以后有成人频道看,10点前可以看看凤凰卫视啥的解闷,当作公费旅游好了……

论我的RP

今天我的RP超级好啊,我的RP总是在不需要的时候超级好,比如今天。

记得上大学,上高中,甚至上初中的时候我就经常遇到如下场景:

——大个,给我讲道题。

——来啦,来啦 ,哪道?

——就这道,我把这个这样完了再那样,就不会做了

——哦,这样啊,你看这里

——哦……我会了,谢谢你啊。

——我还什么都没说呢-_-b

如今我干的活是售后,客户总会有些稀奇古怪的问题,作为技术人员,到现场第一件事就是复现这个错误,这本来是件很简单的事情,对于我不是的,就像今天,我已经试了三个小时了,这台据说总是软件假死的机器却正常的要命,我玩了命的把取点参数调得离谱,照样运行的很欢快,实在无奈了,我RP太好,把电脑镇住了,估计我一走这电脑又该死机了。

一个有问题的人

以前在求实玩大富翁的时候有人和我说这家伙不正常,记得当时好多人在BBS上排挤他,今天发现这丫活该被排挤。

发信人: BMW (蜡笔小新|动感光波哔哔哔哔哔), 信区: Love
标  题: Re: 想生个孩子……
发信站: 天大求实BBS (Fri Mar  6 18:41:58 2009), 本站(bbs.tju.edu.cn)

我可以帮你满足这个愿望,我们工地上有素质的民工不少,只是生个孩子而已嘛,很简单
【 在 annandy 的大作中提到: 】
: 当我还是个孩子的时候
: 我就喜欢孩子
: 但现在觉得想找个人嫁了
: 貌似比找个工作还难……

为什么我不去Worklift版了

因为装13的太恶心了,虽然我知道他写的东西98%是真的,不过真的让我心情变得很坏。

http://bbs.tju.edu.cn/TJUBBS/con?B=Worklife&F=M.1236213537.A

发信人: guethe (该起飞了), 信区: Worklife
标  题: 绷不住了,终于出手买房了!
发信站: 天大求实BBS (Thu Mar  5 08:38:57 2009), 本站(bbs.tju.edu.cn)

不管开发商怎么嘴硬,但是北京的房子真的跌了。两天前,公司附近一个高端楼盘来公
司做活动,扔出了17000的超低价格,真的在公司上下引起了轰动效应,因为离公司只有
1000M不到的距离,而且还是80㎡的小户型,所以下午几乎要踏破了开发商的门槛。
但是由于楼层朝向和户型的原因,对于这个楼盘我很不满意。但是边上一个同样高端的
楼盘价格还稳稳停留在23000。发挥优势,我立刻收集了公司内部相应的需求,拿着17000的
宣传材料,找到了23000的楼盘,一番唇枪舌战,终于中国销售总监的信心被我击溃了,
18000~~~!!楼层朝向随便挑,瞬间我们公司的兄弟们定了10套,他拿着去找董事长批价格
了,周五就有准确消息了。
估计应该问题不大,虽然我不可能过来住,但是,我终于也要有自己的小房了!

这家伙之前还写过多次特别有争议的文章。

我只能说,这家伙生活的和我不是一个世界的,我就不去那个世界待着了。

同样的网页,不同的感觉

如果昨天之前有人对我说,我给你推荐一款网页多人游戏吧,我会在心里鄙视他千百遍,然后把他划分到非主流里,但是今天晚上我发现原来在这种条件下也是可以出现好游戏的。

Quake Live,可以说这是一款100%的网页版Quake3,其实还是我火星了,内部测试早在去年7月就开始了,2月26开始Beta。

先介绍下背景,提起Quake就必须提约翰卡马克,偶像级人物,具体事迹就不说了,说下地位,在显卡刚刚发展的阶段,卡马克是个如同神一样存在的人物,卡马克说, 显卡要支持OpenGL,显卡厂商就要支持OpenGL,卡马克出了款游戏,显卡厂商马上把游戏拿回去研究把显卡针对游戏做优化。就是这么个地位。

玩过Quake3的不妨重温一下,没玩过的不妨尝试一下,尝试后猜猜这是哪年出的游戏,然后去搜索一下答案和你想像的是否接近。

体验:注册很简单,不过因为是刚刚开放,要排队等待服务器发验证邮件,我在队列里排将近5000,等了将近20分钟得到验证邮件,注册成功。然后会提示下载一个小型客户端,Firefox系列3.78M,IE系列6M+,原因不明,我觉得用Firefox好一些,毕竟开发端口完全开放,出的BUG会少一些。

下载完需要安装,重启浏览器后就可以游戏了,如果玩过Quake3,那么所有的设置都是一样的,开始会有一个练习关卡,一个Robot陪你单练来判断你的水平,这个功能很赞,他会随着你的成绩自动更改Robot的AI,比原来的单机版强很多啊。

验证完你的水平就可以参加多人对战了,四种模式,CTF,Team DM,Free For All,1V1,尝试了下FFA,可惜600+的Ping实在没法打FPS,如果以后不在中国放一台服务器,这个就没办法玩联机了,考虑国内这股热潮早过去了,估计希望不大了吧。

去forum上查了下,看来还是有希望在中国放server的,希望release时可以在线PVP~~~

In the next couple of weeks we’ll be adding game servers in:
Toronto, Canada
Spain
China – Likely
Japan – Likely

不过真的搞不清couple是多少,而且还是likely,若干周……哎

我有些贪婪了

刚才看某同学的QQ签名档——生日愿望:煎饼果子,大饼卷圈,豆腐脑,锅巴菜……

他去香港拿奖学金读书去了,我是很羡慕的,不过他也放弃了很多东西,比如说煎饼果子。然后我意识到得到总要伴随失去的,我在初中的时候就知道这点了,不过我总是选择性的失忆,想想我还真是贪婪啊,我对现在的生活没有任何不满,也不想改变现在的生活方式,却又想奢求更多的东西,这根本是不可能的嘛。

the movie – " sexdrive unrated "

I have some problem about my laptop, so I can just enjoy a movie by my old PC.

I chose the sexdrive unrated,  at the beginning the director said it’s better to see the open version in the cinema first, the unrated version is just for fans, I think this is a good movie but I prefer I see the cinema version first.

When I finish the watching, I want to write some comment in 海内 , but I can’t find this movie in their database, maybe the reason is the masked word in the name , or the movie is so “vulgar”. The movie part in the hainei site suck.

I like the movie though it had no more fresh idea than others. But I think this is a good Comedy, and I like the heroine especially cuz she’s my stlye. And, I also get a little knowledge like The Amish, I look up in the wikipedia, I am curious to them. I real agree with “Lance“, if I fall in love with a woman, I can do anything like became a Amish. I am 6 years older than the actor, I want to “see grandma either”….

The Chinese sub has a tiny, weird error, they said missionary position means guys down girls above, which make me feeling so strange.