ページ

2013年4月25日木曜日

Linuxでmailに添付ファイルを付ける【uuencodeを利用しない】

Linuxでシェルを作っていると、メールを送信すること
またメールに、添付ファイルを付けたくなった
既存のコマンドだけで可能な限り対応できないかと模索し
シェルを作成。
よく目にするのは、uuencodeコマンドを利用する方法だが
今回は動作環境の事情もあり、該当のコマンドを利用しない方帆を記載

sendmailコマンドを利用し対応、少し汎用性は付けたが
ほぼ基礎のみ比較的簡単に添付ファイルが送付可能
複数のファイルには非対応のため注意が必要

原理は、mailはテキストを特定の書式で送るのが原理のため
書式を手動で作成すれば良い

メールの仕様書を読めばより理解が深まるだろう

環境
環境情報 構築日 ソフトウェア 必要込コマンド
CentOS 5.6 2013/04/25 なし sendmail


#!/bin/bash

############################
## メール添付ファイルスクリプト
## コマンドラインから添付付きメールを送信するスクリプトです.
## ※日本語部分対応のため、完全ではございません.
##
## mail.sh {fromアドレス} {toアドレス} {タイトル} {本文} {添付ファイル名}
##
############################

## 初期化
from_address=$1
to_address=$2
subject=$3
mail=$4
TMP_FILE='mail.tmp'
boundary=`date +%Y%m%d%H%M%N`
content_type=`file --mime $1 | cut -d' ' -f2`
filename=`echo $5 | sed -e "s/.*\/\(.*$\)/\1/"`

## メール情報付与
echo "From: $from_address" > $TMP_FILE
echo "To: $to_address" >> $TMP_FILE
echo "Subject: $subject" >> $TMP_FILE
echo "MIME-Version: 1.0" >> $TMP_FILE
echo "Content-type: multipart/mixed; boundary=\"----$boundary\"" >> $TMP_FILE
echo "Content-Transfer-Encoding: 7bit" >> $TMP_FILE
echo "" >> $TMP_FILE
echo "This is a multi-part message in MIME format." >> $TMP_FILE
echo "" >> $TMP_FILE

## 本文
echo "------$boundary" >> $TMP_FILE
echo "Content-type: text/plain; charset=iso-2022-jp" >> $TMP_FILE
echo "Content-Transfer-Encoding: 7bit" >> $TMP_FILE
echo "" >> $TMP_FILE
echo "$main" >> $TMP_FILE
echo "" >> $TMP_FILE

## ファイル情報(base64で送信)
echo "------$boundary" >> $TMP_FILE
echo "Content-type: $content_type" >> $TMP_FILE
echo " name=$filename" >> $TMP_FILE
echo "Content-Transfer-Encoding: base64" >> $TMP_FILE
echo "Content-Disposition : attachment;" >> $TMP_FILE
echo " filename=$filename" >> $TMP_FILE
echo "" >> $TMP_FILE
cat $5 | base64 >> $TMP_FILE
echo "" >> $TMP_FILE
echo "------$boundary--" >> $TMP_FILE

## メールを送信
sendmail -i $to_address < $TMP_FILE

## 一時ファイルを削除
rm -f $TMP_FILE

exit 0

多少便利ぐらいで使う用途が限定されるが 意外と便利である 検証中に尽き動作保証できないが雰囲気が理解いただけるかと思います。

2013年4月21日日曜日

最小二乗法をpostgresで説く

postgresにも数学用の関数がいくつか用意されています。
こちらを利用し、最小二乗法が実現可能です。
ただし、作成できるのは線形(y=ax+b)のみなので利用用とは初級では限界があるかもしれません。
でも出来るだけでもありがたい。

