﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-damoco</title><link>http://www.blogjava.net/damoco/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 30 Apr 2026 08:15:55 GMT</lastBuildDate><pubDate>Thu, 30 Apr 2026 08:15:55 GMT</pubDate><ttl>60</ttl><item><title>过度设计</title><link>http://www.blogjava.net/damoco/archive/2009/08/23/292257.html</link><dc:creator>damoco</dc:creator><author>damoco</author><pubDate>Sun, 23 Aug 2009 09:19:00 GMT</pubDate><guid>http://www.blogjava.net/damoco/archive/2009/08/23/292257.html</guid><wfw:comment>http://www.blogjava.net/damoco/comments/292257.html</wfw:comment><comments>http://www.blogjava.net/damoco/archive/2009/08/23/292257.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/damoco/comments/commentRss/292257.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/damoco/services/trackbacks/292257.html</trackback:ping><description><![CDATA[PS：双人编程的一个好处：可以减少设计时间的浪费。也就是避免过度设计。<br />
因为没有pair，本来计划3个点（1故事点=1人时）的故事，花了20个点。。。<img src="/CuteSoft_Client/CuteEditor/images/emcry.gif" alt="" align="absmiddle" border="0" />拜过度设计所赐。<br />
想到了一个稍差点的替代方式，就是写blog<img src="/CuteSoft_Client/CuteEditor/images/emwink.gif" alt="" align="absmiddle" border="0" />。像下面这样：<br />
<br />
问题：多余的继承体系：view及其子类。本来在Canvas继承体系就可以搞定的。<br />
解决方案：合并继承体系。<br />
教训：不要轻信模式。不要轻信隐喻。重复代码是检验真理的唯一的标准。<br />
策略：<br />
<ol>
    <li>平行移动代码。不花时间保证编译通过，只要最终跑通单元测试即可。</li>
    <li>view顺便改为style</li>
</ol>
估算：1点。<br />
实际：2点。<br />
<img src ="http://www.blogjava.net/damoco/aggbug/292257.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/damoco/" target="_blank">damoco</a> 2009-08-23 17:19 <a href="http://www.blogjava.net/damoco/archive/2009/08/23/292257.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ViewPort（视口）跟随光标</title><link>http://www.blogjava.net/damoco/archive/2009/08/22/292182.html</link><dc:creator>damoco</dc:creator><author>damoco</author><pubDate>Sat, 22 Aug 2009 03:23:00 GMT</pubDate><guid>http://www.blogjava.net/damoco/archive/2009/08/22/292182.html</guid><wfw:comment>http://www.blogjava.net/damoco/comments/292182.html</wfw:comment><comments>http://www.blogjava.net/damoco/archive/2009/08/22/292182.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/damoco/comments/commentRss/292182.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/damoco/services/trackbacks/292182.html</trackback:ping><description><![CDATA[ViewPort跟随光标。光标大小可变。<br />
<h2>方案</h2>
<h3>保存图形数据</h3>
<p>类似游戏地图，但是游戏地图是可以保存在磁盘中的，用的时候读取，但是大部分时间还是保存在内存中。</p>
<p>问题</p>
<ul>
    <li>耗费内存。暂无解决方案。</li>
</ul>
<h3>绘图时更新光标位置</h3>
<h4>
问题</h4>
<ul>
    <li>ViewPort绘制先于光标，但更新晚于（依赖于）光标。因此绘制会延后一帧。解决方案：</li>
    <ul>
        <li>repaint一帧。最简单。问题：如何确定当前帧是否需要repaint。解决方案：在cursor中缓存是否移动的状态；根据此状态判断是否需要repaint。</li>
        <li>暂无其他<br />
        </li>
    </ul>
