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

Ransui Iso
Ransui IsoTechnical Account Manager at amazon web services
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
• 電気以外に資源を消費しない
• 時間・・・・精神力・・・・周辺機器・・・・気にしちゃだめ!
• 幾らでも試行錯誤できる
• 身に着けた技は意外と色々な所で便利だったりする
• 逆に、身に付けている技が意外な所で役に立つことも
「やってみた」
「Pythonでやってみた」~広がるプログラミングの愉しみ~
子供のために作った玩具
• 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!
1 of 82

Recommended

VSTiつくるよゼミ by
VSTiつくるよゼミVSTiつくるよゼミ
VSTiつくるよゼミy3eadgbe
3.1K views20 slides
ソフトシンセを作りながら学ぶPythonプログラミング by
ソフトシンセを作りながら学ぶPythonプログラミングソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミングRansui Iso
33.6K views43 slides
DTMF — DTMF と自作アプリの軌跡 #yidev by
DTMF — DTMF と自作アプリの軌跡 #yidevDTMF — DTMF と自作アプリの軌跡 #yidev
DTMF — DTMF と自作アプリの軌跡 #yidevTomohiro Kumagai
4.5K views86 slides
PEP8を読んでみよう by
PEP8を読んでみようPEP8を読んでみよう
PEP8を読んでみよう2bo 2bo
5.9K views49 slides
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック by
【Unite Tokyo 2018】Audio機能の基礎と実装テクニック【Unite Tokyo 2018】Audio機能の基礎と実装テクニック
【Unite Tokyo 2018】Audio機能の基礎と実装テクニックUnityTechnologiesJapan002
37.9K views87 slides
こんにちはワークステーション LUNA 対応版 サウンド編 by
こんにちはワークステーション LUNA 対応版 サウンド編こんにちはワークステーション LUNA 対応版 サウンド編
こんにちはワークステーション LUNA 対応版 サウンド編YosukeSugahara
679 views168 slides

More Related Content

What's hot

Kashiwa.r.10 by
Kashiwa.r.10Kashiwa.r.10
Kashiwa.r.10Caru Shi
1.5K views26 slides
Ubuntu なひととき by
Ubuntu なひとときUbuntu なひととき
Ubuntu なひとときHiroshi Chonan
1.9K views51 slides
組込み向けスクリプト言語mrubyをEV3で動かしてみよう by
組込み向けスクリプト言語mrubyをEV3で動かしてみよう組込み向けスクリプト言語mrubyをEV3で動かしてみよう
組込み向けスクリプト言語mrubyをEV3で動かしてみようTakuya Azumi
11.5K views72 slides
[20120410] @marqsの転職を祝うLT by
[20120410] @marqsの転職を祝うLT[20120410] @marqsの転職を祝うLT
[20120410] @marqsの転職を祝うLTYoshifumi Yamaguchi
807 views45 slides
プロ生2017名古屋ーセッション intel apollo lakeとsha拡張命令 by
プロ生2017名古屋ーセッション intel apollo lakeとsha拡張命令プロ生2017名古屋ーセッション intel apollo lakeとsha拡張命令
プロ生2017名古屋ーセッション intel apollo lakeとsha拡張命令Masaki Ota
313 views65 slides
Stagefright入門 by
Stagefright入門Stagefright入門
Stagefright入門l_b__
22.2K views34 slides

What's hot(11)

Kashiwa.r.10 by Caru Shi
Kashiwa.r.10Kashiwa.r.10
Kashiwa.r.10
Caru Shi1.5K views
組込み向けスクリプト言語mrubyをEV3で動かしてみよう by Takuya Azumi
組込み向けスクリプト言語mrubyをEV3で動かしてみよう組込み向けスクリプト言語mrubyをEV3で動かしてみよう
組込み向けスクリプト言語mrubyをEV3で動かしてみよう
Takuya Azumi11.5K views
プロ生2017名古屋ーセッション intel apollo lakeとsha拡張命令 by Masaki Ota
プロ生2017名古屋ーセッション intel apollo lakeとsha拡張命令プロ生2017名古屋ーセッション intel apollo lakeとsha拡張命令
プロ生2017名古屋ーセッション intel apollo lakeとsha拡張命令
Masaki Ota313 views
Stagefright入門 by l_b__
Stagefright入門Stagefright入門
Stagefright入門
l_b__22.2K views
Techno TUT Lecture 2014/11/14 by NU_Pan
Techno TUT Lecture 2014/11/14Techno TUT Lecture 2014/11/14
Techno TUT Lecture 2014/11/14
NU_Pan1.9K views
音声ポストプロダクションの機械化 by Naoya_Sato
音声ポストプロダクションの機械化音声ポストプロダクションの機械化
音声ポストプロダクションの機械化
Naoya_Sato1.1K views
pythonワンライナーのすゝめ by cocu_628496
pythonワンライナーのすゝめpythonワンライナーのすゝめ
pythonワンライナーのすゝめ
cocu_6284969.5K views
ターミナルのイメチェン by Nekokichi
ターミナルのイメチェンターミナルのイメチェン
ターミナルのイメチェン
Nekokichi 69 views
TechnoTUT Lecture(Mixing&Mastering) by NU_Pan
TechnoTUT Lecture(Mixing&Mastering)TechnoTUT Lecture(Mixing&Mastering)
TechnoTUT Lecture(Mixing&Mastering)
NU_Pan1.5K views

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

