SlideShare uma empresa Scribd logo
1 de 56
Baixar para ler offline
Various
Web Form Widget Toolkits
          aodag
     Pycon JP 2011
お前誰よ


@aodag
小田切篤

BeProud勤務
今別の部屋で発表しているianと同僚

Djangoきらいです(´・ω・`) 
PylonsとかPyramidとか、既存のコンポーネント組み合わせてるもの
のほうが好きです。
SQLAlchemy

● データマッパー
● すごく柔軟
WSGI (PEP-333, PEP-3333)

PythonのWebアプリケーション標準

def hello(environ, start_response):
  start_response("200 OK",
     [('Content-type', 'text/plain')])
  return ["Hello, world!"]
Adminアプリケーション

Djangoのadmin(だけ)はいいね!

SQLAlchemyにも同じようなものがほしい

WSGIアプリで全般的に使いたい(あまりフレームワークに依存したく
ない)

Ajaxばりばりである必要はないけど、DatePickerとかSuggestとか、入
力補助系のJSが利用できるとよい
Adminアプリケーション

● クラスごとにサブアプリケーション
● グリッド表示と検索
● 入力フォーム
● カスタムアクションを追加できる
フォームライブラリを調査

Form Libraryの役割
比較ライブラリ
Form Libraryの役割

● HTMLフォーム生成
● バリデーション
比較ライブラリ

● ToscaWidgets / Sprox
● FormAlchemy
● tw2.sqla
● WTForms
● deform/colander
比較のポイント

● SQLAlchemyとの親和性
● バリデータのカスタマイズ
● フィールドのカスタマイズ
● ウィジェットのカスタマイズ
ToscaWidgets / Sprox

● SproxはSQLAlchemyのスキーマからToscaWidgetsのフォームを
  作成します
● SQLAlchemyのスキーマ以外のフィールドをフォームに追加した
  り、スキーマのフィールドをフォームから削除したりできます。
● formencodeでカスタムバリデータを作成します
● tw.formsでカスタムフィールドを作成します
FormAlchemy

● SQLAlchemyだけでなく、zope.schemaなどにも対応
● SQLAlchemyのスキーマ対応は一番すぐれている
● デフォルトで用意されているウィジェットレンダラーが少ない
● 実行時にもフィールド定義を変更可能
● jqueryuiを使ったfa.jqueryのような追加スキンが存在する
tw2

● ToscaWidgetsの後継
● まだ a4がリリースされたばかり、 発展途上
● SQLAlchemyから自動生成するフォームがある
   ○ many-to-manyまでは対応できてない
● SQLAlchemyというよりElixirに対応している
wtforms

● SQLAlchemyからのスキーマ生成はしない
● SelectのoptionをSQLAlchemyのクエリで設定可能
● 機能は少なめ
● その分はまりどころが少なく枯れるのが早そう
● フォーム全体の生成はしない
● グリッド生成もしない
● ToscaWidgetsのtw.formsと名前が紛らわしい><
deform / colander

 ● colanderはスキーマ定義
 ● deformはcolanderに対応しているフォームライブラリ
 ● SQLAlchemyからのスキーマ生成できない
 ● ウィジェットが豊富
 ● ajaxとりこみに意欲的
 ● deferred bindingにより実行時にウィジェットやバリデーションを変
   更可能
 ● テンプレートにchameleon(zope page template)を使っている
 ● テンプレートをmakoに入れ替えるプロジェクトが進行中

http://deformdemo.repoze.org/
Sample Model

SQLAlchemy
 ● User
    ○ user_name
    ○ password
    ○ user_image
    ○ groups
 ● Group
    ○ name
    ○ users
    ○ permissions
 ● Permission
    ○ name
    ○ groups
ポイント

● 全部many-to-manyの関連付け
● User - Group - Permission
● User - Permissionの派生関連付け
● _password 直接見せたくないフィールド
● ユーザー画像はファイル保存
Userフォーム Sprox

class UserForm(AddRecordForm):
   __model__ = models.User
   __require_fields__ = ['user_name']
   __omit_fields__ = ['_password']
   __field_order__ = ['user_name', 'password', 'groups']

  password = tw.forms.PasswordField('password',
                     validator=tw.forms.validators.NotEmpty)
Userグリッド Sprox

class UserTable(TableBase):
   __model__ = models.User

user_table = UserTable(models.DBSession)

class UserTableFiller(TableFiller):
   __model__ = models.User

user_table_filler = UserTableFiller(models.DBSession)

user_table(user_table_filler.get_value())
Sprox雑感

● AddRecordFormとEditableFormをそれぞれ作らないといけない
● SQLAlchemy0.7で動かない!
● many-to-manyがうまくフォームに反映されない
● デフォルトでアルファベット順になってしまうので、いい感じの順
  番にするには、全部指定しなおさないといけません(´・ω・`) 
