2011年12月14日水曜日

UDPクライアント for Android

TEXT送信用Udp Client for Android をここに公開!!
with source :D

http://sites.google.com/site/hilog07/android_up

UDPでシステム組んでる人にもってこいです。

2011年12月8日木曜日

Android Emulator(AVD) のTCP/UDP通信の最大サイズ

Android Emulator(AVD) のTCP/UDP通信の最大サイズは
8,193bytesなので注意しましょう。

画像の送受信などしようとするとEmulatorでは
上手くいかないけど、実機ならうまくいくのはこの為です。

2011年11月4日金曜日

Visual Studioで「LNK1561 : Entry Point Must Be Defined エントリ ポイントを定義する必要があります」が出た時の対処法

Visual Studioで「LNK1561 : Entry Point Must Be Defined エントリ ポイントを定義する必要があります」が出た時の対処法

参照URL: 
http://support.microsoft.com/kb/140597


原因・対処法:
追加パスの末尾は" \" 閉じしなければならなかった。。。
you should close additional path sentence with "\".

"\"を末尾に追加して解決。

2011年10月19日水曜日

Windowsにリモートで繋いでいて調子が悪くなった時の対処方法

Windowsにリモートで繋いでいて、リモート先マシンの
調子が悪くなった時の対処方法。
リモート先のサービスを再起動してみる。

# リモート先へ接続。host_ip は接続先のリモートPCのIPアドレス
net use \\
host_ip /user:local\administrator password
# サービスの停止・開始 xxx は停止・開始させたいサービス名
# サービスの停止
sc \\host_ip stop xxx 
# サービスの開始
sc \\host_ip start xxx
vncとかtelnetサービスとかを再起動してみると、
うまくいけば再接続できるようになる。
telnetがお亡くなりになると現地にいる人へ電話 or 
現地へ赴くというアナログな手段が待っている。

2011年10月9日日曜日

WindowMessageでIE(InternetExplorer)にF5リフレッシュさせる。(C#)

C#で、Windowsのシステムコールの「WindowMessage」を使って
IE(InternetExplorer)にF5リフレッシュさせるソースサンプル。

#region User32.dll定義
[DllImport("User32.dll", EntryPoint = "FindWindow")]
public static extern Int32 FindWindow( string lpClassName, string lpWindowName);

[DllImport("User32.dll", EntryPoint = "FindWindowEx")]
public static extern Int32 FindWindowEx( Int32 hwndParent, Int32 hwndChildAfter, string lpszClass, string lpszWindow);

// 同期送信
[DllImport("User32.dll", EntryPoint = "SendMessage")]
public static extern Int32 SendMessage( Int32 hWnd, Int32 Msg, Int32 wParam, ref Int32 lParam);

// 非同期送信
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("user32.dll", EntryPoint = "PostMessage", SetLastError = true)]
public static extern bool PostMessage( Int32 hWnd, UInt32 Msg, Int32 wParam, Int32 lParam);

#region メッセージ一覧
public static class WINDOW_MESSAGE
{
    public const Int32 WM_KEYDOWN = 0x0100;
}
#endregion

#region キー一覧
public static class KEY_CODE
{
    public const Int32 VK_F5 = 0x74;
}
#endregion
#endregion

///

/// 指定されたウィンドウ名のInternetExploreに画面更新キー(F5)を送ります。
///
///
public static bool F5RefreshIE(string windowName)
{
    int hwnd;
    int hwndTmp = FindWindowEx(0, 0, "IEFrame", windowName);
    if (hwndTmp == 0)
return false;
    else
hwnd = hwndTmp;

    hwndTmp = FindWindowEx(hwnd, 0, "Frame Tab", null);
    if (hwndTmp != 0) hwnd = hwndTmp;

    hwndTmp = FindWindowEx(hwnd, 0, "TabWindowClass", null);
    if (hwndTmp != 0) hwnd = hwndTmp;

    hwndTmp = FindWindowEx(hwnd, 0, "Shell DocObject View", null);
    if (hwndTmp != 0) hwnd = hwndTmp;

    hwndTmp = FindWindowEx(hwnd, 0, "Internet Explorer_Server", null);
    if (hwndTmp != 0) hwnd = hwndTmp;

    //Int32 param = 0; // パラメータなし
    //SendMessage(hwnd, MessageList.WM_KEYDOWN, KEY_LIST.VK_F5, ref param);
    //param = 0;
    //SendMessage(hwnd, MessageList.WM_KEYUP, KEY_LIST.VK_F5, ref param);
    PostMessage(hwnd, WINDOW_MESSAGE.WM_KEYDOWN, KEY_CODE.VK_F5, 0);

    return true;
}

///

/// 任意のInternetExploreに画面更新キー(F5)を送ります。
///
public static bool F5RefreshIE()
{
    return F5RefreshIE(null);
}

///

/// 指定されたウィンドウに画面更新キー(F5)を送ります。
///
public static bool F5RefreshIE(Int32 hwnd)
{
    if (hwnd == 0) return false;

    PostMessage(hwnd, WINDOW_MESSAGE.WM_KEYDOWN, KEY_CODE.VK_F5, 0);

    return true;
}

 やっとできた。。。Blogger + sites.google.com で Syntax Highlighter

