投稿

画像解析ソフトウェア ImageJ

イメージ
オープンソースの画像解析ソフトであるImageJを紹介しようと思う。開発はアメリカ国立衛生研究所(NIH)で、Javaで作られている。 http://rsbweb.nih.gov/ij/ 2013.02.09 現在 最新バージョン: ImageJ 1.47i 3.1MB これに Java の JVM を含む jre が必要。すでに PC にインストールされていれば、本体だけダウンロードすれば使える。Java で作られていることもあって、かなりコンパクトなファイルサイズになっている。一度インストールすれば、Help メニューからのアップデートで簡単にバージョンアップができる。 2011.4.19 そもそもJavaで作られたアプリケーションなんて珍しいと思って使ってみたのがはじまり。使ってみたら意外と実用的で快適だったので、それ以来手放せなくなっている。 主に医療、科学分野で利用されている画像解析ソフトだが、個人的に解析するようなことはないので、Blogや仕事で使う画像の加工などに利用している。基本的な画像処理なら問題なく出来るし、重装備画像処理ソフトと比べて動作が軽いのでストレスがない。ということで、ここ数年はずっとImageJばかり使って、Photoshopなんて起動もしなくなってしまった。見た目は上の画像の通り、メニューバーのみで、画像処理ソフトらしからぬ質素なインターフェイスだが、それが返って使いやすかったりする。 個人的に気に入っているところは、以下のようなところ。 無料: オープンソース&パブリックドメインのソフトウェアである。これは重要。 Java製画像解析ソフト: 個人的にJavaが好きなのでJava製というだけでポイント高い。 Javaなのに高速処理できる: Javaは遅いというイメージを払拭する出来映え。ネイティブで処理しているんじゃないか?と疑うぐらい高速。 マルチプラットフォーム: Windows, Mac, Linux で利用可能。Javaならではのメリット。 シンプルなツール: メニューバーだけ。画面を占領せず控えめな印象であるが、機能は強力で使い勝手はよい。他の画像処理ソフトみたいにパレットだらけにならないところが快適。 起動がまぁまぁ速

C言語 その他の制御文 switch, while, do, goto

これらの制御文は機能的には if, for で代替できる。使う理由としては、コードの読みやすさを優先させるため。扱いが楽という意味で、Syntax Sugarという。goto文に関しては、むやみに使わないようにとある。バグ、メンテなど問題が発生しやすいという理由から。これらの制御文は積極的に使うつもりはないので、基本的な書き方だけ載せておく。 while #include &ltstdio.h&gt int main(void){ int i=10; while(i>0){ printf("カウントダウン %d\n",i); i--; } return 0; } while文は条件を満たしている間繰り返す。 カウントダウン 10 カウントダウン 9 カウントダウン 8 カウントダウン 7 カウントダウン 6 カウントダウン 5 カウントダウン 4 カウントダウン 3 カウントダウン 2 カウントダウン 1 do while #include &ltstdio.h&gt int main(void){ int a = 11; int i = 1; do{ printf("%d回通過 a=%d\n",i,a); i++; a++; } while(a < 10); printf("%d回実行して終了\n",i-1); return 0; } do whileは条件を満たしていなくても1回は通過させる。 1回通過 a=11 1回実行して終了 switch #include &ltstdio.h&gt int main(void){ int a = 2; switch(a){ case 0: printf("aは0です\n"); break; case 1: printf("aは1です\n"); break; case 2: printf("aは

C言語 ポインタ pointer

