奇妙な物語と民俗史、すなわち愛すべきオカルトの紹介

昔からオカルト話が好きである。とはいえ、女性によく好まれるような占いであるとかパワースポットであるとか、そういうものは範囲外だ。

自分が好むのは怪談であり都市伝説であり民俗信仰であり奇妙な事件だ。溺愛しているのは奇妙な物語と民俗史だ。

この説明で膝を打ち感心するのは同好の士だけだろう。そこで例を挙げよう。オカルトと呼ばれるものの中で自分が好むモノのだ。

ちなみに自分が基本的に「見たら呪われる」だとか「怖い画像」だとかの類いは大嫌いなので苦手な人も安心して読み進めてもらっていい。

迷信・疑似科学

201X年、世界は文明に包まれた!科学は進歩し、インフラは積み重なり、全ての迷信が死滅したかのように見えた。だが、疑似科学は死滅していなかった!

如何に現代人が歴史を紐解き古代の風習をあざ笑い「昔の人たちはみんな馬鹿だったんだね」などと言ってみたところで人間の知性自体が大きく進化してきたワケではない。古代と現代を分けるのは積み重なった社会インフラと科学技術だけだ。

Googleで医学や健康に関することを検索すればエビデンスに乏しい記事が一覧に出て、リテラシーに欠ける多くの人々はそれを信じてしまう。

2017年の現代日本で、識字率はほぼ100%、高校への進学率は98%、人々は小型通信端末を自在に操り様々な情報へアクセスすることが出来る。

その文明の申し子の前頭葉から生まれてくるアイディアが妊娠菌であり水素水であり血液型の性格診断である。誰も気など違っていないし無明の人々でもない、普通の人々だ。だからこそ興味深い。彼我との間に大きな差はない。分野が違ったり状況が変わればそういう迷信に陥る可能性は誰にでもある。

今の時代に「運動中は水を飲むな」と指導していれば何を馬鹿な、前時代的な、指導される側が可哀想だ、まったく科学的ではないヤツだ、と後ろ指をさされるだろう。しかし「運動の前にストレッチをしろ」という指導も同様に時代遅れの指導だと言われたらすぐに納得できるかな?

ちなみにストレッチを行うと筋力のパフォーマンスが低下するため動的ストレッチを行うべきだということは最近の研究*1で指摘されている。だが、おそらくこの考えが人口に膾炙するには数十年かかるだろうし生きている間ずっと否定する人間もいるだろう、そう、「運動中に水を飲まない」という知見が上書きされるまでのようにね。

 積み荷信仰

積み荷信仰(カーゴ・カルト)は非常に面白い迷信の例だ。ただし、この信仰が実際に存在していたのかについては根拠に乏しい面もあるので、これ自体が都市伝説だと思って聞いてほしい。ここではわかりやすい例として提示する。 カーゴ・カルト - Wikipedia

概要としては未開の島々に飛行機や船で近代的な西洋人が現れて様々な島の住民にとっては神々が作ったようにしか見えない工業製品を贈ってくれた。西洋人はやがてその島での用事を終えて去って行くが、島の人々は西洋人を神の使いであり神から授かり物を得る方法を知っていたと考えて西洋人の真似をし始めた。

架空の飛行場や港を作り西洋人の真似をして木で作った銃を持って練り歩く。こうすればやがて神々から素晴らしい贈り物を授かるはずだと信じて。

彼らの行動を未開の文明が愚かなことをしていると思うだろうか。しかし我々の世界にも「金持ちの行動を真似すれば自分たちも金持ちになれるはずだ」という本が書店で塔を築いている。

「金持ちは移動でタクシーに乗る、彼らはこうして時間を節約し勉強することで金持ちになったのだ!」というヒューリスティクスな推論と「西洋人は飛行場で銃を持っている、彼らはこうして神々に祈りを捧げ贈り物を得たのだ!」という推論は科学的な検証を経ないという点でも同じ地平に存在する。

架空の飛行場で木の銃を振り回す彼らは真剣であり、神々の贈り物を切望しており、そのためには日々の畑仕事や漁を投げ出してしまう。そこが悲劇的であり、そして興味深い。

*1:

Cramer JT, Housh TJ, Johnson GO, Miller JM, Cobum JW, Beck TW (2004) Acute effects of static stretching on peak torque in women. J Strength Cond Res. 18 (2) :236-241.

Nelson AG, Guillory IK, Comwell C, Kokkonen J (2001) Inhibition of maximal voluntary isokinetic torque production following stretching is velocity-specific. J S仕engthCond Res. 15 (2) :241-246.

続きを読む

RubyOnBasis[13] 新人Railsエンジニア向け講座

このシリーズについて

RubyOnBasisはRuby on Railsを業務に利用する新人Webエンジニアのための、Railsを使わないテキストだ。この講座ではWEBrickを使ってWebアプリを書きながらHTTPを始めとする基礎知識をキャッチアップしてRailsがどうやって作られ動くのかを理解していく。

このシリーズを始めから読む

責務の分離

このチャプターのコード: https://github.com/owlworks/ruby_on_basis/tree/13_change_routing_process_and_add_id_column_to_product

さてProductのGET(Read)、PUT(Update)、Deleteを実装する予定だが今日はその下準備だ。まずコードが少しややこしくなってきた。具体的にはmount_procメソッドのブロック内で処理を書きすぎている。そこでリクエストからレスポンスを作るまでの実処理をControllerオブジェクトへ任せよう。

