100day’s blog

思いついた事や、プログラミングの毎日の作業工程を短めにまとめてます。

WEB、プログラミング初心者にこそオススメ。 Elixir + Phoenix を動かすまで。ブラウザ表示までは非常に楽。

What is Elixir / Elixir(エリクサー)とは?

 

Elixirはスケーラブルで保守可能なアプリケーションを構築できる言語。

Erlang VMを活用しており、Web開発や組み込みソフトウェア分野でも利用されています。

 

ドキュメント 

Elixir公式

elixir-lang.org

 

Phoenix / Elixir Framework

phoenixframework.org

 

 

Install / インストール

 

Macだと

 

brew install elixir

 

cli ツールは

 $ iex

抜ける場合は 

Ctrl+G > q Return

Ctrl+c を2回でもいけるみたいだが・・・ 

 

これで簡単な環境は整います。

 

 Tutorial / チュートリアル

 

piacere_ex - Qiita

さんのチュートリアルが非常にわかりやすくて素晴らしいです。

 

qiita.com

 

qiita.com

 

補足:Phoenixの新規プロジェクト作成後にサーバーを立ち上げる前にHexmixコマンドを一度叩く必要あり 

mix deps.get

 

ちょっとびっくりしたのはPhoenixといいパッケージインストールといいめっちゃ早いって事です。npmやcomposerあたりが遅すぎるんかな・・・・

 

無事起動

f:id:gpstandard:20181003093126p:plain

パイプを使ったプログラミングは逆に初心者にこそわかりやすく、コードも非常にすっきりして見やすく、わかりやすいと感じました。

これ最初にやると他の言語が逆にキツくなるような・・・(もちろん今の段階での所感ですので、この後どうなるかはわかりませんが)

 

次は引き続き

piacere_ex - Qiita

さんのチュートリアルを進める予定です。

 

 

 

MacでNasm+gccでアセンブラ(アセンブリを書いてみる)

はじめに

現在OSは下記のバージョンを利用中です。

f:id:gpstandard:20181002091834p:plain

この記事はMacアセンブラを少し走らせてみたいなという人を対象にしています。

 

nasmインストール

brew install nasm

今回このnasm+ldでうまくコンパイルできなかったので

Macにgccをインストールする

gccを後半利用しています。

 

コードを書く

hello.asmで保存します。

; hello.asm

 

GLOBAL _main

 

SECTION .data

str_hello   db  "Hello World", 0x0a ; Output string and \n

 

 

SECTION .text

_main:

    mov rax, 0x2000004      ; Set system call to write=4.

    mov rdi, 1              ; Set output to stdout.

    mov rsi, str_hello      ; Set output data.

    mov rdx, 13             ; Set output data size.

    syscall                 ; Call system call.

    mov rax, 0x2000001      ; Set system call to exit=1.

    mov rdi, 0              ; Set success value of exit.

    syscall                 ; Call system call.

 

中間ファイル .oファイル作成

 nasm -f macho64 hello.asm

これで hello.o が完成

 

コンパイル

本来

ld -o hello hello.o

これでいけるはずなのですが、エラー。

 

(追記)下記でいけました。

ld -macosx_version_min 10.11 -lSystem -o hello hello.o

 

 

 gccを利用する場合は

 

gcc -o hello hello.o

 

これでhelloが作成されるので

 

./hello 

で実行無事 hello would

 

 

 

 

 

 

 

とりあえず実行環境だけ準備 Erlang,Elixir,Scala,Goのインストールと各CLIツール等の確認

結論から言うとmacbrew入ってて良かった。

 

準備から

$ brew update

 

# Erlangの install

$ brew install Erlang

 

- cli tool

$ erl 

Ctrl+G > q returnで抜ける

 

# Elixir install

$ brew install Elixir

 

- cli tool

$ iex

Ctrl+G > q returnで抜ける

 

 

# Sala

 

$ brew tap caskroom/versions

$ brew cask install java8

 

$ brew install scala