難解と言われているポインタ。通常の変数と違って、任意の変数のアドレスを格納するのがポインタ。アドレスとは、メモリに割り当てられている住所のことで、変数はアドレスを持っている。プログラムが変数にアクセスするときには必ずアドレスが必要になる。ポインタはその変数のアドレスを直接扱うことができる。このポインタを使うことで、効率的なプログラムを実現することができ、C言語では欠かせない機能となっている。でも読みにくいコードになりやすく、巨大なプログラムになると、バグ出しが大変になってしまう。また深刻なダメージを与えかねないため、新しい言語の多くでポインタは廃止され、より安全な方向になっている。しかし内部的にはポインタと同じことをしている。単に表面的にポインタをなくし、ポインタを意識しなくてもプログラミングできるようにしているだけのこと。C言語のポインタを学ぶことで、メモリの扱いなどローレベルの動きがイメージしやすくなるので、高速なアルゴリズムなどを目指すならトライしておきたい。色々な使い方があるので、まずは簡単な例でポインタを確認するところからスタート。 ポインタの一番シンプルな例 #include &ltstdio.h&gt int main(void){ int x = 500; int *p; /* ポインタの宣言「*」アステリスクが付く */ p = &x; /* &x は x のアドレス pポインタにxのaddressを代入 */ /* int *p = &x; と書いても同じ */ printf("x = %d\n",x); /* xの中身= 500 */ printf("x Add = %x\n",&x); /* xのアドレス= 23ff48 */ printf("*p = %d\n",*p); /* pが指すxの中身= 500 */ printf("p = %x\n",p); /* pの中身= 23ff48 */ printf("p Add %%x = %x\n",&p); /* pのアドレス= 23ff4c */

C言語 関数 function

C言語は関数という単位で構成されている。関数は処理のまとまりであり、それらを組み合わせることでプログラムが作られている。プログラムを書くことは、そのまま関数を書くことになる。main(){}がひとつの関数であり、プログラムのスタート地点となる。main関数の中にダラダラと複数の処理を書くことも可能であるが、作った関数の再利用や、保守性などを考えると、機能ごとに分けたほうがよい。簡単なサンプルで解説してみる。(子供に説明するために作ってます。) main関数のみの例 /* Cを書く上で最低必要な標準関数 */ #include &ltstdio.h&gt /*三角形の面積を求める voidは引数を取らない*/ int main(void){ int x = 10; /*底辺*/ int y = 12; /*高さ*/ /*三角形の面積を計算して出力*/ printf("三角形の面積= %d\n",x*y/2); return 0; /*プログラムの終了 無事終了=0を返す */ } 三角形の面積を求めるプログラムをmain関数の中で行っている。結果は以下の通り。 三角形の面積= 60 上記をmain関数とcalc関数の2つに分ける #include &ltstdio.h&gt /*calc関数 三角形の面積を求めて表示 voidは戻り値がないことを宣言。 ()内は仮引数(parameter) コピーされた値 */ void calc(int a,int b){ /*三角形の面積を計算して表示*/ printf("三角形の面積 %d\n",a*b/2); return; /*処理後値なしでmainに戻る 本来省略*/ } /*メイン関数 プログラムは、ここからスタート*/ int main(void){ int x = 10; int y = 12; /*値をcalc関数に渡し、処理はcalcへ移る */ calc(x,y); /* ()の中が引数(argument) 値渡し。*/ /*calc関数終了後returnで、ここに戻ってくる */ return 0; /*プログ

C言語 if文

分岐if文の書き方 if(イフ)文は分岐制御をする。分岐には他にswitch文もあるが、プログラムの読みやすさを重視したもので、機能的にはif文ですべて可能であり、より柔軟性のある制御ができる。 基本的なif文 #include &ltstdio.h&gt int main(void) { int a=6; if (a%2==0) { printf("%dは偶数です\n",a); } return 0; } 最も基本的なスタイル。処理文は{}で囲む。処理文は{}内に複数あっても構わない。 6は偶数です {}を省略したif文 #include &ltstdio.h&gt int main(void) { int a=6; if (a%2==0) printf("%dは偶数です\n",a); return 0; } 条件後の1文セミコロンまでを実行する。 6は偶数です 基本的なif~else文 #include &ltstdio.h&gt int main(void) { int a=7; if(a%2==0) { printf("%dは偶数です\n",a); } else { printf("%dは奇数です\n",a); } return 0; } 条件がfalseのときの処理をelse{}で用意する。条件がtrueの場合はelse{}の処理はされない。 7は奇数です switch文の代替としてのif文 #include &ltstdio.h&gt int main(void) { int a=2; if (a==0) { printf("aは0です\n"); } else if(a==1) { printf("aは1です\n"); } else if(a==2) { printf("aは2です\n"); } else if(a==

