Friday, February 23, 2007

Graphics program with Javascript

Apple introduced a new HTML tag <canvas> to the world, which endue client-side script language the ability of graphics drawing. Now, Firefox and Opera has implement the <canvas> tag, so the javascript programmer was able to write a rich graphic-based client application.

I've written a simple ball game to show the interactive between javascript graphic app and browser user.

See details : http://ray58750034.googlepages.com/javascriptballgame
See more examples : http://developer.mozilla.org/en/docs/Category:Canvas_examples

Wednesday, February 21, 2007

Topcoder SRM340 DIV II

首先叹一下只能沦落在Div2和Div1的边缘。颇为伤感,以后想做Component了。

多么戏剧性的一场比赛啊,第一题还是很稳健的敲掉了,毕竟DIV2第一题太没搞头了。第二题其实也很简单,但比赛的时候,人就容易犯糊涂。 我把第二题先想成dfs,写完后发觉超时,郁闷。然后越想越复杂,想到了DP,DP的路就越走越远拉。最后是235.85收场。

第二题,其实枚举和贪心就行,巨汗呐。不过在Challenge阶段,表现神勇啊!一路从18冲进前10。主要是靠事前准备的对付第二题dfs的数据,哈哈,果然有用dfs还不知情的,连掐3个 ,HOHO。当时排名第10, score 385.85。

最后的System Test是关键!第三题全军覆没,房间里没人过。第二题就第一个人过了。然后,因为我掐了三个人,所以我的总积分排第二!巨汗啊,居然排到了No2,不枉我通宵比赛,呵呵。总结一下,第二题我其实TEST数据早过了,但由于我确定我的程序不完美,所以我一直不交。看来战术是正确的!如果交了被掐掉,那就很尴尬了。

按规则,这场比赛有奖金可以拿,多少无所谓,只要确实有拿就好。拿到钱得请梁大吃饭!梁大应该是说比我做的好,但是最后也是只有一题过了,再加上没掐,所以分数比我差。当然他们房间的整体实力可能还比我这强一点。

Saturday, February 17, 2007

HSB Color Space

java.awt.Color类有根据HSB色彩空间创建Color的静态方法,今天去查了查。了解了HSB是怎么一个色彩空间,它和RGB又有什么区别,分享一下。

下图的圆锥描述的就是HSB如何表示色彩,相当华丽吧:

Hue:描述色彩,其值为 [0,360) ,是圆锥顶部的圆,其0和360均为红色。另外60为黄、120为绿、180为青、240为兰、300为紫。颜色如彩虹~呵呵。

Saturation:描述饱和度,其值为[0,1]之间的小数,图中是圆锥的轴到圆锥的边缘。取0则是纯白,无论Hue取多少。

Brightness:描述明亮度,其值为[0,1]之间的小数,图中可以说是圆锥的高度,自底向上逐渐明亮。当取0时,色彩为纯黑,无论Hue和Saturation取何值。

参考:
http://www.tomjewett.com/colors/

IE 好龊

微软自家的东西都兼容这么差,IE居然不如Firefox识别能力强。 -_-b

Friday, February 16, 2007

Javascript Menu 代码

只为了显现一个简单的menu,网上搜了不少代码。 但要么就是太复杂,搞得我改都无从改,要么就是不符合我的需求。结果自己静下心 20分钟就搞定了, -_-b ,找了大概2小时啊,汗呐。

非常简单的要求:
  1. 必须是js代码,因为我要实现menu在很多页面里都要用,如果掺了html就要用iframe之类的,iframe毕竟不舒服啊。
  2. 对界面没什么要求,简单的ul和li就行了,css沿用站点的,无须另外配。
  3. 多级目录结构
  4. 每层menu可以是链接,也可以是打开子目录
  5. 可复用,其实就是实现类似jsp的<%@include file="">的作用,只是我没有服务器,所以只好用js啦。
先看效果:



以下是我的代码:

<div id="soya_menus">
</div>
<script language="JavaScript">

var MENU_ITEMS = [
['Ray',{ href : 'http://raythking.blogspot.com/',target : "_blank" }],
['Google',null,[
['Web',{ href : 'http://www.google.com',target : "_blank"}],
['Image',{ href : 'http://images.google.com',target : "_blank"}],
['Video',{ href : 'http://video.google.com',target : "_blank"}]
]
],
['Baidu', null,[
['Index',{ href : 'http://www.baidu.com/',target : "_blank"}],
['Zhidao',{ href : 'http://zhidao.baidu.com/',target : "_blank"}]
]
],
['Sogou',{ href : 'http://www.sogou.com/',target : "_blank"}],
['About',{ href : 'javascript:alert(" This is a simple javascript menu !")',target : "_self"}]
];


function showSubMenu( tolist ){
var sublist = document.getElementById(tolist);

if(sublist.style.display == ""){
sublist.style.display = "none";
}else{
sublist.style.display = "";
}
}

function insertMenu(divarea){
document.getElementById(divarea).innerHTML=createMenu(MENU_ITEMS,"soya_menu");
showSubMenu("soya_menu");
}

function createMenu(menu_it,id_pre){
var html="<ul id='"+id_pre+"' style='display:none;padding-top:8px' >";
for( var i=0 ; i<menu_it.length; ++i){
var sub_id_pre=id_pre+"m"+i;
html += "<li>";
if(menu_it[i][1]){
html += "<a href='"+menu_it[i][1]+"'>";
html += menu_it[i][0];
html += "</a>";
}else if(menu_it[i][2]){
html += "<a href='"+menu_it[i][1].href+"' target='"+menu_it[i][1].target+"'>";
html += menu_it[i][0];
html += "</a>";
html += createMenu(menu_it[i][2],sub_id_pre);
}else{
html += menu_it[i][0];
}

html += "</li>";
}
html +="</ul>";

return html;
}

insertMenu("soya_menus");

</script>

Wednesday, February 14, 2007

不同浏览器下装载js的不同表现

这两天在改blog,因为脑子里又掺了一些杂七杂八的念头,想要实现一下,呵呵。如果这两天有看我blog的话,可能时不时会发觉自动跳框啊或者某个功能怎么没了等等状况。那就是我在改blog,这个时候要找我的话,直接上gtalk就行啦。

为了实现多个浏览器下效果一致,花了不少心血啊。先看看效果吧,见左边的“日程更新”,我的Calendar是以event list形式表示,当然可以有其他选择,这是后话(有空时候再说吧)如果是Firefox的话可以看到边是带弧的,是用的css3,ie和opera下没看出来。ie下还有其他一些css效果也看不出来。不过基本的效果是三个都一样的。

