<br />
<b>Warning</b>:  Undefined array key "media" in <b>/home/uid008/htdocs/dokuwiki-20240130/feed.php</b> on line <b>235</b><br />
<br />
<b>Warning</b>:  Undefined array key "media" in <b>/home/uid008/htdocs/dokuwiki-20240130/feed.php</b> on line <b>305</b><br />
<br />
<b>Warning</b>:  Undefined array key "media" in <b>/home/uid008/htdocs/dokuwiki-20240130/feed.php</b> on line <b>235</b><br />
<br />
<b>Warning</b>:  Undefined array key "media" in <b>/home/uid008/htdocs/dokuwiki-20240130/feed.php</b> on line <b>305</b><br />
<br />
<b>Warning</b>:  Undefined array key "media" in <b>/home/uid008/htdocs/dokuwiki-20240130/feed.php</b> on line <b>235</b><br />
<br />
<b>Warning</b>:  Undefined array key "media" in <b>/home/uid008/htdocs/dokuwiki-20240130/feed.php</b> on line <b>305</b><br />
<br />
<b>Warning</b>:  Undefined array key "media" in <b>/home/uid008/htdocs/dokuwiki-20240130/feed.php</b> on line <b>235</b><br />
<br />
<b>Warning</b>:  Undefined array key "media" in <b>/home/uid008/htdocs/dokuwiki-20240130/feed.php</b> on line <b>305</b><br />
<br />
<b>Warning</b>:  Undefined array key "media" in <b>/home/uid008/htdocs/dokuwiki-20240130/feed.php</b> on line <b>235</b><br />
<br />
<b>Warning</b>:  Undefined array key "media" in <b>/home/uid008/htdocs/dokuwiki-20240130/feed.php</b> on line <b>305</b><br />
<br />
<b>Warning</b>:  Undefined array key "media" in <b>/home/uid008/htdocs/dokuwiki-20240130/feed.php</b> on line <b>235</b><br />
<br />
<b>Warning</b>:  Undefined array key "media" in <b>/home/uid008/htdocs/dokuwiki-20240130/feed.php</b> on line <b>305</b><br />
<br />
<b>Warning</b>:  Undefined array key "media" in <b>/home/uid008/htdocs/dokuwiki-20240130/feed.php</b> on line <b>235</b><br />
<br />
<b>Warning</b>:  Undefined array key "media" in <b>/home/uid008/htdocs/dokuwiki-20240130/feed.php</b> on line <b>305</b><br />
<br />
<b>Warning</b>:  Undefined array key "media" in <b>/home/uid008/htdocs/dokuwiki-20240130/feed.php</b> on line <b>235</b><br />
<br />
<b>Warning</b>:  Undefined array key "media" in <b>/home/uid008/htdocs/dokuwiki-20240130/feed.php</b> on line <b>305</b><br />
<br />
<b>Warning</b>:  Undefined array key "media" in <b>/home/uid008/htdocs/dokuwiki-20240130/feed.php</b> on line <b>235</b><br />
<br />
<b>Warning</b>:  Undefined array key "media" in <b>/home/uid008/htdocs/dokuwiki-20240130/feed.php</b> on line <b>305</b><br />
<br />
<b>Warning</b>:  Undefined array key "media" in <b>/home/uid008/htdocs/dokuwiki-20240130/feed.php</b> on line <b>235</b><br />
<br />
<b>Warning</b>:  Undefined array key "media" in <b>/home/uid008/htdocs/dokuwiki-20240130/feed.php</b> on line <b>305</b><br />
<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://ruby-alone.org/wiki/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://ruby-alone.org/wiki/feed.php">
        <title>alone-doc kitchen_timer</title>
        <description></description>
        <link>https://ruby-alone.org/wiki/</link>
        <image rdf:resource="https://ruby-alone.org/wiki/lib/tpl/dokuwiki/images/favicon.ico" />
       <dc:date>2026-04-16T08:49:48+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:start&amp;rev=1416533157&amp;do=diff"/>
                <rdf:li rdf:resource="https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E3%81%BE%E3%81%A8%E3%82%81&amp;rev=1416534661&amp;do=diff"/>
                <rdf:li rdf:resource="https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%82%B5%E3%82%A4%E3%83%89%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AE%E9%96%8B%E7%99%BA&amp;rev=1416471252&amp;do=diff"/>
                <rdf:li rdf:resource="https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%81%AE%E9%96%8B%E7%99%BA&amp;rev=1416500555&amp;do=diff"/>
                <rdf:li rdf:resource="https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E4%BB%95%E4%B8%8A%E3%81%92&amp;rev=1416473736&amp;do=diff"/>
                <rdf:li rdf:resource="https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%A6%82%E8%A6%81&amp;rev=1416500147&amp;do=diff"/>
                <rdf:li rdf:resource="https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E5%B8%B8%E9%A7%90%E9%83%A8%E3%81%AE%E9%96%8B%E7%99%BA_%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0&amp;rev=1416500205&amp;do=diff"/>
                <rdf:li rdf:resource="https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E5%B8%B8%E9%A7%90%E9%83%A8%E3%81%AE%E9%96%8B%E7%99%BA_%E3%83%A2%E3%83%87%E3%83%AB%E3%83%99%E3%83%BC%E3%82%B9%E8%A8%AD%E8%A8%88&amp;rev=1416499992&amp;do=diff"/>
                <rdf:li rdf:resource="https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E7%94%BB%E9%9D%A2%E9%96%A2%E9%80%A3%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E9%96%8B%E7%99%BA&amp;rev=1416470766&amp;do=diff"/>
                <rdf:li rdf:resource="https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E9%96%8B%E7%99%BA%E3%83%BB%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83%E3%81%AE%E6%BA%96%E5%82%99&amp;rev=1416473060&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://ruby-alone.org/wiki/lib/tpl/dokuwiki/images/favicon.ico">
        <title>alone-doc</title>
        <link>https://ruby-alone.org/wiki/</link>
        <url>https://ruby-alone.org/wiki/lib/tpl/dokuwiki/images/favicon.ico</url>
    </image>
    <item rdf:about="https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:start&amp;rev=1416533157&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2014-11-21T10:25:57+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>kitchen_timer:start</title>
        <link>https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:start&amp;rev=1416533157&amp;do=diff</link>
        <description>キッチンタイマーを作ってみる

