Elixir 練習問題 ControlFlow-3

こんな感じでいいかな。

^o^ > elixir practice_12_3.exs
warning: variable file is unused
  practice_12_3.exs:6

** (RuntimeError) Error occured.
    practice_12_3.exs:3: OK.ok!/1
    (elixir) lib/code.ex:363: Code.require_file/2

ちなみに、somefile の代わりに存在するファイルで試してみると次のようになる。

^o^ > elixir practice_12_3.exs
warning: variable file is unused
  practice_12_3.exs:6

エラーは起きない。警告が出てるのは file 変数を使ってないからだね。

Elixir 練習問題 ControlFlow-1

気が付けば前回の Elixir のエントリからひと月も経ってしまった。
ま、気を取り直して。FizzBuzz を case を使って書け、と。

^o^ > elixir practice_12_1.exs
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz

結局PCを買い換えた

先週の金曜日に起動しなくなってしまったメインマシン(apostrophe)、土曜日に DELL のサポートに電話してやり取りした結果、DELL に送って修理が必要ということになった。で、どのくらいかかるのかときいたら、期間にして2週間、費用にして3〜4万円(サポート期間が過ぎているので有償)という回答だった。
少し考えたけど、そんなにかかるなら買ってしまったほうがいい。DELL の即納モデルなら1週間もすれば届くだろうし、ちょうど春の割引キャンペーンをやっているので本体だけなら4万円をちょっと超えるくらいだ。
というわけで、一昨日届いた。昨日は時間がなかったので、今日セットアップ。プリインストールの Windows 10 のリカバリメディア(何故か USB フラッシュメモリしか選べないので急いで買ってきた)を作っておいて、Windows はさっくり削除して Ubuntu 16.04 LTS をインストールした。とりあえずは最低限のセットアップが終わったところ。あとは時間を見て環境を整えていこう。
あ、ホスト名は envelopes にした。
それにしても出費が続くなぁ。

メインマシン(Ubuntu)が起動しなくなった

今朝のこと。Ubuntu 16.04 のメインマシン(apostrophe)を見るとソフトウェアのアップデートが表示されていたので、アップデートした。すると、アップデートを完了するにはマシンの再起動が必要だというので、再起動したところ、起動しなくなってしまった。DELL のロゴマークが表示された状態で止まっていて、それっきり動きがない。
ともかく朝で時間がないので、そのまま様子を見ることにして(つまりほうっておいて)出かけたわけだ。
で、今帰ってきてみたら今朝と同じ状態のまま。マシンの電源を切ったり入れたりしてみるも変化がない。どういうわけだ。明日明後日と用事があってまとまった時間が取れそうにないんだけど、最悪再インストールかも。どうしたもんかね。

[追記]

Ubuntu のインストールディスクを入れて起動してみたけどダメだった。というか、DELL のロゴマークが表示されている状態で止まってるってここは、OS 以前の BIOS の途中で止まってるってことじゃなかろうか。こりゃダメかな。

球面上の点を平面上にステレオ投影する

先週のさらに続き。先週は、球面上の点を平面上に投影するのに X, Y 座標をそのまま使って水平投影したけど、今度はステレオ投影というのをやってみる。
ステレオ投影は Wikipedia に詳しく載っている。
先週と同じように、下半球の点 300 個を XY 平面(赤道面)上に投影する。やってみたのが下の図。

コードは次の通り。

やっつけ仕事なので、ヘルプもないけど、先週の gss_gen コマンド(--cartesian オプション付き)の結果を入力として、投影点の座標を CSV で出力する。

多数の点を球面上に一様分布させる(2)

一昨日の続き。最初と最後の点を極から移動(位置調整)するのを実装した。ついでに、gem 化して RubyGems.org にアップしておいた。gem install gss_generator でインストールできる。
使い方は次の通り。

^o^ > gss_gen --cartesian --relocate 1.0 600 > c600r.csv

--cartesian はデカルト座標系で出力、--relocate は位置調整のオプション。結果は CSV 形式で標準出力に出力するので c600r.csv ファイルにリダイレクトしている。

結果を一昨日と同様の図にしたものを載せる。

