随笔 - 175  文章 - 202  trackbacks - 0
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

第一个Blog,记录哈哈的生活

常用链接

留言簿(16)

随笔分类

随笔档案

文章分类

文章档案

收藏夹

Java links

搜索

  •  

最新评论

阅读排行榜

评论排行榜

转自:http://cupoy.javaeye.com/blog/251796

1. 脏读 :脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。

2. 不可重复读 :是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。例如,一个编辑人员两次读取同一文档,但在两次读取之间,作者重写了该文档。当编辑人员第二次读取文档时,文档已更改。原始读取不可重复。如果只有在作者全部完成编写后编辑人员才可以读取文档,则可以避免该问题。

3. 幻读 : 是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。例如,一个编辑人员更改作者提交的文档,但当生产部门将其更改内容合并到该文档的主复本时,发现作者已将未编辑的新材料添加到该文档中。如果在编辑人员和生产部门完成对原始文档的处理之前,任何人都不能将新材料添加到文档中,则可以避免该问题。

补充 : 基于元数据的 Spring 声明性事务 :

Isolation 属性一共支持五种事务设置,具体介绍如下:

l          DEFAULT 使用数据库设置的隔离级别 ( 默认 ) ,由 DBA 默认的设置来决定隔离级别 .

l          READ_UNCOMMITTED 会出现脏读、不可重复读、幻读 ( 隔离级别最低,并发性能高 )

l          READ_COMMITTED  会出现不可重复读、幻读问题(锁定正在读取的行)

l          REPEATABLE_READ 会出幻读(锁定所读取的所有行)

l          SERIALIZABLE 保证所有的情况不会发生(锁表)

不可重复读的重点是修改 :
同样的条件 ,   你读取过的数据 ,   再次读取出来发现值不一样了
幻读的重点在于新增或者删除
同样的条件 ,   第 1 次和第 2 次读出来的记录数不一样

posted @ 2010-03-10 11:09 哈哈的日子 阅读(211) | 评论 (0)编辑 收藏

编译 Trigger 出错,错误的原因是找不到sequence,但是在 sql 里面使用这个sequence非常正常。找了半天原因,另一个同事试了一下给这个sequence授权,就可以编译通过了。
疑惑了很久,为什么sql中可以用,编译trigger就不能用了呢。
查了一些资料,才明白。
是因为 Oracle 在编译Procedu的时候,只检查当前用户的权限,而不管角色。所以,即使这个用户是DBA,也没有用,必须要对这个用户授权。这就是显式授权。
我在CSDN上找到了一个很好的文章,解释了显式授权和隐式授权的区别。
附在下面。






来自CSDN博客,http://blog.csdn.net/pashine/archive/2009/12/21/5050060.aspx


oracle 对象的授权
Oracle授权

 

一、授权语法


GRANT 语法:

1.显式授权(直接将对象授权给用户)
 GRANT privilege [, ...] ON object [, ...]  TO  { Public| Group | Username|role} [WITH GRANT OPTION ] 
  
2.隐式授权(通过将角色授权给用户)
 GRANT role TO  { Public| Group | Username|role}

语法说明:

privilege (权限)
   可能的权限有:
     SELECT--访问声明的表/视图的所有列/字段.
     INSERT--向声明的表中插入所有列字段.
     UPDATE--更新声明的所有列/字段.
     DELETE --从声明的表中删除所有行.
     RULE   在表/视图上定义规则 (参见 CREATE RULE 语句).
     ALL 赋予所有权限.

object 赋予权限的对象名.
    可能的对象是: 
     table (表)
     view (视图)
     sequence (序列)
     index (索引)
Public    代表是所有用户的简写.
Group     将要赋予权限的组GROUP .目前的版本中,组必须是用下面方法显式创建的.
Username  将要赋予权限的用户名.PUBLIC 是代表所有用户的简写.
role      某个角色,(如DBA)
WITH GRANT OPTION 允许向别人赋予同样权限,被授权的用户可以继续授权.


