Elixir事始め(その3)

https://elixir-lang.jp/images/logo/logo.png


Getting StartedでElixirを学習しています。

基本型

elixir-lang.jp

7つの基本型の例です

  • 整数型(integer) → 10
  • 浮動小数点型(float) → 10.0
  • 論理型(boolean) → true
  • アトム型(atom) → :atom
  • 文字列型(binary) → "hello"
  • リスト型(list) → [1, 2, 3, 4]
  • タプル型(tuple) → {1, 2, 3, 4}

基本算術

iex> 1 + 1
2
iex> 2 - 1
1
iex> 3 * 3
9
iex> 4 / 2
2.0

/による除算は常に浮動小数点型を返します。

整数で除算の結果や剰余を得たい場合はdiv/2やrem/2関数を用います。

iex> div(5, 2)
2
iex> rem(5, 2)
1

Elixirの浮動小数点型は64ビットの倍精度です。

round/1関数は与えられた浮動小数点数に対して最も近い整数を返します。
trunc/1関数は与えられた浮動小数点数の整数部分を返します。

iex> round(1.45)
1
iex> round(1.55)
2
iex> trunc(1.99)
1

関数の識別と説明文書の取得

関数は関数の名前とアリティの両方で識別されます。アリティは関数が受け取る引数の数です。
四則演算で例示した、div/2、rem/2、round/1、trunc/1のように記載します。

Elixirシェルのh/1関数は与えられた関数の説明文書を返します。

iex> h trunc

                               def trunc(number)                                

  @spec trunc(value) :: value when value: integer()
  @spec trunc(float()) :: integer()

guard: true

Returns the integer part of number.

Allowed in guard tests. Inlined by the compiler.

## Examples

    iex> trunc(5.4)
    5
    
    iex> trunc(-5.99)
    -5
    
    iex> trunc(-5)
    -5

論理値型

真はtrueで、偽はfalseです。頭文字は小文字です。
Elixirには値の型をチェックする関数があります。

論理値型であるかをチェックする関数はis_boolean/1です。

iex> is_boolean(true)
true
iex> is_boolean(True)
false

アトム型

アトムは名前に対応した値が対応する定数です。他のいくつかの言語ではシンボルと呼ばれています。
次のような個別の値を列挙するのに役立ちます。

iex> :apple
:apple
iex> :orange 
:orange
iex> :rasberry  
:rasberry
iex> 

文字列型

無名関数

(連結)リスト

タプル

リスト or タプル

Elixir事始め(その2)

https://elixir-lang.jp/images/logo/logo.png

Getting StartedでElixirを学習しています。

はじめに

elixir-lang.jp

インタラクティブ・モード

iexコマンドを実行します。

$ iex
Erlang/OTP 22 [erts-10.4.4] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:1] [hipe]

Interactive Elixir (1.9.1) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> 

式を入力すると評価値が返されます。

iex(1)> 256 + 64
320
iex(2)>

iexを終了するためには「Control-C」を二度押します。

iex(1)> 
BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
       (v)ersion (k)ill (D)b-tables (d)istribution
$

スクリプトファイルの実行

elixirコマンドでスクリプトファイルを実行します。

elixirの拡張子は .exs です。
Hello world!を出力するスクリプトを作成します。

hello_world.exs

IO.puts "Hello world!"

elixirを実行します。

$ elixir hello_world.exs 
Hello world!

Elixir事始め(その1)

https://elixir-lang.jp/images/logo/logo.png

発端

SWEST21の基調講演でNervesプロジェクトに興味を持ちました。Nervesプロジェクトは組込みソフトウェア開発にElixirを使用するためのフレームワークです。
そこでNervesを使うためにElixirを学ぶことにしました。

swest.toppers.jp

ちなみに、10年ほど前にElixirと同じくErlang VMで動作するErlangを学ぼうとして、挫折した経験がありますorz...。

ElixirのWebサイト

ElixirのWebサイト(日本語版)はhttps://elixir-lang.jp/です。

まずはGetting Startedを一通りやってみます。

インストール

Getting Startedの前にElixirをインストールします。

elixir-lang.jp

インストール先のOSはUbuntu 18.04です。

