眠気.jl

投稿=不定期

JuliaでJSON操作

動機

いずれJuliaでWebアプリを作るから
PythonJSONを扱うことが多いので、Juliaでもやりたくなったから

目標

JuliaでJSON操作

作業環境

今回の環境(前回と同様)

julia> versioninfo()
Julia Version 1.1.0
...

JSONをパース

(v1.1) pkg>add JSON
julia> edit("json_parse.jl")

json_parse.jlが作成され、エディタが自動で開くので、次のように編集

using JSON

first_json = """{
        "key":"value",
        "number":8,
        "array":[2,3,5,7,11],
        "dict":{"k1":"val1","k2":2}
}"""

print(first_json)
print("JSONパースしてみる")
print(JSON.parse(first_json))

シェルで実行

shell> julia json_parse.jl
{
        "key":"value",
        "number":8,
        "array":[2,3,5,7,11],
        "dict":{"k1":"val1","k2":2}
}JSONパースしてみるDict{String,Any}("key"=>"value","dict"=>Dict{String,Any}("k1"=>"val1","k2"=>2),"number"=>8,"array"=>Any[2, 3, 5, 7, 11])

Dict{String,Any}→JSONなのでkeyはString

辞書型をJSONに変換,JSONファイルの作成

lets_make_json.jlを次の様に決めて実行すると

using JSON

see_json_key = Dict{Int64,Union{Int64,String}}(1=>"text", 2=>"hello",3=>1111)

print(JSON.json(see_json_key))

f = open("hello.json", "w")
#hello.jsonを作成

JSON.print(f, see_json_key)
#hello.jsonにsee_json_keyを書き込む

close(f)
#閉じる

1.keyがStringに勝手になっていること
2.hello.jsonが作成され,書き込みが出来ていること
の2つを確認する

shell> julia lets_make_json.jl
{"2":"hello","3":1111,"1":"text"}
shell> cat hello.json
{"2":"hello","3":1111,"1":"text"}

できた!

感想

ほぼPythonだった

参考URL,書籍

Julia 1.0 Programming Cookbook: Over 100 numerical and distributed computing recipes for your daily data science workflow (English Edition)

最近日本語訳が出たみたいです

JuliaでWebページ作ってみる(Genie.jl)1/n

動機

Juliaが好きだから

目標

Genie.jlのハローワールドをやる,つまり
/helloに「Hello World!」の表示

作業環境

今回の環境(atomにJuno入れてます,Ubuntu18.04)

julia> versioninfo()
Julia Version 1.1.0
Commit 80516ca202 (2019-01-21 21:24 UTC)
Platform Info:
  OS: Linux (x86_64-pc-linux-gnu)
  CPU: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-6.0.1 (ORCJIT, skylake)
Environment:
  JULIA_EDITOR = atom -a
  JULIA_NUM_THREADS = 4
  JULIA_REVISE = auto

Genie.jlについて

公式によると(http://genieframework.com/)
The highly productive Julia web framework Genie is a full-stack MVC web framework that promotes a streamlined and efficient workflow for developing modern web applications.
らしいです
公式レポジトリのログを見ると,頻繁に更新されているようです
Genieの作者のAdrian Salceanu様はバルセロナのJuliaユーザーグーループのオーガナイザのようで,最近 Julia Programming Projects: Learn Julia 1.x by building apps for data analysis, visualization, machine learning, and the web (English Edition)などの本を出版されています
(まだ読んでる途中なので,後日レビューします)
ご本人のJuliacon登壇動画によると
"Like Django and Rails, but without the fails..."
だそうです
良さそうですね

MVCモデルとは

Model:ビジネスロジックを担当
View:表示,入出力担当
Controller:ユーザーの入力に基づき,ModelとViewを制御
が揃っていて、それぞれ役割を分割してコーディングするモデルを指すようです

Genieのインストールとサーバーの起動

julia>

]を押す,するとJuliaのヴァージョン管理ツールpkgのモードに入る,]は表示されない

pkg>

0212という名前の仮想環境を作って、入る
(conda create -n 0212して、sour activate 0212するような)

pkg>activate 0212

Genieのインストール

(0212) pkg>add https://github.com/essenciary/Genie.jl

Backspaceでpkgモードを抜けて,Genieを使う宣言をする

julia>using Genie

;(セミコロン)でshellモードに入って,0212に入る

shell>cd 0212

Backspaceでshellモードを抜けて test_appという名前で作成して、起動

julia>Genie.REPL.new_app("test_app")

julia>Genie.AppServer.startup()

