アーカイブ

投稿者のアーカイブ

[Java] StringBuilderとStringBufferの速度差

Riflessi

Javaには、変更可能な文字列を表すクラスとして、StringBuilderとSringBufferの2種類のクラスが存在しています。

StringBuilderは非スレッドセーフ、StringBufferはスレッドセーフ、その分StringBuilderの方がStringBufferより動作速度が速い、という点が二つのクラス間の大きな違いのようです。

いったいどれくらい速いのか、ということについて気になったので、以下のコードを実行して調べてみました。StringBuilderとStringBufferを用いて”Hello, world!”という文字列を100万回結合し、その所要時間を計測しています。

ちなみに、環境はMac OS X 10.6 + JDK5です。

StringBuilder実験用コード

public class StringBuilderTest {
     public static void main(String[] args) {
          StringBuilder sb = new StringBuilder();
          long start = System.currentTimeMillis();
          for (int i = 0; i < 1000000; i++) {
               sb.append("Hello, world!");
          }
          long end = System.currentTimeMillis();

          System.out.println("required time: " + (end - start));
     }
}

StringBuffer実験用コード

public class StringBufferTest {
     public static void main(String[] args) {
          StringBuffer sb = new StringBuffer();
          long start = System.currentTimeMillis();
          for (int i = 0; i < 1000000; i++) {
               sb.append("Hello, world!");
          }
          long end = System.currentTimeMillis();

          System.out.println("required time: " + (end - start));
     }
}

結果

上記のプログラムを10回ずつ実行し、所要時間の平均値を計算したところ、結果は以下のようになりました。

  • StringBuilder:平均132.6 msec
  • StringBuffer:平均170.7 msec

StringBuilderはStringBufferの約78%の時間で処理を完了出来ていることがわかります。

Javaプログラマからすれば常識のようなのですが、上記の結果からもマルチスレッドからの文字列操作を行わない場合は、基本的にStringBuilderを使うのがよい、ということが言えそうです。一つ勉強になりました。

カテゴリー: プログラミング タグ: ,

Imagine Cup 2009 世界大会のドキュメンタリービデオ

2010 年 2 月 16 日 kadoppe コメントはありません

2009年7月にエジプトで開催された、Imagine Cup 2009 世界大会のドキュメンタリービデオを見つけました。

僕も、参加者として少しですが登場します。たった半年しかたっていないのに、もう既に何だか懐かしい気分。とても素晴らしい経験をさせていただきました。

ちなみに、Imagine  CupはMicrosoftが主催する学生のためのテクノロジーコンテストです。

Imagine Cupは、社会問題の解決に焦点を当てて開催される、学生のためのコンテストです。
才能あふれるデザイナー、フォトグラファー、映像クリエイター等の皆さんの参加をお待ちしています。

発信したいという想いを持った皆さん。より良い世界をイメージし、それを実現してみませんか。Imagine Cup には、170 カ国以上の世界中の国と地域から 30 万人以上の学生が参加しています。

Imagine Cup とは? | Imagine Cup 2010 Poland (イマジンカップ 2010 ポーランド)

前編

後編

カテゴリー: イベント タグ: ,

「休日Webアプリクリエイターズ(仮)」のようなコミュニティを作りたい or 参加したい

2010 年 2 月 11 日 kadoppe コメントはありません

48 hour challenge, second day

このところ、新しいWebアプリのアイデア創出、開発、公開、運営を、本業(仕事 or 学業)とは別にメンバー各人が休日に行えるようなコミュニティがあればいいのに、と考えるようになりました。

僕としては、以下の項目に該当するような人たちが集まっていて、自分が出来る範囲で活動にコミットできるようなゆるい感じのコミュニティをイメージしています。

  • Webアプリのアイデアが持っている、けど一人で作れるかどうか不安。
  • プログラミングがしたい、けど作りたいもののアイデアが特にあるわけではない。
  • オープンソースプロジェクトに参加するのはまだ少し敷居が高く感じる。

それを仕事とするのではなく、あくまで趣味の範囲での活動です。起業とも関係ありません。

Twitter上で色々な方とお話していると、作りたいWebアプリのアイデアがポッと湧き出てくることがあります。そういうアイデアをTwitter上でゆるい感じで知り合った皆さんと協力して具現化できるような枠組みがあれば面白そうだ!とふと思ったのが、今回の件を考え始めたきっかけです。

「ある特定の場所に住んでいる人」のように限定されたコミュニティである必要はないと思っています。たとえ離れていても、必要なミーティングはSkypeなどを用いてビデオでもチャットでも行うことができますし、開発もきっとできるはず?

とまぁ、ものすごく漠然としているのですが、僕が今考えていることはこんな感じです。

もし、すでに同じコンセプトで活動されているコミュニティがあればどうか入れてください。まだ、そういうコンセプトのコミュニティがないのであれば、頑張って作ってみたいと思います。

