2011年3月31日木曜日

Safari 5で突然RSSが取得できなくなったら(Mach error 268435460 - (ipc/send) timed out)” (NSMachErrorDomain:268435460)

アクティビティモニタを起動して「PubSubAgent」プロセスを終了させると復帰するかもしれません。

2011年3月28日月曜日

Hibernate3でhbm2java

NetBeans6.9.1で「データベースからの Hibernate のマッピングファイルと POJO」を実行するとjavaコードと.hbm.xmlが生成されますが、手を入れたhbm.xmlからjavaコードを生成する手段が見当たらなかったのでantでやりました。

build.xmlに以下を追加してhbm2javaタスクを実行。
class.pathは各自の環境にあわせてください。私はMacでNetBeansなので…。

単独のxmlに記載してbuild.xmlでimportしてもよし。
NetBeansではnbproject内のbuild-impl.xmlが実体でbuild.xmlでimportしているので。

<path id="class.path">
        <fileset dir="/Applications/NetBeans/NetBeans 6.9.1.app/Contents/Resources/NetBeans/ide/modules/ext/" includes="*.jar"/>
        <fileset dir="/Applications/NetBeans/NetBeans 6.9.1.app/Contents/Resources/NetBeans/java/ant/lib" includes="*jar"/>
        <fileset dir="/Applications/NetBeans/NetBeans 6.9.1.app/Contents/Resources/NetBeans/java/modules/ext/hibernate/" includes="*.jar" />
    </path>

    <property name="srcdir" value="${basedir}/src"/>

    <target name="hbm2java">
        <taskdef name="hibernatetool" classname="org.hibernate.tool.ant.HibernateToolTask">
            <classpath refid="class.path"/>
        </taskdef>
        <hibernatetool destdir="${srcdir}">
            <configuration configurationfile="${srcdir}/hibernate.cfg.xml">
                <fileset dir="${srcdir}">
                    <include name="**/*.hbm.xml"/>
                </fileset>
            </configuration>
            <hbm2java/>
        </hibernatetool>
    </target>

2011年3月21日月曜日

MacOSXのMySQLで日本語文字化け

文字コードをutf8にしとく。

1) /etc/my.cnf に文字コードを指定する。
存在しない場合は/usr/local/mysql/support-files/my-midium.cnfから複製

sudo cp /usr/local/mysql/support-files/my-midium.cnf /etc/my.cnf

[mysqld]以下にcharacter-set-server = utf8を追加

[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M  
character-set-server = utf8 <--これ

2) MySQLを再起動
3) Consoleで確認

show variables like 'character_set%';

| Variable_name            | Value
| character_set_client     | utf8
| character_set_connection | utf8
| character_set_database   | utf8
| character_set_filesystem | binary
| character_set_results    | utf8
| character_set_server     | utf8
| character_set_system     | utf8


4) すでに作成しちゃったdatabeseの文字コードを変更する。

mysqldumpでdump&restoreするんだけど、面倒なのでNavicat for MySQL Liteでやっちゃいました。

2011年3月10日木曜日

はじめてのQT

最近twitterをはじめた。で、今日はじめてQTされた。うれしいもんですね。

2011年3月7日月曜日

Gitの洗礼を受ける

http://gitimmersion.com/index.html

1)インストール
※macportsがインストールされている前提で
sudo port install git-core
2)初期設定
$ git config --global user.name "お名前"
$ git config --global user.email "メールアドレス"
 

2011年3月6日日曜日

+演算子、StringBuilder、StringBufferの文字列連結の時間計測

(JDK1.6)+演算子、StringBuilder、StringBufferのそれぞれで文字列を連結した場合の処理時間をNetBeansのプロファイラで計測した結果。



各テストが計測に妥当かどうか(コンパイラで最適化される書き方になっているかとか理解していないので)不明ですが…。意味のあるベンチマークとか私には難しすぎるw

