投稿

ラベル(計算機科学)が付いた投稿を表示しています

第1回 ラムダ抽象と関数適用

イメージ
Arch Linux 上に ghc をインストールする方法は こちら . Haskell は関数型言語の一種で,関数計算の連鎖でプログラムが動きます. C 言語などにも関数はありますが,Haskell の関数はより数学的です. まずは関数とは何かを説明します. 関数 Haskell において,関数は「 値を変換するもの 」です. 例えば,次のような,入力に$1$を加えて返す関数$f$を考えます. $$   f(x) = x + 1 $$ $x$が$1$だと$2$になります($f(1) = 2$). 関数$f$と$1$がくっつくと,$2$になってしまうのです. $x = 2$の場合,$f(2) = 3$ですし,$x = 3$の場合は$f(3) = 4$になります. つまり,関数というのは,定義という名のルールに従って,入力を出力に変換しているのです. では,C言語の関数と何が違うのでしょうか? Haskell の関数は,基本的に,同じ入力の時は同じ出力にならなければなりません. 上の関数$f$を見ると,どんな時でも同じ入力の時に同じ出力になります. ところが,C言語の場合は同じ入力でも簡単に違う出力にできてしまいます. 入力が void 型(つまり入力なし)の時でも自由自在に出力を変えることができます. 逆に,入力だけ見ても出力を決めることができないということもできます. Haskellの関数の基本は入力だけを見て出力が決まるという特徴があるので,「値を変換するもの」と見えるのです. ラムダ抽象 「関数=値を変換するもの」という考え方を発展させたものがラムダ抽象です. 中学や高校の数学において,関数というのは必ず名前がありました. 関数は値を変換してくれればいいだけなのに,必ず名前を決めてあげないと定義できません. これをラムダ計算(lambda calculus)では,「 入力をもらうと計算した結果を返すもの 」を定義できるようにしました. 例えば,入力が$x$なら,$x + 1$を返す関数を $$   \lambda x . x + 1 $$ と書くことにしたのです. 最初の$\lambda$と$.$の間には入力の変数を1つ書くことができます. ...

Google Drive に ChangeLog メモを置く

イメージ
デスクトップ環境,ウェブブラウザ,日本語入力環境,Emacs をインストールしたので,だいぶ様々な作業ができる環境が整ってきた.そうなると,作業の記録を取りたくなってくる.適当なファイルに作業メモを記録しておいてもいいが,OS の再インストールの際に誤って消してしまうと悲しい.クラウドに保存しとけば,いきなり HDD などが壊れてもデータが消失することはない(セキュリティー的にリスクは増えるが). そこで,ChangeLog メモを Google Drive 上に置くことにした.ChangeLog メモとは, 横着プログラミング 第1回: Unixのメモ技術 や 私の ChangeLog メモ活用法 で紹介されている ChangeLog 形式でメモを取る方法である.利点や欠点はそれぞれの紹介ページを参照してほしい.ChangeLog メモをクラウドで保存するためには,テキストファイルをクラウド上に保存でき,ネットにつながっていればいつでもそのテキストファイルを(できれば Emacs で)編集できるのが望ましい.一つの解決策として,Google Drive を google-drive-ocamlfuse でマウントして,Emacs からテキストファイルを編集する方法を紹介する. google-drive-ocamlfuse のインストール yaourt で一発 ... ならよかったが,そうは問屋が降ろさない.しかし,誰かが修正して yaourt 一発になる日が来るかもしれない.とりあえず,一度,yaourt でインストールしてみる. $ yaourt -S google-drive-ocamlfuse いろいろインストールしないといけないが,最終的に以下のようなエラーメッセージが表示されて異常終了する. gcc: エラー: /usr/lib/ocaml/curl/curl.a: そのようなファイルやディレクトリはありません gcc: エラー: /usr/lib/ocaml/extlib/extLib.a: そのようなファイルやディレクトリはありません File "caml_startup", line 1: Error: Error during linking Command exited with code 2. C...

パソコンの Arch Linux に Emacs をインストール