「そんなコミュニティいらねぇよ」「一緒にやってみたい」「こんなコミュニティがあるよ」など、コメント・ツッコミ等いただけると幸いです。

どうぞ、よろしくお願いいたします。

カテゴリー: プログラミング タグ:

自分自身の成長・アイデア創出のために、できなかったこと・困ったことを毎日に記録する

2010 年 2 月 10 日 kadoppe コメントはありません

Good Idea

毎日をそれなりに頑張って過ごしていれば、自分がしたいことが何らかの原因でできなかったり、もっと効率良くしたいのに時間がかかって困ってしまう、といったことをたくさん経験すると思います。

次の記事を読んで、そのような状況を「あー、できなかったな、まぁいいや」というようにスルーするのではなく、「できなかったこと・困ったこと」の原因をできるだけ深く追求するのが大事だと感じました。

あなたのためにスタートアップのアイデアを得るための簡単なレシピをお教えしよう。あなた自身の生活に欠けているものを何か見つけ、そのニーズを満たすものを提供すればいいのだ——それがどんなに特殊なものに見えても構わない。スティーブ・ウォズニアックは自分でコンピュータを作ったが、そんなものを欲しがる人が他にもたくさんいると誰にわかっただろう? 狭いが真性のニーズというのは広いが仮想的なニーズよりも、出発点としてはいいのだ。だからあなたの問題が土曜の夜だというのにデートの相手がいないということ なのだとしても、ソフトウェアを作ってそれを解消できる方法を見つけたなら、何かに行き当たったことになる。同じ問題を持つ人なら大勢いるからだ。
スタートアップを始めない理由が間違っている理由

「できなかったこと・困ったこと」に正面から向き合わずに、それらをなかった事にしてしまうと、自分自身の成長やアイデア創出の機会をみすみす見逃すことになってしまいます。「失敗から学べ」とよく言いますが、まさにそのとおりで、「できなかったこと・困ったこと」をどのようにして成長やアイデアの創出に生かすか、ということについて自分なりに最大限工夫する必要があると思います。

というわけで、今日から僕は、日々経験した「できなかったこと・困ったこと」を毎日Evernoteに記録していくことにします。もちろん、それらについて記録するだけではなくて、

  • 「何故できなかったのか?(既存の方法は無かったのか?)」
  • 「何故困ったのか?(効率の良い既存の方法は無かったのか?)」

ということについても徹底的に考え、調べるようにします。

他に方法が見つかれば、その方法を知らなかった以前の自分と比べて成長したことになります。他にもっと効率の良い方法が見つかった場合も同じです。

もし、本当に既存の方法が無いのであれば、それを解決する方法を考えます。そこで何かをひらめくことができれば、めでたくアイデアが生まれたことになります。

いくら考えても何もひらめかないこともあるかもしれません。そういう時には潔く考える事をやめてもいいのではないかとぼくは思います。ある程度時間がたってから、過去に記録した「できなかったこと・困ったこと」を改めて読むと、全く別の視点から物事を捉えることができ、新しいアイデアが生まれることもありそうですしね。

日々経験した「できなかったこと・困ったこと」は、どこかに書き留めていないとすぐに忘れてしまいがち。思いついたらすぐにメモしてみようと思います。何かいいアイデアが思いつけるといいなぁ。

カテゴリー: 人生 タグ: ,

[MySQL] 特定のデータベースをバックアップ & リストアする方法

2010 年 2 月 10 日 kadoppe コメントはありません

いつも忘れてしまうので、メモ。

以下のコマンドを実行することで、特定のデータベースをバックアップすることができます。バックアップファイル名は何でもいいですが、バックアップ日時がわかるような名前をつけると後々便利かと思います。

$ mysqldump データベース名 -u root -p --opt > バックアップファイル名

次はリストア。以下のコマンドを実行することで、先程作成したバックアップファイルからリストアすることができます。

$ mysql -u root -p データベース名 < バックアップファイル名

頻繁に使わないコマンドはすぐに忘れてしまうなぁ。みなさんはどうやって覚えているんでしょうか?

カテゴリー: サーバ タグ: , , ,

[PHP] 現在のUnixタイムスタンプをマイクロ秒単位で取得する方法

2010 年 2 月 10 日 kadoppe コメントはありません

PHPで現在のUnixタイムスタンプをマイクロ秒単位で取得したい時は、microtime()関数を使うとよいそうです。最初、どうすればよいかわからなかったので一応メモしておきます。

使い方は以下の通り。

$time = microtime(true);
echo $time;    // output: "1265774277.5366"

引数に「true」を渡すことで戻り値がfloat型になります。

引数に何も渡さない場合 、または「false」を渡した場合は、以下のようにマイクロ秒とUnixタイムスタンプをスペースで区切った文字列が出力されるので注意が必要です。

