易栈网-膘叔

浏览模式: 标准 | 列表 | 图文
升级sablog 2.0失败

升级sablog 2.0失败

纠结了很久,还是失败了。
看了一下出问题的step,发现是drop table的问题,我开始以为是我的权限有问题。但。。。我设置为ROOT也没用。所以暂时不升级了。真纠结啊

---------
顺便:
从PHP5.4开始,session_register函数禁用了。所以,如果还在使用Sablog1.6的人,记着。。。seccode.php中,这一行注释掉,否则。。。验证码就出不来了。
---------
由于升级到5.4后,默认display_error为OFF,所以很多错误 都显示不出来,排查了好久才解决这个问题啊。

转:辞职创业常犯的5大错误

转:辞职创业常犯的5大错误

有两个朋友辞职创业了,一个是阿里系的,一个是QQ系的。一两年前也曾经有这样的想法,但最终还是不够大胆,帮人打工和帮自己打工,我选择了前者。其实当时如果有两个项目可以维持,说不定就真的投入了。。。。
上文章看看误区先,这是创业帮的一篇文章 :http://xueyuan.cyzone.cn/gushi-ganwu/224015.html

很多人都会梦想能够辞掉工作自己创业,尤其是那些在职场为晋升努力了很多年的人。但是每次工作变动都会伴随着诸多风险,而辞职创业这样的转变更是件高风险的事儿。对个人来说,创业是一次重大的跨越,尤其在当前经济不稳定的条件下,创业更需要做好充分的准备。

多年前,《哈佛商业评论》(Harvard Business Review)刊登了一篇文章,名为《跳槽者应避免的5种错误做法》,文章列举了普通人在换工作时常犯的5种错误。我敢肯定,这其中的每一条都适用于那些 正考虑辞职,打算自己或与他人合伙创业的人。这5种常犯的错误如下:

1、未做充分调查研究。换工作之前,起码有这样几个问题需要考虑:你的目标、财务稳定性、企业文化契合度以及工作职责。那些打算辞职创业的人都有必要思考一下以上所有问题。或者与一些经验丰富的创业者谈谈你的创业计划,看看你的想法是否切合实际,获得肯定后再辞职。

2、单纯为钱辞职创业。记住,“这山望着那山高”是多数人的通病。创业在短期内不太可能赚到比打工更多钱,实际上,往往相反,大多数创业者在刚开始 1-2年内是没有收入的,而且也很难找到对其创业项目感兴趣的投资人。我时常告诫打算创业的人,最好在创业项目产生实际收入后,再辞去日常工作。

3、创业是为了逃避工作。如果你不顾一切地铤而走险,开始创业,你可能发现你的创业之路举步维艰,与受雇于人比起来,压力更大而且状况更无法让人满 意。工作量大、工作不被认可或压力过大不是创业的理由,也通常得不到令人满意的结果。而那些认为自己有能力,但是对眼下所从事的工作不满意或者厌倦的人, 反倒更适合做创业者。

4、高估自己。根据很多猎头顾问的观点,现在很多求职者对他们的工作技能、职业规划和弱点的认识都不切合实际。如果你在几家公司的工作经历都不愉快,那么很可能你也存在类似问题。而这些问题会在创业过程中会进一步放大,因为你现在是公司的老板,并且要为所有问题负责。

5、没有长远打算。从受雇于人到创业者是生活方式的重大转变,也是职业生涯的重大转变。创业不是在短期内可以积累大量财富的捷径,更不是逃避问题的方法。创业是一项艰苦的工作,只有通过不断学习和坚持不懈才能有所回报。

很明显,以上这些错误的做法有一定的内在关联性。当人们对自己估计过高,就会更加看重工作绩效的回报,并且对公司所给的报酬感到不满。这种状态会导 致他们冲动地做出创业决定,而对自己创业能力和创业机会缺乏认真考虑,在创业过程中他们也往往失望地会发现,创业更加让人不自在。

