yamicha.com's Blog - Presented by yamicha.com
Blog yamicha.com's Blog - 2018/12 の記事
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31]

yamicha.com's Blog
 諸事情により、現在更新休止中。ご了承ください。もし今後ブログを再開することがあるとすれば、その際にはこのブログスクリプトではなく、新しく開発したものによるかもしれません。
 当ブログ管理者についてはこちらをご参照。
開発魔法(737)
社会問題(733)
お知らせ(11)
質問・バトン回答(15)
ゲスト出演(8)
経済・知的財産(150)
ゲーム開発(182)
[Ada] 勝手に補足
- Note
- 金配りの次の一手


- Endless Ultimate Diary
- 銃世界

漢字バトン
- うるる雑記帳
- 漢字接力棒

ツキアイゲノムバトン
- ブログ@うにうに画像倉庫
- あぶ内閣

縺イ縺セ縺、縺カ縺励ヰ繝医Φ
- 月夜のボヤキ
- 騎士サーラバトン
パスワードを使う
名無し (2012/02/27)


開発者解放裁判
yamicha.com (2010/03/14)
Winnyに関しては、私も「純白」とまでは考えておりませんし、使用し..

開発者解放裁判
通りすがり (2010/03/08)
winnyに関しては「ダウンロードソフト板」なんてところを拠点に開発..

新型インフルエンザの恐怖
いげ太 (2009/11/03)
> C#などの「int Some(int , int)」は、F#では「(int * int) ->..

