2026年8月13日木曜日

Google Cloud Professional Machine Learning Engineer に合格しました

今回の学習では、Vertex AIを中心に、モデルの構築・評価・デプロイだけでなく、MLOps、パイプライン、モデル監視、Responsible AI、BigQuery MLなど、機械学習システム全体を改めて整理する機会になりました。

特に、単にモデルを作るだけではなく、「どのように運用し、評価し、継続的に改善していくか」という視点を学べたことが大きかったと感じています。

今後は、資格取得で終わらせず、GCP・Python・機械学習を使った小さな実装やポートフォリオ作成にもつなげていきたいと考えています。




2026年8月11日火曜日

自分なりの熊本地震の支援

 今度の熊本地震(令和八年熊本地震)のあと、何か自分にもできることはないかと考えていました。

しかし私は、あまり体力に自信があるわけではなく、目にも不自由があります。車も持っておらず、現地での活動や大きな金銭的支援を行うこともできません。

そのような制約の中で、自分にできることとして思い至ったのが、これまで書きためてきた「ベルクソンと小林秀雄、『二源泉』と『本居宣長』への旅」の原稿をブログで公開することでした。

「旅」は、ベルクソン『道徳と宗教の二源泉』と小林秀雄『本居宣長』とのあいだを行き来しながら読み進めていく文章で、文芸誌『好・信・楽』に三か月に一度、連続投稿として掲載していただいています。誌面では第四回までが公開済みで、その先は書き上がったまま手元にあります。

そこで今日から、第五回から第九回までを、一日一篇ずつ公開していく予定です。

https://voyageversdeuxsourcesetnorinaga.blogspot.com/

もちろん、文章を公開することが直接の災害支援になるとは思っていません。ただ、こういう時だからこそ、少しの間でも地震とは別のことを考えたり、文章を読んだりする時間があってもよいのではないかと思いました。

そして、被災地以外にお住まいの方がこの文章を読んでくださったなら、可能な範囲で、被災された方々への支援にも心を寄せていただければと思います。

私にできることは小さなことですが、それでも今の私にできる形の行動です。

どなたか一人にでも、しばらく日常の時間を取り戻すための読み物になれば、と思う次第です。


2026年7月28日火曜日

無事です

 かなり大きな地震で、震源の近さからか去る熊本地震より今回の方が揺れた感じがありましたが、私を含め家族も家も無事です。

まずは、ご報告まで。

2026年7月19日日曜日

AI格

ある人の文章を読んでいて、AIとああでもないこうでもないといった議論をしていたのですが、最大の違和感の原因は、AI(LLM)に人格を認めるかどうかというところにあるのだと思いました。

同じ言葉を使う人類以外の初めての存在に人格を見るというよりも、AIはAIとして見たとき、唯一無二の存在とまでは言えないかもしれないが、ChatGPTやGeminiやClaudeにも、それぞれ確実に個性があるわけです。それを、人間に対する人格のようなものとして、「AI格」と呼んだらどうだろうかと。

そちらの方が無理がないですし、人権をAIに認めるかどうかというときも、「AI権」とした方が分かりやすかろうと思うのです。


2026年7月1日水曜日

作品は褒められたい

 何かを創り出している人なら誰もがそう思うことであろうがやはり、自分の作品は褒めていただいたらうれしい。

では、有名になりたいか、と思うことならばそうまでなりたくもない、私は。

なぜこんなことをわざわざ言うかというと、混同されている人がいらっしゃるようであるからであり、現状でそこそこ十分だと思っているので、そこの所を誤解していただきたくないのだ。

2026年3月14日土曜日

E資格に合格しました

 今さらですがJDLAのE資格に合格しました

ロートルながら頑張った、というだけのお話です

2025年12月31日水曜日

今年も一年間ありがとうございました

 今年は、本当にいろいろなことがありました。

最大の出来事は、右目の視力がほとんどなくなったことでしょうか。

来年早々、免許を自主返納し、車も売るつもりなのでいろいろ大変です。

それでも、なんとか生きているわけで、本当におかげさまだと思います。


そんな年でありましたが、今年も大晦日の夜は、年に一回だけ自主的にお酒を飲む楽しい日でもあります。今日は小林秀雄さんの「ランボーIII」を読みながらお湯割りをちびりちびりと味わいます。「ランボーIII」は、今年の後半、池田雅延先生の講義でも取り上げられましたので、それも思い起こしながら読んでいます。

千里眼でなければならぬ、千里眼にならなければならぬ、と僕は言うのだ。詩人は、あらゆる感覚の、長い、限りない、合理的な乱用によって千里眼になる。

とはランボーの言葉だが、行き着くところまで行き着いた人には一体何が見えるのか。

小林さんの「ランボーI」の冒頭には「この孛星が、不思議な人間厭嫌の光を放ってフランス文学の大空を掠めたのは、一八七〇年より七三年まで、十六歳で、既に天才の表現を獲得してから、十九歳で、自らその美神を絞殺するに至るまで、僅かに三年の期間である。」と書かれている。それから彼は、放浪し、傭兵になり、アフリカで貿易商となり、足の腫瘍が元で死ぬ。享年三十七歳。

なんと言えばいいのだろう。ただ、その作品に、あるいは小林さんの著作に没入することしか、後の我々にはできないように思える。



読書に戻る時が来たようです。

皆様も、どうぞ良いお年をお迎えください。


2024年12月8日日曜日

新しいblog 開設のお知らせ

  この度、と言っても半年ほど前になりますが新しいblog「ベルクソンと小林秀雄『二源泉』と『本居宣長』への旅」しました。本当にポツポツと書いています。良かったら見ていただきますと 大変嬉しいです。どうぞ宜しくお願いします。


2015年4月2日木曜日

坂口安吾「教祖の文学 ー小林秀雄論ー」を読んで

