SlideShare ist ein Scribd-Unternehmen logo
1 von 82
Pythonでやってみた
~広がるプログラミングの愉しみ~
2018-09-18
ransui@live.com
お前誰よ
Ransui Iso (磯 蘭水)
AWS Enterprise Support
Senior Technical Account Manager
Since 2015-05
Past.
• Software Developer / Architect
• Part-time Lecturer for IT engineers
• University Faculty
• Writer / Translator
お前誰よ:学生時代
• Distributed AIの研究
• IJCAI ’97 RoboCup Simulation League
Best 8
A Multi-layered Planning Architecture for
Soccer Agent.
RoboCup-97: Robot Soccer World Cup I. Lecture Notes
in Computer Science 1395 Springer
Common LispとCを使っていたが、研究室のメ
ンバーがLispを読み書きできない問題が発生し、
Pythonを使い始める
お前誰よ:社会人になって
• Software Developer
• Ultraseek Search Engine
• Ultraseekを利用したアプリケーション開発
• ライバルはNTTのInfobee
当時Infobeeをチューニングしまくっていた方が、
10年後に親会社の社員として登場!お互いにライ
バル視していたらしい
お前誰よ:社会人になって
• Software Developer
• amazonが日本に来る前に総合e-Commerceサ
イトの開発(結局amazonに負けた…)
• 商品情報管理システム
• 商品データ・メタデータ管理
• 検索エンジン
• 在庫・物流システムとの連携
開発チーム 6人
開発期間 4ヵ月
お前誰よ:社会人になって
• AD Technology Company Tech Lead.
• 技術・ビジネス戦略
• エンジニア採用・チームビルディング
• プロジェクトマネージメント・スクラムマスター
• アーキテクティング
• プログラミング
• システム管理
• ラックマウント・ケーブリング!
ライバルはYahoo Japan & Google
超レッドオーシャン&無謀な戦い
お前誰よ:翻訳とか
プログラミング
2つの動機
面倒くさいことを簡単に
いったいどうなっているんだ?
おもしろそう
雑な対比
めんどうくさい おもしろそう
手間をかけずに最大の成果 手間暇かけて小さな結果
目的を達成する手段 手段そのものが目的
誰かの役に立つ(かも) 自己満足とドヤ顔
ありものを最大限に活用 車輪の再実装
どちらが正しいという訳ではない
• いずれにしても「仕組みの理解」は非常に重要
• 対象はなにか
• 実現したい事はなにか
• いかにして実現するか
どちらが正しいという訳ではない
• いずれにしても「仕組みの理解」は非常に重要
• 対象はなにか
• 実現したい事はなにか
• いかにして実現するか
Algorithm Data Program
Niklaus Wirth
プログラミングが出来るということ
• プログラミングは何かを実現・表現するための強力な武器
• 絵を描く事
• 楽器を弾くこと
• 彫刻・造形・・・
プログラミングでできること
• プログラミングは何かを実現・表現するための強力な武器
• 絵を描く事
• 楽器を弾くこと
• 彫刻・造形・・・
「何か」を操作することで
出力としての結果を得るという観点からみれば
「Art」とされる領域の活動となんら変わりはない
プログラミングの美味しいところ
• PC1台あればOK
• 電気以外に資源を消費しない
• 時間・・・・精神力・・・・周辺機器・・・・気にしちゃだめ!
• 幾らでも試行錯誤できる
• 身に着けた技は意外と色々な所で便利だったりする
• 逆に、身に付けている技が意外な所で役に立つことも
「やってみた」
子供のために作った玩具
• YAMAHA TENORI-ON
• すごく楽しそうな電子楽器
• 残念ながらもう売ってない
子供のために作った玩具
• YAMAHA TENORI-ON
• すごく楽しそうな電子楽器
• 残念ながらもう売ってない
• 実はCommon Lispで制作
• LispBuilder-SDL
• CLOS
• Multi-Thread
子供のために作った玩具
• YAMAHA TENORI-ON
• すごく楽しそうな電子楽器
• 残念ながらもう売ってない
• 実はCommon Lispで制作
• LispBuilder-SDL
• CLOS
• Multi-Thread
• ライブコーディング
• 子供の見ている前でインクリメンタルに
開発した
notes
Notes
Notes
中の仕組み
Sound Patch
Timer ALSA Mixer
Button Row
Button Row
Button Grid
Note On Pointer
ようするにすごく単純
• グリッド上のボタンがOn状態
• 音を出す
• グリッド上のボタンがOFF状態
• 音を出さない
• タイマー
• スレッドを1つ作って(sleep)しながらループ
• (sleep)から抜けると[Note on Pointer]を一つずらしてButton Gridに
メッセージを送る
• ButtonGirdは[Note on Pointer]の指す位置のボタンをスキャンして
ALSA Mixerに送るSound Patchを決める
音そのものを合成したい
• Tiny TENORI-ONはサウンドパッチを再生するだけ
• 音データを用意すればいくらでも色々なことができる
• フリーのパッチデータもいっぱいある
音そのものを合成したい
• Tiny TENORI-ONはサウンドパッチを再生するだけ
• 音データを用意すればいくらでも色々なことができる
• フリーのパッチデータもいっぱいある
• 音データだって最終的には「数値」の列
• コンピュータは計算機
• なんらかの方法で数字列を作れば「音」として出力される。はず。
シンセサイザーは
漢のロマン
シンセサイザーは
漢のロマン
だけれども、いきなりこのレベルから突入するのは
流石にきびしい
PSG
• Programmable Sound Generator
1986年11週製造とか!
PSG
• 発振器3チャンネル
• 矩形波
• 8オクターブ
• ノイズ発生器1チャンネル
• 周波数指定可能
• ホワイトノイズ
• エンベローブジェネレータ
• 1系統
• プリセットパターン
• ミキサ
• 音量調整16段階
• モノラル出力
PSG
• 発振器3チャンネル
• 矩形波
• 8オクターブ
• ノイズ発生器1チャンネル
• 周波数指定可能
• ホワイトノイズ
• エンベローブジェネレータ
• 1系統
• プリセットパターン
• ミキサ
• 音量調整16段階
• モノラル出力
Tone
Generator
Tone
Generator
Tone
Generator
Channel A
Switch
Channel B
Switch
Channel C
Switch
Noise
Generator
AMP
Envelope
Generator
Channel A
Volume
Channel B
Volume
Channel C
Volume
PSG
• 発振器3チャンネル
• 矩形波
• 8オクターブ
• ノイズ発生器1チャンネル
• 周波数指定可能
• ホワイトノイズ
• エンベローブジェネレータ
• 1系統
• プリセットパターン
• ミキサ
• 音量調整16段階
• モノラル出力
Tone
Generator
Tone
Generator
Tone
Generator
Channel A
Switch
Channel A
Switch
Channel C
Switch
Noise
Generator
AMP
Envelope
Generator
Channel A
Volume
Channel B
Volume
Channel C
Volume
これなら作れそう
PSGの制約
• 矩形波しか出せない
• ピコピコ音
• 3和音まで
• 発振器が3個しかないから
• エンベローブ
• チャネルごとに独立して
設定不可
• パターンはプリセット
された数種類のみ
• ミキサ
• モノラル出力
Tone
Generator
Tone
Generator
Tone
Generator
Channel A
Switch
Channel B
Switch
Channel C
Switch
Noise
Generator
AMP
Envelope
Generator
Channel A
Volume
Channel B
Volume
Channel C
Volume
せっかくPythonで実装するなら
• 発振器
• 多チャンネルにする
• 実際には処理速度の問題で制約は出る
• 波形は矩形波のみ
• 実装が簡単だから。フーリエ先生ごめんなさい。
• ノイズジェネレータは簡単に実装できるけれど今回はパス
• エンベロープ発生器
• ボリュームコントロールで代用
• 8bit時代も「ソフトウェアエンベロープ」で頑張ったし
• ステレオ出力対応
• 発振器は左右同音量のデータを出力する
• ボリュームで左右音量を調整できるようにする
さて、どうやって実装するか
• まずは最も単純な構成を考える
• 最初から全部やろうとしないのがミソ
さて、どうやって実装するか
• まずは最も単純な構成を考える
• 最初から全部やろうとしないのがミソ
Tone
Generator
Channel A
Volume
AMP
さて、どうやって実装するか
• まずは最も単純な構成を考える
• 最初から全部やろうとしないのがミソ
Tone
Generator
Channel A
Volume
AMP
OSとハードウェアレイヤ
• PySDL2/Mixer
• ALSA
さて、どうやって実装するか
• まずは最も単純な構成を考える
• 最初から全部やろうとしないのがミソ
Tone
Generator
Channel A
Volume
AMP
OSとハードウェアレイヤ
• PySDL2/Mixer
• ALSA
PCMデータ化
入力:0 ~ 1までの実数列
出力:チャンク化されたPCMデータ
さて、どうやって実装するか
• まずは最も単純な構成を考える
• 最初から全部やろうとしないのがミソ
Tone
Generator
Channel A
Volume
AMP
OSとハードウェアレイヤ
• PySDL2/Mixer
• ALSA
矩形波データを生成
入力:周波数
クロックカウンタ
出力:0 or 1 の数列
PCMデータ化
入力:0 ~ 1までの実数列
出力:チャンク化されたPCMデータ
クロックカウンタ
入力:サンプリング周波数
出力:現在時刻 (t)
さて、どうやって実装するか
• まずは最も単純な構成を考える
• 最初から全部やろうとしないのがミソ
Tone
Generator
Channel A
Volume
AMP
OSとハードウェアレイヤ
• PySDL2/Mixer
• ALSA
矩形波データを生成
入力:周波数
クロックカウンタ
出力:0 or 1 の数列
正確にはアッテネータ
入力:減衰率(左右チャネル独立指定)
出力:0 ~ 1までの実数列
PCMデータ化
入力:0 ~ 1までの実数列
出力:チャンク化されたPCMデータ
クロックカウンタ
入力:サンプリング周波数
出力:現在時刻 (t)
さて、どうやって実装するか
• まずは最も単純な構成を考える
• 最初から全部やろうとしないのがミソ
Tone
Generator
Channel A
Volume
AMP
OSとハードウェアレイヤ
• PySDL2/Mixer
• ALSA
矩形波データを生成
入力:周波数
クロックカウンタ
出力:0 or 1 の数列
正確にはアッテネータ
入力:減衰率(左右チャネル独立指定)
出力:0 ~ 1までの実数列
PCMデータ化
入力:0 ~ 1までの実数列
出力:チャンク化されたPCMデータ
クロックカウンタ
入力:サンプリング周波数
出力:現在時刻 (t)
具体的な実装の方針を考える
• パーツの性質を観察して共通している姿を探す
Component
Processing
Input
Output
具体的な実装の方針を考える
• パーツの性質を観察して共通している姿を探す
Component
Processing
Input
Output
Component
Processing
Input
Output
Component
Processing
Input
Output
具体的な実装の方針を考える
• パーツの性質を観察して共通している姿を探す
• 使える機能を探してうまくあてはめる
Method
Queue
Queue
Method
Queue
Thread
Thread
• データの受け渡し
• queue.Queue
• データ処理
• threading.Thread
こうしておけば、各コンポーネントは自力で
データを取得しに行く必要は無く、ただ口を
開けて待っていればOK
3チャンネルのPSGもどき
• こんな感じになる
Tone
Generator
Tone
Generator
Tone
Generator
Attenuator
Attenuator
Attenuator
+
SDLMixer
音は出せるけれど・・・・
• これだけでは「音楽」を演奏することはできない
Tone
Generator
Tone
Generator
Tone
Generator
Attenuator
Attenuator
Attenuator
+
SDLMixer
音は出せるけれど・・・・
• これだけでは「音楽」を演奏することはできない
Tone
Generator
Tone
Generator
Tone
Generator
Attenuator
Attenuator
Attenuator
+
SDLMixer
「演奏者」不在
「音楽」を考える
• 音楽を構成する要素を考える
「音楽」を考える
• 音楽を構成する要素を考える
• 「楽譜」が表しているものは何か?
「音楽」を考える
• 音楽を構成する要素を考える
• 「楽譜」が表しているものは何か?
1.音の高さ
発信器の周波数
2.音を出すタイミング
クロックカウンタの値
3.音を出し続ける長さ
クロック長
シーケンサの原理
• 「音程」「KeyOnタイミング」「音長」を制御する
Tone Generator
Sequencer
周波数
Attenuator
減衰率
Clock Command Value
0 SetVolume (1.0, 1.0)
0 SetFreq 440.0
22050 SetFreq 0.0
22050 End
シーケンスデータは単純に(Clock, Command, Value)と
いう構成のタプルのリストとして表現してしまう。
わざわざクラス化するまでもない。
シーケンサの原理
• 「音程」「KeyOnタイミング」「音長」を制御する
Tone Generator
Sequencer
周波数
Attenuator
減衰率
Clock Command Value
0 SetVolume (1.0, 1.0)
0 SetFreq 440.0
22050 SetFreq 0.0
22050 End
シーケンスデータは単純に(Clock, Command, Value)と
いう構成のタプルのリストとして表現してしまう。
わざわざクラス化するまでもない。
そういやMIDIなんて物も
ありましたっけ!
シーケンスデータの作成
• シーケンスデータを作成するのは人間には酷な話
Clock Command Value
0 SetVolume (1.0, 1.0)
0 SetFreq 440.0
22050 SetFreq 0.0
22050 End
音程 :周波数を計算して値を決定
音長 :サンプリング周波数・テンポ指定・音符指定より計算
KeyOn :音長の累積値から計算
シーケンスデータの作成
• シーケンスデータを作成するのは人間には酷な話
Clock Command Value
0 SetVolume (1.0, 1.0)
0 SetFreq 440.0
22050 SetFreq 0.0
22050 End
音程 :周波数を計算して値を決定
音長 :サンプリング周波数・テンポ指定・音符指定より計算
KeyOn :音長の累積値から計算
楽譜相手にハンドアセンブル…
少しでも文化的な入力環境
• もう少し「楽譜」っぽい表現でシーケンスデータを記述したい
• シーケンサは単純なままにしておきたい
少しでも文化的な入力環境
• もう少し「楽譜」っぽい表現でシーケンスデータを記述したい
• シーケンサは単純なままにしておきたい
• つまり・・・
何らかの
Human Readable
な表現形式
Sequencerが
直接実行できる
シーケンスデータ
少しでも文化的な入力環境
• もう少し「楽譜」っぽい表現でシーケンスデータを記述したい
• シーケンサは単純なままにしておきたい
• つまり・・・
何らかの
Human Readable
な表現形式
Sequencerが
直接実行できる
シーケンスデータ
音楽を表現するための
「楽譜記述言語」
少しでも文化的な入力環境
• もう少し「楽譜」っぽい表現でシーケンスデータを記述したい
• シーケンサは単純なままにしておきたい
• つまり・・・
何らかの
Human Readable
な表現形式
Sequencerが
直接実行できる
シーケンスデータ
音楽を表現するための
「楽譜記述言語」
「楽譜記述言語」を
シーケンスデータへ変
換する
少しでも文化的な入力環境
• もう少し「楽譜」っぽい表現でシーケンスデータを記述したい
• シーケンサは単純なままにしておきたい
• つまり・・・
Compiler
何らかの
Human Readable
な表現形式
Sequencerが
直接実行できる
シーケンスデータ
音楽を表現するための
「楽譜記述言語」
「楽譜記述言語」を
シーケンスデータへ変
換する
楽譜記述言語
• MML : Music Macro Language
• 古より伝わる古代語で多数の方言に分化
• 「音色」や「表現(トレモロ等)」を記述できるようなものもある
コマンド 引数 意味
T 整数値 テンポ指定
V 0~15 ボリューム指定
L 1 ~ 64 デフォルト音長設定
O 1~8 オクターブ指定
> 無し 1 Octaveアップ
< 無し 1 Octaveダウン
R 1 ~ 64 休符
C, D, E, F, G, A, B 1 ~ 64 音符
+ 無し 半音Up
- 無し 半音Down
基本的なものを抜粋
なにせ歴史が長いので方言毎
の派閥があったりもする!!
MML
• 実際の記述例
L4G>D<B-.A8 L8GB-AGF+AB4 GDADB-A16G16AD
L16G8DGA8DAB-8AGAD>DC
T120O4V15
Sequencer
Attenuator
Attenuator
Attenuator
実際に1曲演奏させてみる
• コンポーネントの構成はこんな感じ
Tone
Generator
+
SDLMixer
Tone
Generator
Tone
Generator
Tone
Generator
Attenuator
Duplicator
+
Sequencer
Sequencer
Sequencer
Attenuator
L0 : R1
Attenuator
L1 : R1
Delay
(1100 tick)
InverterSequence Data
Sequencer
Attenuator
Attenuator
Attenuator
実際に1曲演奏させてみる
• コンポーネントの構成はこんな感じ
Tone
Generator
+
SDLMixer
Tone
Generator
Tone
Generator
Tone
Generator
Attenuator
Duplicator
+
Sequencer
Sequencer
Sequencer
Attenuator
L0 : R1
Attenuator
L1 : R1
Delay
(1100 tick)
InverterSequence Data
音に厚みを出すためにエフェ
クトを入れている
それでは
1曲お聞きください
Johann Sebastian Bach
1685-1750
Fugue in G minor, BWV 578
こんな趣味のプログラミングでも
ふたを開けてみれば・・・
• 疎結合オブジェクトモデル
• マルチスレッドプログラミング
• (疑似)リアルタイム処理
• DSLの開発
• 言語の設計
• コンパイラ
• バイトコードインタプリタ
• 音響データ操作と再生の基本
• PySDL2とか
ふたを開けてみれば・・・
• 疎結合オブジェクトモデル
• マルチスレッドプログラミング
• (疑似)リアルタイム処理
• DSLの開発
• 言語の設計
• コンパイラ
• バイトコードインタプリタ
• 音響データ操作と再生の基本
• PySDL2とか
これらの技術を「使おう」とか
「学ぼう」と思って制作を始めた
わけではない点に注意
やりたいことを実現するためにア
レコレ試していたら、結果として
これらをやっていたということ
当然のことながら、途中で各種資
料を参照したりはしている
その他にも
Zope – Z Object Publishing Environment
• 色々言われるが10年時代を先取りしていた
• Pythonの動的な性質をフル活用した柔軟なシステム
• 「Acquisition」という画期的なアイディア
• 生きた「インスタンス」を格納するZODB
• Webブラウザから利用できるフル開発環境
ZODB
Z Publisher
TAL/METAL/DTML
Medusa/ZServer
Zope – Z Object Publishing Environment
• 色々言われるが10年時代を先取りしていた
• Pythonの動的な性質をフル活用した柔軟なシステム
• 「Acquisition」という画期的なアイディア
• 生きた「インスタンス」を格納するZODB
• Webブラウザから利用できるフル開発環境
ZODB
Z Publisher
TAL/METAL/DTML
Medusa/ZServer
全てを統合したが故の複雑さに押しつぶされた感があるが、
Zopeを構成する各種の実装・アイディアそれぞれには、現在で
も注目すべき点は多い
10年以上使っている俺様Web Framework
• Zopeは凄かったが毛深すぎた
• 「お作法」は少ない方がいい
• URLのパスとオブジェクトの包含関係が対応しているのがいい
• Regexとかつかって「ルーティング」するのは性に合わない
• そういうのは上位のWebサーバでやればいい派
• ZODBはやりすぎ
• 必要な時にインスタンスを作成すればいい
• 永続データの記憶は外部DBMSに任せる
• レンダリングエンジンは自分の好みの物を使いたい
• 生Octet Streamとかも自然に使えるようにしたい
10年以上使っている俺様Web Framework
• 現代的にWSGIアプリケーションとして動作
• 最初はApache + mod_pythonだった
• アプリケーションはクラスオブジェクトの階層として表現
• 継承関係ではなくクラスメンバに別のクラスオブジェクトをセットする
• クラスそのものがオブジェクトとして実行時に簡単に操作できるというPythonの性質を使う
https://example.com/foo/bar/baz →
getattr(root, “foo”)
getattr(foo, “bar”)
getattr(bar, “baz”)
• 最後にtype(baz)をして
• Class Objectならインスタンス化して “default” メソッドをCall
• Function/Method ObjectならそのオブジェクトをCall
• 必要に応じてインスタンス化が行われスレッド独立になるので考えることが少なくて済む
• レンダリングの指定はデコレーターで指定
• 個人的な趣味でGenshiが標準
結局のところ
• 疎結合オブジェクトモデル
• マルチスレッドプログラミング
• (疑似)リアルタイム処理
• DSLの開発
• 言語の設計
• コンパイラ
• バイトコードインタプリタ
• 音響データ操作と再生の基本
• PySDL2とか
PSGもどきを作った時のこと (再掲)
出来上がっているものを模倣する
• プロダクトとしての完成品
• 実現されていること
• 表現形式
• 内部構造・モデル
出来上がっているものを模倣する
• プロダクトとしての完成品
• 実現されていること
• 表現形式
• 内部構造・モデル
モデルを真似して「再実装」してみる
アイディアそのものの「再発明」ではない
作ってみることのご利益
• 「なぜそのようになっているのか」
• 「どのようにして実現するのか」
• 「どこが簡単で、どこが難しいのか」
• 「使える道具はどれで、使えない道具はどれなのか」
• 「どこがコアで、どこからが応用なのか」
これらの見当識はエンジニアにとってどれも非常に大切
Pythonの良いところ
• 大抵のものはほとんど揃っている
• Web開発
• ネットワーク系
• GUI
• 機械学習/AI系
• 数値解析・分析
• メディア系
• 制御系
仕事に便利に使えるのはもちろん
だが、趣味的なプロジェクトのた
めにも非常に便利
Pythonの良いところ
• 大抵のものはほとんど揃っている
• Web開発
• ネットワーク系
• GUI
• 機械学習/AI系
• 数値解析・分析
• メディア系
• 制御系
仕事に便利に使えるのはもちろん
だが、趣味的なプロジェクトのた
めにも非常に便利
しかも、大抵はOSSとして提供さ
れていて、アイディアをどう実現
しているかも見放題
学習する能力は
知識・経験量に比例する
「Python使って意外と
簡単にできましたよ」
Thank You For Attending.
Happy Hacking with Python, Everyone!