速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについて by
速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについて速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについて
速度改善のためにフロント:アプリ:インフラ エンジニアが使うツールについてDaisuke Tamada
2.1K views35 slides
Api as a product by
Api as a productApi as a product
Api as a productCData Software Japan
2.1K views22 slides
日本Androidの会発表スライド androidのメディア機能の話 by
日本Androidの会発表スライド androidのメディア機能の話日本Androidの会発表スライド androidのメディア機能の話
日本Androidの会発表スライド androidのメディア機能の話Tatsuya Matsumoto
16.3K views54 slides
自動化を支えるCI/CDパイプライン by
自動化を支えるCI/CDパイプライン自動化を支えるCI/CDパイプライン
自動化を支えるCI/CDパイプラインJunichiMitsunaga
96 views40 slides
Spark Streamingを活用したシステムの検証結果と設計時のノウハウ by
Spark Streamingを活用したシステムの検証結果と設計時のノウハウSpark Streamingを活用したシステムの検証結果と設計時のノウハウ
Spark Streamingを活用したシステムの検証結果と設計時のノウハウFuture Of Data Japan
3.3K views27 slides
第4回 SoftLayer勉強会 資料 by
第4回 SoftLayer勉強会 資料第4回 SoftLayer勉強会 資料
第4回 SoftLayer勉強会 資料Naoki Shibata
1.4K views18 slides

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

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

More from Ransui Iso

Pythonで作る俺様サウンドエフェクター by
Pythonで作る俺様サウンドエフェクターPythonで作る俺様サウンドエフェクター
Pythonで作る俺様サウンドエフェクターRansui Iso
7.5K views23 slides
アドテクを支える人と技術 by
アドテクを支える人と技術アドテクを支える人と技術
アドテクを支える人と技術Ransui Iso
10.2K views55 slides
Playing with curses by
Playing with cursesPlaying with curses
Playing with cursesRansui Iso
2.5K views21 slides
小中学生Hack-a-thonにオッサンが乗り込んだ話 by
小中学生Hack-a-thonにオッサンが乗り込んだ話小中学生Hack-a-thonにオッサンが乗り込んだ話
小中学生Hack-a-thonにオッサンが乗り込んだ話Ransui Iso
1.7K views23 slides
XML-RPC : Pythonが「電池付属」と呼ばれる理由 by
XML-RPC : Pythonが「電池付属」と呼ばれる理由XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由Ransui Iso
8.3K views25 slides
Introduction of ToySynth by
Introduction of ToySynthIntroduction of ToySynth
Introduction of ToySynthRansui Iso
1.9K views15 slides

More from Ransui Iso(14)

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

Recently uploaded

JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私 by
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私修治 松浦
208 views36 slides
SSH超入門 by
SSH超入門SSH超入門
SSH超入門Toru Miyahara
457 views21 slides
onewedge_companyguide1 by
onewedge_companyguide1onewedge_companyguide1
onewedge_companyguide1ONEWEDGE1
54 views22 slides
Najah Matsuo Self Introduction by
Najah Matsuo Self IntroductionNajah Matsuo Self Introduction
Najah Matsuo Self IntroductionNajahMatsuo
10 views29 slides
システム概要.pdf by
システム概要.pdfシステム概要.pdf
システム概要.pdfTaira Shimizu
44 views1 slide
概要.pdf by
概要.pdf概要.pdf
概要.pdfTaira Shimizu
6 views1 slide

Recently uploaded(6)

JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私 by 修治 松浦
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私
JISTA月例会2023年12月 書籍『3カ月で改善!システム障害対応実践ガイド』ご紹介+失敗学と障害対応と私
修治 松浦208 views
onewedge_companyguide1 by ONEWEDGE1
onewedge_companyguide1onewedge_companyguide1
onewedge_companyguide1
ONEWEDGE154 views
Najah Matsuo Self Introduction by NajahMatsuo
Najah Matsuo Self IntroductionNajah Matsuo Self Introduction
Najah Matsuo Self Introduction
NajahMatsuo10 views

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