描述
    对象创建后,除了创建者外,除非创建者赋予(GRANT)权限,其他人没有访问对象的权限。
    GRANT 允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。不需要给创建者赋予(GRANT)对象的权限,创建者自动拥有对象的所有权限,包括删除它的权限。

说明

Oracle不允许在过程中使用未经显式授权的对象. 要使用另一用户的对象,必须通过另一用户给自己显示授权。

因为Oracle在编译存储过程时并不检查定义者拥有的角色,只是检查其被显式授予的权限,而DBA也是一种角色,所以即使是DBA,也需要显式授权。

二、授权方式 (显式和隐式)


  对象授权有两种模式,显式和隐式: 
显示授权和隐式授权的区别是:显示授权是直接把对象授权给用户,隐式授权是给用户授予角色的方式来实现授权。

1. 显式授权是直接用GRANT语句进行授权。
 语法:GRANT 某种权限 TO 用户
如:
  CONN  USER1/Password
  GRANT SELECT  ON TABLE1 TO USER2;    --- 将user1的表TABLE1的select 权限显示授权给user2
  GRANT UPDATE  ON TABLE1 TO USER2;    --- 将user1的表TABLE1的update权限显示授权给user2


  注:用system/manager登录是没法授权的,要使USER2用户能在存储过程里面访问USER1用户的表,必须以USER1用户(该用户有dba权限)登录,然后授权就可以了。
  SQL>grant select on USER1.MA_USERINFO to USER2

2.隐式授权则是通过ROLE来授权。
 语法:GRANT 某个角色 TO 用户
如: 
  CONN  USER1 
  GRANT SELECT ON TABLE1 TO ROLE1;     --- 将USER1的表TABLE1的select权限显示授权给Role1
  CONN  SYSTEM 
  GRANT ROLE1 TO USER2;                --- 给USER2授与Role1的权限。


三、收回权限


   语法:
       revoke 权限 from 用户;

   例子:

  revoke select on table1 from User1; 收回查询select表的权限;
  revoke all    on table1 from User1;
    grant  connect to xujin;
  revoke  connect  from xujin

      revoke  ROLE1    from USER2;

End

posted @ 2010-03-05 11:25 哈哈的日子 阅读(1135) | 评论 (0)编辑 收藏

command + L : safari 在地址栏输入网址

command + option + L : safari 显示下载列表

command + shift + [ : safari 选择上一个标签

command + shift + ] : safari 选择下一个标签

command + enter : safari 在新的 tab 页中打开网页,也可以 command + 点击链接

fn + delete : 删除光标后面的字母,相当于 windows 下面的 delete

control + a : 相当于 windows 下的 home

control + e : 相当于 windows 下的 end

command + option + f : safari 中的 google search

command + option + ctrl + ⏏ : 关机

command + option + 拖拽 : 建立快捷方式

option + 点击已经最小化窗口 : 还原全部最小化窗口

posted @ 2010-02-03 20:45 哈哈的日子 阅读(188) | 评论 (0)编辑 收藏
1. 准备mysql,参考jira 4.0.1 war 方式的安装过程,使用mysql第1步,将数据库名由jiradb修改为confluence
2. 准备tomcat,参考jira 4.0.1 war 方式的安装过程,使用mysql第2步,2-b不做
3. 准备confluence
  a)下载confluence-3.1.zip,解压到一个临时目录$confluence_temp
  b)修改$confluence_temp\confluence\WEB-INF\classes\confluence-init.properties,增加一行 confluence.home=D:/atlassian/confluence,红色部分修改为实际的目录,confluence相关的数据会存到这个目录。
  c)下载confluence_crack.rar,将文件解压到$confluence_temp\confluence\WEB-INF\classes目录下
  d)运行$confluence_temp\build.bat
  e)将$confluence_temp\dist\confluence-3.1.war文件放到合适的目录下$confluence_war(或者不移动)
  f)在$catalina_home\conf\Catalina\localhost目录下创建confluence.xml,内容为<Context path="/confluence" docBase="$confluence_war" debug="0" reloadable="true" />,将$confluence_war替换为上一步的文件路径