イメージ
UNIX 系の定番エディタは Emacs.Vi は軽量で,設定変更などのちょっとした修正の時には重宝するが,ガッツリ文章を書いたり,プログラムを書く時などは Emacs の方が便利だ.mozc もインストールしたし,Emacs で日本語の文章が書けるようにする. Emacs のインストール 何も難しくはない.pacman で emacs をインストールするだけ. $ sudo pacman -S emacs $ emacs --version GNU Emacs 24.3.1 Copyright (C) 2013 Free Software Foundation, Inc. GNU Emacs comes with ABSOLUTELY NO WARRANTY. You may redistribute copies of Emacs under the terms of the GNU General Public License. For more information about these matters, see the file named COPYING. emacs 24.3.1 がインストールされた. emacs-mozc のインストール Emacs で Mozc を使うには emacs-mozc をインストールする必要がある. $ sudo pacman -S emacs-mozc Emacs の設定 Emacs の設定は自由度が高く,また Emacs Lisp と呼ばれるプログラミング言語で記述しなければならないので,非常に難解.さらに,バージョンごとに微妙に記述方法が変わったりするので厄介.とりあえず,次の画像が Emacs を起動した直後のウィンドウ.ちなみに,この画像は shutter というツールを使って撮った.pacman で容易にインストール可能. Emacs の設定は ~/.emacs.d/init.el に記述する.Emacs で Mozc を使えるようにするのも ~/.emacs.d/init.el に設定を書く.上の画像をよく見ると,File や Edit などのメニュー,保存ボタンなどのツールバー,GUI 上で画面をスクロールするためのスクロ...

パソコンの Arch Linux に Chrome をインストール

