SlideShare une entreprise Scribd logo
1  sur  28
Télécharger pour lire hors ligne
10分で作るクラスライブラリ
2015/12/9 npstudy#7!
@_norin_
自己紹介
• データセンターのなかのひと

インフラもろもろ、クラウドとか作ってます
• 昔は広域イーサとかEoMPLSとかやってました
APIがない!!
20年前から悩みが変わってない
by 50代エンジニア
曰く
❖ CLIだって立派なAPI!
❖ teratermのマクロだってあるし!
❖ APIは自分で作るもの。無ければ作るのがエンジニア

!
※こういうこと言うのはたいていB型です
ちゃれんじ2015冬
おっさんベテランに対抗してイマドキっぽく(ネタも兼ねて)やってみた!
!
❖ 目標

使えそうなクラスライブラリ作り!
❖ 言語

ruby!
❖ ターゲット

CSR1000v(仮想ルータ)
まずはおさらい
先祖代々受け継がれた
伝統と秘伝の
telnet + expect
require	 'expect4r'

	 require	 'pp'

!
	 ios	 =	 Expect4r::Ios.new(:telnet,	 host:	 "192.168.0.2",

	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 user:	 "router",	 pwd:	 "router",	 enable:	 "router")

	 ios.login

	 pp	 ios.show_interface
時間がなくて外部ライブラリを使っちゃいました:-)
※expect4r!
C社やJ社向けのtelnet/ssh操作クラス!
踏み台経由のアクセスも出来たりします!
https://github.com/jesnault/expect4r
出力
$	 ruby	 show.rb	 