然后启动tomcat,访问http://localhost:8080/confluence就可以了

license填写如下

Description=Confluence\: COMMERCIAL
NumberOfUsers=500
CreationDate=2010-01-22
ContactName=haha@haha.haha
conf.active=true
ContactEMail=haha@haha.haha
Evaluation=false
conf.LicenseTypeName=COMMERCIAL
MaintenanceExpiryDate=2011-01-21
conf.NumberOfClusterNodes=0
Organisation=haha
ServerID=HAHA-HAHA-HAHA-HAHA
LicenseID=LID
LicenseExpiryDate=2011-01-21
PurchaseDate=2010-01-22
posted @ 2010-01-25 10:59 哈哈的日子 阅读(2257) | 评论 (1)编辑 收藏

接着上一个的jira 4.0.1 war 方式的安装过程,使用mysql,把jira的login加上crowd,为之后增加confluence和svn的sso做准备

第一步先把jira的认证改成使用crowd,接着上次安装完jira的tomcat,继续安装

1. 准备mysql
  a)创建一个库create database crowd character set utf8;
  b)在my.ini中增加一行
  [mysqld]
  transaction-isolation = READ-COMMITTED
2. 准备tomcat
  a)修改$catalina_home\conf\server.xml,增加useBodyEncodingForURI="true",如下:
  <Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" useBodyEncodingForURI="true"/>
  b)下载javamail api,放到$catalina_home\lib目录下
3. 准备crowd
  a)下载atlassian-crowd-2.0.3-war.zip,并解压到$crowd_home
  b)修改$crowd_home\WEB-INF\classes\crowd-init.properties,增加配置crowd.home=$crowd_home($crowd_home替换成实际目录)
  c)创建crowd.xml,内容为<Context path="/crowd" docBase="$crowd_home" reloadable="false"/>($crowd_home替换成实际目录),将这个文件放到$catalina_home\conf\Catalina\localhost目录下
  d)启动tomcat,进入crowd,如:http://localhost:8080/crowd
  e)到applications中add application,类型选jira,name: jira, password: haha, url: http://localhost:8080/jira, ip最好手工填, directories选一个需要的,Allow all users to authenticate我选上了,成功
  f)import jira users在users里面选import users,import 的时候注意把dbname修改为jiradb就可以了。
4. 准备jira
  a)修改$jira_home\WEB-INF\classes\crowd.properties,如
  application.name                        jira
  application.password                    haha
  application.login.url                   http://hostname/jira/
  crowd.server.url                        http://hostname/crowd/services/
  ...
  其它的不需要修改
  b)修改$jira_home\WEB-INF\classes\osuser.xml,内容如下:

<!-- This is where JIRA's credentials checking can be configured.  For instance, see
http://www.atlassian.com/software/jira/docs/latest/ldap.html 
-->
<opensymphony-user>

    
<authenticator class="com.opensymphony.user.authenticator.SmartAuthenticator" />

<!-- CROWD:START
    You will need to uncomment the Crowd providers below to enable Crowd integration
    and comment out the default providers that are located further down in this file.
-->
    
<provider class="com.atlassian.crowd.integration.osuser.CrowdCredentialsProvider"/>
    
<provider class="com.atlassian.crowd.integration.osuser.CrowdAccessProvider"/>
    
<provider class="com.atlassian.crowd.integration.osuser.DelegatingProfileProvider">
        
<property name="provider-1">com.atlassian.crowd.integration.osuser.CrowdProfileProvider</property>
        
<property name="provider-2">com.atlassian.jira.user.ExternalEntityJiraProfileProvider</property>
        
<property name="provider-2-exclusive-access">true</property>
    
</provider>
<!-- CROWD:END -->