$ brew install sbt

 

参考

http://yebisupress.dac.co.jp/2017/12/07/scala-nyumon-zyunbi01/

https://qiita.com/umeneri/items/666ff425a11b3dc2022b

 

- cli tool

$ scala

:q で抜ける

 

 

# Go lang

 

$ brew install go

参考

https://qiita.com/megu_ma/items/7208be8de52b712955a0

 

cli無い

go run ***.go で実行、コンパイルとか後回し

godoc -http=:6060 とかでヘルプをローカルのブラウザで(localhost:6060)

 

 

結論

ほぼほぼbrewで片付く

brew listで確認

f:id:gpstandard:20180930201652p:plain

macbrew入ってて良かった。

 

 

coursera Julia Scientific Programming第4章で全てを一旦終了。 良かった点、反省点、今後。

下記講座を無事終了しました。

www.coursera.org

今回juliaの事をよくわからずに、このコースを進めましたが、色んな反省点があります。

 

1 (反省)言語バージョンをちゃんと確認しましょう。

開発の時は気にするくせに今回はまったく何も考えずに初めてしまいました。

教材のバージョンは0.6対応。自分が準備したバージョンは1.0だった為、ちょっと余分な時間が・・・・

 

2 (良かった)学習しながらツイートやブログを活用しましょう。

ツイッターの勉強垢などを使ってつぶやくのは学習のモチベーションを上げるのにやはりいいです。近くの知り合いや仕事仲間が同じ時期に、自分の学習したい項目に食いつくとは限らないですし。自分の周りはもっかPythonruby,nodeなどに夢中な人はいますが、Juliaをやろうとする人はいませんでした。

ツイッターならもっか学習中の人の言動も見て取れてモチベーションが維持できます。

 

3 (反省点)これから何をしたいかも考えておいた方がいいかも 

久しぶりに授業を受けるうような感じで学習を進めるのも、詰まってしまった課題を解いていくのも楽しかったです。ただ、終盤にさしかかるにつれ祭りが終わるような寂しさも・・・

やはり自分でやりたいプロダクトや実際の仕事に結びつけて置くことを初めに想定しておかないと、レッスンだけで終わるのはもったいないです。

 

 

 

今後

もう少しJuliaの学習をしながらWEBのフレームワークなどでサイトを作るか、深層学習とかにいくか・・・

どのみちこの言語自体になれる必要はありますかね。

 

 

 

 

 

 

 

データサイエンティストの仕事。 実データと法則と未来予想。 Cousera Julia Scientific Programming Chapter3の締めくくり

www.coursera.org

チャプター3を無事終了です。データの型や、実データからの各値の調整などなど、ここまで一通りやればJupyter Note Bookを使ってのデータ分析の触り部分が理解できます。

 

ここまで来て、改めてデータサイエンティストって何だろうなーって考えてしまいました。

 

データサイエンティストって何?

www.sas.com

  • - 統一性のない大量のデータの収集と、より利用しやすいフォーマットへの変換
  • - ビジネス課題をデータ主導型の手法を用いて解決
  • - SAS、R、Pythonを含む幅広いプログラミング言語による作業- 
  • - 統計情報の的確な理解(統計的検定と統計的分布を含む)
  • - 分析手法に関する最新動向の把握(機械学習、ディープ・ラーニング、テキスト・アナリティクスなど)
  • - IT部門および業務部門とのコミュニケーションとコラボレーション
  • - データに潜む秩序やパターンの発見と、ビジネスの最終利益に寄与する傾向の特定

 

 非常に的確に色々書いてありますが、データというリソースを料理する人間というポイントは一貫してます。

 

要はデータという塊から意味のある価値を探し出す事ができるという事です。

 

競馬予想する人もある意味データサイエンティストって言えますね。

 

ある特定の法則を見つけ出す作業は後々の人工知能系の技術(機械学習、深層学習)のベースにもなりますよ。

 

