gensym

プログラミングと読書、勉強に関するメモ

Phoenix の check origin エラー [Elixir]

Phoenix の本番環境で Websocket をいじっていると、突然エラーを吐き動かなくなった。 [error] Could not check origin for Phoenix.Socket transport. This happens when you are attempting a socket connection to a different host than the one config…

Phoenix を本番環境で起動する [Elixir]

環境: ubuntu 16.04, Elixir 1.4.4, Phoenix 1.2.1Phoenix は開発時とほぼ同じような感じで動かせるが、多少の前準備と設定が必要になる。 あらかじめ Phoenix と mysql をインストールして、Letsencrypt 辺りで証明書を取得しておく。 sym.hateblo.jp # con…

CarrierWave で画像の exif 情報を削除する [Rails]

Carrierwave は Rails 用の画像アップローダで、元々のファイルに exif 情報が含まれていた場合はそのまま保存してしまう。 多くの人に公開する画像ならば、なるべくこれらの情報は削除しておくべきだ。 mini_magick の gem をインストールした後、下のよう…

Web API: The Good Parts [読書メモ]

Web API: The Good Parts作者: 水野貴明出版社/メーカー: オライリージャパン発売日: 2014/11/21メディア: 大型本この商品を含むブログ (7件) を見る これまでそれほど Web API に関心があったわけではないが、最近 OpenStack 辺りの http ベースのサービス…

ルーティングで文字列をモデルのパスに使用する[Rails]

rails で resources を使うと自動でパスと関連したメソッドが作られる。 例えば name 要素を持つ User モデルを作ったとして、 # config/routes.rb ... resources :users ... のようにすると、id が 1 の User のパスは、 www.example.com/users/1 のように…

Ruby の管理に rbenv を導入する

環境: macOS Sierra, Ubuntu 16.04rbenv は ruby のバージョン管理ソフトで、変化の速い ruby 界隈では必須と言えるだろう。 まずはインストール。 brew install rbenvこのままだとパスが通っていないので、.bash_profile に追加する。 # .bash_profile expo…

Webサイトを作ったときの評価ツール

web サイトを作ったときに、効率的なレスポンスやセキュリティ、SEO などがきちんと出来ているかを調べるツール。PageSpeed Insights アクセスする際の効率性を調べてくれる。 リクエスト最適化やファイルの圧縮、キャッシュの利用などが出来ているか。SSL S…

Bitcoin-Core のブロックサイズを削減する

Bitcoin のデフォルトウォレットである Bitcoin-Core はフルノードのウォレットで、ブロックチェーンのサイズは永遠に増え続ける。参考: ビットコインチャート - Blockchain.info ナカモト論文にもあった pruning (枝刈) 機能が実装されていたので使ってみる…

クラウドにサーバを立てた時の ssh, ufw の設定[Ubuntu]

環境: ubuntu 16.04AWS や VPS サービスでクラウドサーバを立てた時に安全に使うための一連の流れ。まずは root でリモートにログイン。 パスワードか公開鍵かはサービスによる。 ssh root@example.com普段使うユーザを作成する。基本的にこれ以降 root は使…

force_ssl = true 時のリダイレクトループ [Rails]

環境 ubuntu: 16.04, rails: 4.2.6, nginx: 1.4.6Rails において https 通信を強制するには config/environments/production.rb 中の config.force_ssl = true をコメントアウトすればいいが、nginx でも https 転送の設定をしているとリダイレクトの無限ル…

メタプログラミングRuby まとめ [学習メモ]

メタプログラミングRuby 第2版作者: Paolo Perrotta,角征典出版社/メーカー: オライリージャパン発売日: 2015/10/10メディア: 大型本この商品を含むブログ (2件) を見る本書は ruby におけるメタプログラミングを扱った本で、ruby と言うことをのぞいても貴…

メタプログラミングRuby その10 [学習メモ]

メタプログラミングRuby 第2版作者: Paolo Perrotta,角征典出版社/メーカー: オライリージャパン発売日: 2015/10/10メディア: 大型本この商品を含むブログ (2件) を見る金曜日 : コードを記述するコード6.2 Kernel#evalプログラムを記述するコードをもっとも…

Ruby から OpenGL を使う

環境 : ruby 2.3.0 OSX 10.9.5opengl は汎用的な CG 作成ソフトウェアで、ruby からも利用できる。 gem を探すと opengl と ruby-opengl の二種類あるが、ruby-opengl の方は数年前から更新が止まっていて、使い方も少し違うので opengl の方を使う。 公式サ…

