Archive

Archive for the ‘绝口不提技术’ Category

解决Discuz后台访问慢问题

November 2nd, 2014
做负载均衡,通过NFS来实现共享存储,但是作为NFS客户端服务器访问后台很卡,前台正常。

web目录切换到本地访问正常,判断问题出在NFS上。前台访问正常说明读没问题,考虑到后台有行为记录,大概是写日志时出事儿(data/log/xxxxxx_cplog.php)。测试取消写日志后台访问正常,确认是NFS写文件的问题。
测试读写速度虽然不快但也算正常,肯定是哪里卡住了。尝试了设置块大小,允许异步存储均无效,最后去掉文件锁(-o nolock),速度正常了。所以最终mount的命令是
mount -t nfs -o nolock,async,noatime server:path path
关于NFS的文件锁,这里有比较详细的介绍:

绝口不提技术 , , ,

discuz diy 模块推荐主题过滤Bug

October 21st, 2014

不小心接了个论坛的活,采用discuz 来搭建,遇到个Bug

开启门户4合1模块后报错:
1054) Unknown column ‘tr.tid’ in ‘on clause’
SELECT a.*, t.tid, t.subject, t.authorid, t.author FROM forum_activity a INNER JOIN `forum_thread` t ON t.tid=a.tid AND t.isgroup=’0′ AND t.displayorder>=’0′ INNER JOIN `forum_forumrecommend` fc ON fc.tid=tr.tid ORDER BY t.dateline DESC LIMIT 0,5;
PHP Debug
第一次访问(或者删除缓存后)出现,之后会正常显示,但是模块“根据推荐主题过滤”选项不起作用。不知道discuz 是怎么处理在报错的情况下还能正常生成缓存的,很厉害。

模块有个推荐主题过滤选项,是否只显示推荐主题。

source/class/block/forum/block_activity.php
line:277
if($recommend) {
$sqlfrom .= ” $joinmethod JOIN `”.DB::table(‘forum_forumrecommend’).”` fc ON fc.tid=tr.tid”;
}
意思应该是活动表和推荐表关联,但是关联表tr 错误,参考
line:281
$query = DB::query(“SELECT a.*, t.tid, t.subject, t.authorid, t.author$sqlfield
FROM “.DB::table(‘forum_activity’).” a $sqlfrom $where
ORDER BY $orderby
LIMIT $startrow,$items;”
);
应该改为:
if($recommend) {
$sqlfrom .= ” $joinmethod JOIN `”.DB::table(‘forum_forumrecommend’).”` fc ON fc.tid=a.tid”;
}
群组活动也有同样的问题:
source/class/block/group/block_groupactivity.php
line:292
if($recommend) {
$sqlfrom .= ” $joinmethod JOIN `”.DB::table(‘forum_forumrecommend’).”` fc ON fc.tid=tr.tid”;
}
改为:
if($recommend) {
$sqlfrom .= ” $joinmethod JOIN `”.DB::table(‘forum_forumrecommend’).”` fc ON fc.tid=a.tid”;
}

绝口不提技术 , ,

Joomla 发布和支持周期

October 20th, 2013

原文地址:http://docs.joomla.org/Release_and_support_cycle

这起码晚了两年吧,以前一直没认真看,只知道分了长期支持的版本和短期支持的版本。3.0出来后发现Joomla又可用了,所以翻出来这个看一下。

joomla的版本号分三部分:主版本.次级版本.维护版本。比如2.5.14,2是主版本,表示一个版本周期,5是次级版本,表示是这个版本周期的第几个发布版,14是维护版本,通常只是修复一些小bug,主要是安全性bug,不会有大的改动。

STS(short term support)短期支持版本,只会支持7个月,下一个版本出来后一个月就会停止技术支持。但是肯定可以自动升级到下一版本。

LTS(long term support)长期支持版本,会有27个月的技术支持,推荐普通用户使用。

现在Joomla 版本发布通常是这样的(以3.x为例):

在上一个LTS(2.5) 发布后,下一个版本周期开始了,首先是三个STS,先是3.0,扩展开发团队啊什么的开始跟进。然后是3.1,3.2,基本保持6个月一个版本的节奏,两年后,LTS3.5出现。

之前已经说了,STS之间和STS之后的LTS可以自动升级,而两个LTS之间,官方会提供迁移工具。

