<?xml version="1.0" encoding="UTF-8" ?>
<rss version="0.91">
  <channel>
    <title>technological blog</title>
    <description>technological blog</description>
    <link>https://technological.blog.shinobi.jp/</link>
    <language>ja</language>
    <copyright>Copyright (C) NINJATOOLS ALL RIGHTS RESERVED.</copyright>

    <item>
      <title>Ocsigenで再帰するフォーム</title>
      <description>Ocsigenで再帰するフォームを作ってみた。&lt;br /&gt;
&lt;br /&gt;
OcsigenのチュートリアルのActionというところを真似してみた。&lt;br /&gt;
&lt;br /&gt;
作ってみたページの外観↓&lt;br /&gt;
&lt;a href=&quot;http://file.technological.blog.shinobi.jp/add.html&quot; target=&quot;_blank&quot;&gt;再帰するフォーム(html)&lt;/a&gt;（入力しても意味ないよ）&lt;br /&gt;
&lt;br /&gt;
以下はそのコード&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;br /&gt;
open XHTML.M&lt;br /&gt;
open Eliom&lt;br /&gt;
open Eliom.Xhtml&lt;br /&gt;
open Lwt&lt;br /&gt;
&lt;br /&gt;
let list_mapi f l =&lt;br /&gt;
  let rec local i = function&lt;br /&gt;
    | [] -&gt; []&lt;br /&gt;
    | hd::tl -&gt; f i hd :: local (i+1) tl&lt;br /&gt;
  in&lt;br /&gt;
    local 0 l&lt;br /&gt;
&lt;br /&gt;
let mylist = ref []&lt;br /&gt;
&lt;br /&gt;
let table_of_hitchart () =&lt;br /&gt;
  table &lt;br /&gt;
    (tr (td[pcdata &quot;[トラック]&quot;]) [td[pcdata &quot;　　[曲名]&quot;]])&lt;br /&gt;
    (list_mapi (fun i s -&gt;&lt;br /&gt;
		  tr (td[pcdata (string_of_int(i+1))]) [td[pcdata s]]) !mylist)&lt;br /&gt;
&lt;br /&gt;
let my_table = create_table ()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let action_session = &lt;br /&gt;
  new_service ~url:[&quot;add&quot;] ~get_params:unit ()&lt;br /&gt;
&lt;br /&gt;
let connect_action = &lt;br /&gt;
  new_post_coservice' ~post_params:(string &quot;moji&quot;) ()&lt;br /&gt;
    &lt;br /&gt;
let disconnect_action = &lt;br /&gt;
  Actions.register_new_post_coservice'&lt;br /&gt;
    unit &lt;br /&gt;
    (fun sp () () -&gt; &lt;br /&gt;
      close_session sp &gt;&gt;= &lt;br /&gt;
      (fun () -&gt; return []))&lt;br /&gt;
&lt;br /&gt;
let disconnect_box sp s = &lt;br /&gt;
  post_form disconnect_action sp &lt;br /&gt;
    (fun _ -&gt; [p [submit_input s]]) ()&lt;br /&gt;
&lt;br /&gt;
let input_box sp moji = &lt;br /&gt;
  [p [pcdata &quot;曲目を追加する: &quot;; &lt;br /&gt;
      string_input moji]]&lt;br /&gt;
&lt;br /&gt;
let home_action sp () () = &lt;br /&gt;
  let f = post_form connect_action sp (input_box sp) () in&lt;br /&gt;
  return&lt;br /&gt;
    (html&lt;br /&gt;
       (head (title (pcdata &quot;ADD&quot;)) [])&lt;br /&gt;
       (body [h1 [pcdata &quot;recursive form Example&quot;];&lt;br /&gt;
	      h2 [pcdata &quot;再生する曲目リスト&quot;];&lt;br /&gt;
	      f;&lt;br /&gt;
	      table_of_hitchart()]))&lt;br /&gt;
    &lt;br /&gt;
