まさるblog

越後在住子持ちプログラマ奮闘記

目次

Blog 利用状況

ニュース

08/11/05
長岡 開発者 勉強会 (NDS)に参加しました

08/12/06
第1回NDSでスピーカデビューしました。

09/04/08
Poken手に入れました。

現在
子育て奮闘中です。
デザインパターン勉強中です。
iKnow!、ESLPodcastなどで英語勉強中です。

ブログパーツ

あわせて読みたい

書庫

日記カテゴリ

コミュニティ

色々

2010年2月6日 #

第13回長岡IT開発者勉強会(NDS)参加したよ

1/16(土)-第13回長岡IT開発者勉強会に参加します

参加してきましたので、レポート。

 

WordPress

まずは岡本氏(@wokamoto)による、WordPressの概要の説明から。

  • WordPressについて
    • PHP、MySQLで動くブログエンジン
    • オープンソース
    • 2つのWordPress
      • WordPress.org
        • インストールタイプ
      • WordPress.com
        • レンタル
    • WordPressMU
      • 複数ユーザー(ブログ)管理対応
      • WordPressの派生プロジェクト
  • 歴史
    • 2003/5に初リリース
    • 日本
      • 2006
        • 書籍発売
      • 2008
        • ja.wordpress.org開始
        • WordCamp初開催
      • 2010
        • WordCamp開催予定
  • 何ができる
    • 拡張
      • プラグイン
      • テーマ
    • 携帯対応
      • Ktai Entry
    • Twitter風
      • P2テーマ
    • SNS
      • MUとBuddyPressプラグインで作成可能
        • WordBenchもこの組み合わせ
    • プラグインは簡単に作れる
      • PHPで書く
  • WordPressが使用されているサイト
    • IDEA*IDEA等
  • 情報はどこから入手?

 

次にYuriko氏(@lilyfanjp)による、WordPressプラグインの「Ktai Style」について。

というか、Ktai Styleの中の人です、彼女。

  • 自己紹介
    • ケータイ大喜利メジャー三段
    • Ktai Styleの中の人
  • WordPressの携帯対応事情
    • 素の状態では未対応
    • 携帯対応ツールを使う
      • XHTML+CSS
    • iPhone対応は充実
      • フルブラウザだしね
  • 携帯の日本対応が甘い
    • ガラパゴス化によるもの?
      • 文字コードがShift-JIS
        • いわゆる半角カナ
        • 絵文字
      • 画像フォーマットの非互換
        • キャリアごとにサポートしている画像フォーマットが違う
          • JPEG
          • PING
          • GIF
      • 個体識別符号でユーザー認証
        • i-mode 1.0がCookie未対応のため
          • i-mode 2.0では対応している
  • そこで「Ktai Style」
    • 国内携帯5キャリア全てに対応
      • docomo
      • au
      • SoftBank
      • WILLCOM
      • E-MOBILE
  • Ktai Styleの機能紹介
    • 以下一部
      • 最新コメント一覧表示
        • Ktai Style独自機能
        • blogならサイドバーに置くが、携帯はスペースがないため独自ページに
      • 豊富なテーマ
        • livedoor blogっぽいものから、WordPressのP4スタイルふうのものまで
      • 絵文字対応
        • キャリアごとに同じような絵文字に変換
      • メール投稿機能
        • 画像のGPSデータも活用
        • docomo、WILLCOMはGMail経由のみ
      • ブログ管理機能
        • auしか使えない環境でblog編集できへんやん!となったのがきっかけ
        • コメント通知メール機能などもある
  • 活用例
    • Yuriko氏の旅行ブログ Yuriko.Net 旅行記
      • プラグインは全てこのために作ったと言っても過言ではない
  • まとめ
    • 携帯ブログ対応ツール対応
    • WordBenchはおもろいとこ
      • 今回のNDSのために東京から長岡くんだりまで4人も駆け付けた
      • そんな酔狂なメンバがたくさんいる

