Home > Latest topics

Latest topics 近況報告

たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。

萌えるふぉくす子さんだば子本制作プロジェクトの動向はもえじら組ブログで。

宣伝1。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能! シス管系女子って何!? - 「シス管系女子」特設サイト

宣伝2。Firefox Hacks Rebooted発売中。本書の1/3を使って、再起動不要なアドオンの作り方のテクニックや非同期処理の効率のいい書き方などを解説しています。既刊のFirefox 3 Hacks拡張機能開発チュートリアルと併せてどうぞ。

Firefox Hacks Rebooted ―Mozillaテクノロジ徹底活用テクニック
浅井 智也 池田 譲治 小山田 昌史 五味渕 大賀 下田 洋志 寺田 真 松澤 太郎
オライリージャパン

Page 26/239: « 22 23 24 25 26 27 28 29 30 »

さくらのレンタルサーバでvimとbashとscreen - Jun 09, 2010

さくらのレンタルサーバ(スタンダードプラン)は初期状態ではこんな風になってた。

  • シェルはcsh
  • viは多分普通のvi(vimではなく)

Ubuntuのコンソールとの違いに戸惑う事が多くなりそうだったので、人に教えてもらって、以下のように設定してみる事にした。

  • ログインしたらシェルはbashになるように。
  • viと打ったらvimが起動するように。
  • gnomeターミナルみたいに複数のセッションを切り替えられるように。(GNU Screen)

シェルをbashに

トレンドはzshらしいけどよくわからんからbashで。

ここにある通りやったらできた。

  1. chsh -s /usr/local/bin/bash でパスワード入力を求められるのでパスワードを入れる。
  2. vi ~/.bash_profile でログイン後に実行される初期設定を編集する。内容はとりあえず以下。
    if [ -f ~/.bashrc ]; then
      source ~/.bashrc
    fi

これで、bash起動と同時に ~/.bashrc が読まれるようになる。~/.bashrc はこの段階ではまだ空。

vimのインストール

ここの指示通りにやったらできた。

  1. ソースをダウンロードする。
    • wget ftp://ftp.vim.org/pub/vim/unix/vim-7.0.tar.bz2
    • wget ftp://ftp.vim.org/pub/vim/extra/vim-7.0-extra.tar.gz
    • wget ftp://ftp.vim.org/pub/vim/extra/vim-7.0-lang.tar.gz
  2. 展開する。
    • tar jxvf vim-7.0.tar.bz2
    • tar zxvf vim-7.0-extra.tar.gz
    • tar zxvf vim-7.0-lang.tar.gz
  3. vim70というディレクトリの中にすべてのソースが展開されているので、その中に入って作業する。 cd vim70
  4. パッチを当てる。
    1. mkdir patches
    2. cd patches
    3. ftp://ftp.vim.org/pub/vim/patches/7.0/を見て一番新しいパッチの番号を調べる。僕がやった時は243だった。
    4. curl -O 'ftp://ftp.vim.org/pub/vim/patches/7.0/7.0.[001-さっき調べた最後のパッチの番号]' ですべてのパッチをダウンロードする。
    5. cd ..
    6. cat patches/7.0.* | patch -p0 ですべてのパッチを当てる。
  5. configureしてmakeしてinstallする。
    1. ./configure --enable-multibyte --enable-xim --enable-fontset --with-features=big --prefix=~/opt/vim インストール先としてhome以下を指定すること。僕は特に意味もなくopt以下にしてますが。
    2. make && make install
  6. 文字エンコーディングを自動認識するための設定を ~/.vimrc に書き加える。

これで、 ~/opt/vim/bin/vim でvimを起動できるようになった。

screenのインストール

UbuntuでGnome使ってるとGnomeのターミナルで新しいタブを開いて並行して作業するということができるけど、「sshで入った先」ではタブを開けない。タブを開くと、手元のマシンの方の新しいセッションになってしまう。