C言語 インクリメント デクリメント

インクリメントは値を1増やし、デクリメントは1減らす演算子。プログラム中で頻繁に使われる。この演算子は ++a のように前につけることも出来るし、a++ のように後ろでもつけることができる。しかし代入の際には注意する必要がある。 前置、後置の違い #include &ltstdio.h&gt int main(void){ /* increment */ int a; int b; a = 0; b = 0; b = a++; /* b=a 代入後に a+1 計算 */ printf("b=a++\tb=%d\ta=%d\n",b,a); /* b=0 */ a = 0; b = 0; b = ++a; /* a+1 計算後に b=a 代入 */ printf("b=++a\tb=%d\ta=%d\n",b,a); /* b=1 */ /* decrement */ a = 0; b = 0; b = a--; /* b=a 代入後に a-1 計算 */ printf("b=a--\tb=%d\ta=%d\n",b,a); /* b=0 */ a = 0; b = 0; b = --a; /* a-1 計算後に b=a 代入 */ printf("b=--a\tb=%d\ta=%d\n",b,a); /* b=-1 */ return 0; } 結果は以下のようになる。代入してからインクリメントされるか、インクリメントしてから代入するかの違いがある。 b=a++ b=0 a=1 b=++a b=1 a=1 b=a-- b=0 a=-1 b=--a b=-1 a=-1 C言語 ANSI C89 Meadow & MinGW GCC 目次はこちら

C言語 for文

繰り返し処理を行うfor文の書き方 for(フォー)文は繰り返し処理をするときに使う文。C言語では他にwhile文 や do/while文も繰り返し文として存在するがfor文で代替可能。またfor文は複雑な繰り返し文にも対応できる柔軟性がある。新しいプログラミング言語のGo言語ではwhile文とdo/while文は採用されていない。繰り返し文はfor文だけで問題ないことが分かる。 C言語ではカウントの役目を果たす int i; の宣言をfor文の継続条件式の中で出来ないため、外で宣言する。C++やJavaでは中で宣言可能。 基本的なfor文 #include &ltstdio.h&gt int main(void) { /* for 処理文を{}で囲む 一般的なスタイル */ int i; /* C言語はfor式の外で宣言 */ for (i=0;i&lt3;i++) { printf("%d回目の処理\n",i+1); } return 0; } (i=0;i&lt3;i++)の中の説明 (カウントの初期化; ループ継続条件; カウントアップ) i=0; カウントを初期化する。 i&lt3; iが3よりも小さい間、繰り返す。 i++ カウントアップ。まず継続条件内であれば、1回処理した後に i に 1 を加える。つまり1回目はi=0で実施し、2回目はi=1、3回目はi=2、4回目はi=3で継続条件を満たせないため、for文を抜けるという具合。実行結果は以下のようになる。 1回目の処理 2回目の処理 3回目の処理 簡易的なfor文 #include &ltstdio.h&gt int main(void) { /* for 処理文が1行のときの簡易的な書き方 */ int i; for (i=0;i&lt3;i++) printf("%d回目の処理\n",i+1); return 0; } for文の継続条件式の後にある 1文;(セミコロン)までがループの範囲。上記例ではforから処理文まで1行で書かれているが、処理文を改行していても問題ない。セミコロン以降に処

Go言語をインストール