キッチンタイマーを題材に、状態遷移を使って設計、実装してみます。


外観は以下の仕様とします。

	*  操作画面には、ウェブブラウザを使う。
	*  最初に分と秒を入力し、開始を押すことでタイマーが開始する。</description>
    </item>
    <item rdf:about="https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E3%81%BE%E3%81%A8%E3%82%81&amp;rev=1416534661&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2014-11-21T10:51:01+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>kitchen_timer:まとめ</title>
        <link>https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E3%81%BE%E3%81%A8%E3%82%81&amp;rev=1416534661&amp;do=diff</link>
        <description>まとめ

以上、キッチンタイマーを例題に、FreeBSD上に専用機を開発しました。

実際の環境では、ブラウザの動作仕様やCGIタイムアウトの仕様、NAT越しの場合にはNATの仕様など、
さまざまな外的要因が重なり、安定的に動作させるには環境に合わせてもう少し注意深く調整が必要になるでしょう。</description>
    </item>
    <item rdf:about="https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%82%B5%E3%82%A4%E3%83%89%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AE%E9%96%8B%E7%99%BA&amp;rev=1416471252&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2014-11-20T17:14:12+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>kitchen_timer:クライアントサイドスクリプトの開発</title>
        <link>https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%82%B5%E3%82%A4%E3%83%89%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AE%E9%96%8B%E7%99%BA&amp;rev=1416471252&amp;do=diff</link>
        <description>クライアントサイドスクリプトの開発

JavaScriptファイル

これも、chatサンプルからコピーして作成すると良いですが、chatサンプルのものは汎用性が高くなるようにつくってあるので、それからほとんどの部分を消すようになります。</description>
    </item>
    <item rdf:about="https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%81%AE%E9%96%8B%E7%99%BA&amp;rev=1416500555&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2014-11-21T01:22:35+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>kitchen_timer:コントローラの開発</title>
        <link>https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%81%AE%E9%96%8B%E7%99%BA&amp;rev=1416500555&amp;do=diff</link>
        <description>コントローラの開発

コントローラは、クライアントスクリプト（JavaScript）とワーカーの仲介がほとんどで、かつそれらはフレームワークによって隠蔽されているので、非常に単純です。</description>
    </item>
    <item rdf:about="https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E4%BB%95%E4%B8%8A%E3%81%92&amp;rev=1416473736&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2014-11-20T17:55:36+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>kitchen_timer:仕上げ</title>
        <link>https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E4%BB%95%E4%B8%8A%E3%81%92&amp;rev=1416473736&amp;do=diff</link>
        <description>仕上げ

ここまでで、全体動作可能な状態になりました。

