Aug 6
不知道有多少人注意过标题这句话。其实完整版是:
引用
这是felix021的恶作剧,提醒您IE6很不安全。欢迎光临: http://www.felix021.com

在vista时代,用过IE7,臃肿、缓慢,让我完全没有好感。相反,XP的IE6足够简洁快速,因此即使IE7和IE8都发布了,我都还坚持使用IE6。当然我知道它很不安全,但是真正促使我抛弃IE6的导火索,是它对剪贴板完全没有限制,任何一个网站,都可以轻易地获取/设置你的剪贴板的内容。IE7/IE8也提供这个功能,不过会提示用户是否授权;Chrome/Firefox浏览器则默认禁止此功能。

从那以后我几乎再没用过IE6,同时也想看看这个个不安全特性能做到什么地步,因此写了一个脚本放在博客里头。刚开始的时候这个脚本是很邪恶的,它会随机从十个来访者中抽取一个来访者,将其剪贴板的内容读取并保存在服务器上。过了几天,的确收集到了不少东西(没有密码=。=),但是想想觉得不太厚道,损RP,于是改了改,变成现在这样,每当IE6用户来访,其剪贴板内容都会被替换成前述内容。

然后我几乎就忘了这件事情了,如果不是每个一段时间都有人来我的某个博文留言,内容就是这句话。我想,大概是某个人的剪贴板里有用的内容被我替换了,心里不爽过来烦我吧。刚开始没怎么理会,后来发得多了,见到一条删一条。再后来,心里就琢磨了,不对啊,至于给这么多人留下心理阴影么?

在不久前的某一天,顿悟:原来是那些家伙,用IE6来发广告了。然后再没犹豫过,见一条,删一条。

本以为就这么结束了,但是一次偶然,发现了更囧的情况:这句话不仅仅出现在我的博客上,还出现在其他人的博客,以及与某些博文内容有关的论坛里头……当场就在风中凌乱了…………

这句话,该改了……

点击在新窗口中浏览此图片
Jun 27

技术无用论 不指定

felix021 @ 2010-6-27 04:07 [IT » 其他] 评论(6) , 引用(0) , 阅读(5004) | Via 本站原创
也许我有点悲观,但是在我心里对“成功”的尚未明晰的公式里,“技术”这个变量的权重减少了。当然,这个技术指的是计算机专业技能,而这里的成功,也算是很概念比较宽泛、理解比较狭隘的成功,比如说,有较大的影响力,有自己的事业,赚很多钱(最次)。

记得刚入学的时候,向04级的江学姐(当时她大三)取经,她说,信息安全专业有几个方向,比如网络攻防,密码学……那时虽然啥都不懂,但是还是看过些把黑客描绘得天花乱坠的一些文章,甚至我还存着些看不懂的黑客秘籍。于是我能感觉到自己是两眼放光地说,我对网络攻防很有兴趣。那时懵懵懂懂的,对那些能在网络上呼风唤雨的技术牛人无限葱白。转眼四年过去了,我发现我现在对网络攻防一点兴趣都没有。

作为一个计算机专业本科毕业生(我居然已经不是学生了!),在学校里摸打滚爬了三年多,上课,自学,混社团,接项目,又到公司去实习过半年,还跟几位曾经在IT公司打拼过的朋友保持或紧或松的联系,让我对技术有了新的理解。

技术是什么?这个问题可真是既宽泛又无趣,简直就像“傻逼有什么特征”。也许我可以给个对得上大多数人胃口的、更具体的、不怎么准备的回答:写得一手好代码,有扎实的算法和数据结构功底;开发得出像样的软件或游戏;能管理各种服务器,尤其是熟悉各种网络协议、设备;能用PS设计出精美的图片,能用Flash做出很酷的动画;熟知那些我看来很枯燥的理论,比如图形学或者密码学,发得出几篇论文……这里说到的各个方面每个都和我身边的某个人对应。他们都是大家熟知的牛人(相比之下,我就是个四不像)。