「sshで入った先」でもそういう事ができるようにしとくと便利だよと言われたので、GNU Screenという物を入れてみた。sshでログインする先のマシンにこれが入っていれば、ログイン先で「タブを開く」みたいな事ができるようになる。でもさくらのレンタルサーバのFreeBSDには入ってなかったので、これも自分で入れないといけない。

ここの指示通りにやったらできた(同じとこばっか参照してる)。

  1. ソースをダウンロードする。 wget ftp://ftp.uni-erlangen.de/pub/utilities/screen/screen-4.0.3.tar.gz
  2. 展開する。 tar xzf screen-4.0.3.tar.gz
  3. screen-4.0.3というディレクトリができるので、その中に入って作業する。 cd screen-4.0.3
  4. configureしてmakeしてinstallする。
    1. ./configure --prefix=~/opt/screen インストール先としてhome以下を指定すること。
    2. make && make install

これで、 ~/opt/screen/bin/screen でscreenを起動できるようになった。

設定まとめ

~/.bash_profile はこうなった。後半部分は、ログインしたら勝手にscreenを起動するようにするための物。

if [ -f ~/.bashrc ]; then
  source ~/.bashrc
fi

if [ $TERM != "screen" ]; then
 exec screen -S main -xRR
fi

~/.bashrc はこうなった。

export LANG=ja_JP.UTF-8 # 日本語で。

PATH=$PATH:~/opt/vim/bin # vimにパスを通す。
PATH=$PATH:~/opt/screen/bin # screenにパスを通す。
export PATH

alias vi='vim' # viと打ったらvimを起動する。

~/.screenrc はこうなった。教えてくれた人の言われるままにコピペしただけ。画面の一番下の行を使って、今どのプロセスを見てるのかを常時表示するようにしてある。(これがないと今自分で何をやってるのかさっぱり分からない)

defencoding utf8
hardstatus alwayslastline "[%02c] %`%-w%{=b bw}%n %t%{-}%+w"
  • Gnome端末で言う所の「新しいタブを開く」:Ctrl-A→c
  • Gnome端末で言う所の「タブを閉じる」:exit
  • Gnome端末で言う所の「右のタブへ移動」:Ctrl-A→n
  • Gnome端末で言う所の「左のタブへ移動」:Ctrl-A→p
  • screenから一時的に抜ける:Ctrl-A→d

使いこなせてるとはとても言いがたいけど、とりあえずここから始めようという感じです。

Cygwin……

CygwinのOpenSSHから接続してると、なんかscreenが変なことになった。PuTTYで接続した場合は何ともない。これ、Cygwinが悪いのか誰が悪いのか……とりあえずWindowsからやる時はPuTTYの方を使う事にしようと思います。

追記。GnomeのターミナルからやったらCygwinの時みたいに変な事にはなってない……みたい。やっぱりCygwinが悪いのかなー。

「xpcnativewrappers=no」の廃止 - Jun 09, 2010

レガシーな仕組みが1つ廃止されたようだ。

XPCNativeWrapperについては過去に行った拡張機能のセキュリティに関するプレゼンの中でも紹介した。現在も既に、chrome権限があるコードからWebページの内容に触る時は基本的には必ずXPCNativeWrapperを介してアクセスしないといけないようになってるんだけど、そういう仕組みがまだ入ってなかった頃の書き方でも拡張機能を書けるように、敢えてこの仕組みをOFFにするための機能があった。それがchrome.manifestでのxpcnativewrappers=no指定。今回上記のbugで投入されたパッチによって、この指定がそもそも機能しないようになった。