イメージ
Golang http://golang.org/ Go言語はGoogleが2009年に発表した新しい汎用プログラミング言語。先月の2012年3月にWindowsにも対応したversion1がリリース。簡単にWindowsにインストールできるようになったので、少し試してみようと思う。Go言語はCやC++に置き換わるような言語を目指しているので、興味深く思っていたところ。魅力的に感じたところはコンパイルが抜群に速く、実行速度もC並みに高速であること。オープンソースであること。並列処理が得意、ガベージコレクションがあること。静的言語でネイティブであること。つまりJavaのようなVMを必要としない。言語仕様がシンプルだということ。後発言語だけあって、他の言語の欠点を補っているように見える。ただ、実用性を重視しているためか、原始的な部分が見え隠れする。それが返って好印象だったりする。今後ライブラリー等が充実してくれば、それなりにブレークするかもしれない。下の絵はGo言語のマスコットキャラクター。 WindowsXPへのインストール 下記サイトからWindows用をダウンロードする。 http://code.google.com/p/go/downloads/list このページに各種プラットフォーム向けのものが置いてある。今回はWindowsXPなので、以下のzipをダウンロード。 go.go1.windows-386.zip (30.1MB) 2012/3/28リリース go1 Windows (x86-32, for both Intel and AMD 32-bit) ZIP archive Featured ダウンロードしたzipファイルを解凍すると、goフォルダができる。この容量は107MB。とりあえず、 C:\go に置くことにした。 次にpathを通す。 C:\go\bin; これで利用可能になったはず。確認のために、コマンドプロンプトから、go と打ってみる。 こんな感じで認識されればOK。 GoでHello World 次に公式ホームページでGo言語の文法に沿ってソースファイルを書いてみる。公式ページは言語仕様、チュートリアルなどもあるし、日本語情報も充実しているのでGoの学習はお手軽だ。まずMeado

C言語 標準ヘッダ

C標準ライブラリ関数 Cのプログラムを書くときの決まり文句である #include &ltstdio.h&gt 。プログラムとして動かすときに必要な関数がここに書かれている。他にも使用頻度の高いものを集めたものを標準ライブラリ関数という。必要に応じてincludeして使う。下の一覧がC89の標準ライブラリ関数。予想以上に少なかった。各ヘッダの中にはメソッドが入っていて、includeすれば自由に使うことができる。使うものは限られると思うので、さらっと見て、使いそうなメソッドだけを試していこうと思う。 http://ja.wikipedia.org/wiki/標準Cライブラリ Header file C89 stdio.h 標準入出力 MinGW\include stdlib.h 汎用関数 MinGW\include ctype.h 文字処理 MinGW\include string.h 文字列処理 MinGW\include math.h 数学関数 MinGW\include float.h 浮動小数点型特性 MinGW\include limits.h 整数型の大きさ MinGW\include time.h 日付 MinGW\include stddef.h 共通定義 MinGW\lib\gcc\mingw32\4.6.2\include assert.h 診断 MinGW\include errno.h エラー MinGW\include locale.h 文化圏固有操作 MinGW\include setjmp.h 大域ジャンプ MinGW\include stdarg.h 可変引き数 MinGW\lib\gcc\mingw32\4.6.2\include signal.h signal処理 MinGW\include C89以降下記が追加されている。便利そうなものもあるので、後々使っていくかもしれない。 Header file C95 追加 iso646.h 代替つづり MinGW\lib\gcc\mingw32\4.6.2\include wchar.h

C言語 GCC でコンパイル&リンク オプション

ソースファイルから実行ファイルまでの流れ コマンドプロンプトで、gcc test.c とか打つと一発でexeファイルまで作れてしまうが、作業としてはコンパイルとリンクの2段階に分かれている。 1 コンパイル テキストファイルであるソースファイル(拡張子 .c )からオブジェクトファイルを作る。この作業がコンパイル。このオブジェクトファイルの拡張子は .o で、マシン語に翻訳されたもの。まだプログラムとしては実行できない。ファイルサイズはかなり小さくHelloWorldだと500byteぐらい。 2 リンク オブジェクトファイルに標準関数などのライブラリの追加や、各種設定を行って、実行ファイルである.exeファイルを作る。ファイルサイズは大きくなって、HelloWorldで47KBぐらいになる。リンク作業を行うことで、はじめてプログラムとして機能する。 gccには多数のコマンドオプションがあって細かく制御できる。gccのサイトで確認できる。 http://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html またコマンドの組合わせによっては複数同時に使うこともできる。使いそうなものだけをメモ。 オプションなし「a.exe」をつくる gcc test.c test.cという名のソースファイルから、exeファイルを作る。コンパイルとリンクがセットになった処理。exeの名前は指定していないので、すべて a.exe となる。また再度同じようにコンパイルすると、常に上書きされていく。ファイルがむやみに増えることもなく便利。 名前を指定して「test.exe」をつくる gcc test test.c test.exeという名前になる。 複数ソースファイルから「a.exe」をつくる gcc test1.c test2.c 2つのファイルをコンパイル&リンクして、ひとつのa.exeをつくる。関数を別のファイルに分けたときなどに使う。もちろん名前の指定もできる。 -c コンパイルのみを行いオブジェクトファイル「test.o」をつくる gcc -c test.c リンク作業はしない。複数ファイルの場合は、それぞれの名前のオブジェクトファイルが