[["show	 interfacern",

	 	 "GigabitEthernet1	 is	 up,	 line	 protocol	 is	 up	 rn",

	 	 "	 	 Hardware	 is	 CSR	 vNIC,	 address	 is	 0050.5683.bb47	 (bia	 0050.5683.bb47)rn",

	 	 "	 	 Internet	 address	 is	 192.168.0.2/24rn",

	 	 "	 	 MTU	 1500	 bytes,	 BW	 1000000	 Kbit/sec,	 DLY	 10	 usec,	 rn",

	 	 "	 	 	 	 	 reliability	 255/255,	 txload	 1/255,	 rxload	 1/255rn",

	 	 "	 	 Encapsulation	 ARPA,	 loopback	 not	 setrn",

	 	 "	 	 Keepalive	 set	 (10	 sec)rn",

	 	 "	 	 Full	 Duplex,	 1000Mbps,	 link	 type	 is	 auto,	 media	 type	 is	 RJ45rn",

	 	 "	 	 output	 flow-control	 is	 unsupported,	 input	 flow-control	 is	 unsupportedrn",

	 	 "	 	 ARP	 type:	 ARPA,	 ARP	 Timeout	 04:00:00rn",

	 	 "	 	 Last	 input	 00:00:00,	 output	 00:06:00,	 output	 hang	 neverrn",

	 	 "	 	 Last	 clearing	 of	 "show	 interface"	 counters	 neverrn",

	 	 "	 	 Input	 queue:	 0/375/0/0	 (size/max/drops/flushes);	 Total	 output	 drops:	 0rn",

	 	 "	 	 Queueing	 strategy:	 fiforn",

	 	 "	 	 Output	 queue:	 0/40	 (size/max)rn",

	 	 "	 	 5	 minute	 input	 rate	 36000	 bits/sec,	 7	 packets/secrn",

	 	 "	 	 5	 minute	 output	 rate	 1000	 bits/sec,	 2	 packets/secrn",

	 	 "	 	 	 	 	 9015405	 packets	 input,	 6320804222	 bytes,	 0	 no	 bufferrn",

	 	 "	 	 	 	 	 Received	 0	 broadcasts	 (0	 IP	 multicasts)rn",
❖ ここまでは大昔からできてる!
❖ あとは出力を解析して必要な情報をピックアップするだけ!
❖ この段階で止まってる人が大半では?!
!
!
!
手が止まる理由
❖ メッセージフォーマットが不明確!
❖ 不要な情報が大量に出力される!
❖ default値が出力されない!
❖ 必要な情報を取得するには複数のコマンドが必要な場合も!
❖ なんとなくコマンド叩きつつそれっぽい値を見つけてる!
!
そもそも論
❖ メッセージフォーマットは可変といっても所 は機械が

出力しているもの。たかが知れている!
❖ 違いは機種、OS、バージョン、バグくらい!
❖ NWエンジニアならブラックボックステストはお手の物!
❖ 大量の不要情報は機械に取捨選択させればいいだけ!
❖ なんとなくじゃなくて手順・コマンドは明確に

自動化 = 標準化
show interfaceの出力
	 	 "GigabitEthernet1	 is	 up,	 line	 protocol	 is	 up	 rn",

	 	 "	 	 Hardware	 is	 CSR	 vNIC,	 address	 is	 0050.5683.bb47	 (bia	 0050.5683.bb47)rn",

	 	 "	 	 Internet	 address	 is	 1.1.1.1/24rn",

	 	 "	 	 MTU	 1500	 bytes,	 BW	 1000000	 Kbit/sec,	 DLY	 10	 usec,	 rn",

	 	 "	 	 	 	 	 reliability	 255/255,	 txload	 1/255,	 rxload	 1/255rn",

	 	 "	 	 Encapsulation	 ARPA,	 loopback	 not	 setrn",

	 	 "	 	 Keepalive	 set	 (10	 sec)rn",

	 	 "	 	 Full	 Duplex,	 1000Mbps,	 link	 type	 is	 auto,	 media	 type	 is	 RJ45rn",

	 	 "	 	 output	 flow-control	 is	 unsupported,	 input	 flow-control	 is	 unsupportedrn",

	 	 "	 	 ARP	 type:	 ARPA,	 ARP	 Timeout	 04:00:00rn",

	 	 "	 	 Last	 input	 00:00:00,	 output	 00:06:00,	 output	 hang	 neverrn",

	 	 "	 	 Last	 clearing	 of	 "show	 interface"	 counters	 neverrn",

	 	 "	 	 Input	 queue:	 0/375/0/0	 (size/max/drops/flushes);	 Total	 output	 drops:	 0rn",

	 	 "	 	 Queueing	 strategy:	 fiforn",

	 	 "	 	 Output	 queue:	 0/40	 (size/max)rn",

	 	 "	 	 5	 minute	 input	 rate	 36000	 bits/sec,	 7	 packets/secrn",

	 	 "	 	 5	 minute	 output	 rate	 1000	 bits/sec,	 2	 packets/secrn",

	 	 "	 	 	 	 	 9015405	 packets	 input,	 6320804222	 bytes,	 0	 no	 bufferrn",

	 	 "	 	 	 	 	 Received	 0	 broadcasts	 (0	 IP	 multicasts)rn",

	 	 "	 	 	 	 	 0	 runts,	 0	 giants,	 0	 throttles	 rn",

	 	 "	 	 	 	 	 0	 input	 errors,	 0	 CRC,	 0	 frame,	 0	 overrun,	 0	 ignoredrn",

	 	 "	 	 	 	 	 0	 watchdog,	 0	 multicast,	 0	 pause	 inputrn",
片っぱしから書き下す
ShowInterfaceMessageFormatTable = [
[/^(w+) is (w+), line protocol is (w+)s*/, :ifStatus],
[/^ Hardware is (.+), address is ([^s]+) /, :ifPhy],
[/^ Description: (.+)/, :descr],
[/^ Internet address is (.+)/, :ipAddr],
[/^ MTU (d+) bytes, BW (d+) Kbit/sec/, :ifMtu_bw],
[/^ reliability (d+)/(d+), txload (d+)/(d+), rxload (d+)/(d+)/, nil],
[/^ Encapsulation ARPA/, nil],
[/^ Keepalive/, nil],
[/^ .*media type/, nil],
[/^ output flow-control/, nil],
[/^ ARP type/, nil],
[/^ Last/, nil],
[/^ Input/, nil],
[/^ Queueing strategy/, nil],
[/^ Output queue/, nil],
[/^ 5 minute/,nil],
[/^s{4}/, nil]
]
[メッセージの正規表現、マッチしたものを処理するメソッド]

を定義

メソッドがnilなのは力尽きたため	 orz
ShowInterfaceMessageFormatTable	 =	 [

	 	 [/^(w+)	 is	 (w+),	 line	 protocol	 is	 (w+)s*/,	 :ifStatus],

	 	 [/^	 	 Hardware	 is	 (.+),	 address	 is	 ([^s]+)	 /,	 :ifPhy],

	 	 [/^	 	 Description:	 (.+)/,	 :descr],

・・・

!
def	 ifStatus	 v

	 	 return	 {ifName:	 v[1].to_s,	 ifOper:	 v[2].to_s,	 ifAdmin:	 v[3].to_s}

end

・・・

!
def	 interfaceMsgAnalyzer	 msg

	 	 ret	 =	 {}

	 	 msg.each	 do	 |line|

	 	 	 	 next	 if	 pickupVal(line.chomp,	 ShowInterfaceMessageFormatTable,	 ret)

	 	 	 	 STDERR.puts	 “no	 format	 found	 =>	 #{line}"

	 	 	 	 exit

	 	 end

	 	 return	 ret

end

!
def	 pickupVal	 line,	 fmtTable,	 ret

	 	 fmtTable.each	 do	 |tbl|

	 	 	 	 if	 (m	 =	 tbl[0].match(line))

	 	 	 	 	 	 ret.merge!(self.send(tbl[1],	 m))	 if	 tbl[1]	 !=	 nil

	 	 	 	 	 	 return	 true

	 	 	 	 end

	 	 end

	 	 false

end

 ここまで5分
設定
❖ ライブラリ(expect4r)がヨロシクやってくれます:-)!
!
!
!
❖ 確認は再度showで
ios.config %{
interface GigabitEthernet 1
ip address 1.1.1.1 255.255.255.0
}
require 'expect4r'
!
・・・
!
# ログイン
ios = Expect4r::Ios.new(:telnet, host: "192.168.56.254",
user: "router", pwd: "router", enable: "router")
ios.login
!
!
# show interface発行
msg = ios.show_interface_GigabitEthernet1
!
# メッセージ解析&出力
pp interfaceMsgAnalyzer(msg[0][1..-2])
!
# 設定
ios.config %{
interface GigabitEthernet 1
ip address 2.2.2.2 255.255.255.0
}
!
# 再度確認
msg = ios.show_interface_GigabitEthernet1
pp interfaceMsgAnalyzer(msg[0][1..-2])
ここまで3分
クラス化
❖ べた書きをベースにクラス化してみる!
❖ NetDevice!
❖ ベースクラス!
❖ Interface!
❖ まんまインターフェースのクラス!
❖ MessageAnalyzer::Interface!
❖ まんまメッセージ解析用のクラス(モジュール)!
!
イメージ
router	 =	 NetDevice.new

!
router.connect(user:	 username,	 password:	 pass,	 enable:	 secpass)

!
router.interface("GigabitEthernet1")

router.interface("GigabitEthernet1").descr("test").ipaddr("1.2.3.4/24").noShutdown

!
!
!
!
全部は大変なのでinterfaceのIPとdescriptionを実装してみる
ここまで2時間(お風呂タイム含む)
class NetDevice
def initialize
@interfaces = {}
@device = nil
end
!
def connect var
return @device if @device != nil
@device = adapter var
@device.login
end
!
def interface name, refresh = nil
return @interfaces[name] if @interfaces.has_key?(name) and refresh == nil
msg = @device.send("show_interface_#{name}")
@interfaces[name] = Interface.new(
MessageAnalyzer::Interface::analyze((msg[0])[1..-2]))
@interfaces[name].adapter @device
@interfaces[name]
end
!
private
def adapter var
Expect4r::Ios.new(:telnet, var)
end
end 悩みながら打ち込んで15分くらい
SSH対応
❖ telnetとの違いはアクセスするプロトコルだけなのでadapterを

介して切り替える

class NetDevice
def connect var
@device = adapter var
end
・・・
private
def adapter var
Expect4r::Ios.new(:telnet, var)
end
!
class NetDevice::SSH < NetDevice
def adapter var
Expect4r::Ios.new(:ssh, var)
end
!
router = NetDevice::SSH.new
router.interface・・・(以下同文)
これは1分かからない
結論
❖ 10分じゃライブラリは作れませんでした!
❖ コーディングだけならなんとか!
❖ クラス設計は10倍の時間でも足りません!
❖ ドキュメントは間に合いません(納品後がデフォ)!
!
…普段のお仕事と変わりません
まとめと雑感
❖ やればできる、やらないとできない

一度作ってしまえば汎用性があるはずなので細々と作るのがお勧め!
❖ まずは動くコード

きれい・汚いは後から考える

そのうち誰かがリファクタリングしてくれます:-)!
❖ 全部実装しようとするのはイバラの道

追加の機能は必要になった時点で考える&作る

#snmptrap設定を自動化したい人がどれだけいる??
❖ メソッド(使い方)はちょと考える必要があるかも!
❖ コンフィグをイメージすると引数並べたものができやすい

interface(desc:”test”, speed: 1000, ipaddr: 10.0.0.1/24, …)

1メソッド1機能で:-)!
❖ オブジェクト間の関係と使い方

 switch.interface(“gi1”).vlan(2)

      or

 switch.vlan(2).interface(“gi1”)



