2008年10月28日 (火)

FDTD法 セルサイズ決定

いろいろと含めてテスト。

Texclip20081028142253

これはFDTD法を用いるときに考えるセルサイズを決定する式。PowerPointとかの数式エディタがよく分からなく、ネットで探していたら数式をTexのようにしてくれるサイトを発見。それがこちらのTeXclip

とっても綺麗。

テストというのは、このように数式を綺麗に簡単に貼ることができるかどうか。

次に適当に作ったプログラム。

//
// セルサイズ決定(コマンドライン)
//
#include<stdio.h>
#include<math.h>

#define C 3.0e+10

main() {
	float freq ,delta, epsilon;
	
	printf("Input Frequency[MHz] > ");
	scanf("%f", &freq);
	printf("Input Relative Permittivity > ");
 	scanf("%f", &epsilon);

	freq = freq * 1e+6;
	delta = C/(10*freq*sqrt(epsilon));
	printf("cell size = %lf[cm]", delta);
}

単位はcm。入力するのは周波数と比誘電率。周波数や比誘電率に応じて、セルサイズを考えるのがめんどうだったから、作ってみた。

| | コメント (0) | トラックバック (0)

2008年10月17日 (金)

Cygwin

とりあえず、簡単なプログラムだったらCygwinをインストールして、コンパイルすれば何とかなるような気になってきた。

あれやこれやとやっているうちに、Fortranのコンパイルまで気がついたらやっていた。

| | コメント (0) | トラックバック (0)

2008年5月12日 (月)

Visual Studio.NET(VC++)で外部プログラム呼び出し

開発環境は、VisualStudio.NET 2003です。

これのVisual C++ Windowsフォームアプリケーション(.NET)で作成、そのメモ。

まず、プロジェクトの新規作成を選択し、上記のテンプレを適当な名前でプロジェクトを作成する。そうすると、Form1.h[デザイン]という画面が表れるので、これにボタンを貼り付ける。

デザイン画面にて、ボタンをダブルクリックすると、

private: System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)
    {
   
    }

というコードがForm1.hに描かれる。外部プログラムを呼び出すには、ここに、

ProcessStartInfo * sInfo = new ProcessStartInfo("notepad.exe");
Process::Start(sInfo);

と追加すればよい。最初はShellExecute関数で実装しようと思っていたが、エラーを連発して断念。解決法が分からなかったので、.NET Framework クラスライブラリを使用。

| | コメント (0) | トラックバック (0)

2008年4月25日 (金)

WinShell 設定メモ

WindowsでTex環境を揃えたあとの、WinShellでの設定メモ。

インストール時に「Japanese」を選択すれば、メニューバーなどは日本語表示される。このときに、実際に新規ドキュメントを作成すると文字化けをするかもしれない。この場合では、メニューバーの「オプション」→「フォント」→「スクリプト」で日本語を選択すれば直るかもしれない。

次にTexプログラムの設定について。これは、メニューバー→「オプション」→「主なTexプログラムの設定」を選択し、以下のように設定する。

  • LaTex - platex - "%s.tex"
  • DVIView - ~\dviout.exe - "%s.dvi"
  • DVI -> PS - dvipsk - -D600 "%s.dvi"
  • GSView - ~\gsview\gsview32.exe - "%s.ps"
  • PDFLatex - dvipdfmx - "%s.dvi"
  • PDFView - (ビュアー) - "%s.pdf"

順番は、プログラム名 - exeファイル名 - コマンドライン。

| | コメント (0) | トラックバック (0)

2008年2月21日 (木)

NetBeans+J2ME

アプリ作成のために、NetBeansを導入してみた。

ja:NetBeans 日本語サイト

NetBeansは無償で利用できる統合開発環境で、Eclipseとどっちにしようかと迷ったけれども何となくこっちにしてみた。ダウンロードしたのは「Mobility」パック。インストール後に起動してみたけれども、パソコンのスペックが低いせいか重い。

けれど、エディタ単体で作成するよりも、色々と機能があって楽になりそうです。

まぁ、たいしたものは作成していないのだけれども。

+CDLC1.1での補足メモ。

CDLC1.1からdouble,float,sin,cos,tanなどを扱うことができるけれども、logなどは無いので個人的に定義する必要がある。

定義する際に気を付けたいことは、どの程度までの誤差を許可するかということ。個人利用のみでアプリを作成するなら、計算する際の有効数字の範囲内で誤差が生じてなければいいのかもしれない。

というのも、どうやって自然対数・常用対数の関数を定義しようか考えていたから。自分の場合は、とりあえず自然対数を数値積分で求めてから、変換公式を利用して常用対数としている。なので、自然対数の数値積分の時点で誤差が大きいと、後々の計算にも影響が出てくる。

