Ubuntu下硬盘的UUID(memo)

Ubuntu的UUID相关的东西,因为不怎么用到,所以老是记不住,每次要用了都要search。在这里做个记号吧。
1,列出所有硬盘和分区的UUID
ubuntu#blkid

2,获取一个物理设备的UUID
ubuntu#vol_id -u /dev/sda1


... Read more!

Oracle中,一些工具命令(MEMO)

使用SQL来确认当前数据库的连接情况

SELECT * FROM V$SESSION;
SELECT * FROM V$TRANSACTION;


查看前一次执行的SQL内容
SELECT DISTINCT sq.* FROM v$session ss,v$sqltext sq
WHERE ss.prev_sql_addr = sq.address

ORDER BY sq.sql_id, sq.piece;

END
... Read more!

(转)LaTeX之字体类型与文档格式

最近在搞TeX,看到这篇文章,对以后的学习有帮助,所以记下来,以防丢失。:)
大家都说 Word 容易入门很难深入,而 TeX 的入门和深入都不容易。TeX/LaTeX 的复杂有一个原因在于它的名目繁多的字体类型和文档格式。这篇日志将总结下这两方面的问题。

首先是字体类型。LaTeX 中遇到的字体类型至少有 pk,metafont,type1,truetype 和 opentype 等等。pk 字体是点阵字体(在 pdf 文件中被视为 type3 字体),它可由 metafont 和 truetype 等矢量字体生成。type1 和 opentype 也是矢量字体,这四种矢量字体依出现的先后依次为 metafont,type1,truetype 和 opentype。(严格说来每个 metafont 和 type1 字体都由两个文件组成,这里不详叙。)
mktexpk 程序可从metafont 字体生成 pk 字体,ttf2pk 程序可以从 ttf 字体生成 pk 字体,而 ttf2pfb 和 ttf2pt1 程序可以从 ttf 字体生成 type1 字体。
其次是文档格式。LaTeX 中遇到的文档格式至少有 tex,dvi,ps 和 pdf。用 latex 程序可将 tex 文档编译为 dvi 文档,然后用 dvips 程序可以将 dvi 文档转换为 ps 文档,最后用 ps2pdf 程序可以将 ps 文档转换为 pdf 文档。
接着出现的 dvipdf 程序其实是一个小脚本,它将 dvips 和 ps2pdf 这两个程序连接起来,将 dvi 文档间接地转换到 pdf 文档。后来出来个 dvipdfm 程序,才真正地做到将 dvi 文档直接转换为 pdf 文档。然后在其基础上又出来个 dvipdfmx 程序,加强了对中日韩字体的支持。还有个 pdflatex 程序,可以直接将 tex 文档编译为 pdf 文档,最是简单快捷。
为使生成的 pdf 文档更加美观,特别是放大之后不产生锯齿,就必须在 pdf 文档中使用矢量字体。dvips 和 dvipdfm 只能使用 pk 点阵字体和 type1 矢量字体,而 dvipdfmx 和 pdflatex 可以使用 pk 点阵字体,type1 和 truetype 矢量字体。因此,为了得到高质量的 pdf 文档,最好用 dvipdfmx 和 pdflatex 来生成文档。
最新的 xelatex 程序也是将 tex 文档直接编译为 pdf 文档,而且它可以使用前面所说的所有字体,独特的是只有它能支持 OpenType 字体的高级特性


... Read more!

ORACLE:SQLメモ、テーブル一覧の抽出

コメント、テーブルスペースも含めて。

-- テーブル一覧を抽出する
SELECT A.TABLE_NAME AS TABLE_NAME, A.TABLESPACE_NAME AS TABLESPACE_NAME, A.STATUS AS STATUS
, A.TABLE_TYPE AS TABLE_TYPE,C.COMMENTS AS COMMENTS
FROM USER_TAB_COMMENTS C RIGHT OUTER JOIN
((SELECT TABLE_NAME, TABLESPACE_NAME, STATUS, 'TABLE' AS TABLE_TYPE FROM USER_TABLES)
Union (SELECT VIEW_NAME AS TABLE_NAME, '' AS TABLESPACE_NAME, '' AS STATUS, 'VIEW' AS TABLE_TYPE FROM USER_VIEWS)) A
ON A.TABLE_NAME = C.TABLE_NAME
ORDER BY A.TABLE_TYPE, A.TABLE_NAME;


