to myself

昨天晚上,本科同学来找我,他今年面临毕业,来北京参加面试,来我这里借住一晚。

我去接他,去超市买了瓶红酒,我们一边喝酒一边聊天,谈大学同学,谈我的工作,谈他即将的选择,谈娶妻生子,谈周游列国。

于是我就想,damn it BBS, go to hell.我有这么好的生活,为什么要让这么无聊的事情影响我的心情,我毕业两年了,我做不到让别人嫉妒我,但是大部分同龄人达不到我的水平,为什么我还要去大学校园搅那趟混水呢?我早就不属于那里了,明年,除了部分读博的同学,天津大学对我来说就是完全陌生的地方了,我为什么还要赖在那里和一群学生吵架呢?

在WOW版的时候,大部分人在讨论如何不花钱的玩游戏,而我不在乎那点钱,我只想靠游戏来放松,而不是省钱。

在Linux版,我早已经厌烦了无数小白的问题以及他们恶劣的态度,态度决定一切,我并不总是刻薄的。

再说这次的事情,我为什么要争呢,我为什么不能宽容一些呢?我总和别人说,你没有权利改变什么的时候你还是有权利退出的,我什么不安安静静的退出呢?我为什么要这么刻薄呢?

那只是一个过于自大的毕业生,也许他刚刚得到了完美的工作或者拿到了录取通知,所以过于兴奋而四处冒犯他人,我完全可以通过正常的手段把他打回原形,为什么要一边炫耀自己,一边暗讽他的无知,在现在的社会,无知也是一种权利。

那只是一个刚刚达成自己梦想的同龄人,虽然他用了三年的时间才拿到了offer,虽然他一直在judge我的生活态度,让我觉得他自我感觉过于良好,不过为什么我不能高兴地看着他人成功呢?即使他有些得意忘形,他可以那么做,他付出了努力得到了回报。

那只是一个大三的学生,他可能像我一样每个月只有300块的生活费,他很努力的想得到这份勤工助学的工作,让自己的校园生活有更多的选择,我为什么要像playman那样自认完人却毁掉其他人的生活呢?

这只是一份300元每个月的工作罢了,即使他们有想法,也无法在那个环境下实施,虽然我认识很多人的能力远远超出那300元每月,不过你并不能期望所有人都能达到那个level。

所以我决定退出这场无意义的争斗,砍不砍号我已经不在意了,我最在意的只有两个地方,Linux和技术站务申请版,技术站务已经没有后继人了,一代不如一代,而且对我来说全是陌生人。Linux虽然我没有做出什么丰功伟绩,我也不是什么技术的引领者,不过我的确把Linux版当做自己的东西来呵护,我想我应该是这个版里最负责任的版主了,就在刚才,我消灭了我在Linux版的所有痕迹,如今的版面已经没有人关注了,我不想我的上千篇有用没用的贴子摆在那,于是删掉吧。

真的没有什么留恋了,对了,我个人文集里有《少女之心》,有人要么?

又遭遇Spam

我很难理解这些人的行为,要说以前的Spam带很多链接,可以提升点击率或者广告收入,那么我也可以理解。

或者说干脆不带链接,只是把网址或者网址变形后打出来,吸引某些人的注意后访问,虽然不那么有说服力,但是也还说的过去。

不过这次简直不可理喻了,完全是乱码,毫无意义的字母组合,难道说只是为了测试防Spam插件能否过滤他们么?莫名其妙。

今天在BBS上和人吵了一架

也不能算是吵,把一个人逗到语无伦次,再逗到暴粗口,其实是一种很病态的享受过程。

我知道这有点病态,不过当BBS只读后我反思了一下,发现这只是我宣泄心情的方法。做为万年的乙方,无论到哪面对的都是客户,遇到通情达理的还好,蛮不讲理也是大有人在,年龄小,工作经验少,还总得被一帮装13的人鄙视。 就算在公司内部,说话也得小心翼翼,生怕惹谁不高兴。于是忽,当我在BBS这块我熟悉的地盘遇到如同我装13客户一样的人时,我就爆发了。我不知道这是为什么,为什么这种人以后总是能处在教训人的位置上呢?难道只是因为他们的脾气太臭所以做不了我这样的工作么?于是这种受气的工作就是我们这种能受气的人做的了?

我不是容易吓到的人,走南闯北的也算经验丰富了,不过被人威胁什么Zaile你全家,这不是论坛上的问题了,我想和你见见面当面解决一类的话,还是感觉怪怪的,希望以后不会遇到这样的客户吧。

理直气壮的做个废物

首先,我是个废物。我的blog只是我用来碎碎念,发泄心情的垃圾堆,我写了无数的抱怨,牢骚,不过总的来讲我还是心理健康的。

 一个往届生的告白

今天看了这个,感触很多,因为其中的很多观点在我心情不好的时候也这么想过。不过有些东西我已经想明白了。

想不通,为什么每一条路都要对我封闭,我到底错了什么,只不过是想读研,单纯地想为了学习而读研。可是,最后的结果却是我连基本的生存问题都无法解决了。

因为你不是这块料,研究生不是随便谁完成当学者的心愿而设立的慈善机构职位,而是要真的搞研究的,国内乌七八糟的制度让很多人觉得自己是读研究生搞学问的料了。同样的,不只是读研,工作,出国都一样。

不知道国家为什么要这样安排,感觉这一年认识的重考的往届生都很优秀,每个人都很好学,每个人都有梦,但是大家的结果却基本相同:压力太大了,考场发挥失常了,考砸了,调剂不了,工作也找不到。

永远不要找全局环境的问题,国家怎么安排都有人活的好好的,你为什么不能当那个人。每个人都很优秀,每个人都很好学,那么为什么都失败了?很简单,因为不够优秀,如果觉得每个人都很优秀,那么只是一个人为了让自己看起来也很优秀而降低了标准线的水平。

感觉我们这些人其实更需要保护,应届生还可以趁这半年去申请校园招聘,还可以去国企。但是我们呢?

独生子女的自恋感实在太强了,总是觉得自己是全世界最倒霉的,就拿重考来讲,有多少人根本没有机会花钱折腾这一年呢?

我是86年9月出生,当初提前上学了一年,我想,如果爸妈当时不要教子心切,让我提前入学的话,我今年也是应届生。

如果说我前面的观点都是扯淡,我觉得也没啥问题,不过这点我觉得我没有错,绝对不要向父母抱怨,更不要自己的问题归结在父母身上,虽然有时我也做这种无意义的蠢事。

这些只是自勉而已,我希望我几年以后回头看的时候能看到这些,人要有自知之明,不要高低自己,更不要低估自己,找到自己的路,而且要量力而行。

像愤青一样回答问题

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

发信人: 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太好,把电脑镇住了,估计我一走这电脑又该死机了。