2012/02/20
ソフトバンクのWEB請求書もscraperにかけてしまう
ついでだから、ソフトバンクのWEB明細もスクレーパー書いておいた。
テレビ見ながら、ついでにソフトバンクのWEB明細も切り取っておいた。
mysoftbankサイトから明細を取ってくる。
#!/usr/bin/env ruby require 'rubygems' require 'kconv' require 'openssl' OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE require 'mechanize' url ="https://my.softbank.jp/msb/d/top" id="08042xxxxx" pw="**password**" m = Mechanize.new m.get url m.page.forms[0]["msn"]=id m.page.forms[0]["password"]=pw m.page.forms[0].submit m.page.links_with(:text=> /請求書/ ).first.click ##reload m.page.forms[0].submit puts m.page.search('div#id4_C1').first.to_html.toutf8 puts m.page.search('//th[contains(.,"料金内訳")]').first.parent.parent.parent.parent.to_html.toutf8
ソフトバンクはリクエスト処理素直だった。ただしHTMLのなかにdiv#bodyが何個もあって発狂しそうだった。
請求書や明細書はPDFでメール添付してくれたらいいのに。。。
WEB明細ってアレでしょ
CO2削減効果ってのは、労働者を減らしたから、その人達が仕事や通勤で排出するCO2が減ったみたいな。
その分コストが下がって、仕事がなくなった分、世間は狭くなった。
日経の社説を一気に取得する。自分で読むのはバカバカしいからRubyに日経を読ませる。
新聞比べ読みをしたらいいとトラックバックがあったんだけど*1。
僕も日経の何がいいかよくわからん。エライ人が日経嫁とかウルサイんですね。僕も言われたことあります。
あんなもの自分で読むとストレスたまるので、とりあえずプログラムに読ませてみた。
日経の社説を取得するプログラム
#日経新聞の社説。 require 'rubygems' require 'mechanize' m = Mechanize.new m.get "http://www.nikkei.com/news/editorial/" #m.page.search('/html/body//h2[contains(., "社説")]').first.parent list = m.page.search('//h4/a').map{|e| [e.text,"http://www.nikkei.com"+e["href"]] } list.each{|e| m.get e[1] title = m.page.search('h4.cmn-article_title.cmn-clearfix').text.strip date = m.page.search('h4.cmn-article_title.cmn-clearfix').text.strip body = m.page.search('div.cmn-article_text.JSID_key_fonttxt').text.gsub(/\t/, "") open("#{title}-#{date}.txt","w"){|f| f.write body} }
Rubyに読ませてみた。
(スクリーンショット 2012-02-21 3.18.12)
Rubyに代わりに読んでもらおう。
$KCODE ='u' system("cat *.txt > all.nikkei") text = open("all.nikkei").read regex = /[一-龠]+|[ぁ-ん]+|[ァ-ヴー]+|[a-zA-Z0-9]+|[a-zA-Z0-9]+/ words = text.scan regex counts = Hash.new(0) words.each{|e| counts[e] = counts[e] + 1 } sorted = counts.to_a.sort{|a,b| b[1] <=> a[1]} sorted.each{|e| puts "#{e[0]}=>#{e[1]}"} puts "-"*10 puts words.size
結果
「てにをは」などがこれだけ
の=>426 を=>305 が=>187 に=>180 は=>158 で=>86 と=>57 も=>56 や=>53 な=>51 だ=>39 い=>37 し=>35 する=>33 した=>31 り=>26 る=>25
キーワードはこんな感じ。
ガス=>25 年=>23 政府=>22 日本=>22 天然=>16 高=>15 人=>15 東電=>15 強=>13 考=>12 続=>12 得=>11 問題=>11 受=>11 中国=>11 対応=>10 研究=>10 エネルギー=>10 合=>10 必要=>10 上=>9 課題=>9 企業=>9 日銀=>9 電力=>8 送電網=>8 テロ=>8 温度計=>7
結果
今週の日経さんは「電力と日本と、政府と、中国」にご執心で、「高い〜」や「強い〜」が好きなようですね。そしてやたら天然ガスにご執心です。
これだけでもう何書いてあるか想像が付くわ。。。
tf/idf的には逆も見たいところ。
一回だけ出てくる、特徴語を見たらなんと「国会」が一回だけ。まぁ◯◯党や◯◯大臣というもっと具体例で言及してるんかねぇ。でもそれ政府なんだよねぇ。やっぱ国会は国会の機能は果たしてないってことか。
TPP、FRBやメルコジへの言及は少ないなぁ。
au WEB請求書ページを取得する。
AUの料金照会ページを取得するサンプル。
auのWEB明細を取得する。
require 'openssl' OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE require 'rubygems' require 'mechanize' #au カスタマーサポートログインid id = "my_user_id" pw = "**pass_word**" #au 端末 暗証番号 mpw = "1234" login_url = "https://cs.kddi.com/" #初回ログイン m = Mechanize.new m.user_agent_alias = 'Windows IE 7' m.get login_url m.page.forms[1].fields[0].value = id m.page.forms[1].fields[1].value = pw m.page.forms[1].submit #ログイン後トップページ m.page.links.select{|e| e.text =~ %r"請求額照会" }.first.click #携帯電話選択画面。 m.page.forms[1].submit #とりあえず、一番目の携帯電話を選択して送信。 #携帯電話の暗証番号 m.page.forms[0].fields.select{|e| e.type=="password"}.first.value= mpw m.page.forms[0].submit #リダイレクト画面 m.page.forms[0].submit #請求画面のHTMLを取得する。 puts m.page.search('#detail_11').first.to_html.toutf8
auのスクレーパーのポイント
UserAgentをIEにする。UserAgent設定をしないとログイン弾かれた。これに気づくまでに30分かかるなど。
ログインフォームなどは基本的に#idでアクセスできるので便利。
PDFのダウンロードはMechanizeのバグのせいでできない 。(ICONVがWindows-31Jをパースできない。)
WEB明細ってCO2削減効果あるのかね。
どこでも、WEB明細・WEB閲覧っていうけど、郵便やヤマトのインフラは明細が無かろうが、毎日同じ場所を巡回してるんだし。
むしろ既存インフラに乗っけてたほうが量による最適化でコストメリットがあると思うけどなぁ。
もしWEB明細するなら、僕のEvernoteアカウントに毎月放り込んでほしいです。
見るために取りに行くの面倒だし。ワンクリックで見れないし。
WEB明細でCO2削減とかいう欺瞞。
2012/02/17
spotlight で計算ができるって知ってた?
MacのSpotlightって計算機なんですよ。
(e13dc0a6548f528b720a9e5bc7230ee0)
計算機を立ち上げなくても計算できるす。
四則演算だって出来るす
(3b5c8d95ca329f600c680cb9853c20db)
指数だって出来るす。
(83a8780512047051f99a3e73b22d04e9)
平方根計算もできるす
(a8a8193e49580eab31c710c6e9d8b80b)
階乗も計算できるす
(fac5d29e4e994e105ce02f554d6ed059)
この他にも、三角関数や対数も出来るらしい。
プロジェクトXが日本の技術立国を神話にした。
7年ほど前の話であるが。私は、友人に「プロジェクトXすごいね。日本ってすごいね。」とプロジェクトXを推したことがある。当時の私はプロジェクトXにハマっていた。その友人は私に答えたのだ「プロジェクトXと電子立国日本が勘違いしちゃった原因だよ。そういう意見もある」
プロジェクトXが日本の技術立国を神話にした。
私は、その話を、当時真剣に聞かなかった。でも今ならわかる気がする。友人の意見は正しかった。彼は当時は伊丹にいたので、彼を伊丹と呼ぶことにする。伊丹の意見は次のように続く。私は明石に住んでいるから明石とする。
伊丹の言ってたことはだいたいこんな感じだった。
アレは団塊世代のオナニーみたいなもんで、彼らが自分の世代を自己肯定をしてる。承認欲求を満たしる。技術ってのは日進月歩で当時いくらすごかったといっても、それが今すごいことと何ら関係ない。明石、オマエもパソコン触ってるならわかるだろ。パソコン・パーツの殆どはもう日本製でもないし、ほとんどは台湾製だよね。性能と価格をどっちを比べても台湾メーカーを選んでるよね。過去のすごかったかが、いまはもうすごくない。プロジェクトXなんてのは懐古主義。「昔はよかった」と年寄りがよく言うセリフが番組になってるだけだよ。
オマエの好きなギガバイトも台湾だろ。もう日本製のパソコンパーツは手に入らないよね。細かい部品は日本製かもしれないけど。製品として最後に残ったエルピーダメモリだって高いだけじゃないか。結局さ、日本ってのは、団塊世代の技術力がすごかったんじゃなくて、団塊世代が数が多くて、安くソコソコの製品を作り出せたに過ぎないんだよ。人口が全てだったんだよ。
明石よ、オマエはそんなことで勘違いオナニーしちゃいけないよ。日本がすごかったのは過去の話だから。三洋電機なんてそのうちハイアールになってるよ。
伊丹の言葉は心に深く刻み込まれた。
伊丹は何気なく言ったことかかもしれないけれど。私の心には深く刻み込まれた。今ならすごくわかる気がする。その当時は私はアレコレ反論したと思うが今はあまり覚えていない。
伊丹の言ってたポイントはこんなところか。
- プロジェクトXなんてのは懐古主義。「昔はよかった」と年寄りのセリフ。
- 団塊世代の人口ボーナスで、安くソコソコの製品を作れた。人口が全てだった。
- 昔は昔、いまスゴイかと言われると全くだよ。冷静になれ。
技術による高付加価値は幻想だと思うようになった。
伊丹とは、アレコレたくさん話しをしたと思うのだが、これも今はあまり覚えていない。だけれども私の価値観はアレから変わった気がする。日本が技術大国だと思うこともなくなった。
なんでこんなことを書いたのか。
「技術で成り立っている国が何故技術者を大事にしないのか」は、「奴隷で成り立っている国が奴隷を大事にしない。何故なら奴隷は奴隷だからだ」の論理とシノニムなので何ら不思議では無い。ただし、これは近代国家や先進国にあり得るはずの無い思想だ。
https://twitter.com/#!/QaNiM1S0/status/169966764413812736
このTweetがキッカケだった。昔に伊丹と話したことを思い出した。
「技術で成り立ってる国」
それが、そもそも幻想なのだと思う。日本は内需の国なんだと思います。僕らは学校で「日本は加工貿易の国」だと習いました。加工貿易は一次産業ではなく二次産業に分類される。「二次産業」の二次は、副次的の意味ですね。一次から派生するのが二次産業
たとえば、食品を卸している流通業を考えてみる。流通過程でどうしても外側が痛んだり、余剰在庫品を抱えてしまってそれらがロスになる。廃棄するにはもったいないが、商品にはならない。それらを食品でなく材料とみなして加工食品を作る。一次商品(メイン)に手を加えて、加工食品(副次)を作る。だからこれが二次産業。
キャベツの加工貿易
具体的な例を挙げる。キャベツを例にしよう。キャベツはそのまま流通させてると外葉が痛みが多数出てくる。痛んでたら売れない。それでは利益が出ないので、そのままスーパーに卸すのではなく、千切カットでサラダ用に加工したり、そもそも丸キャベツが不要な外食産業に出すことになる。
このキャベツの千切りが、加工貿易だということだ。加工は材料があるから成り立つ。これが原則だろう。
その内に、加工が利益を出せるようになると、その利益でカット野菜の種類を増やしたり、カットだけでなく煮込み、冷凍食にも手を出せばいい。
加工貿易も同じ事だ。
ではその[加工]は誰がやるのか。
その加工をいきなり工場で行うにはあまりにもハイリスクすぎる。なので倉庫の片隅で余った時間でキャベツをカットする。つまり人手でやってきた。
次に、生糸を例にすれば、生糸そのものが輸出品目だった時代がある。はじめに生糸があった。そして絹織物。次に染物。更に衣装デザイン、最後に西陣織のようなブランドの確立。こうやって次々と副次的に製品産業が発展する。この発展パターンこそが、現代日本史だ。このパターンがあらゆる産業で同時並行で起こっていた。
日本の底力=江戸時代の資産。
最初は魚介類・農作物の加工。次にそれらを取引する市場。これらは江戸時代240年のミラクルピース時代に日本にちゃんと根付いていた。
これが日本の底力だったわけだ。あまりに単純化したモデルだけれど、それが日本だった。日本の産業はこうやって育ってきた。
少し日本の歴史を見なおしておく。
キャベツと同じようなことが、あらゆる漁業・農業で始まった。農業から繊維産業、次に輸出用に造船を作る。さらに日本にない材料を仕入れるために造船を始めた。そして国内輸送の鉄道が作られる。その先に大規模な倉庫と工場の需要拡大があった。建設資材を林業で木材まかなった。すぐに足りなくなりセメントが必要になり石灰岩を堀る。また資材輸送のため造船と鉄道敷設、そのために鉄が必要だった。その結果、製鉄業が栄えた。製鉄業に不可欠な燃料を確保するために炭鉱を掘った。こうやって次々と産業が進化していった。
このあたりで日本は第二次世界大戦に足を突っ込んだ。
そして戦後も似たような感じで進化していく。まず復興のために鉄、石炭が必要だった。そしてエネルギーは石炭から石油、電気に変わっていく。
この段階で一次産品に鉄と石炭が加わっている。と考えるといい。豊富な鉄であらゆる産業を下支えしていた。次に鉄を輸出するようになる。
これら加工貿易には人が必ず介在してきた。
エネルギーが変わった。
このあたりでエネルギーが石炭から電気・石油に切り替わる。石油を運ぶための造船業も、鉄も豊富にあった。底力だったわけだ。内需を満たすための石油・電気を確保していった。内需を満たし余りある鉄資源を外国に売った。
エネルギーが変わると機械が変わった。繊維産業が電気と石油で動くようになる。機械化していった。石油機械が大需要を生み出した。繊維の輸出工場を支えるために、つまり「内需」のために機械産業が発達する。トヨタが生まれたのがこの頃だ。トヨタはいまでも豊田自動織機ですよね。
次々と生まれ来る機械への内需を満たしていった。その内に、自動車を作るようになった。豊富な鉄と造船に、工業機械・輸送機械の内需を必死で満たしてた、その中で自動車産業が生まれていった。
自動車はあらゆる産業を巻き込んで発達していったけど、トヨタが自動車メーカーとして独り立ちできたのはマイカーブームという内需のおかげだった。
エネルギーは電気に切り替わった。すると電球が各家庭に普及した。電灯変わっていく。この電灯の内需を満たしたのが松下電器産業を始めとする電器メーカーだった。
トヨタも松下も人口ボーナスによる内需を満たすことで、工場と大量生産のメリットを享受していた。
それらを作ってきたのは大量の労働力。つまり、人口だったわけだ。
逼迫する電力需給
産業は機械化で電気を食うようになった。金を稼ぐには電気が必要だ。関西でも黒部ダムが作られた。その次に団塊世代がマイホームを建て、冷蔵庫が普及すると電力需給が逼迫する。で原発が作られるんだけど、この時期になると、人力での建設が難しくなってくるので建設機械が大量に作られ始める。だから電機と電器と電気が区別されたりするんだけど。まぁそのへんはいいや。
結局は人口ボーナスなんだとおもう。人口増加で逼迫する需給があって、それを有り余る工業製品で補って、それでも足りない部分を技術革新で乗り切った。それが昭和の時代。
なにもしなくても人口による需要がそこにあった。技術はあとからついてきた。
技術がある「だけ」でどうすんのさ
技術があったから輸出が栄えたんじゃない。一次産品から始まって有り余る鉄を活かして、内需を満たして自動機械を作って、有り余る機械で自動車と電器を作ったわけだった。輸出市場でのコストメリットは人口と下支えする内需だった。
まず一次産品がありきで、余った◯◯を活かして、何かを作った。その何かは人口のお陰でソコソコ売れた。作った◯◯が余剰になるとまたそれを活かして◯◯を作った。そういう時代だった。
はじめに内需があった。はじめに技術ありきではない。内需があって国内市場で切磋琢磨した結果が輸出産業だったりする。
プラザ合意で全てが崩壊する。
国内に豊富なものと、国内にない材料を組み合わせて、団塊世代が加工していた。それがプラザ合意で崩壊し始める。
円安のコストメリットで輸出が死んでいく。有り余ったのが金だ。日本に足りない材料を買っていた資金が余り始める。余剰資金が投資に向かい始める。そしてバブル期に至った。と僕は思っている
人口ボーナスは日本だけのことじゃない。
日本とほぼ同時期に人口ボーナスを経験していたのがアメリカ・ドイツ・フランスだと思う。イギリスは日本よりだいぶ早い。アメリカは日本より10年速い人口ボーナスがあった。だからアメリカに学ぶことで日本は次に必要なモノが見えた。しかもそれは日本でも必要とされたものだった。
北米市場で需要が生まれる、おこぼれが日本に来る。日本で作り始める、日本でも人口ボーナスで同じ需要が生まれる。北米は市場激化するが、日本は安定した内需がありコストメリットが生かせる。このパターンの繰り返しなんじゃないかと思えてくる。
奇跡の自然淘汰。
自動車にしろ、電器にしろ、日本に技術が初めからあったとは思えない。単に北米市場の需要を満たす試行錯誤をしているうちに日本で需要が高まったんじゃないかと。北米需要に始まる国内競争の自然淘汰を勝ち進んだんだ。
つまり日本は北米市場と国内需要の2つの自然淘汰を経験することができた幸運に恵まれたんだとおもう。
技術力は結果としてついてきたに過ぎない。だから「技術立国日本」は変だなと思う。
技術があるからそれを活かしてというのがちょっと変だなと思う。技術で立ててきたよりも、人口ボーナスでのコストメリットが大きいところは否定出来ないし、人口ボーナスによる淘汰圧はかなり効いていたと思う。技術を下支えしてきたこれら自然淘汰圧と、内需が働かないどうして技術を高めることができようか。今まで通りでいけるはずがない。
なによりも、日本人は繊細で手先が器用で技術力があったから発展しだんだと盲目的に信じることなど。。。これはありえないでしょ。
卵(技術)が先か鶏(北米発展)が先か
ここまで書いてきてやっとわかる気がする。技術は結果だと。単なる幸運。
いまの産業は技術を育ててきたんじゃなくて、時代が育てた。なにもしなくても北米需要と内需で勝手に育ってた。だから技術者を大切にしない。そしてそもそも技術で成り立っていない。ソコソコの内需に満たされているだけ。
そうやって考えると、電子立国だとかプロジェクトXとか、俺達の技術はすごかったと。そういうのは、あの頃は楽しかったなぁという、老人のやっぱり懐古主義で間違いないと思うわけです。
老人の懐古主義を間に受けちゃった人たちが技術神話を下支えしてると思うに至るのです。時代の閉塞感のなか僕達はすごいんだという妙な自信をつけちゃうような番組を支持しちゃったんだろうなと思う。なにより僕もその一人だ。当時、衰退する日本経済を眼前にして、コヴァの戦争論やらプロジェクトXやら、閉塞感と絶望感を打破する某論にすがったんだろうなぁ。
ありえないからこそ「神話」なんですお。
2012-02-18追記 プロジェクトXは勘違いオナニー
伊丹はプロジェクトXについて、次のようなことも言ってた。
電子立国 日本の自叙伝とか、プロジェクトXで妙に勘違いして、政府や政治家が日本には技術があるんだ。って思い上がっちゃった。技術ってのはすぐに追いつかれるし。何でもかんでも「日本の技術力はスゴイ」「地方にも埋もれた技術がある」とか「町工場の技術」がなんて持ち上げて日本はおかしくなっちゃった。政府が町工場をアテにするようになったら終わりだろ。そういう技術神話を半導体分野で形成しちゃったというのが、NHKスペシャル電子立国の罪だし、結果半導体で日本は大ゴケしたろ。そこにきてプロジェクトXだよ。こんなもの本記事で信じた政治家が日本にあふれたら終わるよ。そういう空気を作っちゃって、日本はスゴイってことに反論できない空気にしちゃったプロジェクトXの罪は重いぜ
と。
「就職するなら、寄らば大樹の陰でだぜ、大樹に逃げようぜ。」と伊丹はそんなことを言っていた。
いま日本に有り余るものは・・・
日本は有り余るものをいっぱい持って活用してきた。
いまの日本の資源は何だろう。僕は通信網だと思う。いま淘汰圧が働いているのはソフトウェア産業でとくに通信インフラと通信をするプログラム部分だと思う。だからこの業界は面白い内需がなくても通信があれば、世界の淘汰圧に晒されている
通信をするプログラムとくにWEBはこれからもっともっと淘汰されて技術が高まるよ。
オススメ
僕らがいま「日本」だと思ってる特色はいつごろから生まれたのか。そういうことに興味があるなら。
NHKの「さかのぼり日本史」がオススメですよ。
2012/02/08
homebrewのsqliteが矢印キーが効かない。readlineしてない
Home brewで作った sqliteで readlineが動いてない??カーソルが動かない
Mac標準のsqlite3だと矢印キーが動く。
とりあえず、急ぐなら、brewを使わずにmac添付を使う
brew uninstall sqlite3 --force
それだけ。
どうしてもhomebrew版を使いたいなら
(スクリーンショット 2012-02-08 21.00.14)
brewのfomula(レシピ)を書き換える。
brew edit sqlite3
変更点
- depends_on('readline') => :optional + depends_on('readline') => :build
に変更したら終わりだった。
ちなみに brew sqlite も brew sqlite3も同じ。
SSHでknown_hostsをの警告無視する設定はどうなるか?
Known_hostsのhost keyが変わってエラーに成って、Y/Nが出てくるのが面倒くさいのでなんとからないかなと思ってやってみた。
警告を無視する設定
設定はこれ
takuya@air:~$ ssh takuya.example.com -o "StrictHostKeyChecking no"
"StrictHostKeyChecking no"をつければいいらしい。 .ssh/config に書いたら全部に有効になると思う。alias でもいいね。
どうなるか知ってる?
僕もわからない。とりあえずやってみる。
- 対象のホストにつないで、host 鍵を保存する
- /etc/hostsを書き換えてホスト名を上書き
- 違う鍵が来るようにしてエラーがどう変わるか見る
まず鍵を保存する。
.ssh/known_hostsの鍵を空っぽにして・・・
つなぐ
ssh takuya.example.com
これでホスト鍵が保存される。
/etc/hostsを書き換えて・・・
1 ## 2 # Host Database 3 # 4 # localhost is used to configure the 5 # when the system is booting. Do not 6 ## 7 127.0.0.1 localhost 8 255.255.255.255 broadcasthost 9 ::1 localhost 10 fe80::1%lo0 localhost 11 12 192.168.xxx.xx xxxxx.ddd.jp 13 14 19.168.12.11 takuya.example.jp #<---------------書き換えた 15 ~
接続した。
ホスト鍵が変わっているので通常はY/Nダイアログになる。
オプションをつけた場合は、そのままメッセージが出て、接続された。
takuya@air:~$ ssh takuya.example.jp -o "StrictHostKeyChecking no" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: POSSIBLE DNS SPOOFING DETECTED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ The RSA host key for takuya.mine.nu has changed, and the key for the corresponding IP address 192.168.xxxxx is unchanged. This could either mean that DNS SPOOFING is happening or the IP address for the host and its host key have changed at the same time. Offending key for IP in /Users/takuya/.ssh/known_hosts:3 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is 08:cf:c1:88:8e:6fxxxxx:xxxxxxxx. Please contact your system administrator. Add correct host key in /Users/takuya/.ssh/known_hosts to get rid of this message. Offending key in /Users/takuya/.ssh/known_hosts:13 Password authentication is disabled to avoid man-in-the-middle attacks. Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks. Last login: Wed Feb 1 22:05:59 2012 from 192.168.xxxxx takuya@debian00:~$ #<---------------------------------------------------------接続された takuya@debian00:~$ logout Connection to takuya.example.com closed.
ためみしてみた結果
ホスト鍵が変わっても、ダイアログは出ずに、「警告」と「書き換えたよ」ってメッセージが出てくる。
無条件に受け入れて、ファイルを更新することがわかる。
結論
オプションをつけると、鍵か変わってたら、メッセージだして、上書きする
ということで、あまりよくない。常時有効にするのは良くなさそうですね。
dnsラウンドロビンでコロコロ変わるときにつかえる。。。かも
参考資料
Amazonマグカップの在庫が復活するみたい
Amazonマグカップの在庫が復活するみたい
(スクリーンショット 2012-02-08 20.31.59)
欲しいです。
プレゼントに最適ですよねぇ。Amazonのマグカップって在庫希少だからいいんだけど。Gigazineとかで取り上げられちゃうと、一気に在庫なくなって困りますよね。
とりあえずAA貼るか。
在庫切れすぐするから、転売屋てきにはおいしいんだろうけど。在庫切れるまで買い占めるのやめて欲しい感じ。
Amazonオリジナル マグカップ 黒 [Stationery]
2012/02/07
FacebookのRecentActivityを消す、ブロックURL
Operaのコンテンツブロック機能を使ってFacebookの埋め込みiframe(アクティビティ)を消す。
ブロックURLに以下を追加する。
https://www.facebook.com/plugins/activity.php*
これで、情報サイトがチラチラうざったいFacebookを表示するのをやめさせることが出来る。
2012/02/06
Evernoteのオレが知ってる便利な使い方。フォルダを自動圧縮
Evenote使い始めて1年になろうとしています。ネットのEvernoteの記事を見ていると、「情報をどう整理するか」って話が多くてちょっと違うかなって思ってる。Evernoteは、Gmailと同じで管理を諦める。ってことだと思うんですね。
フォルダをEvernoteにドラッグするとどうなるか知ってる?
フォルダ ruby-kansai を 新規ノートにドラッグしています。
フォルダがドラッグできるようにして
(スクリーンショット 2012-02-06 22.16.08)
フォルダをドラッグする。
(スクリーンショット 2012-02-06 22.16.18)
フォルダは圧縮される
(スクリーンショット 2012-02-06 22.16.28)
zip 圧縮されて、ノートに張り付きました。超便利ですね。
Evernoteってこのように、手軽にファイルを放り込んで後で使うとか、使ったときに、整理をすればいいのであって、はじめから整理を考えると破綻する。データが溜まってからどうやって整理するか。を考えたほうが捗るとおもう。
まずEvenoteにデータを貯めてみてください。
データが溜まってから使うたびに整理をしていくだけでもそうとう違うと思う。僕は整理をやめてEvernoteに放り込むようにしてから、DesktopとDocumentsフォルダが「いま作業中」のデータだけになって相当すっきりしている。
rubyで可変関数的に、オブジェクトのメソッドを呼び出す。
rubyのクラスメソッドを指定して呼び出す。
>> class Test>> end #=> nil >> class Test >> def hoge >> puts :hoge >> end >> end #=> nil >> t = Test.new #=> #<Test:0x10fdf3288> t.method("hoge").call hoge
これで出来るのですね。callはrubyの()省略の副作用なので仕方ないですね。
オブジェクト.method('メソッド名').call(引数)
です。
callがなくなればもっとかっこいいと思うけれど、Rubyは ( ) を省略できるので、( )の有無でJavascriptみたく、関数へのポインタと、関数実行を区別できない。 明示的に( )をつけたら、実行、それ以外はProcオブジェクト参照って出来ればいいのな。
2012/02/05
rubyでinは予約語だから注意な
もしかしてinは予約語?
for in で使う予約語だそうです。
forループそのものを使わないrubyにおいて in がいつまでも予約語である必要があるのかというそんな思いはある。
rubyでforループは書かない。eachの発明が偉大すぎた。
IO.pipeを使ってて気づいた
>> IO.pipe #=> [#<IO:0x108791f68>, #<IO:0x108791f18>] >> in, out =IO.pipe SyntaxError: compile error (irb):8: syntax error, unexpected kIN in, out =IO.pipe ^ from (irb):8 from :0 >> a,b=[1,2] #=> [1, 2] >> input, output = IO.pipe #=> [#<IO:0x108741bd0>, #<IO:0x108741b80>]
inは予約語だから
でも、使うこと無いよね。
RubyはIO.pipeを使えば、パイプを作ることが出来る
IO.pipeを使えば、パイプを作ることが出来る
パイプを作ると楽しい。
o,i = IO.pipe 100.times{ i.puts :test } 100.times{ puts o.gets }
これだけ
Pipeを使うと何が便利か。スレッドをブロック出来る
loop{ p o. gets }
で i.puts を待つことが出来る。
どういうことかというと
IO.pipeはブロックする?
>> input.puts "aaaaaaaaa" #=> nil >> input.puts "aaaaaaaaa" #=> nil >> input.puts "aaaaaaaaa" #=> nil >> out.gets #=> "aaaaaaaaa\n" >> out.gets #=> "aaaaaaaaa\n" >> out.gets #=> "aaaaaaaaa\n" >> out.gets #待つ
こういうことです。3行書きだしたので、3行読み込める。4行目を読み込んだ時点で、パイプは空。なので、データが来るのを待ちます。
まってると、irb側からは手出しができないです。どうするのか?threadや、drubyをつかいます。threadを使って別スレッドから4行目を書き込んだり、drubyを使って別プロセスから4行目を書き込みます。
o,i = IO.pipe Thread.start{loop{ i.puts "aaaaaaaaa" }} 100.times{ puts o.gets } >> out.gets #=> "aaaaaaaaa\n" >> out.gets #=> "aaaaaaaaa\n" >> out.gets #=> "aaaaaaaaa\n" >> out.gets #=> "aaaaaaaaa\n" #...etc
でdrubyの場合、なんにつかうの?ネットワークパイプです。
たとえば、drbを読み込んで、druby経由で、ネットワーク越しにIOをやり取りできる。
まともにやると、ncコマンドやポート制御が必要だったりする。
でもRubyならdrubyと、IO.pipeで即決
受信側
o,i = IO.pipe s =DRb.start_service( "druby://localhost:12345", i) loop{ p o. gets }
送信側
i= DRbObject.new_with_uri('druby://localhost:12345') 100.times{ i.puts :test }
IO.pipeとdrb/threadの組み合わせは便利。
これで、スレッドを簡単に扱えるし、IOでパイプを扱うこともできる。そしてネットワークでパイプを扱うこともできる。便利ね。
ちなみに、readについて
o.readは i.closeを待つ
IOなので、readコマンドはEOFを待つ。つまり、i.closeでEOFが送られない限りo.readはブロックされる。
このあたりのブロックの仕組みを見ているとruby のプリエンプションのthreadがどうしてIOでスレッドを切り替える。とされているかなんとなくわかった気がする。
参考
Cygwin環境にRVMを用意する。CygwinでもRVMでRuby使い分けたいよね。
Cygwinでもrvm使えると便利かも。と思いました。i7マシンだとビルドの遅さもそんなに気にならないし。
まず必須なところから。
rvmのインストール
bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer) export PATH=$rvm_path/bin:$PATH rvm pkg install autoconf
以上は必ずシングルスレッドでやること。
CygwinのSSLがエラーを吐くので対策をしておく。
apt-cyg install ncurses cd /usr/ssl/certs curl http://curl.haxx.se/ca/cacert.pem \ | awk 'split_after==1{n++;split_after=0}\ /-----END CERTIFICATE-----/ {split_after=1} {print > "cert" n ".pem"}' c_rehash
必要なモジュールを入れておく。
各種必要なパッケージを事前に入れておく。これは順不同だからScreenとかBackgroundでパパっとやっちゃえばいいと思う。
必須だけど、順不同なので並行して処理して良い
rvm pkg install readline rvm pkg install iconv rvm pkg install openssl rvm pkg install libxml rvm pkg install libxslt
たぶん無くてもいけるけど、念のために
apt-cyg install readline apt-cyg install autoconf apt-cyg install openssl apt-cyg install openssl-devel
準備が終わったらインストール
rvm install 1.9.3-head
1.8系はエラーになるので、以下を参考にしてみる。
http://www.mk-mode.com/wordpress/2011/12/04002057/
それでも1.8は無理みたい・・・うーむ。
Cygwinのビルド失敗は追いかけると時間かかるしなぁ。1.9が入った時点でOKとしよう。
Rvmを使ったRubyのインストール管理方法で便利なものをまとめ。
RVMは自分のユーザー環境に、独自のRuby環境を作ることができる。homebrewのように、/usr/localですらない。/home/takuya/.rvmに、バージョンが違うRubyを大量に飼育できるのです。
RVMを使えば、opensslなどの依存モジュールもRVM側だけで管理できる。
つまり、homebrew に頼らなくてもRVMさえあればRubyの環境を維持管理することが出来る
rvmさえあれば、rubyで困ることが減る。
rubyでハマる色々な罠
ruby 1.9の罠。
ruby のビルドの違いの罠
gemsの罠
gemsのバージョン地獄
gems関連はbundler で解決!!、Rubyそのものは、RVMでそこそこ解決する。
rvmを使ってるよ!っていう人は
- rvm alias機能
- rvm コマンド補完機能
あたりを読むと嬉しい気分になれると思います。
RVMのインストール
bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer) . ~/.bash_profile
これで自分のユーザー環境にRVMの準備ができる
依存パッケージのインストール
RVMでインストール出来るビルドパッケージを調べる。
takuya@air:~$ rvm pkg list Usage: 'rvm pkg {install,uninstall} {readline,iconv,curl,openssl,zlib,autoconf,ncurses,pkgconfig,gettext,glib,mono,llvm,libxml2,libxslt,libyaml}' 'ree_dependencies' installs zlib, ncurses, readline, openssl and iconv in this order. still need to add ' --with-readline-dir=$rvm_usr_path --with-iconv-dir=$rvm_usr_path --with-zlib-dir=$rvm_usr_path --with-openssl-dir=$rvm_usr_path' to 'rvm install ree’
以上が、rvmがインストール出来るパッケージ。Rubyのインストールに必要なパッケージはRVMが提供してくれる。便利。
まとめて入れるよ。
rvm pkg install readline rvm pkg install iconv rvm pkg install openssl #…etc
って、逐次書くのものめんどくさいわ。
まとめて、ループ処理しよう
for i in autoconf readline openssl iconv zlib libxml2 libxslt libyaml ;do rvm pkg install $i ; done;#これでOK
依存パッケージを使ったRubyのインストール
じゃぁ、早速、いままでの依存モジュールを使ってRuby1.9を入れてみようか。
rvm install ruby-1.9.3 \ --with-libyaml-dir=$rvm_path/usr \ --with-libxml2-dir=$rvm_path/usr \ --with-libxslt-dir=$rvm_path/usr \ --with-readline-dir=$rvm_path/usr \ --with-iconv-dir=$rvm_path/usr \ --with-zlib-dir=$rvm_path/usr \ --with-openssl-dir=$rvm_path/usr
読みやすく改行入れてるから、一行で書いたものがこれ。
rvm install ruby-1.9.3 --with-libyaml-dir=$rvm_path/usr --with-libxml2-dir=$rvm_path/usr --with-libxslt-dir=$rvm_path/usr --with-readline-dir=$rvm_path/usr --with-iconv-dir=$rvm_path/usr --with-zlib-dir=$rvm_path/usr --with-openssl-dir=$rvm_path/usr
このように使う。*1
RVMを使ったRuby切り替え
rvmを使って、一時的にRubyを切り替えることが出来る。
rvm use system #OS標準を使う rvm use ruby-1.8 rvm use ruby-1.9.3 rvm use ruby-head
これで、いまのシェルは、rvm指定したRubyになる。
指定したRubyをデフォルトにするには
--defaultをつけると、指定したRubyが既定になる。
rvm use system --default #システムを標準で使う
RVMにインストール済みのRubyの一覧は
rvm list で、インストール済みで、使用可能な、Rubyの一覧が見られる。
takuya@air:~$ rvm list rvm rubies jruby-1.6.4 [ x86_64 ] macruby-0.10 [ x86_64 ] => ruby-1.8.7-p352 [ i686 ] ruby-1.9.3-rc1 [ x86_64 ]
RVMでインストール可能なRubyの一覧は
rvm list knownでインストール可能なRubyの一覧が取得できる
takuya@air:~$ rvm list known # MRI Rubies [ruby-]1.8.6[-p420] [ruby-]1.8.6-head [ruby-]1.8.7[-p352] [ruby-]1.8.7-head [ruby-]1.9.1-p378 [ruby-]1.9.1[-p431] [ruby-]1.9.1-head [ruby-]1.9.2-p180 [ruby-]1.9.2[-p290] [ruby-]1.9.2-head [ruby-]1.9.3-preview1 [ruby-]1.9.3[-rc1] [ruby-]1.9.3-head ruby-head # GoRuby goruby # JRuby jruby-1.2.0 jruby-1.3.1 jruby-1.4.0 jruby-1.6.1 jruby-1.6.2 jruby-1.6.3 jruby[-1.6.4] jruby-head # Rubinius rbx-1.0.1 rbx-1.1.1 rbx-1.2.3 rbx-1.2.4 rbx[-head] rbx-2.0.0pre # Ruby Enterprise Edition ree-1.8.6 ree[-1.8.7][-2011.03] ree-1.8.6-head ree-1.8.7-head # Kiji kiji # MagLev maglev[-26852] maglev-head # Mac OS X Snow Leopard Only macruby[-0.10] macruby-nightly macruby-head # IronRuby -- Not implemented yet. ironruby-0.9.3 ironruby-1.0-rc2 ironruby-head
いっぱいあって困るね。
RVMでインストール可能なRuby一覧を更新する
rvm get
たとえば安定版を追いかけるなら
rvm get stable
最新版を追いかけるなら
rvm get latest
RVMのコマンド補完
.bashrcに次を付加する。すると rvmコマンドが補完される。
takuya@air:~/Desktop$ rvm <TAB><TAB> debug gemset jruby-1.6.4 package ruby srcdir use default help list rake ruby-1.8.7-p352 system version fetch implode macruby-0.10 reload ruby-1.9.3-rc1 tests gem info monitor remove snapshot uninstall gemdir install notes reset specs update ***.bashrcに追加するもの以下。 >|| [[ -r $rvm_path/scripts/completion ]] && . $rvm_path/scripts/completion
1.8と1.9をもっと手軽に切り分けたい。
1.9系だけでも複数入れてたりすると面倒なので、1.9という名前だけでアクセスしたい
takuya@air:~$ rvm use 1.9 WARN: ruby ruby-1.9 is not installed. To install do: 'rvm install ruby-1.9'
などとなって不便です。
解決策Aliasを使う
takuya@air:~$ rvm alias create 1.9 ruby-1.9.3-rc1 Creating alias 1.9 for ruby-1.9.3-rc1. Recording alias 1.9 for ruby-1.9.3-rc1.
1.9とかいたら 1.9.3を指すように指定しました。
takuya@air:~$ rvm use 1.9 Using /Users/takuya/.rvm/gems/ruby-1.9.3-rc1 takuya@air:~$
ね、簡単でしょ
もしreadline が有効にならず、homebrewのreadlineを使うなら、
僕の場合、rvm管理下のreadlineだとうまくいかなった。Macだから?とりあえず、homebrewのreadlineを使ってごまかしてる。
homebrew のライブラリヘッダーのパスを追加しておく。
rvm install 1.8.7 -C "--enable-shared --with-readline-dir=`brew --prefix` rvm use 1.8.7
→参考そのものズバリなエントリを発見 RVMを用いてreadlineオプションを指定する - kdkk0 の 日記
Macって意外とビルド地獄なんですね。
Linux良く出来てるんだわ・・・
システムデフォルトを使う必要があるときは
RVMで入れたRubyを使用せずにシステムで入れたRubyを使うには,
rvm system
これで標準のRubyが使える
Macの関連付けの変更方法
ポイントは「すべてを変更」の選択ボタン。
ファイルを右クリック
(スクリーンショット 2012-02-06 2.51.16)
ファイルを開くプログラムを選ぶ
(スクリーンショット 2012-02-06 2.51.04)
出来上がり。
ポイントは、「すべてを変更」をすること。そのままだと、該当ファイルだけの「開く」を変えたに過ぎない。
(197062234c2a61d4dc2732637d733ad7)
ちなみに。
Macは「ディレクトリ内部のアイコンの位置を自由に配置する」がまだ使える。Windowsが7で捨ててしまった、Macはまだ使える。
その違いの理由はWindowsがレジストリだったの対し、Macはフォルダに隠しファイルで表示設定を置いているからだと思う。
wgetは保存せずに、直接展開できるんだよ。
wget でファイルを保存して展開する。いつものパターンだけど。
ファイル保存が、面倒くさいじゃん?
いつものパターンだけど、
wget http://example.com/hoge.tgz tar zxvf hoge.tgz
面倒くさいじゃん。っていうか何も考えずに、いつものパラメータを書いてるだけでした。
直接展開すればいいじゃん?
wget -O - 'http://sourceforge.jp/frs/redir.php?m=jaist&f=%2Fnkf%2F53171%2Fnkf-2.1.2.tar.gz' | tar zxvf -
標準出入力を経由して、直接展開すればいいじゃん。このほうが楽だよね。
だって、ファイル保存して展開するの面倒くさいじゃん。
これなら一行で終わるし。
解説
wget -O -
wget のオプションに -O を指定して、出力を - に指定した。
- -O
- wgetのファイル保存先
- - (ハイフン)
- 標準出力にする。
ということになる。
tar zxvf -
- zxvf
- gzip を extractしながらverbose して
- - (ハイフン)
- 標準入力からファイルを受け取る
いつものコマンドでも見直すと、ちょっと楽しいですね。
*1:#with-xxx-dir は適当につけけたので。間違ってるかも・・
2012/02/02
RVMをDebianで使う。
rvm便利ですね。惚れまくりです。
DebianでRVMを使うには
手っ取り早くいく
sudo apt-get install build-essential libssl-dev libreadline5-dev zlib1g-dev checkinstall make curl ruby bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer) source ~/.bash_profile
RVM管理下のパッケージで、コンパイルをしようとしらけど、エラー。手っ取り早くいくためにAPTパッケージを使った。結局たくさんパッケージをいれないとだめだった。
autoconf パッケージがこける場合
なぜかautoconfがmake エラーになったので。
export PATH=$rvm_path/bin:$PATH
を実行してからやるとよいようだ。
RubyのMechanizeがSSLエラーになる。
とりあえず、以下を最初にやってからMechanize.newすると大丈夫っぽい
require 'openssl' OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
エラーになったやつ。
sora_h のniconico モジュールを使ったらエラーだった
?> require 'niconico' #=> true >> a=Niconico.new 'takuya***@gmail.com' , ‘****' #=> #<Niconico: takuy****@gmail.com (not logined) ?> >> a.login OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed from /Users/takuya/.rvm/gems/ruby-1.9.3-rc1/gems/net-http-persistent-2.3.3/lib/net/http/persistent/ssl_reuse.rb:70:in `connect' from /Users/takuya/.rvm/gems/ruby-1.9.3-rc1/gems/net-http-persistent-2.3.3/lib/net/http/persistent/ssl_reuse.rb:70:in `block in connect' from /Users/takuya/.rvm/rubies/ruby-1.9.3-rc1/lib/ruby/1.9.1/timeout.rb:54:in `timeout' from /Users/takuya/.rvm/rubies/ruby-1.9.3-rc1/lib/ruby/1.9.1/timeout.rb:99:in `timeout' from /Users/takuya/.rvm/gems/ruby-1.9.3-rc1/gems/net-http-persistent-2.3.3/lib/net/http/persistent/ssl_reuse.rb:70:in `connect' from /Users/takuya/.rvm/rubies/ruby-1.9.3-rc1/lib/ruby/1.9.1/net/http.rb:755:in `do_start' from /Users/takuya/.rvm/rubies/ruby-1.9.3-rc1/lib/ruby/1.9.1/net/http.rb:750:in `start' from /Users/takuya/.rvm/gems/ruby-1.9.3-rc1/gems/net-http-persistent-2.3.3/lib/net/http/persistent.rb:405:in `connection_for' from /Users/takuya/.rvm/gems/ruby-1.9.3-rc1/gems/net-http-persistent-2.3.3/lib/net/http/persistent.rb:616:in `request' from /Users/takuya/.rvm/gems/ruby-1.9.3-rc1/gems/mechanize-2.1/lib/mechanize/http/agent.rb:264:in `fetch' from /Users/takuya/.rvm/gems/ruby-1.9.3-rc1/gems/mechanize-2.1/lib/mechanize.rb:1036:in `post_form' from /Users/takuya/.rvm/gems/ruby-1.9.3-rc1/gems/mechanize-2.1/lib/mechanize.rb:380:in `post' from /Users/takuya/.rvm/gems/ruby-1.9.3-rc1/gems/niconico-1.1.3/lib/niconico.rb:30:in `login' from (irb):6 from /Users/takuya/.rvm/gems/ruby-1.9.3-rc1/gems/irb_rocket-0.2.0/lib/irb_rocket.rb:65:in `block in signal_status' from /Users/takuya/.rvm/gems/ruby-1.9.3-rc1/gems/irb_rocket-0.2.0/lib/irb_rocket.rb:26:in `call' from /Users/takuya/.rvm/gems/ruby-1.9.3-rc1/gems/irb_rocket-0.2.0/lib/irb_rocket.rb:26:in `capture' from /Users/takuya/.rvm/gems/ruby-1.9.3-rc1/gems/irb_rocket-0.2.0/lib/irb_rocket.rb:64:in `signal_status' from /Users/takuya/.rvm/rubies/ruby-1.9.3-rc1/bin/irb:16:in `<main>'>> ?>
MechanizeはSSL関係で、証明書関連でエラーになる。ってことらしい。
対処法
・証明書を入れる
・証明書エラーは無視する。
自分で使うなら後者
require 'openssl' OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE require 'mechanize'
これで、とりあえず、しばらく使えるようになるみたいですね。
参考
HTC bravo の着信音を設定する
HTCのホームアプリなら全部に共通っぽいので、改めてエントリに。
多分Android全般じゃなくてHTCSenseに限るんじゃないかと思うんだけど。
着信音を変えると便利そうなのです。
アプリを使って探して設定
こちらで紹介したアプリでダウンロード&設定ができます。このアプリを使って設定した場合、アプリをアンインストールした後は再設定できないのでご注意ください。
直接放り込む
着信音・アラーム音・通知音とありますが、ファイルは同じMP3で問題ないです。違うのは、置いておく場所です。
SDカードに「media」というフォルダを作り、その中に「audio」というフォルダを作ります。その中に以下のフォルダを作ります。(「/sdcard/media/audio/」に作るという事)
「alarms」アラーム音用のフォルダ
「notifications」通知音用のフォルダ
「ringtones」着信音用のフォルダ
あとは、MP3を放りこめばOK。普通に設定できます。ただし、SDカード上のファイル検索が行われるタイミングが、電源投入時とSDをマウントしたタイミングだけなのでご注意ください。
HTC Desire(X06HT)の着信音 | さぼりーまんって
とりあえず、ノブレス携帯の着信音を設定しました。
ノブレス・オブリージュ、あなたが最高の救世主たらんことを。
2012/01/27
gemのアンインストール
(8ac88162a200e02ff7d1f413986add5c)
rubygemのライブラリを消すのはuninstall コマンドから出来る。
gem uninstall rails
railsなどで、バージョン変えたらトラブった!などで便利
2012/01/25
JScriptだと?。CygwinでRails動かしたらこうなった。
(スクリーンショット 2012-01-25 16.04.02)
JScriptですよ。マジすか。
手順
cygwinをインストール
setup.exeでホームディレクトリ以下にでも。
rubyのインストール
setup.exeでついでに入れる。apt-cyg でも
rubygemsはcygportsにおいてある。
apt-cyg update -m ftp://ftp.cygwinports.org/pub/cygwinports apt-cyg install rubygems
railsをインストール
sqlite3
apt-cyg update -m ftp://ftp.jaist.ac.jp/pub/cygwin/ apt-cyg install libsqlite3-devel
gem install rails
起動
rails new test cd test bundle install #←念のため rails -s
出来上がり。
簡単だけど使い道は。。。
そうですね。せっかくのCore i7をサーバー専用でつかうのが もったいない。なのでCygwinで使えるってことでしょうか。
Corei7速い。Cygwinでビルドしても我慢できるレベル。
ときどきForkでエラーになる場合は
CygwinがFork云々でエラーになる場合ば
*** fatal error - unable to remap to same address as parent : Cygwin, Ruby on Rails, System calls
http://www.mylifestartingup.com/2009/04/fatal-error-unable-to-remap-to-same.html
を参考にすると治った。
Macでlha/lzhを展開する
mac でlzh を展開するには、コマンドが、実は手っ取り早い。
インストール
brew install lha
コマンドオプション。
takuya@air:~/Desktop$ lha LHarc for UNIX V 1.02 Copyright(C) 1989 Y.Tagawa LHx for MSDOS V C2.01 Copyright(C) 1990 H.Yoshizaki LHx(arc) for OSK V 2.01 Modified 1990 Momozou LHa for UNIX V 1.00 Copyright(C) 1992 Masaru Oki LHa for UNIX V 1.14 Modified 1995 Nobutaka Watazaki LHa for UNIX V 1.14i Modified 2000 Tsugio Okamoto Autoconfiscated 2001-2005 Koji Arai usage: lha [-]<commands>[<options>] [-<options> ...] archive_file [file...] commands: [axelvudmcpt] options: [q[012]vnfto[567]dizg012e[w=<dir>|x=<pattern>]] long options: --system-kanji-code={euc,sjis,utf8,cap} --archive-kanji-code={euc,sjis,utf8,cap} --extract-broken-archive --help --version commands: options: a Add(or replace) to archive q{num} quiet (num:quiet mode) x,e EXtract from archive v verbose l,v List / Verbose List n not execute u Update newer files to archive f force (over write at extract) d Delete from archive t FILES are TEXT file m Move to archive (means 'ad') o[567] compression method (a/u/c) c re-Construct new archive d delete FILES after (a/u/c) p Print to STDOUT from archive i ignore directory path (x/e) t Test file CRC in archive z files not compress (a/u/c) g Generic format (for compatibility) or not convert case when extracting 0/1/2 header level (a/u/c) e TEXT code convert from/to EUC w=<dir> specify extract directory (x/e) x=<pattern> eXclude files (a/u/c)
使ってみた
takuya@air:~/Desktop$ lha x ktrans019.lzh ktrans.exe - Melted : oooooooooooooooooooooooooooooooooooooooooooooo ktrans.ini - Melted : o ktrans.txt - Melted : o takuya@air:~/Desktop$ lha LHarc for UNIX V 1.02 Copyright(C) 1989 Y.Tagawa
lzh圧縮は、新規圧縮には使っちゃダメですよ。メンテされてない上に、脆弱性あるからね。
puppetで構成管理で困ったときに最初に見るまとめ。
puppetで構成管理をする。なれると楽と言うか、安心していられる。なんせ台数が増えるとこれがないと安心できない。
一番参考になる puppet 資料
http://www.sssg.org/~naoya/puppet/project.html
puppetで設定を適用する
とりあえず設定を反映したりテストする。
$>puppetd --server debian00.local --no-daemonize --verbose --onetime
オプションの説明はこれ
- --sever
- puppetmasterサーバー指定
- --no-daemonize --onetime
- この一回だけを実行する。
- --verbose
- 進捗表示
これでクライアントが、サーバーに設定を取りにいく。
puppet masterサーバーをフロントで起動して状況を見る
進捗状況が表示されながら、クライアントの接続状況がみえる。
sudo /usr/sbin/puppetmasterd --no-daemonize --verbose
- --no-daemonize
- デーモン化せずに、フロントで起動
- --verbose
- 進捗表示
puppet 設定ディレクトリ
debianの場合はこんな感じになっていた。
/etc/puppet/ ├── auth.conf ------------------------------- マスターに接続許可するネットマスク ├── autosign.conf --------------------------- SSL通信をするクライアント設定 ├── files -------------------------- 同期用ファイル │ ├── etc │ │ ├── apt │ │ │ ├── sources.list │ │ │ └── sources.list.d │ │ │ ├── hadoop.list │ │ │ └── virtualbox.list │ │ ├── hosts │ │ ├── ntp.conf │ │ ├── resolv.conf │ │ ├── ssh │ │ │ └── sshd_config │ │ └── sudoers │ ├── home │ │ └── takuya │ └── var │ └── cache │ └── debconf │ └── jre6.seeds ├── fileserver.conf -------------------------------------- 同期用ファイルの設置場所など ├── manifests │ └── site.pp -------------------------------------- puppetの同期設定。一番大事 ├── modules ├── puppet.conf --------------------------------------- puppet自体の設定 └── templates
puppet 設定の自動生成
Syntaxエラーなしに設定書くのがしんどい。その上、どう書いていいかわからない。サンプルもよくわからない。
そこで、Generatorを活用する。
ralsh を使う
ユーザー設定の作成
takuya@debian00:~$ ralsh user takuya user { 'takuya': ensure => 'present', shell => '/bin/bash', uid => '1000', gid => '1000', comment => 'here,i am ', home => '/home/takuya', groups => ['takuya','admin'] }
パッケージ設定の作成
takuya@debian00:~$ ralsh package openssh-server package { 'openssh-server': ensure => '1:5.5p1-6+squeeze1' }
基本設定のジェネレーター
- ralsh user
- ralsh package
これで、現在の設定をすべて取り出せる。
設定の連鎖についての設定
ある設定が書き換わったら、まとめて更新する という設定。
たとえば、ntpdサーバー設定が変わったら、ntpdを再起動するみたいな
19 class ntp { 20 package { 'ntp' : ensure => latest 21 file { '/etc/ntp.conf': 22 source => 'puppet://debian00.loc 23 require => Package['ntp'], 24 } 25 service { 'ntp': 26 ensure => running, 27 enable => true, 28 subscribe => [ File['/etc/ntp.con 29 } 30 }
こういう依存関係を記述できる所がPuppetの強みです。
- a subscribe b
- AはBが書き換わったら更新する
- b notify a
- Bが書き換わったらAを更新する
- B require A
- AのインストールにはBが必要
設定を有効にする
class A{ ##ほげほげ } #作ったクラスを有効に include A
include を書かないとClassは有効にならないので注意。
逆に、Classは残すけど、無効化するときは、include をコメントする。
ファイルが書き換わったらコマンドを実行する
ファイルが書き換わったら、◯◯コマンドを実行する。
300 } 301 exec{ "hadoop_restart": 302 command => 'for service in /etc/init.d/hadoop-0.20-*;do sudo $service restart;done;', 303 refreshonly => true, 304 path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 305 subscribe => [ 306 File['/etc/hadoop/conf.my_cluster/slaves'], 307 File['/etc/hadoop/conf.my_cluster/masters'], 308 File['/etc/hadoop/conf.my_cluster/mapred-site.xml'], 309 File['/etc/hadoop/conf.my_cluster/log4j.properties'], 310 File['/etc/hadoop/conf.my_cluster/hdfs-site.xml'], 311 File['/etc/hadoop/conf.my_cluster/hadoop-policy.xml'], 312 File['/etc/hadoop/conf.my_cluster/hadoop-metrics.properties'], 313 File['/etc/hadoop/conf.my_cluster/hadoop-env.sh'], 314 File['/etc/hadoop/conf.my_cluster/fair-scheduler.xml'], 315 File['/etc/hadoop/conf.my_cluster/core-site.xml'], 316 File['/etc/hadoop/conf.my_cluster/configuration.xsl'], 317 File['/etc/hadoop/conf.my_cluster/capacity-scheduler.xml']], 318 } 319 exec { "hadoop_enable_my_conf": 320 command => 'update-alternatives --install /etc/hadoop-0.20/conf hadoop-0.20-conf /etc/hadoop-0.20/conf.my_cluster 50', 321 refreshonly => true, 322 path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 323 subscribe => File['/etc/hadoop/conf.my_cluster'] 324 }
証明書がおかしくなったら、クライアント側の証明書を消す
PuppetサーバーとPuppetクライアントの間は、証明書でお互いを確認しているが、それが時々壊れるので。一旦、証明書を破棄する。
sudo su cd /var/lib/puppet/ssl find -name "*.pem" | xargs -I@ rm @
そしておもむろに、再接続。
サーバー側でautosign.confに指定されているドメインなら一瞬で終わるよ
puppetでpuppetがインストールできない。
問題は、puppet がインストールされている環境を作り込むことです
どうやってもpuppetで管理できないもの
resolv.conf ---puppet はresolv.confのエラーを修正できないことがる。これが壊れると証明書関連のエラーになってファイルを受信できないのでresolv.confの破壊後はresolv.confを使うPuppetはエラーになる。
次の失敗はpuppetが壊れるので再起不能になる。
puppet自身の更新失敗
rubyの動作不良
rubygemsの破壊
なのでシステムRubyの更新は慎重に。被害甚大です。
puppet設定本家ドキュメント
http://docs.puppetlabs.com/references/stable/type.html
http://docs.puppetlabs.com/references/stable/function.html
http://docs.puppetlabs.com/guides/language_guide.html
わかりやすいドキュメント(オススメ)
2012/01/20
hgwebの作り方。自分だけのレポジトリを使って楽をする。
gitもいいけどhgもかなり良いです。最近のhg は文字化け知らずですね。
hgweb で自分だけのhgハブサイトを作る。
(aa807be00ee84c05b6eaf6df83e136d0)
githubも良いんだけど、公開・非公開の管理が面倒だし。あれはgit cloneするためにあるようなもので不便。
自分で使うにはhgwebは超便利。hg であるていどたまったらgithubに出すのが理想。
hgweb のインストールと設定をする。
mercurialを入れる
これはインストール済前提で。
もしmercurialをeasy_installから入れるときは
sudo aptitude install python-setuptools #easy_install のインストール sudo easy_install -U mercurial
hgwebのソースコードの場所を探す。hgをインストール済なら、どこかにあるはず。
hgwebを探す
sudo updatedb sudo locate hgweb | grep cgi /usr/share/doc/mercurial-common/examples/hgweb.fcgi /usr/share/doc/mercurial-common/examples/hgweb.cgi
見つかったhgweb.cgi を動作させたいディレクトリにコピー
cp /usr/share/doc/mercurial-common/examples/hgweb.cgi /var/www/repos cp /usr/share/doc/mercurial-common/examples/hgweb.fcgi /var/www/repos # fcgiを使う場合
/var/www/reposで公開する。
/var/www/reposをhgwebのディレクトリにする。このディレクトリでhgwebを使う。
.htaccess
#起動設定 Options +ExecCGIAddHandler cgi-script .cgi #AddHandler fcgid-script .fcgi #fcgi用 Order Allow,Deny Allow from all DirectoryIndex ./hgweb.cgi #DirectoryIndex ./hgweb.fcgi # fcgi用
必要なら、httpd.confで /var/www/reposに allow override all または、execcgiをつけておく
fcgiを動かすときは
cgiはたいてい入ってるけど、fcgidはインストールが必要
sudo a2enmode fcgid sudo service apache2 reload
hgweb.cgi の設定。(fcgiも同じ)
5 # Path to repo or hgweb config to serve (see 'hg help hgweb') 6 config = "/var/www/repos/hgweb.config" # 設定ファイルのパスを書く 7
fcgiの場合は、hgweb.fcgiが編集対象
hgweb.config
先ほど指定した設定ファイルを編集する
[paths] trunk = /var/www/repos/* [web] encoding = “UTF-8”
* を使うと該当ディレクトリ以下が全部対象になる。
スタイルを変えたい
スタイルを変えて遊ぶことが出来る
[web] style=coal
各スタイルの見栄えについては、次を参照すると良い。 Logwatch for santa » hgweb の見た目を変更する
もっとスタイルを変えたい。
debianの場合は、次の場所にテンプレートの実体があった。
locate mercurial | grep templates /usr/share/mercurial/templates
easy_install の場合は
/usr/local/lib/python2.6/dist-packages/mercurial-2.0.2-py2.6-linux-i686.egg/mercurial/templates/
にテンプレートファイルがあった。
それぞれ、templatesディレクトリにスタイル一式がある。
もし別のスタイルを作って使うなら、
/path/to/template/${style_name}
${style_name}で名前を決めてスタイルを作る。
これを hgweb.configに書く。
[web] templates = /path/to/template/ styple = style_name
または、標準templatesのディレクトリで、コピーして、別名で作る。
参考資料:さらに認証するなど
HGWEBの認証を設定すると・・・?
Mercurial 勉強中 (7) - Web 経由の push と HTTP 認証 - daily dayflower
認証がPAMなら?
Person who cannot stick to anything: apache2 + mod-auth-pam
参考資料。本家
HgWebDirStepByStep - Mercurial