Weitere ähnliche Inhalte

Was ist angesagt?

Kashiwa.r.10
Kashiwa.r.10Kashiwa.r.10
Kashiwa.r.10Caru Shi
 
Ubuntu なひととき
Ubuntu なひとときUbuntu なひととき
Ubuntu なひとときHiroshi Chonan
 
組込み向けスクリプト言語mrubyをEV3で動かしてみよう
組込み向けスクリプト言語mrubyをEV3で動かしてみよう組込み向けスクリプト言語mrubyをEV3で動かしてみよう
組込み向けスクリプト言語mrubyをEV3で動かしてみようTakuya Azumi
 
[20120410] @marqsの転職を祝うLT
[20120410] @marqsの転職を祝うLT[20120410] @marqsの転職を祝うLT
[20120410] @marqsの転職を祝うLTYoshifumi Yamaguchi
 
プロ生2017名古屋ーセッション intel apollo lakeとsha拡張命令
プロ生2017名古屋ーセッション intel apollo lakeとsha拡張命令プロ生2017名古屋ーセッション intel apollo lakeとsha拡張命令
プロ生2017名古屋ーセッション intel apollo lakeとsha拡張命令Masaki Ota
 
Stagefright入門
Stagefright入門Stagefright入門
Stagefright入門l_b__
 
