☆の旦那が、パソコンのセキュリティソフトの期限が切れそうだが何を入れればいいかと聞いてきたので、とりあえずウィルスセキュリティZEROを挙げておいた。
自分なら、ZERO使うぐらいならフリーのを使う。
ただ、フリーの場合、パソコンとの相性が有料ソフトより出やすい印象がある。私がかつてAVASTやAVGを使っていた頃は特にトラブルに見舞われた経験はないのだが、☆の旦那のPCではフリーのを入れるとよくフリーズしたりした。あれは使い方が悪いんじゃないか。。。
もう一つ、フリーのセキュリティソフトは、アンチウィルス(対不正プログラム)とファイヤウォール(対不正侵入)が分かれていることが多く、それぞれ別にインストールして面倒を見ないといけない。否、私が面倒を見ないといけない。
まあOutpostのように両方持っててフリーのもあるにはある。
☆の旦那は今はちゃんと働いているので、1980円ぐらいなら出してもいいんじゃないかと思う。
なにしろZEROはOSのサポートが切れるまで更新料が不要だ。ソフト作ってるK7がWin7のサポート終了まであるかどうかのほうが怪しいだろう。あ、SOURCENEXTもか。
まあ☆家の他のパソコンはみんなカスペルスキーを使っていて、そいつの更新が来年四月だというので、それまでのつなぎにはちょうどいい。多分。
Win7の更新終了は2020年。それまでにPCが増えたとして、とりあえずZEROいれておけば金もかからない。
メインに使うのはどうかと思うが、保険をかけとくには手頃なソフトかもしれない。
電子書籍は便利だ。端末だけ持ち歩けば本棚数個分の本を読めるし、暗いところでもバックライトで読めたりする。
液晶を使ってる電子書籍リーダーはすぐ電池切れになるので論外だが、電子インクを使っている端末ならかなり長持ちするので、かろうじて書籍を名乗ってもいいぐらいではあると思う。
紙の本が不経済だからと減っていき、変わって電子書籍が普及するとすれば、電子書籍がどんなに本として不十分であろうと、必然的に従来の本に置き換わるだろう。
問題は電子書籍が、紙の本の欠点によってではなく、電子書籍の魅力によって置き換わることができるかという点だ。
今のままの電子書籍リーダーなら、それは絶対にないと思う。
なぜかというと電子書籍リーダーは便利だが、便利なだけだからだ。
紙の本は「媒体+情報」で「本」となるが、電子書籍は「リーダー」と「情報」が分離している。
言ってみれば本と読書台のような関係になる。
これがどう関係するかというと、本は一種のコレクションでもあるという事だ。本を読む人間の中には、本棚にずらりと並んでいるところを眺めて満足したりすることが割と重要になる人種がいる。例えば私だ。
これが電子書籍やパソコンの画面上の文字になってしまったら、はっきり言って興ざめだ。
もちろん、コレクション性のない本もある。私なら、一過性の雑誌やビジネス本など、ある程度必要に迫られて読むような本には100年たっても愛着などわかないだろうから、データでかまわない。中の情報が大事なだけなので、検索機能が使える電子書籍が圧倒的に有利だ。
今さらりと愛着という言葉を使ったが、データに愛着を持てるだろうか。あるいは電子書籍リーダーにはどうだろう。
データには自信がない。例えなくしてもコピーすればいいだけなので、逆にありがたみがないのだ。リーダーは、少なくとも今のままでは無理だ。SONYだのAMAZONだのとメーカーがこれでもかと自己主張している機械で、自分では修理もできない。そのくせ充電ができなくなったら買い換えだ。これが100年使えるんなら大事にしようとも思うが、メーカーの意図はどうあれ使い捨てでは、愛着がわく暇がない。
データにも端末にも愛着を持てないなら、読書が単なる、情報を取り入れるための作業になってしまう。
JavaFXでタイマーを使う。
タイマー処理はanimation関数の中だけ。
Timeline t = new Timeline( new KeyFrame ( 間隔 , 処理内容 ) );
import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Group; import javafx.scene.shape.Box; import javafx.geometry.Point3D; import javafx.scene.Scene; import javafx.scene.paint.Color; import javafx.scene.PerspectiveCamera; //タイマー用のimport import javafx.animation.Timeline; import javafx.animation.KeyFrame; import javafx.util.Duration; import javafx.event.ActionEvent; import javafx.event.EventHandler; public class jfx3d_anime extends Application { int i; Timeline timeline; void animation(Box box){ //3D表示に関する記述 Point3D p3 = new Point3D(1,1,0); p3.normalize(); box.setRotationAxis( p3 ); //タイマーの定義 timeline = new Timeline( new KeyFrame( new Duration(25),//25ミリ秒 new EventHandler<ActionEvent>(){ @Override public void handle(ActionEvent event){ //ここに処理を記述 i+=1; box.setRotate(i); } } ) ); //タイマーの開始 timeline.setCycleCount(Timeline.INDEFINITE); timeline.play(); } @Override public void start(Stage stage) { Group root = new Group(); // 辺の長さが20の立方体 Box box = new Box(20, 20, 20); //回転軸を定義 Point3D rotaxis = new Point3D(0.0, 1.0, 1.0); rotaxis.normalize(); //立方体に回転軸と回転角を設定 box.setRotationAxis( rotaxis ); box.setRotate(45.0); root.getChildren().add(box); //ウィンドウのサイズを指定 Scene scene = new Scene(root, 600, 600); //背景色を指定 scene.setFill(Color.BLACK); // 透視投影カメラを設定 PerspectiveCamera camera = new PerspectiveCamera(true); // カメラの位置を (0, 0, -100) にする camera.setTranslateZ(-100.0); //カメラが写す最近距離と最遠距離を指定 camera.setFarClip(200); camera.setNearClip(50); scene.setCamera(camera); stage.setScene(scene); stage.setTitle("3Dサンプル"); stage.show(); animation(box); } public static void main(String... args) { launch(args); } }
import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Group; import javafx.scene.shape.Box; import javafx.geometry.Point3D; import javafx.scene.Scene; import javafx.scene.paint.Color; import javafx.scene.PerspectiveCamera; public class jfx3d extends Application { int i; @Override public void start(Stage stage) { Group root = new Group(); // 辺の長さが20の立方体 Box box = new Box(20, 20, 20); //回転軸を定義 Point3D rotaxis = new Point3D(0.0, 1.0, 1.0); rotaxis.normalize(); //立方体に回転軸と回転角を設定 box.setRotationAxis( rotaxis ); box.setRotate(45.0); root.getChildren().add(box); //ウィンドウのサイズを指定 Scene scene = new Scene(root, 600, 600); //背景色を指定 scene.setFill(Color.BLACK); // 透視投影カメラを設定 PerspectiveCamera camera = new PerspectiveCamera(true); // カメラの位置を (0, 0, -100) にする camera.setTranslateZ(-100.0); //カメラが写す最近距離と最遠距離を指定 camera.setFarClip(200); camera.setNearClip(50); scene.setCamera(camera); stage.setScene(scene); stage.setTitle("3Dサンプル"); stage.show(); } public static void main(String... args) { launch(args); } }
JNAを使用し、JavaからWin32APIのメッセージボックスを表示する
import com.sun.jna.Native; import com.sun.jna.win32.StdCallLibrary; public class Hello { public interface User32 extends StdCallLibrary { User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class); int MessageBoxA(int hwnd, byte[] text, byte[] caption, int type); //① int MessageBoxA(int hwnd, String text, String caption, int type); //② } public static void main(String[] args) { User32 user32 = User32.INSTANCE; try{ user32.MessageBoxA(0, "こんにちは".getBytes(), "◎★♪".getBytes(), 0); user32.MessageBoxA(0, "Hello World", "MessageBox", 0); } catch( Exception e ){ } } }
※全角文字を表示するときは①、半角英数の時は②を使用する。さもないと文字化けする。
前準備
.;C:\dev\JNA\jna.jar;C:\dev\JNA\jna-platform.jar;
のように、jna.jar,jna-platform.jarをCLASSPATHに追加する。
※コンパイル時・実行時に -cpオプションで追加しただけでは不十分な場合がある
コンパイル
javac Hello.java
実行
java Hello
品種にもよるが、バラは丈夫な植物だ。
綺麗な花を咲かせようとさえしなければ、木自体を維持するのはさして難しくない。
挿し木も簡単で、最初は全敗するが、慣れると増えすぎて困る。
以下は今年春(確か。昨年冬だったかも?)挿し木した枝なのだが、元気に育っている。育っているのは喜ばしいが、
邪魔だ。
なぜ上を向いてくれなかった。なぜそこまで面積を欲する。
いい加減どうしようもなくなったので、どの程度根が生えているのか確認してみることにした。
てっきりポットの形に土が抜けるくらいびっしりと張っているかと思ったが、以外とそうでもなかった。
さて、再びポットに移してもいいが、結局手に負えなくなるので、どこかに置いてこよう。きっと親切な人が拾ってくれる。
import java.io.IOException; import java.net.URL; import java.net.HttpURLConnection; import java.util.ArrayList; import java.util.List; import java.io.BufferedInputStream; public class GetWave { public static void main( String[] args ) { HttpURLConnection httpURLConnection = null; try { URL url = new URL( "https://suzulang.com/" ); httpURLConnection = (HttpURLConnection)url.openConnection(); httpURLConnection.setRequestMethod( "GET" ); String ContentType = httpURLConnection.getHeaderField("Content-Type") ; String[] cts = ContentType.split("[;/= ]"); /* ↑ HTTPレスポンスヘッダのContent-Typeを取得する。 Content-Type: text/html; charset=shift_jis のような形をしているので、各特殊記号とスペースを区切り文字としてsplitして、 charsetの次に入っているのが文字列と判断。(↓コード) ただし、Content-Type: text/html;で終わっている場合もある。 */ //文字コードの判別 String CharSet = null; for( int i = 0; i < cts.length; i++){ if( cts[i].toLowerCase().equals("charset") ){ if( i+1 == cts.length ){ CharSet = null; } else{ CharSet = cts[i+1]; } } } if( CharSet == null ){ //文字コード指定がなかったらとりあえずUTF-8にする CharSet = "UTF-8"; } /* ただのInputStreamはreadする度に読みに行くので効率が悪いらしい。 BufferedInputStreamは一度のアクセスで大量のデータを取得する htttp://e-class.center.yuge.ac.jp/jdk_docs/ja/api/java/io/BufferedInputStream.html */ BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream() ); List<Byte> alldata = new ArrayList<Byte>(); //HTML取得 byte [] buf = new byte[1024*4]; int readsize; while( ( readsize = bis.read(buf) ) >= 0 ){ for(int i = 0; i < readsize; i++){ alldata.add( buf[i] ); } } //バイトの配列に変換 byte tostr[] = new byte[ alldata.size() ]; for(int i = 0; i < alldata.size(); i++){ tostr[i] = alldata.get(i); } /* Stringはコンストラクタで文字コードを指定できる。 String(byte[] , Charset)の場合、byteの中の文字コードがCharsetであることを示す。結果、 resultにはUTF-8に変換された文字列が入る。 */ //表示 String result = new String(tostr, CharSet); System.out.println(result); } catch( IOException e ) { e.printStackTrace(); } finally { if( httpURLConnection != null ) { httpURLConnection.disconnect(); } } } }
コンパイル:
>javac GetWave.java
実行
>java GetWave
参考文献:
http://www.kab-studio.biz/Programing/JavaA2Z/Word/00000803.html
私のマシンはi7-2066K (3.40GHz) のRAM 8.00GBと、普段使いにはかなりオーバースペック(必要以上に高性能)なんだが、なぜこんな機械を買ったのかという話。
ひとことでいうと、何に使うかがわからないからだ。
例えば、最近3DCGを始めたんだが、簡単にこんな絵を作れる。
ふーんと言う感じだが、実はこれの元は
こんな感じののっぺらぼーな立体図形だったりする。
こういうのを"モデル"といって、3DCGではこのような"モデル"を作ってから、モデルの材質(反射するか、何色か等)や、撮影するカメラの位置や光源の位置を決めて、"レンダリング"という作業をすることで最初に挙げたような絵を作り上げる。
このレンダリングという作業では、「モデルに光があったら、青く反射して、後ろは影にして」という計算をひたすらにやって色をつけていくわけだが、リアルに色づけをしようと思ったら大変なことになる。
なにしろ、現実世界では光は至る所で反射し続けていて、例えば太陽光がアスファルトに当たったら近くの木に反射して、その反射光は人の服に反射して、さらにその反射光は・・・と無限に繰り返される。
一昔前まではコンピュータでもそんな計算はできなかったので、「光の反射は一回だけ」のようなところで妥協していた。
ところが最近はコンピュータの処理能力が高くなったので、3DCGのソフトが "物理的に正しい" 光の計算をするようになってきた。
最初に出した画像を描いたのはLuxRenderというフリーソフトなんだが、このソフト、
現実では無限に反射を続けるって?
だったら無限に計算すればいいじゃない!
という発想で、ユーザーが中止するまで永遠に計算し続ける。
最初に出した画像は単純なので、1時間くらいかけたら結構綺麗になったが、もっと複雑で大きなシーンなら二日とか三日とかかけないと満足のいく結果が得られない。
動画ならどれくらいかかるかって?考えたくないね!
最初の話に戻るんだが、もし私が低スペックのマシンを買っていたら、「3DCGをやってみたい」と思っても、一日かかっても満足できる絵が描けなくて、つまらなくてやめてしまっていたかもしれない。
パソコンなんて嫌いだ!メールとYahooニュースだけあればいいんだ!とはっきり言い切れるなら、それに適した機械を購入すれば十分だ。
だがパソコンというものに何らかの可能性を見いだしているなら、スペックにはちょっと余裕を持って色々試してみるといい。
OpenGLでテクスチャを視線方向に並べてボリュームレンダリングしていたが、256枚ポリゴンを書いているはずなのに、マシンによっては6枚ぐらいしか表示されないという現象が発生した。
調査したところ、
glOrtho(-m_aspw, m_aspw, -m_asph, m_asph, -1000.0, 1000.0);
となっていたので
glOrtho(-m_aspw, m_aspw, -m_asph, m_asph, -10.0, 10.0);
に書き換えたら直った。もともとそんな遠くまで表示させる必要はなかったのでこれで解決だが、本当に-1000~1000まで必要な場合はどうするのだろう。