Haskell programming 初歩の初歩

先述の直角三角形の三辺長さを求めるプログラムですが

let rightTriangles = [(a, b, c) | c<-[1..10], a<-[1..c], b<-[1..a], a^2 + b^2 == c^2, a + b + c < 25]

とすればきちんと動作します 動作させるためにはまず Haskell compilerを MacBook Proにインストールします それは簡単にできます そしてインストールされたならば terminalから

$ghci

と打ち込みます これにより Haskell compilerの対話モードが起動しますので待受が変わります

Prelude>

という待受になりますので さっきの正しいプログラム文を打ち込めば直感三角形の三辺の長さがタプルというデータ形式で表示されるのです

Prelude>let rightTriangles = [(a, b, c) | c<-[1..10], a<-[1..c], b<-[1..a], a^2 + b^2 == c^2, a + b + c < 25]
Prelude>[(4,3,5),(8,6,10)]

きちんと直感三角形の三辺の長さが二組出力されていますね

ここまではめでたしめでたしですが、ここに至るまでに数日間を必要としました そして次の問題が・・・・・・

気がつけば February!!

あれっ? て気がつけば2月になっていました 何だか色々なことがあり、本当に疲れ切ってこの間に時間が流れていることを意識できませんでした

また、「世の中 矛盾に満ちているよなあ」ということがいくつかありました 「もうやってらんない チャブ台ひっくり返してやる」と思うことがたくさんあるのです

そんな中で自分の心はもっと純粋なものに向かいます それは かねてより分からない、難しい、どうとっついて良いのか?? である Haskellへの挑戦です もっとも何回これまでこのような道を歩み途中で挫折して放り出したことでしょう それでも「純粋関数型言語」とか「モナド」あるいは「モノイド」、「ファンクター」「カリー化」などという何だか訳の分からない しかし魅力的な響きの言葉 これを理解したい そのように思い その象徴たる Haskellに挑戦です

Haskellはとても有名な言語ですが、やはり取り付くのは困難とされているものです しかしその先には意識の革命がある筈です もっともほとんど書籍が無いのです 僕が数年前にAmazonで入手した 「すごい HASKELL 楽しく学ぼう」という書籍がほとんど唯一のものです

この本ようやく購入後数年して読み始めました もちろん iPad Proで Kindleで読み出したのですが、一言で言えば「難しい!!」です

このように新しい言語を学ぶ時には実際にプログラムを書いてテストする作業が必要です しかしこれがなかなか動かない!!!

一つの文が動作するようになるために何日間も必要なのです たとえば本にも出ているのですが、「直角三角形の辺の長さを 1から 10CMの間の整数値で求めよ、しかも合計値が 25未満であるもの」というのがあります

これを Cあるいは C++あるいは Javascript、PHPなどで書くのはまず問題ありません ですが Hasellでは

let rightTriangle = [(a, b, c) | c <- [1..10], b <- [1..10], a <- [1..c], a^2 + b^2 = c^2, a + b + c < 25]

となります

しかしこれはエラーが出てコンパイルできません この解決に数日間要しました ばかみたいなことでした それは

a^ + b^ = c^ という文です これは2辺の二乗の和が長辺の二乗に等しいということを表そうとしているのですが、問題は゜ = です これはプログラミングでは代入を表し、イコールではないのです それが間違いだったのです こんなプログラム書く人にとっては当たり前のことを見落とし時間を無駄に使うのです どうも調子悪いです

すぐ忘れるmysqlコマンド

折角ターミナルで $mysqlと打ち込めば mysqlが CLI (command line interface)で立上るようになったにもかかわらず数日使わないとすっかりコマンドを忘れていました そこで自分で良く使うものをここに書いておきます

## mysql を 「ユーザー名」で立ち上げる うまく立ち上がると passwordを要求される
$mysql -p -u ユーザー名

## mysqlに既に登録されているデータベース一覧を表示
mysql> show databases;

## 「そのデータベース」を使用する
mysql> use そのデータベース;

## 「そのデータベース」のtable一覧表示
mysql> show tables;

## 「そのデータベース」の「そのtable」のフィールドを一覧表示
mysql> desc そのtable;

## mysqlを終了する
mysql> quit;

 

MacBook Pro/MAMP mysqlにパスを通すには?

MacBook Proで Laravelをいじっています 直接 MySQLにコマンドを発行せねばならない場面があり、これまで直接 MySQLをいじくっている時には、phpMyadminを立ち上げ、その中で SQLを発行していました

しかし、これは本来のやり方ではなく、本来的には MySQLコマンドを用いるべきです しかし、MAMPを使用している時にこれをどのようにすれば良いのかさっぱり分かりませんでした 金沢に移動する新幹線の中、この中は長野から富山の間は電波が通じず、インターネットアクセスに難儀するのですが、何とか調べました
$ code ~/.bashrc ## ホームの.bashrcを編集します

そしてここからは visual studio codeの中ですが、そこで以下の文を最後に追加します
export PATH="$PATH:/Applications/MAMP/Library/bin/"

