Author Archives: admin

MSYSとMingWでwin32のDLLをつくる

MingWとMSYSはインストールされているものとする。

以下のファイルwinhello.cを作成する。

MSYSシェルからコンパイルする。

成功するとwinhello.dllができる。

これをrundll32.exeを使って実行してみる。

できた。

gccの標準のインクルードパスを調べる

gccのインクルードパスと言っても、#includeを処理するのはプリプロセサなので、まずgccがどのプリプロセサを使うかを調べて、そのプリプロセサからインクルードパスを調べなければならない。

なので最初にgccが使うプリプロセサを調べなければならないが、まともな方法がわからないので、以下のソースを-vオプションつきでコンパイルしてそこから探してみる。

これでcc1を使うことがわかったが、すでにここにインクルードパスが出力されるので目的は達成してしまった。

それでも少しまともにやってみると以下のようにできた。

追記

でいいらしい。

Linuxサウンドシステムの歴史

Linuxのサウンド関係が複雑なので、いままで調べたものプラス自分の想像で歴史的に記述。

サウンドがなかった時代

ビープ音しかならなかった。

サウンドハードデバイスができて来た

Sound Blaster 16来た。アプリはこれを直接叩いた。他のハードもできて来たが最初はSB16エミュレーション機能をハードがもっていた。

OSSできた

SB16的なインターフェースにまとまってきたので、これをOSSとしてまとめた。これで統一的なインターフェースができた。ソフト開発者はOSSを使えばいいようになった。/dev/dspに音データを流し込む。

ミキシングはハードでやっていた。でもソフトでやるほうがいいじゃんてことになってきた。

aRtsやESDできた

ハードがミキシングしなくなったので、ソフトでやることにした。aRtsとESDができた。どちらも新しいサウンドシステムを提供する。ここでミキシングしてOSSに送ることにした。アプリケーションはこれに合わせて書き換えられた。

これによって2つのアプリが同時に音を鳴らせるようになった。(いままでは1つのアプリが同時にならせるだけだった?)

でもaRtsとESDの両方同時に鳴らすことはできなかった。どうじにOSSに送ることはできない。ちなみにaRtsは主にKDEで使われ、ESDはGnomeで使われた。

この時点でいろいろなアプリが出てきてしまった。OSSに直で送るアプリ、aRtsやESDをつかうアプリ、OSSに直で送るやつがいるとaRtsやESDが鳴らせなくなる。

SDLやlibaoできた

そこで、OSS、aRts、ESDをラップするライブラリSDLやlibaoができた。

ALSAできた

ところがOSSのライセンスが変わってしまった。もうOSSは止めてALSAを作ることにした。ALSAならMIDIも流し込める。ソフトミキシングもできる。OSSのためにOSSエミュレーションもできるようにした。

ところがALSAは難しく、OSSエミュレーションがよく動くのでアプリはOSSで書かれた。ただ問題があってOSSエミュレーションはソフトミキシングができなかった。

PulseAudioできた

ごちゃごちゃしてきて訳がわからなくなったが結局2つのアプリで同時に鳴らせないのでPulseAudioでやることにした。ALSAのデータはPulseAudioに送ることにした。そこでミキシングして出せばいいようにした。

しかし現在のfedoraなどではOSS直のアプリはPulseAudioには行かないように設定されている。padspコマンドを使えば、OSS直アプリのOSS出力をPulseAudioに送れるようになっている。

aRtsやESDがどうなっているのかは調べてない。

fedora10のapacheログをawstatsで解析

ここではfedora10でvirtual hostでサーバを運営していて、ホスト毎に解析する。

awstatsのインストール

awstats.confの作成

www.example.comは実際のホスト名に変える。

confの編集

# vi awstats.www.example.com.conf

以下の3箇所を自分のに合わせて編集

apacheの設定ファイル編集

Allow from に 192.168.0.を加える

ブラウザで確認

サーバを再起動後、ブラウザで以下を開いて確認する。192.168.0.100はサーバのアドレス
http://192.168.0.100/awstats/awstats.pl?config=www.example.com

