damoco

 

2009年5月18日

过度设计

PS:双人编程的一个好处:可以减少设计时间的浪费。也就是避免过度设计。
因为没有pair,本来计划3个点(1故事点=1人时)的故事,花了20个点。。。拜过度设计所赐。
想到了一个稍差点的替代方式,就是写blog。像下面这样:

问题:多余的继承体系:view及其子类。本来在Canvas继承体系就可以搞定的。
解决方案:合并继承体系。
教训:不要轻信模式。不要轻信隐喻。重复代码是检验真理的唯一的标准。
策略:
  1. 平行移动代码。不花时间保证编译通过,只要最终跑通单元测试即可。
  2. view顺便改为style
估算:1点。
实际:2点。

posted @ 2009-08-23 17:19 damoco 阅读(236) | 评论 (0)编辑 收藏

ViewPort(视口)跟随光标

ViewPort跟随光标。光标大小可变。

方案

保存图形数据

类似游戏地图,但是游戏地图是可以保存在磁盘中的,用的时候读取,但是大部分时间还是保存在内存中。

问题

  • 耗费内存。暂无解决方案。

绘图时更新光标位置

问题

  • ViewPort绘制先于光标,但更新晚于(依赖于)光标。因此绘制会延后一帧。解决方案:
    • repaint一帧。最简单。问题:如何确定当前帧是否需要repaint。解决方案:在cursor中缓存是否移动的状态;根据此状态判断是否需要repaint。
    • 暂无其他
结论:采用绘图时更新加repaint方法

posted @ 2009-08-22 11:23 damoco 阅读(182) | 评论 (0)编辑 收藏

如何配置和使用Tomcat访问日志

配置位置在log下的server.xml,(tomcat容器)

<Engine defaultHost="localhost" name="Catalina">
<Host appBase="webapps" name="localhost">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_log." suffix=".txt" timestamp="true"/>
<Valve className="org.apache.catalina.valves.AccessLogValve" fileDateFormat="yyyy-MM-dd" pattern="%h %l %u %t %r %s %b %{Referer}i %{User-Agent}i %{x-jphone-uid}i %{x-up-subno}i" prefix="localhost_access_log." suffix=".txt" directory="/var/log/accesslog" condition="drop"/>
<Context path="" docBase="cn_issue" debug="0"/>
</Host>
<Logger className="org.apache.catalina.logger.FileLogger" prefix="catalina_log." suffix=".txt" timestamp="true"/>
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"/>
</Engine>

以下是摘抄正文

original link:http://forum.ospod.com/post-25088-1.fhtml;jsessionid=3361F472A5E12B9B9BEA1632EC50603A

Access Log Valve用来创建日志文件,格式与标准的web server日志文件相同。可以使用用日志分析工具对日志进行分析,跟踪页面点击次数、用户会话的活动等。Access Log Valve的很多配置和行为特性与File Logger相同,包括每晚午夜自动切换日志文件。Access Log Valve可以和任何Catalina容器关联,记录该容器处理的所有请求。
例子如下:

directory="logs" prefix="localhost_access_log." suffix=".txt"
pattern="%{X-Forwarded-For-Pound}i %l %u %t "%r" %s %b %T "%{HTTP_X_UP_CALLING_LINE_ID}i" "%{x-up-calling-line-id}i" "%{User-Agent}i"" resolveHosts="false"/>


className 实现的Java类名。必须被设置成org.apache.catalina.valves.AccessLogValve。
directory 存放日志文件的目录,可以是相对路径或者绝对路径。如果使用相对路径,是指相对于 $CATALINA_HOME的路径。如果不指定directory属性,缺省值是"logs"(相对于 $CATALINA_HOME)
pattern 需要记录的请求/响应不同信息域的格式布局。如果是"common"或者"combine",说明选择标准格式。下面会有关于配置这个属性的更多信息。
prefix 日志文件名的前缀。如果没有指定,缺省值是"access_log."。如果不想使用前缀,使用长度为0的字符串。

resolveHosts 将远端主机的IP地址通过DNS查询转换成主机名,设为true。如果为false,忽略DNS查询,报告远端的IP地址。

