2012/09/04

CentOS で Rails など

いよいよ Ruby on Rails


やっとここまで来た。
まずは rvm で ruby と rails を入れる。
$ curl -L https://get.rvm.io | bash -s stable --ruby

このまま gem してもいいのかなぁと思いながらも
$ curl -L https://get.rvm.io | bash -s stable --rails

などとしてしまった。

$ ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]

$ rails -v
Rails 3.2.8

ちょっと、作ってみる。
$ rails new foo --database=postgresql

最後のほうでエラー、pg を入れろといってくるので
$ gem install pg -v '0.14.1'

とするも、やっぱりエラー。--with-pg-config で指定しろといってくる。そこで、
$ gem install pg -v '0.14.1' --with-pg-config=/usr/pgsql-9.1/bin/pg_config

としてもエラー!! えーっと思いながらググったら
$ gem install pg -v '0.14.1' -- --with-pg-config=/usr/pgsql-9.1/bin/pg_config

ハイフンが要るんだそうで。

このあと、vi Gemfile で therubyracer を有効にして
$ bundle install

$ rails server
ブラウザから http://localhost:3000 で無事アクセスできた。

CentOS データベースなど

PostgreSQL9.1 をインストールしてみる

yum標準でインストールされるのが 8.4.12 だったので 9 シリーズを入れてみる。

ここにいって wget する。
http://yum.pgrpms.org/reporpms/
目的の CentOS6 用 9.1

# wget http://yum.pgrpms.org/9.1/redhat/rhel-6-i386/pgdg-centos91-9.1-4.noarch.rpm

とってきたら rpm する。
# rpm -ivh pgdg-centos91-9.1-4.noarch.rpm

設定ファイルの修正
# vi /etc/yum.repos.d/CentOS-Base.repo

 [updates] のセクションに追記
exclude=postgres*

yum でインストール
# yum install postgresql91-server

postgresユーザにスイッチして、PostgreSQL の初期化
$  /usr/pgsql-9.1/bin/initdb

サーバの起動
$ /usr/pgsql-9.1/bin/pg_ctl -D /var/lib/pgsql/9.1/data -l logfile start


今のところ、覚え書きレベルのエントリーでした。

<追記>

付属する機能も入れたほうが後々引っかからない。

# yum install postgresql91-devel
# yum install postgresql91-contrib

適当なデータベースを作って psql で入る。
=> select version();
--------------------------------------------------------------
PostgreSQL 9.1.5 on i686-pc-linux-gnu, ........

でも psql は 8.4.12 で「psql の機能の中で、動作しないものがあるかもしれません。」なんて言われてしまっている…

CentOS ネットワークなど

CentOS 6.3 をインストールして起動するけど、その度にネットワークが接続されてない。


で、設定を見てみると。

メニューから、システム/設定/ネットワーク接続

 リストから System eth0 を選択して「編集...」

「自動接続する」のチェックボックスを「ON」にする

再起動して確認。

これをコマンドラインでどうやって設定するかは・・・まだ調べてません。

2012/08/30

DataGridView など

はじめに

C# と PostgreSQL であれこれとやっています。DataGridView が便利そうなのですが、なかなか使いこなせません。で、いままでは ListView なんかを使って誤魔化していたのですが、やっぱりちゃんと DataGridView 使いたいよねということで、気合を入れて頑張ってみました。

住所録アプリです。


メイン画面はこんな感じ。DataGridView がどーんと表示されています。

「行を追加」ボタンで、カーソルがある行の下に空白行が表示されます。
「行を削除」で、カーソルがある行が削除されます。
「保存」で、画面上のデータがデータベースに反映されます。

PostgreSQL との接続には Npgsql を使用しています。ADO 経由の接続もあるのですが、ドライバを別途インストールしないといけないので Npgsql にしました。

 プログラムの起動

起動時にデータベースに接続にいって、該当テーブルを DataGridView に紐付けします。