Techno TUT Lecture 2014/11/14
Techno TUT Lecture 2014/11/14Techno TUT Lecture 2014/11/14
Techno TUT Lecture 2014/11/14NU_Pan
 
音声ポストプロダクションの機械化
音声ポストプロダクションの機械化音声ポストプロダクションの機械化
音声ポストプロダクションの機械化Naoya_Sato
 
pythonワンライナーのすゝめ
pythonワンライナーのすゝめpythonワンライナーのすゝめ
pythonワンライナーのすゝめcocu_628496
 
ターミナルのイメチェン
ターミナルのイメチェンターミナルのイメチェン
ターミナルのイメチェンNekokichi
 
TechnoTUT Lecture(Mixing&Mastering)
TechnoTUT Lecture(Mixing&Mastering)TechnoTUT Lecture(Mixing&Mastering)
TechnoTUT Lecture(Mixing&Mastering)NU_Pan
 

Was ist angesagt? (11)

Kashiwa.r.10
Kashiwa.r.10Kashiwa.r.10
Kashiwa.r.10
 
Ubuntu なひととき
Ubuntu なひとときUbuntu なひととき
Ubuntu なひととき
 
組込み向けスクリプト言語mrubyをEV3で動かしてみよう
組込み向けスクリプト言語mrubyをEV3で動かしてみよう組込み向けスクリプト言語mrubyをEV3で動かしてみよう
組込み向けスクリプト言語mrubyをEV3で動かしてみよう
 