let _ = register ~service:action_session home_action&lt;br /&gt;
&lt;br /&gt;
let rec launch_session sp moji =&lt;br /&gt;
  mylist := (moji :: !mylist);&lt;br /&gt;
  set_session_data my_table sp moji&lt;br /&gt;
&lt;br /&gt;
let _ = Actions.register&lt;br /&gt;
    connect_action&lt;br /&gt;
    (fun sp () login -&gt; &lt;br /&gt;
      close_session sp &gt;&gt;=&lt;br /&gt;
      (fun () -&gt; launch_session sp login;&lt;br /&gt;
        return []))&lt;br /&gt;
&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;
</description> 
      <link>https://technological.blog.shinobi.jp/ocsigen/ocsigen%E3%81%A7%E5%86%8D%E5%B8%B0%E3%81%99%E3%82%8B%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0</link> 
    </item>
    <item>
      <title>Ocsigenでフォームを作ってみる</title>
      <description>Ocsigenで入力フォームを作ってみた。&lt;br /&gt;
&lt;br /&gt;
こんなページができた: &lt;a href=&quot;http://file.technological.blog.shinobi.jp/form_pagesource.html&quot; target=&quot;_blank&quot;&gt;ページの外観(html)&lt;/a&gt;(ボタンは押しても意味ないよ。)&lt;br /&gt;
&lt;br /&gt;
このページを生成するプログラムを以下のようにかいた。&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;br /&gt;
open XHTML.M&lt;br /&gt;
open Eliom&lt;br /&gt;
open Eliom.Xhtml&lt;br /&gt;
open Lwt&lt;br /&gt;
&lt;br /&gt;
let no_post_param_service = &lt;br /&gt;
  register_new_service &lt;br /&gt;
    ~url:[&quot;post&quot;]&lt;br /&gt;
    ~get_params:unit&lt;br /&gt;
    (fun _ () () -&gt; return&lt;br /&gt;
      (html&lt;br /&gt;
         (head (title (pcdata &quot;&quot;)) [])&lt;br /&gt;
         (body [h1 [pcdata &lt;br /&gt;
                      &quot;Version of the page without POST parameters&quot;]])))&lt;br /&gt;
&lt;br /&gt;
let my_service_with_post_params = &lt;br /&gt;
  register_new_post_service&lt;br /&gt;
    ~fallback:no_post_param_service&lt;br /&gt;
    ~post_params:(string &quot;value1&quot; ** string &quot;value2&quot;)&lt;br /&gt;
    (fun _ () (value1,value2) -&gt;  return&lt;br /&gt;
      (html&lt;br /&gt;
         (head (title (pcdata value1)) [])&lt;br /&gt;
         (body [h1 [pcdata value2]])))&lt;br /&gt;
&lt;br /&gt;
let form2 = register_new_service [&quot;form2&quot;] unit&lt;br /&gt;
  (fun sp () () -&gt; &lt;br /&gt;
     let f =&lt;br /&gt;
       (post_form my_service_with_post_params sp&lt;br /&gt;
          (fun (chaine1, chaine2) -&gt; &lt;br /&gt;
            [p [pcdata &quot;TITLE: &quot;;&lt;br /&gt;
                string_input chaine1];&lt;br /&gt;
	     p [pcdata &quot;BODY: &quot;;&lt;br /&gt;
		string_input chaine2];&lt;br /&gt;
	     p [submit_input &quot;GO&quot;]]) ()) in&lt;br /&gt;
     return&lt;br /&gt;
       (html&lt;br /&gt;
         (head (title (pcdata &quot;form&quot;)) [])&lt;br /&gt;
         (body [f])))&lt;br /&gt;