http://localhost:8000 にアクセス

f:id:julialangisthebestlang:20190212042051p:plain
welcome.html
とりあえず無事起動したよう

Genie Hello World

test_appの構造を見てみる

shell> tree test_app
test_app
├── LICENSE.md
├── Manifest.toml
├── Project.toml
├── README.md
├── app
│   ├── assets
│   │   ├── css
│   │   │   └── application.css
│   │   ├── fonts
│   │   └── js
│   │       ├── application.js
│   │       └── channels.js
│   ├── helpers
│   │   ├── ValidationHelper.jl
│   │   └── ViewHelper.jl
│   ├── layouts
│   │   └── app.jl.html
│   └── resources
├── bin
│   ├── repl
│   └── server
├── build
├── cache
├── config
│   ├── database.yml
│   ├── env
│   │   ├── dev.jl
│   │   ├── prod.jl
│   │   └── test.jl
│   ├── global.jl
│   ├── initializers
│   │   ├── converters.jl
│   │   └── searchlight.jl
│   ├── routes.jl
│   └── secrets.jl
├── db
│   ├── migrations
│   └── seeds
├── docs
│   ├── make.jl
│   ├── mkdocs.yml
│   └── src
│       └── index.md
├── env.jl
├── genie.jl
├── lib
├── log
│   └── dev.log
├── package.json
├── public
│   ├── css
│   │   ├── bootstrap-theme.css
│   │   ├── bootstrap-theme.min.css
│   │   ├── bootstrap.css
│   │   ├── bootstrap.min.css
│   │   ├── dosis-font.css
│   │   ├── prism.css
│   │   ├── style.css
│   │   └── themify-icons.css
│   ├── error-404.html
│   ├── error-500.html
│   ├── favicon.ico
│   ├── favicon.png
│   ├── fonts
│   │   ├── dosis
│   │   │   ├── 3isE9muMMOq1K7TQ7HkKvIDGDUGfDkXyfkzVDelzfFk.woff2
│   │   │   ├── O6SOu9hYsPHTU43R17NS5XYhjbSpvc47ee6xR_80Hnw.woff2
│   │   │   ├── RPKDmaFi75RJkvjWaDDb0nYhjbSpvc47ee6xR_80Hnw.woff2
│   │   │   ├── VK-RlLrn4NFhRGqPkj6IwBkAz4rYn47Zy2rvigWQf6w.woff2
│   │   │   └── oaBFj7Fz9Y9_eW3k9Jd9X6CWcynf_cDxXwCLxiixG1c.woff2
│   │   ├── glyphicons-halflings-regular.eot
│   │   ├── glyphicons-halflings-regular.svg
│   │   ├── glyphicons-halflings-regular.ttf
│   │   ├── glyphicons-halflings-regular.woff
│   │   ├── glyphicons-halflings-regular.woff2
│   │   ├── themify.eot
│   │   ├── themify.svg
│   │   ├── themify.ttf
│   │   └── themify.woff
│   ├── img
│   │   ├── community.png
│   │   ├── contribute-2.png
│   │   ├── docs.png
│   │   ├── genie-sad.png
│   │   └── genie.png
│   ├── js
│   │   ├── ansi_up.js
│   │   ├── ansi_up.js.map
│   │   ├── bootstrap.js
│   │   ├── bootstrap.min.js
│   │   ├── jquery.easing.min.js
│   │   ├── jquery.min.js
│   │   ├── jquery.min.map
│   │   ├── prism.js
│   │   ├── scrolling-nav.js
│   │   ├── static.js
│   │   └── validator.js
│   ├── robots.txt
│   └── welcome.html
├── session
├── src
│   ├── App.jl
│   └── Toolbox.jl
├── task
├── test
│   └── test_config.jl
└── webpack.config.js

31 directories, 76 files

JULIA_EDITORで指定したエディタでconfig内のroutes.jlを編集する

julia>edit("config/routes.jl")

(私の場合)atomが開いて、route.jlが開く

using Genie.Router

route("/") do
  serve_static_file("/welcome.html")
end

ページを足して、Hello World!を表示させるために,routes.jlに次を追記

route("/hello") do
  "Hello World!"
end

http://localhost:8000/hello にアクセス

f:id:julialangisthebestlang:20190212042105p:plain
こんな感じ
できた!

感想等

次回は認証とかやろうと思います

参考にしたURL,書籍

MVCモデルについて--qiita
Genie.jl--Github
Julia Programming Projects: Learn Julia 1.x by building apps for data analysis, visualization, machine learning, and the web (English Edition)

日本語版