投稿者の投稿

CentOS5.3 PHPのバージョンアップ PHP Version 5.2.13

CentOSでは、PHP5.1.X
ちょっと機能不足だし、WindowsでPHP5.2.× で動いていたものが動かないので、バージョンアップ!

  1. RPM-GPG-KEYを取得
    rpm –import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
     
  2. リポジトリ参照の設定を追加
    # vi /etc/yum.repos.d/utterramblings.repo
    [utterramblings]
    name=Jason’s Utter Ramblings Repo
    baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
    enabled=1
    gpgcheck=1
    gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
     
  3. PHPのversionUPをする
    yum update php*
     
  4. (perl互換正規表現)pcreをアップデート
    yum update pcre
     
  5. Apacheの再起動
    service httpd restart
     
  6. 他のアップデートでこのリポジトリが使われては困るので、上記2で作成したファイルを編集する。(の部分)
    [utterramblings]
    name=Jason’s Utter Ramblings Repo
    baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
    enabled=0
    gpgcheck=1
    gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka

VB.NETでの残念なこと

えーウソでしょう!!

 IsDate と IsNumeric は全角がOKなの~~~

 IsDate(“2009/4/5”) はtrue

 IsDate(“2009/4/5”) がtrue

 いまさら知ってしまった。

SQL Serverで、データベースに残ったユーザを消す

データベースをSQL Server 2000 から Sql Server 2008 に移行した時、
2000のデータベースをでタッチして、2008のデータベースにアッタッチしたのですが
データベース内にユーザが残ってしまいました。

その昔は、そのままいったんデータベースユーザを削除して、再度追加していたのですが、
SqlServer 2008のManagement Studio では消せないようです。

そういう場合、下記のコマンドで消せました。

ユーザをスキーマに割り当ててからユーザとスキーマを削除する

ALTER USER ユーザ名 WITH DEFAULT_SCHEMA = ユーザ名
DROP SCHEMA ユーザ名
DROP USER ユーザ名
GO

他にも方法があったような・・・・・・・・

データベースのvarchar に文字を入れてみる

条件:データベースの規定文字をUTF-8にする。
フィールドの型を、varchar(3) とする。

PostgreSQL
  ’aaa’         当然OK  
  ’あいう’        OK

MySQL
  ’aaa’         当然OK  
  ’あいう’        OK

Jquery を使ってtextareaが全文表示されるように自動的に高さを調整する

HTMLで定義したサイズよりは小さくしない
何かご意見がある人は、コメントを書いてください

  <script type=”text/javascript”>
//<![CDATA[
 $(document).ready(function(){
 $(“textarea”).each( function (e)
  {
     var value = $(this).val();
     var orow = $(this).attr(“rows”);
     var cols = $(this).attr(“cols”);
     $(this).attr(“orows”,orow)
     var rows = value.split(“\n”);
     var nrow = rows.length;
     var r = 0;
     for(var i in rows)
     {
      if(rows[i].length >= cols)
      {
       r = (rows[i].length) / cols;
       nrow += r;
      }
     }
     if(orow < nrow) $(this).attr(“rows”,nrow);
  } );
 
 $(“textarea”).keydown( function (e)
  {
     var value = $(this).val();
     var cols = $(this).attr(“cols”);
     var rows = value.split(“\n”);
     var nrow = rows.length;
     var r = 0;
     for(var i in rows)
     {
      if(rows[i].length >= cols)
      {
       r = (rows[i].length) / cols;
       nrow += r;
      }
     }
     var orow = $(this).attr(“orows”)
     if(orow < nrow) $(this).attr(“rows”,nrow);
  } );
 });
//]]>
  </script>

JAVA J2EE JavaEE ソースコード生成プログラム

前回、PHPのソースコード自動生成ツールを作ったのですが、今度はそれをJAVAにした。

とにかく、驚くほど速くプログラムが作れる。

ちょこっとデータベースを作成すれば、ものの5分で一覧表示 スクロール ソート そのテーブルの登録 更新 削除プログラムが作れます。

ぜひ使ってみてください。

ソースコード生成プログラムが作成するのは、

  • データアクセス用のDAO
  • 一覧表示用のJSP
  • 一覧表示用のコントローラ
  • 詳細表示用のJSP
  • 詳細表示用のコントローラです

作成されたソースはそのまま、サンプルコードにもなります。

興味を持った人は、ここにコメントしてください。いつでもご覧いただけます。

社内からは、http://172.20.1.70/scg で使えます。

JAVA MAILを使用して、IMAP POP3からメールを取得するクラスです

 ここ2年ばかりPHPをやってきたのだけど、JAVAがやっぱりいいということで、JAVAをやるはめになりました。