接続はこんな感じ。
接続に必要な情報は app.config に入れています。


        public static NpgsqlConnection conn;
        public static bool connect_db()
        {
            Properties.Settings.Default.Reload();
            string connection_string = "Server=" + Properties.Settings.Default.Server + ";"
                + "Port=" + Properties.Settings.Default.Port + ";"
                + "User Id=" + Properties.Settings.Default.User_Id + ";"
                + "Password=" + Properties.Settings.Default.Password + ";"
                + "Database=" + Properties.Settings.Default.Database + ";";
            conn = new NpgsqlConnection(connection_string);
            try
            {
                conn.Open();
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine("DataBase Open Error:" + ex.Message);
                return false;
            }
        }

Form の OnLoad のタイミングでデータを取ってきます。

            Database.GetData();
            dataGridView1.DataSource = Database.dataSet;
            dataGridView1.DataMember = "address";

Database.GetData() は、こんな感じ。
ちょっと、ゴチャゴチャしてますね。

        public static void GetData()
        {
            dataSet = new System.Data.DataSet();
            dataAdapter = new NpgsqlDataAdapter();
            string sql = "select * from address";

            dataAdapter.SelectCommand = new NpgsqlCommand(sql, Database.conn);

            sql = "insert into address (name, birthday, zipcode, addr, tel) values (:name, :birthday, :zipcode, :addr, :tel)";
            dataAdapter.InsertCommand = new NpgsqlCommand(sql, Database.conn);
            dataAdapter.InsertCommand.Parameters.Add(new NpgsqlParameter("name", NpgsqlTypes.NpgsqlDbType.Text, 0, "name", System.Data.ParameterDirection.Input, false, 0, 0, System.Data.DataRowVersion.Current, DBNull.Value));
            dataAdapter.InsertCommand.Parameters.Add(new NpgsqlParameter("birthday", NpgsqlTypes.NpgsqlDbType.Timestamp, 0, "birthday", System.Data.ParameterDirection.Input, false, 0, 0, System.Data.DataRowVersion.Current, DBNull.Value));
            dataAdapter.InsertCommand.Parameters.Add(new NpgsqlParameter("zipcode", NpgsqlTypes.NpgsqlDbType.Text, 0, "zipcode", System.Data.ParameterDirection.Input, false, 0, 0, System.Data.DataRowVersion.Current, DBNull.Value));
            dataAdapter.InsertCommand.Parameters.Add(new NpgsqlParameter("addr", NpgsqlTypes.NpgsqlDbType.Text, 0, "addr", System.Data.ParameterDirection.Input, false, 0, 0, System.Data.DataRowVersion.Current, DBNull.Value));
            dataAdapter.InsertCommand.Parameters.Add(new NpgsqlParameter("tel", NpgsqlTypes.NpgsqlDbType.Text, 0, "tel", System.Data.ParameterDirection.Input, false, 0, 0, System.Data.DataRowVersion.Current, DBNull.Value));

            sql = "update address set name = :name, birthday = :birthday, zipcode = :zipcode, addr = :addr, tel = :tel where id = :id";
            dataAdapter.UpdateCommand = new NpgsqlCommand(sql, Database.conn);
            dataAdapter.UpdateCommand.Parameters.Add(new NpgsqlParameter("name", NpgsqlTypes.NpgsqlDbType.Text, 0, "name", System.Data.ParameterDirection.Input, false, 0, 0, System.Data.DataRowVersion.Current, DBNull.Value));
            dataAdapter.UpdateCommand.Parameters.Add(new NpgsqlParameter("birthday", NpgsqlTypes.NpgsqlDbType.Timestamp, 0, "birthday", System.Data.ParameterDirection.Input, false, 0, 0, System.Data.DataRowVersion.Current, DBNull.Value));
            dataAdapter.UpdateCommand.Parameters.Add(new NpgsqlParameter("zipcode", NpgsqlTypes.NpgsqlDbType.Text, 0, "zipcode", System.Data.ParameterDirection.Input, false, 0, 0, System.Data.DataRowVersion.Current, DBNull.Value));
            dataAdapter.UpdateCommand.Parameters.Add(new NpgsqlParameter("addr", NpgsqlTypes.NpgsqlDbType.Text, 0, "addr", System.Data.ParameterDirection.Input, false, 0, 0, System.Data.DataRowVersion.Current, DBNull.Value));
            dataAdapter.UpdateCommand.Parameters.Add(new NpgsqlParameter("tel", NpgsqlTypes.NpgsqlDbType.Text, 0, "tel", System.Data.ParameterDirection.Input, false, 0, 0, System.Data.DataRowVersion.Current, DBNull.Value));
            dataAdapter.UpdateCommand.Parameters.Add(new NpgsqlParameter("id", NpgsqlTypes.NpgsqlDbType.Integer, 0, "id", System.Data.ParameterDirection.Input, false, 0, 0, System.Data.DataRowVersion.Original, DBNull.Value));

            sql = "delete from address where id = :id";
            dataAdapter.DeleteCommand = new NpgsqlCommand(sql, Database.conn);
            dataAdapter.DeleteCommand.Parameters.Add(new NpgsqlParameter("id", NpgsqlTypes.NpgsqlDbType.Integer, 0, "id", System.Data.ParameterDirection.Input, false, 0, 0, System.Data.DataRowVersion.Original, DBNull.Value));

            dataAdapter.Fill(dataSet, "address");
        }