以前觉得Joomla版本升级导致扩展不兼容很麻烦,要是能别做这么大的升级,保持个版本兼容就好了。看到现在这个节奏我有觉得:真的大丈夫?这么缓慢?

绝口不提技术

mysql中week函数取第几周的问题

January 7th, 2013

虽然希望在数据库中尽量不设计任何逻辑相关操作,但是总难免使用一些函数协助查询,比如这次是week()。

默认操作:mysql> SELECT WEEK(’2013-01-03′);

想取2013年第一周的数据时发现不对,查手册发现还有个mode 参数 :WEEK(date[,mode])。

 Mode   第一天    范围     
 0  周日  0-53  本年度中有一个周日
 1  周一  0-53  本年度中有3天以上
 2  周日  1-53  本年度中有一个周日
 3  周一  1-53  本年度中有3天以上
 4  周日  0-53  本年度中有3天以上
 5  周一  0-53  本年度中有一个周一
 6  周日  1-53  本年度中有3天以上
 7  周一  1-53  本年度中有一个周一

所以默认2013.1.4会被算作第0周。

绝口不提技术 ,

Google Analytics 笔记 —— 异步追踪

November 6th, 2012

5,异步追踪方法
https://developers.google.com/analytics/devguides/collection/gajs/methods/gaJSApiBasicConfiguration
5.1 激发虚拟页面追踪
比如要追踪一个下载链接被点击,可以使用:

