meseta035
meseta035
名称未設定
10 posts
Don't wanna be here? Send us removal request.
meseta035 · 9 years ago
Text
First step of learning of functional programming
https://speakerdeck.com/hirokikaneko035/first-step-of-learning-of-functional-programming
0 notes
meseta035 · 9 years ago
Photo
Tumblr media
副作用使用罪だ!
0 notes
meseta035 · 9 years ago
Text
Windows向けEmacsの環境設定
21世紀になって16年は過ぎようとしているのに相変わらずのEmacs/vi宗教戦争を見るにつけコイツら本当に進歩が無いなというか若い世代もこの戦争に加担しているようで嘆かわしい。いい加減そんな古生代のエディタなんぞは老人の趣味にしておいて、若者はIntelliJとかAtomとかを使えばいいのに。
Emacsオリジナル作者の一人であるジェームス・ゴスリングが「もうEmacsを使うのを止めてNetBeansを使ってくれ」というような発言をしたのを以前見かけ、当時Sunに席をおいていた同氏の立場を感じないでもない発言ですけど、30年経ってもvi/Emacsが世界最高のエディタだとしたらソフトウェアの世界はこの30年間、何も進歩が無かったのか。
しかし日本の戦況を見るにつけviが優勢なのは、EmacsLispで設定を書かなければならないからだと睨んでいます。Lispは括弧だらけで不気味だと。しかし修練を積むとあのカッコは視界から消え去るのですけど、ユーザー全員にそこまで強要するのは酷でしょう。
EmacsがWindowsでまともに使える環境が無いからではないでしょうか。いやいや「Windowsでまともに動くEmacs」ありますよ。NTEmacsがそれです。 https://github.com/chuntaro/NTEmacs64.git
設定ファイルを置くのに、まずWindowsのホームディレクトリってどこだと思ったので調べたことをメモします。
環境変数HOMEの設定 コントロールパネル→システム→システム詳細設定→環境変数 名前:HOME パス:c:\Users\YourName\Documents
emacs.d および init.el の設定 HOMEディレクトリ(ここでは c:\Users\YourName\Documents に設定した)に.emacs.dフォルダを作成、その中にinit.elファイルを保存し、設定ファイルを書く
0 notes
meseta035 · 9 years ago
Photo
Tumblr media
Dart in Action日本語版中古を500円程度で購入。Dartいいよ。Java / C# プログラマーなら違和感なく習得できるのになぜ流行らない。Chromeにランタイムが乗らなかったのが致命的か。Goofleは良いものに関しては独善的になってもいいと思う。少なくともJavaScriptなんかで大規模開発するよりはマシ。
0 notes
meseta035 · 9 years ago
Text
関数型についての認識
Common Lisp(CL)を本格的にいじり始めて数ヶ月、Emacs + SLIMEのキーバインディングも指に馴染んできて、ようやく「関数型プログラミングとは何か」がおぼろげながら見えてきました。しかし関数型プログラミングを学習するにあたって選択した言語が古典たるCLで本当に良かった。これがJava8ならその複雑怪奇な構文に負けてしまい、学習は挫折していたと思います。Lispもカッコだらけの構文じゃなかった式が殆どの人をしてLispを敬遠せしめる原因なのですけど、コードを読みまくっていると、例の「カッコなんて飾りです」というかカッコの中身にのみ意識が集中し、カッコが視界から消える「神秘体験」をしたのは、これはLisp初心者から中級者になったと考えて良いのでしょうか。
そして関数型プログラミングとは何かというと、現時点での僕の認識によると「処理を小さな関数単位に分けてしまい、その関数の入力は引数からのみ取得しグローバル変数を使わない。個々の関数に対してテストが通ればその関数はこちらの意図したとおりに動くことが保証されており、小さな関数を組み立てて一つの大きな処理を構築してゆくプログラミングのスタイル」ということです。
しかし、何もこれは新しい考え方ではなくコードを何万行も書いたことのある人なら誰もがやっている事であり、オブジェクト指向プログラミングだって部品を疎結合にするという点では目的は同じでしょう。
0 notes
meseta035 · 9 years ago
Text
iMac (Late 2012) HDDモデルに外付けSDDを追加し手動でFusionDriveにする
Amazonの年末タイムセールにてSSD 250GBが8000円程度で買えてしまいました。この機会に、SSD + HDDのFusion Driveを作り1万円でiMac (Late 2012)を高速化させます。高速化の効果は絶大で、Safariの起動が1バウンドと言えば分かるでしょうか。これであと数年は使えると思います。El Capitanは最近のハードウェア仕様つまり二次記憶装置としてのSSDを前提としているのでしょう、どうもHDDで動作させると遅くてストレスが溜まります。
Webで検索した所、El Capitanでの手動Fusion Drive事例が無かったので手順のみメモします。基本的にはYosemiteと同じ手順です。 Fusion Drive化をしなくてもSSDにEl Capitanをインストールし、写真などの大容量データは内蔵HDDに保存すれば高速化の恩恵は十分ですが、今回はFusion Driveを試してみたかったので、敢えて無保証の手作業を行いました。 気合の入っている人はiMacを開けてSSDを換装しているようですが当然無保証になりますし、手動Fusion Drive化もハードウェア的な作業は無いものの、誤ってデータを消しても誰も面倒を見てくれません。At your own risk(この英語と日本語のいわゆる“自己責任”は別物だと思う)です。論理ドライブ、物理ドライブと言われて意味の分からない人は手を出すべきではないでしょう。
用意するもの
iMac (Late 2012)
USBメモリ 32GB(8GB以上推奨)
Samsung SSD 250GB 850 EVO
ORICO 2.5インチ HDD/SSD 外付け ドライブ ケース
外付けHDD 2TB(TimeMachine用)
Mac OS X v10.11 “El Capitan”
事前準備
現状のデータをTimeMachineで外付けHDDにバックアップする
後でFusion Driveにデータをリストアします
USBメモリにEl Capitanを入れる
Mac App StoreからEl Capitanをダウンロードする
/Applications 配下のEl CapitanインストーラをUSBメモリにコピーする
Fusion Driveの作成
Mac起動時にoptionキーを押すと起動ディスクを選べる。USBメモリから起動を選ぶ
ブートメニューのメニューバーからユーティリティ→ターミナルを選択
ターミナル画面にてdiskutil listと入力し、Macの二次記憶装置リストを表示する。
$ diskutil list /dev/disk0 (internal, physical): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *1.0 TB disk0 1: EFI EFI 209.7 MB disk0s1 2: Apple_CoreStorage FusionDrive 999.3 GB disk0s2 3: Apple_Boot Recovery HD 650.0 MB disk0s3 /dev/disk1 (external, physical): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *250.1 GB disk1 1: EFI EFI 209.7 MB disk1s1 2: Apple_CoreStorage FusionDrive 249.7 GB disk1s2 3: Apple_Boot Boot OS X 134.2 MB disk1s3
この時、HDDとSSDのディスク番号を確認します。環境依存なので必ず使用環境のディスク番号を確認して下さい。 僕の場合はdisk 0がHDD、disk 1がSSDでした。ここで表示される名前は、いわゆるボリューム名ではない為、どれがどの二次記憶装置なのか判断が難しいと思います。各二次記憶装置の容量を知っている方はSIZEで確認できることと、起動ディスクとして認識している場合はEFIと表示されるので、一応の目安にはなるかと思います。間違ってUSBメモリをFusion Driveにしないで下さい。
下記コマンドでHDDとSSDをひとつの論理ドライブとして統合する:
$ diskutil cs create “” diskX diskY
は任意。FusionDriveとでも入れる。diskXとdiskYはHDDとSDDのdiskutilにおける番号。disk0 disk1のように記述する。
実行結果のUUID部分をコピーする(環境依存)
Core Storage LV UUID: 8F04DC9F-8B33-4D5F-97B7-E91EF80DD982
Fusion Driveを作成する
$ diskutil coreStorage createVolume uuid jhfs+ “パーティション名” 100%
uuid部分にはcs createした時のUUIDをペースト、パーティション名は任意。
El Capitanのインストール
ターミナルを終了し、外付けHDDからEl Capitanとバックアップされた環境を復元する。
参考: iMacを疑似Fusion Drive化!こりゃはやい!
0 notes
meseta035 · 10 years ago
Text
Common Lisp独習の環境構築
書籍
実践Common Lisp
原題のPractical(実践)をそのまま訳したのが悪かった。この本のタイトルが「入門Common Lisp」でなかった為に僕は怖気づいて読むことが出来なかった事をことに後悔しております。 Google Booksでは、無料でページの半分くらいが歯抜けながらも読める。オンラインで読み、気に入れば書籍購入を。入門書、最初の一冊としては最高。原著者と訳者に感謝。
実行環境、IDE
Lispbox
いちから環境を構築しようとして、慣れないEmacsに挫折するぐらいなら多少バージョンは古くてもすぐ動く設定でEmacs + SLIME + Clozure CL が入っているパッケージから始めよう。Windows環境では多分いちばん簡単にCommon Lisp開発環境が手に入る筈。Macはバージョンが古いEmacsが最初から入っているけど、まず動かさなければ始まらない。
Emacsについては、僕は'90年代後半にASCII刊「入門Mule」を読んで、Linuxで動かして多分コピー&ペーストぐらいの操作で「やってられるか」となり疎遠になったのだけど、GUI環境で動くEmacsを使ってその辺りはごまかし、またはcommand-x,c,vが使えるMac環境なら、あえてEmacsの「正式の作法」を覚えなくてもいいんじゃないか。この辺、Controlキーを多用するWindowsは、同じくControlキー多用文化のUNIXとキーバインディングが被ってしまい、損です。
Emacsから M-x slime でSLIMEなるLisp IDEを起動したら、プロンプトから適当に足し算でもすれば動作確認完了。
CL-USER> (+ 1 2) ;=>3
Clozure CL.app
Emacsの操作に躓いてしまうと、肝心のCommon Lisp入門前に挫折してしまう事態になりかねません。Mac OS Xユーザー限定ですが、GUIから操作できるClozure CLを使って入門するのも賢い方法です。 僕は実際に触ったことがありませんが、商用Common Lisp処理系もおおむねローカルOSのGUI環境に対応しているようで、Emacsが分からなければLispを語るな、という感じではない。
1 note · View note
meseta035 · 10 years ago
Text
普段からセキュリティ、セキュリティと言って毎日Windows UpdateとFlashPlayerの脆弱性に目を光らせ、何かパッチがあたると欠けた自身の心が満たされるとでも思っているのかアップデートにご執心で仕事をしない奴に限って個人情報がだだ漏れになるスマホを使っているのだから笑止なのである。
0 notes
meseta035 · 10 years ago
Text
香港カンフー映画などを見る楽しみは、僕にとっては中国武術の多様さです。まず北派と南派があり、その中で門派があり、門派ごとの門派の武館が街にあって師匠の下で月謝を払いながら生徒が修業をする様子が、少なくとも映画の中には描かれています(実際に見たことがないので)。
物語や映像の技術としては今、鑑賞には耐えないかもしれない初期のジャッキー・チェン映画を見ていると、老師から奥義の書かれた書を渡された主人公が強くなり、ライバルを倒して終わり、みたいな筋書きがあり、なんというか自分が強くなるアイテムを手に入れたから攻撃力のポイントが上がり、みたいなビデオゲームのようで実際にはそんな事は無いと思いつつも楽しいものです。
そんな映画の中では、自分が習っている流派こそ最強だと信じる門下生が他流派の武館へ道場破りに行くようなシーンもあり、「誰(個人)が強い」ではなく「何(流派)が強い」と思い込んでしまうあたりレッテル貼りに他ならないのですが、流派◯◯が最強、とか、老師から奥義の書を渡され強くなる的な分かりやすい世界にはオトコノコを熱くさせるものがあります。それは凡人がスーパーマンになれる映画の世界の出世物語への憧れです。
これってプログラミング言語でもよくある話なのでは、と思いました。PHPをバカにしたりなどは枚挙に暇がなく、優れたプログラマーが優れていない(とされる)言語でプログラミングをしたら、それは優れたソフトウェアになるのか否かという問題に関しては、僕は「何が」ではなく「誰が」こそが大切だと信じています。だって凡人が最強(とされる)流派を学んだら、その人は「最強」になれるのか?という問いがあり、どうも、そうではない気がするのです。
どのプログラミング言語やらエディタが最強といった議論は、不毛かつ決着を見ない宗教戦争ですがたまには他者と争わず、自分で最強と思う言語を紐解いてみるのも楽しいものです。その際は決して他人にそれを自慢してはいけません。
Happy Hacking KeyboardでEmacsを操りLispコードを書く。何か古典文学に触れているような味わい。
Lispは”凡人”プログラマにも掛け算的な能力を使えるよう設計されたような言語です。Lisp的な言語は過激にパワフルなので経営者に恐れられています。レベル2のプログラマはLispやHaskellのような言語が大好きですが、レベル3のプログラマになると、このような言語自体を開発してしまいます。 http://postd.cc/the-shodan-programmer/
0 notes
meseta035 · 10 years ago
Text
心の習慣
“Perlのオブジェクトシステムのmanページにはこう書いてある。 「今必要なのは、部屋から出て、オブジェクト指向設計の方法論についての本を買いに行き、半年くらいその本で頭を叩き続けることだ」” 実践Common Lisp / Peter Seibel
オブジェクト指向?そんなのもあったかな、というのが、趣味プログラマー歴四半世紀で職業プログラマー10年オーバーの正直な感想なのですけど「私はオブジェクト指向が分かる/分からない」といったオブジェクト指向論争、2010年代だとそれが関数型プログラミング論争になるのでしょうが、説明があまりに抽象的だと一体それが設計・実装にどのような影響を及ぼすのか想像がつかずに挫折してしまう事もあるかと思います。犬クラスの親が哺乳類クラスだと言われても、それの一体何が嬉しいのか分かりませんし、2010年代の初学者にしてみればGoに見られるクラス不要な設計だとか、継承は差分プログラミングの為に必要だと言われ、分かった気になり、後日別の技術者が書いたブログによると「オブジェクト指向、継承の本質は差分プログラミングではない」という悟った一節を見つけ、ますます混乱するかと。
関数プログラミングにしても、多くの説明で関数がファーストクラスで副作用ががどうとか、高階関数がカリー化がどうという説明しのみで、果たしてそれがどのようなメリットをもたらすのか、うまい説明をした文章にはお目にかかれませんでした。まるでオブジェクト指向の説明の、よくある「継承、カプセル化、多態性」とお題目を唱えているのと同じであり、1990年頃のオブジェクト指向論争と同じく、関数型プログラミング論争が���きてしまうのは、、考えがあまりに抽象的で、キーワードのみ羅列して要約した所で実感として理解できないからです。
昔々、CのポインタはC初学者にとって理解することが困難とされていた事があり、文法的にアンパサンドで渡して関数の引数ではアスタリスクで受け取れと言われても、それの何が嬉しいのか書かなければ実感として理解できず、僕の場合は、雑誌のC入門記事に「関数に渡す変数のサイズが一定になるから嬉しいのだ。ポインタなら4byte(32bit CPUの場合)でどのような変数も渡せるが、これが数MBの画像を直接渡したとしたら、データコピーに掛かるコストは如何ほどか」といった意味の文章を見つけ、その有用性を理解したのです。
オブジェクト指向も関数型も、それが全く新しい機能ではなく、考え方、心の習慣であると思っているので、自分の頭がその考え方に慣れるまではひたすら「頭を叩き続ける」必要があります。もちろんあなたが1を聞いて10を知るタイプの天才でなければ、優秀な教科書に出会うことも必須です。
1 note · View note