所有打工者都需要对上述这些问题进行认真的考虑,因为根据美国劳动统计局(U.S. Bureau of Labor Statistics)的统计数据,婴儿潮出生的人一生平均要换10次工作。在一家公司工作到退休或者一生都在创业的时代已经一去不复返了。近年来商业环 境快速变化,所以我们也需要与时俱进。

决定创业之前,可以问自己这样一个问题“如果事实证明我的决定错了怎么办?”要做好减少损失和勇往直前的准备。再三地从一种困境跳入另一种困境是不 可取的,不管在哪种情形下,都要认真对自己的优点和缺点有清楚的认识。乐于倾听他人对你的看法或指导,并且勇于改正自己的缺点。

还有最重要的一点,要了解工作中哪些因素能让你最感满意,对你来讲,怎样才算是达到工作与生活之间的最佳平衡状态。作为成年人,我们大多数时间都要在工作中度过,而生命却太过短暂,不应该将宝贵的时间浪费在对错误决定的懊悔中。

----------
看到上面的问题,你觉得你真的考虑好了吗?

Using Redis as a backend for Active Record

Using Redis as a backend for Active Record

说白了,yiiredis中的AR功能的model其实就是一个hash,只是稍作封装了而已

官方有例子:

Using Redis as a backend for Active Record

It is possible to store active record like structures in redis using ARedisRecord.

Note: this is experimental functionality and may be subject to change

$record = ARedisRecord::model()->findByPk(1); // loads a record with a unique id of 1 $record->name = "a test name"; // sets the name attribute on the record $record->somethingElse = "some other value"; $record->save(); // saves the record to redis $record->delete(); // deletes the record from redis

不过,上面的例子不能直接拿来用,因为ARedisRecord是一个abstract类,所以你得写一个类继承于他才行。
顺便,如果用setAttributes的时候,记得加第二个参数(除非你写了rules),否则一定要加第二个参数,不然save不成功哦。
昨天被它折腾了好久才发现
----
笔记而已

开始启用Yii的redis插件

开始启用Yii的redis插件

