SlideShare a Scribd company logo
1 of 58
fluentdの設定が
よくわからない話
@harukasan
Sunday, June 2, 13
harukasan
・高専カンファレンス
・久留米高専/九工大/筑波大
・pixivのインフラ14ヶ月目
Sunday, June 2, 13
Sunday, June 2, 13
Sunday, June 2, 13
Ruby on Rails
Sunday, June 2, 13
Ruby on Rails
Capistrano
Sunday, June 2, 13
Ruby on Rails
Capistrano
Fluentd
Sunday, June 2, 13
fluentd
Sunday, June 2, 13
Front Access
App. Access
Activity - Sign-up, Sign-in, bookmark, ...
PHP/Rails error
JS(client-side) error
MySQL slow queries
Solr slow requests
IRC
Sunday, June 2, 13
capped
mongodb

APP/DB

in_tail
extended in_tail
out_mongo

out_file_alternative
JSON
Admin view


minutely/daily
batch
IRC
Google
Docs

MySQL
Sunday, June 2, 13
fluentd
Sunday, June 2, 13
fluentd
がよくわからなかった話
Sunday, June 2, 13
Input Plugin
Buffer Plugin
Output Plugin
Input data
(tag, data)
Output data
Fluentd Basic architecture
Sunday, June 2, 13
Configure
Sunday, June 2, 13
<source>
type tail
path /tmp/test.log
tag test.log
format json
</source>
<match test.log>
type mongo
host localhost
database test
collection log
buffer_chunk_limit 2m
buffer_queue_limit 256
flush_interval 1s
</match>
Sunday, June 2, 13
なんか動く
Sunday, June 2, 13
<source>
type tail
path /tmp/test.log
tag test.log
format json
</source>
<match test.log>
type mongo
host localhost
database test
collection log
buffer_chunk_limit 2m
buffer_queue_limit 256
flush_interval 1s
</match>
Sunday, June 2, 13
<source>
type tail
path /tmp/test.log
tag test.log
format json
</source>
<match test.log>
type mongo
host localhost
database test
collection log
buffer_chunk_limit 2m
buffer_queue_limit 256
flush_interval 1s
</match>
Sunday, June 2, 13
ようわからん
Sunday, June 2, 13
Sunday, June 2, 13
ようわからん
Sunday, June 2, 13
質問
Sunday, June 2, 13
難易度
英語 < Ruby
Sunday, June 2, 13
難易度
Ruby < 英語
Sunday, June 2, 13
git clone
git@github.com:fluent/fluentd.git
Sunday, June 2, 13
Fluent::BufferedOutput
emit(tag,data)
emit(tag,data)
BufferedOutput
write(data)
BufferInput
someting(data)
push
pop
Sunday, June 2, 13
Fluent::BufferedOutput
emit(tag,data)
emit(tag,data)
BufferedOutput
write(data)
BufferInput
someting(data)
push
pop
Sunday, June 2, 13
Fluent::BasicBuffer#emit
def	
  emit(key,	
  data,	
  chain)
	
  	
  key	
  =	
  key.to_s
	
  	
  top	
  =	
  (@map[key]	
  ||=	
  new_chunk(key))
	
  	
  if	
  top.size	
  +	
  data.bytesize	
  <=	
  @buffer_chunk_limit
	
  	
  	
  	
  chain.next
	
  	
  	
  	
  top	
  <<	
  data
	
  	
  	
  	
  return	
  false
	
  	
  elsif	
  @queue.size	
  >=	
  @buffer_queue_limit
	
  	
  	
  	
  raise	
  BufferQueueLimitError,
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "queue	
  size	
  exceeds	
  limit"
	
  	
  end
	
  	
  nc	
  =	
  new_chunk(key)
Sunday, June 2, 13
Fluent::BasicBuffer#emit
def	
  emit(key,	
  data,	
  chain)
	
  	
  ...
	
  	
  top	
  =	
  (@map[key]	
  ||=	
  new_chunk(key))
	
  	
  if	
  top.size	
  +	
  data.bytesize	
  <=	
  @buffer_chunk_limit
...
	
  	
  	
  	
  top	
  <<	
  data
	
  	
  	
  	
  return	
  false
top=@map[key]
Sunday, June 2, 13
Fluent::BasicBuffer#emit
def	
  emit(key,	
  data,	
  chain)
	
  	
  ...
	
  	
  top	
  =	
  (@map[key]	
  ||=	
  new_chunk(key))
	
  	
  if	
  top.size	
  +	
  data.bytesize	
  <=	
  @buffer_chunk_limit
