Nim の GUIライブラリ nimxをインストールしてサンプルコードを動かしてみる(2) 補足追加
この記事はNim Advent Calendar 2016 23日目の記事です。
NimにはGUIライブラリとしてnimxがあり、このブログでも
某勉強会用の資料作成のために3月に書いた記事でも触れて
います。
では本題に入り、環境が変わっているため、Nim 0.15.2の
最新でインストール&動作確認をする手順から。
[インストール]
1. 最新の0.15.2からNim本体にパッケージングされたパッケージマネージャ
のnimbleを使い下記コマンドでnimxをインストール。
% nimble install nimx
2. とりあえずインストールログを確認。
Prompt: No local packages.json found, download it from internet? [y/N]
Answer: y
Downloading Official package list
Success Package list downloaded.
Downloading https://github.com/yglukhov/nimx using git
Verifying dependencies for nimx v0.1
Installing sdl2 (any version)
Downloading https://github.com/nim-lang/sdl2 using git
Verifying dependencies for sdl2 v1.1
Installing sdl2 v1.1
Success: sdl2 installed successfully.
Installing opengl (>= 1.1)
Downloading https://github.com/nim-lang/opengl using git
Verifying dependencies for opengl v1.1.0
Installing x11 (any version)
Downloading https://github.com/nim-lang/x11 using git
Verifying dependencies for x11 v1.0
Installing x11 v1.0
Success: x11 installed successfully.
Installing opengl v1.1.0
Success: opengl installed successfully.
Installing nimsl (>= 0.2 & < 0.3)
Downloading https://github.com/yglukhov/nimsl using git
Verifying dependencies for nimsl v0.2
Installing nimsl v0.2
Success: nimsl installed successfully.
Installing jnim (any version)
Downloading https://github.com/vegansk/jnim using git
Verifying dependencies for jnim v0.2.5
Installing nimfp (>= 0.1.0)
Downloading https://github.com/vegansk/nimfp using git
Verifying dependencies for nimfp v0.3.5
Installing nimboost (>= 0.3.2)
Downloading https://github.com/vegansk/nimboost using git
Verifying dependencies for nimboost v0.3.4
Tip: 80 messages have been suppressed, use --verbose to show them.
Error: Traceback (most recent call last)
... nimble.nim(1034) nimble
... nimble.nim(967) doAction
... nimble.nim(600) install
... nimble.nim(407) installFromDir
... nimble.nim(283) processDeps
... nimble.nim(600) install
... nimble.nim(407) installFromDir
... nimble.nim(283) processDeps
... nimble.nim(600) install
... nimble.nim(407) installFromDir
... nimble.nim(283) processDeps
... nimble.nim(600) install
... nimble.nim(407) installFromDir
... nimble.nim(276) processDeps
... Unsatisfied dependency: nim (>= 0.15.3)
3. --verboseをつけて、問題になった依存パッケージから再インストール。
% nimble install jnim --verbose
Reading official package list
Downloading https://github.com/vegansk/jnim using git
Cloning latest tagged version: v0.2.5
Verifying dependencies for jnim v0.2.5
Loading list of installed packages
Checking for nimfp (>= 0.1.0)
Installing nimfp (>= 0.1.0)
Reading official package list
Downloading https://github.com/vegansk/nimfp using git
Cloning latest tagged version: v0.3.5
Verifying dependencies for nimfp v0.3.5
Loading list of installed packages
Checking for nimboost (>= 0.3.2)
Installing nimboost (>= 0.3.2)
Reading official package list
Downloading https://github.com/vegansk/nimboost using git
Cloning latest tagged version: v0.3.4
Verifying dependencies for nimboost v0.3.4
Loading list of installed packages
Error: Traceback (most recent call last)
... nimble.nim(1034) nimble
... nimble.nim(967) doAction
... nimble.nim(600) install
... nimble.nim(407) installFromDir
... nimble.nim(283) processDeps
... nimble.nim(600) install
... nimble.nim(407) installFromDir
... nimble.nim(283) processDeps
... nimble.nim(600) install
... nimble.nim(407) installFromDir
... nimble.nim(276) processDeps
... Unsatisfied dependency: nim (>= 0.15.3) --- 0.15.3?
4. やっぱり同じ作者の3つのパッケージでエラーが発生
している模様・・・(ΦωΦ;
インストールについては以上になりますwww
詳細についてはgithubのnimbleのソースコードとエラーが
発生した場所を丹念に見ていくしかないなー。
それとも、Nim本体に内包されたnimbleでは問題がある
のかしら?
いずれにしても、あとで詳しくかー。
前回は、インストールに成功しgithubのREADME.rstの
一部の機能が検証できなかったものの、だいたい試せた
ので、これからに期待していたんだけど、今回はバージョンアップした
nimxの依存パッケージのインストールエラーで早々に終了したので
Nimでクロスプラットフォーム開発の夢が少し頓挫してしまったようなw
詳しい使い方のドキュメントより、パッケージが依存している
ライブラリの提示がREADME.rst(md)にあればいいんだけどな。
[補足]
この後、少ししてNim開発版で 0.15.3がリリースされたので、これは
インストールできるかもな希望が湧いて来たため、確認でき次第、
内容を更新予定です。
※新しいバージョンで再検証した結果は以下の記事にまとめました。
[参考サイト]
出遅れたけどElmプログラミングことはじめ
自分が使ってるManjaro Fluxbox 15.12(kernel 4.4.x)
では長らくnode.jsとnpmとElmやPureScriptの相性が
悪くて途中でインストールエラーでコケて入らない
状態だったのが、lts-boronになってエラーも解消されて
インストールできるようになったので記念カキコ。
Elm自体も0.18.0で大きく機構が変わったようなので
公式チュートリアルのサンプルコードが動くかどうか
不安だったけど(ΦωΦ)
スペルの入力ミスがなければあっけなく終わったので
これから試したいことをいろいろ実験できる。
ではインストールから備忘録としてまとめる。
[手順]
※前提条件
nodejs-lts-boronとnpmが入っていること。
1. npm でelmをインストール。
% sudo npm install -g elm
-g にするとシステム全体にインストール。
2. 勉強用のディレクトリを作成して移動。
% mkdir elm-project && cd elm-project
3. 早速、Main.elmを作成し公式チュートリアルのA Quick Sample
を写経(内容は数値を増減するカウンターを実装)。
import Html exposing (Html, button, div, text)
import Html.Events exposing (onClick)
main =
Html.beginnerProgram { model = 0, view = view, update = update }
type Msg = Increment | Decrement
update msg model =
case msg of
Increment ->
model + 1
Decrement ->
model - 1
view model =
div
[ button [ onClick Decrement ] [ text "-" ]
, div [ text (toString model) ]
, button [ onClick Increment ] [ text "+" ]
]
4. 保存してelm-makeでmain.htmlに出力するようにコンパイル実行。
% elm-make Main.elm --output=main.html
5. ここで4のコマンド実行時にファイル名を入力ミスw
% elm-make Main.el --output=main.html <-- 拡張子が.elだとEmacsだしw
しかし、直後にエラーを出さずに必要な依存ライブラリやパッケージの
ダウンロードが始まる。エラーにならないけど大丈夫?(ΦωΦ;)
ちと、不安になる。
Some new packages are needed. Here is the upgrade plan.
Install:
elm-lang/core 5.0.0
elm-lang/html 2.0.0
elm-lang/virtual-dom 2.0.2
Do you approve of this plan? [Y/n] y
Starting downloads...
● elm-lang/html 2.0.0
● elm-lang/virtual-dom 2.0.2
● elm-lang/core 5.0.0Packages configured successfully!
でも、必要なライブラリやパッケージのダウンロードが終わると、elm-makeさんに
「そんなファイルないよー」って言われる!(ΦωΦ)<ホウコクハサイゴナノネ
elm-make: Main.el: openFile: does not exist (No such file or directory)
Main.elmって入力したよねってのを確認してelm-makeコマンドから再スタート。
% elm-make Main.elm --output=main.html
ようやく本題に入れると思ったのも束の間、1行目のimportでHtmlがHymlにミスってる
エラーがwww(ΦωΦ;)
コマンドの入力ミスと違い、ファイルの内容はすぐに訂正が入る。
-- NAMING ERROR ------------------------------------------------------- Main.elm
Module `Html` does not expose `Hyml`
1| import Html exposing (Hyml, button, div, text)
183 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ご親切に、以下のつづりと間違えたんだよね?って指摘が入る。
(elm-makeたん、親切!(ΦωΦ))
Maybe you want one of the following?
Html
Detected errors in 1 module.
6. HymlをHtmlに修正して再度、elm-makeから再スタートw
今度はMain.elmのコンパイルが上手く行って、
main.htmlが作成されて出力された!
Success! Compiled 1 module.
Successfully generated main.html
7. elm-reactorを実行して内部サーバを起動し、下記URLにアクセス
して、マイナスとプラスボタンが作成されてて動作に問題かないか
を確認。
% elm-reactor
ブラウザで下記URLにアクセス。
http://localhost:8000/main.html
画像が小さ過ぎるな・・・(ΦωΦ;;
問題があるのは大きさだけのようなので・・・
※elm-reactorはCtrl + Cで停止できる。
[参考サイト]
Win7(x64)のVMのCentOS7(x64)に最新のGitを導入
ついついブログの備忘録に書いた気になって、しかも
dropboxに環境ごとのドキュメントとしてもバックアップ
してたとか思ってたけど、そんなことなかったので書くw
今日は天候的に低気圧しんどいし、月末が近づいてる
疲労で全身がだるおもー。
あんまり進捗ないかもしれない。
[手順]
■前提
makeやbuildのためにgccをインストール。
1. 依存ライブラリのインストール。
% sudo yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker
% cd /usr/local/src/
% sudo wget https://www.kernel.org/pub/software/scm/git/git-2.10.2.tar.gz
% sudo tar xzvf git-2.10.2.tar.gz
3. makeコマンドでインストール。
% cd git-2.10.2
% sudo make prefix=/usr/local all
% sudo make prefix=/usr/local install
※ /usr/local は自分で導入したアプリケーションをインストールする場所
4. 導入されたか確認。
% git --version
git version 2.10.2 と表示されればOK
[参考サイト]
Manjaro Fluxbox 15.12_x86-64のsystemd-nspawnで構築したFedora25 Serverのコンテナに次に必要そうな情報
多分、日本語化とかGUIデスクトップを導入するかも
しれない時に必要になるだろう情報を集めてみた。
下の2つの記事はsystemd-nspawn関係じゃないけど
部分的に参考になるかもしれないので。
ちなみにWin7_x86-64のVirtualbox上のManjaro-gnome-16.08
でsystemd-nspawnでFedora25 Serverのコンテナを構築しよう
としたら、前の記事の手順2の最後のFedoraのリポジトリを
認識させるコマンド「sudo dnf repolist」を実行したら下記エラー
が何度も発生するのでネットワーク周りを根本的に見直す
必要があるのだろうと思って中断。
Failed to synchronize cache for repo 'fedora', disabling.
[参考サイト]
Manjaro Fluxbox 15.12_x86-64のsystemd-nspawnでFedora25 Serverのコンテナを構築してみた
金曜日の夜に仕事で詰まってる間にsystemd-nspawnの使い方
の復習をしていて、とても分かりやすく解説しているサイト
を見つけたので、その方法に則って実際にやってみた。
たしかにその手順通りにやると、2時間で構築できて感激した。
なぜFedora25 Serverなのか?っていうと、32bitの開発環境
で使っていたFedora24 Workstation LXDEがCentOSより
使いやすかったことと、NginxとかBitcoinとか試してみたい
ことがあるってのとUbuntuより軽かったからという
安易な理由。
[構築手順]
1. 依存関係を解決するために、とりあえずdnfインストール。
% yaourt -S dnf
yaourtだからってこともあるし、依存関係が複雑ってのもあるし
作業時間のほとんどを、このビルドで取られる。
2. dnfの設定。
% sudo mkdir -p /etc/yum/repos.d
% sudo vim /etc/yum/repos.d/fedora.repo
2) fedora.repoの書き方
(ex) Fedora25 Serverの場合
[fedora]
name=fedora
baseurl=http://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/25/Server/x86_64/os/
enabled=1
3) リポジトリを認識させる
% sudo dnf repolist
3. chroot環境の構築。
% mkdir fedora_container
% sudo dnf groupinstall core --nogpgcheck --installroot=$HOME/fedora_container
4. rootパスワードの設定。
FedoraはUbuntu同様、空パスワードでは許可されないのでchrootで事前設定する。
% sudo chroot fedora_container
[root@manjaro-fluxbox /]# passwd root
ユーザー root のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
5. コンテナの起動。
コンテナ起動の際に実行するコマンドとオプション
% sudo systemd-nspawn -b -D fedora_container -n
-b:コンテナの起動
-D:コンテナのrootディレクトリ
-n :ホストとコンテナを繋ぐプライベートネットワークを設定
6. ネットワーク接続。
コンテナの中から外に向かってネットワークを繋ぐ
-> systemd-networkd を利用すると簡単。
-> コンテナ内でサービスを有効にして、resolv.conf のシンボリックリンク
を張ると繋がるようになる。
-> 但し、ホスト側でもsystemd-networkdが有効になってる必要がある。
1) ホスト側のsystemd-networkdが有効か確認。
% sudo systemctl status systemd-networkd
● systemd-networkd.service - Network Service
Loaded: loaded (/usr/lib/systemd/system/systemd-networkd.service; disabled; vendor preset: enabled) --- disabled = 無効
Active: inactive (dead)
Docs: man:systemd-networkd.service(8)2) disabled となっているので、有効にする。
% sudo systemctl enable systemd-networkd
Created symlink /etc/systemd/system/multi-user.target.wants/systemd-networkd.service → /usr/lib/systemd/system/systemd-networkd.service.
Created symlink /etc/systemd/system/sockets.target.wants/systemd-networkd.socket → /usr/lib/systemd/system/systemd-networkd.socket.3) 有効になったか確認。
% sudo systemctl status systemd-networkd
● systemd-networkd.service - Network Service
Loaded: loaded (/usr/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled)
Active: active (running) since 土 2016-11-26 15:32:22 JST; 21h ago
Docs: man:systemd-networkd.service(8)
Main PID: 447 (systemd-network)
Status: "Processing requests..."
Tasks: 1 (limit: 4915)
CGroup: /system.slice/systemd-networkd.service
└─447 /usr/lib/systemd/systemd-networkd4) コンテナ側のサービスを有効にする。
# systemctl enable --now systemd-networkd systemd-resolved
# ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
7. コンテナの終了。
コンテナ側でpoweroffコマンドを実行。
[root@fedora_container ~]# poweroff
Sending SIGTERM to remaining processes...
Sending SIGKILL to remaining processes...
Process 191 (plymouthd) has been marked to be excluded from killing. It is running from the root file system, and thus likely to block re-mounting of the root file system to rea d-only. Please consider moving it into an initrd file system instead.
Powering off.
Container fedora_container has been shut down.
参考サイトの情報通りに、作業しただけなので実は詳細に設定しないと動かない
って部分も多々あると思うので、それはまた次の機会に。
[参考サイト]
既存nodejsと置き換えたnode-lts-boronって何?
昨日、pamacに更新通知が80個弱来ていたので実行した。
atom-editor-betaをビルドアップグレードしている時に
nodejsとnode-lts-boronが競合しています。
置き換えますか?
って聞かれたので、だいたいNを実行するとアップグレード
できないで終了することが多いので、Yで実行しといたけど
node-lts-boronって何?
って思ったので調べてメモ。
参考にしたサイトに、以下のようなことが書かれてた。
偶数バージョン = LTSではなく、 Argon, Boron などの LTS 識別名が付いているもの = LTS
???
つまり、Long Term Supportされるnodejsってこと?(ΦωΦ)
ちょっと急いでいるし、Nodejsは何だかよくわからないので
あとで詳しくって感じ。
[参考サイト]
yosuke-furukawa.hatenablog.com
October security releases and v6 LTS "Boron" security inclusions | Node.js
Manjaro Fluxbox 15.12_x86-64でlibtinfo.so.5が見つからなくてPureScriptのインストールでハマった
Manjaro Fluxbox 15.12を使っていて、npmでPureScriptを
インストールしてパッと見、インストールできたー!
と思って、pscコマンドやpulpコマンドを実行してみたら
以下エラーで動かなかった。
/usr/lib/node_modules/purescript/vendor/psc: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory.
/usr/lib 以下にlibtinfo.so.5っていう共有ライブラリが見つからないから
動かねーよ。ってことらしい。
で、/usr/lib以下を調べてみたら、そんなファイルねー。
その上、yaourtには libtinfo.so.6はあるけど、5がねー。
ってことで、更に詳しく調べてみると、libtinfo.so.6.0かlibncursesw.so.6.0を
使ってlibtinfo.so.5のシンボリックリンクを作成すればイケるという情報を
得たので試してみる。
[手順]
1. /usr/lib 以下に libncursesw.so.6.0 があるか検索。
% ls /usr/lib | grep libncurs
libncurses++.so
libncurses++w.so
libncurses++w.so.6
libncurses++w.so.6.0
libncurses.so
libncursesw.so
libncursesw.so.6
libncursesw.so.6.0
2. 見つかったので /usr/lib 以下に移動。
% cd /usr/lib
3. libtinfo.so.5 のシンボリックリンクを作成
% sudo ln -s libncursesw.so.6.0 libtinfo.so.5
4. psc -h コマンドを実行してヘルプが表示されればok
[参考サイト]
libtinfo / Applications & Desktop Environments / Arch Linux Forums
[SOLVED] ncurses, readline update error / Newbie Corner / Arch Linux Forums