ブログのタイトルは「PHP開発」ですが、昔に戻って、当分JAVAをやりそうです。
よろしく!

そんなことで、Java Mailを使ってメールボックスからメールを取得するクラスを作ってみました。
ご意見ご感想をお待ちしています。

package jp.compsys.common.util;

import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.Address;
import javax.mail.Message.RecipientType;
import javax.mail.internet.MimeUtility;

import com.sun.mail.util.QPDecoderStream;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Collections;
import java.util.Comparator;
import java.util.Properties;
import java.util.ArrayList;

/**
 * サーバからメールを取得するクラス.
 *
 * @author Computer System Corp tamura
 * @since 1.6
 * @version 1.0
 * @since 1.0
 */
public class MailReader implements Serializable
{
	private static final long serialVersionUID = -8161055025994457665L;
	private String server;
	private String protocol = "imap";
	private int port = 143;
	private String userId;
	private String password;

	private int pageNo = 0;
	private int recordCount = 0;
	private int maxPageNo = 0;

	private Session session;
	private Store store;
	private Folder folder;

	/**
	 * MailReaderのコンストラクタ.
	 * @param server 	接続するサーバ名またはIPアドレス
	 * @param port   	接続するポート番号
	 * @param userId	接続するユーザID
	 * @param password 	接続するパスワード
	 * @since			1.6
	 */
	public MailReader(String server, int port, String userId, String password)
	{
		this.server = server;
		this.protocol="imap";
		this.port = port;
		this.userId = userId;
		this.password = password;
/*
		this.protocol="pop3";
		this.port = -1;
*/
	}

	/**
	 * メールの内容を取得する。.
	 * @param	msgnum メッセージ番号
	 * @return	MailItemのインスタンスを返す。取得できない場合はnullを返す。
	 */
	public MailItem getMail(int msgnum)
	{
		MailItem mailItem = new MailItem();
		if(!open())	return null;
		try
		{
			folder = store.getFolder("INBOX");
			folder.open(Folder.READ_ONLY);
			if (!folder.exists())
			{
				close();
				return null;
			}
			Message m = folder.getMessage(msgnum);
			messageEdit(m, mailItem);
			Part p = m;
			partSet(p, mailItem);
		} catch (MessagingException ex)
		{
			mailItem = null;
			ex.printStackTrace();
		} catch (IOException ex)
		{
			mailItem = null;
			ex.printStackTrace();
		}
		close();
		return mailItem;
	}

	/**
	 * メールの一覧を取得(mailList)した後の実際の取得ページ番号を取得する。
	 * mailListメソッドを実行した後でなければ正しい値を返さない。.
	 */
	public int getPageNo()
	{
		return pageNo;
	}

	/**
	 * メールの一覧を取得(mailList)した時の総メール数を取得する。
	 * mailListメソッドを実行した後でなければ正しい値を返さない.
	 */
	public int getRecordCount()
	{
		return recordCount;
	}

	/**
	 * メールの一覧を取得(mailList)した時の最大ページ数を取得する。
	 * mailListメソッドを実行した後でなければ正しい値を返さない.
	 */
	public int getMaxPageNo()
	{
		return maxPageNo;
	}

	/**
	 * メールサーバに接続する。.
	 * @return	true:成功 false:失敗
	 */
	private boolean open()
	{
		Properties properties = System.getProperties();
		session = Session.getInstance(properties, null);
		try
		{
			store = session.getStore(protocol);
			store.connect(server, port, userId, password);
			return true;
		} catch (MessagingException ex)
		{
			ex.printStackTrace();
			return false;
		}
	}
	/**
	 * メールサーバとの接続をクローズする
	 */
	private void close()
	{
		if (null != store)
		{
			try
			{
				store.close();
			} catch (MessagingException ex)
			{
			}
		}
	}