[20120410] @marqsの転職を祝うLT
[20120410] @marqsの転職を祝うLT[20120410] @marqsの転職を祝うLT
[20120410] @marqsの転職を祝うLT
 
プロ生2017名古屋ーセッション intel apollo lakeとsha拡張命令
プロ生2017名古屋ーセッション intel apollo lakeとsha拡張命令プロ生2017名古屋ーセッション intel apollo lakeとsha拡張命令
プロ生2017名古屋ーセッション intel apollo lakeとsha拡張命令
 
Stagefright入門
Stagefright入門Stagefright入門
Stagefright入門
 
Techno TUT Lecture 2014/11/14
Techno TUT Lecture 2014/11/14Techno TUT Lecture 2014/11/14
Techno TUT Lecture 2014/11/14
 
音声ポストプロダクションの機械化
音声ポストプロダクションの機械化音声ポストプロダクションの機械化
音声ポストプロダクションの機械化
 
pythonワンライナーのすゝめ
pythonワンライナーのすゝめpythonワンライナーのすゝめ
pythonワンライナーのすゝめ
 
ターミナルのイメチェン
ターミナルのイメチェンターミナルのイメチェン
ターミナルのイメチェン
 
TechnoTUT Lecture(Mixing&Mastering)
TechnoTUT Lecture(Mixing&Mastering)TechnoTUT Lecture(Mixing&Mastering)
TechnoTUT Lecture(Mixing&Mastering)
 

