需要集中注意力

用了个软件统计了下我在电脑面前时都在干什么,结果百分之六七十的时间都在浏览网页。每天都在点开一个个网页,查看一条条内容,然后刷新,再看新的。上的网站并不多,以至于更新的速度远远赶不上浏览的速度,竟至于百无聊赖。可即便如此,也不愿意动动脑子去干点别的。好像僵死在那里一样,思维都停止了,就是看网页也看不进深一些的内容。

这真是很好的时间杀手。一天一晃就这么过去了,一周一晃又过去了。细想一下什么也没干。没有新想法的产生,没有新作品的出产,甚至没看一部新电影,没读一本新小说。每天回去还头昏脑胀得紧,倒头就能睡着。

不能老是这么分心下去了,必须要集中注意力啊。或者我该试试把浏览器从最顺手的位置上移开?把它埋在一层又一层的目录里,让我十分不情愿去挖出来?可是第一我确实离不开浏览器;第二没了浏览器还有别的会吸走注意力。或者是IM,或者是E-Mail,甚至于Update SVN……

也许我该去练习下剑道。今天看了《最后的武士》,剑道确实有让人专注的功效。也不一定得剑道,插花,沏茶,射箭之类的应该都可以。只要有一颗平静安宁的心。在这信息狂流中行走而不迷失……

 

这几年一直觉得,是时候再次修身养性了。那就开始吧,不再拖了。适当地离开电脑,离开网络,离开信息洪流。我不要那么宅。我希望能有更精致的生活,能有更多点的时间做一些真正有价值的东西,能书写自己的历史——而不是一直做个旁观者。这一切就从集中注意力开始。

先做些冥想,平静下内心,并让快死掉的想象力复苏起来。

修改PLSQL.vim

 

手头一大批PLSQL DEVELOPER生成的“.sql”结尾的文件。直接用VIM打开的话,会采用某种SQL的代码高亮,我不知道是哪种,反正不是PLSQL,不能识别 replace 等关键字。每次都手动输入 :set ft=plsql的话,太麻烦了。所以我想修改为默认以 PLSQL 的模式来高亮 .sql 结尾的文件。
要实现这一点,倒也挺简单。查看“filetype.vim”文件,可以看到这一段:
 
" SQL
au BufNewFile,BufRead *.sql call s:SQL()

func! s:SQL()
  if exists("g:filetype_sql")
    exe "setf " . g:filetype_sql
  else
    setf sql
  endif
endfunc
 
可以发现,关键在于 g:filetype_sql 这个变量里。于是直接在 VIMRC 中写入 let g:filetype_sql="plsql", 然后再打开 .sql 的文件,果然地,已经按 PLSQL 模式来高亮了。
 
但是还有一些问题存在着。我的文件并非我手写而成,大部分是程序生成的,里面有不少 “PROMPT xxxx” 之类的东西,以及各种排版后的语句分行。“PROMPT xxx”这句最后的分号被原有的PLSQL高亮模式识别为错误符号而标红,并连累它底下的大片代码中的分号都被标红。至于排版导致的问题则让它把一个分成几行写的PLSQL String Literal给当成错误了,不该高亮的时候高亮,该高亮的时候不高亮,还标红,很明显,它只认一行之内的。
要解决这个问题,不得不修改 PLSQL.VIM了,这个文件在Syntax文件夹内。对于“PROMPT xxx”的解决思路,我是打算把它当成注释来处理。原有的注释基本上是这样写的:
" Various types of comments.
if exists("c_comment_strings")
  syntax match plsqlCommentSkip contained "^\s*\*\($\|\s\+\)"
  syntax region plsqlCommentString contained start=+L\="+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=plsqlCommentSkip
  syntax region plsqlComment2String contained start=+L\="+ skip=+\\\\\|\\"+ end=+"+ end="$"
  syntax region plsqlCommentL start="--" skip="\\$" end="$" keepend contains=@plsqlCommentGroup,plsqlComment2String,plsqlCharLiteral,plsqlBooleanLiteral,plsqlNumbersCom,plsqlSpaceError
  syntax region plsqlComment start="/\*" end="\*/" contains=@plsqlCommentGroup,plsqlComment2String,plsqlCharLiteral,plsqlBooleanLiteral,plsqlNumbersCom,plsqlSpaceError
