下载:http://x.oddsfun.com/x.zip,当前还是非常初始的版本,估计只有我自己懂用
by:http://www.trackself.com
你们要支持这个程序的话,加我新浪博客就好:http://weibo.com/trackselfcom,谢谢
demo:http://oddsfun.com,这是其中一个测试站(暂时这还是一个不能赚钱的站),安装完后:http://x.oddsfun.com/x.zip
这个是一个基于drupal的二次开发的CMS,主要用于采集和赚美金(人民币我是失败了):
1.可以采集明文的HTML.(藏在javascript里的东西应该是不行的).我主要用于采图片.
2.采集程序何其多,它的特色是完全基于PHP和drupal,直接能用在bluehost等便宜到死的主机上,不需要非常规的PHP插件.
3.并发爬行(一个个爬,等明年吧).bluehost的最大值是50并发,我设置了15个并发,不会让你被bluehost封机器的
4.对wordpress支持相当好,我指的是采集用wordpress做的站.我在做采集的时候发现80%的国外站点是用wordpress做的.
5.我在里面装上了很多drupal必须要用到的模块和帮你下载好了一些我必须用到的模块,你自己选择性安装,方便上手drupal
6.能并发下载图片.
7.能并发上传到picasa,我是穷人,所以得想尽办法省流量,流量是其次,bluehost限制了文件数量最大不超过15万张(15万张,几周就到了,我某个站似乎有70万的图片了).也是这一点,导致我赚不到人民币,万恶的GFW!
使用说明:
慢慢会上来的,放完假了,最后一天假赶工,以完成上篇文章中对自己的诺言….我会开始我新的一个采集站,完全基于这个CMS,然后不断改,一边赚钱一边改程序,直到这个采集程序完善.
发展:
1.BUG是一定有的.
2.我知道DEDE等的采集都已经很强大.事实上我觉得最大的特色不在于采集,而在于下载图片和上传图片到PICASA,如果你没这个需求,不如用DEDE等国内成熟的采集软件.
3.以后会开源的,等我看到真有人用再说.到时会放到GOOGLE CODE
关于赚美金:
没你想的容易,也没你想的困难,凡事在于尝试与坚持.
希望:
这个CMS能给我带来些新的朋友,新的idea,如果有点钱就更好了,哈哈.
(对了,暂时懒得做下载统计,下了的朋友在回复中哼一声)
]]>CMS的主题是:基于drupal的采集CMS(纯PHP,在bluehost上已经跑了半年了,高性能)
打算做成半开源的,毕竟那个PHP采集的模块写写改改用了差不多一年,不太想直接开源。
代码已经整理好了,就差找个加密器。
初步计划:采集的CMS直接开放下载,不限制使用。核心还是图片下载模块及图片上传到picasa或flickr的模块,这个模块不开源,打算想办法做成收费下载。
有无人用?不清楚,先试试半开源的采集程序。
1.想个新域名。
2.找个时间,至少要1天吧。大部分时间用于尝试加密。
3.发布几个版本,100%原drupal的,被hack-core后高性能的drupal的。
4.做几个例子站。
5.准备上图片模块,想办法赚美刀。
6.drupal+wordpress,用drupal做后台,wordpress做前台再做一个CMS
7.如果有更多的时间,三天放假的话,也许会考虑搞个SAE版。一切免费的采集才是好的采集啊, 无本生利啊。不过估计可能性不大。目前只是计划
8.成功后也将自己的drupal+discuz也发布了,以及drupal+discuz+Bittorrent,不过后话了,暂时还没这么多精力。
有朋友说我显摆,没有放去真实的内容:
1.我有写日记的习惯,我只想如本博客名字那样:追踪我自己的人生。
2.网赚5000RMB一月,在广州只能生存下去,不能生活下去,我是有女朋友的人,唉。读博的生活补贴少得可怜。
3.我一直计划着到20美刀/天的时候就发布自己的程序,只不过到20后一直没时间,我在读医学博士。真的太小时间整理代码了。而且drupal anywhere若你们真的看完的话,100%可以自己写一个采集网站出来,问题是你们能不能坚持将一个代码改改写写1年之久(我读大学时很闲的,不像现在)。
4.我做任何事,都希望先随意而为,没打算满足陌生人的不合理的需求。
有朋友发邮件说也想自己写采集:
1.我写这个代码用了1年,建议你没有这么多时间的话,就买好的服务器,用C#写的采集器,然后自己套drupal数据库。
2.采集代码不要自己去写了,我当时写是为了好玩,不是为了赚钱,后来有了女朋友后被BS穷才想办法搞钱的。
3.我估计我下周应该可以将我的代码发布出来了(其实片段都在drupal anywhere及drupal相关的文章中了)。
drupal:接了两个数据库型的站,准备写些总结,关于drupal multi-step-form的,即多步表单,以及高效views.
SAE的移植上与@dhcn合作了,惭愧啊,主要还是他在工作,最近太忙了,希望这位朋友不要太介意。
META分析的方法彻底搞明白了,要找个课题玩。
一些想法要开始启动了:跟老阙和FM有个想法要合作,跟三院两个哥们有个更不错的想法。
帮叶亮搞定一个宣讲会。。。。
我的天哪,这事情太多了。 不过只要成一个,我就爽歪了,现在是冬天,我忍到秋天,准备收获。
]]>我想起慈禧说了一句话:“宁予友邦,不予家奴,量中华之物力,结汝国之欢心”。
那个叫恨啊!
甘肃那些小孩子全白死了。
我已经不知道说些什么好了。
只能这么说:在中国你不叫中国人,你叫国家的猪人;
他奶奶的,国外的孩子要校车,我们自己国家的孩子要撞车。
女人援交叫妓女,国家的外交变援交,这个国家变成什么了?
当我们在笑朝鲜人输球的时候要回去挖煤的时候,不知全球有多少人在笑我们。
当我们笑朝鲜人压根不了解自己国家,又不知我们当中有多少能了解我们自己生活的祖国。
what a fucking day and a fucking country.
我在想:即便这个国家经济在崩溃或者已经崩溃,也不会有多少人真正知道的。就正如朝鲜没多少人会否认金正日是神。
我们其实与朝鲜一样落后,我们不过比他们多点物资,多了个加了墙的网络罢了,
我们的生活过得也许还不如朝鲜,至少朝鲜还有信仰。
你有信仰吗?
建国初期,大家信马克思主义能9国,于是大家有信仰了,当时大家能吃苦,为了信仰,命都可以不要,苦算什么?
有信仰的人真的会这么可怕,我也有信仰,所以我理解。正如那些西藏的朝圣者,我在有信仰那天才明白他们为什么要朝圣。
现在呢?哈哈。
当原本信仰的东西被证明了不值得再信仰下去,结果是什么?这个结果会在什么时候出现?嘿嘿。
预计到会发生什么事的人很多,但能预计到什么时候会发生的人则极少,相信自己的预计的人则更少了。
我不能预计这事什么时候会发生,但我相信自己预计的不会错。
得开始准备过冬啊。
地方政府是负债的,全国人民都知道,而我所知道的是,我那地方政府大部分钱是用来腐败的,估计其他地方也是。
那买地方债卷不就等于让地方政府政府负更高的债?
而地方政府肯定是不还钱的,那利息自然会越来越高,那最终谁来买单?
危险啊危险啊,虽然还没想通这里面的逻辑,不过我觉得,看来中国顶不住了,估计在不久的将来,会有暴动。
得想个办法存点粮食,准备过冬啊。
存什么好呢,存在银行看来是不行的,鬼才信通涨只有6%,估计26%还差不多;
买黄金?妈的。。。这真蛋疼。
买房?经济快死了还买房,也是找死,说不定到时会有内战呢。
怎么办呢,看来最近得找些懂经济的朋友吹吹水。
人无远。。。。必有。。。。
]]>以前,我一直不明白,为什么上海这么繁华,但上海人为什么这么抠呢?孔子说富人节省是大美德,但总不至于抠门吧。
上周,新晨介绍我认识了一个博学的师兄,咱几个哥们谈天说地,开始谈谈人生和吐吐糟。
师兄说起自己的上海经历:
那地方简直就不像是人活的。
所谓的繁华根本就不属于平民,大部分的平民居然生活只能用挣扎来形容,或者说根本就毫无尊严。
所以师兄回广州了,他说,广州就是平民天堂,至少在这里,你能活得有尊严多了。
上海基本可分为三个阶级,贵族、平民、贵族的奴隶。
贵族不说了,跟党和国家有关,惹不起,不能细说。
平民,被欺负的人,还自视甚高,排外心理重,由于是社会底层,所以怨气很重,这里有精英但却不能有什么作为,有作为的基本被躲猫猫死或者进精神病院了,余下的都只是在挣扎,所以出现了男人在家做饭的美妙传统,不在家做饭,在外闯,以男人的火爆性格和性需要,随便进个高档消费区,得罪个贵族,不死100遍才怪了,自己死了也就算了,还累死九族也是有可能的。
贵族的奴隶,生活虽然过得不错,但毫无尊严的一群人,这里面绝对没有所谓的精英,因为他们已经习惯了当奴隶。
平民阶段,挣扎着活着;好不容易混到有点钱了,却不经意间成为了奴隶;贵族永远是不能从底层开始混上去的。
上海,在师兄的眼中,有点像鲁迅笔下的旧中国,一个群众已经默认了可以人吃人的社会。
为啥上海这么繁华和有钱,据师兄说,他真遇到过一砸千金的贵族事迹,开口上亿,这样的事,你遇到过么?所以只要会当奴隶,在上海能搞到不少的创业基金。
如果以后整个中国都真的如上海这样的话,真叫杯具了。
得想个办法到国外挖个根,以防不备,人得先救自己才能9GUO。
]]>今天是第一天上班,不累,下午老板说不用去了,整理一下思路:
1.静下来:晚上开始打坐,昨晚打坐,居然坚持不到50个呼吸,唉,我果然是静不下来。
2.工作学习:高州的模式在全国推广,只是时间问题,药物回扣估计会在10年内甚至更快就会被取消,外科的器材回扣收入也不会走远了,所以10年后拼的应该是医德医术。得让自己强起来。医生的地位也会改变,不会是因为钱多文章就地位高了。所以影像科医生的身份也不会再杯具。
静下来,是为了明天能动起来。
]]>文献管理—Endnote
图片管理—Picasa, Lightroom
统计学分析—SPSS, SAS
统计学制图—Sigmaplot, Origin,GraphpadPrism
荧光及病理图片—ImageJ, Image Pro Plus
图片的拼接及标注—Photoshop,Illustrator
还有一个做meta分析的:review manager
]]>对比一下google app engine(GAE),GAE是不能直接支持PHP的,只能装一个JAVA版的PHP(基本上跑不动的).GAE的上传也很麻烦,而SAE使用SVN,这就方便了.如果GAE+SAE呢,那将会无敌.可惜我 java只会复制及改改代码,但PHP则不同了,所以重点还是SAE啊.
如果你用过GAE,你就会知道,SAE将会带来多么重大的影响.GAE为国外的java/python开发者赚了很多美元,想来,SAE会为开发者产生RMB吧,虽然目前还没有,但可以预见的.
所以,我的计划是趁SAE未成熟,赶紧发展些应用过去.我用过的CMS无10都有8个了,有一段时间我忙的了.目前只申请了drupal的移植.下一步想申请一个FLASH CMS的移植等等.
1.计划:将我所知的CMS全部移植到SAE.不过目前来说,是没有时间的,等过两周吧,这两周导师有事要我办.读医的事还是首位,不能让导师失望的.
2.将以往自己的所有代码改为SAE版本并看看有没有办法申请为应用.
3.对比SAE,我更看好weibo app,但这东西没开发过,有时间再看看怎么做一个微博应用,似乎这东西是目前大热
详细的安装方法和下载地址已经附源文件,且在例子的主页也有(注,修改了install相关的文件,官方drupal是安装不成功的)
drupal6例子:http://trackself.sinaapp.com
drupal7例子:http://drupal7sae.sinaapp.com
drupal 6 源码下载地址:http://trackself.sinaapp.com/drupal6forsae.rar
drupal 7 源码下载地址:http://drupal7sae.sinaapp.com/drupal7for-sina-app-engine.rar
sina app engine (SAE) 即便在没装MEMCACHE下都飞快!用来执行一些复杂的运算正好不过,例如:采集,哈哈!
[安装:详细的安装方法和下载地址已经附源文件,且在例子的主页也有]
1.先申请一个sae:http://sae.sina.com.cn/activity/invite/44638/weibo
2.创建一个APP,例如这个APP叫trackself
3.在这个APP的管理页面打开MYSQL功能,设置完毕
4.上传解压文件至SAE:
(前段时间公布的安装包中还包含着SVN信息,不好意思了,让安装造成不便 ,现已经重新svn export出来,方便大家上传了,由于宿舍的网络太差了,我没测试新的安装包,但应该没问题的.)
与常规的drupal安装只有一丁点不同
例如你的域名为:http://trackself.sinaapp.com/ (这是我的第一个drupal6应用)
1.直接访问:http://trackself.sinaapp.com/install.php, 余下的步骤与drupal安装一致(官方的drupal只需要访问首页,这里是程序的一点点不同)
2.安装结束后请删除install.php , 这其实也是drupal官网的建议
drupal 7的安装与drupal6安装大同小异,但有点差别,详细请看例子页或者源文件中的install.txt
[伪静态:]
即将?q=node/1这样的URL变为直接/node/1.
就目前而言,SAE似乎是不支持.htaccess的转向的。
但可以根据各自的应用名称,参考下面的官方做法,在SVN中上传一个叫conf.yaml的文件去实现
http://sae.sina.com.cn/?m=devcenter&catId=193
注:我测试了上面的做法,没成功,我暂时也没有这个伪静态的需求。请测试成功伪静态态的告之一声做法
我提供一下网友的做法:
”
在根目录下,创建:config.yaml
复制该内容至这config.yaml:
handle:
– rewrite:if (!is_file() && !is_dir() && path ~ “^/(.*)”) goto “?q=/$1&%{QUERY_STRING}”
”
这样做完,我估计还需要在drupal后台重新打开clean url,如果打开不了,就要进phpmyadmin,改system表中跟cleanurl有关的记录
[email和找回密码功能:]
SAE的管理界面上的原文:”SAE邮件class , 目前只支持SMTP”,意,思是他不直接支持php的mail函数,就是drupal内核email是不支持的.
可以安装一个drupal的smtp模块解决(注:此模块非常消耗性能,我有切身体会,所以在移植过程中我就没装上了)
1.正如官方drupal在用户的PC机测试安装一样,官方的drupal也是不能发送email的,这是因为用户本机上没有配置好发送email的程序
2.SAE默认也是没有配置好email的,我的意思是他不直接支持php的mail函数,就像是你在本机测试没有安装好邮件发送客户端一样。解决办法是:安装drupal的smtp模块,这与官方提供的模块安装一致,与是否SAE环境无关,所以只是提提了。drupal默认也是没有将smtp模块放在core上的,在以后我改一个profile,帮大家在安装时也能填上自己的email,就能直接解决这个问题了,现在还是暂时自己手动下载drupal.org上的smtp模块然后手动安装吧.
3.所以,找回密码功能:你得配置好email才有可能找回密码啊,对吧。
4.在不久的将来,我会将文件上传,中文化,email,一并搞定…这段时间读博课程太重了。
[模块:]
不需要php write的模块估计都是可以安装成功的。
[更新:]
drupal 6我除了改动了install相关的文件,其余没改,就是说我100%没hack core,可以正常更新版本,当然,如果我知道drupal更新版本了的话,我也会更新这个源文件的,到时重新下载就行
[待解决问题:]
1.email:我没看明白SAE上的“请申请一个专为SAE配置的EMAIL”这句话,我也找不到申请地址,否则我会将drupal的邮件模块也hack掉的,不过我自己并不需要sae上的drupal能对外发邮件。你要是需要的话,我建议下载一个模块:SMTP
2.中文化及其他模块测试。。。时间问题
[建议:]
1.建议优先用drupal6,因为sae上的一些限制drupal7不能完美支持。
2.有问题请加我新浪微博:http://weibo.com/trackselfcom, 或到我博客http://www.trackself.com/archives/1757.html
[debug:]
1.近日有朋友说安装不成功:请先用SVN的版本浏览器或sae的网上代码编辑器查看一下,解压是否完整,是否上传过程中缺少文件,特别是install.php(可能也是由于前段时间我制作的下载包还有SVN的痕迹,新的下载包已经去掉SVN痕迹了,可以直接上传.)
2.微博上有朋友问后台提示错误:”The directory sites/default/files is not writable ” , 这是不可能解决的.SAE上所有文件都不可写 除非你跟新浪联系,要求他打开文件夹可读写权.
[后话:]
sae上跑drupal很快,快到我想象不了,所以,没必要安装drupal的一些性能模块了,默认即可
boost即便安装了也用不到
drupal默认的压缩CSS和JS的功能也不能用,因为SAE是没有写文件的权限的
这也许能通过重写fwrite来解决问题,但个人感觉没必要,因为现在已经很快了。
[storage api:]
sae的storage api似乎可以使得drupal能100%存活了,就是说上传文件也是能被解决的,等做完手头上的事就hack core尝试一下。
若有疑问: http://www.trackself.com/archives/1757.html
[English versions:]
introduce a high performance free hosting (for drupal)–sae—a GAE like China project , i just finished deploy drupal 6 there
ok , example first to prove that i am telling the truth : http://trackself.sinaapp.com/
[background:]
1.SAE: sina app engine , belong to sina.com (China), it’s a service like google app engine ,but provide PHP hosting and mysql hosting and more! well , i think it’s better than GAE, because i only know php but not python/java. It declare itself cloud service. And better than GAE, it use SVN.
2.Since it offer php and mysql hosting , drupal can be hosted. But a little hack to install.php , nothing more hack
[Join:]
http://sae.sina.com.cn/activity/invite/44638/weibo , firstly you have to go the the invite page to get yourself an account of sae.
sorry , the invite page is total Chinese , but i think you could manage it, just click button if you see one , or use google translate for help.
[drupal6:]
1.download http://trackself.sinaapp.com/drupal6forsae.rar , this file is the drupal6 , i hack the install.php to make drupal 6 suitable in sae. if you don’t trust me , just do a diff after you downloaded it. You won’t be able to install drupal6 using drupal.org’s origin drupal, thus need the hack.
2.decompression and upload the source file to sae using SVN
3.create an app via the control panel of sae , and then active mysql usage (default not acitve).
3.visite http://your-app-domain/install.php for installation and then delete this install file (this is the only different, you don’t have to config the mysql username).
all done.
need help? comment to http://www.trackself.com/archives/1757.html
( sorry,my english is poor,but i still would like to share with you)
]]>1.我不是不想消费,我是没机会消费,或者消费不起.靠,平时60的房费,涨到最便宜320,忍了,为国庆.但,我靠,没火车票了,我都提前8天买了.你国庆放多几天有P用啊,那死火车往年是只有三班,今天还是三班,拉个P内需啊.坐动车?天哪,这东西再过5年再坐吧;飞机?这东西因为风暴停了.
2.这个国庆只好看书了.
3.反过来想想,我去不成旅游,所以时间和钱花在买书上了,那去旅游的呢?说明什么问题呢?
如果没有新的消费渠道,钱还是从老项目上移动,没新的项目是不可能有内需增长的---事与愿违啊.
另外则是物流没有进展反而有点倒退,人口增长,票价增长,但车次没见增长,动车和高铁已经被证明是暂时失败的了,反正我是不会拿命去坐这玩意的,过个5年再坐不迟.
所以,忠国的经济增长方式一点没变(在我看来是变差了),也就是说咱们快进入或必然进入经济危机,这样子看,还是不要炒股的好,本来还打算第一笔钱用来炒股玩玩.有点消极,但却是合理.看现在那忠国股市就知道了.
另外则是:我还是个学生,所以我还会从消费上考虑到书,问题是别的老百姓呢,一年中还有买书的份吗?买的又是些什么书呢,我一个亲戚买的是<双色球>,有才,那R的现在计算的速度比我快多了.
通过增加节假日的方法来拉动内需,如果真的有成效了:那么则是国家好了,人民弱智了.
花更多的钱去消费,假设是放在旅游上了,那另一些方面的时间就少了,
的确是那句叫什么:读万卷书不如走万里路,问题是:走路不是指旅游,更不是指不读书,毕业了的人,多少还会偶尔读读书?对了,我指实体书,电子书按忠国的习惯估计没几个要"买"的.如果你是用来看电子书,如我看的YY手机小说,那么这内需反而是下降了,因为这几天你没生产没消费.
另外则是,在忠国能过上写意读书生活的人不多,同时会考虑用时间和金钱在自我教育自我增值上的成年人也不多.
再个则是:拉动内需:过份强调节日,在这个过节等于送礼的国家传统下,也许会有点成效,但却是增长了腐败.
拉动内需:这似乎是一个扯谈,或者是逻辑上是矛盾的,如果有经济学的数据,我估计是这几天的不生产所损失的要比这几天的旅游消费要高.而且,要真的变高了,旅游景点的票价就会越来越高,高出其实际的价值,这叫坑爹,这样子的拉动内需?你不如直接提高房价得了.
如果拉动内需成功了:这似乎又是一个强国弱民的政策.
对国家政策,咱们还是要三思啊,虽然像是离我们很遥远,但小心被阴了,按着国家路线走.....小心弱智+股市赔死.
(免责:本文作者国庆无聊,纯蛋疼写下的,所提国家纯属虚构)
]]>今天在地铁听到两很猥锁的中年男性聊天,一男说:”唉,生意不好做啊,微利啊,快餐店那里一个月才2~3万利润,一年才二三十万;茶庄那里一天只要例行送单出去就有几十万了;不如将快餐店出租还好!”
我在旁边听到,只能闭目养神,心里就想:”晕死,原来开快餐店也能月入2~3万,看到原定的100美元1天的目标实在是太低了,至少不能像这两个大叔那样吧”.
希望尽快实现100美刀一天,然后向300美刀进军,这样高消耗脑细胞的工作,如果不能比快餐店还要高收入,做来还有什么意义呢?
另:有个朋友发email问我如何赚的:回这个朋友:
努力吧,如果你可以坚持连续5个月下来的编程(不包括我大学期间花了三年来学基础[自学]),将一个代码从初始成形到修改到300个版本以上,还要忍受住连续5个月被女朋友BS说这样做是浪费时间的话.
你一定会收入超过我几十倍,至少我认识一个朋友,他”日”入是7000RMB的,就被女朋友BS了至少三年,应该说在那三年里,我也认为这R是游手好闲的,没想到时至今日,我非常羡慕距,那R的已经有公司了.
人生,还是需要努力的,有一天你坐着收美元,是因为前些天,你睡着都在写代码.
有时,真后悔喜欢上这些东西,如果我喜欢的是经济学,天天炒炒股,那人生多幸福啊;又或者,我喜欢上写小说,天天YY就可以赚几下万,那该多好啊,我有个女同学,听说她写小说可以用敲烂几块键盘换来几万元/月的.
唉,怎么就走上了这条天天死脑细胞的路呢.
function node_load($param = array(), $revision = NULL, $reset = NULL) {
static $nodes = array();
if ($reset) {
$nodes = array();
}
$cachable = ($revision == NULL);
$arguments = array();
if (is_numeric($param)) {
if ($cachable) {
// Is the node statically cached?
if (isset($nodes[$param])) {
return is_object($nodes[$param]) ? drupal_clone($nodes[$param]) : $nodes[$param];
}
}
$cond = 'n.nid = %d';
$arguments[] = $param;
}
elseif (is_array($param)) {
// Turn the conditions into a query.
foreach ($param as $key => $value) {
$cond[] = 'n.'. db_escape_table($key) ." = '%s'";
$arguments[] = $value;
}
$cond = implode(' AND ', $cond);
}
else {
return FALSE;
}
// Retrieve a field list based on the site's schema.
$fields = drupal_schema_fields_sql('node', 'n');
$fields = array_merge($fields, drupal_schema_fields_sql('node_revisions', 'r'));
//hack
//$fields = array_merge($fields, array('u.name', 'u.picture', 'u.data'));
// Remove fields not needed in the query: n.vid and r.nid are redundant,
// n.title is unnecessary because the node title comes from the
// node_revisions table. We'll keep r.vid, r.title, and n.nid.
$fields = array_diff($fields, array('n.vid', 'n.title', 'r.nid'));
$fields = implode(', ', $fields);
// Rename timestamp field for clarity.
$fields = str_replace('r.timestamp', 'r.timestamp AS revision_timestamp', $fields);
// Change name of revision uid so it doesn't conflict with n.uid.
$fields = str_replace('r.uid', 'r.uid AS revision_uid', $fields);
// Retrieve the node.
// No db_rewrite_sql is applied so as to get complete indexing for search.
/*
//hack
if ($revision) {
array_unshift($arguments, $revision);
$node = db_fetch_object(db_query('SELECT '. $fields .' FROM {node} n INNER JOIN {users} u ON u.uid = n.uid INNER JOIN {node_revisions} r ON r.nid = n.nid AND r.vid = %d WHERE '. $cond, $arguments));
}
else {
$node = db_fetch_object(db_query('SELECT '. $fields .' FROM {node} n INNER JOIN {users} u ON u.uid = n.uid INNER JOIN {node_revisions} r ON r.vid = n.vid WHERE '. $cond, $arguments));
}
*/
if ($revision) {
array_unshift($arguments, $revision);
$node = db_fetch_object(db_query('SELECT '. $fields .' FROM {node} n INNER JOIN {node_revisions} r ON r.nid = n.nid AND r.vid = %d WHERE '. $cond, $arguments));
}
else {
$node = db_fetch_object(db_query('SELECT '. $fields .' FROM {node} n INNER JOIN {node_revisions} r ON r.vid = n.vid WHERE '. $cond, $arguments));
}
if ($node && $node->nid) {
// Call the node specific callback (if any) and piggy-back the
// results to the node or overwrite some values.
if ($extra = node_invoke($node, 'load')) {
foreach ($extra as $key => $value) {
$node->$key = $value;
}
}
if ($extra = node_invoke_nodeapi($node, 'load')) {
foreach ($extra as $key => $value) {
$node->$key = $value;
}
}
if ($cachable) {
$nodes[$node->nid] = is_object($node) ? drupal_clone($node) : $node;
}
}
return $node;
}
by:http://www.trackself.com
]]>function drupal_lookup_path($action, $path = '', $path_language = '') {
global $language;
// $map is an array with language keys, holding arrays of Drupal paths to alias relations
static $map = array(), $no_src = array(), $count;
$path_language = $path_language ? $path_language : $language->language;
// Use $count to avoid looking up paths in subsequent calls if there simply are no aliases
if (!isset($count)) {
$count = db_result(db_query('SELECT COUNT(pid) FROM {url_alias}'));
}
if ($action == 'wipe') {
$map = array();
$no_src = array();
$count = NULL;
}
elseif ($count > 0 && $path != '') {
if ($action == 'alias') {
if (isset($map[$path_language][$path])) {
return $map[$path_language][$path];
}
// Get the most fitting result falling back with alias without language
/*
//hack
$alias = db_result(db_query("SELECT dst FROM {url_alias} WHERE src = '%s' AND language IN('%s', '') ORDER BY language DESC, pid DESC", $path, $path_language));
*/
$alias = db_result(db_query("SELECT dst FROM {url_alias} WHERE src = '%s'", $path));
$map[$path_language][$path] = $alias;
return $alias;
}
// Check $no_src for this $path in case we've already determined that there
// isn't a path that has this alias
elseif ($action == 'source' && !isset($no_src[$path_language][$path])) {
// Look for the value $path within the cached $map
$src = FALSE;
if (!isset($map[$path_language]) || !($src = array_search($path, $map[$path_language]))) {
// Get the most fitting result falling back with alias without language
/*
//hack
if ($src = db_result(db_query("SELECT src FROM {url_alias} WHERE dst = '%s' AND language IN('%s', '') ORDER BY language DESC, pid DESC", $path, $path_language))) {
*/
if ($src = db_result(db_query("SELECT src FROM {url_alias} WHERE dst = '%s'", $path))) {
$map[$path_language][$src] = $path;
}
else {
// We can't record anything into $map because we do not have a valid
// index and there is no need because we have not learned anything
// about any Drupal path. Thus cache to $no_src.
$no_src[$path_language][$path] = TRUE;
}
}
return $src;
}
}
return FALSE;
}
其实我早就想这么改了,但觉得hack core很不好,又想到,这查询其实也没什么呀
直到有一天我分析mysql_slow_query的时候才发现,不hack不行了,这样的语句在站点忙的时候居然占用了3S,而且很多条.
改动后,虽然在繁忙的时候也会占用1S,但多多少少减少了不是?
而且据我分析:drupal每个页面至少会有30~150个这样查询,每个查询节约1ms,都能节约100ms了,而且事实上不止1ms
你们可以做一下select SQL_NO_CACHE 进行同时上100条的查询.会发现差别实在太大了.
by:http://www.trackself.com
得出结论:在bluehost站点上,最好还是完全静态化的好,有评论也是浪费表情的,总有一天会因为评论搞死站点.
]]>