最後にWordPressセッション全体への質問

  • Ktai Styleのデモにて、ログイン後に設定してないけどなんかアイコンが出たのはなぜ?
  • WordPressを選んだ理由は何?
    • Ktai Styleによる携帯対応がすごい!
      • 自画自賛やん!
      • 動的に生成してるので、同じアドレスで携帯からもPCからもいける
        • Movable Typeだと結構めんどい
      • これからの時代は携帯対応必須よね?
    • とにかく楽しい!
      • 正直コードは汚い
        • PHPだしね
      • でも作ると面白い
      • コミュニティも面白い
        • センスがある人が集まっている感じがする
    • MovableType(MT)より良く出来てる
      • 一説によると昨年のWordCampでGoogleも認めたとか
      • MTを選ぶ人は、正直「う~ん」と思う
      • 生成されるHTMLもWordPressの方が奇麗
    • 検索エンジンに強い
      • GoogleにPing飛ばすから?
      • でもYahooはちょっと弱い

 

休憩時間

ここで、一時休憩時間。名刺交換も何人かとさせていただきました。

これはYuriko氏のおみやげの「せんとくんせんべい」

image

 

障害者から見たWeb

次に@mosaku氏によるセッション。

  • 自己紹介
    • アクセシビリティ関連をやって8年
    • 障害者就労支援をしている
      • 就職のためのパソコン指導
  • アクセシビリティがなぜ必要か?
    • 障害と一口にいっても種類は様々
    • それぞれに対応方法が違う
  • 障害者とは
    • 身体・心になんらかの「障害」がある
      • 広義には認知症も含む
    • 「障害」のため、何らかの支援が必要な人
  • 障害の種類
    • 身体障害
      • 脳性まひ
        • 光・音に体が勝手に反応する
          • 本人の意思とは無関係
      • 脳梗塞・脳出血
        • 他人ごとではない
        • 障害を受けた脳の部位によって症状が異なる
          • 右麻痺
            • 男性に多い
            • 言語障害
              • 漢字はわかる
              • ひらがな・カタカナがだめ
                • ただの記号と認識
              • 語句と実物のパターンマッチングができない
                • 「キーボード」という言葉はわかっても、何のことかわからない
              • 話せるが、読み書きができない
              • 女子が上手く使えない
              • 計算能力と知的レベルは落ちない場合が多い
            • 右上肢麻痺
              • 聞き手でマウスが使えない
            • 右視野欠損
              • 右側が見えにくい、または見えない
            • 注意障害
              • アイコンやメニューが画面から探せない
          • 左麻痺
            • 重度の注意障害
            • 感情のコントロールが難しい
            • 左上肢の麻痺
              • CtrlやAltなどが押せない
            • 空間認識能力の低下
              • 上下関係の把握が出来ない
          • 脳幹/小脳梗塞
            • 手先が安定せず震える
      • 視覚障害
        • ディスプレイが見えない・見えにくい
          • タッチタイプ必須
          • 見え方が個人、個人で異なる
            • 環境整備に時間が必要
        • スクリーンリーダー(読み上げソフト)を活用
          • ただ、位置などの空間把握能力が必要
      • 聴覚障害
        • 耳が聞こえない・聞こえにくい
        • 音声以外による意思疎通のための工夫が必要
    • 知的障害
      • 知能指数
        • 75以下
      • 読み書き計算、会話・判断することが困難
        • 言語による伝達が難しい
        • 学習障害
      • 一般的にストレスに弱い
        • こだわりが強い
      • コンピューターによる言語教育は有効
      • 注意力不足、読み取り能力を補うため、スクリーンリーダーを活用することも
      • 原因
        • 病理的要因
          • 身体的障害もある場合が多い
            • ダウン症など
          • コンピューターは重要なコミュニケーションツールとなる
        • 生理的要因
          • 大抵は軽度~中程度
    • 発達障害
      • 自閉症・アスペルガーなど
      • 知的レベルは保つ
      • 対人関係が苦手
      • 独自の世界観を持つ
      • 音声による伝達が難しい場合あり
        • 電話よりメールが有効な場合がある
      • あきやすく、こだわる
        • 多彩な刺激(文字・音声・色彩)であきさせない、興味を持たせるのは有効
    • 精神障害
      • 気分障害
        • うつなど
      • 思考障害
        • 妄想
      • 行動障害
      • 人格障害
      • 集中力の発揮がまちまち
        • できるときもあれば、全く駄目な場合も
      • ネットでのコミュニケーションはプラスにもマイナスにも
  • 障害に合わせた支援技術
    • 身体障害者
      • コンピューターによる対話
      • 入力装置に工夫が必要
        • キーボード
        • 音声入力
    • 視覚障害者
      • 視野拡大器
      • 音声認識装置
      • 音声出力装置
      • スクリーンリーダー
      • 点字ディスプレイ
        • 点字でテキストを出力するデバイス
    • 言語障害・聴覚障害
      • ゆっくり話したり聞き取れば分かることが多い
        • 障害により早口になる人も
      • 文字情報でのコミュニケーション
      • 失語症の場合、文章を入力させようとすると混乱してしまう
    • 発達障害・知的障害・精神障害
      • 軽度な場合は一人でも大丈夫
      • 重度な場合、支援が必要
        • デバイスの使い方が覚えられない
        • ただし、唯一のコミュニケーションツールとなる場合あり
        • 学習能力が低かったり、新しいことを受け入れない場合も
          • 刺激で興味を持たせる
            • 視覚
              • グラフィックス
              • アニメ
            • 聴覚
            • 触覚
              • キーボード
              • タッチスクリーン
  • 障害体験
    • 目をふさぎ、腕に5kgのおもりを付ける
    • スクリーンリーダー体験
      • 見た目ではなくHTMLソースを読み上げる
        • blogのサイドバーが先にあると、メインのコンテンツになかなかたどりつかない
        • 画像はAlt属性を読み上げる
          • 空の場合は「なし」と読み上げる
            • ソフトの改善が必要なんじゃね?
      • ショッピングサイト体験
        • 某熱帯雨林は評判が悪い
          • 読み上げを考慮していない
          • キーボードのみでの操t作が難しい
        • 某ゴールデンイーグルスの方がいい

 

