2015年9月26日土曜日

CommonLisp の標準機能における繰り返し処理の一覧

参考

Common Lisp Quick Reference

Land of Lisp (書籍) : 日本語訳10章にある Loopマクロ周期表が役に立つ

使用方法については次を参照。
- Lisp入門サイト(そのうちまとめる)
- Hyperspec
- 逆引きCommonLisp の 制御構造のページ

一覧

どれぐらい役割や使い方が簡単に理解でき かの順に並べている

  • dotimes, dolist
  • map系関数 : mapcar, mapc, etc…
  • xx-if, xx-if-not 系関数 : remove-if-not, substitute-if
  • loop (永久ループ)
  • do
  • loop (複雑なマクロ)
  • tagbody と go を用いたループ

これは、、、なかった

  • foreach, each : dolist, loop
  • for : 上記のうちからデータ構造に合ったものを選ぶ
  • foreach-range : OnLisp にある mapa-b など参照
  • while : do, loop で実装, 有志のマクロなども参照

補足

  • 少なくとも上を覚えておくと、ProjectEuler, HackerRank etc… などの回答系サイトでは困らない
  • 同じことを繰り返した結果、面倒になって、OnLispに載っていたマクロを使いだすこと請け合い
  • GoogleによるCL Coding Standard で半推奨的な位置にあるためか、loopマクロをよく見かける。
  • REPLのエラー表示でマクロ展開形にtagbodyが出てくることがある。マクロは自由である。
  • 実際のコードを見てどれが繰り返し処理かを見抜くことは,,,私には少なくとも難しい。
    • APIやデータ構造の把握が先に必要。
  • 書き漏れがあったらまた記事更新する
    • もっと伝わる書き方がわかったら記事更新する

書籍のご案内

Written with StackEdit.

2015年9月13日日曜日

BloggerにMarkdownで記事を書きたいんです

Blogger に Markdownで記事を書きたいんです!!楽なんです!

大切なことなので2回書いた。

StackEdit がその欲求を かなり 満たしてくれる。

特にソースが書きやすい。Blogger のソースコード対応は実際残念

(defun tarai (x y z)
  (if (< x y)
      y
      (tarai (tarai (1- x) y z)
             (tarai (1- y) z x)
             (tarai (1- z) x y))))

うまくいったらごかっさい!

覚書。

  • いきなり公開状態になるようである。要注意。
    • (追記:2015-11-10) YAML Formatter で published: falseを指定することで非公開でアップロード可能
  • タグは当然(?)つかない。つけ方あるかも。
  • 一度アップロードして、タグ付けして、再アップロードはタグに影響なし。
    • (追記:2015-09-26) タグ消えてた。YAML Formatter でつけるのが吉
    • (追記:2015-11-10) YAML Formatter でつければ付け替えも容易
  • 冷静に考えると、新しい記事としてアップロードされるわけではないのだな
    • (追記:2015-09-26) Bloggerの投稿済みページ管理からPostID を見つけ出して指定できる
    • (追記:2015-11-10) StackEdit 経由であれば自動的にID を認識して上書きしてくれる
  • なぜはてなにしなかったのかと今は思う
  • Dropbox との相互syncとあわせると記事管理がはかどる、、、ことを期待
  • markdownで改行すると、アップロードでも改行される。これは少し期待と異なるが許容範囲。

注意点をまとめた記事を書いた。

Written with StackEdit.

2015年8月26日水曜日

ASDF にかかわる右往左往

かかずにはいられない

ASDFに対する先入観がゆえに迷う

ASDFについてかつて聞いたことがあった、yum や apt-get のようなものと思っていた
そのことを知っていたがゆえに迷った。yumや apt-getで取得したプログラムがどこにおかれているか、普通は知らないようなもので、いったいどこにあるのか、ちょっと調べただけでは出てこなかった。

なお、正確には asdf-install が実際 yum や apt-get のような役割を果たしていた
現在はQuicklisp がその役割を担っている。

Quicklispは認証つきHTTP Proxy を超えられなかった。

Quicklisp 自体は Proxyなしの環境で動作することを確認した。手軽ですばらしい。

