改め Objective Technician

はぐれ技術者のやりたい放題

新しい言語へ浮気

2009-02-26 00:14:41 | プログラミング
Action Script に手を出し始めた。


愛して止まない Java とすごく似た設計思想でコーディングができて、FlashDevelop の使いやすさも Eclipse と互角か、補完機能に関してはそれ以上か。


すぐに惚れ込んでしまいそう。


言語への愛情さえあれば、時間がないとか疲れたとか眠いとか自分は何がやりたいんだとか、そういうのを超越して何時間でもソースを書き続けられるものだ。




あと、近い将来 Python にも触ってみたい。

コペルニクス2.0

2009-02-25 19:38:26 | 自転車

2月25日(Wed) 評定 曇

jog
ストレッチ
ドリル
鉄棒振り上げ
100mWS×5
c-down




週末に自転車の整備をした。

パンク直してタイヤを新品に交換してリアディーラーとチェーンをきれいにして...

とかやってたら半日つぶれた。


ブレーキシューを買うの忘れてたから、また週末に交換しよう。

ブレーキはケチるもんじゃない。


なにせリムが削れる削れる。



でも、パンクの修理跡が何箇所もあるような消耗したチューブを頑張って使ってるのはステキだと思う。










ところで、自転車整備士って聞いたことないけどあるのかなと思って検索したら、あった。


でも、自転車屋で二年以上働いてないと受けられないらしい。


残念。





… 何がしたいんだ自分は...


ズキュゥーン

2009-02-18 22:02:08 | 陸上競技
2月17日(Tue) 評定 星 涼

jog
ストレッチ
ドリル
ポールワーク
ポール走100m×3
鉄棒振り上げ
バウンディング
c-down


2月18日(Wed) 評定 星空 涼

研究室~評定 jog
ストレッチ
200mWS×5
鉄棒振り上げ×5
帰りjog






買い物してお釣りもらうときに、手を包むように渡してくる店員さん。



たまたま小銭がどっさりだったからといって、そういうことはやめていただきたい。











給料日

2009-02-14 00:27:04 | 陸上競技
2月6日(Fri) 評定 星空 涼

jog
ストレッチ
200mWS×4
メディシン投げ
ドリル
鉄棒
c-down


2月7日(Sat) 評定 快晴 暖

jog
ストレッチ
ドリル
メディシン投げ
鉄棒振り上げ
鉄棒干され
ポールドリル
100m流し×3
c-down


2月11日(Wed) 評定 晴 暖

jog
ストレッチ
ドリル
ポール操作
突っ込み踏み切り3×4
ポール走り100m×5
鉄棒振り上げ×10
50mバウンディング×5
c-down


2月13日(Fri) 評定 曇 暖

jog
ストレッチ
ドリル
200mWS×5
鉄棒
バウンディング
c-down



稼働率92%ぐらい。
ここ一ヶ月。

実験とか文献調査とかよりも、共同研究の報告書やらゼミの資料やら授業レポートやらでひたすら文章を書き続けてる気がする。

昨日やっと一区切りついて来月の研究会原稿に集中できる状態になった。


まとまった文章を書くときは、プログラム組むのと同じで出来るだけ日数かけないで一気に書き上げたほうが効率が良いと思う。


当分は来月の発表に集中して、終わったら論文書き始めてあれとなにの実験もやってそれのプログラムも改良して…



「必死で頑張ってるフリをするよ。寝ててもできるけどな。」(24season6のモリス)

って言ってみたい。








中学校で校歌の伴奏してるときに途中で楽譜が頭から吹っ飛んでピアノが止まってしまう、というすごく嫌な夢を見た。

すっごいリアルだった。


なんで今になって中学?…






整数計画法でNクイーン

2009-02-13 00:32:39 | プログラミング
普通は再帰かループで解くNクイーンを、整数線形計画法で(半分力任せに)解くJavaプログラム。

ソースはこちら(N-Queen (Java + LpSolve))

LpSolveのAPIを使って制約式を追加しながら問題をソルバに丸投げして解いてもらってユニーク解とその個数を探索する。

ただ、思ったほどパフォーマンスは悪くない。
N=8で400ミリ秒、N=9で5秒、N=10で1分、N=11で40分ほど。


あと、回転と鏡像で重なる解を排除する処理が、整数計画に定式化した形だとすっごい簡単に書けることに気づいた。