</ul>
结论：采用绘图时更新加repaint方法<br />
<img src ="http://www.blogjava.net/damoco/aggbug/292182.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/damoco/" target="_blank">damoco</a> 2009-08-22 11:23 <a href="http://www.blogjava.net/damoco/archive/2009/08/22/292182.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何配置和使用Tomcat访问日志</title><link>http://www.blogjava.net/damoco/archive/2009/05/18/271376.html</link><dc:creator>damoco</dc:creator><author>damoco</author><pubDate>Mon, 18 May 2009 09:58:00 GMT</pubDate><guid>http://www.blogjava.net/damoco/archive/2009/05/18/271376.html</guid><wfw:comment>http://www.blogjava.net/damoco/comments/271376.html</wfw:comment><comments>http://www.blogjava.net/damoco/archive/2009/05/18/271376.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/damoco/comments/commentRss/271376.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/damoco/services/trackbacks/271376.html</trackback:ping><description><![CDATA[<p><span style="font-size: 14px;">配置位置在log下的server.xml，(tomcat容器)</span></p>
<p><span style="font-size: 14px;">&lt;Engine defaultHost="localhost" name="Catalina"&gt;
<br />
&lt;Host appBase="webapps" name="localhost"&gt;
<br />
&lt;Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_log." suffix=".txt" timestamp="true"/&gt;
<br />
&lt;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"/&gt;
<br />
&lt;Context path="" docBase="cn_issue" debug="0"/&gt;
<br />
&lt;/Host&gt;
<br />
&lt;Logger className="org.apache.catalina.logger.FileLogger" prefix="catalina_log." suffix=".txt" timestamp="true"/&gt;
<br />
&lt;Realm className="org.apache.catalina.realm.UserDatabaseRealm"/&gt;
<br />
&lt;/Engine&gt;</span></p>
<p><span style="font-size: 14px;"><span style="color: #ff0000;"><span style="font-size: 14px;">以下是摘抄正文</span></span></span></p>
<p><span style="font-size: 14px;">original link:http://forum.ospod.com/post-25088-1.fhtml;jsessionid=3361F472A5E12B9B9BEA1632EC50603A</span></p>
<p><span style="font-size: 14px;">Access Log Valve用来创建日志文件，格式与标准的web
server日志文件相同。可以使用用日志分析工具对日志进行分析，跟踪页面点击次数、用户会话的活动等。Access Log
Valve的很多配置和行为特性与File Logger相同，包括每晚午夜自动切换日志文件。Access Log
Valve可以和任何Catalina容器关联，记录该容器处理的所有请求。
<br />
例子如下：
<br />
<valve classname="org.apache.catalina.valves.AccessLogValve"><br />
directory="logs" prefix="localhost_access_log." suffix=".txt"
<br />
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"/&gt;
<br />
<br />
<br />
</valve></span></p>
<table style="width: 90% ! important;" class="ubb_table">
    <tbody>
        <tr class="ubb_tr">
            <td class="ubb_td"><strong>className</strong></td>
            <td class="ubb_td">实现的Java类名。必须被设置成org.apache.catalina.valves.AccessLogValve。
            <br />
            </td>
        </tr>
        <tr class="ubb_tr">
            <td class="ubb_td">directory</td>
            <td class="ubb_td">存放日志文件的目录，可以是相对路径或者绝对路径。如果使用相对路径，是指相对于 $CATALINA_HOME的路径。如果不指定directory属性，缺省值是"logs"（相对于 $CATALINA_HOME）
            <br />
            </td>
        </tr>
        <tr class="ubb_tr">
            <td class="ubb_td">pattern</td>
            <td class="ubb_td">需要记录的请求/响应不同信息域的格式布局。如果是"common"或者"combine"，说明选择标准格式。下面会有关于配置这个属性的更多信息。
            <br />
            </td>
        </tr>
        <tr class="ubb_tr">
            <td class="ubb_td">prefix</td>
            <td class="ubb_td">日志文件名的前缀。如果没有指定，缺省值是"access_log."。如果不想使用前缀，使用长度为0的字符串。
            <br />
            <br />
            </td>
        </tr>
        <tr class="ubb_tr">
            <td class="ubb_td">resolveHosts</td>
            <td class="ubb_td">将远端主机的IP地址通过DNS查询转换成主机名，设为true。如果为false，忽略DNS查询，报告远端的IP地址。
            <br />
            <br />
            </td>
        </tr>
        <tr class="ubb_tr">
            <td class="ubb_td">suffix</td>
            <td class="ubb_td">日志文件名的后缀。如果没有指定，缺省值是""。如果不想使用后缀，使用长度为0的字符串。
            <br />
            <br />
            </td>
        </tr>
        <tr class="ubb_tr">
            <td class="ubb_td">rotatable</td>
            <td class="ubb_td">缺省值为true，用来决定日志是否翻转的标志。如果为false，日志文件永远不翻转，并且忽略fileDataFormat。要谨慎使用。
            <br />
            <br />
            </td>
        </tr>
        <tr class="ubb_tr">
            <td class="ubb_td">condition</td>
            <td class="ubb_td">打
            开条件日志。如果设置了这个属性，只有在ServletRequest.getAttribute()是null的时候，才会为请求创建日志。比如，如果
            condition设为junk，则只有在Servlet.getAttribute("junk")==null的时候，才会记录这个请求。使用过滤
            器，可以很容易设置（或者取消设置）不同请求的属性。 <br />
            </td>
        </tr>
        <tr class="ubb_tr">
            <td class="ubb_td">fileDateFormat</td>
            <td class="ubb_td">允许在日志文件名称中使用定制的日期格式。日志的格式也决定了日志文件翻转的频率。如果想每个小时翻转一次，将这个值设为yyyy-MM-dd.HH</td>
        </tr>
    </tbody>