数値積分は、シンプソンの公式で分割数を40に設定して計算しているけれどもどうなんだろう。パソコン上では、実行時に計算時間は掛かっていないけれども、端末で実際に起動したら、どんな感じになるんだろう。

| | コメント (0) | トラックバック (0)

2008年2月18日 (月)

CDLC1.1 小数点メモ

オープンアプリを扱える機種に変更したということで、個人的に使いそうなアプリを作成中。作成しているものとしては、簡単な数値計算ができるようなもの。

数値計算する上で、小数はどこかで出てくるものでそれについての簡単なメモ。

1)キー処理などから文字列(str)を取得する

2)double a = Double.parseDouble(str);

3)計算する

Integer.parseInt(str)を少し変えるだけで、取得した文字列を小数化することでできるようです。floatについても同じ。この他にも、sin,cos,tanの値を得る関数もあるようです。

import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class suchi extends MIDlet implements CommandListener {

private static Display display;
private static Command exitCmd = new Command("EXIT",Command.EXIT,1);

public suchi() {
  display = Display.getDisplay(this);
  sc canvas = new sc();
 
  canvas.addCommand(exitCmd);
  canvas.setCommandListener(this);
  display.setCurrent(canvas);
 
}
//アプリの開始
public void startApp() {}

//アプリの一時停止
public void pauseApp() {}

//アプリの終了
public void destroyApp(boolean unconditional){}

//exitCmd
public void commandAction(Command c, Displayable s) {
    if (c == exitCmd)
      notifyDestroyed();
}
}

//suchi_canvas
class sc extends Canvas {

  sc() {}
    public void paint( Graphics g ) {

  //描画
    g.setColor( 255, 255, 255 );
    g.fillRect( 0, 0, getWidth(), getHeight() );

    g.setColor( 255, 0, 0 );
  g.drawString("サンプル",0,0,g.LEFT|g.TOP);

  g.setColor( 0, 0, 0 );
    g.drawString("PI="+Math.PI, 0, 20,g.LEFT|g.TOP);
  g.drawString("SIN="+Math.sin((Math.PI)/2), 0, 30,g.LEFT|g.TOP);
  g.drawString("COS="+Math.cos(0.0), 0, 40,g.LEFT|g.TOP);
  g.drawString("TAN="+Math.tan(0.0), 0, 50,g.LEFT|g.TOP);
  }
}

まだ使い方がよくわかないですが、これを実行するとこのようになります。

      Sample

とりあえず、CDLC1.1を選択すれば小数の計算を実行してくれることがわかりました。上のプログラムでも気になる箇所もあるので、もっと調べてみないといけないです。

ちなみに、CDLC1.0を選択してビルドすると、

シンボル: 変数 PI
場所    : java.lang.Math の クラス
    g.drawString("PI="+Math.PI, 0, 20,g.LEFT|g.TOP);
                           ^

などのエラーが発生します。

以上個人的なメモ。

| | コメント (0) | トラックバック (0)

2007年3月 7日 (水)

気になった点

今さら~、何て感もありますがAWSで遊んでて気になった点。

技術的なものではありません。そんな技量もありませんし。

Amazonのカテゴリーコードについて。

電撃文庫だったら「1062004」、富士見ファンタジア文庫だったら「1061998」という感じにあり、他にも角川スニーカー文庫、スーパーダッシュ文庫などにもあります。

気になったのは、富士見ミステリー文庫

同じように、「1062000」とちゃんとあるのですが2004年8月ぐらいから更新されていないような。Amazonの分類から辿っていくと、

http://www.amazon.co.jp/s/ref=sr_st/250-7533542-1720219?__mk_ja_JP=%83J%83%5E%83J%83i&page=1&rh=n%3A465610%2Cn%3A466300%2Cn%3A492410%2Cn%3A520808%2Cn%3A1061996%2Cn%3A1062000&sort=daterank&x=6&y=13

サイト内の検索を試してみると、

http://www.amazon.co.jp/s/ref=sr_st/250-7533542-1720219?__mk_ja_JP=%83J%83%5E%83J%83i&keywords=%95x%8Em%8C%A9%83%7E%83X%83e%83%8A%81%5B%95%B6%8C%C9&page=1&rh=n%3A465610%2Ck%3A%95x%8Em%8C%A9%83%7E%83X%83e%83%8A%81%5B%95%B6%8C%C9&sort=daterank&x=11&y=13

結果が違う。商品のXMLデータを見てみると、単純に