...
	
  	
  	
  	
  top	
  <<	
  data
	
  	
  	
  	
  return	
  false
top=@map[key]
emit(key,data)
Sunday, June 2, 13
Fluent::BasicBuffer#emit
def	
  emit(key,	
  data,	
  chain)
	
  	
  ...
	
  	
  top	
  =	
  (@map[key]	
  ||=	
  new_chunk(key))
	
  	
  if	
  top.size	
  +	
  data.bytesize	
  <=	
  @buffer_chunk_limit
...
	
  	
  	
  	
  top	
  <<	
  data
	
  	
  	
  	
  return	
  false
top=@map[key]
emit(key,data)
←chunk
Sunday, June 2, 13
Fluent::BasicBuffer#emit
def	
  emit(key,	
  data,	
  chain)
	
  	
  ...
	
  	
  top	
  =	
  (@map[key]	
  ||=	
  new_chunk(key))
	
  	
  if	
  top.size	
  +	
  data.bytesize	
  <=	
  @buffer_chunk_limit
...
	
  	
  	
  	
  top	
  <<	
  data
	
  	
  	
  	
  return	
  false
top=@map[key]
emit(key,data)
data
←chunk
Sunday, June 2, 13
Fluent::BasicBuffer#emit
def	
  emit(key,	
  data,	
  chain)
	
  	
  ...
	
  	
  top	
  =	
  (@map[key]	
  ||=	
  new_chunk(key))
	
  	
  if	
  top.size	
  +	
  data.bytesize	
  <=	
  @buffer_chunk_limit
...
	
  	
  	
  	
  top	
  <<	
  data
	
  	
  	
  	
  return	
  false
top=@map[key]
emit(key,data)
data
emit(key,data)
←chunk
Sunday, June 2, 13
Fluent::BasicBuffer#emit
def	
  emit(key,	
  data,	
  chain)
	
  	
  ...
	
  	
  top	
  =	
  (@map[key]	
  ||=	
  new_chunk(key))
	
  	
  if	
  top.size	
  +	
  data.bytesize	
  <=	
  @buffer_chunk_limit
...
	
  	
  	
  	
  top	
  <<	
  data
	
  	
  	
  	
  return	
  false
top=@map[key]
emit(key,data)
data
data
emit(key,data)
←chunk
Sunday, June 2, 13
Fluent::BasicBuffer#emit
def	
  emit(key,	
  data,	
  chain)
	
  	
  ...
	
  	
  top	
  =	
  (@map[key]	
  ||=	
  new_chunk(key))
	
  	
  if	
  top.size	
  +	
  data.bytesize	
  <=	
  @buffer_chunk_limit
...
	
  	
  	
  	
  top	
  <<	
  data
	
  	
  	
  	
  return	
  false
top=@map[key]
emit(key,data)
data
data
emit(key,data)
emit(key,data)
←chunk
Sunday, June 2, 13
Fluent::BasicBuffer#emit
	
  	
  end
	
  	
  nc	
  =	
  new_chunk(key)
	
  	
  ok	
  =	
  false
	
  	
  begin
	
  	
  	
  	
  nc	
  <<	
  data
	
  	
  	
  	
  chain.next
	
  	
  	
  	
  flush_trigger	
  =	
  false
top=@map[key]
emit(key,data)
data
data
emit(key,data)
emit(key,data) nc
Sunday, June 2, 13
Fluent::BasicBuffer#emit
	
  	
  end
	
  	
  nc	
  =	
  new_chunk(key)
	
  	
  ok	
  =	
  false
	
  	
  begin
	
  	
  	
  	
  nc	
  <<	
  data
	
  	
  	
  	
  chain.next
	
  	
  	
  	
  flush_trigger	
  =	
  false
top=@map[key]
emit(key,data)
data
data
emit(key,data)
emit(key,data) nc
data
Sunday, June 2, 13
Fluent::BasicBuffer#emit
	
  	
  	
  	
  flush_trigger	
  =	
  false
	
  	
  	
  	
  @queue.synchronize	
  {
	
  	
  	
  	
  	
  	
  enqueue(top)
	
  	
  	
  	
  	
  	
  flush_trigger	
  =	
  @queue.empty?
	
  	
  	
  	
  	
  	
  @queue	
  <<	
  top
	
  	
  	
  	
  	
  	
  @map[key]	
  =	
  nc
	
  	
  	
  	
  }