$time = microtime();
echo $time; // output: "0.53658800 1265774277"
カテゴリー: プログラミング タグ: ,

D新年会@京都に参加して

2010 年 1 月 31 日 kadoppe コメントはありません

2010.2.1 追記:他の参加者の感想記事リストを作りました。

2010年1月30日に開催された「D新年会@京都」に、幹事の一人として参加してきました(もう一人の幹事は@okeihaan)。昨年度末に、「D(博士課程の学生)が集まって、研究室、研究分野、大学の壁を超えてラフに語り合えるような場所を作ろう!」という目的のもと「D忘年会@京都」を開催しましたが、今回もモチベーションもそれと同じです。

参加者は幹事も含めて11名、前回の忘年会は8人だったので、少し増えたことになります。内訳としては、前回からの参加者が6人、今回から参加された方が 5人でした。なんと岡山からD新年会に参加するために来てくださった方もいて、ひそかに感動していました。ちなみに理系出身が10名、文系出身が1名でした。

最初の店で19時から23時まで、その後有志の人たちで別の店で深夜2時まで飲んでました。時間があっという間に流れていき、気がついたら新年会終了でした。全員の話を追うことはできませんでしたが、参加されたみなさんは、時には熱く・深く、時には面白く・楽しく、トータル的にはすごく楽しんでいただけたんじゃないかと思ってます。それもこれも、参加してくださったみなさま一人一人おかげです。本当にありがとうございました!

「次回」も存在する感じなので、参加したかったけど今回何らかの都合で参加できなかった方も、次こそは是非参加してください!

以下、僕の個人的な感想です。

実は、僕が新年会の幹事をすることになったとき、「僕が幹事していいんだろうか?」という気持ちが強くありました。大学を退学するつもりの自分が、博士課程の学生が集まるイベントの幹事をすることで、かえってみなさんのモチベーションを下げることにならないか、だとか、そのような類のことをぐるぐると考えていました。

ですが、あるきっかけで自分の考え方に方向転換がありました。僕自身が、「自分は○○だから、△△のように振舞うべき」というある種の美的感覚にとらわれすぎているのではないか、ということに全くの別件で気付かされました。

それなら、「この際、あまりごちゃごちゃしたことは深く考えず、楽しめるだけ精一杯楽しんでみよう」と開き直り、今回のD新年会に望みました。

新年会本番が始まって、お酒を飲みながら色んな人と色んな話ができて、それはそれはとても楽しいひとときでした。Twitterの話、情報の取捨選択の話、科学と現実世界との摩擦についての話、佐賀の話、岡山の刺客(?)の話、、などなど、真面目な話からフザケた話まで色んな話をすることができました。

僕が大学をやめようとしていることやその理由を、みなさんに話してみたりもしました。みなさんからはDならではの意見をいくつか頂けて、本当にうれしかった・参考になったのと同時に、「自分が考えていることを話す」ということがとても大事なことなんだなと改めて実感しました。ありがとうございます。

話すだけで、ものすごく気持ちが楽になります。話してみると、考えているほど深刻な問題ではないということに気づくこともあります。だから、考えていることや悩みを誰かに話すことは大事なことだと思います。でも、進学すればするほど(つまりDになると)、自分の今置かれている状況を理解して話を聞いてくれる相手や、そのような相手と話をする機会がだんだんと減っていくような気がしています(もちろんまったくいないというわけではありません)。

だからこそ、研究室の壁をぶち破って、分野の溝を飛び越えて、大学の垣根を乗り越えて、気軽にラフな感じで腹を割って話ができる、D同士の繋がりを築くことが必要とされているんじゃないかと思い、そういったことを考えている@okeihaanさんの考えに共感して、「D○○会@京都」の幹事として協力したいと思いました。

そして、「D忘年会・新年会」に参加した僕個人の体験に限って言うと、この目標は少なからず達成できつつある、と確信しています。

新年会に参加して、最初の方に「僕が幹事していいんだろうか?」という考えは、綺麗さっぱりなくなりました。いろいろなフォーマルなことを気にしなくても良い、ラフに気軽に話せる雰囲気の場所を作ろうとしていたのに、幹事の僕自身がそんな気持ちだったことを反省しています。それと同時に、D新年会に本当に参加してよかった、幹事をしてよかった、と今では心の底から思います。

大げさに聞こえるかもしれませんが、それが僕の気持ちです。次回、その次も同じようなコンセプトで飲み会を中心としたイベントが開催される予定なので、そこでも出来る限り協力していきたいと考えています。

ここまで読んでくださった方はありがとうございます。長文・駄文失礼しました。

カテゴリー: イベント タグ: , ,

[告知]博士課程学生の参加者募集中! – 「D新年会@京都」