... Read more!

Web页面中 的作用

在看一个seam示例的页面代码时看到了里面使用 , 想来想去不知道这个是代表什么。查看ASCII表,似乎160也是一个比较怪怪的符号。
在Google上用这个查询,很无奈,对于这样的一个含有特殊字符的关键字还没有好办法来查询。只能上论坛上问朋友,得出了下面的答案。
 就是 ,有些场合,比如.xsl里面,你写 默认是过不去的。只能这样写。

... Read more!

Tomcat中Context的设置

Tomcat中,要配置webapp时,通常会去编辑server.xml。比如配置Environment环境变量,Parameter参数,以及Resource和webapp的path等等。频繁的去动全局的server.xml会多不少麻烦,比如当你要频繁的配置在不同的机器上时。
我们可以把这些配置放在/META-INF/context.xml中,跟着我们的webapp走。这样改变的一个副作用就是,你的配置仅仅会被你当前的webapp来加载。而server.xml中的配置是全局起作用的(Glassfish中的话,在/domains/domain1/config/context.xml)。可以看下面一个例子,(摘自Seam的example)

<Context path="/jboss-seam-hibernate" docBase="jboss-seam-hibernate"
debug="5" reloadable="true" crossContext="true">

<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000" username="sa"
driverClassName="org.hsqldb.jdbcDriver" url="jdbc:hsqldb:." />
</Context>

再来一个示例。
<Context>
<Environment name="webapp-env" type="java.lang.String" value="webapp-env-value"/>
<Resource name="jdbc/__default" auth="Container"
type="javax.sql.DataSource"
description="Default Database"/>
</Context>

Glassfish从V2 Beta 2 以后的版本都应该支持这个特性。
... Read more!

hibernate.hbm2ddl.auto与import.sql

hibernate.hbm2ddl.auto与import.sql
设hibernate.hbm2ddl.auto为update/create-drop/create后,在classpath中扔一个/import.sql进去,hibernate启动时就会执行import.sql的内容。

hibernate.hbm2ddl.auto,这个参数的作用主要用于:自动创建|更新|验证数据库表结构。下面是这个参数的值说明:

  • validate SessionFactory创建时,验证创建数据库表结构
  • create SessionFactory创建时,重新创建数据库表结构
  • create-drop SessionFactory创建时,创建数据库表结构。SessionFactory关闭时,删除表结构
  • update SessionFactory创建时自动更新数据库结构


... Read more!

iBatis的Map文件中,格式化SQL文和非格式化SQL文的效率差异

本文的主要参数来自于iBatis的邮件列表,自己暂时还没有做完整的测试。相信有些是具体参数设置所引起的,比如statement caching等等。
所谓的格式化SQL文和非格式化SQL文是指,为了提高可读性写法的不同。具体可以从详细的例子看出来。

Example 1.0:


<insert id="insertPerson" parameterClass="springibatis.Person">
       <![CDATA[
       INSERT INTO people (
               last_name,
                 first_name,
                 age
               ) VALUES (
                 #lastName#,
                 #firstName#,
                 #age#
               );
       ]]>
</insert>

Example 1.1:

<insert id="insertPerson" parameterClass="springibatis.Person">
       <![CDATA[
       INSERT INTO people (last_name, first_name, age) VALUES (#lastName#,#firstName#, #age#);
       ]]>
</insert>

下面是具体测试参数
1.) 使用(Format A)插入10,000条数据,花费大概12-15 seconds。
(Format A)

<![CDATA[
INSERT INTO people (
       last_name,
       first_name,
       age
) VALUES (
       #lastName#,
       #firstName#,
       #age#
);
]]>

2.) 使用(Format B)插入10,000条数据,花费大概7-8 seconds.
(Format B)

INSERT INTO people (
       last_name,
       first_name,
       age
) VALUES (
       #lastName#,
       #firstName#,
       #age#
);

3.) 使用(Format C)插入10,000条数据,花费大概3-4 seconds.
(Format C)