<BrowseNode>
<BrowseId>1062000</BrowseId>
<BrowseName>ジャンル別 - 新書・文庫 - 出版社別 - な・は行 - 富士見書房 - 富士見ミステリー文庫</BrowseName>
</BrowseNode>

ここが無いからだとは思うのですが、どうなんだろ。

最初の方に、2004年8月~と書きましたが「GOSICK<1>」は2003年12月発売。けれども上のデータは無かった。

分からん。

| | コメント (0) | トラックバック (3)

2007年2月27日 (火)

spry 素敵

もうそろそろ2月も終わりですねぇ。

ここ最近はパソコンのメールをチェックしてみると、知らないお姉様方から文面がいやらしいものが毎日何通か届いております。

どう考えても、スパムメールです。本当にありがとうございました。

それはさておき、VineかFedora、どちらにしようか悩んでましたが前者の方に決定。理由は初心者でも大丈夫、日本語関連も充実、容量が小さいなどなど。早速ミラーサイトからダウンロード。今使っているパソコンを専用機にしたいところだけれども、これ1台しか無いのでデュアルブートで環境を作りたいところです。

それまでは、PHPとかは一時保留・・・はないかな。

今はAjaxで色々と試しているところです。

今日はspryフレームワークでもそもそと。

Adobe Labs - Spry framework for Ajax」にてダウンロード。AdobeIDを持っていなければ、メールアドレス・名前・市町村・国・郵便番号・パスワードなどの情報を登録しなければなりません。AWSよりも登録する項目は少なかったです。

XMLデータ内の数値をソートすることがとても簡単に。全体的にもかなりスッキリしましたよー。

AjaxでXMLデータを取り扱っていて、なぜか本では文字化けしていないのに、こちらでやるとそうなってしまうのか少しわかりました。例えば、ファイル内で

<?xml version="1.0" encoding="utf-8"?>

として宣言して、

        Sippai_1

こんな感じになることもあったりしたのですが、ここら辺はファイルか何かの文字コードが「shift-jis」なのに「utf-8」を指定しているからだからかな。「TeraPad」でファイルを開いてみると、下のステータスバー右側に表示されていました。

なので、「ファイル」→「文字/改行コード指定保存」→「文字コード」で「utf-8」を指定してあげると正常になりました。

今まで気付きませんでしたー。

| | コメント (0) | トラックバック (2)

2007年2月24日 (土)

迷う

Linuxをインスールしようと思っているけれども、どのディストリビューションにしたら良いのか迷ってます。今後、TeXを使うこともあるのでVine Linx、もしくは何となくFedora Coreか。

使う用途は限られているし、もう少し調べてみてからでもいいかな。

| | コメント (0) | トラックバック (0)

2007年2月17日 (土)

MySQL設定 -メモ

MySQL5.0の日本語設定などの個人的メモ。

利用環境は、Apache HTTP Server 2.0.54、MySQL5.0、phpMyAdmin-2.9.2。

■MySQL5.0日本語設定など

MySQLはここからダウンロードして、インストール。MySQL Server Instance Configuration Wizardより、「Please select the default character set.」の設定の時に一番下の「Manual Selected Default Character Set/Collation」を選択し、文字コードを「sjis」に設定。

※日本語の文字化け関連の設定はこれで大丈夫なのかな?今のところ、phpMyAdminで テーブルを作成し日本語のデータ登録、コマンドプロンプト上で確かめてみたけれど、文字化け無し。

また「Please set the security options」にて、「Modify Security Settings」でパスワードの設定。

自分のような初心者のために。

ここでパスワードを設定し、いざコマンドプロンプトから

C:\MySQL\My SQL Server 5.0\bin>mysql

だとエラー。なので、「-u root -p」を付け加えて

C:\MySQL\My SQL Server 5.0\bin>mysql -u root -p
Enter password:設定したパスワード

として完了。あとは、「mysql>status」のコマンドでServer、Db、Client、Conn.の文字コードsjisになってるかどうか確認。

■phpMyAdmin設定

ここからダウンロード。ダウンロードし、解凍し終わったらフォルダをphpMyAdminなどに名前を変更し、Apacheのフォルダ内に移動。あとは、Apacheの設定確認のときのようにlocalhost/phpMyAdmin/index.phpのように辿る。

ここでも、MySQLのパスワード設定によるエラー。なので、phpMyAdmin/libraries内にあるconfig.default.phpのファイル、

73行目:$cfg['Servers'][$i]['password']      = '設定したパスワード';

にすると、エラーを起こさずこんな画面に。

         Phpmyadmin_index

これで今後問題を起こさず、サクサク進むとよいのだけれども。。。

| | コメント (0) | トラックバック (0)

