今日から二人暮らし
女房に逃げられた。
今日から娘と二人暮らし。ネコもいるけど。
料理の腕をみがきたい。
先日、新しいおもちゃ買った。
Emacs に "Package iswitchb is obsolete!" と言われたので icomplete-mode にかえた。
;; バッファの切り替え
;;(iswitchb-mode 1)
(icomplete-mode 1)
(define-key icomplete-minibuffer-map [?\C-i] 'minibuffer-force-complete)
;(define-key icomplete-minibuffer-map [?\C-m] 'minibuffer-force-complete-and-exit)
(define-key icomplete-minibuffer-map [?\C-s] 'icomplete-forward-completions)
(define-key icomplete-minibuffer-map [?\C-r] 'icomplete-backward-completions)
この設定であまり違和感なく使えるようになった。
Slime みたいにもって適当に入力しても補完してくれるといいんだけどね。
Stumpwm の contrib がなくなっと思ったら、別リポジトリになってたのね。
quicklisp には入ってないようなので、自分で git clone する。
cd ~/quicklisp/local-projects
git clone https://github.com/stumpwm/stumpwm-contrib.git
~/.stumpwmrm に次を追加。
(setf stumpwm::*contrib-dir* (pathname "~/quicklisp/local-projects/stumpwm-contrib/"))
(init-load-path stumpwm::*contrib-dir*)
Angular.js CoffeeScript Controller Base Class - Devign に書いてあるとおり。
inject や initialize のとこをちょこっと変えて、こんな感じになった。
AuthedCtrl を継承していれば $scope にログインユーザが自動的にセットされる。本番は mixin 自にやりたいけどそれはまた今度で。
class @BaseCtrl
@register: (name) ->
name ?= @name || @toString().match(/function\s*(.*?)\(/)?[1]
angular.module('ngappApp').controller name, @
@inject: (args...) ->
@$inject ?= ['$scope']
@$inject = @$inject.concat args
constructor: (@scope, args...) ->
for key, index in @constructor.$inject[1..]
@[key] = args[index]
for key, fn of @constructor.prototype
continue unless typeof fn is 'function'
continue if key in ['constructor', 'initialize'] or key[0] is '_'
@scope[key] = fn.bind?(@) || _.bind(fn, @)
@initialize()
initialize: ->
class @AuthedCtrl extends BaseCtrl
@inject 'AuthService'
initialize: =>
super()
@AuthService.user (user) =>
@currentUser = user
@scope.currentUser = user
class VacationsCtrl extends AuthedCtrl
@register()
@inject 'Vacation'
initialize: =>
super()
@scope.vacations = @Vacation.query()
@scope.vacation = new @Vacation
create: =>
console.debug(@scope.vacation)
@scope.vacation.$save (v) =>
console.debug(v)
@scope.vacations.push(v)
@scope.vacation = new @Vacation
いまさらながら AngularJS をさわってみたけど、 C と VB で書いてたむかしながらサーバクライアントアプリみたいで、ちょっと楽しい。
あるいは継続を使った web フレームワークのサーバ処理がごっそりクライアントサイドに移った感じ。
http://www.erlang.org/doc/apps/ssl/ssl_distribution.html に書かれているとおり。
/usr/lib/erlang/releases/17 にあるファイルをネタに次のファイルを作成。
start_ssl.rel
{release, {"Erlang/OTP","17"}, {erts, "6.1"},
[{kernel,"3.0.1"},
{stdlib,"2.1"},
{sasl, "2.4"},
{asn1, "3.0.1"},
{crypto, "3.4"},
{public_key, "0.22"},
{ssl, "5.3.5"}
]}.
boot ファイルを作成
systools:make_script("start_ssl",[]).
/home/ancient/letter/erlang/ssl/erlserver.pem にはサーバ証明書と鍵を書いておく cat pem key > erlserver.pem なイメージ
起動
erl -boot /home/ancient/letter/erlang/ssl/start_ssl -proto_dist inet_tls -ssl_dist_opt server_certfile "/home/ancient/letter/erlang/ssl/erlserver.pem" -ssl_dist_opt server_secure_renegotiate true client_secure_renegotiate true -sname ssl_test
erl -boot /home/ancient/letter/erlang/ssl/start_ssl -proto_dist inet_tls -ssl_dist_opt server_certfile "/home/ancient/letter/erlang/ssl/erlserver.pem" -ssl_dist_opt server_secure_renegotiate true client_secure_renegotiate true -sname ssl_test2
(ssl_test2@yarn)8> net_kernel:connect_node(ssl_test@yarn).
true
(ssl_test2@yarn)9> nodes().
[ssl_test@yarn]
ふと気付いた。ssl じゃなくて ssh でやりたかった。
ren に Clojure のマルチメソッドみたなものを実装してみた。
:g length dup type-of ;
:m length (( list )) erlang:length/1 ;
:m length (( tuple )) erlang:size/1 ;
:m length (( binary )) erlang:size/1 ;
:m length (( map )) erlang:map_size/1 ;
:g でジェネリックファンクションを定義する。やってることはスタックトップのオブジェクトのタイプをスタックにつむだけ。 :m でメソッドを定義する。スタックトップにつまれたタイプでパターマッチングしている。
Erlang にもマップが導入された。それを使ってこんなふうに OO っぽいことをやってみた。継承をどうするかが悩ましい。
:g + over type-of over type-of ; # x y -- x y type-of-x type-of-y
:m + (( integer _ )) erlang:+/2 ;
:m + (( float _ )) erlang:+/2 ;
:m + (( list list )) erlang:++/2 ;
: point{ ( 'point >typed-map ) '{ ;
:m + (( #{ x X1 y Y1 } #{ x X2 y Y2 } point point ))
point{ 'x X1 X2 + 'y Y1 Y2 + }
;
point{ 'x 1 'y 2 } point{ 'x 3 'y 4 } +
# => #{'-type-' => point,x => 4,y => 6} Erlang の出力のまま