<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Security.GS Magazine &#187; プログラミング</title>
	<atom:link href="http://www.security.gs/magazine/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.security.gs/magazine</link>
	<description>Take a crazy chance, See in its true colors</description>
	<lastBuildDate>Sat, 31 Jul 2010 08:08:31 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>PHPで画像処理ジェネレータを作る</title>
		<link>http://www.security.gs/magazine/programming/php/2010/04/08/story_2454/</link>
		<comments>http://www.security.gs/magazine/programming/php/2010/04/08/story_2454/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 07:16:39 +0000</pubDate>
		<dc:creator>Sn0wNight</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.security.gs/magazine/?p=2454</guid>
		<description><![CDATA[皆さんこんにちは、Sn0wNightです。
今回はつい前まで流行っていた画像のジェネレータを作ってみたいと思います。
ええ、今回もお分かりですが、PHPです。webにハマってるんです…。すみません＞＜
で、早速作っていき [...]]]></description>
			<content:encoded><![CDATA[<p>皆さんこんにちは、Sn0wNightです。<br />
今回はつい前まで流行っていた画像のジェネレータを作ってみたいと思います。<br />
ええ、今回もお分かりですが、PHPです。webにハマってるんです…。すみません＞＜</p>
<p>で、早速作っていきますが今回は背景画像とこの画像を。<br />
あまり自分の趣味を持ち込みたくはなかったのですが、<br />
可愛かったので仕方ありません。ええ。形式はjpegです。<br />
<a rel="attachment wp-att-2457" href="http://www.security.gs/magazine/programming/php/2010/04/08/story_2454/attachment/sample/"><img class="alignnone size-full wp-image-2457" src="http://www.security.gs/magazine/wp-content/uploads/2010/04/sample.jpeg" alt="" /></a><br />
合成させるものは下の画像です。Google画像検索で「吹き出し」検索したら<br />
適当に出てきたのでこれを使用します。ちなみに形式はgifです。<br />
<a rel="attachment wp-att-2458" href="http://www.security.gs/magazine/programming/php/2010/04/08/story_2454/attachment/sample1/"><img class="alignnone size-full wp-image-2458" src="http://www.security.gs/magazine/wp-content/uploads/2010/04/sample1.gif" alt="" width="224" height="140" /></a><br />
ではまず、HTMLから行ってみましょう。簡単な合成する文字列を<br />
ユーザー側に入力させるフォームを作成します。<br />
<a rel="attachment wp-att-2456" href="http://www.security.gs/magazine/programming/php/2010/04/08/story_2454/attachment/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88%ef%bc%882010-04-08-16-15-08%ef%bc%89/"><img class="alignnone size-full wp-image-2456" src="http://www.security.gs/magazine/wp-content/uploads/2010/04/bd5491d0b21e619743d45fb9a45dcc67.png" alt="" width="575" height="284" /></a><br />
フォームの「合成」ボタンを押したときに処理がprocess.phpに渡されるようにします。<br />
これでクライアントサイドは完成です。<br />
別にactionを空にしてindex.phpに直に書くのもいいんですが記事的に<br />
できれば分けたいので分けました。</p>
<p>次はprocess.phpです。少し分けてみていくとしましょう。<br />
まずは、背景画像のミクと吹き出しを一つの画像に合成します。<br />
<a rel="attachment wp-att-2467" href="http://www.security.gs/magazine/programming/php/2010/04/08/story_2454/attachment/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88%ef%bc%882010-04-08-16-20-17%ef%bc%89/"><img class="alignnone size-full wp-image-2467" src="http://www.security.gs/magazine/wp-content/uploads/2010/04/2d05e39054ae754f09ba5e97f456c441.png" alt="" width="467" height="218" /></a><br />
まずは、ミクの画像と吹き出しの画像をimagecreatefromjpeg/gifで生成します。<br />
そして、imageCopyというものを使うのですがこの仕様を以下に掲載しておきます。<br />
PHP4/5で使えるものです。imagesy,imagesxというものは画像の縦、横を取得しています。</p>
<blockquote><p>名称                       :imgCopy<br />
使用可能バージョン:PHP 4/5<br />
説明             　　　:画像の一部をコピーする<br />
<strong>BOOL imageCopy(resource $dst_im, resource $src_im, int $dst_x,int $dst_y,<br />
int $src_x,int $src_y, int $src_width, int $src_height)</strong></p></blockquote>
<p>そしたら、こんな感じになります。<br />
<img class="alignnone size-full wp-image-2477" src="http://www.security.gs/magazine/wp-content/uploads/2010/04/a1aa758a2531d79b8cef213bb120ae3c.png" alt="" width="465" height="281" /><br />
次は、これに文字を付けていきます。醍醐味とも言える機能ですねf^^;;<br />
以下にコードを。この時、フォントも一緒にアップロードしなければなりません。<br />
今回はSansを使用しました。<br />
<a href="http://www.security.gs/magazine/programming/php/2010/04/08/story_2454/attachment/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88%ef%bc%882010-04-08-16-52-00%ef%bc%89/" rel="attachment wp-att-2480"><img src="http://www.security.gs/magazine/wp-content/uploads/2010/04/41db2e66b15938f52898f3004670ec47.png" alt="" width="506" height="80" class="alignnone size-full wp-image-2480" /></a><br />
そして完成例です<br />
<a href="http://www.security.gs/magazine/programming/php/2010/04/08/story_2454/attachment/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88%ef%bc%882010-04-08-16-49-06%ef%bc%89-2/" rel="attachment wp-att-2483"><img src="http://www.security.gs/magazine/wp-content/uploads/2010/04/a1aa758a2531d79b8cef213bb120ae3c1.png" alt="" width="465" height="281" class="alignnone size-full wp-image-2483" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.security.gs/magazine/programming/php/2010/04/08/story_2454/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pythonでプログラミング時に便利なツール&amp;プラグイン</title>
		<link>http://www.security.gs/magazine/programming/2010/04/06/story_2391/</link>
		<comments>http://www.security.gs/magazine/programming/2010/04/06/story_2391/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 20:34:45 +0000</pubDate>
		<dc:creator>Lotus</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://www.security.gs/magazine/?p=2391</guid>
		<description><![CDATA[おはこんばん ちは、lotusです。
題名の通り、 Pythonでプログラミングする際に、「あったら便利だなー」というものを紹介したいと思います。
なお、実際に 動かしたのはLinux環境です。
Windows をお使い [...]]]></description>
			<content:encoded><![CDATA[<p>おはこんばん ちは、lotusです。</p>
<p>題名の通り、 Pythonでプログラミングする際に、「あったら便利だなー」というものを紹介したいと思います。</p>
<p>なお、実際に 動かしたのはLinux環境です。</p>
<p>Windows をお使いの方では環境の違いなどから多少違った操作をおこなわなければいけない可能性が ありますが、ご了承ください。</p>
<p><strong>記事に 画像が使われておりますが、クリックすることで拡大可能です。</strong></p>
<p>では、通常の インタラクティブシェルを拡張、改良したとも言える「IPython」を紹介したいと思います。</p>
<p><strong>IPython とは何か</strong></p>
<p>上記にもある 通り、インタラクティブシェル（対話コンソール）を拡張したものです。</p>
<p>通常のインタ ラクティブシェルでは、文字の補完などができませんが、この「IPython」では文字の補完の他にも、インタラクティブシェルには無かった機能が盛り込 まれています。</p>
<p>IPython は、WindowsでもLinuxでも動作しますので、是非インストールすることをオススメします。</p>
<p>自分の Linux環境(使用したのはDebian  GNU/Linux)では、リポジトリにIPythonがあったので、apt-getコマンドで以下のように入手することが可能です。</p>
<blockquote><p>sudo apt-get update</p>
<p>sudo  apt-get upgrade</p>
<p>sudo  apt-get -y install ipython</p></blockquote>
<p>これで ipythonコマンドが使える状態になります。</p>
<p>Windows をお使いの方は<a href="http://ipython.scipy.org/moin/Download">コチラ</a>でファイルをダウンロードし、イ ンストールしてください。</p>
<p>Macでも使 用可能みたいですが、よく調べてないのでわかりません、すいません＞＜</p>
<p>実際に使って みた画面です。</p>
<p><a href="http://lotus-network.net/wp-content/uploads/2010/04/hello.png"><img src="http://lotus-network.net/wp-content/uploads/2010/04/hello.png" alt="" width="457" height="493" /></a></p>
<p>これは、 ipythonコマンドでIPythonを起動し、簡単なプログラムを書いた例です。</p>
<blockquote><p>print （&#8221;HelloIPython&#8221;）※</p>
<p>HelloIPython</p></blockquote>
<p>IPython でも、通常のインタラクティブシェルでも同じ構文で正しく動作しているのがわかります（当たり前</p>
<p>※print の()は無くても動作します</p>
<p><a href="http://lotus-network.net/wp-content/uploads/2010/04/error.png"><img src="http://lotus-network.net/wp-content/uploads/2010/04/error.png" alt="" width="455" height="61" /></a></p>
<p>エラーもわか りやすく、カラーをつけて出力してくれますね。</p>
<p>画像編集ミ スって肝心な所を消してしまったのですが(上記の拡大してある画像には書いてあるが)</p>
<p>これは文字列 と数字を足そうとしているためにTypeErrorとなってしまっています。</p>
<blockquote><p>print (&#8220;Hello IPython &#8220;+str(i))</p></blockquote>
<p>range(5)、 つまり0,1,2,3,4がiのなかに入っているわけですが、それを数値ではなく、文字列とすることでこのTypeErrorを解決しています。</p>
<p>なお、この IPythonには通常のインタラクティブシェルとは違い、In[1]とかIn[2]とか行ごとにInのなかが変わっていきます。</p>
<p>普通のインタ ラクティブシェルと同じ表示にすることも可能です。</p>
<p>IPython を起動する、ipythonコマンドに、オプションをつけることで可能です。</p>
<blockquote><p>ipython -cl</p></blockquote>
<p>と、-clオ プションをつけると、通常の表示になります。</p>
<p>起動させてみ た画面はこちらです。</p>
<p><a href="http://lotus-network.net/wp-content/uploads/2010/04/cl.bmp"><img src="http://lotus-network.net/wp-content/uploads/2010/04/cl.bmp" alt="" /></a></p>
<p>行ごとにあっ たIn[1]などが消え、見覚えのある「&gt;&gt;&gt;」になっています。</p>
<p><strong>IPython では文字の補完ができる</strong></p>
<p>Linuxや UNIXのシェルでは、文字の補完がTabキーでできますよね。</p>
<p>そのように IPythonでは文字の補完をすることが可能です。</p>
<p>この例は、 キーボードから「i」という文字だけを入力し、Tabキーを押した例です。</p>
<p><a href="http://lotus-network.net/wp-content/uploads/2010/04/hokan.png"><img src="http://lotus-network.net/wp-content/uploads/2010/04/hokan.png" alt="" width="502" height="112" /></a></p>
<p>このような感 じで補完することができますので、長いモジュール名をいちいち入力しなくてもTabキーを押して補完なんてことができます。</p>
<p><strong>IPython では簡単なUNIXコマンドが使える</strong></p>
<p>通常のインタ ラクティブシェルではPythonとの対話ができるわけですが、UNIXコマンドは使えません。</p>
<p><a href="http://lotus-network.net/wp-content/uploads/2010/04/unix_python.png"><img src="http://lotus-network.net/wp-content/uploads/2010/04/unix_python.png" alt="" width="446" height="190" /></a></p>
<p>上の画像のよ うに、「ls」や「mkdir」をインタラクティブシェルで入力すると、NameError、そんなものはないと言われ、エラーが発生します。</p>
<p>しかし、 IPythonでは「簡単」なUNIXコマンドなら使う事ができます。</p>
<p>たとえば「今 カレントディレクトリどうなってたっけ？」「あのディレクトリもうつくったっけ？」などなど。</p>
<p>通常ですと、 窓を他に立ち上げるか、一回インタラクティブシェルを閉じるかなどの処理おこなわないと、こういったことはできません。</p>
<p>インタラク ティブシェルを一旦閉じるなどすると、インタラクティブシェル内でつかっていた変数などは全てリセットされてしまいます。</p>
<p>実際に IPythonでUNIXコマンドを使ってみた画面が以下です。</p>
<p><a href="http://lotus-network.net/wp-content/uploads/2010/04/unix_ipython.png"><img src="http://lotus-network.net/wp-content/uploads/2010/04/unix_ipython.png" alt="" width="541" height="226" /></a></p>
<p>このように、 「ls」や「ｐｗｄ」、「cd」、「pwd」などのUNIXの基本的なコマンドを使う事が可能です。</p>
<p>なので、たと えば「テキストファイルをあるディレクトリ出力する際、ディレクトリを作ってなく、エラーがでる」</p>
<p>なんて時は mkdirでIPython上で作成してあげれば言い訳です。</p>
<p>他にもログ モードなど、便利な機能がありますので、是非調べてみてください。</p>
<p>便利な IPython、使ってみてはどうでしょうか？</p>
<p>次に、<strong>Python</strong>で<strong>Vim</strong>を 使ってプログラミングする際に便利なプラグインを紹介したいと思います。</p>
<p>Vimとは Windowsでいう「メモ帳」のような<strong>エディタ</strong>です。</p>
<p>Linuxや UNIX系では、VimやEmacsのようなエディタを使ってプログラミングする事が多いと思います。</p>
<p>Vimでは、 プラグインと呼ばれる拡張プログラムを追加することにより、Vimの機能を便利にしたりすることができます。</p>
<p>今回は<strong>Pydiction</strong>と いうVimプラグインを紹介します。</p>
<p>以下が実際に 動作している画面です。</p>
<p><a href="http://lotus-network.net/wp-content/uploads/2010/04/pydiction.png"><img src="http://lotus-network.net/wp-content/uploads/2010/04/pydiction.png" alt="" width="531" height="411" /></a></p>
<p>ピンクの場所 に補完項目がでているのが確認できます。</p>
<p><strong>Pydiction</strong>と は</p>
<p>Pydiction は、vimでpythonのプログラムをする際に、モジュールなどを補完してくれる機能をもったプラグインです。</p>
<p>Python をvimで書く！という人は、是非導入すべきプラグインです。</p>
<p>ダウンロード は<a href="http://www.vim.org/scripts/script.php?script_id=850">コチラのページ</a>か らzip形式でダウンロードすることが可能です。</p>
<p>現在 (2010/4/6)では、1.2が最新版のようです。</p>
<p>Windows での動作は確認していないのでわかりません、すいません。。。</p>
<p>Linuxで はwgetコマンドをつかい、DLしたのですが、なぜかうまくいきませんでしたので(自分の環境では)ブラウザから先ほどのダウンロードページにいき、ダ ウンロードしました。</p>
<p>zip形式な ので、unzipコマンドによって解凍することが可能です。</p>
<p>解凍し、ディ レクトリに移動すると<br />
  pydiction.vim<br />
  pydiction.py<br />
  complete-dict<br />
  README.txt</p>
<p>以上の四つの ファイルが出力されます。<br />
README.txtは良いとして、各ファイルの説明です。<br />
<strong>pydiction.vim</strong> はvimのプラグインの本体になります。<br />
<strong>pydiction.py</strong> は拡張子の通り、pythonのスクリプトであり、このスクリプトで辞書(補完にでてくる項 目)をカスタマイズすることが可能です。<br />
<strong>complete-dic</strong> tは、補完の項目が記されています。</p>
<p>ではディレク トリに配置していきます。</p>
<p>プラグインの 本体である、pydiction.vimはユーザのホームディレクトリに位置する、「.vim」という.からはじまる隠しフォルダ?のなかに入れておけば OKです。</p>
<blockquote><p>mkdir ~/.vim/plugin</p>
<p>mv  pydiction.vim ~/.vim/plugin</p></blockquote>
<p>これで pydiction.vimをディレクトリの.vimディレクトリに移動しました。</p>
<p>次に complete-dicですが、辞書ファイルなので、どこのディレクトリに配置してもかまわないのですが、わかりやすさなどの面をみて、.vimに配置 しましょう。</p>
<blockquote><p>mkdir ~/.vim/pydiction</p>
<p>mv  complete-dic ~/.vim/pydiction</p></blockquote>
<p>これで辞書 ファイルを配置しました。</p>
<p>最後に pydictionですが、これもcomplete-dicと同じ場所に配置しましょう。</p>
<blockquote><p>mv pydiction.py ~/.vim/pydiction</p></blockquote>
<p>これでディレ クトリに配置する作業は終了です。</p>
<p>この pydictionをvimで正しく使える状態にするためにホームディレクトリ直下に位置する.vimrcを編集します。</p>
<blockquote><p>autocmd FileType python let g:pydiction_location =  &#8216;~/.vim/pydiction/complete-dict&#8217;</p></blockquote>
<p>上位のコード をvimrcのなかに追加することで、pydictionが正しく動作します。これは辞書ファイルの位置を指定しています。</p>
<p>使い方として は直感的に使えると思います。</p>
<p>ある程度文字 を打った後に、Tabキーで補完することが可能です。</p>
<p>とても便利な プラグインです。</p>
<p><strong>pydiction</strong>、 つかってみてはどうでしょう。</p>
<p>そして最後の 紹介になりますが、vimrcに追加するとpythonプログラミングが楽になるコードを紹介します。</p>
<p>それは<strong>vim 上で、pythonを実行</strong>するという物。というより見せかけるだけなのですが。</p>
<p>インタラク ティブシェルでやればそのまま実行できますが、vimでソースを書いて実行するには、</p>
<p>普通は:wq などで保存、終了してから実際にプログラムをたたくということになります。</p>
<p>ですが、以下 のコードを<strong>.vimrc</strong>に追加することでvim上でpythonのソースを実行させることができます。</p>
<blockquote><p>&#8221; Execute python script C-P<br />
function! s:ExecPy()<br />
exe &#8220;!&#8221; . &amp;ft . &#8221; %&#8221;<br />
:endfunction<br />
command! Exec call &lt;SID&gt;ExecPy()<br />
autocmd FileType python map &lt;silent&gt; &lt;C-P&gt; :call  &lt;SID&gt;ExecPy()&lt;CR&gt;</p></blockquote>
<p>これで pythonがvimで実行できるようになります。</p>
<p>C-Pなの で、CtrlとPを押すことによって実行できます。</p>
<p>実際に実行し てみた画面がこちら。</p>
<p>ソースは</p>
<blockquote><p>print &#8220;Hello Python&#8221;</p></blockquote>
<p>これしか書い ていません。<br />
<a href="http://lotus-network.net/wp-content/uploads/2010/04/vim_on_python.png"><img src="http://lotus-network.net/wp-content/uploads/2010/04/vim_on_python.png" alt="" width="438" height="161" /></a></p>
<p><strong>[最後 の変更が保存されていません]</strong>とあります。</p>
<p>これは一旦 ファイルを保存しないと動きませんので、注意です。</p>
<p>開いた状態で Ctrl+Pを押すことにより上の画像のような出力を得られます。</p>
<p>ENTERを 押すことによりvimに戻れるので、ソースを確認するにはかなり便利なコードですね。</p>
<p>是非使ってみ てください。</p>
<p>「Python でプログラミング時に便利なツール&amp;プラグイン」でした。</p>
<p>以上 lotusでした、長文かなり疲れました。脱字とかありそうです。</p>
<p>あったらコメ ントなりよろしくおねがいします。</p>
<p><a href="http://lotus-network.net">*この記事はLoppsと同時投稿です。</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.security.gs/magazine/programming/2010/04/06/story_2391/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHPで画像をAA化するスクリプト</title>
		<link>http://www.security.gs/magazine/programming/php/2010/04/05/story_2357/</link>
		<comments>http://www.security.gs/magazine/programming/php/2010/04/05/story_2357/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 11:42:35 +0000</pubDate>
		<dc:creator>Sn0wNight</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[サンプルコード]]></category>
		<category><![CDATA[スクリプト]]></category>
		<category><![CDATA[画像処理]]></category>

		<guid isPermaLink="false">http://www.security.gs/magazine/?p=2357</guid>
		<description><![CDATA[
こんにちは、Sn0wNightです。今回は役に立つかはどうかは不明なアプリを
PHPで組んでみました。画像を一時的ファイルとしてサーバにアップロードして、
その送信した画像をAA（アスキーアート）のような■で
すべて表 [...]]]></description>
			<content:encoded><![CDATA[<p><a rel="attachment wp-att-2359" href="http://www.security.gs/magazine/programming/php/2010/04/05/story_2357/attachment/%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88%ef%bc%882010-04-05-20-30-27%ef%bc%89/"><img class="alignnone size-full wp-image-2359" src="http://www.security.gs/magazine/wp-content/uploads/2010/04/0da00926b28526f21e67d1743b1ad827.png" alt="" width="616" height="281" /></a></p>
<p>こんにちは、Sn0wNightです。今回は役に立つかはどうかは不明なアプリを<br />
PHPで組んでみました。画像を一時的ファイルとしてサーバにアップロードして、<br />
その送信した画像をAA（アスキーアート）のような■で<br />
すべて表すというようなサーバサイドアプリケーションです。</p>
<p>まずは、コードを提示します。ごめんなさい。CSS実装してません。<br />
各自実装お願いします＞＜</p>
<h3>【HTML】クライアントサイド(index.html)</h3>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;h1&gt;PHP画像解析@GD&lt;/h1&gt;
　　&lt;form enctype=&quot;multipart/form-data&quot; action=&quot;process.php&quot; method=&quot;POST&quot;&gt;
　　　 アップロードする画像を選択:
　　　&lt;input name = &quot;uploadImage&quot; type = &quot;file&quot;/&gt;
　　&lt;input type = &quot;submit&quot; value=&quot;この画像を送信&quot;/&gt;
&lt;/form&gt;</pre></td></tr></table></div>

<h3>【PHP】サーバサイド(process.php)</h3>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ?php
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$uploadFile</span><span style="color: #339933;">=</span><span style="color: #000088;">$_FILES</span><span style="color: #009900;">&#91;</span>’uploadImage’<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$image</span><span style="color: #339933;">=</span><span style="color: #990000;">imagecreatefromjpeg</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#91;</span>’tmp_name’<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$imageWidth</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #000088;">$iWidth</span><span style="color: #339933;">=</span><span style="color: #990000;">imagesx</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$image</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #000088;">$imageWidth</span><span style="color: #339933;">&lt;</span><span style="color: #000088;">$iWidth</span><span style="color: #339933;">;</span><span style="color: #000088;">$iWidth</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$imageHeight</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #000088;">$iHeight</span><span style="color: #339933;">=</span><span style="color: #990000;">imagesy</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$image</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #000088;">$imageHeight</span><span style="color: #339933;">&lt;</span><span style="color: #000088;">$iHeight</span><span style="color: #339933;">;</span><span style="color: #000088;">$imageHeight</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #000088;">$pixel</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$imageWidth</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$imageHeight</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color: #990000;">imagecolorat</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$image</span><span style="color: #339933;">,</span><span style="color: #000088;">$imageWidth</span><span style="color: #339933;">,</span><span style="color: #000088;">$imageHeight</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$imageHeight</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$imageHeight</span><span style="color: #339933;">&lt;</span>count<span style="color: #009900;">&#40;</span><span style="color: #000088;">$pixel</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #000088;">$imageHeight</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">echo</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$imageWidth</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><span style="color: #000088;">$imageWidth</span><span style="color: #339933;">&lt;</span>count<span style="color: #009900;">&#40;</span><span style="color: #000088;">$pixel</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #000088;">$imageWidth</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">echo</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;&lt;font&gt;■&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;&lt;br /&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>こんな感じです。適当なHTMLからactionでprocess.phpへ処理を渡して、<br />
process.phpで画像を読み込み、その画像をx座標、y座標で色をスキャンして、<br />
sprintfで<font>タグで出力させています。<br />
imagecreatefromjpegを使用しているので、jpeg/jpgしか対応していません。<br />
png等に対応させる事も可能ですが。で、サンプルとして一応こんな感じで作ってみたのが<br />
<strong><a href="http://sn0wnight.com/dev/drawFont_png">Sn0wNight.com &gt; Dev &gt; drawFont_png</a></strong><br />
<strong><a href="http://sn0wnight.com/dev/drawFont_jpg">Sn0wNight.com &gt; Dev &gt; drawFont_jpg</a></strong>です。</p>
<p>是非試してみて下さい。3分で飽きます。それでは、</font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.security.gs/magazine/programming/php/2010/04/05/story_2357/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>布のシミュレーション-ソースコード配布-</title>
		<link>http://www.security.gs/magazine/programming/2010/04/05/story_2354/</link>
		<comments>http://www.security.gs/magazine/programming/2010/04/05/story_2354/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 04:59:05 +0000</pubDate>
		<dc:creator>maaaaakun</dc:creator>
				<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://www.security.gs/magazine/?p=2354</guid>
		<description><![CDATA[今から筑波に帰ります。maaaaakunです。
以前、コメントにソースがほしいという記述があったので、配布します。

配布のためにリファクタリングとかはしてません。ごめんなさい。
あと、実行速度を優先するために、メンバ変 [...]]]></description>
			<content:encoded><![CDATA[<p>今から筑波に帰ります。maaaaakunです。<br />
<br />以前、コメントにソースがほしいという記述があったので、配布します。<br />
<br />
配布のためにリファクタリングとかはしてません。ごめんなさい。<br />
あと、実行速度を優先するために、メンバ変数はすべてパブリックにしてます。<br />
その他についてはreadmeを読んでください。<br />
<br />
参考になったという方がいらっしゃればご一報ください。うれしいです。<br />
<a href='http://www.security.gs/magazine/wp-content/uploads/2010/04/cloth.zip'>ClothSimulator</a></p>
<p>exeファイルも入ってますが、多分ダウンロードしただけじゃ実行できません。。。<br />
結局環境を整えてmakeしてからかなぁ。。。<br />
DLすれば即実行できる方法もあると思うのですが、こちらの知識不足です。ごめんなさい。<br />
知ってる方、教えていただければなーと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.security.gs/magazine/programming/2010/04/05/story_2354/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[Python]簡単にメール送信するプログラム</title>
		<link>http://www.security.gs/magazine/programming/2010/04/03/story_2298/</link>
		<comments>http://www.security.gs/magazine/programming/2010/04/03/story_2298/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 22:12:03 +0000</pubDate>
		<dc:creator>Lotus</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://www.security.gs/magazine/?p=2298</guid>
		<description><![CDATA[ろーたすです。
pythonでメール送信するプログラムは結構前につくって、使用してたのですが、簡単に送信するプログラム書いてみた。
作った理由は、
携帯でメールするのだるい
簡単なメールなのにwebからいちいちするのだる [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #000000">ろーたすです。</span></p>
<p><span style="color: #000000">pythonでメール送信するプログラムは結構前につくって、使用してたのですが、簡単に送信するプログラム書いてみた。</span></p>
<p><span style="color: #000000">作った理由は、</span></p>
<blockquote><p><span style="color: #000000">携帯でメールするのだるい</span></p>
<p><span style="color: #000000">簡単なメールなのにwebからいちいちするのだるい</span></p>
<p><span style="color: #000000">結果：CUI、てか端末で送信できるようにしちまえば楽ちん</span></p></blockquote>
<p><span style="color: #000000">とまぁこのような感じです。</span></p>
<p><span style="color: #000000">Linuxなら動くと思います。Windowsでは確認してない<br />
</span></p>
<p><span style="color: #000000">実際にソースさらします。汚いですゴミです。</span></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
<span style="color: #808080; font-style: italic;"># -*- coding:utf-8 -*-</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">time</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">smtplib</span>
<span style="color: #ff7700;font-weight:bold;">from</span> progressbar <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #66cc66;">*</span>
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">email</span>.<span style="color: black;">MIMEText</span> <span style="color: #ff7700;font-weight:bold;">import</span> MIMEText
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">email</span>.<span style="color: black;">Header</span> <span style="color: #ff7700;font-weight:bold;">import</span> Header
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">email</span>.<span style="color: black;">Utils</span> <span style="color: #ff7700;font-weight:bold;">import</span> formatdate
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> bar<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;-&quot;</span><span style="color: #66cc66;">*</span><span style="color: #ff4500;">30</span>
    widgets = <span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;Send: &quot;</span>, Percentage<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>, Bar<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
    maxval = <span style="color: #ff4500;">250</span>
    pbar = ProgressBar<span style="color: black;">&#40;</span>maxval=maxval, widgets=widgets<span style="color: black;">&#41;</span>.<span style="color: black;">start</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>maxval<span style="color: black;">&#41;</span>:
        <span style="color: #dc143c;">time</span>.<span style="color: black;">sleep</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0.001</span><span style="color: black;">&#41;</span>
        pbar.<span style="color: black;">update</span><span style="color: black;">&#40;</span>pbar.<span style="color: black;">currval</span> + <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">pass</span>
    pbar.<span style="color: black;">finish</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> choice<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;*&quot;</span><span style="color: #66cc66;">*</span><span style="color: #ff4500;">30</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Please choice number!&quot;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;1: hoge@docomo.ne.jp&quot;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;2: hoge@gmail.com&quot;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;3: other&quot;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;*&quot;</span><span style="color: #66cc66;">*</span><span style="color: #ff4500;">30</span>
    to=<span style="color: #008000;">raw_input</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">if</span><span style="color: black;">&#40;</span>to==<span style="color: #483d8b;">&quot;1&quot;</span><span style="color: black;">&#41;</span>:
        to=<span style="color: #483d8b;">&quot;hoge@docomo.ne.jp&quot;</span>
        mail_send<span style="color: black;">&#40;</span>to<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span><span style="color: black;">&#40;</span>to==<span style="color: #483d8b;">&quot;2&quot;</span><span style="color: black;">&#41;</span>:
        to=<span style="color: #483d8b;">&quot;hoge@gmail.com&quot;</span>
        mail_send<span style="color: black;">&#40;</span>to<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span><span style="color: black;">&#40;</span>to==<span style="color: #483d8b;">&quot;3&quot;</span><span style="color: black;">&#41;</span>:
        to=<span style="color: #008000;">raw_input</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Please input mail address==&quot;</span><span style="color: black;">&#41;</span>
        mail_send<span style="color: black;">&#40;</span>to<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
        <span style="color: #dc143c;">os</span>.<span style="color: black;">system</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;python /home/lotus/python/mail.py&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> mail_send<span style="color: black;">&#40;</span>to<span style="color: black;">&#41;</span>:
    from_addr = <span style="color: #483d8b;">'myaddress@gmail.com'</span>
    to_addr = to
&nbsp;
<span style="color: #808080; font-style: italic;">#Raw_input</span>
    subject=<span style="color: #008000;">raw_input</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Subject?==&quot;</span><span style="color: black;">&#41;</span>
    subject=subject.<span style="color: black;">decode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;utf-8&quot;</span><span style="color: black;">&#41;</span>
    body=<span style="color: #008000;">raw_input</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Body?==&quot;</span><span style="color: black;">&#41;</span>
    body=body.<span style="color: black;">decode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;utf-8&quot;</span><span style="color: black;">&#41;</span>
    bar<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#mail settings</span>
    encoding=<span style="color: #483d8b;">&quot;utf-8&quot;</span>
    msg = MIMEText<span style="color: black;">&#40;</span>body.<span style="color: black;">encode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;utf-8&quot;</span><span style="color: black;">&#41;</span>,<span style="color: #483d8b;">'plain'</span>,encoding<span style="color: black;">&#41;</span>
    msg<span style="color: black;">&#91;</span><span style="color: #483d8b;">'Subject'</span><span style="color: black;">&#93;</span> = Header<span style="color: black;">&#40;</span>subject, encoding<span style="color: black;">&#41;</span>
    msg<span style="color: black;">&#91;</span><span style="color: #483d8b;">'From'</span><span style="color: black;">&#93;</span> = from_addr
    msg<span style="color: black;">&#91;</span><span style="color: #483d8b;">'To'</span><span style="color: black;">&#93;</span> = to_addr
    msg<span style="color: black;">&#91;</span><span style="color: #483d8b;">'Date'</span><span style="color: black;">&#93;</span> = formatdate<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    s = <span style="color: #dc143c;">smtplib</span>.<span style="color: black;">SMTP</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'smtp.gmail.com'</span>, <span style="color: #ff4500;">587</span><span style="color: black;">&#41;</span>
    s.<span style="color: black;">ehlo</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    s.<span style="color: black;">starttls</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    s.<span style="color: black;">ehlo</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    s.<span style="color: black;">login</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'myaddress@gmail.com'</span>, <span style="color: #483d8b;">'passwd'</span><span style="color: black;">&#41;</span>
    s.<span style="color: black;">sendmail</span><span style="color: black;">&#40;</span>from_addr, to_addr, msg.<span style="color: black;">as_string</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    s.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;-&quot;</span><span style="color: #66cc66;">*</span><span style="color: #ff4500;">30</span>
&nbsp;
choice<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p><span style="color: #000000">モジュールを色々importしているので、はいってなかったら入れれば動きます。</span></p>
<p><span style="color: #000000">えー、なにをしているかですが、おおざっぱに</span></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">time</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">smtplib</span>
<span style="color: #ff7700;font-weight:bold;">from</span> progressbar <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #66cc66;">*</span>
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">email</span>.<span style="color: black;">MIMEText</span> <span style="color: #ff7700;font-weight:bold;">import</span> MIMEText
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">email</span>.<span style="color: black;">Header</span> <span style="color: #ff7700;font-weight:bold;">import</span> Header
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">email</span>.<span style="color: black;">Utils</span> <span style="color: #ff7700;font-weight:bold;">import</span> formatdate</pre></div></div>

<p><span style="color: #000000">このあたりはいいですよね、必要なモジュール類をimportしています。はい</span></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> bar<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;-&quot;</span><span style="color: #66cc66;">*</span><span style="color: #ff4500;">30</span>
    widgets = <span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;Send: &quot;</span>, Percentage<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>, Bar<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
    maxval = <span style="color: #ff4500;">250</span>
    pbar = ProgressBar<span style="color: black;">&#40;</span>maxval=maxval, widgets=widgets<span style="color: black;">&#41;</span>.<span style="color: black;">start</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>maxval<span style="color: black;">&#41;</span>:
        <span style="color: #dc143c;">time</span>.<span style="color: black;">sleep</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0.001</span><span style="color: black;">&#41;</span>
        pbar.<span style="color: black;">update</span><span style="color: black;">&#40;</span>pbar.<span style="color: black;">currval</span> + <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">pass</span>
    pbar.<span style="color: black;">finish</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p><span style="color: #000000">defでbar()関数というものを作っております。</span></p>
<p><span style="color: #000000">これは単なる演出なのですが、プログレスバーを出す処理。</span></p>
<p><span style="color: #000000">progressbarモジュールというものがあり、それをimportすることにより実装可能です。</span></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> choice<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;*&quot;</span><span style="color: #66cc66;">*</span><span style="color: #ff4500;">30</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Please choice number!&quot;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;1: hoge@docomo.ne.jp&quot;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;2: hoge@gmail.com&quot;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;3: other&quot;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;*&quot;</span><span style="color: #66cc66;">*</span><span style="color: #ff4500;">30</span>
    to=<span style="color: #008000;">raw_input</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;&quot;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">if</span><span style="color: black;">&#40;</span>to==<span style="color: #483d8b;">&quot;1&quot;</span><span style="color: black;">&#41;</span>:
        to=<span style="color: #483d8b;">&quot;hoge@docomo.ne.jp&quot;</span>
        mail_send<span style="color: black;">&#40;</span>to<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span><span style="color: black;">&#40;</span>to==<span style="color: #483d8b;">&quot;2&quot;</span><span style="color: black;">&#41;</span>:
        to=<span style="color: #483d8b;">&quot;hoge@gmail.com&quot;</span>
        mail_send<span style="color: black;">&#40;</span>to<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span><span style="color: black;">&#40;</span>to==<span style="color: #483d8b;">&quot;3&quot;</span><span style="color: black;">&#41;</span>:
        to=<span style="color: #008000;">raw_input</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Please input mail address==&quot;</span><span style="color: black;">&#41;</span>
        mail_send<span style="color: black;">&#40;</span>to<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
        <span style="color: #dc143c;">os</span>.<span style="color: black;">system</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;python /home/lotus/python/mail.py&quot;</span><span style="color: black;">&#41;</span></pre></div></div>

<p><span style="color: #000000">choice関数をつくりました。</span></p>
<p><span style="color: #000000">これも単純すぎる関数（笑</span></p>
<p><span style="color: #000000">printはどうでも良いとし、if分でtoにはいっている文字列を・・・という処理をし、選択にあったメールアドレスをtoに代入しています。</span></p>
<p><span style="color: #000000">このなかで注目すべき点といっては何ですが、elseで例外処理をしています。</span></p>
<p><span style="color: #000000">この場合、os.systemというOSのコマンドが実行できるもので、python 略 /mail.pyという自分自身のコードを指定することにより、1,2,3でもなければもう一回起動するという形になります。</span></p>
<p><span style="color: #000000">最後の関数ですが</span></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">def</span> mail_send<span style="color: black;">&#40;</span>to<span style="color: black;">&#41;</span>:
    from_addr = <span style="color: #483d8b;">'myaddress@gmail.com'</span>
    to_addr = to
&nbsp;
<span style="color: #808080; font-style: italic;">#Raw_input</span>
    subject=<span style="color: #008000;">raw_input</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Subject?==&quot;</span><span style="color: black;">&#41;</span>
    subject=subject.<span style="color: black;">decode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;utf-8&quot;</span><span style="color: black;">&#41;</span>
    body=<span style="color: #008000;">raw_input</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Body?==&quot;</span><span style="color: black;">&#41;</span>
    body=body.<span style="color: black;">decode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;utf-8&quot;</span><span style="color: black;">&#41;</span>
    bar<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">#mail settings</span>
    encoding=<span style="color: #483d8b;">&quot;utf-8&quot;</span>
    msg = MIMEText<span style="color: black;">&#40;</span>body.<span style="color: black;">encode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;utf-8&quot;</span><span style="color: black;">&#41;</span>,<span style="color: #483d8b;">'plain'</span>,encoding<span style="color: black;">&#41;</span>
    msg<span style="color: black;">&#91;</span><span style="color: #483d8b;">'Subject'</span><span style="color: black;">&#93;</span> = Header<span style="color: black;">&#40;</span>subject, encoding<span style="color: black;">&#41;</span>
    msg<span style="color: black;">&#91;</span><span style="color: #483d8b;">'From'</span><span style="color: black;">&#93;</span> = from_addr
    msg<span style="color: black;">&#91;</span><span style="color: #483d8b;">'To'</span><span style="color: black;">&#93;</span> = to_addr
    msg<span style="color: black;">&#91;</span><span style="color: #483d8b;">'Date'</span><span style="color: black;">&#93;</span> = formatdate<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    s = <span style="color: #dc143c;">smtplib</span>.<span style="color: black;">SMTP</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'smtp.gmail.com'</span>, <span style="color: #ff4500;">587</span><span style="color: black;">&#41;</span>
    s.<span style="color: black;">ehlo</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    s.<span style="color: black;">starttls</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    s.<span style="color: black;">ehlo</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    s.<span style="color: black;">login</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'myaddress@gmail.com'</span>, <span style="color: #483d8b;">'passwd'</span><span style="color: black;">&#41;</span>
    s.<span style="color: black;">sendmail</span><span style="color: black;">&#40;</span>from_addr, to_addr, msg.<span style="color: black;">as_string</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    s.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;-&quot;</span><span style="color: #66cc66;">*</span><span style="color: #ff4500;">30</span>
&nbsp;
choice<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p><span style="color: #000000">mail_send、具体的にメール送信する関数です。</span></p>
<p><span style="color: #000000">引数として、choice関数からのtoをもらいます。選択されたメールアドレスをもらうわけです。</span></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#Raw_input</span>
    subject=<span style="color: #008000;">raw_input</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Subject?==&quot;</span><span style="color: black;">&#41;</span>
    subject=subject.<span style="color: black;">decode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;utf-8&quot;</span><span style="color: black;">&#41;</span>
    body=<span style="color: #008000;">raw_input</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Body?==&quot;</span><span style="color: black;">&#41;</span>
    body=body.<span style="color: black;">decode</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;utf-8&quot;</span><span style="color: black;">&#41;</span>
    bar<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p><span style="color: #000000">このあたりで、件名と本文の入力を受け付け、decodeします。（日本語だとエラーがでるために）</span></p>
<p><span style="color: #000000">そしてbar()で先ほどのプログレスバーを表示させます。(実際には意味がまったくなく、飾り（笑 </span></p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">  s = <span style="color: #dc143c;">smtplib</span>.<span style="color: black;">SMTP</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'smtp.gmail.com'</span>, <span style="color: #ff4500;">587</span><span style="color: black;">&#41;</span>
    s.<span style="color: black;">ehlo</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    s.<span style="color: black;">starttls</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    s.<span style="color: black;">ehlo</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    s.<span style="color: black;">login</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'myaddress@gmail.com'</span>, <span style="color: #483d8b;">'passwd'</span><span style="color: black;">&#41;</span>
    s.<span style="color: black;">sendmail</span><span style="color: black;">&#40;</span>from_addr, to_addr, msg.<span style="color: black;">as_string</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    s.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p><span style="color: #000000">このあたりで、SMTPによる認証をします。SMTPとは簡単に言えばメールを送信するためのプロトコルです。</span></p>
<p><span style="color: #000000">この場合、myaddress@gmail.com、パスワードがpasswdでgmailにログインし、sendmailします。</span></p>
<p><span style="color: #000000">そして最後に接続をclose。</span></p>
<p><span style="color: #000000">しかし、これらは関数を定義しただけですので、実行されません。</span></p>
<p><span style="color: #000000">なので、インデントから抜けchoice()を実行することによりメールが送信されます。</span></p>
<p><span style="color: #000000">choice関数にはsend_mail()を引数ありで呼び出しているので、単体?でsend_mail()を呼び出す必要がありませんし、単体で呼び出すとエラーがでます(メールアドレスの指定）</span></p>
<p><span style="color: #000000">解説とは言えないほどのものでしたが、このような感じで簡単に端末からメールを送信することが可能です。自分専用に書いた物なので必要性ないとおもいますが、ｗ</span></p>
<p><span style="color: #000000">*この記事は<a href="http://lotus-network.net">Lopps</a>との同時投稿です。*<br />
</span></p>
<p><span style="color: #000000"><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.security.gs/magazine/programming/2010/04/03/story_2298/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>【連載】iPhone用ゲームを作ろう 予告編</title>
		<link>http://www.security.gs/magazine/programming/iphone/2010/04/01/story_2271/</link>
		<comments>http://www.security.gs/magazine/programming/iphone/2010/04/01/story_2271/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 01:52:11 +0000</pubDate>
		<dc:creator>Tehu</dc:creator>
				<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.security.gs/magazine/?p=2271</guid>
		<description><![CDATA[実は今日からObjective-Cについて詳解してiPhoneアプリを作ろう！という流れに持っていきたかったのですが、その連載はSn0wNight氏に奪われてしまったので、趣向を変えてネット上にあまり情報がない「Open [...]]]></description>
			<content:encoded><![CDATA[<p>実は今日からObjective-Cについて詳解してiPhoneアプリを作ろう！という流れに持っていきたかったのですが、その連載はSn0wNight氏に奪われてしまったので、趣向を変えてネット上にあまり情報がない「OpenGL ES」を使ったiPhone用ゲーム制作講座をやっていきたいと思います。</p>
<p>私もいまiPad用のゲームを製作中（結構できてきた）のですが、OpenGL って結構奥が深い！</p>
<p>そして、一番の利点が</p>
<p><strong>Objective-C をあまり使わない</strong></p>
<p>ということです。いや、もちろん使わないと作れないのですが、簡単です。Objective-Cの基礎の基礎の文法を覚えさえすれば、だいたいのゲームは作れます。（加速度センサを組み込んだりするときは、Objective-Cの知識が必要になります</p>
<p>さて、ではまとめ！</p>
<ul>
<li>概要:OpenGL ESの基本的な文法を理解し、簡単なゲームを作るテクニックを習得する。</li>
<li>期間:1年かかるかも</li>
<li>対象者:C言語習得者（C++の知識があればもっといい）</li>
</ul>
<p>どんなゲームを作るかは、OpenGLの基本文法を学んでから決めましょう。</p>
<p>では、お楽しみに！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.security.gs/magazine/programming/iphone/2010/04/01/story_2271/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>【連載】Starting Objective-C ./1</title>
		<link>http://www.security.gs/magazine/programming/objective-c/2010/04/01/story_2253/</link>
		<comments>http://www.security.gs/magazine/programming/objective-c/2010/04/01/story_2253/#comments</comments>
		<pubDate>Wed, 31 Mar 2010 17:20:47 +0000</pubDate>
		<dc:creator>Sn0wNight</dc:creator>
				<category><![CDATA[Objective-C]]></category>

		<guid isPermaLink="false">http://www.security.gs/magazine/?p=2253</guid>
		<description><![CDATA[早速Objective-Cについての連載を開始したいと思います。
ではまず、Objective-Cについての言語の成り立ちからの解説とします。
Objective-Cはその名称からも分かるようにC言語をベースにしてありま [...]]]></description>
			<content:encoded><![CDATA[<p>早速Objective-Cについての連載を開始したいと思います。<br />
ではまず、Objective-Cについての言語の成り立ちからの解説とします。</p>
<p>Objective-Cはその名称からも分かるようにC言語をベースにしてあります。<br />
C言語はコンパイラ型言語と静的で高速なプログラムが組めるということで有名な言語です。<br />
あと、もう一つ。<br />
Smalltalkです。これは1970年代に開発された純粋なオブジェクト指向言語です。<br />
Objective-Cのオブジェクト指向の部分はSmalltalkを引き継いでいると言えますね。</p>
<p>ですが、Objective-Cの習得する場合はSmalltalkの知識は不要です。Cだけで十分です。<br />
なぜなら、オブジェクト指向の文はObjective-C独自のものだからです。<br />
Smalltalkの影響は受けてはいますが、文法は独自のものなので解説していきます！</p>
<p>が、しかしObjective-CはCさえ知っていれば簡単に習得することができます。<br />
なぜか。Java等と違い、構文等がシンプルであることが挙げられます。<br />
これにより、学習負担は大幅に軽減されると思います。また、Objective-C内のコードに<br />
C/C++のコードを共存できます。</p>
<p>■C++/Java/Python/RubyプログラマにObjective-Cを勧めたい理由<br />
　C++/Javaのプログラマさんから見ると、動的型判別を使ったプログラミングが体験できたり、<br />
　PythonやRubyプログラマさんからは低レベルなプログラミングをすることで高いパフォーマンスを<br />
　出せるチャンスとなる可能性もあります。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.security.gs/magazine/programming/objective-c/2010/04/01/story_2253/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>布のシミュレーション-自由形状の物体との衝突-</title>
		<link>http://www.security.gs/magazine/programming/2010/03/29/story_2117/</link>
		<comments>http://www.security.gs/magazine/programming/2010/03/29/story_2117/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 07:36:19 +0000</pubDate>
		<dc:creator>maaaaakun</dc:creator>
				<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://www.security.gs/magazine/?p=2117</guid>
		<description><![CDATA[春休みも残りわずかとなりました。実家でのびのびしております。maaaaakunです。
前回まで2回にわたって紹介してきた布のシミュレーションに関するお話ですが、今回が最終回です。
今からお話することを実装すると、布と自由 [...]]]></description>
			<content:encoded><![CDATA[<p>春休みも残りわずかとなりました。実家でのびのびしております。maaaaakunです。</p>
<p>前回まで2回にわたって紹介してきた布のシミュレーションに関するお話ですが、今回が最終回です。<br />
今からお話することを実装すると、布と自由形状の物体との衝突シミュレーションができます。<br />
自由形状の物体というのは、任意の物体ということです。<br />
つまり、どんな物体とも衝突シミュレーションが可能になります。</p>
<p>今回も記事の最後に実行したときの動画を用意していますので良ければご覧ください。</p>
<h2><span style="color: #ff0000">・布と自由形状の物体との衝突シミュレーション</span></h2>
<p>前回は、布と球との衝突シミュレーションに関するお話でした。<br />
衝突シミュレーションは、大きく分けると<br />
①衝突判定・・・物体同士が衝突するかどうか判定する。<br />
②衝突応答・・・衝突した物体同士の振る舞いを求める。<br />
の2つに分けることができるのでしたね。ここで、①について考えてみます。<br />
前回は布と球だったので、「布を構成する各頂点と、球の中心との距離」を用いて容易に衝突判定を行う事が出来ました。<br />
ところが、今回は自由形状の物体との衝突シミュレーションです。例えば以下に示す物体と布との衝突シミュレーションを実現するには。。。？<br />
<a href="http://www.security.gs/magazine/wp-content/uploads/2010/03/bunny.jpg"><img class="aligncenter size-medium wp-image-2118" src="http://www.security.gs/magazine/wp-content/uploads/2010/03/bunny-139x130.jpg" alt="" width="139" height="130" /></a></p>
<p>一気に難易度が跳ね上がりましたね。<br />
それでも大丈夫。前回の応用で実現することができます。</p>
<p>では、衝突判定と衝突応答をどのように実現するのか？<br />
答えは、「物体を球の集合で近似する」です。<br />
これにより、<br />
「布と自由形状の物体との衝突判定」<br />
は<br />
「布を構成する各頂点と、物体を構成する各球との衝突判定」<br />
という問題に置き換えることが出来ます。前回行った衝突判定を、物体を構成する球の数だけ繰り返せば良いので、非常に簡単です。（計算には球の集合を用い、表示には元データを用います。）</p>
<p>物体を球の集合で近似するためのプログラムは</p>
<p>http://isg.cs.tcd.ie/spheretree/</p>
<p>で入手できます。「Sphere-Tree」を構築するアルゴリズムを実装したものです。<br />
Sphere-Treeについて軽く説明します。<br />
Sphere-Treeとは、各ノードが球の中心座標と半径を持つツリー構造のことです。木の深さが増すにつれて、近似の精度も良くなりますが、球の数も増えるため、衝突判定の際に計算量が増大してしまいます。<br />
<a href="http://www.security.gs/magazine/wp-content/uploads/2010/03/bunny1.jpg"><img class="aligncenter size-medium wp-image-2119" src="http://www.security.gs/magazine/wp-content/uploads/2010/03/bunny1-180x55.jpg" alt="" width="240" height="80" /></a></p>
<p>↑こんな感じで、深さが増すごとに近似精度が良くなり、球の数が増大していきます。</p>
<p>ちなみに、このプログラムは、OBJ形式のデータを入力すると、SPH形式という独自拡張子のデータ（Sphre-Tree）を出力します。コンパイルしなくても、exeファイルも入っていたと思います。</p>
<p>ここまでのお話を実装したプログラムの実行例が↓でご覧になれます。</p>
<p><a href="http://www.security.gs/magazine/wp-content/uploads/2010/03/demo3_35.flv">demo3</a></p>
<p>いかがでしたでしょうか。<br />
同じ分野を勉強している方の参考になったり、この記事を読んで興味を持って頂いた方がいらっしゃれば幸いです。<br />
4月からの卒業研究は、「布」と「CG」（と、できれば「人」）をキーワードに進めていく予定なので、また何か記事になるような事があれば書きたいと考えています。</p>
<p>最後まで読んでいただいてありがとうございました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.security.gs/magazine/programming/2010/03/29/story_2117/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.security.gs/magazine/wp-content/uploads/2010/03/demo3_35.flv" length="2025425" type="video/x-flv" />
		</item>
		<item>
		<title>布のシミュレーション-球体との衝突-</title>
		<link>http://www.security.gs/magazine/programming/2010/03/07/story_1999/</link>
		<comments>http://www.security.gs/magazine/programming/2010/03/07/story_1999/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 05:50:59 +0000</pubDate>
		<dc:creator>maaaaakun</dc:creator>
				<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://www.security.gs/magazine/?p=1999</guid>
		<description><![CDATA[maaaaakunです。テストを終えてようやく春休みです。
梅、桜のつぼみが膨らんできて少しずつ春を感じさせますね。僕は春が一番好きです。

さて、前回に引き続き、布のシミュレーションについてお話しようと思います。
今回 [...]]]></description>
			<content:encoded><![CDATA[<p>maaaaakunです。テストを終えてようやく春休みです。</p>
<p>梅、桜のつぼみが膨らんできて少しずつ春を感じさせますね。僕は春が一番好きです。<br />
<br />
さて、前回に引き続き、布のシミュレーションについてお話しようと思います。</p>
<p>今回は、布と球との衝突をシミュレーションするために必要な事についてです。</p>
<p>記事の最後に、実行した場合の動画がありますのでよかったらご覧ください。</p>
<h2><span style="color: #ff0000">・布と球との衝突シミュレーション</span></h2>
<p>前回は布の動きのみのシミュレーションでした。今回は球体との衝突を加えてシミュレーションします。</p>
<p>少しだけ複雑になりますが、難易度はそれほど変わりません。</p>
<p>物体と物体の衝突をシミュレーションする場合に必要な事は大きく分けると二つに分類できます。</p>
<p>一つ目。衝突判定 : 物体と物体が衝突したということを、計算によって求める。</p>
<p>二つ目。衝突応答 : 衝突したと分かったら、その二つの物体はどのようにふるまうのかを計算によって求める。</p>
<p>上に挙げた二点についてそれぞれ説明していきます。</p>
<p>1.衝突判定</p>
<p>布と球体との衝突をいかにして検出すれば良いでしょうか。それにはまず、この記事中で使っている「布」とは何かについて考えてみることにします。ここでいう布とは、「小さな三角形の集まり」の事です。</p>
<p>つまり、布と球体との衝突判定は、「布を構成する各三角形と球との衝突判定」という問題と等しいです。これで少し簡単になりました。</p>
<p>以上の事から、三角形と球との衝突判定を実装すれば良いことになるのですが、実はそれさえ必要ありません。最終的に、「布を構成する各頂点と球との衝突判定」さえ実装すればOKです。では球と頂点との衝突判定は？「（頂点と球の中心との距離）&lt;=（球の半径）」で判定できます。非常に簡単ですね。</p>
<p>さて、なぜ三角形ではなく、頂点で衝突判定を行っていいのでしょうか。この理由を説明します。</p>
<p>頂点で衝突判定をすると、ある問題が発生するのですが、それよりも受ける恩恵の方がはるかに大きいです。したがって頂点で衝突判定を行います。</p>
<p>恩恵とは？　「衝突判定にかかる時間が短くなる。」　リアルタイムでシミュレーションするために非常に重要な事です。</p>
<p>問題とは？「三角形が球にめり込んでしまう。」　以下に示す図のようなことを言います。</p>
<p><a href="http://www.security.gs/magazine/wp-content/uploads/2010/03/sphere1.jpg"><img class="aligncenter size-medium wp-image-2000" src="http://www.security.gs/magazine/wp-content/uploads/2010/03/sphere1-130x130.jpg" alt="" width="130" height="130" /></a></p>
<p>この問題は簡単な工夫で回避することができます。「それっぽく見えればよい」という発想のもと、表示している球よりも少し大きな球との衝突判定を行うのです。</p>
<p><a href="http://www.security.gs/magazine/wp-content/uploads/2010/03/sphere2.jpg"><img class="aligncenter size-medium wp-image-2001" src="http://www.security.gs/magazine/wp-content/uploads/2010/03/sphere2-180x99.jpg" alt="" width="180" height="99" /></a> また、布の大きさが一定の場合、頂点数を増やしていけば、一つ一つの三角形は小さくなっていきます。これも問題の解決に役立つ手法です。</p>
<p><a href="http://www.security.gs/magazine/wp-content/uploads/2010/03/sphere21.jpg"><img class="aligncenter size-medium wp-image-2002" src="http://www.security.gs/magazine/wp-content/uploads/2010/03/sphere21-111x130.jpg" alt="" width="111" height="130" /></a></p>
<p>2.衝突応答</p>
<p>衝突を検出すると、今度は衝突応答ルーチンにうつります。衝突した球と頂点がそれぞれどのようにふるまうのかを計算します。</p>
<p>今回は球の振る舞いは考えていません。したがって、布との衝突により球が動くことはありません。これは、あくまで布のシミュレーションを目的としているためです。（次回の記事で詳しく述べます）</p>
<p>さて、それでは衝突した頂点の振る舞いについて考えていきます。これは、頂点の速度と位置をどのように更新するか？という問題と等しいです。まず、速度の更新について説明します。</p>
<p>速度は、衝突時点の向きと反対向き、大きさは0~1の値をとる反発係数に依存した値に更新します。式で表すと、-e*Vです。（eは反発係数、Vは速度ベクトル）</p>
<p>位置は、「現実世界での衝突点」に更新します。これはどういう事かというと、コンピュータでシミュレーションすると、どうしても連続時間ではなく離散時間でのシミュレーションになります。したがって、現実世界ではありえない、「頂点が球の中に入ってしまう現象」が計算上、どうしても起きてしまいます。</p>
<p>衝突判定の式でいうと、「（頂点と球の中心との距離）&lt;（球の半径）」の部分が、今話した「非現実世界での衝突点」にあたるわけです。これをそのまま表示させるとおかしく見えてしまいますね。そこで、「現実世界での衝突点」に位置を更新するわけです。「（頂点と球の中心との距離）=（球の半径）」となる値の事です。</p>
<p>如何でしたでしょうか。この記事でお話したことを実装したプログラムの実行の様子を↓でご覧になることができます。</p>
<p><a href="http://www.security.gs/magazine/wp-content/uploads/2010/03/demo2_35.flv">demo2</a></p>
<p>次回はラスト、「自由形状の物体との衝突」についてお話します。これは非常に面白いと個人的に思っていますのでお楽しみに。（結局書く人の腕次第ですよね。。。笑）</p>
]]></content:encoded>
			<wfw:commentRss>http://www.security.gs/magazine/programming/2010/03/07/story_1999/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.security.gs/magazine/wp-content/uploads/2010/03/demo2_35.flv" length="2021620" type="video/x-flv" />
		</item>
		<item>
		<title>布のシミュレーション-布のモデル化-</title>
		<link>http://www.security.gs/magazine/programming/2010/03/01/story_1911/</link>
		<comments>http://www.security.gs/magazine/programming/2010/03/01/story_1911/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 03:02:11 +0000</pubDate>
		<dc:creator>maaaaakun</dc:creator>
				<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://www.security.gs/magazine/?p=1911</guid>
		<description><![CDATA[maaaaakunです。
以前、僕が作成した布と自由形状の物体の衝突シミュレーションプログラムの概要をご紹介しました。
これから3回にわけて、ある程度詳しく書けたらな―と思ってます。
ただし、数式などは出さず、どんな過程 [...]]]></description>
			<content:encoded><![CDATA[<p>maaaaakunです。<br />
以前、僕が作成した布と自由形状の物体の衝突シミュレーションプログラムの概要をご紹介しました。<br />
これから3回にわけて、ある程度詳しく書けたらな―と思ってます。<br />
ただし、数式などは出さず、どんな過程を経ているのかを理解してもらうことを目標とします。<br />
ちなみに後2回書けるかは未定です。。。でもがんばります！</p>
<p>さて、今回は「布のモデル化」についてのお話です。（間違いが潜んでいる可能性は否定できません。。。）<br />
尚、記事の最後に動画がありますので良ければご覧ください。</p>
<h2><span style="color: #ff0000"><strong>・布のモデル化</strong></span></h2>
<p>コンピュータ上で布の動きを再現するために、まずは布をモデル化する必要があります。<br />
布のモデル化には、「二次元バネ－質点系モデル」というものが一般的に用いられています。</p>
<div id="attachment_1912" class="wp-caption aligncenter" style="width: 139px"><a href="http://www.security.gs/magazine/wp-content/uploads/2010/03/cloth.jpg"><img class="size-medium wp-image-1912" src="http://www.security.gs/magazine/wp-content/uploads/2010/03/cloth-129x130.jpg" alt="" width="129" height="130" /></a><p class="wp-caption-text">二次元バネ-質点系モデル</p></div>
<p>これは、上図において、<br />
格子状にならんだ各頂点→質量をもつ質点<br />
各頂点を結ぶ直線→質量を持たない仮想的なバネ<br />
とみなすものです。<br />
このように布をモデル化し、各頂点の次の位置を計算していくことで、布の動きを表現することができます。</p>
<p>各頂点の次の座標は、ニュートンの運動方程式を解くことで求めます。<br />
これは、頂点に働く力を求める→頂点の加速度を更新→頂点の速度を更新→頂点の位置を更新<br />
という簡単なプロセスで求めることができます。（これはオイラー法という解法です。）</p>
<p>では、頂点にはどんな力が働くのでしょうか。それには以下の様々な力を考慮します。<br />
・重力<br />
・摩擦力<br />
・バネ減衰力<br />
・空気抵抗（粘性抵抗）<br />
・バネによる復元力<br />
など。<br />
ここで注意したい事が一点。これらの力は現実世界の布に働くものもあります。<br />
しかし、バネと質点という非常に単純なモデルを用いているため、あまり現実世界で起こっている事を数値的に再現しているとは言えません。CGの世界では「それっぽく見える」ことが重要視される世界もあります。今回はその部類に入るわけです。</p>
<p>説明は以上です。もっと分かりやすくかければいいのですが。。。文章力不足です。精進します。</p>
<p>最後に、上に述べたことをプログラムに実装した実行結果をお見せします。<br />
これは頂点数20×20の400個の場合の動画です。</p>
<p><a href="http://www.security.gs/magazine/wp-content/uploads/2010/03/demo1_20.flv">demo1</a></p>
<p>如何でしたでしょうか。次回は球体との衝突判定について書く予定です。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.security.gs/magazine/programming/2010/03/01/story_1911/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://www.security.gs/magazine/wp-content/uploads/2010/03/demo1_20.flv" length="1977692" type="video/x-flv" />
		</item>
	</channel>
</rss>
