SlideShare a Scribd company logo
edo
                        cabinet



                                  http://tinyurl.com/edocabinet
Sunday, July 19, 2009
ruby and
                        tokyo cabinet



                                http://www.flickr.com/photos/kiim/3185168797/
Sunday, July 19, 2009
jmettraux

                        swiss guy
                        wants to write less code
                        ends up writing too much




                                              http://github.com/jmettraux/
Sunday, July 19, 2009
why rufus-tokyo ?

                        need to persist data quickly




Sunday, July 19, 2009
Tokyo Cabinet|Tyrant

                        key/value store

                        persistent

                        fast, fast, fast



                                           http://tokyocabinet.sourceforge.net/
Sunday, July 19, 2009
Hirabyashi-san is providing
                        ruby bindings

                        but no “sudo gem install”

                        and it’s ‘extconf’

                        and ...



                                        http://tokyocabinet.sourceforge.net/rubydoc/
Sunday, July 19, 2009
Sunday, July 19, 2009
what I want

                        {}




Sunday, July 19, 2009
Sunday, July 19, 2009
what I want

                        what I built




Sunday, July 19, 2009
rufus-tokyo

                        ruby gem

                        Tokyo Cabinet
                        Tokyo Tyrant

                        ruby FFI




Sunday, July 19, 2009
http://blog.headius.com/2008/10/ffi-for-ruby-now-available.html
Sunday, July 19, 2009
ruby FFI




Sunday, July 19, 2009
FFI

                        Foreign Function Interface

                        common lisp
                        haskell




Sunday, July 19, 2009
ruby FFI

                        from Rubinius

                        thanks to Wayne Meissner

                        to jruby and ruby



                               http://wmeissner.blogspot.com/2008/11/more-on-ruby-ffi.html
Sunday, July 19, 2009
ruby FFI

                        an example

                        the ‘crypt’ function




Sunday, July 19, 2009
Sunday, July 19, 2009
http://files.getdropbox.com/u/76595/rk_crypt.rb
Sunday, July 19, 2009
ruby FFI

                        an example

                        ‘uuid_generate’




Sunday, July 19, 2009
http://files.getdropbox.com/u/76595/rk_uuid.rb
Sunday, July 19, 2009
ruby FFI flow

                        1) attach functions
                        2) call functions




Sunday, July 19, 2009
ruby FFI

                        an example

                        libevent




Sunday, July 19, 2009
http://files.getdropbox.com/u/76595/rk_libev.rb
Sunday, July 19, 2009
http://files.getdropbox.com/u/76595/rk_libev.rb
Sunday, July 19, 2009
Sunday, July 19, 2009
ruby FFI

                        more fun

                        from ruby to lua




Sunday, July 19, 2009
http://jmettraux.wordpress.com/2009/03/16/ruby-to-lua/
Sunday, July 19, 2009
http://github.com/remogatto/ffi-inliner/
Sunday, July 19, 2009
Sunday, July 19, 2009
Tokyo Cabinet|Tyrant




Sunday, July 19, 2009
Mikio Hirabayashi is the
                        author

                        mixi.jp is the source




                                  http://tokyocabinet.sourceforge.net/index.html
Sunday, July 19, 2009
http://alpha.mixi.co.jp/blog/?author=3
Sunday, July 19, 2009
http://www.slideshare.net/estraier/introduction-to-tokyo-products
Sunday, July 19, 2009
Sunday, July 19, 2009
rufus-tokyo




Sunday, July 19, 2009
2 products

                        Tokyo Cabinet
                        local file

                        Tokyo Tyrant
                        remote cabinet file
                        over TCP socket
                        (or Unix socket)



Sunday, July 19, 2009
local   cabinet lib




Sunday, July 19, 2009
remote   tyrant server




                                  cabinet lib




Sunday, July 19, 2009
tt
                        memcached   tyrant server
                           http



                                     cabinet lib




Sunday, July 19, 2009
2 flavours

                        - key/value (abstract)

                        - key/hash of values (table)




Sunday, July 19, 2009
{ k => v }   { k => { k => v } }


                           hash
                          B+ tree           table
                        fixed length




Sunday, July 19, 2009
{ k => v }   { k => { k => v } }




                        abstract           table




Sunday, July 19, 2009
key/value

                        like { }




Sunday, July 19, 2009
Sunday, July 19, 2009
key/hash of values (table)

                        like a { pk => { } }




Sunday, July 19, 2009
Sunday, July 19, 2009
Sunday, July 19, 2009
local                            remote


                        Rufus::Tokyo::   Rufus::Tokyo::   Rufus::Tokyo::   Rufus::Tokyo::
                           Cabinet           Table           Tyrant         TyrantTable




                             {}          { pk => { } }         {}          { pk => { } }


                                                                     1+ accesses
                                   1 access
                                                                    lua embedded




Sunday, July 19, 2009
tt-src $ .configure --enable-lua
                        tt-src $ make
                        tt-src $ sudo make install




                                         http://openwferu.rubyforge.org/tokyo.html
