Julia の勉強をした

The Julia Language を勉強した.

なぜ Julia を作ったか Why We Created Julia

Twitter でこのリンクを見かけて変態な人達がいるな〜と思って
勉強してみた.

We want the speed of C with the dynamism of Ruby.

We want a language that’s homoiconic, with true macros like Lisp, but with obvious, familiar mathematical notation like Matlab.

We want something as usable for general programming as Python, as easy for statistics as R, as natural for string processing as Perl, as powerful for linear algebra as Matlab, as good at gluing programs together as the shell.

って,凄いよね.



早いし書きやすいから,
機械学習とかに使われてたりするみたい
どこ見ても Jupyter Notebook で動かすとか書いててうーん…って思った

とりあえず,

brew install julia

でインストールしてやってみた




最初に読みやすそうな Julia By Example を読んだ

f(x) = x + 1

みたいに関数が定義できたり,

3x
x^2

のように数学記号みたいに書けたりする.
他にも,配列の中に配列が入っているものと,2次元以上の配列(行列?)が区別されていたり,
良さげな感じがした.


これを読んだ後に v1.0.0 が出ていることに気がついた.
ということで, v1.0.0 をインストールして,

github.com を読んでみた.

基本的なことは, Julia By Example とほぼ同じだったかな


09. Julia is fast で他の言語と比べてるけど,とても早い!!

Julia hand-written simd.....3.2
Python numpy................3.5
Julia built-in..............3.5
C...........................9.4
Julia hand-written..........9.5
Python built-in...........673.0
Python hand-written.......791.8



round(value, 1)round(value, digits=1) って書かないといけないけど.


Python の関数を呼び出したりできるのも良さげ.
他の言語も呼び出せるのかな?



後は, 10. Multiple dispatch にあるけど

foo(x::String, y::String) = println("My inputs x and y are both strings!")
foo(x::Int, y::Int) = println("My inputs x and y are both integers!")

みたい書いて,引数・型の異なる同名の関数が定義できるのは良いと思う.
さらに,

foo(x, y) = println("I accept inputs of any type!")

って書いて,その他を受けることができるのもとても良いと思った.




String の replace

Julia By Example では,

relipace(string, pattern, replacement)

という感じで書かれていたけど,実際に書いてみると