C言語のデータ型 data type

Cの代表的なデータ型をプログラムから調べてみる C言語のデータ型はJavaから入った身としては違和感がある。intはコンパイラや環境で2通りありえるという曖昧なもの。WindowsXPでgccを使う場合はlongと同じだった。Javaのlongは8byteなのに対して、Cでは4byte。これは並行して使う場合は混乱を招く。個人的にはJavaとなるべく統一して使いたいので、Cではlongを使わず、long long(8byte)を使うようにする。でもlong longはC99の仕様のようだ。実際こんなデカイ整数型はJavaでも使ったことがないので、たぶん使わないと思う。 charも特徴的である。Javaでは2byteの文字型なのに対して、Cは1byteで、文字専用ということでもない。シンプルに1byte分の整数を入れると考えた方がよさそうだ。 ANSI C89ではbooleanはなく、他で代用する必要がある。まったく問題ないけど。 Cのデータ型は仕様を見る限り、とってもローレベルな匂いがする。バイナリーをダイレクトにいじるには、抽象的なJavaよりよさそうだ。 data type type byte bit 範囲 signed char 1 8 -128~+127 整数 unsigned char 0~+255 signed short 2 16 -32768~+32767 unsigned short 0~+65535 signed int 4(2) 32(16) longと同じ(shortと同じ) unsigned int unsigned longと同じ(unsigned shortと同じ) signed long 4 32 -2147483648~+2147483647 unsigned long 0~+4294967295 signed long long 8 64 -9223372036854775808~+9223372036854775807 unsigned long long 0~+18446744073709551615 float 4 32 1.17549e-038~3.4028

C言語をかじりはじめる

ローレベルをいじりたい Javaをはじめてから2年近く経つ。これまで音関係の小さなプログラムをいくつか作ったりしてみたが、ローレベルな操作が可能なC言語にも興味が出始めたので、少しかじってみようかと思う。やることはANSI(米国国家規格協会 American National Standards Institute)の標準規格範囲。つまりコンソールアプリまで。プラットフォーム依存のライブラリを駆使してGUIを使うようなことはしない。バイナリデータをいじくるのが目的なのでCUIで十分。この範囲であれば、プラットフォームが変わっても、その都度、再コンパイルすれば使えるようになる。 マルチプラットフォームなGUIツール 後日知ったのだが、C/C++によるGUIアプリでも、マルチプラットフォーム化する方法があるのね。RAD (Rapid Application Development)と呼ばれる+GTKとかwxWidgetsというGUIツールを使ってプラットフォームごとにコンパイルすることで、Linux,Win,Macで動かすことができるようだ。AudacityではwxWidgetsを使っているので、そのうち使ってみたい。でもC++で書く必要があるので、かなり先になりそうだ。まずはCだけで、そこそこ中身を書けるようにしておきたい。その次にC++をやって、次にGUIという流れかな。道のりは長い。 学習方法 ネット上の情報を頼りにするつもり。今のところ入門書は買うつもりはない。C言語はC++やJavaに比べ言語仕様は小さく、覚える内容そのものは少ないので何とかなるだろう。後から見て思い出せるようにBlogに残しておこうと思う。Blogには、サンプルを実行できる単位で載せておく。またその実行結果もすぐ下にプロンプト風にして載せておく。これがメインのコンテンツになると思う。この手の学習はサンプルとのにらめっこが中心で、それをフォローする程度の説明があれば十分と思う。ダラダラ長い解説よりはサンプルでしょ。また、実用的なサンプルだとソースが長くなりすぎて見るのも嫌になるので、短くポイントだけ分かるようにしておく。そういうサンプル作るのって意外と難しいのだけど、がんばってみる。 C言語について UNIXのために作られた言語というぐらいしか知らなかったので、Wik