入力したコマンドは次の通りです

$ wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb
$ sudo apt-get update
$ sudo apt-get install esl-erlang
$ sudo apt-get install elixir

インストールの確認

インストールしたElixirのバージョンは次のコマンドで確認できます。

$ elixir --version
Erlang/OTP 22 [erts-10.4.4] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:1] [hipe]

Elixir 1.9.1 (compiled with Erlang/OTP 21)

Redox OSをVirtualBox上で動かしました(道半ば)

今度はVirtualBox上でRedox OSを動かそうとしてみました。
まずは、
qiita.com
を参考にして、ストレージをSATAAHCIとしてredox_0.5.0_livedisk.isoをマウントしてブートしてみましたが、

f:id:ytakeuch:20190328004047p:plain
Redox ISOイメージ ブート失敗

同上のページを参考にしてRAWイメージからVDIイメージを作成しました。

$ VBoxManage convertfromraw redox_0.5.0_harddrive.bin redox.vdi

redox.dviをハードディスクイメージとしてマウントしたらブートできました。

f:id:ytakeuch:20190328004328p:plain
Redox 画面

キーボードは効くのでブートできましたが、マウスが効きません。

Input→Mouse Integrationをいじったらマウスが効くようになりました。

しかし、ネットに繋がりません。

f:id:ytakeuch:20190328005610p:plain
Redox ネットに繋がりません

Intel PRO/1000 MT Desktop (82540EM)を選択しているのですが...

Redox OSをQEMU上で動かしました

Rustで書かれたOS、Redoxを動かしてみました。まずはQEMU上で動かしました。
QEMUを動かすホストはMacです。
まずは、QEMUをインストールします。

$ brew install qemu

Redoxのハードディスクイメージはhttps://gitlab.redox-os.org/redox-os/redox/-/jobs/10824/artifacts/file/build/img/redox_0.5.0_harddrive.bin.gzから落としました。

$ gunzip redox_0.5.0_harddrive.bin.gz

doc.redox-os.org
を参考にしてQEMUを実行します。

$ qemu-system-x86_64 -serial mon:stdio -d cpu_reset -d guest_errors -smp 4 -m 1024 -s -machine q35 -device ich9-intel-hda -device hda-duplex -net nic,model=e1000 -net user -device nec-usb-xhci,id=xhci -device usb-tablet,bus=xhci.0 -drive file=redox_0.5.0_harddrive.bin,format=raw

f:id:ytakeuch:20190326004412p:plain
Redoxログイン画面

ユーザ名: root、パスワード: passwordでログインします。

f:id:ytakeuch:20190326004540p:plain
Redox画面

ログインできました。



NURO光 G2Vプラン 工事失敗(パークシティ大宮ビューコート)

居住しているマンションでNURO 光 マンションタイプを募集していたのですが、いくら経っても開通しないのでNURO 光 G2Vプランを申し込んでみました。
NURO 光のサイトではNURO 光 提供サイトになっていたので...

f:id:ytakeuch:20190313220258p:plain
NURO 光 パークシティ大宮ビューコート

工事の人に来てもらいましたが、電話線が配管を通してMDF/IDFを通っておらず(コンクリで埋められてますw)、工事不可ということでお引取り願いました。

というわけで、パークシティ大宮ビューコートは(現在のところ)NURO 光 未対応です。

20年近く前にBフレッツを導入する時に判っていたのですが、電話線が通っているコンクリをはつらないといけないですね。
10年次の大規模改修で行っておく事案でした。

Cloudflareへ移行 + はてなブログで不具合(解決済)

DNSサービスをCloudflareへ移行したのですが、はてなブログで不具合が発生しました。
はてなブログのURLを http://blog.logicdesign.jp/ にしていたのですが、http://blog.logicdesign.jp/ にアクセスすると http://ytakeuch.hatenablog.com/ にリダイレクトされてしまいます。

原因は http://blog.logicdesign.jp/ へのアクセスをCloudflareのHTTP proxy経由しているためでした。

f:id:ytakeuch:20190305235541p:plain

f:id:ytakeuch:20190305235622p:plain

としたら治りました。

はてなブログHTTPSで配信するように移行しました。