認証付のProxyについては?無理である。公式にも(今は)出来ないと書いてある。

じゃあ作ってやるぜ!と一瞬思ったが、
誰が使うんだろう?とか、自分なんかに、とか、
とりあえずやらない方向の感情が渦巻いたのでとどまった。

そんなことよりライブラリが動いてほしかった。

公式の説明にすべて書いてあった

  • ~/common-lisp フォルダ内にライブラリをフォルダごと置く
  • フォルダ名と 中にある .asd の名前が同じになるようにする
  • 大体のライブラリは .asd が提供されている
  • 自分で作ったライブラリでも同じようにできる
と書いてある。英語で。英語で。そしてすべてそのとおりにすることで結果的に動いたのであった。

公式の情報に気づいた時点で、古いasdf-install の日本語の情報にはあたったあとであり、Quicklisp は Proxyなしで普通に使う方法がわかっていたこともあってASDF についての調査がほぼ意地になっておりWindowsでは微妙に違うね、とかASDF 3.1.5 以降では、とかXDG_DATA_PATH とかわからないキーワードに引っかかってみたりなんとなくそうらしいところにフォルダをおいてみたりQuicklispのフォルダにおいてみたり環境変数を見てみたりパスを確かめる関数を探してみたりして片っ端から失敗して結果完全に頭に血が上っており要するに

本当にそうだと気づくまでに2日かかった。

SBCLの認識するホームディレクトリを確認する方法

次のコードを実行することでわかることを知った。
(truename "~")
もっとも、実行結果で偶然わかるのであって、処理自体はエラーになる。
わからないが用は足せる。というやつである。

Lispの情報の大半は英語である!

和訳情報もあるし、日本語で有用な情報を発信される方はこれが結構多い。
そして2chのLisp関連スレは意外なことに機能しているし、
困らないんじゃないか!と思ったが、これがこまる。
2chコワイ。そもそも何を聞いたらよいかわからないという。

丁寧な解説は基本的に英語であるというのは身もふたもない事実なので、
冷静に英語を読んだほうが良い結果になりやすい。と今回の件では思った。

Windows の SBCL で ASDF を使って ライブラリを読み込む

あるいは Windows でちょっと Lisp を使いたいんだけどライブラリを読み込む方法がわからないときに役立つ可能性のある記事。なお、すべてASDFの公式に書いてある手順である。

概要

Windows上のSBCLで、ASDFを使ってライブラリをREPLに読み込む方法を確かめた。

注意事項