(´・ω・`) 
そろそろ
オワコン?
Userフォーム FormAlchemy

class UserForm(FieldSet):
   def __init__(self, **kw):
     super(UserForm, self).__init__(model=User, **kw)

    excludes = [self._password]
    # 追加フィールド
    self.insert_after(self.user_name,
       Field('password').password().required())
    self.configure(exclude=excludes) # フォーム全体の設定
User グリッド FormAlchemy

class UserGrid(Grid):
   def __init__(self, **kw):
     super(UserGrid, self).__init__(cls=models.User, **kw)

    # Edit用のリンク追加
    self.append(Field('edit_link', value=lambda u: '<a href="%s/edit"
>Edit</a>' % u.id))
    self.configure(readonly=True, exclude=[self._password])


users = models.DBSession.query(models.User).all()
grid = user_grid.bind(users)
FormAlchemy雑感

やっぱりSQLAlchemy0.7で動かない(´・ω・`) 
fa.jqueryはまだ安定していない
many-to-manyをしっかりおいかけてくれる
開発が活発なので、今後に期待できる
全体的には
(・∀・)イイ!
  と思う
Userフォーム tw2.sqla

class UserForm(tw2.sqla.DbFormPage):
   entity = models.User
   class child(tw2.forms.TableForm):
      user_name = tw2.forms.TextField(validator=tw2.core.Required)
      password = tw2.forms.PasswordField(validator=tw2.core.
Required)
      user_image = tw2.forms.FileField()
      groups = tw2.sqla.DbSingleSelectField(entity=models.Group)
● SQLAlchemyのスキーマから自動生成する機能が追加されてき
  ていますが、使い物になりませんでした。(´・ω・`) 
● あと、entityクラスのqueryメソッドを呼ぼうとしたり、Elixirを前提に
  しすぎです。
● 遅延評価できるselectウィジェットに複数選択可能なものがなく、
  many-to-manyの関連付けに困ります
(゚д゚)
マダマダ
Userフォーム WTForms

def group_factory():
  return models.DBSession.query(models.Group)

class UserForm(wtforms.Form):
   username = wtforms.TextField('User Name')
   password = wtforms.PasswordField('Password')
   groups = QuerySelectMultipleField(query_factory=group_factory )
WTForms表示

<form method="post">
<table>
${self.field_row(form.username)}
${self.field_row(form.password)}
${self.field_row(form.groups)}
</table>
<button type="submit">Add</button>
</form>
WTForms 表示

<%def name="field_row(field)">
<tr>
<td>
${field.label}
</td>
<td>
${field()}
</td>
</tr>
</%def>
WTForms 雑感

● やれることが少ない分、はまりどころはなさそうです
● でもフォームライブラリ使ってるのにHTMLテーブル書くのはやで
  す。
● B2Cサイトで複雑なHTMLに入れるのに向いてそうですが、そん
  なことは他のフォームライブラリでできます
機能
少なすぎね?
 (´・ω・`) 
Userフォーム deform

class UserSchema(c.MappingSchema):
   # colanderはSQLAlchemyから自動生成しない
   user_name = c.SchemaNode(c.String())
   password = c.SchemaNode(c.String(),
      widget=w.PasswordWidget())


form = Form(UserSchema(), buttons=('save',))
colanderのdeferred bind 定義

実行時に、ウィジェット、やバリデータを切り替える仕組み

@c.deferred
def group_select_widget(node, kw):
  groups = kw['groups']
  return w.SelectWidget(values=[
     (g.id, g.group_name)
     for g in groups
     ])
