タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

Catyに関するterazzoのブックマーク (22)

  • 実例で見る JSONスキーマ vs Catyスキーマ - 檜山正幸のキマイラ飼育記 (はてなBlog)

    http://return0.info/note/2014-11.html#id2014-11-26 : 俺は今でもCatyスキーマが今のところ世界でもっとも使いやすいスキーマ言語だと思っている Kuwataさんや僕がこういうことを言うと手前味噌なわけですが、実際のところCatyスキーマより書きやすいスキーマ言語は見当たらないです。 実際に仕事に使ったスキーマ記述の例を挙げましょう。WebサイトでWebフォントを使う状況で、フォントに関するメタデータをJSONファイルに保存しておくことにします。そのJSONファイルのデータ形式を定義するものです。 スキーマ記述ファイルは次のコメントから始まります。'/**' から始まるドキュメンテーション・コメントは、単なるコメントではなくて、処理系に認識されてヘルプやマニュアルの生成などに使われます。コメント内はWiki記法が使えます(以下の例ではこれと

    実例で見る JSONスキーマ vs Catyスキーマ - 檜山正幸のキマイラ飼育記 (はてなBlog)
    terazzo
    terazzo 2014/12/02
  • 2014-06 :: return0 note

    terazzo
    terazzo 2014/06/30
  • 2013-05 :: return0 note

    2013-05-02 † メモ代わりに昨日今日で勉強したり実装したことをざっくりと書いておく。 まずJSONにおけるあらゆるの存在する領域をunivとする。univの定義はCatyのスキーマで書けばこう。(実際には実装上の都合というか効率化の観点から、univは処理系が天下り的に与えている。) type univ = string | number | boolean | null | array | object; 一方でunivがまずあって、そこから文字列や整数だけを取り出す事を考えてみる。Catyスキーマにはスキーマ属性として一部の述語が書けるようになっているが、そこにis_numberやis_stringといった物があると考える。この場合、stringやintegerはunivからそういった条件に合致するものを取り出した集合と考えられる。以下はいろいろ端折った例。 type str

    terazzo
    terazzo 2013/05/28
  • Catyの紹介 001: JSONパイプライン

    terazzo
    terazzo 2012/10/23
  • 妖精さん、小人さん、イヌネコ、自動テスト - 檜山正幸のキマイラ飼育記 (はてなBlog)

    Catyのメタ巡回的構造、あるいは内省機能を使ったスクリプトを比喩的に僕は「妖精さん」とか「小人さん」とか、詩的(?)に表現してきたわけです。 「妖精」で検索 http://d.hatena.ne.jp/m-hiyama/searchdiary?word=%CD%C5%C0%BA 「小人」で検索 http://d.hatena.ne.jp/m-hiyama/searchdiary?word=%BE%AE%BF%CD 実際に使い始めたら、なぜか呼び名がイヌネコになってしまった。Kuwataさんに先に書かれた。 http://return0.info/note/2012-09.html#id2012-09-13 簡単なテストなので「サルのような賢さは必要ない、イヌかネコにやらせればいい」と言ったので暫定名称「イヌネコテスト」。 10行くらいのスクリプトを2,3個組み合わせればイヌネコテストは出

    妖精さん、小人さん、イヌネコ、自動テスト - 檜山正幸のキマイラ飼育記 (はてなBlog)
    terazzo
    terazzo 2012/09/15
  • CatyScriptと環境変数とテストのこと - 檜山正幸のキマイラ飼育記 (はてなBlog)

    「CatyScript2.0が完成」で述べたように、予定していたCatyScriptの機能は揃い、今は細かいところを調整しています。CatyScriptの主たる用途は次の2つです。 リクエスト処理を書く。 テストスクリプトを書く。 最近(ここ半年くらい)に実装した機能はテストスクリプト用のものであり、リクエスト処理部分は1年前と同じです。テスト用途だと、「try-catchの双対となる構造」で述べた、環境変数を操作する機能「unclose構文」が必須です。今朝も、unclose構文を手直ししていました。 というわけで、日記らしく今日の午前中やっていた事と、関連する話題を書きます。 内容: Catyの環境変数 環境変数に影響されるコマンドをテストする 簡易シェルを使う テストのためのスクリプト言語 Catyの環境変数 CatyScriptは、構文も使い方もOSのシェルとよく似ています。Cat

    CatyScriptと環境変数とテストのこと - 檜山正幸のキマイラ飼育記 (はてなBlog)
    terazzo
    terazzo 2012/09/07
  • CatyScript2.0が完成 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    言語仕様を決めてから20ヶ月以上…。予定していた構文・機能は全部動くようになりました。バグはまー残っているでしょうし、パフォーマンスもこれから、後から追加した機能で中途半なモノもあります。が、擬似コード/机上コード(処理系なし)として書いたものが今は全て実行できます。 以下、スクリプトコードを羅列するだけ。 まず、2010年11月に机上で書いた無限FizzBuzz。2011年の時点で(「CatyScriptで無限に動き続けるFizzBuzzが書けた」)は代替手段を使って動いていたのですが、今は当初の予定通りの繰り返し制御構造begin/repeatで動きます。 module sample; /** 入力が、引数で指定された数で割り切れるかどうかを判定する */ command dividable [integer] :: integer -> (@True integer | @False

    CatyScript2.0が完成 - 檜山正幸のキマイラ飼育記 (はてなBlog)
    terazzo
    terazzo 2012/08/28
  • CatyScriptと総称ラムダ計算 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    CatyScriptの総称機能がだいぶちゃんとしてきたので、それに絡めて総称ラムダ計算の説明をしておこうかな、と。 ここで言う「総称」は「型変数を含む」という意味です。そして、総称をサポートするとは次のことです。 型変数を含む型表現を扱う。 型変数を含むスクリプトコードを扱う。 総称をサポートする動機は、型定義/型宣言を容易にするためです。型定義/型宣言を(徹底的に)利用する動機は、実行時の安全性をできる限り保証したいからです。人間の間違いを早く発見したいのです。 内容: 総称型の概要 プロファイルの扱い方 総称の式(項)の扱い方 ほんとに大丈夫? 総称型の概要 α、βなどは型変数を含むかもしれない型表現(type expression)とします*1。こういう表現(式、expression)を型スキームと呼ぶこともあります。Tを型変数として、ΛT.α を、型表現(型スキーム)αの型抽象だと

    CatyScriptと総称ラムダ計算 - 檜山正幸のキマイラ飼育記 (はてなBlog)
    terazzo
    terazzo 2012/08/18
  • Catyの特徴と機能をイメージできるようなオハナシ - 檜山正幸のキマイラ飼育記 (はてなBlog)

    先ほど書いた記事を受けて、Catyに関する情報不足をナントカする試み。 技術的な背景や設計判断に関して述べることはいくらでもあるのですが、それ以前に、「それはなに?」「なにがうれしい?」さえも説明してない/できてないですね。 「それはなに?」「なにがうれしい?」のイメージがある程度は湧くように、次の2つのキャッチフレーズに絞って、どんなことがどのように出来るかを描き出したいと思います。 ミーティングが終わったら出来ている 作り方を作れる ミーティングが終わったら出来ている 例えば、新しいWebサービスに関してブレーンストーミングをするとか、顧客と業務システムの概要について打ち合わせをするとか、ひとしきりディスカッションをして、だいたいの合意が取れたとしましょう。「こんな感じかなー」というシステムイメージは、おおざっぱなロバストネス図として描けた、と、そうしましょう。 Catyではロバストネ

    Catyの特徴と機能をイメージできるようなオハナシ - 檜山正幸のキマイラ飼育記 (はてなBlog)
    terazzo
    terazzo 2012/06/21
  • スノーグローブのなかの小人さん達 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    Kuwataさんが、「CatyScriptのレイフィケーションができるようになった。」と書いてますが、これだけじゃなんだかワカリマセンよね。 最近、Catyのなかに“かなり正確なスノーグローブ”を作ろうとしているのです。少し前に「スノーグローブ現象 再び」という記事を書いたのも、そんな背景です。「かなり正確なスノーグローブ」とは、Catyシステムに関する情報を、Catyのデータ領域に埋め込む機能です。Catyのデータ領域はXJSON(JSONをわずかに拡張したフォーマット)データの集合なので、スノーグローブの実現は「メタ情報 → XJSONデータ」という写像を作ることになります。このような写像をレイフィケーションと呼びます。レイフィケーションの対象となるメタオブジェクトには、型、コマンド、スクリプトコード(コマンドの実際の定義)、リソースクラス、Web状態(REST用語でのアプリケーション

    スノーグローブのなかの小人さん達 - 檜山正幸のキマイラ飼育記 (はてなBlog)
    terazzo
    terazzo 2012/03/28
  • Catyの型階層 :: return0 note

    terazzo
    terazzo 2012/03/23
  • Catyの型システムの特異性 :: return0 note

    Catyの型システムは主流のプログラミング言語にはあまり見られない特徴があり、それのせいで処理系の開発が極端に容易になったり面倒になったりするので、ちょっとそれらの一部をまとめてみる。 未知(undefined)、無効(null)、空(never)が型として存在する † この三者はそれぞれまったく異なる。 nullはJSONに含まれるシングルトンである。 undefinedはJSONに含まれないが、Caty内のインスタンス領域には存在する。 neverは空集合であり、Caty内のインスタンス領域に存在しない。 空オブジェクト({})、空の配列([])はいずれもれっきとしたシングルトンであると同時にオブジェクト、配列のインスタンスであり、空集合ではない事に注意。 実際にはundefinedの扱いはいろいろややこしい。 ルーズ配列がある † 以下はCatyの配列として合法なデータである。 [1

    terazzo
    terazzo 2012/02/09
  • WebアプリケーションフレームワークCatyの特徴と方向性 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    「WebアプリケーションフレームワークCatyの現状と今後」と似たような題名の記事、まー続きのようなものです。Catyのプロモーション的なことをしてないので、少し宣伝風に書いてみようかと。 「Catyプロジェクト/ソフトウェアについて」(2009年8月)あたりから勘定すると、Catyプロジェクトも2年以上が経過しました。Catyの開発は少しずつしか進んでいませんが、それでも歩みを止めたことはなかったので、気がつけば随分と成長しました。 ~/ProjectCaty/OLD $ hg parent changeset: 2343:753012695e08 tag: tip user: m_hiyama date: Thu Aug 11 11:38:50 2011 +0900 summary: 混乱を避けるため、仕様文書を削除 その2 ~/ProjectCaty/OLD $ cd ../dev

    WebアプリケーションフレームワークCatyの特徴と方向性 - 檜山正幸のキマイラ飼育記 (はてなBlog)
    terazzo
    terazzo 2011/11/08
  • WebアプリケーションフレームワークCatyの現状と今後 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    最近どんな感じで、何を目指してやっているのかを簡単に紹介します。目指していることはイッパイあるのですが、特に「インスタントモックアップ」と我々(僕とKuwataさん)が呼んでいる機能にフォーカスします。インスタントモックアップは、最近着手したばかりで何も出来てないのが実状ですが、できたらけっこう便利そう。すごく便利かもしれません。 インスタントモックアップの目標は「Webサイト/Webアプリケーションのプロトタイプ作成の労力を、百分の一にする」ことです。効率を二桁上げたいわけね。なんかホラ話みたいでしょ。実際、誇張表現なんですが、まったく根拠がないわけでもないんですよ。 内容: 例題「ユーザー管理業務」 Catyの用語を少しだけ モジュールの構造 定義が書いてないモジュール 何をすべきかはナントナク予想できる どんなに中途半端・不完全な設計でも動かす 例題「ユーザー管理業務」 「1年たって

    WebアプリケーションフレームワークCatyの現状と今後 - 檜山正幸のキマイラ飼育記 (はてなBlog)
    terazzo
    terazzo 2011/10/18
    リンクの生成をリソース名.アクション名で指定するとこすき
  • Catyのカインド: やたらに簡単な高階の型 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    KuwataさんがCatyのカインドの話を書いています。Catyのカインド(kind、種)は「型の型」ですが、高階の型としてはやたらに簡単な定義になっています。 Catyでは、JSONデータからなるデータ領域Dを固定して、Dの部分集合を型と考えています(Sets-as-Types解釈)。このため、型の型と言っても、ベキ集合を1回取るだけでモデルが作れます*1。これはどういうことかと言うと: 「値に関する概念」を、そのまま1レベル上げるだけで「型に関する概念」が得られる。 「1レベル上げる」作業は、ほとんど機械的と言えるくらいに単純です。 内容: 値と型、定数と関数 値の集合、型の集合 関数と集合の使い方をもう少し 構文が悩みの種 値と型、定数と関数 擬似言語で定数と関数を定義してみます。 /** 定数の定義 */ const two = 2; /** 右辺に算術演算を含んだ定数の定義 */

    Catyのカインド: やたらに簡単な高階の型 - 檜山正幸のキマイラ飼育記 (はてなBlog)
    terazzo
    terazzo 2011/05/06
  • 2010年末に再び考える、Catyスキーマとユーザーインターフェース - 檜山正幸のキマイラ飼育記 (はてなBlog)

    1年半ほど前、「JSONスキーマとユーザーインターフェース」とか「JSONスキーマと列挙型」において、ランチの注文フォームを素材にスキーマとユーザーインターフェースの問題を考えてました。今、2010年末ならこの問題をどう扱うか? まず、データ型の定義は次のようになります。 /** * ランチの注文 */ type LunchOrder = { /** 会員識別情報 */ "ident" : { "name" : string, "memberNum" : integer }, /** 今日の注文 */ "order" : { "mainDish" : ( "special"| "fish"| "meat" ), "drink" : ( "teaHot"| "teaIce"| "coffeeHot"| "coffeeIce" ), "dessert" : ( "pudding"| "stra

    2010年末に再び考える、Catyスキーマとユーザーインターフェース - 檜山正幸のキマイラ飼育記 (はてなBlog)
    terazzo
    terazzo 2010/12/13
  • CatyScriptで記述するCatyシェル - 檜山正幸のキマイラ飼育記 (はてなBlog)

    CatyScript2.0を企画してますが、実際に使えるようになるのはだいぶ先かな。 プログラミング言語がある程度の表現能力を持っていることの基準として、「自分で自分を記述できる」ことがあります。CatyScript2.0は、Catyのメカニズムを記述できる能力を持たせるつもりです。とはいえ、アルゴリズムの詳細を書くような用途にはまったく不向きです。概略を説明する擬似コードのように使えるが、擬似じゃなくて実際に動く、というのが目標。 CatyScriptを使ってCaty自身を記述するとはどういうことか、Catyの対話的シェルを題材にして実際にやってみます。その過程で、CatyScript2.0の(予定されている)機能も紹介します。 タグと分岐 Catyの扱うデータ構造はJSONをわずかに拡張したもの(XJSON)です。拡張した点はタグが付けられることです。タグはアットマークで始まる名前で、

    CatyScriptで記述するCatyシェル - 檜山正幸のキマイラ飼育記 (はてなBlog)
    terazzo
    terazzo 2010/11/30
  • CatyのJSONストレージとクエリ言語 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    Catyのデータベースバックエンドの候補としてMongoDBを検討しています。MongoDBのクエリ言語が、現在Catyで実装しているクエリ言語とやたらに似ているんで笑ってしまいました。同じアイディアに基づき、構文もほとんど同じです。比較してみると -- 身贔屓な評価かもしれませんが -- Catyクエリ言語のほうがデキがいいと思います。 Catyでは、JSONデータを保存する貯蔵庫を「JSONストレージ」と身も蓋もない呼び方をしています。今まで紹介したことがなかったのですが、JSONストレージへのクエリ(問い合わせ)言語が存在します。JSONストレージとクエリ言語の設計と実装は、全部Kuwataさんによるものです。いつの間にか出来ていました。 現時点でのJSONストレージは、バックエンドにSQLiteを使っています。JSONデータ構造とRDB的なデータモデルにはセマンティックギャップがあ

    CatyのJSONストレージとクエリ言語 - 檜山正幸のキマイラ飼育記 (はてなBlog)
    terazzo
    terazzo 2010/11/22
  • Catyとデータ型: だれががんばるの? - 檜山正幸のキマイラ飼育記 (はてなBlog)

    http://twitter.com/hiyama_on_caty でゴニョゴニョ言っていた(http://twitter.com/hiyama_on_caty/status/26596332016 の前後)の件を解説してみます。 Catyのデータ型自動変換のメカニズム 次のようなデータ型を考えます。 /** ピザの注文のデータ型 */ type PizzaOrder = { // ベースタイプは必須 "baseType" : ( "プレーン" | "マルゲリータ" | "マリラーナ" | "ロマーナ" | "ナポリターナ" ), // トッピングのデフォルト値は [](空列) "topping" : [ ( "オニオン" | "ズッキーニ" | "トマト" | "ブラックオリーブ" | "マッシュルーム" | "コーン" | "エビ" | "ブロッコリー" | "ベーコン" | "モッツ

    Catyとデータ型: だれががんばるの? - 檜山正幸のキマイラ飼育記 (はてなBlog)
    terazzo
    terazzo 2010/10/16
    転送用エンコーディングは型なしjsonと割り切るなら、クライアント側でマルチバリュー形式に詰めなおすという手も。それが嫌ならプロセッサがtranslateに渡すjsonが型ありなのか型なしなのか区別させる必要があるかも。
  • Catyスクリプトだけでノーロジック・アプリケーション - 檜山正幸のキマイラ飼育記 (はてなBlog)

    いつも使っているコンピュータがクラッシュしてCatyのチュートリアルも消失、ちょっとショック。中途でもbitbucketにpushしておきゃよかった、というのが教訓。 ソフトウェアだけをリリースして、説明の文書のほうは後追い、ってことになるかもしれません。でも、サンプルだけは昨日復元しました。次がメインとなるCatyスクリプト(リリース4仕様)。 /* fortune.cgi */ translate Birth | when { OK => {"input": pass, "message": read-json /message.json | util:randchoice, "today" : util:today } | print /fortune-resp.html, NG => pretty | print --mode=text /fortune-error.html }

    Catyスクリプトだけでノーロジック・アプリケーション - 檜山正幸のキマイラ飼育記 (はてなBlog)
    terazzo
    terazzo 2009/12/13
    むしろビジネスロジックの共通語が欲しいです。それでDBの制約や問い合わせ、ビジネス上の権限制御やワークフローのルール、出力テンプレート上のELを統一的に記述し相互に再利用する。