<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/kiminori_hirose/">
    <title>MemoMemo</title>
    <link>http://w.atwiki.jp/kiminori_hirose/</link>
    <atom:link href="https://w.atwiki.jp/kiminori_hirose/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>MemoMemo</description>

    <dc:language>ja</dc:language>
    <dc:date>2012-06-20T22:00:43+09:00</dc:date>
    <utime>1340197243</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/kiminori_hirose/pages/9.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kiminori_hirose/pages/16.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kiminori_hirose/pages/19.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kiminori_hirose/pages/18.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kiminori_hirose/pages/2.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kiminori_hirose/pages/17.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kiminori_hirose/pages/15.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kiminori_hirose/pages/14.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kiminori_hirose/pages/13.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kiminori_hirose/pages/10.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/kiminori_hirose/pages/9.html">
    <title>Flex</title>
    <link>https://w.atwiki.jp/kiminori_hirose/pages/9.html</link>
    <description>
      *Flex 2.28

**アクションの前に常に実行されるアクションを定義したい。
YY_USER_ACTIONマクロに定義します。ただし、&lt;&lt;EOF&gt;&gt;のアクションの前には実行されないようです。例のようにバイト数カウンターを作成するときにyymore()関数、yyless()関数、unput()関数、input()関数を使用した場合はアクション内でカウンターを編集する必要があります。

&gt;例：#define YY_USER_ACTION nCounter+=yyleng;

**初期時だけ実行されるアクションを定義したい。
YY_USER_INITマクロに定義します。ただし、このマクロが実行される時点では、yyout関数は利用できません。

&gt;例：#define YY_USER_INIT nCounter=0;

**マッチした文字列をなかったことにして、入力ストリームに戻したい。
yyless(n)関数を使用します。マッチした文字列の先頭からnで指定したバイト数をyytextに残して、それ以降の文字列を入力ストリームに戻します。yyless関数を呼び出した後にはyytextやyylengの値が変更されます。n=0のときはyytextの文字列すべてを入力ストリームに戻します。

&gt;例：[0-9]+  { yyless(0); }

**マッチした文字列を、次にマッチする文字列と結合したい。
yymore()関数を使用します。yytext文字列に結合した文字列が入ります。

&gt;例：[0-9]+  { yymore(); }

**デバッグ情報を標準エラーで出力したい。
flexのファイルに %option debug を設定します。次にyyset_debug()関数でデバッグ値を１に設定します。

flexファイル内で
&gt;例：%option debug

字句解析器を呼び出すプログラムで
&gt;例：
&gt;yyscan_t scanner;
&gt;yylex_init(&amp;scanner);
&gt;yyset_debug(1,scanner);

**字句解析器を標準入力ではなく、文字列から処理させたい。
yy_switch_to_buffer()関数とyy_scan_bytes()関数とを組み合わせて使用します。

&gt;例：
&gt;char buf[] = &quot;1+2+3=\n&quot;;
&gt;yyscan_t scanner;
&gt;yylex_init(&amp;scanner);
&gt;yy_switch_to_buffer( yy_scan_bytes(buf,sizeof(buf),scanner ), scanner );    </description>
    <dc:date>2012-06-20T22:00:43+09:00</dc:date>
    <utime>1340197243</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kiminori_hirose/pages/16.html">
    <title>Rails</title>
    <link>https://w.atwiki.jp/kiminori_hirose/pages/16.html</link>
    <description>
      *Rails 1.2.3 のメモ