両方実装してもいいけど循環参照はメモリリークへの近道。。。!
!
❖ モデル化!
❖ クラス設計は結構悩む

思い付かないなら世の中のREST APIに合わせてみるのも手

イケテナイけどMIBをそのまま実装とか!
❖ エラー処理!
❖ 戻り値で判断 or 例外発生

ここは統一しておかないと後々後悔するところ!
❖ 用語が被る!
❖ オブジェクト指向用語とネットワーク用語

interface、クラス、etc
サンプルコード
❖ こちらから!
❖ https://github.com/nori-nori/npstudy7
Thank you!

Contenu connexe

Tendances

Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt AffinityについてTakuya ASADA
 
High Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many CoreHigh Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many Coreslankdev
 
OpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワークOpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワークM Hagiwara
 
Tremaで試すFirewall
Tremaで試すFirewallTremaで試すFirewall
Tremaで試すFirewallM Hagiwara
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)inaz2
 
Lagopus Switch Usecases
Lagopus Switch UsecasesLagopus Switch Usecases
Lagopus Switch UsecasesSakiko Kawai
 
SDN Lab環境でのRobotFramework実践活用
SDN Lab環境でのRobotFramework実践活用SDN Lab環境でのRobotFramework実践活用
SDN Lab環境でのRobotFramework実践活用Toshiki Tsuboi
 