colander deffered binding

class Group(c.MappingSchema):
   # groupを選択するためのスキーマ
   group_id = c.SchemaNode(c.String(),
        widget=group_select_widget)

class Groups(c.SequenceSchema):
   # groupを複数選択するためのスキーマ
   group = Group()

class UserSchema(c.MappingSchema):
   ......
   groups = Groups()
colanderのdeferred bind バインディング


schema = UserSchema()

groups = DBSession.query(Group)

# バインド
schema = schema.bind(groups=groups)

form = Form(schema, ....)
User フォーム deform バリデーション

try:
   params = form.validate(controls)
except ValidationFailure, e:
   e.render()
deform 雑感

● フォームでやりたいことは、おそらくなんでもできます。
● シーケンススキーマやマッピングスキーマを組み合わせることで、
  複雑な階層を持つスキーマも作成可能。
● その分ライブラリの構造が複雑です。
(´  > ω < )
  むずかしー!
ひとまずSQLAlchemyのデータ管理ツールを作るなら、FormAlchemy
が一番サポートされている。fa.jqueryは様子見たほうがいい。

1リクエストで複数のモデルを扱う場合は、colander / deform がほぼ
どんな構造でも対応できる。MongoDBなどスキーマレスDBを使う場
合は、こちらをおすすめする。
スタティックファイルの管理

deformやfa.jqueryはjquery.jsやjqueryui.js、その他cssなどが必要

フロントのApacheやnginexに任せてしまいたいが、
フォームライブラリが使うスタティックファイルはどこにあるのか?

ウィジェットライブラリが依存するjsなどをどう管理していくか?
Paste deployでがんばr

[app:deform_static]
use = egg:paste#pkg_resources
egg = deform
resource_name = deform/static

[composite:deform]
use = egg:paste#urlmap
/ = deform_app
/static = deform_static

[pipeline:deform_demo]
pipeline =
   egg:repoze.tm2#tm
   deform
Fanstatic

 ● スタティックファイルをホスティングするWSGIアプリ
 ● スタティックファイルを管理するユーティリティ、ミドルウェア
 ● fa.jqueryは今後これを使うようになる予定

http://pypi.python.org/pypi?%
3Aaction=search&term=fanstatic&submit=search
Fanstatic 例

from fanstatic import Fanstatic
from js.jqueryui import jqueryui

@wsgify
def app(request):
  jqueryui.need()
  return Response(body)

app = Fanstatic(app)
Fanstatic 例

body = """
<html>
<head>
</head>
<body>
Hello
</body>
</html>
"""
Fanstatic 例 実行結果

<html>
<head>
  <script type="text/javascript" src="/fanstatic/jquery/jquery.js"
></script>
<script type="text/javascript" src="/fanstatic/jqueryui/ui/jquery-ui.js"
></script>

</head>
<body>
Hello
</body>
</html>
参考

● SQLAlchemy http://www.sqlalchemy.org/
● ToscaWidgets http://toscawidgets.org/
● formencode http://formencode.org/
● Sprox http://sprox.org/
● tw2 http://toscawidgets.org/documentation/tw2.core/
● formalchemy http://docs.formalchemy.org/formalchemy
● fa.jquery http://docs.formalchemy.org/fa.jquery/
● WTForms http://wtforms.simplecodes.com/
● colandar https://docs.pylonsproject.org/projects/colander/dev/
● deform https://docs.pylonsproject.org/projects/deform/dev/
● fanstatic http://www.fanstatic.org/en/0.11.2/index.html

Mais conteúdo relacionado

Mais procurados

モテる JavaScript
モテる JavaScriptモテる JavaScript
モテる JavaScriptOsamu Monoe
 
Vue Router + Vuex
Vue Router + VuexVue Router + Vuex
Vue Router + VuexKei Yagi
 
アプリコンテスト
アプリコンテストアプリコンテスト
アプリコンテストTomonori Yamada
 
WordPress×jQueryMobile
WordPress×jQueryMobileWordPress×jQueryMobile
WordPress×jQueryMobileTakami Kazuya
 
JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤Yuichi Sakuraba
 
