yuu_nkjm blog
2011-05-21(Sat) [長年日記] 編集
[openSUSE][PHP][Linux][Langrid] openSUSEにPHP 5.2をインストールする (openSUSEで最新版でないパッケージをインストールする)
openSUSE11.2以降ではPHP 5.3以降がインストールされる.PHP 5.2では提供されていたがPHP 5.3では提供されなくなったメソッドが存在するため,PHPでかかれたソフトウエアによっては,PHP 5.2以前でないと動かないものがある.
以下では,openSUSEでPHPパッケージをダウングレードする方法について説明する.
同様の手続きを踏むことで,PHP以外のパッケージでも,最新版でないパッケージをインストール出来るはずである.
レポジトリの登録
yast→ソフトウェア→ソフトウェアレポジトリでhttp://download.opensuse.org/update/11.1/を登録する.
パッケージのインストール
インストールしたいパッケージ(php, apache2-mod_php5,php-mysql,php-jasonなど)を検索したあと,表示→パッケージバージョンと選択すると,右下にインストールできるバージョンの一覧が表示されるので,そこからインストールしたいバージョンを選択し,インストールする.

yastの表示画面を大きくするとわかるが,右上のエリアには,インストール可能な最新バージョンとインストールされているバージョンが表示されている.
─────────────────────────────────────── │名前 │概要 │可能 │インストール │ │ │ │バージョン│バージョン │ ─────────────────────────────────────── │apache2-mod_php5 │PHP5 Module for Apache 2.0 │5.3.3 │5.2.14 │ │php5-json │PHP5 Extension Module │5.3.3 │5.2.14 │
話は少しはずれるが,php-soapは,pear-soapとは別物である.別途,"pear install soap-beta"などとして,インストールする必要がある.
php.iniの編集
phpからmysqlを利用する場合,以下の二つの記述を/etc/php5/apache2/php.iniと/etc/php5/cli/php.iniに書き込む必要がある.このパスは/etc/my.cnfに書かれているsockへのパスと揃えた方が良いかもしれない.
mysql.default_socket = /var/run/mysql/mysql.sock mysqli.default_socket = /var/run/mysql/mysql.sock
ついでにお好みでログの設定.
display_errors = On error_log = /var/log/apache2/php_error.log
sysconfigの変更
yast→/etc/sysconfigエディタからNetwork→www→apache2とたどって,APACHE_MODULESのエントリにphp5を追加する.
実行権限の付与
apache2用のphpモジュールに実行権限がついてないので,つける.
chmod a+x /usr/lib64/apache2/mod_php5.so
apache自動起動の設定と起動
定番の自動起動の設定と起動.
chkconfig apache2 on /etc/init.d/apache2 start
関連ページ
- openSUSE 11.2: Downgrade PHP 5.3 to 5.2 | Badzilla
かなりの部分がこのページの翻訳
2011-05-20(Fri) [長年日記] 編集
[Windows 7 (64bit)][MSOffice] Office 2007とOffice 2010を共存させる
インストール
Office 2007とOffice 2010を同じOS上にインストールすることができる.まず,Office2007をインストールする.その後,Office 2010をインストールする.インストーラを起動すると,自動アップグレードかカスタムアップグレード(正確な文言忘れた…)かを選択させられる.この時,カスタムアップグレードを選ぶと,"以前のバージョンを全て残す"という選択ができるようになるので,それを選べば良い.