Ähnlich wie 「Pythonでやってみた」~広がるプログラミングの愉しみ~

速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについて
速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについて速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについて
速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについてDaisuke Tamada
 
日本Androidの会発表スライド androidのメディア機能の話
日本Androidの会発表スライド androidのメディア機能の話日本Androidの会発表スライド androidのメディア機能の話
日本Androidの会発表スライド androidのメディア機能の話Tatsuya Matsumoto
 
自動化を支えるCI/CDパイプライン
自動化を支えるCI/CDパイプライン自動化を支えるCI/CDパイプライン
自動化を支えるCI/CDパイプラインJunichiMitsunaga
 
Spark Streamingを活用したシステムの検証結果と設計時のノウハウ
Spark Streamingを活用したシステムの検証結果と設計時のノウハウSpark Streamingを活用したシステムの検証結果と設計時のノウハウ
Spark Streamingを活用したシステムの検証結果と設計時のノウハウFuture Of Data Japan
 
第4回 SoftLayer勉強会 資料
第4回 SoftLayer勉強会 資料第4回 SoftLayer勉強会 資料
第4回 SoftLayer勉強会 資料Naoki Shibata
 
20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...
20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...
20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...Shoei Takamaru
 
アイテムのアップロード時にCGIMaxUploadを無視するプラグインの作り方
アイテムのアップロード時にCGIMaxUploadを無視するプラグインの作り方アイテムのアップロード時にCGIMaxUploadを無視するプラグインの作り方
アイテムのアップロード時にCGIMaxUploadを無視するプラグインの作り方Takeuchi Yuichi
 
チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発Satoshi Takano
 
Craft CMSに最適なサーバはどんな環境?
Craft CMSに最適なサーバはどんな環境?Craft CMSに最適なサーバはどんな環境?
Craft CMSに最適なサーバはどんな環境?Kei Mikage
 
AWSが誕生するまでの秘話
AWSが誕生するまでの秘話AWSが誕生するまでの秘話
AWSが誕生するまでの秘話Yasuhiro Horiuchi
 
Spring Day 2016 springの現在過去未来
Spring Day 2016 springの現在過去未来Spring Day 2016 springの現在過去未来
Spring Day 2016 springの現在過去未来Yuichi Hasegawa
 
PSoCまつり「PSoCの美味しい料理法」
PSoCまつり「PSoCの美味しい料理法」PSoCまつり「PSoCの美味しい料理法」
PSoCまつり「PSoCの美味しい料理法」betaEncoder
 
Programming AWS with Python
Programming AWS with Python  Programming AWS with Python
Programming AWS with Python Yasuhiro Matsuo
 
The beginners guide of real-time audio processing (Part 1:Equalizer)
The beginners guide of real-time audio processing (Part 1:Equalizer)The beginners guide of real-time audio processing (Part 1:Equalizer)
The beginners guide of real-time audio processing (Part 1:Equalizer)Hiroyuki Masuno
 
