一般情况下,我们刚装好的ubuntu时区都是US(默认语言为英文时),而且,它本身就是使用UTC格式作为标准时间格式,如果在Linux下运行程序,且在程序中指定了与系统不一样的时区的时候,可能会造成时间错误。 如果是Ubuntu的桌面版,可以直接在图形模式下修改时区信息,如果是Server版呢,则需要通过tzconfig来修改时区信息了。只是这样的方式会相对比较麻烦,
使用方式 (如将时区设置成Asia/Chongqing):
sudo tzconfig
然后按照提示选择 Asia对应的序号,选完后会显示一堆新的提示—输入城市名,如Shanghai或Chongqing,最后再用 sudo date -s “” 来修改本地时间。
但事实上,并不需要这么复杂的处理,一个偷懒的方法就是,直接:cp /usr/share/zoneinfo/Asia/ShangHai /etc/localtime,用shanghai的时区文件覆盖localtime。灰常方便,这时候看一下date,时间是不是正确了?
元旦其实过的很快,不上班比上班还累,这是有小孩的人都会这么想的吧?
元旦期间,手被烫伤
小孩很听话,只是偶尔问他,爸爸对你凶不凶,在想了一会之后都是很坦然的说:很凶
最近一直在尝试改变,对小孩不要那么凶,确实没有什么太大的意义。何必呢?毕竟大我时候,都是丈母娘他们在带着孩子。
元旦带小孩去买了点衣服,想着过年回家的时候可能会穿。
元旦还处理了一些旧书,40多斤的书,只折成了20多块钱,原价大约600多吧。想想也确实可惜,买不如借,借不如租,租不如偷,袁枚当初就是这样说的吧?他当然不会说租不如偷。所幸卖掉的这些书,我都看完了。否则心更痛。
整理书的时候发现原来我有那么多书没有看完过。大于等于10本书没有看全,只看了几章的也有。这时候就在迷惘我是该慢慢看完,还是确实就扔在那里?想看的时候再看?
带着孩子还去了游乐场,小孩子其实没玩多少,反而都是我和我老婆在玩。好象有点不太厚道。。。。
新的一年初始,还算是不错,唯一就是半夜小孩起来尿尿的时候,尿了一床,嗯,没对准塑料面盆,有点纠结。总体还是不错。
如果真象所有的电视、电影里说的。那么还只剩300多天了。所以,各位,可以开始倒记时了,但没关系,至少今天还是快乐的。
元旦快乐。
感谢去年、前年以及以前有帮助过我的朋友们、师长们、长辈们。感谢你们。(如果真有2012,还是先早点说吧,省得以后没机会说出口)
其实我是真想自己写这一段内容的,只是后来找了找手册,居然不知道在哪一章了。
短路操作符,很容易让人误解是if条件中的 && 或者 ||,但实在不知道从何说起(至于是不是叫短路操作符,我也记不清了,先这么命名吧)
其实这个玩意大家都见过,只是大家都忽略了。想起很久很久以前,所有的参考书上有一段连接数据库的代码:
$conn = mysql_connect(localhost,root,123456) or die('could not connect db');
这段代码,就是一个很简单的例子。
如果能够连接上,就返回$conn,否则直接输出。。。。无非就是将||换成了 or,于是很多人就不认识了罢了。
然后,国内用的最多的这种代码的是某一个论坛,在他们的代码里大量充斥了这种操作符,很多人在第一次看他们的源码时都会比较郁闷。。。这个论坛叫phpwind。
好了,我不多说了,上原文吧:http://feihu.cd00.cn/itweb/index.php/php-duanlu-condition-function
什么是php短路操作,先看下面代码
($f) && f(); 或者
$condition && function();
这是什么用法
短路操作,什么意思呢
如果$f为真,就执行f()函数调用
如果$condition为真,就执行function()函数调用
if ($f) {
f();
}
另找了篇文章来详细说明之
mysql_query($sql) or die(’Execute failed!’);
!file_exists($cache_file) && @update_cache($id);
这两句很像是条件语句,但是准确的说,他们是利用了短路运算符的运算特点来实现的条件语句:
or、||、and、&& 都是短路运算符
&&(and)运算符检查第一个表达式是否返回“flase”,如果是“false”则结束语句并返回“false”,否则检查第二个表达式。
or(||)运算符检查第一个表达式是否返回“true”,如果是“true”则结束语句并返回“true”,否则检查第二个表达式。
该用法正是利用了短路运算符这种特性实现了条件的判断和执行
----------
再看这一篇:http://biancheng.dnbcw.info/perl/241992.html
和C类似,Perl提供 &&(逻辑 AND)和 ||(逻辑 OR)操作符。它们从左向右计算( && 比 || 的优先级稍稍高一点点),测试语句的真假。这些操作符被认为是短路操作符,因为它们是通过计算尽可能少的操作数来判断语句的真假。例如,如果一个 && 操作符的左操作数是假,那么它永远不会计算右操作数,因为操作符的结果就是假,不管右操作数的值是什么。
例子 |
名称 |
结果 |
$a && $b |
And |
如果$a为假则为$a,否则$b |
$a || $b |
Or |
如果$a为真则为$a,否则$b |
这样的短路不仅节约时间,而且还常常用于控制计算的流向。比如,一个经常出现的Perl程序的俗语是:
open(FILE, "somefile") || die "Can't open somefile: $!\n";
在这个例子里,Perl 首先计算 open 函数,如果值是真(somefile 被成功打开),die 函数的执行就不必要了,因此忽略。你可以这么读这句文本“打开文件,要不然就去死!”。
&& 和 || 操作符和 C 不同的是,它们不返回 0 或 1,而是返回最后计算的值。如果是 ||,这个特性好就好在你可以从一系列标量数值中选出第一个为真的值。所以,一个移植性相当好的寻找用户的家目录的方法可能是:
$home = $ENV{HOME}
|| $ENV{LOGDIR}
|| (getpwuid($<)) [7]
|| die "You're homeless!\n";
另一方面,因为左参数总是在标量环境里计算,所以你不能把 || 用于在两个集群之间选择其一进行赋值:
@a = @b || @c; # 这样可不对
@a = scalar(@b) || @c; # 上面那句实际上是这个意思,@a 里只有 @b 最后的元素
@a = @b ? @b : @c; # 这个是对的
Perl 还提供优先级比较低的 and 和 or 操作符,这样程序的可读性更好而且不会强迫你在列表操作符上使用圆括弧。它们也是短路的。
这篇文章是云风的博客上的文章,知道云风是在做游戏,也知道他一直在做lua、C的开发。
我也是最近才刚刚开始看lua,主要是看了一眼之后就发现,原来lua,连函数的写法,对象的格式(tabledata),几乎都一样。所以,在开始关注着。
今天看到这篇文章,转贴是因为,看到云风写的这段代码:
XML/HTML代码
- function foobar(env)
- return setfenv(
- function()
- local ret = {}
- function ret.foo()
- ...
- end
- function ret.bar()
- ...
- end
- return ret
- end , env) ()
- end
超级象javascipt,比如可以写成:
XML/HTML代码
- function foobar(env){
- return setfenf(function(){
- var ret = {};
- ret.foo = function(){};
- ret.bar = function(){};
- return ret;
- },env)();
- }
感觉有点超象。。。
上原文了。地址:http://blog.codingnow.com/2011/12/lua_52_env.html
lua 5.2 正式发布了,对于 lua 语言本身的修改,重中之重就是对 environment 这个概念的修改。
可以说, 5.1 以前的 environment 已经没有了。environment 对于制造一个安全的沙盒(或是实现 DSL)是一个很重要的语言特性,我以前很喜欢使用,但也很容易用错。这次的修改我认为是一个谨慎的决定,并使得 lua 语言更为精简和严谨了。
我这样理解 5.2 中的 environment 。本质上,lua 取消了原有意义上的 environment 。所以我们可以看到 C Function 不再有环境了。function 、在 lua 中称为 closure ,仅仅只是函数体和 upvalue 的联合体。这简化了 lua 语言本身。全局变量实际上只是一个语法糖,编译时再前面加上了 _ENV.
的前缀。这样,从 load 开始,第一个 chunk 就被加上了 _ENV
这个 upvalue ,然后依次传递下去。
这个设计基本可以取代以前使用 getfenv/setfenv 改变函数环境的方法。但是又不完全等价。总体来说,增加了一些限制,但不太容易写出 bug 的代码了。
比如说,现在想给返回一个独立环境的函数,可以这样写:
function foobar(env) local _ENV = env return function() ... end end
而以前大约是这样:
function foobar(env) return setfenv(function() ... end, env) end
这不太看得出好坏,但是如果是一组函数,就有区别了。5.2 中是这样:
function foobar(env) local _ENV = env local ret = {} function ret.foo() ... end function ret.bar() ... end return ret end
5.1 的等价代码大约是这样:
function foobar(env) local old = getfenv() setfenv(1,env) local ret = {} function ret.foo() ... end function ret.bar() ... end setfenv(1,old) return ret end
或者这样更函数式一点:
function foobar(env) return setfenv( function() local ret = {} function ret.foo() ... end function ret.bar() ... end return ret end , env) () end
getfenv/setfenv 更灵活,却更容易出错。
对于制作沙盒来说,我感觉 lua 5.2 会更为鼓励使用 load 这种运行时的编译行为。即一定程度上的鼓励元编程。(因为取消了 setfenv ,所以给了 load 显式的参数来制定给 chunk 一个新的环境)
btw, 这个语言设计变更的同时也增强了函数式编程的性能。因为 lua 现在可以更方便的合并那些有相同 upvalue 的 closure 了。(从前除了 upvalue 还有 environment ,合并行为更为复杂)
12 月 30 日补充:
如果非要类似 setfenv 的功能, 修改一组函数的 _ENV
大概需要这样做了:
function getfuncs() local _ENV = _ENV local ret = {} function ret.foo() ... end function ret.setfenv(env) _ENV = env end return ret end