该死的command+左箭头。。。写了十分钟的东西全没了。
-------重新开始-----
由于目前的一个项目涉及到的数据库需要跨库跨表操作,而且该库会被频繁的插入、更新、删除,所以相对速度会较慢。但查询量又较大,在一台服务器的情况下,怎么办?分端口主从吧,意义不大,因为某些操作会导致CPU瞬间100%。
这时候我想到了key/value的数据库,想用它来做中间处理,比如大量的内容先经过它,再真正入库,毕竟我不需要过分实时,也不涉及到金钱交易。于是乎就在redis和mongo中间犹豫了。
在这期间咨询了三个人:老王(基于博客http://huoding.com/2012/02/29/146,基于Redis消息系统实现);11爷(redis有pub/sub功能);烂桔(mongo不太适用于单机,redis有内存模式)

基于上述原因,于是选择了redis,那么就开始我的Redis之旅吧
1、安装 Redis ,参考:http://library.linode.com/databases/redis/ubuntu-10.10-maverick(如果我没记错,这应该是11爷推荐的地址,他本来推荐的是Centos下的,但我用的是ubuntu,所以就参考这个了)
先来三个常规操作

apt-get update
apt-get upgrade
apt-get install build-essential

完事之后,接着:

cd /opt/
mkdir /opt/redis
wget http://redis.googlecode.com/files/redis-2.4.8.tar.gz
tar -zxvf /opt/redis-2.4.8.tar.gz
cd /opt/redis-2.4.8/
make

make完后做如下操作,将一些配置文件拷贝到/opt/redis目录下:

cp /opt/redis-2.4.8/redis.conf /opt/redis/redis.conf.default
cp /opt/redis-2.4.8/src/redis-benchmark /opt/redis/
cp /opt/redis-2.4.8/src/redis-cli /opt/redis/
cp /opt/redis-2.4.8/src/redis-server /opt/redis/
cp /opt/redis-2.4.8/src/redis-check-aof /opt/redis/
cp /opt/redis-2.4.8/src/redis-check-dump /opt/redis/
cp /opt/redis/redis.conf.default /opt/redis/redis.conf

接着,更新/opt/redis/redis.conf:

daemonize yes
pidfile /var/run/redis.pid
logfile /var/log/redis.log

port 6379
bind 127.0.0.1
timeout 300

loglevel notice

## Default configuration options
databases 16

save 900 1
save 300 10
save 60 10000

rdbcompression yes
dbfilename dump.rdb

dir /opt/redis/
appendonly no

以上是linode里的配置,你可以参考一下做处理。大部分都一样,但timeout/loglevel/dir这三个参数不太一样。可以看着注释改一下。 linode 中有一个:glueoutputbuf yes ,这个在2.4.8下面会出错,所以我就没有启用它。
接着是加入启用脚本,既然linode有配置参考,那么它就有启动脚本,默认redis是没有给你这些启动脚本的,所以偷懒一下吧,下载linode的脚本:

cd /opt/
wget -O init-deb.sh http://library.linode.com/assets/630-redis-init-deb.sh
adduser --system --no-create-home --disabled-login --disabled-password --group redis
mv /opt/init-deb.sh /etc/init.d/redis
chmod +x /etc/init.d/redis
chown -R redis:redis /opt/redis
touch /var/log/redis.log
chown redis:redis /var/log/redis.log
update-rc.d -f redis defaults

在这一步之后,你就可以直接用/etc/init.d/redis 来 start和stop redis服务了。

2、安装phpredis(https://github.com/nicolasff/phpredis)
在安装之前,先看readme:https://github.com/nicolasff/phpredis/blob/master/README.markdown
看完readme之后你会发现,原来一切是这样的简单啊
OK,先wget 回源代码,然后tar解开目录。。
接着3步搞定:

phpize
./configure
make && make install

速度超快,make install后,会告诉你redis.so生成在哪里,你将这extension=redis.so,加入到你的php.ini中即可。

3、下载YiiRedis项目。(由于我是用Yii的,所以直接用这个插件了,否则,还是参考一下phpredis的一些用法)
同样,在这里有readme:https://github.com/phpnode/YiiRedis/blob/master/README.md
项目地址:https://github.com/phpnode/YiiRedis(请自行下载)
使用方法也很简单,和db一样,在components下加一个组件:

"components" => array(
"redis" => array(
"class" => "packages.redis.ARedisConnection",
"hostname" => "localhost",
"port" => 6379
),
//...
),

加完它之后就可以写上一段测试代码了:

Yii::import("ext.yiiredis.*");
$list = new ARedisList("aNameForYourListGoesHere");
$list->add("cats");
$list->add("dogs");
$list->add("goods");
foreach($list as $i => $val) {
print_r($val) ;
echo "<br />";
}
$list->clear(); // delete the list

直接输出在浏览器中。是不是很HIGH?
------
OK,就介绍到这里,请试用吧。

=------

备注:

$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_NONE); // don't serialize data
$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP); // use built-in serialize/unserialize
$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_IGBINARY); // use igBinary serialize/unserialize

$redis->setOption(Redis::OPT_PREFIX, 'myAppName:'); // use custom prefix on all keys

由于redis默认不做序列化,因此如果要存储PHP的数据,如:数组、对象,那就必须用第二个setOption进行设置,以便 让数据自动序列化

安装windows 8 虚拟机

安装windows 8 虚拟机

身为一名正版用户,我还是挺能装B的。
比如,我的ParallelsDesktop在更新了一个补丁后,告诉我有windows 8 CP版 可以下载了。
于是花了将近一天的时间下载,安装。终于win8出现在了我的虚拟机里。

1G内存,跑的飞快,但有一个小问题,我不会关闭程序了(后来将鼠标移到最左侧,出现了任务列表,在上面右键,才把程序关闭了)

OUT了。一点都不会用,是一个比较花哨的windows(非常象苹果了,有屏幕四个角落的触发点、有app store,有全屏程序,有launchpad(按win键))没了开始菜单。

一下子不太习惯了。IE10好象感觉还不错,同时,默认的输入法也很爽(可惜不是五笔)

服务器升级到了php5.4

服务器升级到了php5.4