JobScheduler ユーザカンファレンス 2016 東京日産コンピュータシステム様 事例紹介
JobScheduler ユーザカンファレンス 2016 東京日産コンピュータシステム様 事例紹介JobScheduler ユーザカンファレンス 2016 東京日産コンピュータシステム様 事例紹介
JobScheduler ユーザカンファレンス 2016 東京日産コンピュータシステム様 事例紹介Daisuke Ikeda
 
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜Kosaku Ono
 

Ähnlich wie 「Pythonでやってみた」~広がるプログラミングの愉しみ~ (20)

速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについて
速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについて速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについて
速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについて
 
Api as a product
Api as a productApi as a product
Api as a product
 
日本Androidの会発表スライド androidのメディア機能の話
日本Androidの会発表スライド androidのメディア機能の話日本Androidの会発表スライド androidのメディア機能の話
日本Androidの会発表スライド androidのメディア機能の話
 
自動化を支えるCI/CDパイプライン
自動化を支えるCI/CDパイプライン自動化を支えるCI/CDパイプライン
自動化を支えるCI/CDパイプライン
 
Spark Streamingを活用したシステムの検証結果と設計時のノウハウ
Spark Streamingを活用したシステムの検証結果と設計時のノウハウSpark Streamingを活用したシステムの検証結果と設計時のノウハウ
Spark Streamingを活用したシステムの検証結果と設計時のノウハウ
 
第4回 SoftLayer勉強会 資料
第4回 SoftLayer勉強会 資料第4回 SoftLayer勉強会 資料
第4回 SoftLayer勉強会 資料
 
20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...
20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...
20170622 Heroku Meetup #17 スタートアップのインフラ選び 高丸翔英 How to choose infrastracture...
 
アイテムのアップロード時にCGIMaxUploadを無視するプラグインの作り方
アイテムのアップロード時にCGIMaxUploadを無視するプラグインの作り方アイテムのアップロード時にCGIMaxUploadを無視するプラグインの作り方
アイテムのアップロード時にCGIMaxUploadを無視するプラグインの作り方
 
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
 
チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発
 
Ibm data science experience
Ibm data science experienceIbm data science experience
Ibm data science experience
 