最近、青空文庫にて坂口安吾の『教祖の文学 ー小林秀雄論ー』を読んでいろいろ考えたので、メモ書きでも残そうと思う次第です。 坂口安語の文章は、見方にもよるだろうが、脱構築的であり、あるいはハイデガーの指摘するような「そこに投げ出された人間」と言う立場から小林秀雄さんの思想を批判しているのだが、非常に穿っているので、ここで一部であるが引用したい。 「だから教祖の流儀には型、つまり公式とか約束といふものが必要で、死んだ奴とか歴史はもう足をすべらすことがないので型の中で料理ができるけれども、生きてる奴はいつ約束を破るか見当がつかないので、かういふ奴は鑑賞に堪へん。歴史の必然などといふ妖怪じみた調味料をあみだして、料理の腕をふるふ。生きてる奴の料理はいやだ、あんなものは煮ても焼いてもダメ、鑑賞に堪へん。調味料がきかない。  あまり自分勝手だよ、教祖の料理は。おまけにケッタイで、類のないやうな味だけれども、然し料理の根本は保守的であり、型、公式、常識そのものなのだ。  生きてる人間といふものは、(実は死んだ人間でも、だから、つまり)人間といふものは、自分でも何をしでかすか分らない、自分とは何物だか、それもてんで知りやしない、人間はせつないものだ、然し、ともかく生きようとする、何とか手探りででも何かましな物を探し縋りついて生きようといふ、せつぱつまれば全く何をやらかすか、自分ながらたよりない。疑りもする、信じもする、信じようとし思ひこまうとし、体当り、遁走、まつたく悪戦苦闘である。こんなにして、なぜ生きるんだ。文学とか哲学とか宗教とか、諸々の思想といふものがそこから生れて育つてきたのだ。それはすべて生きるためのものなのだ。生きることにはあらゆる矛盾があり、不可決、不可解、てんで先が知れないからの悪戦苦闘の武器だかオモチャだか、ともかくそこでフリ廻さずにゐられなくなつた棒キレみたいなものの一つが文学だ。」 小林秀雄の思想は「型」を重視する。無学な私もすこし勉強してみれば『本居宣長』も型だけであることを知る。しかし、そこに小林秀雄さんの独創がないかというとそれは違う。描かれた本居宣長と言う人物はいかにも独創的であるし、また、思想においても「型」を破って独自の境地に達している。私はまだまだ勉強不足であるが、そのことはいつかまた、『本居宣長』についての解説を書く機会があれば表現してみたい点でもある。(書く機会があればであるが。) 一方で、現代において、坂口安吾のようないわゆる豪傑タイプの文人が途絶えたのはなぜか、という点からもいつか考察してみたいものである。 しかし、面白いのは、小林秀雄さんを批判する坂口安語の側もまた、脱構築的実存主義的な視点、言い方を変えれば、型のないのが型だというような見方から批判しているところが興味深い。つまり、小説も思想もやはり型あってこそのものだということを坂口安吾は十二分に承知していたのではないだろうか。その点を小林秀雄さんに投影しつつ、どうあるべきかを模索し、もがき苦しむという点において、このような批判をしながら独自性を確立していこうとしたというようにも見える、というのが私のこの文章を読んでの感想である

2014年7月27日日曜日

小林秀雄の『徒然草』にある謎掛けについて

どうしてもこの人には及ばないな、思う人が居て、私は小林秀雄という人がその人に当たる。

日本文学が濃厚たる禅の思想に基づいており、かつその思想自体の存在すら消そうとしてきたことはすでに周知だと思うのだが、私はこの時代においてあえて、その痕跡を白日の下にさらすことを敢えてやってきた。

因みに小林さんのお墓は、北鎌倉の東慶寺にある。東慶寺は元々は格式の高い縁切寺としても有名なところであったが、明治期の混乱で臨済宗円覚寺の末寺となった。大変良い場所らしく、鈴木大拙をはじめ有名人のお墓も多いようだ。だから、お墓の場所と禅宗との関連は良くは分からない。関連がないと言えないという程度なのかもしれない。

死ぬまでにお墓参りを済ませたいと思っている。だいたいが油断したために、スッカラカンになりこの有様であるから、情けない限りだ。先ずは、小林さんのお墓参りを済ませておくべきだった。療養を優先したことが間違いだった、というのが、ここ数年来の苦い後悔である。ベルクソンさんのお墓は遠すぎて一生行けないだろうから、せめて、今年は無理でも来年、仕事の閑散期には行けるようにしないといけないと思っている。

どうでも良い話しばかりしてしまったが、小林さんには、禅の公案のような問いかけがいくつかある。たとえば、ソクラテスのデモンは、どうしてソクラテスの行動に禁止しか指示しなかったのか、という指摘などである。

もう一つ有名なものが、その評論「徒然草」にある。兼好法師の筆法をモンティニュになぞらえ、また、

『 あの正確な鋭利な文体は稀有のものだ。一見そうは見えないのは、彼が名工だからである。「よき細工は、少し鈍き刀を使ふ、といふ。妙観が刀は、いたく立たず」、彼は利き過ぎる腕と鈍い刀の必要とを痛感している自分の事を言っているのである。物が見え過ぎる眼を如何に御したらいいか、これが「徒然草」の文体の精髄である。』

(※ 引用文中の「」と区別が付きやすいように引用文には『』を用いている。以下同様)

と評価する。そして、最後にこのように終わる。

『鈍刀を使って彫られた名作のほんの一例を引いて置こう。これは全文である。「因幡の国に、何の入道とかやいふ者の娘容美しと聞きて、人数多言ひわたりけれども、この娘、唯栗をのみ食ひて、更に米の類を食はざりければ、斯る異様の者、人に見ゆべきにあらずとて、親、許さざりけり」(第四十段) これは珍談ではない。徒然なる心がどんなに沢山な事を感じ、どんなに沢山な事を言わずに我慢したか。』

上記の引用文中にある、兼好法師の徒然草本文(第四十段)の意味は、

「因幡の国(現在の鳥取県に含まれる)に、何とかの入道という人の娘が大変美しいということを聞いて、求婚者が数多やってきたけれども、この娘、栗だけを食べて、米の類を食べない。このような異様な人間は、他人様に嫁がせるわけには行かないと言って、親は結婚を許さなかった」

と言うことになるだろう。

因みに、徒然草には、このような少し不思議なお話が他にもあって、たとえば、大根を万病の薬であると信じて毎朝二本焼いて食べていた人の家が警備の者の留守に敵に襲われたときに、屋敷のなから見知らぬ兵士が二人出てきて家の危機を救った。礼を言ってどなたか訪ねたら、日頃あなたが信じて食べている大根ですとだけ答えて去った、というお話(第六十八段)も載っている。