**作成手順
***プロジェクトの作成
projectプロジェクトを作成する。
&gt;$ rails project
***データベースの設定
config/database.ymlを[[MySQL]]用に編集する。(testとproductionもdevelopmentと同様に変更しておく。)
&gt;development:
&gt;&amp;nbsp;&amp;nbsp;adapter: mysql
&gt;&amp;nbsp;&amp;nbsp;database: project_development
&gt;&amp;nbsp;&amp;nbsp;username: {MySQLのユーザ名}
&gt;&amp;nbsp;&amp;nbsp;password: {パスワード}
&gt;&amp;nbsp;&amp;nbsp;socket: /var/lib/mysql/mysql.sock&amp;nbsp;&amp;nbsp;#ソケットのとき
&gt;&amp;nbsp;&amp;nbsp;host: localhost&amp;nbsp;&amp;nbsp;#TCP/IPのときのMySQLのホスト名
&gt;&amp;nbsp;&amp;nbsp;port: 3306&amp;nbsp;&amp;nbsp;#TCP/IPのときのMySQLのポート番号。指定してないときは、3306になる
&gt;&amp;nbsp;&amp;nbsp;encoding: utf8&amp;nbsp;&amp;nbsp;#文字化け防止のためデータベースの文字コードを設定する。
***文字コード(UTF-8)の指定
app/controllers/application.brにHTTPレスポンスで返すContent-Typeを追加する。
&gt;class ApplicationController &lt; ActionController::Base
&gt;&amp;nbsp;&amp;nbsp;after_filter :set_charset
&gt;protected
&gt;&amp;nbsp;&amp;nbsp;def set_charset
&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;headers[&quot;Content-Type&quot;] = &#039;text/html; charset=UTF-8&#039;
&gt;&amp;nbsp;&amp;nbsp;end
&gt;end
config/environment.rbにRailsの内部文字コードを追加する。
&gt;$KCODE = &#039;UTF8&#039;
**Tips
***Railsの規約にあわない名前を持つテーブルのためにset_table_name を使う
config/environment.rbファイルを編集
&gt;ActiveRecord::Base.pluralize_table_names = false
app/controllers/entity.rbを編集
&gt;class Entity &lt; ActiveRecord::Base
&gt;&amp;nbsp;&amp;nbsp;set_table_name &quot;entity&quot;
&gt;end
***主キーがidではないテーブルのためにset_primary_keyを使う
app/controllers/entity.rbを編集
&gt;class Entity &lt; ActiveRecord::Base
&gt;&amp;nbsp;&amp;nbsp;set_primary_key &quot;entity_id&quot;
&gt;end
***ActiveRecordで外部キーを指定する
&gt;class Person &lt; ActiveRecord::Base
&gt;&amp;nbsp;&amp;nbsp;belongs_to :company
&gt;&amp;nbsp;&amp;nbsp;validates_associated :campany
&gt;end
***独自の単数形と複数形を定義する
config/environment.rbを編集
&gt;Inflector.inflections do |inflect|
&gt;&amp;nbsp;&amp;nbsp;inflect.irregular &#039;leaf&#039;, &#039;leaves&#039;
&gt;end
***セッションの有効期限を設定する
プロジェクト全体で設定するには、config/environment.rbを編集
&gt;ActionController::Base.session_options[:session_expires] = 15.minutes.from_now
特定のコントローラで設定するには、各コントローラを編集
&gt;class PersonController &lt; Application
&gt;&amp;nbsp;&amp;nbsp;session :session_expires =&gt; 10.minutes.from_now
&gt;end
***HTMLエスケープとURIエンコード
HTMLエスケープ
&gt;&lt;a href=&quot;&lt;%=h &#039;http://localhost/q=東京&#039; -%&gt;&quot;&gt;LINK&lt;/a&gt;
URIエンコード
&gt;&lt;a href=&quot;&lt;%=u &#039;http://localhost/q=東京&#039; -%&gt;&quot;&gt;LINK&lt;/a&gt;    </description>
    <dc:date>2007-08-24T00:14:24+09:00</dc:date>
    <utime>1187882064</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kiminori_hirose/pages/19.html">
    <title>- Logger</title>
    <link>https://w.atwiki.jp/kiminori_hirose/pages/19.html</link>
    <description>
      *Logger on Rails
