おしまい。

さよなら、ボクのサンドロック

日記更新(著者用)
日記もくじ
hogeikaのページ
日記鯖
ファストウェーブのトップページ

Fastwaveサーバ管理者からのお知らせ


2003/11/22

[] [] [更新(著者用)]

がーん
まずは途中経過
ええ。タブとかが四角になってます。 何も考えずにTextOutしてるからなんですが、 そんなの中見るのめんどっちぃのでやる気ゲージゼロです。
という訳で外部ファイルに落として外部ビュワーに任すか。 +と-の情報の欠落がファイル二つに復元してdiffするだけで本当に無いかは、 一瞬考えたけど分からなかったのですが、 たぶん平気だろ、という事で。
うーむ、一ファイルごとのdiffのViewやらその為のデータ構造やら、 結構頑張って作っていたのだが。
まあいいや、 実際一ファイルあたりのdiffのviewerは外部アプリの方が使いやすいだろうし。

2003/11/23

[] [] [更新(著者用)]

ムーミン谷の彗星
ふとした事がきっかけで読み直す事に。 といっても日本語版は初めてなので読み直す、 というのとはちょっと違うかも。
以前読んだ時意味のわからなかった、 スナフキンがズボンを買わないからちょうどだ、 というくだりの意味を理解。 この手の奴は英語だととたんに理解度が落ちてるなぁ>自分
という訳で続きが読みたくなるが、 図書館に行くと日曜は17:00までとか。
くそぅ。

書籍購入
前から興味はあったのだが、 今回の出張でいろいろ思う所もあり、 買うことに。
内容的に外れな可能性もあるから買うのは躊躇していたのだが、 まず読んでみる、という方向で。

- 関係無いが、もえたん、 という本を見た。 中を見て我思う。10年遅ぇ〜!(T_T)
今の私には簡単すぎなのだよ。
教材がなまじ良く出来ているだけに悔しいな。 あまり学ぶ所も無いが息抜きとして買うか? 多少は知らん事も載ってるだろうし。
ついでに今月のLaLaは全般的にいまいちだが目隠しの国だけ良かった。 最近小林君がいまいちな方向に進んでて、 私の中でのLaLa評価が落ち気味。

2003/11/24

[] [] [更新(著者用)]

今日のうにびう
こんな感じ
たぶん今度はピンクじゃない。外部ビュワーとしてはExamDiff使っています。
文字列が化けてるのであれ? と思ったが、 どうも普通にSubversionでdiff表示させても化けてる。 ExamDiffの問題かロケールの問題か良くわからんけど、 出来てる一時ファイルに異常は無さそう。
いくつかフォルダ認識さぼっているので、 まだちゃんとは動いていないが、 結構いい線いってるとは思う。
ただ、やっぱり元のソース準備しないとダメなので、 そこがいまいち使いにくいなぁ。 本当にSubversion専用になってしまった。

ふと思う所があり
以前作ったnemacs lisp用のパラグラフオリエンテッドなwikiモードもどきを日記で探すが、、、無いっ!
あれって公開してなかったんだっけ。 どっかに置いたのは覚えてるんだが、 リンクははってないのかもしれない。
という事は今はDOSモバの中だけにあるんだよなぁ、たぶん。 バックアップをノートPCに取った記憶があるが、 あれってどのノートだったたっけ。
geociteisのどこかにも置いた記憶があるんだけど、 どこだったかなぁ。

- tripodの方にparagraph化前のは発見。 paragraph化も大して大変ではなかった記憶があるが、 既にあるならそれ使いたいよなぁ。 明日会社行って林さんのノートでも借りて取り出すとするか。

出来たっ!
Uniview_0_0_1.lzhから toolbar1.bmpを入れ忘れていたので、UniView_0_0_2.lzhに変更。
とりあえずReadme等が無いですが、 使い方はTortoiseSVNを前提とすると
  1. Subversionの外部プログラムとしてRelease以下にあるexeを指定
  2. 見たい差分のベースとなる方をどこかに取得
  3. 取得したツリーの中の、見たいフォルダの上で右クリックしてShowLog
  4. 取得したバージョンと、その先のバージョンを選んで、右クリックでShow changes as Unified Diff
  5. 出てくるダイアログで外部ビュワーと、今選んだフォルダのパスを指定
という感じです。 2はださいけど防ぎようが無さそうです。 いいアイデアあったら教えて下さい。
5の今選んだフォルダのパス、 取得する方法があれば、わざわざ選ばないようにしたいんですが、 何か方法はありますかね?
known bug
  1. 新しくフォルダが追加されている時、それが(たぶん)表示されない
  2. 変更の無いファイルをダブルクリックすると変な挙動をする
というあたりです。 どっかにページ作るかのぅ。

2003/11/26

[] [] [更新(著者用)]