これで表示はできますが、項目見出しが英語のままです。データベースには comment で日本語の情報を登録していますのでこれを使って項目見出しを日本語にします。

            Utils.SetHeaderString(dataGridView1, Database.GetComment("address"));

Database.GetComment() が、コメントを取ってくる部分。
Utils.SetHeaderString() が、コメントを DataGridView の HeaderText に当てはめる部分です。

        public static Hashtable GetComment(string table_name)
        {
            Hashtable ht = new Hashtable();
            NpgsqlCommand command = new NpgsqlCommand("select "
                + "  attr.attname as column_name, "
                + "  des2.description as column_comment "
                + "from "
                + "  pg_catalog.pg_class a "
                + "    inner join pg_catalog.pg_namespace ns on a.relnamespace = ns.oid "
                + "    inner join pg_catalog.pg_attribute attr on a.oid = attr.attrelid and attr.attnum > 0 "
                + "    left join pg_catalog.pg_description des2 on a.oid = des2.objoid and attr.attnum = des2.objsubid "
                + "where "
                + "  a.relkind IN ('r', 'v') "
                + "  and a.relname = :table_name "
                + "  and ns.nspname IN ('public') "
                , conn);
            command.Parameters.Add(new NpgsqlParameter("table_name", NpgsqlTypes.NpgsqlDbType.Text));
            command.Parameters["table_name"].Value = table_name;

            NpgsqlDataReader dr = command.ExecuteReader();
            while (dr.Read())
            {
                ht.Add(dr["column_name"], dr["column_comment"]);
            }

            return ht;
        }


        public static void SetHeaderString(System.Windows.Forms.DataGridView grid, System.Collections.Hashtable hash)
        {
            for (int ii = 0; ii < grid.Columns.Count; ii++)
            {
                if (grid.Columns[ii].HeaderText == "id")
                {
                    grid.Columns[ii].Visible = false;
                }
                if (hash[grid.Columns[ii].HeaderText] != null)
                {
                    grid.Columns[ii].HeaderText = hash[grid.Columns[ii].HeaderText].ToString();
                }
            }
        }


行を追加

このボタンをクリックすると、カーソルがある行の下に空白行を挿入します。最終行が選択されている場合、データがない場合は、行が追加されます。

        private void buttonAdd_Click(object sender, EventArgs e)
        {
            int insert_pos = 0;

            if (dataGridView1.Rows.Count > 0)
            {
                if (dataGridView1.CurrentRow == null)
                {
                    MessageBox.Show("一覧から選択して下さい");
                    return;
                }
                insert_pos = dataGridView1.CurrentRow.Index + 1;
            }

            //  挿入する行の生成
            DataRow newRow = Database.dataSet.Tables[0].NewRow();

            //  選択行の下に追加
            Database.dataSet.Tables[0].Rows.InsertAt(newRow, insert_pos);
        }

行を削除

このボタンをクリックすると、カーソルがある行が削除されます。DataGridView からです。まだデータベースからは削除されません。

        private void buttonDel_Click(object sender, EventArgs e)
        {
            if (dataGridView1.CurrentRow == null)
            {
                MessageBox.Show("一覧から選択して下さい");
                return;
            }
            DataRow myRow = Database.dataSet.Tables[0].Rows[dataGridView1.CurrentRow.Index];
            myRow.Delete();
        }

保存

