Hatena::ブログ(Diary)

ブックマクロ開発に このページをアンテナに追加 RSSフィード Twitter

2012/02/08

homebrewのsqliteが矢印キーが効かない。readlineしてない

Home brewで作った sqliteで readlineが動いてない??カーソルが動かない

Mac標準のsqlite3だと矢印キーが動く。

とりあえず、急ぐなら、brewを使わずにmac添付を使う

brew uninstall sqlite3 --force

それだけ。

どうしてもhomebrew版を使いたいなら

f:id:takuya_1st:20120208210040j:image(スクリーンショット 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 でもいいね。


どうなるか知ってる?

僕もわからない。とりあえずやってみる。

  1. 対象のホストにつないで、host 鍵を保存する
  2. /etc/hostsを書き換えてホスト名を上書き
  3. 違う鍵が来るようにしてエラーがどう変わるか見る

まず鍵を保存する。

.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ラウンドロビンでコロコロ変わるときにつかえる。。。かも

参考資料

http://web.archive.org/web/20060708152924/http://www.frepa.livedoor.com/blog/show?id=1806&diary=14997

Amazonマグカップの在庫が復活するみたい

Amazonマグカップの在庫が復活するみたい

f:id:takuya_1st:20120208204013j:image(スクリーンショット 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 を 新規ノートにドラッグしています。

フォルダがドラッグできるようにして

f:id:takuya_1st:20120206222544j:image (スクリーンショット 2012-02-06 22.16.08)

フォルダをドラッグする。

f:id:takuya_1st:20120206222547j:image (スクリーンショット 2012-02-06 22.16.18)

フォルダは圧縮される

f:id:takuya_1st:20120206222550j:image (スクリーンショット 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でスレッドを切り替える。とされているかなんとなくわかった気がする。

参考

http://www2a.biglobe.ne.jp/seki/ruby/d203.html

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のインストール管理方法で便利なものをまとめ。

f:id:takuya_1st:20120206035739j:image

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の関連付けの変更方法

ポイントは「すべてを変更」の選択ボタン。

ファイルを右クリック

f:id:takuya_1st:20120206025143j:image (スクリーンショット 2012-02-06 2.51.16)

ファイルを開くプログラムを選ぶ

f:id:takuya_1st:20120206025141j:image (スクリーンショット 2012-02-06 2.51.04)

出来上がり。

ポイントは、「すべてを変更」をすること。そのままだと、該当ファイルだけの「開く」を変えたに過ぎない。

f:id:takuya_1st:20120206025139j:image (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'

これで、とりあえず、しばらく使えるようになるみたいですね。

参考

http://stackoverflow.com/questions/4528101/ssl-connect-returned-1-errno-0-state-sslv3-read-server-certificate-b-certificat

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のアンインストール

f:id:takuya_1st:20120127125559j:image (8ac88162a200e02ff7d1f413986add5c)


rubygemのライブラリを消すのはuninstall コマンドから出来る。

gem uninstall rails 

railsなどで、バージョン変えたらトラブった!などで便利

2012/01/25

JScriptだと?。CygwinでRails動かしたらこうなった。

f:id:takuya_1st:20120125160523j:image (スクリーンショット 2012-01-25 16.04.02)


JScriptですよ。マジすか。


手順

  • cygwinをインストール
  • rubyをインストール
  • rubygemsをインストール
  • railsをインストール

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

f:id:takuya_1st:20120125161238j:image

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


わかりやすいドキュメント(オススメ)

http://www.sssg.org/~naoya/puppet/project.html

2012/01/20

hgwebの作り方。自分だけのレポジトリを使って楽をする。

gitもいいけどhgもかなり良いです。最近のhg は文字化け知らずですね。

hgweb で自分だけのhgハブサイトを作る。

f:id:takuya_1st:20120120114705j:image (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



参考資料:ブログ内

以前のエントリ→Git並に、それ以上に使いやすい。mercurialをCGIで動かす。 - ブックマクロ開発に

2012/01/19

eneloopの違いまとめ。種類を調べた。比較した。

エネループが種類多すぎてよく分からないので調べてみた。エネループには種類が多すぎる。

f:id:takuya_1st:20120119142646j:image:left

f:id:takuya_1st:20120119142646j:image:left

f:id:takuya_1st:20120119142646j:image:left

f:id:takuya_1st:20120119142646j:image:left

f:id:takuya_1st:20120119142642j:image:left

f:id:takuya_1st:20120119142643j:image:left

f:id:takuya_1st:20120119142644j:image



気にするべきポイント

エネループ世代別
発売時期によって異なる、市場には旧バージョンがあふれている
最新版はマイナーチェンジ版がおおい
さらに種類が増えた
充電器との組み合わせ
充電器にも旧版新版がある。


(1)エネループには世代別に3種類ある。

f:id:takuya_1st:20120119144947j:imagef:id:takuya_1st:20120119144950j:imagef:id:takuya_1st:20120119144951j:image
最古版エネループ旧版エネループ最新版エネループ

発売時期で細かい差異がある。互換性はある、性能も大きく変わらないので、神経質でなければ気にすることではない。


見分け方のポイントは回数。最新版と旧版は充電回数の表記が違う

1500回と書いてる物は古い。現行は1800回。

旧版の方が安い。だからその辺は随意に。次回からパナソニック版になる。だからまた新旧の差で混迷を極める。


ポイント
1800回と書いてあったら最新版。それ以外は旧版。ただし旧版の方が安く買えることが多い。

(2)最新版エネループには3種類が充電容量別にある。

見た目でぱっと違いが分かる3種類。

3種類あります。

  • eneloop
  • eneloop lite
  • eneloop pro

eneloop
現行通常版
lite
価格を下げたもの。その分容量少ない
pro
容量を大きくした。その分値上がる

これらは、通常版をベースに用途に応じた使い分けが出来るようになっている。

これはそれぞれに単3・単4がある。

見た目での区別。
eneloopeneloop-liteeneloop pro
f:id:takuya_1st:20120119142646j:imagef:id:takuya_1st:20120119142642j:imagef:id:takuya_1st:20120119142644j:image

eneloopeneloop-liteeneloop pro
1900mAh950mAh2400mAh
1800回2000回500回
基本のeneloop eneloop lite
Liteは容量50%ダウン。
その分安価。
繰り返し性能10%UP
eneloop pro
Proは容量25%アップ、
その分高価
繰り返し性能75%ダウン
USB出力で使うと便利そう

用途別になっているので、用途が分からなければ通常版を買うのがよい。

(3)ただし色はアテにならない

http://ec2.images-amazon.com/images/I/61uXQW60PJL._AA1095_.jpg

http://ec2.images-amazon.com/images/I/811sjHNAY0L._AA1500_.jpg

http://ec2.images-amazon.com/images/I/81-FuL0P6eL._AA1500_.jpg


限定カラーとかあるから、基本色以外の色はアテに出来ない。


基本色以外を買うと、色で区別できなくなるよ!


(4)マイナーチェンジ版のplus

f:id:takuya_1st:20120119142643j:image

eneloop-plus

特殊マイナーバージョンとしてのPlus


性能は通常のエネループと変わらない

eneloop plus は 通常のeneloopをより安全性を高めた商品。正直なはなし、存在価値が分からない。Appleみたいに従来品を廃止してEneloopを全部Plusに置き換えたら良いのに。


充電池についてのまとめ


eneloop基本バージョン
1800回 1900mAh
eneloop 旧バージョン
 1500回
eneloop 最古バージョン
 1000回
eneloop plus
より安全性を高めた付加価値商品。
eneloop lite
容量さげて、手軽に買える。廉価版
eneloop pro
容量がほしい人向け。ただし充電回数少なめ。


(5)充電器について

充電器についても知っておく必要がある。

充電器も種類が多い。

f:id:takuya_1st:20120119150253j:image

三洋電機カタログより)

これにさらに旧バージョンや特殊形状が存在する。

(6)エネループ充電器には標準充電器がある。

f:id:takuya_1st:20120119150255j:image

NC-TGN01
これがエネループの充電器の比較の基本

今のところこの型番を基準に考えればいいみたいですね。

(7)値段と機能の違い

NC-TGR01とNC-TGL01の違い。

(廉価版)

f:id:takuya_1st:20120119150256j:image:left

f:id:takuya_1st:20120119150257j:image

安い方を買ったときには、性能が50%ダウン、だから値段も50%ダウン。

  • 充電時間が2倍以上かかる。
  • 1本で充電できない。
  • その分価格は安い(50%オフ)

充電時間は2倍時間がかかる、2本ペアになる、だから価格も50%オフ。

高い物はドコが違うのか
  • 1本ごとに充電完了が分かるモニタ搭載。
  • バッテリーチェッカーが一本分搭載。
  • 3倍速充電対応。

高い価格帯の商品にがついています。*1

f:id:takuya_1st:20120119150300j:image
(エネループ2倍速三倍速充電器)

(8)急速・高速充電対応

3倍速と2倍速があるです

f:id:takuya_1st:20120119150303j:image
(ハイーチェッカ)
f:id:takuya_1st:20120119150304j:image (ハイー高速充電)

これらは3倍速対応


「急速」充電対応

f:id:takuya_1st:20120119150308j:image (急速充電器ポータブル)

急速充電対応と書かれた物は基本的に2倍速。三倍速があるけれど「2倍速が急速充電器です。」


(9)エネループプロ充電器は?

エネループプロ充電器は通常の物です。色違い。型番はすべてNC-TGR01です。

f:id:takuya_1st:20120119150306j:image
(エネループプロ充電器)
f:id:takuya_1st:20120119150310j:image
(エネループプラス充電器)

f:id:takuya_1st:20120119150300j:image
(エネループ2倍速三倍速充電器)

プラス専用とプロ用と書いてあるけど、通常のエネループ充電器と同じ型番です。

充電器のまとめ

廉価版=基本版 - 急速充電機能なし = 1000円
高価版=基本版+充電チェッカー + 一本単位での充電チェック
携帯版=基本版  の半分サイズ、充電は2本単位

プロ用やプラス専用はその色だけ。中身は同じらしい


エネループ買おうと思ったけどありすぎて迷う

ヨドバシカメラの店頭でも、店員に説明を受けている人が多い。僕も正直よく分からない。

鉄則
最新版のセットを買う。

ライトは安いけど充電時間かかりすぎて使えない。

最後に挿したのどれだっけ?

継ぎ足し充電ができるeneloopの特性上使い終わったら、とりあえず挿しておく。おわったら取り替えるとい

カジュアルな使い方が便利。

・充電しておく。

・取り出す。

・なんとなく不安だから充電しておく

・とりあえず満タンにしておく。

などのカジュアルな用途を満たすには、4本が個別に充電できて、充電済が一目で分かった方が良い。それもどれが充電済みで、まだかが一目で分かった方が便利。

なので充電済ライトが個別に光る物を選ぶべきです。



Amazonでは、デザインが似過ぎて分からない

Amazonの写真では、形が似ていて一目で区別がつかない。

充電回数
1800回が最新版
型番
充電器の型番で種類が分かる。

(11)エネループ一覧表

これだけ見ても分かるように,種類は数限りなく存在する。

f:id:takuya_1st:20120119150305j:image (エネループ一覧表)


しかも、三洋電機からパナソニックになったので、パナソニック版エネループとかあってもう、手がつけられない。







感想:エネループは。なんでこんなことになったのか。

ブランドイメージの確立には成功した。エネループは成功。ブランドの確立とコンセプトの確率には成功した。

でも、成長を維持するのに失敗している。

顧客ニーズに応えるコトがサービスではない。好例

ラインナップの迷走、コンセプトの迷走。増え続ける種類。

顧客ニーズに応えたつもりかもしれないけれど、顧客ニーズに応えることが正しくない好例だとおもう。顧客ニーズに応えたつもりだろうけど、むしろ分かりづらいラインナップ。色もわかりにくい。

迷走するラインナップ

Lite/Pro/Plusの区別に、バージョンの違いはもはや迷走と断言する。

唯一の救いは互換性が保たれていること。しかし互換性は電池そのものの形状と電圧基準のおかげであって、三洋電機関係ないので。

「手軽に使える」という当初コンセプトが「種類多すぎて、使い分けが大変」になって崩壊してるよね。。。

モバイルブースターとエネループの充電が一カ所ですむようにしてほしいです。Qiはちょっと初期投資多すぎて困るし。電力も無駄になりそう。携帯電話が対応してたら使うのにね。エネループは「捨てない」という新しいlifestyleの提案だった。その新しさを取り戻してほしいです。



エネループの魅力が死んでしまう。こんなにラインナップがあると管理が面倒で。エネループの魅力が死んでしまう。




ジョブズなら、「もっとわかりやすく、2種類にしろ」と言ったに違いない。

もっとシンプルにやりましょう。

AmazonのAA

もしよかったら踏んでください。オススメです。

eneloop3倍速対応急速充電器セット(単4形4本付)

感謝です。

AA踏んでくださった方!感謝です!!

f:id:takuya_1st:20120121021509p:image

徹夜でエネループ調べて、その甲斐がありました。お役に立ててうれしいです。

僕の徹夜が報われた気がします。


2012-01-20追記。

色で区別とか言われたので、色を適当に買うと、区別に使えないことを明記するなど。


2012-01-25追記

なんかたくさん買っていただいたみたいです。みなさんの優しさに感謝です。

f:id:takuya_1st:20120125094436p:image

ありがとうございます。

2012-01-26 追記

更にたくさんの人に買っていただいたみたいです!!!

f:id:takuya_1st:20120126160523p:image

皆さんのお役に立てて嬉しいです。みなさんの優しさに嬉しいです。

*1:ただし上記の三種類の機能が全部ついた物はないみたい

2012/01/18

Stringsコマンド:プログラム中で文字列として認識可能なものを全部表示してみる

stringsコマンドは、バイナリコンパイルされたバイナリを開き、ASCII文字列っぽいものがあれば、文字にして出力する。

バイナリディタで文字を探すなら、この方が速いかもしれない、バイナリ・アドレスは分からないけど、あるかないかはすぐ分かる


stringsコマンドやってみた

SQLiteのファイルを解析してみた。

f:id:takuya_1st:20120118165448j:image

わーい、CreateTableがいっぱい見える。


aliases.dbにつかう

postmapコマンドなどの、設定ファイルをバイナリに変換する系で、変換忘れてないか確認するのに使う。

takuya@debian00:~$ sudo strings /etc/aliases.db 
[sudo] password for takuya: 
root
webmaster
root
usenet
"|/usr/local/bin/catch "
sort
root
security

LocalStroageが便利になる、JSON.stringfy

LocalStroageにオブジェクトを入れるには、キーバリューなので、ちょっとめんどくさい。シリアライズをどうするのか


JSON.stringifyを使ってシリアライズ

そのため、JSオブジェクトを扱いたい場合は、JSON.stringifyとJSON.parseを利用するなどして文字列に変換してから利用することをおすすめします。

// 配列をJSON.stringifyで文字列に変換してから保存
var ary = ["aaa", "bbb"];
localStorage.setItem("hoge", JSON.stringify(ary));

// 取り出した文字列をJSON.parseでJSオブジェクトに変換する
JSON.parse(localStorage.getItem("hoge"));
> ["aaa", "bbb"]
http://d.hatena.ne.jp/pikotea/20101224/1293197750

JSONを取り出したりJSONにエンコするには

ブラウザ組込のJSONオブジェクトを使うと便利でしょうね



StorageEvent

Web Storage には、StorageEvent というイベントがあるそうです

// StorageEventを登録
window.addEventListener("storage", function(evt) {
  console.log("old:" + evt.oldValue + "/new:" + evt.newValue);
}, false);
http://d.hatena.ne.jp/pikotea/20101224/1293197750

WebStorageを使った瞬間にイベントが発生する。WebStrageに保存するタイミングで動作する方がテストが楽だし、コード簡潔になる。とくにGUIのクリックイベントが多発するようになると必須のイベントだと思う


参考資料

Web Storage について - へっぽこプログラマーの日記 ←おすすめ

システムのRubyの更新:DebianのAPTでインストールされた物

debian の rubygemsパッケージを更新しようとしている。


  • あるシステムでは。できる限りAptで管理するべきかもしれないし
  • あるシステムでは、ユーザーごとにRuby環境を作るべきかもしれない

でもいろいろ考えるの面倒くさい。とりあえずシステムのrubygems環境を更新したらいいよね。

ってことでやってみた

とりあえずシステムのrubygemsを新しくする

gem update --system

apt の場合、--systemであまりに新しいものを入れると、互換性の問題に引掛かもしれないので、

自己責任でやれと言われる。

やります。

$ gem install rubygems-update
$ update_rubygems

これで出来上がり。手早いですね。


ユーザーごとにRuby環境を作るには

rvmが一番楽。いろいろとやり方はあるんだし、gemのインストールとかいろいろ工夫してたんだけど、

RVMでもう大丈夫っぽい(ただしCygwin環境な人たちはCorei7以外でやらないように、ビルド時間が巨大です)

参考資料


http://d.hatena.ne.jp/r_kurain/20090725/1248523753

http://higelog.brassworks.jp/?p=244


cygwin だとこういうのを試したほうがいいかも。

http://webos-goodies.jp/archives/51106257.html

JavaからjRubyのソースコードを読み込んで使う。

JavaからjRubyを起動すると、JavaにRubyインタプリタを組み込むことが出来る。

どうやるのかなと思ってたら。

evalしろや。ってことらしい。

まじEvalしとる。

package takuya.morioka;
import java.io.*;
import org.jruby.Ruby;
import org.jruby.runtime.ThreadContext;
import org.jruby.runtime.builtin.IRubyObject;

public class RubySample {

    public static void main(String[] args) {
        Ruby ruby = Ruby.getDefaultInstance();
        try {
            FileReader reader = new FileReader("test.rb");
            IRubyObject obj = ruby.evalScript(reader, "");  #script コードの実行
            System.out.println("Result: " + obj);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

RubyのクラスをJavaクラスとして使う

//Rubyのインタプリタを持ってくる。

        Ruby ruby = Ruby.getDefaultInstance();
        ThreadContext context = ruby.getCurrentContext();
       
        try {
            FileReader reader = new FileReader("test.rb"); //ソースを読み込む
            ruby.evalScript(reader, "");

            RubyClass rclass = ruby.getClass("MyDateTime"); 
            IRubyObject robj = rclass.callMethod(context,"new");
            IRubyObject obj = robj.callMethod(context,"getDateTime");
            System.out.println("Result: " + obj);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

実際に使う箇所

RubyClass rclass = ruby.getClass("MyDateTime");

使いどころ。難しい。

RubyはDSL的な処理が出来るので、Ruby書式で設定ファイル作らせて、Javaで読み込んで使うとか。

インタプリターパターンですよねぇ。使いどころは難しい。

参考資料

http://codezine.jp/article/detail/1647?p=3

http://codezine.jp/article/detail/1647?p=4

Windowsの自動ログイン設定

Windowsの自動ログイン設定はコマンドプロンプトから起動するのが手っ取り早い

controle userpasswords2

passwords の複数形に注意

これで起動すると

f:id:takuya_1st:20120118160945j:image


選択画面が出てきて

f:id:takuya_1st:20120118160944j:image

パスワード入力が必要のチェックを外して、OKを押す。

するとパスワード覚えさせるから、今のパスワードを確認のために入れてねって言われる。入力したら設定完了

LinuxのJOINコマンドがおもしろそうなので試してみた

JOINコマンドがあります。これは便利なのかもしれない。ファイルがそろっていることが前提ですけど

わかりやすい図があります。

f:id:takuya_1st:20120118160514j:image

Linuxコマンドでテキストデータを自在に操る - じっくりコトコト煮込んだみかん

やってみた。

f:id:takuya_1st:20120118160459j:image


シンプルで良いですね。


でも正直いえば、箱形選択が簡単にできるエディタ使ってたら用無しな気もする。

10,0000行とかなら使い勝手良さそうだけど、そのときはスクリプトでやるかも。