如题,没有什么好说的。
只是编译的时候原来的一些so库的目录不再是2009年的了,而是2010年,所以一些附加库需要重新编译。
如果你是lnmp用户,直接进入lnmp目录下,运行upgrade_php.sh
输入5.4.0即OK。
只是编译的过程很长。然后在最后还有一个警告,说是pdo_mysql没有编译进去。嗯,重新phpize一下就OK了。

服务器于是乎就顺利升级到了5.4.0

sablog x终于升级了

sablog x终于升级了

用Sablog也有N多年了,这不,从1.6至现在最起码也过去2~3年了。毕竟博客从一开始就用的是1.6,期间就没有换过。

所以,当发现后台突然提示:
2.0 Build 20120305已经发布。下载地址: http://www.sablog.net/

心是多么的纠结啊。我是换呢?还是换呢?还是换呢?
升级或许很方便,但我里面也多了一些额外配置。比如Backlinks,还有一些广告等。好纠结啊。

现在还不知道是否能够无缝升级,这也是我痛苦的地方。(准备搞一个子域名先试一下)

Yii Framework DB 中的一些参数

Yii Framework DB 中的一些参数

Yii的AR一直在被使用,当然,偶尔也只是看看其中的参数,都是直接把main.php中的数据注释掉就完事了
但事实上我们都忽略了一点点现实,那就是默认参数是没有什么性能提升的。

1、'schemaCachingDuration'=>3600,
这个在默认参数中是不存在的,如果你的表结构不太变动,完全可以不需要每次都show columns,show create table之类的。加上这个参数,可以将表结构缓存一小时(嗯,前提是,你配置了cache组件)

2、emulatePrepare=true ,这个是默认里面就带有的,它有什么用呢?
官方是这样说的:whether to turn on prepare emulation. Defaults to false, meaning PDO will use the native prepare support if available. For some databases (such as MySQL), this may need to be set true so that PDO can emulate the prepare support to bypass the buggy native prepare support. Note, this property is only effective for PHP 5.1.3 or above.
好吧,为了以防万一,还是打开算了

3、'enableProfiling'=>true
如果你想优化代码的话,可以尝试设置为true看看。官方在guide里说:By setting CDbConnection::enableProfiling to be true in the application configuration, every SQL statement being executed will be profiled. The results can be readily displayed using the aforementioned CProfileLogRoute, which can show us how much time is spent in executing what SQL statement. We can also call CDbConnection::getStats() to retrieve the total number SQL statements executed and their total execution time.

4、 'enableParamLogging'=>true,
这个就相对比较简单了,如果你设置为True,你在log中,就可以看到你的每次参数的参数是什么了,而不是:y01:y02这样的顺序变量。

5、tablePrefix = "xxx",这没什么好解释的。。。

6、charset="xxx" ,也没有什么好解释的,utf-8的话,中间的减号不要。。


这些都是常用的。。所以列出来

转:运作开源项目的一点经验

说实话,本文的内容真的不可以相信,至少在国内没有多少人会这么用。国内据我所知,做开源的没几个混的好的,除非已经是历史优久的那些。当你的开源做了一两年之后,你会发现你的项目已经被人改的面目全非,换个名字在卖钱、在运营,难道不是吗?国内的这些状态实在让人对做开源实在不是一个好的平台。忍忍吧。

看看别人是怎么说的:
上周我在 PHPUK 上面讲了一些关于开源项目的内容。我想把它们整理一下都记录下来,以免忘记。也许我不太适合来给出一些这方面的建议,但这些都是我运营 joind.in 的一些真实、重要的总结。
社区(Community)

你喜欢一个项目,分享了它的代码,并且公布了它,这就算是开源项目吗?在我看来这不是,开源项目必须有一个社区。作为兴趣,你这么做可以,但是你想要其他人也参与这个项目,事情就大不同了。

为了让别人参与贡献,你必须建立一些基础设施,可以让别人能够顺利沟通,看到项目的进展。作为项目的负责人,你需要管理这些基础设置。Joind.in 使用google groups的邮件列表,问题跟踪系统(atlassian为开源项目提供免费的授权)以及IRC频道。我们也有一个博客,以及twitter账户来发表 公开的声明。我们使用了多个邮件列表,外联、功能、开发。这样就可以让不同的人选择自己感兴趣的信息,而不会被其他信息淹没。