Sunday, July 19, 2009
http://jmettraux.wordpress.com/2009/04/07/rufus-tokyo-0112-extlua/
Sunday, July 19, 2009
http://www.igvita.com/2009/07/13/extending-tokyo-cabinet-db-with-lua/
Sunday, July 19, 2009
Sunday, July 19, 2009
Rufus::Edo




Sunday, July 19, 2009
FFI

                        + ruby, jruby
                        + no compilation when ‘gem install’

                        - slower than classical c extension

                        => Rufus::Edo




Sunday, July 19, 2009
Sunday, July 19, 2009
local                           remote

                                                         Rufus::Tokyo::


                           FFI      Cabinet           Table         Tyrant        TyrantTable


                                                          Rufus::Edo::


                          c ext     Cabinet           Table               ?            ?


                        pure ruby                                  NetTyrant     NetTyrantTable




Sunday, July 19, 2009
ruby to tyrant, the fastest

                        http://github.com/actsasflinn/
                        ruby-tokyotyrant/

                        ruby c extension for Tyrant

                        rufus-tokyo friendly




Sunday, July 19, 2009
projects using rufus-tokyo

                        (github search)

                        - wycats/moneta
                        - jcrosby/cloudkit
                        - elisehuard/tokyo_cabinet4r
                        - terralien/metry
                        - nofxx/tokyo_store
                        - sethyates/content_manager
                        - heycarsten/gcoder
                        - joshbuddy/tokyo_cache_cow
                        - ...

Sunday, July 19, 2009
many thanks to

                        Mikio Hirabayashi
                        Zev Blut
                        Ilya Grigorik
                        Justin Reagor
                        Flinn Muller
                        Wayne E. Seguin
                        Matthew King
                        Yuki Satow
                        Wayne Meissner
                        Kim Erlandsen (picture)
                        and many others

Sunday, July 19, 2009

More Related Content

Similar to Edo Cabinet

Web2.0 - wat is dat beest?
Web2.0 - wat is dat beest?Web2.0 - wat is dat beest?
Web2.0 - wat is dat beest?
Bart De Waele
 
Digital Imaging with Free Software - Talk at Sheffield Astronomical Society J...
Digital Imaging with Free Software - Talk at Sheffield Astronomical Society J...Digital Imaging with Free Software - Talk at Sheffield Astronomical Society J...
Digital Imaging with Free Software - Talk at Sheffield Astronomical Society J...
Jan Wedekind
 
RubyKaigi2009 Presentation Slide
RubyKaigi2009 Presentation SlideRubyKaigi2009 Presentation Slide
RubyKaigi2009 Presentation Slide
Hiroshi SHIBATA
 
Enrolling in the Creative Class
Enrolling in the Creative ClassEnrolling in the Creative Class
Enrolling in the Creative Class
David Wiley
 
CreateWV 091019112614 Wiley Keynote
CreateWV 091019112614 Wiley KeynoteCreateWV 091019112614 Wiley Keynote
CreateWV 091019112614 Wiley KeynoteCreateWV
 
Gerd Leonhard Presentation at Emerging Communication Conference & Awards 2009...
Gerd Leonhard Presentation at Emerging Communication Conference & Awards 2009...Gerd Leonhard Presentation at Emerging Communication Conference & Awards 2009...
Gerd Leonhard Presentation at Emerging Communication Conference & Awards 2009...eCommConf
 
Presentation to wdim_students
Presentation to wdim_studentsPresentation to wdim_students
Presentation to wdim_studentsScott Motte
 
Aaron Quint - Ruby Kaigi Presentation
Aaron Quint - Ruby Kaigi PresentationAaron Quint - Ruby Kaigi Presentation
Aaron Quint - Ruby Kaigi Presentationquirkey
 
Rhouse - Home automation is ruby ?
Rhouse - Home automation is ruby ?Rhouse - Home automation is ruby ?
Rhouse - Home automation is ruby ?
Fernand Galiana
 
Functional Java Script - Webtechcon 2009
Functional Java Script - Webtechcon 2009Functional Java Script - Webtechcon 2009
Functional Java Script - Webtechcon 2009
wolframkriesing
 
Termtter 2009-03-14
Termtter 2009-03-14Termtter 2009-03-14
Termtter 2009-03-14jugyo kohno
 
Japanese Rubyists you have not met yet
Japanese Rubyists you have not met yetJapanese Rubyists you have not met yet
Japanese Rubyists you have not met yetmasayoshi takahashi
 
RubyKaigi2009さんか報告会
RubyKaigi2009さんか報告会RubyKaigi2009さんか報告会
RubyKaigi2009さんか報告会Tomohiro Nishimura
 
Oxente on Rails 2009
Oxente on Rails 2009Oxente on Rails 2009
Oxente on Rails 2009
Fabio Akita
 
Accelerating Ruby with LLVM
Accelerating Ruby with LLVMAccelerating Ruby with LLVM
Accelerating Ruby with LLVM
evanphx
 