然而在现在的我看来,装B一点的说,我觉得以上都属于较低层次的技术,一个仅仅为吃饭准备的铁饭碗,与其他专业相比没什么值得炫耀的。倒是最牛的那些人,他们可以创造出新的数据结构和算法,比如KMP;他们可以设计(更重要的在于设计)出牛X的系统,比如Google的三驾马车;他们可以不再在某个机器的层次上纠结,甚至设计新的互联网,比如IPv6;他们可以在理论的路上走得更远,但是又不脱离实际。无论什么时候,我对这些牛人的葱白都不会真的减少,因为他们能把这当作自己的追求,实现自己的成功。但是我,也许在未来的某个时候,不会再朝着他们的方向前进。

点击在新窗口中浏览此图片

《程序员的幸福生活之路》这张图片虽是恶搞,却也不乏辛酸的自嘲。在高中捣腾电脑的那阵,就已然听说程序员这活儿,吃的是青春饭,到了三十多岁吃不动了,就会被年轻人挤出来。所以网上传的那段子——“你程序员吧?" "你才程序员呢,你全家都程序员!"——可谓道尽老程序员的苦。当然,如果从二十来岁入行,到了三十多岁还在程序员的位子上原地打转,那也只能说明这人能力不行,优胜劣汰是必然的。然而就算能往上走呢?

能往上走,爬到金字塔的顶端,自然可谓成功。但是很多人都忽略了这前提,能吗?大中公司,诸如百度腾讯等,从一个底层程序员(职位美名为工程师)干起,想要爬到金字塔的中间都是比较困难的事情,何况就算爬到了,也不过是”赚还算比较多的钱“的层次;小公司,爬上去容易,但是大多数小公司无法负担远大的未来。由于信息源的缺失,以及难免的下意识信息过滤,大多数人都只看到成功的辉煌,而几乎没人关注失败者落寞的背影。所谓一将功成万骨枯,金字塔的顶端就P大的地方,想跟着别人从下面爬上去,没准早被别人踹死了。

所以有很多人觉得,爬上别人的金字塔,不如自己造一座,就像不胜数的硅谷梦创造的奇迹。这让我想起电影《雀圣》里面的一句话:都说香港遍地黄金,你知道黄金下面埋着多少尸骸!我们看到了google,看到了facebook,看到了twitter,却看不到被世纪之交那场泡沫淹没的那无数尸骸。那么多成功的典型,引着人们前仆后继。所幸的是,互联网的一波波新潮,带来无限的机会,团购,Dropbox,foursquare等新星的崛起又给人带来无限的希望。顺便说一句,facebook, twitter, dropbox, foursquare和大部分的google服务都被墙了,在目前的体制内想搞出点啥伟大的东西还真没啥希望。

于是话题终于转到了创业。一谈到创业,技术突然就变成很次要的因素了。这里有两篇文章(非常值得一看):《Dropbox 和 Xobni 如何在兩年內從 0 成長到 100 萬會員》  http://feedproxy.google.com/~r/MrJamie/~3/xUGw-48yJII/ 《Dropbox 和 Xobni 在兩年內突破百萬會員的七個關鍵》 http://feedproxy.google.com/~r/MrJamie/~3/RlRwIp_WDX8/ 。里面提到了两年前就让我大流口水的segway车。两年过去了,它离我还是那么遥远,就像摩托罗拉的铱星系统,把他们看成艺术品更合适。这两篇文章讲得很细,但是几乎就没有提起技术相关的事情,甚至还有"反技术"的倾向(Fake It Till You Make It)。其中点出了创业的三大要素:”優秀的團隊、正確的市場和非常好的執行力“。

这让我想起前一段时间参与的、由Ye发起的一个创业型的小项目,抄的是Aardvark的模式。Ye的社会关系比较丰富,找到了在创新工厂的人(Chen)推荐,希望能够拿到创新工厂的投资。由于项目本身还很不成熟,所以最后黄了,但是Ye、Feli他俩与Chen的聊天也透露出了很多信息。创新工厂对一个项目的评价标准并不是技术含量,而是前面提到的:团队、市场、执行力。尤其是在Web2.0的概念下,很难做出他人无法剽窃的核心竞争力了,这时团队和执行力几乎是成功的基本保障了。否则像马蜂一样扑面而来的400多家团购网站,会让人想死……