2010 年 1 月 17 日 kadoppe コメントはありません

beer x 4

2010.1.25 追記:開催場所の情報を追記しました。

昨年末に行われた「D忘年会@京都」に引き続き、2010/01/30に「D新年会@京都」が開催されます!@okeihaanさんと僕で共同で企画しました。

大学や研究分野の壁を超えたD同士のラフなつながりが築くことが、今回の新年会の主旨になっています。D忘年会はそういう意味でうまくいったと思うので、今回もきっとうまくいくはず!(D忘年会の感想記事

Dのみなさまの参加をお待ちしてまーす!

——————————

日々研究活動に励んでいる博士課程の学生(以下、D)のみなさま

年もあけて,卒論や修論などで研究室が慌ただしくなる時期ですがいかがお過ごしでしょうか?

正月休みも束の間,いやいやもしかしたらお正月休みなんてそもそも存在せずに、気がついたら年が変わっていた、という方もいたりして。。

そんなこんなで始まった2010年ですが何か目標を達成するためには「区切り」というものが大事。

新しい年が始まったことを良い区切りとして、目標や決意を新たにして、Dとしての学生生活をより充実したものにしていきませんか?

そこで研究室や大学の壁を超えたD同士の「ラフ」なコミュニケーションの場として、2010年1月30日に「D新年会@京都」を開催します!

今年の新たな目標や決意について話したり、普段の研究室生活について話したり、D同士が楽しく話せる場所を作ることが今回の新年会の一番の目的です。

たまには研究室という枠を飛び出して色々言い合える仲間を作り、飲み・食べませんか?

参加資格は
【参加資格:京都に来ることができる博士課程の学生であること】
ただ一つです!

この新年会を通して色々な出会いや気づきが得られ、それらがDとしての学生生活のモチベーション向上に繋がることを期待しています!

D新年会@京都 詳細

連絡先

kadoppe [at] me.com (幹事@kadoppeのメールアドレスです)
参加を希望される方はメールに以下の情報を書いて、上記メールアドレスまで送ってください。

  • タイトル:
    D新年会@京都 参加します
  • メール本文に書くこと:
    名前、所属、当日の連絡先(ケータイの番号)、研究テーマ、ひとことあれば

みなさんのメール、お待ちしてまーす!

カテゴリー: イベント タグ: , ,

MySQLのrootパスワードを忘れてしまった時の対処法

2010 年 1 月 12 日 kadoppe コメントはありません

Airport Coding

MacPortsを使ってインストールしたMySQLのrootパスワードを忘れてしまったので(というか設定した覚えがない)、rootパスワードを再設定しました。また忘れてしまった時のために手順をメモしておこうと思います。(当方の環境はSnow Leopard + MySQL 5.1.42。)

なお、今回作業するにあたって以下のページを参考にさせていただきました。ありがとうございます!

まず以下のコマンドを実行し、起動中のMySQLを停止させます。

$ sudo /opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper stop

次に以下のコマンドを実行してMySQLを直接起動させます。「skip-grant-tables」オプションを指定することで、MySQLにパスワードなしでログインしたり、権限の問題で本来ならばアクセスできないデータベースにアクセスすることができるようになるみたいです。なんだか怖いオプションですね。。

$ sudo mysqld_safe5 --user=root --skip-grant-tables

MySQLが起動したら、rootユーザでログインします。パスワードなんていらないぜ!

$ mysql5 -u root

ログインできたら新しいrootパスワードを設定します。念のため「flush privileges;」で権限データのキャッシュをクリアしておきます。

mysql> use mysql
mysql> update user set password=password('新しいパスワード') where user='root';
mysql> flush privileges;
mysql> exit

ログアウトしたらMySQLを再起動します。

$ sudo /opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper restart

最後に以下のコマンドを実行し、新しいパスワードでMySQLにログインすることができたら成功です。

$ mysql5 -u root -p

パスワードがわからなかったときはかなり焦ってしまいましたが、なんとか復帰できました。よかったよかった。

カテゴリー: サーバ タグ: , ,

[Mac OS X Snow Lepard]デフォルトのログインシェルをzshに変更する

weary traveler

Mac OS X(Snow Leopard)で、Terminal.appを起動した直後に起動されるログインシェルをzshに変更します。

Terminal.appで以下のコマンドを実行すればOKです!

sudo dscl . -create /Users/<ユーザ名> UserShell /bin/zsh

「<ユーザ名>」の部分は、皆さんのログインユーザ名に置き換えてください。

なお、「/bin/zsh」の部分をタイプミスしてしまうと、新しいターミナルを開いた際にシェルのファイルが見つからないので、シェルが立ち上がらなくなってしまいます。Finderを使ってシェルのファイルをコピー or リネームすることで復活可能ですが、面倒なので注意です!

カテゴリー: PC タグ: , , ,