我的vi插件:
注释,项目管理,函数断点,自动完成,日历等等
/plugin
acp.vim calendar.vim comments.vim exec_menuitem.vim fs_menu.vim neocomplcache.vim NERD_tree.vim taglist.vim zencoding.vim
/autoload
acp.vim zencoding.vim
.vimrc的设置如下
nnoremap <silent> <F7> :NERDTreeToggle<CR>
nnoremap <silent> <F8> :TlistToggle<CR>
let Tlist_Show_One_File = 1
let Tlist_Exit_OnlyWindow = 1
let Tlist_Use_Right_Window = 1
nnoremap <silent> <F9> :Calendar<CR>
let g:calendar_diary="/data/diary/"
syntax on
set nu
set tabstop=4
set softtabstop=4
set shiftwidth=4
set cindent
autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
autocmd FileType c set omnifunc=ccomplete#Complete
为什么要谨慎使用PHP中的常量
Zend Framework文档中写道:
常量包含数字字母字符和下划线,数字允许作为常量名。 常量名的所有字母必须大写。
'''类常量必须通过 "const" 定义为类的成员,强烈不鼓励使用 "define" 定义的全局常量。'''
作为PHP的官方框架,为什么会有这样的要求?
让我们一起分析一下吧
1,define容易产生意想不到的错误
PHP常量是定义后就不能修改和再次赋值。但是如果再次赋值会怎么样?
<?php
define('C', 12345);
define('C', 123);
?>
这段代码会报个notice错误。带来的后果是:在你定义之前,其它人要是定义了同名的常量,你可能真的不知道里面究竟是什么值。
2、如何判断PHP常量是否被定义?判断方法易写错
<?php
define('C', 12345);
// 错误方法1,经常犯
if (isset(C)){……}
// 错误方法2,经常犯
if (defined(C)){……}
// 正确方法
if (defined('C')){……}
?>
3、执行效率低
<?php
define('FORUM_THEME',$forum['theme']);
$this->display('/'.FORUM_THEME.'@Public:login');
// 系统会从整个执行流程中查找FORUM_THEME
?>
因为php处理常量的时候要进行多次查找,所以效率低。
总结:PHP常量的问题,在于PHP处理常量的方法过于宽松导致的,如果能够严格一些,就会避免很多的问题。在实际过程,能用变量就不要用常量,因为变量的效率高使用更加方便。
因此
但若非要使用常量或者类变量,可使用以下方法:
<?php
class foo {
const WEBSITE = "www.zhuyinghao.com";
protected $_forum_theme;
function name()
{
echo WEBSITE;
$this->_forum_theme = $forum['theme'];
}
function displace()
{
echo $this->_forum_theme;
}
}
类名和函数名相同时的作用
在PHP4中,类的构造函数需要和类名相同。
子类的构造函数名与子类名相同
在子类里父类的构造函数不会自动执行。
要在子类里执行父类的构造函数,必须执行类似以下语句:
$this->[父类的构造函数名()]
在 PHP5.0 以上版本里,统一使用construct()作为构造函数,但仍兼容了 4.0 版本的构造函数的定义规则。如果同时定义了4.0的构造函数和 construct()函数,则construct() 函数优先。
用PHP EOL来替换/r/n进行换行
写程序时会经常用到换行,用PHP内置常量PHP_EOL来进行换行。
一个小小的换行,在不同的平台有着不同的实现。
在unix世界换行就用\n来代替,但是windows为了体现他的不同,就用\r\n,更有意思的是在mac中用\r
因此unix系列用 \n
windows系列用 \r\n
mac用 \r
因此系统会根据平台系统的不同,转换成不同的换行。
如果要在浏览器中换行,就要使用
进行换行
$sql = "set @line=0;
select imei_total,imei_count,dateTime from (
select @line := @line + imei_count imei_total ,imei_count,dateTime from(
select count(DISTINCT(imei)) imei_count,from_unixtime(record_datetime,'%Y-%m-%d') dateTime from detail_user_data_agent_install_info where channel_id=2 and record_datetime < $strtime[1] group by dateTime limit 0,30
) x group by dateTime order by dateTime desc) x ;
";
随着数据的快速增长,分表,分库,memcache,redis,mongodb,hadoop,bigtable等,各种解决方案呼之欲出。
经过测试,在mysql中,无论如何加索引,数据超过百w时,查询起来耗时很明显。
因此mysql分表分库+memcache+redis也不失是一个完美解决方案。
由于redis不支持复杂查询,redis的读取性能还是赶不上mem这些劣势,因此才需要一些搭挡。
流程
从CRUD看底层架构。
插入数据
一般情况下,对用户是没有必要分表的,用户的文章或者微博才分表,毕竟用户表和微博表是无法比拟,不一个等级的。
插入时,任何表,mysql只存储索引字段,其它数据存储在redis上。
文章表可按一定规则进行静态分表,比如按用户id分100张表,每个用户发的文章都会路由到同一张表中。
数据总数需要一个单独的字段存储在redis中,每个用户都有一个key进行存储文章总数。
有时总数数据会与实际总条数有所不同,因此需要定期执行mysql count进行更新redis中的总数。
下面是分表路由,把uid对100取余:
protected function getTableName($name, $id=null) {
$tableName = self::SYS_DB_PREFIX . $name;
if (is_numeric($id) && $id > 0)
return $tableName . '_' . ($id % $this->tableNum);
}
查询数据
每第一次数据查询时,根据mysql中的索引从redis查询,需要将查询结果存储在memcache中,下次查询直接从memcache获取。
查询某人文章时,直接从一张表中进行limit查询。
关于动态页面查询,比如登录后的豆瓣首页,会有一些动态好友的更新信息。这些信息是存储在一张临时表中的,只保存10天的更新。
删除数据
整个系统无任何实际操作,只进行字段状态修改。
修改数据
修改数据时,需要更新对应的memcache。
分库
当系统应用更加复杂时,一台数据库服务器的压力是很大的,可根据系统的业务流进行分库,比如文章一个独立库,评论一个独立库等。
更复杂的搜索
比如招聘网站中的,按地点,按行业,按规模等更多条件查询时,就需要一定的搜索系统来完成,这里不做更多搜索细节讨论。
新东方老师王强认为,神学可以让人们理解超越人性的东西,获得一种上帝般的眼界,达到一种超尘脱俗的境界,也会更多了解宇宙的神秘。
明天是2011年12月25日,在NBA停摆半年即将打响的同时,聊聊耶稣及相关的话题:
圣诞节是耶稣出生的日子
耶稣是名,基督是职称和头衔。
耶稣是以色列犹太人(二战时的屠杀应该与此是有些关系的),根据百科记载:耶稣在各个教派中的地位和认识是大相径庭的。
圣经中的耶稣生平
基督教认为耶稣就是神,要尊重他,要听他的指示。(也难怪早期的欧洲利用这点进行统治)
教课书是,《圣经》即bible,里面有很多搞笑的段子,比如:神说要有光,就有了光。
古兰经中的耶稣
作为伊斯兰教中的教课书《古兰经》,还是承认耶稣存在和具有一定能力的,它认为耶稣是伊斯兰教六大先知之一,仅次于至圣先知、封印使者穆罕默德。承认他无父出生,肉身升天,但不承认他是真主的独生子,也不认为他曾经死而复活。(把耶稣当老二,也难怪十字军东征打了那么年)。
塔木德中的耶稣
塔木德是犹太人至死研读的书,是犹太教的必修课,它对耶稣教这样描述的:
耶稣在埃及学会了魔法。他成为了欺骗并使以色列迷失的魔法师。他取笑智者们的话,污染上了异端,并因此被逐出教会。他称他自己即是神也是人子,并说他会升天堂。他说天国近了,还吸引了5名门徒。他在罗多成为骗子和叛教教师。
犹太人把耶稣当作叛徒,(二战时的屠杀的原因也不言而喻了,希特勒是基督教徒),说起叛徒二字,突然想起国际共产主义和我党的关系。
耶稣的贡献
耶稣斥责犹太教的民族偏见,他称赞一个因扶贫济困而被犹太教徒歧视的撒马利亚人。他认为人的生命比全世界的财富更宝贵,主张信徒之间要彼此相爱。说白了,主要是教人学会爱。
尤其对尊严和人权,民主和政治,教育和慈善,科技和经济,家庭和道德方面都是有巨大贡献的。从人类历史来看,基督教对于道德的提升,远超过其他一切力量。如果耶稣没有来,十诫的影响只停留在犹太人中;北欧人仍然是海盗;亚洲、非洲、美洲的野蛮民族,没有人敢去接触。
撒旦教
撒旦誓与耶稣为敌,因此撒旦教也被基础教称为邪教。撒旦教也有多种教派,哲学教派还是具有一定研究价值的。
据说马克思是信撒旦教的。
十一诫
- 除非你被询问,否则不要发表意见或给予建议. (自觉)
- 除非你确定别人想听,否则不要对别人诉苦. (尊重)
- 在别人的地盘中,要显示对他的尊敬,否则别去那里.(尊重)
- 如果一个客人在你的地盘惹恼了你,不要仁慈,要残忍地对待他.(原则)
- 不要与别人发生性行为,除非你得到了发生关系的信号. (自律)
- 不要拿不属于你的东西,除非这对其他人是种负担,且他们哭求着解脱.(计谋)
- 答谢能让你成功的达成你的欲望的神奇能力.如果你在获得他赐与的成功后,否定这神奇的能力,你会损失所有你获得的东西. (感恩)
- 不要抱怨不关你事的事.(自觉)
- 不要伤害小孩. (仁慈)
- 不要杀害不是人类的动物,除非你被它们攻击,或你是为了得到食物. (仁慈)
- 当走在公共的地方,不要打扰别人. 如果某人打扰了你, 要求他停止. 如果他不停止,就揍扁他.(原则)
信念
1.没有神,人就是神
2.神不过是世界上的一般能源,人可以取为己用
3.神就是我自己
总结
不信教,但一定要去了解各种教派的教义和主张,这样才能领悟到像王强老师说的超凡脱俗。
参考:
http://zh.wikipedia.org/wiki/%E5%9C%A3%E8%AF%9E%E8%8A%82
http://zh.wikipedia.org/wiki/%E8%80%B6%E9%85%A5
英语中的husband是household引申出来的,意思是提供住房子的人,现在的女人要结婚就要房子估计也来源于此。
http://www.etymonline.com