XPCNativeWrapper越しでなく生のJavaScriptのオブジェクトにアクセスする方法としては、xpcnativewrappers=no以外にもう1つ、任意のオブジェクトの.wrappedJSObjectというプロパティを見る方法がある。今回投入されたパッチではこの機能までは削除されていないように見えるので、今までxpcnativewrappers=noを使っていた人は、Webページ内のJavaScriptのオブジェクトにアクセスしてた箇所では.wrappedJSObjectを書き加えるようにすれば一応は動くようになるんじゃないかと思う。セキュリティ的には、そもそもラップされてない生のJSObjectに触らなきゃいけないという設計自体を変えた方がいいんだけど。だいたい、XPCNativeWrapperが入ったのってFirefox 1.5がリリースされるよりも前の話だよ。今なおXPCNativeWrapperの存在を前提にしてないコードって、どんだけ古いのさ?

コマンドラインでのリモート操作に慣れてきた - Jun 08, 2010

右も左も分からないままああだこうだやってるうちに、ちょっとずつだけど、コマンドラインからリモートであれこれ操作する事に慣れてきた気がする。

  • 操作が効かなくなったらとりあえず Ctrl+C で強制終了する。Ctrl+Z も試してみる。
    • それでも駄目なら(別セッションで) ps aux | grep 反応しなくなったプロセスの名前 でプロセスのIDを調べて kill 調べたプロセスID でプロセスを強制終了させる。
  • ファイルの中身をとりあえず見たい時は less ファイルのパス で見れて、q で終了できる。
  • ファイルの中身を編集したい時は vi ファイルのパス でエディタ起動して、i を1回押してから必要な所を書き換えて ESC:wqEnter で上書き保存&終了できる。
  • 向こうで何かサーバを立ち上げててその動作を確認したいという時は、 ssh -L こっちの入り口のポート番号:向こう側のホスト名またはIPアドレス:向こう側の出口のポート番号 ユーザ名@sshで接続するホスト名またはIPアドレス でこっちと向こうを繋げられる(sshポートフォワード、あるいはトンネル)。リモートでApacheを立ち上げてて、手元で動いてるFirefoxで表示確認をしたい時は、ssh -L 8080:localhost:80 piro@host という風にすれば、手元のFirefoxで http://localhost:8080/ とやればリモートのApacheにアクセスできる。

とかそういうのが分かって、いざというときもとりあえずどうにかできるという気がしてきたから。

でもbashとかirbとかtelnetとか、終了する時のコマンドがquitだったりexitだったりと統一されてないのはまだ戸惑う。

こうやって書き出してみるとスゲー陳腐だ。10年以上前に月刊ASCIIの付録CD-ROMでTurbo Linuxを起動してみようという記事に添えられてた、自分にとってはまるでチンプンカンプンだった「基本コマンド集」みたいな。あの頃は「こんなん見てもわかんねーよ」と思ってたのに、いざ自分が「こっち側」に来てしまうとその時の「駄目なお手本」をそのまま繰り返す事しかできていないという事が、どうしようもなく悲しい。

CygwinのホームディレクトリをWindowsのホームディレクトリにする - Jun 08, 2010

Windows Vista以降では C:\Users\ユーザ名 が、Windows XPでは C:\Documents and Settings\ユーザ名 がホームなんだけど、Cygwinをインストールした時に作られるショートカットから起動したbashでは、ホームが別の位置になってる。Cygwinインストール先のCygwin.batを編集すると、この問題を解消できるようだ。

@echo off

C:
chdir C:\cygwin\bin
set HOME=C:\Users\%USERNAME%
bash --login -i

うちの環境だとこんなん(C:\cygwin以下にCygwinが入ってる)。%USERNAME%と書いておけば現在のユーザのホームディレクトリが勝手に選ばれる。

さくらのレンタルサーバで定期的なバックアップの作成 - Jun 08, 2010

以前やった事の復習で。以下のようなスクリプトを ~/backup.sh として作成した。

#!/bin/sh

BACKUP_DAYS=14
destparentdir=~/backup

# BACKUP_DAYSより古いバックアップは自動消去
find $destparentdir/ -ctime +$BACKUP_DAYS -type d -maxdepth 1 -print0 | xargs -0 rm -r -f