メタプログラミングRuby その9 [学習メモ]

メタプログラミングRuby 第2版作者: Paolo Perrotta,角征典出版社/メーカー: オライリージャパン発売日: 2015/10/10メディア: 大型本この商品を含むブログ (2件) を見る5.4.1 特異クラスの謎 特異メソッドはオブジェクトにメソッドを定義するが、メソッドは…

メタプログラミングRuby その8 [学習メモ]

メタプログラミングRuby 第2版作者: Paolo Perrotta,角征典出版社/メーカー: オライリージャパン発売日: 2015/10/10メディア: 大型本この商品を含むブログ (2件) を見る第5章 木曜日 : クラス定義5.1.2 カレントクラスruby プログラムが常にカレントオブジェ…

発酵の技法 [読書メモ]

発酵の技法 ―世界の発酵食品と発酵文化の探求 (Make:Japan Books)作者: Sandor Ellix Katz,水原文出版社/メーカー: オライリージャパン発売日: 2016/04/23メディア: 単行本(ソフトカバー)この商品を含むブログ (4件) を見るまさかのオライリーからの出版だ…

メタプログラミングRuby その7 [学習メモ]

メタプログラミングRuby 第2版作者: Paolo Perrotta,角征典出版社/メーカー: オライリージャパン発売日: 2015/10/10メディア: 大型本この商品を含むブログ (2件) を見る4.4 instance_evalclass 定義の際に明確に指定しない限り class のインスタンス変数や p…

Slimv を Clojure に対応させるまで [Vim]

環境: OS X 10.9.5lisp 族用の vim プラグインに slimv と言う便利な物があり、補完からインデント、色分けまで一通りやってくれる。 これさえあれば他にプラグインはいらないくらいで、common lisp だけではなく scheme や clojure にも対応している。 対応…

メタプログラミングRuby その6 [学習メモ]

メタプログラミングRuby 第2版作者: Paolo Perrotta,角征典出版社/メーカー: オライリージャパン発売日: 2015/10/10メディア: 大型本この商品を含むブログ (2件) を見る水曜日: ブロックruby おなじみのブロックはコードと束縛の固まりで、{ } や do ~ end …

index:true ではインデックスは張られない [Rails]

Rails 4.2.5 でカラムを追加する時にインデックスを張りたかったので、 # db/migrate/timestamp_add_name_to_persons.rb class AddNameToPersons < ActiveRecord::Migration def change add_column :persons, :name, :string, index: true end end としたの…

メタプログラミングRuby その5 [学習メモ]

メタプログラミングRuby 第2版作者: Paolo Perrotta,角征典出版社/メーカー: オライリージャパン発売日: 2015/10/10メディア: 大型本この商品を含むブログ (2件) を見る3.3 method_missing ruby オブジェクトがメソッドを呼び出すと、継承チェーンに沿ってメ…

Let's Encrypt で無料のSSL証明書を取得する[Ubuntu, Nginx]

今や SSL(TLS) はデフォルトとなりつつあり、いちユーザとしてみるとすばらしいことだ。 しかし運営する側にしてみると安くないコストとなってのしかかってくる。 一件当たり年間数万円、それがいくつもあるとバカにならない。 かといって SSL 非対応にする…

メタプログラミングRuby その4 [学習メモ]

メタプログラミングRuby 第2版作者: Paolo Perrotta,角征典出版社/メーカー: オライリージャパン発売日: 2015/10/10メディア: 大型本この商品を含むブログ (2件) を見る3章はメソッドに関する話題で、この本の肝とも言える部分だ。 Ruby のような動的な言語…

メタプログラミングRuby その3 [学習メモ]

メタプログラミングRuby 第2版作者: Paolo Perrotta,角征典出版社/メーカー: オライリージャパン発売日: 2015/10/10メディア: 大型本この商品を含むブログ (2件) を見る2.4 メソッドを呼び出すときに何が起きているの?オブジェクトがメソッドを呼び出すとき…

メタプログラミングRuby その2 [学習メモ]

メタプログラミングRuby 第2版作者: Paolo Perrotta,角征典出版社/メーカー: オライリージャパン発売日: 2015/10/10メディア: 大型本この商品を含むブログ (2件) を見る2.2 オブジェクトモデルの内部Ruby のオブジェクトは動的に定義されるインスタンス変数…

メタプログラミングRuby その1 [学習メモ]

