Slide 1

Slide 1 text

Datomic (Ͱ͍ͨʔͬΈͬ͘) ึੵ (@fatrow)

Slide 2

Slide 2 text

Datomicͱ͸ • σʔλϕʔε • Rich Hickey ࡞ • 2012೥3݄ʙ • ϓϩϓϥΠΤλϦ

Slide 3

Slide 3 text

Կ͕ҧ͏ʁ • ࣄ࣮ͷσʔλϕʔε

Slide 4

Slide 4 text

ैདྷͷ͸ʁ • ৔ॴࢦ޲ͷσʔλϕʔε

Slide 5

Slide 5 text

• ࣄ࣮ͷσʔλϕʔε • ৔ॴࢦ޲ͷσʔλϕʔε

Slide 6

Slide 6 text

৔ॴʁ • ৽৘ใ͸چ৘ใͷ৔ॴʹ্ॻ͖ • ঢ়ଶ

Slide 7

Slide 7 text

৔ॴࢦ޲DB • σʔλ͸৔ॴʹඥ͍͍ͮͯΔ • ৔ॴ؅ཧ໾(DBαʔό)ʹ࢓ࣄΛҰ೚

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

Կ͕໰୊ʁ

Slide 10

Slide 10 text

ݹ͍৘ใ͸ফ͑Δ • ্ॻ͖ͨ͠Β΋͏໭Εͳ͍

Slide 11

Slide 11 text

ཉ͍͠෺͸޲͜͏ଆ • ৔ॴ͸ڞ༗Ͱ͖ͳ͍ • ԟ෮ίετͷ৺഑ • αʔόʔͷෛՙͷ৺഑

Slide 12

Slide 12 text

Ұ؏ੑͱεέʔϧ • ΩϟογϡɺϨϓϦέʔγϣϯͷಋೖ => ৽ͨͳ৔ॴ => શମͷ؅ཧऀෆࡏ

Slide 13

Slide 13 text

໰୊ͷࠜݯ

Slide 14

Slide 14 text

৔ॴࢦ޲ϓϩάϥϛϯά • Place-Oriented Programming (PLOP) ϛϡʔλϒϧΦϒδΣΫτ etc

Slide 15

Slide 15 text

৔ॴࢦ޲ϓϩάϥϛϯά • Ϧιʔε͕رগͳ࣌୅ʹੜ·Εͨ • ΋͸΍ͦΜͳ੍ݶ͸ͳ͘ͳͬͨ • ৘ใ͸ຊདྷ৔ॴͱ͸ؔ܎ͳ͍

Slide 16

Slide 16 text

Datomic • ࣄ࣮ͷσʔλϕʔε • ࣄ࣮͸มΘΒͳ͍ɺফ͑ͳ͍

Slide 17

Slide 17 text

ྫ: Ҿӽ͠ • ଠ࿠ͷॅॴ: ਆಸ઒ݝ (Ҿӽ͠) • ଠ࿠ͷॅॴ: ઍ༿ݝ

Slide 18

Slide 18 text

ྫ: Ҿӽ͠ • ଠ࿠ͷॅॴ: ਆಸ઒ݝ (Ҿӽ͠) • ଠ࿠ͷॅॴ: ઍ༿ݝ ଠ࿠ͷॅॴ͕ਆಸ઒ͩͬͨࣄ࣮͸มΘΒͳ͍

Slide 19

Slide 19 text

௥هܕDB • ৽͍͠ࣄ࣮(৘ใ)͸৽͍͠৔ॴʹ • աڈͷࣄ࣮͕׬શʹอ؅ • όοΫΞοϓ͕ͱͯ΋؆୯

Slide 20

Slide 20 text

ଞͷ௥هܕDB • CouchDBɺPosgreSQLɺRethinkDBͳͲ • ࣅ͍ͯΔ఺΋ଟ͍͕ҟͳΔ఺΋ଟ͍ • ҧ͍͸ଟذʹ౉ΔͷͰ͜͜Ͱ͸ରൺ͠ ͳ͍

Slide 21

Slide 21 text

৔ॴ͔Βͷղ์ • ࣄ࣮͸޷͖ͳ͚ͩڞ༗Ͱ͖Δ • ΋͏ෳࡶͳ৔ॴͷ؅ཧ͸ඞཁͳ͍

Slide 22

