狠狠撸

狠狠撸Share a Scribd company logo
『笔测迟丑辞苍で搁补办别もどきを作ってみた』




        makoto kuwata <kwa@kuwata-lab.com>

                                             1
pyKook - Python版 Rake
          タスク定义をPythonで記述

          タスク処理を「料理」に例える

              Recipe (タスク定义), Cookbook (定義ファイル),
              Product (生成物), Ingredient (材料), ...

          http://www.kuwata-lab.com/kook/pykook-
          users-guide.html



LLTV 2009 Lightning Talk            copyright? 2009 kuwata-lab.com all rights reserved
                                                                                         2
タスク定义

                   Kookbook.py            @recipe をつけると
                                            タスク定义に
                           @recipe
                           def clean(c):                関数ドキュメントが
                             '''remove *.o ?les'''       タスクの摘要に
                             rm_rf("**/*.o")

                                       コマンドでは
                                      「**/」が利用可能


LLTV 2009 Lightning Talk                             copyright? 2009 kuwata-lab.com all rights reserved
                                                                                                          3
タスクの一覧と実行

   タスクの実行                         タスク一覧の表示
     sh> kk clean                 sh> kk -l
     ### * clean (recipe=clean)   Properties:
     $ rm -rf **/*.o
                                  Task recipes:
                                   clean     : remove *.o
          ?kk または pykook で起動
          ?-l または -L で一覧表示
                                  File recipes:


LLTV 2009 Lightning Talk               copyright? 2009 kuwata-lab.com all rights reserved
                                                                                            4
ファイル生成ルール
                           Kookbook.py
    @product() に                                     もしファイルが
    パターンを指定                 @recipe
                                                     存在するなら
                            @product('*.o')
                            @ingreds('$(1).c', if_exists('$(1).h'))
    @ingreds() で
                            def ?le_o(c):
     材料を指定
                              '''compile *.c into *.o'''
                              system(c%"gcc -c $(ingred)")

                                キーワードや変数を埋め込み可能
                               (例: $(ingred) は最初の材料を表す)

LLTV 2009 Lightning Talk                           copyright? 2009 kuwata-lab.com all rights reserved
                                                                                                        5
内容が変更されたか确认
                                     タイムスタンプだけ更新される
                           hello

                 X
             コンパイル

                                     ファイルの内容に変更なし
                           hello.o
             コンパイル
                                      コメントだけを変更して
                           hello.c     「kk hello」を実行



LLTV 2009 Lightning Talk                  copyright? 2009 kuwata-lab.com all rights reserved
                                                                                               6
タスク别オプション
   Kookbook.py            @spices でタスクごとの
   @recipe             command-line option を定義

   @spices("-d: debug mode",
                                         commad-line の引数と
             "-p port: port number")
                                          オプションを受け取る
   def start(c, *args, **kwargs):
     debug = kwargs.get('d') # True or None
     port = kwargs.get("p", 8080)
     app = args and args[0] or 'helloworld'
     echo(c%"debug=$(debug), port=$(port), app=$(app)")

    ### 実行例: sh> kk start -dp 8080 helloworld
LLTV 2009 Lightning Talk             copyright? 2009 kuwata-lab.com all rights reserved
                                                                                          7
コマンドフレームワーク
      mygit
                                        「pykook -X」を
        #!/usr/bin/env pykook -X        shebang に指定
           kook_desc = "git helper"
                                        コマンドの説明
           @recipe
           def ci(c):
             '''invokes git commit'''
             system("git commit -a")
           @recipe                     各タスクがサブコマンドに
           def co(c):
             '''invokes git clone'''
             system(c%"git clone $(url)")
LLTV 2009 Lightning Talk                 copyright? 2009 kuwata-lab.com all rights reserved
                                                                                              8
実行例
   サブコマンドの実行                    サブコマンド一覧
     sh> ./mygit ci             sh> ./mygit -h
     [master 773f3ba] comment   mygit - git helper
      1 ?les changed,
      1 insertions(+),
      0 deletions(-)            sub-commands:
                                 ci   : invokes git commit
                                 co : invokes git clone

             ?スクリプト名で起動する
             ?(kk や pykook ではないことに注意)
             ?サブコマンド別のオプションも可能
LLTV 2009 Lightning Talk              copyright? 2009 kuwata-lab.com all rights reserved
                                                                                           9
プロパティとプロパティファイル
      Kookbook.py
        CC = prop("CC", "gcc")
        c?ags = prop("c?ags", "")
        @recipe
        def build(c):
          system(c%"$(CC) $(c?ags) hello.c")

      Properties.py
                                     コマンドラインでも
       c?ags = "-g -Wall"         「--c?ags='...'」で指定可能



LLTV 2009 Lightning Talk                  copyright? 2009 kuwata-lab.com all rights reserved
                                                                                               10
定义済みコマンド
       cp(), cp_p(), cp_r(), cp_pr()   system()

       rm(), rm_r(), rm_f(), rm_rf()   echo()

       mkdir(), mkdir_p()              touch()

       mv()                            cd(), chdir()

       store() # ディレクトリ構造を             with chdir('build'):
       保ったままコピー                           system('...')
       edit() # ファイルを一括変更              # withを抜けると
                                       # 元の場所に自動復帰

LLTV 2009 Lightning Talk               copyright? 2009 kuwata-lab.com all rights reserved
                                                                                            11
その他の机能
          「-n」でコマンドを実行せず表示のみ(dry-run)

          「-F」で強制実行(タイムスタンプを無視)

          「-D」でより詳細な情報を表示

          タスク定义のループを自動検出




LLTV 2009 Lightning Talk       copyright? 2009 kuwata-lab.com all rights reserved
                                                                                    12
続きは奥别产で!
      http://www.kuwata-lab.com/kook/pykook-users-guide.html




LLTV 2009 Lightning Talk                 copyright? 2009 kuwata-lab.com all rights reserved
                                                                                              13
thank you

            14

More Related Content

What's hot (16)

Boost tour 1_40_0
Boost tour 1_40_0Boost tour 1_40_0
Boost tour 1_40_0
Akira Takahashi
?
Apache Camel Netty component
Apache Camel Netty componentApache Camel Netty component
Apache Camel Netty component
ssogabe
?
颁辞肠辞补勉强会#33-意外に楽に使える濒颈产肠耻谤濒
颁辞肠辞补勉强会#33-意外に楽に使える濒颈产肠耻谤濒颁辞肠辞补勉强会#33-意外に楽に使える濒颈产肠耻谤濒
颁辞肠辞补勉强会#33-意外に楽に使える濒颈产肠耻谤濒
Masayuki Nii
?
Netty & Apache Camel
Netty & Apache CamelNetty & Apache Camel
Netty & Apache Camel
ssogabe
?
20分で理解する诲颈蝉辫濒补测蝉测蝉迟别尘
20分で理解する诲颈蝉辫濒补测蝉测蝉迟别尘20分で理解する诲颈蝉辫濒补测蝉测蝉迟别尘
20分で理解する诲颈蝉辫濒补测蝉测蝉迟别尘
magoroku Yamamoto
?
Lagopus 0.2
Lagopus 0.2Lagopus 0.2
Lagopus 0.2
Masaru Oki
?
Rake
RakeRake
Rake
Tomoya Kawanishi
?
Tokyo.R#16 wdkz
Tokyo.R#16 wdkzTokyo.R#16 wdkz
Tokyo.R#16 wdkz
Kazuya Wada
?
ラホ?ユース最终成果报告会(奥别产公开版)
ラホ?ユース最终成果报告会(奥别产公开版)ラホ?ユース最终成果报告会(奥别产公开版)
ラホ?ユース最终成果报告会(奥别产公开版)
Shinichi Awamoto
?
曖昧 RPM 講座
曖昧 RPM 講座曖昧 RPM 講座
曖昧 RPM 講座
Tetsuya Morimoto
?
R を起動するその前に
R を起動するその前にR を起動するその前に
R を起動するその前に
Kosei ABE
?
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)
NTT DATA OSS Professional Services
?
2日間Fabricを触った俺か?? 色々解説してみる
2日間Fabricを触った俺か?? 色々解説してみる2日間Fabricを触った俺か?? 色々解説してみる
2日間Fabricを触った俺か?? 色々解説してみる
airtoxin Ishii
?
Apache Camel Netty component
Apache Camel Netty componentApache Camel Netty component
Apache Camel Netty component
ssogabe
?
颁辞肠辞补勉强会#33-意外に楽に使える濒颈产肠耻谤濒
颁辞肠辞补勉强会#33-意外に楽に使える濒颈产肠耻谤濒颁辞肠辞补勉强会#33-意外に楽に使える濒颈产肠耻谤濒
颁辞肠辞补勉强会#33-意外に楽に使える濒颈产肠耻谤濒
Masayuki Nii
?
Netty & Apache Camel
Netty & Apache CamelNetty & Apache Camel
Netty & Apache Camel
ssogabe
?
20分で理解する诲颈蝉辫濒补测蝉测蝉迟别尘
20分で理解する诲颈蝉辫濒补测蝉测蝉迟别尘20分で理解する诲颈蝉辫濒补测蝉测蝉迟别尘
20分で理解する诲颈蝉辫濒补测蝉测蝉迟别尘
magoroku Yamamoto
?
ラホ?ユース最终成果报告会(奥别产公开版)
ラホ?ユース最终成果报告会(奥别产公开版)ラホ?ユース最终成果报告会(奥别产公开版)
ラホ?ユース最终成果报告会(奥别产公开版)
Shinichi Awamoto
?
R を起動するその前に
R を起動するその前にR を起動するその前に
R を起動するその前に
Kosei ABE
?
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)
Sqoopコネクタを書いてみた (Hadoopソースコードリーディング第12回 発表資料)
NTT DATA OSS Professional Services
?
2日間Fabricを触った俺か?? 色々解説してみる
2日間Fabricを触った俺か?? 色々解説してみる2日間Fabricを触った俺か?? 色々解説してみる
2日間Fabricを触った俺か?? 色々解説してみる
airtoxin Ishii
?

Similar to 笔测迟丑辞苍で搁补办别もどきを作ってみた (20)

ソフトウェア工学2023 14 ヒ?ルト?
ソフトウェア工学2023 14 ヒ?ルト?ソフトウェア工学2023 14 ヒ?ルト?
ソフトウェア工学2023 14 ヒ?ルト?
Toru Tamaki
?
Capistrano
CapistranoCapistrano
Capistrano
Yasuharu Fukuda
?
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
?
辩尘补办别入门
辩尘补办别入门辩尘补办别入门
辩尘补办别入门
hermit4 Ishida
?
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2
Tomohiro Namba
?
辞肠补尘濒辞辫迟の全体像
辞肠补尘濒辞辫迟の全体像辞肠补尘濒辞辫迟の全体像
辞肠补尘濒辞辫迟の全体像
Kiwamu Okabe
?
顿别产颈补苍を用いた颁辞谤迟别虫-惭3マイコン开発事例のご绍介
顿别产颈补苍を用いた颁辞谤迟别虫-惭3マイコン开発事例のご绍介顿别产颈补苍を用いた颁辞谤迟别虫-惭3マイコン开発事例のご绍介
顿别产颈补苍を用いた颁辞谤迟别虫-惭3マイコン开発事例のご绍介
Kiwamu Okabe
?
Ruby&Active Support for expert 3
Ruby&Active Support for expert 3Ruby&Active Support for expert 3
Ruby&Active Support for expert 3
xibbar
?
lilo.linux.or.jp の話 (2017年8月)
lilo.linux.or.jp の話 (2017年8月)lilo.linux.or.jp の話 (2017年8月)
lilo.linux.or.jp の話 (2017年8月)
Kazuhiro Nishiyama
?
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指す
AromaBlack
?
第一回コンテナ情报交换会蔼関西
第一回コンテナ情报交换会蔼関西第一回コンテナ情报交换会蔼関西
第一回コンテナ情报交换会蔼関西
Masahide Yamamoto
?
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Emma Haruka Iwao
?
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
Hiroshi Miura
?
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
Hiroshi Miura
?
骋辞言语による飞别产アフ?リの作り方
骋辞言语による飞别产アフ?リの作り方骋辞言语による飞别产アフ?リの作り方
骋辞言语による飞别产アフ?リの作り方
Yasutaka Kawamoto
?
贵补产谤颈肠でサーバー管理を顿搁驰にしよう
贵补产谤颈肠でサーバー管理を顿搁驰にしよう贵补产谤颈肠でサーバー管理を顿搁驰にしよう
贵补产谤颈肠でサーバー管理を顿搁驰にしよう
max747
?
Perl/CGI 入門
Perl/CGI 入門Perl/CGI 入門
Perl/CGI 入門
keroyonn
?
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方
Satoshi Nagayasu
?
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
Kentaro Ebisawa
?
ソフトウェア工学2023 14 ヒ?ルト?
ソフトウェア工学2023 14 ヒ?ルト?ソフトウェア工学2023 14 ヒ?ルト?
ソフトウェア工学2023 14 ヒ?ルト?
Toru Tamaki
?
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
?
研究生のためのC++ no.2
研究生のためのC++ no.2研究生のためのC++ no.2
研究生のためのC++ no.2
Tomohiro Namba
?
辞肠补尘濒辞辫迟の全体像
辞肠补尘濒辞辫迟の全体像辞肠补尘濒辞辫迟の全体像
辞肠补尘濒辞辫迟の全体像
Kiwamu Okabe
?
顿别产颈补苍を用いた颁辞谤迟别虫-惭3マイコン开発事例のご绍介
顿别产颈补苍を用いた颁辞谤迟别虫-惭3マイコン开発事例のご绍介顿别产颈补苍を用いた颁辞谤迟别虫-惭3マイコン开発事例のご绍介
顿别产颈补苍を用いた颁辞谤迟别虫-惭3マイコン开発事例のご绍介
Kiwamu Okabe
?
Ruby&Active Support for expert 3
Ruby&Active Support for expert 3Ruby&Active Support for expert 3
Ruby&Active Support for expert 3
xibbar
?
lilo.linux.or.jp の話 (2017年8月)
lilo.linux.or.jp の話 (2017年8月)lilo.linux.or.jp の話 (2017年8月)
lilo.linux.or.jp の話 (2017年8月)
Kazuhiro Nishiyama
?
ひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指すひのきのぼうだけで全クリ目指す
ひのきのぼうだけで全クリ目指す
AromaBlack
?
第一回コンテナ情报交换会蔼関西
第一回コンテナ情报交换会蔼関西第一回コンテナ情报交换会蔼関西
第一回コンテナ情报交换会蔼関西
Masahide Yamamoto
?
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Emma Haruka Iwao
?
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
Hiroshi Miura
?
Building production server on docker
Building production server on dockerBuilding production server on docker
Building production server on docker
Hiroshi Miura
?
骋辞言语による飞别产アフ?リの作り方
骋辞言语による飞别产アフ?リの作り方骋辞言语による飞别产アフ?リの作り方
骋辞言语による飞别产アフ?リの作り方
Yasutaka Kawamoto
?
贵补产谤颈肠でサーバー管理を顿搁驰にしよう
贵补产谤颈肠でサーバー管理を顿搁驰にしよう贵补产谤颈肠でサーバー管理を顿搁驰にしよう
贵补产谤颈肠でサーバー管理を顿搁驰にしよう
max747
?
Perl/CGI 入門
Perl/CGI 入門Perl/CGI 入門
Perl/CGI 入門
keroyonn
?
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方
Satoshi Nagayasu
?

More from kwatch (20)

How to make the fastest Router in Python
How to make the fastest Router in PythonHow to make the fastest Router in Python
How to make the fastest Router in Python
kwatch
?
Migr8.rb チュートリアル
Migr8.rb チュートリアルMigr8.rb チュートリアル
Migr8.rb チュートリアル
kwatch
?
なんでも滨顿
なんでも滨顿なんでも滨顿
なんでも滨顿
kwatch
?
狈颈辫辫辞苍诲补苍箩颈氏に怒られても仕方ない、配列型と闯厂翱狈型の使い方
狈颈辫辫辞苍诲补苍箩颈氏に怒られても仕方ない、配列型と闯厂翱狈型の使い方狈颈辫辫辞苍诲补苍箩颈氏に怒られても仕方ない、配列型と闯厂翱狈型の使い方
狈颈辫辫辞苍诲补苍箩颈氏に怒られても仕方ない、配列型と闯厂翱狈型の使い方
kwatch
?
【厂蚕尝インジェクション対策】徳丸先生に怒られない、动的厂蚕尝の安全な组み立て方
【厂蚕尝インジェクション対策】徳丸先生に怒られない、动的厂蚕尝の安全な组み立て方【厂蚕尝インジェクション対策】徳丸先生に怒られない、动的厂蚕尝の安全な组み立て方
【厂蚕尝インジェクション対策】徳丸先生に怒られない、动的厂蚕尝の安全な组み立て方
kwatch
?
翱/搁マッパーによるトラブルを未然に防ぐ
翱/搁マッパーによるトラブルを未然に防ぐ翱/搁マッパーによるトラブルを未然に防ぐ
翱/搁マッパーによるトラブルを未然に防ぐ
kwatch
?
正规表现リテラルは本当に必要なのか?
正规表现リテラルは本当に必要なのか?正规表现リテラルは本当に必要なのか?
正规表现リテラルは本当に必要なのか?
kwatch
?
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
kwatch
?
顿叠スキーマもバージョン管理したい!
顿叠スキーマもバージョン管理したい!顿叠スキーマもバージョン管理したい!
顿叠スキーマもバージョン管理したい!
kwatch
?
笔贬笔と闯补惫补厂肠谤颈辫迟におけるオブジェクト指向を比较する
笔贬笔と闯补惫补厂肠谤颈辫迟におけるオブジェクト指向を比较する笔贬笔と闯补惫补厂肠谤颈辫迟におけるオブジェクト指向を比较する
笔贬笔と闯补惫补厂肠谤颈辫迟におけるオブジェクト指向を比较する
kwatch
?
厂蚕尝上级者こそ知って欲しい、なぜ翱/搁マッパーが重要か?
厂蚕尝上级者こそ知って欲しい、なぜ翱/搁マッパーが重要か?厂蚕尝上级者こそ知って欲しい、なぜ翱/搁マッパーが重要か?
厂蚕尝上级者こそ知って欲しい、なぜ翱/搁マッパーが重要か?
kwatch
?
Fantastic DSL in Python
Fantastic DSL in PythonFantastic DSL in Python
Fantastic DSL in Python
kwatch
?
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
kwatch
?
笔贬笔5.5新机能「ジェネレータ」初心者入门
笔贬笔5.5新机能「ジェネレータ」初心者入门笔贬笔5.5新机能「ジェネレータ」初心者入门
笔贬笔5.5新机能「ジェネレータ」初心者入门
kwatch
?
Pretty Good Branch Strategy for Git/Mercurial
Pretty Good Branch Strategy for Git/MercurialPretty Good Branch Strategy for Git/Mercurial
Pretty Good Branch Strategy for Git/Mercurial
kwatch
?
Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -
kwatch
?
文字列结合のベンチマークをいろんな処理系でやってみた
文字列结合のベンチマークをいろんな処理系でやってみた文字列结合のベンチマークをいろんな処理系でやってみた
文字列结合のベンチマークをいろんな処理系でやってみた
kwatch
?
I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"
kwatch
?
颁より速い搁耻产测プログラム
颁より速い搁耻产测プログラム颁より速い搁耻产测プログラム
颁より速い搁耻产测プログラム
kwatch
?
闯补惫补より速い尝尝用テンプレートエンジン
闯补惫补より速い尝尝用テンプレートエンジン闯补惫补より速い尝尝用テンプレートエンジン
闯补惫补より速い尝尝用テンプレートエンジン
kwatch
?
How to make the fastest Router in Python
How to make the fastest Router in PythonHow to make the fastest Router in Python
How to make the fastest Router in Python
kwatch
?
Migr8.rb チュートリアル
Migr8.rb チュートリアルMigr8.rb チュートリアル
Migr8.rb チュートリアル
kwatch
?
なんでも滨顿
なんでも滨顿なんでも滨顿
なんでも滨顿
kwatch
?
狈颈辫辫辞苍诲补苍箩颈氏に怒られても仕方ない、配列型と闯厂翱狈型の使い方
狈颈辫辫辞苍诲补苍箩颈氏に怒られても仕方ない、配列型と闯厂翱狈型の使い方狈颈辫辫辞苍诲补苍箩颈氏に怒られても仕方ない、配列型と闯厂翱狈型の使い方
狈颈辫辫辞苍诲补苍箩颈氏に怒られても仕方ない、配列型と闯厂翱狈型の使い方
kwatch
?
【厂蚕尝インジェクション対策】徳丸先生に怒られない、动的厂蚕尝の安全な组み立て方
【厂蚕尝インジェクション対策】徳丸先生に怒られない、动的厂蚕尝の安全な组み立て方【厂蚕尝インジェクション対策】徳丸先生に怒られない、动的厂蚕尝の安全な组み立て方
【厂蚕尝インジェクション対策】徳丸先生に怒られない、动的厂蚕尝の安全な组み立て方
kwatch
?
翱/搁マッパーによるトラブルを未然に防ぐ
翱/搁マッパーによるトラブルを未然に防ぐ翱/搁マッパーによるトラブルを未然に防ぐ
翱/搁マッパーによるトラブルを未然に防ぐ
kwatch
?
正规表现リテラルは本当に必要なのか?
正规表现リテラルは本当に必要なのか?正规表现リテラルは本当に必要なのか?
正规表现リテラルは本当に必要なのか?
kwatch
?
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
kwatch
?
顿叠スキーマもバージョン管理したい!
顿叠スキーマもバージョン管理したい!顿叠スキーマもバージョン管理したい!
顿叠スキーマもバージョン管理したい!
kwatch
?
笔贬笔と闯补惫补厂肠谤颈辫迟におけるオブジェクト指向を比较する
笔贬笔と闯补惫补厂肠谤颈辫迟におけるオブジェクト指向を比较する笔贬笔と闯补惫补厂肠谤颈辫迟におけるオブジェクト指向を比较する
笔贬笔と闯补惫补厂肠谤颈辫迟におけるオブジェクト指向を比较する
kwatch
?
厂蚕尝上级者こそ知って欲しい、なぜ翱/搁マッパーが重要か?
厂蚕尝上级者こそ知って欲しい、なぜ翱/搁マッパーが重要か?厂蚕尝上级者こそ知って欲しい、なぜ翱/搁マッパーが重要か?
厂蚕尝上级者こそ知って欲しい、なぜ翱/搁マッパーが重要か?
kwatch
?
Fantastic DSL in Python
Fantastic DSL in PythonFantastic DSL in Python
Fantastic DSL in Python
kwatch
?
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
kwatch
?
笔贬笔5.5新机能「ジェネレータ」初心者入门
笔贬笔5.5新机能「ジェネレータ」初心者入门笔贬笔5.5新机能「ジェネレータ」初心者入门
笔贬笔5.5新机能「ジェネレータ」初心者入门
kwatch
?
Pretty Good Branch Strategy for Git/Mercurial
Pretty Good Branch Strategy for Git/MercurialPretty Good Branch Strategy for Git/Mercurial
Pretty Good Branch Strategy for Git/Mercurial
kwatch
?
Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -
kwatch
?
文字列结合のベンチマークをいろんな処理系でやってみた
文字列结合のベンチマークをいろんな処理系でやってみた文字列结合のベンチマークをいろんな処理系でやってみた
文字列结合のベンチマークをいろんな処理系でやってみた
kwatch
?
I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"
kwatch
?
颁より速い搁耻产测プログラム
颁より速い搁耻产测プログラム颁より速い搁耻产测プログラム
颁より速い搁耻产测プログラム
kwatch
?
闯补惫补より速い尝尝用テンプレートエンジン
闯补惫补より速い尝尝用テンプレートエンジン闯补惫补より速い尝尝用テンプレートエンジン
闯补惫补より速い尝尝用テンプレートエンジン
kwatch
?

Recently uploaded (11)

【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
harmonylab
?
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
harmonylab
?
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
NTT DATA Technology & Innovation
?
LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3
LFDT Tokyo Meetup
?
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
?
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
Matsushita Laboratory
?
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
sugiuralab
?
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
Matsushita Laboratory
?
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
CRI Japan, Inc.
?
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
sugiuralab
?
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
Matsushita Laboratory
?
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
【卒业论文】尝尝惭を用いた惭耻濒迟颈-础驳别苍迟-顿别产补迟别における反论の効果に関する研究
harmonylab
?
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
【卒业论文】深层学习によるログ异常検知モデルを用いたサイバー攻撃検知に関する研究
harmonylab
?
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
NTT DATA Technology & Innovation
?
LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3LF Decentralized Trust Tokyo Meetup 3
LF Decentralized Trust Tokyo Meetup 3
LFDT Tokyo Meetup
?
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
ラズパイを使って作品を作ったらラズパイコンテストで碍厂驰赏を貰って、さらに、文化庁メディア芸术祭で审査员推荐作品に选ばれてしまった件?自作チップでラズパイ...
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
?
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
贬补谤耻办颈厂丑颈苍办补飞补冲尝尝惭を利用した果树农家の経験知の対话的蓄积支援冲诲别颈尘2025
Matsushita Laboratory
?
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
测距センサと滨惭鲍センサを用いた指轮型デバイスにおける颜认証システムの提案
sugiuralab
?
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
第1回日本理学疗法推论学会学术大会での発表资料(2025年3月2日 高桥可奈恵)
Matsushita Laboratory
?
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
2025フードテックWeek大阪展示会 - LoRaWANを使った複数ポイント温度管理 by AVNET玉井部長
CRI Japan, Inc.
?
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
空间オーディオを用いたヘッドパスワードの提案と音源提示手法の最适化
sugiuralab
?
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
狈辞诲补滨迟蝉耻办颈冲反省観点の分类に基づく试合の振り返り支援システムに関する有用性検証冲顿贰滨惭2025
Matsushita Laboratory
?

笔测迟丑辞苍で搁补办别もどきを作ってみた

  • 2. pyKook - Python版 Rake タスク定义をPythonで記述 タスク処理を「料理」に例える Recipe (タスク定义), Cookbook (定義ファイル), Product (生成物), Ingredient (材料), ... http://www.kuwata-lab.com/kook/pykook- users-guide.html LLTV 2009 Lightning Talk copyright? 2009 kuwata-lab.com all rights reserved 2
  • 3. タスク定义 Kookbook.py @recipe をつけると タスク定义に @recipe def clean(c): 関数ドキュメントが '''remove *.o ?les''' タスクの摘要に rm_rf("**/*.o") コマンドでは 「**/」が利用可能 LLTV 2009 Lightning Talk copyright? 2009 kuwata-lab.com all rights reserved 3
  • 4. タスクの一覧と実行 タスクの実行 タスク一覧の表示 sh> kk clean sh> kk -l ### * clean (recipe=clean) Properties: $ rm -rf **/*.o Task recipes: clean : remove *.o ?kk または pykook で起動 ?-l または -L で一覧表示 File recipes: LLTV 2009 Lightning Talk copyright? 2009 kuwata-lab.com all rights reserved 4
  • 5. ファイル生成ルール Kookbook.py @product() に もしファイルが パターンを指定 @recipe 存在するなら @product('*.o') @ingreds('$(1).c', if_exists('$(1).h')) @ingreds() で def ?le_o(c): 材料を指定 '''compile *.c into *.o''' system(c%"gcc -c $(ingred)") キーワードや変数を埋め込み可能 (例: $(ingred) は最初の材料を表す) LLTV 2009 Lightning Talk copyright? 2009 kuwata-lab.com all rights reserved 5
  • 6. 内容が変更されたか确认 タイムスタンプだけ更新される hello X コンパイル ファイルの内容に変更なし hello.o コンパイル コメントだけを変更して hello.c 「kk hello」を実行 LLTV 2009 Lightning Talk copyright? 2009 kuwata-lab.com all rights reserved 6
  • 7. タスク别オプション Kookbook.py @spices でタスクごとの @recipe command-line option を定義 @spices("-d: debug mode", commad-line の引数と "-p port: port number") オプションを受け取る def start(c, *args, **kwargs): debug = kwargs.get('d') # True or None port = kwargs.get("p", 8080) app = args and args[0] or 'helloworld' echo(c%"debug=$(debug), port=$(port), app=$(app)") ### 実行例: sh> kk start -dp 8080 helloworld LLTV 2009 Lightning Talk copyright? 2009 kuwata-lab.com all rights reserved 7
  • 8. コマンドフレームワーク mygit 「pykook -X」を #!/usr/bin/env pykook -X shebang に指定 kook_desc = "git helper" コマンドの説明 @recipe def ci(c): '''invokes git commit''' system("git commit -a") @recipe 各タスクがサブコマンドに def co(c): '''invokes git clone''' system(c%"git clone $(url)") LLTV 2009 Lightning Talk copyright? 2009 kuwata-lab.com all rights reserved 8
  • 9. 実行例 サブコマンドの実行 サブコマンド一覧 sh> ./mygit ci sh> ./mygit -h [master 773f3ba] comment mygit - git helper 1 ?les changed, 1 insertions(+), 0 deletions(-) sub-commands: ci : invokes git commit co : invokes git clone ?スクリプト名で起動する ?(kk や pykook ではないことに注意) ?サブコマンド別のオプションも可能 LLTV 2009 Lightning Talk copyright? 2009 kuwata-lab.com all rights reserved 9
  • 10. プロパティとプロパティファイル Kookbook.py CC = prop("CC", "gcc") c?ags = prop("c?ags", "") @recipe def build(c): system(c%"$(CC) $(c?ags) hello.c") Properties.py コマンドラインでも c?ags = "-g -Wall" 「--c?ags='...'」で指定可能 LLTV 2009 Lightning Talk copyright? 2009 kuwata-lab.com all rights reserved 10
  • 11. 定义済みコマンド cp(), cp_p(), cp_r(), cp_pr() system() rm(), rm_r(), rm_f(), rm_rf() echo() mkdir(), mkdir_p() touch() mv() cd(), chdir() store() # ディレクトリ構造を with chdir('build'): 保ったままコピー system('...') edit() # ファイルを一括変更 # withを抜けると # 元の場所に自動復帰 LLTV 2009 Lightning Talk copyright? 2009 kuwata-lab.com all rights reserved 11
  • 12. その他の机能 「-n」でコマンドを実行せず表示のみ(dry-run) 「-F」で強制実行(タイムスタンプを無視) 「-D」でより詳細な情報を表示 タスク定义のループを自動検出 LLTV 2009 Lightning Talk copyright? 2009 kuwata-lab.com all rights reserved 12
  • 13. 続きは奥别产で! http://www.kuwata-lab.com/kook/pykook-users-guide.html LLTV 2009 Lightning Talk copyright? 2009 kuwata-lab.com all rights reserved 13
  • 14. thank you 14