Blogger + sites.google.com で Syntax Highlighter の適用がようやくできた。。。
FaziBear's Blogger Widgetsの「Add-widget」がクロスサイトスクリプトのチェックに引っかかることから始まり、CSSがコメントアウトされているところまで紆余曲折でした。 

(
SyntaxHighlighter
version 3.0.83 (July 02 2010)
)

適用手順は以下の通り。
1. SyntaxHighlighter をダウンロード
2. site.google.com のご自身のページに以下のファイルをアップロード
    style/shCore.css
    style/shThemeDefault.css
    scripts/shAutoloader.js
    scripts/shCore.js
    scripts/shBrushXXX.js ←使用したい言語に対応するファイル。複数あればそれら全てをアップロードする。
    
    アップロードしたファイルのパスを確認。
    http://sites.google.com/XXX/files/shCore.css など
    ※以下の例では、「 http://sites.google.com/XXX/files」を<url>として置き換えています。

3.  BloggerにSyntaxHighlighterのCSSを登録
    Blogger → テンプレート → HTMLの編集
    ※カスタマイズ → アドバンス → CSSの追加 でもCSSの追加ができるはずだが、実際にはコメントアウトされてしまいうまくいかなかった。リンクではなくCSSの内容をそのまま書かなければならなかったのかと今、思う。

4. <head>〜</head>に以下のCSSを追加
  … 
    <link rel='stylesheet' type='text/css' href='<url>/shCore.css'/>
    <link rel='stylesheet' type='text/css' href='<url>/shThemeDefault.css'/>
  … 
 
     ※<url> 部分に2でメモったパスを入力してください。


5. レイアウトにJavaScriptを追加
    レイアウトを開き「ガジェットを追加」をクリック。
    HTML/JavaScript をクリック。
    「コンテンツ」に以下を入力。(詳細はSyntaxHighlighterのAutoloader参照)
     ※<url> 部分に2でメモったパスを入力してください。(3箇所)
<script src="<url>/shCore.js" type="text/javascript"></script>
<script src="<url>/shAutoloader.js" type="text/javascript"></script>

<script type="text/javascript">
function sh_path()
{
  var args = arguments,
      result = [];
 
  for(var i = 0; i < args.length; i++) {
    result.push(args[i].replace('@','<url>/'));
  }
  return result;
}

SyntaxHighlighter.autoloader.apply(null, sh_path(
  'applescript            @shBrushAppleScript.js',
  'actionscript3 ac3      @shBrushAS3.js',
  'bash shell             @shBrushBash.js',
  'coldfusion cf          @shBrushColdFusion.js',
  'cpp c                  @shBrushCpp.js',
  'c# c-sharp csharp      @shBrushCSharp.js',
  'css                    @shBrushCss.js',
  'delphi pascal          @shBrushDelphi.js',
  'diff patch pas         @shBrushDiff.js',
  'erl erlang             @shBrushErlang.js',
  'java                   @shBrushJava.js',
  'jfx javafx             @shBrushJavaFX.js',
  'js jscript javascript  @shBrushJScript.js',
  'perl pl                @shBrushPerl.js',
  'php                    @shBrushPhp.js',
  'text plain             @shBrushPlain.js',
  'py python              @shBrushPython.js',
  'ruby rails ror rb      @shBrushRuby.js',
  'sass scss              @shBrushSass.js',
  'scala                  @shBrushScala.js',
  'sql                    @shBrushSql.js',
  'vb vbnet               @shBrushVb.js',
  'xml xhtml xslt html    @shBrushXml.js'));
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.all();
</script>
6.ブログで使用
以上で準備OK. 実際にソースコードをハイライトしたい場合は、以下のように<pre> でソースコード部分を囲む。
<pre class="brush: csharp">
public static void Hoge()
{
    MessageBox.Show("foo");
}
</pre>

2011年9月23日金曜日

簡易的メールアドレスチェックC# 正規表現. easy mail address validation checker in C# with regular expression.

文字列がメールアドレスとして正しいか判定 (正規表現を使用)
(RFCの連続メールアドレスまでは準拠しません。1つのメールアドレスに対応してます。)

以下の形式に対応します。
1. user123@example456.co.jp メールアドレスのみの形式 ( mail address only)
2. hoge ホゲ  ユーザ名+<メールアドレス> 形式 ( name + )

// メールアドレス正当性チェックメソッド
public static bool IsValidMailAddrString(string mailAddrStr)
{
    if (mailAddrStr.Contains("<")) {
         // name + <mail addr>;              
         //                    
         // 正規表現を設定。
         string regPattern = @"^\s*[^<]*\s*[<]\s*[^@\s]+[@]([^.\s]+[.]){1,}[^.\s]+\s*[>]\s*$";              
         return System.Text.RegularExpressions.Regex.IsMatch(mailAddrStr, regPattern);          
     }          
     else
     {
        // mail addr only
        // user@example.co.jp
        string regPattern = @"^[^@\s]+[@]([^.\s]+[.]){1,}[^.\s]+\s*$";
        return System.Text.RegularExpressions.Regex.IsMatch(mailAddrStr, regPattern);
     }
}

