金曜日, 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>     

月曜日, 9月 08, 2014

Java: 標準入力から値を得る

Java で標準入力から値を得るのは C++ より面倒です。

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 の関数をページから呼び出すことができます。


木曜日, 5月 01, 2014

HTMLエディターを1行で書く

HTMLエディターを1行で書いてみました。

要するに、書いたHTMLがそれっぽく見えればWYSIWYGってわけですよね。

じゃあ、書いたものをそのままブラウザ表示すりゃいいわけじゃないですか。

これを動かすと、何もないテキストボックスが下のほうに表示されます。

適宜 HTMLコードを入力してみましょう。

画面上部に結果が表示されます。

リアルタイムでHTMLコードが編集できます。

ちょっとしたプレビューにも使えます。

水曜日, 4月 30, 2014

g++ の内部コード

g++ の内部コードは UTF16 で、wchar_t も当然のことながら16ビットです。

なんなら日本語のファイルを読んで、コードを出力してみればいいわけですね。

ロケールを設定する必要があります。


火曜日, 4月 29, 2014

C++ でバイナリで表す

C++ でバイナリで表すには、自分で書かねばならないようです。

べつにたいした手間ではないですが、書かされるという気分が知性に対する挑戦のように思えるわけですね。

こんなことをやらされるために頭脳があるんじゃない!みたいな。

もしそんな教師がいたら最悪ですね。でも現実は頭脳に厳しい。

というわけで書きました。

なんか頭にくるのでここに載せときます。