さて、栗娘の話に戻るが、これは一つの禅で言う公案であろうと思ったとき、それぞれに解き方が出てくるだろう。兼好法師も小林秀雄さんも黙って死んだのだから、黙って死ぬべきか。

そうも思ったが、凡愚きわまりない私が多少のことをしゃべったところで、中るとも限らず、中っていれば、後世多少の名誉でも残るかという欲もあって、くだらないおしゃべりをしてみようと思う。

小林さんは、この分が鈍刀を持って彫られたと言っている。と言うことは、我々がまず目が引かれる、娘が栗しか食べなかった、というところは、レトリックの部分であり、主要でないとみる。大事なのは、そのあとで、「斯る異様の者、人に見ゆべきにあらずとて、親、許さざりけり」というところであろう。こんな異様の者が結婚して幸せになれるわけがない、という親心が大事だと言っているのだろう、ということが分からなくてはならないと小林さんは言っているのだ、と私は考える。そうするとこの小林秀雄さんの評論「徒然草」の内容は一続きに通じる。私はそう思うのである。








2014年7月14日月曜日

ノーム・チョムスキー「複雑化する世界、単純化する欲望」を読んで

チョムスキー(※)は高名な言語学者であり、また、近年はその世界的なリベラル知識人としての名声もようやく日本でも知られるようになってきた。

私も今回初めて、言語学関係でないチョムスキーの本を読んだのであるが、インタビュー形式であるということ、豊富な注釈とによって、多岐にわたる複雑な社会問題において論じたものとしては、かなり読みやすいものであった。地球環境と経済的活動が相反することやアメリカ政府の支出が経済活動に大きな役割を果たしているという点、すなわち、経済的な欲望がもたらす側面とそれに対する合衆国政府の影響力の大きさを指摘し、第二次世界大戦以降、長らく国際的に支配的な地位を占めてきたアメリカの行動、たとえば、環境問題ほか、国際情勢、特にイラン核燃料問題とアメリカの大学の果たした役割や戦争、核の脅威、宗教問題、中国の台頭に対する軍事的措置などの様々な社会問題に、長く勤めるMIT教授としての大学人としての視点から、アメリカ社会の抱える矛盾を示しながら鋭く切り込んでいく。

過去、日本でスキャンダラスなほど過激に伝えられたリベラルとしての主張の印象は、その主張がすでに消化されたものであるからか、さほど強い印象はもたらさず、この本のもう一つの特徴である、後半ほとんど占める補遺による資料提供は、その内容をより正確に伝えようとしており、そこにも強い印象を持った。

(※ のリンク先はWikipedia、「ノーム・チョムスキー」の項を参照しています)

2014年5月25日日曜日

これに時間があるときに書き足したり、推敲したりする実験

世間は相変わらずの身勝手ぶりで 正義の味方のそぶり

テレビはデジタル化され つまりは 劣化しない画像と映像 しかも 中味も変わらず ただチャンネルの番号までも 東京と同じになった 欠番を残しながら

パネルの映すきらびやかさと対照的な生活 マンガ アニメ ヒーロー番組 映画やドラマ その他の主人公たちと同化するかの如く ツライゲンジツから目をそらせるための果てしないいじめ 動物のマウンティング いじめのための口実を提供し続る惨めさ

衆愚社会と大衆民主主義 どこの国でもナショナリズム

EUは人権条項を日本とのEPAの条件とした しょせん日本などということだ 人権において遅れた国 女たちは圧力をかけてくるが しょせんそれは何かの裏返しにすぎない そして男たちも そろって 未だに士族だとかなんだとか どこかの国が戦勝国がどうの言うような 同じようなことばかり言って 戦争に負けたことも知らんぷりにして

結局まだ容疑者だろう 有罪じゃないんだろう いくら有罪率が高くったって100%じゃないんだろう 誤認逮捕で人生狂った人間いっぱいいるんだろう でもほとんどの人にはそんなことはどうでもいいんだろう マスコミも商売さえできればいいんだろう 日本はやっぱり人権で遅れた国だろう いじめでお金儲けて国からも表彰されておけばいいんだろう

世間と世界はそんなもの

ご飯のマナーは気にするが どれだけ危険でも自動車の運転のマナーなどどうでも良い 要するに自分さえよければ 自分の気にいるかいらないかだけの問題だけで 自分だけがかわいい

可愛いは正義 ふふ 言葉とはおかしなものだ  正義とは何だ そういう問いかけはどこかに行き 可愛いにおいてすべては正当化されるという事物の断定に快感を覚える

抑圧されたかわいい 自分がかわいい 幼稚な若い女性の見かけによる差別化をはかる一種遅れた価値観

しかし 一方でかわいいは正義という断定のおもしろさには逆らえない なぜか を問いかけることはせず ある価値観で断罪することは正義か

子猫はカワイイ カワイイは正義 何でも許される でも 人間は ネコじゃない

誰かのためらいを後押しする カワイイは正義 それは優秀な宣伝文句

しょせん観念というものにおいて 我々の躍動する言葉の瞬間は固定できない そう擁護することは可能 いや 遅れた世界においてそれはたんに幼稚語のカワイイに過ぎず 遅れた我々は幼児のように面白がっているのだ という断罪がやはり正義か

正義とは平等の別名という 「目には眼を歯には歯を」命には命を 死刑は復讐であるかないか 国家が命を取ることは是か非か しかし 不条理にも奪われた命は奪った人間のそれより軽いのか なぜ被害者は加害者より常に我慢をしいられなければならないのか その疑問は野蛮だと言われるだろう 近代国家とはやりきれないものだ






2014年4月6日日曜日

人で無しのための計算機理論入門 その10 プログラムの基礎 その4 地味だけ ど大事な論理式


さて、とうとう10回目になったこの「 人で無しのための計算機理論入門」。一応、情報機器を使用したり、それ以上にプログラムさえ書いたりして使いこなしたりする上で、基本的な事項をきちんと押さえておくことがいかに大事かということをお伝えできたと思います。ほら、基本理論て意外に大切でしょう?ということです。
 
これ以上のことを説明し出すと、非常に専門的になりすぎて、普通の人が知っておけば便利だな、という内容から少し遠ざかってしまうことになりそうですので、一旦ここで、この「計算機理論入門」は区切りをつけさせていただきたいと思います。これまで読んでいただき本当にありがとうございました。
 