<!-- CROWD:START  - The providers below here will need to be commented out for Crowd integration -->
<!--
    <provider class="com.atlassian.core.ofbiz.osuser.CoreOFBizCredentialsProvider">
        <property name="exclusive-access">true</property>
    </provider>

    <provider class="com.atlassian.jira.user.osuser.JiraOFBizProfileProvider">
        <property name="exclusive-access">true</property>
    </provider>

    <provider class="com.atlassian.jira.user.osuser.JiraOFBizAccessProvider">
        <property name="exclusive-access">true</property>
    </provider>
-->
<!-- CROWD:END -->

</opensymphony-user>

  c)修改$jira_home\WEB-INF\classes\seraph-config.xml,内容如下:

<security-config>
    
<parameters>
        
<init-param>
            
<!--
              The login URL to redirect to when the user tries to access a protected resource (rather than clicking on
              an explicit login link). Most of the time, this will be the same value as 'link.login.url'.
                - if the URL is absolute (contains '://'), then redirect that URL (for SSO applications)
                - else the context path will be prepended to this URL

                If '${originalurl}' is present in the URL, it will be replaced with the URL that the user requested.
                This gives SSO login pages the chance to redirect to the original page
            
-->
            
<param-name>login.url</param-name>
            
<param-value>/login.jsp?os_destination=${originalurl}</param-value>
            
<!--<param-value>http://sso.mycompany.com/login?redirectTo=${originalurl}</param-value>-->
        
</init-param>
        
<init-param>
            
<!--
              the URL to redirect to when the user explicitly clicks on a login link (rather than being redirected after
              trying to access a protected resource). Most of the time, this will be the same value as 'login.url'.
                - same properties as login.url above
            
-->
            
<param-name>link.login.url</param-name>
            
<param-value>/login.jsp?os_destination=${originalurl}</param-value>
            
<!--<param-value>/secure/Dashboard.jspa?os_destination=${originalurl}</param-value>-->
            
<!--<param-value>http://sso.mycompany.com/login?redirectTo=${originalurl}</param-value>-->
        
</init-param>
        
<init-param>
            
<!-- URL for logging out.
                 - If relative, Seraph just redirects to this URL, which is responsible for calling Authenticator.logout().
                 - If absolute (eg. SSO applications), Seraph calls Authenticator.logout() and redirects to the URL
                 
-->
            
<param-name>logout.url</param-name>
            
<param-value>/secure/Logout!default.jspa</param-value>
            
<!--<param-value>http://sso.mycompany.com/logout</param-value>-->
        
</init-param>
        
<!-- The key that the original URL is stored with in the session -->
        
<init-param>
            
<param-name>original.url.key</param-name>
            
<param-value>os_security_originalurl</param-value>
        
</init-param>
        
<init-param>
            
<param-name>login.cookie.key</param-name>
            
<param-value>seraph.os.cookie</param-value>
        
</init-param>
        
<!-- This property controls how your cookie is encrypted.  If you truly want to secure your cookies, you need
            to change this to a secure password 
-->
        
<init-param>
            
<param-name>cookie.encoding</param-name>
            
<param-value>jiracookie</param-value>
        
</init-param>
        
<!-- This property sets the default cookie timeout in seconds.  It is currently set to 1 year -->
        
<init-param>
            
<param-name>autologin.cookie.age</param-name>
            
<param-value>31536000</param-value>
        
</init-param>
        
<!-- Basic Authentication can be enabled by passing the authentication type as a configurable url parameter.
        With this example, you will need to pass http://mycompany.com/anypage?os_authType=basic in the url to enable Basic Authentication 
-->
        
<init-param>
            
<param-name>authentication.type</param-name>
            
<param-value>os_authType</param-value>
        
</init-param>
        
<!--  If this parameter is set to true, the cookie will never be set secure.  This is useful if you're logging
              into JIRA via https, but want to browse JIRA over http.  This flag will ensure that the remember me option
              works correctly.
        <init-param>
            <param-name>insecure.cookie</param-name>
            <param-value>true</param-value>
        </init-param> 
-->
    
