<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Flat tire</title>
	<atom:link href="http://blog.tsu2t.com/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.tsu2t.com</link>
	<description>普通のサラリーマンのブログ</description>
	<lastBuildDate>Fri, 26 Jun 2015 08:30:45 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>Webアプリケーション起動時に処理をさせる</title>
		<link>http://blog.tsu2t.com/?p=141</link>
		<comments>http://blog.tsu2t.com/?p=141#comments</comments>
		<pubDate>Fri, 26 Jun 2015 08:30:45 +0000</pubDate>
		<dc:creator><![CDATA[tsu2t]]></dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.tsu2t.com/?p=141</guid>
		<description><![CDATA[前回のログの記事同様、汎用的なお話し。 Webアプリケーションを作っていると、アプリが起動したとき、アプリが停 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>前回のログの記事同様、汎用的なお話し。<br />
Webアプリケーションを作っていると、アプリが起動したとき、アプリが停止した時に処理を入れたいことがままある。<br />
そんな時にはServletContextListenerの出番。アノテーションを使えばweb.xmlの修正すらいらない（その代わり後からソースを追う人はどこにこのクラスがあるのかわかりにくい）<br />
<span id="more-141"></span></p>
<h3>ServletContextListenerを継承したクラスを作成</h3>
<p>3分クッキングよりも簡単。<br />
ServletContextListenerを継承し、@WebListenerアノテーションをつけ、contextInitializedやcontextDestroyedを実装するだけ。</p>
<pre class="brush: java; title: TestContextListener; notranslate">
package com.tsu2t.spring8test.listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

@WebListener
public class TestContextListener implements ServletContextListener {
	private static Log logger = LogFactory.getLog(TestContextListener.class);
	
	public void contextDestroyed(ServletContextEvent ev) {
		// nothing to do..
	}

	public void contextInitialized(ServletContextEvent ev) {
		ServletContext context = ev.getServletContext();
		logger.info(&quot;WebApp START!!&quot;);
		context.log(&quot;+*+*+*+*+*+*+START+*+*+*+*+*+*+&quot;);
	}
}
</pre>
<p>今回は起動時にログを出すようにしてみた。<br />
起動させるとこんなログが出る。</p>
<pre class="brush: plain; title: 起動時ログ; notranslate">
16:22:54,385 INFO  [com.tsu2t.spring8test.listener.TestContextListener] (MSC service thread 1-5) WebApp START!!
16:22:54,386 INFO  [io.undertow.servlet] (MSC service thread 1-5) +*+*+*+*+*+*+START+*+*+*+*+*+*+
</pre>
<p>アノテーションを使わずにweb.xmlに下記を追加する方法もある。</p>
<pre class="brush: xml; title: web.xml; notranslate">
&lt;listener&gt;
	&lt;display-name&gt;TestListner&lt;/display-name&gt;
	&lt;listener-class&gt;com.tsu2t.spring8test.listener.TestContextListener&lt;/listener-class&gt;
&lt;/listener&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.tsu2t.com/?feed=rss2&#038;p=141</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>リクエスト毎のロギング</title>
		<link>http://blog.tsu2t.com/?p=138</link>
		<comments>http://blog.tsu2t.com/?p=138#comments</comments>
		<pubDate>Thu, 25 Jun 2015 07:09:21 +0000</pubDate>
		<dc:creator><![CDATA[tsu2t]]></dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.tsu2t.com/?p=138</guid>
		<description><![CDATA[今回はWildFlyに特化してません。 Webアプリケーションでユーザーからのリクエスト単位にSTART-EN [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>今回はWildFlyに特化してません。<br />
Webアプリケーションでユーザーからのリクエスト単位にSTART-ENDでログを出してレスポンスタイムを集計したりするような要件は多いです。<br />
前回作ったSpringMVCの環境でログが出るようにしてみました。<br />
<span id="more-138"></span></p>
<h3>フィルターの作成</h3>
<p>ログを出すためにFilterを作成します。</p>
<pre class="brush: java; title: LogFilter.java; notranslate">
package com.tsu2t.spring8test.filter;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
 
public class LogFilter implements Filter {
 
    private static Log logger = LogFactory.getLog(LogFilter.class);
   
    public void init(FilterConfig config) throws ServletException {
    }
 
    public void doFilter(ServletRequest req, ServletResponse res,
           FilterChain chain) throws IOException, ServletException {
    	HttpServletRequest request = (HttpServletRequest)req;
    	String uri = request.getRequestURI();
        logger.info(uri + &quot; BEGIN&quot;);
        chain.doFilter(req, res);
        logger.info(uri + &quot; END&quot;);
    }

    public void destroy() {
    }
}
</pre>
<p>このFilterが呼ばれるとchain.doFilterで下の処理に渡す前後でログを出しています。</p>
<h3>Filter登録</h3>
<p>リクエスト毎にこのFilterが呼ばれるようにweb.xmlに下記を追記します。</p>
<pre class="brush: xml; title: web.xml; notranslate">
&lt;filter&gt;
    &lt;filter-name&gt;logFilter&lt;/filter-name&gt;
    &lt;filter-class&gt;
        com.tsu2t.spring8test.filter.LogFilter
	&lt;/filter-class&gt; 
&lt;/filter&gt;
&lt;filter-mapping&gt;
    &lt;filter-name&gt;logFilter&lt;/filter-name&gt;
    &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
&lt;/filter-mapping&gt;
</pre>
<p>今回は以上です。特にはまりポイントもなく簡単でした。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tsu2t.com/?feed=rss2&#038;p=138</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spring4 + WildFly</title>
		<link>http://blog.tsu2t.com/?p=126</link>
		<comments>http://blog.tsu2t.com/?p=126#comments</comments>
		<pubDate>Tue, 23 Jun 2015 09:43:11 +0000</pubDate>
		<dc:creator><![CDATA[tsu2t]]></dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.tsu2t.com/?p=126</guid>
		<description><![CDATA[Spring MVC Framework4を試してみます。サーブレットコンテナはWildFlyを利用してみます [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Spring MVC Framework4を試してみます。サーブレットコンテナはWildFlyを利用してみます。<br />
普通Tomcat使うだろう、って言われそうですがWildFlyです。<br />
環境はEclipse Lunaで、WildFlyは既に導入済みです。Eclipseの設定方法などは<a href="http://blog.tsu2t.com/?p=90">以前の記事</a>をどうぞ。<br />
<span id="more-126"></span></p>
<h3>Mavenプロジェクトの新規作成</h3>
<p>まずはプロジェクトの新規作成。<br />
New→Project..からMaven Projectを選択し、archetypeはmaven-archetype-webappにしました。<br />
<a href="http://blog.tsu2t.com/wp-content/uploads/spring4_01.png"><img src="http://blog.tsu2t.com/wp-content/uploads/spring4_01-300x227.png" alt="archetypeの選択" width="300" height="227" class="alignnone size-medium wp-image-133" /></a><br />
名前はべたにSpring4Testにしました。<br />
このままだとJSPのコンパイルがエラーになっていたのでProperties→Java Build path→Libratiesから、Add Library&#8230;を選んでServer LibraryのWildFlyを追加します。</p>
<h3>pom.xmlにSpring4の依存関係の追加</h3>
<p>pom.xmlを編集してSpring4関連のjarを取り込みます。</p>
<pre class="brush: xml; title: pom.xml; notranslate">
&lt;properties&gt;
	&lt;springframework.version&gt;4.1.1.RELEASE&lt;/springframework.version&gt;
&lt;/properties&gt;

&lt;dependencies&gt;
	&lt;dependency&gt;
		&lt;groupId&gt;org.springframework&lt;/groupId&gt;
		&lt;artifactId&gt;spring-core&lt;/artifactId&gt;
		&lt;version&gt;${springframework.version}&lt;/version&gt;
	&lt;/dependency&gt;
	&lt;dependency&gt;
		&lt;groupId&gt;org.springframework&lt;/groupId&gt;
		&lt;artifactId&gt;spring-web&lt;/artifactId&gt;
		&lt;version&gt;${springframework.version}&lt;/version&gt;
	&lt;/dependency&gt;
	&lt;dependency&gt;
		&lt;groupId&gt;org.springframework&lt;/groupId&gt;
		&lt;artifactId&gt;spring-webmvc&lt;/artifactId&gt;
		&lt;version&gt;${springframework.version}&lt;/version&gt;
	&lt;/dependency&gt;
&lt;/dependencies&gt;

&lt;build&gt;
	&lt;finalName&gt;Spring4Test&lt;/finalName&gt;
&lt;/build&gt;
</pre>
<h3>Spring設定ファイルの準備</h3>
<p>WEB-INFの下に「spring-servlet.xml」という設定ファイルを作成します。<br />
XML作らなくても大丈夫な方法もあるようですが、旧来の方法でXML作ります。SpringのXML地獄は不評ですが、個人的にアノテーション地獄も設定が散らばるので苦痛です。</p>
<pre class="brush: xml; highlight: [8]; title: spring-servlet.xml; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;
    xmlns:context=&quot;http://www.springframework.org/schema/context&quot;
    xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
    xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd&quot;&gt;
 
    &lt;context:component-scan base-package=&quot;com.tsu2t.spring8test.controller&quot; /&gt;
 
 	&lt;bean id=&quot;viewResolver&quot;
		class=&quot;org.springframework.web.servlet.view.UrlBasedViewResolver&quot;&gt;
		&lt;property name=&quot;viewClass&quot;
			value=&quot;org.springframework.web.servlet.view.JstlView&quot; /&gt;
		&lt;property name=&quot;prefix&quot; value=&quot;/WEB-INF/jsp/&quot; /&gt;
		&lt;property name=&quot;suffix&quot; value=&quot;.jsp&quot; /&gt;
	&lt;/bean&gt;
&lt;/beans&gt;
</pre>
<p>base-packageで指定した階層にコントローラーのクラスを探しに行くことになるのでここは環境依存で修正です。パッケージ名をspring4testにするつもりがなぜか8になってましたが気にしません。<br />
このファイルをDispatherから読み込ませるためにweb.xmlを修正します。</p>
<pre class="brush: xml; title: web.xml; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;web-app xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
	xmlns=&quot;http://java.sun.com/xml/ns/javaee&quot;
	xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd&quot;
	version=&quot;3.0&quot;&gt;
	&lt;display-name&gt;Spring4Test&lt;/display-name&gt;

	&lt;servlet&gt;
		&lt;servlet-name&gt;dispatcher&lt;/servlet-name&gt;
		&lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt;
		&lt;init-param&gt;
			&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;
			&lt;param-value&gt;/WEB-INF/spring-servlet.xml&lt;/param-value&gt;
		&lt;/init-param&gt;
		&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;
	&lt;/servlet&gt;

	&lt;servlet-mapping&gt;
		&lt;servlet-name&gt;dispatcher&lt;/servlet-name&gt;
		&lt;url-pattern&gt;/&lt;/url-pattern&gt;
	&lt;/servlet-mapping&gt;

&lt;/web-app&gt;
</pre>
<h3>実装</h3>
<p>設定はこんな感じで、ここから実装。<br />
さっきの設定ファイルで指定したパッケージの下にコントローラークラスを作ります。<br />
特に何かを継承する必要はなく、Springのアノテーションをつけてやります。</p>
<pre class="brush: java; highlight: [7,8,10,16]; title: HelloWorldController.java; notranslate">
package com.tsu2t.spring8test.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
 
@Controller
@RequestMapping(&quot;/&quot;)
public class HelloWorldController {
    @RequestMapping(method = RequestMethod.GET)
    public String method1(ModelMap model) {
        model.addAttribute(&quot;param1&quot;, &quot;HelloWorld&quot;);
        return &quot;hello&quot;;
    }
 
    @RequestMapping(value=&quot;/welcome&quot;, method = RequestMethod.GET)
    public String method2(ModelMap model) {
        model.addAttribute(&quot;param1&quot;, &quot;WelcomeWorld&quot;);
        return &quot;hello&quot;;
    }
}
</pre>
<p>@ControllerアノテーションをつけることでSpringが勝手にbeanとして認識してくれます。<br />
@RequestMappingアノテーションはその名の通り、リクエストパスに対するマッピングになります。この場合、ルートパスにアクセスするとHelloWorldControllerが呼ばれることになります。<br />
method1とmethod2にもそれぞれ@RequestMappingがついていて、リクエストメソッドと追加パスの定義をしています。<br />
どちらもGETメソッド時に呼び出され、method1が&#8221;/&#8221;、method2が&#8221;/welcome&#8221;パスのときに呼び出されることになります。<br />
どちらのメソッドも&#8221;hello&#8221;という文字列を返していますが、これはviewを探すときの名前になります。先の設定ファイルでInternalResourceViewResolverを設定したパスにview用のファイルを探しに行くことになります。<br />
設定は「/WEB-INF/jsp」の「*.jsp」なので、「/WEB-INF/jsp/hello.jsp」を作成します。</p>
<pre class="brush: xml; title: WEB-INF/jsp/hello.jsp; notranslate">
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=ISO-8859-1&quot;&gt;
&lt;title&gt;Spring4Test&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
${param1}
&lt;/body&gt;
&lt;/html&gt;
</pre>
<h3>ビルド・デプロイ</h3>
<p>次にServersに設定済みのWildFlyにHelloWorldを追加します。右クリックメニューのAdd and Removeから追加します。<br />
<a href="http://blog.tsu2t.com/wp-content/uploads/spring4_02.png"><img src="http://blog.tsu2t.com/wp-content/uploads/spring4_02-300x286.png" alt="WildFlyへデプロイ" width="300" height="286" class="alignnone size-medium wp-image-128" /></a><br />
起動をするとこんなログがでます。</p>
<pre class="brush: plain; title: ; notranslate">
18:22:57,794 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-1) JBAS017534: Registered web context: /Spring4Test
18:22:57,838 INFO  [org.jboss.as.server] (ServerService Thread Pool -- 32) JBAS018559: Deployed &quot;Spring4Test.war&quot; (runtime-name : &quot;Spring4Test.war&quot;)
</pre>
<h3>画面の確認</h3>
<p>「http://localhost:8080/Spring4Test/」にブラウザからアクセスると、画面が確認できます。<br />
<a href="http://blog.tsu2t.com/wp-content/uploads/spring4_04.png"><img src="http://blog.tsu2t.com/wp-content/uploads/spring4_04-300x130.png" alt="Hello World! ...?" width="300" height="130" class="alignnone size-medium wp-image-130" /></a><br />
ん、何かが違う…。</p>
<p>どうやら、webapp直下にデフォルトで作成されたindex.jspが表示されたようです。とりあえずこいつを削除して再度実行します。<br />
<a href="http://blog.tsu2t.com/wp-content/uploads/spring4_05.png"><img src="http://blog.tsu2t.com/wp-content/uploads/spring4_05.png" alt="HelloWorld" width="294" height="145" class="alignnone size-full wp-image-131" /></a></p>
<p>無事、表示されました。って、中身が悪かったですね。ほとんど文言一緒でやんの。<br />
「http://localhost:8080/Spring4Test/welcome」にアクセスすると、「WelcomeWorld」が表示されます。<br />
最終形のプロジェクトはこんな感じです。<br />
<a href="http://blog.tsu2t.com/wp-content/uploads/spring4_06.png"><img src="http://blog.tsu2t.com/wp-content/uploads/spring4_06-173x300.png" alt="Project" width="173" height="300" class="alignnone size-medium wp-image-132" /></a></p>
<h3>まとめ</h3>
<p>簡単に書きましたがはまりにはまって（いまだになぜはまったのかよくわかってない）凄い時間がかかってしまいました。<br />
日本語の情報少ないですしね…。<br />
基本的なことしか書いてないのでちゃんとアプリに仕立てるにはもっといろいろ仕込みが必要です。</p>
<p>[参考URL]<br />
<a href="http://websystique.com/springmvc/spring-4-mvc-helloworld-tutorial-full-example/" target="_blank">Spring 4 MVC HelloWorld Example</a><br />
<a href="http://crunchify.com/simplest-spring-mvc-hello-world-example-tutorial-spring-model-view-controller-tips/" target="_blank">Simplest Spring MVC Hello World Example</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tsu2t.com/?feed=rss2&#038;p=126</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java8を（今更）流してみる</title>
		<link>http://blog.tsu2t.com/?p=123</link>
		<comments>http://blog.tsu2t.com/?p=123#comments</comments>
		<pubDate>Sat, 20 Jun 2015 08:00:37 +0000</pubDate>
		<dc:creator><![CDATA[tsu2t]]></dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.tsu2t.com/?p=123</guid>
		<description><![CDATA[前回ラムダ式を見てみましたが、その他のJava8追加機能をおさらいしました。 インターフェースの仕様変更 コレ [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>前回ラムダ式を見てみましたが、その他のJava8追加機能をおさらいしました。</p>
<ul>
<li>インターフェースの仕様変更</li>
<li>コレクションAPIの追加</li>
<li>新コレクションStreamの追加</li>
</ul>
<p>もっといっぱいありますが、メジャーどころてことで…。<br />
とりあえずひとつずつ見ていきます。</p>
<p><span id="more-123"></span></p>
<h2>インタフェースの仕様変更</h2>
<p>Java8からインタフェースのデフォルトの実装を記述できるようになりました。</p>
<pre class="brush: java; title: デフォルトの実装; notranslate">
public interface MyInterface{
	default public int add(int i1,int i2){
		return i1 + i2;
	}
}

public class MyClass implements MyInterface{
	// 何も実装しなくてもOK!
}
</pre>
<p>一部共通、一部が独自の実装になるようなデザインのときにabstractのclassを使わずにinterfaceが利用できますね。</p>
<h2>コレクションAPIの追加</h2>
<p>ラムダ式の例のときにしれっと使いましたが、java.util.Listにsortというメソッドが足されてます。<br />
定義を参照すると、</p>
<pre class="brush: java; title: sortのjavadoc; notranslate">
default void sort(Comparator&lt;? super E&gt; c)
</pre>
<p>ComparatorはFunctionalInterfaceなので、ここでラムダ式が使えるってわけです。sortの引数に評価式をラムダ式で渡すことでListがソートされるって仕組みなわけ。<br />
そんな感じで、ラムダ式を渡せるreplaceAll、forEachなんかも使えるようになりました。</p>
<h2>新コレクションStreamの追加</h2>
<p>ListやらMapやらにラムダ式のインタフェースが追加されて便利になったわけですが、新しいコレクションjava.util.stream.Streamはよりラムダ式との親和性が高いです。<br />
Listは位置で、Mapはキーで特定要素にアクセスできますが、Streamは読んで字のごとし、頭から流れるように全要素を見ていくのが大原則のようです。</p>
<p>public static void main(String[] args){<br />
	List<String> list = Arrays.asList(&#8220;Tokyo&#8221;,&#8221;Kanagawa&#8221;,&#8221;Saitama&#8221;,&#8221;Kanagawa&#8221;);<br />
	list.stream()<br />
			.distinct()<br />
			.sorted((a,b)->a.length()-b.length())<br />
			.forEach(System.out::println);<br />
}</p>
<p>4つの要素の入ったListからStreamを生成し、重複を省いて、文字の短い順に並べて、順次コンソール出力する例です。</p>
<pre class="brush: plain; title: 実行結果; notranslate">
Tokyo
Saitama
Kanagawa
</pre>
<p>for文書かかなくていいのが素敵です。</p>
<h2>その他</h2>
<p>パフォーマンスが改善してたり、JavaScriptが実行できたりいろいろあるのですが疲れたのでここまでですｗ</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tsu2t.com/?feed=rss2&#038;p=123</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java8でラムダ式を（今更）試す</title>
		<link>http://blog.tsu2t.com/?p=116</link>
		<comments>http://blog.tsu2t.com/?p=116#comments</comments>
		<pubDate>Fri, 19 Jun 2015 06:40:48 +0000</pubDate>
		<dc:creator><![CDATA[tsu2t]]></dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.tsu2t.com/?p=116</guid>
		<description><![CDATA[今更Java8を試してみるの巻。 最近実装仕事から離れていたのでどんどんわからなくなっていくことを危惧。特にラ [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>今更Java8を試してみるの巻。<br />
最近実装仕事から離れていたのでどんどんわからなくなっていくことを危惧。特にラムダ式はちゃんと知っておかないと今後コードを『読む』ことすらできなくなりそうなので…。</p>
<h2>ラムダ式って</h2>
<p>JavaではJava8から追加されたもので、C#なんかには前からあったみたいだけどそれも知らない。<br />
なにか新しい特別な機能と言うよりは記述方法がかなり略式になるというメリットがある。</p>
<p>Runnableとか、「メソッドをひとつしか持たないインタフェース」の実装を行う時にこれよりも簡素で本質的な記述が出来るようになる。<br />
ちなみに「メソッドをひとつしか～」は、<b>「関数型インタフェース」</b>と言うそうです。知りませんでした。</p>
<p><span id="more-116"></span><br />
例えば、文字列の出来るだけ後ろの方に「a」が出てくる順に並べると言うソートがあったとすると（そんなの必要ないだろうという突っ込みは…）</p>
<pre class="brush: java; highlight: [4,5,6,7,8]; title: 旧来の書き方; notranslate">
public class Test {
	public static void main(String[] args){
		List&lt;String&gt; list = Arrays.asList(&quot;Tokyo&quot;,&quot;Kanagawa&quot;,&quot;Chiba&quot;);
		Collections.sort(list,new Comparator&lt;String&gt;(){
				@Override
				public int compare(String s1,String s2){
					return s1.lastIndexOf('a') - s2.lastIndexOf('a');
				}});
		for(String str:list){
			System.out.println(str);
		}
	}
}
</pre>
<p>無名クラスをnewしてやることで記述できるが、ロジックとは関係のない定型的な部分が多い。<br />
ラムダ式を使うと…</p>
<pre class="brush: java; highlight: [4]; title: ラムダ！; notranslate">
public class Test {
	public static void main(String[] args){
		List&lt;String&gt; list = Arrays.asList(&quot;Tokyo&quot;,&quot;Kanagawa&quot;,&quot;Chiba&quot;);
		list.sort((String s1, String s2) -&gt; s1.lastIndexOf('a') - s2.lastIndexOf('a'));
		for(String str:list){
			System.out.println(str);
		}
	}
}
</pre>
<p>こんなにすっきりします。</p>
<h2>ラムダ式の文法</h2>
<p>ラムダ式は以下の文法に従って記述します。</p>
<blockquote><p>
( 実装するメソッドの引数 ) -> { 処理 }
</p></blockquote>
<p>最初の例だと<br />
「public int compare(String s1,String s2)」が「(String s1, String s2)」<br />
になった感じですね。この時さらに、型の指定を外して「(s1,s2)」だけでもOKだったりします。</p>
<pre class="brush: java; first-line: 4; title: さらに簡素に; notranslate">
list.sort((s1, s2) -&gt; s1.lastIndexOf('a') - s2.lastIndexOf('a'));
</pre>
<p>もうこうなるとJavaっぽくないですね。どこのスクリプト言語だよと。<br />
ちなみにこの例だと式が1行なのでreturnがありませんが、複数行のロジックを「;」でつないだ場合は最後にreturnをちゃんと入れてあげる必要があります。</p>
<h2>関数型インタフェース</h2>
<p>Java8でjava.util.functionパッケージの下にゴロゴロと汎用的な関数型インタフェースが追加されていて、大体のことはこれを使えばよさそう。<br />
でも結局のところ、関数型インタフェースの実体を生成してるわけなので、用意されているインタフェースが合わなければ自分で@FunctionalInterfaceアノテーションをつけてインタフェースを宣言すれば何でもできる。</p>
<pre class="brush: java; first-line: 4; title: 自分でインタフェース定義; notranslate">
@FunctionalInterface
public interface MyFunction {
  public int multi(int i1, int i2, int i3);
}

public MyFunction function = (i1, i2, i3) -&gt; i1 * i2 * i3;
int result = function.multi(1, 2, 3);
</pre>
<p>ラムダ式の導入で型宣言がなくなったり、なんだかスクリプトチックな記述が出来るようになり、個人的には読みにくくなったなぁと。<br />
結局旧来の書き方でも問題はないし、変にコンパイルエラーではまるくらいなら慣れてる方法で書いてしまうって人も多そうで、プロジェクトでJava8導入するときはきちんとソース管理できる人が見てやらないとカオスになりそうだな、ってのが感想です。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tsu2t.com/?feed=rss2&#038;p=116</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WildFlyでEJB2.1</title>
		<link>http://blog.tsu2t.com/?p=93</link>
		<comments>http://blog.tsu2t.com/?p=93#comments</comments>
		<pubDate>Fri, 12 Jun 2015 09:01:32 +0000</pubDate>
		<dc:creator><![CDATA[tsu2t]]></dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.tsu2t.com/?p=93</guid>
		<description><![CDATA[アノテーションを使って定義をするEJB3.0はWildFlyで普通に動かせたのですが、悪しき旧式として悪名高く [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>アノテーションを使って定義をするEJB3.0はWildFlyで普通に動かせたのですが、悪しき旧式として悪名高く誰も情報を載せてくれないEJB2.1を動かすのに苦労したので経緯を簡単に。<br />
やりながら書いたのではなく、やった結果を思い出しながら書いてるので抜けがあるかも。。ご容赦を。<br />
（しかし、やってみて思ったけどEJB2とEJB3はもはや別物ですね）<br />
<span id="more-93"></span></p>
<h2>WildFlyをインストール</h2>
<p><a href="http://wildfly.org/downloads/" target="_blank">WildFly Download</a><br />
とりあえずwildfly-8.0.0.Finalを落としてきて使ってみることにし、バイナリを適当なフォルダに展開しておきます。</p>
<h2>Eclipseをインストール</h2>
<p>これも適当に、自分は「eclipse-jee-luna-SR2-win32-x86_64.zip」を利用。</p>
<h2>JBoss ToolをEclipseにインストール</h2>
<p>Eclipseを起動し、<br />
[Help]-[Eclipse Marketplace]を起動し、Find: に「JBoss」と入力。<br />
JBoss Tool(Luna) 4.2.3.Finalをインストールしました。<br />
社内プロキシに引っかかりまくって苦労しましたがそれはまた別のお話し。</p>
<h2>インタフェースの作成</h2>
<p>EJBHomeを継承したHomeインタフェースと、EJBObjectを継承したRemoteインタフェースを作成します。</p>
<pre class="brush: java; title: Homeインタフェース; notranslate">
public interface XXEJBHome extends EJBHome {
    public XXEJBRemote create() throws RemoteException, CreateException;
}
</pre>
<pre class="brush: java; title: Remoteインタフェース; notranslate">
public interface XXEJBRemote extends EJBObject {
    public String process(String message) throws RemoteException;
}
</pre>
<p>これをまとめてjarにします。</p>
<h2>リモートEJBの作成</h2>
<p>呼び出されるリモートEJBを作成します。新規のmavenプロジェクトを作成します。<br />
archetypeにjavaee7-essentials-archetypeのVersion1.4を選択しました。</p>
<p>下記の実装クラスを追加。</p>
<pre class="brush: java; title: RemoteEJBの実装; notranslate">
public class XXEJBRemoteImpl implements SessionBean{

	private static final long serialVersionUID = 1L;

	public XXEJBRemoteImpl() throws Exception{
	}
	
	public String process(String message){
		return &quot;test&quot;;
	}
	
	public void ejbCreate() {}
	public void ejbRemove() {}
	public void ejbActivate() {}
	public void ejbPassivate() {}
	public void setSessionContext(SessionContext sc) {}
}
</pre>
<h2>ejb-jar.xmlを作成</h2>
<p>EJB3.0ならアノテーションで済む話をわざわざXMLに記述します。</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE ejb-jar PUBLIC &quot;-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN&quot; &quot;http://java.sun.com/dtd/ejb-jar_2_0.dtd&quot;&gt;
&lt;ejb-jar&gt;
    &lt;enterprise-beans&gt;
        &lt;session&gt;
            &lt;ejb-name&gt;XXEJB&lt;/ejb-name&gt;
             &lt;home&gt;test.ejb.XXEJBRemoteHome&lt;/home&gt;
             &lt;remote&gt;test.ejb.XXEJBRemote&lt;/remote&gt;
             &lt;ejb-class&gt;test.ejb.XXEJBRemoteImpl&lt;/ejb-class&gt;
             &lt;session-type&gt;Stateless&lt;/session-type&gt;
             &lt;transaction-type&gt;Container&lt;/transaction-type&gt;
        &lt;/session&gt;
    &lt;/enterprise-beans&gt;
  &lt;assembly-descriptor&gt;
    &lt;container-transaction&gt;
      &lt;method&gt;
        &lt;ejb-name&gt;XXEJB&lt;/ejb-name&gt;
        &lt;method-name&gt;*&lt;/method-name&gt;
      &lt;/method&gt;
      &lt;trans-attribute&gt;Required&lt;/trans-attribute&gt;
    &lt;/container-transaction&gt;
  &lt;/assembly-descriptor&gt;
&lt;/ejb-jar&gt;
</pre>
<h2>WildFlyへデプロイ</h2>
<p>EclipseのServersパースペクティブからWildFlyのサーバを追加し、先ほど作成したリモートEJBのプロジェクトを右クリックメニューの[Add and Remove]から追加します。<br />
このまま起動できることを確認します。</p>
<p>とりあえず起動はできますが、EJBがデプロイされません。<br />
そこで、先ほど作ったejb-jar.xmlと、インタフェースを含んだjarを手でデプロイします。warに入れるよう設定すればこの手順は不要ですが。<br />
「C:\tools\wildfly-8.0.0.Final\standalone\deployments\XXEJBRemote.war\WEB-INF」にejb-jar.xml<br />
「C:\tools\wildfly-8.0.0.Final\standalone\deployments\XXEJBRemote.war\WEB-INF\lib」にinterface.jar<br />
をそれぞれ配置。</p>
<p>で、このまま起動してもうまくいかない罠があります。<br />
ServersからWildFlyを右クリックメニューから「Show」を選択して、OverviewからRuntime Environmentを開き、<br />
<a href="http://blog.tsu2t.com/wp-content/uploads/wildfly_01.png"><img src="http://blog.tsu2t.com/wp-content/uploads/wildfly_01-300x157.png" alt="eclipse wildfly設定" width="300" height="157" class="alignnone size-medium wp-image-106" /></a><br />
Configuration fileを「standalone.xml」から「standalone-full.xml」に変更します。<br />
<a href="http://blog.tsu2t.com/wp-content/uploads/wildfly_02.png"><img src="http://blog.tsu2t.com/wp-content/uploads/wildfly_02-300x184.png" alt="eclipse wildfly設定" width="300" height="184" class="alignnone size-medium wp-image-107" /></a></p>
<p>ここまで終えて起動させると、下記のようなログが出てデプロイされたことが分かります。</p>
<blockquote><p>
15:28:05,109 INFO  [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-6) JNDI bindings for session bean named XXEJB in deployment unit deployment &#8220;XXEJBRemote.war&#8221; are as follows:</p>
<p>	java:global/XXEJBRemote/XXEJB!test.ejb.XXEJBRemoteHome<br />
	java:app/XXEJBRemote/XXEJB!test.ejb.XXEJBRemoteHome<br />
	java:module/XXEJB!test.ejb.XXEJBRemoteHome<br />
	java:jboss/exported/XXEJBRemote/XXEJB!test.ejb.XXEJBRemoteHome<br />
	java:global/XXEJBRemote/XXEJB!test.ejb.XXEJBRemote<br />
	java:app/XXEJBRemote/XXEJB!test.ejb.XXEJBRemote<br />
	java:module/XXEJB!test.ejb.XXEJBRemote<br />
	java:jboss/exported/XXEJBRemote/XXEJB!test.ejb.XXEJBRemote
</p></blockquote>
<h2>リモート呼び出しする</h2>
<p>呼び出しはHomeを取得してRemoteEJBをcreateする。</p>
<pre class="brush: java; title: Remoteコール; notranslate">
XXEJBRemoteHome home = (XXEJBRemoteHome)javax.rmi.PortableRemoteObject.narrow(c.lookup(&quot;ejb:/XXEJBRemote/XXEJB!test.ejb.XXEJBRemoteHome&quot;), XXEJBRemoteHome.class);
XXEJBRemote remote = (XXEJBRemote)home.create();
String response = remote.process(&quot;&quot;);
System.out.println(&quot; response  = &quot; + response);
</pre>
<p>下記の参考URLにもあるが、jndiを「ejb:」にしないと動かない。<br />
実行すると</p>
<blockquote><p>
response = test
</p></blockquote>
<p>やっと動いた。</p>
<p>[参考URL]<br />
<a href="http://jsebfranck.blogspot.fr/2013/08/ejb-2-on-jboss-71-example.html" target="_blank">EJB 2 on Jboss 7.1 example </a><br />
<a href="http://hideoku.hatenablog.jp/entry/20120711/1341932843" target="_blank">JBoss AS 7.1.0 で EJB 2.x を動かす</a><br />
<a href="http://jaiswaltraining.com/ejb2.1/jboss/ch1.php" target="_blank">JaiswalTraining</a><br />
<a href="http://www.nailedtothex.org/roller/kyle/entry/articles-wildfly-remoteejb" target="_blank">別プロセスからリモートEJBを呼び出してみる</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tsu2t.com/?feed=rss2&#038;p=93</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse * WildFlyでEJB</title>
		<link>http://blog.tsu2t.com/?p=90</link>
		<comments>http://blog.tsu2t.com/?p=90#comments</comments>
		<pubDate>Wed, 10 Jun 2015 09:59:01 +0000</pubDate>
		<dc:creator><![CDATA[tsu2t]]></dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://blog.tsu2t.com/?p=90</guid>
		<description><![CDATA[お仕事でEJBを利用する必要がありそうなので環境の構築を試みた。 次の記事を参考に同じことをやろうとして見た。 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>お仕事でEJBを利用する必要がありそうなので環境の構築を試みた。</p>
<p>次の記事を参考に同じことをやろうとして見た。<br />
[Kohei Nozaki&#8217;s blog]<br />
<a href="http://www.nailedtothex.org/roller/kyle/entry/articles-wildfly-remoteejb" target="_blank">別プロセスからリモートEJBを呼び出してみる</a></p>
<p>自分用メモなので他の人が読むにはつらいかも。<br />
<span id="more-90"></span></p>
<p>eclipseをダウンロード。現時点での最新のLunaを落とした。Eclipse IDE for Java EE Developersなのでいろいろ最初っから入っててお手軽。<br />
<a href="https://eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/lunasr2" target="_blank>eclipse.org</a></p>
<p>適当なところに解凍して利用する。<br />
JBoss Toolsを導入しようとするも社内はProxyが導入されていてマーケットプレイスへの接続エラーが出まくる。<br />
[Window]-[Preference]から[Genral]-[Network Connection]を確認、基本的にはActive ProviderをNativeにしておけば基本的にはOKなはずなんだがそれでもうまくいかない。</p>
<p>eclipse.iniに</p>
<blockquote><p>
-Dorg.eclipse.ecf.provider.filetransfer.excludeContributors=org.eclipse.ecf.provider.filetransfer4
</p></blockquote>
<p>を追加してHttpClientを使用しないようにしたらうまくいったが、それでも時折タイムアウトは発生する。辛抱強く何度かやるとうまくいくのでとりあえずこれでいいか…。</p>
<p>ちなみにこの方法はあちこちで紹介されていて、<br />
<a href="http://qiita.com/gogonosmarty/items/d406892f7bc2bf3f2d28" target="_blank">eclipse 環境構築メモ（プロクシ設定編） </a></p>
<p>なんだけど、filetransferがfiletransfer4になっている（LUNAから？）のでそこだけは注意が必要。</p>
<p>JBoss Toolsが入ったらServersからWildFlyを追加して起動できることを一旦確認。</p>
<p>ここまで進んだら記事の通り、remoteejbif/remoteejbwar/remoteejbclientを作っていく</p>
<p>EJBのプロジェクトを作成するため、Mavenプロジェクトを新規作成する。<br />
archetypeで「javaee7-essentials」を選びたいのだが候補にない。<br />
下記の手順を参考にしてCatalogの追加を試みるもうまくいかず…。<br />
<a href="https://jira.talendforge.org/secure/attachment/36787/DeveloperGuide-Feedback.pdf" target="_blank">【PDF注意！】</a></p>
<p>行き詰ってたんだけど、<br />
http://repo.maven.apache.org/maven2/archetype-catalog.xml<br />
このファイル自体はブラウザで見ることが出来るので、こいつを「C:\Users\{User}\.m2」にダウンロードしてみたら急に動いた。</p>
<p>このあたりはうちの会社のオフィスのプロキシのせいだと思われるのであまり他の人の参考になるような情報ではないかも。</p>
<p>完成かと思いきやWildFlyにデプロイして起動させるとエラーが発生</p>
<blockquote><p>
18:25:33,076 WARN  [org.jboss.modules] (MSC service thread 1-1) Failed to define class foo.HogeBeanImpl in Module &#8220;deployment.remoteejbwar.war:main&#8221; from Service Module Loader: java.lang.LinkageError: Failed to link foo/HogeBeanImpl (Module &#8220;deployment.remoteejbwar.war:main&#8221; from Service Module Loader)<br />
Caused by: java.lang.NoClassDefFoundError: foo/HogeBean<br />
Caused by: java.lang.ClassNotFoundException: foo.HogeBean from [Module &#8220;deployment.remoteejbwar.war:main&#8221; from Service Module Loader]</p>
<p>18:25:33,080 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC000001: Failed to start service jboss.deployment.unit.&#8221;remoteejbwar.war&#8221;.POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.unit.&#8221;remoteejbwar.war&#8221;.POST_MODULE: JBAS018733: Failed to process phase POST_MODULE of deployment &#8220;remoteejbwar.war&#8221;<br />
Caused by: java.lang.LinkageError: Failed to link foo/HogeBeanImpl (Module &#8220;deployment.remoteejbwar.war:main&#8221; from Service Module Loader)<br />
Caused by: java.lang.NoClassDefFoundError: foo/HogeBean<br />
Caused by: java.lang.ClassNotFoundException: foo.HogeBean from [Module &#8220;deployment.remoteejbwar.war:main&#8221; from Service Module Loader]
</p></blockquote>
<p>どうもfoo.HogeBeanというinterfaceを認識できていないようだったのでデプロイ先のフォルダを確認してみた</p>
<blockquote><p>
${WILDFLY_HOME}\standalone\deployments\remoteejbwar.war\WEB-INF\classes\foo
</p></blockquote>
<p>確かにHogeBeanのInterfaceがいない<br />
試しにHogeBeanの.classファイルをおいて起動させると無事起動。どうやらwarにinterfaceも含めるようにビルドしないといけない模様。</p>
<p>とりあえずこの状態でクライアントを動かすと動いた。</p>
<blockquote><p>
hoge from remote
</p></blockquote>
<p>remoteejbwarにremoteejbifを含めてビルドする方法はmavenの設定だと思うんだけど直ぐには調べがつかなかったのでまた今度。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tsu2t.com/?feed=rss2&#038;p=90</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ディズニー映画</title>
		<link>http://blog.tsu2t.com/?p=88</link>
		<comments>http://blog.tsu2t.com/?p=88#comments</comments>
		<pubDate>Sat, 06 Jun 2015 14:15:05 +0000</pubDate>
		<dc:creator><![CDATA[tsu2t]]></dc:creator>
				<category><![CDATA[英語]]></category>

		<guid isPermaLink="false">http://blog.tsu2t.com/?p=88</guid>
		<description><![CDATA[今日はまとまった英語の勉強の時間はなし。 子供たちが車の中でうるさいので黙らせるために「アナと雪の女王」と「塔 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>今日はまとまった英語の勉強の時間はなし。<br />
子供たちが車の中でうるさいので黙らせるために「アナと雪の女王」と「塔の上のラプンツェル」のDVDを英語で観賞。<br />
もう2ケタを超えて3ケタくらい観てるんじゃないかというくらい観ているので英語がわかってなくても子供たちは文句を言わないので耳で追いながらシャドーイングをぶつぶつと。<br />
<span id="more-88"></span></p>
<p>ディズニー映画は子供向けなのでそんなに早かったり難しかったりしないので教材としてはいいとおもいます。<br />
映画を一本選んでまるまる暗記するような勉強法もいいなーと思ってます。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tsu2t.com/?feed=rss2&#038;p=88</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>今日の英語勉強（2015/06/05）</title>
		<link>http://blog.tsu2t.com/?p=86</link>
		<comments>http://blog.tsu2t.com/?p=86#comments</comments>
		<pubDate>Fri, 05 Jun 2015 13:08:38 +0000</pubDate>
		<dc:creator><![CDATA[tsu2t]]></dc:creator>
				<category><![CDATA[英語]]></category>

		<guid isPermaLink="false">http://blog.tsu2t.com/?p=86</guid>
		<description><![CDATA[最近始めたテキストがこれ。 見開きで左が日本語、右が英語になってる本で、瞬間英作文の教材として評判がいいので買 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>最近始めたテキストがこれ。</p>
<p><iframe src="http://rcm-fe.amazon-adsystem.com/e/cm?t=unconsciousse-22&#038;o=9&#038;p=8&#038;l=as1&#038;asins=4863921179&#038;ref=qf_sp_asin_til&#038;fc1=000000&#038;IS2=1&#038;lt1=_blank&#038;m=amazon&#038;lc1=0000FF&#038;bc1=000000&#038;bg1=FFFFFF&#038;f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
<p>見開きで左が日本語、右が英語になってる本で、瞬間英作文の教材として評判がいいので買ってみました。<br />
今日はUnit1～4の復習。しかし出来は60%くらいかなー・・もっとすらすら出てこないとだめだと反省。<br />
<span id="more-86"></span></p>
<p>瞬間英作文は会話の反射神経を高めるのにいいですね。日本の英語教育では最も苦手な分野の一つだと思うのでこれからも積極的にやっていきます。</p>
<p>ちなみに僕の学生時代の英語の偏差値は49です。ハイ。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tsu2t.com/?feed=rss2&#038;p=86</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>仕切り直し</title>
		<link>http://blog.tsu2t.com/?p=84</link>
		<comments>http://blog.tsu2t.com/?p=84#comments</comments>
		<pubDate>Thu, 04 Jun 2015 07:12:14 +0000</pubDate>
		<dc:creator><![CDATA[tsu2t]]></dc:creator>
				<category><![CDATA[雑記]]></category>

		<guid isPermaLink="false">http://blog.tsu2t.com/?p=84</guid>
		<description><![CDATA[このドメインを取ってblogを開いたのが2010年11月らしく、それから4年半、総投稿数は17という快挙を達成 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>このドメインを取ってblogを開いたのが2010年11月らしく、それから4年半、総投稿数は17という快挙を達成しました。<br />
さすがに情けないのでもう少し内容を整理してやり直したいと思います。</p>
<p>当面のポスト予定は。。<br />
■英語…全然勉強が進んでいない英語について。そのうち仕事で必要になるかもしれないし。<br />
■IT…一応、この業界で仕事するうえでトレンドは追わないとまずい。</p>
<p>この2つくらいで日刊で出来ればいいなと思いますが、まず、明日ちゃんと続くかも怪しいですね。ハイ。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.tsu2t.com/?feed=rss2&#038;p=84</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