Craft CMSに最適なサーバはどんな環境?
Craft CMSに最適なサーバはどんな環境?Craft CMSに最適なサーバはどんな環境?
Craft CMSに最適なサーバはどんな環境?
 
AWSが誕生するまでの秘話
AWSが誕生するまでの秘話AWSが誕生するまでの秘話
AWSが誕生するまでの秘話
 
Spring Day 2016 springの現在過去未来
Spring Day 2016 springの現在過去未来Spring Day 2016 springの現在過去未来
Spring Day 2016 springの現在過去未来
 
PSoCまつり「PSoCの美味しい料理法」
PSoCまつり「PSoCの美味しい料理法」PSoCまつり「PSoCの美味しい料理法」
PSoCまつり「PSoCの美味しい料理法」
 
2018/1/30 Django勉強会
2018/1/30 Django勉強会2018/1/30 Django勉強会
2018/1/30 Django勉強会
 
Programming AWS with Python
Programming AWS with Python  Programming AWS with Python
Programming AWS with Python
 
The beginners guide of real-time audio processing (Part 1:Equalizer)
The beginners guide of real-time audio processing (Part 1:Equalizer)The beginners guide of real-time audio processing (Part 1:Equalizer)
The beginners guide of real-time audio processing (Part 1:Equalizer)
 
JobScheduler ユーザカンファレンス 2016 東京日産コンピュータシステム様 事例紹介
JobScheduler ユーザカンファレンス 2016 東京日産コンピュータシステム様 事例紹介JobScheduler ユーザカンファレンス 2016 東京日産コンピュータシステム様 事例紹介
JobScheduler ユーザカンファレンス 2016 東京日産コンピュータシステム様 事例紹介
 
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
 

Mehr von Ransui Iso

Pythonで作る俺様サウンドエフェクター
Pythonで作る俺様サウンドエフェクターPythonで作る俺様サウンドエフェクター
Pythonで作る俺様サウンドエフェクターRansui Iso
 
アドテクを支える人と技術
アドテクを支える人と技術アドテクを支える人と技術
アドテクを支える人と技術Ransui Iso
 
Playing with curses
Playing with cursesPlaying with curses
Playing with cursesRansui Iso
 
小中学生Hack-a-thonにオッサンが乗り込んだ話
小中学生Hack-a-thonにオッサンが乗り込んだ話小中学生Hack-a-thonにオッサンが乗り込んだ話
小中学生Hack-a-thonにオッサンが乗り込んだ話Ransui Iso
 
XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由Ransui Iso
 
Introduction of ToySynth
Introduction of ToySynthIntroduction of ToySynth
Introduction of ToySynthRansui Iso
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングRansui Iso
 
PySynth : A toy pure python software synthesizer.
PySynth : A toy pure python software synthesizer.PySynth : A toy pure python software synthesizer.
PySynth : A toy pure python software synthesizer.Ransui Iso
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Ransui Iso
 
Lisp Tutorial for Pythonista : Day 5
Lisp Tutorial for Pythonista : Day 5Lisp Tutorial for Pythonista : Day 5
Lisp Tutorial for Pythonista : Day 5Ransui Iso
 
Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4Ransui Iso
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Ransui Iso
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Ransui Iso
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Ransui Iso
 

Mehr von Ransui Iso (14)

Pythonで作る俺様サウンドエフェクター
Pythonで作る俺様サウンドエフェクターPythonで作る俺様サウンドエフェクター
Pythonで作る俺様サウンドエフェクター
 
アドテクを支える人と技術
アドテクを支える人と技術アドテクを支える人と技術
アドテクを支える人と技術
 
Playing with curses
Playing with cursesPlaying with curses
Playing with curses
 
小中学生Hack-a-thonにオッサンが乗り込んだ話
小中学生Hack-a-thonにオッサンが乗り込んだ話小中学生Hack-a-thonにオッサンが乗り込んだ話
小中学生Hack-a-thonにオッサンが乗り込んだ話
 
XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由
 
Introduction of ToySynth
Introduction of ToySynthIntroduction of ToySynth
Introduction of ToySynth
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミング
 
PySynth : A toy pure python software synthesizer.
PySynth : A toy pure python software synthesizer.PySynth : A toy pure python software synthesizer.
PySynth : A toy pure python software synthesizer.
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
 
Lisp Tutorial for Pythonista : Day 5
Lisp Tutorial for Pythonista : Day 5Lisp Tutorial for Pythonista : Day 5
Lisp Tutorial for Pythonista : Day 5
 
Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
 

「Pythonでやってみた」~広がるプログラミングの愉しみ~