Linuxで一つのNICに二つのIPアドレスを振りたいときIP Aliasというのが使える。
今192.168.1.10というアドレスがeth0に割り当てられているとして
/etc/sysconfig/network-scripts/のifcfg-eth0をifcfg-eth0:1という名前でコピーする。
そして、ifcfg-eth0:1というファイルの以下の該当部分をこんな風に変える。
DEVICE=eth0:1 # デバイス
IPADDR=192.168.1.11 # IPアドレス
これで、eth0:1というデバイスができて、それが192.168.1.11に割り当てられる。
あとは
ifdown eth0
ifup eth0
(再起動)
をするだけ。
Apacheのバーチャルホストとかやる場合にも使える。
僕はよく自分のテスト環境で利用している。
My Daily Programming Life...
Windows Kernel
なんだかWindows Kernelのよさげな資料を発見
http://www.i.u-tokyo.ac.jp/edu/training/ss/msprojects/index.html
東大ではこんな授業やってんのかぁ。いいなぁ。でもこれ4年ぐらい前の話だな。
今もやってるのかな。
http://www.i.u-tokyo.ac.jp/edu/training/ss/msprojects/index.html
東大ではこんな授業やってんのかぁ。いいなぁ。でもこれ4年ぐらい前の話だな。
今もやってるのかな。
Google Desktopとアドレスバー
Google Desktopがなんとなく変な動きをしているっぽい。
エクスプローラでアドレスバーに直接アドレスを入れたい場合(たとえば\\192.168.1.2とか)がある。Google Desktopを起動した状態でそれをやると、一定時間ごとに入力文字がキャンセルされて今いるアドレスに表示が戻ってしまう。
いま「マイドキュメント」にいるとすると、エクスプローラのアドレスバーの表示は「マイドキュメント」になる。んで、それを消して\\192....と入力していくと、途中でパッと「マイドキュメント」に戻ってしまう。一瞬でアドレスを入力してEnter押せば大丈夫だけど、5秒に一回ぐらい、そういう風な処理が走っているらしく、うまくいかない。
Google Desktopを終了させると、その現象はなくなる。
いろいろ設定変更してみたりしたけど、うまくいかなかった。Google Desktopグループでも見つけられなかった。報告してみるかな・・・。
エクスプローラでアドレスバーに直接アドレスを入れたい場合(たとえば\\192.168.1.2とか)がある。Google Desktopを起動した状態でそれをやると、一定時間ごとに入力文字がキャンセルされて今いるアドレスに表示が戻ってしまう。
いま「マイドキュメント」にいるとすると、エクスプローラのアドレスバーの表示は「マイドキュメント」になる。んで、それを消して\\192....と入力していくと、途中でパッと「マイドキュメント」に戻ってしまう。一瞬でアドレスを入力してEnter押せば大丈夫だけど、5秒に一回ぐらい、そういう風な処理が走っているらしく、うまくいかない。
Google Desktopを終了させると、その現象はなくなる。
いろいろ設定変更してみたりしたけど、うまくいかなかった。Google Desktopグループでも見つけられなかった。報告してみるかな・・・。
マジック?
今一番知りたいことは、オブジェクト指向のよりよい設計はどのようにして考えられて、生まれるのかということ。何か基本原則というか、こういうときはこう作ればよいのようなものがあるのだろうか。デザインパターンとかそういうのはあるけど、本当にそれだけでは無理じゃないだろうか。
いまだに理解できないのはPoco(C++のライブラリ)の設計がどのようにして考えられたものなのかということ。僕にはマジックに見える。なんでこんなにうまくできてるんだ、と思えるところがいたるところにある。つまり、簡単に再利用できて、組み合わせることでどんどん新しい物が作れる。実際に目には見えるし(ソースは公開されているし)、何がどうなっているかもすべてわかる。でも"どのように"がわからない。
いつもプログラムを書くときに、どのように全体を組み立てるかを考えるけど、何をインターフェースとして、何を抽象クラスとして、そしてそれらの依存関係・・・と考えるけど、結局途中でなにかおかしくなる。
これでいいのだろうか。
Pocoのようにするには何を勉強すればいいんだろうか。単なる経験だろうか。それならそれでよいけど、なんとなくそうじゃない気がする。もっとなにかこういうことだ、ということがあってよいように思う。
いまだに理解できないのはPoco(C++のライブラリ)の設計がどのようにして考えられたものなのかということ。僕にはマジックに見える。なんでこんなにうまくできてるんだ、と思えるところがいたるところにある。つまり、簡単に再利用できて、組み合わせることでどんどん新しい物が作れる。実際に目には見えるし(ソースは公開されているし)、何がどうなっているかもすべてわかる。でも"どのように"がわからない。
いつもプログラムを書くときに、どのように全体を組み立てるかを考えるけど、何をインターフェースとして、何を抽象クラスとして、そしてそれらの依存関係・・・と考えるけど、結局途中でなにかおかしくなる。
これでいいのだろうか。
Pocoのようにするには何を勉強すればいいんだろうか。単なる経験だろうか。それならそれでよいけど、なんとなくそうじゃない気がする。もっとなにかこういうことだ、ということがあってよいように思う。
よく使いそうなrpmコマンド
- インストール
rpm -ihv test.rpm
- アップグレード
rpm -U test.rpm
- パッケージ情報の取得
rpm -q package-name
- インストール済みのパッケージ一覧表示
rpm -qa
- ある名前(部分一致でも)のパッケージがインストールされているか表示
rpm -qa | grep partial-name
- パッケージ情報を取得
rpm -qi package-name
(表示されればそんなパッケージがある)
- パッケージに属するファイル一覧
rpm -ql package-name
- あるファイルがどのパッケージに属するか表示
rpm -qf /path/to/file
rpm -ihv test.rpm
- アップグレード
rpm -U test.rpm
- パッケージ情報の取得
rpm -q package-name
- インストール済みのパッケージ一覧表示
rpm -qa
- ある名前(部分一致でも)のパッケージがインストールされているか表示
rpm -qa | grep partial-name
- パッケージ情報を取得
rpm -qi package-name
(表示されればそんなパッケージがある)
- パッケージに属するファイル一覧
rpm -ql package-name
- あるファイルがどのパッケージに属するか表示
rpm -qf /path/to/file
mallocの2の累乗確保
Joel On Softwareの最初のほうに、mallocは2の累乗を必ず確保するようにすれば、無駄が少なくて済むということが書いてあった。・・・ちょっと考えればすぐわかるって書いてあるんだけど・・・わかんね・・・。
こんなやりとりもあったけど、結局のところよくわからん。
http://discuss.fogcreek.com/joelonsoftware4/default.asp?cmd=show&ixPost=118148&ixReplies=12
誰かわかりやすく教えてください。
こんなやりとりもあったけど、結局のところよくわからん。
http://discuss.fogcreek.com/joelonsoftware4/default.asp?cmd=show&ixPost=118148&ixReplies=12
誰かわかりやすく教えてください。
Postgresに外部から接続
mysqlよりちょっと難しかったのでメモ。
環境
- CentOS5
- Postgres 8.1.1
とりあえず初期設定は
postgresユーザーになって、initdbを行う。DB用フォルダは自分で-Dオプションで指定してもいいし、環境変数PGDATAに入れておいてもいいらしい。とりあえずCentOS5で標準でインストールされているPosgtresを使うと、postgresユーザーの.bash_profileにすでに環境変数が登録されているので、そのままにしておいた。
その後はrootユーザーでservice postgresql startなどのコマンドで起動。
とりあえずそのlocalhostからpsqlで接続。psql -U postgres でよい。これで接続できればとりあえずPostgresサーバーは動いている。
ここまでは簡単だった。
次に外部からの接続設定。
今回は、192.168.1.0ネットワークでPostgresサーバーが192.168.10で動いているものとする。
設定箇所は2か所。DB用フォルダの中にpostgresql.confとpg_hba.confがある。(CentOSの場合 /var/lib/pgsql/dataが標準の場所)
postgresql.confがサーバー全体の設定で、pg_hba.confが接続許可設定という感じだと思う。
まず、postgresql.confでlisten_addressの行を変更する。これはどのIPアドレスで接続待ちをするかの設定。接続を許可するIPアドレスとは異なるので注意。一回間違えた。というわけでサーバー側のIPアドレスを指定。デフォルトだとlocalhostとなっているため、192.168.1.10に変更するか、"*"(all)にしてしまう。
listen_address = "*"
というかんじ。
これで192.168.1.10で待ち受けてくれる。
次にportの指定。
デフォルトだとportの行はコメントアウトされているので、それをコメントイン。とりあえずデフォルトの5432にしておく。
port=5432
というかんじ。これでpostgresql.confの設定は終わり。
次にpg_hba.confの設定。これは接続してくるホストの許可リスト。
デフォルトだと、localhostのみが許可されているので、192.168.1.0ネットワーク内から接続許可するようにする。
host all all 192.168.1.0/24 trust
こんな感じの行を一番下に追加する。特定のデータベースやユーザーのみ許可したいときは
host dbname user address/mask trust
のような感じで書けばよい。詳しくはpg_hba.confに書いてある。
これで外部から接続できるはず。
外部pgAdminなどから接続できるようになるはず。
あ、あと注意としてファイアウォール。CentOS5はpostgresをインストールしても5432ポートは自動的には開いてくれない。ファイアーウォール設定でTPC 5432ポートを開けておく必要がある。
環境
- CentOS5
- Postgres 8.1.1
とりあえず初期設定は
postgresユーザーになって、initdbを行う。DB用フォルダは自分で-Dオプションで指定してもいいし、環境変数PGDATAに入れておいてもいいらしい。とりあえずCentOS5で標準でインストールされているPosgtresを使うと、postgresユーザーの.bash_profileにすでに環境変数が登録されているので、そのままにしておいた。
その後はrootユーザーでservice postgresql startなどのコマンドで起動。
とりあえずそのlocalhostからpsqlで接続。psql -U postgres でよい。これで接続できればとりあえずPostgresサーバーは動いている。
ここまでは簡単だった。
次に外部からの接続設定。
今回は、192.168.1.0ネットワークでPostgresサーバーが192.168.10で動いているものとする。
設定箇所は2か所。DB用フォルダの中にpostgresql.confとpg_hba.confがある。(CentOSの場合 /var/lib/pgsql/dataが標準の場所)
postgresql.confがサーバー全体の設定で、pg_hba.confが接続許可設定という感じだと思う。
まず、postgresql.confでlisten_addressの行を変更する。これはどのIPアドレスで接続待ちをするかの設定。接続を許可するIPアドレスとは異なるので注意。一回間違えた。というわけでサーバー側のIPアドレスを指定。デフォルトだとlocalhostとなっているため、192.168.1.10に変更するか、"*"(all)にしてしまう。
listen_address = "*"
というかんじ。
これで192.168.1.10で待ち受けてくれる。
次にportの指定。
デフォルトだとportの行はコメントアウトされているので、それをコメントイン。とりあえずデフォルトの5432にしておく。
port=5432
というかんじ。これでpostgresql.confの設定は終わり。
次にpg_hba.confの設定。これは接続してくるホストの許可リスト。
デフォルトだと、localhostのみが許可されているので、192.168.1.0ネットワーク内から接続許可するようにする。
host all all 192.168.1.0/24 trust
こんな感じの行を一番下に追加する。特定のデータベースやユーザーのみ許可したいときは
host dbname user address/mask trust
のような感じで書けばよい。詳しくはpg_hba.confに書いてある。
これで外部から接続できるはず。
外部pgAdminなどから接続できるようになるはず。
あ、あと注意としてファイアウォール。CentOS5はpostgresをインストールしても5432ポートは自動的には開いてくれない。ファイアーウォール設定でTPC 5432ポートを開けておく必要がある。
