スポンサーサイト
投稿日時 : -------- --:--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
-------- --:-- | スポンサー広告
ニコ動でプレーヤ部分まで自動スクロールさせるスクリプト
投稿日時 : 2008-04-09 19:38
更新日時 : 2009-07-08 18:26
追記:2009-07-08 18:26:改良版を公開しました → Electronic Genome - ニコニコ動画でプレーヤ部分まで自動スクロールするスクリプト改良版『nicoscroll2』
 
 

■概要

ニコニコ動画の再生ページでプレーヤ部分まで自動でスクロールしてくれる、Greasemonkey/SeaHorse/Trixie/OperaUserScriptの共用スクリプトを作りました。
 
画面サイズが1024x768とかだとプレーヤの縦幅がブラウザの表示領域の縦幅とほぼ同じなので、プレーヤをその表示領域にぴったり合わせるのが面倒。で、自動化してしまおうと。
 

■動作環境

動作はFirefoxのGreasemonkey、SleipnirのSeaHorse、IEのTrixie、OperaのUserScriptで確認。
 

■インストール

FirefoxでGreasemonkeyをインストール済みなら以下をクリックするだけでOK。他は各ヘルプを参照して下さい(大体はダウンロードして所定位置に配置後オプションから有効にするという流れ)。
nicoscroll.user.js  

■スクロール位置の調整

デフォルトでプレーヤの上端の部分までスクロールします。画面の縦サイズが768ピクセル以上ある今時なディスプレイだとそこまでスクロールする必要がないかもしれません。そういう時はスクリプト中の
var fix = 0;
となっている部分を
var fix = -200;
のように負の整数にするとスクロール位置を200ピクセル上に修正できます。もちろん別に200じゃなくてもかまいません。
あまり無いかもしれませんが、逆にもっとスクロールさせたい場合は
var fix = 200;
のように正の整数にするとスクロール位置を200ピクセル下に修正できます。
 

■ソース全文

すごく簡単なつくりです。
nicoscroll.user.js
// ==UserScript==
// @name           nicoscroll
// @namespace      http://itmst.blog71.fc2.com/nicoscroll.user.js
// @description    auto scroll to the player object
// @include        http://www.nicovideo.jp/watch/*
// ==/UserScript==

(function(){
  try{
    var fix = 0;
    var y = document.getElementById("flvplayer_container").offsetTop;
    window.scrollTo(0,y + fix);
  }catch(e){}
})();
スポンサーサイト
2008-04-09 19:38 | user.js | Comment(1) | Trackback(1)
Ubuntu + NFSサーバでファイル共有
投稿日時 : 2008-04-09 13:01
Ubuntu7.10 + NFSでファイル共有した際の設定メモ。
 

■NFSとは

Network File Systemの略で、ネットワークを介してUNIXシステム間でファイル共有を可能にする機能。リモートのファイルシステムをローカルファイルシステムと同じように扱うことができるようになる。元はSunが開発したもの。
 

■必要なパッケージ

$ sudo apt-get install portmap nfs-common nfs-kernel-server
 
NFSサーバにはkernel組込み版と通常daemon版の2種類がある。kernelサーバ版はkernel内部にカーネルスレッドとして組み込まれているのでパフォーマンスがよく、ファイルのロック機構も有効になる。nfs-user-serverは通常のdaemon版で、速度的にはkernel版に劣るが柔軟な設定が可能なのが特徴。
 
サービスは以下のような感じ。
$ sysv-rc-conf --list | grep -E 'nfs|portmap'
nfs-common   0:off   1:off 2:on 3:on 4:on 5:on 6:off S:on
nfs-kernel-s 0:off   1:off 2:on 3:on 4:on 5:on 6:off
portmap      0:on    1:off 2:on 3:on 4:on 5:on 6:on S:on
nfs-kernel-sで表示が切れてるが本当はnfs-kernel-server。
 

■起動順序

Ubuntuではインストールすると勝手にサービスに登録されて起動したが、手動で起動する場合は起動順序に気をつける必要がある。起動順序に関して検索するとportmap→nfslock→nfsの順に起動しろという記述を目にするが、現在のバージョンではサービス名が変わっているようで、portmap→nfs-common→nfs-kernel-serverの順でいいと思う。一応/etc/rc3.d内のファイル名からサービス起動順序が確認できる。
portmapとnfs-common、nfs-kernel-serverの起動順序
itmst@mv1c3e:/etc/rc3.d$ ls *{portmap,nfs*}
S17portmap  S20nfs-common  S20nfs-kernel-server
nfs-commonやnfs-kernel-serverよりも先にportmapが起動していないとまずいことが分かる。RPCベースのサービスはportmapサービスに依存するので当然。
 