另一方面,前面顺便说到的那一句,是因为我对国内环境的失望。当年ZF没能意识到互联网的”危害“,放任自流,互联网才能有如此发展。现在发现网络的问题了,对政治监管不断加强加固加猛,忽视行业规范运作,反而放任国家队的进攻……所以本来就高风险的IT创业在国内更加难以捉摸——廉颇老矣,尚能"饭否"?

巴菲特的赚钱哲学是“投资而非投机”。曾有人问巴菲特为什么不投科技类的产业,巴菲特的答案是:“好的公司、不好的公司,是我花半天时间就能够看出来的,而那些花了半天时间看不出来的【比如科技类公司】,我也不会强迫自己花半个多月时间去看。我不会强迫自己花费很多时间在一个我不能“Figure out”的公司上。”在我看来,“投资”和”投机“,只是处理资金、时间等资源时冒险的程度不同。投资是将其投入低风险的领域,而投机则相反。从另一个角度来看,回报和风险又是成正相关关系的,所以这里头的关系还是有点纠缠,看来不是那么容易能说清的,暂且忽略。由于科技类公司通常都是高风险高回报的,更倾向于投机,因而巴菲特选择避开。而对于创业者,创业本身就是一种投资/投机,所以这就有个抉择:是选择科技类(如IT)的高风险高回报,还是选择实业型的稳扎稳打?

所以当我问起一个工作了好几年的朋友将来的打算时,他说,攒够资本,做实业。我想,这决定也许与年龄有关,年轻时冲劲比较大,有足够的时间资本,缺的是资金,只要能拉到,轰轰烈烈的干几年,即使失败也无妨;随着岁月逐渐流逝,梦想淡出,冲动渐冷,还是攒些养家养老的钱比较稳妥。

于我,"Niche First, World Later"正是我一直以来推崇的解决方案。下一步,加入magnetjoy这个创业型的团队,希望接下来三个月的实习能让我对以上提到的内容有新的、更进一步的认识。
Mar 8
zz from http://bbs.sysu.edu.cn/bbstcon?board=CS&file=M.1267951351.A

发信人: kyhpudding (只要衫除实得~), 信区: CS
标  题: IT 民工男的 CS 课程记忆
发信站: 逸仙时空 Yat-Sen Channel (Sun Mar  7 16:42:31 2010), 转信

先介绍下自己, 03CS 本科
在某更懂中文的地方混了两年多, 做社区产品, 后来做基础平台
带项目带新人前端到后端应用到底层跟各部门死磕无处不折腾
每年都为可以公费回广东回来校招, 据说是杀手, 不过我不觉得
最近在一以企鹅为吉祥物的公司继续折腾
此文仅代表个人观点, 也只包含个人经验

聊聊 CS 本科各种课程对实际工程工作,
更准确点, 对典型互联网行业的工程工作的影响
试图回答: 这些课程有啥用? 以及, 为啥面试会问这种 BT 问题?
不过如果你不希望走技术方向, 或者希望折腾一下技术就"转管理"
请忽略这篇文章

首先是数学, 我本科四年最后悔的事就是没把数学学好. 掩面, 这个问题先不谈.

程序设计, 首先是语言问题. 可能大家会抱怨出来工作基本都是 java C# 了, 为毛
大学还在教 C++, 落后! 好吧, 我最熟悉的语言其实是 C 语言......

我们看程序设计担负的任务. 一方面, 你必须掌握一门跟计算机沟通的语言, 否则后面
的课根本没法学. 另一方面, 通过学习程序设计 --- 而不是某一门特定语言, 掌握一些
基础的设计方法和一些思路, 为进行真正的工程开发做准备.

