PHP で遊ぼう(ハテナ) – 手続き型とアルゴリズムと

hiromasa.zone の MySQL があいかわらず落ちているため、このシリーズが何回目かわからなくなってしまったのでとりあえず (ハテナ)。

プログラム言語はコンピュータに何か処理をさせるための記述の塊ですが、プログラマと呼ばれる人は、そのコンピュータ言語に合わせて"普段の生活でやっていること"の記述をかける人です。

別にたいしたことをやっているわけではありません。 たとえば、前に書いたような、大きいものと小さいものの並べ替えとか、異なる種類のものの振り分けとか、そういった普段の生活でもやっているようなことを、言葉に置き換えているだけ。

人間は体で覚えてしまっているやり方とか、経験的にそうなることがわかっているのでやり方を意識していない部分というのがありますが、これを丁寧に紐解いていって最終的にコンピュータ言語に置き換えるのが仕事です。

コンピュータ言語というのは、こういった"やり方"をきわめて紛れなく記述できる人間のための言語です。 最終的には人間の言葉で書かれた仕様書なんぞ紛れが多くていらなくなります。

人間「1ヵ月後に実施する。」

1ヵ月後って 30日後? 31日後? 次月同日?

31日月末から1ヵ月後っていつ? 次の月が 2月だったら? 28日? あ、29日も考えないと。

等々。

人間の言葉でかかなければいけないのは"なんのためにやるか" というコンピュータ言語でかけない部分。

なんて、実はこれは夢物語。 現在はコンピュータに指令するための特有の記述も混在してしまい純粋にそれだけを書くことができず、時間もかかるので言葉としてはまだまだです・・・。

さて、このような何かのやりたい事を紐解いた手順を、アルゴリズムと呼びます。

アルゴリズム – Wikipedia

アルゴリズム (algorithm) は、なんらかの問題を解くための手順のことである。算法(さんぽう)と訳されることもある。

コンピュータにアルゴリズムを指示するための(電子)文書をプログラムという。人間より早く大量に正しい結果を導くことができるのがコンピュータの強みであるが、そのためには正しいアルゴリズムにもとづくプログラムが必要である。

だから、ソースコードを見られるというのは結構恥ずかしい。 なんといっても自分の思考の流れを赤裸々に人に見られるわけで、友達プログラマいわく「裸を見られるより恥ずかしい」です。(笑)

たとえば、AとBと書かれたカードが裏返しにおいてあって、そのカードの配置を知りたいとします。 どうすればいいかといえば、一枚めくってそれが A なら片方は B。 逆もしかり。 一枚だけめくるだけで片方は決まるので、2枚めくる必要はないわけですが、人によっては一応両方めくることをするでしょう。

1枚だけめくるのを言語になおすと、たとえば

   1: <?php
   2:  
   3:     // 無作為におかれたカード2枚(ここではカード1がB、カード2がA)
   4:     $card1 = 'B';
   5:     $card2 = 'A';
   6:  
   7:     // カード1判定
   8:     if($card1 == 'A') {
   9:         echo 'カード1 は A です。';
  10:         echo 'カード2 は B です。';
  11:     } else {
  12:         echo 'カード1 は B です。';
  13:         echo 'カード2 は A です。';
  14:     }
  15:  
  16: ?>

こんなかんじ。 "めくる" ってのは if で表現しています。

両方めくってみる人なら、

   1: <?php
   2:     // 無作為におかれたカード2枚(ここではカード1がB、カード2がA)
   3:     $card1 = 'B';
   4:     $card2 = 'A';
   5:  
   6:     // カード1判定
   7:     if($card1 == 'A') {
   8:         echo 'カード1 は A です。';
   9:     } else {
  10:         echo 'カード1 は B です。';
  11:     }
  12:  
  13:     // カード2判定
  14:     if($card2 == 'A') {
  15:         echo 'カード2 は A です。';
  16:     } else {
  17:         echo 'カード2 は B です。';
  18:     }
  19:  
  20: ?>

こんな感じ。 両方めくるので if が 2つになっています。

こんな風に、その人の思想によってプログラムも変わってきます。 思考の流れがプログラムから読めます。

片方だけみる派閥の人から見れば、片方だけめくるだけでよく、効率がよいので、両方みる派閥の人に対して「なにやってんだか」となります。 なんだかあたまのわるさを露見しているみたいなときもあるわけで、このへんがプログラマの一番のストレスとなるぶぶん。

そして3人目の人が現れて、は?って。

   1: <?php
   2:  
   3:     // 無作為におかれたカード2枚(ここではカード1がB、カード2がA)
   4:     $card1 = 'B';
   5:     $card2 = 'A';
   6:  
   7:     // は?
   8:     echo "カード1 は $card1 です。";
   9:     echo "カード2 は $card2 です。";
  10:  
  11: ?>

まー最後のは半分冗談ですが、状況によって、将来 C カードが増える可能性を考慮してプログラムをかかなければならないこともあり、結構神経をつかう部分でもあります。

職業柄、(自分のことはたなにあげ) 人の書いたプログラムをなおしたり、アドバイスしたりしなければいけないこともありますが、最近は"思想的な部分"については、きちんと動作しているかぎり自分のイメージと違ってもそっとしておくことにしています。 お疲れのときもあるですしね。