Slide 22 text

࢓ࣄͷ෼ղ • ৔ॴ؅ཧ໾͕എෛ͍ͬͯͨ࢓ࣄ • σΟεΫIOɺ ΫΤϦʔɺτϥϯβΫ γϣϯɺΠϯσοΫε • ̏ͭͷ໾ऀʹ࢓ࣄΛ෼୲

Slide 23

Slide 23 text

ετϨʔδαʔϏε • ࣄ࣮อ؅ݿ • ୯७ͳग़͠ೖΕॲཧ • Ұఆ୯ҐͰ·ͱΊͯ

Slide 24

Slide 24 text

ϐΞʔ(Peer) • ΫΤϦʔΤϯδϯ͕ΫϥΠΞϯτ(ΞϓϦ) ଆʹຒΊࠐ·Εͨ • ετϨʔδαʔϏε͔Β௚઀σʔλऔಘ

Slide 25

Slide 25 text

τϥϯβΫλʔ • ࣄ࣮ͷ௥ՃΛ୲͏ • ௥Ճ͸શͯ௚ྻʹ • ୯Ұϊʔυ • Peer΁ͷ௨஌

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

Կ͕خ͍͠ͷ͔ • ετϨʔδαʔϏε • ϐΞʔ • τϥϯβΫλʔ

Slide 28

Slide 28 text

όοΫΤϯυ͕ࣗ༝ • In-Memory • Local Storage (H2) • Amazon DynamoDB ※ • PostgreSQL ※ • Riak ※ • Infinispan ※ ※ Pro Edition

Slide 29

Slide 29 text

͜ΕԿ͔Ͱݟͨ

Slide 30

Slide 30 text

͜ΕԿ͔Ͱݟͨ • Java • .NET • Javascript, ... Clojure

Slide 31

Slide 31 text

ޮ཰తͳΫΤϦʔ • PeerͷϝϞϦͷڐ͢ݶΓΩϟογϡ ԟ෮ίετθϩʹ

Slide 32

Slide 32 text

ΫΤϦʔ͸εέʔϥϒϧ • ࣗવʹ෼ࢄॲཧʹ • ଞʹ໎࿭Λ͔͚ͳ͍ ߴෛՙͳΫΤϦʔ΋ࣗ༝

Slide 33

Slide 33 text

શ෦τϥϯβΫγϣϯ • ΞϓϦଆͷෳࡶੑ͕ݮΔ • աڈͷͲͷॠؒʹ΋໭ͬͯΫΤϦʔͰ ͖Δ

Slide 34

Slide 34 text

ޮ཰తͳॻ͖ࠐΈ • ॻ͖ࠐΈ͸εέʔϧ͸͠ͳ͍ɻ͕ • τϥϯβΫλʔ͸ϩοΫɺΫΤϦʔɺ σΟεΫIOΛ͠ͳ͍෼͍ܰ

Slide 35

Slide 35 text

͓͞Β͍ • όοΫΤϯυ͕ࣗ༝ • ޮ཰తͰεέʔϥϒϧͳΫΤϦʔ • શ͕ͯτϥϯβΫγϣϯ • Ϧʔυͱ੾Γ཭͞Εͨ ޮ཰తͳϥΠτ

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

σʔλϞσϧ

Slide 38

Slide 38 text

RDB User id name age 1 “taro” 14 2 “john” 36 3 “mike” 25

Slide 39

Slide 39 text

Comment id body book 1 “good” 3 2 “bad” 2 3 “not bad” 2 Book id isbn title 1 123456 “abc” 2 789101 “foo” 3 987654 “hello” RDB User id name age 1 “taro” 14 2 “john” 36 3 “mike” 25

Slide 40

Slide 40 text

υΩϡϝϯτܕ(Mongodb) User { "_id" : ObjectId("509f41b38626d09726e978ed"), "name" : "taro", "tel" : "123-4567-8901", "address": { "zip": 123-4567, "city": "tokyo" } }

Slide 41

Slide 41 text

Comment { "_id" : ObjectId("509f41b38626d09726e978ed"), "name" : "taro", "tel" : "123-4567-8901", "address": { "zip": 123-4567, "city": "tokyo" } } Book { "_id" : ObjectId("509f41b38626d09726e978ed"), "name" : "taro", "tel" : "123-4567-8901", "address": { "zip": 123-4567, "city": "tokyo" } } υΩϡϝϯτܕ(Mongodb) User { "_id" : ObjectId("509f41b38626d09726e978ed"), "name" : "taro", "tel" : "123-4567-8901", "address": { "zip": 123-4567, "city": "tokyo" } }