■RPC

portmapはRPC(Remote Procedure Call)を管理する。NFSサービスはRPCで提供される。 RPCはリモートマシンに用意されているなんらかのサービスを、別のマシンから呼び出して使えるようにする機能。 RPCサービスはプログラム番号で識別される。サービス名とプログラム番号の対応は/etc/rpcで設定されている。
(省略)
portmapper      100000  portmap sunrpc
rstatd          100001  rstat rstat_svc rup perfmeter
rusersd         100002  rusers
nfs             100003  nfsprog
(省略)
 

■RPCとportmap

RPCの各サービスのTCP/IPポート番号は実行時に動的に割り当てられる。それを管理するのがportmapサービス。 クライアントからサービス番号を受け取り対応するサービスのポート番号を返す。 現在portmapに登録されているすべてのRPCプログラムを表示するには「rpcinfo -p」を実行する。
$ rpcinfo -p
   program vers proto   port
    100000    2   tcp    111  portmapper
    100024    1   udp  32768  status
    100024    1   tcp  35772  status
    100011    1   udp    630  rquotad
    100011    2   udp    630  rquotad
    100011    1   tcp    632  rquotad
    100011    2   tcp    632  rquotad
    100000    2   udp    111  portmapper
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100021    1   udp  32780  nlockmgr
    100021    3   udp  32780  nlockmgr
    100021    4   udp  32780  nlockmgr
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100021    1   tcp  33493  nlockmgr
    100021    3   tcp  33493  nlockmgr
    100021    4   tcp  33493  nlockmgr
    100005    1   udp  32781  mountd
    100005    1   tcp  44233  mountd
    100005    2   udp  32781  mountd
    100005    2   tcp  44233  mountd
    100005    3   udp  32781  mountd
    100005    3   tcp  44233  mountd
 
nfsはTCP/IPポート2049番に割り当てられているのが確認できる。portmapperは111番。 クライアントは111番のportmapperサービスにnfsのサービス番号100003で問い合わせ、 nfsサービスがTCP/IPの2049番で動作していることを知ることができる。このようにポート番号は動的に割り当てられることになっているが実際のところNFSは2049番ポートで実行されることがほとんどのようです。
 

■portmapのアクセス制御

portmapにはTCPWrappersのライブラリlibwrapが組み込まれているので/etc/hosts.allowと/etc/hosts.denyでアクセス制御が可能。以下のように設定することで192.168.0.0/24ネットワークからのみportmapサービスにアクセスできるようにすることができる。ただしportmapサービスのアクセス制御はRPCベースのすべてのサービスに影響することに注意する。
 
□192.168.0.*からのアクセスを許可する
/etc/hosts.allow
 ALL:127.0.0.1
 portmap:192.168.0.
 lockd:192.168.0.
 mountd:192.168.0.
 statd:192.168.0.
□その他のアクセスを拒否する。
/etc/hosts.deny
 portmap:ALL
 lockd:ALL
 mountd:ALL
 rquotad:ALL
 statd:ALL
上記の設定は以下を参考。
NFS サーバの設定
 

■公開ディレクトリの設定ファイル

公開ディレクトリは「/etc/exports」で設定する。
/etc/exportsの書式
<公開ディレクトリ> <アクセス許可ホスト>(<カンマ区切りオプション>)
 
□主なオプション一覧
ro読み取りのみ許可
rw読み取り・書き込みともに許可
root_squashリモートrootをnobodyユーザとして扱う。明示的に指定しなくてもデフォルトで有効になる。no_root_squashオプションで無効にできるが、特別な理由がない限り避けるべき。
no_root_squashリモートrootをローカルrootとして扱う。クライアント側のroot権限をNFSでマウントしたファイルシステムにも有効にする。セキュリティホールになり得るので特別な理由がない限りこのオプションは使うべきではない。
all_squash全てのユーザを不特定ユーザとして扱う。 全てのユーザを匿名ユーザ(nobody)として扱う
anonuid不特定ユーザ用にローカルユーザIDを指定 匿名ユーザ用のUIDを指定する
anongid不特定ユーザ用にローカルグループIDを指定する 匿名ユーザ用のグループIDを指定する
no_subtree_checkサブツリーのチェックを無効
 