アップデートは一時間後とに行うように設定されてるようだ。/etc/cron.hourly/awstats 参照

Fedora10のvmware player 3で音割れする

VMware Player 3.00からデフォルトでALSAを使うようになっている(多分)。ALSAはPulseAudioに出力するため、重くなると思われる。

PulseAudioはサウンドサーバで、複数のアプリで同時に音を鳴らせるようにするためのようなもの。PulseAudioを使えば、VMwareを起動しながら、ホストでも他のアプリで音を鳴らせるようになる。

ALSAを使わずサウンドを独占して使うようにするには以下のようにOSSを選択する。

.NET2.0のアプリがWindows2000でネットワークフォルダから起動できない

ネットワークフォルダ上にある.Net Framework 2.0でつくったアプリを実行すると落ちる。ゾーンのセキュリティが原因のようなので以下のように直す。

[コントロールパネル]→[管理ツール]→[Microsoft .NET Framework 2.0 構成を開く。

Microsoft .NET Framework 2.0 構成

[ゾーンセキュリティの変更]をクリックし、セキュリティ変更ウイザードで変更する。
<img src="https://ambiesoft.com/blog/wp-content/uploads/2010/03/zoneserurity-150x142.png" alt="" title="zoneserurity" width="150" height="142" class="alignleft size-thumbnail wp-image-1723" />

イントラネットの信頼度を変えればローカルネット上のファイルに適用される。信頼済みサイトを適用する場合にはあらかじめサイトを登録しておく(インターネットオプション)。以下参照。

上図のcomputernameは実際の信頼するコンピュータ名。ネットワークドライブを指定してもいい。

MySQLのレプリケーション

レプリケーションとは2つのMySQLサーバでデータを同期する仕組み。マスターサーバのデータをスレーブサーバにコピーする。スレーブサーバは常に起動している必要はなく、起動時に一括でマスターからコピーできる。スレーブでの更新はマスターには影響しないので、通常は更新作業はすべてマスターで行うものと思われる。当然スレーブは複数あっていい。

レプリケーションはバイナリーログを利用する。マスターはデータの追加や更新を「イベント」としてバイナリーログに書き込む。スレーブはこのログを読んで自身のデータを更新する。このときスレーブはバイナリーログのどこから実行するかの情報をちゃんと自分で持っている。設定によってスレーブは特定のデータベースだけをレプリケーションしたりできる。

マスターとスレーブにはユニークなID(server-id)を割り付けなければならない。ここではすでにマスターにはデータがあり、マスターのserver-idとバイナリーログ有効の設定は有効にしてあり、レプリケーション用ユーザreplも存在するのもとする。ただしこのマスターは最初からバイナリーログがとられているわけではないものとする。そのときの新しくスレーブを立ち上げたときのことを考える。スレーブがレプリケーションするデータベースはdddだけとする。

マスターのバイナリログの現在の状況を確認してバックアップをとる
スレーブのデータベースは空なので、マスターのデータをまず持ってこなくてはならないが、マスターのバイナリーログとの整合性が狂うとまずいので、テーブルの更新を止めてからバイナリーログの状況を確認し、その後バックアップを取る。

マスターにコマンドラインからログインして、更新を止め、バイナリーログの状態を確認する。

このコマンドラインはこのままにして(抜けるとロック外れる)、他のコマンドラインからデータベースdddをファイルにコピーする。すでにロックしてるので–skip-lock-tables を追加する。

$ mysqldump --database ddd -u root -p --skip-lock-tables > ddd.sql

終わったら、mysqlのコマンドラインも抜ける。これでバイナリーログの状態とバックアップファイルができた。

スレーブに今作ったバックアップファイルからコピーする
スレーブにddd.sqlを持ってくる。が、最初にデータベースdddを作る。

次にddd.sqlを流し込む。

$ mysql -u root -p < ddd.sql

スレーブにserver-idを割り付ける
まずスレーブにserver-idを割り当てる。my.cnfの[mysqld]セクションに設定を行う。server-idは適当な数字でいい。(1~4294967295)。

[mysqld]
server-id=432423

スレーブを起動し、コマンドラインに入って、レプリケーションの設定をする。

MASTER_LOG_FILEとMASTER_LOG_POSの値は上で確認したマスターのバイナリーログの状態を入力する。他のホストとかユーザとかは自分のものに合わせる。

これでmaster.infoができ、ここにバイナリーログの状態が保存されているはず。

スレーブを終了しmy.cnfにちゃんとしたレプリケーション情報を書く。

[mysqld]
server-id=432423
master-host=192.168.0.100
master-user=repl
master-password=pass
replicate-do-db=ddd

スレーブを起動し、マスターで変更した情報がスレーブに反映されるかを確認する。

Windows7のタスクバーの時計を表示しない

※こんなやりかたしなくても普通にできました。コメントで教えていただきました。ありがとうございます。

タスクバーのプロパティをみても消す方法がわからなかったのでメモ。

[スタートボタン]→[プログラムとファイルの検索]に”gpedit.msc”と入力する。

起動したローカルグループポリシーエディターから[ユーザーの構成]→[管理用テンプレート]→[タスクバーとスタートメニュー]を選択し、システム通知領域に時刻を表示しないを有効にする。

localgpe

ログオンしなおすと時計が消える。

Ubuntu 9.10(karmic)でVMware player 2.5.3のインストールが失敗する

Ubuntu 9.10にVMwarePlayer2.5.3をインストールしようとるすると”Configuring…”で止まってしまう。

Screenshot-VMware Player Installer

仕方ないので、インストールを強制終了して以下のコマンドを実行する。

$ sudo vmware-modconfig --console --install-all

これでもまだ不具合があって、ゲストにマウスポインタが入らない。これを直すためには以下のように起動すればいい。

$ export VMWARE_USE_SHIPPED_GTK=yes
$ vmplayer

vmwareのハードディスクを縮小する

(注)以下の方法はゲストOSのデータを失う可能性があります。

ここでは65Gのハードディスクを30Gに縮小する。65Gのハードディスクにはプライマリパーティションが1つしかなく、それが全領域を占めている。そして、65Gのうち40G位は空いていなければならない。またホストにはあらじめ30G位の空き領域がなければならない。

1、ゲストの65Gのハードディスクを25Gと40Gのパーティションに区切り、データを25Gの方に移動する。

ここではUbuntuのLiveCD(ubuntu-ja-9.04-desktop-i386-20090510.iso)を使う。
このisoをゲストに接続し、”コンピュータに変更を加えないでUbuntuを使ってみる”で起動する。

ubustart

[システム]→[システム管理]→[パーティションエディタ]を選択して、gpartedを起動する。

パーティションをリサイズし25Gで区切り、[適用]をクリックして実行する。これでデータはすべて25Gの方に移る。

gparted-resize

Ubuntuをシャットダウンし(右上のボタン)、isoを切り離して、OSを起動してみて、起動できるかを一応確認しておく。

2、30Gのハードディスクを新しく作成しデータをコピーする

次に30Gのハードディスクを新しく作成して、ゲストに接続し、再びUbuntuをLiveモードで起動する。

再びgpartedを起動し、新しく追加した30Gのハードディスクにパーティションを追加する。このパーティションはハードディスク全領域にする。フォーマットはしなくていい。
partition-noformat

またこのとき、65Gと30Gのハードディスクのパスを確認しておく。ここでは65Gは/dev/sda、30Gは/dev/sdbになっている。

[アプリケーション]→[アクセサリ]→[端末]を選択して、以下のコマンドを実行してハードディスクをコピーする。(間違えるとデータが全部消える。ifは入力、ofは出力、sda1やsdb1の1は最初のパーティションを意味する。)

dd

コピーが終了したら、再びgpartedを起動し、30Gのハードディスクのパーティションを全領域にする。その後、30Gのハードディスクにbootフラグを付ける。

flag

Ubuntuをシャットダウンし、ゲストから65Gのハードディスクを切りはなし、30Gのハードディスクから立ち上がるかを確認する。

成功したら65Gのハードディスクをホストから削除する。