ERROR: MethodError: no method matching replace(::String, ::String, ::String)
Closest candidates are:
  replace(::String, ::Pair{#s55,B} where B where #s55<:AbstractChar; count) at strings/util.jl:414
  replace(::String, ::Pair{#s52,B} where B where #s52<:Union{Tuple{Vararg{AbstractChar,N} where N}, Set{#s49} where #s49<:AbstractChar, AbstractArray{#s50,1} where #s50<:AbstractChar}; count) at strings/util.jl:419
  replace(::String, ::Pair; count) at strings/util.jl:423
  ...
Stacktrace:
 [1] top-level scope at none:0

とかエラーが吐かれた.

ドキュメント を読むと
Strings · The Julia Language

replace(s::AbstractString, pat=>r; [count::Integer])

変わってるじゃん!

v1.0.0 で String の置換は,

replace("The Ruby Programming Language", "Ruby" => "Julia")

って書くみたい.

割りと書きやすそうだし,早いみたいだし
普段軽く書くときに使っても良いかもしれない.

Google Fit と Samsung Health を同期する

体重計が壊れたので,どうせなら自動で記録してくれるものが良いと

普段使っているフィットネスアプリ Samsung Health に自動で送れる体重計を探した.

 

 

そうしたらこれが見つかった. 

Xiaomi Mi Smart Scale

思ったよりは安い.

 

いろいろ見ているともっと良さげな RENPHO  が見つかった.

iOS の Health とか Google Fit にデータを送ることができるみたい.

 

だけど, S Health とは連携できないみたい.

Google Fit → S Health はできそうな感じがしたので

 

RENPHO の体重計 を買った.

割りとカッコいい.

f:id:zeronosu77108:20180909141555j:plain

 

充電式だから電池も買う必要が無いし,乗ったら電源が入って,

精度もまぁまぁ良さそう.

 

 

S Health と Google Fit の同期は,

 

Health Sync というアプリがあって,

S Health と Google Fit の同期ができるみたい.

play.google.com

 

S Health はPCから見られないけど

双方向の同期ができるため,歩数とかも同期しておけば

PC から Google Fit を見ることで確認出来そう.

(たぶん PC からは見ないけど)

 

 

RENPHO →  Google Fit → S Health という流れで自動で体重入力できるようになった.

 

これで毎朝手動で入力する必要がなくなった!

 

学びを結果に変えるアウトプット大全 を読んだ

学びを結果に変えるアウトプット大全|サンクチュアリ出版 を読んだ.

 

今までビジネス書とか自己啓発みたいな本は読んでこなかった.

理由はそういう話って「それはあなただったからできたのでは?」

って思う事が多かった.

 

 

この本はタイトルからなんとなく気になった.

 

IT系の人は何かとアウトプットしているイメージがあったし,

今まで僕はアウトプットしてこなかった.

というか避けていた.

 

なんとなく「アウトプットしたい」とは考えていた.

それもあって即決で購入した.

 

読み始めると面白くて,半分くらいは時間を忘れて一気に読んでしまった.

 

至極真っ当なことが書かれていて,共感できることが多かった.

きちんと引用元,参考が書かれていて情報を確かめられるのも良い.

 

 

アウトプットする気満々で,

こんな感じでブックダーツを大量に挟みながら読んでいた.

f:id:zeronosu77108:20180909001628j:plain

 

 

アウトプットするための時間を作る方法から書いており,

心の中でとてもうなずきながら読んでいた.

 

 

CHAPTER4 で「圧倒的に結果を出す人の行動力」について書かれている.

その中で「やる気が出たら始めよう」 はいつまでもやる気が出ないとあった.

 

まず始める.5分やってみる.

をやってみようと思う.

 

 

後は,30点を目指して原稿を書くと言うのも良いと思った.

とりあえず完成させる,それから完成度を上げる.

初心者は,完成と直し を 8:2 くらいにしがちだが,

熟練者はまずは完成させて,直しに十分時間を使う. その比率は 5:5 くらい.

 

確かに,自分が書いた文章などは見直す度にミスが見つかる.

1回で完璧に書き上げるようとするよりも,直しに時間をかけた方が良さそうだ.

 

 

 

また,1回1時間,週2回の有酸素運動が脳を活性化させるらしい.

最近は,よく1時間くらいの散歩をする.

 

これを続けていきたいと思う.

 

 

 

毎日朝にTODOリストを作ることで,1日の流れが確認できるとあったが

TODOリストとして書き出す利点がまだよく分からない.

 

期限付きの課題ややるべき事は Reminders で管理している.

 

朝に作る時間が取れるか微妙だと思った.

作れなかったときに,そのまま辞めてしまいそう.

 

TODOリストを実践するかは,もう少し検討しようと思った.

 

 

全体として,とても良い本だったと思った.

続けることが大切ともあったので,これからアウトプットを続けたいと思う.

Python で ナップサック問題 を 総当たりで解く

Python3 でナップサック問題を総当たりで解くプログラムを書く機会があったので.

ナップサック問題総当たり

ナップサックに入れるか入れないかを2進数で判断している. 入れるなら 1 , 入れないなら 0 となる.

品物が15だとしたら,15ビットの2進数だと考えられる.
そこで,10進数の「0〜32767」 までを調べる.
2進数では 000000000000000 〜 111111111111111

それで,全ての組み合わせを求めることができる.

Fitbit blaze が届いて1ヵ月

9/29 に Fitbit blaze が届いた. Sony の SmartBand 2 を持っていたんだけど,なくしてしまったので 買ってみた.

f:id:zeronosu77108:20171029231419j:plain

中身はこんな感じ.

f:id:zeronosu77108:20171029231418j:plain

他にもバンドから外さずに充電できるスタンドとかも買った.

f:id:zeronosu77108:20171029231652j:plain

時計の見た目もいくつか選べるんだけど, 時間,日付・曜日が読みやすいこの見た目にしてる.

(時間に関してはもっと見やすい色が良いんだけど)


歩数に関しては, Wrist Placement を Dominant にしないと ゆるすぎる.

Dominant にしたら良い感じ.


Xperia X compact は正式に対応してないらしく, たまーに変な挙動する.


Notifications は, Xperia X compact だからか, サイレント状態だと blaze に通知してくれない.

最近は,ずっとバイブ状態.


特にダメなのは Bluetooth で接続して Music control が出来ない. 読み込み中ってずっと出てる.


Music control が出来ない以外は割りと満足している.

けものフレンズ言語 を触ってみた(BrainFuck も)

Twitter で流れてきた けものフレンズのプログラミング言語

github.com

すごーい!

書いてみた

たのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たのしー!すっごーい!わーい!すごーい!たーのしー!たーのしー!たーのしー!なにこれなにこれ!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たのしー!すっごーい!わーい!すごーい!たーのしー!なにこれなにこれ!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たのしー!すっごーい!わーい!すごーい!すっごーい!なにこれなにこれ!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たのしー!すっごーい!わーい!すごーい!たーのしー!なにこれなにこれ!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たのしー!すっごーい!わーい!すごーい!なにこれなにこれ!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たのしー!すっごーい!わーい!すごーい!たーのしー!なにこれなにこれ!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たのしー!すっごーい!わーい!すごーい!なにこれなにこれ!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たのしー!すっごーい!わーい!すごーい!すっごーい!すっごーい!なにこれなにこれ!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たのしー!すっごーい!わーい!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!なにこれなにこれ!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たのしー!すっごーい!わーい!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!なにこれなにこれ!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たのしー!すっごーい!わーい!すごーい!たーのしー!なにこれなにこれ!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たのしー!すっごーい!わーい!すごーい!なにこれなにこれ!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たのしー!すっごーい!わーい!すごーい!なにこれなにこれ!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!うわー!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!たのしー!すっごーい!わーい!すごーい!たーのしー!たーのしー!たーのしー!たーのしー!たーのしー!なにこれなにこれ!
$ ./kemono kemono_frind.kemono
Kemono Friends

脳がとろける たーのしー!


BrainFuck 系言語というものを初めて触ってみた.

これは+とか>で書く本家? の BrainFuck を触ってみるしか無い!

ということで触ってみた

++++++++[>+++++++++>++++++++++++>+++++++++++++>++++>+++++++++++++++>++++++++++++++<<<<<<-]>.>+++++.>++++..+++.>.>-.<<.>>>++.<<<---.<-.>>+.

これで Hello world! が出力できるけど,これじゃちょっと・・・

++++++++
[
  >+++++++++
  >++++++++++++
  >+++++++++++++
  >++++
  >+++++++++++++++
  >++++++++++++++
  <<<<<<
  -
]
>.
>+++++.
>++++..
+++.
>.
>-.
<<.
>>>++.
<<<---.
<-.
>>+.

インデントを付けるとかなり分かりやすくなった. これはこれで たーのしー!

また今度 BrainFuck 書いてみよう.

Ruby で gnuplot (簡単なグラフを楽に吐き出したい)

Rubyスクリプトで簡単なグラフを書き出せるようにしたい

とりあえずプロットしてグラフの形を見てみたいって事が良くあるので,とりあえず簡単なグラフなら書き出せるようにスクリプトを書いてみた

ruby plot.rb svg test_plot test.txt

なんてやれば test_plot.svg という名前で出力してくれる。 test.txt の部分で複数ファイル指定した場合,1枚にプロットしてくれる。

オプション

オプションで色々指定できるようにしてみた。

オプション
-t title -t の後にタイトルを与えることでグラフにタイトルを付けることができる
-x xlabel -x の後に(ry x軸のラベル
-y ylabel -y の後n(ry
-w style -w の後にグラフのスタイルを指定をすることができる。 l lp boxes など
-g グリッドをオンにする
-h ヘルプ(あんまり役に立たない)

バイト休憩に作ったスクリプトだからおかしなところがあったら教えてちょ
logscale のオプションを作ろうとしてたけど,めんどくさくて辞めたのは内緒

そして初めて gist 使った。


追記
モジュール入れないと動かないことを忘れていた。

sudo gem install gnuplot

とかやってくださいな。

3/6追記
logscale もちゃんと実装しました