top=@map[key]
emit(key,data)
data
data
emit(key,data)
emit(key,data) nc
data
Sunday, June 2, 13
Fluent::BasicBuffer#emit
	
  	
  	
  	
  flush_trigger	
  =	
  false
	
  	
  	
  	
  @queue.synchronize	
  {
	
  	
  	
  	
  	
  	
  enqueue(top)
	
  	
  	
  	
  	
  	
  flush_trigger	
  =	
  @queue.empty?
	
  	
  	
  	
  	
  	
  @queue	
  <<	
  top
	
  	
  	
  	
  	
  	
  @map[key]	
  =	
  nc
	
  	
  	
  	
  }
top=@map[key]
emit(key,data)
data
data
emit(key,data)
emit(key,data) nc
data
@queue
Sunday, June 2, 13
Fluent::BasicBuffer#emit
	
  	
  	
  	
  flush_trigger	
  =	
  false
	
  	
  	
  	
  @queue.synchronize	
  {
	
  	
  	
  	
  	
  	
  enqueue(top)
	
  	
  	
  	
  	
  	
  flush_trigger	
  =	
  @queue.empty?
	
  	
  	
  	
  	
  	
  @queue	
  <<	
  top
	
  	
  	
  	
  	
  	
  @map[key]	
  =	
  nc
	
  	
  	
  	
  }
top=@map[key]
emit(key,data)
data
data
emit(key,data)
emit(key,data) nc
data
@queue
Sunday, June 2, 13
Fluent::BasicBuffer#emit
	
  	
  	
  	
  flush_trigger	
  =	
  false
	
  	
  	
  	
  @queue.synchronize	
  {
	
  	
  	
  	
  	
  	
  enqueue(top)
	
  	
  	
  	
  	
  	
  flush_trigger	
  =	
  @queue.empty?
	
  	
  	
  	
  	
  	
  @queue	
  <<	
  top
	
  	
  	
  	
  	
  	
  @map[key]	
  =	
  nc
	
  	
  	
  	
  }
top=@map[key]
emit(key,data)
data
data
emit(key,data)
emit(key,data)
data
@queue
Sunday, June 2, 13
Fluent::BasicBuffer#emit
	
  	
  	
  	
  flush_trigger	
  =	
  false
	
  	
  	
  	
  @queue.synchronize	
  {
	
  	
  	
  	
  	
  	
  enqueue(top)
	
  	
  	
  	
  	
  	
  flush_trigger	
  =	
  @queue.empty?
	
  	
  	
  	
  	
  	
  @queue	
  <<	
  top
	
  	
  	
  	
  	
  	
  @map[key]	
  =	
  nc
	
  	
  	
  	
  }
top=@map[key]
emit(key,data)
data
data
emit(key,data)
emit(key,data)
data
@queue
Sunday, June 2, 13
Fluent::BufferedOutput
emit(tag,data)
emit(tag,data)
BufferedOutput
write(data)
BufferInput
someting(data)
push
pop
Sunday, June 2, 13
Fluent::BasicBuffer#push
def	
  push(key)
	
  	
  top	
  =	
  @map[key]
	
  	
  if	
  !top	
  ||	
  top.empty?
	
  	
  	
  	
  return	
  false
	
  	
  end
	
  	
  @queue.synchronize	
  do
	
  	
  	
  	
  enqueue(top)
	
  	
  	
  	
  @queue	
  <<	
  top
	
  	
  	
  	
  @map.delete(key)
	
  	
  end
	
  	
  return	
  true
end
Sunday, June 2, 13
Fluent::BasicBuffer#push
	
  	
  @queue.synchronize	
  do
	
  	
  	
  	
  enqueue(top)
	
  	
  	
  	
  @queue	
  <<	
  top
	
  	
  	
  	
  @map.delete(key)
	
  	
  end
	
  	
  return	
  true
end
top=@map[key]
data
data
data
@queue
Sunday, June 2, 13
Fluent::BasicBuffer#push
	
  	
  @queue.synchronize	
  do
	
  	
  	
  	
  enqueue(top)
	
  	
  	
  	
  @queue	
  <<	
  top
	
  	
  	
  	
  @map.delete(key)
	
  	
  end
	
  	
  return	
  true