onclick=”_gaq.push([‘_trackPageview’, ‘/downloads/specSheet.pdf’);”

5.2 追踪事件
使用类似这样的代码,在用户鼠标点击时记录一次事件追踪

onclick=”_gaq.push([‘_trackEvent’, ‘Videos’, ‘Play’, ‘Baby\’s First Birthday’,1]);”

有如下参数:
1,catagories:事件的分类,必须有
2,action:事件的名称,必须有
3,label:给事件一 个描述,可选
4,value:事件有关的一个数值,需要是一个数字,可选,注意别带引号,我就不小心加了引号搞的没数据。
5,non-interaction:按照官方解释这是一个bool值,默认是true,意思是不计算跳出率

5.3 记录电子商务事件
添加商品: _addItem(orderId, sku, name, category, price, quantity)
_gaq.push([‘_addItem’,
‘1234’,         // order ID – necessary to associate item with transaction
‘DD44′,         // SKU/code – required
‘T-Shirt’,      // product name – necessary to associate revenue with product
‘Olive Medium’, // category or variation
‘11.99’,        // unit price – required
‘1’             // quantity – required
]);
添加交易
_addTrans(orderId, affiliation, total, tax, shipping, city, state, country)
_gaq.push([‘_addTrans’,
‘1234’,           // order ID – required
‘Womens Apparel’, // affiliation or store name
‘28.28’,          // total – required
‘1.29’,           // tax
‘15.00’,          // shipping
‘San Jose’,       // city
‘California’,     // state or province
‘USA’             // country
]);
追踪交易 _trackTrans()
Sends both the transaction and item data to the Google Analytics server. This method should be called after _trackPageview(), and used in conjunction with the_addItem() and addTrans() methods. It should be called after items and transaction elements have been set up.
_gaq.push([‘_trackTrans’]);

绝口不提技术 ,

Google Analytics 笔记google analytics,流量统计

September 19th, 2012

最近同事那拿到本Google Analytics 的书,开始研究下流量统计,学学如何做数据挖掘,分析用户行为,提升网站流量和使用者体验。。

1,名词
Visit:访问,指一个用户到网站的一次浏览,不管看了多少页面,只要没离开网站都只算一次Visit。一般如果中断30分钟没有任何操作就会判断这次访问结束。
UV(Unique Visitor):唯一访问者,判断一共有多少用户来过网站访问(通过cookie)
PV(Page View):页面访问量,每请求(服务器端统计)或者打开(客户端统计)一个页面就是一个PV
跳出率(Bounce Rate): = Single PV Visits / Total Visits  (有些是:Bounce Rate = Single Page Visits / Total Visits)

2,创建账号
一段标准的追踪代码:
<script type=”text/javascript”>
var _gaq = _gaq || [];
_gaq.push([‘_setAccount’, ‘UA-XXXXXXXX-X’’]);
_gaq.push([‘_trackPageview’]);
(function() {
var ga = document.createElement(‘script’); ga.type = ‘text/javascript'; ga.async = true;
ga.src = (‘https:’ == document.location.protocol ? ‘https://ssl’ : ‘http://www’) + ‘.google-analytics.com/ga.js';
var s = document.getElementsByTagName(‘script’)[0]; s.parentNode.insertBefore(ga, s);
})();
</script>

3,使用过滤器
界面右上角,点击“管理”按钮,打开配置界面。通过使用过滤器可以对追踪数据进行过滤,排除或者只包换某些特定的数据。

如排除工作人员的访问:
新建过滤器,“使用预定义的过滤器”,选择“排除”-“来自指定ip的流量”-“等于”-输入工作人员的ip。

4,报表
google analytics 包括受众群体,流量来源,内容,转化。最简单常用的是流量来源和内容。

流量来源:根据访问来源(包括搜索关键字)统计的访问次数,跳出率等,通过这里可以看到从哪个来源带给网站的流量最多,流量质量如何,协助决定推广策略。

内容:根据网站内容(或者定义的事件)统计浏览量,跳出率等,通过这里可以看到哪个网页被看到的更多,访客在哪个页面容易离开网站等。

绝口不提技术 ,

Java还能活多久?

November 20th, 2010

由于Oracle要终止ASF的一些授权,ASF扬言退出Java基金会,并号召JCP成员反对Java的新功能。

Oracle正式回应了 Apache基金会(ASF)对Java版权的抗议,没有说实质内容,只是说让java  向前走(“”Now is the time for positive action (and) to move Java forward.”)。而ASF的几乎是不屑的说“Oracle, the ball is in your court. Honor the agreement.”。

好 玩的是Eclipse基金会的反应:Eclipse会投赞成票通过Java 7。理由是ASF与甲骨文的争议短期内无解,但Java已经停滞三年没修改。前三年该基金会都支持ASF,但该基金会认为甲骨文不会让步,ASF也不可能 靠诉讼等方式推翻甲骨文的决定,JCP董事会也无法代替甲骨文提供ASF Harmony专案所需的授权。

这意思就是说ASF你就认了吧,Oracle如果坚持不遵守协议你也没办法,该干嘛干嘛吧。

其实从一个中国人的习惯思维上考虑我也觉得ASF不应该因为Oracle不给授权的事就反对Java未来发展计划,但是另一方面考虑如果不解决领导者乱来的问题,再好的规划有P用。

不管这次ASF是否退出,JCP的分裂已经开始,而Oracle在加强对Java的控制并企图将Java变得封闭。Java正在衰落,过程可能比原来想的快。

绝口不提技术 , , ,

搭建免翻墙的dabr

September 29th, 2010

2010年9月1日上线,发现自己搭建的dabr不能用了,Twitter停止对basic auth的支持,没办法只能重来,折腾半天总算搞定,记下全过程。

1,首先需要到Twitter 注册自己的API。地址是Twitter oauth ,Default Access type 选择 write & read,其他都可以乱填,Callback URL 应该是“dabr地址/oauth” ,但是dabr请求是会重置这个地址,所以即使填错也没关系。。

2,然后是修改Dabr 的config.php文件。将OAUTH_CONSUMER_KEY和OAUTH_CONSUMER_SECRET  根据刚才注册api得到的值填写,ENCRYPTION_KEY 随便输少于52个字符,保存,上传。

3,最后也是关键的一部,是搭建自己的oAuth验证工具。Dabr每次登陆都要使用oauth,默认情况下需要翻墙,那还要Dabr干嘛?还好有iTap(项目地址是http://code.google.com/p/itap),下载,解压,上传,得到iTAP的
地址 http://xxx/itap

打开common/user.php,找到
$authorise_url = ‘XXXXXXX‘,改为自己搭建的地址
$authorise_url = ‘http://xxx/itap/authorize?oauth_token=’.$token[‘oauth_token’];

4,搞定收工。

PS. 其实还有个简单的方法,就是拿zuola 修改的 奶瓶腿的 user.php替换掉默认的,具体见 https://www.zuola.com/weblog/?p=1558 这里。

绝口不提技术 , ,