从掌握计算机原理, 以有效利用计算机的角度考虑, 应该选一门相对低级的高级语言,
这自然是 C, 它对于一些底层问题: 硬件, 数据结构, 底层操作系统机制等
提供了合适程度的抽象, 把我们对计算机的认识从底至上衔接起来: 写汇编时, 你得知道
指令对底层硬件的意义; 同样的, 你需要能把 C 的循环, 数组寻址, 指针在汇编上
到底是什么解释清楚, 你需要知道函数调用压栈的到底是什么数据, memcpy 到底怎么
拷的数据 (经典问题). 到学 OS 时, 如果用 linux (或任何 UNIX-like) 做教材样本,
你得有很扎实的 C 语言功底, 才做得来操作系统实验, 或者至少理解系统调用用怎么
完成. C 是系统底层的标准语言, 扎实的 C 语言基础是了解系统底层原理的
敲门砖, 至于为什么要对这些计算机系统底层如此了解的原因, 我们下面再谈.

另一方面的任务, 涉及到许多人每天的工作 --- 程序设计. 两个分支: 数据结构和算法,
软件设计范式, 抽象, 建模现实世界问题, 提供计算机解决. 这要求有一个能让底层细节
不会阻碍思考, 而且相对实用的语言. 越来越多的大学使用 Java, 当然也有不少人讨厌
这个, MIT 使用 scheme 和 python. 从达到教学要求角度看, 我觉得都没什么问题.
前提就是: 你依然得有很好的 C 语言和其他底层知识基础. 数据结构和算法下面我们
还会说到. 设计范式, 抽象, 建模等问题, 相当地困难 (数据结构也是一种抽象方法).
我那时的程序设计书好像就是讲了一堆 C 的知识, 然后后面附加讲了点 "面向对象设计",
其实是在讲 C++ 的语言特性, 非常生硬难懂. 我觉得首先得解决的是一个关于 "如何
抽象问题, 建立模型" 的问题, 而"面向对象" *仅仅是其中一种可选方法*! 而如何使
用语言特性去实现这些抽象方法, 那更是细枝末节. 在这方面, 我还是觉得 MIT 原
6.001 课程 SICP 做得最好, 逐步引导越来越高层的抽象, 一步步教导经典设计思路,
而不是一次过塞给你一坨似是而非的理论以及非常恐怖的语言特性. 至于 design
pattern --- 专指 GoF, 我认为是应该在有相当的开发经验后自行修炼的, 不适宜在
课堂上讲授.

说回来, 我认为程序设计课应该分成两部分: 为了解计算机系统底层原理准备的 C 课程.
以及为学习计算机的高层理论知识提供趁手的高级语言工具. MIT 以前用 scheme,
现在用 python, 两个课程链接:
6.001 SICP
http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-001Spring-2005/CourseHome/in
dex.htm
6.189, 这门课的教材就叫 How to Think Like a Computer Scientist
http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-189January--IAP--2008/Course
Home/index.htm

程序设计是一个 *准备* 课程, 好戏在后头. 在实际开发中, 底层我们用 C/C++
应用层我们用 Java PHP Python 等等等等, 还有各种脚本, 甚至自己设计语言. 从语言
角度, 我不认为深入掌握 C 和 Scheme 的人学习任何还算正常的语言会有多难.
至于应用框架/系统, 那是另一个问题, 有兴趣的自行学习, 许多大公司对此自有一套,
大学不是什么培训机构, 要在课堂上讲这些, 会让人笑掉大牙.

数据结构与算法, 这咚咚每天都要跟它打交道. 基础数据结构, 是这行的通用语言. 面试时
要考察 candidate 是否对此熟练掌握, 其重要考虑就是: 不掌握无以沟通. 没人有功夫
跟你解释 B+ 树是怎么回事, 如果我说这个模块维护了个 B+ 树你看着我一面惘然, 那
大家都会很痛苦, That's it. 当然, 有的数据结构, 比如倒排表, 你没听说过我觉得很
正常, 但我可以三言两语就让你明白这是怎么回事, 你可以马上运用它来解决问题, 那就
行了.