因为涉及要下多个Calendar然后合并的操作,发觉三个浏览器对于js下载和加载的表现各不相同。在做Web可要特别注意了哦,在这我说一下我遇到的情况吧:

情况如下,首先要下载四个Calendar的数据(用Google 的 JSON API),每个下载完回调一个Handle,Handle将数据加入EventList。四个都Handle过了,调用showEventList()。三个浏览器的下载方式应该都是并发的,这点应该没有疑问。每一个Calendar的操作相当于是在一句<script src="****"></script>,加载顺序正好三种浏览器三种方式。


首先是IE,由于对多个Calendar操作,然后用到了一个eventlist,可以想象是多线程在操作一个数据域。IE可以说是完全多线程的,如果给Calendar编号 1 2 3 4,那么在下载完数据后回调的顺序可能是 2 3 1 4 或者 1 3 4 2 等等。另外,用来动态加载这些javascript的那段js与这四个新js也是并发的。这样有两点麻烦:
  1. 时间上难掌握:程序是非顺序的,对于需要顺序完成的任务实现时要加不少辅助变量。
  2. 空间上易出错:由于好几个Calendar的Handle是同一个Handle,这样就要手动控制好变量的同步,容易出现脏数据。

然后是Opera,Opera不论从哪方面讲都适合年轻人使用,充满了朝气!今天的修改其实主要是针对IE的,Firefox和Opera基本上是一致的。但在最后,Opera的一个反常举动让我调了老半天才调出来。
Opera的js装载好象是完全顺序,与IE截然相反。顺序到一个页面的所有script都得一步一步来,就像只有一个线程。如果以原script为 0,四个数据js文件还是 1 2 3 4,那么Opera的执行顺序将是 0 1 2 3 4 0,最后的0是返回原脚本,感觉就是堆栈式的函数调用。就是最后那个返回原脚本,让我措手不及。楞了老半天才发觉。


最后是Firefox,个人觉得,Firefox 更适合用来开发 web 程序。就在今天的修改过程中,无论我怎么改,只要基本的逻辑是对的,那么Firefox的效果始终是如预期的。
以Opera那种假设下来说,Firefox的执行顺序是 0 1 2 3 4。我觉得这样理解好了,Firefox是把script放在页面文件中。装载顺序是从头到尾依次装载的(严格按照js在页面中出现的顺序),js的运行不并发,装一个运行一个结束后再装。几个好处吧:
  1. 更贴近web开发者的正常逻辑。web开发者一般是写页面的时候嵌js,而不是写js的时候嵌页面 。这样Firefox显然比Opera更适合web开发者。
  2. 脚本并行处理(IE)考虑了一块js一个用途的方式时候的效率,但是不适合多个js联合工作,特别是需要时间上和空间上控制的工作。

其实单就用户体验来说,IE可能更受欢迎,毕竟是多线程的,不会因为一个js的错误而导致整个页面僵死。而且就三个浏览器看我blog的速度来说,IE应该是比较快的(除了Opera在有缓存的情况,其缓存给我的印象颇深刻~)。但我还是比较喜欢Firefox,毕竟咱是做“写”工作的人嘛,而且速度这个是可以用不同手段提高的。

最后赞一下Firebug,开发人员的福音啊!

Monday, February 12, 2007

GNU主页,无语了

看了GNU的主页,无语了。



Orz Orz Orz
Orz Orz Orz




http://badvista.fsf.org/
网站 logo ,太牛了,汗呐。


其实学得越多,就越是看到微软的黑手扼杀了多少开放、有活力、有想法的人才和思想。某种程度上,我是满崇拜Gates的,但有时候看到微软做的事情实在是不得不让人发横。
用了这么久了,也该换了~。

Saturday, February 10, 2007

API地图应用大赛

51地图举办的地图API比赛,API确实好用!赞一下51地图。
主要是看中了参与奖是一年的免费《程序员》,不过比赛要五月结束,准确地是说是半年多的《程序员》 -_-b 。

从吃完晚饭到现在,简单地实现了一个idea,先暂时搁在blog上。idea是从新闻里看到现在维修服务(包括小区物业、也包括马路边的公共设施等)讨论得特别多,什么水龙头漏水、空调坏啦、还有道路不方便等等都要报修,好的十几分钟就到,差的搁了几个月也没人管。

所以,我想是不是可以利用地图来做一个“我要修”(不是我要秀)的网站。服务流程如下:
  1. 客户端提供报修,报修人必须提供身份认证,不能让我们的维修工人白忙活,要保证可信度。(认证方法可以替换掉我的sample的身份确认那个输入框,可以用手机号码做为输入)
  2. 身份认证后,报修人标明地点、填写报修详细。标明,可以是输入地点自动标明(比如输入东方明珠,地图可以自动标到东方明珠),也可以手动标记(手动标记就不显示地点名了,改成坐标)。
  3. 确认填写信息无误,发送给服务器端。
  4. 报修中心可以固定时间来看报修情况(比如在人员有充沛的时候),然后选择距离该中心近的点派职工去维修。
  5. 对于报修成功的用户给以虚拟奖励......这是后话。
我这粗略地实现了客户端的地图(当然是用51的API啦),后台是没有服务器端的,毕竟我这只是blog嘛:


自动标记地点

(请输入证件号以便身份确认)



打开城市地图 打开手动标记 提交报修申请




Friday, February 09, 2007

看《落叶归根》后感

说实话,很值得一看,很值得深思的电影。

看过《十面埋伏》、《英雄》、《无极》、《夜宴》,这都什么呀,除了大把大把的丢钱,道具买最贵的,地点找最好的(爽一下,然后留个烂滩),然后讲的都是一些不伦不类的、神经质的、莫名其妙的。最近的《满城尽带黄金甲》可谓是此类影片的颠峰,在帝皇身上乱伦、钱花得看着就心疼。最后一段父亲抽儿子尸体那一段,我气得真想上去抽发哥。不谈也罢,看完之后一点都不想再碰这东西。我说拍艺术么关着门自己看你的艺术不就好了吗,我就一coder有闲的时候才去看看最近宣传什么大片(其实我就看过几部宣传力度比较大的影片),管他艺术不艺术、能让人看了喜欢就好,却看到这么恶心的东西,气死,活活气死。但李连杰在《黄金甲》首映式上的慈善宣传另当别论(艺人,就是要告诉大家什么是好的)。