HTTP2 時代の Web - web over http2
HTTP2 時代の Web - web over http2HTTP2 時代の Web - web over http2
HTTP2 時代の Web - web over http2Jxck Jxck
 
Rubyのエンコーディング
RubyのエンコーディングRubyのエンコーディング
RubyのエンコーディングMasahiro Tomita
 
仮想化環境での利用者公平性
仮想化環境での利用者公平性仮想化環境での利用者公平性
仮想化環境での利用者公平性Takuya ASADA
 
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)Kentaro Ebisawa
 
plotnetcfg入門 | Introduction to plotnetcfg
plotnetcfg入門 | Introduction to plotnetcfgplotnetcfg入門 | Introduction to plotnetcfg
plotnetcfg入門 | Introduction to plotnetcfgKentaro Ebisawa
 
本当はこわいエンコーディングの話
本当はこわいエンコーディングの話本当はこわいエンコーディングの話
本当はこわいエンコーディングの話Masahiro Tomita
 
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介Takashi Sogabe
 
NetBSD/evbarm on Raspberry Pi
NetBSD/evbarm on Raspberry PiNetBSD/evbarm on Raspberry Pi
NetBSD/evbarm on Raspberry Pitokudahiroshi
 
FreeBSD jail+vnetと戯れた話
FreeBSD jail+vnetと戯れた話FreeBSD jail+vnetと戯れた話
FreeBSD jail+vnetと戯れた話Masaru Oki
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線Motonori Shindo
 