算法 --- 参加 ACM 对此有帮助, 但专门钻研算法的奇怪技巧却没太大帮助. 同理, 一些
基础算法, 例如排序, 是行业通用语言, 不掌握无以沟通. 而每个专业分支都会有其专门
的一些算法, 这些也不是本科计算机课程可以和需要教授的, 本来就应该在工作之后再
学习.

但另一方面, 我们往往需要设计算法 --- 往往是某些算法的变体和结合, 我们更往往要
分析算法复杂度 --- 这是个要命问题. 这是可以在课堂上学习到一些基本方法的, 虽然
会令这门课看起来更难, 而且需要更好的数学知识 (知道我为啥后悔了吧, 顺便说一下,
某大牛的观点, CS 数学是应该学数学分析的, 深以为然). 但我认为, 有基础的人就算
不知道某算法, 也会一听就明白, 并能利用. 但算法分析, 这个不抓紧时间在课堂上学
好, 以后就难了.

算法方面还是建议看 Introduction to Algorithms 吧, MIT 课程
http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-046JFall-2005/CourseHome/ind
ex.htm

微机原理/计组/体系结构. 对我来说, 这些课程的作用就是让我知道, 我折腾的拿个铁
盒子到底是怎么一回事. 考虑一些系统性能问题, 做设计权衡时, 我必须考虑实际的计算
机体系, 各部分的性能状况 --- 有了基础, 还要时刻紧跟随摩尔定律发展的潮流. 我们
必须时常考虑, 硬盘的读写特性是怎样的? Cache 能多有效, 怎么利用多核 etc

操作系统原理, 这是一门核心课程. 在我的工作中, 它有两方面用途. 一方面, 为了实现
高效的低层应用, 我需要清楚操作系统的行为, 需要了解我的 API --- 系统调用的实现
原理, 效率情况. 我这行在服务端通常使用 linux 系统, 而 OS 教学在传统上以 UNIX
为范本, 有的甚至直接采用分析 linux 内核的方法, 这就很好地结合起来了. 基本上,
扎实的 OS 知识, 再加上 APUE, linux 系统编程就问题不大了.

OS 也提供了一些常用的概念和抽象方法: 例如锁, 线程和进程. 你会在各种地方碰到他们
你需要利用它, 你有时候需要自己实现它, 你有时候还会发现一个自旋锁耗掉多少 CPU
指令是影响你的程序性能的关键......

另一方面, 可能是大家容易忽视的, 是 OS 乃一门非常重要的工程入门课 --- 我认为这
才是 OS 最大的意义: 开始学习设计实际系统.
   - 学习一个真正的大型系统. 真实的操作系统都非常复杂, 你可以看到现实世界的
模块划分和抽象方法, 你可以看到闪光的设计思想 --- 以及一些丑陋的既成事实, 这
比任何一本所谓 "设计方法" 的书都来得精彩. ps. 看看 APUE 吧.
   - 分析瓶颈, 考虑权衡: 当你面对的是一个系统而不是一个单一问题点的时候,
分析瓶颈成了一种重要能力. 没有最优算法的说法, 调度方案等等有得必有失, 方案取舍
必须在充分的分析基础上进行. linux 的调度算法, cache 设计是怎么样并不重要.
重要的是: 它为什么要这么设计? 解决什么问题? 这个方案基于什么假设? 对什么有利
而什么不利? 是否与应用模式相吻合? 我们用什么方法来精确测量, 验证这些问题?

这些都是非常重要的工程能力. 我遇到过一位同学, 解决一个模块的性能问题, 上来
看了一通代码, 然后跟我说: 那个函数复杂度是 O(N^2) 可以优化成 O(NLogN) 的,
但实际上那个函数的数据规模只是几十, 更重要的是, 此时模块的瓶颈在 IO. OS 的课程
教会我们这些重要的分析方法, 还有一些非常精妙的设计思路 --- 这会在应用其他地方
用得着.