時効に関する思考
yamicha.com (2009/08/31)
>いげ太さんコメントありがとうございます。手元にドキュメントが少..
Homepage
Blog Top
Normal View
List View
Search
Calendar
Comment List
Trackback List
Blog RSS
Send Trackback
Phone Mode
Administrator
yamicha.com
Blog
るううるる。
Source
法令データ提供システム
FindLaw
Development
Java2 Platform SE 6
Java EE 6 API
MySQL Developer Zone
PHP Reference
MSDN Library
Ada Reference Manual
Objective Caml
Python Documentation
Erlang
Prolog Documents
恐怖の灰色幹事長
2010/02/07(Sun)22:29:09
 小沢氏の資金管理団体による土地購入をめぐる疑惑は、検察が小沢氏を嫌疑不十分で不起訴とすることで一応の決着を見ました。とりあえず、検察の捜査の上では「シロ」であることが示された格好です。しかし、世論調査でも国民の多くが納得していないことが示されており、民主党の人気も下落する傾向にあるなど、その余波は民主党内外に様々な影響を与えているようです。
 鳩山氏は「(小沢氏の犯罪行為は)検察の捜査により事実と認定されなかった」と主張し、小沢氏は潔白であることを強調、幹事長を辞任する必要はないとしていますが、もし法的に責任を問われるか否かを判断材料とするのであれば、鳩山氏の言い分にも一応の道理があります。しかしながら、法的に責任を問われないことと「潔白」とは同義ではありませんし、仮に小沢氏の行いが罪の要件には該当しなかったとしても、道義的な責任は免れません。まして、「李下に冠を正さず」の精神が求められる政治家にとっては、あまりに問題の大きい行為であると言わざるを得ません。
 小沢氏は幹事長にとどまるつもりのようですが、もし小沢氏以外の役職者が同じような嫌疑をかけられ、しかも非常に黒に近い状態とみなされていたなら、仮に最終的には不起訴となったとしても、辞任となっていた可能性は十分にあるといえるでしょう。徹底して小沢氏の弁護を図り、場合によっては検察への圧力とも取れる発言までする鳩山氏や民主党の対応は、大変疑問であると言うよりありません。
 そもそも、鳩山氏や民主党が「本件さえやり過ごせば小沢問題は終息する」と考えているのであれば、それは世論からあまりにも乖離した見方です。これまでにも小沢氏は、民主党合流前の「壊し屋」としての活動の他、下手をすると民主党を崩壊させかねなかった「大連立」騒動、政権を取った後の小沢院政など、不信感を抱かれても当然の行動を繰り返しており、国民の信頼はほとんど得られていません。
 そればかりか、このまま小沢氏を党内に隠者として抱えておけば、またしても大連立のような致命的な行動を考えつき、実行に移さないとも限りません。前の大連立はすんでのところで回避され、そのおかげで民主党は壊滅せずに政権与党となることができましたが、もし今後も同じような過ちを繰り返せば、仮に未遂に終わったとしても、今度こそ民主党への信頼は潰えるでしょう。
 すなわち、このところの世論による「辞任」コールは、今回の土地購入疑惑だけにとどまらず、これまでの小沢氏の様々な独善的な行動や疑惑、さらには今後の小沢院政への恐怖と不安にも向けられている、大変根が深いものであると見て間違いありません。つまり、今回の土地購入疑惑が一件落着したからといって、小沢氏や民主党への風当たりが弱まるというものでは決してありません
 民主党内では「選挙に強い小沢」の図式が出来上がっており、そのためにぞんざいな扱いができないという雰囲気になっているようですが、確かに選挙には小沢氏の功績もあるとはいえ、実際には自民党への著しい失望や変革の必要性への認識が民主党を押し上げたものであるため、小沢氏のみの力によって衆参での勝利が実現したわけではありませんし、せっかくの政権交代がすぐにつぶれるのでは、政権交代の意味がありません。
 それに何より、小沢氏をめぐる民主党の混乱のせいで、全く政策論争が聞かれなくなっているのは残念でなりません。麻生氏が首相の際にも、氏の資質ばかりに話題が集中し、政策論争があまり見られなくなる現象はありましたが、それでも「金配り」などがそれなりに大きく注目されただけマシというものです。民主党政権下においても、子ども手当てや外国人地方参政権など賛否のある一部の政策に関しては、必ずしも注目されていないとまではいえないものの、何よりもまず小沢氏関連の問題ばかりが注目を集めており、政策に関する論争や報道は非常に低調となってしまっています。
 さらには、こちらも小沢問題のせいでかすんでしまっていますが、民主党政権においてはこれまで必要性が繰り返し指摘されていながら、自民党議員の意味不明な妄想や利権のせいで阻まれてきた各種改正が、ようやく実現されつつあったり、実現される可能性が出てきているのですから、これは明らかに政権交代の功であるといえます。このような地味ながらも重要な改革まで考慮に入れて、私は今のところ民主党政権を及第点レベルと見ていますが、小沢氏の問題はそれすらも覆い隠すばかりか、そのような改正の芽すら摘み取ってしまいかねないものですから、その罪は非常に大きいと指摘せざるを得ません。
 これはすなわち、改革に向けて必死で奮闘しているまじめな民主党の関係者、さらには民主党に期待している国民をも、真正面から裏切る行為に他なりません。小沢氏が信用を失って没落するのは自身の勝手ですが、民主党を支持した者の多くは小沢氏を支持したわけではありませんので、小沢氏が民主党まで巻き込んで没落するとなれば、さすがに小沢氏の勝手とはいきません。
 そればかりか、今は自民党も非常に混乱しており、「和魂党」などの珍妙過ぎる案まで飛び出すような状況です。いずれ自民党には政権争奪の場に復帰してもらわなくてはなりませんが、今の自民党は完全に体力を消耗しきった病人のようなものですから、体力の戻りきらないうちに政権を再び握ろうものなら、ますます日本は混乱します。自民党が「和魂党」などと国民を愚弄したことを言っている限り、再び政権を握らせたところで今までの繰り返しになるだけですので、生まれ変わるのを待たなくてはなりません。
 さらに不安な材料として、最近は舛添氏などが不穏な動きを見せており、最悪な形での政界再編がなされる可能性が否定できません。すなわち、小沢氏の問題で多大な不信感を抱かれた民主党と、病み上がりでボロボロの自民党が争っている間に、なぜか国民の人気だけは高い舛添氏が「漁夫の利」を得て、重要なポストに就いてしまう可能性です。
 舛添氏の人格はいまさら説明するまでもありませんが、無賃残業合法化に「残業代が出ないとみんな早く帰るようになる」ことを理由として賛成し、同制度を非常に積極的に推進している人物です。この理由が建前なのか、本気でそのように考えているのかは不明ですが、そうはならないであろうことは「みなし役員」の問題を見れば明らかで、氏の言い分は完全に破綻しています。その上に「ホワイトカラー・エグゼンプションなどという横文字をつけるから、マスコミに残業代ゼロ法案と書かれて国民に反対される。名前さえ変えれば国民は反対しない」という理由で無賃残業合法化を「家庭だんらん法案」に改名して出そうとした、国民の知性をとことんなまでに愚弄した人物でもあります。
 さらに、氏は自民党について「今の自民党に必要なのは、民主党の小沢氏以上の独裁者」とも発言しており、ここからも氏の人格と手法がうかがえます。下手に権力を握らせようものなら、国民の知性を侮って適当なことを繰り返した挙句、「家庭だんらん法案」などの劣悪な制度を独裁的に成立させる可能性も否定できません。私は政界再編そのものを否定する気はありませんが、それで舛添氏が台頭してデタラメな政治が展開される恐れがある限り、現行の自民党と民主党の枠組みで処理する方がまだマシです。
 瀕死の病人同然の自民党に再び政権を背負わせて共倒れになったり、舛添氏が上り詰めたりといった最悪の事態を招いてからでは、反省しても遅すぎます。小沢氏も道義的にはともかく、これで一応法的には「潔白」となったのですから、けじめを理由として潔く幹事長ポストを去り、「潔白」で花道を飾っていただくのが一番でしょう。それが民主党のため、民主党を支持した国民のため、ひいては日本のためです。

 前回ではひとまずJSF 2.0のAjaxを使用してみましたが、案外手軽に扱えるものであることが判明しましたので、今回はアプリケーションスコープを使用した簡単なチャットを作成してみました。とはいえ、Cometを使ったリアルタイム通信などといった上等なものではなく、単に「ページ変移を経ないチャット」です。さらに言えば、チャットと呼べるかも疑わしいのですが、この際そこまでこだわっても仕方がありません。
 今回の構成は以下の通りにしました。