Slide 42

Slide 42 text

Datomic ࣮ମ Entity ଐੑ Attribute ஋ Value ࣌ؒ Time • ࣄ࣮ͷ࠷খ୯Ґ Datom • ྫ) ଠ࿠ͷॅॴ͸ਆಸ઒ݝɻڈ೥͸ɻ

Slide 43

Slide 43 text

Datom Entity Attribute Value Time 7 :address “ਆಸ઒” T123

Slide 44

Slide 44 text

Datom Entity Attribute Value Time 7 :address “ਆಸ઒” T123 ࣮ମͷࣝผࢠɻ࣮૷্͸Long஋͕ࣗಈͰৼΒΕΔ

Slide 45

Slide 45 text

Datom Entity Attribute Value Time 7 :address “ਆಸ઒” T123 ࣮ମͷࣝผࢠɻ࣮૷্͸Long஋͕ࣗಈͰৼΒΕΔ keyword

Slide 46

Slide 46 text

Datom Entity Attribute Value Time 7 :address “ਆಸ઒” T123 ࣮ମͷࣝผࢠɻ࣮૷্͸Long஋͕ࣗಈͰৼΒΕΔ keyword τϥϯβΫγϣϯ൪߸

Slide 47

Slide 47 text

Datom Entity Attribute Value Time 7 :name “taro” T123 7 :address “ਆಸ઒” T124 2 :name “foo” T125

Slide 48

Slide 48 text

Datom • ςʔϒϧ͸ͳ͍ Entity Attribute Value Time 7 :name “taro” T123 7 :address “ਆಸ઒” T124 2 :name “foo” T125

Slide 49

Slide 49 text

Datom • ςʔϒϧ͸ͳ͍ • ଐੑ໊͕িಥ͢ΔΜ͡Όʁ Entity Attribute Value Time 7 :name “taro” T123 7 :address “ਆಸ઒” T124 2 :name “foo” T125

Slide 50

Slide 50 text

Datom • ໊લۭؒͰিಥ͠ͳ͍ Entity Attribute Value Time 7 :user/name “taro” T123 7 :user/address “ਆಸ઒” T124 2 :book/name “foo” T125

Slide 51

Slide 51 text

Datom • σʔλϕʔε: Datomͷू߹ɺϩά • DatomΛ଍͔͢Ҿ͔͘ (add, retract) • Ҿ͘͸ফڈͰ͸ͳ͍㲈ଧͪফ͠

Slide 52

Slide 52 text

API ͸จࣈྻͰ͸ͳ͘σʔλ (d/transact connection [[:db/add 7 :user/address “ਆಸ઒”] [:db/add 7 :user/name “taro”] [:db/retract 8 :book/name “foo”]])

Slide 53

Slide 53 text

API ͸จࣈྻͰ͸ͳ͘σʔλ (d/transact connection [[:db/add 7 :user/address “ਆಸ઒”] [:db/add 7 :user/name “taro”] [:db/retract 8 :book/name “foo”]]) DatomͷϕΫλ

Slide 54

Slide 54 text

γϣʔτΧοτ (d/transact connection [{:db/id 7, :user/address “ਆಸ઒”, :user/name “taro”} [:db/retract 8 :book/name “foo”]])

Slide 55

Slide 55 text

γϣʔτΧοτ (d/transact connection [{:db/id 7, :user/address “ਆಸ઒”, :user/name “taro”} [:db/retract 8 :book/name “foo”]]) :db/id͸Entityͷࣄ

Slide 56

Slide 56 text

Schema͋Γ • ଐੑ͸࢖͏લʹఆٛ • ଐੑͷఆٛ΋ී௨ͷDatomͰɻ SQLͷalter tableΈ͍ͨʹಛผ͡Όͳ͍

Slide 57

Slide 57 text