他にも何かLpSolve使えないかなぁ…。

//LP_SolveによるNクイーンのユニーク解探索プログラム
//2009/2/10

import lpsolve.*;
import java.io.*;

public class NQueenLpSolve {

	static int N;
	static int feasible_patterns;
	static long solution_time;

	public static void main(String[] args) {

		for(N = 1; N <18; N ++) {
			return null;
		else
			return array;
	}

	double[] makeArray(int init) {

		double[] array = new double[SIZE * SIZE];		
		if(init == 0)
			return array;

		for(int i = 0; i <array.length; i++)

ラブレター

2009-02-05 09:11:11 | 陸上競技
2月2日(Mon) ずいほう 星空 寒

jog
ストレッチ
ドリル
坂ダッシュ
100m×3
80m×4
50m×5
c-down


2月3日(Tue) 評定 星空 涼

jog
ストレッチ
ドリル
ポール操作
ポール走100m×5
鉄棒振り上げ逆上がり×5
50mバウンディング
c-down


2月4日(Wed) 評定 星空 涼

アクティブレスト

jog
ストレッチ
ドリル
メディシン投げ
鉄棒振り上げ逆上がり×5
c-down



授業レポートの一つ一つが重い。大学院のレポートは基本的に「自分で考えてなんかやれ」だからやりがいがあって楽しいけど、ただ数が多い。

ここ一週間ほどひたすら文章を書き続けている気がするがまだ終わりが見えない。





どの科目の課題でも手を抜いてるつもりはないけど、でも特に心に響く授業をするような先生が出す課題には、僕はラブレターのつもりで全力でレポートを書く。もしくは全力でテスト勉強する。

あまりに授業が面白いと、たまに何も言われてないのに勝手に何か実験やってレポート書いて送りつけることもある。


自分の書いた渾身のレポートが本当に先生へのラブレターだと感じたのは今のところ高校の物理の先生と大学の情報の先生2人。


(※注:ほんとの意味でのラブレターなんか書いたことあるわけない。念のため。)



師といえば、僕はUSUTA KYOSUKEを神様だと認識している。

そしてあの方が書く本はバイブルだと信じている。

セクシーコマンドーが旧約聖書なら笛は新約聖書だ。




今日ついにジャガーの16巻を買い、神に感謝を捧げる気持ちで読んだ。


また神聖な蔵書が増えた。


Java文字列の内部表現

2009-02-04 23:55:43 | プログラミング
Stringクラス内部表現についての自分メモ


Stringのインスタンスメソッドsubstring(int)が呼び出されるときの内部挙動についての調査結果。

substring()が返すStringオブジェクトは全部新規にメモリ上に生成されるのか、それとも元のメンバを一部共有するのか。


結論を先に言うと、substring()で返された部分文字列は元のオブジェクトと同じメモリ領域を共有している。


まず、String.javaの中身を覗くと実装が以下のようになっていて、内部フィールドはchar配列と整数の組で構成されていた。

public final class String
{
    /** The value is used for character storage. */
    private char value[];

    /** The offset is the first index of the storage that is used. */
    private int offset;

    /** The count is the number of characters in the String. */
    private int count;
...



次にsubstring(int)を見ると、ここではオーバーロードしたメソッドが呼び出され、
    public String substring(int beginIndex) {
      return substring(beginIndex, count);
    }



そしてsubstring(int, int)の実装がこうなっていた。
    public String substring(int beginIndex, int endIndex) {
    //配列indexの範囲処理をした後↓
      return ((beginIndex == 0) && (endIndex == count)) ? this :
        new String(offset + beginIndex, endIndex - beginIndex, value);
    }



通常はnewした時点で新規の領域が割り当てられるが、この場合はコンストラクタString(int, int, char[])の実装が以下のようになっており、
    // Package private constructor which shares value array for speed.
    String(int offset, int count, char value[]) {
      this.value = value;
      this.offset = offset;
      this.count = count;
    }



元のchar配列が再利用されて整数の組で新規の部分文字列を表現する仕様となっていた。つまり「Stringオブジェクトが毎回生成されるが、その実体であるchar配列は共有される。」が正解らしい。


そして、Stringのprivateメンバchar[]は変更されない仕様らしい。



わざわざchar[]を複製しないことを知って、賢いJavaにますます愛着がわいた。

こういうところが文字列処理のアルゴリズムにとってかなり重要。