チュートリアルではじめるVue.js
チュートリアルではじめるVue.jsチュートリアルではじめるVue.js
チュートリアルではじめるVue.js小川 昌吾
 
Windows ストアアプリのgrid viewを入門してみた
Windows ストアアプリのgrid viewを入門してみたWindows ストアアプリのgrid viewを入門してみた
Windows ストアアプリのgrid viewを入門してみた一希 大田
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Akira Inoue
 
Viewを活用して複雑化と戦う
Viewを活用して複雑化と戦うViewを活用して複雑化と戦う
Viewを活用して複雑化と戦うKenjiro Kubota
 
jQuery Mobile 1.3 最新情報
jQuery Mobile 1.3 最新情報jQuery Mobile 1.3 最新情報
jQuery Mobile 1.3 最新情報yoshikawa_t
 
React で CSS カプセル化の可能性を考える
React で CSS カプセル化の可能性を考えるReact で CSS カプセル化の可能性を考える
React で CSS カプセル化の可能性を考えるYutaro Miyazaki
 
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015Mikiya Okuno
 
Componentization with Gilgamesh
Componentization with GilgameshComponentization with Gilgamesh
Componentization with GilgameshYusuke Goto
 
0406web creators night_DeNA
0406web creators night_DeNA0406web creators night_DeNA
0406web creators night_DeNADeNA_open_events
 
WordPress widget api
WordPress widget apiWordPress widget api
WordPress widget apiTakami Kazuya
 
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門Hirokazu Nishi
 

Mais procurados (20)

Scene BuilderでFXML
Scene BuilderでFXMLScene BuilderでFXML
Scene BuilderでFXML
 
モテる JavaScript
モテる JavaScriptモテる JavaScript
モテる JavaScript
 
Magento cafe plus #12
Magento cafe plus #12Magento cafe plus #12
Magento cafe plus #12
 
Vue Router + Vuex
Vue Router + VuexVue Router + Vuex
Vue Router + Vuex
 
アプリコンテスト
アプリコンテストアプリコンテスト
アプリコンテスト
 
WordPress×jQueryMobile
WordPress×jQueryMobileWordPress×jQueryMobile
WordPress×jQueryMobile
 
JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤JavaFX 2.0 - リッチクライアントのためのUI基盤
JavaFX 2.0 - リッチクライアントのためのUI基盤
 
AngularJS入門
AngularJS入門AngularJS入門
AngularJS入門
 
チュートリアルではじめるVue.js
チュートリアルではじめるVue.jsチュートリアルではじめるVue.js
チュートリアルではじめるVue.js
 
Windows ストアアプリのgrid viewを入門してみた
Windows ストアアプリのgrid viewを入門してみたWindows ストアアプリのgrid viewを入門してみた
Windows ストアアプリのgrid viewを入門してみた
 
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
Featuring Project Silk & Liike: 楽しい "モダン" Web 開発のちょっとディープなお話
 
Viewを活用して複雑化と戦う
Viewを活用して複雑化と戦うViewを活用して複雑化と戦う
Viewを活用して複雑化と戦う
 
jQuery Mobile 1.3 最新情報
jQuery Mobile 1.3 最新情報jQuery Mobile 1.3 最新情報
jQuery Mobile 1.3 最新情報
 
React で CSS カプセル化の可能性を考える
React で CSS カプセル化の可能性を考えるReact で CSS カプセル化の可能性を考える
React で CSS カプセル化の可能性を考える
 
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
 
Componentization with Gilgamesh
Componentization with GilgameshComponentization with Gilgamesh
Componentization with Gilgamesh
 
Ext.direct
Ext.directExt.direct
Ext.direct
 
0406web creators night_DeNA
0406web creators night_DeNA0406web creators night_DeNA
0406web creators night_DeNA
 
WordPress widget api
WordPress widget apiWordPress widget api
WordPress widget api
 
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
第1回 Magento Cafe Plus Kansai ~ Magentoカスタマイズ入門
 

Semelhante a Form libraries

Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for JavaTakuya Tsuchida
 
eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜ericsagnes
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回Naoyuki Yamada
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門Sho A
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)Hiroaki KOBAYASHI
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterMasanori Oobayashi
 
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~Yoshitaka Seo
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門spring_raining
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01Yusuke Ando
 
