<?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>オーガニック・ウェルス</title>
	<atom:link href="http://ict-start.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://ict-start.com/blog</link>
	<description>～21世紀の生き方を考える</description>
	<lastBuildDate>Sun, 13 May 2012 06:00:53 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Rustがdebianでコンパイルできない</title>
		<link>http://ict-start.com/blog/?p=384</link>
		<comments>http://ict-start.com/blog/?p=384#comments</comments>
		<pubDate>Sun, 13 May 2012 06:00:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://ict-start.com/blog/?p=384</guid>
		<description><![CDATA[先日Rust-compilerが0.2になっていました。そして最近debianを使い始めたのですが0.1/0.2ともmakeに失敗します。 ただいま原因を調査しています。どなたかご存知の方がいれば一報いただけますと幸いです。 0.1のmake結果 compile: rustllvm/x86_64-unknown-linux-gnu/RustGCMetadataPrinter.o compile: rustllvm/x86_64-unknown-linux-gnu/RustGCStrategy.o compile: rustllvm/x86_64-unknown-linux-gnu/RustWrapper.o def: rustllvm/rustllvm.linux.def link: rustllvm/x86_64-unknown-linux-gnu/librustllvm.so cp: x86_64-unknown-linux-gnu/stage0/lib/rustc/x86_64-unknown-linux-gnu/lib/librustllvm.so compile_and_link: x86_64-unknown-linux-gnu/stage0/lib/rustc/x86_64-unknown-linux-gnu/lib/libcore.so compile_and_link: x86_64-unknown-linux-gnu/stage0/lib/rustc/x86_64-unknown-linux-gnu/lib/libstd.so compile_and_link: x86_64-unknown-linux-gnu/stage0/lib/rustc/x86_64-unknown-linux-gnu/lib/librustc.so error: internal compiler error unexpected failure note: The compiler hit an unexpected failure path. This is a bug. Try running with RUST_LOG=rustc=0,::rt::backtrace to get further details and report the results to github.com/mozilla/rust/issues make: *** [...]]]></description>
			<content:encoded><![CDATA[<p>先日Rust-compilerが0.2になっていました。そして最近debianを使い始めたのですが0.1/0.2ともmakeに失敗します。</p>
<p>ただいま原因を調査しています。どなたかご存知の方がいれば一報いただけますと幸いです。</p>
<p>0.1のmake結果<br />
<code>compile: rustllvm/x86_64-unknown-linux-gnu/RustGCMetadataPrinter.o<br />
compile: rustllvm/x86_64-unknown-linux-gnu/RustGCStrategy.o<br />
compile: rustllvm/x86_64-unknown-linux-gnu/RustWrapper.o<br />
def: rustllvm/rustllvm.linux.def<br />
link: rustllvm/x86_64-unknown-linux-gnu/librustllvm.so<br />
cp: x86_64-unknown-linux-gnu/stage0/lib/rustc/x86_64-unknown-linux-gnu/lib/librustllvm.so<br />
compile_and_link: x86_64-unknown-linux-gnu/stage0/lib/rustc/x86_64-unknown-linux-gnu/lib/libcore.so<br />
compile_and_link: x86_64-unknown-linux-gnu/stage0/lib/rustc/x86_64-unknown-linux-gnu/lib/libstd.so<br />
compile_and_link: x86_64-unknown-linux-gnu/stage0/lib/rustc/x86_64-unknown-linux-gnu/lib/librustc.so<br />
error: internal compiler error unexpected failure<br />
note: The compiler hit an unexpected failure path. This is a bug. Try running with RUST_LOG=rustc=0,::rt::backtrace to get further details and report the results to github.com/mozilla/rust/issues<br />
make: *** [x86_64-unknown-linux-gnu/stage0/lib/rustc/x86_64-unknown-linux-gnu/lib/librustc.so] Error 101</code></p>
<p>0.2のmake結果</p>
<p>make: *** [x86_64-unknown-linux-gnu/stage0/lib/rustc/x86_64-unknown-linux-gnu/lib/librustc.so] Error 137</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://ict-start.com/blog/?feed=rss2&#038;p=384</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rustから自作共有ライブラリを呼び出す</title>
		<link>http://ict-start.com/blog/?p=377</link>
		<comments>http://ict-start.com/blog/?p=377#comments</comments>
		<pubDate>Thu, 02 Feb 2012 14:46:05 +0000</pubDate>
		<dc:creator>堀松 巧也</dc:creator>
				<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://ict-start.com/blog/?p=377</guid>
		<description><![CDATA[Rustから呼び出せる共有ライブラリを作成する方法をまとめます。コンパイラにはgccを使用します。 &#60;myfunc.h&#62; void sumTotal (int num); &#60;myfunc.c&#62; #include &#60;stdio.h&#62; #include "myfunc.h" void sumTotal (int num) { int sum = 0, i; for (i = 1; i &#60;= num; i++) { sum = sum + i; } printf("sum = %d\n", sum); } 上記ファイルからライブラリファイルを生成します。 $ gcc -shared myfunc.c -o libmyfunc.so $ sudo cp libmyfunc.so /usr/local/lib/rustc/i686-unknown-linux-gnu/lib/ ライブラリを用意したら次はRustのプログラムを作成します。 &#60;main.rs&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Rustから呼び出せる共有ライブラリを作成する方法をまとめます。コンパイラにはgccを使用します。</p>
<p>&lt;myfunc.h&gt;</p>
<pre>void sumTotal (int num);</pre>
<p>&lt;myfunc.c&gt;</p>
<pre>#include &lt;stdio.h&gt;
#include "myfunc.h"

void sumTotal (int num)
{
	int sum = 0, i;
	for (i = 1; i &lt;= num; i++) {
		sum = sum + i;
	}
	printf("sum = %d\n", sum);
}</pre>
<p>上記ファイルからライブラリファイルを生成します。</p>
<p><code><br />
$ gcc -shared myfunc.c -o libmyfunc.so<br />
$ sudo cp libmyfunc.so /usr/local/lib/rustc/i686-unknown-linux-gnu/lib/<br />
</code></p>
<p>ライブラリを用意したら次はRustのプログラムを作成します。</p>
<p>&lt;main.rs&gt;</p>
<pre>use std;
#[link_name = "myfunc"]
native mod myfunc {
  fn sumTotal(arg :ctypes::c_int);
}
fn main(){
	myfunc::sumTotal(10);
	myfunc::sumTotal(20);
	myfunc::sumTotal(30);
}</pre>
<p>いつもと同じようにコンパイルします。<br />
<code><br />
$ rustc main.rs<br />
$ ./main<br />
</code><br />
実行結果<br />
<code><br />
sum = 55<br />
sum = 210<br />
sum = 465<br />
</code><br />
そこまで難しいことはしないので良かったです。</p>
<p>参考：</p>
<p><a href="http://d.hatena.ne.jp/sleepy_yoshi/20090510/p1">gccを用いたCの共有ライブラリの作り方 &#8211; 睡眠不足？！</a></p>
<p><a href="http://doc.rust-lang.org/doc/tutorial.html#native-modules">11.1 Native modules</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ict-start.com/blog/?feed=rss2&#038;p=377</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rust Languageに手を出してみた</title>
		<link>http://ict-start.com/blog/?p=371</link>
		<comments>http://ict-start.com/blog/?p=371#comments</comments>
		<pubDate>Fri, 27 Jan 2012 14:33:26 +0000</pubDate>
		<dc:creator>堀松 巧也</dc:creator>
				<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://ict-start.com/blog/?p=371</guid>
		<description><![CDATA[Rust a safe, concurrent, practical language 先日「Rust」という新しいプログラミング言語が公開されましたので早速使って見ました。Rustは実行する前にコンパイルをしネイティブの実行ファイルを生成します。 環境はUbuntu 11.10です。 $ sudo apt-get install g++ curl $ wget http://dl.rust-lang.org/dist/rust-0.1.tar.gz $ tar xvf rust-0.1.tar.gz $ cd rust-0.1.tar.gz $ ./configure $ make $ make install 以上で環境構築は終了です。以下のコードを実行してみます。 &#60;hello.rs&#62; use std; import std::io; fn main() { for i in [1, 2, 3] { io::println(#fmt("hello %d\n", i)); } } &#160; $ [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.rust-lang.org/">Rust a safe, concurrent, practical language</a></p>
<p>先日「Rust」という新しいプログラミング言語が公開されましたので早速使って見ました。Rustは実行する前にコンパイルをしネイティブの実行ファイルを生成します。</p>
<p>環境はUbuntu 11.10です。</p>
<p><code><br />
$ sudo apt-get install g++ curl<br />
$ wget http://dl.rust-lang.org/dist/rust-0.1.tar.gz<br />
$ tar xvf rust-0.1.tar.gz<br />
$ cd rust-0.1.tar.gz<br />
$ ./configure<br />
$ make<br />
$ make install<br />
</code></p>
<p>以上で環境構築は終了です。以下のコードを実行してみます。</p>
<p>&lt;hello.rs&gt;</p>
<pre>use std;
import std::io;

fn main() {
    for i in [1, 2, 3] {
        io::println(#fmt("hello %d\n", i));
    }
}</pre>
<p>&nbsp;</p>
<p><code>$ rustc hello.rs<br />
$ ./hello</code></p>
<p>実行結果</p>
<p><span style="font-family: monospace;">hello 1</span></p>
<p><code>hello 2</code></p>
<p><code>hello 3</code></p>
<p><code>$ ldd hello</code></p>
<pre>	linux-gate.so.1 =&gt;  (0x00c0b000)
	libcore-14bd852465126fe7-0.1.so =&gt; /home/user/Programs/rust/./../../../../usr/local/lib/rustc/i686-unknown-linux-gnu/lib/libcore-14bd852465126fe7-0.1.so (0x004a9000)
	libstd-79ca5fac56b63fde-0.1.so =&gt; /home/user/Programs/rust/./../../../../usr/local/lib/rustc/i686-unknown-linux-gnu/lib/libstd-79ca5fac56b63fde-0.1.so (0x0098f000)
	librustrt.so =&gt; /home/user/Programs/rust/./../../../../usr/local/lib/rustc/i686-unknown-linux-gnu/lib/librustrt.so (0x00b6a000)
	libgcc_s.so.1 =&gt; /lib/i386-linux-gnu/libgcc_s.so.1 (0x007e7000)
	libc.so.6 =&gt; /lib/i386-linux-gnu/libc.so.6 (0x00182000)
	libm.so.6 =&gt; /lib/i386-linux-gnu/libm.so.6 (0x0051a000)
	librt.so.1 =&gt; /lib/i386-linux-gnu/librt.so.1 (0x0071d000)
	libdl.so.2 =&gt; /lib/i386-linux-gnu/libdl.so.2 (0x00110000)
	libpthread.so.0 =&gt; /lib/i386-linux-gnu/libpthread.so.0 (0x00f40000)
	libstdc++.so.6 =&gt; /usr/lib/i386-linux-gnu/libstdc++.so.6 (0x002fe000)
	/lib/ld-linux.so.2 (0x00d87000)</pre>
<p>どうやら実行ファイルにRustのライブラリを読み込んでいるようです。この実行ファイルは約16KBとなっています。</p>
<p><code>objdump -S hello &gt; hello.dump</code></p>
<pre>hello:     file format elf32-i386
~
08048b10 &lt;rust_start@plt&gt;:
 8048b10:	ff 25 2c c0 04 08    	jmp    *0x804c02c
 8048b16:	68 58 00 00 00       	push   $0x58
 8048b1b:	e9 30 ff ff ff       	jmp    8048a50 &lt;_init+0x38&gt;
~
08048b50 &lt;_start&gt;:
 8048b50:	31 ed                	xor    %ebp,%ebp
 8048b52:	5e                   	pop    %esi
 8048b53:	89 e1                	mov    %esp,%ecx
 8048b55:	83 e4 f0             	and    $0xfffffff0,%esp
 8048b58:	50                   	push   %eax
 8048b59:	54                   	push   %esp
 8048b5a:	52                   	push   %edx
 8048b5b:	68 00 9d 04 08       	push   $0x8049d00
 8048b60:	68 90 9c 04 08       	push   $0x8049c90
 8048b65:	51                   	push   %ecx
 8048b66:	56                   	push   %esi
 8048b67:	68 a0 97 04 08       	push   $0x80497a0
 8048b6c:	e8 4f ff ff ff       	call   8048ac0 &lt;__libc_start_main@plt&gt;
 8048b71:	f4                   	hlt
 8048b72:	90                   	nop
 8048b73:	90                   	nop
~</pre>
<p>elf形式の実行ファイルを生成しています。</p>
<p>今回は以上です。</p>
<p><span id="more-371"></span>続きを以下にまとめています。</p>
<p><a href="http://ict-start.com/rust/class1.html">http://ict-start.com/rust/class1.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ict-start.com/blog/?feed=rss2&#038;p=371</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntuでアセンブラを使ってみる</title>
		<link>http://ict-start.com/blog/?p=363</link>
		<comments>http://ict-start.com/blog/?p=363#comments</comments>
		<pubDate>Sat, 21 Jan 2012 16:11:17 +0000</pubDate>
		<dc:creator>堀松 巧也</dc:creator>
				<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://ict-start.com/blog/?p=363</guid>
		<description><![CDATA[Ubuntuでアセンブラを始めて見ようと思ったのですが、存在する情報がVistualStudioのインラインアセンブラを前提にしたものばかりでそれ以外のアセンブラ（今回はnasm）での情報がほとんど有りません。 なのでまずC言語でコンパイルした実効ファイルを逆アセンブルしてアセンブルソースを読み解く方法で進めます。 まず以下のC言語のソースから実行ファイルを作成します。 &#60;asmbase.c&#62; #include &#60;stdio.h&#62; int add(int a, int b) {     return a + b; } int sub(int a, int b) {     return a - b; } int mul(int a, int b) {     return a * b; } int div(int a, int b) {     return a / b; } float fadd(float a, float b) [...]]]></description>
			<content:encoded><![CDATA[<p>Ubuntuでアセンブラを始めて見ようと思ったのですが、存在する情報がVistualStudioのインラインアセンブラを前提にしたものばかりでそれ以外のアセンブラ（今回はnasm）での情報がほとんど有りません。</p>
<p>なのでまずC言語でコンパイルした実効ファイルを逆アセンブルしてアセンブルソースを読み解く方法で進めます。</p>
<p>まず以下のC言語のソースから実行ファイルを作成します。</p>
<p>&lt;asmbase.c&gt;</p>
<pre>#include &lt;stdio.h&gt;
int add(int a, int b) {
    return a + b;
}
int sub(int a, int b) {
    return a - b;
}
int mul(int a, int b) {
    return a * b;
}
int div(int a, int b) {
    return a / b;
}
float fadd(float a, float b) {
    return a + b;
}
float fsub(float a, float b) {
    return a - b;
}
float fmul(float a, float b) {
    return a * b;
}
float fdiv(float a, float b) {
    return a / b;
}
int main() {
    int i1 = 20, i2 = 4, i3;
    float f1 = 1.5,f2 = 0.3,f3;

    i3 = add(i1, i2);
    printf("add(%d, %d)=%d\n", i1, i2, i3);
    i3 = sub(i1, i2);
    printf("sub(%d, %d)=%d\n", i1, i2, i3);
    i3 = mul(i1, i2);
    printf("mul(%d, %d)=%d\n", i1, i2, i3);
    i3 = div(i1, i2);
    printf("div(%d, %d)=%d\n", i1, i2, i3);

    f3 = fadd(f1, f2);
    printf("fadd(%f, %f)=%f\n", f1, f2, f3);
    f3 = fsub(f1, f2);
    printf("fsub(%f, %f)=%f\n", f1, f2, f3);
    f3 = fmul(f1, f2);
    printf("fmul(%f, %f)=%f\n", f1, f2, f3);
    f3 = fdiv(f1, f2);
    printf("fdiv(%f, %f)=%f\n", f1, f2, f3);
}</pre>
<p><code><br />
$ gcc -o asmbase asmbase.c<br />
$ ./asmbase<br />
add(20, 4)=24<br />
sub(20, 4)=16<br />
mul(20, 4)=80<br />
div(20, 4)=5<br />
fadd(1.500000, 0.300000)=1.800000<br />
fsub(1.500000, 0.300000)=1.200000<br />
fmul(1.500000, 0.300000)=0.450000<br />
fdiv(1.500000, 0.300000)=5.000000</code></p>
<p>まずasmbaseという実行可能ファイルを作成しました。このファイルを解析します。</p>
<p><code><br />
$ objdump -S asmbase</code></p>
<p>（一部抜粋）</p>
<pre>~
0804842e &lt;fadd&gt;:
 804842e:	55                   	push   %ebp
 804842f:	89 e5                	mov    %esp,%ebp
 8048431:	d9 45 08             	flds   0x8(%ebp)
 8048434:	d8 45 0c             	fadds  0xc(%ebp)
 8048437:	5d                   	pop    %ebp
 8048438:	c3                   	ret
~</pre>
<p>fadd()という関数だけ抜き出してみました。この状態だとAT＆T形式（だっけか？）なのでINTEL形式で表示させ直します。私はこの表記の違いでつまづきました。</p>
<p><code>$ objdump -M intel -S asmbase</code></p>
<pre>~
0804842e &lt;fadd&gt;:
 804842e:	55                   	push   ebp
 804842f:	89 e5                	mov    ebp,esp
 8048431:	d9 45 08             	fld    DWORD PTR [ebp+0x8]
 8048434:	d8 45 0c             	fadd   DWORD PTR [ebp+0xc]
 8048437:	5d                   	pop    ebp
 8048438:	c3                   	ret
~</pre>
<p>２つまったく違う表記になりました。特にmovは順番が違います。もちろん意味としては一緒です。内容については詳しく説明できるほど知識が無く、説明できないくて申し訳ないです。</p>
<p>次にこれをもとにCとアセンブラコードを書きます。</p>
<p>&lt;main.c&gt;</p>
<pre>#include &lt;stdio.h&gt;

// extern 宣言でアセンブラ内の関数を読み込む
extern int _add(int a, int b);
extern int _sub(int a, int b);
extern int _mul(int a, int b);
extern int _div(int a, int b);
extern float _fadd(float a, float b);
extern float _fsub(float a, float b);
extern float _fmul(float a, float b);
extern float _fdiv(float a, float b);

int main () {
	int i1 = 20, i2 = 4, i3;
	float f1 = 1.5,f2 = 0.3,f3;

	i3 = _add(i1, i2);
	printf("add(%d, %d)=%d\n", i1, i2, i3);
	i3 = _sub(i1, i2);
	printf("sub(%d, %d)=%d\n", i1, i2, i3);
	i3 = _mul(i1, i2);
	printf("mul(%d, %d)=%d\n", i1, i2, i3);
	i3 = _div(i1, i2);
	printf("div(%d, %d)=%d\n", i1, i2, i3);

	f3 = _fadd(f1, f2);
	printf("fadd(%f, %f)=%f\n", f1, f2, f3);
	f3 = _fsub(f1, f2);
	printf("fsub(%f, %f)=%f\n", f1, f2, f3);
	f3 = _fmul(f1, f2);
	printf("fmul(%f, %f)=%f\n", f1, f2, f3);
	f3 = _fdiv(f1, f2);
	printf("fdiv(%f, %f)=%f\n", f1, f2, f3);
    return 0;
}</pre>
<p>&lt;sub.s&gt;</p>
<pre>    bits 32
	global _add
	global _sub
	global _mul
	global _div
	global _fadd
	global _fsub
	global _fmul
	global _fdiv

    ;; start program area
    section .text

    ;; global functions

_add: ; 二つの引数を足す
    MOV		EDX,[ESP+4]
    ADD		EDX, [ESP+8]
    MOV		EAX, EDX
    RET

_sub: ; 二つの引数をかける
    MOV		EDX,[ESP+4]
    sub		EDX, [ESP+8]
    MOV		EAX, EDX
    RET

_mul: ; 二つの引数をかける
    MOV		eax,[ESP+4]
    mov		ebx,[ESP+8]
    mul		ebx
    RET

_div: ; 二つの引数をかける
    MOV		eax,[ESP+4]
    mov		ebx,[ESP+8]
    div		ebx
    RET

_fadd: ; 2つの実数を足す
	push	ebp
	mov		ebp, esp
	fld		DWORD [ebp+8]
	fadd	DWORD [ebp+12]
	pop		ebp
    RET

_fsub: ; 2つの実数を引く
	push	ebp
	mov		ebp, esp
	fld		DWORD [ebp+8]
	fsub	DWORD [ebp+12]
	pop		ebp
    RET

_fmul: ; 2つの実数を掛ける
	push	ebp
	mov		ebp, esp
	fld		DWORD [ebp+8]
	fmul	DWORD [ebp+12]
	pop		ebp
    RET

_fdiv: ; 2つの実数を割る
	push	ebp
	mov		ebp, esp
	fld		DWORD [ebp+8]
	fdiv	DWORD [ebp+12]
	pop		ebp
    RET</pre>
<p>上記2つのコードをビルドします。</p>
<p><code> $ gcc -o main.o -c main.c<br />
$ nasm -f elf32 -o sub.o sub.s<br />
$ gcc -o main main.o sub.o<br />
$ ./main</code></p>
<p>実行結果</p>
<p><code> add(20, 4)=24<br />
sub(20, 4)=16<br />
mul(20, 4)=80<br />
div(20, 4)=5<br />
fadd(1.500000, 0.300000)=1.800000<br />
fsub(1.500000, 0.300000)=1.200000<br />
fmul(1.500000, 0.300000)=0.450000<br />
fdiv(1.500000, 0.300000)=5.000000</code></p>
<p>とCのソースからアセンブラのソースが呼び出せました。</p>
]]></content:encoded>
			<wfw:commentRss>http://ict-start.com/blog/?feed=rss2&#038;p=363</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPの処理の確かめスクリプト</title>
		<link>http://ict-start.com/blog/?p=360</link>
		<comments>http://ict-start.com/blog/?p=360#comments</comments>
		<pubDate>Sat, 14 Jan 2012 12:58:46 +0000</pubDate>
		<dc:creator>堀松 巧也</dc:creator>
				<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://ict-start.com/blog/?p=360</guid>
		<description><![CDATA[PHPの処理系で分からない部分があったので確かめる処理を書いてみました。特に&#8221;0x0A&#8221;と&#8221;10&#8243;を単純に文字比較すると等しいと判定されるので注意が必要です。 実行環境はWindows7 PHP5.3.5です。 PHPのソース（SHIFT-JIS） &#60;?php echo '"0x0A" == "10"'." =&#62; ".var_export("0x0A" == "10", true).PHP_EOL; echo '"0x0A" === "10"'." =&#62; ".var_export("0x0A" === "10", true).PHP_EOL; echo '"0x0A" == 10'." =&#62; ".var_export("0x0A" == 10, true).PHP_EOL; echo '"0x0A" === 10'." =&#62; ".var_export("0x0A" === 10, true).PHP_EOL; echo '10 == "10"'." =&#62; ".var_export(10 == "10", true).PHP_EOL; echo '10 === "10"'." =&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>PHPの処理系で分からない部分があったので確かめる処理を書いてみました。特に&#8221;0x0A&#8221;と&#8221;10&#8243;を単純に文字比較すると等しいと判定されるので注意が必要です。</p>
<p>実行環境はWindows7 PHP5.3.5です。</p>
<p>PHPのソース（SHIFT-JIS）</p>
<p><code>&lt;?php<br />
echo '"0x0A" == "10"'." =&gt; ".var_export("0x0A" == "10", true).PHP_EOL;<br />
echo '"0x0A" === "10"'." =&gt; ".var_export("0x0A" === "10", true).PHP_EOL;<br />
echo '"0x0A" == 10'." =&gt; ".var_export("0x0A" == 10, true).PHP_EOL;<br />
echo '"0x0A" === 10'." =&gt; ".var_export("0x0A" === 10, true).PHP_EOL;<br />
echo '10 == "10"'." =&gt; ".var_export(10 == "10", true).PHP_EOL;<br />
echo '10 === "10"'." =&gt; ".var_export(10 === "10", true).PHP_EOL;<br />
echo '10 == "a"'." =&gt; ".var_export(10 == "a", true).PHP_EOL;<br />
echo '10 === "a"'." =&gt; ".var_export(10 === "a", true).PHP_EOL;<br />
echo '"00" == "0"'." =&gt; ".var_export("00" == "0", true).PHP_EOL;<br />
echo '"-0" == "00000"'." =&gt; ".var_export("-0" == "00000", true).PHP_EOL;<br />
echo '"00" === "0"'." =&gt; ".var_export("00" === "0", true).PHP_EOL;<br />
echo '"-0" === "00000"'." =&gt; ".var_export("-0" === "00000", true).PHP_EOL;<br />
echo 'false == 0'." =&gt; ".var_export(false == 0, true).PHP_EOL;<br />
echo 'NULL == 0'." =&gt; ".var_export(NUll == 0, true).PHP_EOL;<br />
echo 'false === 0'." =&gt; ".var_export(false === 0, true).PHP_EOL;<br />
echo 'NULL === 0'." =&gt; ".var_export(NUll === 0, true).PHP_EOL;<br />
echo 'NULL == false'." =&gt; ".var_export(NUll == false, true).PHP_EOL;<br />
echo 'NULL === false'." =&gt; ".var_export(NUll === false, true).PHP_EOL;<br />
echo '$bool = false'.PHP_EOL;($bool = false);<br />
echo 'isset($bool)'." =&gt; ".var_export(isset($bool), true).PHP_EOL;<br />
echo '$bool = NULL'.PHP_EOL;($bool = NULL);<br />
echo 'isset($bool)'." =&gt; ".var_export(isset($bool), true).PHP_EOL;<br />
echo '$bool = 0'.PHP_EOL;($bool = 0);<br />
echo 'isset($bool)'." =&gt; ".var_export(isset($bool), true).PHP_EOL;</code></p>
<p><code>echo PHP_EOL;</code></p>
<p><code> </code></p>
<p><code>echo 'is_int(10)'." =&gt; ".var_export(is_int(10), true).PHP_EOL;<br />
echo 'is_int("10")'." =&gt; ".var_export(is_int("10"), true).PHP_EOL;<br />
echo 'is_string("10")'." =&gt; ".var_export(is_string("10"), true).PHP_EOL;<br />
echo 'is_int(true)'." =&gt; ".var_export(is_int(true), true).PHP_EOL;<br />
echo 'is_int(false)'." =&gt; ".var_export(is_int(false), true).PHP_EOL;<br />
echo 'is_int("true")'." =&gt; ".var_export(is_int("true"), true).PHP_EOL;<br />
echo 'is_int("false")'." =&gt; ".var_export(is_int("false"), true).PHP_EOL;<br />
echo 'is_string(true)'." =&gt; ".var_export(is_string(true), true).PHP_EOL;<br />
echo 'is_string(false)'." =&gt; ".var_export(is_string(false), true).PHP_EOL;<br />
echo 'is_string("true")'." =&gt; ".var_export(is_string("true"), true).PHP_EOL;<br />
echo 'is_string("false")'." =&gt; ".var_export(is_string("false"), true).PHP_EOL;<br />
echo 'is_bool(true)'." =&gt; ".var_export(is_bool(true), true).PHP_EOL;<br />
echo 'is_bool(false)'." =&gt; ".var_export(is_bool(false), true).PHP_EOL;<br />
echo 'is_bool("true")'." =&gt; ".var_export(is_bool("true"), true).PHP_EOL;<br />
echo 'is_bool("false")'." =&gt; ".var_export(is_bool("false"), true).PHP_EOL;<br />
echo 'is_bool(0)'." =&gt; ".var_export(is_bool(0), true).PHP_EOL;<br />
echo 'is_bool(1)'." =&gt; ".var_export(is_bool(1), true).PHP_EOL;<br />
echo PHP_EOL;</code></p>
<p><code>echo '@is_int(A)'." =&gt; ".var_export(@is_int(A), true).PHP_EOL;<br />
echo '@is_string(A)'." =&gt; ".var_export(@is_string(A), true).PHP_EOL;<br />
echo PHP_EOL;</code></p>
<p><code> </code></p>
<p><code>$str = '<br />
$var = NULL;<br />
if($var) $res = true;<br />
else $res = false;<br />
return $res;';<br />
echo $str."  =&gt;  ".var_export(eval($str), true).PHP_EOL;</code></p>
<p><code>$str = '<br />
$var = 0;<br />
if($var) $res = true;<br />
else $res = false;<br />
return $res;';<br />
echo $str."  =&gt;  ".var_export(eval($str), true).PHP_EOL;</code></p>
<p><code>$str = '<br />
$var = 1;<br />
if($var) $res = true;<br />
else $res = false;<br />
return $res;';<br />
echo $str."  =&gt;  ".var_export(eval($str), true).PHP_EOL;</code></p>
<p><code>$str = '<br />
$var = -1;<br />
if($var) $res = true;<br />
else $res = false;<br />
return $res;';<br />
echo $str."  =&gt;  ".var_export(eval($str), true).PHP_EOL;</p>
<p>$str = '<br />
$var = "";<br />
if($var) $res = true;<br />
else $res = false;<br />
return $res;';<br />
echo $str."  =&gt;  ".var_export(eval($str), true).PHP_EOL;</p>
<p>$str = '<br />
$var = array();<br />
if($var) $res = true;<br />
else $res = false;<br />
return $res;';<br />
echo $str."  =&gt;  ".var_export(eval($str), true).PHP_EOL;</p>
<p>$str = '<br />
$var = array(1);<br />
if($var) $res = true;<br />
else $res = false;<br />
return $res;';<br />
echo $str."  =&gt;  ".var_export(eval($str), true).PHP_EOL;</p>
<p>echo PHP_EOL;</p>
<p>echo 'strlen("あいう")'." =&gt; ".var_export(strlen("あいう"), true).PHP_EOL;<br />
echo 'mb_strlen("あいう")'." =&gt; ".var_export(mb_strlen("あいう"), true).PHP_EOL;</p>
<p>echo PHP_EOL;<br />
echo 'mb_language("Japanese");'.PHP_EOL;<br />
mb_language("Japanese");</p>
<p>echo 'strlen("あいう")'." =&gt; ".var_export(strlen("あいう"), true).PHP_EOL;<br />
echo 'mb_strlen("あいう")'." =&gt; ".var_export(mb_strlen("あいう"), true).PHP_EOL;</p>
<p>echo PHP_EOL;<br />
echo 'mb_internal_encoding("SHIFT-JIS");'.PHP_EOL;<br />
mb_internal_encoding("SHIFT-JIS");</p>
<p>echo 'strlen("あいう")'." =&gt; ".var_export(strlen("あいう"), true).PHP_EOL;<br />
echo 'mb_strlen("あいう")'." =&gt; ".var_export(mb_strlen("あいう"), true).PHP_EOL;</p>
<p>echo PHP_EOL;</p>
<p>echo '$str = "abc"'.PHP_EOL;$str = "abc";<br />
echo '$str{0}'." =&gt; ".var_export($str{0}, true).PHP_EOL;<br />
echo '$str = "あいう"'.PHP_EOL;$str = "あいう";<br />
echo '$str{0}'." =&gt; ".var_export($str{0}, true).PHP_EOL;</p>
<p>echo PHP_EOL;</p>
<p>$str = "abcd";<br />
echo 'unpack("C*", "'.$str.'") =&gt; '.var_export(unpack("C*", $str), true).PHP_EOL;</p>
<p>echo PHP_EOL;<br />
echo 'pack("C*", 97, 98, 99, 100) =&gt; '.var_export(pack("C*", 97, 98, 99, 100), true).PHP_EOL;</p>
<p>echo PHP_EOL;<br />
echo 'pack("C*", 97, 98, 0, 99, 100) =&gt; '.var_export(pack("C*", 97, 98, 0, 99, 100), true).PHP_EOL;</p>
<p>echo PHP_EOL;<br />
$str = pack("C*", 97, 98, 0, 99, 100);<br />
echo '$str = pack("C*", 97, 98, 0, 99, 100)'.PHP_EOL;<br />
echo 'is_string($str)  =&gt;  '.var_export(is_string($str), true).PHP_EOL;<br />
echo 'strlen($str)  =&gt;  '.var_export(strlen($str), true).PHP_EOL;<br />
echo 'mb_strlen($str)  =&gt;  '.var_export(mb_strlen($str), true).PHP_EOL;<br />
echo 'strstr($str, "\0")  =&gt;  '.var_export(strstr($str, "\0"), true).PHP_EOL;<br />
echo 'unpack("C*", $str) =&gt; '.var_export(unpack("C*", $str), true).PHP_EOL;</p>
<p></code></p>
<p>&nbsp;</p>
<p><code>echo 'str_replace("\0", "-", $str) =&gt; '.var_export(str_replace("\0", "-", $str), true).PHP_EOL;</code></p>
<p>実行結果</p>
<p><code><br />
"0x0A" == "10" =&gt; true<br />
"0x0A" === "10" =&gt; false<br />
"0x0A" == 10 =&gt; true<br />
"0x0A" === 10 =&gt; false<br />
10 == "10" =&gt; true<br />
10 === "10" =&gt; false<br />
10 == "a" =&gt; false<br />
10 === "a" =&gt; false<br />
"00" == "0" =&gt; true<br />
"-0" == "00000" =&gt; true<br />
"00" === "0" =&gt; false<br />
"-0" === "00000" =&gt; false<br />
false == 0 =&gt; true<br />
NULL == 0 =&gt; true<br />
false === 0 =&gt; false<br />
NULL === 0 =&gt; false<br />
NULL == false =&gt; true<br />
NULL === false =&gt; false<br />
$bool = false<br />
isset($bool) =&gt; true<br />
$bool = NULL<br />
isset($bool) =&gt; false<br />
$bool = 0<br />
isset($bool) =&gt; true</code></p>
<p><code>is_int(10) =&gt; true<br />
is_int("10") =&gt; false<br />
is_string("10") =&gt; true<br />
is_int(true) =&gt; false<br />
is_int(false) =&gt; false<br />
is_int("true") =&gt; false<br />
is_int("false") =&gt; false<br />
is_string(true) =&gt; false<br />
is_string(false) =&gt; false<br />
is_string("true") =&gt; true<br />
is_string("false") =&gt; true<br />
is_bool(true) =&gt; true<br />
is_bool(false) =&gt; true<br />
is_bool("true") =&gt; false<br />
is_bool("false") =&gt; false<br />
is_bool(0) =&gt; false<br />
is_bool(1) =&gt; false</code></p>
<p><code>@is_int(A) =&gt; false<br />
@is_string(A) =&gt; true</p>
<p>$var = NULL;<br />
if($var) $res = true;<br />
else $res = false;<br />
return $res;  =&gt;  false</p>
<p>$var = 0;<br />
if($var) $res = true;<br />
else $res = false;<br />
return $res;  =&gt;  false</p>
<p>$var = 1;<br />
if($var) $res = true;<br />
else $res = false;<br />
return $res;  =&gt;  true</p>
<p>$var = -1;<br />
if($var) $res = true;<br />
else $res = false;<br />
return $res;  =&gt;  true</p>
<p>$var = "";<br />
if($var) $res = true;<br />
else $res = false;<br />
return $res;  =&gt;  false</p>
<p>$var = array();<br />
if($var) $res = true;<br />
else $res = false;<br />
return $res;  =&gt;  false</p>
<p>$var = array(1);<br />
if($var) $res = true;<br />
else $res = false;<br />
return $res;  =&gt;  true</p>
<p>strlen("あいう") =&gt; 6<br />
mb_strlen("あいう") =&gt; 6</p>
<p>mb_language("Japanese");<br />
strlen("あいう") =&gt; 6<br />
mb_strlen("あいう") =&gt; 6</p>
<p>mb_internal_encoding("SHIFT-JIS");<br />
strlen("あいう") =&gt; 6<br />
mb_strlen("あいう") =&gt; 3</p>
<p>$str = "abc"<br />
$str{0} =&gt; 'a'<br />
$str = "あいう"<br />
$str{0} =&gt; '・</p>
<p>unpack("C*", "abcd") =&gt; array (<br />
1 =&gt; 97,<br />
2 =&gt; 98,<br />
3 =&gt; 99,<br />
4 =&gt; 100,<br />
)</p>
<p>pack("C*", 97, 98, 99, 100) =&gt; 'abcd'</p>
<p>pack("C*", 97, 98, 0, 99, 100) =&gt; 'ab' . "\0" . 'cd'</p>
<p></code></p>
<p>&nbsp;</p>
<p><code>$str = pack("C*", 97, 98, 0, 99, 100)<br />
is_string($str)  =&gt;  true<br />
strlen($str)  =&gt;  5<br />
mb_strlen($str)  =&gt;  5<br />
strstr($str, "\0")  =&gt;  '' . "\0" . 'cd'<br />
unpack("C*", $str) =&gt; array (<br />
1 =&gt; 97,<br />
2 =&gt; 98,<br />
3 =&gt; 0,<br />
4 =&gt; 99,<br />
5 =&gt; 100,<br />
)<br />
str_replace("\0", "-", $str) =&gt; 'ab-cd'<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://ict-start.com/blog/?feed=rss2&#038;p=360</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>canvasタグの座標変換</title>
		<link>http://ict-start.com/blog/?p=333</link>
		<comments>http://ict-start.com/blog/?p=333#comments</comments>
		<pubDate>Thu, 29 Sep 2011 13:08:51 +0000</pubDate>
		<dc:creator>堀松 巧也</dc:creator>
				<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://ict-start.com/blog/?p=333</guid>
		<description><![CDATA[下記のようなグラフを出力するのに座標変換を使って描画してみました。 function&#160;paint(){ &#160;&#160;&#160;&#160;ctx.strokeStyle&#160;=&#160;&#8220;#333333&#8243;; &#160;&#160;&#160;&#160;ctx.lineWidth&#160;=&#160;1; &#160;&#160;&#160;&#160;//&#160;X &#160;&#160;&#160;&#160;ctx.beginPath(); &#160;&#160;&#160;&#160;ctx.moveTo(0,&#160;h&#160;/&#160;2); &#160;&#160;&#160;&#160;ctx.lineTo(w,&#160;h&#160;/&#160;2); &#160;&#160;&#160;&#160;ctx.stroke(); &#160;&#160;&#160;&#160;//&#160;Y &#160;&#160;&#160;&#160;ctx.beginPath(); &#160;&#160;&#160;&#160;ctx.moveTo(w&#160;/&#160;2,&#160;0); &#160;&#160;&#160;&#160;ctx.lineTo(w&#160;/&#160;2,&#160;h); &#160;&#160;&#160;&#160;ctx.stroke(); &#160;&#160;&#160;&#160;//&#160;CANVASの中心を(0,0)に指定 &#160;&#160;&#160;&#160;ctx.setTransform(1,&#160;0,&#160;0,&#160;1,&#160;w&#160;/&#160;2,&#160;h&#160;/&#160;2); &#160;&#160;&#160;&#160;ctx.textAlign&#160;=&#160;&#8220;right&#8221;; &#160;&#160;&#160;&#160;//&#160;文字の傾き角度 &#160;&#160;&#160;&#160;var&#160;deg&#160;=&#160;-80; &#160;&#160;&#160;&#160;var&#160;seata&#160;=&#160;deg&#160;*&#160;Math.PI&#160;/&#160;180; &#160;&#160;&#160;&#160;ctx.rotate(seata); &#160;&#160;&#160;&#160;for(var&#160;i&#160;=&#160;-10;i&#160;]]></description>
			<content:encoded><![CDATA[<p>下記のようなグラフを出力するのに座標変換を使って描画してみました。</p>
<p><a href="http://ict-start.com/blog/wp-content/uploads/2011/09/canvas.png"><img class="alignnone size-medium wp-image-334" title="canvas" src="http://ict-start.com/blog/wp-content/uploads/2011/09/canvas-300x214.png" alt="" width="300" height="214" /></a></p>
<div style='color:#333;border-left:solid 3px #3f8;font-weight:bold;font-size:10px;margin:0px;padding:0px;line-height:1em;'>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>function&nbsp;paint(){</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;ctx.strokeStyle&nbsp;=&nbsp;<span style='color:#383;'>&#8220;#333333&#8243;</b>;</p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;ctx.lineWidth&nbsp;=&nbsp;1;</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'></p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:#383;'>//&nbsp;X</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'></b>&nbsp;&nbsp;&nbsp;&nbsp;ctx.beginPath();</p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;ctx.moveTo(0,&nbsp;h&nbsp;/&nbsp;2);</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;ctx.lineTo(w,&nbsp;h&nbsp;/&nbsp;2);</p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;ctx.stroke();</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'></p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:#383;'>//&nbsp;Y</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'></b>&nbsp;&nbsp;&nbsp;&nbsp;ctx.beginPath();</p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;ctx.moveTo(w&nbsp;/&nbsp;2,&nbsp;0);</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;ctx.lineTo(w&nbsp;/&nbsp;2,&nbsp;h);</p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;ctx.stroke();</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'></p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:#383;'>//&nbsp;CANVASの中心を(0,0)に指定</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'></b>&nbsp;&nbsp;&nbsp;&nbsp;ctx.setTransform(1,&nbsp;0,&nbsp;0,&nbsp;1,&nbsp;w&nbsp;/&nbsp;2,&nbsp;h&nbsp;/&nbsp;2);</p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'></p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;ctx.textAlign&nbsp;=&nbsp;<span style='color:#383;'>&#8220;right&#8221;</b>;</p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:#383;'>//&nbsp;文字の傾き角度</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'></b>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;deg&nbsp;=&nbsp;-80;</p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;seata&nbsp;=&nbsp;deg&nbsp;*&nbsp;Math.PI&nbsp;/&nbsp;180;</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;ctx.rotate(seata);</p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;for(var&nbsp;i&nbsp;=&nbsp;-10;i&nbsp;<=&nbsp;10;i&nbsp;+=&nbsp;1)&nbsp;{</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;y&nbsp;=&nbsp;10;</p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;x&nbsp;=&nbsp;i&nbsp;*&nbsp;35;</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;d&nbsp;=&nbsp;Math.sqrt(Math.pow(x,&nbsp;2)&nbsp;+&nbsp;Math.pow(y,&nbsp;2));</p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;tan&nbsp;=&nbsp;Math.atan2(y,&nbsp;x);</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;x2&nbsp;=&nbsp;d&nbsp;*&nbsp;Math.cos(tan&nbsp;-&nbsp;seata);</p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;y2&nbsp;=&nbsp;d&nbsp;*&nbsp;Math.sin(tan&nbsp;-&nbsp;seata);</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctx.fillText(i.toFixed(1),&nbsp;x2,&nbsp;y2);</p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;ctx.rotate(-seata);</p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'></p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:#383;'>//&nbsp;Y座標を反転し、CANVASの中心を(0,0)に指定</p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'></b>&nbsp;&nbsp;&nbsp;&nbsp;ctx.setTransform(1,&nbsp;0,&nbsp;0,&nbsp;-1,&nbsp;w&nbsp;/&nbsp;2,&nbsp;h&nbsp;/&nbsp;2);</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'></p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;<span style='color:#383;'>//&nbsp;グラフ描画</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'></b>&nbsp;&nbsp;&nbsp;&nbsp;ctx.beginPath();</p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;ctx.strokeStyle&nbsp;=&nbsp;<span style='color:#383;'>&#8220;#ff6633&#8243;</b>;</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;for(var&nbsp;i&nbsp;=&nbsp;-10;i&nbsp;<&nbsp;10;i&nbsp;+=&nbsp;0.01)&nbsp;{</p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;y&nbsp;=&nbsp;i&nbsp;*&nbsp;i&nbsp;*&nbsp;2.5;</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;x&nbsp;=&nbsp;i&nbsp;*&nbsp;35;</p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctx.lineTo(x,&nbsp;y);</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;ctx.stroke();</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'>}</p>
</div>
<p>グラフを出力するならば-Xから+Xの間の値を取れると楽なのでsetTransformの第5,6引数にて座標をずらします。そしてcanvasはもともと下方向に+Yが向いているので第４引数に-1を渡すことによって上方向を+Yにしています。setTransformを使用することによってグラフの座標処理を簡単にします。</p>
<p>またX軸の目盛りは文字を80度傾けています。傾けるといってもrotateでは描画すべてを傾けて描画するため、傾いたあとの補正する値を計算します。</p>
<p><a href="http://ict-start.com/graphtest.html">サンプル</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ict-start.com/blog/?feed=rss2&#038;p=333</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>半導体の売り上げシェアをグラフにしてみた</title>
		<link>http://ict-start.com/blog/?p=326</link>
		<comments>http://ict-start.com/blog/?p=326#comments</comments>
		<pubDate>Sat, 17 Sep 2011 12:00:21 +0000</pubDate>
		<dc:creator>堀松 巧也</dc:creator>
				<category><![CDATA[半導体]]></category>

		<guid isPermaLink="false">http://ict-start.com/blog/?p=326</guid>
		<description><![CDATA[Wikipediaにあります半導体メーカの売り上げを年毎にプロットしたグラフを作ってみました。 半導体メーカー売上高ランキング まず1987年から1996年までのトップ10の売上高をグラフにしました。 1987年は上位をNEC、東芝、日立と日本企業が占めていました。1992年にIntelに首位を奪われてからは一度も奪還できていないばかりかさらに差をつけられてしまいます。 次は1994年から2002年の売り上げですが、完全にIntelに独走を許しており2位以下の企業は売り上げを伸ばすことができていませんでした。Intelの地位が確固たるものとなりました。 最後は2000年から2010年の売り上げです。Intelは変わらず首位をキープしていますが、背後にはサムスン電子の足跡が忍び寄ります。3位以下の企業は混戦状態で順位の変動が激しい状態です。 今までIntelはPCの売り上げによって支えられてきました。これからはスマートフォンの時代になりスマートフォン用のCPUを販売していないIntelにとっては不利なように見えますが、私にはそれは一要因でしかなく、どのようなソフトウェアがどのデバイスをサポートするかで変わると思っています。 今後も気になる分野です。 参考： 日本「半導体」の凋落とともに歩んだ技術者人生 世界シェア50％を誇った日本の半導体はどこへ]]></description>
			<content:encoded><![CDATA[<p>Wikipediaにあります半導体メーカの売り上げを年毎にプロットしたグラフを作ってみました。</p>
<p><a href="http://ja.wikipedia.org/wiki/%E5%8D%8A%E5%B0%8E%E4%BD%93%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC%E5%A3%B2%E4%B8%8A%E9%AB%98%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0">半導体メーカー売上高ランキング</a></p>
<p>まず1987年から1996年までのトップ10の売上高をグラフにしました。</p>
<p><a href="http://ict-start.com/blog/wp-content/uploads/2011/09/graph1.png"><img class="alignnone size-medium wp-image-327" title="graph1" src="http://ict-start.com/blog/wp-content/uploads/2011/09/graph1-300x154.png" alt="" width="300" height="154" /></a></p>
<p>1987年は上位をNEC、東芝、日立と日本企業が占めていました。1992年にIntelに首位を奪われてからは一度も奪還できていないばかりかさらに差をつけられてしまいます。</p>
<p><a href="http://ict-start.com/blog/wp-content/uploads/2011/09/graph2.png"><img class="alignnone size-medium wp-image-328" title="graph2" src="http://ict-start.com/blog/wp-content/uploads/2011/09/graph2-300x152.png" alt="" width="300" height="152" /></a></p>
<p>次は1994年から2002年の売り上げですが、完全にIntelに独走を許しており2位以下の企業は売り上げを伸ばすことができていませんでした。Intelの地位が確固たるものとなりました。</p>
<p><a href="http://ict-start.com/blog/wp-content/uploads/2011/09/graph3.png"><img class="alignnone size-medium wp-image-329" title="graph3" src="http://ict-start.com/blog/wp-content/uploads/2011/09/graph3-300x153.png" alt="" width="300" height="153" /></a></p>
<p>最後は2000年から2010年の売り上げです。Intelは変わらず首位をキープしていますが、背後にはサムスン電子の足跡が忍び寄ります。3位以下の企業は混戦状態で順位の変動が激しい状態です。</p>
<p>今までIntelはPCの売り上げによって支えられてきました。これからはスマートフォンの時代になりスマートフォン用のCPUを販売していないIntelにとっては不利なように見えますが、私にはそれは一要因でしかなく、どのようなソフトウェアがどのデバイスをサポートするかで変わると思っています。</p>
<p>今後も気になる分野です。</p>
<p>参考：</p>
<p><a href="http://jbpress.ismedia.jp/articles/-/2229">日本「半導体」の凋落とともに歩んだ技術者人生 世界シェア50％を誇った日本の半導体はどこへ</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ict-start.com/blog/?feed=rss2&#038;p=326</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RubyでHTMLを解釈するライブラリ[Hpricot]を使う</title>
		<link>http://ict-start.com/blog/?p=313</link>
		<comments>http://ict-start.com/blog/?p=313#comments</comments>
		<pubDate>Thu, 01 Sep 2011 11:38:54 +0000</pubDate>
		<dc:creator>堀松 巧也</dc:creator>
				<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://ict-start.com/blog/?p=313</guid>
		<description><![CDATA[環境CentOS まずバージョンの確認 #cat&#160;/etc/redhat-release CentOS&#160;release&#160;5.5&#160;(Final) #&#160;ruby&#160;-v ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux] ←Rubyが1.8.7でなければアップデートする #gem&#160;-v 1.3.7 ←rubygemsが1.3.7では無ければアップデートする #&#160;yum&#160;remove&#160;ruby-libs #&#160;wget&#160;ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p352.tar.gz #&#160;tar&#160;xvf&#160;ruby-1.8.7-p352.tar.gz #&#160;cd&#160;ruby-1.8.7-p352 #&#160;./configure&#160;&#8211;prefix=/usr #&#160;make #&#160;make&#160;install #&#160;wget&#160;http://rubyforge.org/frs/download.php/75308/rubygems-update-1.8.10.gem #&#160;gem&#160;install&#160;rubygems-update-1.8.10.gem&#160;&#8211;local #&#160;git&#160;clone&#160;git://github.com/thbar/hpricot.git #&#160;cd&#160;hpricot #&#160;ruby&#160;setup.rb インストールが完了したのでこちらのサイトのようにHpricotを使えます。 ついでに、 Rubyをソースからインストールすると、Rails起動時にOpensslが無いと言われるのでOpenSSLをインストールします。 OpenSSLはRubyのソースフォルダにあります。 #&#160;cd&#160;ruby-1.8.7-p352/ext/openssl/ #&#160;ruby&#160;extconf.rb #&#160;make #&#160;make&#160;install あと、SQLite3もインストール #&#160;yum&#160;install&#160;sqlite-devel #&#160;gem&#160;install&#160;sqlite3-ruby&#160;-v&#160;1.2.5]]></description>
			<content:encoded><![CDATA[<p>環境CentOS</p>
<p>まずバージョンの確認</p>
<div style='color:white;border:solid 3px #aaa;font-weight:bold;font-size:10px;margin:0px;padding:5px;line-height:1em;background-color:#111;'>#cat&nbsp;/etc/redhat-release<br />
CentOS&nbsp;release&nbsp;5.5&nbsp;(Final)<br />
#&nbsp;ruby&nbsp;-v</div>
<p><span style="color: #ff0000;">ruby 1.8.7 (2011-06-30 patchlevel 352) [x86_64-linux]</span> ←Rubyが1.8.7でなければアップデートする</p>
<div style='color:white;border:solid 3px #aaa;font-weight:bold;font-size:10px;margin:0px;padding:5px;line-height:1em;background-color:#111;'>#gem&nbsp;-v</div>
<p><span style="color: #ff0000;">1.3.7</span> ←rubygemsが1.3.7では無ければアップデートする</p>
<div style='color:white;border:solid 3px #aaa;font-weight:bold;font-size:10px;margin:0px;padding:5px;line-height:1em;background-color:#111;'>#&nbsp;yum&nbsp;remove&nbsp;ruby-libs<br />
#&nbsp;wget&nbsp;ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p352.tar.gz<br />
#&nbsp;tar&nbsp;xvf&nbsp;ruby-1.8.7-p352.tar.gz<br />
#&nbsp;cd&nbsp;ruby-1.8.7-p352<br />
#&nbsp;./configure&nbsp;&#8211;prefix=/usr<br />
#&nbsp;make<br />
#&nbsp;make&nbsp;install<br />
#&nbsp;wget&nbsp;http://rubyforge.org/frs/download.php/75308/rubygems-update-1.8.10.gem<br />
#&nbsp;gem&nbsp;install&nbsp;rubygems-update-1.8.10.gem&nbsp;&#8211;local<br />
#&nbsp;git&nbsp;clone&nbsp;git://github.com/thbar/hpricot.git<br />
#&nbsp;cd&nbsp;hpricot<br />
#&nbsp;ruby&nbsp;setup.rb</div>
<p>インストールが完了したので<a href="http://route477.net/d/?date=20070205">こちらのサイト</a>のようにHpricotを使えます。</p>
<p>ついでに、</p>
<p>Rubyをソースからインストールすると、Rails起動時にOpensslが無いと言われるのでOpenSSLをインストールします。</p>
<p>OpenSSLはRubyのソースフォルダにあります。</p>
<div style='color:white;border:solid 3px #aaa;font-weight:bold;font-size:10px;margin:0px;padding:5px;line-height:1em;background-color:#111;'>#&nbsp;cd&nbsp;ruby-1.8.7-p352/ext/openssl/<br />
#&nbsp;ruby&nbsp;extconf.rb<br />
#&nbsp;make<br />
#&nbsp;make&nbsp;install</div>
<p>あと、SQLite3もインストール</p>
<div style='color:white;border:solid 3px #aaa;font-weight:bold;font-size:10px;margin:0px;padding:5px;line-height:1em;background-color:#111;'>#&nbsp;yum&nbsp;install&nbsp;sqlite-devel<br />
#&nbsp;gem&nbsp;install&nbsp;sqlite3-ruby&nbsp;-v&nbsp;1.2.5</div>
]]></content:encoded>
			<wfw:commentRss>http://ict-start.com/blog/?feed=rss2&#038;p=313</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP文字列型の不思議</title>
		<link>http://ict-start.com/blog/?p=306</link>
		<comments>http://ict-start.com/blog/?p=306#comments</comments>
		<pubDate>Thu, 25 Aug 2011 06:55:04 +0000</pubDate>
		<dc:creator>堀松 巧也</dc:creator>
				<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://ict-start.com/blog/?p=306</guid>
		<description><![CDATA[&#60;?php &#160;&#160;&#160;&#160;$str&#160;=&#160;”abcあいう”; &#160;&#160;&#160;&#160;echo&#160;”strlen=”.strlen($str).”\r\n”; &#160;&#160;&#160;&#160;echo&#160;”mb_strlen=”.mb_strlen($str).”\r\n”; &#160;&#160;&#160;&#160;for($i=0;$i&#160;&#60;&#160;strlen($str);$i++)&#160;{ &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;printf(“%d=%d(%s)\r\n”,&#160;$i,&#160;(int)$str[$i],&#160;$str[$i]); &#160;&#160;&#160;&#160;} ?&#62; 上記のPHPを実行するとこうなりました。 strlen=12 mb_strlen=6 0=0(a) 1=0(b) 2=0(c) 3=0(・ 4=0(・ 5=0(・ 6=0(・ 7=0(・ 8=0(・ 9=0(・ 10=0(・ 11=0(・ 文字の配列の配列がPHPでは文字型に成っているのか、中身は取り出せずじまいでした。 たんなる自分の実験ですが]]></description>
			<content:encoded><![CDATA[<div style='color:#333;border-left:solid 3px #3f8;font-weight:bold;font-size:10px;margin:0px;padding:0px;line-height:1em;'>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'><span style='color:#833;'>&lt;?php</span></p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;$str&nbsp;=&nbsp;”abcあいう”;</p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;”strlen=”.strlen($str).”\r\n”;</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;”mb_strlen=”.mb_strlen($str).”\r\n”;</p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;for($i=0;$i&nbsp;&lt;&nbsp;strlen($str);$i++)&nbsp;{</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(“%d=%d(%s)\r\n”,&nbsp;$i,&nbsp;(int)$str[$i],&nbsp;$str[$i]);</p>
<p style='background-color:#dddddd;padding:3px; 0px;height:1em;'>&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p style='background-color:#f5f5f5;padding:3px; 0px;height:1em;'><span style='color:#833;'>?&gt;</span></p>
</div>
<p>上記のPHPを実行するとこうなりました。</p>
<div style='color:white;border:solid 3px #aaa;font-weight:bold;font-size:10px;margin:0px;padding:5px;line-height:1em;background-color:#111;'>strlen=12<br />
mb_strlen=6<br />
0=0(a)<br />
1=0(b)<br />
2=0(c)<br />
3=0(・<br />
4=0(・<br />
5=0(・<br />
6=0(・<br />
7=0(・<br />
8=0(・<br />
9=0(・<br />
10=0(・<br />
11=0(・</div>
<p>文字の配列の配列がPHPでは文字型に成っているのか、中身は取り出せずじまいでした。</p>
<p>たんなる自分の実験ですが</p>
]]></content:encoded>
			<wfw:commentRss>http://ict-start.com/blog/?feed=rss2&#038;p=306</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CentOS5.5にPHP5.3.8をソースからインストール</title>
		<link>http://ict-start.com/blog/?p=301</link>
		<comments>http://ict-start.com/blog/?p=301#comments</comments>
		<pubDate>Wed, 24 Aug 2011 16:14:41 +0000</pubDate>
		<dc:creator>堀松 巧也</dc:creator>
				<category><![CDATA[プログラミング]]></category>

		<guid isPermaLink="false">http://ict-start.com/blog/?p=301</guid>
		<description><![CDATA[# wget http://jp2.php.net/get/php-5.3.8.tar.bz2/from/this/mirror # tar xvf php-5.3.8.tar.bz2 # cd php-5.3.8 # yum install -y libxml2 # yum install -y libxml2-devel # yum install -y libpng-devel # yum install -y libmcrypt # yum install -y libmcrypt-devel # yum install -y libtool-ltdl # yum install -y libtool-ltdl-devel # yum install -y httpd-devel # ./configure --enable-mbstring \ --enable-mbregex [...]]]></description>
			<content:encoded><![CDATA[<pre># wget http://jp2.php.net/get/php-5.3.8.tar.bz2/from/this/mirror

# tar xvf php-5.3.8.tar.bz2

# cd php-5.3.8

# yum install -y libxml2
# yum install -y libxml2-devel
# yum install -y libpng-devel
# yum install -y libmcrypt
# yum install -y libmcrypt-devel
# yum install -y libtool-ltdl
# yum install -y libtool-ltdl-devel
# yum install -y httpd-devel

# ./configure --enable-mbstring \
 --enable-mbregex \
 --enable-zend-multibyte \
 --with-zlib-dir=/usr/lib \
 --with-apxs2=/usr/sbin/apxs \
 --with-zlib \
 --enable-zip \
 --enable-ftp \
 --enable-pcntl \
 --enable-soap \
 --with-mcrypt \
 --with-gd \
 --enable-pdo \
 --with-pear

# cp php.ini-development /usr/local/php/lib/php.ini</pre>
<p>/etc/profileのパスに以下を追加<br />
PATH=$PATH:/usr/local/php/bin/</p>
<p><code># source /etc/profile</code></p>
]]></content:encoded>
			<wfw:commentRss>http://ict-start.com/blog/?feed=rss2&#038;p=301</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