DagaGridView の内容がデータベースに反映されます。

        private void buttonSave_Click(object sender, EventArgs e)
        {
            try
            {
                Database.dataAdapter.Update(Database.dataSet, "address");
                MessageBox.Show("保存しました");
            }
            catch (Exception ex)
            {
                MessageBox.Show("失敗しました。" + ex.Message);
            }
        }

まとめ

今回苦労したところは、DagaGridView への操作と、実際のデータとの連携の部分でした。DataSet を無視して DataGridView への追加、削除は簡単に出来たのですが、いざそれを保存しようというところではまってしまいました。

あと、このプログラムで連続して追加や削除を行なって「保存」しようとするとエラーが出る場合があります。DataSet 内の Status の関係だと思うのですが追求してません ^^;)

ソース一式をあげておきます。 -> ここ

2010/07/23

SQLServer compact 3.5

Visual Studio 2008 で開発するとき、何も考えずにホイホイとテーブル作って、データの読み書きしてと、便利な機能。でも VS2008 からだとデータベースのバックアップやリカバリが出来なくて、「なんじゃ、やっぱり使えないじゃん」となりかけていたところ、ありました。世の中にはちゃんとありました。探し方が悪かっただけです。

http://exportsqlce.codeplex.com/
とか、
http://erikej.blogspot.com/2009/04/sqlcecmd-tutorial-part-one-managing.html
とか。

えーごですが、簡単な表現です。ちゃんと読んでいくと色々なツールが用意されていて、便利この上なし。

コマンドラインツールなんか、普通のデータベースと同じような感覚で使うことができます。これで精神的にゆとりが出来ました。じっくりと使いこなしていこうかな。

こんな感じ

MyDatabase.sdf からエクスポート。スキーマとデータの sql 文が db.sql に書き出されます。
>ExportSqlCE.exe "Data Source=C:\tmp\MyDatabase.sdf;" db.sql

別のデータベース abc.sdf を作成
>SqlCeCmd.exe -d "Data Source=C:\tmp\abc.sdf" -e create

そこへ、さっき書き出した sql 文を流し込みます。
>SqlCeCmd.exe -d "Data Source=C:\tmp\abc.sdf" -i db.sql

2010/07/12

Windows のシリアルポートで、はまりまくり

Windows のシリアルポートは、機器を接続すると自動的に番号を割り当ててくれます。USBシリアル変換ケーブルなどを使用すると、USBのソケットを代えただけで別の新しい機器が接続されたと認識されて、またまた、番号を割り当ててくれます。

これが本当にありがた迷惑。

ついには30番を突破することに。どうも20番あたりから接続が怪しかったのですが、ここに来てどうにもこうにもならなくなりました。デバイスマネージャには、何も繋がっていないのに「COM○ 使用中」などと表示されてしまいます。

プロパティで、強制的に違う番号に変更できるのですが、それにも限界がありました。

で、悩むこと半日。

やっと見つけました。
http://social.answers.microsoft.com/Forums/ja-JP/xphardwareja/thread/32cd879a-a2e8-46d8-a877-6751792990f1/

----------引用ここから----------
「マイコンピュータ」を右クリック⇒「プロパティ」を選択⇒「詳細設定」タブ⇒「環境変数」ボタン⇒「システム環境変数」の「新規」ボタンとクリックし、変数名に「DEVMGR_SHOW_NONPRESENT_DEVICES」と入力。変数値欄に「1」と入力して再起動します。

デバイスマネージャにて「表示」⇒「非表示のデバイスの表示」と選択すると、過去にインストールした全てのドライバが灰色表示されます。ここで USBの灰色部分を右クリック⇒「削除」を選択して1つずつ削除します。
----------引用ここまで----------

これですっきりしました。

【追記】

と思っていたら、たいした解決に至っていませんでした。デバイスマネージャから、特定のシリアルポートのデバイスを選択して、プロパティでCOMポート番号を変更しようと、ドロップダウンリストを開いてみたら「キャーッ」なんと、「使用中」の表示がズラズラ。

根本解決していません。

レジストリはいじりたくないよーっ。

2010/04/12

Ruby on Rails と PostgreSQL