/// この関数を使う場合は以下のようにある程度許容性を持たせてくださいね。
// TextBox
private void txtMailText_Validating(object sender, CancelEventArgs e)      
{
    // text box ?
    TextBox tb;
    if (sender.GetType() == typeof(TextBox))
    {
        tb = (TextBox)sender;
        if (tb.Text == "") return;  // ignore empty string
        // メールアドレス妥当性チェック
        if (!IsValidMailAddrString(tb.Text))
        {
            // if it doesnt look like mail addr
            if (MessageBox.Show("メールアドレス形式が不正のようです。このまま使用しますか?", "Mail Address Validation", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.No)
            {
                e.Cancel = true;
            }
        }
    }
}

2011年9月10日土曜日

MacOS X でsyslogd udp(514)受信する設定 (How to receive syslog udp(514) with MacOS X)

使用環境: MacOS X 10.6 (Snow Leopard)

以下のファイルを編集。(管理者ユーザー/sudo)
edit the file bellow. (with root user / sudo)
/System/Library/LaunchDaemons/com.apple.syslogd.plist

ファイル末尾の以下の部分をアンコメント。
un-comment  these part bellow.
<!--
        Un-comment the following lines to enable the network syslog protocol listener.
-->
                <key>NetworkListener</key>
                <dict>
                        <key>SockServiceName</key>
                        <string>syslog</string>
                        <key>SockType</key>
                        <string>dgram</string>
                </dict>
        </dict>
</dict>

syslogdをリロード。
reload syslogd
> launchctl unload com.apple.syslogd.plist
> launchctl load com.apple.syslogd.plist


受信待機(Listen)確認。
check if mac really start listening to.
> netstat -an |grep 514
udp6       0      0  *.514                  *.*                    
udp4       0      0  *.514                  *.*

できた!
done!

2011年9月8日木曜日

Quated-PrintableデコードのC#ソース。How to decode BASE64 and Quated-Printable with C#.

ネット見てもQuated-Printableデコードのサンプルが
あまりなかったのでVisual C#サンプルソースをここに大公開!!
How to decode base64 and quated-printable string.

2013/3/28
そういえば、twitterで文字化け現象が起きてるそうな。
なんか最近やたらとこのページのアクセスが多かったのは、
やっぱりBASE64関係だったのか。
こういう意味でもコードの使用は自己責任でお願いします。

public static String DecodeMailString(String str)
{
        try
        {
            if (str == null || str == "") return "";

            // ?で区切り
            // separate with "?"
            String[] s = str.Split('?');
            byte[] b;
            String ret;

            if (s.Length < 3)
            { 
                // quatedなら少なくとも?は3つ
               // this judge its normal string, if they dont hae ? at least 3.
                return str;
            }

            if (s[2] == "B")
            {
                //Base64 encoding
                b = System.Convert.FromBase64String(s[3]);
                // s[1] specifies eincoding
                string dec = System.Text.Encoding.GetEncoding(s[1]).GetString(b);
                //if(s[4] != "=")
                //{
                //    ret += s[4];
                //}
                // =?x2022-JP?B?の処理
                ret = System.Text.RegularExpressions.Regex.Replace(str, @"""?=[?][^?]*[?][^?]*[?][^?]*[?]=""?", dec);
            }
            else if (s[2] == "Q")
            {
                // Quoted-printable
                // http://homepage1.nifty.com/glass/tom_neko/web/web_03.html#Q_encode

                // sample:
                // "=?utf-8?Q?=E8=8F=8A=E5=9C=B0_=E5=BA=83=E8=A1=8C?=" 
                string target = s[3]; // =E8=8F=8A=E5=9C=B0_=E5=BA=83=E8=A1=8C
                List b16 = new List();
                Encoding enc;
                try
                {
                    enc = Encoding.GetEncoding(s[1]);
                }
                catch (Exception ex)
                {
                    enc = Encoding.GetEncoding("UTF-8");
                }
                for (int i = 0; i < target.Length; i++)
                {
                    if (target[i] == '=')
                    {
                        if (target.Length >= i + 2)
                        {
                            string hexStr = new string(target.ToCharArray(i + 1, 2));
                            b16.Add(System.Convert.ToByte(hexStr, 16));
                            i += 2; 
                        }
                        else
                        {
                            break;
                        }
                    }
                    else if (target[i] == '_')
                    {
                        b16.AddRange(enc.GetBytes(" "));
                    }
                    else
                    {
                    }
                }
                string dec = enc.GetString(b16.ToArray());

                ret = System.Text.RegularExpressions.Regex.Replace(str, @"""?=[?][^?]*[?][^?]*[?][^?]*[?]=""?", dec);

                LogRotation.Log.WriteLine(LogRotation.Level.Information, "DecodeMailString", "Quoted-printable from: " + target + " , to:" + dec );
            }
            else
            {
                //throw new Exception("decode error : " + str);
                return str;
            }
            return ret;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }