ブログっ...!

最近はミソフォニアのことばかり書いています。もうミソフォニアブログです。

ほげ

なんだかプログラム書く度思うことなんだけど、 自分がいわゆるシステムプログラミングに詳しくないせいで、順序に迷う。

たとえば、あるファイルを読み込んで、それの一部を細切れの配列に格納したいときに (細切れの配列の長さ自体はファイル内に記述があって長さがバラバラ、それを読み込む度に毎度mallocするとする)、 一旦適当な大きなバッファみたいなところに全てを詰めんこんで、ファイルストリームを閉じてから、細切れにすべきか。 それとも、そんなバッファは使わず、開いたまま、細切れにしていくか。

結局今回後者にしたけど、前者は途中でmallocとか大げさな処理を挟まなくてシンプルでよさそうだと思ったんだよ。。ファイルの大きさが小さいとわかっているときは前者でも良いのかな。 それぞれの長所と短所isなに。

あと、複数配列があって、そのひとつひとつ別々に何か処理をするんだけど、 その配列はそれ一つで閉じているので、一つの処理が終わり次第、対象の配列を解放して良いとするじゃない。 処理A -> 配列A解放 -> 処理B -> 配列B解放 -> ... -> 処理Z -> 配列Z解放 てやると、ループ一つで閉じれるけど、

それでも、 処理A -> 処理B -> ... -> 処理Z -> 配列A解放 -> 配列B解放 -> ... -> 配列Z解放 てな感じで全ての処理が終わってから、解放する方が良いと思うんだよな。。 もちろん、解放は最後にするのがお行儀が良いからっていうのもあるけど、 解放がひとまとめになっているほうが、最近の入れ知恵、空リスト氏のキャッシュヒット率が良いのではないかという素人ながらの考え。。

実質的には行うことが全く同じ処理Aと処理A'のどちらが「速い」かを示すときに、 (たとえば、大域変数にするか、引数にするか、とか) 天秤がキャッシュヒット率くらいしかない。

こういうことを考えしまうと、プログラム書くのも遅くなり、故、すぐに疲れてしまう。 こんなの気をつけても微々たるものなので、そもそもの処理A, B, ..., Zを高速化することを考えてほうがよいのでは?というのは御尤もなのだが、ええい、気にしちゃうんだよ、どうしてもな...!! 一度抱いた疑問はなるはやで解決しておいたほうが良いと思ったので、ここにメモしておくのみである。。

システムプログラミング。。である。。

同前々3

まろくって。。

文字列(というかchar*)は、'\0'を末尾につけることにより、値の終わりを示せるわけだが、 まろく(mmap/sbrk/brk)はそのへんどうなっているの。。 よくよく調べてみれば不思議なこと(現状理解していないところ)が多い。

mallocによる確保外の領域への参照 - C・C++ 解決済 | 教えて!goo

これ見てよくわからなくなった。 (セグメンテーションフォルトがどういうときに起きるのかをちゃんと分かっていない。 C言語のポインタは私の思っている以上の以上に緩いらしく、(キャスト至上主義だと最近知った) セグフォはもっと、頻繁に起きるものだと思っていた。)

以下のようなアクセスのしかたは「確保していない領域を使用している」ので、セグメンテーションフォルトが起きてしかるべきだと思っていた。

1) (pelem_point+100)->x

あと、

2) ( (point *)(pelem_point+100) )->x

で構造体としてアクセスできるのはまあいいけど、 1)でも可能なのがよくわからなくなった。 (Cのコソパヨヤーの仕組みがよくわかっていない。)

・x[y] は (x + y) の糖衣構文 ... (i) ・x->y は (x).y の糖衣構文 ... (ii) と知ったときにはいろいろ理解が進んだ気がした。まあそうなんだけど... あと、こんな年にもなってひどいんだけど、structの宣言をポインタ変数でしかしたことがなかったので、ドット演算子があることを知らなかった。(おかむるいえーい)

第十三回-03 ドット演算子とアロー演算子

この話をもってくると、 (pelem_point + 100)->x は (ii)より、(*(pelem_point + 100)).x (i)より、(pelem_point[100]).x

ここで漸く納得である。

しかし、なぜこれで違反にならないかはわからないままだ。:-D

static /

C言語システムコール-brk CapmNetwork

mmap/brk/sbrkのmanぺじ読んでいると、知らない単語が出てくるので、調べると、またそのぺじに知らない単語が出てきて... その繰り返しである。