网络, 这门课同样有两方面意义. 一方面是掌握常识: 我们总得知道什么叫 "四层设备",
总得能分清楚交换机和路由. 当然, 一些网络编程知识也包含其中. 另一方面, 我认为对
协议设计的理解, 尤其是 TCP 设计的理解, 提供了设计分布式系统的基本思路和基本知
识, TCP 的许多设计方法, 在高层次通讯协议的设计中照样适用. 我在文后会给两个例子.

数据库, 我觉得这门课非常难教. 讲理论吧, 讲成数学了. 讲实现吧, 不现实, 讲 SQL?
这不搞笑么? 实际上我们每样都得学点. 数据库跟 OS 课程很相似的一点是: 它是许多
学科重点知识和问题的集中体现, 要看看那些稀奇古怪的知识是怎么用到现实中的?
看看 OS 和数据库吧.

数据库一方面得讲经典的关系理论 --- 基本上只要还是在设计存储系统, 就很难撇得
开它, 这还得有很好的数学基础. 同时也掌握了基本的范式, 基本的设计方法. 在思考
一个实际问题的存储方案时, 这是你的思考起点. 业界这两年流行讲反范式, 或者干脆
讲 NoSQL, No-RDBMS, 不过相信我, 经典的关系理论往往还是你思考的起点.

数据库总会有个地方讲并发, 讲 ACID, 讲事务. 嘿嘿, 欢迎来到业界第一大坑, OS 的
锁知识学好没? 准备了点分布式系统常识没? 准备好了就跳吧. 业界流行对 ACID 进行
取舍, 以达到可扩展性等目的, 我们不是要盲目去接受这些 "流行" 的东西, 我们有
时间在课堂上好好搞清楚 ACID 各为的是什么? 怎么实现? 会有什么问题? 怎么个死锁法?

最好再来点实现内容, 数据库的 index 是个什么原理? 存储具体该怎么实现? 一个查询
语句, 结合 index, 你可以怎么做?

当然我们还是得知道的 SQL 的, 这东西实在太好懂, 表达工具而已, 抠细节则不必.
我想课堂上自然也不会详细讲 MySQL 怎么配置啊, Oracle 有什么 BT 特性啊之类的
东西.

编译原理, 这门课放在本科承载的内容有点杂了. 首先得讲一下基础中的基础, 自动机.
又得讲经典的词法分析语法分析内容. 还得讲怎么编译到机器语言.

从实用角度来讲. 一方面自动机的知识词法语法分析的知识给我们提供解决相关问题
的基本思路 --- 这些都是 CS 最基础的问题. 另一方面就如一开头所说, 我们有时候
不得不设计语言, 在设计语法, 设计解析器的时候, 了解基本的编译原理知识, 并熟练
运用 lex&yacc 成了必须.

至于代码生成的部分, 我不敢说重要性有多高, 但至少我用到过相关的知识.

软件工程, 恕我直言, 这不是应该在 CS 上讲的课程, 至少不应该看得很重. 这有很多
是管理问题, 又有不断更新的新概念, 新理论. 更重要的, 我认为它更多的是 Art,
而不是 Science, 更应该在实际工作中学习积累, 做成选修课不好?
反正放心吧, 无论讲不讲, 你铁定不会一出来就是项目经理的.

我还要推荐 joelonsoftware 的一篇著名文章
Advice for Computer Science College Students
http://joelonsoftware.com/articles/CollegeAdvice.html

最后, 这里提供几个问题, 帮助大家检查一下, 自己的本科学习是否牢固,
以支撑工程需要. 这全部是基本问题, 算法问题就不列了
这不是面试经验, 每个公司的面试都有不同风格,
但解决以下这些问题的能力在我的工作中是必要的.

1. 请实现 memcpy

2. 用 PV 信号量或 mutex, 实现一个读写锁

3. 说说 fread 从一开始到读到磁盘的整个调用过程?

4. malloc 是操作系统内核实现的吗? 实现一对 malloc/free