環境
環境情報 構築日 ソフトウェア
CentOS 5.6 2013/04/20 postgresql 9.2
まずは、テーブルを作成
-- データ格納用テーブル.
CREATE TABLE target(
date TIMESTAMP, --  日付
sales NUMERIC(19, 0) -- 値
);
続いてデータを作成
INSERT INTO target VALUES('2013/01/01', 200);
INSERT INTO target VALUES('2013/01/02', 300);
INSERT INTO target VALUES('2013/01/03', 400);
INSERT INTO target VALUES('2013/01/04', 500);
INSERT INTO target VALUES('2013/01/05', 600);
INSERT INTO target VALUES('2013/01/06', 700);
INSERT INTO target VALUES('2013/01/07', 800);
INSERT INTO target VALUES('2013/01/08', 900);
INSERT INTO target VALUES('2013/01/09', 1000);
INSERT INTO target VALUES('2013/01/10', 1100);
INSERT INTO target VALUES('2013/01/11', 1200);
INSERT INTO target VALUES('2013/01/12', 1300);
INSERT INTO target VALUES('2013/01/13', 1400);
INSERT INTO target VALUES('2013/01/14', 1500);
INSERT INTO target VALUES('2013/01/15', 1600);
INSERT INTO target VALUES('2013/01/16', 1700);
INSERT INTO target VALUES('2013/01/17', 1800);
これで利用準備が整いました
では今回解く式はy=ax+bです。
日付は、日にちと考え、年月を集約します
xを日付、yを値とすると
インサートしたデータを利用すると式は
y=100x+100ができるはずです。
SQLを作成します。
-- 傾き(a)にあたる部分を取得
SELECT regr_slope(sales, to_char(date, 'dd'):: integer) FROM target ;
-- 切片(b)にあたる部分を取得
SELECT regr_intercept(sales, to_char(date, 'dd'):: integer) FROM target ;
今回のデータは参考用のためきれいな値が求まりましたが もっと複雑なのも大丈夫です。 今回利用した集約関数(postgresマニュアル参照)では下記の説明がなされています
regr_intercept(Y, X)(X, Y)の組み合わせで決まる、線型方程式に対する最小二乗法のY切片。
regr_slope(Y, X)(X, Y)の組み合わせで決まる、最小二乗法に合う線型方程式の傾き。

postgresql 9.2のインストール

CentOS 5.6を使用しpostgresql 9.2をインストールする構築手順書

環境
環境情報 構築日 ソフトウェア 必要込コマンド
CentOS 5.6 2013/02/01 postgresql yum
$ yum -y install ruby ruby-devel ruby-irb ruby-rdoc ruby-libs

$ su -
$ cd ~/
$ mkdir download
$ cd download

$ wget http://yum.postgresql.org/9.2/redhat/rhel-5-x86_64/pgdg-centos92-9.2-5.noarch.rpm
$ rpm -ivh pgdg-centos92-9.2-5.noarch.rpm
$ yum clean packages
$ yum install postgresql postgresql-server
$ /etc/init.d/postgresql-9.2 initdb
$ /etc/init.d/postgresql-9.2 start
とりあえずこれでインストールができる。

2013年4月17日水曜日

最小二乗法を解く

x,yの複数の点から最も近い方程式を導く方法として 最小二乗法があります。 最小二乗法を解く上でy=ax+bを解くサイトは多々みましたが あまり実際の値で行っているところがなかったのでメモ y=ax+bの式を計算から解いています。 最終a=1,b=0が解で得られます途中微分などの 知識も必要なためある程度の概念が必要になりますが参考までに

最小二乗法
今回のようなy=ax+bは線形と呼ばれ直線で表すことができます。 後々、非線形eやlogなどの解き方も記事にしていきます。

2013年4月14日日曜日

【Linux】capistranoインストール手順

CentOS 5.6を使用しcapistranoを利用可能にする構築手順書

環境
環境情報 ソフトウェア 必要込コマンド
CentOS 5.6 ruby yum
$ yum -y install ruby ruby-devel ruby-irb ruby-rdoc ruby-libs
$ cd /usr/local/src/
$ wget http://production.cf.rubygems.org/rubygems/rubygems-1.8.24.tgz
$ tar xzovf rubygems-1.8.24.tgz
$ cd rubygems-1.8.24
$ ruby setup.rb
$ gem install capistrano

【Linux】CentOSでPHP+sqliteを利用する

CentOS 5.6を使用しPHPでsqlite3を利用可能にする構築手順書

環境
環境情報 ソフトウェア 必要込コマンド
CentOS 5.6 php,wget wget
$ wget http://pecl.php.net/get/sqlite3-0.6.tgz
$ su -
$ yum -y install php httpd
$ tar xzf sqlite3-0.6.tgz
$ cd sqlite3-0.6
$ phpize
$  ./configure
$ vi sqlite3.c
$ wget -O php-5.3.3.tar.bz2 http://museum.php.net/php5/php-5.3.3.tar.bz2
$ tar zxvf php-5.3.3.tar.bz2
$ bzip2 -dc php-5.3.3.tar.bz2 | tar xvf -
$ cd php-5.3.3/ext/sqlite
$ phpize
$ ./configure
$ make
$ make install
$ vi /etc/php.d/sqlite.ini
$ echo "extension=sqlite3.so" /etc/php.d/sqlite.ini
$ /etc/init.d/httpd graceful