タグ

ブックマーク / blog.j5ik2o.me (11)

  • Stringの連結はそう簡単なものではない - かとじゅんの技術日誌

    追記: 指摘の通りで、現実的な連結回数での計測でもないですし、統計手法を用いた分析をしていないので、このエントリの計測値は当てにしないでください。なので以下のブログを参考にしてください。 currentTimeMillis()で計測しておいて plusTime:14780, concatTime:7053, sbuilderTime:7, sbufferTime:13 とか、その7とか13の有効数字はいくつだっての。 激しく今更感があるタイトルですが(;・∀・) 昔に取り上げたのですが、 文字列の結合をやるからといって、すぐにStringの+をつかってはいけない - じゅんいち☆かとうの技術日誌 Stringの+演算子は間違った使い方するとパフォーマンスが低下しますよっていう話題。若干ネタ成分ありますが、ご容赦ください。 これ系の話題は自分的にはオワコンなんですが、最近、また話題を見つけた

    Stringの連結はそう簡単なものではない - かとじゅんの技術日誌
  • 努力する人が最後には”できる人”になる - かとじゅんの技術日誌

    先日の2月3日で39歳になりました。社会人20年を振り返ると苦労の歴史でした。でも、それは誇らしいことでもあります。 今でこそ「できる人」というイメージが強いかもしれませんが、、駆け出しのころは全くできない子でした。 ということで、苦労話。タイトルがありきたりですが、でも難しいことなんであえてつけてみた。押し付ける気も全くないですけど、できるやつが何 後付でカッコつけてんだよ!とか、非論理的だなって言われると思います。それは否定しません。そんなことは承知の上で、以下 おやじのうんちくをたれます。 限界を超えた努力 初めてのプログラミングは10歳の時にBASICでプログラムです。なんか難しいこと簡単にやらせてみたい欲求があって、PCというのは難しいけど楽しいかもしれないと思った。その頃の「好き」のレベルはまだ淡い幻想です。 それ以来、社会人になるまでPCゲーム機でしたが、社会人になってC言

    努力する人が最後には”できる人”になる - かとじゅんの技術日誌
    koko1000ban
    koko1000ban 2011/02/08
    元気出る
  • パーサーコンビネータで遊んでみた - かとじゅんの技術日誌

    ちょりーす。 以前、こちらのエントリで、(((1 + -2)*-3)/4)+5のような計算式を渡して、BigDecimalで計算結果を求める簡単な言語を作ったわけですが、 数値がBigDecimal型な計算式言語を作ってみた - じゅんいち☆かとうの技術日誌 これと同じものをScalaでやってみました。いちいち、こんなことしなくてもScalaなら計算できますが、パーサの使い方を学ぶための典型的なパターンということ、やってみました。 前回がどうだったか忘れたのですが、今回は浮動小数点も演算できるようにしてみました。 とりあえず、Mainから。 package parser object Main { def main(args:Array[String]){ val parser = new ExprParser; val parseResult = parser.parse("(((0.1

    パーサーコンビネータで遊んでみた - かとじゅんの技術日誌
  • Scalaのジェネリックスを学ぶ - かとじゅんの技術日誌

    Scalaのジェネリックスを少し学んでみました。(なんか違うんじゃね?とかあれば、ツッコミお願いしますm(_ _)m) Javaのジェネリックスでは、型パラメータは共変/反変ではない Javaでこんなコードを書いてコンパイラに怒られたことないですか。 public interface Animal { } public class Dog implements Animal{ } public class App { public static void main(String[] args) { ArrayList<Animal> animals = new ArrayList<Dog>(); } } ArrayList<Animal> animals = new ArrayList<Dog>(); とすると、型がミスマッチとなります。 つまり、ArrayListのサブ型として、Arra

    Scalaのジェネリックスを学ぶ - かとじゅんの技術日誌
  • Scalaのカリー化について学ぶ - かとじゅんの技術日誌

    Scalaでカリー化。「カリーか」って聞くと、あれしか想像できなかったのですが、なんとなく理解したというエントリ。 まず、このエントリを読む。 Scalaの関数部分適用とカリー化 - kyabの日記 関数型プログラミングの世界は奇妙な世界ですね。慣れてくると好きになるわけで。ジョジョに似てますねー。。いや、なんでもないです。 関数の部分適用ってどういう時に使えるのかな?って感じですが、カリー化は無名関数を渡す使い方は、リソース開放のために使えますね。それが下記の例。 scala勉強会第3回のことなど - scalaとか・・・から、 object Utility{ /** C#のusing文のパクリ * @tparam A closeという名前を持っているものならなんでも * @tparam B 2番目の引数の関数オブジェクトの戻り値の型(これもなんでもいい) * @param resour

    Scalaのカリー化について学ぶ - かとじゅんの技術日誌
  • クラスローダについて - かとじゅんの技術日誌

    Javaでは欠かせないクラスをロードするためのクラスローダ。普段意識していないかもしれませんが、しっかりと縁の下で支えているよね。(Java言語仕様を確認しながら書いてないので間違っていたらツッコミよろしくです) クラスローダとは Javaクラスローダー(英: Java Classloader)とは、Java仮想マシンの一部で、JavaクラスをJava仮想マシンに動的にロードする役割を持つ [1]。通常、クラスは必要になったとき初めてロードされる。Javaの実行系は、クラスローダーがあるおかげでファイルやファイルシステムについて知る必要がない。 大きく分けて以下の3つの種類があります。 ブートストラップ クラスローダ エクステンション クラスローダ システム クラスローダ ブートストラップは、Javaのコアライブラリ($JAVA_HOME/lib/rt.jar)のライブラリ、パッケージがj

    クラスローダについて - かとじゅんの技術日誌
  • 妻子持ちITエンジニアが、家族から理解を得るには - かとじゅんの技術日誌

    うちの会社は、1ヶ月に1回土曜に集まって社内LT大会をやっている。 なぜこんなことをやっているかというと、ITをプロとして仕事として生業にしていくには自己研鑽が必要だからだ。これは先のエントリにも述べた通りだ。自己研鑽といっても、発表の機会もないと勉強の機会がないので、社内LT大会をすることに決めた。(みんな直前になって資料を作成するなんとかしないとねぇ。当日、寝不足で死にそうになっているのはよくないw) これは休日開催なので、参加するにはいろいろと調整が必要。特に私のような子持ちはつらいところだ。かといって、大事なイベント。なんとか都合をつけたい。 そういう時は、きちんと家族に理解を求めている。「これだけは参加させてください。不況時代を生き抜くために必要なんです。」真剣にそういうことをいって理解を得るw また、お子さんがいらっしゃるのなら、お子さんにもなんで土曜なのに仕事にいくのか?と

    妻子持ちITエンジニアが、家族から理解を得るには - かとじゅんの技術日誌
  • 例外の再考 - かとじゅんの技術日誌

    愛する部下の一人がよいエントリを書いてくれたので、私も重い腰をあげてみたw Throwableについて気出して考えてみた 2nd Season - 都元ダイスケ IT-PRESS 短時間で、ようまとめたなーw チェック例外は、Java以外の言語では聞いたことがないのですが。Javaが10年やってきて、これがベストプラクティスなら他の言語にも存在してもよいはず。なぜ使わないんだろう。。。ということで、例外を再考してみました。 例外をめぐる議論 何気にいろいろ調べていたら、こういうのがでてきました。2004年以降はRTE使っているよというのがこれか!? Javaの理論と実践: 例外をめぐる議論 これはもう過去にされていた議論ですね。知らなかったですw Sunは、文書化されない例外は投げるべきでない。つまるところ、扱う例外はメソッドのthrowsにちゃんと明記する派。APIを使う側のユーザとし

    例外の再考 - かとじゅんの技術日誌
  • S2JDBCをS2非依存にしてみた - かとじゅんの技術日誌

    みなさま、こんばんわ。 非DIコンテナの世界で使いやすいORM OSGi上で使い勝手のよさそうなORMを探しているんですけど、いいものがないですね。 ORMといえばS2JDBCなんだけど。SQLがメソッドチェーンでかけてIDEでリファクタリングできるのはあまりにもメリットが大きいと。個人的に思っている。 OSGi上で動くフレームワークを実装しようとしていて、そこではまずDIコンテナ非依存な世界なんで、S2は使えないということで非常にクマった。 ならば、S2JDBCのソースをS2非依存にしてみようかしらと少し逝った発想でソースコードをみながら改造改造w S2JDBCからS2分離手術 Seasar2体とS2-tigerからJdbcMangaer関連のソースを抜き出して、以下のような作業を実施。1日ぐらいでできた。 S2Containerインターフェイスを適当な汎用インターフェイスに置き換える

    S2JDBCをS2非依存にしてみた - かとじゅんの技術日誌
  • 遅延初期化には気をつけろ - かとじゅんの技術日誌

    フィールドの遅延初期化について勉強したので要約としてまとめておきます。 遅延初期化とは 遅延初期化とは、コンストラクタなどで事前にフィールドを初期化するのではなく、フィールドが利用される時に初期化することいいます。遅延初期化は諸刃の剣と呼ばれていて、必要がなければやらないというのが考え方らしい。 public class Fuga{ private Hoge hoge; public Hoge getHoge(){ if ( hoge == null ){ hoge = new Hoge(); // 遅延初期化している } return hoge; } } ただ、この場合だと複数のスレッドから呼び出されてしまうと、遅延初期化が循環してしまいます。(遅延初期化循環といいます)ではなく、複数のスレッドが割り込むと初期化が何度も行われてしまうということ。 追記:さらにいうとシングルトンは単一のイ

    遅延初期化には気をつけろ - かとじゅんの技術日誌
  • SMART deployに対応させてみる - かとじゅんの技術日誌

    DIの実用例を考えていたのですが,よいものが思いつかないので少し違う視点で書きなぐりますw ダイちゃんの以下のエントリにコンポーネントの自動登録がでてきましたね.ComponentAutoRegisterは実はS2.3で登場した機能です. 私の方では,Seasar2.4からの新機能であるSMART deployについて書いてみます. これは「jp.xet.tutorial.s2.converterパッケージにある、.*という名前(正規表現だから、全ての名前)のクラスは、勝手にコンテナに登録しとけやゴルァ」という指示。MySQLConverterとPostgreSQLConverterは、そういえばこのパッケージに置いてある。ということで、勝手に登録されたんですね。 では、そのコンポーネントの名前は? ここも空気を読むSeasar2、のターン。「クラス名の最初を小文字にした名前で、登録しとく

    SMART deployに対応させてみる - かとじゅんの技術日誌
  • 1