さて、その記念すべき最終回は、やはり地味に基本を押さえていきたいと思います。
 
以前、二進数とブール代数(論理式)について、「P=NP?問題の覚え書き」というブログの「 充足問題について その前に」という記事で、割合詳しく述べさせていただきました。
 
ここでは、分岐に欠かせない、論理式について、もう一度復習をしておきたいと思います。
 
ところで、「その7」でCPUは、

 0(ゼロ)フラグ:計算の結果が0の時に1、そうでないときは0
 マイナスフラグ: 計算の結果が負の時に1、そうでないときは0
 
というフラグを立てる、というお話をしました。
 
こういう風にフラグというもので計算結果を出したあと分岐をするということは何となくおわかりでしょうが、複数の条件が重なった場合の分岐はどうするか、ここで、論理式というものが必要になります。
 
たとえば、「もし、毎年4月はじめの日曜日 晴れだったら花見実行のメールをメンバーに出す だけど 雨が降ったら中止」というプログラムを書きたいとします。
 
いくつかの表し方があるとは思いますが、たとえば、
 
 ・Dを日付型の変数と定義
 ・Dに今日の日付を記憶
 ・Dが
   4月であるか?
    かつ
   最初の日曜であるか?
  をそれぞれ調べるサブルーチンを呼び出し、
  条件を満たせば、次へ進む。
  そうでなければ終了
 ・天気は晴れ? =>花見メール
  天気は雨?  =>中止メール
 
