haiju's 開発メモ

開発に必要な情報を自分用にメモ

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がリリースされたので、これは

インストールできるかもな希望が湧いて来たため、確認でき次第、

内容を更新予定です。

※新しいバージョンで再検証した結果は以下の記事にまとめました。

haiju.hatenablog.com

 

[参考サイト]

github.com

github.com

github.com

github.com

github.com

github.com

出遅れたけど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.0

Packages 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

f:id:haiju:20161218162514p:plain

 画像が小さ過ぎるな・・・(ΦωΦ;;

問題があるのは大きさだけのようなので・・・

※elm-reactorはCtrl + Cで停止できる。

[参考サイト]

Install · An Introduction to Elm

www.parsonsmatt.org

github.com

qiita.com

qiita.com

Win7(x64)のVMのCentOS7(x64)に最新のGitを導入

ついついブログの備忘録に書いた気になって、しかも

dropboxに環境ごとのドキュメントとしてもバックアップ

してたとか思ってたけど、そんなことなかったので書くw

今日は天候的に低気圧しんどいし、月末が近づいてる

疲労で全身がだるおもー。

あんまり進捗ないかもしれない。

[手順]

■前提

makeやbuildのためにgccをインストール。

% sudo yum -y install gcc 

1. 依存ライブラリのインストール。

% sudo yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker

2. wgetを導入し、ソースコードを取得して解凍。

% sudo yum -y install wget

% 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 

[参考サイト]

vdeep.net

Manjaro Fluxbox 15.12_x86-64のsystemd-nspawnで構築したFedora25 Serverのコンテナに次に必要そうな情報

多分、日本語化とかGUIデスクトップを導入するかも

しれない時に必要になるだろう情報を集めてみた。

下の2つの記事はsystemd-nspawn関係じゃないけど

部分的に参考になるかもしれないので。

ちなみにWin7_x86-64Virtualbox上のManjaro-gnome-16.08

でsystemd-nspawnでFedora25 Serverのコンテナを構築しよう

としたら、前の記事の手順2の最後のFedoraリポジトリ

認識させるコマンド「sudo dnf repolist」を実行したら下記エラー

が何度も発生するのでネットワーク周りを根本的に見直す

必要があるのだろうと思って中断。

Failed to synchronize cache for repo 'fedora', disabling.

[参考サイト]

www.server-world.info

www.server-world.info

fueloftheprogrammer.blogspot.jp

qiita.com

qiita.com

postd.cc

qiita.com

Manjaro Fluxbox 15.12_x86-64のsystemd-nspawnでFedora25 Serverのコンテナを構築してみた

金曜日の夜に仕事で詰まってる間にsystemd-nspawnの使い方

の復習をしていて、とても分かりやすく解説しているサイト

を見つけたので、その方法に則って実際にやってみた。

たしかにその手順通りにやると、2時間で構築できて感激した。

なぜFedora25 Serverなのか?っていうと、32bitの開発環境

で使っていたFedora24 Workstation LXDECentOSより

使いやすかったことと、NginxとかBitcoinとか試してみたい

ことがあるってのとUbuntuより軽かったからという

安易な理由。

[構築手順]

1. 依存関係を解決するために、とりあえずdnfインストール。

% yaourt -S dnf

  yaourtだからってこともあるし、依存関係が複雑ってのもあるし

 作業時間のほとんどを、このビルドで取られる。

2. dnfの設定。

1) Fedoraリポジトリの追加

% 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パスワードの設定。

 FedoraUbuntu同様、空パスワードでは許可されないので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-networkd

4) コンテナ側のサービスを有効にする。

# 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.

 参考サイトの情報通りに、作業しただけなので実は詳細に設定しないと動かない

って部分も多々あると思うので、それはまた次の機会に。

[参考サイト]

qiita.com

blog.0x972.info

gist.github.com

既存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

Node v6.9.0 (LTS) | Node.js

resources.nodesource.com

126kr.com

hackernoon.com

 

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

[参考サイト]

ellks.blogspot.jp

libtinfo / Applications & Desktop Environments / Arch Linux Forums

github.com

qiita.com

[SOLVED] ncurses, readline update error / Newbie Corner / Arch Linux Forums

blog.ksswre.net

www.atmarkit.co.jp