リンカの話が出てきたときは闇だった。なんせ事前知識が皆無に近いので。(そういうdocumentを見る程、他のぺじに飛ばされる数が多くなる。)

同前2

1) ブルームフィルタのお話。

サーバsに問い合わせたいファイル名のリストxがある。
このリストxに含まれる任意のファイル名のファイルfが、サーバsに全てあるわけではないらしい。
全てのfを実際に一気にリクエストすると通信負荷が大きいので、
「実体がsにあるf」のみだけにしたいところ。
sの管理するファイル数がほどほどに小さいなら、その全ファイル名リストをとってきて、それにfが含まれるなら、実際にお問い合わせする
という手でもいいが、まあ、そんな手で回るような世の中ではない。。

そこで現れるブルームフィルタ。詳しくは以下。
 

ブルームフィルタ - Wikipedia
 

この技術により、「fの実体がsにあるか」が確認でき、実際に通信するものを篩にかけることができる。
篩に通ったら、通信する。。
しかし、この篩は100%正確なわけではなく、
fの実体がsにないにもかかわらず篩に通してしまうことがある。
(小麦粉のダマとか普通に通す荒い篩あるよね。。)

・フィルタが「ないよ」って言ったら、ないことは確実 (本当はありました〜ということは起き得ない)
・フィルタが「あるよ」って言ったら、たまにないことがあるが大体はある


第一種過誤と第二種過誤 - Wikipedia

これ数理統計学の授業でやっていたけど、形式的に問題を解くゲーにしてしまったため、ほとんど記憶に残っていなかった。
帰無仮説については、その単語を聞く度に頭の中に「氷室京介」という固有名詞が浮かび、(語感が似ているからか?)
ほとんど内容が入ってこなかったことが印象ぶかい。

統計学の文章は、今全く読む気分じゃないので、搔い摘んで読んだ。超適当に説明することにする。

偽陽性(False Positive)は帰無仮説が実際には真であるのに棄却してしまう過誤
偽陰性(False Negative)は対立仮説が実際には真であるのに帰無仮説を採用してしまう過誤


ここで、ブルームフィルタの話に戻ってみる。
対立仮説 = 「ファイルがある」
帰無仮説 = 「ファイルがない」


ファイルfについて、サーバsのフィルタに問い質してみる。

i) フィルタ「ねえです」
a) fの実体がsにある場合
起き得ない。
b) fの実体がsにない場合
10割

ii) フィルタ「あるよ」
a) fの実体がsにある場合
8割くらい(例えば)
b) fの実体がsにない場合
2割くらい

偽陽性(False Positive)は帰無仮説が実際には真であるのに棄却してしまう過誤
ii)b)のケースにあたる。
もっていないファイルに対して、「もっている」と判定してしまうケース
偽陰性(False Negative)は対立仮説が実際には真であるのに帰無仮説を採用してしまう過誤
i)a)のケースにあたるが、ブルームフィルタでは起きえない。

もっているファイルに対して、「ない」と判定してしまうケース
 

2) コルーチン in C言語
以下、そのメカニズムをわかりやすく記録するために自己満足スライドを作成。
(もちろん、自分のためのメモなので、リンク先は自分だけしか見れない設定になっているし、そのURLも載せるつもりはない。)

アセンブリを読みたい気分になった。
以下の記事を読んだり。

Super Technique 講座〜longjmpと例外

(あと上記の記事を読んでる最中、気になるリンクがあった
Deep Side of Java〜Java 言語再入門 第2回 〜 例外
Super Technique 講座〜シグナルとコールバック)
 

読んだめも1

よんだはしかたないやつだ!(それは「やんだ」である。。)(よつばとネタ)


callccによる排中律の証明 - sumiiの日記

これ面白かったw
寸劇の話はcallccというワードがヒントになって、わかったw おもしろい。

callccがカリーハワード同型で二重否定に当たる、という話は小耳に挟んだことはあるが、
あんまりよく知らなかった(調べることを忘れていた)ので、調べた。
下のリンクの「call/ccの型」

call/ccと古典論理のカリー・ハワード対応 - 再帰の反復