Tendances (20)

Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt Affinityについて
 
High Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many CoreHigh Performance Networking with DPDK & Multi/Many Core
High Performance Networking with DPDK & Multi/Many Core
 
OpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワークOpenFlowで覚えるネットワーク
OpenFlowで覚えるネットワーク
 
Tremaで試すFirewall
Tremaで試すFirewallTremaで試すFirewall
Tremaで試すFirewall
 
HTTP2入門
HTTP2入門HTTP2入門
HTTP2入門
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
 
Lagopus Switch Usecases
Lagopus Switch UsecasesLagopus Switch Usecases
Lagopus Switch Usecases
 
SDN Lab環境でのRobotFramework実践活用
SDN Lab環境でのRobotFramework実践活用SDN Lab環境でのRobotFramework実践活用
SDN Lab環境でのRobotFramework実践活用
 
HTTP2 時代の Web - web over http2
HTTP2 時代の Web - web over http2HTTP2 時代の Web - web over http2
HTTP2 時代の Web - web over http2
 
Rubyのエンコーディング
RubyのエンコーディングRubyのエンコーディング
Rubyのエンコーディング
 
Vyatta 改造入門
Vyatta 改造入門Vyatta 改造入門
Vyatta 改造入門
 
仮想化環境での利用者公平性
仮想化環境での利用者公平性仮想化環境での利用者公平性
仮想化環境での利用者公平性
 
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)
 
plotnetcfg入門 | Introduction to plotnetcfg
plotnetcfg入門 | Introduction to plotnetcfgplotnetcfg入門 | Introduction to plotnetcfg
plotnetcfg入門 | Introduction to plotnetcfg
 
Ansible npstudy-shtsuchi
Ansible npstudy-shtsuchiAnsible npstudy-shtsuchi
Ansible npstudy-shtsuchi
 
本当はこわいエンコーディングの話
本当はこわいエンコーディングの話本当はこわいエンコーディングの話
本当はこわいエンコーディングの話
 
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介
OpenStack + OpenContrailで実現するマルチテナントIaaSのご紹介
 
NetBSD/evbarm on Raspberry Pi
NetBSD/evbarm on Raspberry PiNetBSD/evbarm on Raspberry Pi
NetBSD/evbarm on Raspberry Pi
 
FreeBSD jail+vnetと戯れた話
FreeBSD jail+vnetと戯れた話FreeBSD jail+vnetと戯れた話
FreeBSD jail+vnetと戯れた話
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 

En vedette

Npstudy#7 クラウドインフラのネットワーク自動描画
Npstudy#7 クラウドインフラのネットワーク自動描画Npstudy#7 クラウドインフラのネットワーク自動描画
Npstudy#7 クラウドインフラのネットワーク自動描画hirokihojo
 
IoTとOpenFlowのライトニングトーク
IoTとOpenFlowのライトニングトークIoTとOpenFlowのライトニングトーク
IoTとOpenFlowのライトニングトークTomoya Hibi
 