&lt;br /&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
このフォームにはふたつの入力ボックスがある。&lt;br /&gt;
&lt;br /&gt;
例えば上のボックスに hugahuga 下のボックスに mugomugo と入力して、ボタンを押すと、タイトルが hugahuga で、本文が mugomugo であるようなページに遷移する。&lt;br /&gt;
&lt;br /&gt;
ちょうど、&lt;a href=&quot;http://file.technological.blog.shinobi.jp/hugamugo_pagesource.html&quot; target=&quot;_blank&quot;&gt;こんな感じのページ(html)&lt;/a&gt;だ。&lt;br /&gt;
&lt;br /&gt;
ちなみに入力ボックス内にタグを入れられても、それは単なる文字列として扱い、入力によってページの構造を破壊されることを防いでいる。&lt;br /&gt;
&lt;a href=&quot;http://file.technological.blog.shinobi.jp/tag_pagesource.html&quot; target=&quot;_blank&quot;&gt;タグを入れられても大丈夫！(html)&lt;/a&gt;</description> 
      <link>https://technological.blog.shinobi.jp/ocsigen/ocsigen%E3%81%A7%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B</link> 
    </item>
    <item>
      <title>Ocsigen入門　手順7</title>
      <description>7. ブラウザで確認&lt;br /&gt;
&lt;br /&gt;
ブラウザを起動してhttp://localhost/my_samples/helloにアクセスしてみる。&lt;br /&gt;
&lt;br /&gt;
できた！&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://file.technological.blog.shinobi.jp/hello_pagesource.html&quot; target=&quot;_blank&quot;&gt;Ocsigenで生成されたページのソース(html)&lt;/a&gt;</description> 
      <link>https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%867</link> 
    </item>
    <item>
      <title>Ocsigen入門　手順6</title>
      <description>6. ocsigenを起動&lt;br /&gt;
&lt;br /&gt;
# ocsigen&lt;br /&gt;
で、ocsigenを起動させた。</description> 
      <link>https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%866</link> 
    </item>
    <item>
      <title>Ocsigen入門　手順5</title>
      <description>5. コンパイルして、ocsigen.confを設定&lt;br /&gt;
&lt;br /&gt;
先ほどのファイルhello.mlを以下のようにコンパイルした。&lt;br /&gt;
&lt;br /&gt;
$ ocamlc -I /usr/local/GODI/lib/ocaml/site-lib/ocsigen/ -c hello.ml&lt;br /&gt;
&lt;br /&gt;
これで/home/source/ディレクトリ内にhello.cmoというファイルができあがった。&lt;br /&gt;
&lt;br /&gt;
そして/etc/ocsigen/にあるocsigen.confというocsigenの設定ファイルに以下の3行を追加した。&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;br /&gt;
      &amp;lt;site dir=&quot;my_samples&quot; charset=&quot;iso-8859-1&quot;&amp;gt;&lt;br /&gt;
        &amp;lt;eliom module=&quot;/home/source/hello.cmo&quot; /&amp;gt;&lt;br /&gt;
      &amp;lt;/site&amp;gt;&lt;br /&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
これでmy_samplesというディレクトリの中で、先ほど指定したプログラムによるページがみれるはずである。</description> 
      <link>https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%865</link> 
    </item>
    <item>
      <title>Ocsigen入門　手順4</title>
      <description>4. Ocsigenのライブラリを使ってプログラムを書く&lt;br /&gt;
&lt;br /&gt;
例えば/home/sourceというディレクトリの中に以下のようなファイル test.ml を作成した。&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;&lt;br /&gt;
open XHTML.M&lt;br /&gt;
open Eliom&lt;br /&gt;
open Eliom.Xhtml&lt;br /&gt;
open Lwt&lt;br /&gt;
&lt;br /&gt;
let _ = &lt;br /&gt;
  register_new_service &lt;br /&gt;
    ~url:[&quot;hello&quot;]&lt;br /&gt;
    ~get_params:unit&lt;br /&gt;
    (fun _ () () -&gt; &lt;br /&gt;
      return &lt;br /&gt;
        (html&lt;br /&gt;
          (head (title (pcdata &quot;Ocsigen&quot;)) [])&lt;br /&gt;
          (body [h1 [pcdata &quot;Hello Ocsigen!&quot;]])))&lt;br /&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