途中の
λx.(Left x) : A→A∨¬A
のとこで、なんでこうなんだ?と思っていたが、そうだった。
記憶が薄れてて困る。
(下、AgdaのData.Sumリンク。
http://www.cse.chalmers.se/~nad/repos/lib/src/Data/Sum.agda)
(ので、ひとつめのリンク先のInRight(λx:T. k(InLeft x)))は、
InLeft x : T v not T
k(InLeft x) : not
λx:T. k(InLeft x)) : T -> not
となって、InRight(λx:T. k(InLeft x))) : T v not T となるのが解釈。(%s/not/¬/g))
(いっこっつ型を確認する主義)

すごくわかりやすい記事だった...
しっかり理解している方の説明はしゅごいありがたい。

更にこれを読んで、納得してシメ。

http://www.kmonos.net/wlog/61.html#_0538060508

はわわ。。

あと次いでに、voidの話もよんだ。

void - sumiiの日記

Void (コンピュータ) - Wikipedia

あと、前回の記事書いた続きとして、
直観主義論理の話のリンクを超かみつまんで読んだ。

http://www.kurims.kyoto-u.ac.jp/~terui/summer2013.pdf


はっっ、こんなことをしていたらゆうがたに。。じゃあ。。

「構成的」ってなんだ

構成的という言葉の意味がわからなくなって調べてた。
調べたら、「数学的構成主義」「構成的数学」という言葉がちらちら出現。
それも追っかけてたら「数学的直観主義」などなども出現。

直感主義論理は授業でやったので覚えていた。

他もろもろ。

 

数学的直観主義 - Wikipedia

構成的数学とその周辺

数学的直観主義 数学的構成主義 形式主義

 

1) 直感主義論理

授業で先生が以下のようなことを言っていた。

------

A「私のこと本当に好きなの?」

B「好きじゃないわけじゃないよ」

古典主義なA「嬉しい♡ありがとう♡♡」

直感主義なA「ひどい!どういうことっっ」

------

 

2) 構成的論理

(二つ目のリンクがとてもよい。適当に主要だけまとめると)

  • 「現代では直観主義論理は、数学の証明は全て構成的に為されなければならないという主張(数学的構成主義)と関連が深い」(Wikipedia より)
  • あるものの存在dを示すには、dそれ自体を明示する。
  • 「非存在を仮定 => 矛盾 => 存在(背理法)」の流れでは示すことができない。
  • 「AまたはB」の成立を示すには、Aが成り立つことを示すか、Bが成り立つことを示すかどちらか。
  • 「not A かつ not Bを仮定 => 矛盾 => AまたはB」の流れでは示すことができない。
  • 「自分でそれ自体を確認するまでは何も言えない」考え
  • 古典論理に(強い)縛りをかけたものが構成的論理である。

肝心の「構成的」の意味は、「本質的」と言ったほうがしっくりくるような印象をもったんだが、どうだろうか。

 

※二つ目のリンクの冒頭で述べられていた通り、「構成的」という形容詞の解釈がゆらいでいた感じがあった。ちなみに、('constructive' の)英訳を読んでみると、日本語でのイメージとは結構違った。

Constitutively - definition of constitutively by The Free Dictionary

このページもおもしろかった。

アニヲタWiki(仮) - 数学的構成主義

 

3) 形式主義

このページ。

形式主義 ( 哲学 ) - honky tonk manの黙示録 - Yahoo!ブログ

 

でしたー。

どうでもいい私のこと

今日、部屋で探し物をしていたら、小学生の頃に書いた日記が出てきた。

当時家族が結構不仲だったこともあるのか知らんが、内容は小学生が書いたとは思えないほど暗い。

 

小学生の頃に家庭内で起きた不祥事が事細かに書いてあったり。

死ぬ方法についていろいろ列挙してあったり。

まあ、内容は暗いが書いてあることは全く高度なことではなく、やはり小学生が書いたままの文調。微笑ましい感じ。

タリウムは麻痺するからヤダ」ってオメーはグレアム・ヤングかwww

 

「人生の意味とは何だろうか」と悩んでいる日付が何日かある。

小学生の頃からこんなことを考えていたという事実に驚き。(考え始めたのは中学生からだとずっと思っていた。)

 

「人生の意味なんてわからない。それはきっと生きる意味が無くて見出せないからわからないんだ。私は死ぬべき人間なんだ。」

鼻で思わず笑ってしまった。

この「生きる意味がわからないなら、死ぬべきだ」という幼稚な命題に、私はついこの間の秋まで何年間も馬鹿真面目に悩ませられていたので。

 本当にくだらない悩みだったと自虐しているけど、やっぱり私にはなくてはいけない期間だったかのように思う。

 