</table>
<p><br />
pattern属性值由字符串常量和pattern标识符加上前缀"%"组合而成。pattern标识符加上前缀"%"，用来代替当前请求/响应中的对应的变量值。目前支持如下的pattern：
<br />
</p>
<ul>
    <li><strong>%a</strong> - 远端IP地址</li>
    <li><strong>%A</strong> - 本地IP地址</li>
    <li><strong>%b</strong> - 发送的字节数，不包括HTTP头，如果为0，使用"－"</li>
    <li><strong>%B</strong> - 发送的字节数，不包括HTTP头</li>
    <li><strong>%h</strong> - 远端主机名(如果resolveHost=false，远端的IP地址）</li>
    <li><strong>%H</strong> - 请求协议</li>
    <li><strong>%l</strong> - 从identd返回的远端逻辑用户名（总是返回 '-'）</li>
    <li><strong>%m</strong> - 请求的方法（GET，POST，等）</li>
    <li><strong>%p</strong> - 收到请求的本地端口号</li>
    <li><strong>%q</strong> - 查询字符串(如果存在，以 '?'开始)</li>
    <li><strong>%r</strong> - 请求的第一行，包含了请求的方法和URI</li>
    <li><strong>%s</strong> - 响应的状态码</li>
    <li><strong>%S</strong> - 用户的session ID</li>
    <li><strong>%t</strong> - 日志和时间，使用通常的Log格式</li>
    <li><strong>%u</strong> - 认证以后的远端用户（如果存在的话，否则为'-'）</li>
    <li><strong>%U</strong> - 请求的URI路径</li>
    <li><strong>%v</strong> - 本地服务器的名称</li>
    <li><strong>%D</strong> - 处理请求的时间，以毫秒为单位</li>
    <li><strong>%T</strong> - 处理请求的时间，以秒为单位</li>
</ul>
<p>结果举例如下：
<br />
- - - [29/Aug/2005:09:34:48 +0800] "GET
/waptest/server?productid=qqportal&amp;actionid=index&amp;user_type=1&amp;station=tencent&amp;mid=12345678908888&amp;mobile_no=13724179457&amp;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]"
<br />
</p>
<p>
- - - [29/Aug/2005:10:27:29 +0800] "OPTIONS / HTTP/1.1" 404 668 0.203 "-" "-" "Microsoft-WebDAV-MiniRedir/5.1.2600"</p>
<p style="color: #ff0000;">&nbsp;附录：server.xml <br />
</p>
&lt;?xml version='1.0' encoding='utf-8'?&gt;<br />
&lt;Server&gt;<br />
&nbsp; &lt;Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"/&gt;<br />
&nbsp; &lt;Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/&gt;<br />
&nbsp; &lt;GlobalNamingResources&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;Environment name="simpleValue" type="java.lang.Integer" value="30"/&gt;<br />
&nbsp;&nbsp;&nbsp;
&lt;Resource auth="Container" description="User database that can be
updated and saved" name="UserDatabase"
type="org.apache.catalina.UserDatabase"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;ResourceParams name="UserDatabase"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;factory&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;org.apache.catalina.users.MemoryUserDatabaseFactory&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;name&gt;pathname&lt;/name&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;conf/tomcat-users.xml&lt;/value&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/parameter&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/ResourceParams&gt;<br />
&nbsp; &lt;/GlobalNamingResources&gt;<br />
&nbsp; &lt;Service name="Catalina"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="80" redirectPort="8443"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/Connector&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;Connector port="8009" protocol="AJP/1.3"
protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler"
redirectPort="8443"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/Connector&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;Engine defaultHost="localhost" name="Catalina"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Host appBase="webapps" name="localhost"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_log." suffix=".txt" timestamp="true"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;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"/&gt;<br />
&nbsp;&nbsp; &nbsp;&lt;Context path="" docBase="cn_issue" debug="0"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/Host&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Logger className="org.apache.catalina.logger.FileLogger" prefix="catalina_log." suffix=".txt" timestamp="true"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Realm className="org.apache.catalina.realm.UserDatabaseRealm"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/Engine&gt;<br />
&nbsp; &lt;/Service&gt;<br />
&lt;/Server&gt;
<img src ="http://www.blogjava.net/damoco/aggbug/271376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/damoco/" target="_blank">damoco</a> 2009-05-18 17:58 <a href="http://www.blogjava.net/damoco/archive/2009/05/18/271376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>