ソースファイルの文字コードについて

イメージ
文字コード C言語の文字コードは本来EUCが推奨のようだが、開発環境がWindowsXPということもあって、ソースファイルの文字コードはshift-jisも兼用して書くことにした。EUCだと実行ファイルにしたとき文字化けを起こして日本語が使えない。日本語を出力したいときはshift-jisで、それ以外はEUCにしようと思う。 Medowの文字コード変換は C-x RET f (RETはreturnキー windowsだとEnterだけど・・・) と打つと Coding system for visited file (default, nil): が表示されるので、その後ろに euc-japan もしくは sjis-dos と入力。これでモードが切り替わる。 下がEUCの画面。Eと表示がある。 下はshift-jisの画面。Sと表示がある。 C言語 ANSI C89 Meadow & MinGW GCC 目次はこちら

C言語で Hello World

イメージ
コマンドプロンプトで HelloWorld 以下のソースコードをMeadow(テキストエディタ)で書く。ファイル名を helloworld.c とした。 #include &ltstdio.h&gt /* 実行するとmainから開始される */ int main(void) { /* 表示 */ printf("Hello, ANSI C89 World\n"); /* プログラムの終了部分「0」は正常終了 */ return 0; } 上記を保存して、コマンドプロンプトから gcc helloworld.c と打ってコンパイル。その後に、a.exe もしくは a と打ってコンパイルされたプログラムを実行してみると、以下の出力が得られる。 Hello, ANSI C89 World Meadow上でコンパイル及び実行してみる Meadowのウィンドウを C-x 2 で上下2段に分けて、上段をエディタ、下段を M-x shell と打ってシェル(コマンドプロンプト)にしてみる。これでMeadowのみでコーディング、コンパイル、実行までできるようになった。何よりもウィンドウスペースを最小限にできるので、小さいノートパソコンでも、Web上の解説を見ながら勉強しやすいのだ。 下段のシェルで、 &gt gcc a00.c と打って Enter するとコンパイルされる。a00.c はソースファイル名。うまくコンパイルされたら、ソースファイルと同じ階層に、実行ファイルである a.exe ができるので、シェルから実行してみる。 &gt a.exe と打ってEnterするだけ。Meadow は、Java の eclipse などに比べるとコンパクトでお手軽な開発環境だ。メモリの使用量が 1/10 以下ってところがいい。巨大なプログラムを作るわけではないので、お手軽さを優先させたい。 C言語 ANSI C89 Meadow & MinGW GCC 目次はこちら

MinGWのインストール(WindowsXP)

イメージ
130209 改めてMinGWをWIndowsXPにセットアップしたので、現時点の情報に差し替えた。 MinGW は、Windows上で、CとC++のコンパイルをするために必要。C言語のコンパイラーである GCC が含まれている。 他にCygwinというものもあるが、これはUNIX環境という感じでC言語のコンパイル目的には大きすぎる。 インストール手順 http://www.mingw.org/ 上記ページの Navigation > Downloads をクリック。そうすると以下のような画面のあるページが開く。 Installer > mingw-get-inst > mingw-get-inst-20120426 をクリックして行くと次のページが開く。 mingw-get-inst-20120426.exeをクリックしてダウンロードする。662kBと小さいのですぐにダウンロードは完了する。下のアイコンがダウンロードしたminGWのインストーラーになる。 インストーラーをダブルクリックしてインストールする。デフォルトでは C:\MinGW にセットアップされる。ウィザードに沿ってクリックしていくと、途中で以下のような選択画面になる。ここでは C と C++ のコンパイラーが欲しいので、それだけをチェックした。 コマンドプロンプトが立ち上がって、ネットから必要なファイルをダウンロードされ、セットアップされる。数分程度でインストールは完了する。ディスク容量は200MB程度となった。 インストール後はパスの設定をする。 環境変数 Path に ;C:\MinGW\bin を追加して完了。 gcc のバージョンを確認 GCCが、ちゃんとインストールされているか、GCCのバージョンで確認する。コマンドプロンプトや Meadow の shell などから gcc -v と打つとバージョンが表示される。 4.6.2 と確認できたので、インストールは成功している。後は C や C++ のコードをコンパイルして確認する。GCCのバージョンは2013年2月時点では 4.7.2 なので、GCCのみバージョンアップしてもよい。 こちらのページ で手順を