</parameters>

    
<rolemapper class="com.atlassian.jira.security.JiraRoleMapper"/>

    
<!-- CROWD:START - If enabling Crowd SSO integration uncomment the following JIRAAuthenticator and comment out the DefaultAuthenticator below -->
    
<authenticator class="com.atlassian.crowd.integration.seraph.JIRAAuthenticator"/>
    
<!-- CROWD:END -->

    
<!-- CROWD:START - The authenticator below here will need to be commented out for Crowd SSO integration -->
    
<!--
    <authenticator class="com.atlassian.jira.security.login.JiraOsUserAuthenticator"/>
    
-->
    
<!-- CROWD:END -->

    
<!-- NB: the URL to redirect to is now specified by login.url above -->
    
<services>
        
<service class="com.atlassian.seraph.service.PathService">
            
<init-param>
                
<param-name>config.file</param-name>
                
<param-value>/seraph-paths.xml</param-value>
            
</init-param>
        
</service>

        
<service class="com.atlassian.seraph.service.WebworkService">
            
<init-param>
                
<param-name>action.extension</param-name>
                
<param-value>jspa</param-value>
            
</init-param>
        
</service>
    
</services>

    
<interceptors>
        
<interceptor class="com.atlassian.jira.portal.PortalPageInterceptor"/>
        
<interceptor class="com.atlassian.jira.user.preferences.UserPreferencesResetInterceptor"/>
    
</interceptors>
</security-config>

  d)重启tomcat

一切搞定,可以使用crowd的用户登录jira了,而且只要在一边登录,两边就都登录了。


另外把遇到的问题写一下
1. 在crowd中import jira users的时候,将connection url改正确了之后,就是把dbname改成jiradb,依然无法连接,后来发现是crowd没有mysql jdbc驱动,停掉crowd,将mysql jdbc驱动放到crowd WEB-INF\lib目录,重试就可以了。
2. 所有的都配置好了之后,到jira里面仍然无法登录,通过查看crowd log,发现有这句话[crowd.service.soap.SOAPService] Client host is invalid: 10.40.155.43 / 10.40.155.43,明白了,因为在crowd里面add application的时候,使用的是自动得到IP,得到的是127.0.0.1。解决这个问题的办法就是在IP里面,把这个10.40.155.43也加上,就可以了。

posted @ 2010-01-22 15:27 哈哈的日子 阅读(7018) | 评论 (2)编辑 收藏

安装方式力求简单,更多优化配置需要进一步配置。

1. 准备mysql
  a)下载mysql-noinstall-5.1.42-win32.zip,解压到$mysql_home
  b)到$mysql_home目录下,将my-medium.ini修改为my.ini
  c)到$mysql_home\bin目录下,运行mysqld --console
  d)到$mysql_home\bin目录下,执行mysql -uroot,然后执行sql:
  create database jiradb character set utf8;
  e)下载mysql-connector-java-5.1.11.zip,备用
2. 准备tomcat
  a)下载apache-tomcat-6.0.20.zip,解压到$catalina_home
  b)下载jira-jars-tomcat6.zip,解压到$catalina_home\lib目录下
  c)把之前下载的mysql-connector-java-5.1.11.zip,解压里面的mysql-connector-java-5.1.11-bin.jar到$catalina_home\lib目录下
  d)修改$catalina_home\conf\server.xml文件,将里面的
  <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
  修改为
  <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8" />
  e)修改$catalina_home\bin\startup.bat,在@echo off后面增加一行
set CATALINA_OPTS=%CATALINA_OPTS% -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true -Dmail.mime.decodeparameters=true -Xms128m -Xmx512m -XX:MaxPermSize=256m
  f)启动一次,然后停止,为了在$catalina_home\conf目录下生成Catalina\localhost目录