RoR と PostgreSQL の話題はいっぱいありますが、ラージオブジェクトを扱ったものが少ないなぁと。
特に PostgreSQL8.4.x は全然見つかりません。で、仕方なく8.3でやっつけています。

以下、覚書。

>ruby -v
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]

>rails -v
Rails 2.3.5

>gem list --local
:
ruby-postgres (0.7.1.2006.04.06)
:

>psql --version
psql (PostgreSQL) 8.3.10

この組み合わせだと、以下のような感じでラージオブジェクトを扱うことができます。

モデルの中で

def uploaded_picture_01=(picture_field)
@tmp_picture = picture_field
if @tmp_picture.original_filename != ""
@tmp_filename_01 = "#{RAILS_ROOT}/public/tmp/#{@tmp_picture.original_filename}"
File.open(@tmp_filename_01, "wb") do |f|
f.write(@tmp_picture.read)
end
@skip_upload_01 = false
else
@skip_upload_01 = true
end
end

def before_save
if @skip_upload_01 == false
conn = connection.raw_connection

# 古いイメージの削除
if self.image_field?
conn.exec("BEGIN")
conn.lounlink(self.image_field.to_i)
conn.exec("END")
end

# 新しいイメージの登録
conn.exec("BEGIN")
@tmp_lo = conn.loimport(@tmp_filename_01)
conn.exec("END")
self.image_field = @tmp_lo.oid
end
end

コントローラで

def show_image
base_x = 640.0
base_y = 480.0
ii = params[:id].to_i
if ii > 0
begin
conn = ActiveRecord::Base.connection.raw_connection

conn.exec("BEGIN")
@tmp_lo = conn.loopen(ii)

img = Magick::Image.from_blob(@tmp_lo.read).shift
new_img = img.resize_to_fit(params[:w], params[:h])
send_data(new_img.to_blob, :disposition => "inline", :type => "image/jpeg")

conn.exec("END")
rescue
end
else
end
end

引数には表示させたいイメージの oid を渡します。

PostgreSQL8.3.x ではこれでうまく動いているのですが、8.4.x にしたとたんに動かなくなります。
まず、gem の ruby-postgres が 8.4.x には対応していないようで WEBrick の起動時点でこけてしまいます。これを回避するために別の gem を入れたのですが、ラージオブジェクトの表示の部分で引っかかってしまいました。登録はできるんですが、表示の部分のロジックがうまいこと走りません。

一日かけてあれこれいじってみたのですが諦めて 8.3.x に戻してしまいました。

でも、いずれは 8.4.x に対応しないといけないので、調査継続ということでお茶を濁します。

2009/11/07

メーラ情報の共有

メーラには Thunderbird を使っています。基本的に作業はデスクトップマシンで行っていますので、メーラもこのマシンにインストールされています。普通に事務所で作業している時はこれで何の問題も無いのですが、たまにノートを持って長時間外出することもあります。問題はこの時です。

今までは、デスクトップマシンの設定ファイル一式を、外出のたびにノートにコピーしていました。出先でメールを読み書きしたら、帰ってきてから今度はノートの設定ファイルをデスクトップに戻します。たまにならいいのですが、これが頻繁になってくるとものすごく億劫になってきます。で、ときどきコピー間違いなんかして。

複数のマシンのメーラの設定ファイルを同期させる方法はいろいろあるみたいで、どれがいいかと思っていたら、こんなの見つけてしまいました。いまさらですが Dropbox です。

題して「2台のマシンの Thunderbird を Dropbox で同期させる」

1台目はデスクトップです。Windows Vista Bussines SP2、Thunderbird 2.0.0.23
2代目はノートで、Windows XP Professional SP3、Thunderbird 2.0.0.23

Vista 編


まずは Dropbox から必要なソフトをダウンロードして Vista へインストールします。
すると C:\Users\<ユーザ名>\Documents\My Dropbox のように「My Dropbox」というフォルダが生成されます。
このフォルダの中に C:\Users\<ユーザ名>\AppData\Roaming の中にある Thunderbird フォルダを移動します。
次に、もともとあった場所に Thunderbird フォルダがあるように見せかけるためにシンボリックリンクを張ります。

管理者権限でコマンドプロンプトを開き、mklink コマンドを実行します。

>mklink /D "C:\Users\<ユーザ名>\AppData\Roaming\Thunderbird" "C:\Users\<ユーザ名>\Documents\My Dropbox\Thunderbird"

