リスト遊び-Emacsで遊ぶLispの世界-(途中)
完全に現実逃避的にLispの本を読んでいます。
とはいえ、基本的にEmacsユーザなので多かれ少なかれ役には立つと思うのですが...
リスト遊び―Emacsで学ぶLispの世界 (ASCII SOFTWARE SCIENCE Language)
- 作者: 山本和彦
- 出版社/メーカー: アスキー
- 発売日: 2000/05
- メディア: 単行本
- 購入: 2人 クリック: 76回
- この商品を含むブログ (44件) を見る
何となく学習したことをメモって行きます。
第一章
階乗を求めるプログラム
(defun factorial (n) (cond ((zerop n) 1) (t (* n (factorial (1- n))))))
ここで、M-:でミニバッファを開く
すると、
Eval:
と出るので
Eval:(factorial 5)
でRETで5の階乗がバッファに出力.
C-x C-eを押すとミニバッファに出力
定義した関数をミニバッファ内で逐一確認しながら出力が出来る
M-x lisp-interaction-mode
とemacsのミニバッファ内でC-jを押すと対話的に実行が可能になる
(Lisp Interaction Mode )
第二章
true -> t
false -> nil
・Lispのデータ構造はアトムとセル
chrome-extensionのソースを見る
忘れそうなのでメモ
(Windowsの場合 http://d.hatena.ne.jp/wata_d/20110616/1308204203)
以前はchromeの拡張のソースは、chrome拡張のここのページへ行き、
chromeの拡張のアンカーを右クリック->リンク先を別名でzipにして保存、みたいな感じで中身を見ることが出来た。
しかしながら、chromeWebStoreに仕様が変更され、どうもローカルにソースを落とすことは以前のようなやり方で出来なくなってるようである。
ちょっとググったりしてみたところ以下の方法で出来た。
1)chrome Extensionの保存場所
Terminalから以下のディレクトリで探せる
/Users/(ユーザ名)/Library/Application Support/Google/Chrome/Default/Extensions
の中にエクステンション毎のディレクトリが入っている。
2)個々のソースを見る
その中で色々ランダムにIDが振られていてワケが分からないが、
拡張機能のページ(ツール->オプション)
そこで左の▲マークをクリック
IDが表示されるので先ほどのExtensionのディレクトリから見ることが出来る
node.jsを入れてる際にエラーが出てハマった
node.jsをnvmや実際にパッケージを落としてきてmakeすると以下のようなエラーが出た
Build failed: -> task failed (err #1): {task: cxx_link node_main_5.o,node_5.o,node_buffer_5.o,node_javascript_5.o,node_extensions_5.o,node_http_parser_5.o,node_constants_5.o,node_file_5.o,node_script_5.o,node_os_5.o,node_dtrace_5.o,node_string_5.o,node_zlib_5.o,timer_wrap_5.o,handle_wrap_5.o,stream_wrap_5.o,tcp_wrap_5.o,udp_wrap_5.o,pipe_wrap_5.o,cares_wrap_5.o,tty_wrap_5.o,fs_event_wrap_5.o,process_wrap_5.o,v8_typed_array_5.o,node_signal_watcher_5.o,node_stat_watcher_5.o,node_io_watcher_5.o,platform_darwin_5.o,node_crypto_5.o,http_parser_3.o -> node}
で、最初の方に以下のようなメッセージが出てきてたので、何かしらライブラリが足りないのかな、
と思っていた
Checking for program g++ or c++ : /Developer/usr/bin/g++ Checking for program cpp : /Developer/usr/bin/cpp Checking for program ar : /Developer/usr/bin/ar Checking for program ranlib : /Developer/usr/bin/ranlib Checking for g++ : ok Checking for program gcc or cc : /Developer/usr/bin/gcc Checking for gcc : ok Checking for library dl : yes Checking for openssl : yes Checking for library util : yes Checking for library rt : not found <- Checking for fdatasync(2) with c++ : no <-
結論から言うと、
これらのライブラリは自分の場合には関係がなく、opensslのversionの問題だった
自分の場合で解決したのは
1)Macportsのversionを上げる
2)Macportsでインストールしたものを全てアンインストール
3)brewでopensslで入れる※恐らくだけど、node.jsをビルドする時に使ったopensslのバージョンがMacportsで入れた古いものと結びついてしまっていたようである
http://dolias.jugem.jp/?eid=581
こういった事例があるので、opensslが原因になる場合があるようだった。
自分の場合はMacportsで入れたopensslのバージョンが古いものだったらしい
自分のマシンはOSがLeopardの時に買ったもので、SnowLeopardに上げたときに
portコマンドが変なエラーを吐いていて、かつhomebrewが流行ってたっぽいし、インストールも簡単だったので、放置してしまっていた。
具体的な手順としては、
1)Macportsの新しいバージョンのインストール
http://distfiles.macports.org/MacPorts/
ここにGUIでも入るのがあるからこれの方が楽だと思う
2)Macportsで入れたパッケージを全てアンインストール
$sudo port -f uninstall installed
3)brewで新しくopensslを入れなおす
$ brew install openssl
その後
$nvm install v0.6.0
とかやれば入ると思う。
自分のようにLeopardからSnowLeopardにアップグレードしてなんにもしてない人はこういう場合で解決するかもしれない。
セレクトボックス最適化テンプレ
PCサイトをスマートフォンに最適化するときに、PC版ではボタンだったものをそのままベタッと
貼ると、画面が小さい故にボタンの押し間違えが起こってしまう。
ましてタッチパネルの性能がイマイチなAndroidはそれが頻繁に起こりうると思う。
したがって個人的にセレクトボックスが良いかな、と思っている。
(iOSはかっこよく整形してくれるし、Androidでもそこまで挙動の違いは無いから)
以下のようにすれば選択したオプションのvalueなりidなりを取ってきて
新しいWindowを開けたり出来る。リンクに飛ばしたい場合はlocation.hrefとかで。
html
<form id="test"> <select id="hoge"> <option>image_harady</option> </select> </form>
var elm = document.getElementById("hoge"); for(var i=0;i<5;i++){ var opt = document.createElement("option"); var id = i; var value = i; var text = i + "_test"; opt.id = id; opt.value = value; opt.text = text; elm.options[i+1] = opt; } function newWin(){ var urlFlagment = elm.value; window.open("http://" + urlFlagment);//ここは任意のURLを指定する }; elm.addEventListener("change", newWin, false);
これでセレクトボックスのオプションが変わったときに
リンク先に飛んだりする。
参考:画像ハラディ
http://wikiwiki.jp/domingo/?%B2%E8%C1%FC%A5%CF%A5%E9%A5%C7%A5%A3
git + dropboxでWEB開発環境を整える(書き途中)
今回の作業に至った動機
①シコシコscpでディレクトリを/var/www/とかでやるのがいい加減だるくなってきた。だいたい最新のソースがどれなのか分からなくなる
②sshでhttp上で見るようにVPSで編集してたら、頻繁にsshのセッションが切れる。
③何よりVPSではviしか使えない。emacs使うと表示がおかしくなる(普段はemacs使ってる)
そんな時、先輩に「Dropboxとgitでソースを管理するのがいい」と言われたので、やってみる。
githubは何となく使ってたが、CUI系のGitはあんまり使ったこと無いので、ググリながら作業してみる。
VPS:CentOS(以下VPS)
ローカル:Mac OSX(以下Mac)
手順としては、
①VPSとMacにDropboxをインストール
②MacのDropboxのディレクトリの中にリポジトリを作成、Macの/Library/Webserver/Documentsなどのドキュメントルートにディレクトリをcloneする
③必要に応じてpushとかpullとかすればいちいちscpとか使わなくても生きているのが辛くない、はず。
MacにはDropboxは勿論入れてあるので、VPSのCUI上で動くDropboxをインストールから始める。
参考:
id:deeekiさんのエントリを参考にさせていただいた
$wget http://www.python.org/ftp/python/2.7.1/Python-2.7.1.tgz $tar xvzf Python-2.7.1.tgz $cd Python-2.7.1 $./configure $make $sudo make install
上のエントリにも書いてある通り、/usr/local/bin/と/usr/local/lib/にインストールされるので、
pythonって打って出なかったら、ここ
http://goo.gl/uc7Skでも見ながらパスを通しましょう
$cd $.dropbox-dist/dropboxd Please visit (なんかURL) to link this machine.
URLが出てくるので、そこにアクセスして自分が普段使っているDropboxのアカウントのパスワードを入れる。
jQuery mobileでなんか作ってたらAndroidで変なエラー吐いた
iphoneの実機でフォーム
<input type = "number">
みたいなフォームにアクセス出来ないとかで困った。
さらに追い打ちをかけるようにAndroid実機orエミュレータで実証してみたら、
下記のようなエラーを吐いていた。
それっぽい情報は以下のようなものがあった。
http://www.google.com/support/forum/p/android/thread?tid=573855a87f8a57c8&hl=en
でもキャッシュを消したり、GPSをオフにしたり、って完全にユーザサイドでしか出来ないよね
ちょいちょい情報を漁ってみるけどそれらしいのは無さそうであるので、
android用に別のページを用意したほうがいいかもしれない。