webservice 使用

上次使用 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 使用

google analytics Core Reporting API 使用

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 使用

【转】三种方式实现元素水平居中显示

转自:http://www.cnblogs.com/balaixianren/archive/2011/07/17/2108758.html

对比其他方案,第三种最普遍,参见http://www.enet.com.cn/article/2009/0309/A20090309442560.shtml

▲三种方式实现元素水平居中显示

css中让文本居中的属性很简单就可以实现,那就是设置text-align:center即可。而我这里所说的“元素”实际上是指容器,如果要有一个贴切点的标签,那应该可以用div来表示。

让元素水平居中,相信对于许多网页设计师而言都不会陌生。但是有的时候,自己就在想,为什么要让元素水平居中?是出于什么原因呢?都是一点自己的见解,蛮写下来...

首先,要 让元素水平居中,就必须得了解css设计中固定布局和流式布局两者的概念。它们之间的直观区别就看是否给元素设置了宽度。下面是两段代码,用来简单地说明固定布局和流式布局的区别。

1、固定布局demo:

复制代码
<html xmlns="http://www.w3.org/1999/xhtml">
   
<head>
       
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
       
<title>position-layout</title>
       
<style type="text/css">
        .wrapper{width:750px;position:relative;margin:
0 auto;text-align:left;}
        .contentArea{width:450px;position:absolute;top:
0;left:150px;height:500px;background:#96c;}
        .leftPanel{width:150px;position:absolute;top:
0;left:0;height:500px;background:#999;}
        .rightPanel{width:150px;position:absolute;top:
0;left:600px;height:500px;background:#06C;}
   
</style>
   
</head>
   
<body>
       
<div class="wrapper">
           
<div class="contentArea"></div>
           
<div class="leftPanel"></div>
           
<div class="rightPanel"></div>
       
</div>
   
</body>
</html>

   

复制代码

  2、流式布局demo:

复制代码
<html xmlns="http://www.w3.org/1999/xhtml">
   
<head>
       
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
       
<title>col3-margin-layout</title>
       
<style type="text/css">
            .contentArea{margin:
0 160px;height:500px;background:#96c;}
            .leftPanel{width:150px;
float:left;height:500px;background:#999;}
            .rightPanel{width:150px;
float:right;height:500px;background:#06C;}
       
</style>
   
</head> 
   
<body>
       
<div class="wrapper">
           
<div class="leftPanel"></div>
           
<div class="rightPanel"></div>
           
<div class="contentArea"></div>
       
</div>
   
</body>
</html>
复制代码

  通过上面两个例子,可以得出:流式布局不存在元素水平居中的可能,因为它都是满屏显示的。只有固定布局,因为限宽,所以就有了让元素水平居中的可能。

其次,固定布局的实现也不一定要让元素水平居中,之所以这么做,是为了让浏览器的两边能够留出平均的旁白,而不是只有一边是一大片空白,影响美观。

  都是些浅显的知识,下面进入主题。

============================================================================

   让元素水平居中的三种方式,我将分别进行介绍。如下:

1、自动外边距法

这是目前网页设计人员最熟悉的一种方法,它需要给容器设置宽度,并设置margin:auto样式。下面是一段代码:

复制代码
<html xmlns="http://www.w3.org/1999/xhtml">
   
<head>
       
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
       
<title>position-layout</title>
       
<style type="text/css">
        .wrapper{width:750px;margin:
0 auto;position:relative;}
        .contentArea{width:450px;position:absolute;top:
0;left:150px;height:500px;background:#96c;}
        .leftPanel{width:150px;position:absolute;top:
0;left:0;height:500px;background:#999;}
        .rightPanel{width:150px;position:absolute;top:
0;left:600px;height:500px;background:#06C;}
   
</style>
   
</head>
   
<body>
       
<div class="wrapper">
           
<div class="contentArea"></div>
           
<div class="leftPanel"></div>
           
<div class="rightPanel"></div>
       
</div>
   
</body>

</html>

   

复制代码

  通过这段代码,可以发现,这种方式在在目前各种主流浏览器下(包括ie6)都能很好的显示,只有在ie6以下的版本不生效,元素依然向左排列。如果不考虑低版本浏览器的问题,那么它将是最便捷的。

2、文本居中和自动外边距的结合使用。 

这种方式可以解决ie6以下版本不支持margin:0 auto的 问题,它的用法就是在body里设置text-align:center样式。具体代码如下:

复制代码
<html xmlns="http://www.w3.org/1999/xhtml">
   
<head>
       
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
       
<title>position-layout</title>
       
<style type="text/css">
            body{text
-align:center;}
           .wrapper{width:750px;position:relative;margin:
0 auto;text-align:left;}
            .contentArea{width:450px;position:absolute;top:
0;left:150px;height:500px;background:#96c;}
            .leftPanel{width:150px;position:absolute;top:
0;left:0;height:500px;background:#999;}
            .rightPanel{width:150px;position:absolute;top:
0;left:600px;height:500px;background:#06C;}
       
</style>
   
</head>
   
<body>
       
<div class="wrapper">
           
<div class="contentArea"></div>
           
<div class="leftPanel"></div>
           
<div class="rightPanel"></div>
       
</div>
   
</body>
</html>

   

复制代码

     在这里,text-align:center被作为css hack来使用,因为它本属于文本的样式,用在body里来实现元素居中的样式,做了本不属于自己该做的事...

3、负外边距法。

这种方式的实现方式比前两种复杂。它得结合定位来使用。具体代码如下:

复制代码
<html xmlns="http://www.w3.org/1999/xhtml">

    <head>
       
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
       
<title>negative-margin-element-center</title>
       
<style type="text/css">
            .wrapper{width:750px;position:relative;left:
50%;margin-left:-375px;}
            .contentArea{width:450px;position:absolute;top:
0;left:150px;height:500px;background:#96c;}
            .leftPanel{width:150px;position:absolute;top:
0;left:0;height:500px;background:#999;}
            .rightPanel{width:150px;position:absolute;top:
0;left:600px;height:500px;background:#06C;}
       
</style>
   
</head>
   
<body>
       
<div class="wrapper">
           
<div class="contentArea"></div>
           
<div class="leftPanel"></div>
           
<div class="rightPanel"></div>
       
</div>
   
</body>
</html>

复制代码

  首先,让容器相对文档向右偏移50%,然后,将容器的左外边距设置为负的容器宽度的一半,即可实现元素的水平居中显示。这种方式没有hack,且兼容性很好,能在最广泛的浏览器下表现一致。

  以上就是我所知道的三种实现元素水平居中的方法,都比较简单,写下来就当是一次知识的回顾总结吧。

Continue reading 【转】三种方式实现元素水平居中显示

swing全局钩子快捷键

之前还写过jna不错, http://kazge.com/archives/834.html ,但是这次想实现全局钩子快捷键,默认jna做不到,可能还要自己扩展。它没有完全封装user32 api,使用目前提供的不能判断shift, control 等系统组合键。

没办法只得使用jintellitype http://melloware.com/products/jintellitype/index.html

它的使用很简单,示例:

首先要将jintellitype .dll文件放到可加载目录中,也可放在包中,注意包名是com\melloware\jintellitype

注册alt + shift + b/B

//第一个参数2是自己使用的标识符

JIntellitype.getInstance().registerHotKey(2, JIntellitype.MOD_ALT + JIntellitype.MOD_SHIFT, (int)'B');

//事件中的参数也是上面得标识符2

JIntellitype.getInstance().addHotKeyListener(new HotKeyListener() {...);

销毁:

//这个2就是上面使用的标识符

JIntellitype.getInstance().unregisterHotKey(2);
JIntellitype.getInstance().cleanUp(); //这一句是卸载,会将dll文件删除,所以一般不需要调用。

注意有个问题就是注册函数registerHotKey第三个参数应该是大写字符,小写就不起作用。上面例子中无论用户按alt+shift+B或是alt+shift+b都会触发事件。

Continue reading swing全局钩子快捷键

Eclipse hover提示太快的问题

之前一直用myeclipse,鼠标hover到某个函数上时,它的文档提示会延迟显示,这样挺好的。

现在用eclipse,发现提示太快,本来想看代码,但是一个提示把代码给遮住了,你得小心移过去让提示消失才能看见代码。

eclipse倒是提供了hovers设置,但是只能禁止和开启:

Preference-->Java-->Editor-->Hovers
将列表项中的勾去掉。

 

网上找了一下,可以使用注册表来增加延迟:

运行regedit

HKEY_CURRENT_USER\Control Panel\Mouse\MouseHoverTime (REG_SZ) 如果没有就添加。

设置为delay值,单位为毫秒。

不过我试了一下,没有效果。重启一下系统后再试,确实可以了。300毫秒是比较合适的delay值。

Continue reading Eclipse hover提示太快的问题

maven 依赖类文件夹

今天六一,宝宝和大家都节日快乐。

使用maven要添加依赖,必须依赖是maven工程。现在我有个非maven工程怎么办,尝试了直接在build path中引用,结果找不到类,找了一下有没有对应插件,像这样的写法在maven3中又不支持:

		<dependency>
			<groupId>class-folder</groupId>
			<artifactId>class-folder</artifactId>
			<scope>system</scope>
			<systemPath>E:/project/classes</systemPath>
		</dependency>

最后想起老办法,在build path中增加link source指向引用工程的源码文件夹即可。

测试test和run都可以。

 

顺便提一下本地包的依赖写法:

		<dependency>
	      <groupId>xxx</groupId>
	      <artifactId>xxx</artifactId>
	      <version>2.0</version>
	      <scope>system</scope>
	      <systemPath>${basedir}/src/main/webapp/WEB-INF/lib/xxx.jar</systemPath>
	    </dependency>

其中basedir 指代项目根目录,version可随便写,但是必须要。

Continue reading maven 依赖类文件夹

eclipse php编辑设置

以前写java没怎么碰到linux上编码的问题。

而今写用eclipse写php,出现这个问题,别的开发者的代码文件都好好的,就我这个上传的编码格式怪怪的。似乎是utf-8又似乎是ansi。

有的人看是ansi,我自己看vim里面打开文件然后:set fileencoding 看的是utf8。 用notepad++看是ansi,转换成utf-8 without bom。保存后eclipse里面看不出来有改动,然后再用notepad++打开,还是ansi编码。晕了。

我的eclipse里面默认编码是utf-8,linux上运行也没问题,就是别的开发者反应格式与他们的不一样。

后来发现除了encoing,还有换行符不同。

需要在:

Window -> Preferences -> General -> Workspace :
Text file encoding :
Default : 选择此项将设定文件为系统默认的编码格式,后边会有提示具体是什么。
Other   : 选择一个具体的编码格式。
New text file line delimiter :
Default : 选择此项将设定新建的文件换行符为系统默认的换行符。
Other   : 选择一个具体的换行符样式。
换行符分别有:
Windows    : CRLF 0D0A 1310 \r\n (Carriage Return/Line Feed)
Unix/Linux : LF 0A 10 \n
Mac OS     : CR 0D 13 \r
编码格式设定将影响新建的文件和修改保存后的文件。
换行符设定只影响新建的文件,修改后保存将延续文件保存之前的换行符设定。
修改已存在文件的编码格式:
选择文件或文件夹 -> Properties -> Resource -> Text file encoding
修改已存在文件的换行符:
选择文件或文件夹 -> File -> Convert Line Delimiter To

Continue reading eclipse php编辑设置

derby 使用

很早之前用过derby当时觉得编辑数据很麻烦,现在又要用,忘记光了,重新来过。

可使用eclipse 的db开发视图(data source exploer)来创建一个数据库。加载驱动后包,使用org.apache.derby.jdbc.EmbeddedDriver,connection url中加create=true  即可创建一个数据库。

但是此时图不好创建表,那么可以配合myeclipse中的jdbc插件来建立连接来创建表和执行sql。

嵌入式方式是独占式的,谁建立的连接就把文件给锁了。myeclipse打开连接后需要推出myeclipse并删除derby目录下的db.lck才能让别的程序使用此derby。

Continue reading derby 使用

org.hibernate.MappingException: Unknown entity, 测试出的问题

今天hibernate黑了我一把, 将之前的hibernate工程拷贝建另一个工程,这回加个测试类,首先写几个测试怎删改查。

结果merge成功,findById, findAll,findByExample报错:

org.hibernate.MappingException: Unknown entity

确认不是配置错误,因为插入成功了。

试了半天搞不定,看之前的工程,没有测试类,心想是否测试类加载的问题?但是怎么merge可以呢?

后来试试直接运行程序,奇迹发生了,运行得好好的。

看来是测试环境造成的原因。我用的狗屎maven,估计又是这个造成的。

后来发现有个包common.collections有冲突,解决此问题后,发现findall可以,findById, findByExample仍然不行。看来还和包冲突有关。

最后只好源码跟踪,发现问题:

 

findById中

getSession().get(ENTITY_NAME, id)

ENTITY_NAME应该是类全名(含包名),而我的代码里却是类短名(不含包名)。

而hsql中应该是类短名。

这是myeclipse中自动生成的,想起来生成向导时没有写包名,导致如此。

放弃了,真BT的问题。花了我一下午。

Continue reading org.hibernate.MappingException: Unknown entity, 测试出的问题

Pagination


Total views.

© 2013 - 2019. All rights reserved.

Powered by Hydejack v6.6.1