else
  syntax region plsqlCommentL start="--" skip="\\$" end="$" keepend contains=@plsqlCommentGroup,plsqlSpaceError
  syntax region plsqlComment start="/\*" end="\*/" contains=@plsqlCommentGroup,plsqlSpaceError
endif

syn sync ccomment plsqlComment
syn sync ccomment plsqlCommentL
 
为了区别于原有的注释,我于是果断新建了一个注释组,加入
syntax region plsqlCommentLP start="PROMPT" skip="\\$" end="$" keepend contains=@plsqlCommentGroup,plsqlSpaceError

syn sync ccoment plsqlCommentLP
 
并在渲染的时候,另行指定了一个颜色:
HiLink plsqlCommentLP Operator
 
而对于String Literal,我没有看明白为何它原本无法识别多行,它原本采用的是一个正则表达式:
syn match   plsqlStringLiteral  "'\([^']\|''\)*'"
并没有不能跨行的限制,或者不跨行是VIM正则的内嵌机制?
 
解决办法倒不难,参考注释的写法,拿来直接用就是了:
syn region plsqlStringLiteral start="'" end="'"
 
无效化原来的那句后,保存。打开一份“.sql”文件,全部正常了。

原来function里可以DML的

一直以为function里面是不能做除了Select之外的DML的,除了自治事务,并将其当作与Procedure的主要区别。这个从道理上也是讲的通的,因为function应当具有被多次执行而结果一致的特点,倘若做了insert,delete,update之类的事情,每次执行结果必然不同。因此,我坚信不移了。

没想到,今天在查阅同事写的已有的系统模块时,发现他的大量function都是带着Insert,update等操作的,并且还有OUT类型的参数!与procedure的唯一区别仅仅在于多了个return的值。当时我就疑问了,这执行不报错吗?我想顺手写个语句测试下,却发现带有out类型参数的,我都没法直接写SQL。于是乎,我自己另行写了个:

CREATE FUNCTION insert_new( new_val IN NUMBER) RETURN NUMBER

IS

BEGIN

  INSERT INTO testtable(col) VALUES( new_val);

  return 1;

END insert_new;

然后用SQL调用:

 SELECT insert_new(1) FROM DUAL;

如我所料,报错了,说不能执行这类DML云云。

带着我的疑问,去找同事询问。他表示,可以执行啊。然后边说边打开了一个PLSQL DEVELOPER的Test Window,输入几个参数,然后点击执行,居然果真成功执行了。

仔细观察了两个结果,最后终于发现了不同点。Test Window所用的是一个PLSQL Block,用了赋值语句来接收函数值。我仔细查了查书,发现书上原来写的也很清楚,长期以来我所坚信的那些限制都只是“在SQL中调用自定义函数”的限制,在PLSQL Block中并不适用。

好多误区

为了准备面试,好好地恶补了一下PLSQL,连带着Oracle的一些机制。对于过去遗留的问题,也详细查找实验了一番,结果发现好多误区和讹传。可能那些说法在刚出来的时候是对的吧,但是随着版本的发展,很多早就已经不适用了。可惜网络上还是充斥着这些内容。有些是过去的遗留,还有很多是听信了那些过时结论又没实验,而却当作“答案”新近告诉别人的,这种影响极为恶劣。一看日期,人家都还以为现在这个时代依然如此呢,相当容易误导。

 

首先先说一个常见的关于复合索引的认识。很多地方关于复合索引都有这么种说法:复合索引按建立时排的顺序排在最前面的是引导列,当查询条件是引导列在最前时,走索引,否则不走;如果多个复合索引列在查询条件中顺序乱了也不走;如果中间跳过一个,我看到两种说法,一种说不走,一种说可以跳跃着走索引。

这样描述可能不清楚,举个实际例子:

CREATE TABLE tb( a number, b number, c number);

CREATE INDEX idx ON tb(a,b,c);

以上说法认为:

Read more

几个面试题

本来今天去面试动机就不纯,基本只是为了积累经验锻炼队伍去的,所以答得怎么样都无所谓了。不过第一眼看到笔试卷的时候,还是很庆幸:遇到简单题了。想象中的关于数据库各种机制的深刻挖掘基本没有,一些复杂类型的复杂用法也没有。总共12道题目,做完后感觉良好,有80%把握能对,不过现在回想一下,还是有不少题目答错了,或者答得不够好。

这笔试卷上来是几道我事后查了一下所谓的华为的面试题。

题:什么是事务?