キーボードの記号と読み方

キーボードのキートップ印刷されている記号の名称と読み方。子供と記号の読み方を共有するためのリスト。 記号読み ! exclamation mark イクスクラメーション &quot double quotation ダブルクォート # number sign ナンバーサイン $ dollar ダラー % percent sign パーセント & ampersand アンパサンド ' single quote シングルクォート ( left parenthesis レフト パレンセシス、丸括弧 ) right parenthesis ライト パレンセシス、丸括弧 - hyphen, minus ハイフン、マイナス = equal イコール ~ tilde チルダ ^ circumflex accent,hat サーカムフレックス、ハット | vertical line バーチカルライン ` back apostrophe バック アポストロフィー @ commercial at sign アットマーク + plus プラス * asterisk アステリスク : colon コロン ; semicolon セミコロン [ left square bracket レフト スクエアブラケット、角括弧 ] right square bracket ライト スクエアブラケット、角括弧 { left curly bracket レフト カーリーブラケット、波括弧 } right curly bracket ライト カーリーブラケット、波括弧 &lt less-than sign レス ザン サイン、小なり &gt greater-than sign グレーター ザン サイン、大なり , comma カンマ . period,dot ピリオド、ドット ? question クエッション / slash スラッシュ \ back s

JavaScriptカラー SVG

SVGとthml5のスライダーを使ったサンプル。スライダーでSVGで描かれた絵の色が変わります。Chromeでテストしているけど、他のブラウザだと多くの場合スライダーは見れていないと思う。IEだと何にも見れていない可能性すらある。1年後ぐらいには多くのブラウザで普通に見れるようになっていると思うが、どうなることか。 image/svg+xml kepiyo R G B

HTML5 アウトラインを意識してみる

イメージ
h1~h4とsection&h1を使って実験 HTML5では、新たなセマンティック要素を規定している。これはホームページやblogなどの文章の見出しや本文などを構造化することで、検索や様々なサービスを行いやすくし、結果的にユーザーのメリットになるというもの。ただ多くの有名サイトでも、まだ本格的に導入されていない。でもGoogleの検索エンジンでは、この構造が徐々に重要になってきているように思う。 文章の構造はアウトラインとしてもブラウザー上でチェックすることができる。Google ChromeではHTML5 Outlinerという機能拡張がある。 これをインストールすると、omniboxにアイコンが表示されるので、開いているページで、このアイコンをクリックすると、そのページの見出しのリストであるアウトラインを見ることができる。これはページの目次のようなものなので、これだけ見て内容がある程度分かるようにしておくのがよいと思う。下はindexのページのアウトライン。こんな感じで階層化しておくと今後の様々なサービスに対応できそう。 html5以前ではh1~h6を使って見出しを定義するような仕様ではあるのだが、どうも積極的に使われていなかったりする。それに数値で階層分けをするのは、機械からみると理想的ではないし、階層の変更に弱い。html5では新たにsectionが導入された。これとh1などを組合わせてタイトルのツリーを作ることができる。これによって複数のhtmlファイルを組合わせても、正しい階層をキープできるなど、変更修正に強く柔軟性のある構造が実現できる。でも後方互換性のため従来のh1~h6も利用できるのが何とも中途半端だが。今後はsectionとh1だけを使う方法がベターだろう。 例えばこんな感じで。 <section> <h1> 大見出し </h1> <p>本文</p>   <section>   <h1> 中見出し </h1>   <p>本文</p>   </section> </section> 上記は section の中に section が存在していて、2階層に