1回こっきりだと、いずれも大差ないですが、繰り返し処理の場合は+演算子は相当不利っぽいので、普段は+演算子を使い、パフォーマンスが問題になった際には繰り返し処理内の文字列連結を確認することにしました(もちろん最もボトルネックになっているかどうかの計測は必要ですが)。

「いやいや計測方法がおかしいだろう」とか「そのコードじゃあ計測したことにならんよ」とか優しくおしえてくださいw

以下ソース

public class NewClassTest {

    private String s1 = "a";
    private String s2 = "b";
    private int loop1 = 1000;
    private int loop2 = 10000;
  
    public NewClassTest() {
    }

    @BeforeClass
    public static void setUpClass() throws Exception {
    }

    @AfterClass
    public static void tearDownClass() throws Exception {
    }
  
    @Before
    public void setUp() {
    }
  
    @After
    public void tearDown() {
    }

    @Test
    public void test01一回プラスで連結(){
        String str = s1 + s2;
    }

    @Test
    public void test02一回StringBuffer(){
        String str = new StringBuffer(s1).append(s2).toString();
    }

    @Test
    public void test03一回StringBuilder(){
        String str = new StringBuilder(s1).append(s2).toString();
    }

    @Test
    public void test04千回プラスで連結1(){
        String str = "";
        for (int i =0; i < loop1; i++) {
            str = str + i;
        }      
    }
  
    @Test
    public void test05千回StringBuilder1(){
        String str = "";
        StringBuilder sbui = new StringBuilder(str);
        for (int i =0; i < loop1; i++) {
            sbui.append(i);
        }
        str = sbui.toString();    
    }

    @Test
    public void test06千回StringBuffer1(){
        String str = "";
        StringBuffer sbuf = new StringBuffer(str);
        for (int i =0; i < loop1; i++) {
            sbuf.append(i);
        }
        str = sbuf.toString();    
    }

    @Test
    public void test07千回プラスで連結2(){
        String s = "abcdefg";
        for (int i = 0; i < loop1; i++) {
            s += "abc"+ "def";
        }
    }
  
    @Test
    public void test08千回StringBuilder2(){
        StringBuilder sbui = new StringBuilder("abcdef");
        for (int i = 0; i < loop1; i++) {
            sbui.append("abc");
            sbui.append("def");
        }
        sbui.toString();  
    }

    @Test
    public void test09千回StringBuffer2(){
        StringBuffer sbuf = new StringBuffer("abcdef");
        for (int i = 0; i < loop1; i++) {
            sbuf.append("abc");
            sbuf.append("def");
        }
        sbuf.toString();
    }

     @Test
    public void test10一万回プラスで連結1(){
        String str = "";
        for (int i =0; i < loop2; i++) {
            str = str + i;
        }      
    }
  
    @Test
    public void test11一万回StringBuilder1(){
        String str = "";
        StringBuilder sbui = new StringBuilder(str);
        for (int i =0; i < loop2; i++) {
            sbui.append(i);
        }
        str = sbui.toString();    
    }

    @Test
    public void test12一万回StringBuffer1(){
        String str = "";
        StringBuffer sbuf = new StringBuffer(str);
        for (int i =0; i < loop2; i++) {
            sbuf.append(i);
        }
        str = sbuf.toString();    
    }

  
    @Test
    public void test13一万回プラスで連結2(){
        String s = "abcdefg";
        for (int i = 0; i < loop2; i++) {
            s += "abc"+ "def";
        }
    }
  
    @Test
    public void test14一万回StringBuilder2(){
        StringBuilder sbui = new StringBuilder("abcdef");
        for (int i = 0; i < loop2; i++) {
            sbui.append("abc");
            sbui.append("def");
        }
        sbui.toString();  
    }

    @Test
    public void test15一万回StringBuffer2(){
        StringBuffer sbuf = new StringBuffer("abcdef");
        for (int i = 0; i < loop2; i++) {
            sbuf.append("abc");
            sbuf.append("def");
        }
        sbuf.toString();
    }
}