効率10倍UP!? 秀丸IDE化法

次は私のセッション・・・だったのですが、ここでアクシデント発生。私のPCからプロジェクタに画像が映らなくなりました。

何度やってもダメだったので、最終的には@hiro55bsからPCを借りてやることに。ご迷惑おかけしました。

資料は次のスライドを見てください。

セッション後、何とか借用PCにてデモをするため、環境構築することに。

その間は質疑応答。

  • 質疑応答
    • (会場に向けて)使ってるエディタは何?
      • EmEditor
      • サクラエディタ
      • Macだから付属の

デモでは、実際の強調表示やアウトライン表示などの実例、マクロが動いているところなどを見せました。

自分のPCならもう少し色々と出来たのですが、残念。

 

ここで予定していたセッションは全て終わりましたが、残り時間でショートセッションをやることに。

 

デジタルサイネージについて

@hiro55bsが仕事とは別に、デジタルサイネージを検討することになったということで、その調査結果とパワーポイントによるデモ、また内容についての意見交換などが行われました。

 

これで全てのセッションが終わり、撤収。

なお、ここまでの内容は、#nds13にて確認できるので、そちらもどうぞ。

 

そして舞台は懇親会へ・・・

 

懇親会

会場は長岡駅前のBADEN-BADENでした。

(ドイツビールとソーセージの店。ただし、飲み放題はキリンの一番搾りか黒のみ。)

ここは料理が旨いので、お話しながら美味しい料理をたべ、大満足でした。

