3月 10, 2012

ターミナルの文字化け対策

event_note3月 10, 2012 forumNo comments

サーバ版などでターミナルが日本語に対応していない場合があります.
その場合,apt-getとかを実行すると何がなんだかわからない文字の羅列が流れていきます.

その対策として以下をbashrcなどに記述します.

case $TERM in
    linux) LANG=C ;;
    *) LANG=ja_JP.UTF-8 ;;
esac

3月 06, 2012

Core Duo/Quad系CPUの最適化オプション メモ

Makefileに以下を追加する(引用元

CHOST =x86_64-pc-linux-gnu
CFLAGS = -march=core2 -O2 -pipe
CXXFLAGS = ${CFLAGS}

UbuntuをWake On Lanで起動する

event_note3月 06, 2012 forumNo comments

停止しているPCをネットワークから起動することが可能なWake On Lan(wol)という機能を使ってみたいと思います.
この機能は,クライアントからマジックパケットと呼ばれる魔法の呪文をホスト(起動させたいPC)へ送ることでホストを起動させることができます.


前準備

設定の準備として,ハードウェアの確認を行います.
まず,ホストのBIOS設定で「ネットワークからの起動を許可」などのWOLに関連しそうな項目を有効にします.
最近のものは大丈夫だと思いますが,NIC自体がWOLに対応していない場合もあるのでその辺りも確認が必要です.


ホストの設定

必要なソフトのインストール

$ sudo apt-get install eththool


WOLが使用できるかを確認

この場合,eth0を確認している

$ sudo ethtool eth0
で,Supports Wake-on: が g ならサポートしている


WOLを有効にする

$ sudo ethtool -s eth0 wol g
ただし,このコマンドは再起動時に無効になるため,常時WOLを有効にしておくためにはこのコマンドを起動毎に実行する必要があります.
しかしながら,毎回自分でコマンドを打つのはめんどくさいので,これを/etc/rc.localにでも書いておきましょう
$ sudo vi /etc/rc.local

 sudo ethtool -s eth0 wol g
 exitより上に書く


クライアントの設定

必要なソフトのインストール

$ sudo apt-get install wakeonlan
他のOSからもマジックパケットを送ることができます.
必要な人は探してみてください


ホストの起動

$ sudo wakeonlan -i <ホストのIPアドレス> <ホストのMACアドレス>
これでWOLが利用できるようになるはずですb


1月 11, 2012

Boost::threadの簡単な排他処理

以前にBoostを用いてスレッドを立てましたが,これまたBoostのライブラリを使って簡単にスレッドセーフを実現する方法をメモしておきます。

#include <boost/thread.hpp>
#include <boost/bind.hpp>

boost::mutex mtx;

void hoge1(int &a){
  boost::mutex::scoped_lock lock(mtx);
  for(int n=0; n<3; ++n){
    std::cout << "hoge1:" << a+n << std::endl;
  }
  std::cout << std::endl;
  return;
}

void hoge2(int &b){
  boost::mutex::scoped_lock lock(mtx);
  for(int n=0; n<3; ++n){
    std::cout << "hoge2:" << b+n << std::endl;
  }
  std::cout << std::endl;
  return;
}

int main(int argc, char **argv){
  int c = 0;
  boost::thread thr1(boost::bind(&hoge1, c));
  boost::thread thr2(boost::bind(&hoge2, c));

  thr1.join();
  thr2.join();
  return 0;
}
これを実行すると
hoge1:0
hoge1:1
hoge1:2
hoge2:0
hoge2:1
hoge2:2
という感じになってくれると思います.

boost::mutex::scoped_lockは,デストラクタでmutexをアンロックしてくれる機能を持っています.
つまり,hoge1, hoge2内で定義されているscoped_lockはそれぞれの関数を抜ける際に破棄されるのと同時にmutexを自動的にアンロックしてくれます.
なので,この場合hoge1を実行したのちにhoge2を実行する結果になります.