これはタイトルが&quot;Ocsigen&quot;で、本文が&quot;Hello Ocsigen!&quot;であり、urlは /helloであるようなページの表示を目指して作ったプログラムである。&lt;br /&gt;
&lt;br /&gt;
このプログラムのソース: &lt;a href=&quot;http://file.technological.blog.shinobi.jp/test.ml&quot; target=&quot;_blank&quot;&gt;test.ml(ml)&lt;/a&gt;</description> 
      <link>https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%864</link> 
    </item>
    <item>
      <title>Ocsigen入門　手順3</title>
      <description>3. Ocsigen0.99.1をインストール&lt;br /&gt;
&lt;br /&gt;
そして、いよいよOcsigenをインストール。&lt;br /&gt;
&lt;br /&gt;
READMEにしたがって以下のようにするとインストールできた。&lt;br /&gt;
&lt;br /&gt;
# sh configure&lt;br /&gt;
# make depend&lt;br /&gt;
# make &lt;br /&gt;
# make install</description> 
      <link>https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%863</link> 
    </item>
    <item>
      <title>Ocsigen入門　手順2</title>
      <description>2. ocaml, ocamlfindなどOcsigenに必要なものをインストール&lt;br /&gt;
&lt;br /&gt;
GODIをインストールしたことによって、/usr/local/GODI/sbin/godi_consoleというコマンドが使えるようになった。このコマンドによって、簡単に必要なものをインストールできた。&lt;br /&gt;
&lt;br /&gt;
[ 47] pcre&lt;br /&gt;
[ 87] findlib&lt;br /&gt;
[111] ocaml-dbm&lt;br /&gt;
[118] ocaml-src&lt;br /&gt;
[119] ocaml-ssl&lt;br /&gt;
[127] ocamlnet&lt;br /&gt;
&lt;br /&gt;
などを選んでインストールした。&lt;br /&gt;
</description> 
      <link>https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%862</link> 
    </item>
    <item>
      <title>Ocsigen入門　手順1</title>
      <description>1. GODIをインストール&lt;br /&gt;
&lt;br /&gt;
まずGODIをインストールした。&lt;br /&gt;
&lt;br /&gt;
以下の手順でインストールが成功した。&lt;br /&gt;
&lt;br /&gt;
$ su&lt;br /&gt;
# ./bootstrap --prefix /usr/local/GODI&lt;br /&gt;
# PATH=/usr/local/GODI/bin:/usr/local/GODI/sbin:PATH&lt;br /&gt;
# export PATH&lt;br /&gt;
# ./bootstrap_stage2&lt;br /&gt;
&lt;br /&gt;
(注意！：gccやg++などの基本的なものがないと失敗する。)</description> 
      <link>https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%89%8B%E9%A0%861</link> 
    </item>
    <item>
      <title>Ocsigen入門　概要</title>
      <description>OcsigenはOCamlを使ったWeb Serverで、安全で質の高いWebアプリケーションが簡単に作れるらしい。&lt;br /&gt;
以上の理由よりOcsigenを導入してみようと思った。&lt;br /&gt;
OcsigenはOCamlを使うので、OCamlをインストールしなければならない。また、ocamlfindや、ocamlnetなどの基本的なライブラリたちも必要らしい、のちのち便利なのでまず、これらをインストールしようと思った。&lt;br /&gt;
OCamlたちをインストールするためにはGODIが便利である、と書いてあったので、まずGODIをインストールした。</description> 
      <link>https://technological.blog.shinobi.jp/ocsigen/ocsigen%E5%85%A5%E9%96%80%E3%80%80%E6%A6%82%E8%A6%81</link> 
    </item>

  </channel>
</rss>