RHEL 5.2でSkypeを使う

ニーズ度外視エントリシリーズ。

Skype for Linuxをダウンロード – 最新バージョンをダウンロード

SkypeのサイトにRedHat Enterprise Linux版はないので、一番可能性のありそうなCentOS版を持ってくる。

LinuxにRPMで公開鍵をインポートしてyum経由でSkypeをインストールするメモ – Knowledge Database IT

ほぼまんま、こちらの情報でOK。

$ wget http://www.skype.com/go/getskype-linux-centos
$ wget http://gd.tuwien.ac.at/infosys/phone/skype/rpm-public-key.asc

# rpm –import rpm-public-key.asc
# yum -y install skype-2.0.0.72-centos.i586.rpm

Loading "rhnplugin" plugin
rhel-x86_64-server-5      100% |=========================| 1.4 kB    00:00
Excluding Packages in global exclude list
Finished
Setting up Install Process
Parsing package install arguments
Examining skype-2.0.0.72-centos.i586.rpm: skype – 2.0.0.72-centos.i586
Marking skype-2.0.0.72-centos.i586.rpm to be installed
Resolving Dependencies
–> Running transaction check
—> Package skype.i586 0:2.0.0.72-centos set to be updated
–> Finished Dependency Resolution

Dependencies Resolved

=============================================================================
Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
skype                   i586       2.0.0.72-centos  skype-2.0.0.72-centos.i586.rpm   19 M

Transaction Summary
=============================================================================
Install      1 Package(s)
Update       0 Package(s)
Remove       0 Package(s)

Total download size: 19 M
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: skype                        ######################### [1/1]

Installed: skype.i586 0:2.0.0.72-centos
Complete!

こともなくインストール完了。

vncserverを起動して確認してみる。

$ vncserver -geometry 1024×769 -depth 16

で、WindowsマシンからこのサーバのIPアドレス:5901に接続してvncの画面上で

$ Skype &

見事Skype起動完了。簡単。チャットを使いたいだけなのでこれでOK。


Adobe AIR.dll

HKEY_LOCAL_MACHINESOFTWAREClassesAIR.InstallerPackageshellopencommand

c:PROGRA~1COMMON~1ADOBEA~1Versions1.0ADOBEA~1.EXE "%1"

と、謎のリスト。

LAUNCH
-launch
IS_INSTALLED
-isinstalled
WITH_RUNTIME
-withRuntime
URL
-url
RUNTIME
PLAYER_VERSION
-playerVersion
SANDBOX_TYPE
-sandboxType
SECURITY_DOMAIN
-securityDomain
HTTPS-https
USER_EVENT
-fromUserEvent
SEPARATOR
PSN_PREFIX
-psn_
SILENT
-silent
LOG_TO_STDOUT
-logToStdout
LOCATION
-location
DESKTOP_SHORTCUT
-desktopShortcut
PROGRAM_MENU
-programMenu
X1
-x1
UPDATE
-update
WITH_APP
-withApp
UPDATE_X1
-update:x1
INSTALL
-install
STDIO
-stdio
ARP_UNINSTALL
-arp:uninstall
UNINSTALL
-uninstall
INFO
-info
UPDATE_CHECK
-updatecheck
INSTALL_UPDATE_CHECK
-installupdatecheck
APPLY_UPDATES
-applyupdates
UPDATE_INSTALL
-updateinstall
EULA
-eula
EULA_ACCEPTED
-eulaAccepted
ELEVATED_INSTALL
-ei
ELEVATED_UNINSTALL
-eu

詳細不明。

Adobe AIR Application Installer.exe – AKABANA


CakePHP 1.2でオーバーライドが効かなくなる

レアケースだし、何かしらのミスだと思うのだけど一応。

app_controller.phpをはじめ、app/側に何を置いてもcake/側のファイルが優先されてしまって処理が効かないという現象があった。

app/tmp/cache/以下のキャッシュファイルを全部消したら直った。

直らなくて数時間無駄にしてしまった…


mysqldumpと「Got a packet bigger than 'max_allowed_packet' bytes」

そこそこ巨大なテーブルをmysqldumpで書き出して、nkfでEUC-JPからUTF-8に変換、テーブルの照会順序もutf8-generic-ciにして書き戻す、ということをやろうとした。

サーバのMySQLのバージョンは4.1。

$ mysqldump –version
mysqldump  Ver 10.9 Distrib 4.1.20, for redhat-linux-gnu (i386)

$ mysqldump -u root -h localhost -p –complete-insert –quick –no-create-info データベース名 > datas.sql
$ nkf -Ew datas.sql > datas.utf8.sql
$ mysql -u root -h localhost -p データベース名 < datas.utf8.sql