めりけん語のミーティング
めりけんはアメリカンなので語をつけるのは変な気もするが、 大人になるってのはそういう事なんだよ。
ここ2〜3日、めりけん語のミーティングが多い。 しかも、なんか私はあんまし関係無い内容のも結構ある。
半分通訳程度の価値しかないんじゃないか、 と思う事も多いが、 なんか出ろと書いてある物には一通り出てみると、 技術者の英語わかる人、 というのは結構貴重なのだな、と体感してみたりした。
最近は中国づいていたのであんまし英語の勉強はしてないし、 実力も落ちてはいるが、 仕事をする分にはこんなもんで十分だのぅ。 彼はポーランドから来た人なのだが、 あっちの人達の方が語彙等は多いので、 中国人と英語で話しているよりは意思の疎通は楽だ。 正しい文なら、 妙に複雑な言い方をしてしまった時でも理解してくれるし、 いろいろな言いまわしをすればどれかは通じる。
なお、英語になると、 途端にあんまし知らない事も自信たっぷりに断定的に話すようになるのは、 きっと英語をしゃべってきた環境がそうさせるのだろう(ぉ
だから、英語でなんかぺらぺら言った後、 社内の人に「本当?」とかきかれると日本語では「知らない」という答えが自然に出てくる。 日本語だと素直でやさしいいい子なのに、 英語をしゃべると何でも知ってると主張する人達の仲間入りをする。 不思議なもんですな。
なお、 ディナーにつれてくのもなんか私の役目になり、 予算3000円/人といいつつ5人で16500円位だった。 ここからの交渉が最重要任務という事で(ぉ

- この手の技術的な話の仲介とかしてて思うのは、 英語だけしゃべれる人と、 技術者で英語がしゃべれる人、 というのは結構価値が違うな、という事。
うちの会社では、
有能なプログラマ=英語がしゃべれない人
という傾向にある気がする。なお、
無能なプログラマ!=英語がしゃべれる人
なので注意が必要(ぉ
うちの上司は数少ない両方の能力を持った人な気がする。 私も一応そうかな。 有能なプログラマであり英語堪能、 といえるかもしれない。 英語に関しては自分としては不満もあるが、 一応そういう分類ではあるだろう。
一応会社でも、 私はそういった能力を生かして仕事をしている気はするし、 そういう面からみると、 良い職場で良い仕事をしている、 と言えるような気はする。

2003/11/28

[] [] [更新(著者用)]

たのしいムーミン一家
読了。次はムーミンパパの思い出か。
むちゃくちゃ面白いな。 最近これのせいで会社に行く時間がちょっと遅い:D
学部の頃に読んだ時とはだいぶ印象が違うなぁ。 にょろにょろの集会でこんなにわくわくもしなかったし、 飛行おにが登場した時のドキドキも前よりもずっと増しているし、 スナフキンの旅立ちに感じる思いもずいぶんと深くなっているように思う。
ムーミンは不思議だな。

2003/11/30

[] [] [更新(著者用)]

もえたん
はじまりは、何故か林さんが探している、 という事でじんぼうちょうの本屋めぐりをした事だった。
なんかどこにも売ってなくて、 人気なんだよ、と熱く語られる。 うちのそばの本屋にあったし、 嘘くせー、 と思っていたのだが、 うちのそばの本屋を見たら、、、、 無くなってる!?
ひょっとしてあの本、まぢでかなり売れてる?
なんだかんだ言っても単語帳だと思うのだが。 ネタで買う奴と英語の勉強してる奴をあわせても、 たいした市場にはならない気がするけど、 そうでも無いのかなぁ。
実は皆割と勉強家なのか?

もえたん
ケモ様に、
「あんなのほとんどヲタが買ってるに決まってるでしょ?馬鹿じゃないの?あんた。勉強する奴なんているはずないじゃない!」
と小一時間説教を食らう(やや捏造)
そういう物なのかのぅ。

MSのJobSearch
登録してみた。 別に今すぐやめる、 という話ではないんだが。
いっぱいお仕事あるねぇ。さすがMS。

Humoreske
とりあえずプリントアウト。 まだノクターンの2番が練習途中だけど、 飽きてきたのでこの曲始めるかも。
ノクターンの2番は弾いてみると少し単調すぎる気がする。

うぐぅ
ぎゃっぷばっふぁの解説をこの日記に書いてて、 チャンクの場合の説明を書いてる途中でフリーズ。
うがぁ〜、私の一時間を返せ〜〜(T_T)

ふてて寝ようとも思ったが
くやしいので今度はちまちま書いていきます。

粗筋
以前ギャップバッファに興味があって、 ぐーぐるに聞いたけど、 いまいちまとまった説明が無く、 しょうがないのでそこらへんにあるソース読みました。
ソースは割と関係無い所でいろいろ複雑で、 読むのはそこそこ苦戦しましたが、 ギャップバッファ自体は単純でした。
理解できて喜んでいたのですが、IRCでそんな話になった時、 2〜3の質問であっという間に理解されてしまって、 時間かけたのが損した気分になったので、 ちゃんとまじめな解説ページを作って、 その為に読んだのさ、と納得させよう、 と思いました。
でも全部書き終わった後にIEが落ちました。でも負けません。

- 表記、そのほか
ここ、さっきはまじめに書いたんですが、 今度は手抜きで。
ab---cd
とあったら、
char array[7];
array[0] = 'a';
array[1] = 'b';
array[5] = 'c';
array[6] = 'd';
とします。array[2]とarray[3]とarray[4]はどうでもいいゴミ値なので「-」であらわしてあります。
この時、gap_begで2を、gap_endで4をあらわすとします。
また、
ab cd
  |
  e
でbとcの間にeを挿入しようとしている事をあらわします。 bとcの間には何もありません。つまり、array[1]=='b'でarray[2]=='c'です。
一般に、ギャップは一配列に一領域しかなく、いつもギャップは連続しています。

- シチュエーション1
abcdef
      |
      g
この場合ははじめにreallocしてギャップを作ります。 どれだけ作るかはいろいろですが、arrayのサイズと同じ数のギャップを作るか、 適当な固定のchunk-sizeみたいなのでreallocしてくかが普通だと思います。
abcdef------
こんな感じ。 次に、代入します。
abcdefg-----
こんな感じ。 ギャップに代入しているので、ギャップがひとつ減ってます。

- シチュエーション2
ab cdef------
  |
  g
ギャップと違う場所に挿入しようとしています。 この時はまずギャップを移動します。
ab------cdef
次にgをギャップの先頭に代入します。
abg-----cdef
こんな感じ。

- そのほかの具体例
上記でだいたい全部の場合が尽くせてると思いますが、 例として他の場合を示します。
ab cd----ef
  |
  g
という場合。
ab----cdef
ギャップを移動して
abg---cdef
代入します。 さっきは他にもいろいろ例書いたのですが、 やさぐれてるのでこれだけにします。

- まとめ
  1. ギャップが無い場合はギャップをreallocで作る
  2. 挿入する場所にギャップをmemcpyで移動する
という感じです。

- 愚痴とか
さっき書いた時はリンクリストと配列のそれぞれの長所と短所とか、 アクセスや挿入のコストとかギャップバッファとの比較とか、 ギャップバッファで遅くなる場合の具体例とか最悪の場合とか、 そういうのを結構書いたのですが、 やる気無くしたので書きません。ぐーぐるでひっかかった人、 ごめんなさい。

- チャンクの場合
ここからはさっき書いてないので、ちょっと気分良く書けます。
普通は一次元配列なんかにせずに、 チャンクのリンクリストにするのが定石っぽいです。 読んだコードはだいたい全部そうなってました。
チャンクはページサイズ位の配列で、 これがリンクされてます。
チャンクサイズを簡単の為6位にすると、
abc--- -> ---def -> gh--ij
みたいなリンクリストになる訳です。 なお、--はギャップなので、 このバッファは
abcdefghij
をあらわしています。 間に空白等がある訳ではありません(まあ空白も文字なのは問題無いでしょうけど)

- シチュエーション1
abc--- -> ---d ef -> gh--ij
              |
              klmn
現在のチャンクのギャップと次のギャップを足すと足りてる場合。
この時、まず次のチャンクのギャップを移動します。
abc--- -> ---d ef -> --ghij
次に挿入する所の後にある文字列を次のチャンクにコピーして、 現在のチャンクのギャップをずらします。
abc--- -> ---d--  -> efghij
abc--- -> d-----  -> efghij
abc--- -> dklmn-  -> efghij
こんな風にしてギャップをつなげて挿入します。

- シチュエーション2
abc--- -> ---d ef -> gh--ij
              |
              klmnopqrst
つなげても足りない場合。 まあだいたい想像できるとおりです。 いろいろありますが、一番普通なのを。
abc--- -> ---d ef -> ------ -> ------ -> gh--ij
チャンクを(この場合は2個)足して、
abc--- -> ---d-- -> ------ -> --ef-- -> gh--ij
efを確保した連続領域のうち、これから書かれる所の次にコピーして、
abc--- -> ---dkl -> mnopqr -> stef-- -> gh--ij
代入。これから書かれる所の次、 というのはこの説明を上から読んでるとわかりにくいかもしれませんが、 結果から逆に類推すればわかるでしょう。
なお、削除はチャンク内ならギャップを増やすだけ、 チャンクが間にある場合はチャンクは解放していくのが普通っぽいです。

hogeika <hogeika2@gmail.com>

DiaryServer Diary/1.106 (DiarySrv::Diary/1.211 ; Compress::Zlib/1.34)
Created: 1997/12/09, Updated: 2004/01/04