我的Google Reader分享

Wednesday, January 07, 2009

那个最初的项目重新开始

  去年4,5月份在做的一个网站,当时因为考试和其他方面不足的原因,停了已经有大半年了,可是我还是一直想把它做完了。做这个网站一开始的动机是很简单,就是想在大四毕业的时候,能把这四年来的书送给有需要的学弟学妹们,而不是低价贱卖(我更不可能会带回家,太重了)。做着做着发现这东西的确很有必要,每届学生用的教材都差不多,如果大家都能参与共享和交换,那么可以省下很多的钱,也节省了很多资源(纸很贵,也能少砍掉点树)。当然我担心的是学校是不是愿意了,这些家伙只会收钱。当然这个是后话,我得先把这东西做出来。
  以前我干的时候,CSS是抄袭Github的,因为不懂CSS只是对齐了id和class,现在有点CSS的知识了,可以做些大的修改了,也可能自己设计一个。以前不懂JavaScript,做不出好的效果,现在有点JQuery的知道了,可以搞的更加完美一些。当然重要的还是Rails,半年过去,这家伙又发展了很多新东西,以至于我很多都跟不上了。最近Rails又和Merb合并了,Rails3变化将会非常大,所以现在就得把至今为止的Rails的知识掌握好了,到时候不至于找不着北了。
  明天开始,先整理下CSS结构。原来抄来的很多是JQuery用的,而且有很多我也用不着,整理一下,顺便也算是学习下成熟的CSS写法了。然后,先完成功能,最后加JavaScript。争取在公司放假前把这东西搞定,然后过完年去学校实施。

Wednesday, December 31, 2008

The World is Black

  2008年的最后一天,我也免不了俗来更新一篇日志,作为年终总结。
  2008年,对世界而言,对中国人而言不得不说是难忘的一年,对我而言,只是感觉到了这种难忘,另外我只是在和以前一样在某种不可救药的个人世界中挣扎而已。“要跳要舞”,还是我在这个世界立足的信条。当然,偶尔还是会有“无论如何都没有意思的”的想法,但很快就能被打消掉,要跳要舞。世界是黑色的,只有变的强大才能得到我要的自由。
  2008年,找到了我的道路,也受到了内心的折磨,终归我还是自私到底的人——大多时候自我感觉良好,但偶尔会想到自己的恶心之处,并对自己厌恶不已。比如现在,我看着自己感觉想吐。
  2008年,在我的道路上前进了很多,但我已经不能再用年作为单位来作为进步程度的分母了,我的青春已经所剩不多。高中,以至于大一,大二时候,我还觉得我什么都没有,唯一拥有的就是有大把的时间,但现在我已经什么都没有,当然也包括“大把的时间”。我觉得我的“大把的时间”没有了有两个原因:一是要学习的东西太多,我对技术还有持续的热情,我对小说还是很大的热情,我对中国传统文化还有很大的兴趣;二是游戏,有人说玩游戏是浪费时间,不过说到底,这是我的人生,我要做我喜欢做的事,当然包括游戏。又要学习,又要玩游戏,又要工作,新的一年会更忙。
  2008年,在技术上,从Linux初学者到达中级阶段,对很多计算机的知识运用的更加自然,熟练。在小说上,大概没有看完一本。其他也没有什么进展。进步太小。
  明天开始,2009年开始,对于不用年作为进步程度的分母的我来说,那只能算是普通的一天。2009要完成的事情:
  1. 图书分享交换网站,(1月内最好,最多到2月底)
  2. 多看书,每天看小说或者史书,保证2个小时,至少每个月看完一本吧,(难度较大,我要玩游戏)
  3. 写一本小说,(难度较大,但不是没有可能)
  4. 找一个女朋友,(这个就是随便写写的,我已经对很多东西绝望了,包括爱情,我这么说指是指我自己,我还是相信别人的爱情的。)
  5. 静下心来,
  6. 在技术上更加进步,Linux C, RoR;
  7. 创业?(看机遇与进步的程度吧)
  1,2,3,5,6还是比较靠谱的东西,至于4,7那就看运气吧。



  

Monday, November 03, 2008

Programming Erlang 笔记(四)

Building Lists in Natural Order

The most efficient way to build a list is to add the elements to the head of an existing list────构建一个列表的最有效率的方法是在一个把元素加到一个已有的列表头上(head)。

常见的代码:

some_function([H|T], ..., Result, ...) ->
H1 = ... H ...,
some_function(T, ..., [H1|Result], ...);
some_function([], ..., Result, ...) ->
{..., Result, ...}.


This code walks down a list extracting the head of the list H and computing some value based on this function (we can call this H1); it then adds H1 to the output list Result.────这段代码不断的取出列表H的头(head),然后根据H1这个函数计算它的值;再把它加到输出列表Result的头上。

The basic idea is fairly simple:
1. Always add elements to a list head.
2. Taking the elements from the head of an InputList and adding them head first to an OutputList results in the OutputList having the reverse order of the InputList.
3. If the order matters, then call lists:reverse/1, which is highly optimized.
4. Avoid going against these recommendations.

最基本的思想相当简单:
1.总是把元素加到列表的头上;
2.从输入列表的头上取元素,把元素加到输出列表的头上,这样输出列表中元素顺序和输入列表正好相反;
3.如果顺序对你有影响,调用list:reverse/1,它是高度优化过的;
4.避免违反这几条。

If you ever see code like this:
List ++ [H]
it should set alarm bells off in your brain—this is very inefficient and acceptable only if List is very short.

如果你看到这样的代码
List ++ [H]
你的脑子应该敲响警钟了────这是非常没有效率的而且只能在列表很短的时候才能接受。


Accumulators (我不明白为什么叫这个名字,蓄电池?)

odds_and_evens(L) ->
Odds = [X || X <- L, (X rem 2) =:= 1],
Evens = [X || X <- L, (X rem 2) =:= 0],
{Odds, Evens}.
5> lib_misc:odds_and_evens([1,2,3,4,5,6]).
{[1,3,5],[2,4,6]}


这个要两次遍历

odds_and_evens_acc(L) ->
odds_and_evens_acc(L, [], []).
odds_and_evens_acc([H|T], Odds, Evens) ->
case (H rem 2) of
1 -> odds_and_evens_acc(T, [H|Odds], Evens);
0 -> odds_and_evens_acc(T, Odds, [H|Evens])
end;
odds_and_evens_acc([], Odds, Evens) ->
{Odds, Evens}.


这个只要一次遍历

Wednesday, October 22, 2008

支付宝的霸王面以及之后

  16号去杭电参加支付宝的宣讲会并参加笔试。笔试很郁闷,我本来是要应聘系统工程师的,谁想到系统工程师和Java工程师,UED竟然考的是同一张试卷。考的全是Java和前端的东西,一点都没有考关于操作系统,Linux的东西,很是郁闷。考完后自己感觉还行,觉得自己是应聘系统工程师,前面必答题做的可以考官应该会给机会。
  支付宝是笔试完了以后马上改卷,然后当晚24点以后通知是否有面试机会。因此那天晚上我到1点才睡,然后中途又醒了几次,一直把手机放在脑袋边。不过,遗憾的是,到第二天早上醒来的时候还是没有看到短信的通知。说实话,挺郁闷的。郁闷的继续睡觉。
  大概10点多起来看到Twitter上的Fenng(支付宝大牛,负责系统工程师的面试)讲他那边还没有人去面(这个Tweet发布于1个小时前),我就不要脸的问了他:面试太差。。。连面试通知都没收到。。。话说为什么系统工程师考的全是Java和前端的东西?Fenng大概因为没人去他那边无聊了,回复我:如果觉得自己对操作系统有信心,下午就带简历来一下吧。
  虽然我没什么信心,我还是去了。。。
  我进去面的时候,Fenng貌似就已经知道我就是Twitter上那个人了,看来面系统工程师的人还真是够少。我问:我这也算是霸王面了吧。。。Fenng答:其实也不算,你不是说考的全是Java的么。问:找出/foo下大于1m的文件。答:du -s /foo/* | sort -nr,几天后才醒悟应该用find来找。大概问了一些基础知识,看了下简历,觉得我学习能力还行,其他的就都马马虎虎了。中途问我应该不应该给我二面的机会,我说应该。。。(脸皮厚的。。)。还真给了我二面。。。
  二面是个胖胖的蛮面善的大叔。问了一些奇怪的问题:做过的最冒险的事情是什么啦,杭州市有多少个应井盖啊什么的。还和我聊了英雄无敌V。。。大概他学生时代玩过那游戏,不过想必他也没玩过V。。然后最后说:等会还有几个问题要问,叫我外面等会。。。
  等了快一个小时,见到一个HRMM,聊的还蛮开心的,最后叫我2周内手机24小时开机等消息。然后四天已经过去。
  真的是很想进支付宝,觉得有机会在一个成长中的公司工作肯定能学到很多东西,另外就是懒人心理了────找到了就不用再找了。。。总之,等吧。。。说2个星期,我就等2个星期吧。
  等的有点郁闷,特发此文,以资鼓励!

Sunday, October 12, 2008

Shell编程笔记(二)

if/else

退出状态和返回

0通常为无错退出状态,而其他(1-255)通常表示错误(diff例外,此命令对“没有差别”返回0,“找到差别“返回1,或是对无效文件名参数错误返回2)

if command运行成功
then
正常处理
else
错误处理
fi

返回:return

组合退出状态:(注意得到操作结果后,有的命令就不会执行了)
if command1 && command2
then
....
fi

if command1 || command2
then
....
fi


条件测试([...],"["符号后,"]"符号前的空格是必须的。

字符串比较:
str1 = str2 str1匹配str2 (不同于C等高级语言,是一个”=“,而不是两个)
str2 != str2 str1不匹配str2
str1 <> str2 str1大于str2
-n str1 str1为非null(长度大于0)
-z str1 str1为null(长度为0)

Saturday, October 11, 2008

Shell编程笔记

字符串操作符语法:

替换操作符(:)
${varname:-word}, if count is not defined, ${count:-0} is 0
${varname:=word}, if count is not defined, ${count:=0} define count 0
${varname:?message}, if varnaem is defined, return varname, else print message
${varname:+word}, if varname is defined, return word, else return null

模式与模式匹配:

模式匹配操作符(#,##,%,%%)
${variable#pattern}, 取值的开头,删除最短匹配
${variable##pattern}, 取值的开头,删除最长匹配
${variable%pattern}, 取值的结尾,删除最短匹配
${variable%%pattern}, 取值的结尾,删除最长匹配

命令替换:

$(Unix command)

Friday, September 26, 2008

网易笔试后

  上午去参加网易笔试,老早起来跑去浙大玉泉校区。今天还刚好冷空气来了,我穿个短袖差点没冻死我。到了那里刚好9点,看到考场门口堆着一群人还以为没开始,但又看到里面有人坐着了。我死不拉鸡的又在外面逛了一会,然后挤进去看了看,马上工作人员就问我座位号了。原来外面那一群是没有收到通知但还是来了的,我晕倒。。。
  我一开始还以为考的不是全是关于技术的东西,昨天P都没复习。第一部分必答题,考的数据结构和算法,我这方面一向垃圾。其余都是选做题,C++的部分没做,JAVA部分,关于线程的全空,Linux部分,命令参数我实在记不住。。GDB调试不会。数据库没做,SQL写不来。。理论也不懂,数据库原理等于白学了。Web开发,开始扯蛋,扯了一点,JS不会,CSS不会,Flash更不用说了。最后是测试,我就没写过测试代码。
  总而言之,就是没戏了。下次去应聘支付宝的系统工程师,得把Linux命令参数记一下,然后Shell再复习下。就嘎。