ブログの枠を超える?ためのWordPressカスタマイズ入門
ブログの枠を超える?ためのWordPressカスタマイズ入門ブログの枠を超える?ためのWordPressカスタマイズ入門
ブログの枠を超える?ためのWordPressカスタマイズ入門muracchi
 
ScaLa+Liftとか
ScaLa+LiftとかScaLa+Liftとか
ScaLa+Liftとかyouku
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2Nishida Kansuke
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSAyumi Goto
 
JJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/GrailsJJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/GrailsUehara Junji
 
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップYasuhito Yabe
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門Hisashi HATAKEYAMA
 
WordPress3.0 新デフォルトテーマ Twenty Ten 大解剖! ~秋バージョン~
WordPress3.0 新デフォルトテーマ Twenty Ten 大解剖! ~秋バージョン~WordPress3.0 新デフォルトテーマ Twenty Ten 大解剖! ~秋バージョン~
WordPress3.0 新デフォルトテーマ Twenty Ten 大解剖! ~秋バージョン~hokori matu
 

Semelhante a Form libraries (20)

Google App Engine for Java
Google App Engine for JavaGoogle App Engine for Java
Google App Engine for Java
 
20141129-dotNet2015
20141129-dotNet201520141129-dotNet2015
20141129-dotNet2015
 
eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜eZ Publish勉強会9月〜テンプレート言語〜
eZ Publish勉強会9月〜テンプレート言語〜
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
 
ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~ASP.NET MVC 2 ~新機能の紹介~
ASP.NET MVC 2 ~新機能の紹介~
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01
 
ブログの枠を超える?ためのWordPressカスタマイズ入門
ブログの枠を超える?ためのWordPressカスタマイズ入門ブログの枠を超える?ためのWordPressカスタマイズ入門
ブログの枠を超える?ためのWordPressカスタマイズ入門
 
ScaLa+Liftとか
ScaLa+LiftとかScaLa+Liftとか
ScaLa+Liftとか
 
⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2⑯jQueryをおぼえよう!その2
⑯jQueryをおぼえよう!その2
 
エンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJSエンタープライズ分野での実践AngularJS
エンタープライズ分野での実践AngularJS
 
JJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/GrailsJJUG CCC 2012 Real World Groovy/Grails
JJUG CCC 2012 Real World Groovy/Grails
 
「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ「html5 boilerplate」から考える、これからのマークアップ
「html5 boilerplate」から考える、これからのマークアップ
 
スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門スマートフォン向けサービスにおけるサーバサイド設計入門
スマートフォン向けサービスにおけるサーバサイド設計入門
 
WordPress3.0 新デフォルトテーマ Twenty Ten 大解剖! ~秋バージョン~
WordPress3.0 新デフォルトテーマ Twenty Ten 大解剖! ~秋バージョン~WordPress3.0 新デフォルトテーマ Twenty Ten 大解剖! ~秋バージョン~
WordPress3.0 新デフォルトテーマ Twenty Ten 大解剖! ~秋バージョン~
 
G * magazine 1
G * magazine 1G * magazine 1
G * magazine 1
 
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
 

Mais de Atsushi Odagiri

みんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしようみんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしようAtsushi Odagiri
 
async/await の向こう側 PyCon Kyushu 2022
async/await の向こう側 PyCon Kyushu 2022async/await の向こう側 PyCon Kyushu 2022
async/await の向こう側 PyCon Kyushu 2022Atsushi Odagiri
 
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
パッケージングの呼び声 Python Charity Talks in Japan 2021.02パッケージングの呼び声 Python Charity Talks in Japan 2021.02
パッケージングの呼び声 Python Charity Talks in Japan 2021.02Atsushi Odagiri
 
eggとはなんだったのか 栄光のsetuptools
eggとはなんだったのか 栄光のsetuptoolseggとはなんだったのか 栄光のsetuptools
eggとはなんだったのか 栄光のsetuptoolsAtsushi Odagiri
 
pyconjp 2019 LT 今日のsetuptools
pyconjp 2019 LT 今日のsetuptoolspyconjp 2019 LT 今日のsetuptools
pyconjp 2019 LT 今日のsetuptoolsAtsushi Odagiri
 
Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定Atsushi Odagiri
 
