kiyoka日記。OldType、Sumibi.org、日々の出来事など。
ネコ好きならみんな知ってる『まこ』ちゃんの写真集。
まこという名の不思議顔の猫 : 前田 敬子,岡 優太郎
そこで、この写真集に収録されている写真を、特大パネルで見ることができた。
なんかうちの『ささみ』に似ているので親近感がわいた。
うちのペルシャ猫『ささみ』。まこにちょっと似てる?
ついでに、日本中の猫写真集が全て置いてあるんじゃないかというコーナーがあって、衝動買いしてしまった。
すごいすごいとはいろんなブログで読んでいたけど、これは本当にすごいわ。
いままでバッファを切りかえる際、バッファ一覧を C-xC-b で出して C-xC-o してバッファ一覧からインクリメンタル検索していたのが、
これは、Emacsの標準機能になるのも時間の問題だと思う。
ちなみに、私の設定はこんな感じ。これでどんな状態からでも C-;でanythingが起動するぞ。
(require 'anything-config)
(setq anything-sources (list anything-c-source-buffers
anything-c-source-bookmarks
;; anything-c-source-recentf
anything-c-source-file-name-history
anything-c-source-locate))
(define-key anything-map (kbd "C-p") 'anything-previous-line)
(define-key anything-map (kbd "C-n") 'anything-next-line)
(define-key anything-map (kbd "C-v") 'anything-next-source)
(define-key anything-map (kbd "M-v") 'anything-previous-source)
(global-set-key (kbd "C-;") 'anything)
(anything-iswitchb-setup)
おもてなしの経営学 アップルがソニーを超えた理由: 中島 聡
かなりの部分、ブログからの記事と対談が占めるが、全体として一貫して『おもてなし』の重要性についての話が綴られている。
中島さんのブログにUser Experienceに対する日本語が思い浮かばないと書いたところ、次のようなコメントが入ったそうだ。
User Experienceは『おもてなし』だと思っています。
私も、この本の『おもてなし』がこれからの時代に成功するプロダクトの要になるという意見には、賛成。
でも簡単に真似できないのが、この『おもてなし』であることも確か。
YouTubeにも関連動画がある。こちらも面白い。
行ごとのコミッターもアイコン表示されるようになったよ。
使い方が簡単なのと、OldTypeで使っているPrototype.jsとscript.aculo.usをベースにしているので選定した。
また、それら二つのソフトウェアとのライセンスの相性もいい。(ちなみに、ライセンスはPrototype.jsらと同じ)
ありとあらゆる場所をツールチップにしようとしているが、皆こういうライブラリを使って楽をしてたんだな。
My Job Went To India オフショア時代のソフトウェア開発者サバイバルガイド
タイトルからすると、もっと危機感を煽る本だと思ったが、そんな事はない。
でも、ベンチャー気質の人にはちょっと物足りないだろうと思う。
梅田望夫のように『これから、ベンチャーや個人の力が強くなる』というような未来の話ではなく、現在の多数の人に当てはまる内容になっている。
なので、それなりに大きな組織でプログラマとして働いている人は向いているだろう。
読んだ後のインパクトは強くないが、まあ納得感はある。
未来はもっと激しく変化するんじゃないかと思っているので、それに答え切れてない。
多いと言っても固定IP代 x 2倍程度だが、いままで運用経費とトントンだったのに比べると大幅な進歩だと言える。
以下、psvn_client.cppのクラス定義部分の引用。
void pysvn_client::init_type()
behaviors().name("Client");
behaviors().doc( pysvn_client_doc );
behaviors().supportGetattr();
behaviors().supportSetattr();
add_keyword_method("add", &pysvn_client::cmd_add, pysvn_client_add_doc );
add_keyword_method("annotate", &pysvn_client::cmd_annotate, pysvn_client_annotate_doc );
add_keyword_method("cat", &pysvn_client::cmd_cat, pysvn_client_cat_doc );
add_keyword_method("checkin", &pysvn_client::cmd_checkin, pysvn_client_checkin_doc );
add_keyword_method("checkout", &pysvn_client::cmd_checkout, pysvn_client_checkout_doc );
add_keyword_method("cleanup", &pysvn_client::cmd_cleanup, pysvn_client_cleanup_doc );
add_keyword_method("copy", &pysvn_client::cmd_copy, pysvn_client_copy_doc );
add_keyword_method("diff", &pysvn_client::cmd_diff, pysvn_client_diff_doc );
#ifdef PYSVN_HAS_CLIENT_DIFF_PEG
add_keyword_method("diff_peg", &pysvn_client::cmd_diff_peg, pysvn_client_diff_peg_doc );
#if defined( PYSVN_HAS_CLIENT_DIFF_SUMMARIZE )
add_keyword_method("diff_summarize", &pysvn_client::cmd_diff_summarize, pysvn_client_diff_summarize_doc );
add_keyword_method("diff_summarize_peg", &pysvn_client::cmd_diff_summarize_peg, pysvn_client_diff_summarize_peg_doc );
add_keyword_method("export", &pysvn_client::cmd_export, pysvn_client_export_doc );
#if defined( PYSVN_HAS_WC_ADM_DIR )
add_keyword_method("get_adm_dir", &pysvn_client::get_adm_dir, pysvn_client_get_adm_dir_doc );
add_keyword_method("get_auth_cache", &pysvn_client::get_auth_cache, pysvn_client_get_auth_cache_doc );
add_keyword_method("get_auto_props", &pysvn_client::get_auto_props, pysvn_client_get_auto_props_doc );
add_keyword_method("get_default_password", &pysvn_client::get_default_password, pysvn_client_get_default_password_doc );
add_keyword_method("get_default_username", &pysvn_client::get_default_username, pysvn_client_get_default_username_doc );
add_keyword_method("get_interactive", &pysvn_client::get_interactive, pysvn_client_get_interactive_doc );
add_keyword_method("get_store_passwords", &pysvn_client::get_store_passwords, pysvn_client_get_store_passwords_doc );
add_keyword_method("import_", &pysvn_client::cmd_import, pysvn_client_import__doc );
add_keyword_method("info", &pysvn_client::cmd_info, pysvn_client_info_doc );
#ifdef PYSVN_HAS_CLIENT_INFO
add_keyword_method("info2", &pysvn_client::cmd_info2, pysvn_client_info2_doc );
#if defined( PYSVN_HAS_WC_ADM_DIR )
add_keyword_method("is_adm_dir", &pysvn_client::is_adm_dir, pysvn_client_is_adm_dir_doc );
add_keyword_method("is_url", &pysvn_client::is_url, pysvn_client_is_url_doc );
#ifdef PYSVN_HAS_CLIENT_LOCK
add_keyword_method("lock", &pysvn_client::cmd_lock, pysvn_client_lock_doc );
add_keyword_method("log", &pysvn_client::cmd_log, pysvn_client_log_doc );
#if defined( PYSVN_HAS_CLIENT_LIST )
add_keyword_method("list", &pysvn_client::cmd_list, pysvn_client_list_doc );
add_keyword_method("ls", &pysvn_client::cmd_ls, pysvn_client_ls_doc );
add_keyword_method("merge", &pysvn_client::cmd_merge, pysvn_client_merge_doc );
add_keyword_method("mkdir", &pysvn_client::cmd_mkdir, pysvn_client_mkdir_doc );
add_keyword_method("move", &pysvn_client::cmd_move, pysvn_client_move_doc );
add_keyword_method("propdel", &pysvn_client::cmd_propdel, pysvn_client_propdel_doc );
add_keyword_method("propget", &pysvn_client::cmd_propget, pysvn_client_propget_doc );
add_keyword_method("proplist", &pysvn_client::cmd_proplist, pysvn_client_proplist_doc );
add_keyword_method("propset", &pysvn_client::cmd_propset, pysvn_client_propset_doc );
add_keyword_method("relocate", &pysvn_client::cmd_relocate, pysvn_client_relocate_doc );
add_keyword_method("remove", &pysvn_client::cmd_remove, pysvn_client_remove_doc );
add_keyword_method("resolved", &pysvn_client::cmd_resolved, pysvn_client_resolved_doc );
add_keyword_method("revert", &pysvn_client::cmd_revert, pysvn_client_revert_doc );
add_keyword_method("revpropdel", &pysvn_client::cmd_revpropdel, pysvn_client_revpropdel_doc );
add_keyword_method("revpropget", &pysvn_client::cmd_revpropget, pysvn_client_revpropget_doc );
add_keyword_method("revproplist", &pysvn_client::cmd_revproplist, pysvn_client_revproplist_doc );
add_keyword_method("revpropset", &pysvn_client::cmd_revpropset, pysvn_client_revpropset_doc );
#if defined( PYSVN_HAS_WC_ADM_DIR )
add_keyword_method("set_adm_dir", &pysvn_client::set_adm_dir, pysvn_client_set_adm_dir_doc );
add_keyword_method("set_auth_cache", &pysvn_client::set_auth_cache, pysvn_client_set_auth_cache_doc );
add_keyword_method("set_auto_props", &pysvn_client::set_auto_props, pysvn_client_set_auto_props_doc );
add_keyword_method("set_default_password", &pysvn_client::set_default_password, pysvn_client_set_default_password_doc );
add_keyword_method("set_default_username", &pysvn_client::set_default_username, pysvn_client_set_default_username_doc );
add_keyword_method("set_interactive", &pysvn_client::set_interactive, pysvn_client_set_interactive_doc );
add_keyword_method("set_store_passwords", &pysvn_client::set_store_passwords, pysvn_client_set_store_passwords_doc );
add_keyword_method("status", &pysvn_client::cmd_status, pysvn_client_status_doc );
add_keyword_method("switch", &pysvn_client::cmd_switch, pysvn_client_switch_doc );
#ifdef PYSVN_HAS_CLIENT_LOCK
add_keyword_method("unlock", &pysvn_client::cmd_unlock, pysvn_client_unlock_doc );
add_keyword_method("update", &pysvn_client::cmd_update, pysvn_client_update_doc );
まずは、svnコマンドを使ってKahuaからsubversionアクセスするようにしてみて
限界を感じたら必要なメソッドだけを実装する方針でいこう。
Version Control With Subversion: Ben Collins-Sussman,Brian W. Fitzpatrick: 洋書
このブログにコメントを付けたいというのが、一番の動機。
本当は、svnコマンドをGaucheから子プロセスで起動すれば良いのだけど、
この本には、バインディングを書かないとちゃんとしたエラー処理はやりにくいよ、と書いてあったので
世間には、既にPythonとRubyのバインディングが存在するようだが、それにとらわれず、
Gaucheらしいバインディングが作れれば良いのだけど。
手始めに、もっと簡単なバインディングを書いて練習してみようかな。
[表示] メニューとキーボードショートカットから、新しいズーム機能によっ
てページ全体をズームイン・ズームアウトして、レイアウトテキストおよび
画像、またはオプションで文字サイズのみを拡大・縮小することができます。
ここでの設定はサイトごとに記憶され、再びそのサイトを訪れると復元され
OldTypeでこの機能をJavaScriptを使って実装しようと思っていたが、やっぱりやめた。
Tomcatハンドブック
そうすると、なぜか頭の中で変な風に配線が繋がった。関数型言語でいうところの関数なら、1関数=1URLで表現できるんじゃないか。
RESTの基本はステートレスサーバ、つまりクライアントの状態をサーバーが管理せず、サーバが計算するために必要な全ての情報を毎回クライアントからもらう。
これって、関数型言語のimmutableな関数の考えかたじゃないか。
REST APIを数珠つなぎにすれば関数型プログラミングもできる。
例えば、S式のリストをソートする関数は次のURLで実行できるとすれば、
http://func.example.com/lib/sort
(use-rest-function "http://func.example.com/lib")
(sort '(1 5 2 4 7 6 8 9 3))
RESTにしてうれしい物としては、英語の辞書とか、大きなデータベースを必要とするため
ローカルに置いておくよりも、皆で共有したほうが良いものとかかな。
他にも、画像処理などの重たい処理を簡単に分散処理・並列処理を実現する手段としても使えそう。
この記事にはラムダ式というキーワード以外は関数型プログラミングの専門用語は出てこない。
この記事で言いたいことは、『ラムダ式はリスト内包表記、高階関数と組み合せるとコードが驚くほど簡潔になる』という一言で表現できると思う。
ところで、川俣氏は関数型プログラミング言語でコードを書かれたことがあるんだろうか。
もし有るなら、確信犯的によく書かれた記事だと思う。
逆に、もし無いならかなりお気の毒な記事だと思う。さすがにプロのライターの方なので前者であると思うけど。
これくらい分かりやすい記事が書けないと仕事として成立しないんだなぁ。
していると思う。日本の閉塞感と関係あると思うよ。もしかして日本だけじゃ無いのかしれないけど。
海部さんの本が出たので、早速買って読んだ。(後で、図書館に寄贈しときます)
パラダイス鎖国 忘れられた大国・日本 : 海部 美知
日本国内のエンジニアが冷遇される問題や、国内ビジネスの鎖国状態について以前から興味があったので
最近対談をされた様なので、こちらも見た。中島聡さんの話も興味深い。