/WEB-INF
 /classes
  /com
   /yamicha
    /simplechat
     MessageBean.java
     LogBean.java
     ElementBean.java
 web.xml
chat.xhtml
 少しまともなものを作るとなると、考えなくてはならないのが各ManagedBeanの編成です。データベースなどを使わないとすれば、まずログのコレクションを持つApplicationScopedのBeanが必要として、1件ごとのログを表す(発言者名や発言などのプロパティを持つ)クラスも必要でしょう。また、Ajaxで通信して発言などを可能にするからには、フォームデータを受け持つViewScopedかRequestScopedが必要となるでしょう。また、送信したデータをログに登録しなくてはならないので、このManagedBeanがログ保持用ApplicationScopedのBeanをプロパティとして持つ必要がありそうです。
 まず、web.xmlは実にいつもの通りです。GlassFish v3 Previewが正式版となった暁には、絶対に省略できるようになるべきです。
<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app>
  <context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
  </context-param>

  <display-name>JSF 2.0 SimpleChat Servlet</display-name>
  <description>JSF 2.0 SimpleChat Sample Servlet</description>

  <servlet>
    <servlet-name>jsf20simplechat</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>jsf20simplechat</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
</web-app>
 ManagedBeanは次の通りです。ApplicationScopedを使っていますので、ぞんざいながら排他制御をつけておきました。友達の友達(logBean.element)にアクセスしようとすると複製が返ってくるので、とりあえず面倒なことにはならないはずです。もう少し複雑なものを書く場合には、コレクションをラップして排他制御を行うクラスを書くなどの方法が一般的のようです。
// ElementBean.java
package com.yamicha.simplechat;

import javax.faces.bean.*;

public class ElementBean{
	private String name;
	private String message;

	public ElementBean(){
	}
	public ElementBean(String n , String m){
		name = n;
		message = m;
	}

	public String getName(){
		return name;
	}
	public String getMessage(){
		return message;
	}