suffix 日志文件名的后缀。如果没有指定,缺省值是""。如果不想使用后缀,使用长度为0的字符串。

rotatable 缺省值为true,用来决定日志是否翻转的标志。如果为false,日志文件永远不翻转,并且忽略fileDataFormat。要谨慎使用。

condition 打 开条件日志。如果设置了这个属性,只有在ServletRequest.getAttribute()是null的时候,才会为请求创建日志。比如,如果 condition设为junk,则只有在Servlet.getAttribute("junk")==null的时候,才会记录这个请求。使用过滤 器,可以很容易设置(或者取消设置)不同请求的属性。
fileDateFormat 允许在日志文件名称中使用定制的日期格式。日志的格式也决定了日志文件翻转的频率。如果想每个小时翻转一次,将这个值设为yyyy-MM-dd.HH


pattern属性值由字符串常量和pattern标识符加上前缀"%"组合而成。pattern标识符加上前缀"%",用来代替当前请求/响应中的对应的变量值。目前支持如下的pattern:

  • %a - 远端IP地址
  • %A - 本地IP地址
  • %b - 发送的字节数,不包括HTTP头,如果为0,使用"-"
  • %B - 发送的字节数,不包括HTTP头
  • %h - 远端主机名(如果resolveHost=false,远端的IP地址)
  • %H - 请求协议
  • %l - 从identd返回的远端逻辑用户名(总是返回 '-')
  • %m - 请求的方法(GET,POST,等)
  • %p - 收到请求的本地端口号
  • %q - 查询字符串(如果存在,以 '?'开始)
  • %r - 请求的第一行,包含了请求的方法和URI
  • %s - 响应的状态码
  • %S - 用户的session ID
  • %t - 日志和时间,使用通常的Log格式
  • %u - 认证以后的远端用户(如果存在的话,否则为'-')
  • %U - 请求的URI路径
  • %v - 本地服务器的名称
  • %D - 处理请求的时间,以毫秒为单位
  • %T - 处理请求的时间,以秒为单位

结果举例如下:
- - - [29/Aug/2005:09:34:48 +0800] "GET /waptest/server?productid=qqportal&actionid=index&user_type=1&station=tencent&mid=12345678908888&mobile_no=13724179457&qazxcdew=1 HTTP/1.1" 404 710 0.015 "-" "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) Opera 7.11 [zh-cn]"

- - - [29/Aug/2005:10:27:29 +0800] "OPTIONS / HTTP/1.1" 404 668 0.203 "-" "-" "Microsoft-WebDAV-MiniRedir/5.1.2600"

 附录:server.xml

<?xml version='1.0' encoding='utf-8'?>
<Server>
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
  <GlobalNamingResources>
    <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
    <Resource auth="Container" description="User database that can be updated and saved" name="UserDatabase" type="org.apache.catalina.UserDatabase"/>
    <ResourceParams name="UserDatabase">
      <parameter>
        <name>factory</name>
        <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
      </parameter>
      <parameter>
        <name>pathname</name>
        <value>conf/tomcat-users.xml</value>
      </parameter>
    </ResourceParams>
  </GlobalNamingResources>
  <Service name="Catalina">
    <Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="80" redirectPort="8443">
    </Connector>
    <Connector port="8009" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="8443">
    </Connector>
    <Engine defaultHost="localhost" name="Catalina">
      <Host appBase="webapps" name="localhost">
        <Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_log." suffix=".txt" timestamp="true"/>
        <Valve className="org.apache.catalina.valves.AccessLogValve" fileDateFormat="yyyy-MM-dd" pattern="%h %l %u %t %r %s %b %{Referer}i %{User-Agent}i %{x-jphone-uid}i %{x-up-subno}i" prefix="localhost_access_log." suffix=".txt" directory="/log/accesslog" condition="drop"/>
    <Context path="" docBase="cn_issue" debug="0"/>
      </Host>
      <Logger className="org.apache.catalina.logger.FileLogger" prefix="catalina_log." suffix=".txt" timestamp="true"/>
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"/>
    </Engine>
  </Service>
</Server>

posted @ 2009-05-18 17:58 damoco 阅读(3874) | 评论 (0)编辑 收藏

导航

统计

常用链接

留言簿(2)

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