OpenStack Congress and Datalog (Japanese)
OpenStack Congress and Datalog (Japanese)OpenStack Congress and Datalog (Japanese)
OpenStack Congress and Datalog (Japanese)Motonori Shindo
 
どっかのしたのほう
どっかのしたのほうどっかのしたのほう
どっかのしたのほう_norin_
 
Protocol Buffers 入門
Protocol Buffers 入門Protocol Buffers 入門
Protocol Buffers 入門Yuichi Ito
 
Cloud stackユーザ会大阪 運用Tips 20130802
Cloud stackユーザ会大阪 運用Tips 20130802Cloud stackユーザ会大阪 運用Tips 20130802
Cloud stackユーザ会大阪 運用Tips 20130802hirokihojo
 
Janog37 Pattern BoF
Janog37 Pattern BoFJanog37 Pattern BoF
Janog37 Pattern BoFMiya Kohno
 
Mk state in-programming-01
Mk state in-programming-01Mk state in-programming-01
Mk state in-programming-01Miya Kohno
 
Jcsug21 20140912
Jcsug21 20140912Jcsug21 20140912
Jcsug21 20140912hirokihojo
 
FlexPod Day 2016 - Cisco session (Publish edition)
FlexPod Day 2016 - Cisco session (Publish edition)FlexPod Day 2016 - Cisco session (Publish edition)
FlexPod Day 2016 - Cisco session (Publish edition)Takao Setaka
 
Career - design, adaption and diversity - for EMC I&D event
Career - design, adaption and diversity - for EMC I&D eventCareer - design, adaption and diversity - for EMC I&D event
Career - design, adaption and diversity - for EMC I&D eventMiya Kohno
 
Tokyo meetup 20160224
Tokyo meetup 20160224Tokyo meetup 20160224
Tokyo meetup 20160224Takao Setaka
 
Call for Speakersに講演を256倍通す方法
Call for Speakersに講演を256倍通す方法Call for Speakersに講演を256倍通す方法
Call for Speakersに講演を256倍通す方法Kentaro Takeda
 
OpenStack Congress and Datalog (English)
OpenStack Congress and Datalog (English)OpenStack Congress and Datalog (English)
OpenStack Congress and Datalog (English)Motonori Shindo
 

En vedette (20)

Npstudy#7 クラウドインフラのネットワーク自動描画
Npstudy#7 クラウドインフラのネットワーク自動描画Npstudy#7 クラウドインフラのネットワーク自動描画
Npstudy#7 クラウドインフラのネットワーク自動描画
 
npstudy 161129
npstudy 161129npstudy 161129
npstudy 161129
 
IoTとOpenFlowのライトニングトーク
IoTとOpenFlowのライトニングトークIoTとOpenFlowのライトニングトーク
IoTとOpenFlowのライトニングトーク
 
Loom openflow controller in 10 min
Loom openflow controller in 10 minLoom openflow controller in 10 min
Loom openflow controller in 10 min
 
Router chat for np
Router chat for npRouter chat for np
Router chat for np
 
OpenStack Congress and Datalog (Japanese)
OpenStack Congress and Datalog (Japanese)OpenStack Congress and Datalog (Japanese)
OpenStack Congress and Datalog (Japanese)
 
どっかのしたのほう
どっかのしたのほうどっかのしたのほう
どっかのしたのほう
 
Protocol Buffers 入門
Protocol Buffers 入門Protocol Buffers 入門
Protocol Buffers 入門
 
Cloud stackユーザ会大阪 運用Tips 20130802
Cloud stackユーザ会大阪 運用Tips 20130802Cloud stackユーザ会大阪 運用Tips 20130802
Cloud stackユーザ会大阪 運用Tips 20130802
 
Janog37 Pattern BoF
Janog37 Pattern BoFJanog37 Pattern BoF
Janog37 Pattern BoF
 