3. 准备jira
  a)下载atlassian-jira-enterprise-4.0.1.zip,解压到一个临时目录$jira_temp
  b)修改$jira_temp\edit-webapp\WEB-INF\classes\entityengine.xml,将
  <datasource name="defaultDS" field-type-name="hsql"
  schema-name="PUBLIC"
  修改为
  <datasource name="defaultDS" field-type-name="mysql"
  注意:删除了一行schema-name="PUBLIC"
  c)修改$jira_temp\edit-webapp\WEB-INF\classes\jira-application.properties,将jira.home的值填好,jira相关的数据会放到这个目录下,比如:
  jira.home = D:/atlassian/jira/data
  d)下载jira_crack.rar,将WEB-INF目录解压到$jira_temp\webapp\目录下,覆盖一个目录,新增加了一个目录
  e)运行$jira_temp\build.bat
  f)修改$jira_temp\dist-tomcat\tomcat-6\jira.xml
  一、修改部分如下
  <Resource name="jdbc/JiraDS" auth="Container" type="javax.sql.DataSource"
            username="root"
            password=""
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost/jiradb?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=UTF8"
             maxActive="20"
            validationQuery="select 1"
/>
  注意,删除了两行
  minEvictableIdleTimeMillis="4000"
  timeBetweenEvictionRunsMillis="5000"
  二、如果移动了atlassian-jira-4.0.1.war
  还需要修改docBase
  g)将jira.xml复制到$catalina_home\conf\Catalina\localhost目录下

一切就绪,启动tomcat,第一次需要等比较久一点儿。
访问http://localhost:8080/jira,如果没问题的话,正确的填写配置后,license可以填写

Description=JIRA\: COMMERCIAL
CreationDate=2010-01-20
ContactName=haha@haha.haha
jira.LicenseEdition=ENTERPRISE
ContactEMail=haha@haha.haha
Evaluation=false
jira.LicenseTypeName=COMMERCIAL
jira.active=true
licenseVersion=2
MaintenanceExpiryDate=2011-01-19
Organisation=haha
jira.NumberOfUsers=-1
ServerID=B6FW-B4KW-J1A3-4DQB
LicenseID=LID
LicenseExpiryDate=2011-01-19
PurchaseDate=2010-01-20

就可以了
posted @ 2010-01-21 17:05 哈哈的日子 阅读(3938) | 评论 (7)编辑 收藏
     摘要: 转自:http://www.douban.com/group/topic/5667071/

第一:不要认为停留在心灵的舒适区域内是可以原谅的。
第二:不要把“好像”;“有人会……”;“大概”;“晚些时候”;“或者”;“说不定”之类放在嘴边。尤其是和上级谈论工作的时候。
第三:不要拖延工作
第四:不要认为理论上可以实施就大功告成了!
第五:不要让别人等你
第六:不要认为细节不重要
第七:不要表现得消极,仅仅因为你所做的事情不是你的兴趣所在。
第八:绝对不要把改善工作能力仅寄托在公司培训上
第九:不要推卸责任
第十:不要对自己说“我是大学生”   阅读全文
posted @ 2010-01-09 21:53 哈哈的日子 阅读(316) | 评论 (0)编辑 收藏

增加 weiphone 的源

http://app.weiphone.com/cydia/dists/stable/main/binary-iphoneos-arm/Packages

照别的源弄的,可以使用。
加了 ipa 破解和wefit

但 repo.beyouriphone.com 的源不怎么怎么加。

posted @ 2010-01-06 19:45 哈哈的日子 阅读(385) | 评论 (0)编辑 收藏
weiphone
http://app.weiphone.com/cydia

我用里面的ipa 破解和wefit

BeYoIp
http://repo.beyouriphone.com

里面有破解的 mQuickDo 挺好用的


默人的源里有 sbsetting 好用
posted @ 2010-01-04 12:45 哈哈的日子 阅读(412) | 评论 (0)编辑 收藏

开始使用 jira 4 + greenhopper 4,为了两个原因:
1. 简单:方便的创建问题,方便的更新状态(可视化拖拽)
2. 清晰:图表燃尽图显示项目状态,任务视图直观查看所有任务状态