INSERT INTO people (last_name, first_name, age) VALUES
(#lastName#,#firstName#,#age#);

————————————————————————————————————————
以上是别人测试的记录,看到SQL书写格式对性能有如此的影响,比较惊讶,推测是因为statement caching设置的问题。有时间我要自己尝试一下。

... Read more!

北京发现刮开无密码的假移动充值卡(卡也有山寨?)

新闻来源:京华时报
“密码条刮开以后居然什么都没有”,前几天,卖了十年充值卡的报亭老板张女士从马甸邮币卡市场购进的50张移动充值卡里,有一张卡没有密码。北京移动的工作人员表示,张女士可能买到了假卡。
张女士说,2月4日,一位顾客来报亭买了一张面值100元的移动充值卡,并要求当场充值。她随即替顾客刮开卡的密码条,却发现没有密码,再仔细一看,这张卡连序列号和截止日期都没有。担心其他充值卡是“无字卡”,张女士赶紧刮开了相连的其他几张卡,但这些卡没有问题。张女士说,她卖了十年充值卡,货也是从有一年交情的老主顾那里进的,从来没遇到过这样的事情。2月2日,她以每张卡98.5元的价格从马甸邮币卡市场购进50张面值100元的移动充值卡,就这一张有问题,这令她非常不解,“应该是漏印了,如果是假卡,怎么会只有一张,而且假卡都是错码,不会什么都没有”。
记者昨天看到了这张无密码的充值卡。从正面看,这张卡与其他充值卡没有任何不同,但是刮开的密码条却是一片空白,背面下方的序列号和截止日期也没有注明。事发后,张女士曾找供货商协调,但未得到解决。供货商周先生说,由于张女士上下相连的卡都已卖掉,单张的卡片真实性值得怀疑,“卖那么多货都没问题,也许是被掉包了”。
北京移动公司相关工作人员刘女士称,移动营业厅或代售点售出的充值卡还未出现过这样的问题。移动公司售出的充值卡,序列号都会有登记,如果充值中出现问题可以立即与客服联系。如果张女士的供货商是从移动公司购货,那么她将当日购进的其他卡片序列号报给供货商,再通过供货商与移动公司核对,方可查明情况。
由于同批卡片全部卖光,无法推断序列号,加上卡市发货都没有号段的登记,这张卡究竟是漏印,还是鱼目混珠的假货,也无从查起。刘女士建议,市民最好通过移动公司的正常途径购买充值卡。

... Read more!

怎么感觉iPhone就是个半成品手机(转自水木)

发信人: far*** (far***), 信区: Apple
标 题: 怎么感觉iPhone就是个半成品手机
发信站: 水木社区 (Fri Feb 6 21:10:20 2009), 站内

纯抱怨

短信送达提醒没有……(据说可以在前面加特殊的代码实现)
MMS没有……(8美元的SwirlyMMS)
不能查看单独一条通话的信息,比如电话是被拒绝了还是没人接听,时长……

当年Get A MAC里面Out of Box立刻开工的感觉没了……
据说所有的都要安装软件实现
可是Steve Jobs不是说People who are really serious about software should make
their own hardware……
据说还开发了好久
据说还把Leopard的开发人员调了过去开发2.X固件
就开发出这么个东西……

那个SwirlyMMS居然还要JailBreak……而且收8美元……
=============================
发信人: bigt*** (Big>small..嘿嘿), 信区: Apple
标 题: Re: 怎么感觉iPhone就是个半成品手机
发信站: 水木社区 (Fri Feb 6 21:11:21 2009), 站内

前两个不说了,
电话通话记录还是比较详细的,
只是没有每一条通话时长而已...

【 在 far*** (far***) 的大作中提到: 】
: 纯抱怨
: 短信送达提醒没有……(据说可以在前面加特殊的代码实现)
: MMS没有……(8美元的SwirlyMMS)
: ...................

...................


... Read more!

Mac下转换APE

音乐下载一直喜欢APE格式,平常逛街喜欢随身带iPOD,在Windows下面转APE的话非常简单,Mac下面可是找了好久。
在Google上搜索的时候,结果就不是非常的丰富。花费好多时间找到了Max,主页是这里,但是对于cue文件信息的读取好像是不支持的。经过水木上朋友的推荐,看到了X Lossless Decoder这个东东,看上去感觉不错。
... Read more!

关于Seam,一些想说的

最近的一个项目采用了JSF,因为JSF类似于JSP,只是提供了一种基本的页面表现技术,以及导航规则等等,无法算一个实际可用的应用型框架,于是寻找一个基于JSF的健壮的Framework就成了一件必要的事情。从Struts的页面链接看到了Shale,据说是完全抛弃了Struts的一种基于JSF的框架,花了点时间研究了一下,里面的Remoting和View Controller子包确实符合我的一部分需求。
因为项目整体一期规模比较小,就采用了Shale的这两个包,其它的比如权限控制等等就自己去简单实现了。项目完成后,总结JSF使用感觉的时候发现了下面一些问题。
1,XML配置太过于繁琐
2,异常处理太过于简陋
3,页面初始化的控制。虽然提供的ManagedBean看起来非常强大,但是对于单个页面的生命周期的严格控制不得不侵入生命周期去写一些代码。
4,页面流的控制
项目结束后,作为后续的开发准备,于是开始着手寻找一个更加强大的框架。简单的搜索了一下,很多地方都提到了JBoss的Seam这个东东。有两篇文章吸引了我,《深入浅出JBoss Seam》《Seam - 无缝集成 JSF,第 1 部分: 为 JSF 量身定做的应用程序》。其中第二篇中具体谈到了一些JSF的缺陷,恰好击中了我的心坎,于是马上着手准备Seam。但是看Seam的文档中提到了几个东西,JBoss,Hibernate,EJB3,这些都是我不会采用的,我希望Seam和他们不要牵扯太深,能够单独的配合JSF动作就可以了。我看到的第二篇出自IBM的文章让我消除了这种顾虑,上面明确的提出了你不需要使用EJB。按照文章中提到的方法,开始我的第一个Demo。在我的常识中,好的Framework,不仅仅功能强大,上手也应该是非常快,特别是出你的第一个hello world页面。但是Seam有点出乎我的意料,虽然第一个页面的出现非常顺利,但是后台的Error一直连续不断,看看都是和EJB和GTW相关的。于是去Seam的新闻组提出了我的疑问,有一个很热心的网友建议我使用seam-gen,并且告诉我此工具非常的强大。但是当我运行此工具的时候,起始的设置就要我选择JBoss的安装目录,然后让我选择RichFace,以及Hibernate方言之类,似乎用这个东西就注定了你必须使用JBoss,以及Hibernate。有点晕,有点怀疑Seam。虽然目前只是看了没有几个小时,但是我想我还是会继续研究它,但是对于很多人吹嘘的好,已经开始怀疑了。

... Read more!

修改显示式样,在一览里面显示概要

参照Blogger的帮助,在主页面显示文章的概要。

在添加下面代码的时候遇到了麻烦。因为我的模板经过了多次修改,早已经不带有style区域了,一开始没有注意,放到了skin的块中,结果怎么样也没有办法达到效果。

<b:if cond='data:blog.pageType == "item"'> 
   span.fullpost {display:inline;}
<b:else/>
   span.fullpost {display:none;} 
</b:if>

具体可以参照这里
整体过程还是比较繁琐的,期待Blogger下次改进的时候能够全自动加入这个功能。目前虽然修改成功了,但是修改之前的帖子已经无法使用该效果,除非一个一个的进行修改。这点上有点遗憾。

... Read more!

有趣的Chrome宣传视频


... Read more!

Tomcat和Glassfish,在处理JSF画面上未输入内容的Textfield的区别

Tomcat和Glassfish,在处理JSF画面上未输入内容的Textfield的区别
Tomcat版本:6.0.18
Glassfish版本:V2

一直在Tomcat下面开发的程序,考虑实际运行时使用Glassfish,于是拿到Glassfish上进行测试,按照J2EE的理论,一个编译好的war包应该可以在任何符合J2EE标准的Web服务器上运行。当顺利的部署好后,运行第一个检索画面的时候就出现问题,发现报错了。跟踪下来发现,在mb中有一个对画面输入值是否为空的判断


if(!customerid.equals(""))

在这句话上出现了问题,因为这个字段没有被输入,所以实际取得的customeridnull,但是这个画面在tomcat下面没有出现任何问题,使用的JSF包也是sun的实现。最后推测可能是Glassfish和Tomcat在对于jsp页面处理时背后的机制有所不同吧。还是老老实实的用StringUtils.isNotBlank()来进行判断吧。
... Read more!

那些郊游的日子

大约几个月之前的了。
DSC_6568_resize
DSC_6567_resize
... Read more!

添加了Blogger中源代码显示的CSS


CODE {
display : block;
white-space : pre;
background:#EEEEEE none repeat scroll 0 0;
border:1px solid #CCCCCC;
color:#000000;
font-family:'lucida console',fixed,monospace,terminal,couriernew,courier;
font-size:11px;
line-height:1em;
margin:2px 2px 6px;
overflow-x:auto;
overflow-y:hidden;
padding:2px;
}
CODE:first-line { line-height : 0; }


第二种

pre.source-code {
font-family : Andale Mono, Lucida Console, Monaco, fixed, monospace;
color : #000;
background-color : #eee;
font-size : 12px;
border : 1px dashed #999999;
line-height : 14px;
padding : 5px;
overflow : auto;
width : 100%;
text-indent : 0px;
}

... Read more!

最常用的Java工具

StringUtils

StringUtils.isEmpty(null) && StringUtils.isEmpty(""); // true
StringUtils.isBlank(" \n\t"); // true
StringUtils.substringAfterLast("foo.bar.baz", "."); // "baz"
StringUtils.substringBeforeLast("foo.bar.baz", "."); // "foo.bar"
StringUtils.split("foo.bar.baz", '.'); // { "foo", "bar", "baz" }
StringUtils.split("foo, bar,baz", ", "); // { "foo", "bar", "baz" }
StringUtils.leftPad("1", 3, '0'); // "001"

IOUtils and FileUtils

File file1;
File file2;
InputStream inputStream;
OutputStream outputStream;

// copy one file into another
FileUtils.copyFile(file1, file2);
IOUtils.copy(inputStream, outputStream);

// read a file into a String
String s1 = FileUtils.readFileToString(file1);
String s2 = IOUtils.toString(inputStream);

// read a file into a list of Strings, one item per line
List l1 = FileUtils.readLines(file1);
List l2 = IOUtils.readLines(inputStream);

// put this in your finally() clause after manipulating streams
IOUtils.closeQuietly(inputStream);

// return the list of xml and text files in the specified folder and any subfolders
Collection c1 = FileUtils.listFiles(file1, { "xml", "txt" }, true);

// copy one folder and its contents into another
FileUtils.copyDirectoryToDirectory(file1, file2);

// delete one folder and its contents
FileUtils.deleteDirectory(file1);


java.util.concurrent
使用 CopyOnWriteArrayList 和 ConcurrentHashMap,集合类型 List 和 Map 的高性能的、线程安全的实现。可参阅这里
在 Doug Lea 的 Concurrent Programming in Java 一书的第 2 章第 2.4.4 节(中,对 copy-on-write 模式作了最好的描述。实质上,这个模式声明了,为了维护对象的一致性快照,要依靠不可变性(immutability)来消除在协调读取不同的但是相关的属性时需要的同步。对于集合,这意味着如果有大量的读(即 get()) 和迭代,不必同步操作以照顾偶尔的写(即 add())调用。对于新的 CopyOnWriteArrayList 和 CopyOnWriteArraySet 类,所有可变的(mutable)操作都首先取得后台数组的副本,对副本进行更改,然后替换副本。这种做法保证了在遍历自身更改的集合时,永远不会抛出 ConcurrentModificationException。遍历集合会用原来的集合完成,而在以后的操作中使用更新后的集合。

这些新的集合,CopyOnWriteArrayList 和 CopyOnWriteArraySet,最适合于读操作通常大大超过写操作的情况。一个最常提到的例子是使用监听器列表。已经说过,Swing 组件还没有改为使用新的集合。相反,它们继续使用 javax.swing.event.EventListenerList 来维护它们的监听器列表。

集合的使用与它们的非 copy-on-write 替代物完全一样。只是创建集合并在其中加入或者删除元素。即使对象加入到了集合中,原来的 Iterator 也可以进行,继续遍历原来集合中的项。

// a map that may be modified (by the same or different thread) while being iterated
Map repository = new ConcurrentHashMap();

// same with lists. This one is only available with Java 6
List list = new CopyOnWriteArrayList();

此外关于apache common类库的使用,推荐这里
... Read more!

修改了Blog的body字体

一直不满意Blog中文字体的显示,曾经修改过很多种字体,但是一直没有找到满意的,今天换成了下面这个,感觉不错。


font-family: Pmingliu,verdana,arial,sans-serif;
font-size:14px;

... Read more!