Mk state in-programming-01
Mk state in-programming-01Mk state in-programming-01
Mk state in-programming-01
 
Jcsug21 20140912
Jcsug21 20140912Jcsug21 20140912
Jcsug21 20140912
 
Korejanai Story
Korejanai StoryKorejanai Story
Korejanai Story
 
of_protocol_tremaday5
of_protocol_tremaday5of_protocol_tremaday5
of_protocol_tremaday5
 
FlexPod Day 2016 - Cisco session (Publish edition)
FlexPod Day 2016 - Cisco session (Publish edition)FlexPod Day 2016 - Cisco session (Publish edition)
FlexPod Day 2016 - Cisco session (Publish edition)
 
Career - design, adaption and diversity - for EMC I&D event
Career - design, adaption and diversity - for EMC I&D eventCareer - design, adaption and diversity - for EMC I&D event
Career - design, adaption and diversity - for EMC I&D event
 
Tokyo meetup 20160224
Tokyo meetup 20160224Tokyo meetup 20160224
Tokyo meetup 20160224
 
Contiv 20160914
Contiv 20160914Contiv 20160914
Contiv 20160914
 
Call for Speakersに講演を256倍通す方法
Call for Speakersに講演を256倍通す方法Call for Speakersに講演を256倍通す方法
Call for Speakersに講演を256倍通す方法
 
OpenStack Congress and Datalog (English)
OpenStack Congress and Datalog (English)OpenStack Congress and Datalog (English)
OpenStack Congress and Datalog (English)
 

Similaire à 10分で作るクラスライブラリ

SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews, Inc.
 
coma Study Room vol.2 Arduino Workshop
coma Study Room vol.2 Arduino Workshopcoma Study Room vol.2 Arduino Workshop
coma Study Room vol.2 Arduino WorkshopEto Haruhiko
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12Takanori Suzuki
 
2012/06/28 #ssmjp
2012/06/28 #ssmjp2012/06/28 #ssmjp
2012/06/28 #ssmjpth0x0472
 
Data APIの背景と活用方法 MTCafe Nagoya Ver.
Data APIの背景と活用方法 MTCafe Nagoya Ver.Data APIの背景と活用方法 MTCafe Nagoya Ver.
Data APIの背景と活用方法 MTCafe Nagoya Ver.Hajime Fujimoto
 
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3Masahiro Wakame
 
ツイートID生成とツイッターリアルタイム検索システムの話
ツイートID生成とツイッターリアルタイム検索システムの話ツイートID生成とツイッターリアルタイム検索システムの話
ツイートID生成とツイッターリアルタイム検索システムの話Preferred Networks
 
Androidとfpgaを高速fifo通信させちゃう
Androidとfpgaを高速fifo通信させちゃうAndroidとfpgaを高速fifo通信させちゃう
Androidとfpgaを高速fifo通信させちゃうksk sue
 
[D23] SQL Server 2014 リリース記念!~Hekaton, カラムストアを試して、さらにギンギンに速くしてみました!~by Daisuk...
[D23] SQL Server 2014 リリース記念!~Hekaton, カラムストアを試して、さらにギンギンに速くしてみました!~by Daisuk...[D23] SQL Server 2014 リリース記念!~Hekaton, カラムストアを試して、さらにギンギンに速くしてみました!~by Daisuk...
[D23] SQL Server 2014 リリース記念!~Hekaton, カラムストアを試して、さらにギンギンに速くしてみました!~by Daisuk...Insight Technology, Inc.
 
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのかお前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのかKousuke Ebihara
 
Serf2Excel - Serf を実運用に活かす話 + Consul もあるよ
Serf2Excel - Serf を実運用に活かす話 + Consul もあるよSerf2Excel - Serf を実運用に活かす話 + Consul もあるよ
Serf2Excel - Serf を実運用に活かす話 + Consul もあるよMasahito Zembutsu
 
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみようSlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみようShigeo Ueda
 