こんな感じで実行してみたらタイトルにある”Got a packet bigger than ‘max_allowed_packet’ bytes”のエラーが発生。

SQLファイルの中身を見ると拡張INSERT文がずらーっと。しかも何かnkfが所々で文字化けを起こしてるし。

MySQLのバックアップデータをUTF8で復元する – Knowledge Database IT

–max_allowed_packet=128M のオプションとかはなぜか効かず。まぁ、効かないことが多いようですが。

Linuxでやる夫: [mysql] やる夫がmax_allowed_packetの設定をするようです。

mysqlコマンドでログインしてから「source ファイル名」でも取りこめるのですが、ちょっと面倒なので、拡張INSERTを何とかやめたい。

メモ: mysqldumpで一行ずつのINSERT

MySQL :: MySQL 4.1 リファレンスマニュアル :: 4.9.7 mysqldump(テーブル構造とデータのダンプ)

MySQL4.1のmysqldumpのマニュアルには–skip-系のオプションの記述がなかったのですが、MySQL5.1のマニュアルを見たら発見。

MySQL :: MySQL 5.1 リファレンスマニュアル :: 7.12 mysqldump — データベースバックアッププログラム

使えるのかなーと思って試してみたところ成功。

$ mysqldump -u root -h localhost -p –complete-insert  –skip-extended-insert –quick –no-create-info データベース名 > datas.sql
$ nkf -Ew datas.sql > datas.utf8.sql
$ mysql -u root -h localhost -p データベース名 < datas.utf8.sql

nkfの文字化けも直ったしこれで解決。


nkfでサイト全体の文字コードを変更する

find . -type f -name "*.php" -print0 | xargs -0 nkf -Ew -Lu –in-place

とりあえずこれでEUC-JPからUTF-8にPHPファイルが再帰的に変換される。

あと、ついでに-Luにより、改行コードをLFに統一しておく。

–in-placeは既存のファイルに上書きしつつ、タイムスタンプを更新するオプション。–overwriteでも上書きできるが、–overwriteではタイムスタンプを更新してくれない。

タイムスタンプの更新をしないと、svnが更新を検知してくれない。

これで一気に処理しておいて、phpMyAdminや他のライブラリなどの変換してはいけないコードは、個別にsvn revert –recursiveする。

ちなみに–in-placeオプションについては、nkf 2.0.6より実装。

2.0.6 – Change Logの表示 – nkf Network Kanji Filter – SourceForge.JP


GmailとWindows Live メールの相性がひどい件

いつもGmailでたくさんのメールに「Junk E-mail」というラベルが勝手につく。時々必要なメールにもつくので困っていた。

何が原因なんだろうと思っていたら、Windows Live メールのせいだった。

Gmailで受信したメールに対して、IMAPでアクセスしているWindows Live メールが勝手に迷惑メールを分類してしまうのが原因で、GmailのWeb側でいくら迷惑メールを処理しても、Windows Live メールが再読み込みするたびに元に戻される。

しかも何が困るってIMAPにはメールフィルタをかけられないこと。フィルタをかけられるなら、受信段階で処理を止めさせるとかできたと思うのだけど…

IMAP

そのくせ、迷惑メールの処理だけはするのに、それを特定のアカウントに対してやめることもできない。

一応、Gmail側のフィルタ処理を諦めれば、Windows Live メールのアカウント設定でIMAPのフォルダを設定してやることで、Gmail側の迷惑メールフォルダは使える。

IMAP2

と思ったら使えなかった。

IMAP3

あぁ…なんて微妙な…

ちなみにルートフォルダのパスを指定すれば迷惑メールフォルダにつっこめるようになるのだけど、ラベルが使えなくなるそうな。

Windows Live メールでGmail見るなってことですか、Hotmail使えってことですか、そうですか。


Pythonで、サーバからの画像取得で止まる

サーバで画像に動的にExif情報を付加して、それをローカルのPythonで大量取得しようとしてハマったのでメモ。

ローカル側は超省略するけど、以下のような感じ。

# URLをXMLから取得
image_path = i.find("Url").text
# 認証のかかっている場所から画像取得
img = urllib2.urlopen(urllib2.Request(unicode(image_path), None, {"Authorization": "Basic " + basicAuth}))
localfile = file('./' + id + ".jpg", "wb")
# 読み書き
localfile.write(img.read())
img.close()
localfile.close()

上記を10000ファイルくらい繰り返しで取得する。

が。

img.read()のところでなぜか止まる。

大体10個くらい読み込んだ時点で止まる。

