SSH ポートフォワーディングによるトンネリング、2例
また、自分用のメモです。
以下のような環境があるとします。
- ネットワーク外部からの SSH アクセスをうけつけるサーバがある。
- ホスト名は miku (仮名) とします。
- ネットワーク内部のみからアクセスできるサーバがある。
- SSH ログインと HTTP アクセスを受け付けます。
- ホスト名は luka (仮名) とします。
- 外部からは negitoro.dyndns.example.com (仮名) で miku にアクセスできるとします。
以下は、外部の Mac OS X から miku の SSH を経由して luka にアクセスする操作の例のメモです。Linux でも同様になると思います。Windows は知らん。
HTTP のフォワーディング
Terminal.app で以下のようにオプションをつけて ssh ログインします。
Mac $ ssh -L 8080:luka:80 negitoro.dyndns.example.com Last login: Fri Apr 22 19:32:44 JST 2011 from roadroller.example.co.jp on pts/1 miku $
ログインしている間は、Mac の localhost 8080 番ポートへのアクセスが、miku を経由して luka の 80番ポートにフォワーディングされます。
luka にあるファイルを Mac から Emacs の Tramp で編集する
Mac の ~/.ssh/config ファイルに以下の内容を追記します。
Host forwarding HostName localhost Port 22222
以下のようにオプションをつけて ssh ログインします。
Mac $ ssh -L 22222:luka:22 negitoro.dyndns.example.com Last login: Fri Apr 22 19:32:44 JST 2011 from roadroller.example.co.jp on pts/1 miku $
ログインしている間は、Mac の localhost 22222 番ポートへのアクセスが miku 経由で luka の 22番ポートにフォワーディングされます。また、localhost:22222 には forwarding という別名で SSH アクセスできるようなります。
こうすると、Mac で動いている Emacs でファイルを開くときに /forwarding: というプレフィクスをつけることで、luka のファイルにアクセスできるようになります。
Mac OS X 10.6 Snow Leopard 使用開始メモ
そろそろ Lion が出ようか、って時に何をいまさら、という話ですが。
この手のセットアップ手順のメモは、いつかちゃんと作ろうといつも思ってるんですが、一度もちゃんと作れたことがないです (中途半端で終わった例)。先日つい注文してしまった MacBook Air が届いたので、今度こそちゃんとメモしながらセットアップしようかと。
この記事は、随時更新していくつもり。
概要
- セットアップ対象のハードウェアは MacBook Air 11-inch。最小構成からメインメモリだけ 4GB に増やしたもの。(MBAir 11.6/4GB/64Flash/JPN、Model No: A1370 と外箱下面のラベルにある。)
- プリインストールされている Max OS X 10.6 Snow Leopard をそのまま使う
- 現在、メインで使っている MacBook のデータは引き継がない
- Boot Camp などによる Windows インストールは、この Mac にはしない
利用目的
インストールするソフトウェアや、その他、使用可能にしたいもの、こと。
- ネットワークアクセス
- 自宅の無線 LAN
- WiMAX
- MacPorts
- git
- scalac
- Emacs
- …も MacPorts で入れたっけ?
- Google Chrome
- Haskell Platform
- github (https://github.com/h-hirai) のリポジトリを読み書きできるようにする
- 会社に SSH アクセスできるようにする
Mac OS X セットアップ
Mac の初回起動時、自動的に Mac OS X のセットアップが走る。これは指示通りに必要な情報を入力して行くだけ。
- 別の Mac から情報を移行するか聞かれるが、今回はしない。
- この時点で、自宅の無線 LAN については設定が済む。
セットアップが終了したら、とりあえずソフトウェア・アップデートを行う。
hostname の変更
細かい操作の設定
Google Chrome のインストール
…は、特に書くことないか。
Xcode のインストール
MacPorts, Haskell Platform のインストールに必要。
Sign In - Apple からダウンロードしてきて (登録が必要)、インストーラを実行するだけ。
MacPorts のインストール
MacPorts のインストール
- ソースを入手
- さすがに svn co まではしない。tar 玉をダウンロードすればおk。
- 適当なところにソースを展開し、./configure && make
- sudo make install
- 一時的にパスをとおす。export PATH=/opt/local/bin:$PATH
- sudo port selfupdate
各種プログラムのインストール
$ sudo port install git-core +svn +bash_completion $ sudo port install lv
各種設定ファイルの編集
~/.bash_profile
とりあえず、これだけ。
INPUTRC=~/.inputrc PS1='\n\[\033[32m\]\u@\H:\w\[\033[0m\]\n$ ' PATH=/usr/bin:/bin:/usr/sbin:/sbin PATH=${PATH}:/usr/X11/bin PATH=/opt/local/bin:${PATH} PATH=/usr/local/bin:${PATH} PATH=${HOME}/Library/Haskell/bin:${PATH} export PATH export PAGER=lv alias ls='ls -GF'
~/.inputrc
set completion-ignore-case On
~/.MacOSX/environment.plist
まだ
~/.emacs.d/init.el
https://gist.github.com/176797 にメモってある内容から必要な部分をコピペ。
あと、gist にはメモってないけど、Mac の Emacs でふつうにバックスラッシュを入力するのに以下の設定が必要。(参考: MacなEmacsでバックスラッシュを簡単に入力したい - Watsonのメモ)
(define-key global-map [?\] [?\\])
Haskell Platform
Download Haskell Platform から pkg ファイルをダウンロードしてきて、あとはインストーラに指示通りに。
darcs
いや、使わないんだけど。
haskell-mode の入手先が見つからないので、Emacs - HaskellWiki に従って開発版を引っ張ってくることにする、のに、darcs が必要。darcs は Haskell Platform 同梱の cabal でインストールできる。
$ cabal update $ cabal install darcs
haskellmode-emacs
以下のような感じで。
$ mkdir ~/.emacs.d/lisp $ cd ~/.emacs.d/lisp $ darcs get http://code.haskell.org/haskellmode-emacs $ cd haskellmode-emacs $ make EMACS=/Applications/MacPorts/Emacs.app/Contents/MacOS/Emacs compile
あとは、init.el に以下の記述を追加
(load "~/.emacs.d/lisp/haskellmode-emacs/haskell-site-file.el")
SSH の鍵ペアの作成と設定
麻婆豆腐のレシピ
…えと、「MBA欲しい」だけじゃあんまりなので。
こないだ川崎の自宅で、飲み友達でもあるところの前の会社の先輩と飲んだときに、麻婆豆腐を作って食べてもらったら案外と好評で、「レシピ、ブログに書いといてよ」と。まぁ、せっかくなので。
写真とかは、ないです。
- フライパンを温めてごま油をしく
- 弱火で豆板醤、味噌、ハチミツ、ネギのみじん切りを炒める
- 豆板醤の香りがたってきたら、火力を調節して、豚バラ肉のみじん切りを炒める
- 肉に火が通って来たら、さいの目に切った豆腐を入れて、和える
- 十分まざったな? と思ったら水を適量入れて、煮立たせる
- 鶏ガラスープで味をつける。あと、醤油、塩で味をととのえる
- よく沸騰させて、水溶き片栗粉でとろみをつける
- ここで、またネギのみじん切りを入れる
- 黒胡椒を入れる
- 花椒の代わり
こんなかんじ。
甜麺醤の代わりに味噌とハチミツ、花椒の代わりに黒胡椒というのは、どっかの病院の待合室で読んだ料理雑誌に載ってました。レタスクラブだったかな? 違うかも。
あと、水溶き片栗粉のコツ、みたいなの。水溶き片栗粉は先に作っておいて、水になじませておきます。もちろん入れる寸前にもよく混ぜます。あとは、入れた後によく沸騰させること。…と、いうようなことを、前に飲んだときに弟 (調理師免許持ち) が言ってたような気がする (うろ覚え)。
小学生の頃、父に教わったレシピだとたしか、最初の香り付けに炒めるのはおろし生姜とおろしニンニクだったんだよな。
……と、これまでプログラミングのことか、読んだ本のことしか書いてなかったのに、唐突に簡単お料理のお話でした。
2/5 にこんなイベントに参加する予定です。
第0回 Haskellでプログラムを書く勉強会 : ATND
なにかできたら、久しぶりにこのブログでプログラミングのお話を書けるかな、とか思ってます。
一年近く更新していなかったわけですが…
とりあえず、応募だけしておく。
連番を表示する elisp
ときどき連番を含むファイルとか書くときがあるんだけど、ある程度以上の行数になるとめんどくさいな、と。そんなわけで、下記関数を実行して *scratch* バッファからコピペする。
Emacs Lisp 的に綺麗な書き方とか知らない。
(defun numbers (from &optional to) (when (null to) (setq to from) (setq from 0)) (while (< from to) (insert (format "%d\n" from)) (setq from (+ from 1))))
電球を取り替えるのに何人の Ruby ハッカーが必要か
おもしろかったので、http://yugui.jp/articles/853をおおざっぱに翻訳してみました。しかし、日本人のブログを日本語訳してみました、つーのもなんか変だな。
英語は苦手だし、Ruby の開発に詳しいわけでもないので、おかしいところがあると思います。ご指摘をお願いします。
電球を取り替えるのに何人の Ruby ハッカーが必要か
50人。
- 電球が切れたと redmine に issue 登録するのに1人
- パッチを書くのに1人
- 新しい電球の名前が良くないとそのパッチに反対するのに1人
- より良い名前を提案するのに3人
- それらの名前について議論するのに5人、しかし合意には達しない
- 3ヶ月経っても電球が切れたままであると指摘するのに1人
- また別の名前を ruby-dev *1 に提案するのに1人
- ruby-dev で名前について議論するのに10人
- 議論を英語に翻訳するのに1人
- いくつかの名前が英語として不自然であると指摘するのに1人
- 今度は ruby-core *2 で議論をするのに12人
- 議論について #ruby@WIDE:*.jp *3 でコメントするのに3人
- コミットするのに1人
- コミットされたパッチが Ruby on win32 に不具合を起こすと訴えるのに1人
- win32 での問題を直すのに1人
- redmine でメールが見落とされて issue が自動クローズされていないと報告するのに1人
- issue をクローズするのに1人
- そのうち redmine を直したいなぁ、と呟くのに1人
- 開発中の各ブランチにパッチをバックポートするのに4人
- rdoc を書く人はいない
元ネタ: How many FreeBSD hackers does it take to change a lightbulb?
RWH 読書会 2010-01
また、参加させてもらいました。
Real World Haskell―実戦で学ぶ関数型言語プログラミング
- 作者: Bryan O'Sullivan,John Goerzen,Don Stewart,山下伸夫,伊東勝利,株式会社タイムインターメディア
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/10/26
- メディア: 大型本
- 購入: 8人 クリック: 245回
- この商品を含むブログ (76件) を見る
とりあえず、メモだけ貼付けます。
- 5分ほど遅れていったら cut-sea さんしかいないお
- 1時間くらいして nobsun 登場
- センター試験の試験官をされてたそうな
- どこまでやったっけ? でしばらく悩むw
- 多分、10月やったのが最後
- とりあえず、9章から始めてみる
9章 入出力事例研究: ファイルシステム検索ライブラリ
9.2 ディレクトリの再帰的リストアップ
- forM :: (Monad m) => [a] -> (a -> m b) -> m [b]
- mapM の引数を逆にしたもの
- 9.2.2 なぜ mapM と forM の両方が用意されているのか
- 処理のほうが長いかリストの方が長いか
9.3 素朴な検索関数
- を実装してみせてから、問題点を列挙して、あとにつづける
- 「sinpleFind は正格」ってどういうこと?
- unsafeInterleaveIO でいいよね by shelarcy さん
- 「sinpleFind は正格」ってどういうこと?
9.4 述語: 純粋性を保ちつつ、貧弱な機能から充実した機能へ
- ファイル名しか見ていない問題
- System.Directory モジュール
- filterM :: (Monad m) => (a -> m Bool) -> [a] -> m [a]
- 純粋な述語 p を入出力をうけもつ check でラップして、filterM でフィルタする
9.5 ファイルサイズを安全に決める
- hFileSize をラップ
- handle って前に出てたっけ?
- 例外を投げられると hClose が呼ばれない問題
- 9.5.1 獲得-使用-解放サイクル
- bracket :: IO a -> (a -> IO b) -> (a -> IO c) -> IO c
9.6 述語用の特定問題領域言語 (DSL)
- うまく、まとめられない…
- 9.6.1 持ち上げを使ってボイラープレートを回避する
- 持ち上げ?
(>) のような関数をとって、その関数を別の文脈で作用する関数 (ここでは greaterP) に変換することを、その文脈に持ち上げると言います。
- 9.6.2 述語を貼りあわせる
- コンビネータ
- ??
liftP q f k w x y z = f w x y z `q` k liftP2 q f g w x y z = f w x y z `q` g w x y z liftP' q f k w x y z = f w x y z `q` (constP k) w x y z
- 9.6.3 新しい演算子を定義して使う
9.7 走査方法の制御
- 書いてある通り「いままでない濃い関数定義」
- ><
- 急に難易度が上がったなぁ…。by nobsun
9.8 密度、可読性、学習プロセス
- この節のコードを 9.7 のと比べてみればいいんだな
9.9 走査の別の見方
9.10
- 特になし
- 9.10.1 よく使われるレイアウトスタイル
- やっぱりこういう話題はもりあがるw
懇親会、その他
- tantanmenbot を紹介した。
- shelarcy さんの連載、もう少しがんばって読みます…。