その他オプションは以下参照
Manpage of EXPORTS
 
実際の例として、/home/itmst/Desktopをlanドメインからのすべてのアクセスを許可し、読み書き可、root権限なし、サブツリーチェック無効で公開する場合、
/home/itmst/Desktop *.lan(rw,root_squash,no_subtree_check)
となる。ひとつのディレクトリに対して複数の公開対象ホストを設定する場合はスペース区切りで続けて記述する。
/home/itmst/Desktop *.lan(rw,root_squash,no_subtree_check) *.lan2(ro)

スペースが区切り文字として認識されるので、「*.lan」と「(rw,」の間にスペースを空けてはいけないことに注意。
 

■設定の反映

/etc/exportsを変更した場合は以下のコマンドを実行して設定を反映させる。
$ sudo service nfs-kernel-server reload
 * Re-exporting directories for NFS kernel daemon...     [ OK ]
または
$ sudo exportfs -r
でも可。
 

■公開ディレクトリの確認

公開されているディレクトリを確認するにはnfs-commonパッケージに含まれるshowmountコマンドを使う。-eオプションでホストを指定できる。クライアントの設定をするときも目的のホストの公開ディレクトリを確認できる。
$ showmount -e localhost
Export list for localhost:
/home/itmst/Desktop 192.168.0.*
 

■サーバとクライアントでuidとgidを統一させる

NFSではユーザの識別がユーザ名ではなく、ユーザIDによって行われるため、サーバ側とクライアント側でユーザIDを統一しておく。

■NFSクライアント

クライアント側からNFS公開ディレクトリをマウントする。通常のmountとほとんど同じだが、マウント対象ディレクトリの前に「ホスト名:」をつける。マウントオプションは-oオプションでカンマ区切りで記述する。-tオプションでファイルシステムにnfsを指定してもいいが無くてもいける。  
□代表的なマウントオプション
hardハードマウント(デフォルトで有効)
softソフトマウント
intrハードマウント時に割り込みを受け付けるかどうか
rsize=byte読み込みバッファサイズ デフォルト1024Byte。rsize=4096のように1024の倍数で16384までの範囲でバイト単位で指定。
wsize=byte書き込みバッファサイズ デフォルト1024Byte。rsize=4096のように1024の倍数で16384までの範囲でバイト単位で指定。
nosuidサーバ上のsuidプログラムの実行を不可にする。クライアント側のroot所有ファイルが書き換えられるの防ぐ。サーバが完全に信用できない場合は有効にすべき。
noexecサーバ上のファイルの実行を禁止する。サーバが信用できない場合、必要なら有効に。
 
実際にマウントする際の例は以下。
$ sudo mkdir /mnt/nfs
$ sudo mount -t nfs -o hard,intr 192.168.0.3:/home/itmst/Desktop nfs
 

■ハードマウントとソフトマウント

ハードマウントの場合は、NFSサーバへの書き込みは保証されるが、サーバ側がダウンした場合クライント側では無限にリトライを繰り返し、 プロセスがハングアップする可能性がある。サーバが復活したらそのまま再接続される。 ソフトマウントの場合は、NFSサーバへの書き込みは保証されないのでファイルが破損する可能性がある。 接続できない場合はタイムアウトするのでハングアップの心配はない。
 
NFSの問題については以下参照。
NFS環境の問題点と自動マウント
 
複数のクライントが接続する場合は負荷が高くなるのでautofsなどを使って通信が発生する場合のみマウントするようにした方が良い。
 

■/etc/fstabに登録して自動起動

書式
<ホスト名>:<リモートディレクトリ> <マウント先ディレクトリ> nfs <カンマ区切りオプション> 0 0
192.168.0.3で公開されている/home/itmst/Desktopを読み書き可、割り込み可でハードマウントする場合は
192.168.0.3:/home/itmst/Desktop /mnt/nfs nfs rw,hard,intr 0 0
という感じになる。
 
[参考]
Linux NFS-HOWTO
NFS(Network File System)
 
2008-04-09 13:01 | Linux | Comment(1) | Trackback(1)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。