HTML5 Canvasを試す

HTML5の目玉のひとつCanvas JavaScriptで絵が描けるというということなので、ちょっと試しに作ってみた。静止画では面白くないので、HTML5のスライダーを使って変化させられるようにした。赤ラインがサイン波で、緑ラインがコサイン波。青ラインがその合成となる。スライダーで赤と緑の周期をコントロール。今までJavaAppletでやっていたようなことが、Canvasで実現できるのね。これはいいかも。反応が思ったよりもよくてびっくり。動きも滑らか&アンチエイリアスもはじめからかかっていて、使えるという印象だ。 作ってから分かったのだけど、input type="range"タグってIE9でも見れないのね。IE8だとたぶん何も見れてないと思う。この手のhtml5は、まだ実験段階だわ。現時点ではJavaAppletを使った方がよさそうだ。 R G JavaScript部分のソースコード <script type="text/javascript"> <!-- function setControl() { obj = document.getElementsByClassName('change'); for (var i = 0;i < obj.length; i++) { obj[i].addEventListener ('input', function(){drawWave()}, false); } drawWave(); } function drawWave() { var canvas = document.getElementById("wave"); if(canvas.getContext) { var context = canvas.getContext("2d"); var r = document.frmControl.red.value; var g = document.frmControl.green.value

HTML5 JavaScript カラー

HTML5のスライダーを使って、バックグラウンドの色をRGBで制御するスクリプトを作ってみた。 R G B JavaScript部分のソースはこんな感じ。 <script type="text/javascript"> <!-- function setColor() { obj = document.getElementsByClassName('change'); for (var i = 0;i < obj.length; i++) { obj[i].addEventListener ('change', function(){changeColor()}, false); } changeColor(); } function changeColor() { var red = document.frmColor.red.value; var green = document.frmColor.green.value; var blue = document.frmColor.blue.value; var redStr; var greenStr; var blueStr; red = parseInt(red); green = parseInt(green); blue = parseInt(blue); document.body.style.backgroundColor = "rgb(" + red +","+ green +","+ blue + ")"; if(red < 16){ redStr = "0"+ red.toString(16); }else{ redStr = red.toString(16); } if(green <16){ greenStr =

HTML5 SVGを少々

最新各種ブラウザでSVG (Scalable Vector Graphics) が見れるようになってきたので、そろそろ実験レベルで試してみようと思う。でもSVG未対応のIE8(Internet Explorer 8)のアクセスが多いので、積極的には利用しないほうがよさそうだ。実際このBlogでもWindowsXP IE8で見ている人の割合は26%で一番多い。ちなみにこのBlogは毎日200人ぐらいのアクセスがあるのだが、人数に換算すると毎日50人ぐらいはSVGが見れないことになる。無視してはいけない数値だ。まぁIE8でもJavaScriptライブラリで表示させることは可能だが、そこまでやる人は少数派だろう。WindowsXPはIE8が最終バージョンで、最新のIE9の導入はできない。すでに時代遅れになっているので、できればChromeなどに乗り換えてもらいたいところだ。今回の記事はIE8ユーザーのことはあまり考慮していない。たぶん下の絵が見れているIE8ユーザーは少ないと思う。 さてSVGとは、HTMLで扱える画像フォーマットのひとつと考えるのが一番シンプル。JPEG,GIF,PNGなどが画素の集まりであるラスターイメージなのに対して、SVGはベクターイメージで、数値化した座標をもとに線やら図形やらを描画するので、拡大しても画像が荒れることはない。しかもテキスト(XML)で書かれている。JavaScriptで操作することも可能。SVGは企業間での開発競争の末、標準化されたフォーマットなのでオープンになっている。何かと期待したくなるフォーマット。 まずはフリーのドローソフトである Inkscape を使って絵を描いて、それをBlogに埋め込んでみる。Inkscapeは標準でSVGフォーマットで保存するので、親和性はかなり高いと思う。まずは立方体を描いてみる。 1.0 image/svg+xml cubic