ここまで来て、データサイエンティストになりたいかと自問自答したら活用する人間にはなりたいが、そこに収まりたくないなってのはあります。

この分野将来的には100%人工知能にとられてしまいますからね・・・・

 

Cousera Julia Scientific Programing コースのJulia コードは0.6 これを1.0.0に対応させる

CouseraのJulia Scientific Programmingコースを受講中です。

www.coursera.org

 

前回に続きChapter 3を受講していますが、前回まで使ってたJuliaBoxをやめてデスクトップにJupyter Note Book を入れて学習開始です。

Julia v0.6.1のインストールとJupyter Notebookで使うまで

 

上記はバージョン0.6.1用ですが、現行の1.0でもバージョン指定を変えればOKです。

今回はplotting=作図という事で簡単なグラフ作成です。

 

サンプルを開いて、簡単な作業をしようとした所

f:id:gpstandard:20180927223312p:plain

となり、そもそもPkg importとPlotsが無いという事でaddする事に

f:id:gpstandard:20180927223237p:plain

無事色々インストールして課題をと思ったら・・・・

 

ここで初めて、このCouseraのコースがJulia 0.6時代の物ということに気づく。

 

# Setting up a custom stylesheet in IJulia
# New in 0.6
file = open("style.css") # A .css file in the same folder as this notebook file
styl = readstring(file) # Read the file
HTML("$styl") # Output as HTML

 

この中のreadstringが無いと言われ、検索するとdeprecatedという結果に

f:id:gpstandard:20180928021601p:plain

今の1.0系ではこういう書き方。

# Setting up a custom stylesheet in IJulia
# New in 1.0.0
file = open("style.css") # A .css file in the same folder as this notebook file
styl = read(file,String) # Read the file
HTML("$styl") # Output as HTML

 

無事これでスタイルがあたった。

 

ほう・・・・・・・

という事は・・・・・

 

冒頭で使わない予定の JuliaBoxにログインしてみると

f:id:gpstandard:20180928021848p:plain

やっぱり・・・・2つバージョンが使えるようになってる。

残念ながら、自分のデスクトップには1.0.0しか入ってません。

 

そして続けて

# New in 0.6
tempvar = Array{Any}(4)
fill!(tempvar, "hello ... word")

 ここも

# New in 1.0.0
tempvar = Array{Any}(undef,4)
fill!(tempvar, "hello ... word")

こういう書き方、ほう・・・・undef・・・・

 

これは軽く学習に障害がありますな・・・

 

Julia 1.0.0のリリースが2018年の8月なので、これはいたしかたがないですね・・・

それこそPythonの2系と3系ぐらいの言語仕様の変更があるのかぁ・・・・

 

0.6で学習を進めてもいいですが、まだ初めたばかりだし1.0で進めて細かな違いに気づくのも面白くはありますが・・・・

 

一旦ここは考えます。

 

 

 

 

 

 

 

JuriaでJupyter Note bookを利用する現実的なデータ分析の学習初め、 SIRモデル&Plotsでグラフ作成

CouseraのJulia Scientific Programmingコースを受講中です。

 

www.coursera.org

 

今日はChapter 3からスタートです。

 

Week3_1-SIRmodels 

今回のNote bookの利用にはSIRモデルが使用されます。

 

SIRモデル - Wikipedia

 

SIRモデルは、感染症の流行過程を記述するモデル方程式 らしいです。

コースの説明を英語で見ていってもいいですが、wikiで理解するでもいいでしょう。

 

微分の理解があればそれぞれ表を元に描かれたのS,I,Rの関係を数式にしている意味合いも理解できました。

また、

βは感染率 = lambda

γは回復(隔離)= gam

で定義され、dtも設定されている事を見れば、今回のグラフの関数の理解は大体できました。

 

今回利用されているPlotsというパッケージについては下記が参考になりました。

Plots/GR: グラフ package のおすすめ · julia について

 

今回登場してませんが、3次元グラフとかソソりますねw

 

次回は3-2の部分を取り組む予定です。