5. 说说 TCP 三次握手? 为什么是三次? 为什么关闭连接要来四次? SYN Flodd 怎么弄,
怎么预防?

6. 说说 TCP 的滑动窗口机制, 自己实现一下.

7. 设计一个内存垃圾回收方法, 说说它的优势和局限.

8. 假设我已经有一个 B+ 树的存储实现. 请利用它实现一个基本的数据库系统: 针对
某类查询, 如何建 index, 如何执行查询, 如何完成一条更新操作?

补一门 MIT 的工程课, 建议所有希望投入到工程的同学学习
Computer System Engineering
http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-033Spring-2009/CourseHome/in
dex.htm

本科的时间, 不花在学习课程上, 去学习某样流行的技术, 也许能令你找到一份令人
羡慕的工作, 但是别怪我乌鸦嘴, 你很快会是那个抱怨知识更新太快, 跟不上,
年纪大了失去竞争力的人.
--
Just for fun


※ 来源:.逸仙时空 Yat-Sen Channel argo.sysu.edu.cn.[FROM: 112.94.249.26]
※ 修改:.kyhpudding 于 Mar  7 18:40:18 修改本文.[FROM: 112.94.249.26]
Feb 10

WOJ-Land 不指定

felix021 @ 2010-2-10 01:08 [IT » 其他] 评论(1) , 引用(0) , 阅读(5125) | Via 本站原创
决定了毕设做这个东西。WOJ3.0。
起名Land,不是我自己想出来的,忘了是谁贡献的了。之所以叫做Land,看如下的woj名字的演化就知道原因了:D
noah(v1.0) -> oak(ark?)(v1.1) -> flood(v2.0) -> land(v3.0)

去年暑假还写了个不成器的judge然后就荒了,不过也算是打个基础。

这次要更详细地考虑具体的OJ系统架构了。

前端就apache+php吧。如果有空可以试试加一层lighttpd。需要完成的基本功能就是题目相关(包括统计数据),比赛(虚拟比赛?),站内信,题目讨论,后台管理。模板尽量参考Noah的,保持风格统一。这个是代码量最大的,但是应该不难。主要是要实现容易扩展的架构,使得将来增加新功能比较方便,不再需要重写OJ了。

数据库还是MySQL,比较熟。得有个数据转换工具,把noah的数据转过来。

Daemon可以用java,我给oak重写的那个版本拿来改改就能用。

希望有一个judge wrapper负责数据库相关的处理,让judge只负责judge。看起来用php挺好的。

Judge可以在hustoj和之前那个oj的基础上写一个,不过还得有进一步的拆分。每个语言一个judge,因为编译、执行、监控可能都有较大区别。把判断AC/PE/WA的功能和SPJ的功能也独立出来,由wrapper来组装使用。

可能还需要一个补单的,有可能数据库中存在一些还没有judge并且不会再被自动judge的item。

此外有点想搞一个memcached,减轻在比赛时mysql的负担。

目前想到这些,这两天再仔细考虑考虑,就要动手做了。希望有人多提意见和建议。

p.s. 祈祷这个项目不会烂尾...
Nov 24

硬盘和内存的故事 不指定

felix021 @ 2009-11-24 19:49 [IT » 其他] 评论(4) , 引用(0) , 阅读(3941) | Via 本站原创
zz from http://hi.baidu.com/whuisland/blog/item/17ba47ce6920340993457e4b.html

我是一个硬盘。
     在一个普普通通的台式机里工作。别人总认为我们是高科技白领,工作又干净又体面,似乎风光得很。也许他们是因为看到洁白漂亮的机箱才有这样的错觉吧。其实象我们这样的小台式机,工作环境狭迫,里面的灰尘吓得死人。每天生活死水一潭,工作机械重复。跑跑文字处理看看电影还凑活,真要遇到什么大软件和游戏上上下下就要忙的团团转,最后还常常要死机。
Nov 22

今天meyu服务器故障 不指定