**ログを記録する。
&gt;logger.debug &#039;DEBUG TEXT&#039;
&gt;logger.info &#039;INFORMATION TEXT&#039;
&gt;logger.warn &#039;WARNING TEXT&#039;
&gt;logger.error &#039;ERROR TEXT&#039;
&gt;logger.fatal &#039;FATAL ERROR TEXT&#039;
**ログにヘッダとフッタを付ける。
&gt;logger.around_info &#039;HEADER TEXT&#039;, &#039;FOOTER TEXT&#039; do
&gt;&amp;nbsp;&amp;nbsp;logger.info &#039;TEST TEXT&#039;
&gt;end
**出力するログレベルを設定する
config/environment.rb、config/environments/*.rbを編集する
&gt;config.log_level = :error    </description>
    <dc:date>2007-08-24T00:04:43+09:00</dc:date>
    <utime>1187881483</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kiminori_hirose/pages/18.html">
    <title>Validate on ActiveRecord</title>
    <link>https://w.atwiki.jp/kiminori_hirose/pages/18.html</link>
    <description>
      *一覧

|validates_acceptance_of|同意|:on, :message, :if, :accept|
|validates_associated|関連|:on, :message, :if|
|validates_confirmation_of|確認|:on, :message, :if|
|validates_each|要素|:on, :if, :allow_nil|
|validates_exclusion_of|範囲外|:on, :message, :if, :in(必須), :allow_nil|
|validates_format_of|正規表現|:on, :message, :if, :with(必須)|
|validates_inclusion_of|範囲|:on, :message, :if, :in(必須), :allow_nil|
|validates_length_of|長さ|:on, :message, :if, :minimun, :maximun, :within, :in, :allow_nil, :wrong_length, :too_long, :too_short|
|validates_numericality_of|数値|:on, :message, :if, :allow_nil, :only_integer|
|validates_presence_of|存在|:on, :message, :if|
|validates_uniquness_of|一意性|:on, :message, :if, :scope, :case_sensitive|
*validates_acceptance_of

&gt;class Entry &lt; ActiveRecord::Base
&gt;&amp;nbsp;&amp;nbsp;validates_acceptance_of :accepted, :accept=&gt;&#039;ok&#039;
&gt;end    </description>
    <dc:date>2007-08-20T23:12:18+09:00</dc:date>
    <utime>1187619138</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kiminori_hirose/pages/2.html">
    <title>Menu</title>
    <link>https://w.atwiki.jp/kiminori_hirose/pages/2.html</link>
    <description>
      Menu
-[[Top]]
-[[Vi]]
-[[C++]]
-[[Bison]]
-[[Flex]]
-[[Struts]]
-[[MySQL]]
-[[Rails]]
-[[ActiveRecord on Rails]]
-[[Validate on ActiveRecord]]    </description>
    <dc:date>2007-08-20T22:47:27+09:00</dc:date>
    <utime>1187617647</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kiminori_hirose/pages/17.html">
    <title>ActiveRecord on Rails</title>
    <link>https://w.atwiki.jp/kiminori_hirose/pages/17.html</link>
    <description>
      *検索(SELECT)
**SELECT * FROM people;
peopleにはPersonオブジェクが格納された配列で返される。
&gt;people = Person.find :all
**SELECT * FROM people LIMIT 1;
&gt;person = Person.find :first
**SELECT * FROM people WHERE id = 1;
&gt;people = Person.find :all, :conditions=&gt;[&quot;id=?&quot;,1]

&gt;people = Person.find :all, :conditions=&gt;[&quot;id=:id&quot;,{:id=&gt;1}]
**SELECT * FROM people ORDER BY id DESC;
&gt;people = Person.find :all, :order=&gt;&quot;id DESC&quot;
**SELECT * FROM people LIMIT 10;
&gt;people = Person.find :all, :limit=&gt;10
**SELECT name AS shimei FROM people;
&gt;people = Person.find :all, :select=&gt;&quot;name AS shimei&quot;
**SELECT company_id, count(*) AS cnt FROM people GROUP BY company_id;
&gt;people = Person.find :all :select=&gt;&quot;id, count(*) AS cnt&quot;, :group=&gt;&quot;company_id&quot;
**SELECT * FROM people LEFT OUTER JOIN companies ON people.company_id=companies.id;
&gt;people = Person.find :all :joins=&gt;&quot;LEFT OUTER JOIN companies ON people.comapny_id=companies.id&quot;
1対1、1対多、多対多の関係設定をしている場合
&gt;people = Preson.find :all :include=&gt;:company
**直接SQLを入力
&gt;Person.find_by_sql [&quot;SELECT * FROM people WHERE id=:id&quot;, :id=&gt;1]

&gt;Person.find_by_sql [&lt;&lt;-EOF, id=&gt;1]
&gt;&amp;nbsp;&amp;nbsp;SELECT *
&gt;&amp;nbsp;&amp;nbsp;FROM people
&gt;&amp;nbsp;&amp;nbsp;WHERE id=:id
&gt;EOF
*挿入(INSERT)
**INSERT INTO people (name) VALUES (&#039;山田太郎&#039;);
A. saveメッソドを実行するまでDBに書き込まれない方法
&gt;person = Person.new
&gt;person.name = &#039;山田太郎&#039;
&gt;person.save
B.即座にDBに書き込む方法
&gt;Person.create :name=&gt;&#039;山田太郎&#039;
*更新(UPDATE)
**UPDATE people SET name = &#039;山田花子&#039; WHERE id = 1;
&gt;person = Person.find 1
&gt;person.name &#039;山田花子&#039;
&gt;person.save

&gt;Person.update 1, :name=&gt;4

&gt;person = Person.find 1
&gt;person.update_attribute :name, &#039;山田花子&#039;

&gt;person = Person.find 1
&gt;person.update_attributes :name=&gt;&#039;山田花子&#039;

&gt;Person.update_all &quot;name = &#039;山田花子&#039;&quot;, &quot;id = 1&quot;
***UPDATE people SET name = &#039;山田花子&#039;
&gt;Person.update_all &quot;name = &#039;山田花子&#039;&quot;
*削除(DELETE)
削除には通常destroyメソッドを使用する。deleteメソッドでは[[Rails]]の整合性チェックを無視して削除できる。
**DELETE FROM people WHERE id = 1;
&gt;Person.destroy 1

&gt;Person.delete 1

&gt;person = Person.find 1
&gt;person.destroy

&gt;person = Person.find 1
&gt;person.delete

&gt;Person.destroy_all &quot;id=1&quot;

&gt;Person.delete_all &quot;id=1&quot;
**DELETE FROM people;
&gt;Person.destroy_all

&gt;Person.delete_all
*関係（リレーション）
**【１対１】
|BGCOLOR(#666):COLOR(#FFF):CENTER:people||BGCOLOR(#666):COLOR(#FFF):CENTER:profiles|
|id|-&gt;|id|
|name||person_id|
|||job|
&gt;class Person &lt; ActiveRecord::Base
&gt;&amp;nbsp;&amp;nbsp;has_one :profile
&gt;end

&gt;class Profile &lt; ActiveRecord::Base
&gt;&amp;nbsp;&amp;nbsp;belongs_to :person
&gt;end
**【１対多】
|BGCOLOR(#666):COLOR(#FFF):CENTER:companies||BGCOLOR(#666):COLOR(#FFF):CENTER:people|
|id|-&gt;|id|
|name||company_id|
|||name|
&gt;class Company &lt; ActiveRecord::Base
&gt;&amp;nbsp;&amp;nbsp;has_many :people
&gt;end

&gt;class Person &lt; ActiveRecord::Base
&gt;&amp;nbsp;&amp;nbsp;belongs_to :company
&gt;end
**【多対多】
***結合テーブルは、内部で利用するだけで表示する必要がない場合（結合テーブルclubs_peopleにid列は不要）：
|BGCOLOR(#666):COLOR(#FFF):CENTER:clubs||BGCOLOR(#666):COLOR(#FFF):CENTER:clubs_people||BGCOLOR(#666):COLOR(#FFF):CENTER:people|
|id|-&gt;|club_id|&lt;-|id|
|name||person_id||name|
&gt;class Club &lt; ActiveRecord::Base
&gt;&amp;nbsp;&amp;nbsp;has_and_belongs_to_many :people
&gt;end

&gt;class Person &lt; ActiveRecord::Base
&gt;&amp;nbsp;&amp;nbsp;has_and_belongs_to_many :clubs
&gt;end
***結合テーブルも、画面に表示する必要がある場合（結合テーブルlinksにid列が必要）：
|BGCOLOR(#666):COLOR(#FFF):CENTER:clubs||BGCOLOR(#666):COLOR(#FFF):CENTER:links||BGCOLOR(#666):COLOR(#FFF):CENTER:people|
|id|-&gt;|id|&lt;-|id|
|name||club_id||name|
|||person_id|||
&gt;class Club &lt; ActiveRecord::Base
&gt;&amp;nbsp;&amp;nbsp;has_many :links
&gt;end

&gt;class Person &lt; ActiveRecord::Base
&gt;&amp;nbsp;&amp;nbsp;has_many :links
&gt;end

&gt;class Link &lt; ActiveRecord::Base
&gt;&amp;nbsp;&amp;nbsp;belongs_to :club
&gt;&amp;nbsp;&amp;nbsp;belongs_to :person
&gt;end
***上記の両方の性質を持った特殊な利用法（結合テーブルlinksにid列が必要）
|BGCOLOR(#666):COLOR(#FFF):CENTER:clubs||BGCOLOR(#666):COLOR(#FFF):CENTER:links||BGCOLOR(#666):COLOR(#FFF):CENTER:people|
|id|-&gt;|id|&lt;-|id|
|name||club_id||name|
|||person_id|||
&gt;class Book &lt; ActiveRecord::Base
&gt;&amp;nbsp;&amp;nbsp;has_many :links
&gt;&amp;nbsp;&amp;nbsp;has_many :people, :through =&gt; :links
&gt;end

&gt;class Person &lt; ActiveRecord::Base
&gt;&amp;nbsp;&amp;nbsp;has_many :links
&gt;&amp;nbsp;&amp;nbsp;has_many :clubs, :through =&gt; :links
&gt;end

&gt;class Link &lt; ActiveRecord::Base
&gt;&amp;nbsp;&amp;nbsp;belongs_to :club
&gt;&amp;nbsp;&amp;nbsp;belongs_to :person
&gt;end    </description>
    <dc:date>2007-08-20T22:31:20+09:00</dc:date>
    <utime>1187616680</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kiminori_hirose/pages/15.html">
    <title>MySQL</title>
    <link>https://w.atwiki.jp/kiminori_hirose/pages/15.html</link>
    <description>
      **データベース作成
&gt;CREATE DATABASE {データベース名} [CHARACTER SET {文字コード名}];
**データベース削除
&gt;DROP DATABASE {データベース名};
**ユーザ作成
&gt;GRANT ALL PRIVILEGES ON *.* TO &#039;{ユーザ名}&#039;@&#039;%&#039; IDENTIFIED BY &#039;{パスワード}&#039; WITH GRANT OPTION;
**データベース変更
&gt;USE {データベース名};
**テーブル名を変更
&gt;ALTER TABLE {旧テーブル名} RENAME TO {新テーブル名};    </description>
    <dc:date>2007-08-10T11:45:45+09:00</dc:date>
    <utime>1186713945</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kiminori_hirose/pages/14.html">
    <title>Vi</title>
    <link>https://w.atwiki.jp/kiminori_hirose/pages/14.html</link>
    <description>
      ** ヤンクしたデータをコマンドラインに貼り付ける
[C-r][&quot;]
** やり直し（Undo）
[u]
** やり直しのやり直し
[C-r]
** 強制的にタブを挿入する
[C-v][C-i]
** 字下げする（インサートモード）
[C-d]
** 対応するカッコへ移動する
[%]
** 矩形選択
[v]       -&gt; 矩形選択を開始
[v][i][b] -&gt; ()で囲まれたブロックの内部
[v][a][b] -&gt; ()で囲まれたブロック
[v][i][B] -&gt; {}で囲まれたブロックの内部
[v][a][B] -&gt; {}で囲まれたブロック
** キーワード補完（インサートモード）
[C-p] -&gt; 前方のキーワードから補完
[C-n] -&gt; 後方のキーワードから補完
** 体裁を整える
[g][g][=][G]    </description>
    <dc:date>2006-02-13T19:29:38+09:00</dc:date>
    <utime>1139826578</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kiminori_hirose/pages/13.html">
    <title>Struts</title>
    <link>https://w.atwiki.jp/kiminori_hirose/pages/13.html</link>
    <description>
      *Struts 1.1

**文字化けを起こさないように設定したい。
文字化けを起こさないようにするためには次のことに気をつける必要がある。
-HTML,JSPファイルを保存する時に文字コードを指定する。
-JSPファイルの先頭行に以下を追加する。
&gt;例：&lt;%@ page contentType=&quot;text/html; charset=utf-8&quot; %&gt;
-HTMLの&lt;head&gt;タグ内に以下を追加する。
&gt;例：&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;/&gt;
-StrutsのFilterを作成する。
&gt;例：public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;request.setCharacterEncoding(&quot;utf-8&quot;);
&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;chain.doFilter(request,response);
&gt;}
-web.xmlを編集する。
&gt;&lt;filter&gt;
&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;filter-name&gt;request_filter&lt;/filter-name&gt;
&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;filter-class&gt;struts.RequestFilter&lt;/filter-class&gt;
&gt;&lt;/filter&gt;
&gt;&lt;filter-mapping&gt;
&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;filter-name&gt;request_filter&lt;/filter-name&gt;
&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;url-pattern&gt;/*&lt;/url-pattern&gt;
&gt;&lt;/filter-mapping&gt;    </description>
    <dc:date>2005-11-07T17:28:49+09:00</dc:date>
    <utime>1131352129</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kiminori_hirose/pages/10.html">
    <title>Bison</title>
    <link>https://w.atwiki.jp/kiminori_hirose/pages/10.html</link>
    <description>
      *Bison 2.0

**アクション内で強制的にエラーを発生させたい。
YYERRORマクロを使用します。YYERRORマクロからは、yyerror関数は呼ばれません。エラーメッセージを表示したいときは、YYERRORマクロの前にyyerror関数を呼び出します。    </description>
    <dc:date>2005-11-02T12:12:21+09:00</dc:date>
    <utime>1130901141</utime>
  </item>
  </rdf:RDF>