Power Pointを複数ウィンドウで開けない(MDIになってしまう)のが嫌だったんだけど,複数のバージョンのOfficeを使い分ければ複数ウィンドウでPower Pointファイルを開くことも可能になる.Power Point間でコピーアンドペーストをしたいときとか,MDI形式で開かれるとウィンドウの切替が面倒なんだよね.
関連づけ
パワーポイントやエクセルのアイコンをダブルクリックしたとき,Office 2010が起動して欲しいのに,Office 2007が起動してしまった.
ひとまずMicrosoft Ansersに掲載されていた以下の方法で乗り切った.
Excel, PowerPointの設定を変更するには、/regserver コマンドを使用して、優先に起動するプログラムを変更することができます。 複数のバージョンの Office がインストールされている場合の Office オートメーションについて 例)Excelの設定例 Office 2010を優先にしたい場合: "c:\program files\microsoft office\office14\excel.exe" /regserver Office 2007を優先にしたい場合: "c:\program files\microsoft office\office12\excel.exe" /regserver Office 2010を優先にしたい場合は、共存時のインストール順序に従って、正しくインストールを行うだけで済みます。 Officeを共存する場合のインストール順番は、古いバージョンの順にインストールを行う必要があります。 つまり、Office 2007、Office 2010の順にインストールを行います。 この順番が違っていると、正しく動作しない現象が発生する可能性があります。(共存インストールの条件) また、Office 2010が64bit版の場合は、共存インストールを行うことができません。 ----- 追記 ----- 今更ですが、混乱するといけないので追記をしておきます。 起動する優先の変更を /regserver コマンドで行った場合、そのまま使用すると変更が反映されない場合がありますので、 変わらない場合は、PCを再起動してから確認を行ってください。
コピペ用のメモ.
"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" /regserver "C:\Program Files (x86)\Microsoft Office\Office14\POWERPNT.EXE" /regserver "C:\Program Files (x86)\Microsoft Office\Office14\WINWORD.EXE" /regserver
関連ページ
2011-05-19(Thu) [長年日記] 編集
[Java][Swing] イベントディスパッチスレッド以外のスレッドからのイベントディスパッチスレッドへのアクセス
概要
イベントディスパッチスレッド(EDT)とは別のスレッドで,重たい計算をさせたい.しかし,Swingのコンポーネントに影響を与える処理を外部のスレッドで行うことはできない.外部からイベントディスパッチスレッドに処理を依頼するときは,SwingUtilities.invokeLaterを用いる.
分かりやすい例
時間のかかる処理を行った後、最後にSwingUtilities.invokeLater()を呼び出しています。これは、「toDoListModel.remove(int index);」および「setButtonsEnabled(true)」の2つの処理をイベントディスパッチスレッドで実行させるために使っています。なぜ、わざわざこのようなことをするのでしょうか?
![]()
Swingのスレッドポリシーとして、次のようなものがあります。
「コンポーネントの「状態に依存する」あるいは「状態に影響を与える」 処理はすべてイベントディスパッチスレッド上で動作しなければならない」
これはいい換えると、Swingの描画に関連する処理は、シングルスレッドで処理しなくてはならないということです。そして、そのシングルスレッドがイベントディスパッチスレッドなのです。このルールにのっとるため、わざわざSwingUtilities.invokeLater()を使っているのです。
Swingライブラリのソースコードとサンプル
(snip) public class SwingUtilities implements SwingConstants { (snip) /** * doRun.run() を、AWT イベントディスパッチスレッドで非同期的に実行させます。 * これは、保留中のすべての AWT イベントが処理されたあとに発生します。 * このメソッドは、アプリケーションスレッドが GUI を更新する必要がある * ときに使用されます。次の例では、invokeLater 呼び出しは * イベントディスパッチスレッドに Runnable オブジェクトの * doHelloWorld のキューを呼び出してから、メッセージを出力します。 * * * Runnable doHelloWorld = new Runnable() { * public void run() { * System.out.println("Hello World on " + Thread.currentThread()); * } * }; * * SwingUtilities.invokeLater(doHelloWorld); * System.out.println("This might well be displayed before the other message."); * * invokeLater がイベントディスパッチスレッド、たとえば JButton の * ActionListener から呼び出された場合、doRun.run() は保留中のすべて * のイベントが処理されるまで実行が延期されます。ただし、doRun.run() * がキャッチされない例外をスローする場合は、イベントディスパッチスレッド * (現在のスレッドではない) が状態を元に戻します。 * * このメソッドの追加のドキュメントと例については、「The Java Tutorial」の * * 「How to Use Threads」を参照してください。 * * JDK Version 1.3 以降、このメソッドは java.awt.EventQueue.invokeLater() * を呼び出すだけです。 * * このメソッドは、ほかの Swing のメソッドとは異なり、どのスレッドから * でも呼び出せます。 * * @see #invokeAndWait(Runnable) */ public static void invokeLater(Runnable doRun) { EventQueue.invokeLater(doRun); } (snip)Oracle Java 1.6 SwingUtilitiesクラスソースコードより