技術系書籍 ― 2011/06/16 22:08
20年ぶりにUNIX(正確にはLinuxですけど)上での開発です。
しかも、c++&STL。なぜなら、ワンソースでWindowsとUNIX。
当時は下っ端だったので『make』ファイルは与えられてましたけど、今回は自分で作ります。
ほぼ、初心者(・・;)なのでO'REILLYの『make改訂版』を買いました。1800円。
読みやすい本でした。ググった結果と合わせれば、ほぼOKです。
技術系の本は、読みやすさ、解説のわかりやすさが重要です。個人的な好みに左右されるところが大きいですが・・・。
私の場合は、結果的に次のような傾向になってます。
翔泳社・・・Windows、VisualStudio、C++系
技術評論社・・・Web、サーバーサイドJava、Apache、Tomcat
UNIX系は買ったことはないです・・・つまり、ほとんどやってないってことです^^;)
……なんか、昔のことを思い出してきました。昔、色々お世話になったのは『C Magazine』『MSJ』『InsideWindows』『DDJJ』『επιστημηさん』『原田洋子さん』『Dropの萩本さん』『OMTの羽生田さん』などなど。あの頃は色々勉強してたなぁ。
ところで、技術系の本は電子書籍、少ないです。やはり、数式や図がネックになります。画像にしちゃえばいいんですけど重くなりますよね。ePUB3だとSVGやMathMLが使えますけど、制作にお金かかりそうですね。
個人的には、技術系の本は、切ったり貼ったり書き込んだりして自分の物にしていくっていう感じがしてます。だから、やっぱり紙がいいです。それに、電子書籍だとWebとかぶっちゃいますから、なかなかお金出してっていうのは難しいかも。
ところで『電子書籍を考える出版社の会(略称:eBP)』って、どうなりました?
しかも、c++&STL。なぜなら、ワンソースでWindowsとUNIX。
当時は下っ端だったので『make』ファイルは与えられてましたけど、今回は自分で作ります。
ほぼ、初心者(・・;)なのでO'REILLYの『make改訂版』を買いました。1800円。
読みやすい本でした。ググった結果と合わせれば、ほぼOKです。
技術系の本は、読みやすさ、解説のわかりやすさが重要です。個人的な好みに左右されるところが大きいですが・・・。
私の場合は、結果的に次のような傾向になってます。
翔泳社・・・Windows、VisualStudio、C++系
技術評論社・・・Web、サーバーサイドJava、Apache、Tomcat
UNIX系は買ったことはないです・・・つまり、ほとんどやってないってことです^^;)
……なんか、昔のことを思い出してきました。昔、色々お世話になったのは『C Magazine』『MSJ』『InsideWindows』『DDJJ』『επιστημηさん』『原田洋子さん』『Dropの萩本さん』『OMTの羽生田さん』などなど。あの頃は色々勉強してたなぁ。
ところで、技術系の本は電子書籍、少ないです。やはり、数式や図がネックになります。画像にしちゃえばいいんですけど重くなりますよね。ePUB3だとSVGやMathMLが使えますけど、制作にお金かかりそうですね。
個人的には、技術系の本は、切ったり貼ったり書き込んだりして自分の物にしていくっていう感じがしてます。だから、やっぱり紙がいいです。それに、電子書籍だとWebとかぶっちゃいますから、なかなかお金出してっていうのは難しいかも。
ところで『電子書籍を考える出版社の会(略称:eBP)』って、どうなりました?
オブジェクト指向人工生命体6 ― 2010/11/10 01:17
回転して表示する
1.回転する
Warmを回転させます。みんな同じ方向に動いててもつまらないので…
回転は描画する座標軸を回転させることによって実現します。Warmを回転させるんじゃなくて、Warmを書く紙を回転させると言う事です。それまでに描画していた部分は回転しません。…別レイヤーに描画して重ねるイメージですかね。
座標軸が回転してくれるので、Warmは何事も無かったかのように常に一定の向きで描画すればよいということになります。Warmを書くときに方向を気にしなくて済むのはかなりありがたいです。だって、描画する図形の回転後の座標を求める計算なんて超めんどくさいんですから。sinとかcosとか使って1点ずつ計算するんですよ。
で、プログラムは次の様になります。
何がいけないのか? だいたい察しはついていると思いますが…そのとおりです。以前、説明しましたが、描画処理はpaintComponent()をちょっと借りて、そこに自分の描画処理を(こっそり?)入れる、という仕組みです。したがって、後始末をちゃんとやらないと、このような結果になります。元々の処理は、途中で何かが変更されてるなんて知らないわけですから。
で、対策です。
2.座標軸を元の状態に戻す
まずは、リストを見てください。
AffineTransform at=g2.getTransform()で座標軸の状態を取得しておいて、g2.setTransform(at)で元に戻すだけです。AffineTransformが何なのかは、聞かないでください。『座標軸の状態』ってことで納得してください。^^;)
…で、『ふと、思った』方もいらっしゃると思いますが…そのとおりです。AffineTransformを使わなくても、-45度回転でも元に戻ります。どちらを使うのかは、その時に応じて使い分けてください。
つまり、回転/rotate()、スケーリング/scale()、移動/translate()を組み合わせた時に、『次のアイテムの描画時には回転だけは反映させたくない』と言うような場合には、回転だけを元に戻す必要があります。こんな時はsetTransform()で全部戻してしまう…というのは使えませんね。
次回は、もっとWarmらしく、色々なパターンで作ります…オブジェクト指向的に。
java,描画,座標,回転,rotate,Graphics2D,getTransform,setTransform,AffineTransform
1.回転する
Warmを回転させます。みんな同じ方向に動いててもつまらないので…
回転は描画する座標軸を回転させることによって実現します。Warmを回転させるんじゃなくて、Warmを書く紙を回転させると言う事です。それまでに描画していた部分は回転しません。…別レイヤーに描画して重ねるイメージですかね。
座標軸が回転してくれるので、Warmは何事も無かったかのように常に一定の向きで描画すればよいということになります。Warmを書くときに方向を気にしなくて済むのはかなりありがたいです。だって、描画する図形の回転後の座標を求める計算なんて超めんどくさいんですから。sinとかcosとか使って1点ずつ計算するんですよ。
で、プログラムは次の様になります。
public class Warm { double x = 50; double y = 50; double width = 30; double height = 30; public void DrawWarm(Graphics g) { // Graphics を Graphics2D に Graphics2D g2 = (Graphics2D)g; // ■■■■■ 1匹目 // ----- 中略(前回と同じ) ----- // ■■■■■ 2匹目 // 右へずらす x = x + 50; // BufferedImageの作成 // Rectangle2D.Doubleの作成 // BufferedImage と Rectangle2D.Double から TexturePaint を作成 // ----- この辺も同じ ----- // 右へ45度回転 g2.rotate(45 * Math.PI/180, x+15, y+15); g2.setPaint(texture); // 体 ell2DDbody = new Ellipse2D.Double(x, y, width, height); g2.fill(ell2DDbody); // 目 // 瞳 // ----- この辺も同じ ----- } }で、結果はいい感じなんですが、いまいちです。

で、対策です。
2.座標軸を元の状態に戻す
まずは、リストを見てください。
// ■■■■■ 2匹目
// 右へずらす
x = x + 50;
// BufferedImageの作成
// Rectangle2D.Doubleの作成
// BufferedImage と Rectangle2D.Double から TexturePaint を作成
// ----- この辺も同じ -----
// 現在の座標状態を取得
AffineTransform at = g2.getTransform();
// 右へ45度回転
g2.rotate(45 * Math.PI/180, x+15, y+15);
g2.setPaint(texture);
// 体
ell2DDbody = new Ellipse2D.Double(x, y, width, height);
g2.fill(ell2DDbody);
// 目
// 瞳
// ----- この辺も同じ -----
// 座標状態(回転)を元に戻す
g2.setTransform(at);
話は簡単です。AffineTransform at=g2.getTransform()で座標軸の状態を取得しておいて、g2.setTransform(at)で元に戻すだけです。AffineTransformが何なのかは、聞かないでください。『座標軸の状態』ってことで納得してください。^^;)

次回は、もっとWarmらしく、色々なパターンで作ります…オブジェクト指向的に。
java,描画,座標,回転,rotate,Graphics2D,getTransform,setTransform,AffineTransform
オブジェクト指向人工生命体5 ― 2010/11/07 01:11
Warmらしくする
1.線画で描く
表示はできるようになりました。で、○を描いたってしょうがないのでWarmらしきものを描きます。
まずは線画チックに描きます。これは、特に問題ないと思います。
2.テクスチャの貼り付け
で、PCの能力は線画くらいじゃ何ともないので、テクスチャを貼りつけてみます。
まずは、テクスチャを準備して(50×50のPNGでOKです)srcの下にresourseフォルダを作成し、インポートします。
で、コードは次のようになります。
Graphicsクラスではテクスチャを扱う事が出来ません。そこでGraphics2Dクラスを使います。Graphics2DクラスはGraphicsクラスを拡張したもので、色々と機能追加されています。
…で、ここではGraphicsクラスgをキャストしてGraphics2Dクラスg2にしてます。ところが、実際にプログラム上でこんなことをしてもクラスは変わりませんし、基本中の基本的NGです。
…が、このコーディングがOKの場合があります。それは、元々gがGraphics2Dクラスだった場合です。
…で、実はGraphics2Dなんです。なんか、旧バージョンとの互換性云々…とのことです。わかりづらっ(-_-;)
…で、ついでに言うと、ソースコードの下の方の『目』や『瞳』の図形の描き方が線画の時と変わってますが、これは、テクスチャを貼るから変わったんじゃなくて、Graphics2Dになったため使用するメソッドを変えたものです。
Graphics2Dを使うので、Graphics2Dの図形描画の方法に従いました。そうしないと、Graphics2Dでしか描けない図形とGraphicsでも描ける図形のメソッドが変わってしまい、スーパークラスと同じ『描く』行為が別メソッドになり、オブジェクト指向的に…乗り物クラスと自動車クラスは…どちらも走る…省略っ^^;
解説②③④
この連続技でテクスチャを作成します。
②でPNG画像を読み込んでBufferedImageを作成します。
③でBufferedImageの大きさを取得します。
④でイメージと大きさを指定してテクスチャの完成です。
あとは、コードを見ていただければ、よろしいかと…。
あっ、それから、目の白が目立たないんで背景を濃くしました。これはVisualEditorで変えました。
次回は、Warmをいろんな方向に向けたり…かな?
java,描画,テクスチャ,TexturePaint,Graphics2D,setPaint,BufferedImage,ImageIO
1.線画で描く
表示はできるようになりました。で、○を描いたってしょうがないのでWarmらしきものを描きます。
まずは線画チックに描きます。これは、特に問題ないと思います。
public class Warm { int x = 50; int y = 50; int width = 30; int height = 30; Color warmColor = Color.black; public void DrawWarm(Graphics g) { g.setColor(warmColor); // 体 g.drawOval(x, y, width, height); // 目 g.drawOval(x+1, y-8, 10, 10); g.drawOval(x+19, y-8, 10, 10); // 瞳 g.fillOval(x+5, y-5, 4, 4); g.fillOval(x+22, y-5, 4, 4); } }

2.テクスチャの貼り付け
で、PCの能力は線画くらいじゃ何ともないので、テクスチャを貼りつけてみます。
まずは、テクスチャを準備して(50×50のPNGでOKです)srcの下にresourseフォルダを作成し、インポートします。

public void DrawWarm(Graphics g) { //① Graphics を Graphics2D に Graphics2D g2 = (Graphics2D)g; //② BufferedImageの作成 BufferedImage bi = null; try { bi = ImageIO.read(getClass().getResource("/resources/bodyCol01.png")); } catch(Exception e) { e.printStackTrace(); } //③ Rectangle2D.Doubleの作成 Rectangle2D.Double rec2DD = new Rectangle2D.Double(0, 0, bi.getWidth(), bi.getHeight()); //④ BufferedImage と Rectangle2D.Double から TexturePaint を作成 TexturePaint texture = new TexturePaint( bi, rec2DD ); // テクスチャをセット g2.setPaint(texture); // 体 Ellipse2D.Double ell2DDbody = new Ellipse2D.Double(x, y, width, height); g2.fill(ell2DDbody); // 目 g2.setPaint(Color.white); // この時点でテクスチャから単色へ Ellipse2D.Double ell2DDeyeL = new Ellipse2D.Double(x+1, y-8, 10, 10); Ellipse2D.Double ell2DDeyeR = new Ellipse2D.Double(x+19, y-8, 10, 10); g2.fill(ell2DDeyeL); g2.fill(ell2DDeyeR); // 瞳 g2.setPaint(Color.green); Ellipse2D.Double ell2DDpupL = new Ellipse2D.Double(x+5, y-5, 4, 4); Ellipse2D.Double ell2DDpupR = new Ellipse2D.Double(x+22, y-5, 4, 4); g2.fill(ell2DDpupL); g2.fill(ell2DDpupR); }解説①
Graphicsクラスではテクスチャを扱う事が出来ません。そこでGraphics2Dクラスを使います。Graphics2DクラスはGraphicsクラスを拡張したもので、色々と機能追加されています。
…で、ここではGraphicsクラスgをキャストしてGraphics2Dクラスg2にしてます。ところが、実際にプログラム上でこんなことをしてもクラスは変わりませんし、基本中の基本的NGです。
…が、このコーディングがOKの場合があります。それは、元々gがGraphics2Dクラスだった場合です。
…で、実はGraphics2Dなんです。なんか、旧バージョンとの互換性云々…とのことです。わかりづらっ(-_-;)
…で、ついでに言うと、ソースコードの下の方の『目』や『瞳』の図形の描き方が線画の時と変わってますが、これは、テクスチャを貼るから変わったんじゃなくて、Graphics2Dになったため使用するメソッドを変えたものです。
Graphics2Dを使うので、Graphics2Dの図形描画の方法に従いました。そうしないと、Graphics2Dでしか描けない図形とGraphicsでも描ける図形のメソッドが変わってしまい、スーパークラスと同じ『描く』行為が別メソッドになり、オブジェクト指向的に…乗り物クラスと自動車クラスは…どちらも走る…省略っ^^;
解説②③④
この連続技でテクスチャを作成します。
②でPNG画像を読み込んでBufferedImageを作成します。
③でBufferedImageの大きさを取得します。
④でイメージと大きさを指定してテクスチャの完成です。
あとは、コードを見ていただければ、よろしいかと…。
あっ、それから、目の白が目立たないんで背景を濃くしました。これはVisualEditorで変えました。

次回は、Warmをいろんな方向に向けたり…かな?
java,描画,テクスチャ,TexturePaint,Graphics2D,setPaint,BufferedImage,ImageIO
オブジェクト指向人工生命体4 ― 2010/10/24 00:45
まずは表示
とりあえず、見えないことには話が進まないので、まずは表示から。
人工生命体はJFrame上に配置したJPanelに表示することにしました。JFrame上にステータスバー(もどき)を置こうと思ったので、表示領域 を自由な位置に配置することを考えてJPanelにしました。そして表示は、当然、人工生命体であるところのWarmオブジェクトにやらせること にしました。
1.JFrameウィンドウの作成
Eclipse+VisualEditorで作成します。
まず、新規クラスを作成。これは、『普通のJavaプロジェクト』です。
出来たプロジェクトを右クリックし、『新規』→『ビジュアル・クラス』を選択。
『新規Javaビジュアル・クラス』ウィンドウが開かれるので、『スタイル』で『Swing・フレーム』を選択。
『どのメソッド・スタブを作成しますか?』は『public static・・・』を選択。
パッケージやファイル名は適当に。
2.JPanelの貼り付け
VisualEditorを使って『Swingコンテナー』のJPanelをjContentPane上に配置します。
大きさ、その他は適当に。
ここまでで、基本のウィンドウは出来ました。
次は、描画のためのメソッドを追加します。
描画はコンポーネントのGraphicsオブジェクトに、描画メソッドを使って書きます。したがって、JPanelからgetGraphics()メソッドで Graphicsオブジェクトを取得して、そこに描画をすればOKということになります。・・・が、しかし、これではうまくいきません。なぜ、何がうまくいかないのかというと、・・・
そもそも、JFrameウィンドウ達(JFrame上に乗ってるパネルやボタンやテキストフィールドなど全て)は、私達の描画だけを相手にしているわけではありません。自分でも、自分自身の描画領域や、配置されたボタンや、ウィンドウの枠を書いたりしています。これも描画です。さらに、自分の上に乗ってた他のウィンドウが動いて自分が画面上に現れた時や、ウィンドウがリサイズされた時にも自分を描画し直します。そして、こういった動きはフレームワークという形で実装・管理されています。
したがって、私達が自分に都合のよいタイミングで勝手に描画をしても、『あんたの描画なんて聞いてないよっ!』と言われて、上書きされてしまったり、書き直しされなかったりするわけです。
で、このフレームワークにうまく潜り込んで、うまいこと描画させるために次のことが必要になります。
3.描画用派生クラスの作成
JPanelクラスの描画部分を乗っ取って、ここで人工生命体を描画させます。ただし、元からあるJPanelクラスの描画を完全に殺してしまっ てはJPanel自体の描画ができなくなってしまいます。したがって、『JPanelクラスの描画を乗っ取って人工生命体を描画するけど、元の JPanelクラスの描画も動かす』ということになります。
つまり、JPanelクラスの派生クラスを作成し、描画メソッドであるpaintComponent()をオーバーライドし、そこで人工生命体の描画をする けどスーパークラスのpaintComponent()を呼び出して本来のJPanelクラスの描画もさせる、・・・ということになります。 次のソースが元のコードです。JPanel01はJPanelのインスタンスとして使用されています。
次に、DrawPanelクラスにpaintComponent()をオーバーライドします。これはEclipseの機能で実現できます。
ソースコードのエディタ上でDrawPanelクラスのDrawPanelの文字を選択状態にします。
メニューの『ソース』→『メソッドのオーバーライド/実装』を選択します。
『メソッドをオーバーライド/実装』ウィンドウが開くので、『オーバーライドまたは実装するメソッドを選択:』で『JComponent』の 『PrintComponent()』を選択します。
ちなみに、JComponentのPrintComponent()を選択するのは、JPanelクラスはJComponentから派生していて PrintComponent()はJComponentクラスのメソッドだからです。以下の図を参照のこと。(javaでプログラムを作るな ら、以下のサイトはバイブルとなるのでブックマークしておきましょう。)
さて、コードですが、以下の状態になります。
Eclipseの画面上は以下のとおりです。
で、次回は、Warmの描画を充実させます・・・の予定です。
java,描画,JPanel,paintComponent,Graphics,setColor
とりあえず、見えないことには話が進まないので、まずは表示から。
人工生命体はJFrame上に配置したJPanelに表示することにしました。JFrame上にステータスバー(もどき)を置こうと思ったので、表示領域 を自由な位置に配置することを考えてJPanelにしました。そして表示は、当然、人工生命体であるところのWarmオブジェクトにやらせること にしました。
1.JFrameウィンドウの作成
Eclipse+VisualEditorで作成します。
まず、新規クラスを作成。これは、『普通のJavaプロジェクト』です。
出来たプロジェクトを右クリックし、『新規』→『ビジュアル・クラス』を選択。
『新規Javaビジュアル・クラス』ウィンドウが開かれるので、『スタイル』で『Swing・フレーム』を選択。
『どのメソッド・スタブを作成しますか?』は『public static・・・』を選択。
パッケージやファイル名は適当に。
2.JPanelの貼り付け
VisualEditorを使って『Swingコンテナー』のJPanelをjContentPane上に配置します。
大きさ、その他は適当に。
ここまでで、基本のウィンドウは出来ました。
次は、描画のためのメソッドを追加します。
描画はコンポーネントのGraphicsオブジェクトに、描画メソッドを使って書きます。したがって、JPanelからgetGraphics()メソッドで Graphicsオブジェクトを取得して、そこに描画をすればOKということになります。・・・が、しかし、これではうまくいきません。なぜ、何がうまくいかないのかというと、・・・
そもそも、JFrameウィンドウ達(JFrame上に乗ってるパネルやボタンやテキストフィールドなど全て)は、私達の描画だけを相手にしているわけではありません。自分でも、自分自身の描画領域や、配置されたボタンや、ウィンドウの枠を書いたりしています。これも描画です。さらに、自分の上に乗ってた他のウィンドウが動いて自分が画面上に現れた時や、ウィンドウがリサイズされた時にも自分を描画し直します。そして、こういった動きはフレームワークという形で実装・管理されています。
したがって、私達が自分に都合のよいタイミングで勝手に描画をしても、『あんたの描画なんて聞いてないよっ!』と言われて、上書きされてしまったり、書き直しされなかったりするわけです。
で、このフレームワークにうまく潜り込んで、うまいこと描画させるために次のことが必要になります。
3.描画用派生クラスの作成
JPanelクラスの描画部分を乗っ取って、ここで人工生命体を描画させます。ただし、元からあるJPanelクラスの描画を完全に殺してしまっ てはJPanel自体の描画ができなくなってしまいます。したがって、『JPanelクラスの描画を乗っ取って人工生命体を描画するけど、元の JPanelクラスの描画も動かす』ということになります。
つまり、JPanelクラスの派生クラスを作成し、描画メソッドであるpaintComponent()をオーバーライドし、そこで人工生命体の描画をする けどスーパークラスのpaintComponent()を呼び出して本来のJPanelクラスの描画もさせる、・・・ということになります。 次のソースが元のコードです。JPanel01はJPanelのインスタンスとして使用されています。
public class testFrame extends JFrame { private static final long serialVersionUID = 1L; private JPanel jContentPane = null; private JPanel jPanel01 = null; /** * This method initializes jPanel01 * * @return javax.swing.JPanel */ private JPanel getJPanel01() { if (jPanel01 == null) { jPanel01 = new JPanel(); jPanel01.setLayout(new GridBagLayout()); jPanel01.setPreferredSize(new Dimension(270, 130)); jPanel01.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED)); } return jPanel01; }これを次のように変更します。(JPanel → DrawPanel)
private DrawPanel jPanel01 = null; /** * This method initializes jPanel01 * * @return javax.swing.JPanel */ private JPanel getJPanel01() { if (jPanel01 == null) { jPanel01 = new DrawPanel();
class DrawPanel extends JPanel { }で、これでJPanelの派生クラスとしてDrawPanelを作ることができました。
次に、DrawPanelクラスにpaintComponent()をオーバーライドします。これはEclipseの機能で実現できます。
ソースコードのエディタ上でDrawPanelクラスのDrawPanelの文字を選択状態にします。
メニューの『ソース』→『メソッドのオーバーライド/実装』を選択します。
『メソッドをオーバーライド/実装』ウィンドウが開くので、『オーバーライドまたは実装するメソッドを選択:』で『JComponent』の 『PrintComponent()』を選択します。
ちなみに、JComponentのPrintComponent()を選択するのは、JPanelクラスはJComponentから派生していて PrintComponent()はJComponentクラスのメソッドだからです。以下の図を参照のこと。(javaでプログラムを作るな ら、以下のサイトはバイブルとなるのでブックマークしておきましょう。)
さて、コードですが、以下の状態になります。
class DrawPanel extends JPanel { @Override protected void paintComponent(Graphics g) { // TODO 自動生成されたメソッド・スタブ super.paintComponent(g); } }オーバーライドしたpaintComponent(Graphics g)は引数にGraphicsオブジェクトを持っているので、これに人工生命体を描画します。GraphicsオブジェクトgをWarmクラスの描画関数に渡して描画させます。これでOKです。
class DrawPanel extends JPanel { @Override protected void paintComponent(Graphics g) { // TODO 自動生成されたメソッド・スタブ super.paintComponent(g); Warm warm1 = new Warm(); warm1.DrawWarm(g); } }
public class Warm { int x = 80; int y = 100; int width = 50; int height = 50; Color warmColor = Color.red; public void DrawWarm(Graphics g) { g.setColor(warmColor); g.drawOval(x, y, width, height); } }これで、表示が動くはずです。
Eclipseの画面上は以下のとおりです。
で、次回は、Warmの描画を充実させます・・・の予定です。
java,描画,JPanel,paintComponent,Graphics,setColor
オブジェクト指向人工生命体3 ― 2010/10/13 00:12
プログラムソースをHTMLで表示する
『オブジェクト指向人工生命体』のプログラムソースを表示するために、プログラムソースをブログ上で表示する方法を調べました。
色々なサイトを見て、次のことが実現できれば『よしっ!』とする事にしました。
・キーワードやコメントに色付けして表示する。
・枠で囲まれていて、1行が長い場合にはスクロールする。
・コピペしてソースを取り出せる。
もちろん、手作業で頑張れないわけじゃぁないですけど、『めんどくせっ!』となるわけです。
…で、google様の力を借りて次の2つが候補に挙がりました(^^♪
・ソースコードHTML化コンバーター「唐辛子」
Web上で変換します。
http://kujirahand.com/tools/tougarasi/
・フリーソフト「SourceConverter」
ダウンロードしてexeを動かします。
http://www.takaiict.com/publish/view/main/softwareList.html
結果、どちらも、機能的には同等でした。キーワードの認識が思い通りにならない点も含めて…(^^;)
さらに、そのままのCSSじゃぁちょっと『お気に召さない』ので多少の手直しが必要な事も…(^^;) まぁ、それがCSSなんですけどね。
ところで、「唐辛子」には「HTML作成時にCSSのクラスを使わずstyle属性を直接記述する」というオプションがあり、CSSを使わないHTMLを出力することもできます。CSSが使えない場合には、こちらを使うことになります。このブログ環境ではCSSの変更が出来るので、この点は検討材料外でした。
で、話を元に戻します。両者には一点だけ大きく違う部分がありました。それは、「唐辛子」は、<pre><code>タグを使っているが、「SourceConverter」はHTML特殊文字を使っている点です。
■「唐辛子」
■「SourceConverter」
当初の目的からいえば、どちらも機能的には満足しているんですが、HTML変換後の修正を考えると読んで直せるHTMLを出力する「唐辛子」を選びました。
…で、以下のとおりです。
…で、肝心のプログラム作りはどうなっているかと言うと、進捗率0%です(-_-;)。日程表どおりに進まないのが開発ですから、気にしない気にしない(^^;)
まっ、まずは外堀を埋めて一気に攻め込むということで…
『オブジェクト指向人工生命体』のプログラムソースを表示するために、プログラムソースをブログ上で表示する方法を調べました。
色々なサイトを見て、次のことが実現できれば『よしっ!』とする事にしました。
・キーワードやコメントに色付けして表示する。
・枠で囲まれていて、1行が長い場合にはスクロールする。
・コピペしてソースを取り出せる。
もちろん、手作業で頑張れないわけじゃぁないですけど、『めんどくせっ!』となるわけです。
…で、google様の力を借りて次の2つが候補に挙がりました(^^♪
・ソースコードHTML化コンバーター「唐辛子」
Web上で変換します。
http://kujirahand.com/tools/tougarasi/
・フリーソフト「SourceConverter」
ダウンロードしてexeを動かします。
http://www.takaiict.com/publish/view/main/softwareList.html
結果、どちらも、機能的には同等でした。キーワードの認識が思い通りにならない点も含めて…(^^;)
さらに、そのままのCSSじゃぁちょっと『お気に召さない』ので多少の手直しが必要な事も…(^^;) まぁ、それがCSSなんですけどね。
ところで、「唐辛子」には「HTML作成時にCSSのクラスを使わずstyle属性を直接記述する」というオプションがあり、CSSを使わないHTMLを出力することもできます。CSSが使えない場合には、こちらを使うことになります。このブログ環境ではCSSの変更が出来るので、この点は検討材料外でした。
で、話を元に戻します。両者には一点だけ大きく違う部分がありました。それは、「唐辛子」は、<pre><code>タグを使っているが、「SourceConverter」はHTML特殊文字を使っている点です。
■「唐辛子」

■「SourceConverter」

当初の目的からいえば、どちらも機能的には満足しているんですが、HTML変換後の修正を考えると読んで直せるHTMLを出力する「唐辛子」を選びました。
…で、以下のとおりです。
public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ SwingUtilities.invokeLater(new Runnable() { public void run() { /* * 複数行のコメントの場合、 * このようになります。 */ for( int i=0; i<10; i++ ) { int j=25; // 同行のコメント String myStr = "文字列"; } MyFrame thisClass = new MyFrame(); thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 長い行があると【ABCDEFGHIJKLMNOPQRSTUVWXYZ】スクロールしてくれます。 thisClass.setVisible(true); } }); }
…で、肝心のプログラム作りはどうなっているかと言うと、進捗率0%です(-_-;)。日程表どおりに進まないのが開発ですから、気にしない気にしない(^^;)
まっ、まずは外堀を埋めて一気に攻め込むということで…



最近のコメント