destdir=$destparentdir/`date +%Y-%m-%d_%H-%M-%S`
mkdir $destdir
# vオプションは、試しに実行する時用。
tar cjvf $destdir/www.tar.bz2 ~/www
tar cjvf $destdir/scripts.tar.bz2 ~/*.sh
crontab -l > $destdir/crontab

で、crontabによって定期的に実行するように設定するわけなんだけど、さくらのレンタルサーバの場合サーバコントロールパネルにcron管理用のインターフェースがあって、5個までならここから管理できるみたい。というわけで時々実行するように設定しておいた。

同じ所に置いとくんじゃバックアップとして意味が薄いので、できればそのうちローカルにscpでダウンロードするとかそういう風にしてみたい。

レンタルサーバ借りて何年目かにしてやっとここまで辿り着いたよ!(今までなんもやってなかったという事があり得ないですねハイ)

さくらのレンタルサーバ スタンダードプランでrep2 - Jun 08, 2010

いくつか前例はあるようだ。

僕の契約はスタンダードプランなんだけど、複数ユーザでFreeBSD 7のサーバを共用してる状態で、管理者権限は無い。クライアントはUbuntu 10.04。という前提で。

sshの準備

何はともあれ、まずはリモート操作のための準備を整える。

ssh ユーザ名@ドメイン名

これでsshでログインできるんだけど、いちいちパスワードを訊かれてしまう。なのでsshの公開鍵を置いておくことにした。

  1. 1回、上記の要領でSSHでログインする。
  2. mkdir .ssh
  3. chmod 700 .ssh
  4. vi .ssh/authorized_keys
  5. ローカルにある公開鍵(~/.ssh/id_rsa.pubなど)の内容を貼り付けて、ファイルを保存する。
  6. chmod 600 .ssh/authorized_keys
  7. exit

再度上記の要領でsshでログインを試みると、今度はパスワードを訊かれなくなる。scpも。

rep2設置

  1. p2拡張機能パックの「依存ライブラリ込み」のファイル一式をダウンロードする。今回は rep2ex-100227-0215.7z を使った。
  2. ファイルを展開する。
  3. cd rep2ex-100227-0215-with-deps
  4. tar zcvf rep2.tar.gz rep2 で再圧縮する。
  5. scp ~/rep2.tar.gz ユーザ名@ドメイン名:~/ でサーバに送る。
  6. ssh ユーザ名@ドメイン名:~/ でサーバに入る。
  7. mkdir ~/p2data でWebから見えない位置にデータディレクトリを用意する。
  8. tar zxvf rep2.tar.gz で展開する。
  9. mv rep2 www/ でWebから見える位置に移動。
  10. パーミッションを設定する。
    1. chmod 705 www/rep2
    2. cd www/rep2
    3. find . -name "*.php" -type f -print | xargs chmod 705
  11. vi conf/conf_admin.inc.php で初期設定を変更する。
    • $_conf['data_dir']などで指定しているデータディレクトリの位置を、先程作ったデータディレクトリへのパスに書き換える。 ~/p2data/ にデータディレクトリがあってrep2のindex.phpが ~/www/rep2/index.php にあるという位置関係なら、値は "../../p2data/" になる。
    • どこからでもアクセスを受け付けるようにするなら、 $_conf['secure']['auth_host'] の値を 0 にする。
  12. http://ドメイン名/rep2/index.php にアクセスしてみる。

上記の参考エントリではこれだけでいけるという風に書いてあるんだけど、僕の場合はPHPのエラーで動かなかった。magic_quotes_gpcをOffにしろとかなんとか。

さくらのレンタルサーバのサーバコントロールパネルを見てみると「PHP設定の編集」というのがあったので、ここを見てみたところ、デフォルトの設定に対して必要な設定項目だけ上書き指定できるようだったので、magic_quotes_gpc = Off と記入して保存した。その後再度rep2のページにアクセスしてみた所、今度はちゃんとユーザ登録用のフォームが表示された。

ローカルのrep2のログを引き継ぐ

実はローカルで今までrep2を動かしてたので、そのログや「お気にスレ」などのデータを引き継ぎたかった。ローカルのデータは ~/public_html/rep2/data/ に置いてた、という前提で。

  1. exit (sshでサーバに入ったままなのであれば)
  2. cd ~/public_html/rep2
  3. tar zcvf data.tar.gz data で圧縮する。
  4. scp ~/data.tar.gz ユーザ名@ドメイン名:~/ でサーバに送る。
  5. ssh ユーザ名@ドメイン名:~/ でサーバに入る。
  6. tar zxvf data.tar.gz で展開する。
  7. rm -r p2data
  8. mv data p2data
  9. rm p2data/p2_auth_user.php で古い認証ユーザの設定を削除する。
  10. http://ドメイン名/rep2/index.php にアクセスしてみる。

今まで見てたスレの過去ログが見えるようになっていれば成功。

余談

今回の事で、さくらのレンタルサーバにsshで入る方法を習得した。もう少し色々試したら、定期的にサーバにある内容をまとめて圧縮してバックアップということもできるようになれるかな。なれるといいな。

「幻覚ピカソ」が完結してた→また捨てるに捨てられない本が増えてしまった - Jun 05, 2010

実に綺麗に終わった……最後、泣いた。ぼろぼろ泣いた。僕は、泣いた作品は捨てるに捨てられなくなってしまうので、また本棚のスペースが足りなくなってしまう。

主人公の葉村ヒカリは、根暗で絵ばっかり描いてる高校生。あまりに絵ばっかり描いてるから、あだ名は「ピカソ」。そんなピカソはある日唐突に、大きな事故に巻き込まれてしまう。一緒に事故に巻き込まれた友人・山本千晶は死に、ピカソは生き残った。でも彼が生還したのは、千晶が死の間際に彼の生還を願い、ある事と引き替えにかりそめの命を神から与えられたからだった。ピカソの前に幽霊として急に現れた千晶は、ピカソに言う。「人助けをしなさい、それがピカソが生き続けるための代償」。かくしてピカソは唯一の特技である「絵」を使ってクラスメイト達の心の闇を描き出し、千晶と共に彼らの深層心理に飛び込んで難問を解決していく事になるのだった……

僕が古屋兎丸を知ったのはライチ光クラブだったんだけど、全然違う作風で驚いた。耽美な絵柄で悲劇や残酷劇を描くのがメインの人なのかと思ってたけど、この作品では悩み多い年頃の少年少女の青春をさわやかに描いてる。

登場するキャラクター達は皆悩みを抱えているのだけれども、悩みがこんがらがってて何が「本当の問題」なのか分からないし、どこからこの状況を打破していけばいいのか糸口すらも分からないしで、前に進めず足踏みを強いられている。ピカソと千晶がするのは、こんがらがった悩みをひとつひとつ解きほぐして、糸口を見つける事。そこから先の事、見つけた糸を手放さないでちょっとずつでも問題を解決していくのは、あくまで悩んでいた彼ら自身の仕事だ。

多くのクラスメイト達の手助けをしてきたピカソは、最後にピカソ自身の心の闇と対面させられる。彼自身意識していなかった心の闇に、いよいよ立ち向かわないといけなくなる。彼が抱える闇の正体は何なのか? その闇を取り除くとはどういう事なのか?

後味はほろ苦いけど、そこには希望がある。全3巻、見かけたら読んでみて下さい。

勉強会ってそもそも何のためにやるんだろ - Jun 03, 2010

勉強会って何なんだろう。何のためにあるんだろう。という事が、考えれば考えるほど分からなくなってくる。

僕がWeb標準に傾倒してたりMozillaの拡張機能開発に持てる限りの時間をつぎ込んだりしてた時は、そもそもそれらをテーマにしたイベント自体が存在していなかったか、存在していても僕はそれを知らなかった。知識を得たかったらソースコードや英語の原典に当たるしか無くて、ノウハウを得たかったら自分で試してみるしか無くて、同じ事に興味を持ってる人同士で集まって勉強会を開くというのは想像もできなかった。技術的な向上は、人と会ってする物という認識があまりない。

だから、僕にとってMozillaのイベント(当時で言えばMozilla Party)とかは、知識や経験を得るための場というよりも、お祭りのような意味合いの方が強かった。Shibuya.jsもそうだった。行って何を得て帰ってくるかではなくて、行く事自体が目的だった気がする。

大阪から新幹線なり夜行バスなりで時間とお金をかけて東京にまで出かけて、長くても1日とかそのくらいだけ滞在して、帰ってくる。その過程で技術的な物を手に入れる事はあまり考えてなかった気がする。それだったら、大学の必修の講義を受けた後の有り余ってる時間で調べたり試したりした方が効率いいじゃんって思ってたんじゃないかと思う。

話を聞きに行きたかったというよりも、同じ事に興味がある人と会う機会が欲しかったんだと思う。だから懇親会には必ず参加するようにしてるし、そっちの方が自分にとっては重大事という気がする。この間テスト駆動開発の勉強会の後で懇親会に出れなかったのはとても残念だった。

勉強会的な物に全く意味が無い、とは思わない。JSDeferredのコードリーディングやテスト駆動開発の実習のように、コードと向き合う時間がある物は自分にとっては得る物が多かったと思う。こういう事こそまさに、実際に集まってやらなきゃできない物なんじゃないかと思う。逆に、「前に講師が一人立って淡々とプレゼンして大勢の聴講者がそれを聞くだけ」というスタイルの物は、極論すれば別に実際に集まってやらなくたっていいんじゃないのと思う。そういうスタイルでやる意味があるのは、Shibuya.jsとかジョジョ勉強会とかのように、その場の空気を共有する事に意味がある物くらいなんじゃないかって思う。

まあ、世に多数ある一般的な「勉強会」にはほとんど参加した事がない人間だから、そう思うのかもしれないんですけど。

携帯から送られたメールの中に含まれている絵文字を判別したかった - May 31, 2010

またRailsなんですけど。

携帯端末のメールで絵文字を入力した物を送信して、Railsアプリ(いわゆる勝手サイトにあたるもの)でそれを受信したら何か処理をしたい、っていう場面でどぉぉぉーもうまくいかなくて一日悩んでた。

ActionMailer::Baseを継承した独自のクラス(Mailmanとかそういう名前で定義してる)のMailman.receive()に渡ってきたメールの内容から、絵文字を検出したかった。

class Mailman < ActionMailer::Base
  def receive(mail)
    some_operation(mail.subject)
    some_operation(mail.body)
  end

  def some_operation(string)
    # ここで絵文字を検出したい
  end
end

jpmobileとかMbMailとかが利用できるのかなと思ったんだけど、うまくいかない。DoCoMoの端末から絵文字入りのメールを送っても、絵文字のコードにマッチするはずの正規表現に全然マッチしない。

んで、もっとよく調べてみたら、勝手サイトだからなのか何なのか、DoCoMoのメールサーバからメールが送られる時点で絵文字の情報は完璧に失われるんですね絵文字は全部「〓」に変換されてしまってて、〓の文字コードは(Unicodeだと)0x3013だから、さっきのコード表から作った正規表現にはマッチするわけがない。

まあ、やりたかった事は「絵文字があったらエラーを返す」という事だったので、「〓」が有るか無いかだけ見るというソリューションでだいたい問題なかったんですけれども。(「〓」自体を送信できないという問題は残るけど、こんな文字は普段使わないからその問題は無視する)

1日まるまる無駄にしてしまった……

Page 26/239: « 22 23 24 25 26 27 28 29 30 »

Powered by blosxom 2.0 + starter kit
Home

カテゴリ一覧

過去の記事

1999.2~2005.8

最近のつぶやき

オススメ

Mozilla Firefox ブラウザ無料ダウンロード