Vladimir Oane
Vladimir OaneVladimir Oane
Vladimir Oane
evensys
 
FFI - building cross engine ruby extensions
FFI - building cross engine ruby extensionsFFI - building cross engine ruby extensions
FFI - building cross engine ruby extensions
Jeremy Hinegardner
 
09年11月 イケテルシリコンバレー報告会
09年11月 イケテルシリコンバレー報告会09年11月 イケテルシリコンバレー報告会
09年11月 イケテルシリコンバレー報告会
Ruby Business Commons
 
Rj Auburn's Presentation at Emerging Communication Conference & Awards 2009 E...
Rj Auburn's Presentation at Emerging Communication Conference & Awards 2009 E...Rj Auburn's Presentation at Emerging Communication Conference & Awards 2009 E...
Rj Auburn's Presentation at Emerging Communication Conference & Awards 2009 E...eCommConf
 

Similar to Edo Cabinet (20)

Web2.0 - wat is dat beest?
Web2.0 - wat is dat beest?Web2.0 - wat is dat beest?
Web2.0 - wat is dat beest?
 
Digital Imaging with Free Software - Talk at Sheffield Astronomical Society J...
Digital Imaging with Free Software - Talk at Sheffield Astronomical Society J...Digital Imaging with Free Software - Talk at Sheffield Astronomical Society J...
Digital Imaging with Free Software - Talk at Sheffield Astronomical Society J...
 
RubyKaigi2009 Presentation Slide
RubyKaigi2009 Presentation SlideRubyKaigi2009 Presentation Slide
RubyKaigi2009 Presentation Slide
 
Enrolling in the Creative Class
Enrolling in the Creative ClassEnrolling in the Creative Class
Enrolling in the Creative Class
 
CreateWV 091019112614 Wiley Keynote
CreateWV 091019112614 Wiley KeynoteCreateWV 091019112614 Wiley Keynote
CreateWV 091019112614 Wiley Keynote
 
Gerd Leonhard Presentation at Emerging Communication Conference & Awards 2009...
Gerd Leonhard Presentation at Emerging Communication Conference & Awards 2009...Gerd Leonhard Presentation at Emerging Communication Conference & Awards 2009...
Gerd Leonhard Presentation at Emerging Communication Conference & Awards 2009...
 
Presentation to wdim_students
Presentation to wdim_studentsPresentation to wdim_students
Presentation to wdim_students
 
Aaron Quint - Ruby Kaigi Presentation
Aaron Quint - Ruby Kaigi PresentationAaron Quint - Ruby Kaigi Presentation
Aaron Quint - Ruby Kaigi Presentation
 
Rhouse - Home automation is ruby ?
Rhouse - Home automation is ruby ?Rhouse - Home automation is ruby ?
Rhouse - Home automation is ruby ?
 
Functional Java Script - Webtechcon 2009
Functional Java Script - Webtechcon 2009Functional Java Script - Webtechcon 2009
Functional Java Script - Webtechcon 2009
 
Termtter 2009-03-14
Termtter 2009-03-14Termtter 2009-03-14
Termtter 2009-03-14
 
Japanese Rubyists you have not met yet
Japanese Rubyists you have not met yetJapanese Rubyists you have not met yet
Japanese Rubyists you have not met yet
 
RubyKaigi2009さんか報告会
RubyKaigi2009さんか報告会RubyKaigi2009さんか報告会
RubyKaigi2009さんか報告会
 
Bnc Pd Day Bellwoods
Bnc Pd Day BellwoodsBnc Pd Day Bellwoods
Bnc Pd Day Bellwoods
 
Oxente on Rails 2009
Oxente on Rails 2009Oxente on Rails 2009
Oxente on Rails 2009
 
Accelerating Ruby with LLVM
Accelerating Ruby with LLVMAccelerating Ruby with LLVM
Accelerating Ruby with LLVM
 
Vladimir Oane
Vladimir OaneVladimir Oane
Vladimir Oane
 
FFI - building cross engine ruby extensions
FFI - building cross engine ruby extensionsFFI - building cross engine ruby extensions
FFI - building cross engine ruby extensions
 
09年11月 イケテルシリコンバレー報告会
09年11月 イケテルシリコンバレー報告会09年11月 イケテルシリコンバレー報告会
09年11月 イケテルシリコンバレー報告会
 
Rj Auburn's Presentation at Emerging Communication Conference & Awards 2009 E...
Rj Auburn's Presentation at Emerging Communication Conference & Awards 2009 E...Rj Auburn's Presentation at Emerging Communication Conference & Awards 2009 E...
Rj Auburn's Presentation at Emerging Communication Conference & Awards 2009 E...
 

Recently uploaded

Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
Rohit Gautam
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
SOFTTECHHUB
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Vladimir Iglovikov, Ph.D.
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 

Recently uploaded (20)

Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
Large Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial ApplicationsLarge Language Model (LLM) and it’s Geospatial Applications
Large Language Model (LLM) and it’s Geospatial Applications
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 

Edo Cabinet