過去に悩んでいた小学生の私にアドバイスをするつもりで、私なりの結論を説明させて頂く。

 

周りの方々の見解等を聞いて、漸く目が冷め始めるきっかけを得たのが去年の夏。

それからしばらく思い詰めて、やっと「無心になること」を覚えた。

少し考えるのがつかれたから、放棄することを決めたのです。

それで解決(?)しました。以上。

 

「物事に近づきすぎているときは大事なことが見えなくなる」というサファー、ベサニー・ハミルトンの名言みたいなものを思い出すと納得する。

私は数年間人に相談せずに、自分をひたすらに圧迫し、水っけのない雑巾から水分を無理に絞り出すかのように人生の大義名分を見出そうとしていたわけだけれども。

大学に入って二年目、ぽろりと相談した五つ年上の先輩から「考えるよりも本を読みなさい。今すぐに解答を得るような問題じゃないから焦らなくていい。」と言われる。

この言葉をかけられたとき、激しく感動したのを今でも覚えている。

 

以降、本を読む。

・アランさんの「幸福論」

:雨が降れば雨宿りをすればよい。簡単なことだうんたら、の節がとても好き。

五木寛之さんの「人生の目的」

:あとがきで恐ろしく感動した覚えがある。

デカルトさんの「感情論」

図書館で借りたんだが、犬に表紙を食われたため弁償した苦い思い出。

サルトルさんの「嘔吐」

京極夏彦さんの百鬼夜行シリーズ

・「地下室の手記」「罪と罰

 

とか。本を読むタイプでもなかったのに (Amazonのレビューから内容を察して、一ページも読まずに読書感想文書くような子だった) 比較的よく読んだと思う。

ちゃんと咀嚼できているかはわからんが。

 

それでも十冊ほど読んだところで、ネタに尽きた。

次はどんな本を読めばいいのかわからなくなった。

できるなら、自分の心を打つ確率の高い本を選びたい。

 

どうやって選べばいいのだ、と悩む私。

と、ここで「生身の人間に聞く」という方法を得る。

今まで胸の内に封じ込んでいた分を取り返すかのように、構わず聞くようになった。(主に口元が緩くなる酒の席で、だけど)

「私は今、生きる意味に悩んでいるので、何かあなた史上響いた本があったらタイトルおしえて下さい」などなど、案外すんなり聞けるものだ。

 

こうして、本をきっかけにして、ランダムな相手と人生について短い雑談をするようになる。

「生きる意味ねー、難しいよね。」と、周りの人間も同様に悩んでいたことを知る。

それでもその人たちは気楽そうに見えた。聞くと、

「うまいこと、コントロールするんだよ。正面から向き合えるようなロクな問題ではないから。」

ふむ。

 

一ヶ月ほど思い悩んで、ようやくこの問題を放置する決心をした。

これが逃げなのかどうかわからないかったが、もう自分自身を圧迫しすぎて限界だったような記憶がある。つかれたーって。

 

放置をして数ヶ月がたち、いろいろ悟った。

「放置をしながら考える」ことが一番の策だとわかった。

深淵に呑み込まれそうになったら、一旦逃げる。それでいいのだと身にしみた。

 

こうして私は無事に平穏な生活を送れるようになったのでしたー。ちゃんちゃん。

ある問題を解決するための方法が「問題を放置してみる」っていうのが面白い。

(まあでも、一番のきっかけは「他の人間を問い質してみる」だったのかも)

 

こうやって書いてみれば、綺麗に敷かれたレールに沿って解決にまっすぐ向かっていったかのように思えてしまうが、当の本人は意味探しに必死だったわけで。

誰もがこうして解決できる問題でもないし、私の解決策はアドバイスとしてはまあカスだと思う。

まあそれをふまえて、人生に悩んでいる人間に何か言うとすれば、

「一部の人間は立派で明確な大義名分を持っているが、それが汎用的で一般的な人生の意味に対する答えである証明なんてどこにもない。人生の意味づけなんてただの思い込みと自己満足だよ。でも考えたいなら自己満足するまで考えればいいんじゃない。」

ですかね。

 

やあ、小学生の私。私は大学四年目にしてようやくここまで上り詰めたのだよ。ええやろ。

と、ちょっと過去の自分相手に自慢してみる。

 

 

やあ

なんとなく、人に公開するようのブログを作ってみた。

何を書くかは何も決めていないけど、自分用のメモがきっと多いかと。

 

じゃ