月曜日, 4月 20, 2015
水曜日, 2月 25, 2015
Java: データ・マイニング ECLAT変換
データ・マイニングなんぞでデータ変換など需要がありましたので、プログラムなど置いておきます。
変換といっても縦のものを横にするという種類のもので、こんな感じです。
アルファベットが項目で、数字がIDです。
走らせるとアルファベットからIDを列挙します。
変換といっても縦のものを横にするという種類のもので、こんな感じです。
アルファベットが項目で、数字がIDです。
走らせるとアルファベットからIDを列挙します。
火曜日, 2月 24, 2015
Java: 楕円銀河
銀河系ってのはさまざまな形をしていますが、楕円形ってのがもっとも多いわけです。
楕円形のつぶれかたで記号までついてるわけですね。
E0 から E7 まであるわけですが、E0 がもっとも丸い。E7 がつぶれた形をしている。
こんなのを Java でインタラクティブで動かせたらいいかな、というんで書いてみました。
そのままコンパイルすると動くはずです。です。
楕円形のつぶれかたで記号までついてるわけですね。
E0 から E7 まであるわけですが、E0 がもっとも丸い。E7 がつぶれた形をしている。
こんなのを Java でインタラクティブで動かせたらいいかな、というんで書いてみました。
そのままコンパイルすると動くはずです。です。
火曜日, 1月 13, 2015
Java: BigInteger で階乗を計算する
自然数ってのは限りがありません。もし上限 n があったと仮定すると、 n+1 が整数、これは矛盾します。よって上限はない。数学ってのは証明ができていいですね。
ところがいざプログラムで実装となるとガラスの壁ってのがあるわけです。ご存じのとおり整数型の上限は64ビット long で -9223372036854775808 から 9223372036854775807。
これだともっと大きな整数は扱えません。そこで、Java では整数を抽象化し、BigInteger として制限のない整数を表現します。
この BigInteger、四則演算は揃っているのですが、演算メソッドが限られていて、階乗がありません。いちいち定義すればいいわけですが、こんなところで立ち止まっていては世界が見えてこない。
そこで、BigInteger で階乗を計算するコードを載せておきます。
この階乗を使うと、組み合わせなど計算ができます。階乗で定義されるやつですね。
実はこの組み合わせ、再帰で定義できます。パスカルの三角形といわれるやつです。
証明はこちら。
ところがいざプログラムで実装となるとガラスの壁ってのがあるわけです。ご存じのとおり整数型の上限は64ビット long で -9223372036854775808 から 9223372036854775807。
これだともっと大きな整数は扱えません。そこで、Java では整数を抽象化し、BigInteger として制限のない整数を表現します。
この BigInteger、四則演算は揃っているのですが、演算メソッドが限られていて、階乗がありません。いちいち定義すればいいわけですが、こんなところで立ち止まっていては世界が見えてこない。
そこで、BigInteger で階乗を計算するコードを載せておきます。
この階乗を使うと、組み合わせなど計算ができます。階乗で定義されるやつですね。
実はこの組み合わせ、再帰で定義できます。パスカルの三角形といわれるやつです。
証明はこちら。
金曜日, 11月 21, 2014
NetBeans+Maven: JARファイルが起動しない
NetBeans+Maven で書いた Java アプリを、いざ起動しようと思うと動かないわけですね。
動作環境は NetBeans 8.0.1 です。快適な Java 開発環境です。Maven も入っている。おすすめです。
補完機能もあるし、フォーマットからコメントアウトまで編集機能も万全。JUnit なんかもテンプレートで作成できます。
さくさくとプログラムを書いて、コンパイル。無事テストも通って、できた JAR ファイルを起動。JAR ファイルなら Windows 上で実行形式ファイルとしてそのまま起動できるはずです。
さっそくというのでアイコンをクリックをクリックします。で、動かない。
できてないですね。NetBeans。なんなんですかね。
コマンドラインで動かしてみれば理由はあきらか。Main-Class が設定されていない。
肝心なところでなぜなんだと悩みました。だってできたプログラムをいざ実用化っていう大切な瞬間ですよね。なぜでしょう。意図的としか思えませんね。
まあ陰謀論はいいんですが、結論から言うと解決は簡単で、pom.xml ファイルで Main-Class を設定します。
こんなコードを加えてやります。
#タグの大文字小文字が違っていたので訂正します。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>easai.treeeditor.TreeEditor</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
JARファイルを追加するには以下のように記述します。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>easai.db.DB</mainClass>
</manifest>
<manifestEntries>
<Class-Path>mysql-connector-java-5.1.6-bin.jar</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
動作環境は NetBeans 8.0.1 です。快適な Java 開発環境です。Maven も入っている。おすすめです。
補完機能もあるし、フォーマットからコメントアウトまで編集機能も万全。JUnit なんかもテンプレートで作成できます。
さくさくとプログラムを書いて、コンパイル。無事テストも通って、できた JAR ファイルを起動。JAR ファイルなら Windows 上で実行形式ファイルとしてそのまま起動できるはずです。
さっそくというのでアイコンをクリックをクリックします。で、動かない。
できてないですね。NetBeans。なんなんですかね。
コマンドラインで動かしてみれば理由はあきらか。Main-Class が設定されていない。
肝心なところでなぜなんだと悩みました。だってできたプログラムをいざ実用化っていう大切な瞬間ですよね。なぜでしょう。意図的としか思えませんね。
まあ陰謀論はいいんですが、結論から言うと解決は簡単で、pom.xml ファイルで Main-Class を設定します。
こんなコードを加えてやります。
#タグの大文字小文字が違っていたので訂正します。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>easai.treeeditor.TreeEditor</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
JARファイルを追加するには以下のように記述します。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>easai.db.DB</mainClass>
</manifest>
<manifestEntries>
<Class-Path>mysql-connector-java-5.1.6-bin.jar</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
月曜日, 9月 08, 2014
Java: 標準入力から値を得る
Java で標準入力から値を得るのは C++ より面倒です。
C++ では cin を使いますよね。 標準入力ストリームを使うわけです。
Java では標準入力は System.in です。しかし、です。このままでは使えないんですね。
以下の F1 Score 計算プログラムでは Scanner を使用しています。
C++ では cin を使いますよね。 標準入力ストリームを使うわけです。
Java では標準入力は System.in です。しかし、です。このままでは使えないんですね。
以下の F1 Score 計算プログラムでは Scanner を使用しています。
木曜日, 7月 10, 2014
3Dプリンターを使ってみての考察
3Dプリンターを使ってみての所感です。
- ルーターは必須。バリや凹凸はもちろん、サイズを合わせるため必須。
- プラスチック樹脂の種類によって強度、加工しやすさが違う。色もメーカーによって違う。
- ABSは曲げられない。折れる。硬さはそれぞれの樹脂の質による。
- フィラメントが引っかかると層がずれて悲惨な作品が出来上がる。フィラメントのフィードが遅いマシンでは "Extrusion multiplier" の値を低くする。フィラメントの太さを指定する必要がある。
- アセトンで壊れたパーツを修復できる。フィラメントを溶かしたアセトン溶液を使うといい。アセトンはすぐ蒸発するのでガラス瓶など使うと容器内で蒸発する。目薬の容器は小さくて少量ずつ出すことができて便利。
- 糊をたっぷり使わないと作品がはがれる。ブリム brim をつけると倒れにくくなる。ラフト raft をつけると底面からはがせる。
- 糊はコーンスターチと水を電子レンジで加熱すると大量生産できる。夏場は糊が腐るので酢を少量混ぜるといい。
- よく監視しておかないとフィラメントを無駄にする。
- 糊が乾燥するので水道水をスプレーするといい。
- 冷えるまで触ってはならない。柔らかいので無理に外すと壊れる。
- 解像度は低い。
- 時間がかかる。
- 削るのは時間のかかる作業である。
- 思いのまま作品ができる。「今まで何してたんだろう」的な気分になる。カスタマイズも自由。
金曜日, 6月 20, 2014
火曜日, 5月 13, 2014
Javascript (jQuery) から PHP の関数を呼び出す
ボタンを押したときに、PHP の関数を呼び出したいとします。
Form を使って PHP ファイルを読み込み、ページ全体を書き直すという手段もありますが、ある関数だけを呼び出したいときなど、ajax を使うと PHP 関数を呼び出してページ側で返り値を得ることができます。
このように、url でファイル名を指定して、success で返り値 results として引き渡してやります。
PHP ファイル側では、渡したい値を echo などで表示します。
これで PHP の関数をページから呼び出すことができます。
Form を使って PHP ファイルを読み込み、ページ全体を書き直すという手段もありますが、ある関数だけを呼び出したいときなど、ajax を使うと PHP 関数を呼び出してページ側で返り値を得ることができます。
このように、url でファイル名を指定して、success で返り値 results として引き渡してやります。
PHP ファイル側では、渡したい値を echo などで表示します。
これで PHP の関数をページから呼び出すことができます。
木曜日, 5月 01, 2014
HTMLエディターを1行で書く
HTMLエディターを1行で書いてみました。
要するに、書いたHTMLがそれっぽく見えればWYSIWYGってわけですよね。
じゃあ、書いたものをそのままブラウザ表示すりゃいいわけじゃないですか。
これを動かすと、何もないテキストボックスが下のほうに表示されます。
適宜 HTMLコードを入力してみましょう。
画面上部に結果が表示されます。
リアルタイムでHTMLコードが編集できます。
ちょっとしたプレビューにも使えます。
要するに、書いたHTMLがそれっぽく見えればWYSIWYGってわけですよね。
じゃあ、書いたものをそのままブラウザ表示すりゃいいわけじゃないですか。
これを動かすと、何もないテキストボックスが下のほうに表示されます。
適宜 HTMLコードを入力してみましょう。
画面上部に結果が表示されます。
リアルタイムでHTMLコードが編集できます。
ちょっとしたプレビューにも使えます。
水曜日, 4月 30, 2014
g++ の内部コード
g++ の内部コードは UTF16 で、wchar_t も当然のことながら16ビットです。
なんなら日本語のファイルを読んで、コードを出力してみればいいわけですね。
ロケールを設定する必要があります。
なんなら日本語のファイルを読んで、コードを出力してみればいいわけですね。
ロケールを設定する必要があります。
火曜日, 4月 29, 2014
C++ でバイナリで表す
C++ でバイナリで表すには、自分で書かねばならないようです。
べつにたいした手間ではないですが、書かされるという気分が知性に対する挑戦のように思えるわけですね。
こんなことをやらされるために頭脳があるんじゃない!みたいな。
もしそんな教師がいたら最悪ですね。でも現実は頭脳に厳しい。
というわけで書きました。
なんか頭にくるのでここに載せときます。
注意点として、(int16_t)0xff などとキャストすると結果は 1111111111111111 と表示されます。
当然そうなるわけなんですが、0000000011111111 とはなりません。
注意しましょう。
べつにたいした手間ではないですが、書かされるという気分が知性に対する挑戦のように思えるわけですね。
こんなことをやらされるために頭脳があるんじゃない!みたいな。
もしそんな教師がいたら最悪ですね。でも現実は頭脳に厳しい。
というわけで書きました。
なんか頭にくるのでここに載せときます。
注意点として、(int16_t)0xff などとキャストすると結果は 1111111111111111 と表示されます。
当然そうなるわけなんですが、0000000011111111 とはなりません。
注意しましょう。
火曜日, 4月 22, 2014
eshell (Emacs) と .website (IE) , time (実行時間の計測)メモ
本日の収穫:
M-x eshell
Emacs エディタの話です。
M-x shell を愛用していたわけなんですが、M-x eshell なるものがあるんですね。
ずっと便利じゃないですかこれ。早いし。なんだったんだ今までの苦労は(笑
コマンドの結果が別ウィンドウで表示されます。
.website
IE の話です。
サイトのファビコンをクリック・ドラッグすると、サイトのリンクを作れます。
サイトのリンクと同じようなものですが、IEを指定できます。
time
time ./a.exe で実行速度が計測できます。
M-x eshell
Emacs エディタの話です。
M-x shell を愛用していたわけなんですが、M-x eshell なるものがあるんですね。
ずっと便利じゃないですかこれ。早いし。なんだったんだ今までの苦労は(笑
コマンドの結果が別ウィンドウで表示されます。
.website
IE の話です。
サイトのファビコンをクリック・ドラッグすると、サイトのリンクを作れます。
サイトのリンクと同じようなものですが、IEを指定できます。
time
time ./a.exe で実行速度が計測できます。
水曜日, 4月 09, 2014
水曜日, 3月 19, 2014
Java 8: ストリーム
Java 8 では文字列をストリームとして扱うことができます。
ストリームにフィルターを追加し、要素を選択することもできます。
下記のコードでは要素の文字長を指定し、表示するものです。
下記のコードは要素の頭文字を指定し、表示します。
ストリームにフィルターを追加し、要素を選択することもできます。
下記のコードでは要素の文字長を指定し、表示するものです。
下記のコードは要素の頭文字を指定し、表示します。
Java 8: ラムダ式
Java 8 が正式にリリースされました。
ラムダ式が導入されるということで、さっそく試してみました。
ラムダ式とは関数を抽象化したもので、コンパクトにコールバック関数の引渡し・定義ができます。
ラムダ式のフォーマットですが、
(引数) -> 定義
となります。Lisp などとは異なる形式ですが、内部クラスなどと比較して簡潔にコールバック関数が定義できます。
ラムダ式が導入されるということで、さっそく試してみました。
ラムダ式とは関数を抽象化したもので、コンパクトにコールバック関数の引渡し・定義ができます。
ラムダ式のフォーマットですが、
(引数) -> 定義
となります。Lisp などとは異なる形式ですが、内部クラスなどと比較して簡潔にコールバック関数が定義できます。
火曜日, 2月 25, 2014
MySQL: テーブル構造を取得し、SQL文に変換する
MySQLでテーブル構造を取得するには、DESCRIBE (テーブル名) などのSQL文を使用します。
これをSQL文に変換するには、テーブルの情報をSQL文の形式でそれぞれ記述してやる必要があります。
ここで気をつけねばならないのは、timestamp値をとるコラムです。
デフォルト値に CURRENT_TIMESTAMP をとるコラムは、TIMESTAMP 値をとるコラムより前に記述しなければなりません。
コラムを並べ替える必要があります。
ここでは array_unshift() という関数を使用し、CURRENT_TIMESTAMP をとるコラムを配列の最初に格納するという方法をとりました。
ソースコード: GitHub: tablestructure.php
これをSQL文に変換するには、テーブルの情報をSQL文の形式でそれぞれ記述してやる必要があります。
CREATE TABLE IF NOT EXISTS `notes` ( `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `id` int(11) NOT NULL AUTO_INCREMENT, `title` text COLLATE utf8_unicode_ci NOT NULL, `description` text COLLATE utf8_unicode_ci NOT NULL, `videoid` text COLLATE utf8_unicode_ci NOT NULL, `imagefile` text COLLATE utf8_unicode_ci NOT NULL, `docnum` text COLLATE utf8_unicode_ci NOT NULL, `shortdesc` text COLLATE utf8_unicode_ci NOT NULL, `onhold` int(11) NOT NULL, `registered` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=61 ;
ここで気をつけねばならないのは、timestamp値をとるコラムです。
デフォルト値に CURRENT_TIMESTAMP をとるコラムは、TIMESTAMP 値をとるコラムより前に記述しなければなりません。
コラムを並べ替える必要があります。
ここでは array_unshift() という関数を使用し、CURRENT_TIMESTAMP をとるコラムを配列の最初に格納するという方法をとりました。
ソースコード: GitHub: tablestructure.php
木曜日, 12月 19, 2013
PHP: HTML セーフなコードに変換
HTMLコードを書く際に、不等号記号などそのまま書くとブラウザが勝手に変換してしまいます。
プログラムなどを表示するためには、記号をHTMLに変換しなければなりません。
ブラウザの勝手な行動を制限するために、変換するツールを作成しました。
使い捨てないツールのためにここにアップします。
以下のコードを html.php というファイルに保存し、PHP の動く環境でブラウザを使って表示します。
テキストボックスにコードを打ち込み、Convert ボタンを押すと変換されたコードが表示されます。
プログラムなどを表示するためには、記号をHTMLに変換しなければなりません。
ブラウザの勝手な行動を制限するために、変換するツールを作成しました。
使い捨てないツールのためにここにアップします。
以下のコードを html.php というファイルに保存し、PHP の動く環境でブラウザを使って表示します。
テキストボックスにコードを打ち込み、Convert ボタンを押すと変換されたコードが表示されます。
<html>
<head>
<style>
textarea
{
width:1000px;
height:500px;
}
</style>
</head>
<body>
<?
$text=$_REQUEST['text'];
$text=htmlspecialchars($text);
echo <<<END
<form action="html.php">
<textarea name="text">$text</textarea>
<input type="submit" value="Convert" />
</form>
END;
$html=htmlspecialchars($text);
echo <<<END
<textarea>
$html
</textarea>
END;
?>
</body>
</html>
土曜日, 12月 14, 2013
Java: 列挙型 enum を switch文で使う
![]() |
| Mandelbrot |
public enum Periodic{PERIODIC,PREPERIODIC,NONPERIODIC};
名前を付けて、識別子を列挙します。
この値を変数に代入するには、静的に定義された変数として扱います。
Periodic periodic=Periodic.NONPERIODIC;
列挙型変数名を指定する必要があるわけです。
ただし、switch文で使う場合には指定しません。
switch(isPeriodic())
{
case PERIODIC:
System.out.println("f is periodic.");
break;
case NONPERIODIC:
System.out.println("f is not periodic.");
break;
case PREPERIODIC:
System.out.println("f is pre-periodic.");
break;
}
気を付けましょう。
日曜日, 12月 01, 2013
Windows 8 ストアアプリ開発にはまっております。
![]() |
| 作りかけのメトロアプリ |
Windows8用のアプリは ストアアプリ、メトロアプリ、WinRT などと呼ばれていてどれもメトロスタイルのアプリを書くためのものです。興味深いことにデザインはXAML形式、機能はC#などプログラミング言語で記述します。ここがポイント。
もとWindows7とかWindowsXPのデザインは、もとはRCファイルなどですね。ベタなテキストファイルで、編集は特殊なリソースエディタを使って行っておりました。エディタで部品を置いて、クリックしたときなどの動作をC++で記述するという形です。部品の種類もそこそこあるわけですが、Windows8になってデザインの差もさることながら自由度が格段にアップしました。アプリが豪華に見えます。
ページデザイン、レイアウトをXAMLというXMLに基いた言語で記述することで、あらたな世界が広がっています。HTMLはXMLに準ずる形式ですね。だからXAMLはHTMLのようなものです。ウエブページを書くノリで自由に部品が記述できるのです。これはすごい。どんどんページを書いていって、それから機能を実装していけばいい。
開発環境も優れています。部品の種類もそこそこ厳選されており、ネーミングも悪くない。いや、とてつもなく悪いのもあるわけですが、コンセプト的にはいい。アプリにブラウザ機能をつけるととんでもない便利な環境が出来上がります。ネットにどれだけのリソースがあると思いますか?アプリからそれが全部使える。辞書だろうとニュースサイトだろうとSNSだろうとそのままです。入力を処理する必要さえない。
まだまだ自由に使いこなせているとは言えませんが、チャレンジする価値は十分にあります。情報が少ないのはネックですが、今後の発展を期待しましょう。
登録:
投稿 (Atom)
Flask の Blueprint のテンプレート問題
Flask の Blueprint は、ルート、静的ファイル、テンプレートをまとめて管理できます。しかし、テンプレートが指定できません。 ここでは、Blueprint の template_folder の問題点と回避策を説明します。 Blueprint のテンプレート問題...
-
Qt はまってます。Mac でも書いたアプリがコンパイルできて、しっかり動くのを確認しました。このあいだ Chitubox が Qt 使ってるのを知ってうれしかったです。 Mac でもそのまま動くんですが、アプリのアイコンの設定はプラットフォーム依存です。 公式マニュアルでも設定...
-
コンデンサマイク 極性があります コンデンサマイクがようやく届きました。モジュールではないのでそのままでは信号が弱いので使えません。信号を増幅する必要があります。 ちょっとした手間ですが、首尾よく動いてくれました。この回路の応用で、使えるマイクが出来ます。 ...
-
今日ホール素子が届きました。 ホール素子ってのは ホール効果 を利用して磁場を感知するセンサーです。 iPad のケースとか、閉じると電源が切れてくれますよね。ケースのカバーの磁石の磁場をホール素子が感知してるわけです。 さっそくホール素子を使ってみよう!電圧...