这个要说我不知道什么是事务那真叫冤枉。但让我写,我却想不起来怎么个写法。最后只能走曲线,表示一次rollback/commit/rollback to savepoint到一次rollback/commit/rollback to savepoint 之间的那部分就是一个事务。事后查了下,原来这题的得分点在ACID上…… 原子性,一致性,隔离性,持久性。

 

Read more

武运长久

有一种感觉,学的越多,就觉得不会的东西越多。当我不去看书不去想那些东西的时候,我感觉自己好像都会,都能应对。可是一旦沉下心来投入进去,就发现这也不懂那也不会,还有很多很多听都没听说过。每一个看上去很直白简单的名词,深入进去都能挖出好大一块来。而当这些东西扑面而来之时,我还完全没有做好吸收的准备。

读书要进得去出得来,要由薄到厚再到薄,这点我是认可的。只是我的层次,恰好一直处于在外面徘徊的状态,都还没有进去过。实用主义害死人啊。得到的东西太过散乱而肤浅,串都串不起来。学东西还是要纯粹而耐心一点的。“欲速则不达”,这句话以前一直被我用在制造各种拖延的理由上,但这句话用在这里是确实没错的。不论靠临时的搜索解决了多少实际问题,都不可以忽略了系统的学习,虽然看上去慢一点,但却有实实在在的基础。

学过的东西太多了,却没有深入一门。这是一直以来走的最大的歪路。我可不想成为那种“矮子里面最长的,长子里面最矮的”啊。不要老和业余的比,要竞争就去找真正专业的。

=====================

一会要去迎接这一波的第一场面试了,会遇到什么呢?呵呵。

准备生产资料

Both awesome and freetalk are installed. Now I shall get into the configruation and craft my main desktop.

でも、how about the Oracle Database? I have only two computers with 4 disks in total. One is Windows 7, the other is Gentoo, and I will not reinstall either of them. But the Oracle in Gentoo has too much problems. Even I can not find an useful document. And the dataguard, RAC... need multiple instances, multiple servers. So the best solution I think is trying VMWare again. Last time I used it finished my network experiment, now it is time for the database. I need at least two servers, both have CentOS runs on. The CentOS has released a new version recently, and this must be the one I shall download.

No time for waiting any more, download it right now. I want to install it at the time I am awake.

 

========================

Damn it! Who told me CentOS 6 had released?!

需要加强科学素养

既要做正确的事,也要正确地做事。一直以来,我都认为我不缺正确的高效的方法,但实际上并不是。不论是学习新技术还是调试老bug,或者就是单纯地浏览rumors,我都缺乏足够的科学素养,并因此不断地走各种歪路,浪费过多的时间和精力。

 

科学素养,首要一点就是逻辑,并且是建立于事实基础之上的逻辑。理解任何东西的根本上也依靠逻辑。程序语言有几十数百种,但学起来并没有什么难度,一方面固然是因为大体上都很相像,另一方面也因为所有的程序语言都建立在数学的严密逻辑之上。只要能理解某个问题的实质,就能一步一步地开发出一个具有逻辑性的解决方案,各种语言的特性都是其次的。

可是实际中却经常忘了这一点。遇到一个问题,便开始做各种无端的推测。可能“无端”倒还并不至于,但是那个“端”与推测之间,完全经不起逻辑推导。总是幻想着依靠“直觉”突然跳到问题所在点并一举解决。这种撞大运的方式,只会掩盖真正的问题,而不会带来任何好处,即便在效率上也是低下的,效果上更是无法保证。虽说应当允许“试错”,但试错也是应当有依据的,应当是“验证”一种解决方法,而不是尝试一种推测。

如果是在做实验,那么应当有明确的实验目的而对结果的评测方法;如果不是在做实验,那么应当真正明白自己在做什么,真正理解每一步的原因以及会发生什么事情。在没有理解之前,即便有看上去可行的解决方案,也不应当采用,因为根本无法做出任何保证。“或许可能行”,也或许可能只是暂时行,或许可能看上去行,或许可能根本就不行。

 

科学素养,应当有探索精神,应当不断进取。学习应当有一定的系统性,而不能满足于一个又一个的“片段”。“够用就好”,这种“实用主义”只会导致浅尝则止,带来平庸。大家都是懒人,但是眼光应当放更远些。不要为了一时的懒惰而牺牲更长远的空闲。从一个个“片段”里得来的东西,只要还在用,总是会不够用的,并且会经常不够用的。但是因为缺乏系统的学习,连提高都变得有困难,陷入迷茫之中。在绕了一大圈远路之后发现,原来事情原本可以非常简单,只要读一遍最基础的教程就可以了。这种悲剧不能一再上演。