そして terminalに戻りもちろんこれを叩いて反映させます

$ source ~/.bashrc

これで直接ターミナルから mysqlと打ち込めば mysqlを動作することができます 便利ですね

Laravel を MacOSにインストール – つづき

さてようやく MacOS上で composerがインストールできました というか既に何ヶ月か前にインストールしていたのに忘れていたのです

そもそも composerは何か? と言えば、phpを用いて web programを書くときに必要な諸々をサクッとインストールしてくれる便利な小槌と思えばいいのです まず行うことは

$ cd ~/target-folder/

とすることにより、目標とする target-folderに移動します

次いで

$ composer create-project "laravel/laravel=5.5.*" projectName

とすることにより、Laravel version 5.5一式をこのフォルダにインストールします これは大量のファイルをダウンロードしますので数分間かかりますよっ

$ cd projectName

とすることにより今作成したプロジェクト・フォルダに移動します そうすると artisanという phpで書かれたコマンドがこのフォルダには既にインストールされていまので、

$ php artisan --V

とすれば、僕の場合には
Laravel Framework 5.5.44というものが戻ってきました 実はこの artisanというプログラムは local serverを立ち上げるものであり、これで local serverを立ち上げるとその後 Laravelでプログラムを開発する時に面倒なことを考えずにできるのです

$ php artisan serve

これで local serverが  ip address = 127.0.0.1, port = 8000で立ち上がりましたので、ブラウザのアドレス・バーで localhost:8000とするかあるいはhttp://127.0.0.1:8000と打ち込めば見事 Laravelのデモページが立ち上がります

Laravelデモページ

Laravel再開

一度は挫折した Laravelに再度チャレンジです Macでインストールするのと Windows10でインストールするのでは大分やり方が異なるようです

Windows10では まずは XAMPPをインストールした方が良いようですね それでは まずは Macから ここは Terminalでの作業になりますね

まずは composerのインストールです これは簡単ですよ
$brew install composer

ところがここで以下のような膨大なエラー出現しました