正しく動作したでしょうか。

常駐部のデーモン化と自動起動

常駐部は最終的にはシステム起動時に自動起動し、デーモンとなるようにします。</description>
    </item>
    <item rdf:about="https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%A6%82%E8%A6%81&amp;rev=1416500147&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2014-11-21T01:15:47+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>kitchen_timer:作成するファイルの概要</title>
        <link>https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%A6%82%E8%A6%81&amp;rev=1416500147&amp;do=diff</link>
        <description>作成するファイルの概要



常駐部

bin/kitchen_timer.rb

	*  タイマーのメイン動作を受け持つ。
	*  ワーカー(AlWorker)として作成し、システムに常駐する。
	*  ブラウザからの指示をIPCで受け取り、ServerSentEventsを使ってリアルタイムにブラウザへ表示を行う。</description>
    </item>
    <item rdf:about="https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E5%B8%B8%E9%A7%90%E9%83%A8%E3%81%AE%E9%96%8B%E7%99%BA_%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0&amp;rev=1416500205&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2014-11-21T01:16:45+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>kitchen_timer:常駐部の開発_コーディング</title>
        <link>https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E5%B8%B8%E9%A7%90%E9%83%A8%E3%81%AE%E9%96%8B%E7%99%BA_%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0&amp;rev=1416500205&amp;do=diff</link>
        <description>常駐部の開発

コーディング

ファイルを置く場所をbin以下とし、ディレクトリを作成します。


cd /usr/local/kitchen_timer
mkdir bin
vi kitchen_timer.rb


ひな形の作成

AlWorker基本機能の項を参照しながら、まずひな形を作り、必要な初期化コードを入れます。</description>
    </item>
    <item rdf:about="https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E5%B8%B8%E9%A7%90%E9%83%A8%E3%81%AE%E9%96%8B%E7%99%BA_%E3%83%A2%E3%83%87%E3%83%AB%E3%83%99%E3%83%BC%E3%82%B9%E8%A8%AD%E8%A8%88&amp;rev=1416499992&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2014-11-21T01:13:12+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>kitchen_timer:常駐部の開発_モデルベース設計</title>
        <link>https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E5%B8%B8%E9%A7%90%E9%83%A8%E3%81%AE%E9%96%8B%E7%99%BA_%E3%83%A2%E3%83%87%E3%83%AB%E3%83%99%E3%83%BC%E3%82%B9%E8%A8%AD%E8%A8%88&amp;rev=1416499992&amp;do=diff</link>
        <description>常駐部の開発

状態遷移図を作成する

キッチンタイマーの動作を想像しながら状態を書き出し、遷移するためのイベントを記述します。



	*  起動直後は、数字入力モードです。
	*  数字キーで数字が入力できます。</description>
    </item>
    <item rdf:about="https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E7%94%BB%E9%9D%A2%E9%96%A2%E9%80%A3%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E9%96%8B%E7%99%BA&amp;rev=1416470766&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2014-11-20T17:06:06+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>kitchen_timer:画面関連ファイルの開発</title>
        <link>https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E7%94%BB%E9%9D%A2%E9%96%A2%E9%80%A3%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E9%96%8B%E7%99%BA&amp;rev=1416470766&amp;do=diff</link>
        <description>画面関連ファイルの開発

HTMLテンプレートファイル

erbを採用しています。これもchatサンプルプログラムからコピーして使用します。


cd /usr/local/kitchen_timer
cp controllers.bak/chat/index.rhtml controllers</description>
    </item>
    <item rdf:about="https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E9%96%8B%E7%99%BA%E3%83%BB%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83%E3%81%AE%E6%BA%96%E5%82%99&amp;rev=1416473060&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2014-11-20T17:44:20+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>kitchen_timer:開発・実行環境の準備</title>
        <link>https://ruby-alone.org/wiki/doku.php?id=kitchen_timer:%E9%96%8B%E7%99%BA%E3%83%BB%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83%E3%81%AE%E6%BA%96%E5%82%99&amp;rev=1416473060&amp;do=diff</link>
        <description>開発・実行環境の準備

ここでは、FreeBSD10.1上に動作環境を構築する例を紹介します。

VMwareを使いますが、そこは本質ではないので省略します。

OSインストール

&lt;ftp://ftp3.jp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/10.1/&gt;から
FreeBSD-10.1-RELEASE-i386-disc1.isoをダウンロードし、VMwareの新規VMの起動ディスクに設定します。</description>
    </item>
</rdf:RDF>