メタプログラミングRuby 第2版作者: Paolo Perrotta,角征典出版社/メーカー: オライリージャパン発売日: 2015/10/10メディア: 大型本この商品を含むブログ (2件) を見る 今日からこの本を読んでいこうと思う。 これは原書第2版の翻訳で、以前は別の出版社か…

直接 OpenStack の一時 URL を生成する [Ruby]

OpenStack では一時 URL を生成することができて、許可された利用者にダウンロードリンクを送信するときなどに使える。 設定された時間を超えるとリンクは無効になる。 普通は swift などのクライアントライブラリを利用するが、直接生成することもできる。…

Bitcoin の仕組みを学ぶ際の資料

Bitcoin の仕組みを学ぼうとしたときに参考になるリンク。 近年は論文や出版物も増えてきているが、とりあえずはここから始めるのがいいだろう。中本論文 https://bitcoin.org/bitcoin.pdf(英語) http://kogarashi.net/pitchblende/wp-content/uploads/2014/…

R から Python に乗り換える

r は統計処理やグラフ作成では非常に便利だが、プログラミング言語として使うとなるとうんざりさせられる。 r はこれで動くだろう、と言った直感的なやり方が滅多に通用せず、"r ではこうやることになっている" といったようなことをいちいちネットや分厚い…

Bitcoin Address の正規表現 [Ruby]

参考 : RegEx to match Bitcoin addresses? - Stack Overflowビットコインアドレスにマッチする正規表現。 しかし完全ではないようなので目安程度に。 /\A[13][a-km-zA-HJ-NP-Z0-9]{26,33}\z/testnet における正規表現は /\A[mn][a-km-zA-HJ-NP-Z0-9]{26,33}…

Bitcoin Testnet について

bitcoin には普段使われるいわゆるメインネットとコインの価値が 0 のテストネットが存在するTestnet - Bitcoin Wiki。 コインの価値以外はメインネットと同じように使えるので、いきなり本物のビットコインは敷居が高いと感じる人はこちらから始めるといい…

aptitude で Bitcoin をインストールする [Ubuntu]

ubuntu の場合 bitcoin をソースからビルドしなくても、aptitude などで管理できるのでだいぶ楽だ。 しかしデフォルトのリポジトリには bitcoin は無いので、あらかじめ加えておく必要がある。 まずは $ sudo aptitude install software-properties-common $…

CL-REDIS から Redis を使う [Common Lisp]

redis は KVS 式のデータベースで、基本的にデータをメモリ上に保存するので HD などに保存する場合と比べて非常に高速だ。 ちょっとしたデータを一時的に保存するには便利だ。 lisp 用のクライアントライブラリがあるので、それを使う。 GitHub - vseloved/…

ディレクトリごとファイルをパスワードで暗号化する [Ruby]

ファイルをパスワードで暗号化するには openssl が便利だ。 ruby の標準ライブラリには openssl が入っているのでそのまま使える。 参考 : openssl の暗号化と同等のrubyでの処理 - それマグで!, class OpenSSL::Cipher (Ruby 2.2.0) クラウドや外付けスト…

OSX で Litecoin をソースからビルド

litecoin は bitcoin に似た仮想通貨で、本家に比べブロック生成の間隔が短くなり、ハッシュ化のアルゴリズムが変更されているなど改良型 bitcoin と言えるもので、広く使われつつあるようである。参考 : Litecoin - Wikipedia, the free encyclopedia公式サ…

let の初期値を 0 にするマクロ [Common Lisp]

let は局所変数を作るオペレータで、初期値が与えられなかった場合は nil が入る。 つまり、 (let (a (b 1) (c 2)) (list a b c)) ->(nil 1 2) となる。 カウンタとして局所変数を多く使うようなプログラムを書いていると、初期値が nil ではなくて 0 の let…

Prolog で魔方陣

思い立って prolog で魔方陣を作るコードを書いた。3 * 3 の正方形のマスの中に 1~9 までの数字を入れて、すべての行、列、対角の和を等しくする。 % magic.pl members([]). % リスト中の全ての要素が 1~9 のどれかであるか members([Head | Tail]) :- membe…

Ubuntu で直接 iptables を書き換える

クラウド上にubuntu でhttp サーバを建てたとき、ポート開放で躓いた。 ubuntu では ufw と言うソフトウェアでポートの管理を行うようだが、いっこうに反映されない。 以前ローカルで建てたときは普通にできたはずなので、何らかの環境の違いが影響している…