イメージ
今回は Arch Linux にウェブブラウザをインストール.せっかく GUI が使えるようになったんだから,Arch Linux 上でブログを更新したい. まだ GUI を導入していない場合, LXDE のインストール方法 が参考になるかも. Chrome のインストール ウェブブラウザとして,Chrome をインストールすることにした.Chromium は Chrome をベースとしたオープンソース版.pacman でインストールできるところが強み.ただ,Adobe Flash Player に対応していない.Chromium で Flash Player を使おうとすると,結局,Chrome をインストールすることになる.別に Flash Player が使いたいわけではないが,Windows 上の Chrome との互換性なども考慮して Chrome をインストールする. $ yaourt -S google-chrome 特に難しいことは何もない. 日本語入力 Chrome をインストールしただけでは日本語を入力できない.日本語を入力する方法にはいくつかあり,どれを選べばいいのか悩むところ.というか,Fcitx だの Ibus だの Mozc だの Anthy だの何なんだこれ. いろいろ調べて分かったことは,日本語入力を実現するためには,アプリごとの日本語入力を共通化してくれる「インプットメソッドフレームワーク」と実際に漢字変換を行う「インプットメソッド」を何にするかを決めなければならないということ. Fcitx,Ibus,Uim がインプットメソッドフレームワークと呼ばれ,Mozc,Anthy,ATOK がインプットメソッドと呼ばれる.漢字変換の賢さはインプットメソッドの性能に依存し,漢字変換の使い勝手はインプットメソッドフレームワークに依存する. 今回はインプットメソッドフレームワークとして Uim,インプットメソッドとして Mozc を採用する. Mozc のインストールでは Mozc を配布している非公式リポジトリを使うので, /etc/pacman.conf に以下の3行を追加して,パッケージデーターベースを更新する. $ sudo vi /etc/pacman.conf [pnsf...

パソコンの Arch Linux に LXDE をインストール

イメージ
今回は GUI の導入編. Arch Linux のインストール方法 や 無線 LAN の設定方法 の続き. GUI を導入すると,root でログインできなくなるので,まずはユーザーの作成から. ユーザーの作成 ユーザーの作成は useradd コマンド.グループを wheel にして,/home 以下にホームディレクトリを作成する.また,sudo で root 権限が使えるように visudo で設定する. # useradd -m -G wheel cota # visudo %wheel ALL=(ALL) ALL ← コメントを外す # passwd cota LXDE のインストール ようやく GUI をインストールする準備が整った.GUI として LXDE をインストールする.LXDE は軽量の GUI.まず,ビデオチップを調べる. # lspci | grep VGA 00:02.0 VGA compatible controller: Intel Corporation Mobile GM965/GL960 Integrated Graphics Controller (primary) (rev 0c) Intel のチップを使っていることが分かったので,xf86-video-intel を使うことにする.そして,必要なものをまとめてインストールする.インストール後,OS 起動時に GUI が起動するように設定する. # pacman -S xf86-video-intel xorg-server lxde # systemctl enable lxdm.service キーボードを日本語配列にする デフォルトでは US 配列になっているので不便.日本語配列にするには,以下の通り.ついでに caps lock を ctrl キーに変更している.入力する際," は *,: は + で入力可. # vi /etc/X11/xorg.conf.d/01-keyboard-layout.conf Section "InputClass" Identifier "keyboard-layout" ...

パソコンの Arch Linux で無線 LAN を使えるようにする

イメージ
今回は インストール方法 の続き. インストールしたての Arch Linux を起動すると,次のような画面になる. 何かエラーが出てる.どうやら,無線 LAN を認識していないようだ.無線 LAN を設定したいが,その前に SSD に関する設定をしておく.SSD 用の設定にはツールのインストールが不可欠なので,まずは有線でネットワークを接続する. 有線でネットワーク接続 Arch Linux を起動する前にネットワークケーブルを挿しておく.挿すだけではネットワークに接続されない.次のように DHCP で IP アドレスを取得する. # dhcpcd enp9s0 ネットワークインターフェース(enp9s0)が異なるかもしれないので,その場合は次のように確認できる. # ip link IP アドレスが取得できれば OK. SSD 用の設定 SSD はハードディスクと違って,書き込み回数の制限がある.このため,ハードディスクと同じように SSD を使うと,寿命が縮まってしまう.寿命を長くするために TRIM を有効にする. SSD が TRIM に対応しているかを確認するコマンドをインストールする. # pacman -S hdparm そして,以下のコマンドを実行して,同じように表示されれば TRIM に対応した SSD である. # hdparm -I /dev/sda | grep TRIM * Data Set Management TRIM supported (limit 1 block) * Deterministic read data after TRIM SSD が TRIM に対応していることが確認できたら,/etc/fstab を編集(discardを追加)する. # vi /etc/fstab # /dev/sda4 UUID=xxxxxxxx / ext4 rw,relatime,data=ordered,discard 0 1 # /dev/sda3 UUID=xxxxxxxx /boot ext4 rw,relatime,data=ordered,d...

パソコンも Arch Linux にしてみる

イメージ
Arch Linux がとても気に入った.非力なラズパイでもサクサク使えるくらい軽量.これをノートパソコンにインストールしたらどれだけ快適なのか,想像するだけでワクワクする.うちのノートパソコンは Dell inspiron 1525.6年前のノートパソコンだ.SSDに換装して Windows 8.1 を使っているおかげでストレスなく使えているけど,Arch Linux を使えば,もっと快適になるだろう. VMWare player などの仮想化ツール上にインストールして使うことも考えたが,高速さが売りの Arch Linux をインストールするならデュアルブートにしようと考えた. まずは Windows 8.1 上で作業を進め,デュアルブートで起動する Arch Linux をインストールする.今回は OS の基本部分をインストールすることが目標. インストーラーの ISO イメージをダウンロード 最初にすることは  Arch Linux - downloads  より ISO イメージのダウンロード.日本のミラー(JAIST)からダウンロードすると速いと思う.ダウンロードしたのは archlinux-2014.08.01-dual.iso. ISO イメージを DVD に焼く DVD ライティングソフトはいろいろあるが,CDBurnerXP というソフトを利用した.他を2~3種類試したが,どれもウィルスが仕込まれていたり,Baidu IME がインストールされるようになっていたりで嫌気がさした.CDBurnerXP もデフォルトの設定では Baidu IME がインストールされる設定になっているが,インストールしない設定が可能だった.このツールを使えば,簡単に ISO イメージを DVD に焼ける. Windows 8.1 の高速スタートアップをオフにする Windows 8.1 のデフォルトの設定では,高速スタートアップがオンになっている.これは,OS の起動・シャットダウンを高速化するための設定だ.メモリイメージ等をハードディスクといったストレージに記録して電源を切り,起動時にメモリイメージを復活させるハイバネーションを利用した技術で OS 起動・終了の高速化を実現しているらしい.この後で,Arch L...

これだけ覚えれば使える vi

イメージ
今さら感が強いけど,vi の使い方をまとめてみる.Arch Linux の設定ファイルを少しだけ変更する時,vi が便利.だけど vi ってクセが強すぎる.初めて使った時は終了方法すら分からなかった.Windows のメモ帳とは全然違うので,特徴を図としてまとめてみた. vi には全く異なる2つのモードがある.カーソルの移動やファイルの保存などをするための コマンドモード ,文字を入力する 編集モード だ.これがメモ帳との大きな違いだ.どちらのモードにいるかで挙動が全然違うので,注意が必要.どっちのモードにいるか分からなくなったら,とにかく Esc キーを押すこと.それでコマンドモードに移る. 起動 $ vi ファイル名 例えば,/etc/hostname を編集する場合は,root 権限も必要なので sudo を使って以下のように起動する. $ sudo vi /etc/hostname vi は最初,コマンドモードで起動する. 終了 変更内容を保存して終了する場合は,コマンドモードで :wq と入力した後,Enter キーを押す.保存せずに終了する場合は,:q! と入力する. カーソルの移動 コマンドモードで,以下の文字を入力するとカーソルが移動する. 上への移動: k 下への移動: j 左への移動: h 右への移動: l(エル) 矢印キーでも移動可.hjkl を使うのは,右手をホームポジションに置いたまま操作ができるから.矢印キーを使うとキー入力が遅くなるのであまり好きじゃない. 文字の削除 消したい文字にカーソルを移動して x を押すと一文字削除できる. 編集モードへの移行 編集したい箇所にカーソルを移動して i を押すと編集モードに移行する.編集モードでは,入力した文字がそのままファイルに入力される.インサート( insert )の i. コマンドモードへの移行 とにかく Esc キー.困ったときは Esc キー. これで,vi を使ってちょっとした設定ファイルの編集はできると思う.慣れてきたら,コマンドをいろいろ覚えて,より効率的にファイルを編集できるようになったらいいと思う.編集に最低限必要なことは, 文字を入力できる 文字を削...

Arch Linux on RasPi の容量を最大化

イメージ
SD カードの容量をどれくらい使っているのか,気になったので調べてみた. $ df -h Filesystem Size Used Avail Use% Mounted on /dev/root 1.7G 447M 1.1G 30% / devtmpfs 214M 0 214M 0% /dev tmpfs 218M 0 218M 0% /dev/shm tmpfs 218M 300K 218M 1% /run tmpfs 218M 0 218M 0% /sys/fs/cgroup tmpfs 218M 0 218M 0% /tmp /dev/mmcblk0p1 90M 25M 66M 28% /boot tmpfs 44M 0 44M 0% /run/user/1000 あれ? 16GB の SD カードを使ってるのに,2GB しか使っていないぞ. どうやら,Arch Linux のディスクイメージは 2GB しか使っていないようだ. 使われていない 10GB 以上の領域が無駄になっているので,使えるようにする. 今回は root で作業することにする. $ sudo -i するとプロンプトが # に変化する. 次に,fdisk を起動する. # fdisk /dev/mmcblk0 p を押すと現在のパーティション数が分かる. /dev/mmcblk0p1 /dev/mmcblk0p2 /dev/mmcblk0p5 この3つの場合は以下の手順でいいが,異なる場合は,最悪,OS のインストールからやり直しになるかもしれないので,よく調べてから覚悟を決めて挑んでほしい. d を押す 5 を押す d を押す 2 を押す n を押す e を押す Enter を押す(デフォルトを選択) Enter を押す(デフォルトを選択) n を押す l(エル)を押す 5 を押す Enter を押す(デフォルトを選択) Enter を押す(デフォ...

Arch Linux on Raspi で固定IPを使えるようにする

イメージ
DHCP による IP アドレスの割り当ては便利な反面,外部(Windows など)からネットワーク越しにログインする時は不便だ. たまに違う IP アドレスが割り当てられることがあるのが問題だ. よし.今回は IP アドレスの固定化を実践する. とはいえ,毎度毎度 root で作業するのは怖すぎるので,ユーザーを作ってから作業することにする. ユーザー追加 まずは root でログイン. そして,ユーザー cota を useradd コマンドを利用して追加する. # useradd -m cota これで cota というログインアカウントが作成された. 次に,cota アカウントのパスワードを passwd コマンドを利用して設定する. # passwd cota Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully これでユーザー追加は終了. sudo コマンドのインストール ユーザー cota には root 権限がない. root 権限がないとできない作業があるが,その都度,root でログインしていたら面倒だ. そこで安全に,かつ簡単に root になるためのコマンドが sudo. まずは pacman で sudo をインストール. # pacman -S sudo 次に,ユーザー cota が sudo で root 権限を使えるように設定. # visudo 以下のように root の設定の下に cota の設定を追加する. root ALL=(ALL) ALL cota ALL=(ALL) ALL これで cota が sudo コマンドを利用して root 権限を取得できるようになった. 一度,ログアウトする. # logout cota でログインしなおすと,次のように表示される. Welcome to Arch Linux ARM Website: http://archlinuxarm.org Forum: http://archlinuxa...

Arch Linuxのラズパイで無線LANが使えるようになった

イメージ
Arch Linux on Raspi で無線 LAN (WN-G150UMK)が使えるようになったにゃー. ウェブ上には Arch Linux の情報が少ないし,経験は浅いし,めっちゃ苦労したにゃー. まだ OS を入れてない方は  Arch Linux on Raspi のインストール方法 が参考になるかも. 使用する無線 LAN 子機は,Raspbian で動作実績のある WN-G150UMK. Raspbian で使えたしサクッと使えるかなと思っていたら,甘かった. 試行錯誤の結果,なんとかつながった. インストールされている Arch Linux のバージョンは June 2014. 以下は詳細. # uname -a Linux alarmpi 3.12.20-4-ARCH #1 PREEMPT Tue May 27 19:18:36 MDT 2014 armv6l GNU/Linux まずは Arch Linux にログイン. login: root password: root 本当は root でログインしたくないんだけど,多くの作業で root 権限が必要なので. root 権限は最強権限で,うっかり大事なファイルを削除できてしまうので,注意が必要. 次の手順で無線 LAN を接続する. 1. 有線で Raspi をネットワークに接続. ブスッとネットワークケーブルを挿すだけ. # ifconfig eth0 とすれば,eth0 に IP アドレスが割り当てられてるか確認できる. 2. wireless_tools をインストールする. # pacman -S wireless_tools pacman は Arch Linux のパッケージ管理ソフトで,Debian 系の apt-get のようなもの. wireless_tools をインストールすると 無線 LAN 接続に必要なコマンドがインストールされる. 以下はインストール結果の画面. これが終わればネットワークケーブルを抜いても OK. 3. wlan0 を認識させる. 現時点では ifconfig コマンドを実行しても wlan0 は表示されていない. し...

ラズパイで Arch Linux を動かすのだ

イメージ
インストーラーでオススメされてた Raspbian だが,なんか重たい気がする. 以前の  Raspbian のインストール方法  もご参考に. OS 変えたら軽くなるのだろうか? 実験だ! 今度は Arch Linux . 同じ Linux カーネルだし,あまり変わらないような気もする. まずは SD カードをフォーマットするところから. SDFormatter を起動して,フォーマット. Raspbian をインストールした時と同じように NOOBS で Arch Linux をインストールすることも可能だが,今度は dd を使ったインストールに挑戦. まずは,Arch Linux のディスクイメージを  http://www.raspberrypi.org/downloads/  からダウンロード. 現在の最新版は June 2014 . およそ 200MB . NOOBS よりもサイズが小さくていい. ダウンロードした zip ファイルを展開すると, ArchLinuxARM-2014.06-rpi.img というファイル(ディスクイメージ)が現れる. これを dd で SD カードに書き込む. dd というのは Unix 系の OS  が持つコマンドの一つだが,残念なことに Windows 系にはない. ただ, DD for Windows  というものがあるので,最新版(0.9.9.8)をダウンロードする. ダウンロードした zip ファイルを展開して, DDWin.exe を実行する. あれ~?SD カードが見えないな. おかしいなぁ? 調べてみると, Windows 7 以降の場合,管理者として実行しないとダメなようだ. DDWin.exe  を右クリックして「管理者として実行」を選択する. やったー,SD カードがちゃんと表示された. そして,さっきのディスクイメージを「ファイル選択」から選択する. 細かいことだけど,ファイルの種類を All files にしないと選択できない. 選択できると,次のようになる...

ラズパイの無線LANを使えるようにする

イメージ
無事,ラズパイで無線 LAN がつながるようになったにゃー. WDC-150SU2MWH  の認識にはホント手こずった. 結果,認識させることができなかった. Device ID  が 056e:4008  で, rtl8188eu のドライバを読み込ませれば認識しそうだというところまでは分かったんだけど,知識不足で読み込ませることができなかった. そういった苦労をしないためにも, Google で調べ, WN-G150UMK ( IO DATA製 ) の動作が確認できたので,購入. にっくき, WDC-150SU2MWH を取り外し,買ってきた無線 LAN 子機を装着. ラズパイが無線  LAN  子機を認識してるか確認する. ラズパイが立ち上がり,デスクトップにある LXTerminal を起動させて, ifconfig  コマンドを実行する. $ ifconfig eth0 Link encap:イーサネット ハードウェアアドレス XX:XX:XX:XX:XX:XX UP BROADCAST MULTICAST MTU:1500 メトリック:1 RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:1000 RXバイト:0 (0.0 B) TXバイト:0 (0.0 B) lo Link encap:ローカルループバック inetアドレス:127.0.0.1 マスク:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 メトリック:1 RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:0 ...

ラズベリーパイがやってきた

イメージ
Raspberry Pi (ラズベリー・パイ)が動いたにゃー. ラズパイは,イギリス生まれの小型コンピューター. Type A と Type B があるが, Type B  を購入. ラズパイだけ買ったらいいのかと思ったら,他にもいっぱい必要だった. 買ったものは以下の通り. USB キーボード ( iBUFFALO: BSKBU02EN ) 無線マウス ( ELECOM: M-XG2DB ) HDMI ケーブル( VV-HDMI020AA-B ) USB ケーブル ( A type - Micro(B) type ) ラズパイ用ケース ( seeed: Skeleton Box For Raspberry Pi ) USB 充電器 ( 1.2A ) USB ハブ ( ELECOM: U2H-YK4BF1WH ) 無線  LAN  子機 ( WDC-150SU2MWH ) ← これは失敗. SD カード ( SanDisk 16GB Extreme PRO ) キーボード,マウスが必要なのは分かる. ただ,ネットワーク越しにログインできるようになったら不要になるので, 他のパソコンから借りておくのも手. USB  充電器に  USB ケーブルをつないで電源とつなぐ. 5V 800mA ~ 1200mA となっていたので, 1.2A (1200mA)  の充電器を選択. 画面は HDMI ケーブルを使ってテレビに映す. ラズパイをむき出しで使ってもいいけど,ケースも購入. ラズパイ Type B には LAN ポートが付いているが, 無線 LAN で接続したかったので,子機を購入. でも,何も調べずに買ってしまい,結局,認識させれなかった. ちゃんと調べればよかった. さほど高額のものではないので,買い直し. その話はまた今度. キーボード,マウス,無線  LAN  で,必要な USB ポートは3つ. ラズパイには2つのポートしかないので, USB ハブが必要. 最後に, SD カード. これはハードディスクの...