我的机器很慢……
所以我只能用myeclipse6,但是它最高只有对tomcat6的支持(那时tomcat7还没出来)。
网上搜了一下,可以直接将tomcat7的地址配置到myeclipse tomcat6中的home directory。然后还要在Tomcat6/launch/create launch config/class path中将tomcat7 bin目录下面的jar包加上。
这样就可以了。
我这主要使用tomcat7的websocket功能,发现7.0.27和7.0.29的websocket api 有不同,所以对于使用maven的情况,要保证引用的websocket api(catalina.jar,tomcat-coyoto.jar)版本与目标tomcat一致。
目前tomcat的maven 引用一下子就把很多包下来了,如果这些包直接发布到目标tomcat中,又会造成冲突报addFilter错误。 maven有provide的引用scope,但是对myeclipse这样直接发布到tomcat又不行,我是将包发布后再删除(catalina.jar,tomcat-coyoto.jar)。
使用maven tomcat 插件也可以,但是我总觉得与实际环境越接近越好。
总之,我还是很讨厌maven……
另外tomcat7目前对safari的websocket支持不好。参见http://kazge.com/archives/792.html
Continue reading myeclipse6 配置tomcat7 websocket相关
上篇比较了spry与idtabs,这次试试spry与jquery ui的互转,结果是perfect!
参照css彻底研究的12.5 伸缩面板,将其例子拿来·
然后参照jquery ui 文档http://docs.jquery.com/UI/Accordion
发现居然不需要改任何html结构,
只要这样:
$(function() {
var ops = {
header:'div.AccordionPanelTab', //指定header选择器
event:'mouseover' //指定事件
};
$( "#Accordion1" ).accordion(ops);
});
因为spry和jquery ui accordion都是要求折叠项标题和内容紧邻,所以他们没有结构上的要求区别。
但是有一点,如果使用了jquery-ui的样式,则会覆盖设计好的样式,所以前提是不引用jquery-ui的样式,这样比较的话还是spry方便些了。
so, it is perfect!
Continue reading accordion, spry 与 jquery ui
今天分别使用了spry和idTabs .感觉都还可以,如果配合dreamweaver cs3,那spry更方便快速。
spry使用参见css彻底研究12.3。 spry tab本身不大,css也不大。
示例:
var TabbedPanels1 = new Spry.Widget.TabbedPanels("TabbedPanels1");
这就行了,TabbedPanels1是个容器div,包含了tab菜单和tab内容。它是通过容器div里面第一个子节点为tab菜单,第二个子节点为tab内容。菜单与内容必须一一对应。
若要使鼠标hover时就显示tab需要在tab菜单元素上添加onmouseover="TabbedPanels1.showPanel(1)",这样写不是很好。
再来看idTabs,
它的布局和spry类似,我直接使用上面spry的结构和css,
使用示例:
$(function(){
var ops = {
event:'!mouseover',//when mouseover will go to that tab, default is click
start:1, //start tab is 2nd(0 start index)
click: function(id,list,set){
//id is the target id like #tab1
//list is the target tab contents
//set is the tab menu selector
$('li',set).removeClass('TabbedPanelsTabSelected');
$(this).parent().addClass('TabbedPanelsTabSelected');
return true;
}
};
var s = $("#TabbedPanels1 ul");
console.log(s);
s.idTabs(ops);
});
此例中,选择#TabbedPanels1 ul中的a标记(这是idTabs要求的),它只支持a标记作为菜单项,并使用href属性作为跳转目标。
我直接使用spry生成的css, 出现问题,由于idTabs是将selected样式添加到a标签上,而一般a上面的li元素也需要改变选择样式。故代码中使用javascript来处理:
$('li',set).removeClass('TabbedPanelsTabSelected'); //将其他项设置为未选中
$(this).parent().addClass('TabbedPanelsTabSelected'); //将a父元素li的样式设置为'TabbedPanelsTabSelected'
这样就行了。
插件使用很简单,主要是漂亮的样式需要设计。
这是效果图:

另外我尝试了jquery-ui的tabs,它需要引用其样式,故不很理想。
Continue reading tab 控件 spry和idtabs 比较
上次使用 webservice 大概是七年前的事了,那时候还是用c#.net,微软正鼓吹xml和webservice起劲的时候,好像webservice能够真来个软件业的革命。
这期间多年的时间,对于webservice我是能躲则躲啊,因为觉得它雷声大雨点小,印象不好。现在偶尔要捡起来用一下。
还得看看资料先, 这篇文章写的比较适合入门
http://blog.csdn.net/qjyong/article/details/2148558
好,重要的一句是 wsimport -d ./bin -s ./src -p org.jsoso.jws.client.ref http://localhost:8080/hello?wsdl
对于已存在的webservice,生成客户端代理(这是我对.net的印象),然后就可以调用了。
找到继承service得类,可查看他的方法。
至于如何生成webservice,暂未有需求,以后用的时候再补充。
Continue reading webservice 使用
v3 overview
https://developers.google.com/analytics/devguides/reporting/core/v3/
php client
https://code.google.com/p/google-api-php-client/
文档
https://developers.google.com/analytics/
v3 api 文档
https://developers.google.com/apis-explorer/#s/analytics/v3/
可参照此教程来
https://developers.google.com/analytics/resources/tutorials/hello-analytics-api
其实最重要的一步就是oauth2.0验证了,这个是所有google api都需要的。
使用google的api client 库还比较方便。
大体流程是,需要在 https://code.google.com/apis/console/ 注册你的工程,这一步为以后请求api打基础。
创建项目,按照步骤来,在Api Acess选项,创建oauth client2.0 client ID。
Branding Information
界面填的信息是当你的web程序跳转到google认证页面时,google显示给用户看的,这样可以让用户知道是什么程序需要访问Ta的google账户,这个和openid有些像。
Client ID Settings
此界面需要你选择程序类型
Web application
Service account
Installed application
其中Service account是针对不需要访问google用户信息的程序,也就是不需要用户认证界面。像云存储,就不需要于某个用户关联。
这里使用google analytics还是需要用户信息的,所以应该选择Web application。
在Your site or hostname这一项中需要注意,这个链接是用于用户认证后google返回token的回调页面(http get,code参数带token),所以应该点击more options填上你希望google认证后跳转的页面,这个页面自然要负责将google的token保存在某个地方以便(一段时间内)下次使用。
点击创建clientid这时就为你创建好了用于api调用的oauth信息。
<?php
$client->setClientId('insert_your_oauth2_client_id');
$client->setClientSecret('insert_your_oauth2_client_secret');
$client->setRedirectUri('insert_your_oauth2_redirect_uri');
$client->setDeveloperKey('insert_your_developer_key');
?>
其中setDeveloperKey中设置的就是app key。
这样关键的oauth步骤就完成了,在其后就是查询api调用了。
https://developers.google.com/analytics/devguides/reporting/core/v3/reference
DataGaServiceResource->data_ga->get方法是这样定义的:
public function get($ids, $start_date, $end_date, $metrics, $optParams = array())
我所碰到的问题是,有用户自定义的dimension,如果在dimensions参数中包含了此维,那么只会返回有此维值得结果,相当于sql 中where条件中的and is not null了。故在写此维数据时,如果没有值也应该写个字符串’(not set)’,以免查询时没有此维值得记录被过滤掉了。
Continue reading google analytics Core Reporting API 使用