Job Requirements

1. 2+ years database related experience. 
2. Proficient at SQL programming and tuning, and store procedures
3. Experienced on Oracle database administration.
4. Experienced on database design and architecture
5. Familiar with Java/.Net. 
6. Excellent at communication skills and teamwork
7. Capable of English writing and speaking
8. Excellent at analytical and system thinking
9. Bachelor degree or above

 

6 and 8 are hard to measure. So the key is 2, 3, 4. I should get to know SQL tuning, or else I can not call myself as "Proficient at". I will get down to practise the database administration sooner, and it will not take too much time I think. But the database design and architecture... it is somehow hard to measure too. Maybe I shall read some books about database design... and that might be enough...

To SQL Programming, I should try to follow the "best practice", get to familliar with all kinds of usage. Oracle SQL tuning must depend on the interpretation of execute-plan. I need to know how it works and how to change it.

整理一下Gentoo上让Mplayer在framebuffer中运行的设置过程

这两天一直在折腾。现在还在emerge kde-meta。这次基本是死磕状态,各种问题遇到一个解决一个,不留隐患。

要让mplayer能在framebuffer中运行,那么首先需要打开framebuffer。不知道该不该用“打开”这个词,反正就那个意思了。即便不准备在framebuffer中跑mplayer,只要没装X之类的东西,framebuffer也是很有必要开启的,因为原生的字体太大了,很多目录单纯ls一下都能超过屏幕边界,不得不再在后面加上 | less,可是这样一来颜色又没了。

打开framebuffer的话,主要就是编译内核,使之支持framebuffer。这部分昨天做的时候走了不少歪路,但最终发现还是应当按着Gentoo Wiki 上的相关说明 来做是最好的。

一开始是在内核中开启 “Support for frame buffer devices”,并启用下面的 firmware EDID

 

Device Drivers ->
	Graphics support  --->
		-*- Support for frame buffer devices  --->
			[*]   Enable firmware EDID
			...
			*** Frame buffer hardware drivers ***

然后选择要开的framebuffer的类型。“类型”这个词可能也不准确,应该说不同的驱动吧。昨天走的歪路就在这里。因为我顺手点进了KMS下的设置,而上面说,应当禁用掉Frame buffer hardware drivers中所列的所有驱动,不然会有冲突。事实上我用的是nvidia的闭源驱动,根本不关KMS的事。

Read more

竖立显示器也不错

几周前弟弟就跟我说他把显示器竖着放了,以节省横向空间。今天跑他那里去了趟,见到了实物,感觉还挺不错的。1920*1080的分辨率,即便竖着,横向分辨率也在1080。而主流网页的预设分辨率还停留在1024*768时代吧,怎么样都够宽的。原本横着的时候,被wrap的字自然是展开来了,但是网站上有太多的“另起一行”,更别说各种长条的头像和签名了。竖着放,非常适合看网页,有效减少向下滚动的次数。

桌面

Read more

Terminate Intentionally Infinite Loop In Oracle

To terminate an intentionally infinite loop in Oracle, we can use DBMS_PIPE.

First, create a pipe.

        DBMS_PIPE.create_pipe(pipename);

Then, insert message handling into loop block.  

        if DBMS_PIPE.receive_message(pipename,0) = 0 then

               DBMS_PIPE.unpack_message(pipebuf);

               Exit when pipebuf = 'stop';

        end if;

        

When needed, send a message which content is "stop" to the pipe.

    DBMS_PIPE.create_pipe(pipename);

   DBMS_PIPE.pack_message('stop');

 

So the whole example is:

 

DECLARE
   pipename CONSTANT VARCHAR2(12) := 'signaler';
   result INTEGER;
   pipebuf VARCHAR2(64); 
 BEGIN
   result := DBMS_PIPE.create_pipe(pipename);

   LOOP
      xxxxx
      DBMS_LOCK.sleep(10);

      IF DBMS_PIPE.receive_message(pipename,0) = 0
      THEN
         DBMS_PIPE.unpack_message(pipebuf);
         EXIT WHEN pipebuf = 'stop';
      END IF;
   END LOOP;
 END;