注意点として、(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 で実行速度が計測できます。

水曜日, 4月 09, 2014

Java:バイナリ表示

Java でバイナリを表示するには、toBinaryString()関数を使うと簡潔に表現できます。

水曜日, 3月 19, 2014

Java 8: ストリーム

Java 8 では文字列をストリームとして扱うことができます。

ストリームにフィルターを追加し、要素を選択することもできます。

下記のコードでは要素の文字長を指定し、表示するものです。

下記のコードは要素の頭文字を指定し、表示します。

Java 8: ラムダ式

Java 8 が正式にリリースされました。

ラムダ式が導入されるということで、さっそく試してみました。

ラムダ式とは関数を抽象化したもので、コンパクトにコールバック関数の引渡し・定義ができます。

ラムダ式のフォーマットですが、

 (引数) -> 定義

となります。Lisp などとは異なる形式ですが、内部クラスなどと比較して簡潔にコールバック関数が定義できます。



火曜日, 2月 25, 2014

MySQL: テーブル構造を取得し、SQL文に変換する

MySQLでテーブル構造を取得するには、DESCRIBE (テーブル名) などのSQL文を使用します。



これを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>
<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
列挙型 enum は Java5 で導入されました。

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用のアプリ開発にはまっております。これが面白い。書き方が全然違うので慣れるまで大変ですが、簡便さ能率と自由度が違う。

Windows8用のアプリは ストアアプリ、メトロアプリ、WinRT などと呼ばれていてどれもメトロスタイルのアプリを書くためのものです。興味深いことにデザインはXAML形式、機能はC#などプログラミング言語で記述します。ここがポイント。

もとWindows7とかWindowsXPのデザインは、もとはRCファイルなどですね。ベタなテキストファイルで、編集は特殊なリソースエディタを使って行っておりました。エディタで部品を置いて、クリックしたときなどの動作をC++で記述するという形です。部品の種類もそこそこあるわけですが、Windows8になってデザインの差もさることながら自由度が格段にアップしました。アプリが豪華に見えます。

ページデザイン、レイアウトをXAMLというXMLに基いた言語で記述することで、あらたな世界が広がっています。HTMLはXMLに準ずる形式ですね。だからXAMLはHTMLのようなものです。ウエブページを書くノリで自由に部品が記述できるのです。これはすごい。どんどんページを書いていって、それから機能を実装していけばいい。

開発環境も優れています。部品の種類もそこそこ厳選されており、ネーミングも悪くない。いや、とてつもなく悪いのもあるわけですが、コンセプト的にはいい。アプリにブラウザ機能をつけるととんでもない便利な環境が出来上がります。ネットにどれだけのリソースがあると思いますか?アプリからそれが全部使える。辞書だろうとニュースサイトだろうとSNSだろうとそのままです。入力を処理する必要さえない。

まだまだ自由に使いこなせているとは言えませんが、チャレンジする価値は十分にあります。情報が少ないのはネックですが、今後の発展を期待しましょう。

日曜日, 11月 24, 2013

Windows ストアアプリ: ローカルファイル

ストアアプリではURIでファイル名を指定します。

Windows.Storage.StorageFile file
   = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(
                                 new Uri("ms-appdata:///local/Doc/" + fileName));

上記の指定では、mss-appdataでローカルファイルを指定し、Docディレクトリ以下のfileNameにアクセスしています。このDocディレクトリはアプリで用意する必要があります。あらかじめアプリケーションのほうでDocディレクトリを用意し、ファイルを置いておけば、ローカルファイルから読み込むことができます。

 
ややこしいことに、元ファイルは、ローカルにコピーされたファイルとは別物です。つまり、ms-appdataで指定されたファイルをいくら書き直しても元ファイルには反映されません。 元ファイルのほうは、ms-appxで指定します。ファイルは読み込み専用です。

Windows.Storage.StorageFile file
  = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(
                                new Uri("ms-appx:///Doc/" + fileName));

ローカルファイルのほうを調べたければ Windows.Storage.ApplicationData.Current.LocalFolder.Path に指定されているディレクトリを見に行く必要があります。




PHP: CSVをHTML形式のテーブルに変換

CSV を HTML 形式のテーブルに変換するニーズというのは多々あるものです。

HTML のテーブル形式に変換したいときに使えるツールを作ってみました。

CSV 形式のデータを上のテキストボックスにほうりこみ、Convert ボタンをクリックすると変換された HTML コードが表示されます。

ツールを使い捨てないためにここにアップします。

<html>
<head>
<style>
textarea
{
width:1000px;
height:500px;
}
</style>
</head>
<body>

<?
$text=$_REQUEST['text'];

echo <<<END
<form action="table.php">
<textarea name="text">$text</textarea>
<input type="submit" value="Convert" />
</form>
END;

$text=$_REQUEST['text'];
$text=htmlspecialchars($text);
$list=explode("\n",$text);
$html="";
foreach($list as $line)
  {
    $columnList=explode(",",$line);
    $column=implode("</td><td>",$columnList);
    $html.="<tr><td>$column</td></tr>";
  }
$html="<table><tbody><pre>
$html
</pre></tbody></table>
";
echo <<<END
<textarea>
$html
</textarea>
$html
END;
?>
</body>
</html>

日曜日, 11月 10, 2013

WinRT/Metro TIPS:ストアアプリで部品サイズを可変にする

なかなか普及の進まない Windows 8.1 と騒がれていますが、当方果敢にもストアアプリ作成にチャレンジ中であります。

プログラムの基本概念なぞという人間は現場を・知らない・知ろうとしない・連中だとまずここで一言。

考え方としてはプログラム構造は Java のような OOP で、見た目は XML で指定します。

ストアアプリでは XML 形式を拡張した XAML 形式で画面構成を指定します。

Visual Studio 2013 という豪華な(金のかかった) IDE には圧倒されますが、それなりにクセのあるツールではあります。

部品サイズを可変に指定するやり方に悩んでしまい、ネットにもなさそうなのでここに書いておきます。

Visual Studio 2013 部品を可変サイズにする
サイズを可変にするには Width と Height 右のアイコンを押して Auto に指定、さらに HorizontalAlignment と VerticalAlignment の一番右のアイコンで画面最大幅を指定します。

部品の幅を可変にする
 アルファベット順に並んでいるので、Width の真上に高さを指定する属性 VerticalAlignment がくるわけですね。

ストアアプリの開発関連情報はまだまだ少ないですね。

金曜日, 8月 23, 2013

IEでは異なる要素でも同じ名前はダメ。

表題の通りです。

 DIV要素とUL要素で同じ名前にしてやられました。

以下のように指定したとします。
<div id="menu">
<ul id="menu">
<li>
Click Here
</li>
</ul>
</div>
それで、クリック時に呼び出す関数を指定したとします。
    $(document).ready(
 function()
 {
     $("ul#menu > li").click(function(){
     alert("here");
     });
 });
これだと、Firefoxは意図を察して動いてくれるのですが、IEだとだめだめです。

あちゃー という本日の発見でした。

Flask の Blueprint のテンプレート問題

  Flask の Blueprint は、ルート、静的ファイル、テンプレートをまとめて管理できます。しかし、テンプレートが指定できません。 ここでは、Blueprint の template_folder の問題点と回避策を説明します。 Blueprint のテンプレート問題...