	/**
	 * メールに含まれるメッセージや添付ファイルを取得する。.
	 */
	@SuppressWarnings("unchecked")
	public void partSet(Part p, MailItem m) throws MessagingException, IOException
	{
		MailContent mailContent = new MailContent();
		String disp = p.getDisposition();
		if (p.isMimeType("multipart/*"))
		{ // マルチパートの場合
			Multipart mp = (Multipart) p.getContent();
			int count = mp.getCount();
			for (int i = 0; i < count; i++)
			{
				partSet(mp.getBodyPart(i), m);
			}
			return;
		}
		else if (p.isMimeType("message/rfc822"))
		{ // メッセージの場合
			partSet((Part) p.getContent(), m);
			return;
		}
		else if (p.isMimeType("text/*"))
		{
			if(disp != null && disp.equalsIgnoreCase(Part.ATTACHMENT))
			{
				mailContent.attachmentFlg = true;
			}
			mailContent.header = p.getAllHeaders();
			mailContent.contentType = p.getContentType();
			mailContent.content = content2string(p.getContent());
			m.mailContents.add(mailContent);
			return;
		}
		// 添付ファイルの場合
		if (disp == null || disp.equalsIgnoreCase(Part.ATTACHMENT))
		{
			mailContent.contentBinaryFlg = true;
			mailContent.fileName = p.getFileName();
			if (mailContent.fileName != null)
			{
				mailContent.fileName = MimeUtility.decodeText(mailContent.fileName);
			}
			else
			{
				mailContent.fileName = "";
			}
			ByteArrayOutputStream os = new ByteArrayOutputStream();
			try
			{
				p.writeTo(os);
				mailContent.content_binary = os.toByteArray();
			} catch (IOException e)
			{
				e.printStackTrace();
			}
			mailContent.header = p.getAllHeaders();
			mailContent.contentType = p.getContentType();
			mailContent.attachmentFlg=true;
			m.mailContents.add(mailContent);
		}
	}

	/**
	 * text/* に含まれるコンテンツを文字列として受け取る.
	 * @param	textコンテンツの内容
	 */
	private String content2string(Object obj) throws MessagingException
	{
		String ret = "";
		if (obj instanceof String)
		{
			return (String) obj;
		}
		else if (obj instanceof QPDecoderStream)
		{
			ByteArrayOutputStream os = new ByteArrayOutputStream();
			QPDecoderStream qps = (QPDecoderStream) obj;
			while (true)
			{
				try
				{
					int c = qps.read();
					if (c == -1) break;
					os.write(c);
				} catch (IOException ex)
				{
					return ret;
				}
			}
			ret = os.toString();
		}
		else
		{
			throw new MessagingException("textのコンテンツファイルに未定義のものがあります");
		}
		return ret;
	}

	/**
	 * メールの一覧をぺジ単位に取得します。
	 * @param lineCount	1ページあたりの行数
	 * @param pageNo    取得したいページ
	 * @return	取得したメールの一覧を返します。メールがない場合はnullを返します。
	 */
	public ArrayList mailList(int lineCount, int pageNo)
	{
		this.pageNo = pageNo;
		recordCount = 0;
		maxPageNo = 0;
		ArrayList list = null;
		open();
		int start = 0;
		int end = 0;
		int cnt = 0;
		try
		{
			folder = store.getFolder("INBOX");
			if (!folder.exists())
			{
				close();
				return list;
			}
			folder.open(Folder.READ_ONLY);
			cnt = folder.getMessageCount();
			if (0 == cnt)
			{
				close();
				return list;
			}
			recordCount = cnt;
			maxPageNo = (int) Math.ceil((double) cnt / (double) lineCount);
			if (this.pageNo  maxPageNo) this.pageNo = maxPageNo;
			list = new ArrayList(cnt);
			Message mes[] = folder.getMessages();
			for (Message m : mes)
			{
				MailItem mailItem = new MailItem();
				messageEdit(m, mailItem);
//				一覧にメールの内容も取得したい場合はコメントをはずす かなり遅くなるのでやめたほうがいいです。
/*  			Part p = m;
				partSet(p, mailItem);
*/				list.add(mailItem);
			}
			folder.close(false);
		} catch (MessagingException ex)
		{
			ex.printStackTrace();
		} catch (Exception e)
		{
			e.printStackTrace();
		} finally
		{
		}
		close();
		Collections.sort(list, new Comparator()
		{
			public int compare(MailItem o1, MailItem o2)
			{
				return (o1.sentDate.compareTo(o2.sentDate) * (-1));
			}
		});
		start = (this.pageNo - 1) * lineCount;
		if (this.pageNo == maxPageNo)
		{
			end = start + ((cnt - 1) % lineCount);
		}
		else
		{
			end = start + lineCount - 1;
		}
		int i = -1;
		ArrayList retList = new ArrayList(end - start + 1);
		for (MailItem m : list)
		{
			i++;
			if (i  end) break;
			retList.add(m);
		}
		return retList;
	}