2015現在、プロジェクトをREPLに読み込む標準的な方法は Quicklisp(https://www.quicklisp.org/beta/)です。
Quicklispに登録されているライブラリであれば、この方法を使うよりずっと楽です。

なぜ今回このようなことをするに至ったかというと、
QuickLispが認証あり HTTP Proxy を越えることが出来なかったためです。

それはそれとして、作りかけのおれおれライブラリを常用する場合などに備えて、知っておくとよい、、、かもしれません。

この記事ではやっていないこと

.sbclrc に書き込んで自動読み込み
SBCLを停止せずに再読み込み
ソースコードの置き場所を変更する

参考リンク

バージョン情報

  • 言語環境 : SBCL 1.2.13 (Windows, x64)
  • OS : Windows7, Windows8.1

重要な事柄

SBCLにはASDF が標準添付されています。
次の手順をREPLで実施することで、ASDFの機能を有効化できます。

(require 'asdf)
; あるいは
(require "asdf")

手順


  • ライブラリのソースコードをダウンロードします
  • 自分のドキュメントフォルダ (C:\Users\<ユーザー名>\Documents)を開きます
  • common-lisp フォルダを作成します
  • ソースコードを展開します。フォルダが出来ます
    • たとえば split-sequence-1.0 というフォルダ
  • フォルダの中に (ライブラリ名).asd というファイルがあることを確認します
    • これがASDFの認識するライブラリの情報ファイルです
    • ヘッダファイルのようななにか
  • common-lisp フォルダの中にソースをフォルダごと移動します
  • フォルダ名を (ライブラリ名) になるようにします
    • split-sequence のようにする
    • .asd ファイルのライブラリ名と同じである必要があります
  • SBCLを起動している場合は、一度とめる必要があります
    • とめない方法は未調査
  • REPLで ASDF を有効化(先述のとおり)
  • (asdf:load-system "(ライブラリ名)") を実行します
    • (asdf:load-system "split-sequence")
  • ライブラリの関数その他もろもろが読み込まれてライブラリが利用可能になります

感想

出来てみれば公式に書いてあったとおりであった。そうとは知らず右往左往した。

2015年8月15日土曜日

第05期のテーマはLispにしてみよう

Lisp(また)始めました

大学生のときに勢いでLispをして現実に流されたのだが、
今回は現実にさらされているので、もう流されても大丈夫

始める前から役に立たない記事ばっかり増えそうだ、、、
心構えは「恥をさらしてみよう」

問題は、ここに書かれている方法が「唯一で正しい方法だと思い込まれる」ことぐらい、、。

Lispは、今ちょっと試して調べて分かったこととしては、
ちょっとLispがわかってくるだけで3つぐらいの書き方が思いつき
そして違いは読みやすさとデータやスコープのまとめ方と速度。
速度が違いそうという気はするが、実際は?まだわからない。

なお、言語Common Lisp で、環境は SBCL (1.2.14) です。
Clojureに興味はある。だがまずは、古臭くてべたべたに書ける世界へ。初めての方には ClojureかSchemeを学ぶことを深くお勧めします。はい。

第05期の期間情報メモ

2015/08/15 開始を宣言。

その間にしていたこと
  • ドローンはあきらめた(お金)
  • ゲームをかなりしなくなった
    • とはいえFallout4 の発売まち
  • 投資は続けているが、新しいこともなし
  • vagrantとansibleと仮想化に少し詳しくなった
    • ネットに記事があふれているので書く予定なし

2015年4月13日月曜日

さようならPresto, こんにちはChronium.

Opera というブラウザがあります。

私はOpera に広告が乗っていた時代から使っている。Opera 8 だったと思う。IE6 がくそだくそだといわれつつも最大シェアを持っている時代を通り過ぎている。私のウェブ生活にはOpera が常に隣にあった。

バージョンアップを重ねるたびに「なんか前のと違う」と思いつつ、なんだかんだで手になじんでいったOpera。私が使っていた機能は
  • どのブラウザよりも手になじんで最小限で無駄のないマウスジェスチャ。
    • FirefoxでもChromeでもジェスチャプラグインを入れて使っている
    • 最も手になじんだ操作で無駄もないのはOperaだけ
  • 便利なブックマーク機能
    • ただし Opera 9 あたりが最強だった
    • ブックマークバーを出しやすい、ツリー方式で整頓しやすい,見渡しやすい
  • 上部ブックマークバー
    • といっても一般的な機能ではある、、、はず

Operaというブラウザは、一度終わっています。

OperaはかつてPrestoという独自のウェブブラウザエンジンを開発していた。そして、他のどんなブラウザよりずっと早く多くのページを表示することができた。W3Cの仕様に完全準拠していたためにIE6向けに最適化されたページのいくつかが壊れて表示される問題があった時代もありましたね、、、。そしてそれは v12.19 というバージョンで終わった。いつだったか。2年以上前だった気がする。そして、Webkit (Chromeと共通)エンジンに移行することを発表した。

OperaがWebkit(Chronium) エンジンに移行したとき、ひとまず試した。ところが、そのときのOperaは驚くほどChromeで、Chrome以外の何者でもなく、正直言って存在価値がなかった。詳細はWikipediaのOperaのページで。私はブックマーク機能を失うのがいやで移行しなかったし、その後の以降を検討しなかった。

一方で、どうしようもない問題も抱えていた
  • v12.19 (Presto最終版)は、WOW32モードで一定条件を満たすとOSごと落ちる
    • いまどき珍しいソフト起因のブルスク
    • 条件は:Operaでメモリを4GBまで使った状態で動画を再生する(Youtubeなど)こと
    • FlashPlayerにも一定原因はあるんだろうと思う
    • 動画を自動再生するページを開くだけでOSごと落ちるので大変気を使った
  • そもそもアップデートが止まっている。
  • いくつかのサイト(といっても主にYahoo)がサポート対象外とした
そして、さっきだ。決定的な出来事が発生した。調べ物のペースが乗ってきたときに、予期せず動画の含まれるページを踏んだ。プロバイダとかなんとかの宣伝動画だったんだと思う。そして、落ちた。ブルスクになった。賢者タイムでもここまで残念な気分にはなるまい。上司に今まで必死に作ったものの仕様をすべて否定されひっくり返されたときの悲惨な気分がよみがえってきた。、、、さすがにそこまでひどくはなかった。しかしだ。もうだめだ。これはさすがにもうだめだ。残念だが、お別れの時がきたのだ。

さようならPresto, こんにちは Chronium

かくして、Opera 28 をインストールした。案の定「貧弱なマウスジェスチャのついたChrome」に成り下がっていた。ちょっと操作をしてみて、失ったものに気づき、苛立ちを覚えた。それを捨てることに下Opera社を恨んだ。しかし、仕方ないのだ。お別れは済ませたのだ。振り返るわけにはいかないのだ。

幸い、我慢強き先人たちが拡張機能を切り開いてくださっていた。Chrome ベースなのでそうではないかと思ったが、実際あった。ありがたかった。

私にとって大体 v12.19 に近づけるためにしたことについて記す。
  • 失われたホイールジェスチャ,リンクジェスチャの復活 : MoreGestures
  • 殺意が芽生えるほど使いづらいブックマーク管理を多少マシに:Bookmarks
  • 幸いなことに、ブックマークとセッションは v12.19 のものを引き継ぐことが出来た
    • ただしセッションはブックマーク扱いである
残念ながらブックマーク管理機能は元には戻らなかったし、まだ不満が残っている。しかし、最低限度はクリアした。旧来の機能を捨てるという選択をしたOperaには許せない気持ちがいっぱいだが、それでもまだOperaというブランドとわずかに残る優位性を捨てずにがんばっていることについては、畏敬の念をもつ。だから私は結局Operaを使う。拡張開発者の裾野も広がっているのだろう。プラグインの作者様には無条件で感謝する。

悪いことばかりではない。Evernote Web Clipper がOpera でも使えるようになったのだ。Chrome に擦り寄ることもすべて悪いことではないのだ。(ちなみに Firefoxプラグインは使い物にならない。実体験済み)

そして私はまた悪くなった操作性に慣れ、失われた機能を忘れながら、Operaを使うのである


2015年3月18日水曜日

今使っている iPad のアプリ

前に iPad で入れたアプリのことを書いていた

そう。なんか微妙にアクセスがあるんだこれが。ひょっとして検索間違って吸っちゃってる?単に自分の好みを紹介しただけのつもりが、、、とも思うが、ただこのブログの趣旨が単に紹介するだけだったりとりあえず思ったら書いてみるだけのページだったりするのでその傾向は変わる予定がない

しかしまあ、せっかく時間がたったことだし、Before-After で今も生きているアプリとその理由についてメモをとっておきたいと。思ったわけだ

使わなくなったアプリ

  • ぷよぷよアプリ
    • Androidからアカウントを移動したが、やめることにした
    • ソシャゲ卒業、課金分はまだ若干残ってるけど、やめられて生活好転したのでよし
  • カルカソンヌ
    • とかいいつつ思い出したらプレイする。外出中の時間つぶしとか。いいゲームです。
  • その他ゲームアプリ全般
    • うん。やっぱり一過性だったね。実際新しいゲームもやってるしね。
    • 一番長生きしたのは音ゲー
      • Jubeat, GrooveCoaster, ぽっぷんリズミン
  • 体重コントロールアプリ
    • 体重に気を配らなくなったんやな、、、実際太った
  • クックパッド
    • 料理しなくなったなあ、、、orz、、、コンビニ万歳
    • 仕事が忙しくなると料理どころではなくなる法則
    • また料理気分が盛り上がってきたらお世話になるだろう。

新しく使っているアプリ

  • Keynote(プレゼン作成)
    • 割ときれいな図つきのメモが取れるという点に注目
    • プレゼン作成の練習にも
  • Forge (Adonit)
    • Adonit Jot Pro を実は買っていて、その流れで
    • ”前に書いた絵”からフォークできて、その流れを残せるという点が面白い
    • いくつかの案を残しておいて考慮。この発想が楽しい
    • プロジェクト1件のみであれば無料、わずか400円で無制限(?)にプロジェクト作成できる
  • iMindMap HD (ThinkBuzan Limited)
    • マインドマップ信者必見
    • 基本無料! マップ数も基本的に制限はない
    • ただし、無料だと「アプリケーションからまったく出せない」
    • 月額 300, 年額 2100 のサブスクリプション方式
  • Everclip
    • Evernote

なんだかんだでいまだに使っているアプリ

  • Wunderlist
    • ToDo管理はこれで十分。
    • あなたもお気に入りのToDoリストアプリを見つけると幸せになれる(布教)
    • 一時期リスト移動(Android版で重宝)がなくてなきそうだったが、今は入っている
  • Dropbox
    • 何がすごいって Windows, Android, iOS のすべてで使える
  • Kindle
    • 紙の書籍よりKindleのほうが入手性が高いものがいくつかありましてね、、、
    • 値段についてはいろいろ考え出すと悩ましいところ。安いとも高いとも。
    • なお、サービス停止が一番怖い
  • Evernote
    • iPad との連携の結果「これでいいじゃん」状態に。
    • 書いてない。読んでる。
  • Penultimate
    • Evernoteの「お絵かきメモ」アプリ
    • Evernoteのプレミアムアカウントを1ヶ月だけ購入することになった遠因
    • 画像でそのまま残せるという手軽さ
    • なお、文字がきれいにかけていれば検索も出来る模様
      • 自分はうまく動いたためしがない
    • なんで Forgeにしないのか自分。
  • BookRemark
    • 蔵書管理は”していない”むしろ”売ったり捨てた本の記録”になっている
  • SideBooks
    • Zip ! Zip ! Dropboxとのあわせ技で。
    • 何を見ているかについてはあえて言わないという方向で

最近遊んだゲーム

  • Alto's Adventure
    • スノボをテーマにしたアクションゲー?
    • 知っている人は「Route 60」というゲームに似ている?
    • タップしてジャンプする、長押しして空中回転
    • グラフィックがかっこいい、天候要素がある、ミニマムにそぎ落としたアート?
    • 岩をジャンプしてよける、、、レールジャンプ、、、谷を超える、、、
  • RETRY
    • 飛行機をタップすると前進
    • 前進の仕方が独特
    • タップゲーだがパズルゲー要素が強い
    • どっとまみれのアートワークがかわいらしいが、レベルはハード
    • うまくいかなくてなんかはまりだすタイプのゲーム
    • 課金要素については失敗している感
  • Help Me Fly
    • パズルゲー
    • 飛行機で飛ぶのかと思ったらそんなことはなかった
    • 電池と飛行機の間を、電気を通すピースでつないで電力をつなげる
なお、App Store のトップで紹介されていたゲームしか遊んでいない模様

ちなみに Windows 8 ストアに関して一言

Windows 8.1搭載 のパソコンかったんですよー、Hyper-V も使えるかと思いましてねー。Pro版ですよー。やー、デスクトップから始まるんですねー!実際求めているものはデスクトップアプリがうごくことですよねー!

あ、でも、あのころからもう時間もたったしアプストアもかなりましになったんじゃないかな!ゲームとか,アプリとかねー!

・・・・まるで成長していない・・・・

『トップ画面に出てくるアプリが、依然見たときから5割と変わっていない』そんな環境誰が使うかという話。完全に見放されてますわ、、、。

うん。こいつを私用のタブレット専用PCとして使うのは「全面的にあきらめたほうが良い」と思う。すぐ飽きる。業務用とかならともかくね。

Windows 10 には期待してますぜぇ(遠い目)
あ、でもゲームは買いやすくなったみたいだね(遠い目)