《落叶归根》的故事就是这么一个感人的故事(明星很多,都是很讨人喜欢的明星),我也是先知道了故事再去看的电影。对原故事里加了许多,特别加了不同的人和不同的事。草草的开头、草草的结尾,故事本身已经很感人的,开头和结尾没什么必要多谈(其实头和结尾就这么回事,能拍什么脚指头也想得出,不拍反而到觉着干净),省下更多的时间给更多的故事。公路电影,就是一边走一边拍,电影的分类就决定了遇到很多人很多事儿。影片中冷漠的人群是一个频繁出现的主题,有时甚至将主角逼到了死胡同,这是社会普遍存在的现象,不好多说什么,因为中国本来人就多、又杂、而且无信仰者居多。所以有那么点现象理论上是成立的,只是叫人心理不舒服。

影片的亮点是好人,并不是所有的好人都是好人。影片开头的劫匪就不是好人,但仗义,坏人或多或少应该有那么一种品格,这样就算是坏但也算是个人了。给自己办葬礼的老头,没有什么特别出挑的看头,不过就是农村人的朴素和真诚,无形之中给人亲切的感觉(让我想起了爷爷和他的老家人,其实本土的上海人基本上都是是乡下人的后代)。去西藏的青年,体现是新青年豁达开朗、乐于助人的一面。轮子,可以说是一个喜剧的片段,导演似乎要告诉人们,人虽然生活在底层,但一样有思想、一样有生活情趣。养蜂人,讲爱情,养蜂人孩子的诗歌,讲爱国情,理发店的打工妹,讲思乡情,和捡破烂的之间的黄昏情,都是一些至真至切的感情。还有双簧,可以说是高潮,之后捡破烂的儿子的故事,让人心酸,也不说什么了,好好爱父母吧。影片中警察的形象一直是公正、正义的。不是说什么拍谁马屁,有两点:其一,现在社会上执法人员丑陋的事情批得太多了(说明某种程度社会进步了),但思考问题不应当片面,只有把好的形象立出来,丑陋的地方才有机会改过来;其二,我想影片主要的收看对象是工农阶级的,如果把执法人员的形象再坏掉,那他们心中的未来、理想何去何从?影片有个小细节,车上的孩子给老赵递了瓶水,是和其他人的一个反差,人性还是善良一点的好呀。

最后要赞一下的沿路的美景,公路电影的一个重要的因素!赞一下祖国山水。比《黄金甲》里那种景色要美得多了,而且不容易产生视觉疲劳等不良影响。

最后搜了一下电影网上的反映,好象票房已经紧逼《黄金甲》了,好评如潮。另外国外应该也有市场,除了主题适合各地华人,毕竟这也是一部真材实料的电影。

Thursday, February 08, 2007

Topcoder Marathon 11

Marathon的System Test也是Marathon式的,等了好久。


最后的Rank终于出来了,Rank 8, Score 388.10, Rating 1565。
第一名好夸张,有好多Case都是超我一倍的呀!赞~


第一次做Marathon,这次的题目是贪吃蛇,郁闷...是比较没新意的题目...个人感觉贪吃蛇运气因素较大(测试数据多的话,当然可以降低偶然性),没有觉得能在每盘上都赢得最高分的算法,但确实应该有能保证在大多数情况下表现出色的算法。
我的算法可以说是偶然性十足 -_-b,我也很纳闷,但就是没法解释,所以只能说偶然。Example Test 15次,Submittion 4次, Submittion的成绩是 30.76 -> 28.44 -> 28.13 -> 27.43 一个比一个差 -_-b (但我的想法好象是一个比一个周密才对呀)。

我的算法的思路是这样的:

Step 1. 将Snake的一次行为(调用 moveSnake())划分为三个小算法, 即计算路径、选路径、移动。

Step 2. 初始化地图我不算在算法里,因为太简单了。计算路径是指,用搜索类的算法,搜索出从Snake到Food的可能路径。

在这一步,我起初使用的是最简单的bfs(就是我得分最高的时候 -_-b)。优点是找到的豆路径最短,缺点是Snake老是擦豆而过,因为路径只关心最短的问题,如果路径上没有经过某个豆,那么即使该豆可以顺便吃掉,Snake也会置之不理。
然后,我改进了算法,使用pfs,以吃到的豆的个数为优先级别进行路径搜索。这样每次都是从吃豆最多的路径继续往下搜,就可以保证将顺路的豆子都能吃掉。结果是,这个pfs每次比bfs走的步数要少,从虚拟程序上看,Snake聪明了许多,但就是吃豆数不见长。

我这有一个我没去实现的算法(因为后面两天都有事),想法是使用多端bfs:Snake头和各个Food各准备一个队列,然后每个循环,依次对每个队列进行扩展。当某个Food队列扩展的路径碰到了Snake的路径,那么Snake到该Food有路;若是Food队列碰到Food队列,那么这两个Food有路。且所有路径最短。改算法的好处是能求出所有最短路径、而复杂度与bfs相同,只是实现有点复杂。

Step 3.选路径,在我自己测试的时候发觉,选路径对于整体结果影响最大!也可以说是偶然性最大的一块。依据Step2中的bfs或者pfs所得到的结果,应该说Snake到Food的路径是固定的,所以就可以说是选下一个受吃的Food。怎么选Food呢?
我给每个Food设置了三个值:
  1. 吃到该Food的路径上顺便可以吃到的Food
  2. 假设Snake吃该Food,那么吃到Food后,Snake的可移动空间,即一次bfs从Food点开始计算空间(要先模拟好Snake吃到Food的位置)。
  3. 该区域内还有多少未吃的Food,即如果Snake逃不出该Area,可能还有多少Food可以吃。
综合上述三点,可以计算出一个优先级。我以Area大小和Snake蛇身长度为主要依据,若蛇身长远远超过Area那么Snake应该说可以有更大的活动,也可以说Snake有机会逃出该Area。再依据Snake吃该Food时顺便吃的Food和该Area潜在的Food同样影响这个优先度。若优先度相似,则可能再吃的Food数量加上顺便吃的Food数量为第二优先级。
在这里,Area的关系十分重要,很明显的,因为Area表示Snake存活概率高,只要活着就不怕没Food吃。
比如下面两个情况:

# ###
#O # #
# #O#

很明显,这些Food是DeathFood,优先级要最低,也就是说实在没Food可吃才吃他们。