その部分についての指摘は、どーも人格まで否定しているような気がして・・・。 考えすぎですか。(笑)

ちなみに、人のつくってくれたラーメンにはコショウをいれない派です。 🙂

[USO]WordPress 検定試験

好きこそもののあわれなり。 学校の勉強はきらいでしたが、WordPress 検定試験とかあったらなんとなくうけてみたい今日この頃。 誰か作ってくれないかなと、いいだしっぺの法則で出題してみることとします。 🙂

初級編

Q1.

プラグインファイルの格納場所を WordPress のルートディレクトリからのパスで答えなさい。 そらで書いてね。

s のつく位置がポイントか!? そうでもないか。

Q2.

テーマファイル内で CSS や JS、イメージファイルをリンクする場合に使われる、テーマディレクトリまでのパスを自動で生成してくれるテンプレートタグは何? リファレンスみていいです。。

・・・なぜならぼくも忘れました(笑)

中級編

Q3.

管理画面からパーマリンクを設定してみてから、ブログのサイト内リンクをクリックしてみたらあちこちで 404 not found とでてしまいました。 この理由で考えられるのは、 .htaccess ファイルが生成できなかった以外で、もうひとつは何?

サーバの環境問題は難しいですな~。

Q4.

WordPress のマイナーアップグレードがありました。 その差分ファイルは、wp-atom.php、template-loader.php、wp-db.php の3つでした。 このバージョンアップは matt が何か間違いをやらかしています。 なんでしょう?

ぼのさんには一瞬で答えられた問題。 🙂

上級編

Q5.

WordPress の管理画面系以外のプログラムエントリ(スタート)ポイントは、index.php と RSS フィード系と、あとひとつは何系?

紛れがありそうな問題ですが、そこはのりで。

Q6.

index.php に入っている、define(‘WP_USE_THEMES’, true); って何のためにある?

何っていわれても困るか。(笑)

歴史編

Q7.

WordPress 1.2 -> 1.5 のときに搭載された、近代 WP 動作はなんでしょうか?

移行は大変だったけど、いまやこれがなきゃ困る。

番外編

Q8.

MMRT Diary Life の Masayan さんがたまにおみまいしてくる、うそかまことかわからない記事は何通信社から発布されている?

このエントリもそうだったりする。

以上、8問。 いまいちいい問題がつくれなかった。。 誰か本気でつくってください!

上級編はわけわからんですが、ネタで答えてもらえると幸いです。

さぁ、答えをみんなでトラックバック。 解答は CM のあと。

Web に続く! 🙂

ThinkPad X61 & Windows Live OneCare

私用でうちをあけている間に、先日頼んでいた ThinkPad X61 が届いていました。 🙂

P1000053

B5 なのに、キーも十分大きくきちんとストロークしてくれるので、ぱかぱかうてて気持ちが良いです。 トラックポイントも"いつものやつ"で大満足。 我が家初のマルチコア CPU は、 ZIP も展開しながらほかの事をしても処理落ちしなかったり良い感じです。

メールとか、ファイルとかデータ等は Linux のサーバに全部いれているので、あとはソフトいれるだけで Ready です。 いれたソフト。

そうそう、大事な ATOK はこれからこれから。 🙂

ほとんどいつもどおりですが、PaintShop がフリーの Paint.NET になりました。 あと、ウイルス対策ソフトを Norton AntiVirus から、Microsoft の Windows Live OneCare にしてみました。

ThinkPad がきて、Windows マシンが 3 台になり、またちょうど Norton 先生がきれかかっていたので、3 ライセンス 4000円弱の Live OneCare に乗り換えです。

実は1台体験版で 2ヶ月くらいつかっていたのですが、特に不具合もなさそうだったので購入してみました。

あんまり変なサイトとかファイルを落としたりしないので、ウイルス自体はどうでもいいのですが、気になるのはファイアーウォール。 インターネットからの inbound パケットはルータでふせいでくれるのでそれほど気にしなくて大丈夫ですが、ぼくが気になるのは outbound。

outbound は、PC から外に出て行くパケットですが、これはアプリケーション単位で制御しておいたほうが経験的に良いです。 わけわからないソフトはインターネットに勝手に情報を送ったりしてしまうのですが、これを防ぐことができます。(ポップアップしてくれる)

たまに、えええ! なんのために! ってソフトがインターネットにつないでいたりしますので、油断もすきもありません。 タスクトレイの通信ピカピカとか、ハブのピカピカとかみる手もあるのですが(昔はそうしていた)、最近はめんどくさくなったので、ソフトにまかせることにしています。

てなわけで、OneCare はこの機能が期待通り動作しているようだったので入れてみました。 もちろん、ほかの同種のソフトでもいいと思います。 まぁまぁ、ぼくは元来コンピュータに関して誰も使っていないものを使うのがすきなんです(かなり左より。。) なんたって、ぼくの Firefox のホームとかデフォルト検索とかは Windows Live だったりするのです。 別に Google じゃなくても困りませんよ? 🙂

thinkpad_sc

てなわけで、こんな感じです。

こっちをメインにしていいぐらい、いい機械ですわ。 SD スロットついているので、ここから Linux 起動とかもいいかもしれないですね。 カワユスカワユス。 🙂