C:\Users\<ユーザ名>\AppData\Roaming へ移動して dir コマンドで見るとこんな風になります。

2009/11/07 15:50 Thunderbird [C:\Users\<ユーザ名>\Documents\My Dropbox\Thunderbird]

Thunderbird を起動して動作確認をします。

XP 編


さてさてノートの方ですが、Dropbox からクライアントソフトをダウンロードしてきて、インストールするまでは同じです。ただし、今回は「アカウント取得済み」で進めます。

問題はシンボリックリンクです。XP には mklink コマンドがありません。linkd コマンドを使用しますが、これは標準では搭載されていません。Windows Server 2003 Resource Kit Tools をダウンロードしてきてインストールするとこの linkd コマンドが使用できるようになります。

管理者権限でコマンドプロンプトを開き、linkd コマンドを実行します。

>linkd "C:\Documents and Settings\<ユーザ名>\Application Data\Thunderbird" "C:\Documents and Settings\<ユーザ名>\My Documents\My Dropbox\Thunderbird"

起動確認をします。「同期、取れてる!!」です。

おわりに


XP でのシンボリックリンクですが、リンクを張ってくれるソフトの中には、リンクと称してショートカットを作るものがあります。エクスプローラで見ると区別がつかないのですが、コマンドプロンプトで見ると Thunderbird フォルダではなく Thunderbird.lnk とリンクファイルとなっています。このために Thunderbird を起動しても必要な情報が読み込めず、新規インストールと同じウィザードが起動してしまいます。

さて、2台のマシンの Thuderbird を同時に起動することは怖いのでやっていませんが、これでメールの環境が統一されました。

2009/10/25

IT総覧に掲載されます

毎年日経BP社が発行している「IT総覧」の2009年版に「個人データ管理システム Zebra」の広告が掲載されます。といっても一番小さな枠ですが。

日経コンピュータ、日経システムなどに同梱される予定です。業務アプリケーションの人事/給与のカテゴリに載っています。探してみてください。

2009/08/01

メールマガジンを始めました

自社で運営している「観光個人タクシー.NET」を紹介するメールマガジンの発行を始めました。

まぐまぐを利用しています。月刊ペースで発行の予定です。本当は2週間に一度くらいの間隔で出したいのですが、なにぶん「文才」がない物で…

よろしければ、読者登録をお願いします。

観光個人タクシー.NET
http://www.kanko-kojin-taxi.net/

まぐまぐ
http://www.mag2.com/

2009/07/07

Google Map マッシュアップ


「観光個人タクシー」
http://www.kanko-kojin-taxi.net/
のサイトに観光スポットの情報を追加しました。で、これをGoogleMap で表現してみました。
javascript がよく呑み込めてないのではまりまくってしまいましたが、どうにか動いています。サーバサイドは Ruby on Rails で作っているので xml データの吐き出しはものすごく簡単にできました。一番手間がかかったのは javascript の DOM 周りでした。

もっと精進しなければ…

2009/07/01

Javascript の練習で遊びで作ってみました。

「デンタク」です。
怒らないでください、あくまでも練習です。

http://www.shimamuraworks.com/computer/application/index.html

から、「デンタク」をクリック。

2009/06/15

サイトオープンのお知らせ


新しく「観光個人タクシー.NET」というサイトを立ち上げましたのでお知らせします。

http://www.kanko-kojin-taxi.net/



タクシーを観光にという使い方、皆さんご存知でしたか? 観光地では結構需要があります。貸切で行きたい所へ好きな時に。そんな観光に力を入れている個人タクシーの皆さんを紹介するサイトです。

まだまだ情報量も少なく、サイトの機能も限られていますが順次拡充していく予定です。みなさん、ぜひご利用ください。

企画・運営
島村製作所
http://www.shimamuraworks.com/

2009/06/01

サイト、リニューアル


オリジナルのサイトがリニューアルしました。


「中学.NET」
http://www.chugaku.net/

受験して進学する中学校の情報を取りまとめています。

学校で独自にサイトを開かれているところがほとんどですが、項目が違っていたり、表現が違っていたりで見比べるときに結構気を使います。それを一目でわかればいいなぁということでこのサイトを立ち上げました。情報はスタッフが順次登録しています。また、中学校にご協力を頂いて、写真なども順次掲載していきます。

