tag:blogger.com,1999:blog-258698362024-03-14T20:28:01.286+09:00開発?日誌しまむらhttp://www.blogger.com/profile/05494606347388657172noreply@blogger.comBlogger44125tag:blogger.com,1999:blog-25869836.post-17779822469123474992013-12-08T22:12:00.000+09:002013-12-21T09:23:10.102+09:00CentOS に rbenv で ruby2 と Rails4 の環境を構築する最近、立て続けに似たような環境を構築したので、まとめます。キモは CentOS 6.4 に rbenv で ruby 2 の Rails 4 、 PostgresqL9 環境の構築です。<br />
<br />
<h3>
CentOS 6.4 のインストール</h3>
仮想マシン上に構築します。ホストOSは、Windows7 です。VMware で、32bit 版です。<br />
OS のインストールは、特にこれといって特別なことはありません。ただ、後でいろいろなものを追加インストールするのが面倒なので、インストールタイプは Software Development Workstation にしています。<br />
<br />
ひと通りインストールが済んだら、作業ユーザを sudo に追加します。<br />
<br />
# visudo<br />
<br />
workuser ALL=(ALL) ALL<br />
<br />
あとで必要になるパッケージをインストール<br />
<br />
$ sudo yum install git make gcc-c++ patch libyaml-devel libffi-devel libicu-devel zlib-devel readline-devel<br />
<br />
<h3>
PostgreSQL のインストール</h3>
既に古いバージョンの PostgreSQL がインストールされていますので、削除します。<br />
<br />
# yum list installed | grep postgres<br />
<br />
見つかったものを削除<br />
<br />
yum remove postgresql.i686 postgresql-libs.i686<br />
<br />
最新版を取ってきます。<br />
<br />
# wget -P /tmp http://yum.postgresql.org/9.3/redhat/rhel-6-i386/pgdg-centos93-9.3-1.noarch.rpm<br />
<br />
ここでは 32bit 版をインストールしています。<br />
<br />
# rpm -ivh /tmp/pgdg-centos93-9.3-1.noarch.rpm<br />
<br />
# yum install -y postgresql93-server postgresql93-devel postgresql93-contrib<br />
<br />
データベースの初期化<br />
<br />
# /etc/rc.d/init.d/postgresql-9.3 initdb<br />
<br />
サービスの開始<br />
<br />
# /etc/rc.d/init.d/postgresql-9.3 start<br />
<br />
自動起動に登録<br />
<br />
# chkconfig postgresql-9.3 on<br />
<br />
確認します<br />
<br />
# su - postgres<br />
<br />
$ psql<br />
<br />
psql (9.3.2)<br />
"help" でヘルプを表示します.<br />
<br />
postgres=# \l<br />
データベース一覧<br />
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権 <br />
-----------+----------+------------------+-------------+-------------------+-----------------------<br />
postgres | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | <br />
template0 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +<br />
| | | | | postgres=CTc/postgres<br />
template1 | postgres | UTF8 | ja_JP.UTF-8 | ja_JP.UTF-8 | =c/postgres +<br />
| | | | | postgres=CTc/postgres<br />
(3 行)<br />
<br />
postgres=#<br />
<br />
<h3>
rbenv のインストール</h3>
インストール用のスクリプトを作ります。<br />
<br />
※この方法、ググって調べて真似しています。どこのサイトだったか失念してしまいました。元作者の方、ごめんなさい、そしてありがとうございます。<br />
<br />
$ vi rbenv-install.sh<br />
<br />
内容は<br />
<br />
MY_GROUP="workuser"<br />
if [ "$MY_GROUP" = "" ] ; then<br />
echo '!!! undefined variable MY_GROUP.'<br />
echo '!!!'<br />
echo '!!! ex.) MY_GROUP=staff'<br />
echo '!!!'<br />
exit 1<br />
fi<br />
<br />
cd /usr/local<br />
git clone git://github.com/sstephenson/rbenv.git rbenv<br />
mkdir rbenv/shims rbenv/versions<br />
chgrp -R $MY_GROUP rbenv<br />
chmod -R g+rwxX rbenv<br />
<br />
git clone git://github.com/sstephenson/ruby-build.git ruby-build<br />
cd ruby-build<br />
./install.sh<br />
<br />
echo 'export RBENV_ROOT="/usr/local/rbenv"' >> /etc/profile.d/rbenv.sh<br />
echo 'export PATH="/usr/local/rbenv/bin:$PATH"' >> /etc/profile.d/rbenv.sh<br />
echo 'eval "$(rbenv init -)"' >> /etc/profile.d/rbenv.sh<br />
<br />
<br />
ファイルのパーミッションの変更<br />
<br />
$ chmod 755 rbenv-install.sh<br />
<br />
実行<br />
<br />
$ sudo ./rbenv-install.sh<br />
<br />
これ一発でインストールは完了します。<br />
<br />
$ rbenv -v<br />
rbenv 0.4.0-75-gbe5e1a4<br />
<br />
インストール可能な ruby を一覧表示<br />
<br />
$ rbenv install -l<br />
<br />
$ sudo yum install openssl.i686 openssl-devel.i686 openssl-static.i686<br />
<br />
rbenv 経由で ruby をインストール<br />
<br />
$ rbenv install 2.0.0-p353<br />
<br />
このマシンで使用できるように設定<br />
<br />
$ rbenv global 2.0.0-p353<br />
$ ruby -v<br />
ruby 2.0.0p353 (2013-11-22 revision 43784) [i686-linux]<br />
<br />
$ gem update --system<br />
$ gem install bundler<br />
$ gem update<br />
<br />
<h3>
httpd のインストール</h3>
<br />
$ sudo yum install httpd httpd-devel curl-devel<br />
<br />
$ chkconfig /etc/init.d/httpd<br />
$ sudo chkconfig httpd on<br />
$ chkconfig --list httpd<br />
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off<br />
<br />
$ sudo /etc/rc.d/init.d/httpd start<br />
<br />
iptables で 80 番を許可する<br />
<br />
$ sudo vi /etc/sysconfig/iptables<br />
<br />
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT<br />
<br />
$ sudo /etc/init.d/iptables restart<br />
<br />
ブラウザでアクセスすると Apache の初期画面が表示される。<br />
<br />
<h3>
Passenger のインストール</h3>
# gem install passenger<br />
# passenger-install-apache2-module<br />
<br />
設定ファイルを作成<br />
# vi /etc/httpd/conf.d/passenger.conf<br />
<br />
内容はいかの3行<br />
LoadModule passenger_module /usr/local/...<br />
PassengerRoot /usr/local/rbenv/...<br />
PassengerDefaultRuby /usr/local/rbenv/...<br />
<br />
<br />
同様に<br />
# vi /etc/httpd/conf.d/rails.conf<br />
<br />
以下の文字列<br />
<VirtualHost *:80><br />
ServerName www.example.com<br />
# !!! Be sure to point DocumentRoot to 'public'!<br />
DocumentRoot /somewhere/public <br />
<Directory /somewhere/public><br />
# This relaxes Apache security settings.<br />
AllowOverride all<br />
# MultiViews must be turned off.<br />
Options -MultiViews<br />
</Directory><br />
</VirtualHost><br />
<br />
作業ユーザに戻って<br />
<br />
$ mkdir www<br />
$ cd www<br />
<br />
ここに Rails の環境を構築します。<br />
<br />
$ bundle init<br />
<br />
$ vi Gemfile<br />
rails のコメントを外す。<br />
<h3>
</h3>
rails の環境をインストール<br />
$ bundle install --path vendor/bundle --without production<br />
<br />
$ bundle exec rails new . --skip-bundle --database=postgresql<br />
<br />
$ vi Gemfile<br />
gem 'therubyracer' のコメントを外す。<br />
<br />
$ bundle config build.pg --with-pg-config=/usr/pgsql-9.3/bin/pg_config<br />
$ bundle install --path vendor/bundle<br />
<br />
一旦、SELinux を解除します。最後に設定します。<br />
$ sudo setenforce 0<br />
<br />
$ sudo /etc/rc.d/init.d/httpd restart<br />
<br />
$ chmod 755 /home/workuser/<br />
<br />
データベースの設定をします。<br />
<br />
$ vi config/database.yml<br />
<br />
データベースの生成権を与えます。 <br />
$ su - postgres<br />
$ createuser -d workuser<br />
<br />
本来のユーザに戻って<br />
$ createdb<br />
<br />
<h3>
SELinux の設定変更</h3>
必要なパッケージをインストールします。 <br />
# yum install policycoreutils-python<br />
<br />
# grep httpd /var/log/audit/audit.log | audit2allow -M passenger<br />
<br />
# semodule -i passenger.pp<br />
<br />
SELinux を有効にします。<br />
# setenforce 1<br />
<br />
# /etc/init.d/httpd restart<br />
<br />
<h3>
長い・・・</h3>
書き足します。<br />
<br />
実行モードが production になっているので development に変更<br />
<br />
$ sudo vi /etc/httpd/conf.d/rails.conf<br />
<br />
<VirtualHost *:80><br /> ServerName www.example.com<br /> # !!! Be sure to point DocumentRoot to 'public'!<br /> DocumentRoot /somewhere/public<br /> <Directory /somewhere/public><br /> # This relaxes Apache security settings.<br /> AllowOverride all<br /> # MultiViews must be turned off.<br /> Options -MultiViews<br /> </Directory><br /> RailsEnv development<br /></VirtualHost><br />
<br />
ページをひとつ、作ってみる<br />
<br />
$ bundle exec rails g controller welcome index<br />
<br />
$ touch tmp/restart.txt<br />
<br />
ブラウザでアクセスしてみる<br />
http://192.168.xxx.xxx/welcome/index<br />
<br />
<br />
走らなかったら、SELinux を一旦切ってみる。で、走れば SELinux の再設定。<br />
<br />
# setenforce 0<br />
<br />
ブラウザでアクセスして走ることを確認<br />
<br />
再設定<br />
# grep httpd /var/log/audit/audit.log | audit2allow -M passenger<br />
# semodule -i passenger.pp<br />
# /etc/init.d/httpd restart<br />
# setenforce 1<br />
<br />
これで終了。<br />
<br />koichi_shttp://www.blogger.com/profile/15016826482858892548noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-48955815657247949912013-11-02T10:34:00.001+09:002013-11-02T10:34:16.874+09:00paperclip の、サイズの指定方法paperclip を使って画像を扱っているのですが、サイズ指定でこんがらがってきたのでまとめ。<br />
<br />
環境<br />
<br />
CentOS 6.4<br />
ruby 2.0.0p247<br />
Rails 4.0.0<br />
rbenv 0.4.0-67-g3300587<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiNR9b4zCeXu2JuCzNypjgAwBZ00JZ24DYpdKSIT1pDq5DscecWf_nTSq6nzb-Nh6METe5sVntl0vrYW-aGg0bRkreg4mipVAqMOq7we3I11nlnmDfo9rvVO63YHWYKgdEPkWi/s1600/%E7%84%A1%E9%A1%8C.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="313" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiNR9b4zCeXu2JuCzNypjgAwBZ00JZ24DYpdKSIT1pDq5DscecWf_nTSq6nzb-Nh6METe5sVntl0vrYW-aGg0bRkreg4mipVAqMOq7we3I11nlnmDfo9rvVO63YHWYKgdEPkWi/s320/%E7%84%A1%E9%A1%8C.png" width="320" /></a></div>
">" を使った時は、縦横比が崩れずに指定枠内に全部が収まる。<br />
"#" を使った時は、縦横比が崩れずに指定枠内に収めるが、はみ出た部分はカットされる。<br />
<br />koichi_shttp://www.blogger.com/profile/15016826482858892548noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-65595973553134411222013-07-20T14:42:00.000+09:002013-07-20T14:42:26.083+09:00年齢計算普段は PostgreSQL を使っています。自前のアプリケーション「個人データ管理システム Zebra 」でも使用しています。で、よく年齢計算なんかをしたりします。<br />
<br />
通常は、何歳ということで「年」だけを取ってくればいいのですが、よくばって「月」まで計算しようとしています。PostgreSQL の場合は以下。<br />
<br />
年をとるには <br />
select extract(year from age(now(), '1960-8-22'))<br />
月をとるには<br />
select extract(month from age(now(), '1960-8-22'))<br />
<br />
と、PostgreSQL の age() 関数にバリバリ、頼っているわけです。<br />
<br />
<h3>
で、ここからが本題。SQLite3 だったらどうしよう。</h3>
<br />
残念ながら age() 関数はありません。できることなら SQL 文一発で解決したいものです。そこで次のような SQL 文をいろいろググりながら作り上げました。<br />
<br />
SELECT<br /> ((strftime('%Y%m%d', 'now')-strftime('%Y%m%d', birthday))/10000) AS Age,<br /> case<br /> when (strftime('%m', 'now') - strftime('%m', birthday)) < 0 then 12 + (strftime('%m', 'now') - strftime('%m', birthday))<br /> else (strftime('%m', 'now') - strftime('%m', birthday))<br /> end as Month<br />from<br /> members<br />
<br />
ちょっと「月」の部分の出方が違っていますが、解釈の違いということで。<br />
koichi_shttp://www.blogger.com/profile/15016826482858892548noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-47438210234481223042012-09-04T17:18:00.001+09:002012-09-04T17:18:26.163+09:00CentOS で Rails など<h4>
いよいよ Ruby on Rails</h4>
<br />
やっとここまで来た。<br />
まずは rvm で ruby と rails を入れる。<br />
$ curl -L https://get.rvm.io | bash -s stable --ruby<br />
<br />
このまま gem してもいいのかなぁと思いながらも<br />
$ curl -L https://get.rvm.io | bash -s stable --rails<br />
<br />
などとしてしまった。<br />
<br />
$ ruby -v<br />ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]<br />
<br />
$ rails -v<br />Rails 3.2.8<br />
<br />
ちょっと、作ってみる。<br />
$ rails new foo --database=postgresql<br />
<br />
最後のほうでエラー、pg を入れろといってくるので<br />
$ gem install pg -v '0.14.1'<br />
<br />
とするも、やっぱりエラー。--with-pg-config で指定しろといってくる。そこで、<br />
$ gem install pg -v '0.14.1' --with-pg-config=/usr/pgsql-9.1/bin/pg_config<br />
<br />
としてもエラー!! えーっと思いながらググったら<br />
$ gem install pg -v '0.14.1' -- --with-pg-config=/usr/pgsql-9.1/bin/pg_config<br />
<br />
ハイフンが要るんだそうで。<br />
<br />
このあと、vi Gemfile で therubyracer を有効にして<br />
$ bundle install<br />
<br />
$ rails server<br />
ブラウザから http://localhost:3000 で無事アクセスできた。<br />
koichi_shttp://www.blogger.com/profile/15016826482858892548noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-77945553526851856772012-09-04T13:30:00.001+09:002012-09-04T17:08:56.879+09:00CentOS データベースなど<h4>
PostgreSQL9.1 をインストールしてみる</h4>
yum標準でインストールされるのが 8.4.12 だったので 9 シリーズを入れてみる。<br />
<br />
ここにいって wget する。<br />
http://yum.pgrpms.org/reporpms/<br />
目的の CentOS6 用 9.1<br />
<br />
# wget http://yum.pgrpms.org/9.1/redhat/rhel-6-i386/pgdg-centos91-9.1-4.noarch.rpm <br />
<br />
とってきたら rpm する。<br />
# rpm -ivh pgdg-centos91-9.1-4.noarch.rpm<br />
<br />
設定ファイルの修正<br />
# vi /etc/yum.repos.d/CentOS-Base.repo<br />
<br />
[updates] のセクションに追記<br />
exclude=postgres*<br />
<br />
yum でインストール<br />
# yum install postgresql91-server<br />
<br />
postgresユーザにスイッチして、PostgreSQL の初期化<br />
$ /usr/pgsql-9.1/bin/initdb<br />
<br />
サーバの起動<br />
$ /usr/pgsql-9.1/bin/pg_ctl -D /var/lib/pgsql/9.1/data -l logfile start<br />
<br />
<br />
今のところ、覚え書きレベルのエントリーでした。<br />
<br />
<追記><br />
<br />
付属する機能も入れたほうが後々引っかからない。<br />
<br />
# yum install postgresql91-devel<br />
# yum install postgresql91-contrib<br />
<br />
適当なデータベースを作って psql で入る。<br />
=> select version();<br />
--------------------------------------------------------------<br />
PostgreSQL 9.1.5 on i686-pc-linux-gnu, ........<br />
<br />
でも psql は 8.4.12 で「psql の機能の中で、動作しないものがあるかもしれません。」なんて言われてしまっている…<br />
<br />koichi_shttp://www.blogger.com/profile/15016826482858892548noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-52183812538808220022012-09-04T10:37:00.001+09:002012-09-04T10:39:22.768+09:00CentOS ネットワークなど<h4>
CentOS 6.3 をインストールして起動するけど、その度にネットワークが接続されてない。</h4>
<br />
で、設定を見てみると。<br />
<br />
メニューから、システム/設定/ネットワーク接続<br />
<br />
リストから System eth0 を選択して「編集...」<br />
<br />
「自動接続する」のチェックボックスを「ON」にする<br />
<br />
再起動して確認。<br />
<br />
これをコマンドラインでどうやって設定するかは・・・まだ調べてません。koichi_shttp://www.blogger.com/profile/15016826482858892548noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-12274603383778052012012-08-30T09:55:00.000+09:002012-08-30T09:55:23.732+09:00DataGridView など<h2>
はじめに </h2>
C# と PostgreSQL であれこれとやっています。DataGridView が便利そうなのですが、なかなか使いこなせません。で、いままでは ListView なんかを使って誤魔化していたのですが、やっぱりちゃんと DataGridView 使いたいよねということで、気合を入れて頑張ってみました。<br />
<br />
住所録アプリです。 <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgm-14e0Wgin2iNyB5jBPTkkFZgRdaDztQfrpCQtGt_tJifm4StyBUWCr3apWytlAsKerhfEorVg1Y01ow7ikPssvULXelEcafuFqj7PMTvE1fZwOLFgBbwyBylS8SWvHCVlGKB/s1600/MainForm.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="192" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgm-14e0Wgin2iNyB5jBPTkkFZgRdaDztQfrpCQtGt_tJifm4StyBUWCr3apWytlAsKerhfEorVg1Y01ow7ikPssvULXelEcafuFqj7PMTvE1fZwOLFgBbwyBylS8SWvHCVlGKB/s320/MainForm.png" width="320" /></a></div>
<br />
メイン画面はこんな感じ。DataGridView がどーんと表示されています。<br />
<br />
「行を追加」ボタンで、カーソルがある行の下に空白行が表示されます。<br />
「行を削除」で、カーソルがある行が削除されます。<br />
「保存」で、画面上のデータがデータベースに反映されます。<br />
<br />
PostgreSQL との接続には Npgsql を使用しています。ADO 経由の接続もあるのですが、ドライバを別途インストールしないといけないので Npgsql にしました。<br />
<h2>
プログラムの起動</h2>
起動時にデータベースに接続にいって、該当テーブルを DataGridView に紐付けします。<br />
<br />
接続はこんな感じ。<br />
接続に必要な情報は app.config に入れています。 <br />
<span style="background-color: #cfe2f3;"><span style="background-color: #cfe2f3;"></span><span style="background-color: white;"><br /></span></span>
<br />
<blockquote class="tr_bq">
<span style="background-color: white;"> public static NpgsqlConnection conn; </span></blockquote>
<blockquote class="tr_bq">
<span style="background-color: white;"> public static bool connect_db()</span><br />
<span style="background-color: white;"> {</span><br />
<span style="background-color: white;"> Properties.Settings.Default.Reload();</span><br />
<span style="background-color: white;"> string connection_string = "Server=" + Properties.Settings.Default.Server + ";"</span><br />
<span style="background-color: white;"> + "Port=" + Properties.Settings.Default.Port + ";"</span><br />
<span style="background-color: white;"> + "User Id=" + Properties.Settings.Default.User_Id + ";"</span><br />
<span style="background-color: white;"> + "Password=" + Properties.Settings.Default.Password + ";"</span><br />
<span style="background-color: white;"> + "Database=" + Properties.Settings.Default.Database + ";";</span><br />
<span style="background-color: white;"> conn = new NpgsqlConnection(connection_string);</span><br />
<span style="background-color: white;"> try</span><br />
<span style="background-color: white;"> {</span><br />
<span style="background-color: white;"> conn.Open();</span><br />
<span style="background-color: white;"> return true;</span><br />
<span style="background-color: white;"> }</span><br />
<span style="background-color: white;"> catch (Exception ex)</span><br />
<span style="background-color: white;"> {</span><br />
<span style="background-color: white;"> Console.WriteLine("DataBase Open Error:" + ex.Message);</span><br />
<span style="background-color: white;"> return false;</span><br />
<span style="background-color: white;"> }</span><br />
<span style="background-color: white;"> }</span></blockquote>
<span style="background-color: white;"><br /></span>Form の OnLoad のタイミングでデータを取ってきます。<br />
<br />
Database.GetData();<br />
dataGridView1.DataSource = Database.dataSet;<br />
dataGridView1.DataMember = "address";<br />
<br />
Database.GetData() は、こんな感じ。<br />
ちょっと、ゴチャゴチャしてますね。 <br />
<br />
public static void GetData()<br />
{<br />
dataSet = new System.Data.DataSet();<br />
dataAdapter = new NpgsqlDataAdapter();<br />
string sql = "select * from address";<br />
<br />
dataAdapter.SelectCommand = new NpgsqlCommand(sql, Database.conn);<br />
<br />
sql = "insert into address (name, birthday, zipcode, addr, tel) values (:name, :birthday, :zipcode, :addr, :tel)";<br />
dataAdapter.InsertCommand = new NpgsqlCommand(sql, Database.conn);<br />
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));<br />
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));<br />
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));<br />
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));<br />
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));<br />
<br />
sql = "update address set name = :name, birthday = :birthday, zipcode = :zipcode, addr = :addr, tel = :tel where id = :id";<br />
dataAdapter.UpdateCommand = new NpgsqlCommand(sql, Database.conn);<br />
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));<br />
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));<br />
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));<br />
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));<br />
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));<br />
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));<br />
<br />
sql = "delete from address where id = :id";<br />
dataAdapter.DeleteCommand = new NpgsqlCommand(sql, Database.conn);<br />
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));<br />
<br />
dataAdapter.Fill(dataSet, "address");<br />
}<br />
<br />
これで表示はできますが、項目見出しが英語のままです。データベースには comment で日本語の情報を登録していますのでこれを使って項目見出しを日本語にします。<br />
<br />
Utils.SetHeaderString(dataGridView1, Database.GetComment("address"));<br />
<br />
Database.GetComment() が、コメントを取ってくる部分。<br />
Utils.SetHeaderString() が、コメントを DataGridView の HeaderText に当てはめる部分です。<br />
<br />
public static Hashtable GetComment(string table_name)<br />
{<br />
Hashtable ht = new Hashtable();<br />
NpgsqlCommand command = new NpgsqlCommand("select "<br />
+ " attr.attname as column_name, "<br />
+ " des2.description as column_comment "<br />
+ "from "<br />
+ " pg_catalog.pg_class a "<br />
+ " inner join pg_catalog.pg_namespace ns on a.relnamespace = ns.oid "<br />
+ " inner join pg_catalog.pg_attribute attr on a.oid = attr.attrelid and attr.attnum > 0 "<br />
+ " left join pg_catalog.pg_description des2 on a.oid = des2.objoid and attr.attnum = des2.objsubid "<br />
+ "where "<br />
+ " a.relkind IN ('r', 'v') "<br />
+ " and a.relname = :table_name "<br />
+ " and ns.nspname IN ('public') "<br />
, conn);<br />
command.Parameters.Add(new NpgsqlParameter("table_name", NpgsqlTypes.NpgsqlDbType.Text));<br />
command.Parameters["table_name"].Value = table_name;<br />
<br />
NpgsqlDataReader dr = command.ExecuteReader();<br />
while (dr.Read())<br />
{<br />
ht.Add(dr["column_name"], dr["column_comment"]);<br />
}<br />
<br />
return ht;<br />
}<br />
<br />
<br />
public static void SetHeaderString(System.Windows.Forms.DataGridView grid, System.Collections.Hashtable hash)<br />
{<br />
for (int ii = 0; ii < grid.Columns.Count; ii++)<br />
{<br />
if (grid.Columns[ii].HeaderText == "id")<br />
{<br />
grid.Columns[ii].Visible = false;<br />
}<br />
if (hash[grid.Columns[ii].HeaderText] != null)<br />
{<br />
grid.Columns[ii].HeaderText = hash[grid.Columns[ii].HeaderText].ToString();<br />
}<br />
}<br />
}<br />
<br />
<br />
<h2>
行を追加</h2>
このボタンをクリックすると、カーソルがある行の下に空白行を挿入します。最終行が選択されている場合、データがない場合は、行が追加されます。<br />
<br />
private void buttonAdd_Click(object sender, EventArgs e)<br />
{<br />
int insert_pos = 0;<br />
<br />
if (dataGridView1.Rows.Count > 0)<br />
{<br />
if (dataGridView1.CurrentRow == null)<br />
{<br />
MessageBox.Show("一覧から選択して下さい");<br />
return;<br />
}<br />
insert_pos = dataGridView1.CurrentRow.Index + 1;<br />
}<br />
<br />
// 挿入する行の生成<br />
DataRow newRow = Database.dataSet.Tables[0].NewRow();<br />
<br />
// 選択行の下に追加<br />
Database.dataSet.Tables[0].Rows.InsertAt(newRow, insert_pos);<br />
}<br />
<br />
<h2>
行を削除</h2>
このボタンをクリックすると、カーソルがある行が削除されます。DataGridView からです。まだデータベースからは削除されません。<br />
<br />
private void buttonDel_Click(object sender, EventArgs e)<br />
{<br />
if (dataGridView1.CurrentRow == null)<br />
{<br />
MessageBox.Show("一覧から選択して下さい");<br />
return;<br />
}<br />
DataRow myRow = Database.dataSet.Tables[0].Rows[dataGridView1.CurrentRow.Index];<br />
myRow.Delete();<br />
}<br />
<br />
<h2>
保存</h2>
DagaGridView の内容がデータベースに反映されます。<br />
<br />
private void buttonSave_Click(object sender, EventArgs e)<br />
{<br />
try<br />
{<br />
Database.dataAdapter.Update(Database.dataSet, "address");<br />
MessageBox.Show("保存しました");<br />
}<br />
catch (Exception ex)<br />
{<br />
MessageBox.Show("失敗しました。" + ex.Message);<br />
}<br />
}<br />
<br />
<h2>
まとめ</h2>
今回苦労したところは、DagaGridView への操作と、実際のデータとの連携の部分でした。DataSet を無視して DataGridView への追加、削除は簡単に出来たのですが、いざそれを保存しようというところではまってしまいました。<br />
<br />
あと、このプログラムで連続して追加や削除を行なって「保存」しようとするとエラーが出る場合があります。DataSet 内の Status の関係だと思うのですが追求してません ^^;)<br />
<br />
ソース一式をあげておきます。 -> <a href="http://www.shimamuraworks.jp/computer/labo/DataGridView.zip">ここ</a>koichi_shttp://www.blogger.com/profile/15016826482858892548noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-11384153333960651882010-07-23T23:29:00.003+09:002010-07-23T23:51:09.936+09:00SQLServer compact 3.5Visual Studio 2008 で開発するとき、何も考えずにホイホイとテーブル作って、データの読み書きしてと、便利な機能。でも VS2008 からだとデータベースのバックアップやリカバリが出来なくて、「なんじゃ、やっぱり使えないじゃん」となりかけていたところ、ありました。世の中にはちゃんとありました。探し方が悪かっただけです。<br /><br />http://exportsqlce.codeplex.com/<br />とか、<br />http://erikej.blogspot.com/2009/04/sqlcecmd-tutorial-part-one-managing.html<br />とか。<br /><br />えーごですが、簡単な表現です。ちゃんと読んでいくと色々なツールが用意されていて、便利この上なし。<br /><br />コマンドラインツールなんか、普通のデータベースと同じような感覚で使うことができます。これで精神的にゆとりが出来ました。じっくりと使いこなしていこうかな。<br /><br />こんな感じ<br /><br />MyDatabase.sdf からエクスポート。スキーマとデータの sql 文が db.sql に書き出されます。<br />>ExportSqlCE.exe "Data Source=C:\tmp\MyDatabase.sdf;" db.sql<br /><br />別のデータベース abc.sdf を作成<br />>SqlCeCmd.exe -d "Data Source=C:\tmp\abc.sdf" -e create<br /><br />そこへ、さっき書き出した sql 文を流し込みます。<br />>SqlCeCmd.exe -d "Data Source=C:\tmp\abc.sdf" -i db.sqlしまむらhttp://www.blogger.com/profile/05494606347388657172noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-89772142273529900042010-07-12T23:17:00.004+09:002010-07-13T21:03:31.267+09:00Windows のシリアルポートで、はまりまくりWindows のシリアルポートは、機器を接続すると自動的に番号を割り当ててくれます。USBシリアル変換ケーブルなどを使用すると、USBのソケットを代えただけで別の新しい機器が接続されたと認識されて、またまた、番号を割り当ててくれます。<br /><br />これが本当にありがた迷惑。<br /><br />ついには30番を突破することに。どうも20番あたりから接続が怪しかったのですが、ここに来てどうにもこうにもならなくなりました。デバイスマネージャには、何も繋がっていないのに「COM○ 使用中」などと表示されてしまいます。<br /><br />プロパティで、強制的に違う番号に変更できるのですが、それにも限界がありました。<br /><br />で、悩むこと半日。<br /><br />やっと見つけました。<br />http://social.answers.microsoft.com/Forums/ja-JP/xphardwareja/thread/32cd879a-a2e8-46d8-a877-6751792990f1/<br /><br />----------引用ここから----------<br />「マイコンピュータ」を右クリック⇒「プロパティ」を選択⇒「詳細設定」タブ⇒「環境変数」ボタン⇒「システム環境変数」の「新規」ボタンとクリックし、変数名に「DEVMGR_SHOW_NONPRESENT_DEVICES」と入力。変数値欄に「1」と入力して再起動します。<br /><br />デバイスマネージャにて「表示」⇒「非表示のデバイスの表示」と選択すると、過去にインストールした全てのドライバが灰色表示されます。ここで USBの灰色部分を右クリック⇒「削除」を選択して1つずつ削除します。<br />----------引用ここまで----------<br /><br />これですっきりしました。<br /><br />【追記】<br /><br />と思っていたら、たいした解決に至っていませんでした。デバイスマネージャから、特定のシリアルポートのデバイスを選択して、プロパティでCOMポート番号を変更しようと、ドロップダウンリストを開いてみたら「キャーッ」なんと、「使用中」の表示がズラズラ。<br /><br />根本解決していません。<br /><br />レジストリはいじりたくないよーっ。しまむらhttp://www.blogger.com/profile/05494606347388657172noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-87801586382897017612010-04-12T23:16:00.003+09:002010-04-12T23:37:08.078+09:00Ruby on Rails と PostgreSQLRoR と PostgreSQL の話題はいっぱいありますが、ラージオブジェクトを扱ったものが少ないなぁと。<br />特に PostgreSQL8.4.x は全然見つかりません。で、仕方なく8.3でやっつけています。<br /><br />以下、覚書。<br /><br />>ruby -v<br />ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]<br /><br />>rails -v<br />Rails 2.3.5<br /><br />>gem list --local<br /> :<br />ruby-postgres (0.7.1.2006.04.06)<br /> :<br /><br />>psql --version<br />psql (PostgreSQL) 8.3.10<br /><br />この組み合わせだと、以下のような感じでラージオブジェクトを扱うことができます。<br /><br />モデルの中で<br /><pre><br /> def uploaded_picture_01=(picture_field)<br /> @tmp_picture = picture_field<br /> if @tmp_picture.original_filename != ""<br /> @tmp_filename_01 = "#{RAILS_ROOT}/public/tmp/#{@tmp_picture.original_filename}"<br /> File.open(@tmp_filename_01, "wb") do |f|<br /> f.write(@tmp_picture.read)<br /> end<br /> @skip_upload_01 = false<br /> else<br /> @skip_upload_01 = true<br /> end<br /> end<br /><br /> def before_save<br /> if @skip_upload_01 == false<br /> conn = connection.raw_connection<br /><br /> # 古いイメージの削除<br /> if self.image_field?<br /> conn.exec("BEGIN")<br /> conn.lounlink(self.image_field.to_i)<br /> conn.exec("END")<br /> end<br /><br /> # 新しいイメージの登録<br /> conn.exec("BEGIN")<br /> @tmp_lo = conn.loimport(@tmp_filename_01)<br /> conn.exec("END")<br /> self.image_field = @tmp_lo.oid<br /> end<br />end<br /></pre><br />コントローラで<br /><pre><br /> def show_image<br /> base_x = 640.0<br /> base_y = 480.0<br /> ii = params[:id].to_i<br /> if ii > 0<br /> begin<br /> conn = ActiveRecord::Base.connection.raw_connection<br /><br /> conn.exec("BEGIN")<br /> @tmp_lo = conn.loopen(ii)<br /><br /> img = Magick::Image.from_blob(@tmp_lo.read).shift<br /> new_img = img.resize_to_fit(params[:w], params[:h])<br /> send_data(new_img.to_blob, :disposition => "inline", :type => "image/jpeg")<br /><br /> conn.exec("END")<br /> rescue<br /> end<br /> else<br /> end<br /> end<br /></pre><br />引数には表示させたいイメージの oid を渡します。<br /><br />PostgreSQL8.3.x ではこれでうまく動いているのですが、8.4.x にしたとたんに動かなくなります。<br />まず、gem の ruby-postgres が 8.4.x には対応していないようで WEBrick の起動時点でこけてしまいます。これを回避するために別の gem を入れたのですが、ラージオブジェクトの表示の部分で引っかかってしまいました。登録はできるんですが、表示の部分のロジックがうまいこと走りません。<br /><br />一日かけてあれこれいじってみたのですが諦めて 8.3.x に戻してしまいました。<br /><br />でも、いずれは 8.4.x に対応しないといけないので、調査継続ということでお茶を濁します。しまむらhttp://www.blogger.com/profile/05494606347388657172noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-840360284962138832009-11-07T16:53:00.006+09:002009-11-07T17:47:33.078+09:00メーラ情報の共有メーラには Thunderbird を使っています。基本的に作業はデスクトップマシンで行っていますので、メーラもこのマシンにインストールされています。普通に事務所で作業している時はこれで何の問題も無いのですが、たまにノートを持って長時間外出することもあります。問題はこの時です。<br /><br />今までは、デスクトップマシンの設定ファイル一式を、外出のたびにノートにコピーしていました。出先でメールを読み書きしたら、帰ってきてから今度はノートの設定ファイルをデスクトップに戻します。たまにならいいのですが、これが頻繁になってくるとものすごく億劫になってきます。で、ときどきコピー間違いなんかして。<br /><br />複数のマシンのメーラの設定ファイルを同期させる方法はいろいろあるみたいで、どれがいいかと思っていたら、こんなの見つけてしまいました。いまさらですが <a href="https://www.dropbox.com/">Dropbox</a> です。<br /><br />題して<span style="font-size:20px;">「2台のマシンの Thunderbird を Dropbox で同期させる」</span><br /><br />1台目はデスクトップです。Windows Vista Bussines SP2、Thunderbird 2.0.0.23<br />2代目はノートで、Windows XP Professional SP3、Thunderbird 2.0.0.23<br /><br /><h3>Vista 編</h3><br />まずは Dropbox から必要なソフトをダウンロードして Vista へインストールします。<br />すると C:\Users\<ユーザ名>\Documents\My Dropbox のように「My Dropbox」というフォルダが生成されます。<br />このフォルダの中に C:\Users\<ユーザ名>\AppData\Roaming の中にある Thunderbird フォルダを移動します。<br />次に、もともとあった場所に Thunderbird フォルダがあるように見せかけるためにシンボリックリンクを張ります。<br /><br />管理者権限でコマンドプロンプトを開き、mklink コマンドを実行します。<br /><br />>mklink /D "C:\Users\<ユーザ名>\AppData\Roaming\Thunderbird" "C:\Users\<ユーザ名>\Documents\My Dropbox\Thunderbird"<br /><br />C:\Users\<ユーザ名>\AppData\Roaming へ移動して dir コマンドで見るとこんな風になります。<br /><br />2009/11/07 15:50 <symlinkd> Thunderbird [C:\Users\<ユーザ名>\Documents\My Dropbox\Thunderbird]<br /><br />Thunderbird を起動して動作確認をします。<br /><br /><h3>XP 編</h3><br />さてさてノートの方ですが、Dropbox からクライアントソフトをダウンロードしてきて、インストールするまでは同じです。ただし、今回は「アカウント取得済み」で進めます。<br /><br />問題はシンボリックリンクです。XP には mklink コマンドがありません。linkd コマンドを使用しますが、これは標準では搭載されていません。Windows Server 2003 Resource Kit Tools をダウンロードしてきてインストールするとこの linkd コマンドが使用できるようになります。<br /><br />管理者権限でコマンドプロンプトを開き、linkd コマンドを実行します。<br /><br />>linkd "C:\Documents and Settings\<ユーザ名>\Application Data\Thunderbird" "C:\Documents and Settings\<ユーザ名>\My Documents\My Dropbox\Thunderbird"<br /><br />起動確認をします。「同期、取れてる!!」です。<br /><br /><h3>おわりに</h3><br />XP でのシンボリックリンクですが、リンクを張ってくれるソフトの中には、リンクと称してショートカットを作るものがあります。エクスプローラで見ると区別がつかないのですが、コマンドプロンプトで見ると Thunderbird フォルダではなく Thunderbird.lnk とリンクファイルとなっています。このために Thunderbird を起動しても必要な情報が読み込めず、新規インストールと同じウィザードが起動してしまいます。<br /><br />さて、2台のマシンの Thuderbird を同時に起動することは怖いのでやっていませんが、これでメールの環境が統一されました。<br /><br /></symlinkd>しまむらhttp://www.blogger.com/profile/05494606347388657172noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-89449658916051811362009-10-25T10:54:00.002+09:002009-10-25T10:58:06.164+09:00IT総覧に掲載されます毎年日経BP社が発行している「IT総覧」の2009年版に「個人データ管理システム Zebra」の広告が掲載されます。といっても一番小さな枠ですが。<br /><br />日経コンピュータ、日経システムなどに同梱される予定です。業務アプリケーションの人事/給与のカテゴリに載っています。探してみてください。しまむらhttp://www.blogger.com/profile/05494606347388657172noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-24844725396612130672009-08-01T23:12:00.002+09:002009-08-01T23:17:14.033+09:00メールマガジンを始めました自社で運営している「観光個人タクシー.NET」を紹介するメールマガジンの発行を始めました。<br /><br />まぐまぐを利用しています。月刊ペースで発行の予定です。本当は2週間に一度くらいの間隔で出したいのですが、なにぶん「文才」がない物で…<br /><br />よろしければ、読者登録をお願いします。<br /><br />観光個人タクシー.NET<br /><a href="http://www.kanko-kojin-taxi.net/">http://www.kanko-kojin-taxi.net/</a><br /><br />まぐまぐ<br /><a href="http://www.mag2.com/">http://www.mag2.com/</a>しまむらhttp://www.blogger.com/profile/05494606347388657172noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-77164234063665689472009-07-07T22:27:00.003+09:002009-07-07T22:33:58.502+09:00Google Map マッシュアップ<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRe0QkI3rDoXcPY4bfLf6HR7GhbdfC7aM_VjHDjUi856pkHrIS49abdisVZomHv8TN1du8oRQxU6igo8WGZRjZ5V0KeqxU-y-9rk8CNQrUrZgIq-iGt9mZQ5nKJIN-Y71LG7X6Jw/s1600-h/%E7%84%A1%E9%A1%8C.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 252px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRe0QkI3rDoXcPY4bfLf6HR7GhbdfC7aM_VjHDjUi856pkHrIS49abdisVZomHv8TN1du8oRQxU6igo8WGZRjZ5V0KeqxU-y-9rk8CNQrUrZgIq-iGt9mZQ5nKJIN-Y71LG7X6Jw/s320/%E7%84%A1%E9%A1%8C.jpg" alt="" id="BLOGGER_PHOTO_ID_5355710627847928178" border="0" /></a><br />「観光個人タクシー」<br /><a href="http://www.kanko-kojin-taxi.net/">http://www.kanko-kojin-taxi.net/</a><br />のサイトに観光スポットの情報を追加しました。で、これをGoogleMap で表現してみました。<br />javascript がよく呑み込めてないのではまりまくってしまいましたが、どうにか動いています。サーバサイドは Ruby on Rails で作っているので xml データの吐き出しはものすごく簡単にできました。一番手間がかかったのは javascript の DOM 周りでした。<br /><br />もっと精進しなければ…しまむらhttp://www.blogger.com/profile/05494606347388657172noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-5206092697052165092009-07-01T17:00:00.001+09:002009-07-01T17:03:08.010+09:00Javascript の練習で遊びで作ってみました。「デンタク」です。<br />怒らないでください、あくまでも練習です。<br /><br /><a href="http://www.shimamuraworks.com/computer/application/index.html">http://www.shimamuraworks.com/computer/application/index.html</a><br /><br />から、「デンタク」をクリック。しまむらhttp://www.blogger.com/profile/05494606347388657172noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-25903588620311246082009-06-15T16:24:00.003+09:002009-06-15T16:35:38.447+09:00サイトオープンのお知らせ<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaq9FmMla-QLw-8nIoI6-NDUw1E06f99YeouY8LmF_WslbWcbSFeW_WwBKsxqZMaWmu8AGVDu3SG0T1JJx4RBzQyA5r3AMHjQoV9CwzzHG5Xul9qL8I6QTnTcwR4YqAMn4Iz-LAA/s1600-h/kktaxi_2.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 298px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaq9FmMla-QLw-8nIoI6-NDUw1E06f99YeouY8LmF_WslbWcbSFeW_WwBKsxqZMaWmu8AGVDu3SG0T1JJx4RBzQyA5r3AMHjQoV9CwzzHG5Xul9qL8I6QTnTcwR4YqAMn4Iz-LAA/s320/kktaxi_2.jpg" alt="" id="BLOGGER_PHOTO_ID_5347454465294827122" border="0" /></a><br />新しく「観光個人タクシー.NET」というサイトを立ち上げましたのでお知らせします。<br /><br /><a href="http://www.kanko-kojin-taxi.net/">http://www.kanko-kojin-taxi.net/</a><br /><br /><br /><br />タクシーを観光にという使い方、皆さんご存知でしたか? 観光地では結構需要があります。貸切で行きたい所へ好きな時に。そんな観光に力を入れている個人タクシーの皆さんを紹介するサイトです。<br /><br />まだまだ情報量も少なく、サイトの機能も限られていますが順次拡充していく予定です。みなさん、ぜひご利用ください。<br /><br />企画・運営<br />島村製作所<br /><a href="http://www.shimamuraworks.com/">http://www.shimamuraworks.com/</a>しまむらhttp://www.blogger.com/profile/05494606347388657172noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-33808715877155685832009-06-01T17:31:00.004+09:002009-06-01T17:41:17.974+09:00サイト、リニューアル<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.chugaku.net/"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 250px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiclaxocUKSUtzk6TdzjD5HfgoVzkIlMkxkbRCdoczPfnS50V_qHkHTS-nxg8-KKci48ZZOC0ONcLvOoCZcGUbaOu0n2i9vuY9qKhp8ikNx5ZwWXUWZ0k-zIbNh3t6EAF3PyGkIZg/s320/chugaku_2.jpg" alt="" id="BLOGGER_PHOTO_ID_5342274685710916274" border="0" /></a><br />オリジナルのサイトがリニューアルしました。<br /><br /><br />「中学.NET」<br /><a href="http://www.chugaku.net/">http://www.chugaku.net/</a><br /><br />受験して進学する中学校の情報を取りまとめています。<br /><br />学校で独自にサイトを開かれているところがほとんどですが、項目が違っていたり、表現が違っていたりで見比べるときに結構気を使います。それを一目でわかればいいなぁということでこのサイトを立ち上げました。情報はスタッフが順次登録しています。また、中学校にご協力を頂いて、写真なども順次掲載していきます。<br /><br />皆さん、ご活用ください。<br />ご意見、ご希望などありましたら島村製作所までご連絡ください。<br /><a href="http://www.shimamuraworks.com/">http://www.shimamuraworks.com/</a>しまむらhttp://www.blogger.com/profile/05494606347388657172noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-15331591305192726602009-05-08T17:07:00.003+09:002009-05-08T17:14:47.560+09:00Ruby on Railsやっと、サイトを一つ作りました。Ruby on Rails で。<br /><br />レンタルサーバなので Ruby 1.8.4 Rails 1.1.6 のいまさらなバージョンなのですが、どうにかでっち上げました。勉強会にはこまめに出ていたのですが、やっぱり実際に利用するものを作ってみないとね。<br /><br />今までネット関連はPHPが中心だったのですが、これで二刀流? になれるかな? java はまだちょっと…<br /><br /><a href="http://www.kanko-kojin-taxi.net/">http://www.kanko-kojin-taxi.net/</a><br /><br />九州の観光個人タクシーを紹介するサイトです。さて、営業せねば。しまむらhttp://www.blogger.com/profile/05494606347388657172noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-61299748813423736162009-04-08T08:20:00.003+09:002009-04-08T08:26:22.272+09:00Zebra 6 発売開始2009年3月31日から「個人データ管理システム Zebra 」のバージョン6の販売を開始しました。<br /><br />今回のバージョンでは .NetFramework3.5 に対応し、Vista でも動作が可能になっています。また Microsoft Chart Controls を採用し、分析機能の見栄えも向上しています。<br /><br />機能制限のない評価版を用意しています。この機会にぜひお試しください。<br /><br /><a href="http://www.shimamuraworks.com/">http://www.shimamuraworks.com/</a>しまむらhttp://www.blogger.com/profile/05494606347388657172noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-84693884887857637982008-10-06T09:49:00.002+09:002008-10-06T09:58:00.481+09:00Windows PowerShell で viコマンドプロンプトじゃ、どうもいまいち。かと言ってUnix 系を立ち上げるのも面倒で・・・<br /><br />Windows PowerShell をインストールしたんですが、エディタが無いということで Windows 用の vi を使えるようにしました。<br /><br />ここから、Windows 用の Vim をダウンロード<br /><a href="http://www.kaoriya.net/">http://www.kaoriya.net/</a><br /><br />解凍して、適当な場所に配置。<br />C:\Program Files\vim71\vim.exe その他一式<br /><br />設定ファイルの編集<br />C:\Documents and Settings\[ユーザ名]\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1<br /><br />このファイルに以下を追記<br />Set-Alias vi 'C:\Program Files\vim71\vim.exe'<br /><br />Windows PowerShell の実行ポリシーを変更<br /> Set-ExecutionPolicy RemoteSigned<br /><br />最後のポリシー変更が分からなくてちょっと苦労しました。しまむらhttp://www.blogger.com/profile/05494606347388657172noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-22050080625538640602008-01-06T22:27:00.000+09:002008-01-06T22:34:24.268+09:00Apache vs Skype開発環境をいじっていて思わぬところで躓いてしまいました。<br /><br />PHP を 4 から 5 に上げよう。そうだ、Apache も 2.2 にしよう。と、あれこれいじりだしたのですが、Apache を入れなおしたところで Apache が起動しなくなってしまいました。<br /><br />イベントを見てみると<br /><br />(OS 10048)通常、各ソケット アドレスに対してプロトコル、ネットワーク アドレス、またはポートのどれか 1 つのみを使用できます。 : make_sock: could not bind to address 0.0.0.0:80<br /><br />んーー、IIS は動いていないし・・・<br /><br />コマンドプロンプトから netstat -a -b とかやってみると、ヲイヲイ、Skype が http を握っているではありませんか。<br /><br />で、Skype のページで解説がありました。<br /><br />http://support.skype.com/?_a=knowledgebase&_j=questiondetails&_i=528<br /><br />ようは、Skype の設定変更で逃げられるよ、ということで。しまむらhttp://www.blogger.com/profile/05494606347388657172noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-65320279688508369462007-10-04T09:06:00.000+09:002007-10-04T09:12:04.897+09:00覚え書忘れないために貼っておきます。<br /><br /><br /><iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=migorodotnet-22&o=9&p=8&l=as1&asins=4883383687&fc1=000000&IS2=1&lt1=_blank&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width: 120px; height: 240px;" marginwidth="0" marginheight="0" frameborder="0" scrolling="no"></iframe>しまむらhttp://www.blogger.com/profile/05494606347388657172noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-76853651928477327402007-09-08T20:21:00.000+09:002007-09-08T20:41:25.325+09:00Delphi for PHPBorland ( CodeGear ) から Delphi for PHP が発売されています。 Update も 2 まで進んで動作もだいぶ安定してきました。ただ、まだ EUC-JP ではうまくコードが書けないみたいです。UTF-8 なら問題ないのですが過去のシステムに組み込むことができないのがちょっと残念です。<br /><br />さて、久々にはまった問題は Delphi for PHP から。<br /><br />ボタンをクリックして別のページを表示させるとき JavaScript で動作させたい場合は次のようになります。<br /><br /><br /> function Button1JSClick($sender, $params)<br /> {<br /> if (extension_loaded("http"))<br /> {<br /> http_redirect('unit2.php');<br /> }<br /> else<br /> {<br /> ?><br /> //document.forms[0].action = 'unit2.php';<br /> //document.forms[0].submit;<br /> window.open("unit2.php");<br /> <?php<br /> }<br /> ?><br /> //Add your javascript code here<br /> <?php<br /> }<br /> }<br /><br />これを「デバック付」で実行させると、ボタンをクリックして、次のページを表示した後、自分自身が空白のページになってしまいます。reload() を追加してみたり、あれこれしたのですがダメでした。で、ふと思って「デバッグなし」で実行させてみると、あら不思議、ちゃんと表示されています。<br /><br />調べるパワーがない自分が情けないのですが、注意その一ということにしておきます。しまむらhttp://www.blogger.com/profile/05494606347388657172noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-1166541515577366212006-12-20T00:13:00.000+09:002006-12-20T00:18:35.586+09:00PHP file_exists() と is_file()ファイルの存在確認には file_exists() を良く使います。が、これはファイル、もしくはディレクトリがあれば true を返すという関数です。で、またはまったのですが。<br /><br />$chech_file = $my_dir . "/" . $my_file;<br />if (file_exists($check_file))....<br /><br />とすると $my_file が指定されていなくても $my_dir は存在しているので答えは true になってしまいます。このときは<br /><br />if (is_file($check_file))....<br /><br />とすれば false が返ってきます。しまむらhttp://www.blogger.com/profile/05494606347388657172noreply@blogger.com0tag:blogger.com,1999:blog-25869836.post-1166336659330289702006-12-17T15:01:00.000+09:002006-12-17T15:35:18.356+09:00PHP mojavi + smarty + calendarフレームワークの mojavi と、テンプレートの smarty、そして PEAR の Calendar を利用してカレンダーを書くことに挑戦。<br /><br />ディレクトリは以下のようになります。<br /><pre><br />home_directory<br /> + mojavi<br /> + lib<br /> + opt<br /> + Calendar<br /> + Decorator<br /> + Engine<br /> + Month<br /> + Table<br /> + Util<br /> + smarty<br /> + internals<br /> + plugins<br /> + public_html<br /> + webapp<br /> + modules<br /> + MyCalender<br /> + actions<br /> - YoteihyouAction.class.php<br /> + templates<br /> - yoteihyou.tpl<br /> + views<br /> - YoteihyouView_success.class.php<br /></pre><br />YoteihyouAction.class.php ファイル<br /><pre><br /><?php<br />require_once(OPT_DIR . 'Calendar/Month/Weekdays.php');<br />class YoteihyouAction extends Action<br />{<br /> function execute (&$controller, &$request, &$user)<br /> {<br /> $year = 2006;<br /> $month = 12;<br /> <br /> $calendar = new Calendar_Month_Weekdays($year,$month,0);<br /> $calendar->build();<br /><br /> $week = 0;<br /> while ($day = $calendar->fetch()) {<br /> $the_day = array();<br /> $the_day['bgcolor'] = "#FFFFFF";<br /> if ($day->isFirst()) {<br /> $the_day['bgcolor'] = "#FFCCFF";<br /> $week++;<br /> } else if ($day->isLast()) {<br /> $the_day['bgcolor'] = "#B3E7FF";<br /> }<br /> <br /> if ($day->isEmpty())<br /> {<br /> $the_day['day'] = " ";<br /> } else {<br /> $the_day['day'] = $day->thisDay();<br /> }<br /> $calendar_list[$week][$day->thisDay()] = $the_day;<br /> }<br /> <br /> $request->setAttribute('calendar_list', $calendar_list);<br /> $request->setAttribute('year', $year);<br /> $request->setAttribute('month', $month);<br /> <br /> return VIEW_SUCCESS;<br /> }<br />}<br />?><br /></pre><br />YoteihyouView_success.class.php ファイル<br /><pre><br /><?php<br />require_once(LIB_DIR . 'CustomSmartyRenderer.class.php');<br />class YoteihyouView extends View<br />{<br /> function & execute (&$controller, &$request, &$user)<br /> {<br /> $renderer =& new CustomSmartyRenderer ($controller, $request, $user);<br /> $renderer->setTemplate('yoteihyou.tpl');<br /> $renderer->setAttribute('year', $request->getAttribute('year'));<br /> $renderer->setAttribute('month', $request->getAttribute('month'));<br /> $renderer->setAttribute('calendar_list', $request->getAttribute('calendar_list'));<br /><br /> return $renderer;<br /> }<br />}<br />?><br /></pre><br />yoteihyou.tpl ファイル<br /><pre><br /><head><br /><meta equiv="Content-Type" content="text/html; charset=euc-jp"><br /><meta equiv="Content-Language" content="ja"><br /><title>新しいページ</title><br /></head><br /><body><br /><br /><table border="0" cellpadding="2" cellspacing="0"><br /> <caption>{$year} 年 {$month} 月</caption><br /> <tr><br /> <th align="center"><span style="color:#FF0000;">日</span></th><br /> <th align="center">月</th><br /> <th align="center">火</th><br /> <th align="center">水</th><br /> <th align="center">木</th><br /> <th align="center">金</th><br /> <th align="center"><span style="color:#0000FF;">土</span></th><br /> </tr><br />{foreach from=$calendar_list key=week item=values}<br /> <tr><br /> {foreach from=$values key=day item=the_day}<br /> <td bgcolor="{$the_day.bgcolor}" align="right"><br /> {$the_day.day}<br /> </td><br /> {/foreach}<br /> </tr><br />{/foreach}<br /></table><br /><br /></body><br /></html><br /></pre>しまむらhttp://www.blogger.com/profile/05494606347388657172noreply@blogger.com0