20120519 #qpstudy インターフェース入門
20120519 #qpstudy インターフェース入門20120519 #qpstudy インターフェース入門
20120519 #qpstudy インターフェース入門Hiyou Shinnonome
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0Kiwamu Okabe
 
Reproducebility 100倍 Dockerマン
Reproducebility 100倍 DockerマンReproducebility 100倍 Dockerマン
Reproducebility 100倍 DockerマンNagi Teramo
 
インデントを減らそう
インデントを減らそうインデントを減らそう
インデントを減らそう知之 朝枝
 

Similaire à 10分で作るクラスライブラリ (20)

SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
 
coma Study Room vol.2 Arduino Workshop
coma Study Room vol.2 Arduino Workshopcoma Study Room vol.2 Arduino Workshop
coma Study Room vol.2 Arduino Workshop
 
20060520.tcp
20060520.tcp20060520.tcp
20060520.tcp
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
 
2012/06/28 #ssmjp
2012/06/28 #ssmjp2012/06/28 #ssmjp
2012/06/28 #ssmjp
 
Magic Ring Buffer
Magic Ring BufferMagic Ring Buffer
Magic Ring Buffer
 
Data APIの背景と活用方法 MTCafe Nagoya Ver.
Data APIの背景と活用方法 MTCafe Nagoya Ver.Data APIの背景と活用方法 MTCafe Nagoya Ver.
Data APIの背景と活用方法 MTCafe Nagoya Ver.
 
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3
 
ツイートID生成とツイッターリアルタイム検索システムの話
ツイートID生成とツイッターリアルタイム検索システムの話ツイートID生成とツイッターリアルタイム検索システムの話
ツイートID生成とツイッターリアルタイム検索システムの話
 
Androidとfpgaを高速fifo通信させちゃう
Androidとfpgaを高速fifo通信させちゃうAndroidとfpgaを高速fifo通信させちゃう
Androidとfpgaを高速fifo通信させちゃう
 
[D23] SQL Server 2014 リリース記念!~Hekaton, カラムストアを試して、さらにギンギンに速くしてみました!~by Daisuk...
[D23] SQL Server 2014 リリース記念!~Hekaton, カラムストアを試して、さらにギンギンに速くしてみました!~by Daisuk...[D23] SQL Server 2014 リリース記念!~Hekaton, カラムストアを試して、さらにギンギンに速くしてみました!~by Daisuk...
[D23] SQL Server 2014 リリース記念!~Hekaton, カラムストアを試して、さらにギンギンに速くしてみました!~by Daisuk...
 
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのかお前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのか
 
Serf2Excel - Serf を実運用に活かす話 + Consul もあるよ
Serf2Excel - Serf を実運用に活かす話 + Consul もあるよSerf2Excel - Serf を実運用に活かす話 + Consul もあるよ
Serf2Excel - Serf を実運用に活かす話 + Consul もあるよ
 
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみようSlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
SlackのIncomingWebhooksとOutgoingWebhooksを使って電子工作と連携させてみよう
 
20120519 #qpstudy インターフェース入門
20120519 #qpstudy インターフェース入門20120519 #qpstudy インターフェース入門
20120519 #qpstudy インターフェース入門
 
What is Metasepi?
What is Metasepi?What is Metasepi?
What is Metasepi?
 
スタート低レイヤー #0
スタート低レイヤー #0スタート低レイヤー #0
スタート低レイヤー #0
 
Inside winnyp
Inside winnypInside winnyp
Inside winnyp
 
Reproducebility 100倍 Dockerマン
Reproducebility 100倍 DockerマンReproducebility 100倍 Dockerマン
Reproducebility 100倍 Dockerマン
 
インデントを減らそう
インデントを減らそうインデントを減らそう
インデントを減らそう
 

Dernier

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 

Dernier (10)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

10分で作るクラスライブラリ