对于多端bfs,选择的就不是Food了,而是真正的Path。这个就可能和前面的算法完全不同了,我又没实现多端bfs,而且这个貌似更加复杂,就没深入。。。另一方面是被偶然性搞怕了,深怕花了大半天写的程序结果还不如以前的好。

Step 4.移动,即与平台交互,这个只要认真看看平台文档就行了。另外,为了保持Snake和Food位置与平台同步,自己也要模拟Snake的移动。

附加一个想法,由于Step3提到,Snake吃到Food后的Area问题。所以我考虑是否可以通过预广搜一次,标记所有的Area(或者这里称Prison,也就是整个Area有一个格子负责与外界连着,其他格子均与非此Area的格子无连接)。起算法是,由任意一点,开始bfs,但搜索到的格子只有一个目(类似于围棋的目,就是下面这种情况,X是搜索过的格子,#是障碍物,@就是只有一个目):

XX#
XX@
XX#

这种情况下,将@放入一个Door队列(初始为空)。若搜索第二次遇到@,则@不是Door,标记为搜索过的格子。在待搜索队列为空时,若Door个数大于1,则Area不是Prison,可以再扩展;否则该Area为Prison,同时去除该Door。然后任取一个外面一个没有搜索过的格子再bfs,同样,若搜索到某个Door则取消它Door的资格,否则搜索完再计算Door个数。
可能出现这种情况: Prison - Door - 2个Door的Area - Door ,此时,2个Door的Area不是Prison,但它加上里面的Door和Prison就是一个Prison。可以说是有层次关系的。
总之,算法很复杂,当时摆着电脑楞了许久,最后还是决定先暂时把这个想法搁着 -_-b 。

Sunday, February 04, 2007

07年2月3日

昨天发生了好多事情,实在不得不记录一下。
早晨9点多,手机铃声把我吵醒了,是我母亲打电话过来叫我快点整理东西,他们马上就到,要接我回家了。回家,家离学校不是很远,但第一次感到这么温馨啊,这次是真正的回家了,要开始准备工作、面对家人、步入社会了。

11点多回到家,首先要把小房间整理一下,乱七八糟的东西实在太多了。已经有三年没有怎么动过小房间了,理出了不少回忆。虽然在进大学之前很贪玩,许多回忆之后都让我颇感悔意,但毕竟这是我的历史,不能像日本人那样,咱该承认的就得承认,以下是罪证:

第一张是追星历史,当时特喜欢欧美的组合和歌手,一有他们的新闻就剪下来 -_-b ,最大的那张美女照是至今都满红的小甜甜Britney,收集了最多的是Backstreet Boys的,还有N' sync、Moffatt和HANSON家庭组合,现在把这些剪报都整理在一张小信封里,准备丢了,回想起来当时确实满幼稚的。除了剪报(其实是很小一部分,小得我发现他们的时候都有点惊讶),CD(正版哦,花了不少父母的血汗啊,悔过ing)和海报(基本也撕光了)才是最多的。CD要留着,老价钱的呀,或许将来可以卖个好价钱(嘿嘿)。
第二张是游戏历史,游戏好比毒品...深有体会,高中一直沉迷游戏,单机游戏玩过一点(和游戏大老leaderz比起来实在很少),而毒我的要属网络游戏,而毒得最深的莫过于《石器时代》和《魔力宝贝》了。图片上的红龙盒子是《石器时代》当时榨取人民财富的罪证,当时这样的包还是限量的,我特别预定才买到,记得那时候这东西炒得很热,黑市上200一个都有。结果等热潮过了之后才发现,原来到处都有买,根本不是限量版。而盒子里的东西很少,就是安装必须的东西,再加一个充气玩具,其主打的是虚拟商品,就是包里的抽奖号码可以中一个游戏中的宠物。地上的点卡30元一张啊,照片里应该是1/5都不到的一部分,而我所有的点卡还不到我另一个好朋友的1/5,对不起父母啊 :( 。
最后的一张是小时侯很喜欢玩的四驱车,益智的,满不错,就是要让车子跑得快、跑得稳还是得花钱...

整理完了一大堆的历史遗留问题后,我去邮局把SCJP的证书拿了出来。东西不多,但很考究,用信封里塑料套着,证书底下一块纸板,保证证书不褶皱,摸上去十分平整。一张证明通过认证的卡(现在什么都有卡,不知道是不是带芯片的)、一个SCJP徽章(很小,一不小心就会掉了)、一张证书、一封恭贺信、还有一份使用SCJP LOGO的协议书。最近看SCWCD(只是看看,如果它不出优惠价格,暂时不会想去考,也许等2年SCJP效力快过的时候去考一下),难度也颇低-_-b,像中国应试能力这么强的民族,应该是随考考的。

正看着SCJP LOGO协议,接到肖和立的电话说晚上六点上大ACM聚餐-_-b(4点出头),匆忙给陈胖子等人电话。衣毕,赶上公交前往。真是一年一度的聚餐,去年是殷老大主办的,今年由Larva主办。
晚上来的主要是前辈4人、我们这一届4人、学弟3人。大家因为ACM而聚在一起,虽然都不是很标准的ACM出生,但一起奋斗过,而且都是有能力有干劲的热血青年,而且除了ACM,我们之间也有许多开心或不开心的往事。餐桌上,学弟们说得很少,主要是前辈们给我们解就业之惑及讨论一些热点技术和未来问题。开头的主要新闻是梁老大的女朋友和他拿了Intel多线程比赛冠军,虽然他表现得很低调,但我抢着把他的事情抖了出来。然后谈论殷老大在SAP的经验,还是这么的健谈,学到了不少经验啊。李签的是SAP最大的partner之一,估计下次聚餐或许是小青年请或者是李和殷请啦。张大依然在为中国之崛起而奋斗,赞一下。肖的就业问题成了下一个讨论热点,我对肖的能力认可而不赞同,我和他的关系有点像在大学里我感觉他压着我,而他感觉我压着他。但我不认为我和他有对手关系,这样满无聊的,我觉得人只有把自己作为竞争对手才能发展得更健壮,所以我迫切希望脱离Larva(可能是暂时的)寻求下一个自我的突破点,所以我搬回了家。
ICPC的未来问题上,两位前辈始终在谈论计算机学院的老师和学生关系。而我觉得应该把上大ACM/ICPC推向全校,因为市场和资源在那里,而且只要能拉到赞助,再改变一点形式。这么高端的竞赛一定很有市场(其实就是奥林匹克从一个民族的运动发展到全世界运动的过程)。至于什么要尊重ACM/ICPC选手啦,ACM/ICPC就是尖子的比赛啦都是废话。竞赛的目的不是选尖,选尖是一种针对性很强的活动,大可不必花费如此多的人力就能选出顶尖的人才(比如直接办个招聘会什么的,写明编码速度要多快,算法熟练度要多高,然后拉批人现场考试就行了。更重要的,选尖要突出的是酬金,而不是奖状或什么荣誉,因为没有荣誉可言,对社会并没推动作用,纯粹是个人与主办方之间的事情)。竞赛的潜在意义是交流,特别是高端与低端的交流(因为容易产生鸿沟,就更需要交流)。而交流的目的是为了发展,通过竞赛给参赛者指定一个虚拟目标,所有参赛者为了目标而奋斗,当达到目标的时候社会就进了一步,竞赛可以衍生或扩展原目标。机器人足球竞赛其实是很成功的竞赛,如果50年后,真的能有机器人踢赢人,那它功不可莫,即使没有实现,他对推动人类进去也有重要作用,而他的参赛者都是走在时代前面的人。Topcoder也是很成功的,它的意义有两层,第一层是商业意义(商业是推动社会进步的最大源动力),第二层是他的交流平台,十分开放,对于培养人才相当有帮助。ACM/ICPC初衷很好,花这么大力气举办一次比赛无非是希望能有更多有才华的人加入进来,一起研究和讨论更高效更准确的算法或者代码实现方法。ACM现在不只是美国计算机协会,而是Association for Computing Machinery,就说明其实它的眼光十分远!这一点是美国值得我们学习的。

扯着扯着就扯远了,聚餐始终很愉快,聚餐结束的时候我忘记给各位拜早年了,乘新年还没来,在这里给所有上大ACM新老成员拜个早年,也给能耐心看完我blog的您拜个早年,祝新年身体健康、心想事成。

Tuesday, January 30, 2007

jlGui - Music Player

jlGui ( I guess that jlGui stands for jLayer's Gui ) 是一个java写的音乐播放软件,与当前主流媒体播放器当然还有差距,但其简便和小巧让我印象很深。

  1. 借助Java Web Start部署的应用,虽然很早就知道JWS的思想,也着实为这个idea感到钦佩,但真正的应用并不是很多还。而音乐播放器这一类的应用,用JWS部署是再好不过了!
    比如,我在blog上给个启动jlGui的服务,请确保安装了Java Web Start

    Select Skin (1/6): next
    Custom :
    Select Playlist (1/4): next
    Custom :
    Play Automaticly launch it!


  2. jlGui如其名,只是一个Gui,解码的任务由另一种服务提供(多好的功能分离啊,感动得流泪)。JavaSound集成在JRE中,其采用了SPI( Service Provider Interfaces )允许第三方以插件形式在其基本的JavaSound API下提供新的audio和MIDI资源。而jlGui有MP3SPI作MP3解码和VorbisSPI作OGG解码。

  3. jlGui皮肤采用winamp的皮肤,可以直接使用,但不保证一定好看(呵呵)。

  4. 正因为底层功能被分离了,jlGui本身很小很简单,能够方便地修改与调整。比如既然有JWS的版本,那么Applet自然也是可以的(Applet虽然曾经差点改变世界,但机会给Flash抢走了,所以现在的Applet并不是好选择)。如果开动想象力,应该还有很多种再开发的空间。

更多关于jlGui的信息在 http://www.javazoom.net/
同时,基于jLayer(jlGui的那个开发组的MP3SPI的底层项目)的一个eclipse播放器插件:
http://www.timbaumgartner.de/plugins.html

Monday, January 29, 2007

Google Talk using Gaim

这两天在ubuntu下唯一的不爽就是不能用Gaim上gtalk。不过之前我有给陈胖子和肖叉解决了这个问题。。。但现在居然忘记怎么解决了-_-b

好不容易等到陈胖子上线,问了才知道应该这么设置:
其实gtalk开放不少的端口,比如80,还有他们内部使用的一些

Saturday, January 27, 2007

ubuntu(edgy) xgl安装日记

先是试了好多方法都没能让显卡的3D加速跑起来,然后在ubuntu主页上的一篇文章下随便试了下,本想失败就放弃的,没想到成了~:
http://www.ubuntuforums.org/showthread.php?t=291464
以 deb http://www.beerorkid.com/compiz edgy main-edgy 资源为主

我的显卡是Radeon 9200。
第一步是安装ubuntu给ati显卡配的驱动fglrx:
$ sudo aptitude update
$ sudo aptitude dist-upgrade
$ sudo aptitude install xorg-driver-fglrx
# You will have to do this for every kernel update
$ sudo aptitude install linux-restricted-modules-`uname -r`
$ sudo cp /lib/modules/`uname -r`/volatile/fglrx.ko /lib/modules/`uname -r`/misc/fglrx.ko
$ sudo aptitude remove linux-restricted-modules-`uname -r`
$ sudo depmod -a
# If you know what you are doing, you can just edit xorg.conf manually to use fglrx
$ sudo aticonfig --initial
$ sudo aticonfig --overlay-type=Xv

$ sudo gedit /etx/X11/xorg.conf在xorg.conf添加:
Section "Extensions"
Option "Composite" "0"
EndSection

(补充一条自动检测显卡的命令 "sudo dpkg-reconfigure xserver-xorg")
选择一 重启
选择二 登出到控制台stop gdm, rmmod radeon and modprobe fglrx, 然后start gdm.

用 $ fglrxinfo 查看:
display: :0.0  screen: 0
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: MOBILITY/RADEON 9000 DDR Generic
OpenGL version string: 1.3.1091 (X4.3.0-8.28.8)

或者还有一个很好用的命令
$glxinfo | grep rendering
确定verdering string是ati而不是mesa!我起初就是这里错了。

第二步是安装xgl及一个用于OpenGL的管理工具(compiz或者beryl):
beryl可以从
deb http://ubuntu.beryl-project.org edgy main-edgy 获得
使用apt工具下载并安装其中一个。

第三步是配置:
先配置xgl运行脚本,创建"/usr/bin/startxgl"并添加内容

#!/bin/sh
Xgl :1 -fullscreen -ac -accel xv:pbuffer -accel glx:pbuffer &
DISPLAY=:1
exec dbus-launch --exit-with-session gnome-session

命令 "$ sudo chmod +x /usr/bin/startxgl" 使其可执行
再给xgl创建一个启动session,创建"/usr/share/xsessions/xgl.desktop":
[Desktop Entry]
Encoding=UTF-8
Name=Xgl
Comment=Start an Xgl Session
Exec=/usr/bin/startxgl
Icon=
Type=Application

随后登出,再用xgl的会话登入,然后开启安装的compiz-manager或beryl-manager就可以看到效果了。

郁闷啊,装了半天居然只能看两个效果,而且还时不时crack掉 -_-b。
显卡不行呀,虽然我几乎就是白装了,但希望这篇文章能对正在尝试给ubuntu装xgl的读者有所帮助。
个人觉得两个地方特别要花时间,一个是启动显卡的3D加速(可能NVIDIA会好一点),另一个是找compiz或者beryl的源。

蜜蜂的问题

老blog里比较不舍得丢的文章,移到这里来:

99ACM/ICPC final有一道蜜蜂的坐标的问题,非常有意思,和队友们讨论了许久都没能解决。记得那天做练习是我和肖筹划着用计算几何的方法估算出结果,虽然做法很独特,但毕竟是估算的,最后没有能过。后来我找了份解题报告,看到了解这类问题神奇地使用笛卡儿坐标,着实让人兴奋啊。所以准备了一份模板、数道类似问题和将蜜蜂坐标放在扫雷游戏里的应用,来一个蜜蜂问题的大汇总。


模板放在SHU ACM群里,含有一些处理正六边形拼成的坐标系的方法。

首先,蜂巢是由许多个正六边行无缝拼接而成的,这是一个美丽而奇特的自然结构,如图(图中程序是在解一道题时写的辅助程序,我也放在群与大家分享):


题外话,先来讨论下为什么六边形可以无缝的拼接出一个平面,那么七边、八边行不行?其实是一个简单的小学题: 正n边形内角为 (n-2)*180/n ,要保证可以无缝拼接,就是一个圆可以被整数个n边形内角拼接,即 360=k*(n-2)*180/n => 2n=k(n-2),用这个公式就能算一下是否正n边形能像六边行一样拼出一个平面了。


起初在遇到这样独特的结构时可能无法想象如何将其保存起来,可能会想到是不是做一个带六条链结点的链图?这样做的结果将是一个极难维护的链图,光是想到插入操作就起鸡皮疙瘩。


有一个十分巧妙的方法来储存这个怪异的结构:用二维数组。用二维数组保存四个方向或八个方向的东西肯定是很简单的,其实对于这个六向的结构,我们可以取二维数组的八向中的六向。即东、南、西、北、东北、西南(其实只要注意对称,六向可以随便取),这样相对的坐标向每个方向移动的偏移量就是:

西 东北 西南
x 1 0 -1 0 1 -1
y 0 -1 0 1 1 -1

到底正确与否呢,其实是必然正确的,只是我们损失了两个角(东南、西北),不过不碍事。通过上面这个方法不仅是保存了六边形的怪结构,而且也给这种结构指明了一个坐标表示的方法,在解题中这个概念很重要。


PKU 1134

与蜜蜂坐标没关系的题目,只是样子是六边行的。题目意思是给出三行,每行代表一个方向,然后可以按任意顺序把数字放在这个方向的任意一列中(以abcba的顺序分配到abc里)。归纳一下可以得到以下结论, 最大的得分就是三行分别乘以下面的系数:

1a * 8 + b * 6 + c * 5
2a * 7 + b * 7 + c * 5
3a * 7 + b * 7 + c * 5 。所以枚举一下就可以求出最大值了。


PKU 2265

这是非常简单、易上手的题目,熟悉两种坐标系对于解决蜜蜂问题很有帮助,这两个坐标系也是蜜蜂最常用的坐标,转换的方法就是直接上模板。


PKU 1870

99FINAL的题目,除了用模板里的构造点来构造一个六边形结点(带XY轴坐标)以外,模板里有求两点间最短距离的函数。


求最短距离要以一点为原点,即用一点减去另一点的XY坐标。然后对相对的那个点的两种情况做处理:xy同正同负时,距离是max(|x|,|y|);否则距离为距离是|x-y|。简单得想象一下就知道了。


PKU 1792

1870的升级版,除了要求最短的距离外,还需要求两个点间有多少种路径可以用最短的距离。其实求可能的路径数可以归约为求组合数的问题:


上图为例,在x>0 y>0的区域,最短距离是max(|x|,|y|),图中某点的最短距离很明显是 |x|,然后如何求路径数呢?这样思考,为了能到达那个点,所有路径在两点之间准没错吧(出了两点间的区域就不能最短距离了)。那在最短路径为d的情况下,取d中的一点让它或上或下(只要保证还在两点间的那块区域),不就可以得到一条新的路径?这样,在d中取c个点(c为最大的可变的点,或称关节),就是总路径数。那么总的路径数就是combine(d,c)了。巧合的是c的值情况与最短路径的值情况正好相反,即xy同正同负时,c|x-y|;否则cmax(|x|,|y|)

模板里有个函数实现此功能,不过自己写写也很简单的吧。


PKU 3036

哈,在1792有点类似,不过做法完全不一样的题。求的是从原点出发到达距离为n的地方再回来的路径数。其实知道用动态规划和前面讲的六个方向的坐标的话,这道题目是非常简单的。动规方程见下:


dp[i][x][y] i表示距离原点i步;xy是点的坐标。

 dp[i][x][y]=  dp[i-1][x+1][y] + dp[i-1][x-1][y] + dp[i-1][x][y+1] +dp[i-1][x][y-1] + dp[i-1][x-1][y-1] + dp[i-1][x+1][y+1]
初始dp[0][x][y]都为0dp[0]原点为1。然后开始dp,最后dp[i]原点就是第i步的解。

上面的是比较简单的或基于六向的坐标系的,下面两道比较有意思,是对于此类坐标系的扩充:


PKU 1957

那个辅助程序就是我为了做这道题目而写的,用法是先输入walk,然后按lrotate可左转(正规化过)。

题目的解法很容易想到的,就是先将走过的点放在一个set里,然后做旋转和正规化,直到两个set的元素都相等为止。

依照行走的路线构造点不是件难事,从原点出发。旋转是比较费神的,正规化的话其实就是找出一个最左最右的点作为参照点,所有点减掉它就行了。

旋转可以从两个角度考虑,一是考虑求出了点之后做旋转,二是考虑在将行走路线做旋转然后求点。如果从前种方向考虑的话,会很累,在简单的四向的坐标系中点相对于原点的转动可以通过乘以一个变换矩阵得到,而对于一个六向的坐标系,举个例子:

一个二维数组保存的七个点(O表示该位置无值,X表示该位置是一个六边形结点):

O X X               X X O
X X X ===========> X X X
X X O 乘以变换矩阵 O X X

很明显,旋转后的不是原来使用的六向的坐标表示方法了。当然,调整变换矩阵的话,相信还是有办法解决的,但这毕竟是个较麻烦的活儿。

那么从后者的方向来考虑的话,事情就简单了很多。见下图:

按行走路线进行转换的思想就是上图所表现的,显而易见了吧。代码实现也是相当的简单。即将把原来的a方向的操作改为b方向操作等等。

这样的话,先输入第一种走法,正规化一下。然后输入第二种,做七次旋转(包括不转的那种),每次正规化后再比对两个集合就行了。

PKU 1518

看上去很吓人的题目,跟计算几何又有关系,而且坐标系又是要六向的表示。Take it easy,先来看看一个扫雷游戏吧:


在扫雷游戏中有这样一个问题,鼠标点击了之后要出发事件,事件的参数只有鼠标点击的点的坐标(x,y)。求鼠标点击的是哪块雷区,知道了哪块雷区才可以做相应操作嘛。


通过平面坐标求六边形的坐标的方法其实满多的,在这里介绍一个简单的方法:


首先,要判断点是否在六边形内,经常使用的是用叉乘判断点对于凸边形的每个顶点是左转还是右转可以做到。不过这里不需要这么做,因为六边行都是紧凑得在一起,而且都是正多边形,所以求一下点到每个多边形中心的距离,然后取最小值可以找到它所在的六边形了(如果正好在边上,随便取哪个都一样)。


为了优化一点,不用对每个六边形都求一下它的中心与目标点的距离。可以先从距离估算出目标点的大致位置,然后包括大致位置的六边形在内,相邻的六个六边形再确定出最终点所在的六边形。


估算的方法是简单的计算几何(d是六边形边长,tdsqrt(3)*d/2p是目标点):

x = (int) Math.round((p.x * 2 / (3 * d)));
y = (int) Math.round(((-p.y + x * td) / (2 * td)));

知道了六边行的坐标,接下来的事情就容易了。求两坐标间最短路径,然后路径乘以2*td。再将具体的两个点与六边形中心的距离相加。就是结果了,当然要注意在同一个六边形内的两点是直接计算两点距离。


链接:

Ray's Blog: http://raythking.blogspot.com/
SHU-ACM-Group: http://groups-beta.google.com/group/shu-acm-group
Mineray: https://mineray.dev.java.net/


Friday, January 26, 2007

Topcoder SRM336 DIV II

又回来做Topcoder了,用Ubuntu就是爽啊,又快又华丽,破Windows上Topcoder会有问题。最近Vista的漏洞频频被揭,微软信用大大受损,相反的,Solaris一方面与Intel达成战略合作,另一方面Solaris在争取PowerPC的营地。

学校的网络真是一团糟! 我只能找个HTTP代理,用HTTP的管道上topcoder。时不时就掉下线来。

比赛依然是紧张激烈的,这次是在DIV II 里,rating大概是房间里排第三 1157分。 三道满简单的题目,都是在时间内做出来的:
237.65/250 - 383.94/500 - 0.00/900
其中900的那题,我初次提交是580分好象,后来发现漏了一个case,急啊,赶紧在比赛结束前一分钟改过来(汗,真的是结束前一分钟啊,看着秒数动的,那个心跳啊),得292.85。

challenge阶段网络麻烦不断啊,每每打开别人的代码就会断线,浪费了好多时间。而challenge第一次失败了,虽然我找出了别人的bug,但数据没出好,第二次才成功挑战掉。 我challenge的是900的那道中score有重复的情况,这也是我后来发现自己没考虑到的一个case: {3,3,3} 1 4,如果不考虑重复会得结果 -1,但是正确结果是4。

System Test的最后结果是 900分的Failed,郁闷-_-b,不过还好,还是第三。现在rate 1231, -_-b 再接再历啊。

Monday, January 22, 2007

Sogou 文品

Sogou出了一个测文品的小东西,-_-b:

http://www.sogou.com/labs/wenpin/

颇有创意,确实是个满好玩的东西。
它预先把一些知名作者的文章做分析,然后将贴的文章与作者进行匹配。

匹配的方法我想无非是用词频吧,给出的测试评价似乎千篇一率,是跟匹配的作者相关。
这样的话,他们对每个作者都统计出了一个库。有点个性化的味道了。

十分有创意啊,可惜leen的面试可能没有通过,如果leen能进Sogou,一定要让他推荐我 ^_^。

我的大部分文章怎么都和洪波相似,至少他们方向没做,确实是在IT这块领域的。
Widget和Gadget这篇文章的文品如下:

Ray,您的总体评价:

技术性极强的文字风格,缜密的思维体现在字里行间;富含科技信息量的内容,充实易懂。架构清晰,逻辑性强,情节缜密,可读性强;词藻华丽雅致,文风绚烂;在用词范围方面可以着重下功夫改进。情节缜密题材的小说值得尝试,将推理、悬念、历史的因素掺杂其中;同时也可以尝试杂文、评论等文体。行文时留心描写与情节结构的紧密配合,必然会诞生令人耳目一新的作品。

Ray,您的评测结果:


洪波


100%

哇,这么厉害!说实话,这文章是抄的吧?你可以直接去做枪手啦!

有意思,我也要去试试!

Monday, January 15, 2007

Widgets Or Gadgets... PK!

微软和yahoo两个超级流氓大户铆上了~~ (在CSDN上看到的)

http://microsoft.csdn.net/vista/gadgets-contest/index.aspx

首先,不知道是微软还是yahoo,或者另有其人,发明了在桌面上放小程序。于是,两家公司(有钱啊)往程序员身上砸,砸着砸着就出了两个小东西——widget and gadget

yahoo还是很有头脑的,举办了yahoo widget创意大赛,借此大肆宣传他的widget引擎(从大流氓软件转向小流氓软件)。
不过,微软更是流氓(偶觉得霸道已经不足以形容微软了)。。。。
yahoo widget刚刚结束一个月都不到。。。微软大兴土木地搞起了 Vista Gadget 比赛,比赛网站 做得跟yahoo widget的比赛网站神似~ -_-b
不知道yahoo可不可以凭这个去告微软 窃取yahoo的创意,但我想微软再大的官司都不怕。。。这种挠痒痒的怎么会放在眼里。



由于gadget只能在vista环境下运行,微软不仅是在宣传gadget这个小东西,更是为背后那个大阴谋作铺垫。。。。。。
醉翁之意不在酒,每个参赛者不光是给微软做义务宣传,和开源那套思想不同,做完了宣传,你还得掏钱去买他的系统。

虽然yahoo也不是省油的灯,但确实要为他捏把汗呐。。。。。
人家操作系统都捆绑了 gadget,yahoo的widget还怎么跟他斗。。。。
或者可以学学Netscape,先到linux下窝两年再说吧。。。

给个yahoo widget的主站,祝愿widget挺住:
http://cn.widget.yahoo.com/
最后鄙视一下学校考的微软认证.......一点含金量都没 -_-凸

Friday, January 12, 2007

复习累了,做个预测

今天出现了三个不适:
  1. 头颈痛,左右转起来会很痛。
  2. 眼睛痛,特别是右眼。
  3. 牙齿痛,也许是我思考的时候把牙跟咬太紧了。
从大三(包括大二暑假)开始,就是不停得做项目、做ACM训练,平均一个月大概回去两天可以睡舒服点。记得暑假(整个暑假在学校 -_-b)有一个项目做到一半实在头很痛,所以就暂时退出,回去睡了两天。现在又是30天的考研复习,真不知道能不能挺住。就算挺住了,后面还有两个项目要做( -_-b, 一方面资金开始紧缺,已经和别人约好了一个;另一方面,老师还不等我考研,就已经给我安排好了毕业设计,是做网格渲染的东东,还说好考研结束的后一天就和之前做这个项目的前辈碰头 -_-b )。


不管将来的事了,现在来从我平时的考试上预测预测我考研成绩~,虽然肯定是不准的,但主要目的是放松下心情,希望能讨个好结果,好兆头:

政治:
政治经济 * 20% = 69 *20% = 13.8
毛泽东 *20% = 86 * 20% = 17.2
哲学 *20% = 81 * 20% = 16.2
邓论 *20% = 77 * 20% = 15.4
形式政策 20分 算 10分好了
-----------------------------------
72.6 (明显偏高了-_-|||)

英语: 从91年到05年的考研英语来看,难度与六级相当
四级(难度约考研的 六成) 87.5 * 60% = 52.5
六级(难度约考研的100%)67 * 100% = 67
免修(难度约考研的110%)61 * 110% = 67.1
考研预测 (52.5+ 67 +67.1 )/270%
------------------------------------------
69.1 (差不多)

数学:150=82 + 34 + 34
高数一 75 * 82 / 300 = 20.5
高数二 78 * 82 / 300 = 21.32
高数三 83 * 82 / 300 = 22.69
线性代数 92 * 34 /100 = 31.28
概率论 90 * 34 / 100 = 30.6
---------------------------------------
126.39 (巨汗 -_-b)

数据结构和程序设计:
高级语言程序设计上 86
高级语言程序设计下 89
数据结构一 97
数据结构二 94
算法设计与分析 92
ACM程序设计 99
(和程序有关的就这么多了,呵呵,ACM也算进来吧。还有门图形学90分,不过关系不大。)
(86+89+97+94+92+99)*1.50/6
---------------------------------------
139.25 (虽然有点高。。。但我对数据结构和程序设计颇有信心!恩!)

总分 然后乘以 80%,得出一个预测值:
(72.6 + 69.1 +126.39 + 139.25)* 80% = 325.87

这个分数上大是肯定能进的。。。。
只是预测。。。望成真~~~~

Friday, January 05, 2007

考研——政治 趣题摘要

一寺院门口挂着旗幡,山风吹过, 旗幡飘动。一和尚说是幡动,另一和尚说是风动,惠能说,不是旗幡,不是风动,而是心动。惠能的观点是( 主观唯心论 )

“割下来的手就不再是人的手”这句话体现了 ( 辨证法的部分同整体联系的观点 )

一天,一个叫弗莱明的农夫救了一位身陷泥潭中的小孩。第二天,被救孩子的父亲(是一个贵族)亲自前来致谢。说:“我想用一笔酬金来报答你,你救了 我的儿子。”农夫说:“我不要报答,我不能因为做了一点事情就接受酬金。这是我应该做的。”正在此时,农夫的儿子出来。“这是你的儿子吗?”贵族问道。农夫说:“是。”贵族说:“我给你一个建议,让我把你的儿子带走,我要给他提供最好的教育。如果他像他的父亲,他一定能成为令你骄傲的男子汉。”数年后,农夫的儿子从医学院毕业,成为了享誉全球的医生,他就是青霉素的发明者亚历山大·弗莱明。贵族的儿子,因患肺炎,经过注射青霉素得到了痊愈,他就是英国前首相温斯顿·丘吉尔。这件不足挂齿的事情改变了世界的历史。
———— 说明的是偶然性和必然性的关系。

西邻之人有五子焉。一子朴,一子敏,一子目蒙(失明),一子偻(驼背),一子跛。乃使朴者农,敏者贾,目蒙者卜,偻者绩(将麻搓成绳),跛者纺(纺线),五子者皆不患于衣食焉。
————社会是人与人之间关系的总和;和谐社会,即人与人间建立合理的关系、规则和秩序,它是人与人之间的和谐同一。任何事物都是多样性的同一,是不同方面在相辅相成、相互补充、相互作用过程所构成一个有机整体。

金属货币作为贮藏手段,能自发调节货币流通量的作用,因此金属货币流通条件下通货膨胀不会发生。纸币可能引起通货膨胀。

资本主义农场的劳动资料包括( ACD)
A 土地 B 种子 C 农业机械 D 仓库
种子是劳动对象 -_-b

小王在大学时的专业是计算机技术,大学毕业后顺利地进入一家外资企业,月收入达到5000元人民币。他的同班同学小张,则一直希望到政府部门、事业单位或国有企业工作。大学毕业后,小张如愿以偿地进入了国内一家大型国有企业,月收入是2500元人民币。
问: 小王与小张的劳动收入有什么不同?
答: 小王的劳动收入是按劳动力价值的分配,反映了雇主对工人的剥削关系。小张的劳动收入是社会主义实行按劳分配的结果。-_-b