続きを読む

RubyOnBasis[12] 新人Railsエンジニア向け講座

このシリーズについて

RubyOnBasisはRuby on Railsを業務に利用する新人Webエンジニアのための、Railsを使わないテキストだ。この講座ではWEBrickを使ってWebアプリを書きながらHTTPを始めとする基礎知識をキャッチアップしてRailsがどうやって作られ動くのかを理解していく。

このシリーズを始めから読む

作ろう、商品!

今日はProductを新規登録をしてみよう。が、その前に一つ話しておくことがある。

以前の説明でHTTPはURLに対してGET, POST, PUT, DELETEメソッドを使うことでリソースを操作すると言ったな。すまん、ありゃ(一部)嘘だ。

俺が悪いんじゃない、悪いのはHTMLだ

HTTPの仕様はもちろんそうなっているんだが、実際にはなんとブラウザを利用するWebアプリではPUTメソッドもDELETEメソッドも使っていない。HTMLの規格でGET/POSTしか使えないんだ。

ただ、ブラウザを使わないアプリケーション同士でWebAPIとしてHTTPを使う場合はPUTやDELETEメソッドも使っている。例えばiPhoneTwitterクライアントを利用する場合、内部ではput/deleteメソッドが使われるだろう。

「嘘だっ! RailsのRoutesを書く時にPATCHやDELETEだとかのメソッドを指定しているのを見たことあるぞ。使えないわけあるか!」と反論するお友達もいるかもしれない。ではRailsがどうやってこの矛盾に対処するか説明しよう。

Railsに限ったことではないが、WebアプリでPUTやDELETEを使う場合にはメソッドオーバーライドをしているんだ。

続きを読む

RubyOnBasis[11] 新人Railsエンジニア向け講座

このシリーズについて

RubyOnBasisはRuby on Railsを業務に利用する新人Webエンジニアのための、Railsを使わないテキストだ。この講座ではWEBrickを使ってWebアプリを書きながらHTTPを始めとする基礎知識をキャッチアップしてRailsがどうやって作られ動くのかを理解していく。

このシリーズを始めから読む

Chapter.11 使おう、リソース!

前回はHTTPのURLとメソッドという概念を説明したね。今日はリソースを作ってコードを書いてCRUDしてみよう。

さて、どんなリソースを作ってみようか。このドキュメントではちょっとしたサンプルコードなら大抵は猫クラスが登場する。ただ、オブジェクト指向プログラミングやリソースのサンプルとしては不適切だ。可愛いけれど。

このドキュメントの想定読者は既にrailsで業務コーディングをしていると思うので、ビジネスっぽい例えの方が身近で良いと思う。だから今日は商品(product)クラスを考えてみよう。ちょっとした商品管理ソフトを作るんだ。

Productクラス

Productクラスは属性としてname(名前)、price(価格)、stock(在庫数)を持っている。

class Product
  attr_accessor :name, :price, :stock

  def initialize(attrs)
    attrs.each {|attr, value| instance_variable_set("@#{attr}", value) }
  end
end

new_product = Product.new(name: "ぺんぎんのぬいぐるみ", price: 2900, stock: 1)

puts new_product.name
puts new_product.inspect

# => ぺんぎんのぬいぐるみ
# <Product:0x007fac3111f5a0 @name="ぺんぎんのぬいぐるみ", @price=2900, @stock=1>
続きを読む

RubyOnBasis[10] 新人Railsエンジニア向け講座

このシリーズについて

RubyOnBasisはRuby on Railsを業務に利用する新人Webエンジニアのための、Railsを使わないテキストだ。この講座ではWEBrickを使ってWebアプリを書きながらHTTPを始めとする基礎知識をキャッチアップしてRailsがどうやって作られ動くのかを理解していく。

このシリーズを始めから読む

ようやくWebアプリ編に突入だ! RubyでHttpサーバを簡単に構築出来る標準ライブラリ、Webrickを使ってWebアプリを作ってみよう。さっそくコードから見ていくぞ、論ずるよりも書くが易しだ。

require 'webrick'

# WEBrick::HTTPServerクラスのインスタンスを生成する
server = WEBrick::HTTPServer.new({:Port => 3000})

# HTTPServerオブジェクトにmount_procメソッドでRouteを定義する
server.mount_proc('/teapot') do |req, res|
  res.body = "I'm a little teapot short and stout."
end

trap(:INT){ server.shutdown }
server.start

実にシンプルなコードだろう? ではこいつを実行して見よう。

[2017-08-22 23:24:00] INFO  WEBrick 1.3.1
[2017-08-22 23:24:00] INFO  ruby 2.1.0 (2013-12-25) [x86_64-darwin13.0]
[2017-08-22 23:24:00] INFO  WEBrick::HTTPServer#start: pid=96323 port=3000
localhost - - [22/Aug/2017:23:24:03 JST] "GET /teapot HTTP/1.1" 200 36

次にブラウザで http://localhost:3000/teapotへアクセスしてみよう。もしも君が仮想環境やリモートの環境で実行しているのなら、localhostの部分は適当に差し替えてくれ。

>I'm a little teapot short and stout. わーお! Webページが表示されたぞ、すごい! ではコードを少し説明しよう。あ、アプリを止めたいときはCtrl+Cを押してくれ。

続きを読む