2012-01-27

第17回電子情報通信学会関西支部学生会研究会にエントリーしました

電子情報通信学会関西支部学生会が主催する研究会におちラボより4年生が2名エントリーしました。3月に開催されます。この研究会へのエントリーは2度目で、前回は2008年度の卒業生(4年生)が3名発表しましたので3年ぶりとなります。
3月というのは既に卒論発表も終わってほっと一息。。という時期ですが、自分の研究成果を対外的に発表するというのはなかなか経験できないことです。できれば毎年発表してくれるとうれしいんですが。。。

2名の4年生には別の学会の研究会にも発表して貰う予定で、落ち着く間もなく、卒論執筆と並行して新たに研究会の原稿執筆をしています。大変ですが、後々につながるよい経験になるでしょう。

2012-01-17

Java:オブジェクトをバイト配列へ変換する

クラスオブジェクトの情報をバイト配列へ変換する処理のメモ書きです。
ByteArrayOutputStream baos= new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(/* ここの引数に変換したいクラス変数を渡す*/);
       
oout.close();
bout.close();
        
//こんな感じでbyte配列になります。
byte[] bytes = bao.toByteArray();
デシリアライズする際の方法は以下のとおり。
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
 
//キャストして元に戻してください。
object = (/*キャスト*/)oin.readObject();


2012-01-12

JavaMailプログラム ~簡略版~

先日の記事はちょっとわかりにくかったので、もっとシンプルな記述を掲載します。なお、下記のプログラムではメール本文を由緒ただしく、7bitエンコーディングしてます。
 Properties props = new Properties();
 Session session = Session.getDefaultInstance(props, null);

 InternetAddress toAddress = new InternetAddress(message.getToAddress(), message.getToName(), "ISO-2022-JP"); // 
 InternetAddress fromAddress = new InternetAddress(message.getFromAddress(), message.getFromName(), "ISO-2022-JP"); // 

 MimeMessage mmessage = new MimeMessage(session);
 mmessage.setFrom(fromAddress); 
 mmessage.addRecipient(Message.RecipientType.TO, toAddress);  
 mmessage.setSubject(message.getMailSubject(), "ISO-2022-JP");  
 mmessage.setText(message.getMailText(), "ISO-2022-JP");  
 mmessage.setHeader("Content-Transfer-Encoding", "7bit"); //最後にエンコーディングしたほうがいいはず

 Transport.send(mmessage);  //送信
プログラム中のmessageという変数は、メールの各種情報(To,From,Subject,Body)がはいっているクラスを思ってください(getterで呼び出している部分は、実際のデータが入った文字列として読みかえてください)。

2012-01-10

Java: メール送信プログラム