	public void setName(String n){
		name = n;
	}
	public void setMessage(String m){
		message = m;
	}
}

// LogBean.java
package com.yamicha.simplechat;

import javax.faces.bean.*;
import java.util.*;

@ManagedBean @ApplicationScoped public class LogBean{
	private List<ElementBean> elements;

	public LogBean(){
		elements = new ArrayList<ElementBean>();
	}

	synchronized public void addLog(ElementBean eb){
		elements.add(0 , eb);
	}
	synchronized public void clearLog(){
		elements.clear();
	}

	synchronized public List<ElementBean> getElements(){
		return new ArrayList<ElementBean>(elements);
	}
	synchronized public void setElements(List<ElementBean> e){
		elements = e;
	}
}

// MessageBean.java
package com.yamicha.simplechat;

import javax.faces.bean.*;

@ManagedBean @ViewScoped public class MessageBean{
	private String name;
	private String message;
	@ManagedProperty(value="#{logBean}") private LogBean log;

	public MessageBean(){
		name = "";
		message = "";
	}

	public void addMessage(){
		if(message != null && !message.isEmpty()){
			log.addLog(new ElementBean(name , message));
			message = "";
		}
	}

	public String getName(){
		return name;
	}
	public String getMessage(){
		return message;
	}

	public void setName(String n){
		name = n;
	}
	public void setMessage(String m){
		message = m;
	}

	public LogBean getLog(){
		return log;
	}
	public void setLog(LogBean l){
		log = l;
	}
}
 これでチャットのデータ処理部分はできましたので、後はxhtmlを書くだけです。以下、chat.xhtmlの内容です。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:c="http://java.sun.com/jsp/jstl/core"
  xmlns:ui="http://java.sun.com/jsf/facelets">

<h:head>
  <title>JSF 2.0 SimpleChat</title>
</h:head>

<h:body>
  <b>JSF 2.0 SimpleChat</b>

  <h:form id="chatform">
    <h:inputText size="20" value="#{messageBean.name}">
      <f:ajax immediate="true" />
    </h:inputText>: 
    <h:inputText size="60" value="#{messageBean.message}">
      <f:ajax immediate="true" />
    </h:inputText>

    <h:commandButton value="Say" action="#{messageBean.addMessage}">
      <f:ajax render="chatform" />
    </h:commandButton>
    <h:commandButton value="Reload">
      <f:ajax render="chatlog" />
    </h:commandButton>
    <h:commandButton value="Clear" action="#{logBean.clearLog}">
      <f:ajax render="chatlog" />
    </h:commandButton>

    <hr />

    <h:panelGroup id="chatlog">
      <ui:repeat value="#{logBean.elements}" var="element" 
        begin="0" end="20">
        <b>#{element.name}</b>: #{element.message}
        <hr />
      </ui:repeat>
    </h:panelGroup>
  </h:form>

</h:body>

</html>
 ここで重要なのは次の2点です。私は両方とも実際に失敗し、散々悩む羽目になりました

1.上記のようにコレクションを使用するのであれば、c:forEachではなくui:repeatを使用しなくてはならない
2.Ajaxによるリクエストデータ送信時に、引数に含めたいコントロールには、<f:ajax immediate="true" />を書く必要がある

 1でc:forEachを使用してしまった場合、データ自体は一応表示されなくもないものの、コレクションのサイズが誤認されるなど、非常に挙動不審になります。したがって、ui:repeatを使わなくてはなりません。
 また、2の記述を忘れてしまうと、コントロールに入力したはずのデータが受け取れないという不思議な事態に陥ります。私はこのようなものが必要とはつゆ知らず、データが受け取れない現象に散々混乱した末、やむを得ずAPIドキュメントを読み込んでみて、やっと原因が分かりました。
 これでひとまず、ごく単純なチャットが作成できました。そろそろ考えるべきことが増えてきましたが、この程度なら生のAjaxを書くよりは比較的楽です。
カテゴリ [開発魔法][社会問題] [トラックバック 0][コメント 0]
<- 前の記事を参照 次の記事を参照 ->

- Blog by yamicha.com -