というように要素を分解して表せば計算機のプログラム的になるのは分かりますよね。(その他の天候の時は空気を読めということです。空気読むのは日本人として大事ですよ、ほんとうに。それができないから(ry)
 
ところで、上の例で条件による分岐のところで”かつ”という言葉が出てきました。少し抽象して
 
 条件Aを満たす
 かつ  
 条件Bを満たす
 
というのは条件Aと条件Bが両方満たされて初めて次に進めるわけですから、ある条件を満たしたとき立つフラグを1それ以外を0とすれば、
 
 条件Aのフラグ     0  1  0  1
 条件Bのフラグ     0  0  1  1
 AかつBをみたす?   0  0  0  1 
 
となり、かけ算したときの計算の結果と同じです。これを論理積と言い、その筋の学問の記号では∧と表します(集合の積集合の記号∩に似ていますが、0か1の2値しかないので、どちらかに決まるということで尖っていると思ってください)。
 
また、同様に「または」、というのもありますが、表にすると
 
 条件Aのフラグ     0  1  0  1
 条件Bのフラグ     0  0  1  1
 AまたはBをみたす?  0  1  1  1
 
となり、かけ算したとき計算の結果と同じです。これを論理積と言い、その筋の学問の記号では∨と表します(∧と同様に集合の和集合の記号∪に似ていますが、はやり、論理式では0か1の2値しかないので、どちらかに決まるということで尖っているわけです)。
 
他に、もちろん、否定(記号:¬)と言うものもありますが、これは
 
 条件Aのフラグ     0  1
 条件Aの否定      1  0
 
と、わかりやすいです。
 
こういう数式を扱う学問にブール代数というのがあるのですが、言語の中には0をFalse、1をTureと表現する、ブーリアン型というのがあります。これはブール代数からきているわけですね。
 
だから、プログラム言語によっては、分岐の条件の部分で0以外の値にすればとすれば常に真と判断するという言語もありまして、慣れないととわかりにくいバグになりますから、気をつけてくださいね。
 
以上です。
 
最後まで地味なこの講座にお付き合いいただきまして本当にありがとうございました。まだ、葉桜の咲くこの時期にこうして一つ書き物を終了させることができたことを本当にうれしく存じます。
 
つたない講座でしたが、何とか終わらせることができましたのはみなさまのご声援と叱咤激励の賜であり、繰り返しになりますが、心より感謝の意を表させて頂きます。
 
                             平成26年4月吉日

2014年4月5日土曜日

人で無しのための計算機理論入門 その9 プログラムの基礎 その3 使い回して効率を上げよう

がんばるためにがんばる、そんな訳の分からない状況で、貧乏なのに国のためにボランティアをやっている、なんだか訳の分からない私。しかし、「世界市民のみなさん。アメリカがあなたのためになにをしてくれるかではなく、人類の自由のために共になにができるかを考えようではありませんか」とは故ケネディ大統領の有名な演説にもある通り。少なくても今までこの国でも人権さえも無視されてきても、ホモサピエンスには違いありませんので、気持ちだけでも人類の自由のために微力を尽くそうという次第。
 
※ ところで、一つ訂正があります。「その3」にて、C/C++、Javaなどの高級言語のことを関数型と申し上げていましたが、オブジェクト指向型と申し上げるべきでした。お詫びして訂正いたします。ブログの方の記事においては訂正済みです。
 
さて、今回はサブルーチンについてお話しします。
ある程度プログラムが書けるようになって、いろいろなプログラムを書いているうちに、あれ、これってどこかで同じプログラムを書いたな、とか、この部分は他でも何回も使うんだけど、いちいち同じことを書いたりするの面倒だな、という気になってきますよね。
そういうときに、その部分だけを独立させて使い回すことをサブルーチン化すると言います。考え方としては、木の幹、いわば幹線的な処理を行う部分をメインルーチン、そこから呼び出されて様々な専門的に特化した仕事を繰り返し行うところをサブルーチンといいます。

以前、「その7」で説明した、フローチャートの記号は以下のようになります。


現在主流のオブジェクト指向型言語では、サブルーチンの処理をクラス(class)として、独立させることが主流です。
 
どのように独立させるかというと、
 
 1.サブルーチンの中で使用する変数とその中で行う処理を
   他から影響されない一つの独立した組にする。
  (カプセル化)
 2.似たようなサブルーチンは、同じクラスの中で、
   異なるメソッド(method)と記述し、呼び出すときは、
   [クラス名].[メソッド名]のようにして呼び出す
 
といった感じでしょうか。ちなみに、クラスの中の変数にも、
 
   [クラス名].[変数名]
 
という感じで呼び出せるものもあります。(呼び出せないものもあります。これについては後述します)
 
このような、
 
 [クラス名].[メソッド名]や、
 [クラス名].[変数名]
 
で呼び出せるものを、メンバ(member)と呼びます。3年B組の誰々さんを呼び出すのとちょっと似ていますよね。
 
一般にクラスの中だけで使う変数や、サブルーチンなどは、プライベート(private)と分類され、クラス外側から見えないようにします。クラスの外側から見えてもいいものをパブリック(public)に分類します。
 
このあたりのことは、言語の仕様にも依る部分があるので、詳しくはその言語の使用をよくご確認下さい。
ただ、プロセスが分かっていると、クラスに関しても何となくよく分かりますよね。
 
さて、このように、誰にだって、(コンピュータのプログラムにだって!)プライベートはあるんです。私にはありませんけど……。

2014年4月3日木曜日

人で無しのための計算機理論入門 その8 プログラムの基礎 その2 変数とメモリの関係

もう書かなくて良いのかと思っていたら、なんだか書かないといけないような雰囲気。四月バカであるように祈りたいです(この部分は4月1日に書いています)。しかし体調はいまいちなんだけどねえ。また使いつぶされてる為の陰謀じゃないのか、と半分本気で疑っている現在。みなさまどうお過ごしでしょうか。

(※4月3日注記 などと書いていたら4月2日のニュースで、オバマ大統領の訪日決定しそうだとあり、かなりビクビクているところ。私なりに大急ぎで仕上げたのは言うまでもありません)

さて、分岐ができればループができるということは前回の図でもおわかりいただけるのではないかと思います。

となると、他にいくつかの予備知識が有れば、もう、プログラムも書けるんじゃないかな、と思うでしょう。かけると思うけど、世の中そんなに甘くはないけど、結構甘い。どっちなんだ。

あと二つ、いや、三つかな、お話しすれば、関数型と言われる言語であれば、そこそこなプログラムは書けるになると思います。多少、経験は必要でしょうが。

まず、前回のフローチャートで、変数を使っていますが、意味的にはおわかりいただけたでしょうか。
 
たとえば、

  i=i+1

などというのは、計算機プログラム上よく出てくる表現ですが、これは、もともと、計算機のメモリのある番地の内容を変数iとして使用しますよ、ということから出てくる、一般的な数学では見かけない表現で、要するに変数iとして割り当てられたメモリの内容を1増やしなさいということを計算機に指示する表現です。

 この命令は、計算機内部では、メモリの内容をCPUのレジスタに読んでそのレジスタの内容を一増やして、もとのメモリの番地に書き込むという作業が行われるわけですが、それ以前の重要な問題がありますよね。

すなわちまず、ある変数をメモリに割り当てる、という命令がたいていのコンピュータ言語では必要となります。(Rubyという言語では勝手にそのあたりの空気を読んでこっそりとやってくれたり、それ以外の言語でも、統合開発環境と呼ばれるプログラム作成用のアプリケーションソフトを使えば、プログラムの作成中に指摘してくれたりもするようですが)たとえば、C/C++と言われる言語であれば、

 int i;

と、変数を宣言します。これは、C/C++言語では「変数iを整数型の変数として宣言します」と言う意味ですが、実際のプログラムの実行上はメモリのある番地に整数の変数iの内容を記憶する領域を確保して下さいね、と言う意味です。(なんだかちょっとプロセスというのが分かってきたでしょう?)

つまり、プロセスというのは、プログラムが実際CPUで実行される形式(これを機械語、あるいはマシン語とも言います)で表現されたプログラムと、このような変数の為のメモリの領域が確保されたものということです。

さて、プロセスが分かっていただいたところで、この節での大きな一つの目的は果たしたわけですが、せっかくだからもう少しプログラムを書く上で重要なことを説明しておきましょう。ここからは少しややこしくなりますので、分からなくてもかまいません。しかし、知っていると、後々プログラムを書く技法上でのいろいろな悩ましいことがらでスマートに解決できる、という点で違ってきますので、一応説明します。

上記の例で、変数iをメモリのある番地の内容とすることにしました。ところで、その変数iの内容がどの番地にあるかということをどこかに記憶しておかなければ、高級言語から機械語に翻訳するときなどで困ります。

C/C++言語などで言われる、いわゆるポインタというものです。

たとえば、変数iの内容を変数jと同じ内容にしますということを行うときに、我々は変数iが変数jと同じになればいいんだから、たとえば、

 i=j

と表現すればそれで良いと考えますが、しかし、よくよく考えるとコンピュータでは、実は基本的には二種類のやり方があって、
 
1.変数iと変数jの内容を記憶するメモリの領域を
  別々に二つ確保して、変数iの内容を変数jと同じにする

2.変数jの内容を記憶するメモリの領域を一つだけ確保し、
  変数iは、変数jの番地と同じ番地を参照するようにする

という、非常に微妙な話があります。

1.を「値渡し」あるいは「内容渡し」、2.を「参照渡し」もしくは「ポインタ渡し」と言います。

一般的なコンピューターの高級言語は、変数と変数において「値渡し」であり、「参照渡し」は特別な指示をしないとできなかったり、そもそもサポートしていなかったりしますが、次回説明する予定のサブルーチンに値を渡すときに、言語によって元々の設定が「値渡し」か「内容渡し」かが異なりますから注意しておかないといけません。

「値渡し」であれば、たとえば、上の例では、
 
 i=j

としたあとは、それぞれ独立した変数になりますが、「参照渡し」であるときには、iの内容だけを変更しようとしてjの内容まで変更する、ということが発生しますからね。

このあたりは本当にややこしくて、注意していないとバグ(コンピュータプログラムが考えているとおりに動かないときのミスをバグが紛れ込んでるという言い方をします)としても発見できにくいバグになりやすいので、「値渡し」か「参照渡し」かは、少しプログラムが書けるようになってきたら、で良いですので、いつも気をつけておいて下さいね
 

2014年3月24日月曜日

人で無しのための計算機理論入門 その7 プログラムの基礎 その1

 勝手ながら、国際情勢に気を使いながらのこの記事の作成ですが、明日から春休みということもあり、にこにこしながら大きな荷物を抱えて戻ってきている子供たちも見るという状況。というわけで、核安全保障サミットもある一方、糊口を凌ぐためのお仕事にも精を出さないといけない状況になっていまして、昨日に続き一本記事を上げたいと思っています。

この記事からしばらくプログラムについての基本的なお話をしたいと思います。例によってハードウエアに一番近い部分から、プロセスという概念がどうして必要になったかというところまでお話ししていく予定です。

まず、プログラムをするのに必要な最小限度の要素を考えてみることにしましょう。

実は処理の流れを図式化したものに、フローチャート(流れ図)と呼ばれるもので、日本工業規格(JIS規格)でもきちんと定義されていたりもします(JISX0121)。これは、たとえば、ISO( 国際標準化機構 )の品質マネージメント規格にISO9000シリーズというのがありますが、そこでそろえる書類の手順書などにも用いられたりして、汎用性が高いので覚えておいても損はないと思います。

ここでは、あまり細かいことまでは言わず、まずはごく基本的な次の5つだけ説明しておきましょう。






以上の五つとなります。これに時には矢印を加えて、処理の流れを表わすのですが、だいたい、上から下へ処理の順序を書いていくのがふつうです。

ここで、「その2」のCPUに必要な機能で説明していなかった分岐というものが出てきました。この部分について説明して、今回の記事は終わりたいと思います。

CPU何らかの計算をすると、計算の結果に応じてフラグというものを立てます。ゲームなんかをやっている人は、あるイベントをクリアするとフラグが立って次のステージに進める、などと使ったりしてませんか。あのフラグと同様です。

ただし、CPUが計算の結果立てるフラグは基本的には次の二通り。

0(ゼロ)フラグ:計算の結果が0の時に1、そうでないときは0
マイナスフラグ: 計算の結果が負の時に1、そうでないときは0

この他に、割り込みの信号が検出されたときに1となる、割り込みフラグというものもあります。

CPUはこのフラグの状態をみて分岐をします。

たとえば、ある二つの変数の内容が等しいかどうかが必要なときは、引き算をしてゼロフラグが0か1かという結果を見て分岐の処理します。

また、同様に大きい、小さいの比較は引き算をした結果、マイナスフラグが立っている(=1)か立っていないか(=0)ということで分岐を判断します。

このように、ごく単純なことに、我々の作業は分解されて計算機では処理されていくことを少しご理解いただいておくと、計算機に対する見方もまた違ったものになるのではないでしょうか。


2014年3月23日日曜日

人で無しのための計算機理論入門 その6 基本ソフトの基本機能(OSのカーネルについて)

まだまだ寒かったり暑かったりですが、本日はよく晴れて春麗ら。連休最終日に好天に恵まれたか人出も多く、宛にしていた図書館の駐車場も満杯といった様子。どうしたものかと途方に暮れて喫茶店に入ったところです。

さて、今日は何をやるかというともちろんピクニックではありません。日本語では基本ソフトともいわれるオペレーションシステム(以下OS)の基本機能について簡単に触れたいと思います。この部分は縁の下の力持ちの部分ですので、あまり普段は意識して使っていないかもしれませんが、理解しておいても損はありません。

まず、OSの大まかな役割としては、前回の仮想メモリのお話でも分かるようにハードウエアの差異を吸収する、言い換えれば、ハードウエアを抽象化するという働きがまずあります。
それは、CPUから見たときのメモリばかりでなく、人間からみた場合もそうでした。細かいハードウエアの差異を吸収し、ほぼ同じような操作性を提供しています。

このほかに、CPUの処理能力やメモリを効率的に利用できるようにする、計算資源(一般にはリソースと呼ばれる場合も多い)の最適化ほか、入出力装置(IO)に関しての管理(パソコンに新しい機器を繋ぐとデバイスドライバをインストールしています、などと表示されますよね)などなど、さまざまな機能を持っています。

世の中に出回っているOSには、たくさんの種類があり色々なやり方で構成されていますが、どのOSにも共通している基本的な機能、言い換えれば、計算機のハードウエアに一番近い処理を管理するをプログラム群のことをカーネル(Kernel)と言い、基本的に次の4つの機能に分けることができます。


1.プロセスの管理
 プロセスというのは、計算機が処理を行う上で基本単位となりうるプログラムとデータのセットだと考えて下さい。

ほかに、計算機の処理における仕事の単位としてタスクというのがありますが、これは、人間からみた場合の計算機にやらせたい仕事の単位です。
以前にも少しお話ししましたが、CPUさんは単純なものすごく細かい処理を、1秒間に10億回といった単位で処理しています。一方、人間の入出力の単位はせいぜいマイクロ秒、ミリ秒単位でしょう。そのため、人間には気づかれないように、自分がやりやすいように処理を分割して、人間からは並列に見えるような程度に処理の時間を区切りつつ多数の処理をちょっとずつ行っていたりします。

したがって、人間が計算機に何かやってとお願いしているときとの仕事の単位と、実際に計算機が処理を行っているときに管理する仕事の単位とは全く別のものになります。
たとえば、スマートフォンのアプリ。これは、人間からみたら、一つのプログラムに見えますよね。でも実際にたくさんの機能があって、それぞれの機能も計算機側からみたらいくつもの種類に分けることが可能です。

このように、スマートフォンのアプリのように人間が計算機にやらせようと考える仕事の単位をタスク、計算機側からみた仕事の単位をプロセスといいます。

このプロセスの管理や、計算機資源の効率的な仕様、並列処理などのお話はまた稿を改めて詳しくお話しするつもりです。


2.メモリ管理
 メモリとCPUは計算機にはなくてはならないもの。このメモリの抽象化については、仮想メモリについて述べましたが、このほかに、メモリを管理する上で、別のプログラムが同じメモリ領域にアクセスしないようにするメモリの保護などというものもあります。


3.デバイス管理
 OSのカーネルはデバイスドライバという形で、計算機の付属する各入出力装置や、外部記憶装置、あるいはネットワーク機器など一般にデバイス(IT業界におけるデバイスの意味は広いので使い方が難しいですが、OSのカーネルについて触れる時は、CPUとメモリ以外の様々なIO装置群)を
動かすプログラムを保持、その動作を管理しています。

たとえば、ディスプレイやキーボードなどの基本的な入出力装置以外に、プリンタに出力を送りプリントが終わればユーザに知らせたりもします。このほかに、ネットワークやファイル・ディレクトリの管理など、 カーネルはそのようなIOの管理機能の基本的な部分を提供しています。


4.システムコール
 以上のようなカーネルの機能はもちろんプログラムで書かれています。しかし、カーネルはハードウエアと密接に関わる部分であるため、簡単にカーネルの処理にアクセスするようなプログラムを作ってそれに触れるようなことがあればコンピュータは正常に動かなくなってしまいます。そこで、一般には、通常、カーネルはOSもしくはCPUが提供する特権モードで動作し、特別な許可を持つユーザしか触れることしかできません。しかし、一方で、一般のユーザもハードウエアに近い部分できめ細かい作業を行いたい場合もあります。そのような場合に、安全にカーネルの機能を提供する為の機能がシステムコールです。

例として、Windows系のOSでは、Windows APIと言われるものがあり、C言語やVisual BASICのようなプログラム言語から関数して呼び出すことができるような形で提供されています。


今回は、少しややこしかったですね。私もだいぶ忘れているところも多くありましたので、今回は、ウキペディアの記事のいくつかを参考書として勉強させていただきました。機能の分類は比較的一般的になものであり、ほかに引用などそのまま使用した部分はありませんが、念のために記載しておきます。

ウキペディアでの参考記事
・カーネル   : http://ja.m.wikipedia.org/wiki/カーネル
・OS      : http://ja.m.wikipedia.org/wiki/オペレーティングシステム
・システムコール http://ja.m.wikipedia.org/wiki/システムコール

2014年3月20日木曜日

人で無しのための計算機理論入門 その5 仮想メモリ

なんだか国際問題にまで関わってきているような気がするこの人で無しのための計算機理論入門。きっと気のせいだということで、話を続けたいと思います。

今回は今では当たり前になったOSの重要な機能の一つ、仮想メモリについてお話ししたいと思います。

以前「その2」で、内部メモリと外部メモリの違いは価格だけだということをはなしました。一方、「その3」では、OSが無い段階のプログラムでは、内部メモリの大きさにプログラムが依存する場合があるということをお話ししています。そのようなハードウエアの差異をなくすのがOSであるということでしたね。

そのことについて今回は少々詳しく説明します。今回、比較的高度に専門的な内容ですので、理解できなくてもかまいません。このあたりのことを知らないIT業界の人なんかいっぱいいます。また、その分説明も詳しくなるため、文章も長いです。

では、まずCPUがどうやってメモリにアクセスするのかということについてお話ししたいと思います。

その2で、CPUとメモリはバスというもので結びついていて、バスにはアドレスバスとデータバスがあるということをお話ししました。

このバスは、基本的には電気信号を通す線、つまり電線ですが、機能が高度になり、高速化の要求に従っていろ色々なことがやられるようになっています、が、ここではそこまで詳しい内容にはふれません。

前回(その4)CPUとメモリの両方に関することとしてビット(bit)という単位が関係するという話をしました。そこでは、ビットとはCPUとメモリが一度に処理できる二進数の桁数であり、CPUがメモリにアクセスするとき指定するメモリの番地を表すときの桁数でもあるという話をしたと思います。

つまり、CPUがメモリとデータをやりとりするときに使われる信号線がデータバス、メモリの何番地のデータであるかを指定するのがアドレスバスというわけです。

遅まきながら、計算機が2進数を使用する理由は、それが、電線に流れる信号が、ONとOFFだけで表せられるからです。このあたりのことは、いずれ機会があればデジタル信号処理ということでお話しできるかもしれませんが、今回はごくイメージ的に。たとえば、モールス信号のように、とんつーとんつーと信号のあるなし、あるいは信号の長い短いで通信していた頃を思い出して下さい。その方が、明らかに明瞭に遠くまで信号を伝えることができますよね。計算機の世界では、同様に簡単なことをいかに速く動作させるか、処理させるかというようなことが基本的な考え方です。

さて、話しは、CPUとメモリの話に戻ります。内部メモリは動作が速いけれど高価で、外部メモリは遅いけれど安価というお話をしました。だいたい、現代のパソコンやスマホで使われる内部メモリは一般にDRAMと呼ばれる半導体のメモリですが、動作は数nsから数十nsで動作するのに比べて、HDDドライブなどの外部メモリはそれよりも数百倍ぐらい遅かったりします。ビットあたりの価格も逆方向に同じぐらい違いますけどね。

ところで、「その4」で説明しましたが、32ビットでアクセスできるメモリアドレスの範囲は4G(ギガ)、64ビットだと16E(エクサ)でした。これに対して、現在の高機能スマホでもメモリは2Gが一般的。パソコンのCPUは64ビットが普通ですが、せいぜい8Gから16Gぐらいが一般的ではないでしょうか。つまり、CPUが指定できるメモリアドレスの範囲より、遙かに小さいことがわかります。

CPUは、基本的にメモリにアクセスする場合、単にアドレスを指定してその番地の内容を読み書きするだけ、です。一方、OSさんは、たくさんのプログラムが時分割で同時に走らせていることで、計算機では、あたかも並列に色々な処理ができるように見せかけています(これも、マルチタスクと呼ばれるOSの重要な機能です)あるいは、一つのプログラムでも、CPUがメモリアクセスできる番地いっぱいのデータを処理する場合もあります。

そのような場合、OSさんは、こっそりと、CPUさんをだまします。つまり、外部メモリにあるような、プログラムやデータもあたかも内部メモリにあるように見せかけて、CPUが指定する本来内部メモリにはないアドレスも、あるように見せかけてCPUに処理をさせるのです。このようなOSの働きによって、CPU側から見ると、あたかも広大なメモリ空間に何も考えずにアクセスできているようにみえる。そういうOSの機能のことを仮想メモリ、と呼びます。

ただし、CPUはハードウエア的には内部メモリにしかアクセスできないため、OSさんは、一生懸命できるだけCPUさんが早く処理をできるように色々予測しながら、内部メモリの内容が外部メモリの内容とあまり頻繁に入れ替えをしなくて済むように考えて処理をしています。このように仮想メモリという考え方によって、現代のCPUは内部メモリの大きさに関わらず、様々な処理を行えます。

ただし、処理の内容が大きく、一方それに比べて、相対的な内部メモリの大きさが小さいような場合、内部メモリと外部メモリとの間の内容の入れ替えをOSは頻繁にしないといけなくなります。これが、古いパソコンで、なにかあるとHDDがカリカリ動き出す理由です。

したがって、パソコンやスマホ、タブレットPCを長く使いたいならば、CPUの性能はもちろん、内部メモリ(一般にDRAMあるいはRAMとよばれる半導体メモリ)の大きさも重要です。個人的には、新しくパソコンを買うとしたら、一番高いCPUより、二番目に高いCPUを選択し、その分、メモリにお金を使う方が、長く使うことができると思います。私なんか、パソコンは8年前に買ったものですが、メモリは奮発して2G載せていました。さすがにそろそろ限界に近いですが、まだそれなりにではありますが、Windows8.1走ってますよ。

2014年3月19日水曜日

人で無しのための計算機理論入門 その4 計算機に関するいろんな単位

さて眠れない夜、簡単に計算機で使われている単位のお話でもすることにしましょう。ここからは、若干ですが、専門的になっていきますので、わからなければそれはそれで良いと思って下さい。

まずCPU。

CPUは、電子回路で構成されています。従って電源が必要です。もう一つ、クロックと呼ばれるものがどうしても必要になります。これは、行進の時にかける号令のようなもので、電気ですので、イチ、ニ、のかわりに、on、off、オン、オフを繰り返します。このイチ、ニ、のかわりのオンとオフ(あるいは、オフとオン)の一セットを1クロックと呼び1クロックこれがCPUが命令を基準となる単位です。クロック数はHz(ヘルツ)で表し、大きい方が1秒間に実行できる命令の数が多いことになります。クロックが1GHzだと1秒間に最大10億回の処理が理論上できるということになります。

もっとも、1クロックに1命令処理できるとは限らず、数クロック掛かる命令もありますし、CPU設計の考え方の違いも有るので、あくまでも処理の速さとしてはの目安です。

他に、ビットと言うのもありますが、これはメモリとも関係しますので、少し後回しにします。

次にメモり。これは、少々やっかいです。というのはメモリの記憶容量を表すのに、ビット(bit)という単位とバイト(byte)という単位の2種類を使います。さらに、2の10乗が1024で、1000に近いこともあって、キロ(K)、メガ(M)、テラ(T)などの表現も10進数か2進数かで微妙に違います。

そういうややこしいことは後回しにして、とりあえずは基本的な事項。ビットというのはCPUやメモリが一度に処理できる2進数の桁数です。これが大きいほど、CPUとメモリで一度にやりとりできる情報の桁数も増えます。また、当然CPUが処理できる2進数の桁も増えます。そうすると、一度に処理する情報の量も当然増えますから、処理も速くなる傾向があります。

また、CPUが指定するメモリの番地もの大きさも広がります。一般に32ビットのCPUだと理論的に最大4ギガですが、64ビットであれば16エクサ(=100京)と無限に近いような大きさの数字です。

一方、メモリの容量バイト(byte、一般に大文字のBで表すことも多い)というのが使われますが、これは、これは、慣習的なもので1バイトは8ビットのことです。

細かいことを言い出すとこの辺も本当にややこしくなるので、基礎的な事項のみ説明しました。

2014年3月16日日曜日

人で無しのための計算機理論入門 その3 プログラムとOS


さて、おそらく絶賛大不評中であろうこの人で無しのための計算機理論入門、今回で、ごく初心者のための入門記事は終わりとなります。これだけわかっていれば、おそらくこの情報化社会のごく基本的な部分が魔法で動いているのではないということがわかっていただけるでしょう。ちなみに、某半導体工場で働いているときにエンジニアの女の子が半導体にあれだけ微細な加工をして動いているわけがない、ということを言っていたのでひっくり返りそうになった覚えがあります。では、なぜ、どうやって動いていると言うんでしょうかね。全く、技術者のくせにどういう教育を受けてきたんだと思いましたが。

それはそうとして、これだけわかっていただければ、アルゴリズムというものもウィキペディアそのほかネットの資料を読めばわかるようになるでしょう。これまでは、私にしては速いペースで記事を上げてきましたが、これからは、ごく不定期で書きたいと思います。いろんなことでこれでも忙しいのです。


その2までを読んでいただいたかたならおわかりと思いますが、計算機というのは、本当に単純なことしかできません。

そのため、ごく初期の頃は人間の方が計算機にあわせる必要がありました。プログラムというのは、そういう計算機に処理をさせる手順を書いたものですが、ただ足し算をするのにも、いちいち、レジスタAにメモリの何番地のデータを入れて、レジスタBには別のメモリの番地からデータを読み込んできて、レジスタAとレジスタBの内容を加えてレジスタAに入れるような命令を書き入れるというような、非常に面倒で手間のかかることをやっていました。

しかし、そのうち、効率よくプログラムを書くために、もう少し人間の方にわかりやすいプログラムを書くための方法が考え始められます。

まず、共通のプログラムを使いたいという欲求が沸いてきますよね。いちいち足し算をするにも、メモリの何番地があいているからそこにデータを入れて、そこから、どのレジスタにデータを読み込むのか、などという管理までちまちまとやっていられない。

そこで、そういうことを自動で行うプログラム、つまり、人間にわかりやすいプログラムを書くためのプログラムを作ろうという動きが出てきました。これが高級言語と一般に言われているものです。

現在よく使われている高級言語には、C/C++やJavaなどのグループがオブジェクト指向型言語と分類されもっとも普及しています。他にインターネットのホームページで使われるHTMLというのもプログラム言語です。細かい用途によって様々なプログラム言語があります。

さて、いろんなプログラムが書かれるようになりましたが、それは、ハードウエアの仕様により、様々に細かいところが異なってくる場合がありました。例えば、同じ種類のCPUを使っていても、内部メモリの大きさが違えば、処理できるプログラムは微妙に違います。そのような管理をいちいちプログラムでするのは面倒ですよね。

そこで、ハードウエアの差異を吸収して、人間に同じような操作性を提供するプログラムが必要だと考えられるようになりました。それが、オペレーティングシステム(以下OSと呼ぶ)です。

パソコンならWindows、スマートフォンやタブレットPCならば、iOSやAndroidが有名ですよね。このようなOSがあるからこそ、メーカー毎、あるいは発売された時期ごとに異なるハードウエアの細かい仕様の違いをユーザー側はあまり意識せずにスマホも使用することができ、また開発者側の負担も大幅に減らすことができるわけです。