<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>280W =終焉の宴=</title>
    <link>http://www.280w.info/</link>
    <description></description>
    <language>ja</language>
    <generator>Nucleus CMS v3.64</generator>
    <copyright>&#169;</copyright>
    <category>Weblog</category>
    <docs>http://backend.userland.com/rss</docs>
    <image>
      <url>http://www.280w.info/nucleus/nucleus2.gif</url>
      <title>280W =終焉の宴=</title>
      <link>http://www.280w.info/</link>
    </image>
    <item>
<title><![CDATA[ぷちえう゛ぁ 真希波]]></title>
<link>xml-rss2.php?itemid=22</link>
<description><![CDATA[忘れた@池袋<br />
1000円ぐらい<br />
<img src="http://www.280w.info/media/1/20111210-ufo2.jpg" width="400" height="533" alt="真希波・マリ・イラストリアス" title="真希波・マリ・イラストリアス" /><br />
気合い入れて取ってる方を見て、負けてられんと思って頑張ってしまった。]]></description>
<category>UFOキャッチャー</category>
<comments>xml-rss2.php?itemid=22</comments>
<pubDate>Sat, 10 Dec 2011 12:18:33 +0900</pubDate>
</item><item>
<title><![CDATA[黒猫フィギュア]]></title>
<link>xml-rss2.php?itemid=20</link>
<description><![CDATA[HEY@秋葉原<br />
1800円ぐらい<br />
<img src="http://www.280w.info/media/1/20111203-ufo1.jpg" width="400" height="533" alt="黒猫フィギュア" title="黒猫フィギュア" />]]></description>
<category>UFOキャッチャー</category>
<comments>xml-rss2.php?itemid=20</comments>
<pubDate>Sun, 4 Dec 2011 00:01:10 +0900</pubDate>
</item><item>
<title><![CDATA[Blog再構築]]></title>
<link>xml-rss2.php?itemid=18</link>
<description><![CDATA[いろいろあって再構築したので最低限メモだけでもひっぱってきました。<br />
(;'д`)もう画像までサルベージできません。]]></description>
<category>総合</category>
<comments>xml-rss2.php?itemid=18</comments>
<pubDate>Mon, 26 Sep 2011 03:04:25 +0900</pubDate>
</item><item>
<title><![CDATA[PHP - ImageMagick @ Fedora]]></title>
<link>xml-rss2.php?itemid=16</link>
<description><![CDATA[いわゆるPECL/imagick<br />
ひっさびさに書きますょ。<br />
PHPとかLinuxとかを扱うので<br />
そんな方は以下からどーぞこの<a href=\"http://www.280w.info/\">www.280w.info</a>は<br />
実はDocomoやSoftbank携帯からの閲覧に対応してます。<br />
が、使ってるスキンだと画像がでなく、<br />
文字だけなのでちょっと寂しい。<br />
<br />
つーわけで画像縮小表示を実装しました。<br />
携帯から見ると横幅200Pixelに縮小された画像を見ることができます。多分。<br />
<br />
=====================================<br />
<br />
で、ImageMagick。<br />
インストール手順と失敗の道を以下に簡単に説明。<br />
imagickモジュールのインストールです。<br />
<br />
[ 1 ] PECLでインストールしよう<br />
# <i>pecl install imagick</i><br />
（以下略）<br />
sh: phpize: command not found<br />
ERROR: `phpize\' failed<br />
<br />
(　ﾟдﾟ)<br />
<br />
( ﾟдﾟ )<br />
<br />
[ 2 ] phpizeをインストールしよう<br />
# <i>yum install php-devel</i><br />
Installing:<br />
 php-devel ... （略）<br />
<br />
Is this ok [y/N]: <i>y</i><br />
（略）<br />
Complete!<br />
<br />
phpizeインストール完了の模様。<br />
<br />
[ 3 ] ここでPECLインストールしようと思っても、またエラー。<br />
　なぜかわからんが、Wand-configねーよバーローと怒られる。<br />
　つーわけで、Wand-configのインストール。<br />
<br />
# <i>yum install ImageMagick-devel</i><br />
これもy。<br />
<br />
Complete!<br />
<br />
無駄に他のパッケージインストールされるのが気に食わないけどｎ<br />
<br />
[ 4 ] とりあえず、peclのキャッシュクリア<br />
# <i>pecl clear-cache</i><br />
<br />
[ 5 ] imagickのインストールをもう一度。<br />
# <i>pecl install imagick</i><br />
（略）<br />
install ok: channel://pecl.php.net/imagick-2.0.1<br />
You should add \"extension=imagick.so\" to php.ini<br />
<br />
[ 6 ] /etc/php.ini に extension=imagick.so の行を追加<br />
　追加場所は適当に上の方のあいてる場所に入れた。<br />
<br />
<br />
これでインストールは終わり。<br />
適当にphpスクリプトを作成し、<br />
<? phpinfo() ?><br />
あたりでphpinfoを確認。<br />
imagickがあればOK。<br />
<br />
=====================================<br />
<br />
次に実装方法。<br />
今回は単純に画像の縮小表示。<br />
携帯向けに横幅は200ってことで勝手に決めた。<br />
縦幅を0にすれば自動で決めてくれます。<br />
（すなわちアスペクト比維持）<br />
テストコードは下のアレゲ。<br />
<br />
$image = new Imagick(\"test.jpg\");<br />
$image->thumbnailImage(200, 0);<br />
<br />
header(\"Content-type: image/jpeg\");<br />
echo $image;<br />
<br />
このままじゃまともに使えないし、<br />
GETやPOSTパラメータなどクライアントからのデータを<br />
そのままファイル名に渡すような真似だけはやめましょう。<br />
いろんな攻撃に遭う可能性があります。<br />
<br />
そして出力されるのが以下の画像。<br />
<img src="http://www.280w.info/media/../../sys/img4mob.php?img=20051219-miri2.jpg" width="200" height="158" alt="縮小テスト" title="縮小テスト" /><br />
<br />
これが元画像<br />
<img src="http://www.280w.info/media/1/20051219-miri2.jpg" width="400" height="317" alt="元画像" title="元画像" /><br />
<br />
こんな感じです。<br />
文字入りの画像なんかは、GDより見やすい模様。<br />
ほんとはリサンプリングのアルゴリズム選びたいが、<br />
まだ未対応なのかな？<br />
現状これで満足してるのでOKということです。<br />
<br />
それではまた。]]></description>
<category>Linux</category>
<comments>xml-rss2.php?itemid=16</comments>
<pubDate>Mon, 26 Sep 2011 02:44:48 +0900</pubDate>
</item><item>
<title><![CDATA[フレッツにCiscoルータで接続]]></title>
<link>xml-rss2.php?itemid=15</link>
<description><![CDATA[我が家も友人にそそのかされ、ルータが<a href="http://www.cisco.com/web/JP/product/hs/routers/c2600/prodlit/2600mar_ds.html">Cisco 2611XM</a>に入れ替わってしまった。<br />
<br />
今まで使っていたブロードバンドルータ（<a href="http://www.mrl.co.jp/product/nwgoptg5.htm">SuperOPT-GFive</a>）を使ったいたときと同じように接続するため、PPPoEとPATの設定を行いました。FastEthernet0/0 をWAN側、<br /><br />
FastEthernet0/1 をLAN側にしたよ。<br /><br />
<br /><br />
設定を一部抜き出すと・・・<br /><br />
<br /><br />
----<br /><br />
interface FastEthernet0/0<br /><br />
 no ip address<br /><br />
 duplex auto<br /><br />
 speed auto<br /><br />
 pppoe enable group global<br /><br />
 pppoe-client dial-pool-number 1<br /><br />
 no cdp enable<br /><br />
<br /><br />
interface FastEthernet0/1<br /><br />
 ip address 192.168.1.1 255.255.255.0<br /><br />
 ip nat inside<br /><br />
 duplex auto<br /><br />
 speed auto<br /><br />
<br /><br />
interface Dialer0<br /><br />
 ip address negotiated<br /><br />
 ip access-group DENY-TELNET in<br /><br />
 ip mtu 1454<br /><br />
 ip nat outside<br /><br />
 encapsulation ppp<br /><br />
 ip tcp adjust-mss 1414<br /><br />
 dialer pool 1<br /><br />
 dialer idle-timeout 0<br /><br />
 dialer-group 1<br /><br />
 ppp authentication chap callin<br /><br />
 ppp chap hostname ○○××@hogehoge.com<br /><br />
 ppp chap password ××○○<br /><br />
<br /><br />
ip route 0.0.0.0 0.0.0.0 Dialer0<br /><br />
no ip http server<br /><br />
no ip http secure-server<br /><br />
ip dns server<br /><br />
<br /><br />
ip access-list extended DENY-TELNET<br /><br />
 deny   tcp any any eq telnet<br /><br />
 permit ip any any<br /><br />
<br /><br />
dialer-list 1 protocol ip permit<br /><br />
<br /><br />
ip access-list extended IT03<br /><br />
 permit ip 192.168.1.0 0.0.0.255 any<br /><br />
<br /><br />
ip nat inside source list NETCON interface Dialer0 overload<br /><br />
----<br /><br />
<br /><br />
<b>[ FastEthernet0/0 インタフェース ]</b><br /><br />
<br /><br />
<b>pppoe enable</b><br /><br />
PPPoEを使用可能にする。<br /><br />
group globalは勝手にくっつくと思う。 globalっていうグループ名がデフォルトとかなんとか。<br /><br />
<br /><br />
<b>pppoe-client dial-pool-number 1</b><br /><br />
dialer pool 1の設定が入ったDialerインタフェースの設定を使う。<br /><br />
<br /><br />
<b>no cdp enable</b><br /><br />
cdp飛ばしても無駄なのでやめ。<br /><br />
<br /><br />
<b>[ FastEthernet0/1 インタフェース ]</b><br /><br />
<br /><br />
<b>ip address 192.168.1.1 255.255.255.0</b><br /><br />
LAN側のIPアドレスとサブネットマスクを指定。<br /><br />
パソコンから見るとこのアドレスがゲートウェイになるよね。<br /><br />
<br /><br />
<b>ip nat inside</b><br /><br />
NAT（後でPATの設定する）の内側とする。<br /><br />
<br /><br />
<b>[ Dialer0 インタフェース ]</b><br /><br />
<br /><br />
<b>ip address negotiated</b><br /><br />
 PPP接続時にIPアドレスを受け取る<br /><br />
<br /><br />
<b>ip access-group DENY-TELNET in</b><br /><br />
DENY-TELNETっていう名前のアクセスリストを適用する。<br /><br />
中身は後述。<br /><br />
<br /><br />
<b>ip mtu 1454</b><br /><br />
 MTUサイズを1454にする。<br /><br />
 イーサフレームからL2TPとかPPPヘッダつけた残りのサイズだったと思う<br /><br />
<br /><br />
<b>ip nat outside</b><br /><br />
　NATの外側とする。<br /><br />
<br /><br />
<b>encapsulation ppp</b><br /><br />
　PPPでカプセル化する<br /><br />
<br /><br />
<b>ip tcp adjust-mss 1414</b><br /><br />
 MTUからIPヘッダ(20bytes)とTCPヘッダ(20bytes)を引いた分。<br /><br />
 TCPヘッダはもっと大きくなることがあるかもしれない。<br /><br />
<br /><br />
<b>dialer pool 1</b><br /><br />
 このDialer0の設定と、後のFastEtherの設定をひもづけるやつ。番号1を設定。<br /><br />
<br /><br />
<b>dialer idle-timeout 0</b><br /><br />
 適当な時間で切断されないようにタイムアウトを無効にする。<br /><br />
<br /><br />
<b>dialer-group 1</b><br /><br />
 dialer-listの1に設定した通信を発見すると接続開始したり。<br /><br />
<br /><br />
<b>ppp authentication chap callin</b><br /><br />
どうも日本のISPはCHAP認証らしい。<br /><br />
callinはISPでのユーザ認証だけやるって事らしい。<br /><br />
<br /><br />
<b>ppp chap hostname ○○××@hogehoge.com</b><br /><br />
これはISPからくる、PPP接続用ログインIDとかユーザ名とか言われるもの。<br /><br />
Niftyだったら、○○○@nifty.com　とか。<br /><br />
<br /><br />
<b>ppp chap password ××○○</b><br /><br />
こっちはPPP接続用のパスワード。これもISPから教えてもらってるやつ。<br /><br />
<br /><br />
<b>[ その他（グローバルコンフィグ） ]</b><br /><br />
<br /><br />
<b>ip route 0.0.0.0 0.0.0.0 Dialer0</b><br /><br />
スタティックルーティングを行う。<br /><br />
デフォルトルートはDialer0へ。<br /><br />
<br /><br />
<b>no ip http server</b><br /><br />
<b>no ip http secure-server</b><br /><br />
インターネット側からルータにアクセスできるので、<br /><br />
HTTPサーバ機能をOFFにする。<br /><br />
<br /><br />
<b>no ftp-server enable</b><br /><br />
FTPも（ｒｙ<br /><br />
<br /><br />
<b>ip dns server</b><br /><br />
<b>ip name-server xxx.xxx.xxx.xxx</b><br /><br />
DNSサーバのフォワーディングを行う。<br /><br />
ip name-serverで使ってるISPのDNSサーバのアドレスでも入れておけば転送してくれるはず。<br /><br />
<br /><br />
<b>dialer-list 1 protocol ip permit</b><br /><br />
IPトラフィックが飛んできたらダイヤラーで接続するよー。<br /><br />
<br /><br />
<b>ip nat inside source list NETCON interface Dialer0 overload</b><br /><br />
NETCONっていう名前のアクセスリストに適合する範囲のIPをPAT。<br /><br />
<br /><br />
<b>[ アクセスリスト ]（TELNET接続拒否用）</b><br /><br />
<br /><br />
<b>ip access-list extended DENY-TELNET</b><br /><br />
名前付きACLをばー。<br /><br />
<br /><br />
<b>deny tcp any any eq telnet</b><br /><br />
TCPでどっからか接続してくるTELNETを拒否<br /><br />
<br /><br />
<b>permit ip any any</b><br /><br />
他は許可<br /><br />
<br /><br />
<b>[ アクセスリスト ]（PAT変換対象用）</b><br /><br />
<br /><br />
<b>ip access-list extended NETCON</b><br /><br />
名前付きアクセスリスト－。<br /><br />
<br /><br />
<b>permit ip 192.168.1.0 0.0.0.255 any</b><br /><br />
192.168.1.0/24の範囲を許可<br /><br />
<br /><br />
<br /><br />
結構適当な説明だけど大体こんな感じ。<br /><br />
後はpassword-encryptionとかしないとパスワードが平分で保存されてたり、<br /><br />
他の細かいのははしょりました。(;'A`)合ってるか自信がないし。<br /><br />
ではでは。]]></description>
<category>Network</category>
<comments>xml-rss2.php?itemid=15</comments>
<pubDate>Mon, 26 Sep 2011 02:41:02 +0900</pubDate>
</item><item>
<title><![CDATA[[メモ]PHPでjsonを扱う ( php-json と PEAR::Services_JSON )]]></title>
<link>xml-rss2.php?itemid=14</link>
<description><![CDATA[TwitterのAPIを使う場合、レスポンスの形式をxmlやjsonから選ぶことができる。<br />
jsonでレスポンスを受け、PHPで扱ったときのメモ。<br />
<br />
php-jsonモジュールでjsonをデコード<br />
<i>json_decode($json_data);</i><br />
　statusidがintegerの範囲を超えてる為、全部integerの最大値になっていた。<br />
<br />
PEAR::Services_JSONでjsonをデコード<br />
<i>require_once('JSON.php');<br />
$json->decode($json_data);</i><br />
　integerの範囲を超える部分はfloatになっていた。<br />
<br />
というわけで、PEAR::Services_JSONを採用。<br />
<a href="http://pear.php.net/pepr/pepr-proposal-show.php?id=198">http://pear.php.net/pepr/pepr-proposal-show.php?id=198</a><br />
こっから<b>PEAR package file (.tgz)</b>をダウンロードして解凍。<br />
中に入ってるJSON.phpをrequireかincludeして使うことにした。]]></description>
<category>Programming</category>
<comments>xml-rss2.php?itemid=14</comments>
<pubDate>Mon, 26 Sep 2011 02:38:29 +0900</pubDate>
</item><item>
<title><![CDATA[[C#]Parallel Port joystickをアプリケーションから操作する]]></title>
<link>xml-rss2.php?itemid=13</link>
<description><![CDATA[PPJoyで、Virtual portを使って仮想ジョイスティックを作成し、<br />
その仮想ジョイスティックをアプリケーションから操作してみた。まだ実験メモ。<br />
作ったのはC#.net 2005かも。<br />
<br />
あくまでも実験段階なのでコードが間違ってる可能性が<b>非常に</b>高いです。まずPPJOYでVirtual joystickを作ってみた。<br />
<br />
<br />
DLLインポートとか<br />
<pre class=\"csharp\"><br />
using System.Runtime.InteropServices;<br />
</pre><br />
<br />
デバイスオープンの為の列挙型を4個ほど。<br />
<br />
<pre class=\"csharp\"><br />
        private enum DesiredAccess : uint<br />
        {<br />
            GENERIC_READ = 0x80000000,<br />
            GENERIC_WRITE = 0x40000000,<br />
            GENERIC_EXECUTE = 0x20000000<br />
        }<br />
        private enum ShareMode : uint<br />
        {<br />
            FILE_SHARE_READ = 0x00000001,<br />
            FILE_SHARE_WRITE = 0x00000002,<br />
            FILE_SHARE_DELETE = 0x00000004<br />
        }<br />
        private enum CreationDisposition : uint<br />
        {<br />
            CREATE_NEW = 1,<br />
            CREATE_ALWAYS = 2,<br />
            OPEN_EXISTING = 3,<br />
            OPEN_ALWAYS = 4,<br />
            TRUNCATE_EXISTING = 5<br />
        }<br />
        private enum FlagsAndAttributes : uint<br />
        {<br />
            FILE_ATTRIBUTE_ARCHIVE = 0x00000020,<br />
            FILE_ATTRIBUTE_ENCRYPTED = 0x00004000,<br />
            FILE_ATTRIBUTE_HIDDEN = 0x00000002,<br />
            FILE_ATTRIBUTE_NORMAL = 0x00000080,<br />
            FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000,<br />
            FILE_ATTRIBUTE_OFFLINE = 0x00001000,<br />
            FILE_ATTRIBUTE_READONLY = 0x00000001,<br />
            FILE_ATTRIBUTE_SYSTEM = 0x00000004,<br />
            FILE_ATTRIBUTE_TEMPORARY = 0x00000100<br />
        }<br />
</pre><br />
<br />
デバイスオープン用の関数をば。<br />
<pre class=\"csharp\"><br />
        //ジョイスティックオープン用<br />
        [DllImport(\"kernel32.dll\", CharSet = CharSet.Auto)]<br />
        private static extern IntPtr CreateFile(<br />
            string lpFileName,<br />
            DesiredAccess dwDesiredAccess,<br />
            ShareMode dwShareMode,<br />
            int lpSecurityAttributes,<br />
            CreationDisposition dwCreationDisposition, <br />
            FlagsAndAttributes dwFlagsAndAttributes,<br />
            IntPtr hTemplateFile<br />
            );<br />
</pre><br />
<br />
そしてデータを送る為の関数。<br />
因みにDeviceIoControlの3番目の引数は、<br />
Byte配列のポインタらしき物を送るらしい。<br />
で、C#で配列を含む構造体をByte配列にするのが面倒だったから<br />
JOYSTICK_STATE構造体を作ってそのまま投げてみた。　※ボタンは上手く行くがなんとも調子が悪い気がする<br />
<pre class=\"csharp\"><br />
        //データを送る<br />
        [DllImport(\"kernel32\", SetLastError = true)]<br />
        [return: MarshalAs(UnmanagedType.Bool)]<br />
        private static extern bool DeviceIoControl(<br />
            IntPtr hDevice,<br />
            uint dwIoControlCode,<br />
            ref JOYSTICK_STATE lpInBuffer,<br />
            uint uInBufferSize,<br />
            ref byte[] lpOutBuffer,<br />
            uint uOutBufferSize,<br />
            ref int lpBytesReturned,<br />
            int Overlapped<br />
            );<br />
</pre><br />
<br />
後、CTL_CODEという謎のビット演算する関数が必要らしい。<br />
<br />
<pre class=\"csharp\"><br />
        private uint CTL_CODE(uint DeviceType, uint Function, uint Method, uint Access)<br />
        {<br />
            return ((DeviceType << 16) | (Access << 14) | (Function << 2) | Method);<br />
        }<br />
</pre><br />
<br />
先ほどのジョイスティック構造体の中身<br />
Pack = 1を書き忘れて時間をとても残念に消費してしまったよ。<br />
<pre class=\"csharp\"><br />
        [StructLayout(LayoutKind.Sequential, Pack = 1)]<br />
        struct JOYSTICK_STATE<br />
        {<br />
            [MarshalAs(UnmanagedType.U4, SizeConst = 1)]<br />
            public uint Signature;<br />
            [MarshalAs(UnmanagedType.U1, SizeConst = 1)]<br />
            public char NumAnalog;<br />
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]<br />
            public int[] Analog;<br />
            [MarshalAs(UnmanagedType.U1, SizeConst = 1)]<br />
            public char NumDigital;<br />
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]<br />
            public char[] Digital;<br />
        }<br />
</pre><br />
<br />
さてこっから実際にジョイスティックに対して処理をしていく。<br />
<br />
ジョイスティックデバイスをオープン。\\\\.\\PPJoyIOCTL1っていう名前のジョイスティックらしい。<br />
<pre class=\"csharp\"><br />
IntPtr hPtr = CreateFile(\"\\\\\\\\.\\\\PPJoyIOCTL1\",<br />
                                        DesiredAccess.GENERIC_WRITE,<br />
                                        ShareMode.FILE_SHARE_WRITE,<br />
                                        0,<br />
                                        CreationDisposition.OPEN_EXISTING,<br />
                                        0,<br />
                                        IntPtr.Zero);<br />
</pre><br />
<br />
Signatureのコードとか、ボタンのAnalog, Digitalの数はPPJoyのサンプルコードから拝借。<br />
<br />
joyState.Digital[0] = (char)1; ってなってるのは、ボタン1を押してる状態ってこと。<br />
0は離した状態かな。<br />
Analogの方はまだよく分からない。ちょうど中心は1～128の間の64かと思ったんだけど、<br />
これだと何か変な方向へ動く。　<br />
もしかしたら-127～128かもしれないし、まだ実験してないからなんとも。<br />
<br />
<pre class=\"csharp\"><br />
JOYSTICK_STATE joyState = new JOYSTICK_STATE();<br />
            joyState.Signature = (uint)0x53544143;<br />
            joyState.NumAnalog = (char)8;<br />
            joyState.NumDigital = (char)16;<br />
<br />
            joyState.Analog = new int[8];<br />
<br />
            joyState.Analog[0] = 64;<br />
            joyState.Analog[1] = 64;<br />
            joyState.Analog[2] = 64;<br />
            joyState.Analog[3] = 64;<br />
            joyState.Analog[4] = 64;<br />
            joyState.Analog[5] = 64;<br />
            joyState.Analog[6] = 64;<br />
            joyState.Analog[7] = 64;<br />
<br />
            joyState.Digital = new char[16];<br />
<br />
            joyState.Digital[0] = (char)1;<br />
            joyState.Digital[1] = (char)0;<br />
            joyState.Digital[2] = (char)0;<br />
            joyState.Digital[3] = (char)0;<br />
            joyState.Digital[4] = (char)0;<br />
            joyState.Digital[5] = (char)0;<br />
            joyState.Digital[6] = (char)0;<br />
            joyState.Digital[7] = (char)0;<br />
            joyState.Digital[8] = (char)0;<br />
            joyState.Digital[9] = (char)0;<br />
            joyState.Digital[10] = (char)0;<br />
            joyState.Digital[11] = (char)0;<br />
            joyState.Digital[12] = (char)0;<br />
            joyState.Digital[13] = (char)0;<br />
            joyState.Digital[14] = (char)0;<br />
            joyState.Digital[15] = (char)0;<br />
</pre><br />
<br />
ここもサンプルコードから拝借。なぜFILE_DEVICE_UNKNOWNでいいのかは分からないよ。<br />
<pre class=\"csharp\"><br />
            //FILE_DEVICE_UNKNOWN = 0x22, index = 0, METHOD_BUFFERED = 0, FILE_ANY_ACCEESS = 0<br />
            uint ioctlState = CTL_CODE(0x00000022, 0, 0, 0);<br />
</pre><br />
<br />
実際にデバイスにデータを送る段階。<br />
配列含んだ構造体のサイズを一発で取得する方法が思いつかなかったので、律儀に足してみた。<br />
誰かいい方法教えてください。<br />
<br />
<pre class=\"csharp\"><br />
            int RetSize = 0;<br />
            byte[] outBuffer = null;<br />
<br />
            int joySize = Marshal.SizeOf(joyState.Signature);<br />
            joySize += Marshal.SizeOf(joyState.NumAnalog);<br />
            joySize += Marshal.SizeOf(joyState.Analog[0]) * 8;<br />
            joySize += Marshal.SizeOf(joyState.NumDigital);<br />
            joySize += Marshal.SizeOf(joyState.Digital[0]) * 16;<br />
<br />
            DeviceIoControl(hPtr, ioctlState, ref joyState, (uint)joySize, ref outBuffer, 0, ref RetSize, 0);<br />
</pre><br />
<br />
うまく行けば、ゲームパッドのプロパティの所でボタン１が押されてると思う。<br />
とりあえずメモまで。<br />
<br />
<br />
※2011/09/26 Blog再構築でコメント消えてしまいましたが、過去に以下のコメントをいただいておりました。<br />
<br />
&gt; Analogの方はまだよく分からない。ちょうど中心は1～128の間の64かと思ったんだけど、<br />
これだと何か変な方向へ動く。　<br />
<br />
そこの値は15bit rangeですから、無符号で0～32K-1の間では。すなわち、16Kでcenterだと思います。 / やねうらお<br />
<br />
]]></description>
<category>Programming</category>
<comments>xml-rss2.php?itemid=13</comments>
<pubDate>Mon, 26 Sep 2011 02:32:36 +0900</pubDate>
</item><item>
<title><![CDATA[[C#]Skype4COMでSkypeのムードテキストを変更してみる]]></title>
<link>xml-rss2.php?itemid=11</link>
<description><![CDATA[C# .netからSkype4COMを利用し、Skypeのムードテキストを<br />
自作のプログラムから変更してみます。手順<br />
1. Skype4COMを入手<br />
2. VC#.netで使う<br />
<br />
----<br />
<br />
 1. Skype4COMを入手<br />
<br />
下準備としてはSkype4COMをダウンロードしてきます。<br />
<a href=\"http://developer.skype.com/accessories\">Skype Developer / Skype Accessories</a><br />
ここの、Download Skype4COM (zip archive)って所からダウンロードしてきます。<br />
解凍した後、コマンドプロンプトで解凍したフォルダに移動して、<br />
>regsvr32 Skype4COM.dll<br />
と実行します。これでDLLが登録されると思う。<br />
<br />
<br />
 2. VC#.netで使う<br />
<br />
VC#.netの新規プロジェクトを作る。バージョン2008でやってみました。<br />
ソリューションエクスプローラのプロジェクトの所を右クリックして、「参照の追加」。<br />
「COM」タブの「Skype4COM 1.0 Type Library.」を選択してOKをクリック。<br />
そうすると参照設定の所に「SKYPE4COMLib」ってのが増えてると思います。<br />
<br />
後はフォームにボタンを置いて、ボタンクリックしたらムードテキストに<br />
「('A`)」とでも表示してみましょう。<br />
テストコードなので、Skypeが起動してるか否かのチェックなどしてません。注意ね。<br />
<br />
 Form1.cs<br />
<br />
SKYPE4COMLibをインポート<br />
<pre class=\"csharp\"><br />
using SKYPE4COMLib;<br />
</pre><br />
<br />
Skype型なんか作ったり。使ったり。<br />
<pre class=\"csharp\"><br />
public Skype skype = new Skype();<br />
<br />
    private void Form1_Load(object sender, EventArgs e)<br />
    {<br />
        try<br />
        {<br />
　　         //Skypeと接続する。<br />
             skype.Attach(5, false); //どっかで一個目の引数は5って見た記憶がある<br />
        }<br />
        finally {}<br />
        <br />
    }<br />
    private void button1_Click(object sender, EventArgs e)<br />
    {<br />
        try<br />
        {<br />
            Profile pro = new Profile(); //SkypeのProfileクラス<br />
            pro = skype.CurrentUserProfile; //Skypeの現在ログイン中のユーザのプロフィールを取得<br />
            pro.MoodText = "(\'A`)"; //プロフィールのムードテキストを変更する。<br />
        }<br />
        finally {}<br />
    }<br />
</pre><br />
<br />
細かい所すっ飛ばしてるけど大体こんなところ。簡単に。<br />
他のクラスとかについては、Skype4COMのアーカイブの中に<br />
ヘルプファイルがあるからそれを見るといいかも。<br />
<br />
<br />
あとイベントハンドラとか作って、誰かに語りかけられたら反応するbotとかも<br />
簡単に作れるみたい。<br />
眠いのでメモ程度まで。]]></description>
<category>Programming</category>
<comments>xml-rss2.php?itemid=11</comments>
<pubDate>Mon, 26 Sep 2011 02:26:27 +0900</pubDate>
</item><item>
<title><![CDATA[[メモ]Subversionのリポジトリを同期 / CentOS 5.5]]></title>
<link>xml-rss2.php?itemid=10</link>
<description><![CDATA[古いサーバから新しいサーバへSubversionのリポジトリを移す必要があったのでメモ。<br />
古いサーバのSubversionのVersionは1.6系です。作業は新しいサーバにて。yum --enablerepo=rpmforge install trac subversion<br />
<br />
新しいマシンへSubversionとTracをインストール。Tracは後で一緒に設定しようと思ったからついでに入れておきました。<br />
TracはRPMforgeとか、サードパーティのリポジトリから取得しました。<br />
<br />
mkdir /var/svn<br />
<br />
リポジトリをまとめておくディレクトリ作成。<br />
<br />
cd /var/svn<br />
svnadmin create athletics<br />
<br />
/var/svn/athletics に新しいリポジトリを作成。<br />
<br />
vi ./athletics/hook/pre-revprop-change<br />
----------<br />
#!/bin/sh<br />
<br />
exit 0<br />
----------<br />
<br />
svnsyncでコミットした場合、通常はコミットが弾かれてしまうらしいので<br />
exit 0で弾かないよう処理させる。<br />
<br />
chmod +x ./athletics/hook/pre-revprop-change<br />
<br />
実行権限をつけておく。<br />
<br />
svnsync init file:///var/svn/athletics http://www.280w.info/svn/athletics<br />
<br />
バックアップ先とバックアップ元を設定して初期化。<br />
svnsync init <i>バックアップ先</i> <i>バックアップ元</i><br />
<br />
svnsync sync file:///var/svn/athletics<br />
<br />
実際に同期開始します。しばしお茶休憩などなど。<br />
svnsync実行したユーザの権限でバックアップ元サーバへ接続しにいくので、パスワードの入力とか。<br />
存在しないユーザでつないでしまった場合、Enterキー押せばユーザ名も聞かれるので入力しなおせばよろし。]]></description>
<category>Linux</category>
<comments>xml-rss2.php?itemid=10</comments>
<pubDate>Mon, 26 Sep 2011 02:24:16 +0900</pubDate>
</item><item>
<title><![CDATA[ファイルのバックアップ]]></title>
<link>xml-rss2.php?itemid=9</link>
<description><![CDATA[Vistaとか7でファイルのバックアップすることがあったのでメモ。<br />
<br />
xcopyに代わってrobocopyというのが標準付属になったので使ってみる事にした。<br />
コピー元フォルダ以下のファイルを、コピー先フォルダ以下の日付ごとのフォルダにコピーしたかったのでこんな感じだった。<br />
<br />
robocopy \"C:\\コピー元フォルダ\" \"Z:\\コピー先フォルダ\\%date:~0,4%%date:~5,2%%date:~8,2%\" /E <br />
<br />
<br />
robocopy /? でヘルプが見れるので参考にしたよ。]]></description>
<category>PC</category>
<comments>xml-rss2.php?itemid=9</comments>
<pubDate>Mon, 26 Sep 2011 02:22:43 +0900</pubDate>
</item>
  </channel>
</rss>