DECLARE 
   pipename VARCHAR2(12) := 'signaler';
   result INTEGER := DBMS_PIPE.create_pipe(pipename);
BEGIN
   DBMS_PIPE.pack_message('stop');
END;

 

PL/SQL Scope and Visibility

Scope is the region of a program unit in which a variable can be referenced, without qualified identifiers.

Visibility: without qualified identifiers a variable is visible in its scope. With qualified identifiers it is visible everywhere.

People are creatures of habit

Extract from "Oracle PLSQL Programming" of Oreilly.

 We all tend to fall into ruts, in almost every aspect of our lives. People are creatures of habit: you learn to write code in one way; you assume certain limitations about a product; you turn aside possible solutions without serious examination because you just know it cannot be done. Developers become downright prejudiced about their own programs, and often not in positive ways. They are often overheard saying things like:

"It can't run any faster than that; it's a pig."

"I can't make it work the way the user wants; that'll have to wait for the next version."

"If I were using X or Y or Z product, it would be a breeze. But with this stuff, everything is a struggle."

But the reality is that your program can almost always run a little faster. And the screen can, in fact, function just the way the user wants it to. And although each product has its limitations, strength, and weaknesses, you should never have to wait for the next version. Isn't it so much more satisfying to be able to tell your therapist that you tackled the problem head-on, accepted no excuses, and crafted a solution?

How do you do this? Break out of the confines of your hardened views and take a fresh look at the world ( or maybe just your cubicle ). Reassess the programming habits you've developed. Be creative-step away from the traditional methods, from the often limited and mechanical approaches constantly reinforced in our places of business.

Try something new: experiment with what may seem to be a radical departure from the norm. You will be surprised at how much you will learn and grow as a programmer and problem solver. Over the years, I have surprised myself over and over  with what is really achievable when I stopped saying "You can't do  that!" and instead simply nodded quietly and murmured, "Now, if I do it this way...."

Preparation for next Job

I've already resign at 1st. April, and it will take 1 month to finish my last work. Meanwhile, I shall prepare for my next job. Here I have two choices: 1) Go along with my path, find a job about Java programming or Oracle Database; 2) Do something new and fun, as embed development, System Integration, System Security... After a discussion with classmates, I choose choice 1, which has less risks and is more reality. If I choose choice 2, I am afraid I am not able to find an employer to hire me.

Yesterday I searched a hiring list on net, it seemed development on mobile-phone was popular in these days. To me, this means Android. My current company also has a department working with it, and even more, iOS included. I am experienced in SMS and MMS, maybe I can take advantage from this. One of my former co-woker told me Android development did not have too much tech content, that maybe I would disappointed with. But is it also means I can easily move to this field?

I have two target companies. One is hiring Java Software Developemt and Oralce DataBase Development, the other I did not find any mentions. Both Java Development and  Oracle Database Development suit me, but to be competitive, I shall learn more on either field.

According to the requirements listed in the hiring page, to be a Java developer, I shall familiar with:

1.Java

2.Popular frameworks and something others as: Spring, log4j, iBatis, JMS, JBoss...

3.Something about design pattern.

to be an Oracle DataBase developer, I shall have a strong skill in PL/SQL, and something about database tuning.

 

So, what I should do is clear. I do have a plan. But every time my plan did not work through. I think maybe it is because I am always trying to learn too many things at one time. How about this time? Java, Java servlet, Spring, JMS, iBatis, PL/SQL, database tuning, Android, and even C... and I should spend much time in algorithm and data structure too... I am afraid I do not have so much time. Chance will pass when I am still not prepared.

However, do it right now is better than worrying about uncertain future. Reading TIJ4 is the first priority now. After that is Java servlet and Spring framework, then design pattern. PL/SQL will come with Spring.

Self Discipline

我放纵自己的日子已经太久了。高中三年,大学四年,外加毕业后两年,足足九年放浪形骸的时间啊啊啊啊!!!!!!!!!!!!!如果说之前的日子过得太压抑太辛苦,那么这足足我整个至今为止的人生的三分之一还要多的放纵也足够了吧!!!!!!!!!!!!!!

 

非常非常非常有必要回到很久很久很久以前那种“自律”的状态了!我曾经以为自律对我来说是轻而易举的事情,我曾以为我可以靠着自己的监督就达到最高效率,我曾以为我过去的九年会是灿烂的新生活,最后我发现这些都丢了!!!!!!!!

 

我现在连坚持看书都做不到了啊啊啊啊啊啊!!!!!!!!!!!!!!!每天太晚睡的日子让体质也不行了啊啊啊啊啊啊!!!!!!!!!颈椎病已经很严重了啊啊啊啊啊!!!!!!!稍微撞一下就能晕倒的啊啊啊啊啊啊啊!!!!!!!!!!!!!!!!!扛桶水都有困难啊啊啊啊啊啊!!!!!!!!!!!!!!!!!!!!!

 

不论从哪方面看,这种现状必须改变。必须要与自己过不去,不能再这么随心所欲下去了。

移动(cmpp协议)发送即显短信的设置

即显短信,也就是直接在手机屏幕上显示出来,不用自己点进去查看,同时看完之后直接就没了,不会留下短信记录的那种短信。在中国移动采用的SP与ISMG之间的CMPP协议中,发送消息使用的是CMPP_SUBMIT消息,该消息的消息体如下:

 

Read more

Speed up

No more time wasting. Tomorrow is March again.

1.I shall read at least one chapter of "Thinking in Java".

2.I shall buy the button cell battery as quickly as I can. Then deal with the Gentoo. And Oracle. These should not be delayed any longer!!

一个简单的改名备份脚本

虽然说打算在服务器上用版本控制来管理部署的程序了,但一时终归还没用起来。而按照惯例,上传新版时旧版是不删的,仅仅改个名字存放起来而已。改名字时也没啥严格规定,一直以来有点乱。当然也许别人重命名还是比较规矩的,但反正我是很随心所欲的,搞得经常自己也记不清楚,只能靠修改时间来辨认。上次写了个脚本,把给名字自动加上时间后缀作为备份命令,倒也还管用。这次想再改进一下,上点参数,能整成 "*.latest", "*.current",  "*.last" 之类的效果。

#!/bin/bash

case "$1" in 
	"") echo "Usage: bak [option] filename"
	    echo "bak: rename a file as a backup"
	    echo "Try \"bak -h\" for help"
	    exit
            ;;
	*)
	   rename=0
	   option=0
	   while getopts "hrlc" flag
   	   do 
		option=1
		case "$flag" in
			"h") helplist=1;;
			"r") let "rename += 1";;
			"l") last=1;;
			"c") current=1;;
		esac
				
	   done
	   if [ "$option" -ne 1 ]
		then
		  filename=$1
		  newfilename=$filename.`date +%Y%m%d%H%M`
		  mv -f $filename $newfilename
		  echo $newfilename
		  exit
	   fi
		;;
esac

if [ "$helplist" = 1 ]; then
	echo "bak: rename a file as a backup"
	echo "Usage: bak [option] filename"
	echo "default(no option): rename filename to filename.`date +%Y%m%d%H%M`"
	echo "Options:"
	echo "	-l:	rename filename to filename.last"
	echo "	-c:	rename filename to filename.current"
	echo "	-r:	cut the end of filename from the last dot, example:"
	echo "			filename.last  --> filename"
	echo "multiple r will try to cut multiple part split by dot from the end, as:"
	echo "		-rrr	filename.section1.secion2.section3 --> filename"
	exit
fi
	
case "$2" in
	"") echo "Usage: bak [option] filename"
	    echo "bak: rename a file as a backup"
	    echo "Try \"bak -h\" for help"
	    ;;
	*)
	   filename=$2	
	   newfilename=$filename
	   if [ "$rename" -ne 0 ]; then
		for i in `seq 1 $rename`
  		  do
			newfilename=${newfilename%.*}
		  done
	   fi
	   if [ "$last" = 1 ]; then
		newfilename=$newfilename.last
	   elif [ "$current" = 1 ];then
		newfilename=$newfilename.current
	   else
		newfilename=$newfilename.`date +%Y%m%d%H%M`
	   fi
	   mv $filename $newfilename
	   echo $newfilename
	   ;;
esac 

 

开始锻炼身体

浏览了100个俯卧撑网站,看着它设定的锻炼计划比我当初做的要科学多了,决定仿效,现在开始,锻炼身体。

今天做了Initial Test,12个。不过倒没有到筋疲力竭的程度,感觉做个15个还是可以的。不过一样,11-20都归在同一份方案里。

下周一开始Week1 Day1. 我的锻炼日志将记录在http://www.pushupslogger.com/plog/overview?new_exhaustion_test_id=131886