一直希望项目组所有人都能够清楚的了解项目的状态。而我也能够跟踪项目中问题的状态,但实际情况确不像想象的那么容易。
之前一直使用 jira 来做项目问题管理,包括任务的管理。但发现实际上想要了解项目状态的时候,却比较困难。其实我发现最好工具的是纸、笔和白板,但办公室没有这个条件。

看不到项目状态有以下几个原因:

1. 项目风格比较宽松。愿意把任务记在上面就记,不愿意记就不记。我想起任务的时候,就会把任务记上,分配给相应的人。但不是每个人都习惯这样做。jira上没有所有的任务,自然无法看到状态。
2. 任务状态不及时更新。主要是懒得更新状态,嫌麻烦。其实和第一个原因比较接近。我一般不喜欢强制让别人做什么,只是想自己做自己喜欢的事情,愿意的事情就好了。虽然我认为 jira 用起来已经相当简单了,但仍然有人认为麻烦,所以,基本就不更新状态,或是记东西什么的。
3. 没有时间估计。这个是项目管理上的问题,我的本意是希望简单,自然,不要给同事们带来麻烦。但发现不估计时间简直就等于自杀,完全看不到项目的状态。

ps:其实评估任务的重要性相当的必要,但上面的问题主要是基于已经确定当前版本范围的情况。所以,也就不用太在意哪个更重要了。

第3个问题没有别的办法,只能进行时间估计。我采用大家一起来估计的方法,我充当产品负责人的角色给大家讲解需求,然后让每个人进行估计,因为目前的项目复杂度不高,所以估计工作量并不难。
我觉得大家一起来估计工作量有两个好处:一、大家有参与感,积极性相对会好一些。二、所有人了解所有的需求,以后有问题也好互相帮助。

前两个问题我希望能通过工具的简单程度解决问题,如果做起来很容易,就会自然去做,而不会觉得麻烦了。

我发现 jira 4 + greenhopper 4 可以方便的创建和修改任务,而且可视化拖拽。这样就能大幅度解决问题,而且燃尽图和任务视图,可以非常直观的给出项目状态,大幅度提高所有人对项目进度的认知。

周末随手破解了一下,暂时先用一用,解压到相应的目录下即可。
jira_crack.rar

换了之后,使用明文注册即可,注册信息可以随便修改,如下:
JIRA 的:

#Sun Oct 25 00:50:34 CDT 2009
Description=JIRA\: COMMERCIAL
CreationDate=2009-10-25
ContactName=haha@haha.haha
jira.LicenseEdition=ENTERPRISE
ContactEMail=haha@haha.haha
Evaluation=false
jira.LicenseTypeName=COMMERCIAL
jira.active=true
licenseVersion=2
MaintenanceExpiryDate=2010-10-24
Organisation=haha
jira.NumberOfUsers=-1
ServerID=B6FW-B4KW-J1A3-4DQB
LicenseID=LID
LicenseExpiryDate=2010-10-24
PurchaseDate=2009-10-25


GreenHopper 的:

#Sat Oct 24 19:09:35 CDT 2009
Description=GreenHopper for JIRA 4\: COMMERCIAL
CreationDate=2009-10-25
ContactName=haha@haha.haha
greenhopper.NumberOfUsers=-1
greenhopper.LicenseTypeName=COMMERCIAL
ContactEMail=haha@haha.haha
Evaluation=false
greenhopper.LicenseEdition=ENTERPRISE
licenseVersion=2
MaintenanceExpiryDate=2010-10-24
Organisation=haha
greenhopper.active=true
LicenseID=LID
LicenseExpiryDate=2010-10-24
PurchaseDate=2009-10-25

ps:本来想写个注册机,但 jira 从 4.0 开始更新了注册的公钥存放位置,原来是文件的,一般叫 leaf.key,现在直接写在程序里了,没办法,只能替换 class,这样写注册机就没什么意义了,所以就硬破解了一下。

posted @ 2009-11-01 21:52 哈哈的日子 阅读(8997) | 评论 (19)编辑 收藏
仅列出标题
共17页: First 上一页 6 7 8 9 10 11 12 13 14 下一页 Last