2011年12月30日金曜日

Ruby で nヶ月前の日付を取得する。

●Excel の株価の一覧表をRubyを使って自動作成しようとすると、今日を起点としてnヵ月前の日付を知りたくなったりします。例えば2ヵ月前の日付は以下のようにして求められます。(#以降はコメント)


require 'date'

day = Date.today        # get today date(2011-12-30)

day = day <<  2         # 2 months ago


p day.month             # 2011
p day.day               # 10
p day.year              # 30


注意したい点としては、例えば2ヶ月前のさらに2ヶ月前は、4ヶ月前の日付と、同じにならないことがあるということです。


●もし、2ヶ月前ではなくて、2ヶ月後の日にちを知りたいときには以下のようにします。

day = day >>  2



●もし1日後の日付を知りたい場合には、以下のようにします。


day = day + 1

●もし1日前の日付を知りたい場合には、以下のようにします。


day = day - 1


2011年12月13日火曜日

Perlでファイルに書き込む

Perlでファイルに書き込みを行なうには、以下のようなコードを使います。ファイルオープン時に>により書き込みを指示します。




$line = "sample";
open(OUT, ">data.dat"); # 上書きオープン
print OUT $line; # data.dat に $line の内容を出力
close(OUT);






ファイルに追加で書き込むには>>により指定します。

$line = "test";
open(OUT, ">>data.dat"); # 追加オープン
print OUT $line; # data.dat に $line の内容を出力
close(OUT);

Perl でファイルを読み込む

Perl でテキストファイルから一行づつファイルを読み込むには。
以下のサンプルでは、zzz.txtと言うファイルから一行づつ読み込んで配列に格納しています。


--------------------------------------

my @hairetu;
my $i = 0;

open(IN,"zzz.txt");
while( my $Meigara = <IN> )
{
chomp($Meigara);
print $Meigara . "\n";
$hairetu[$i] = $Meigara;
$i = $i + 1
}


$length = @hairetu;
for( $i=0 ; $i<$length ; $i++ )
{
   print $hairetu[$i] . "\n";
}

----------------------------------------
以下のサンプルでも、読み込んだ行を配列に格納しています。


$datafile="zzz.txt";
open(FH, $datafile);

@list = <FH>;

# 1行ごとに出力

foreach $data_line( @list ) {
    print $data_line;
}

----------------------------------------


$FH = "filename.txt";
open FH;
@list = <FH>;
foreach $data_line( @list ){
        print $data_line;
}


----------------------------------------
以下のサンプルでは、読み込みファイルを開く時のエラーチェックをしています。


$filename = "./data.dat";
open( FH , "$filename" ) || die "Error: $filename $!\n";

----------------------------------------
以下のサンプルでも、読み込むファイルを開くときのエラー処理をしています。


$filename = "data.txt";
if( ! open FH , $filename ){
      print "open error";
}









参考サイト


2011年12月6日火曜日

PHP でタイムスタンプを取得する


●PHP でタイムスタンプを取得するサンプル(例えば2011-12-06を入力するとTimeStamp:1323097200が得られます。)



<?php
/*
日付のテキストからタイムスタンプを得るには
*/
echo "please input Date(yyyy-mm-dd):";
$a = trim(fgets(STDIN));
echo "TimeStamp:" . strtotime($a);

?>



●PHP でタイムスタンプを取得するサンプル2(例えば2011,12,06を入力するとtimestamp:1323097200が得られます。)



<?php
/*
   タイムスタンプを得るには
*/

echo "please input Hiduke(yyyy,mm,dd)";
$a = explode(',',trim(fgets(STDIN)));
echo "timestamp:" . mktime(0,0,0,$a[1],$a[2],$a[0]);

?>




●日付や時刻を表示するには



<?php

// 日付や時刻を表示するには

$d = getdate();
echo $d['year'] . '/' . $d['mon'] . '/' . $d['mday'] . "\n";
echo $d['hours'] . ':' . $d['minutes'] . ':' . $d['seconds'];

?>



2011年12月5日月曜日

PHP の技


●今日から、XX日後はいつでしょうという場合

<?php
# 今日からXX日後を計算するには
#
#
echo "日数を入力:";
$d = trim(fgets(STDIN));
echo "今日から" . $d . "日後:" . date('Y/n/j',time() + 60 * 60 * 24 * $d);
?>






●echo "DateTimeクラスでフォーマットして表示するには"
<?php

echo "DateTimeクラスでフォーマットして表示するには";

echo "input format:";
$d = new DateTime("now");
echo $d->format(trim(fgets(STDIN)));
?>





●日時クラスを使うには
<?php

/*
日時クラスを使うには
日時としてnowを指定しても可
*/

echo  "日時を入力(ex.2011-12-17):";
$a = trim(fgets(STDIN));
print_r(new DateTime($a));
?>




●指定した日まで何日あるか計算するには
<?php
/*
指定した日まで何日あるか計算するには
*/

echo "input Hiduke(yyyy-mm-dd):";
$d = strtotime(trim(fgets(STDIN)));
echo ceil(($d -time()) / ( 60 * 60 * 24 )) . "days";
?>




●今日の日付を指定したフォーマットで表示するには

<?php
/*
今日の日付を指定したフォーマットで表示するには
*/
echo "format(Y/y/m/n/d/j);";
$a = trim(fgets(STDIN));
echo date($a,time());
/*
Y 年4桁表記
y 年2桁表記
m月(先頭に0をつける)
n月(先頭に0をつけない
F月(フルスペル英文表記)
M月(3文字の英語表記)
d日(先頭に0をつける)
j日(先頭に0をつけない)
D曜日(3文字の英語表記)
l曜日(フルスペルの英語表記)
w曜日(0から6の整数)
h時(12時間単位先頭に0をつける)
H時(24時間単位先頭に0をつける)
g時(12時間単位先頭に0をつけない)
G時(24時間単位先頭に0をつけない)
a午前またた午後(amまたはpm)


A午前または午後(AMまたはPM)
i分(先頭に0をつける)
s秒(先頭に0をつける)
*/
?>


2011年12月4日日曜日

Strawberry Perl をインストール


WindowsXP にStrawberry Perl をインストールしました。
以下のサイトから、バージョンは 5.12.3.0のものをダウンロードしました。
Windows版のPerlと言えばActivePerlだと思っていましたが、Strawberryのほうがよりcpanなどの面においてUNIX版とほぼ同様に使用しやすいらしいです。

http://strawberryperl.com/

上記のサイトをみると、いちごが非常にきれいでおいしそうです。Larry Wall がWindows上で使っているとも書いてあります。思わず、ダウンロードしてしまいました。

2011年12月3日土曜日

Perl で株価を取り込む

Perl でヤフーファイナンスから株価データを取り込むことはできるのだろうかとインターネットで調べたところWeb::Scraperを使ってできるらしいことがわかりました。以下はサンプルです。


#!/usr/bin/perl
use strict;
use warnings;
use Web::Scraper;
use URI;
use Encode;
my $scraper = scraper {
 process '//tr[@bgcolor="#ffffff"]/td[1]','sdata[]' => 'TEXT';
 process '//tr[@bgcolor="#ffffff"]/td[2]','svalue[]' => 'TEXT';
};
  my $res = $scraper->scrape(URI->new("http://table.yahoo.co.jp/t?c=2010&a=11&b=1&f=2010&d=11&e=7&g=d&s=9631.t&y=0&z=&x=sb"));

 my @sdata = @{$res->{sdata}};
 my @svalue = @{$res->{svalue}};
 my $length = @svalue;

 for ( $_= 0; $_ < $length; $_++){
  print encode('utf-8',$sdata[$_]), ",", "\"";
  print encode('utf-8',$svalue[$_]), "\"", ",", "\"","\n";
 }


●このプログラムは、Linux(Ubuntu)上で動作させました。Windows上で実行させる場合には、utf-8 となっているところを、shift-jis にするなどの処理が必要と思います。

●参考にさせて頂いたサイト

http://e8y.net/mag/013-web-scraper/
http://www16.atwiki.jp/netscreen/pages/13.html



2011年12月2日金曜日

Ubuntu11.10 で RMagick をインストールする

RubyでExcel出力する方法について、axlsxを使う方法をコメントで頂きました。インストールしようとして以下のコマンドを入力しましたが、エラーが発生してしまいました。
sudo gem install axlsx
http://rubygems.org/gems/axlsx


調べてみると、rmagick というのが必要だとわかりました。Ubuntuでの rmagickのインストール方法は以下のサイトを参考にさせていただきました。

http://d.hatena.ne.jp/kaorumori/20100510/1273544324
http://d.hatena.ne.jp/mostlyfine/20081012/1223837676

Windowsでの、インストール方法は、また別です。以下を参考にさせていただきました。ただしこれでインストールできるのは、2.12.0というバージョンで、axlsx を使用するには、2.12.2以上のバージョンが必要のようです。
http://rmagick.rubyforge.org/install-faq.html#win

2011年11月29日火曜日

RubyでExcelに出力する

●Ubuntu上でRubyプログラムでExcelファイルを書き出す(出力)することができるだろうと思って調べました。以下のサイトを参考にさせて頂きました。あらかじめ、「gem install spreadsheet」を行なっておき、rubyプログラムの中で、require します。

http://www.dreamedge.net/archives/97



●逆にExcelファイルから読み出す方法については、以下のサイトを参考にさせて頂きました。プログラムの先頭部分で require 'rubygems'   および require 'spreadsheet' を記述します。

http://doruby.kbmj.com/yuki-Ruby/20091216/Ruby_Excel_



●またExcelファイルから読み出すためにparseexcelを使用する方法について以下のサイトに書いてあります。予め「gem install parseexcel」を行なっておき、rubyプログラムの中で、requireするようです。

http://d.hatena.ne.jp/u-ichi/20080605/1212639221
http://www.weheartcode.com/2007/10/05/reading-an-excel-file-with-ruby/


以下は上記のサイトに書いてあったサンプルを少し修正したものです。引数で指定したExcelファイルについて、内容を画面に出力します。
-----------------------------------------------------------

require 'rubygems'
require 'parseexcel'

workbook = Spreadsheet::ParseExcel.parse(ARGV[0])
worksheet = workbook.worksheet(0)

  j=0
worksheet.each { |row|
  i=0
  if row != nil
  row.each { |cell|
    if cell != nil
      contents = cell.to_s('utf-8')
      puts "Row: #{j} Cell: #{i}> #{contents}"
    end
    i = i+1

  }
  end
  j = j+1
}
------------------------------------------------------


PHPでExcel形式で出力するには

Ubuntu上でPHPを使ってExcelファイルを作成できるプログラムはないかと思って調べました。以下のサイトによればPHPExcelを使用するとExcel2007の形式でファイル出力できます。プログラムの中でPHPExcel が存在するパスを指定してincludeする必要があります。

http://news.mynavi.jp/articles/2009/03/06/phpexcel/index.html


なお、PHPExcelを導入するには、以下のサイトを参照しました。(PHPExcelの現時点のバージョンは1.7.6) ダウンロードしたZipファイルに含まれるフォルダを任意の場所に配置するという方法とpearコマンドを使用する方法があるようですが、私は、pearコマンドを使用しました。pearコマンドを実行したあと調べてみると /usr/share/php/PHPExcel/ というフォルダに PHPExcel.php というファイルができていたので、そのフォルダパスをプログラムのソースの中に指定しました。 

http://phpexcel.codeplex.com/

実際に、Ubuntu上で、Excel2007形式のファイルを出力して、Ubuntu上のOpenOffice(LibreOffice) と、Windows上のExcel2007で、それぞれ開いて中身を見られることを確認しました。OpenOffice(LibreOffice) と、Windows上のExcel2007では、若干、表示の書式が異なっていました。(一部のセルの文字がOpenOffice(LibreOffice)では文字が右寄せなのに、Windows上のExcel2007ではセルの中央に書かれていました。)


既存のExcel ファイルをテンプレートとして、修正をかけて別名保存することもできます。Excel2007形式の場合、テンプレートを、OpenOfficeで作成してしまうと失敗します。(テンプレートはExcelで作成する必要があります。)
なお、テンプレートのセルに式が定義してあった場合には、修正して別名保存すると、式がなくなってしまいただの数値に変化してしまう場合があります。



2011年11月28日月曜日

Ubuntu の人気が落ちてる?

以下のサイトによれば、Ubuntuのシェアが落ちて、代わりにLinuxMintが伸びてきているらしい。

http://news.mynavi.jp/news/2011/11/25/047/index.html

http://news.mynavi.jp/news/2011/11/24/006/index.html

あーあ Ubuntuにようやく慣れてきたかなと思ったところだったのに。それにしてもMintって聞いたことなかった。 

しかし調べてみると、LinuxMint はUbuntuをベースに作成されているとのこと。見た目が違うだけで中身はUbuntuと同じようだ。たとえ LinuxMintが主流になったとしても、Ubuntuで経験したことはどうやら無駄にはならないようだ。よかった。よかった。(^^)

2011年11月27日日曜日

Perl で Excelファイルに書き込みをするには

Linux の環境で、Perl でExcelファイルに書き込みができるだろうかということを調べてみました。

●以下のサイトには、Excelファイルを新規に作成して書き込みを行うための情報が記載されています。
Spreadsheet::WriteExcel を使用します。(なお、予め、cpanでSpreadsheet::WriteExcel を取り込んでおきます。)

http://homepage3.nifty.com/hippo2000/perltips/Spreadsheet/WriteExcel.htm

ただし、Excelファイルを新規に作成するのではなくて、既存のExcelファイルに書き込みをするにはどうすればよいかというと、次のサイトに書いてある情報が参考になります。 Spreadsheet::ParseExcel::SaveParser を使用します。(なお、予め、cpanでSpreadsheet::ParseExcel::SaveParser を取り込んでおきます。)

http://search.cpan.org/~kwitknr/Spreadsheet-ParseExcel-0.2603/ParseExcel/SaveParser.pm

やってみると、確かに既存のExcelファイルに追加で書き込みできることがわかりました。ただし、元のExcelファイルで、式が定義されていたセルが書き込み後には 0などの数値に変化していました。


●Excel2007形式で、ファイルを作成するにはExcel::Writer::XLSXを使用することで対応できます。


use Excel::Writer::XLSX;                                   # Step 0
   my $workbook = Excel::Writer::XLSX->new( 'perl.xlsx' );    # Step 1
    $worksheet = $workbook->add_worksheet();                   # Step 2
    $worksheet->write( "A1", 'Hi Excel!' );                    # Step 3
   





2011年11月26日土曜日

PHP で株価を取り込む

PHP で株価を取り込む

以下のサイトを参考にさせていただきました。

http://d.hatena.ne.jp/iww/20101107


なお、simple_html_dom.php というファイルをインクルードする必要がありますが、以下のサイトからダウンロードできます。 

http://sourceforge.net/projects/simplehtmldom/files/simplehtmldom/

Ruby で株価を取り込む(nokogiriのインストール)

Ruby製nokogiriで株価を切り刻もうというタイトルのサイトがあったので以下にメモしておきます。
http://d.hatena.ne.jp/keyesberry/20100302/p1

さて、上記を使用するには Ruby製nokogiri というのを入れてやる必要があります。そのための手順は以下のとおりです。(環境はUbuntu11.10)


sudo apt-get install libxslt1-dev libxml2-dev
sudo apt-get install rubygems
gem install nokogiri
以上のやり方で、nokogiri をインストールすることはできたのですが、インストールの前後でrubyのバージョンが、1.9.2から、1.8.7に変わってしまいました。


尚、以下のサイトでも、Rubyで株価を取り込む方法が記述されているようです。(まだ試していません。)


http://d.hatena.ne.jp/unageanu/20071102/1194009222

OpenOffice Base に ODBC経由でPHPから接続できるか?

OpenOffice Base に ODBC経由でPHPから接続できるか?以下のサイトを読むと「できない」と書いてある。
http://user.services.openoffice.org/en/forum/viewtopic.php?f=40&t=5925
http://user.services.openoffice.org/en/forum/viewtopic.php?f=40&t=29298

2011年11月25日金曜日

OpenOffice Base へODBC経由で接続はできるのか?

MySql への ODBC接続はできることがわかった(OpenOffice BaseからODBC経由でMySqlに接続することはできた。)のですが、今度は、じゃあOpenOfice Base に対して、ODBC接続などができるのだろうかという疑問がわいてきました。インターネットで探しているのですが、見つからないのでおそらく、少なくとも今の時点ではできないのだろうと推測しています。

2011年11月23日水曜日

MySQL への ODBC 経由での接続

Windows でMySQL への ODBC 経由での接続をするために、まずは、mysql-connector-odbc-5.1.9-win32.msi を以下のサイトからダウンロードしました。

http://dev.mysql.com/downloads/mirror.php?id=404193#mirrors

(このサイトでは、始めてダウンロードする際にはユーザ登録をするように求められるのですが、下の方に以下のようなリンクがあったのでクリックすると、ユーザ登録しなくてもダウンロードできるページに移動してくれました。

» No thanks, just take me to the downloads!



ダウンロードしたmsiファイルをダブルクリックしてインストールを行い、その後、OpenOfficeのBaseから、ODBC経由で MySQLへ接続して、テーブルの中身が見られることを確認しました。

---------------------------------------------------------------------------------------------------

尚、同じようなことを、Linux上(Ubuntu)でも行うには以下のサイトを参照させていただきました。

http://woa-win.ddo.jp/ubuntu/0103.php
http://sourceforge.jp/magazine/07/02/28/0121236
http://nstage.ddo.jp/pukiwiki/index.php?OpenOffice.org%2FBase%2FDB

sudo apt-get install か synaptic で unixODBC libmyodbc php5-odbc unixodbc-bin をインストールしたあとで sudo ODBCConfig を使って、ODBCのDSN登録をします。(なおUbuntu12.04になってから、’sudo ODBCConfig’は使用できなくなっており代わりに’sudo ODBCManageDataSourcesQ4を実行します。’) DSN登録をした結果は/etc/odbc.ini に書き込まれます。またドライバーの情報は/etc/odbcinst.ini に書き込まれます。





Ubuntu12.04になってから、mysqlのODBCドライバーの位置が/usr/lib/i386-linux-gnu/odbc/の配下に変わったようです。以下は、私のマシンの/etc/odbcinst.iniの中身です。ご参考まで。


[MySQL ODBC Driver]
Description             =
Driver          = /usr/lib/i386-linux-gnu/odbc/libmyodbc.so
Setup           = /usr/lib/i386-linux-gnu/odbc/libodbcmyS.so
UsageCount              = 1
CPTimeout               =
CPReuse         =








いったんODBCのDSN登録ができれば、あとはODBC経由で、PHPからアクセスできるようになります。以下は、AccessデータベースをODBC設定して、PHPからアクセスする方法ですが、参考になると思います。
http://www.tsware.jp/study/vol14/php_04.htm

また、いったんODBCのDSN登録ができれば、Ubuntu 上で、 isql コマンドを使って、ODBC登録されたデータベースにアクセスできるようになります。例えば、my.sql というファイルにSQLコマンドを記述しておき以下のようなコマンドで実行することができます。

isql ’DSN’ ’user’ ’pass’ -w < my.sql

2011年11月22日火曜日

WindowsXP で ruby をインストールする。

WindowsXP で ruby をインストールするには以下を参照しました。

http://www.ruby-lang.org/ja/downloads/


ActiveScriptRuby は以下のサイトからダウンロードできます。現時点の最新正式版は、バージョン1.9.3-p0 のようです。

http://www.artonx.org/data/asr/
ダウンロードしたRuby-1.9.3.msi を実行します。

    PHP で配列をソートするには

    PHP で配列をソートするには、例えば以下のようなサンプルのようにする。


    -----------------------------------------------------
    <?php
    function sortArr($arr){
        sort($arr,SORT_NUMERIC);
        for($i = 0; $i < count($arr);$i++)
            echo ($i+1).":".$arr[$i]."\n";
    }

    echo "項目を入力 (カンマで区切って記述):";
    $a = trim(fgets(STDIN));
    sortArr(explode(",",$a));
    ?>

    -----------------------------------------------------

    サンプルその2
    
    
    function sortArr($arr){
        asort($arr,SORT_STRING);
        foreach($arr as $key => $value)
            echo $key . ": " . $value . "\n";
    }
    
    echo "項目を入力(カンマで区切って記述):";
    $a = trim(fgets(STDIN));
    sortArr(explode(",",$a));
    

    explodeを使ったサンプル

    function explodeNow($str){
    
            $arr = explode(" ",$str);
            for($i = 0;$i < count($arr);$i++)
                 echo $i . ": " . $arr[$i] . "\n";
    
    }
    
    
    echo "テキストを入力:";
    $a = trim(fgets(STDIN));
    explodeNow($a);
    

    implodeを使ったサンプル

    
    function implodeNow($arr){
    
            $str = implode ("、",$arr);
            echo $str . "。";
    }
    
    
    $arr = array();
    while(true){
        echo "テキストを入力";
        $a = trim(fgets(STDIN));
        if ( $a == ""){break;}
        array_push($arr,$a);
    
    }
    implodeNow($arr);
    
    

    2011年11月21日月曜日

    WindowsXP で XAMPP をインストールする。

    WindowsXP で XAMPP をインストールするには

    以下のサイトからダウンロードできる。現在のバージョンは、XAMPP 1.7.7

    http://www.apachefriends.org/jp/xampp-windows.htm



    なお、以下のサイトからPHPエディタをダウンロードできる。現時点でのバージョンは、1.3.3
    http://phpspot.net/php/phpeditor.html

    Ubuntu11.10 で ruby を使う

    Ubuntu では ruby が使えるかなと思って rubyというコマンドを入力してみると以下のようなメッセージが表示されました。sudo apt-get install ruby1.9.1 を実行すれば使用できるようになるようです。(ただし、私は始めは1.9.1を使っていたのですが、Nokogiriをインストールした頃からバージョンが、1.8になってしまいました。)


    ---------------------------------------------------------------------------------

    $ ruby
    プログラム 'ruby' は以下のパッケージで見つかりました:
     * ruby1.8
     * ruby1.9.1
    次の操作を試してください: sudo apt-get install <選択したパッケージ>
    ---------------------------------------------------------------------------------

    2011年11月20日日曜日

    PHP を入手する(Windows版)

    PHP を入手するには、以下のサイトから
    http://jp.php.net/downloads.php/

    WindowsBinaries というところを選んで以下のサイトへ移動

    http://windows.php.net/download/


    VC9 x86 Non Thread Safe を選択する。(現時点の最新バージョンは、5.3.8)



    2011年11月19日土曜日

    Perl から MySQLを操作する

    以下のサイトを参考に

    http://www.7key.jp/software/mysql_perl2.html#a_02

    http://adgjm.net/saas/sample.htm

    PHP でXMLファイルを読み込む

    PHP では、XML ファイルを読み込むことができる。以下はそのサンプル


    <?php

    $root = simplexml_load_file('sample.xml');
    foreach($root->children() as $data)
        echo(mb_convert_encoding($data->name . "," . $data->mail . "," . $data->tel,'sjis','utf-8') . "\n");

    ?>

    使った、sample.xmlファイルは以下のとおり
    <?xml version="1.0" encoding="utf-8"?>
    <datas>
        <data>
             <name>yamada</name>
     <mail>yamada.taro@gmail.com</mail>
     <tel>090-1111-1111</tel>
        </data>
        <data>
             <name>tsuyano</name>
     <mail>tuyano@mac.com</mail>
     <tel>090-1111-1111</tel>
        </data>
        <data>
     <name>hanako</name>
     <mail>hanako@flower</mail>
     <tel>080-7777-7777</tel>
        </data>
    </datas>
    
    
    
    

    PHPでxmlファイルを編集する

    <?php
    function addToXMLData($root,$name,$mail,$tel){ $obj=$root->addChild('data'); $obj->addChild('name',mb_convert_encoding($name,'utf-8','sjis')); $obj->addChild('mail',mb_convert_encoding($mail,'utf-8','sjis')); $obj->addChild('tel',mb_convert_encoding($tel,'utf-8','sjis')); } function saveXMLData($name,$mail,$tel){ $root = simplexml_load_file('sample.xml'); addToXMLData($root,$name,$mail,$tel); $root->asXML('sample.xml'); } echo "input name:"; $name = trim(fgets(STDIN)); echo "input mail:"; $mail = trim(fgets(STDIN)); echo "input tel:"; $tel = trim(fgets(STDIN)); saveXMLData($name,$mail,$tel); ?>

    2011年11月17日木曜日

    OpenOffice のマクロをコマンドラインから実行するには

    例えばコマンドラインから以下のように入力するとOprnOfficeのマクロが実行される。

    soffice.exe macro:///Standard.Module1.Main


    以下のサイトなどを参考
    http://hermione.s41.xrea.com/pukiwiki/index.php?OOobbs2%2F4


    以下は、マクロのサンプル



    Sub Main

    msgbox "hello"

    Dim DatabaseContext As Object
    Dim DataSource As Object
    Dim Connection As Object
    Dim Statement As Object
    Dim ResultSet As Object

    DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
    DataSource = DatabaseContext.getByName("kigyou")
    Connection = DataSource.getConnection("", "")

    Statement = Connection.createStatement()
    ResultSet = Statement.executeQuery("select * from 連絡先")

    If IsNull(ResultSet) Then
      MsgBox "検索されたレコード件数が0件"
    Else
      While ResultSet.next
        sValue1 = ResultSet.getString(1)
     '  sValue2 = ResultSet.getLong(2)
       sValue2 = ResultSet.getString(2)


        msgbox sValue1
        msgbox sValue2
      Wend
    End If

    Statement.Close()
    Connection.Close()
    Connection.Dispose()

    msgbox "end"



    End Sub

    2011年11月16日水曜日

    Ubuntu11.10 で Apache と PHPを使えるようにする

    Ubuntu11.10 でApacheサーバをインストールするには

    次のサイトを参考にして
    http://dqn.sakusakutto.jp/2008/08/ubuntu-804apache2.html

    以下のように入力すればよい。
    sudo apt-get install apache2

    Webブラウザで、http://localhost/ を指定すると
    /var/www/index.html  の内容が表示される。


    なお、PHPが使用できるようにするためには以下のサイトを参考にすると
    http://builder.japan.zdnet.com/os-admin/20384129/

    以下のように入力すればよい。


    sudo apt-get install php5 libapache2-mod-php5


    なお、phpMyAdmin をダウンロードして、/var/www の配下に解凍することにより使用することができるようになった。

    (2014.3.11追記)
    phpmyadmin の設定方法については以下のページでも記述しています。

    http://chaos-fractal.blogspot.jp/2013/02/ubuntu-1210-mysql.html


    mysqlデータベースに接続するPHPのサンプルコードは以下のとおり

    --------------------------------------------

    <html>

    <?php
    $server    = '127.0.0.1';
    $username  = 'root';
    $password  = 'xxxx';

    $link = mysql_connect($server, $username, $password);
    if (!$link) {
        die('can not connect : ' . mysql_error());
    }
    echo 'successfully connected';

    $db_selected = mysql_select_db('user',$link);
    if (!$db_selected){
        die('fail to select database'.mysql_error());
    }

    $result = mysql_query('SELECT * FROM pass');
    if (!$result) {
        die('query fail'.mysql_error());
    }

        print("<br>");
    while ($row = mysql_fetch_assoc($result)) {
        print($row['id']);
        print("\n");
        print($row['pass']);
        print("<br>");
    }
    mysql_close($link);
    ?>

    </html>

    2011年11月14日月曜日

    PHPとUbuntuについて

    ●PHPについての本を図書館から借りてきました。
    以下のサイトからダウンロードしてWindows上でPHPを使い始める方法が書いてありました。

    http://jp.php.net/downloads.php



    ●一方、私の使用しているUbuntu11.10でコンソールから
    php と入力してみると以下のように表示されました。

    ----------------------------
    プログラム 'php' はまだインストールされていません。  次のように入力することでインストールできます:
    sudo apt-get install php5-cli
    ----------------------------

    言われるままに、コマンド入力するとPHPが使用できるようになったようです。


    ファイル名を指定して、そのファイル読み込み画面に表示させるサンプル

    <?php
    echo "input file name:";
    $a = trim(fgets(STDIN));
    readfile($a);
    ?>


    ●なお、pear と入力すると以下のように表示されました。(phpのpearというのは何でしょう?perlでいうところのcpanのようなものでしょうか?)

    -------------------------------------------

    プログラム 'pear' はまだインストールされていません。  次のように入力することでインストールできます:
    sudo apt-get install php-pear
    -------------------------------------------





    2011年11月9日水曜日

    OpenOffice Baseを使ってみた。

    Microsoft Accessの代わりになるかもしれないと思い、OpenOffice Baseを使ってみた。
    テーブルをふたつ用意して、リレーションを設定することによりクエリーを作成。
    その状態で、クエリーを実行できる。また、クエリーに対応したSQLを表示できる。
    SQLを変更すると、それに対応してクエリーのデザインも変更されることを確認。
    Accessほど使い勝手はよくないかもしれないが似たようなことができることを確認した。

    Windows版の場合にはAccessのmdbファイルに接続してテーブルの中身を見ることができた。(Linux版の場合にはできない)

    あとは、Acesss VBAのようなことができるかどうかである。
    つまりBasicでプログラミングがどの程度までできるかどうかが気にかかる。
    以下のサイトに情報が載っているようである。

    http://homepage1.nifty.com/tabotabo/ooo/ooolinks.htm
    http://itref.fc2web.com/openoffice/basic/index.html

    2011年9月2日金曜日

    Visual Studio 2010 express をダウンロードしてみた。

    ダウンロードしたのは、以下の3つ

    Visual Basic
    Visual C#
    Visual C++

    .NETの特徴としては、言語によらずオブジェクトが使用できるという
    メリットがあったと思う。
    Basic のプロジェクトでクラスを作成して、それをC# 側から
    参照して使用するということをやってみた。
    ただし、Basicのプロジェクトでは、Msgbox を出すように
    プログラムしたつもりだったのに、実行してみるとMsgbox
    を出すところでとまってしまった。つまりクラスの中から
    Msgboxを出すことができなかったというわけ。コンソール
    に出力することしかできなかった。


    Basic で作ったクラスをC++ 側から参照して使用する
    こともできた。

    2011年9月1日木曜日

    Java でExcel を操作する(POIを使用)


    Java でExcel を操作することはできないかと探し
    以下を参考にしました。

    http://www.javadrive.jp/poi/

    POIのバージョンは、この時点での最新バージョンで
    ある、3.8-beta4を使用しました。
     はじめLinuxのJavaの環境でやってみたのですが、
    「許可がありません」というメッセージがでてコンパイル
    できませんでした。

    ただWindowsの環境で動作することが確認できました
    ので、いいかなと思っています。


    サンプルソース(testというシートを作成する)


    import java.io.FileOutputStream;
    import java.io.IOException;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;


    public class sample{
      public static void main(String[] args){
        HSSFWorkbook workbook = new HSSFWorkbook();

        workbook.createSheet("test");

        FileOutputStream out = null;
        try{
          out = new FileOutputStream("sample.xls");
          workbook.write(out);
        }catch(IOException e){
          System.out.println(e.toString());
        }finally{
          try {
            out.close();
          }catch(IOException e){
            System.out.println(e.toString());
          }
        }
      }
    }



    サンプル2(sample2_1.xlsというファイルを作成する。)
    
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Workbook;
    import java.io.*;
    
    public class Sample2_1{
      public static void main(String[] args){
        Workbook wb = new HSSFWorkbook();
    
        FileOutputStream out = null;
        try{
          out = new FileOutputStream("sample2_1.xls");
          wb.write(out);
        }catch(IOException e){
          System.out.println(e.toString());
        }finally{
          try {
            out.close();
          }catch(IOException e){
            System.out.println(e.toString());
          }
        }
      }
    }
    
    

    Excelファイルを編集するサンプル。sample2_2.xls を読み出して、左から6列について、2行めに値が入っていたら3行めにCHeck! と記入します。その後sample2_3.xls という名前で保存します。

    //import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.WorkbookFactory;
    import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
    import java.io.*;
    
    public class Sample2_2{
      public static void main(String[] args){
        FileInputStream in = null;
        Workbook wb = null;
    
        try{
          in = new FileInputStream("sample2_2.xls");
          wb = WorkbookFactory.create(in);
        }catch(IOException e){
          System.out.println(e.toString());
        }catch(InvalidFormatException e){
          System.out.println(e.toString());
        }finally{
          try{
            in.close();
          }catch (IOException e){
            System.out.println(e.toString());
          }
        }
    
        Sheet sheet = wb.getSheetAt(0);
        Row row1 = sheet.getRow(1);
        Row row2 = sheet.createRow(2);
    
        for (int i = 0 ; i < 6 ; i++){
          Cell cell = row1.getCell(i);
          if (cell != null){
            row2.createCell(i).setCellValue("Check!");
            System.out.println(cell);
          }
        }
    
        FileOutputStream out = null;
        try{
          out = new FileOutputStream("sample2_3.xls");
          wb.write(out);
        }catch(IOException e){
          System.out.println(e.toString());
        }finally{
          try {
            out.close();
          }catch(IOException e){
            System.out.println(e.toString());
          }
        }
      }
    }
    
    


    2011年6月16日木曜日

    カオスとフラクタル

    カオスはギリシア語の動詞“大きく裂ける”から来ているが、我々の社会ではカオスは無秩序を表す表現、または予測不可能で混沌とした状態を指しています。 天気を予測することが難しいのはカオス的だからです。(東京の蝶々の羽の動きがニューヨークの天気に影響を与えるなど)カオスでは初期条件のちょっとした 違いが、増幅されて、全然異なる結果を生み出す場合があります。「塞翁が馬」ということわざがあります。人生はなにがきっかけでどうころぶかわかりません。あの時、あの人にで会っていなかったら人生が変わっていただろうとか、一冊の本との出会いをきっかけにして当初は予想もしていなかった人生を歩むことになったというような有名人がいます。私たちが歩む人生にもカオス的なところがあるのかもしれません。

    フラクタル

    フラクタルでは全体が部分の相似形となっているという特徴があります。例えばマンデルブロー集合では全体の形状に似た形状が部分のあちこちに見られ、さら にどんなに拡大しても同じ形状が現れてきます。フラクタルは無限の自己相似性を持っているということもできます。自然界にはフラクタル的なものがたくさん あります。どんなに拡大しても複雑な形をしている海岸線や空の雲の形、雪の結晶、動物や植物、微生物の形などです。


    マンデルブロー集合 雪の結晶に似た形状

    マンデルブロー集合は簡単な次の数式から作成することができます。
    f(z)=z* z + c

    コンピュータ上で簡単な数式から作成された形状がなぜか植物や動物など自然界の生物の形に似ていることがあるという不思議な現象があります。たぶんこれ は、生物の形状を現す遺伝情報がコンピュータのプログラムに似た役割をしているからだと予想します。生物の形状が出来上がっていく過程で遺伝子に書き込ま れたある司令が、繰り返し各部分で適用され、単純な数式を繰り返し計算するコンピュータのプログラムと同じような動作をしているのではないかと予想されま す。近年、コンピュータの性能が非常に進歩し、同じ計算式を繰り返し実行する時間が短くなったことにより、このような現象が確認できるようになりました。


    パソコン上で作成した植物の形状

    コンピュータのプログラムと生物の遺伝子は良く似たところがあると言われます。コンピュータのプログラムは1と0の2値のからなる情報から構成されていま すが、遺伝子はこれに対して4文字の情報から構成されていると言われています。この4文字の遺伝情報ATCGは人間や植物、バクテリアなどすべての生物に 共通です。生物が多様なのはこの4文字で書かれている遺伝情報の内容が異なるからです。

    コンピュータのプログラムを使って、フラクタルの画像をつくる場合に気がつくことですが、同じ数式から作成される画像でもパラメータを少し変化させるだけ で作成される画面上のイメージはずいぶん変わってしまいます。地球上には非常にたくさんの形態の生物がいて多様に見えますが、遺伝子レベルでみれば、パラ メータがちょっとずつ違うだけかもしれません。


    リチャードドーキンズの利己的遺伝子の説によれば「遺伝子は自分の進化のために生物を乗りついでいく」と考えられています。生物としての固体は死んでも遺 伝子だけは、子孫に受け継がれて行きます。生命の主体は遺伝子であって、われわれ人間を含む生き物はすべて、遺伝子の乗り物(又はうつわ)に過ぎないとい う説です。生物の進化は遺伝子の進化ということができます。

    微生物の形状に似たパターン

    日常生活で見られるカオス的、フラクタル的な様相を呈するものの例
    動物

    非常にたくさんのイルカやアザラシなどが群れている様子はフラクタル的。

    遺伝
    アメーバなどの生物の細胞形状。充填ジュリア集合から発生させることができる。

    天候(温度)
    天候を正確に予測することは非常に難しい。ちょっとの初期変動が大きな変動のもとになっている可能性がありカオス的である。1年間の間で温度的には冬は寒 く、夏は暑くなり、これを毎年繰り返している。但し一日の単位で見ても、夜と昼で温度の変化があり、毎日の繰り返しとなっている。この点ではフラクタル的 である。

    自然の光景

    木、葉、花(しだの葉)



    雪片
    銀河
    海岸線
    人体
    気管支の成長
    ニューロンの成長
    生理学的過程
    心のカオス
    人間の行動パターン
    「一時が万事」といわれるように、その人のほんの小さなひとつの行動を見れば、その人の性格や大体の行動パターンがわかってしまう場合がある。例えば、会 社の机の上がちらかっているような人は、きっと自分の部屋もちらかっており仕事のやり方も、雑であり、頭の中も整理されていないと想像される。

    人間が構成する組織の形態
    例えば、会社の組織は通常は社長が最上位としたピラミッド型の階層構造だが、階層構造の下の方にある一つの部署を見ても、部長を最上位としたピラミッド型をしている。