ラベル Memo の投稿を表示しています。 すべての投稿を表示
ラベル Memo の投稿を表示しています。 すべての投稿を表示

2016/05/09

AVG Antivirus 2015 メールスキャナの設定について


AVG Antivirus 2015をインストールしてThunderbirdを開くと「暗号化された通信によりメールスキャナが~」うんぬんと警告がでました。少し調べてジャストな情報が出てこなかったので下記にまとめます。


# 使用環境

Thunderbird 45.0で複数アカウント管理している。
各メールアカウントは平文とSTARTTLSのどちらかの認証方式を使用している。
AVG Antivirus 2015 FREEを使用している。


# 設定方法

AVGのメールスキャナの設定を開き、メール保護>メールスキャナ>サーバー>POP/IMAP/SMTPにThunderbirdのアカウント設定から各メールアドレスのサーバ設定項目を見ながら設定を加えていく。

サーバ名はメールプロバイダの名前を任意で入力する。
ログインの種類は自動で問題ない。固定ホストを選択してメールサーバーとポートを同一にしたほうが確実。
追加設定のローカルポートは適当なAVGの各サーバー設定で一意の((10000から1繰り上がりの連番等)を割り当ててください。
接続についてはThunderbirdの「認証方式」によって次の通りに設定する。


  • 平文:定期
  • STARTTLS:通常ポートで安全
  • TLS:専用ポートで安全

※「専用ポートで安全」は試していないので間違っているかもしれません。


 私の手順としてはPOP/IMAPを登録してからSMTPをAVGに登録していったのですが、STARTTLSを使用しているメールアカウントに対するAVGのSMTPサーバーの設定を追加しないと問題が解決しませんでした。逆にSMTPさえ入力してしまえばPOP/IMAPの設定は必要なかった可能性も?現状では問題なく動作しているので手間をかけて確認を取るところまではしませんでした。


# 参考

接続の選択方法についてはAVG7.0FreeのPersonal E-Mail Scannerの設定を参考にさせていただきました。

基本的に「標準」が「定期」に変わっているだけの模様。
通常ポート・専用ポートは次の訳語らしい。
Secure to dedicated port (TLS)>専用ポート(TLS)
Secure to regular port (STARTTLS)>標準ポート(STARTTLS)

2012/02/10

リトルエンディアン・バイトエンディアン バイトオーダー相互変換関数

PSDを読み込むとき、バイトオーダーがビッグエンディアンなので自前でリトルエンディアン・ビッグエンディアンの相互変換マクロを作って読み込み・書き込みをしていたが、どうも標準でCライブラリに搭載されているらしい。

  「リトルエンディアン」 「ビッグエンディアン」 のキーワードで検索するから見つからないらしく、これらの別名として 「ホストバイトオーダー」 「ネットワークバイトオーダー」 というキーワードがあり、こちらで検索すると相互変換関数が見つかる。



 それでも用意されている関数だけだと16bit(2byte)と32bit(4byte)の値しか扱えないので、自前で実装する余地が残っているのが救いか?

ネットワークバイトオーダー<->ホストバイトオーダー変換関数(BYTEORDER関数)




  • #include <arpa/inet.h>

  • u_long htonl (u_long hostlong) : 32 ビットホストバイトオーダーをネットワークバイトオーダーに変換します

  • u_short htons (u_short hostshort) : 16 ビットホストバイトオーダーをネットワークバイトオーダーに変換します

  • u_long ntohl (u_long netlong) : 32 ビットネットワークバイトオーダーをホストバイトオーダーに変換します

  • u_short ntohs (u_short netshort) : 16 ビットネットワークバイトオーダーをホストバイトオーダーに変換します


 また、隣接するバイトを変換するswab(swap byte)関数が用意されている。



  • #include <string.h>

  • void swab(const void *from, void *to, size_t n) : from で指された配列から n バイトを to で指された配列に、隣接した偶数/奇数バイトを交換しながらコピーする。この関数は異なるバイトオーダーを持つマシン間でのデータ交換に使用される

2012/02/02

TortoiseSVNで外部参照(svn:externals)を使用する方法

Mercurial(hg)のsubreposみたいなことをSVNでもできたんですね……
これがあれば別々のプロジェクトでも共有ライブラリが使用できるから管理が楽です。

外部参照(svn:externals)設定手順


前提条件としてtortoiseSVNは次のバージョンを使用しています。
また、言語は英語のまま使用しているので、ところどころ日本語に置き換えてください。
TortoiseSVN 1.6.16, Build 21511 - 32 Bit , 2011/06/01 19:00:35
Subversion 1.6.17, 
apr 1.3.12
apr-utils 1.3.12
neon 0.29.6
OpenSSL 1.0.0d 8 Feb 2011
zlib 1.2.5

取り込みたいディレクトリでSVNメニューからプロパティを選択。
新規プロパティに下記のように設定。

[Property Name]=[svn:externals]
[Property Value]=[dirname http://path/to/Repos]


※[]の記号は入力不要なので注意。

例として、下記のような構成で外部参照リポジトリを設定する。
[root]
  ├[ProjectX]
  ├[SubProjectY]
  └[SUbProjectZ]

ここではrootフォルダの直下に別プロジェクトで使用しているcommonlibリポジトリを設置したいとする。
まずは[root]ディレクトリ上でプロパティを下記のように設定する。
commonlib http://svnserver-xxxx/svn/ProjectA/trunk/commonlib

この状態でUpdateを行うとpath/to/reposで設定したリポジトリからチェックアウトしてきます。
[root]
  ├[ProjectX]
  ├[SubProjectY]
  ├[SubProjectZ]
  └[commonlib] (svn:externals = http://svnserver-xxxx/svn/ProjectA/trunk/commonlib)

この状態でrootディレクトリをコミットしてやれば以降はこのリポジトリをアクセスした人も外部参照先からcommonlibをリポジトリにUpdateします。

注意したいことは、この外部参照リポジトリを変更し、コミットしたら参照先リポジトリ分も更新されます。読み取り専用にしたいのであれば、commonlibに対して、新しく[svn:needs-lock]プロパティを設けて共通ライブラリの編集はロックを行わないとできない形に変更してしまう方法が考えられます。

もしくは該当リポジトリ側の書き込み制限をユーザー・グループ毎に区切って、そもそも権限がないと変更できないようにしてしまうかという形でしょう。

ローカルのワークに対して変更しないようにしたいだけであれば、フォルダのプロパティ自体を読み取り専用にして外部参照リポジトリ直下のフォルダを書き込み禁止にするといいかもしれない。.svnフォルダも書き込めなくなるかもしれないので注意。

本文を用いて外部参照リポジトリの設定して、わからないこと、躓いたこと等があればコメントしていただかえれば可能な限り補足使用と思います。

以上

2011/09/16

ゲームループ

ゲームループはどこぞの教本では以下のようなコードになっている。


コンソールプログラムならこれで回し続けるのもいいと思う。
ではWin32アプリだとどうすればいいのか?
実験する前に予想を立ててみた。

Windowsアプリケーションの場合考えないといけないのは次の2点。


  • GetMessage~DispatchMessageでループを回さなければならないこと。

  • キーボード・マウス等の入力を受け付ける場合はWinProcでイベントを処理しなければならないこと。


これをソースコードで実現しようとするなら以下のような作りになるのではないかと考えた。

[cpp]
int WINAPI WinMain(...)
{
...

while( true )
{
if (GetMessage(&msg , NULL , 0 , 0 )) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}

input();
update();
draw();

}

}

LRESULT CALLBACK WndProc(...)
{

switch( msg )
{
...

case WM_CHAR:
input_charevent(lParam);
case WM_PAINT:
draw_paintevent(hWnd);
break;
}

return DefWindowProc(...);



}
[/cpp]

もう少しオブジェクト指向っぽく書きたいなら、イベントを振り分け管理するEventManagerクラスでも作成し、
ウィンドウを作成する場合にEventManager内に実装したウィンドウプロシージャを登録し、
EventManager.AddListener()で登録したリスナーに対してメッセージを振り分け、
Input・Update・Drawクラス内でそれぞれ処理したいイベントに対して実装でもしてやればいい。


FPSの管理



FPSを管理する場合、予想したゲームループに対してsleepで調整してやればいい。
ただし、それでは入力が完全に止まってしまうか、直前のデータしか保持できないようになるので使い勝手がよくない。
下の処理ではWaitNextFrame内で前のdrawメソッド終了から16msec経過するのを待つ。
16msec以上待機していなければ待たずに抜け出してGetMessageから再び判定を行う。
また、CPU占有率対策のためにsleep(0)を挟み込む処理を行っている予定です。

[cpp]
int WINAPI WinMain(...)
{
...

while( true )
{
if (GetMessage(&msg , NULL , 0 , 0 )) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}

input();
update();

if( WaitNextFrame(WAIT_16_MSEC) )
{
draw();
}

}

}
[/cpp]


ここでの課題はGetMessageかDispatchMessageの処理がどれぐらいの速度で戻ってくるのか未知数。
そのため、ここでFPS管理しようとすると処理速度が遅くなる可能性がある。