如果你的项目还不是很有名,你需要通过博客,twitter,stack overflow等各种渠道来让人们知道它。

说明文件(README)

在项目能获得其他人的贡献之前,你首先要保证其他人能顺利的配置你的项目。你最好在网页,wiki,博客,以及项目中都有README信息,因为你不知道人们习惯从哪里看这些信息。

项目规划(Roadmap)

有一个清晰的项目规划是非常有用的。当用户给你提出一些新功能的时候,你可以说“it's on the roadmap”,或者让他们去邮件列表讨论。人们也知道你们正在干什么。

贡献代码(Code Contributions)

这一点有点复杂。大部分的开源贡献者只对他们感兴趣的东西感兴趣,其他的功能或者系统的其他部分很难引起他们的兴趣。但是恰恰其他部分是系统的关键部分。 还有,作为项目负责人,你需要及时审核,测试,合并,部署这些贡献的代码。当某些贡献不能被采纳的时候,你需要告诉别人为什么,以及如何改进。

以我的经验来看,区分真正有用的贡献,以及一般般、没用的贡献是比较困难的。有可能那个贡献者提交了代码以后就消失了,剩下你来维护这个代码。这个问题似乎只能靠直觉去解决。你能做的就是诚恳的对待贡献者,说出你心里真实的想法。

透明化(Transparency)

对我来说,这是运营开源项目最重要的一点!人们能看到代码,能看到问题列表,邮件列表,甚至持续集成服务器。我可以向人们求助,指出哪段代码不工作。有时候,在我还没有意识到问题的时候,就会有人跳出来指出我的错误。

对于和我一起工作的人来说,他们可以看到哪些“pull request”是开放的,谁评论了什么,哪些代码在什么时候被采纳了。我会提交我参与的所有分支到githut。所以当有人问我一个功能的进度的时候,我往往直接告诉他们最新的版本号。

把项目的所有东西都拿出来给人看有点像是在熨烫一件脏衣服,让人有点不适。但是这样做的好处是你可以听到各种各样的建议。好几次我在twitter上贴出了一个bug链接寻求帮助,有不少人去留言,给建议,也有人直接去测试代码。
----EOF----
上文来自:http://cnbeta.com/articles/175607.htm
说实话,社区这东西,由于在国内私人不能架设论坛,其实有点让人蛋疼(虽然很多人都私自架设了),在社区内有四种人:潜水员、用户、开发者、骂人者。任何一个论坛都会有第四类人,除了黄色网站吧。真正参与到项目中的人真的很少,往往很多人都是索取者。痛苦啊。

粗心+jpeg 精度

粗心+jpeg 精度

jpeg大家都知道,它有一个精度的概念,一般如果我们用GD库做缩略图时,默认精度就是100,这时候压缩的图片还是和原来一样清晰,但事实 上我们不需要这样的清晰,毕竟在网页中72的dpi就足够了。所以当我们把精度设置为72时,尺寸会明显下载。下降的很厉害哦。
于是,我在我们目前的项目中用上了自动根据 URL生成了缩略图,指定了某个域名下的图片生成。但最终发现所生成的图片都是超级大,很让我意外,于是将精度调整为72,但效果仍然这样,没有变化,这是为什么呢?
排查了很多原因,都没有发现代码上有任何问题,最终在检查apache的conf文件时发现,我将某个serveralias写错了。我在多个域名中间用","分隔了,事实上多个域名应该是用空格分开。
那可能您又要说了,如果这个域名不存在,那岂不是会报错?是的,事实上就是错了,但。。。。我在默认的网站配置里也有一个自动生成缩图的配置,那个配置中,精度是100.所以,死活排查不出问题。

当然看到这里就知道,我的问题还是解决了。否则我就不可能在这里记录笔记了。
看过我博客的人都知道,我。。。粗心犯的错误太多了。哎。