interlude

プログラミングや私的なこと

ステータスコード304

ステータスコード304とは一体何か

ステータスコードは40種類くらいある
200番とか400、500番は馴染みがあると思うけど、
300番はあまり見たことがない。

その中でも304は特に何なのか分からない
意味は「リソースは特に更新されてない」という内容になる
実際にどういう動きをしているかというと、リクエストURIの最後にスラッシュが無い場合に用いられる。

最後にスラッシュがないと、ファイル名とみなしてしまう。
最後のスラッシュが無い場合、2回リクエストを送る場合があるということ。

これはちょっと無駄。

rubyモジュールの使い方

モジュールの使い方

module_functionで宣言するとメソッドとして扱える

  def fuga(name)
    puts "#{name}"
  end

module_function :fuga

もしくはincludeしてあげることでメソッドとして扱える

module hoge
def fuga
  puts "fugafuga"
end

def self.fugafuga(name)
  puts "#{name}"
end

include hoge

fuga #=> fugafuga
hoge.fugafuga(aaaa) #=> aaaa

sinatraでPUTメソッドを実装したい

解決策 enable :method_overrideを記述すること

sinatraのアップデートメソッドを実装しようとしたら、なかなか上手くかなかった。 (エラーメッセージは記録するの忘れた。後悔。。) そこで調べてみたところ、以下の記事を発見!

tomiacannondale.hatenablog.com

具体的な方法は分かったけど、何故?というところが詳しく書かれていなかったので sinatraのドキュメントを読んでみることに。

Sinatra: Configuring Settings

:method_override - enable/disable the POST _method hack

という項目を読んでみると、

Boolean specifying whether the HTTP POST method parameter hack should be enabled. When true, the actual HTTP request method is overridden by the value of the method parameter included in the POST body. The _method hack is used to make POST requests look like other request methods (e.g., PUT, DELETE) and is typically only needed in shitty environments – like HTML form submission – that do not support the full range of HTTP methods.

The POST _method hack is implemented by inserting the Rack::MethodOverride component into the middleware pipeline.

と書いてある。 enableにしてPOSTするとPutやDeleteのhttpリクエストが送れるということと理解した。 ただ仕組みまではちょっと調べる気になれなかった。

やり方は分かったけど、構造については分からないのがちょっとモヤっとしますね。。。

ストアドプロシージャは使うべきか

結論

便利だとは思うけど、結局SQL書けた方が幅広く対応出来ると思うので、積極的に使おうとは思わない。

ストアドプロシージャとは

ストアドプロシージャはデータベースの一連の処理手順をまとめたもの。
プログラミングでいうところのメソッド

メリット

1.アプリとの通信速度が早くなる
2.プログラマが楽になる

うーんざっくり笑
詳細は以下。

1,アプリとの通信速度が早くなる
これはSQL構文解析コンパイルが終わっているから。
サッカーで例えるとベンチの選手がウォームアップして、いつでも行けます!みたいな状態です。

2,プログラマが楽になる
一度定義したら長いSQLを書かなくてもいいからです。
夫婦で例えると「テーブルの上の新聞取ってきて」で通じていたものが、「アレ」で通じるようになるようなもんです。

なんだ、ストアドプロシージャいいことばかりじゃん。これは使わない手は無い!
・・・いやいや、でもそんな上手い話ばかりじゃないんでしょ?と思ったらありました。

デメリット

・DBに負荷がかかる

サーバー側にストアドプロシージャが保存されるため、ストアドプロシージャ数が増えると負荷がかかるんですね。

理想的な使い方

用途としてはよく使う処理だけストアドプロシージャにまとめる、という使い方が正しい。

ストアドプロシージャ機能を使えるDB

MySQL
PostgreSQL
Firebird
Oracle
SQL Server
DB2
等。


具体的な設定の仕方は以下が参考になる。
SQL実践講座(20):ストアドプロシージャの作成 - @IT

書きたいという気持ちが大事

書きたいという気持ちで書いたものは熱量を感じる。
絵も同じで描きたいという想いを掻き立てられてて描いたものは、
たとえ理解を得られないとしても本人は満足するはず。

義務感で書いていても、文章を書くことに長けていれば一定の品質は担保されるのだろうけど、
熱量を感じることは少ないと思う。

熱量をぶつける対象が文章ではなかっただけの話。
演説でも、音楽でも、スポーツでも、自分に合った方法で情熱をぶつける対象を見つけるべき。

それが自分にとって最適な方法じゃないかもしれないけど。

脳味噌を見せる方法

結論から言ってしまうと、紙とかブログとかに自分の気持ちや考えたことを書いてみること

人間は起きてから寝るまで毎日何かしら考え事をしてる。 ご飯は何を食べようかだとか、何の服を着るかとか学校とか仕事とかアニメとか 自分が関心のある出来事について考えている。

ただ毎日決まった行動をしていると、無意識のうちに行動していて、何故そうしたかを考えなくなる。

そんなことを気づかせてくれるブログ記事を見つけました。

d.hatena.ne.jp

あまり突き詰めて考えるという事をしないから、自然に疑問を持つことが無いんだと思う。 確かに1つ1つの出来事について疑問を持っていたらキリが無くなってしまうけど、 自分はどう思うか?そう思う理由はなぜか? という点を明確に考えるクセを付けて、アウトプットするということが自分を作っていくものなんだなーと。

自分を作っていくとどうなるか? 周囲の価値観にとらわれず、自分の判断基準で行動出来るようになるということ。 それはつまり、理想の自分になれるということなのです。

勿論自分と考えが合わない人と衝突することもあると思う。 考えが合わないのは当たり前の話だけど、衝突することで自分には理解出来なかった世界を 理解することが出来るようになる。
だから衝突することは健全なこと。

なんにせよ、自分が考えていることに対して他の人からフィードバックを得るには、 共通のフォーマットとして言葉が一番最適なんです。

伝えるために言葉があるのだから、言葉を使って伝えないといけない。 感情だとか気持ちといった抽象的なイメージを形にしたものが言葉なので、 形にしていく努力をしていこうと思ったのでした。

sinatraでyaml読み込もうとしたら出来なかった件

以下を参考にsinatraアプリを作成していると問題発生。
[Ruby] Sinatra + PostgreSQL + Unicorn な Web サーバーを Heroku に構築する | Developers.IO

以下のように設定したら動作したが、.envファイルを読みに行ってないのかな。。。

変更前:
ActiveRecord::Base.establish_connection(ENV['RACK_ENV'])

変更後:
ActiveRecord::Base.establish_connection('development')