どんな話があったかちょい思い出せませんがf(^^;

 

まとめ

そんなこんなで、今回も非常に色々なジャンルの話が聞けてためになり、楽しかったです。次回は3/20を予定していますので、都合の付く方はぜひご参加ください。

第14回勉強会(2010/03/20) (長岡 開発者 勉強会(NDS))

関連エントリ

第13回長岡IT開発勉強会(NDS)に参加してきました | 長岡のホームページ制作とWebサイト作成のことなら新潟県長岡市の株式会社FUCOにおまかせください

長岡IT開発者勉強会(NDS)に行ってきた件。 - Devil’s advocate

Yuriko.Net ≫ 長岡IT勉強会資料「WordPressとKtai Styleで楽しいブログ生活」

[レポート] WordBench 新潟 20100116 in 長岡開発者勉強会 | Odysseygate.com

WordBench 新潟&長岡 開発者 勉強会(NDS) ? 20100116 | Lovelog+*

icoro : NDS第13回勉強会に行ってみた

第13回が開催されました! - 新潟系エンジニア

#nds13 第13回長岡IT開発者勉強会 - ハッシュタグクラウド

SeatNext: 長岡IT開発者勉強会 #13

posted @ 12:51 | Feedback (0)

2010年1月20日 #

Webページの選択箇所をtweetするscriptlet

まず間違いなく車輪の再発明だろうけど晒す。

javascript:(function(){var%20q=(document.all)?document.selection.createRange().text:(window.getSelection()+'');if(q!==''){q='\"'+q+'\"%20';}url_next='http://twitter.com/home/?status='+encodeURIComponent(q)+encodeURIComponent(document.title)+'%20'+encodeURIComponent(location.href);location.href=url_next})();

登録はこちらからどうぞ

[2010/1/21修正]

  • Webページの選択箇所を「"」で囲うように修正
  • 選択してない場合、先頭に空白が入ってしまっていたので修正

たとえば、このページで実行すると、次のようなテキストがtwitterのtweet画面に設定されます。

"まず間違いなく車輪の再発明だろうけど晒す。" Webページの選択箇所をtweetするscriptlet http://blogs.wankuma.com/masaru/archive/2010/01/20/185206.aspx

posted @ 21:44 | Feedback (0)

2010年1月18日 #

SeagateのアレをRMAしてみる~その3~

SeagateのアレをRMAしてみる~その1~

SeagateのアレをRMAしてみる~その2~

の完結編。

 

その2でHDDを送った後、Seagateに到着したらまずその到着メールが届きました。

Seagate RMS Receipt Acknowledgement RMA#: XXXXXXXXX

それからしばらくして、今度は送付したよのメールが。

Ship Advice for Shipper Number XXXXXXXXXX

そして、いよいよブツが届きました。

PO20100118_0001

結構でかい箱です。これを開けてみると・・・

PO20100118_0002

こんな感じで波々スポンジでサンドされています。このスポンジを取ると・・・

PO20100118_0003

がっちりと固定された、新しいHDDを拝むことができます。ちなみに同じ型のHDDみたいです。

PO20100118_0004

 

無事に帰ってきたので、こいつは今度ブートディスクに仕立てあげようかと思ってますが、それはまた、別の、話・・・

posted @ 23:29 | Feedback (2)

書籍:自由をつくる自在に生きる – 森 博嗣

 

「すべてがFになる」等の小説でおなじみの森博嗣さんによる、「自由」を扱った一冊。

森さんの小説が元々好きで、この本はたまたま書店で発見して購入しました。

 

目次

1章 人生の目的は自由の獲得である

2章 他者からの支配、社会からの支配

3章 身近に忍び寄る支配

4章 支配に対するレジスタンス

5章 やっかいなのは自分による支配

 

森さんは、知っている人は知っていると思いますが、かなりの「自由人」であるといえます(本人はまだまだ不自由だと思っているところもあるようですが)。

しかし、もちろん元々「自由」だったわけではもちろんなく、どのように「自由」を定義し、どうやって「自由」を獲得してきたのか、その方法を彼なりの視点から説明したのが本書です。

 

私なりに本書から感じたことは、外部からの支配、肉体的な制限による支配、自分の思い込みによる支配、それらに「支配されている」ことを認識し、その支配から脱却するため、とにかく「考え」て道を一歩一歩踏み出していこう、といったことです。

そしてこの考えは、今流行りの勝間さんの様々な著書や、Joel Spolskyの「射撃しつつ前進」にも通じるところがあり、「なるほど成功した人は、すべからくコツコツと努力しているのだな」と、少し納得した気分になりました。

 

実際にどのように「考える」のかは本書を読んでしていただくとして、最後に森さんが「自由」をどのように定義しているのか引用して、このエントリを終えたいと思います。

まえがきより

「自由というのは、自分の思ったとおりにできることです」

少しでも「不自由だな」「自由になりたいな」と思っている人には、ぜひお勧めしたい一冊です。

 

#そして今更だけど、@dankogaiも書評してたのね。

404 Blog Not Found:全てがF(ree)になる? - #書評_ - 自由をつくる 自在に生きる

posted @ 23:07 | Feedback (0)

2010年1月13日 #

1/16(土)-第13回長岡IT開発者勉強会に参加します

来たる1/16(土)、第13回長岡IT開発者勉強会が開催されます。

私も久しぶりに参加する予定です。また、秀丸ネタでひとつセッションも行います。

皆様お誘いあわせの上、ぜひご参加ください。

 

第13回勉強会(2010/01/16)

スペシャル企画!! WordPress祭り

日時

2010/01/16(土) 13:00~17:00

場所

長岡市 中央公民館 406教室
「美容室みょんみょん」「花のコメサン」のある交差点の通りを、少し進むと標識があるはずです。

バスを利用する場合
JR長岡駅前または厚生会館前で、
・[ 4番線]中央循環(外回り)
・[10番線]南循環(内回り)
・[ 6番線]西長岡・関原・大積行き
のいずれかのバスに乗り、千手3丁目停留所で下車。(約5分)バス停から徒歩1分。

参加料金

無料

内容

現在予定されているセッションです。(時間の都合や、初スピーカー優先の原則により変更する可能性があります)
  • 13:00~13:30
    準備、説明、役員会議
  • 13:30~16:30
    セッション
    • 13:30~14:30 (質疑応答20分)
      WordPressネタ
      • 入門的な内容
      • WordPress の携帯対応について
    • 15:00~15:40(質疑応答10分)
      障害者からみたWeb
    • 15:50~16:20(質疑応答10分)
      効率10倍UP!?秀丸IDE化法
    • 16:30~16:50
      LT、フリートーク
  • 後片付け&解散(17:00)

資料はこちらになります。勉強会の終了後に懇親会を実施します。

懇親会

人数が多くなければ、予約を取らずにブラブラと適当なお店に飛び込んで適当に注文します
人数多数のため会場を予約する予定です。予算は4000円以内におさめたいです
懇親会のみの参加もOKです。(連絡は@civicへ)ITと関係のない方の参加も歓迎です。

飲酒しない人に対する懇親会割引きは今回はやらない予定です。(期待していた方、申し訳ありません..)
実施しない理由は、今回は参加人数が多く会場の予約が必要となることと、飲み放題プランを適用したいためです。
飲まない方、いっぱい食べてください!!

参加申し込み

申し込みフォームはこちらです。

初参加でも、遠慮なく申し込んで下さい。
(毎回、どなたか初参加の方がいらっしゃいますので、常連ばかりで入りづらいということはないはずです)

 

posted @ 11:27 | Feedback (1)

2010年1月7日 #

デザインパターンを学ぶ~その23:Commandパターン(3)~

デザインパターンを学ぶ~その21:Commandパターン(1)~

デザインパターンを学ぶ~その22:Commandパターン(2)~

と続いたCommandパターンの最後は、Undo機能を実装してみましょう。手順は次の通り。

 

  1. Do、UndoメソッドをもつIUndoableCommandインターフェイスを定義します。
  2. public interface IUndoableCommand
    {
      void Do();
      void Undo();
    }
    
  3. Receiverを定義します。今回はサンプルとしてCounterクラスを考えます。
  4. public class Counter
    {
      public Counter(int initialValue)
      {
        Count = initialValue;
      }
    
      public void Up()
      {
        Count++;
      }
    
      public void Down()
      {
        Count--;
      }
    
      public int Count
      {
        get;
        private set;
      }
    }
    
  5. Counterクラスに対し、カウントアップ、ダウンを行うCommandクラスを定義します。
  6. public class CountUpCommand : IUndoableCommand
    {
      private Counter counter;
    
      public CountUpCommand(Counter counter)
      {
        this.counter = counter;
      }
    
      public void Do()
      {
        counter.Up();
      }
    
      public void Undo()
      {
        counter.Down();
      }
    }
    
    public class CountDownCommand : IUndoableCommand
    {
      private Counter counter;
    
      public CountDownCommand(Counter counter)
      {
        this.counter = counter;
      }
    
      public void Do()
      {
        counter.Down();
      }
    
      public void Undo()
      {
        counter.Up();
      }
    }
    
  7. Undoに備えて何もしないNullCommandクラスも定義します。
  8. public class NullCommand : IUndoableCommand
    {
      public void Do()
      {
      }
    
      public void Undo()
      {
      }
    }
    
  9. Invokerとして、CountManagerクラスを定義します。
  10. public class CountManager
    {
      private IUndoableCommand upCommand;   // カウントアップ用Command
      private IUndoableCommand downCommand; // カウントダウン用Command
      private IUndoableCommand undoCommand; // Undo用Command
    
      public CountManager(IUndoableCommand upCommand, IUndoableCommand downCommand)
      {
        // 引数で渡されたCommandをフィールド設定
        this.upCommand = upCommand;
        this.downCommand = downCommand;
        
        // 最初はUndo操作をしても何もしないので、
        // NullCommandをundoCommandに設定
        this.undoCommand = new NullCommand();
      }
    
      public void DoUp()
      {
        // カウントアップ実行
        upCommand.Do();
        // 実行したCommandをundoCommandに設定
        undoCommand = upCommand;
      }
    
      public void DoDown()
      {
        // カウントダウン実行
        downCommand.Do();
        // 実行したCommandをundoCommandに設定
        undoCommand = downCommand;
      }
    
      public void Undo()
      {
        // Undo実行
        undoCommand.Undo();
        // Undoを連続して行えないよう、
        // NullCommandを設定
        undoCommand = new NullCommand();
      }
    }
    

では、実行してみましょう。実行用コードは以下の通りです。

class Program
{
  static void Main(string[] args)
  {
    // 新規カウンター(Receiver)作成
    Counter counter = new Counter(10);
    Console.WriteLine(counter.Count);

    // カウントアップ、ダウン用Commandクラスのインスタンス作成
    CountUpCommand cuc = new CountUpCommand(counter);
    CountDownCommand cdc = new CountDownCommand(counter);

    // CountManager(Invoker)を作成
    CountManager cm = new CountManager(cuc, cdc);

    // カウントアップ
    cm.DoUp();
    Console.WriteLine(counter.Count);

    // カウントダウン
    cm.DoDown();
    Console.WriteLine(counter.Count);

    // Undo
    cm.Undo();
    Console.WriteLine(counter.Count);

    // Undo
    cm.Undo();
    Console.WriteLine(counter.Count);
  }
}

実行結果は以下の通り。

image

一度目のUndoでカウンターが元に戻り、二度目のUndoではカウンターに変化がないことが確認できます。

 

さて、ここまでのやり方は一度しかUndoが出来ないものでした。これを複数回Undo可能にするにはどうすればいいのでしょうか?

実はかなり簡単です。Invokerの中にStackとして実行したCommandを保持して、PopしながらUndoを行えばいいだけです。以下は、複数回のUndoを可能にしたCountManagerMultiUndoableです。

public class CountManagerMultiUndoable
{
  private IUndoableCommand upCommand;           // カウントアップ用Command
  private IUndoableCommand downCommand;         // カウントダウン用Command
  private Stack<IUndoableCommand> undoCommands; // Undo用CommandのStack

  public CountManagerMultiUndoable(IUndoableCommand upCommand, IUndoableCommand downCommand)
  {
    // 引数で渡されたCommandをフィールド設定
    this.upCommand = upCommand;
    this.downCommand = downCommand;

    // Stackを初期化
    undoCommands = new Stack<IUndoableCommand>();
  }

  public void DoUp()
  {
    // カウントアップ実行
    upCommand.Do();
    // 実行したCommandをStackにPush
    undoCommands.Push(upCommand);
  }

  public void DoDown()
  {
    // カウントダウン実行
    downCommand.Do();
    // 実行したCommandをStackにPush
    undoCommands.Push(downCommand);
  }

  public void Undo()
  {
    if (undoCommands.Count != 0)
    {
      // Stackが空でなければ、PopしてUndo実行
      var undoCommand = undoCommands.Pop();
      undoCommand.Undo();
    }
  }
}

では、実行してみましょう。先ほどと違って、Undoを3回行うようにしてみます。

class Program
{
  static void Main(string[] args)
  {
    // 新規カウンター(Receiver)作成
    Counter counter = new Counter(10);
    Console.WriteLine(counter.Count);

    // カウントアップ、ダウン用Commandクラスのインスタンス作成
    CountUpCommand cuc = new CountUpCommand(counter);
    CountDownCommand cdc = new CountDownCommand(counter);

    // CountManager(Invoker)を作成
    CountManagerMultiUndoable cm = new CountManagerMultiUndoable(cuc, cdc);

    // カウントアップ
    cm.DoUp();
    Console.WriteLine(counter.Count);

    // カウントダウン
    cm.DoDown();
    Console.WriteLine(counter.Count);

    // Undo
    cm.Undo();
    Console.WriteLine(counter.Count);

    // Undo
    cm.Undo();
    Console.WriteLine(counter.Count);

    // Undo
    cm.Undo();
    Console.WriteLine(counter.Count);
  }
}

実行結果は以下の通りです。

image

2度Undoが行われ、3度目は何もカウンターに変化がないことが確認できます。

 

ここまで3回にわたりCommandパターンを紹介しましたが、いかがでしたでしょうか?

Commandパターンは他にも、

  • QueueにCommandオブジェクトを登録して順次呼び出す
  • Commandオブジェクトを永続化して、必要な際に取り出して呼び出す
  • Commandオブジェクトを直列化(シリアライズ)して、ネットワークなどの境界を越えて実行

など、色々と活用する場面があるようです。

私も今後もどのように有効に活用できるか考えていきたいと思います。

 

昨年はまったくと言っていいほど進まなかった、このデザインパターンシリーズ。今年はがんばってやっていこうと思います。次回は「Adapterパターン」に入っていくつもりですので、今後ともお付き合いをお願いします。

なお、今後コードはC#のみとさせてもらいます。案外VBにportするのが大変なものでf(^^;

posted @ 23:45 | Feedback (0)

2010年1月1日 #

新年のご挨拶

あけましておめでとうございます。

 

いよいよ2010年が始まりました。

大晦日、教育テレビで過去の映像が紹介されていて、そこに出てきた松下幸之助さんがこんなことをおっしゃっていました。

「資本主義も社会主義も共産主義もない新しい時代が早くて50年、遅くとも100年後にはやってくる」

これが1962年の言葉です。まだ、戦後間もない時代にこんなことを言っていたことに驚きなのですが、昨年からの世間はまさに上で言ったような時代への過渡期のように感じます。

そんな時代ですので、政治、経済ともなかなかに厳しい昨今ですが、皆様にとって明るい一年となりますように!

 

本年もよろしくお願いいたします。

posted @ 7:42 | Feedback (2)

2009年12月30日 #

年末のご挨拶

後2日を残していますが、早めに。

 

まずは、当初の目標から振り返ってみます。昨年のエントリを見直してみたらこんなこと書いていました。

ただ、心残りなのは、blogでのデザインパターンシリーズが一向に進まなかったことです。最近は徐々に時間を取れるようにもなってきましたし、急がずに最後までいけるよう頑張ります。

さらには、宣言してしまった家計簿ソフトの開発。こちらもぼちぼちと進めていきます。

うわー、両方出来てないや・・・

ただ、今年は思いもよらない、とあるプロジェクトの作業などにほとんどのリソースを割いたので仕方ないかなぁと言い訳。すみません、次こそはがんばります。

 

コミュニティ活動については、相変わらずわんくま勉強会には参加できませんでした。が、長岡IT開発者勉強会(NDS)では、スピーカーとして3回登壇しましたし、Ruby on Railsに触れたり、参加者とtwitterでさらにつながってみたりと、なかなかに充実していたと感じています。

また、12月頭には長岡のtwittererが一堂に会して忘年会を行うなど、なかなか愉快なことになっています。昨年の年末にこんなことになっているとは予想もできませんでした。twitterがここまではやるとも思ってませんでしたし。

来年はそろそろ息子も大きくなってきましたし、上記とあるプロジェクトも全てのリソースを割かなくてはならないほどの状況は脱しましたので、今まで以上に積極的にコミュニティ活動を行っていくつもりです。

そんなわけで、第一弾はNDSの第13回勉強会が1/16にあり、そこで秀丸IDE化についてセッションします。お暇な方はぜひ。

 

あとは、仕事、プライベートについてですね。

まずは、今年とうとう家を建てちゃいました。それにともない、確定申告が大変なことになるので、がんばらないといけませんね。ただ、おかげで行動の拠点が定まりましたので、主に気持ちの上で色々と楽になりました。

仕事では、会社に「(子供が小さいうちは)なるべく出張がないように」とお願いしていたこともあり、ほとんど自社で様々なプロジェクトをちぎっては投げ、ちぎっては投げ状態でした。

そんな中、Javaでしたがライブラリというかフレームワークと言うか、「指定されたフレームワークに皮をかぶせるお仕事」が出来たのは幸いでした。数年前から地道に蓄えてきた知識を、ようやく実践の場で試せる機会が出来ましたので。ただ、実際やってみると、楽しいけど大変ですねライブラリ作るのって。その節は主にtwitterで色々な方にお世話になりました。ありがとうございました。

あとは、プロジェクトのサブのサブチーム程度のところで、管理者業務を経験することもできました。中身はまぁちょっとあれでしたが、納期には間に合わせたので結果は及第点かなと。ただし、もう少しうまく回せばメンバーの負担も多少は軽減できただろうなと思うところもあり、そこは反省点として今後に生かしていくつもりです。

#そもそもの作業量と納期がおかしいことはありますが、ね・・・

 

さて、来年はとうとう「三十路」に踏み入れる年となります。なんだか言い表しようのない焦燥感に駆られますが、まずは自分の体調、生活を第一に、無理せず仕事もコミュニティ活動も行っていくようにしたいと思います。身体や家族をないがしろにしても意味はありませんから。

その上で、より一層のクオリティ、パフォーマンスを発揮できるよう、自らを磨きあげることも忘れないようにしていきたいと思います。

 

それでは、みなさま今年も大変お世話になりました。今後ともよろしくお願いします。

 

良いお年を!

posted @ 7:51 | Feedback (0)

2009年12月26日 #

SeagateのアレをRMAしてみる~その2~

SeagateのアレをRMAしてみる~その1~の続き。

ようやく100均で材料をそろえたので、今回は梱包について。

 

材料

  • 100均で仕入れた適当な箱
     PO20091226_0034
  • 100均で仕入れた洗車用スポンジ×2
    PO20091226_0035
  • 静電気防止袋(Amazonでポチった)

 

手順

  1. HDDを静電気防止袋に入れます。
     PO20091226_0032
  2. 箱に洗車用スポンジのでこぼこした方を上に詰め込みます。
    PO20091226_0037
    ↓これをこんな感じで
    PO20091226_0038
  3. その上にHDDを置きます。
    PO20091226_0039
  4. HDDを挟み込むように、もう1つの洗車用スポンジをのせます。
    PO20091226_0040
  5. 無理やり押し込んで、箱のふたをテープで固定します。
    PO20091226_0041
  6. RMA申請時に届いたメールについていた、RMA番号付きのラベルを印刷して貼り付けます。
    image

 

Seagateのサイトにある梱包方法とは違いますが、がっちり固定されてるので、まぁいいかなーと。

あとは、ラベルに書かれた宛先に送るだけです。今日、明日のうちに発送する予定です。

この続きは発送後に。

posted @ 9:52 | Feedback (1)

2009年12月11日 #

XElementをXmlNodeに変換

ちょっと必要になったので。

#コードはXMLリテラルでXElementが簡単に作れるVBで。

 

その1:XmlDocument.LoadXmlメソッドにXElementをToStringして食わせる

Dim xelm = _
  <parent>
    <child>
      ほげほげ
    </child>
  </parent>

Dim xmlDoc As New XmlDocument()
xmlDoc.LoadXml(xelm.ToString())

その2:XmlDocument.LoadメソッドにXElement.CreateReaderで作成したXmlReaderを食わせる

Dim xelm = _
  <parent>
    <child>
      ほげほげ
    </child>
  </parent>

Using reader As XmlReader = xelm.CreateReader()
  Dim xmlDoc As New XmlDocument()
  xmlDoc.Load(reader)
End Using

 

なんか他にいい方法があったら教えてください。

posted @ 22:11 | Feedback (0)