とあるオジサンのサンデー図工(ロビ編)
この記事は1年くらい塩漬けにされてたらしいのですが、唐突に思い出したので今投稿しました。多分トラウマだったんだと思います。
唐突の図工シリーズ第二段。ロビというロボットを皆さんご存知でしょうか。そうDeAGOSTINIが出してるアレです。(最近DMMから組み立て済みが買えるようなるらしいです。)
総額14万YENくらいするらしいんですが塗装したかったのでついカッとなってやった話です。
きっかけ
僕が購入したのは、初版のロビなんですが、初版のロビは最初ということもあって白いパーツが色移りして徐々に赤茶っぽくなってしまうという不具合がありました。腕の根元部分がその変色部分です。
DeAGOSTINIさんは太っ腹なので変色しないパーツ一式を別途送ってくれたんですがなんとなくもったないので、変色したパーツをベースに、塗装でもすっか!と思ったのが地獄の始まりでした....
塗装仕様
とにもかくにも塗装するためのイメージが必要です。どんなカラーリングにするのか事前にこんな感じで決めました。
パ◯レイバー仕様です(キリ 。決してS◯ftbankのペッ◯ ーくんではありません。この塗り絵の元画像はロビの掲示板サイトに行くとGETできます。
準備
イメージは固まったもののプラモの塗装とかも別に詳しいわけじゃないし一体どうやったらええのや。てところからスタートしました。ネットでロビの塗装をしてる人たちの情報を参考に、以下のような道具を用意しました。インターネッツ最高。ありがたや。ありがたや。
- 耐水ペーパー
- 単なる紙ヤスリよりも目詰まりしににく、削りカスが水で流されたりするのが利点らしいです。
- #400 〜 #2000 までの1枚づつ購入しました。
- プラスチックプライマー
- 塗装を乗りやすくするためのスプレーです
- メタルプライマーもあったんですが、とりあえずプラスチックにしました。
- サーフェイサー
- 今回は白地ベースなのでホワイトの奴を購入
- アクリルスプレー
- グロスホワイト,グロスブラック、ゴールドなどの「ツヤあり」のを購入しました。
- 光沢クリアスプレー
- 光沢を出したかったので購入
- コンパウンド/クロス
- 最終的に磨き上げる時に利用します。
- 塗装用クリップ(自作)
- 塗装する時に、直接手でもたないための道具です。竹串とクリップを買って自作しました。
- それ系のネットショップでも購入可能です
- マスキングテープ
アクリル塗装スプレーは仕事帰りに東急ハンズで買いました。最初は小さい奴を買ったんですが、僕みたいに塗装素人の場合は、でかいサイズのを買った方がいいです。
あっという間になくなるのです。。。
解体
とりあえず塗装するためには、まずは解体です。
解体前
解体後
見るも無残な感じなっていますたが、全部バラすとこんな感じです。
解体する時に、どのサーボどの位置にあったか忘れないようにシールとか貼っておくのおすすめします(字が汚い...)。またあらかじめどこのパーツを塗るのか目算をつけておいた方がいいです。サーボ付近の部分や裏側で目立たない部分は塗らなくてもいいのかとか検討しておくと後々スムーズです。
塗装作業
簡単に塗装するまでの順番を書きます。
1. 耐水ペーパー(#400〜#800)で削る
塗装を乗りやすくするために粗めの#400〜#800の耐水ペーパーで順番に削ります。ひたすら塗装対象のパーツを削ってなだらかにしていくだけの簡単なお仕事です。
2. プラスチックプライマー
次に塗装を剥がれにくくするためにプライマーをを吹き付けます。スプレーを吹き付ける基本としては、一回で全てを塗るのでなく、薄く吹き付けては乾かして、吹き付けては乾かしてを2,3回繰り返す感じで塗っていきます。一回吹き付けたら15〜20分くらい乾かします。
3. サーフェイサー
次にサーフェイサーです。サーフェイサーは塗装の下地となるものなので、プライマー同様に吹き付けと乾燥を2,3回くらい繰り返します。薄く塗らないとダレた感じになってしまうので、気をつけてください。
1回目のサーフェイサーまでやったところです。失敗した場合は、再度 1の工程からやり直すイメージです(これが精神的につらかった..)
4. 耐水ペーパーで削る
ようやっと塗装の前段階です、ここでも塗装が乗りやすいように、細め(#1000 ~ #1500)の耐水ペーパーを軽くかけます。
5. 塗装スプレー
やっと黒とか白の塗装ができる段階です。ここでも薄く吹き付け -> 乾燥を繰り返します。
塗装スプレーは一見乾いたように見えても、完全に乾ききるまで2,3日はかかります。
迂闊に指で塗装部分を強く押したりすると指紋が残った状態になったりするので注意が必要です。。。
6. 耐水ペーパーで削る
塗装が一通りでできたなーって、最後の耐水ペーパーです。#2000くらいのもっと細めなやつで
軽く撫でる感じでやさしく削ります。
7. 光沢スプレー
最終的にはピカピカにしたいなーという思いがあったので、光沢スプレーをかけます。
これも5の塗装スプレーと要領は一緒です。完全に乾くまで気長に待ちましょう。
ただ今回購入したらスプレーは「ツヤあり」のものだったので光沢スプレーあっても
なくてもあんまたいして変わらなかったようなが気がしました。
8. コンパウンド
コンパウドは、クリーム状のヤスリみたいなもので、さらにピカピカにするためには
これを使います。タミヤからは「粗目」「細目」「仕上げ目」の3種類あるんですが、
使ってみたが感じ「細目」と「仕上げ目」だけで十分な気がしました。
9. 組み立て
ようやく塗装が終わったので、あとはまた1から組み立てです。今回はサーボモータまで
塗ったもんだから、パーツ組み合わせた時に微妙に浮いたり、ぴったり噛み合わなかったりしたら
ヤスリで削って、またちょっと塗装しなおすということを永遠やります。。。。
大変だった作業
胸パーツと腕パーツの2色塗り分け
今回は、胸と手の先の部分は、白と黒の部分を塗り分けるという仕様にしてしまったせいで
その塗り分けが異常に大変で、なんども失敗して、心が折れて、何もかも放り出しそうになりました。
具体的には、まず白ベースで塗装が終わったら、完全に乾いたのをまって、マスキングテープを
貼って、その上から黒で塗装という感じです。
完全に乾いてからやるというのがポイントで、完全に乾かないうちに、マスキングテープを
貼ると、剥がした時に、テープ跡が残ってしまい。。。また白地から塗り直し。。。うぅ辛い。。
なんどやってもテープ跡が完全になくなるまでには至らなかったので最終的には妥協しました。
コンパウンドで根気よく磨けばある程度は目立たなくなります。
サーボが死んだ
これがきつい。サーボを塗装したせいなのかよく分からないけど、組み立て動作確認してたら
一個サーボが死んでることが発覚。ロビの公式サイトから、サーボを購入してまた塗り直すっていう
悪夢があった時には、「もうこれで終わってもいい」って心のゴンさんが言ってました。
やっぱダメなところ
感想
- 基本週1の3~4時間をリミットに作業したけど作業完了ま4〜5ヶ月かかって、まじなめてましたすいません。
- 塗装1回失敗すると、すぐにはリカバリーできなくてだいぶ辛かった。
- うまくいってる時は塗装はめちゃくちゃ楽しかった。(ただし時間はあっという間に過ぎる)
- けどもうしばらくやんねぇぞ!!!!
Macでdnsmasqを使ってお手軽名前解決
最近興味があってBoxenを調べています。BoxenはMacで開発するための
環境をよしなに整えてくれるツールなんですが、その中で気になったのが下記のヤツ
dnsmasq w/ .dev resolver for localhost
はて?dnsmasqで.dev resolver for localhostてどんな事してくれるんじゃろかい?
何してくれんの?
端的に言うと
あぁ上に書いてある説明どおりですね。ていう事をやってくれます。
もう少し噛み砕くと、ローカルでの開発用に hoge.dev, fuga.devみたいなドメインが欲しくなった時って、/etc/hostsに一個一個定義してたりしましたが、もうこんな事しなくてもいいんですぜ旦那。「*.dev」のドメインであれば、勝手に127.0.0.1に向く用にできまっせ。という話
# /etc/hosts 127.0.0.1 hoge.dev 127.0.0.1 fuga.dev
ではboxenが自動でやってくれるような事をわざわざ手動でやってみます。アナログ最高。ヒャッハー!!!!
ちなみにboxenのpuppetのヤツはここです。
dnsmasq のインスコ
$ brew install dnsmasq
設定ファイルの用意
# 設定ファイルのコピペ $ cp $(brew list dnsmasq | grep /dnsmasq.conf.example$) /usr/local/etc/dnsmasq.conf # 自動起動の設定ファイルコピペ $ sudo cp $(brew list dnsmasq | grep /homebrew.mxcl.dnsmasq.plist$) /Library/LaunchDaemons/ $ sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
dnsmasq.confの設定変更
- exampleは色々設定が書いてあるがboxenのpuppe-dnsmasqと同じような内容を設定すればおk
- https://github.com/boxen/puppet-dnsmasq/blob/master/files/dnsmasq.conf
# /usr/local/etc/dnsmasq.conf # wildcardでの名前解決を許す? bind-interfaces # launch deamonで動かすために常にforgroundで起動 keep-in-foreground # /etc/resolve.confを見ない no-resolv # *.dev ドメインへのアクセスは全てlocalに。 address=/dev/127.0.0.1 # 名前解決する時にローカルを見るためには自動的にloopbackしてくれんので、明示的に設定するとかなんとか? listen-address=127.0.0.1
/etc/resolver/devの設置
# /et/resolver/devを作成 $ sudo mkdir -p /etc/resolver $ sudo touch /etc/resolver/dev # 中身はこの一行のみ nameserver 127.0.0.1
確認
ここまで作業は終わりあとは確認
# *.dev のドメインは全て127.0.0.1が返ってくればOK $ ping -c 1 hoge.dev $ ping -c 1 hoge.fuga.dev $ ping -c 1 hoge.fuga.piyo.dev # 他の名前解決に支障がないか一応確認 $ ping -c 1 www.google.com
余談
参考
- http://passingcuriosity.com/2013/dnsmasq-dev-osx/
- http://nauthiz.hatenablog.com/entry/20100929/1285778758
- http://int128.hatenablog.com/entry/20120226/1330247800
- http://co-sol.jp/techdb/2013/01/dnsmaq_for_vm_name_resolution.html
- http://yukotan.blogspot.jp/2013/03/macdnsmasq.html
- http://fixture.jp/blog/2013/02/how-to-install-dnsmasq-on-mountain-lion/
- http://www.echoditto.com/blog/never-touch-your-local-etchosts-file-os-x-again
- http://blog.evan.pro/how-to-set-up-dynamic-virtual-hosts-for-web-development
今、感情は無であり、至って落ち着いています。
Andorid標準ブラウザでiframeのスクロールがおかしくて久しぶりにキレちまった件
Androidのブラウザでiframe利用してコンテンツを表示した時に困った時の話。別にキレてないです。
前提
現象
- 初期表示では、radioボタンをポチポチチェックできる。
- 送信ボタンを押そうと下に引っ張ると、iframeの中がスクロールする。
- ここで問題が発生する。送信ボタンが押せないどころか、その状態でradioボタンを押すとチェックが入らない!!!
原因
- そもそもAndorid4とiframeは相性悪いらしい
- mixiでも同様のケースがあったっぽい
- 詳細な原因までは正直わからないが、要はこういう事らしい。
1. 初期表示の状態ではradioボタンを押せる
2. 一度スクロールすると、押せなくなる。
これは押せなくなってるんじゃなくて、初期表示の位置をタップしていると同義らしい。
実際に少しだけスクロールさせてradioボタンをクリックすると、上の方のradioボタンにチェックが入る。
対応
さてこれに対応するにはどうしたんもんかという話だが、要は「スクロールなんてしなくてもいいくらいにiframeの高さを調節すれば良い」という事だった。
その対応は、mixiさんが提示してるようにjsでiframe内の高さを取得して、iframeの高さを自動的に設定すれば良い。
ところがどっこいiframeはSameOriginPolicyによってサブドメインだろうが、port付きだろうが、httpsだろうが別ドメイン扱いなので、iframe内の情報を取得するのは無理ゲーだった。
はーマジなんなの?
というわけで、単純にiframeのheight属性をスクロールが発生しないであろう高めに設定するだけにした。もうiframeなんてなかったんやと思いたくなる珠玉の一品。
余談
どういう了見でこんな事になってるかまでは、ソース的なものが見つからなかったので、もし知ってたら誰か教えてください。
他に方法を無いかなと探した結果、yet antother的にcross domainのiframeの情報を取得する方法があったけど、どれもBKな感じがいなめないので、まだ試していない。
- http://stackoverflow.com/questions/5908676/yet-another-cross-domain-iframe-resize-qa
- https://github.com/house9/jquery-iframe-auto-height <- cross domain対応のヤツとかAlternatives が示されてる
- http://css-tricks.com/cross-domain-iframe-resizing/
ちなみに Androidの2.3.x系、Android4.2.x系では、この現象は発生しなかった。
夏までに痩せたい!厳選!超オススメダイエット商品10選!!!
さて本日は、数々のダイエット商品を使い続けて来た私が「絶対に」購入したい、超厳選ダイエット商品をランキング形式でご紹介したいと思います!今回はコンビニで買えるものばかり集めてみましたので、ネットや専門店でしか入手できないものは後日またご紹介したいと思います(^^)
それでは、ご覧ください!
↓↓↓
第10位
まずは定番、トクホ系のお茶「特茶」ですね。知る人ぞ知るお茶です。
お茶の記事では無いので詳しい説明は避けますが、特茶は「ケルセチン配糖体」という脂肪分解酵素を活性化させ、体脂肪を減らす効果がある特徴をもっています。日本でも根強いファンは多いです。ダイエットを検討してる方は購入すべきと言える商品でしょう。
第9位
お茶と言えばサントリー、サントリーといえば飲み物、飲み物といえば食事です。 そう、せっかくお茶を買ったからには、食事を楽しまなければいけません。
食事楽しむためには、焼肉甲子園などでもおなじみの「烏龍茶」でもよいのですが、ここは食事を楽しみながら、さらに健康的な感じをアピールしつつクールさを演出したい所です。そんなあなたにオススメなのが、この「特茶」!
なんと飲んでるだけで脂肪がみるみるウチに分解されるお茶なのです!特茶は他のトクホ系の飲料(ヘルシア緑茶等)に比べて値段はほぼ同じ感じでペットボトルのサイズが大きいのでかなりお得感ありますね(かなり)。
第8位
さて、お次にオススメしたいのが、特茶というお茶です。このお茶はいわゆる「特定保健用食品」で、特定をの保険の目的が期待することができます。
健康を維持するためのなんかすごい効用があるので、健康的で効率的にダイエットしていくことができます。そして、効率的で健康的ににダイエットしていくことができます。
第7位
さて、世界中どこでも売られてる現代の必須飲料、それは「お茶」ですね。お茶はヨーロッパでは「紅茶」が古くから飲まれていると思いますがヨーロッパで最初に伝わったお茶は、17世紀にオランダ商人が平戸(長崎県)から輸入した「日本茶」だと言われてます。意外でしょう(笑)
日本では古来より茶筅で混ぜて飲む、いわゆる「抹茶スタイル」がありますが、普段から、茶筅を持ち歩いてる人もいませんし、そんなに時間に余裕がある人もいないので気軽にコンビニで美味しいお茶を買いたいし、飲みたいですよね。そこで特茶というお茶です(^^)
普通にコンビニで、お金を出せば、簡単に本格的なお茶が楽しめますよね!あと、効率的で健康的ににダイエットしていくことができます!
第5位
お茶です。サントリーの。
第3位
第3位は「特茶」です!世界には数多くお茶の種類がありますが、全て同じ「茶の木」という植物の葉から作られることは有名ですが、これは「特茶」です!サントリーのトクホのお茶です。
さて、この第3位の「特茶」というお茶なのですが、第4位の特茶と、どちらを3位にしようか、最後まですっご〜〜〜〜〜く悩みました!(笑)(^^;) それくらい、「特茶」と「特茶」、どちらもすごくいいお茶なんです!
第2位
さて、惜しくも1位を逃すこととなった第2位は、「特茶」です!「特茶」、中には初めて耳にした方も居るかもしれませんね。一般的にトクホのお茶を購入した場合その用途の9割がダイエットで残り4割がダイエットだと言われています。
そう、つまり、ダイエットをするにあたって、どのようなトクホのお茶を選ぶべきかは非常に重要なのです。トクホのお茶は多く存在しますが、あなたにあった最適なお茶を選ぶという事はあなたの健康ライフをそのものを最適化することに他なりません。
そこで私がおすすめしたいのは、やはり「特茶」です。最終的なお茶として、例えばヘルシア緑茶などを選んだとしても、「効率的にダイエットする事」を突き詰め、ダイエット方法としての新しいパラダイムを実現したとも言える「特茶」を経験しておくことは非常に大切でしょう。
で本当は?
- 2014年1月中旬の時点で65kgでしたが現時点(2014/04/13)で55kgです。
- 周りの人間に「太ってる」事を連続して強調されたため、ついカッとなって飲み始めた。反省はしてない。
- 日々増減はしてるけど、少しずつ痩せっていってるイメージです。
- 特茶以外にも、ストレッチやら、食事を気をつけるなどは以前からしてました。
- 本当に効いてるかどうかは定かではないが、特茶を飲み始めた時期から痩せ始めたので何となくそのまま飲んでます。
- ヘルシア緑茶よりはは苦くないので割と味的にも気にいってます。じゃなきゃ毎日飲めないし。
- 特茶愛が極まって書きました。
- 目下の心配は、飲むのやめたらリバウンドするのかなてのと、どこで下げ止まるのかなて所。
で効くの?
- ググればすぐ分かると思いますが、万人に効果があるというものでも無いようです。
- 割と眉唾なんじゃないか的なネガティブな記事はいくつか見つかると思います。
- 真偽に関してはご自身で判断してください。私は一切責任を負う事はできません。ご自身の健康状態を考えた上で、ご購入、ご利用を検討してください。
- 私と似た体質、生活リズムのヒトには効果があるかもしれないので。以下何となく思いつく特徴を列挙します。
- そもそも小食である。(三食きっちり食べない、1回の量が少なめ)
- 通常は殆ど運動しない。通勤やら、腰痛、肩こり軽減のためのストレッチ程度。
- 社会人になって、大して生活スタイルが変わってないのに徐々に太り、徐々に痩せにくくなった。
- 「食っても食っても太らないんだけど」そんな風に考えてる時期が私にもありました。
- 水分を多く取る。1日に3〜5本の500mlのペットボトル位は取ってます。現在はその内2〜3本が「特茶」になってる感じです。
- 最近は甘いもの控えてます。元々好きだけど、我慢してるしオジサン偉い。
結論
「齢三十も半ばを過ぎ、大した努力もせずに、10kg痩せられるの最高便利!!!」
P.S. サントリー社員のみなさん
朗報です。偶然なんですが、わたくし、本日誕生日でして、しかも特茶のストック切らしております!そしてここにはAmazonの欲しいものリストがあります!!!いやーもう本当に全然そういうんじゃないので、一緒に奥義「ステマ」を完成させましょう!!!
Amazon.co.jp: tell-k: 誕生日なので特茶が欲しいと思うヒトのリスト
いやー本当偶然てすごいなー、奇遇だなー、いやー本当に特茶サイコー!サントリー社員じゃなくても、送ってくれていいんですよ!特茶を送るのは全人類の自由意志です!あと明日以降でも大丈夫です、エブリディまってます!!
"^L" is 何?
割とどうでもいい話。python2.7 の 標準ライブラリのemail/message.pyの中で"^L"ていう制御コードを見つけた時の話。
そもそも "^L"てなんだっけ。。。から始まり、調べてみたら改ページだった。
vimエディタの印刷で改ページ : サイト更新停滞ちうっ [ 名無しのVIM使い ]
それは良いとしてなんでこんな所に改ページの制御コード入ってるんだろうと思ってさらに調べたら、下記のような同じような疑問をもったヒトが書いたスレを見つけた。
Issue 7513: many source files contaminated with form feed (\f) characters - Python tracker
こんな事が書いてあった。
- ivank 「Python 2.7の r76831 をチェックアウトしたら、大量のファイルに改ページが入ってるんやけど(震え声) ... 」
- lemburg 「俺の覚えてる限り、Barryがそれ好きなんだよね。理由はよー知らんけど ;-) 」
- barry 「それEmacsの次ページ、前ページへのナビゲーションコマンドなんだよね。 Pythonは空白扱いするけど、何か問題ある? :)」
- amaury.forgeotdarc 「それPEP8でも許容されてっから。。。」
えw マジで? そんな事書いてありましたっけ?とPEP8を見に行く。
Python accepts the control-L (i.e. ^L) form feed character as whitespace; Many tools treat these characters as page separators, so you may use them to separate pages of related sections of your file. Note, some editors and web-based code viewers may not recognize control-L as a form feed and will show another glyph in its place.
Python は Control-L (^L: From Feed) 文字を空白文字として受け入れます。 多くのツールはこの文字をページ区切りに使うので、この文字をファイル内の セクションを分けるページに使うことができるかもしれません。 しかし、いくつかのエディターや Web ベースのコードビューアは Control-L を認識せず、その場所に別の文字を表示するかもしれません。
via https://dl.dropboxusercontent.com/u/555254/pep-0008.ja.html
ナルホディウス。
なんどかPEP8に目を通してるつもりだったけど、まったくもって頭に入ってないという事が良くわかったオジサンなのでした。
おわり。
Pythonのloggingで手出しできない所のhandlerを差し替える
ltsvloggerで warn("%s %s", spam, ham) という手出しができないところにあるログ出力を受けたいんだけど、どうすればいいんだろう。
— shirou - しろう (@r_rudi) February 10, 2014
元ネタ。コレをを見た時、確かにどうやったらいいんだろう? と思ってちょっと調べてみた。
やりたい事
- ライブラリやらなんやらで書き出してるロギング部分を、自前で用意したロガーというかハンドラーに差し替えたい。
手出し出来ない例
例えば下記のような、hoge.py は手出しできないスクリプトだったとして、以下のようにログ取りになっていたとします。
# hoge.py # -*- coding: utf-8 -*- from logging import warn spam = u"スパム" ham = u"ハムの人" warn("%s %s", spam, ham)
handlerを差し替える
loggingモジュールの中を漁った結果、どうやら logging.root.handlersを弄れば、上記のような場合でも好きな LoggingHandlerに差し替えられるらしい。
1. root.handlers を強引に書き換える
# -*- coding: utf-8 -*- import logging import ltsvlogger formatter = ltsvlogger.LTSVFormatter(fields={ 'asctime': 'time', 'message': 'message', }) ltsv_handler = logging.StreamHandler() ltsv_handler.setFormatter(formatter) logging.root.handlers = [ltsv_handler] # root.handlersを上書きする # hogeが呼ばれる前にloggingの設定をする import hoge # => message:スパム ハムの人 time:2014-02-10T23:41:54+09:00
行儀が悪い感じがとても怒られそうです。addHandlerというメソッドがあるのでそちらにしましょう。
2. addHandlerを使う
# -*- coding: utf-8 -*- import logging import ltsvlogger formatter = ltsvlogger.LTSVFormatter(fields={ 'asctime': 'time', 'message': 'message', }) ltsv_handler = logging.StreamHandler() ltsv_handler.setFormatter(formatter) logging.root.addHandler(ltsv_handler) # addHandlerに変えた。 # hogeが呼ばれる前にloggingの設定をする import hoge # => message:スパム ハムの人 time:2014-02-10T23:41:54+09:00
というかそもそも、logging.getLogger()ていう風にやるとrootロガーだったのでそいつに対してaddHandlerすれば良かったという事実
3. rootロガーにaddHandlerを使う
# -*- coding: utf-8 -*- import logging import ltsvlogger formatter = ltsvlogger.LTSVFormatter(fields={ 'asctime': 'time', 'message': 'message', }) ltsv_handler = logging.StreamHandler() ltsv_handler.setFormatter(formatter) root_logger = logging.getLogger() root_logger.addHandler(ltsv_handler) # logging.getLogger() => rootロガー # hogeが呼ばれる前にloggingの設定をする import hoge # => message:スパム ハムの人 time:2014-02-10T23:41:54+09:00
ここまで書いて気がつきましたが、fileConfigでrootロガーを書き換えたらいいのでは???
4. fileConfigを使う
- logger.iniを用意
[loggers] keys = root [handlers] keys = ltsvhdr [formatters] keys = ltsvfmt [logger_root] level = DEBUG handlers = ltsvhdr [handler_ltsvhdr] class = StreamHandler args = (sys.stderr,) level = DEBUG formatter = ltsvfmt [formatter_ltsvfmt] format = time:%(asctime)s\tmessage:%(message)s datefmt = %Y-%m-%dT%H:%M:%S%z class = ltsvlogger.LTSVFormatter
script側ではfileConfigするだけ。
# -*- coding: utf-8 -*- import logging.config logging.config.fileConfig('logger.ini') # hogeが呼ばれる前にloggingの設定をする import hoge # => message:スパム ハムの人 time:2014-02-10T23:41:54+09:00
大体終わりです。
いろいろ怒られそうなので、書こうか迷うましたが、hogeを利用するスコープが限定的なら、mock.patchすればいいのでは!???とかいう愚行を一番最初に思いついた事を告白しておきます。石は投げないでください。
# -*- coding: utf-8 -*- import mock import logging import ltsvlogger formatter = ltsvlogger.LTSVFormatter(fields={ 'asctime': 'time', 'message': 'message', }) logger = logging.getLogger("nonrootlogger") ltsv_handler = logging.StreamHandler() ltsv_handler.setFormatter(formatter) logger.addHandler(ltsv_handler) with mock.patch("logging.warn", side_effect=logger.warn): import hoge # => message:スパム ハムの人 time:2014-02-10T23:41:54+09:00
ではではアデュー
Dockerをドカッと触ってみた(Macで)
Dockerが0.8でMac OSXのサポートをしたみたいな事をどっかでみたので、思考を停止してやってみた。触ってみただけなので全然ドカッと触れてない事に留意してください。言ってみたかっただけです。
あ。あけましておめでとうございます。
http://blog.docker.io/2014/02/docker-0-8-quality-new-builder-features-btrfs-storage-osx-support/
Dockerはそれまでは、Dockerを動かすためのVagrantfileを配布していて、VagrantでVM起動、そのVM上でdockerを使ってくれよな!よろしくー!的な感じだった。
それがMac上から直接dockerコマンドを使えるようになったぜ!ヒャッハー!ていう話らしい。
0. 前提
- Mac OSX 必要
- virtualboxが必要
1. boot2dockerとdocker client をセットアップ
マニュアルとほぼ同じような事をやる
$ cd /usr/local/bin $ curl -o boot2docker https://raw.github.com/steeve/boot2docker/master/boot2docker $ chmod +x boot2docker $ curl -o docker http://get.docker.io/builds/Darwin/x86_64/docker-latest $ chmod +x docker $ export DOCKER_HOST=tcp:// $ boot2docker init $ boot2docker up # コマンド一覧の確認 $ boot2docker
2. dockerコマンドを叩く
既にこの時点でdockerが利用可能になってる
# versionの確認 $ docker version Client version: 0.8.0 Go version (client): go1.2 Git commit (client): cc3a8c8 Server version: 0.8.0 Git commit (server): cc3a8c8 Go version (server): go1.2
3. ssh出来るコンテナを作る
完全に目的なくセットアップしてたので何していいか分からなくなった
http://blog.ryotarai.info/blog/2013/07/25/docker-sshd-container/
とりあえずココを参考にsshできるコンテナを作成する。
下記のようなopenssh-serverをインスコしてsshdを立てて、rootてパスでログインできるようなイメージを作成する「Dockerfile」を置く
FROM ubuntu:12.04 MAINTAINER tell-k "ffk2005@gmail.com" RUN apt-get update RUN apt-get install -y openssh-server RUN mkdir /var/run/sshd RUN bash -c 'echo "root:root" | chpasswd' CMD /usr/sbin/sshd -D EXPOSE 22
ビルドする
$ docker build ./ Uploading context 1.842 GB Uploading context Step 0 : FROM ubuntu:12.04 ---> 9cd978db300e Step 1 : MAINTAINER tell-k "ffk2005@gmail.com" ---> Using cache ---> f39bc83bc3a1 Step 2 : RUN apt-get update ---> Using cache ---> 43349868d941 Step 3 : RUN apt-get install -y openssh-server ---> Using cache ---> 71e6832c0d64 Step 4 : RUN mkdir /var/run/sshd ---> Using cache ---> 14d8d5b361c1 Step 5 : RUN bash -c 'echo "root:root" | chpasswd' ---> Using cache ---> d1ccd560aa9e Step 6 : CMD /usr/sbin/sshd -D ---> Using cache ---> fdf4c6068540 Step 7 : EXPOSE 22 ---> Running in 2b0a51afe8e3 ---> 4aa9bed82ea4 Successfully built 4aa9bed82ea4
ビルドしたイメージをtagとして保存する
$ docker tag 4aa9bed82ea4 tellk/sshd
よーしパパ。コンテナつくっちゃうぞーハハハー。なんつってコンテナ作る
$ docker run -d -p 22 tellk/sshd a1023b856c14286886e44485435cfda51d6f35a31c48a5fe76ccbac7aac9d3c3
コンテナIDから、SSHすべきportを調べる
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a1023b856c14 tellk/sshd:latest /bin/sh -c /usr/sbin 50 seconds ago Up 48 seconds 0.0.0.0:49154->22/tcp evil_franklin $ docker port a1023b856c14 22 0.0.0.0:49154 # 49154にSSHすればいいらしい
4. sshで繋いでみる
まずはMac -> boot2docker_vmにsshする
# とりあえず鍵作成 $ ssh-keygen -t rsa # なんやかんや聞かれるのでnopassで鍵を作成して、 # 下記のような感じで、鍵を置く。 ~/.ssh/id_rsa_boot2docker_vm ~/.ssh/id_rsa_boot2docker_vm.pub # 公開鍵をboot2docker_vmにコピー $ ssh-copy-id -i ~/.ssh/id_rsa_boot2docker_vm.pub localhost -p 2022 # パスが求められる「tcuser」がデフォのパス # ~/.ssh/configに以下を追加 Host localhost User docker StrictHostKeyChecking no UserKnownHostsFile /dev/null IdentityFile /Users/tell_k/.ssh/id_rsa_boot2docker_vm HostName 127.0.0.1 # sshをしてみる。パス無しでログインできる。 $ ssh localhost -p 2022 # boot2docker ssh でも パス無しでログイン可 $ boot2docker ssh
boot2docker_vmにログインしたらコンテナが起動してるIPを調べる
docker@boot2docker:~$ ifconfig | grep -A4 docker0 docker0 Link encap:Ethernet HWaddr FE:17:B0:FF:B4:70 inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::a055:fff:fe78:9134/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 # 172.17.42.1 として起動してるらしい
IPとポートが分かったんで、boot2docker_vm -> Dockerコンテナ(192.17.42.1:49154) にsshする
docker@boot2docker:~ $ ssh root@172.17.42.1 -p 49154 # passは「root」になってる root@172.17.42.1's password: Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.12.1-tinycore64 x86_64) * Documentation: https://help.ubuntu.com/ Last login: Sun Feb 9 13:44:12 2014 from 172.17.42.1 root@a1023b856c14:~# # 無事にログインできたぽい
こんどはSSHポートフォーディングで Mac -> (boot2docker_vm)-> Dockerコンテナ(192.17.42.1:49154) 的な感じでMacからDokcerコンテナに直ログインする。
# Macに戻って ~/.ssh/configを以下の内容を追加 Host container01 ProxyCommand ssh localhost -p 2022 nc %h %p StrictHostKeyChecking no User root Port 49154 HostName 172.17.42.1 # これで直接 Dockerコンテナにログインできる $ ssh container01 # ここでもパス入力省きたいから、boot2docker_vmと同じ公開鍵をコンテナに設置する。 $ ssh-copy-id -i ~/.ssh/id_rsa_boot2docker_vm.pub container01 # 上のssh-configに下記一行追加 IdentityFile /Users/tell_k/.ssh/id_rsa_boot2docker_vm # これでnopassで鍵つかってsshできる $ ssh container01 root@a1023b856c14:~#
とりあえず終わり
まとめ
参考
- http://blog.docker.io/2014/02/docker-0-8-quality-new-builder-features-btrfs-storage-osx-support/
- http://japan.internet.com/busnews/20140207/4.html
- http://docs.docker.io/en/latest/installation/mac/
- http://apatheia.info/blog/2013/06/17/docker/
- http://deeeet.com/writing/2013/12/08/docker-cheat/
- http://2013.8-p.info/japanese/04-01-perl.html
- http://the.nyarla.net/post/73770010276
- http://blog.udcp.net/2013/11/06/docker-0-6-5%E3%81%AE%E6%96%B0%E6%A9%9F%E8%83%BD%E3%82%92%E8%BF%BD%E3%81%86/
- http://qiita.com/ta9to/items/7bd8a1ab86b7fa949d50
- http://qiita.com/toyama0919/items/b4249d910a5ece927208
- http://qiita.com/sasaplus1/items/ac3c59293b432bc10db4
- http://qiita.com/kanekoa/items/cf3cabb23da69c609002
にゃーん