皆さん、ご活用ください。
ご意見、ご希望などありましたら島村製作所までご連絡ください。
http://www.shimamuraworks.com/

2009/05/08

Ruby on Rails

やっと、サイトを一つ作りました。Ruby on Rails で。

レンタルサーバなので Ruby 1.8.4 Rails 1.1.6 のいまさらなバージョンなのですが、どうにかでっち上げました。勉強会にはこまめに出ていたのですが、やっぱり実際に利用するものを作ってみないとね。

今までネット関連はPHPが中心だったのですが、これで二刀流? になれるかな? java はまだちょっと…

http://www.kanko-kojin-taxi.net/

九州の観光個人タクシーを紹介するサイトです。さて、営業せねば。

2009/04/08

Zebra 6 発売開始

2009年3月31日から「個人データ管理システム Zebra 」のバージョン6の販売を開始しました。

今回のバージョンでは .NetFramework3.5 に対応し、Vista でも動作が可能になっています。また Microsoft Chart Controls を採用し、分析機能の見栄えも向上しています。

機能制限のない評価版を用意しています。この機会にぜひお試しください。

http://www.shimamuraworks.com/

2008/10/06

Windows PowerShell で vi

コマンドプロンプトじゃ、どうもいまいち。かと言ってUnix 系を立ち上げるのも面倒で・・・

Windows PowerShell をインストールしたんですが、エディタが無いということで Windows 用の vi を使えるようにしました。

ここから、Windows 用の Vim をダウンロード
http://www.kaoriya.net/

解凍して、適当な場所に配置。
C:\Program Files\vim71\vim.exe その他一式

設定ファイルの編集
C:\Documents and Settings\[ユーザ名]\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

このファイルに以下を追記
Set-Alias vi 'C:\Program Files\vim71\vim.exe'

Windows PowerShell の実行ポリシーを変更
Set-ExecutionPolicy RemoteSigned

最後のポリシー変更が分からなくてちょっと苦労しました。

2008/01/06

Apache vs Skype

開発環境をいじっていて思わぬところで躓いてしまいました。

PHP を 4 から 5 に上げよう。そうだ、Apache も 2.2 にしよう。と、あれこれいじりだしたのですが、Apache を入れなおしたところで Apache が起動しなくなってしまいました。

イベントを見てみると

(OS 10048)通常、各ソケット アドレスに対してプロトコル、ネットワーク アドレス、またはポートのどれか 1 つのみを使用できます。 : make_sock: could not bind to address 0.0.0.0:80

んーー、IIS は動いていないし・・・

コマンドプロンプトから netstat -a -b とかやってみると、ヲイヲイ、Skype が http を握っているではありませんか。

で、Skype のページで解説がありました。

http://support.skype.com/?_a=knowledgebase&_j=questiondetails&_i=528

ようは、Skype の設定変更で逃げられるよ、ということで。

2007/10/04

覚え書

忘れないために貼っておきます。


2007/09/08

Delphi for PHP

Borland ( CodeGear ) から Delphi for PHP が発売されています。 Update も 2 まで進んで動作もだいぶ安定してきました。ただ、まだ EUC-JP ではうまくコードが書けないみたいです。UTF-8 なら問題ないのですが過去のシステムに組み込むことができないのがちょっと残念です。

さて、久々にはまった問題は Delphi for PHP から。

ボタンをクリックして別のページを表示させるとき JavaScript で動作させたい場合は次のようになります。


function Button1JSClick($sender, $params)
{
if (extension_loaded("http"))
{
http_redirect('unit2.php');
}
else
{
?>
//document.forms[0].action = 'unit2.php';
//document.forms[0].submit;
window.open("unit2.php");
}
?>
//Add your javascript code here
}
}

これを「デバック付」で実行させると、ボタンをクリックして、次のページを表示した後、自分自身が空白のページになってしまいます。reload() を追加してみたり、あれこれしたのですがダメでした。で、ふと思って「デバッグなし」で実行させてみると、あら不思議、ちゃんと表示されています。

調べるパワーがない自分が情けないのですが、注意その一ということにしておきます。