Schemaఆٛྫ {:db/id #db/id[:db.part/db] :db/ident :user/address :db/valueType :db.type/string :db/cardinality :db.cardinality/one :db/unique :db.unique/value :db/index true :db/doc "A user's address"}

Slide 58

Slide 58 text

Schemaఆٛྫ {:db/id #db/id[:db.part/db] :db/ident :user/address :db/valueType :db.type/string :db/cardinality :db.cardinality/one :db/unique :db.unique/value :db/index true :db/doc "A user's address"} ଐੑ໊

Slide 59

Slide 59 text

Schemaఆٛྫ {:db/id #db/id[:db.part/db] :db/ident :user/address :db/valueType :db.type/string :db/cardinality :db.cardinality/one :db/unique :db.unique/value :db/index true :db/doc "A user's address"} ଐੑ໊ ܕ

Slide 60

Slide 60 text

Schemaఆٛྫ {:db/id #db/id[:db.part/db] :db/ident :user/address :db/valueType :db.type/string :db/cardinality :db.cardinality/one :db/unique :db.unique/value :db/index true :db/doc "A user's address"} ଐੑ໊ ܕ Ұ͔ଟ͔

Slide 61

Slide 61 text

Schemaఆٛྫ {:db/id #db/id[:db.part/db] :db/ident :user/address :db/valueType :db.type/string :db/cardinality :db.cardinality/one :db/unique :db.unique/value :db/index true :db/doc "A user's address"} ଐੑ໊ ܕ Ұ͔ଟ͔ ϢχʔΫ ಛੑ

Slide 62

Slide 62 text

Schemaఆٛྫ {:db/id #db/id[:db.part/db] :db/ident :user/address :db/valueType :db.type/string :db/cardinality :db.cardinality/one :db/unique :db.unique/value :db/index true :db/doc "A user's address"} ଐੑ໊ ܕ Ұ͔ଟ͔ ϢχʔΫ ಛੑ ΠϯσοΫε

Slide 63

Slide 63 text

Schemaఆٛྫ {:db/id #db/id[:db.part/db] :db/ident :user/address :db/valueType :db.type/string :db/cardinality :db.cardinality/one :db/unique :db.unique/value :db/index true :db/doc "A user's address"} ଐੑ໊ ܕ Ұ͔ଟ͔ ϢχʔΫ ಛੑ ΠϯσοΫε આ໌

Slide 64

Slide 64 text

ଞʹ΋ • ஋ͷςΩετݕࡧ :db/fulltext true • ݹ͍஋Λ࢒͞ͳ͍ࢦఆ :db/noHistory true

Slide 65

Slide 65 text

Կ͕خ͍͠ͷ͔ • ଐੑͷ૊Έ߹Θ͕ͤࣗ༝ :book/title ͱ :item/id Λ࣋ͨͤͯ΋͍͍ => ௕ظతͳॊೈੑ • ͕࣌ؒϑΝʔετΫϥε ࣌ؒʹඥ෇͚ͨΫΤϦʔ͕Մೳʹ

Slide 66

Slide 66 text

ΫΤϦʔ

Slide 67

Slide 67 text

Datalog • PrologͷαϒηοτDatalog • એݴత • จࣈྻͰ͸ͳ͘σʔλͰ • ҉໧తͳδϣΠϯ

Slide 68

Slide 68 text

ΫΤϦʔ [:find ?e :in $ :where [$ ?e :user/address “ਆಸ઒”]]

Slide 69

Slide 69 text

ΫΤϦʔ [:find ?e :in $ :where [$ ?e :user/address “ਆಸ઒”]] SQLͷSELECTΈ͍ͨͳɻฦͯ͠ཉ͍͠෺

Slide 70

Slide 70 text

ΫΤϦʔ [:find ?e :in $ :where [$ ?e :user/address “ਆಸ઒”]] SQLͷSELECTΈ͍ͨͳɻฦͯ͠ཉ͍͠෺ ֎͔Β༩͑Δೖྗ

Slide 71

Slide 71 text

ΫΤϦʔ [:find ?e :in $ :where [$ ?e :user/address “ਆಸ઒”]] SQLͷSELECTΈ͍ͨͳɻฦͯ͠ཉ͍͠෺ ֎͔Β༩͑Δೖྗ SQLͷwhereΈ͍ͨͳɻߜΓࠐΈ

Slide 72

Slide 72 text

ΫΤϦʔ [:find ?e :in $ :where [$ ?e :user/address “ਆಸ઒”]] SQLͷSELECTΈ͍ͨͳɻฦͯ͠ཉ͍͠෺ ֎͔Β༩͑Δೖྗ SQLͷwhereΈ͍ͨͳɻߜΓࠐΈ ม਺ɻ ಉ໊͡લͳΒࣗಈతʹରԠɻ $͸σʔλϕʔεΛද͢

Slide 73

Slide 73 text

ΫΤϦʔ [:find ?e :in $ :where [$ ?e :user/address “ਆಸ઒”]] SQLͷSELECTΈ͍ͨͳɻฦͯ͠ཉ͍͠෺ ֎͔Β༩͑Δೖྗ SQLͷwhereΈ͍ͨͳɻߜΓࠐΈ ม਺ɻ ಉ໊͡લͳΒࣗಈతʹରԠɻ $͸σʔλϕʔεΛද͢ ఆ਺ɻݻఆ͞Εͨ஋

Slide 74

Slide 74 text

ΫΤϦʔ [:find ?e :in $ :where [ ?e :user/address “ਆಸ઒”]] $͚ͩಛघͰ:where͔ΒলུͰ͖Δ

Slide 75

Slide 75 text

ఆ਺ͰߜΓࠐΈ [:find ?e :in $ :where [?e :user/address “ਆಸ઒”] [?e :user/name “taro”]]

Slide 76

Slide 76 text

ఆ਺ͰߜΓࠐΈ [:find ?e :in $ :where [?e :user/address “ਆಸ઒”] [?e :user/name “taro”]] ਆಸ઒͔ͭtaroͰߜΓࠐΈ

Slide 77

Slide 77 text

ೖྗ஋ͰߜΓࠐΈ [:find ?e :in $ ?addr ?name :where [?e :user/address ?addr] [?e :user/name ?name]]

Slide 78

Slide 78 text

ೖྗ஋ͰߜΓࠐΈ [:find ?e :in $ ?addr ?name :where [?e :user/address ?addr] [?e :user/name ?name]] ೖྗ஋͕όΠϯυ͞ΕΔ

Slide 79

Slide 79 text

͜Ε͸ߜΓࠐΈ͡Όͳ͍ [:find ?e ?name :in $ :where [?e :user/address “ਆಸ઒”] [?e :user/name ?name]]

Slide 80

Slide 80 text

͜Ε͸ߜΓࠐΈ͡Όͳ͍ [:find ?e ?name :in $ :where [?e :user/address “ਆಸ઒”] [?e :user/name ?name]] ਆಸ઒ͷਓશһͷ໊લ΋ฦ͢

Slide 81

Slide 81 text

҉໧తͳδϣΠϯ [:find ?book-e :in $ :where [?e :user/address “ਆಸ઒”] [?book-e :book/author ?e]]

Slide 82

Slide 82 text

҉໧తͳδϣΠϯ [:find ?book-e :in $ :where [?e :user/address “ਆಸ઒”] [?book-e :book/author ?e]] ਆಸ઒ʹஶऀ͕͍Δຊ

Slide 83

Slide 83 text

ଓ͖ • ެࣜͷνϡʔτϦΞϧ͕ॆ࣮ • Ұ೔͔͔ΔΑ

Slide 84

Slide 84 text

ࠓ͸ۤखͳ͜ͱ • ιʔτΛΞϓϦଆͰ΍Βͳ͍ͱ͍͚ͳ͍ • ΞϓϦʹΑͬͯ͸݁ߏக໋త

Slide 85

Slide 85 text

ઃܭ఩ֶ(1) • Out of the Tar Pit ࿦จ: Ben Moseley, Peter Marks 2006

Slide 86

Slide 86 text

ઃܭ఩ֶ(2) • The Value of Values (஋ͷՁ஋) Rich Hickey keynote • ʮ஋(σʔλ)͸࠷ߴͩʂ͋Ε΋͜Ε΋͍ ͍͜ͱͣ͘ΊɻPLOPɺ܅͸ͩΊͩʯ

Slide 87

Slide 87 text

ઃܭ఩ֶ(2) • The Value of Values (஋ͷՁ஋) Rich Hickey keynote • ʮ஋(σʔλ)͸࠷ߴͩʂ͋Ε΋͜Ε΋͍ ͍͜ͱͣ͘ΊɻPLOPɺ܅͸ͩΊͩʯ ͱͯ΋໘ന͍Α

Slide 88

Slide 88 text

·ͱΊ • ৔ॴࢦ޲͔Βͷ୤٫ • Πϛϡʔλϒϧͳ஋͕σβΠϯΛಋ͘

Slide 89

Slide 89 text

ऴΘΓ Photo credit cover(universe) write_adam "IC443, the Jellyfish nebula" CC BY-NC 2.0 http://www.flickr.com/photos/astroporn/5234588981/ fact(lens)Raymond Larose "No Crop, No Edit" CC BY-NC-ND 2.0 http://www.flickr.com/photos/lenscrack/5165225746/ PLOP(musical chairs) rich "I guess this was for musical chairs?" CC BY 2.0 http://www.flickr.com/photos/spine/1009892593/ PLOP(paint) ALL CHROME "SUPER SUNDAY" CC BY-NC-SA 2.0 http://www.flickr.com/photos/allchrome/5423888378/ information disappear(footprint) Jeff Kubina "Footprints" CC BY-ND 2.0 http://www.flickr.com/photos/kubina/21208990/ over there(monkey) Adn! "Worst than jail" CC BY-NC-ND 2.0 http://www.flickr.com/photos/hojas_cayendo/5549137958/ PLOP(musical chairs) niiicedave "IMGP0670cr - Kampout Fresno 2011 - Saturday - Kamptown Races - musical chairs" CC BY-SA 2.0 http:// www.flickr.com/photos/33671002@N00/6144480939/ PLOP(musical chairs) Takahiro Hozumi "musical_chairs" CC BY-SA 2.0 http://www.flickr.com/photos/87914538@N06/8594162617 limited resource era(cat) lincolndisplayimages.com "Arran cat (2)" CC BY-NC 2.0 http://www.flickr.com/photos/robdray/1118614948/ fact(water) Chaval Brasil "Drop in a Dime" CC BY-NC-ND 2.0 http://www.flickr.com/photos/chavals/2869153410/ liberty from place(jump) blinkingidiot "Jump for Joy" CC BY-ND 2.0 http://www.flickr.com/photos/45325473@N04/4910647166/ append only db(library) Thomas Hawk "And I Saw Your Hand With a Loose Grip on a Very Tight Ship" CC BY-NC 2.0 http://www.flickr.com/photos/ thomashawk/85441961/ decompose jobs(lego) Jez Page"257/365 - LEGO" CC BY-NC-SA 2.0 http://www.flickr.com/photos/jezpage/4990873353/ storage service(cast) Paco CT "It is Friday, let's have a drink, or two" CC BY-NC-SA 2.0 http://www.flickr.com/photos/paco_calvino/3513790048/ peer(book) Marwa Morgan "Oldies are Goldies :D" CC BY-NC-ND 2.0 http://www.flickr.com/photos/marwamorgan/2602038800/ transactor(sewing-machine-needle) Theen ... "Stitching Machine" CC BY-NC-SA 2.0 http://www.flickr.com/photos/theenmoy/8407089950/ review(book-cat)raider of gin "cat reading" CC BY 2.0 http://www.flickr.com/photos/fairerdingo/2320356661/ backend variety(colorful-sewing-machine) Hellsgeriatric "Singer Sewing Machine" CC BY-NC-ND 2.0 http://www.flickr.com/photos/hellsgeriatric/ 2037304681/ efficient query(fish) SteveD. "Big Eye Scad, Kona Hawaii" CC BY 2.0 http://www.flickr.com/photos/42507736@N02/6022657611/ time travel(clock) Roby Ferrari "SAF#2" CC BY-SA 2.0 http://www.flickr.com/photos/roberto_ferrari/281640001/ efficient write(car) Design By Zouny "Geneva Car Show 2010" CC BY 2.0 http://www.flickr.com/photos/zouny/5054816002/ schema(book-shelf) Swamibu "Iqra: Read" CC BY-NC 2.0 http://www.flickr.com/photos/swamibu/2868288357/ the design philophy(inner-clock) GuySie "Photo365 #5 - Pretty on the inside" CC BY-SA 2.0 http://www.flickr.com/photos/guysie/5327472911/ the design philophy(blue-pattern) Alex Abian "Alien Technology" CC BY-NC-ND 2.0 http://www.flickr.com/photos/xtyler/3629765611/