end
data
data
data
@queue
Sunday, June 2, 13
Fluent::BufferedOutput
emit(tag,data)
emit(tag,data)
BufferedOutput
write(data)
BufferInput
someting(data)
push
pop
Sunday, June 2, 13
Fluent::BasicBuffer#pop
def	
  pop(out)
	
  	
  chunk	
  =	
  @queue.first
	
  	
  if	
  !chunk.empty?
	
  	
  	
  	
  write_chunk(chunk,	
  out)
	
  	
  end
	
  	
  @queue.delete_if	
  {|c|
	
  	
  	
  	
  c.object_id	
  ==	
  chunk.object_id
	
  	
  }
	
  	
  chunk.purge
	
  	
  return	
  !@queue.empty?
end
Sunday, June 2, 13
Fluent::BasicBuffer#pop
data
data
data
@queue
def	
  pop(out)
	
  	
  chunk	
  =	
  @queue.first
	
  	
  if	
  !chunk.empty?
	
  	
  	
  	
  write_chunk(chunk,	
  out)
	
  	
  end
	
  	
  @queue.delete_if	
  {|c|
	
  
Sunday, June 2, 13
Fluent::BasicBuffer#pop
data
data
data
@queue
def	
  pop(out)
	
  	
  chunk	
  =	
  @queue.first
	
  	
  if	
  !chunk.empty?
	
  	
  	
  	
  write_chunk(chunk,	
  out)
	
  	
  end
	
  	
  @queue.delete_if	
  {|c|
	
  
Sunday, June 2, 13
Fluent::BufferedOutput
emit(tag,data)
emit(tag,data)
BufferedOutput
write(chunk)
BufferInput
someting(chunk)
push
pop
Sunday, June 2, 13
Configure parameters
Sunday, June 2, 13
<source>
type tail
path /tmp/test.log
tag test.log
format json
</source>
<match test.log>
type mongo
host localhost
database test
collection log
buffer_chunk_limit 2m
buffer_queue_limit 256
flush_interval 1s
</match>
Sunday, June 2, 13
buffer_chunk_limit
buffer chunkのサイズ制限
Sunday, June 2, 13
buffer_queue_limit
queueにはいるchunkの数
Sunday, June 2, 13
flush_interval
queueがpopされる間隔
Sunday, June 2, 13
まとめ
Sunday, June 2, 13
documentを書くのは面倒なので
documentを読みたい人はdocumentを書こう
documentがなくてもcodeが小さければ読める
よくわからなかったらcodeを読もう
Sunday, June 2, 13

More Related Content

Viewers also liked

Alfresco study37 alfresco_ng2_components
Alfresco study37 alfresco_ng2_componentsAlfresco study37 alfresco_ng2_components
Alfresco study37 alfresco_ng2_componentsTakeshi Totani
 
それFluentdで! #fluentd
それFluentdで!  #fluentdそれFluentdで!  #fluentd
それFluentdで! #fluentdAtsuko Shibuya
 
Alfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズ
Alfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズAlfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズ
Alfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズJun Terashita
 
Elasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライドElasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライド崇介 藤井
 
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみようAlfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみようTasuku Otani
 
0からわかるAlfresco 2017年1月版
0からわかるAlfresco 2017年1月版0からわかるAlfresco 2017年1月版
0からわかるAlfresco 2017年1月版MoritakaSoma
 
Alfresco Javascript Consoleのご紹介
Alfresco Javascript Consoleのご紹介Alfresco Javascript Consoleのご紹介
Alfresco Javascript Consoleのご紹介MoritakaSoma
 

Viewers also liked (7)

Alfresco study37 alfresco_ng2_components
Alfresco study37 alfresco_ng2_componentsAlfresco study37 alfresco_ng2_components
Alfresco study37 alfresco_ng2_components
 
それFluentdで! #fluentd
それFluentdで!  #fluentdそれFluentdで!  #fluentd
それFluentdで! #fluentd
 
Alfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズ
Alfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズAlfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズ
Alfresco勉強会#35 AlfrescoのアクティビティフィードをSlackに送るカスタマイズ
 
Elasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライドElasticsearchを使うときの注意点 公開用スライド
Elasticsearchを使うときの注意点 公開用スライド
 
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみようAlfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
Alfresco勉強会#36 alfresco 5でカスタムREST APIを作ってみよう
 
0からわかるAlfresco 2017年1月版
0からわかるAlfresco 2017年1月版0からわかるAlfresco 2017年1月版
0からわかるAlfresco 2017年1月版
 
Alfresco Javascript Consoleのご紹介
Alfresco Javascript Consoleのご紹介Alfresco Javascript Consoleのご紹介
Alfresco Javascript Consoleのご紹介
 

Recently uploaded

Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 

Recently uploaded (20)

Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 

Fluentdがよくわからなかった話