2006年7月26日 (水)

抵抗判定-実験プログラム

ラジオボタンの値を取得して、指定した色の四角形を描く処理を使って、抵抗値から抵抗パーツの色を判定する実験プログラムです。

      Teiko_hantei_1

とりあえずこんな感じになりました。作りかけだった前の抵抗値算出とかいうプログラムを若干改良した感じです。

あとは細かいところを調整、ソースコードを綺麗にして完成といったところですか。条件分岐のあたりがとても微妙・・・。

これで一区切りつきて、しばらくはテスト勉強に専念です。追試受けることになってしまいましたしぃ・・・('A`)

| | コメント (0) | トラックバック (0)

2006年7月25日 (火)

色描画-実験プログラム

GDI(Graphics Device Interface)というよく分からないものを用いた実験プログラム。

         Color_box

デフォルトで緑色を指定しています。右にある赤と青のラジオボタンを選択し、「変更」ボタンを押すことで各色に変更されます。

ただそれだけの、実験的なプログラム。この処理を別のプログラムに付け加えるために作成したものです。

main.cpp

WM_COMMAND内にある

case IDC_BUTTON1:   
     id[0] = IDC_RADIO1;
     id[1] = IDC_RADIO2;
     for(i=0; i<2; i++) {
      check[i] = (int)(DWORD)SendMessage(GetDlgItem(hDlg, id[i]), BM_GETCHECK, 0, 0);
     }
     InvalidateRect(hDlg, NULL, TRUE);
     return TRUE;

にて、「変更」ボタンが押されることで、チェックされているラジオボタンの値を取得します。「IDC_BUTTON1」はリソースファイルの中で指定されている先のボタンのID。

そしてWM_PAINT内で、

case WM_PAINT:
 
    //色の選択
    if(check[0]){
     cr = RGB(255, 0, 0);
    }else if(check[1]){
     cr = RGB(0, 0, 255);
    }else{
     cr = RGB(0, 255, 0);
    }

    hDC = BeginPaint(hDlg, &ps);
    hBrush = CreateSolidBrush(cr);
    hOldBrush = (HBRUSH)SelectObject(hDC, hBrush);
    Rectangle(hDC, 30, 25, 175, 75);
    SelectObject(hDC, hOldBrush);
    DeleteObject(hBrush);
    EndPaint(hDlg, &ps);
   break;

ラジオボタンの値で条件分岐。指定されたものに合うように色を入れています。あとは、お決まりのパターンに則ってます。ただ、四角形の中を塗りつぶしたいので、CreateSolidBrushを用いてます。

ただこれだけですよー。

| | コメント (0) | トラックバック (0)

2006年3月15日 (水)

FirefoxとRSSリーダー

今までブログにも「RSSを表示する」というものが、隅っこにあったのですが気にもとめていなかった自分です。

今更ながら図書館の本を読んだりしてみて、やっとRSS[Wikipedia]の意味がわかりました。何でも、更新情報だけをテキストデータとしてまとめられているものだそうで、これを用いれば実際にブログにアクセスするよりもずっと簡単に情報を得ることができるそうです。

1週間近くチェックをしていないと、結構あちらこちらで記事がどんどん更新されていて見るのが大変だったので、これを良い機会にといくつか試してみました。

BlogWalker[窓の杜]

窓の杜で、たくさんあったので試しにと初めにDLしたフリーウェアです。「3ペイン型」と呼ばれるタイプの表示画面をしており、ブラウザとは別にソフトを立ち上げる必要があります。表示画面は、某ちゃんねるの専用ブラウザみたいな感じですね。

BlogWalker

ブラウザとは別に起動しないといけないのは、ちょっと億劫かもしれません。けれども、記事のタイトル、概要、更新日時が一覧と表示されているのは自分がどの記事を読んでいないのか分かり易いです。巡回しているブログを新規追加するのも、メニューバーにある「サイト」という項目から簡単にすることができます。

多くの記事・サイトを一気にチェックしたりするのに向いているのではないでしょうか。

Headline-Ticker[窓の杜]

これは「BlogWalker」とは違って、ブラウザ(IE)に搭載することができ別個にソフトを起動させる必要がありません。また、ブラウザ上だけではなくタスクバーでも更新内容が確認できるそうです。デフォルトの状態でもasahi.comなどのサイトからニュースが街中の電光掲示板のように随時更新されていきます。

Headline-Ticker

別の作業をしながらも、ニュースを手軽にチェックすることができるのでとても良い感じです。このソフトウェアも巡回しているブログなどを新規に追加することも簡単です。右矢印がある青いボタンを押すと、機能が表示され、そこにある「設定」の項目からできます。

他にも、最初から登録されているニュース系のブログなども多いのでわざわざ自分で設定する必要性がないのも良いところです。

Firefox[Mozilla Japan]

言わずとしれたブラウザです。ブラウザ自体に機能が搭載されているので、他にソフトウェアをインストールする必要性がありません。また、新たに巡回しているブログなどを追加するのは一番簡単なのではないでしょうか。

Firefox

サイトがブログであったりする場合に、アドレスの右端にオレンジ色の電波マークのようなものが表示されます。これをクリックすると、「ライブブックマークに追加」という画面が表示され、これを設定することで簡単に追加することが出来ます。本当に楽なので、巡回先のブログが多くても速攻でできます。

記事の更新情報もブックマークから確認することも可能ですし、記事をまとめてタブで開くこともできるのも良いと思います。

難点としては、普段からFirefoxをブラウザとして使っていなければあまり意味のないところですか。やっぱりIEの方が使い慣れているので・・・

3つのソフトを試してみて、自分が最も使いやすく感じたのはHeadline-Tickerです。IE上だけで操作できるのもさることながら、情報が随時更新されていくので気になったニュースだけをチェックすることができますから。

他にも、多くのRSSリーダーはありますので、自分が使ってみてしっくりくるものを探してみるのも良いかもしれません。

| | コメント (0) | トラックバック (0)

2006年2月15日 (水)

これは、いかに?

また、ちょくちょくといじくっている感じですが、Firefoxで前作ったAjaxの処理を試してみたら、きちんと動作してくれていました。

naze

実行すると、上のようになってくれるはずだったのです。IEでの動作について、もっと調べてみなければなりません。

Firefoxをお持ちの方は、ぜひ試してみてくださいな。。。

| | コメント (0) | トラックバック (0)

2006年2月14日 (火)

エラーはVDよりも鬱にさせてくれる

今日が何の日か、特には触れません。

とりあえず、暖かかったです。真冬日ではなく、最高気温がプラスだと何だか過ごしやすい気がしてなりません。

そんなわけで、部屋の掃除をしたりしていました。昨日図書館に行って、Windowsプログラミング関連の本を借りてきたので、先ほど試しに打ち込んでみたのですが・・・

エラーの嵐です。

       Error

ばかりです('A`)。

単純なウィンドウを出力するだけなのに、こんなにも・・・(;ω;)。

それでも、まだどこらへんがエラーなのか知らせてくれるのはありがたいです。

Ajaxを用いて、札幌市内の少しの書店情報をボタンを押すことで出力しようと思っているのですがうまくいきません。

こっちは、どのあたりがおかしいのかエラーすら表示されないので、どうしたものやら・・・といった感じです。

全くもって、右見ても左見ても、現実を見ても、

エラー

ばっかりです。

こんな日は、きんぴらを食べるに限ります。。。

| | コメント (0) | トラックバック (0)

2006年2月 9日 (木)

test

テスト。

・・・

・・・

・・・

見事に失敗のようですーー('A`)-(;ω;)-i||i||_| ̄|○|i||i|

| | コメント (0) | トラックバック (0)

2006年2月 5日 (日)

Ajax Webアプリケーション

昨日からのすさまじい雪も、今日の昼頃には落ち着きを見せ始めたので駅前のヨドバシへと足を運んできました。本当は、昨日買いに行くつもりだったのですが、傘も無い状態であの天気の中で出かけるは、さすがに金曜の時点で懲りているので、行きませんでした。

ヨドバシでどんな本を買いたかったかというと、これです。


       AJAX Webアプリケーション アイデアブック
羽田野 太巳
秀和システム (2005/12/09)


まだ、試験が全て終わっているわけでもないので、今日はあまり目を通すことが出来ないと思いますが、そろそろ春休みで時間もできるのでちょっと試したいことがあったので購入してきました。春休み中は、色々と作りたいものがあるのですが、Ajaxを用いたものも1つ作ってみたいな、と。
前に、札幌市内の本屋についてこのブログで紹介したのですが、そのデータをAjaxを使って少しおもしろくしてみよう、と思ったしだいです。といっても、簡単に想像することのできる範囲内のものを作成することになると思います。
今はとりあえず、明日の試験勉強をしませんと。
そういえば、明日から札幌では雪まつりが開催されますね。時間があったら行ってみよう。。。

| | コメント (0) | トラックバック (0)

2006年2月 4日 (土)

東芝と暗号

おそらく昨日2月3日の日本経済新聞に、東芝と北海道教育大学が共同で代数曲面を利用した新たな公開鍵暗号を開発したとあった。

東芝 研究開発センター 最新技術情報

この公開鍵暗号を用いることで、従来の暗号よりも画像などをより早く暗号化することができるとのことだった。また、東芝欧州研究所が量子暗号通信技術に関して、長距離通信化を可能にする中核部品を開発したとのこと。

東芝欧州研、量子暗号通信長距離化への中核部品を開発

1日で東芝の暗号関連のニュースを2件目にしたので、興味を持ちました。

| | コメント (0) | トラックバック (0)

2006年1月30日 (月)

Ruby/tk 値の計算

前に、Activetclで起動しても、tcl/tkの方では起動しなかったという点について補足。前に簡単な加算するプログラムを載せてみたけれども、あのプログラムについて以下のように変更すれば、tcl8.3.2(?)でもエラーを発することなく実行してくれました。

TkButton.new(f1,"text"=>"計算")                 \
  {command(proc{
          sum=@@s1+@@s2
           w3.text("#{sum}")
           });pack("side"=>"left")}

               ↓

TkButton.new(f1,"text"=>"計算")                 \
  {command(proc{
          @@s1=@@s1.to_i;@@s2=@@s2.to_i
          sum=@@s1+@@s2
           w3.text("#{sum}")
           });pack("side"=>"left")}

TkEntryから入力されたものが、文字列か数字か判断することができなかったようで、

sum=@@s1+@@s2

とある計算式のところで、「+」でエラーが発生していました。そんなわけで、取得した変数を「.to_i」メソッドを用いて整数に変換です。他の計算式も同様に変更したら、実行してくれたので安心です。とりあえず、明日までにレポートを2つ仕上げませんと。あんまり、のんびりすることもできないのですが、そろそろ何かライトノベルが読みたいなー、と思って巷で好評価の「電波的な彼女」を紀伊國屋に行って探してきたのですが、なかったです。

明日は別の本屋に行って来ようと思ったりした本日でした。

| | コメント (0) | トラックバック (0)

2006年1月29日 (日)

完成

やっと、今さっき課題のプログラム作成が終わりました。とりあえず、動作することを基本としたので書いたコードがめちゃ汚いですが、少し休んでから改良します。構造的に結構強引に値を渡しているところとかもあるので、アドバイスを頂いてこようかなと思っています。

それにしても、合成数を素因数分解する処理は素数判定より厄介だと痛感しましたよー。算出した素数を別のメソッドの引数として用いたのですが、その橋渡しの処理がしんどいかったです。

全体的に、変な動作があったり使い心地が良いとは思いませんが、達成感があるので良しでしょう。

プログラム完成したあとに、改めて将来モノ作りの職に就きたいなと感じましたよー。それが宇宙関連であれば、言うこと無しです。

今後ともプログラムに限らず、何かおもしろいものを作成していきたいです><。

| | コメント (0) | トラックバック (0)

2006年1月28日 (土)

公開鍵暗号方式で暗号化

プログラムの記述はRuby/tkです。前回にCUIタイプで入力した英数字を暗号化してみましたが、今回のは「tk」を用いてみました。スッキリしないコードですが、今のところはこんな所です。

require 'tk'

y=Array.new
rw=TkRoot.new
$str=TkVariable.new

f0=TkFrame.new(rw){pack}
w1=TkLabel.new(f0){pack}
TkEntry.new(f0,"width"=>10,"textvariable"=>$str){pack}
TkButton.new(f0,"text"=>"暗号化")        \
{command(proc{
         x="#{$str}".split(//)
         for i in 0..x.length-1
           y[i]=Array.new
           y[i]=x[i].unpack('C*')   
           z=y[i].shift
          
           #暗号化の計算処理
           z=(z**17)%1703
          
           y[i]=format("%x",z)          
           w1.text("#{y}")
         end
         });pack}
Tk.mainloop

実行結果は以下のようになります。

            ango

「I love Ruby」「TkEntry」 で取得し、入力された文章をsplitで単語単位で分解したあとに、内部コード整数に変換、別の配列に格納、その配列の先頭からshiftを用いて取り出し、暗号化の計算処理をします。その後、その文字を16進数の文字か何かに変換して出力、といった感じです。

最後の出力前の変換を工夫したいところですが、まだ全体が完成していないので、それが終わって時間があったら改良して行きたいところです。今週は試験にバイトに、レポート課題などで結構しんどかったですが、まずは一つ乗り切った感じなのでホッとしています。

| | コメント (0) | トラックバック (0)

2006年1月24日 (火)

-メモ ちょっと気づいた点と公開鍵取得

前に書いたRuby/tkのプログラムなのですが、tcl/tkが違うとエラーを起こすみたいです。自分のパソコンに入っているのは「Activetcl8.4.11.2」なのですが、別のパソコンには「tcl8.3.2(?)」と異なるタイプのものがインストールされており、自分のでエラーを起こさずにプログラムを実行してくれても、もう片方ではエラーが発生します。

ちょっと気づいた点です。理想としては両方の環境でも正常に動作してくれるものを作成したいところなのですが、なにぶん原因が良く分からず。

とりあえず、自分のパソコンでの動作を優先して作成しているところです。昨日というか今日も深夜まで作業をしておりました。

「TypeError: String can't be coerced into Fixum」

というエラーは解消することができたのですが、もう一つの方は放置状態です。簡単な公開鍵暗号のプログラムをRuby/tkで作成しているのですが、正直どのような感じにすれば良く分からないものです。とりあえず、

暗号化・復号・秘密鍵を求める・公開鍵暗号の選択

計4つの操作画面(?)を作成です。見本となるものがあれば、作り易いのかもしれませんが、そこはそこです。自分で使いやすいように想像、試行錯誤しながら作成するのは楽しいです。それは、他の人にとって使いやすいのかどうか、ということはひとまず放置です。

今日までで、とりあえず上記の4つの内の復号・公開鍵の選択の操作画面は作り終えました。

         syutoku

送信者の公開鍵取得はとりあえず、こんな感じになります。この一つ前の画面で素数を出力して、そこから任意に送信者が異なる2つの素数を選択し、p,qのエントリーに入力。

この2つの乗算から公開鍵の一つmを取得。「m:XXX」というのがそうです。mを取得し終わったら、

gcm(k,j)=1  (j=lcm(p-1,q-1))

を満たす公開鍵kを出力、そこから送信者が手動で選択する・・・という感じです。「公開鍵k出力」というボタンを押して、計算処理を行い、リストボックスを用いて表示、といった流れになります。

もっと自動的だとおもしろいのかもしれませんが、今の自分にはこれが精一杯です。公開鍵kは、上の条件を満たすものであれば何でも良いのですが(多分です('A`))、どこかで見た情報では3,13などでも、十分に暗号化するには大丈夫だそうです。

残るは、暗号化と秘密鍵を求める操作画面です。Rubyでの、それぞれの処理自体は作り終えているのですが、それをtkを用いるとなるとちょいムズイです。

それでも、秘密鍵の方は何とか今日中に終わりそうな終わりそうでもないような感じです。

| | コメント (0) | トラックバック (0)

2006年1月23日 (月)

Error

最近よく目にするのは、

「TypeError: String can't be coerced into Fixum」

「NoMethodError: private method 'XXX' called for ~」

この2つです。エラーは全くもって好ましくありませぬ。

全く関係ありませんが、今朝早く起きることができたのにあまりにものんびりしすぎたため、1限の講義に遅刻しそうだったので大学まで走ってみました。

そしたら、いつも通り転けました。

2回です。

同じところで何度も転けているような気がしないでもありません。運動神経が悪いわけではないのです。そう、あの場所に原因がある。

道が雪のおかげで狭いうえに、左右に傾斜がついているので、そこに足を不注意にも置いて走ると良く滑ることが可能です。あんなのスパイクがないと走れませんよー('A`)。

| | コメント (0) | トラックバック (0)

2006年1月22日 (日)

-メモ Ruby/tk 加算

今日も、ほぼ一日プログラムに取りかかっていた一日です。起きたのが昼頃ですから、実際にはそれほどプログラム作成に、時間を掛けていない気がしないでもありませんが。。。

本日は、tkを用いて簡単な加算をしてくれるものを作成していました。課題を完成させるためには、どうしても必要な処理だったので作成しないと、ちょっとまずかったので。

さてさて、どんな感じのものだったかというと見た目はこんな感じになります。

           kasan

右端のボタンの配置は悪いですが、そこは気にしないでくださいー。さすがに「pack」だけで色んな部品の配置を設定するには無理がありました。ソースコードは、

require 'tk'

rw=TkRoot.new{title("加算")}
@@s1=TkVariable.new
@@s2=TkVariable.new
w1=TkEntry.new(rw,"textvariable"=>@@s1,"width"=>5){pack("side"=>"left")}
TkLabel.new(rw,"text"=>"+"){pack("side"=>"left")}
w2=TkEntry.new(rw,"textvariable"=>@@s2,"width"=>5){pack("side"=>"left")}
TkLabel.new(rw,"text"=>"="){pack("side"=>"left")}
w3=TkLabel.new(rw,"width"=>6){pack("side"=>"left")}
f1=TkFrame.new(rw){pack}
TkButton.new(f1,"text"=>"計算")                 \
  {command(proc{
          sum=@@s1+@@s2
           w3.text("#{sum}")
           });pack("side"=>"left")}
TkButton.new(f1,"text"=>"終了")                 \
  {command(proc{rw.destroy});pack("side"=>"right")}
Tk.mainloop

変数の範囲はよくわからず、インスタンス変数(@)ではエラーが生じたのでクラス変数(@@)を用いています。あとは、合計のところの表示になりますが「"width"=>5」としているので、左辺の値が大きいと合計の値が収まり切りません。3~5桁ぐらいの加算でしたら、全部入ると思います。

単純な処理なのですが、これを作成するだけで結構疲れてしまいましたー。今日はあと、とりあえず、試験勉強をしませんと。

| | コメント (0) | トラックバック (0)

2006年1月21日 (土)

簡単な暗号化処理プログラム

プログラム言語はRuby、暗号化には公開鍵暗号方式を用います。CUIの形になります。

STDOUT.sync=true
print "適当な英数字を入力して下さい-->"
x=STDIN.gets.unpack('C*')    
x.pop   

print "暗号文:"
for i in 0..x.length-1
 y=(x[i]**17)%1703
 putc y
end

前半で、適当な英数字を取得、unpack('C*')で得た文字を内部コード整数へと変換。このままだと、良く分かりませんが最後で改行か何かも一緒に取得してしまうので、popで末尾を削除です。

後半では、前半で文字列を整数へと変換したので、公開鍵暗号の考え方で暗号化するための計算を行います。暗号化処理の計算方法は、Yを暗号化計算をした整数、Xを元の整数、k、mを公開鍵とすると、

Y=(X**k)%m

になります。ここでは、見ての通りk=17、m=1703としています。正直、全体の処理が正しいものなのかどうかは判断できないので、正しい処理を行っているのか不安でもあります。間違えている可能性が大ですが、どのように改良すれば良いのか分からないのが悩みの種だったりします。。。

| | コメント (0) | トラックバック (0)

2006年1月15日 (日)

やっとこさ

5日連続のバイトも昨日でとりあえず終わり、次あるのは火曜日から。

その間、課題のプログラムを作成です。他の課題も、もちろんやらなければなりませんが。とりあえず、今日は朝から公開鍵暗号の秘密鍵算出のプログラムを作成していました。

前に、中途半端な素因数分解のプログラムを作成し、このブログにも載っけたのですが、あれも一応簡単な公開鍵暗号プログラムを作成するためのものです。とりあえず、2つの相異なる素数を求めることができれば良し、としたものでした。

ある文章を暗号化する際に、公開鍵としてM(=p*q、ただしp,qは互いに素)を用いるので、合成数のMからpとqへと因数分解ができれば良かったのです。

秘密鍵を求める際にも、このp,qは必要になってくるのですが、この一方の値を間違えて入力してたので、暗号化した整数と復号した元の整数が一致しなくて大変でした。

百の位を入れ忘れた・・・ということに、気づくのにどれだけ時間が掛かったことやら('A`)

とりあえず、暗号化・復号の処理は成功したので、あとは調整をして使いやすくするぐらいですね。期限まで、あまり時間無いし試験もあったりと、時間があまり取れないかもしれませんが、少しずつやっていくつもりです。

なんにせよ、うまくプログラムが実行してくれたときは部屋でガッツポーズをしてしまいましたよー。それぐらいうれしかったです。。。

| | コメント (0) | トラックバック (0)

2006年1月11日 (水)

中途半端な素因数分解プログラム

題名にもある中途半端で未完成の素因数分解のプログラムです。

言語はRuby、素数算出方法はエラトステネスの篩い。

どこらへんが、未完成なのかというと、エラトステネスの篩いで素数を求めるところでほんの少し。あとは、素因数分解のところで重複する整数は一つしか出力されません。改めて、自分にはプログラムの才能と物事を論理的に考える能力がないことを痛感です。

m=1000
x=46859

#配列の初期化
a=Array.new
for i in 0..m
  a[i]=Array.new
  a[i]=1
  a[1]=0
end

#素数算出
for n in 2..m
  if a[n]==1
    for i in 2..m
        a[i*n]=0
    end
   end
end

#素因数分解
for i in 2..m
  if a[i]==1
    if (x%i)==0
      print i.to_s + ' '
    end
  end
end

未熟ですみません('A`)

とりあえず、互いに素な二つの整数が得られれば良かったので。。。

xが素因数分解したい整数にあたります。これを実行すれば、47と997に因数分解されると思います。

追伸 

これを作成するにあたり色々