JavaMailを利用したメール送信プログラムです。いちおう添付ファイルを2つ添付できますが、ここの処理はあまり参考にしないほうがいいです。
import java.util.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class MailSender{
    //日本語の文字コード
    public static final String JAPANESE_CODE = "ISO-2022-JP";
    
    //通信情報
    private String to, from, host;
    private boolean debug;
    
    //題名、本文、添付ファイル
    private String subject, text;
    private File file1, file2;

    //Toと添付ファイル以外を初期化
    public MailSender()
    {
    }
    
    public void setTo(String to)
    {
        this.to = to;
    }
    
    public String getTo()
    {
        return to;
    }
    
    public void setFrom(String from)
    {
        this.from = from;
    }
    
    public String getFrom()
    {
        return from;
    }
    
    public void setHost(String host)
    {
        this.host = host;
    }
    
    public String getHost()
    {
        return host;
    }
    
    public void setDebug(boolean b)
    {
        this.debug = b;
    }
    
    public boolean getDebug()
    {
        return debug;
    }
    
    public void setSubject(String subject)
    {
        this.subject = subject;
    }
    
    public String getSubject()
    {
        return subject;
    }
    
    public void setText(String text)
    {
        this.text = text;
    }
    
    public String getText()
    {
        return text;
    }
    
    public void setFile1(File file1)
    {
        this.file1 = file1;
    }
    
    public File getFile1()
    {
        return file1;
    }

    public void setFile2(File file2)
    {
        this.file2 = file2;
    }

    public File getFile2()
    {
        return file2;
    }
    
    //メールを送信する
    //戻り値:正常に送信された場合は true、そうでない場合は false 
    public boolean send()
    {
        try
        {
            MimeMessage message = getMimeMessage();
            message.setContent( getMultipart() );
            Transport.send( message );
            return true;
        }
        catch(Exception e)
        {
            return false;
        }
    }
    
    public Properties getProperties()
    {
        Properties props = new Properties();
        props.put("mail.smtp.host", host);
        props.put("mail.host", host);
        props.put("mail.from", from);
        
        if(debug) props.put("mail.debug", debug);
        
        return props;
    }
    
    public Session getSession()
    {
        Properties props = getProperties();
        Session session = Session.getInstance(props);
        session.setDebug(debug);
        return session;
    }
    
    public MimeMessage getMimeMessage() throws Exception
    {
        MimeMessage message = new MimeMessage( getSession() );
        
        message.setFrom(new InternetAddress(from));
        InternetAddress[] address = InternetAddress.parse(to);
        message.setRecipients(Message.RecipientType.TO, address);
        message.setSubject(subject, JAPANESE_CODE);
        message.setSentDate(new Date());
        
        return message;
    }

    public Multipart getMultipart() throws Exception
    {
        Multipart mp = new MimeMultipart();
        mp.addBodyPart(getTextPart());
        mp.addBodyPart(getFilePart1());
        mp.addBodyPart(getFilePart2());
        return mp;
    }

    public MimeBodyPart getTextPart() throws Exception
    {
        MimeBodyPart part = new MimeBodyPart();
        part.setText(text, JAPANESE_CODE);
        return part;
    }

    public MimeBodyPart getFilePart1() throws Exception
    {
        MimeBodyPart part = new MimeBodyPart();

        FileDataSource fds = new FileDataSource( file1.getPath() );
        part.setDataHandler(new DataHandler( fds ));
        part.setFileName(MimeUtility.encodeWord( fds.getName() ));

        return part;
    }

    public MimeBodyPart getFilePart2() throws Exception
    {
        MimeBodyPart part = new MimeBodyPart();

        FileDataSource fds = new FileDataSource( file2.getPath() );
        part.setDataHandler(new DataHandler( fds ));
        part.setFileName(MimeUtility.encodeWord( fds.getName() ));

        return part;
    }
}
    
上記クラスの利用例です。
    public  void test(){
        MailSender ms = new MailSender();
       //下記に適切なデータを記述
        ms.setFrom("");
        ms.setTo("");
        ms.setDebug(false);
        ms.setHost("");
        ms.setSubject("");
        ms.setText("");
        //添付ファイルがある場合(任意)
        ms.setFile1( new File("") );
        ms.setFile2( new File("") );
        //メール送信
        ms.send();
    }


2012-01-05

全角文字列を検索する方法

国際論文や国際会議プロシーディングスを執筆する時には当然言語は英語になりますが、電子投稿をする場合に注意しなければならないのは、日本語文字コードを含めてはいけないということ。
英文の原稿を書くときは、日本語で書いた原稿をベースに英訳することも少なくないと思いますが、そこでついうっかり全角の文字が含まれることがあります。そのチェックは分量が多くなるほど面倒ですが、以下の正規表現で一発で見つかります。
[^\x01-\x7E]
試してみてください。




2012年:謹賀新年

2012年がはじまりました。今年もおちラボをよろしくお願いします。さっそく新年の抱負ですが、

  • 科研の成果を出せるよう今年が勝負
  • とにかくパブリッシュする
の2点をあげたいと思います。前者については、昨年度でいろいろ基盤のものができつつあるので、今年一年で成果を出せるように仕上げていくということ。後者については、その言葉通りとにかくパブリッシュする。。。当然論文が一番ですが、そうは簡単にはいかないもの。とにかく研究上の成果、ノウハウを学会発表やウェブを通して公開していくということですね。このブログもその1つです。たいしたことでなくても、とにかく公開していきたいと考えてます。
昨年は100件のBLOG更新をしたようですので、今年もそれ以上を目指していきたいですね。