最初の点が極(中心)からずれて、一様性が増しているのがわかる。

多数の点を球面上に一様分布させる

ちょっと面白いものを見つけた。

 cf. LEDドームのLEDの並びを決めるのに使用した計算式 – jakaladaのブログ

球面上に任意個の点を一様分布させる、座標を求めるもの。一般化螺旋集合(generalized spiral set)というものを使っている。元の資料(論文)はここ。

 cf. 多数の点を球面上に一様分布させるソフトウェアGSS Generator

上のリンク先のブログでは Python を使っているので、Ruby でやってみた。

最初のがコマンドで、あとの2つがライブラリ。引数に球の半径と配置したい点の個数を指定すると、各点の極座標を CSV 形式で出力する。

^o^ > ruby -Ilib exe/gss_gen 1.0 600

極座標じゃなく、デカルト座標(XYZ座標)がほしい時には --cartesian オプション。

^o^ > ruby -Ilib exe/gss_gen --cartesian 1.0 600

下の図は、発生させた600個の点のうち下半分の300個を XY 平面上に投影した図。

各点を順に線でつないでみると、螺旋になっているのがよくわかる。

……なんか螺旋が逆になってるな。元論文じゃ球面を下から見たと書いてあるからそのせいか?

ともあれ、それらしいのはできた。ただし、最初と最後の点の座標を調整するのはやってない。時間があったらやってみよう。

SinatraでSECURITY WARNING: No secret option provided to Rack::Session::Cookie.というワーニングが出たときの対処法

Sinatra でアプリを作ってるんだけど、セッションを利用するとタイトルのようなワーニングが出た。もっと詳しく書くと次のとおり。

SECURITY WARNING: No secret option provided to Rack::Session::Cookie.
This poses a security threat. It is strongly recommended that you
provide a secret to prevent exploits that may be possible from crafted
cookies. This will not be supported in future versions of Rack, and
future versions will even invalidate your existing user cookies.

ググってみても見つかるのは、Rails のバージョンを上げろとか、Rack のバージョンを 1.4.1 にしろとかいうのばっかり。Rails は使ってないし、Rack は 1.6.5 なんだけどなあ。そんな中で見つけたのが↓このページ。

 cf. SECURITY WARNING: No secret option provided to Rack::Session::Cookie

config.ru で :session_secret に値を設定すればいいらしい。
具体的には次のようにした。

これでめでたくワーニングが出なくなった。

Ubuntuで作ったwheelパッケージをWindowsにインストールする

このあいだ Ubuntu で作った wheel パッケージ、Windows にインストールしてみた。
pure Python なのであたりまえだけど、何の問題もなくインストールできた。

^o^ > pip install myapp-0.0.1-py2-none-any.whl
Processing c:\users\hiro\documents\tmp\myapp-0.0.1-py2-none-any.whl
Installing collected packages: myapp
Successfully installed myapp-0.0.1

動作確認。

^o^ > myapp foo bar baz
['C:\\Python27\\Scripts\\myapp', 'foo', 'bar', 'baz']

^o^ > which myapp
C:/Python27/Scripts/myapp.EXE

へぇ、Windows だと .EXE ファイルができるんだ。

Elixir 練習問題 StringsAndBinaries-7

^o^ > cat sales.csv
id,ship_to,net_amount
123,:NC,100.00
124,:OK,35.50
125,:TX,24.00
126,:TX,44.80
127,:NC,25.00
128,:MA,10.00
129,:CA,102.00
130,:NC,50.00

^o^ > elixir practice_11_7.exs
[[id: 123, ship_to: :NC, net_amount: 100.0],
 [id: 124, ship_to: :OK, net_amount: 35.5],
 [id: 125, ship_to: :TX, net_amount: 24.0],
 [id: 126, ship_to: :TX, net_amount: 44.8],
 [id: 127, ship_to: :NC, net_amount: 25.0],
 [id: 128, ship_to: :MA, net_amount: 10.0],
 [id: 129, ship_to: :CA, net_amount: 102.0],
 [id: 130, ship_to: :NC, net_amount: 50.0]]