Pythonとパッケージングと私
Pythonとパッケージングと私Pythonとパッケージングと私
Pythonとパッケージングと私Atsushi Odagiri
 
Python3 移行への軌跡
Python3 移行への軌跡Python3 移行への軌跡
Python3 移行への軌跡Atsushi Odagiri
 
パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016Atsushi Odagiri
 
Sqlalchemy sqlの錬金術
Sqlalchemy  sqlの錬金術Sqlalchemy  sqlの錬金術
Sqlalchemy sqlの錬金術Atsushi Odagiri
 
パッケージングの今
パッケージングの今パッケージングの今
パッケージングの今Atsushi Odagiri
 
パッケージングの今と未来
パッケージングの今と未来パッケージングの今と未来
パッケージングの今と未来Atsushi Odagiri
 
パッケージングの今と未来
パッケージングの今と未来パッケージングの今と未来
パッケージングの今と未来Atsushi Odagiri
 
Pyconjp2012 memory-of-europython
Pyconjp2012 memory-of-europythonPyconjp2012 memory-of-europython
Pyconjp2012 memory-of-europythonAtsushi Odagiri
 
What makes pyramid unique
What makes pyramid uniqueWhat makes pyramid unique
What makes pyramid uniqueAtsushi Odagiri
 
エキPy lt repoze.whoの紹介
エキPy lt repoze.whoの紹介エキPy lt repoze.whoの紹介
エキPy lt repoze.whoの紹介Atsushi Odagiri
 

Mais de Atsushi Odagiri (20)

みんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしようみんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしよう
 
async/await の向こう側 PyCon Kyushu 2022
async/await の向こう側 PyCon Kyushu 2022async/await の向こう側 PyCon Kyushu 2022
async/await の向こう側 PyCon Kyushu 2022
 
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
パッケージングの呼び声 Python Charity Talks in Japan 2021.02パッケージングの呼び声 Python Charity Talks in Japan 2021.02
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
 
eggとはなんだったのか 栄光のsetuptools
eggとはなんだったのか 栄光のsetuptoolseggとはなんだったのか 栄光のsetuptools
eggとはなんだったのか 栄光のsetuptools
 
pyconjp 2019 LT 今日のsetuptools
pyconjp 2019 LT 今日のsetuptoolspyconjp 2019 LT 今日のsetuptools
pyconjp 2019 LT 今日のsetuptools
 
Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定
 
Pythonとパッケージングと私
Pythonとパッケージングと私Pythonとパッケージングと私
Pythonとパッケージングと私
 
Python3 移行への軌跡
Python3 移行への軌跡Python3 移行への軌跡
Python3 移行への軌跡
 
パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016
 
Sqlalchemy sqlの錬金術
Sqlalchemy  sqlの錬金術Sqlalchemy  sqlの錬金術
Sqlalchemy sqlの錬金術
 
Clack meetup #1 lt
Clack meetup #1 ltClack meetup #1 lt
Clack meetup #1 lt
 
Pyramid入門
Pyramid入門Pyramid入門
Pyramid入門
 
パッケージングの今
パッケージングの今パッケージングの今
パッケージングの今
 
パッケージングの今と未来
パッケージングの今と未来パッケージングの今と未来
パッケージングの今と未来
 
パッケージングの今と未来
パッケージングの今と未来パッケージングの今と未来
パッケージングの今と未来
 
Bplt11 form alchemy
Bplt11 form alchemyBplt11 form alchemy
Bplt11 form alchemy
 
Python3でwebアプリ
Python3でwebアプリPython3でwebアプリ
Python3でwebアプリ
 
Pyconjp2012 memory-of-europython
Pyconjp2012 memory-of-europythonPyconjp2012 memory-of-europython
Pyconjp2012 memory-of-europython
 
What makes pyramid unique
What makes pyramid uniqueWhat makes pyramid unique
What makes pyramid unique
 
エキPy lt repoze.whoの紹介
エキPy lt repoze.whoの紹介エキPy lt repoze.whoの紹介
エキPy lt repoze.whoの紹介
 

Form libraries