Traceback (most recent call last):
  File "***.py", line 62, in <module>
    localfile.write(img.read())
  File "C:Python25libsocket.py", line 291, in read
    data = self._sock.recv(recv_size)
  File "C:Python25libhttplib.py", line 509, in read
    return self._read_chunked(amt)
  File "C:Python25libhttplib.py", line 573, in _read_chunked
    line = self.fp.readline()
  File "C:Python25libsocket.py", line 331, in readline
    data = recv(1)
KeyboardInterrupt

色々調べた結果、サーバ側でContent-Lengthを返さないと止まることがあるっぽい。

ということでサーバ側をちょこちょこ修正。

無事、止まらずに実行できるようになりました。


PythonスクリプトをWindowsのexe形式にする

特に迷うことは何もない。py2exeでさっくり。

Tutorial – py2exe.org

色々モジュールインポートしていても、難なく作成できる。pySerialとか使ってたけど余裕。

ただし、Vista SP1+Python2.5で作成したexeをXP SP2に持っていこうとしたら

プロシージャ エントリ ポイント _except_handler4_common がダイナミック リンク ライブラリ msvcrt.dll から見つかりませんでした

と表示されて実行できない。

msvcrt.dllのバージョンの問題らしいのだけど…?

現在調査中。というか主に.NET Frameworkをインストール中。どうかな。


大量のMTS(AVCHD)形式のファイルをaviに変換する

Windows上ではK-Lite Mega Codec Packを入れてあるので再生できるのだが、Macで見たいとか言われたので、PanasonicのHDC-SD5で録画した166個のMTSファイルを一括変換すべく色々やってみた。

思いついた変換方法は、MTS→Avisynthスクリプト作成→VirtualDubで読み込み→AVI保存

とりあえずavsはファイル数分作ることにした。さっくりとPythonスクリプトで作成。(後述)

VirtualDubでジョブ処理をさせるためにjobsファイルを作成する。これもどうせ途中で止めたりしないので、1ファイルに「ファイルオープン」~「AVI保存」~「クローズ」までを処理数分繰り返して記述することにした。

カレントディレクトリにtemplate.avs、template.jobs、createJobs.pyを作成。中身はそれぞれ以下の通り。

template.avs

DirectShowSource("..$1")
BilinearResize(1920,1080)

template.jobs

VirtualDub.Open(U"D:datasmovieshogeavs$1.MTS.avs");
VirtualDub.SaveAVI(U"D:datasmovieshogeavi$1.avi");
VirtualDub.Close();

createJobs.py

import os
path=’./MTS’
filelist = os.listdir(path)
output_jobs = ”
for i in range(len(filelist)):
    item=os.path.join(os.path.normpath(path),filelist[i])
    filename = os.path.basename(item)
    filebase = filename.replace(‘.MTS’, ”)
    f = open(‘./template.avs’, ‘r’)
    output = ”
    for line in f:
        line = line.replace(‘$1’, item)
        output = output + line
    f.close()
    fo = open(‘./avs/’ + filename + ‘.avs’, ‘w’)
    fo.write(output)
    fo.close()
    f_jobs = open(‘./template.jobs’)
    for line in f_jobs:
        line = line.replace(‘$1’, filebase)
        output_jobs = output_jobs + line
    f_jobs.close()

fo_jobs = open(‘./all.jobs’, ‘w’)
fo_jobs.write(output_jobs)
fo_jobs.close()

あ、MTSファイルはMTSフォルダに入れておくのと、aviフォルダ、avsフォルダを作っておく。

あとはPythonスクリプトを実行するだけで、all.jobsが出来上がるので、VirtualDubのファイルメニューからRun Scriptを実行するだけ。VirtualDubの保存時のエフェクトやCODECはあらかじめVirtualDub上で設定しておく。


Polycom VSX 7000Aの接続先ローカル名でハマる

テレビ会議システムPolycom VSX 7000Aをブラウザから管理していたときにハマった内容のメモ。需要なさそー。

ホーム画面で簡単に通話が始められるように、接続先の名前(ローカル名)をディレクトリに登録できるのだが、アルファベット5文字+日本語5文字入れたら、マルチバイト文字の境界に対応してないらしく、機器側に最後の文字がバックスラッシュで表示されてしまった。

あぁ、ダメなのか、と思って再び編集しようとしたら、リストが出てこない!

ブラウザ換えてみたりしたけどダメなので、管理画面のユーティリティを見たら、「ディレクトリのインポート/エクスポート」というのがあったので、とりあえずPC側にエクスポート。

CSVをエディタで開いて見ると、エスケープされた該当部分が見つかったので修正してインポート。

そしたら見事に上書きされて正常に動作するようになった。よし。

まぁ、機器側なら削除→新規作成ができるとは思うのだけど。