felix021 @ 2009-11-22 18:49 [IT » 其他] 评论(2) , 引用(0) , 阅读(4098) | Via 本站原创
丢失了3篇日志和5篇评论。

不过幸好,Google Reader非常称职地保存了我那两篇日志,所以还是恢复过来了,差一个成员函数指针的,现在补一下吧。

看来备份工作还是要多多注意啊!
Nov 19
博客出现这个问题很久了,一直懒得去整。
今天实在觉得不爽了,于是去看了一下blog的attachment.php
发现问题出在这一句:@header("Content-Type: {$contenttype}");
boblog是把附件的扩展名保留,然后用timestamp什么的作为文件名。
然后提供下载的时候自己把扩展名截出来,在自己的$MIMEType数组里找到对应的字符串放到$contenttype这里
我看了一下,也没啥问题,但是只要下载二进制文件就会发现下载下来的文件其实是原始数据被gzip压缩了的。
觉得很奇怪,就算把博客的gzip加速给关了还是有这个问题。
我想这应该是服务器做了手脚吧,强制开启gzip。

总之,注释了那句以后就OK了,原因暂时想不清楚,撂着。
如果有哪位大牛晓得原因,还望告知,多谢。
Sep 16
zz from 康神的Blog @ http://blog.kangkang.net/index.php/archives/229

1、首先记住这句话:永远不要承认自己是高手,因为这个称号是要付出代价的。
2、接到陌生电话后,一定要问清楚对方有什么事情,然后再告诉他(她)当前你目前所在的位置。
3、永远不要试图通过电话或者QQ解决某个问题,对方很有可能不知道菜单是什么东西,这不能怨他们,只能怨你自己,因为你永远懒于解释给他们听。
4、不要想着立马可以解决遇到的问题,因为你所遇到的总是崩溃的系统或者处于崩溃边缘的系统。
5、如果对方允许你重新安装系统,那就不要试着去做任何修复工作,因为重装系统是最快解决问题的办法。
6、除了询问哪些资料需要备份,你不要提问对方任何问题,除非你的心理承受能力特别强。
7、学会保守做人,每次开工前,都记得告诉对方:“我可能无法最终解决问题,还要继续吗?”。
8、对电脑的外观检查永远是第一位的,看看线路是否连接正常,看看USB接口是否连接了其他设备等等。
9、相信硬件的抗噪能力,尽可能的情况下,不要打开对方的机箱。没有做成医生,反倒被当作破坏者,那是很悲哀的事情。
10、做好被别人数落的心理准备,因为不懂电脑知识的人,往往懂得如何评价别人。
11、如果人家说他的内存有200G,你千万不要纠正说是硬盘,否则,你的噩运即将来临。
12、不知道菜单是什么东西的人,一般也会知道虚拟内存是怎么回事的,按照他的要求去调整就可以了,反正这个不会影响到你完成修理工作。
13、告诉对方,你没有任何杀毒软件,否则,您所安装的杀毒软件都是最差的,也是问题最多的。
14、别让自己成为处理打印机故障的高手,告诉你,打印机的麻烦事情可比电脑多多了。
15、坚决不要帮别人购买电脑,尤其是组装机,除非你想背上吃回扣的骂名,然后每天屁颠屁颠的去帮他们处理故障。
16、不要反感以下两句话,它会伴随你很久时间:
第一句:“我的电脑又出大问题了。”
第二句:“你还是过来帮我看看吧。”

另外忠告在办公室工作的朋友,要记住以下几点原则:
1、尽量不要去动别人的电脑,否则,若干天以后,你的这一行动会导致他的系统崩溃并带来埋怨。
2、不要去纠正别人的任何错误,除非你有说服别人的超强能力。
3、尽可能的前提下不要互相传递任何电子文档,因为你的文件很有可能被指责为病毒。
4、不要害怕指责,因为你无法逃避。
分页: 4/7 第一页 上页 1 2 3 4 5 6 7 下页 最后页 [ 显示模式: 摘要 | 列表 ]