	/**
	 * メッセージに含まれるヘダー情報を取得編集する。
	 * @param m javax.mail.Message
	 * @param mailItem 編集対象
	 */
	private void messageEdit(Message m, MailItem mailItem)
	{
		try
		{
			mailItem.messageNo = m.getMessageNumber();
			mailItem.sentDate = m.getSentDate();
			mailItem.receivedDate = m.getReceivedDate();
			mailItem.subject = m.getSubject();
			Flags flags = m.getFlags();
			String[] userFlg = flags.getUserFlags();
			{
				if (m.isSet(Flags.Flag.ANSWERED))
				{
					mailItem.systemFlg.add("ANSWERED");
				}
				if (m.isSet(Flags.Flag.DELETED))
				{
					mailItem.systemFlg.add("DELETED");
				}
				if (m.isSet(Flags.Flag.DRAFT))
				{
					mailItem.systemFlg.add("DRAFT");
				}
				if (m.isSet(Flags.Flag.FLAGGED))
				{
					mailItem.systemFlg.add("FLAGGED");
				}
				if (m.isSet(Flags.Flag.RECENT))
				{
					mailItem.systemFlg.add("RECENT");
				}
				if (m.isSet(Flags.Flag.SEEN))
				{
					mailItem.systemFlg.add("SEEN");
				}
				if (m.isSet(Flags.Flag.USER))
				{
					mailItem.systemFlg.add("USER");
				}
			}
			if (null != userFlg)
			{
				for (int i = 0; i < userFlg.length; i++)
				{
					mailItem.userFlg.add(userFlg[i]);
				}
			}
			if (null != m.getFrom())
			{
				for (Address a : m.getFrom())
				{
					mailItem.from.add(MimeUtility.decodeText(a.toString()));
				}

			}
			if (null != m.getReplyTo())
			{
				for (Address a : m.getReplyTo())
				{
					mailItem.replyTo.add(MimeUtility.decodeText(a.toString()));
				}
			}
			if (null != m.getRecipients(RecipientType.TO))
			{
				for (Address a : m.getRecipients(RecipientType.TO))
				{
					mailItem.to.add(MimeUtility.decodeText(a.toString()));
				}
			}
			if (null != m.getRecipients(RecipientType.CC))
			{
				for (Address a : m.getRecipients(RecipientType.CC))
				{
					mailItem.cc.add(MimeUtility.decodeText(a.toString()));
				}
			}
			if (null != m.getRecipients(RecipientType.BCC))
			{
				for (Address a : m.getRecipients(RecipientType.BCC))
				{
					mailItem.bcc.add(MimeUtility.decodeText(a.toString()));
				}
			}
		} catch (UnsupportedEncodingException ex)
		{
			ex.printStackTrace();
		} catch (MessagingException ex)
		{
			ex.printStackTrace();
		} finally
		{
		}

	}

}

LINUXでUSBハードディスクの増設をするのにデバイスが足りない!!

えっーーつと
デバイスを追加するために/devの中を見てみると、sda~sdhまでしかない

そこで、デバイスの追加をするコマンドはなんだっけ・・・・・・

あっ!思い出した

mknod sdi b 8 128
mknod sdi1 b 8 129

これでよかったっけ!!

後はパーティションを切って、フォーマットして終わり

何故かRUBYの勉強中ということで、環境設定をする

  1. http://rubyinstaller.org/download.html
    上記サイトからRuby 1.8.6-p26 (Final) を選択してダウンロード
    ダウンロードしたファイルを実行し、インストールフォルダーをc:\ruby とした。
  2. http://mergedoc.sourceforge.jp/ から3.4 eclipse Ganymedeを選択して、Ruby 環境をダウンロードする。
    ダウンロードしたファイルを解凍して、eclipseを起動する。
  3. RubyGemsを更新する
    下部のウィンドウズにすべてのGEMSを更新するがあるので、最新にする。
  4. 新しいRailsプロジェクトを生成すると、「gem でRailsをインストールしますか」と
    聞いてくるので、これをインストールする。
  5. 新しいRailsプロジェクトを生成する。
    必要なフォルダはすべて自動生成される。
  6. MySql-gem のインストール
    MySqlを使用するのでいるらしい・・
    コマンドプロンプトより以下のコマンド
    gem install mysql
  7. ジェネレータウィンドウでHello World の作成
    パラメータに hello index を入れて実行

XCOPY でメモリーが足りません

バックアップを取る時、世の中にはいっぱいバックアップソフトがあるですが、いろいろインストールするのもめんどくさいので、私はXCOPYを使っています。

xcopy /E/C/R/D/Y コピー元のフォルダ コピー先のフォルダ

といった具合に、ファイルのタイムスタンプを見て、自動的にコピーをしてくれます。

1998年からズーットこの方法でやってきたのですが、先日ふと見てみるとバックアップ先にバックアップ元にあるべきデータがないではないですか。
「どうして???」

調べてみると、コピー元ファイルに255バイトを超えるパスがあると「メモリーが足りません」なるらしい。

そういえば、最近はやたら長い日本語のフォルダー名やファイル名を付けることが多い。そう思っていろいろパス長を短くする努力を行って、なんとか最後までバックアップは完了した。

XCOPYなんて、MSDOS時代の過去の遺物を使用し続けられるのも、そろそろ終わりなのかな。

次は、対策を練らなくてはと思う。