==> Downloading https://getcomposer.org/download/1.8.0/composer.phar
######################################################################## 100.0%
Error: parent directory is world writable but not sticky
Please report this bug:
  https://docs.brew.sh/Troubleshooting
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/tmpdir.rb:93:in `mktmpdir'
/usr/local/Homebrew/Library/Homebrew/utils/fork.rb:28:in `safe_fork'
/usr/local/Homebrew/Library/Homebrew/formula_installer.rb:743:in `build'
/usr/local/Homebrew/Library/Homebrew/formula_installer.rb:317:in `install'
/usr/local/Homebrew/Library/Homebrew/cmd/install.rb:326:in `install_formula'
/usr/local/Homebrew/Library/Homebrew/cmd/install.rb:256:in `block in install'
/usr/local/Homebrew/Library/Homebrew/cmd/install.rb:254:in `each'
/usr/local/Homebrew/Library/Homebrew/cmd/install.rb:254:in `install'
/usr/local/Homebrew/Library/Homebrew/brew.rb:88:in `'

こんなことで慌ててはいけません 何だか rubyで書かれた Homebrew管理プログラムが色々とシステムに書き込もうとする時に「それは越権行為だ!」というようなエラーですね こういう時は Google叔父さんに聴いてみます 検索したのは

Error: parent directory is world writable but not sticky
Please report this bug:

というものですが、そうすると早速このページにヒットしました これに従い$ sudo chmod +t /private/tmp
$ sudo chmod +t ~/Library/Caches/Homebrew
とすると Treminalからは何の返答もありませんが、再度 $brew install composerと打つと

==> Downloading https://getcomposer.org/download/1.8.0/composer.phar
Already downloaded: /Users/transradial/Library/Caches/Homebrew/downloads/5f21a93cda75f6de1acae0850021a00add848552341d23d14aa9e6afc17de4dd--composer.phar
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink bin/composer
Target /usr/local/bin/composer
already exists. You may want to remove it:
  rm '/usr/local/bin/composer'

To force the link and overwrite all conflicting files:
  brew link --overwrite composer

To list all files that would be deleted:
  brew link --overwrite --dry-run composer

Possible conflicting files are:
/usr/local/bin/composer
==> Summary
🍺  /usr/local/Cellar/composer/1.8.0: 3 files, 1.8MB, built in 2 seconds

というように何だか インストールされたみたいです ただ、僕の場合には既に composerがインストールされているのでそれを修正した方が良いよ と出ているようですので、この指示のとおりに$ rm '/usr/local/bin/composer'
$ brew link --overwrite composer
$ brew link --overwrite --dry-run composer
とすると見事にアンイストールできました そして今度は Laravelのインストーラーをインストールするために

$ composer global require "laravel/installer"

とすると 何やらたくさんのファイルが downloadされて インストール準備段階に入りました

実はこの段階でこのインストーラーなどのパスを通さねばなりません それで

export PATH="$PATH:$HOME/.composer/vendor/bin"

という一文を ~/.bashrcの最後に書き加えねばなりません これには vimとか visual studio code (VisutalStudio Code = VS Code)を用いねばシステム領域の書き換えはできませんので、

$ code

とコマンドラインから VS codeを立ち上げようとすると何と以下のエラー出現

/Users/transradial/.pyenv/shims/python: line 21: /usr/local/Cellar/pyenv/1.2.6/libexec/pyenv: No such file or directory
/usr/local/bin/code: line 10: ./MacOS/Electron: No such file or directory

さあ困った そこで、今度は”/usr/local/Cellar/pyenv/1.2.6/libexec/pyenv”で Google検索するとすぐにここにヒットしました この指示のとおりに

$ pyenv rehash

としたところ解決し、VS codeをコマンドラインから立ち上げることが可能となりました 要するに pyenvという python仮想環境が少し破壊されたので、それを自己修正したのですね さて、このようにそと VS codeでパスを無事通し、それを現在のコマンドラインに反映させるために

$ source ~/.bashrc

したところ、無事

$ laravel --version
Laravel Installer 2.0.1

となり さあこれで laravelをインストール可能となりました

さて、今度は Windows10でも行いたいと思いますが、こちらは仮想サーバーを別に立ち上げねばならないのかな? それとも php artisanコマンドで十分なのかな? 未だ検証していません これからの楽しみですが、時間があるかなあ???

意外や意外 できない!

先の postですが、Chromeブラウザを立ち上げるのには、MacOS上の terminalで

$open -a Google\ Chrome

とせねばならない、と書きました そして、これを単に chromeという名前で立ち上げるにはきっとリンクを貼ればいいのだ、とか書きました この時点で本気でリンクを貼れば解決すると思ったのですが・・・・

実はリンクを貼り、そのリンク先(エイリアスとも呼びますね)に実行権限を与えればいいのだろうと考えていたのです そこで

$ln -s /Applications/Google\ Chrome.app /Applications/chrome.app

としてシンボリック・リンクを貼り、実行権限を与えるために

$sudo chmod 777 /Applications/chrome.app

としたのです これで先の open -a /Applications/chrome.appとしましたが、そんな実行ファイルはありません と叱られてしまいました

ここで暗礁に乗り上げ分からなくなりました 駄目だ

こっ これは便利だ – ChromeやFireFoxをコマンドラインより起動する

Visual Studio Codeを editorにして JavaScriptの勉強をしているのですが、なかなか思いどおりに行きません

何が思いどおりにいかないか? と言えば JavaScriptプログラム単独を走らせるのは

$node sample.js

などのようにすれば、sample.jsというプログラムが走ります そしてこの場合の出力は console.log( )で書き出し、consoleに出力します

しかし、JavaScriptと言えば、やはりブラウザとの連携です そして DOMの操作です、そうなると 例えば index.htmlをブラウザ立ち上げてその中で JavaScript fileを読み込んで走らせる、そのような運用になります ところが、いちいちこれをブラウザより行うのは面倒です どうにかして VS Code内部でできないのか? と色々考えたり、調べたりしてついに見つけました

Chromeの場合には

$open -a Google\ Chrome index.htm

FireFoxの場合には

$open -a firefox index.html

これで良いのです 実は Safariの場合には

$open -a safari index.html

これで一発で該当するブラウザでそのページが開かれ、そして JavaScriptが走ります なんて便利なんだろう

しかし、Chromeだけ Google\ Chromeとせねばならないのは許しがたいですね この場合、リンクを貼るしか無いでしょう

土日は JavaScriptに費やして

JavaScriptはとても奥が深い言語です 「単なるスクリプト言語でしょ」とか、「どうせ Browserに付属しているものでしょ」、あるいは「オブジェクト指向言語といっても、prototypeなどというものを使うのでしょ」などと酷評されることが多い言語で、僕も最初はそのように思っていました

しかし、この言語は Browserという縛りから解き放たれた時には、ものすごい能力を発揮します その部分の勉強を初めたのですが、これがとても難解です 特に今まで知らなかった関数型プログラミング、これはすごい世界です 関数型プログラミングに限らず何というか物事に対する考え方が今までと異なるので、その新して世界、文化になかなか馴染めないのですね きっと若い人にとっては何でもなく乗り越えることのできる壁なのでしょう 頑張りたいと思います

さて、今朝 12月10日は月曜日 いよいよ鎌倉ライブの週となりました そして僕は早朝といってもそんなには早くありませんが、7:00AMに自宅を歩いて出発、大船駅まで行き、現在東海道線グリー車に 1,030円支払って搭乗しています これからさる新規ディバイス治験のための会合があるのです 会合といっても本当に立ち上げなので少人数の集まりです 今日はこの会合で一日が終わりますね

でも自分の限られた時間をこのような未来に向けて投資する(消費する)ことを続けて行かないと未来は限られたものになってしまいます JavaScriptの勉強も同じ範疇のものです