Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
もしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたら
Search
newapplesho
April 26, 2012
Programming
0
72
もしイチゴ農家の園主がSmalltalkの「Seaside」(で作られたシステム)を使ってみたら
愛知県のイチゴ農家がSeasideを使って愛知県トップを目指すストーリー?
newapplesho
April 26, 2012
Tweet
Share
More Decks by newapplesho
See All by newapplesho
OpenRestyについて
newapplesho
0
73
Continuous Integration for Pharo Smalltalk Part 2 (Travis CI)
newapplesho
0
120
今時なウェブ開発をSmalltalkでやってみる?
newapplesho
0
92
Continuous Integration for Pharo Smalltalk
newapplesho
0
110
Elasticsearch for Pharo Smalltalk
newapplesho
0
130
SourceCode Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
newapplesho
0
85
RUNNING Smalltalk - 実践Smalltalk
newapplesho
0
68
AWS SDK for Smalltalk
newapplesho
0
88
How Smalltalker Works
newapplesho
0
61
Other Decks in Programming
See All in Programming
Some Quick Ideas To Improve Your Tests ( #jassttokyo )
teyamagu
PRO
2
2.3k
自作ソフト(VMagicMirror)がVRMA対応してる話+実装のTips
bakudreameater
0
110
Crafting a Own PHP - ウキウキ手作りミニマリストPHP
uzulla
4
1.1k
Migrating to Signals: A Practical Workshop
manfredsteyer
PRO
0
290
AppDeveloperCon 2024 EU: Building polyglot developer experiences in 2024
salaboy
0
380
オブジェクト指向は必要なのか / Is object-oriented needed?
kishida
27
19k
Open Source Swift Workshop - Foundation and first party libraries
ikesyo
0
270
両面どころかインフラもTSでできるよ ~ 全方位TypeScriptによるプロダクト開発 ~
myfinder
9
2.5k
Open Source Swiftc Workshop
kitasuke
1
290
Data Contracts In Practice With Debezium and Apache Flink (Kafka Summit London)
gunnarmorling
2
280
DDD, necessary but insufficient: physical design principles for microservices
cer
PRO
0
2.2k
WasmOS: Wasmを実行する自作Microkernel
riru
0
370
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
153
14k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
5
1.4k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
272
12k
Optimising Largest Contentful Paint
csswizardry
7
2.3k
Building a Modern Day E-commerce SEO Strategy
aleyda
15
6.3k
Building an army of robots
kneath
300
41k
Teambox: Starting and Learning
jrom
126
8.4k
Code Reviewing Like a Champion
maltzj
512
39k
Facilitating Awesome Meetings
lara
39
5.5k
Debugging Ruby Performance
tmm1
68
11k
Web development in the modern age
philhawksworth
201
10k
Testing 201, or: Great Expectations
jmmastey
27
6.3k
Transcript
٢ాɹᠳ ͠ΠνΰՈͷԂओ͕SmalltalkͷʮSeasideʯʢͰ ࡞ΒΕͨγεςϜʣΛͬͯΈͨΒ ѪݝͷΠνΰՈ͕SeasideΛͬͯѪݝτοϓΛࢦ͢ετʔϦʔʁ 1
http://swikis.ddo.jp/umejava/38 ຊॳʁSeasideͷհϖʔδ ͜ΕҎ߱Կճ͔հ͞Ε͍ͯΔ͚Ͳ ʮެ։ͨ͠ΑʯͬͯΛฉ͔ͳ͍ 2
Ͱ͖ͨɽऴྃʂ ࡞ͬͯΈΔ νϡʔτϦΞϧ ࣮ࡍʹҰൠެ։ͯ͠Έͨ ※ຊ৬ͱؔ͋Γ·ͤΜ 3
͍ͪ͝ङΓ༧ཧγεςϜ ᖒాԂɹhttp://www.sawadafarm.com 4
༧γεςϜͷಋೖܦҢ̍ ͍ͪ͝ङΓ༧ిͱFAX هɾཧ ͝ͱʹཧ ༧ใࢴʹه ᣀङΓ͍ͨ͠ 5
γεςϜಋೖલͷ Γ͍ͨใͲ͜ʹʁ ༷ࢠ͕͔Βͳ͍ •ࢠͲͰऔΕΔͷ͔ •ԚΕͳ͍͔ •௨࿏͍͔ ใ͕ෳࡶ 6
ίϯηϓτ sawadafarm.com ༧ཧγεςϜ ̍Ͱͬͯ10Ͱ༧ ᖒాԂαΠτ sawadafarm.com αΠτશମΛ༧γεςϜͱ͢Δ ̍Ͱͬͯ10Ͱཧ 7
ͳͥSeasideʁ • ϙʔλϒϧͳڥͰ͋ͬͨ͜ͱ • ༧ը໘ͷϓϩτλΠϓ̏࣌ؒͰ࡞ͬͯɼΠϝʔδΛ࣋ͬͯΒ͑ͨ • ϖʔδભҠͷهड़͕ඇৗʹָͳ͜ͱ • SmalltalkͰ࡞ͬͨγεςϜΛҰൠެ։ͯ͠Έ͔ͨͬͨ •
PHPɼRubyɼJavaԿͱͳ͘ॻ͚Δ͚Ͳɾɾɾ 8
ϑϩʔ੍ޚ Ұൠը໘ ༧ը໘ ΧϨϯ μʔදࣔ ॲཧ Ϣʔβૢ࡞ γεςϜભҠ ༧ঢ়گ ֬ೝը໘
ʢ࣌ؒʣ ؒΧϨ ϯμʔ ݄ΧϨϯ μʔ ༧ ΫϦοΫ ΫϦοΫ ΫϦοΫ ΫϦοΫ ΫϦοΫ ΫϦοΫ ※A ΫϦοΫ ฤूআ ΫϦοΫ ※C ͓٬༷༧ೖྗભҠ ΫϦοΫ Ұ൪มΘΓ͘͢໘ͳͱ͜Ζ 9
ϑϩʔ੍ޚ ྫ: ϩάΠϯ࣌ͷϑϩʔ Web։ൃͰΉॲཧ ೝূޭ ొ ೝূࣦഊ Login main page
User register 10
login user register main ೝূޭ ొ ೝূࣦഊ 11
ϑϩʔ੍ޚ WATask>>goͰϑϩʔશମΛهड़ MyLoginComponent MyUserRegisterComponent MyMainComponent MyTask call: answer: ೝূࣦഊ ೝূޭ
ॊೈͳϑϩʔ੍ޚ͕هड़Մೳ 12
MyTask>>go ! | user | ! loginAnswer:= self call:(MyLoginComponent new).
! loginAnswer = #registerUser ! ! ifTrue:[ user := self call: (MyUserRegisterComponent new) ] ifFalse:[ user := loginAnswer ]. ! user ifNotNil:[ ! ! self session login: user.]. self call:(MyMainComponent new). WATask subclass:#MyTask ϑϩʔ੍ޚ 13
ެ։·ͰͷಓͷΓ 6݄ 11 1݄ 9݄ ?݄ ٢ాͷґཔ? ը໘ઃܭ ༷ௐ SeasideͰϓϩλΠϓͰ
ΠϝʔδΛ࣋ͬͯΒ͏ ίϯηϓτͱ ҙࣝվֵ ணखґཔ αʔόߏங WebϖʔδҠߦ ༧γεςϜެ։ 2012 2011 14
ίϯηϓτ γϯϓϧ͔ͭײత 15
ཁ݅ ᶃ༧݄Λબ ᶄ༧࣌ؒΛબ ᶅ໊લͱΞυϨεೖྗ ϝʔϧͰຊਓ֬ೝ 16
γεςϜߏ Apache PostgreSQL Web AP (Smalltalk) ϝʔϧ৴ػೳ ʢόονॲཧʣ Comanche 17
ެ։ͷಓͷΓʢຊޠͷରԠʣ |adapter| WAComancheAdaptor startOn: 8080. adapter := WAComancheAdaptor default. adapter
codec: (GRCodec forEncoding: 'utf-8'). adapter isRunning Seaside 3.0ܥͷ߹ 18
ެ։ͷಓͷΓʢ։ൃπʔϧͷআʣ WAAdmin applicationDefaults removeParent: WADevelopmentConfiguration instance WAAdmin applicationDefaults addParent: WADevelopmentConfiguration
instance πʔϧͷআ πʔϧͷՃ 19
ެ։ͷಓͷΓʢApacheͱͷ࿈ܞʣ Apache Web AP (Smalltalk) Comanche Server port:3000 port:80 access.html
੩తͰՄೳͳϖʔδSeasideͰѻΘͳ͍ ApacheͷRewriteػೳΛ࣮ͬͯݱ <VirtualHost *:80> RewriteEngine On RewriteRule ^/(swd.*)$ http://localhost:3000/$1 [P,L] </VirtualHost> httpd.confʹrewriteϧʔϧΛهࡌ͢Δ http://www.sawadafarm.com/swdreservation http://www.sawadafarm.com/access.html 20
ެ։ͷಓͷΓʢը૾ϑΝΠϧͱCSSʣ WAFileLibraryͷsubclassΛ࡞ MyFileLibrary addFileAt:'./css/main.css'. MyFileLibrary addAllFilesIn: './css/'. ·ͨ Workspace্ͰҎԼͷίʔυΛ࣮ߦ ҰൠతʹimageϑΝΠϧʹऔΓࠐΉํ๏͕͋Δ
21
ެ։ͷಓͷΓʢը૾ϑΝΠϧͱCSSʣ >>updateRoot:anHtmlRoot super updateRoot: anHtmlRoot. anHtmlRoot stylesheet url: MyFileLibrary /
#mainCss. >>(class) initialize ! |app| ! app := (WAAdmin register: self asApplicationAt: '...') ! ! addLibrary: MyFileLibrary. WAComponent subclass WAComponent subclass ϥΠϒϥϦͷબ 22
ެ։ͷಓͷΓʢը૾ϑΝΠϧͱCSSʣ >>updateRoot:anHtmlRoot super updateRoot: anHtmlRoot. anHtmlRoot stylesheet resourceUrl: self baseUrl
,'main.css'. WAComponent subclass ࠓճͷํ๏ Smalltalk imageͰcssΛཧ͠ͳ͍ •imageϑΝΠϧͷܰྔԽ •ը૾ɼcssͷमਖ਼ΛಠཱͰ͖Δ •Web APͷιʔε͕ཧ͘͢͠ͳΔ 23
ެ։ͷಓͷΓʢόονͷݺͼग़͠ʣ ϝʔϧૹ৴ػೳSmalltalkͰ࡞Εͳ͔ͬͨ Ծ༧௨ ຊ༧௨ Ωϟϯηϧ͓ΑͼࣗಈΩϟϯηϧ௨ લ༧ूܭ௨ ͓٬༷࣭௨ ͕࣌ؒͳ͔ͬͨ ຊޠͷऔΓѻ͍ʹݒ೦͕͋ͬͨ ϝʔϧૹ৴ػೳ
ཧ༝ 24
ެ։ͷಓͷΓʢόονͷݺͼग़͠ʣ OSProcess command:ʼcancelMail.rbʼ. ※࣮ࡍʹઈରύεͰεΫϦϓτΛࢦఆ͢Δ͜ͱ OSProcessΛ༻͍Δ MetacelloͷϓϩδΣΫτͷConfigurationOfOSProcess※1 ಋೖ͢ΕΑ͍ System performOnServer: 'date'
Gemstoneͷ߹ OSProcessෆཁ Web AP (Smalltalk) ϝʔϧ৴ػೳ ʢόονॲཧʣ ※1 ୈ23ճSmalltalkษڧձ ࢿྉࢀߟ 25
ެ։ͷಓͷΓʢPostgreSQLͱͷଓʣ SqueakDatabaseAccessor DefaultDriver:(Smalltalk at: #NativePostgresDriver). ConfigurationOfGlorpDBX project lastVersion load:'Core'. Glorp※1Λ༻͍Δ
※1 ୈ12ճSmalltalkษڧձ ࢿྉࢀߟ GlorpΛී௨ʹ͍͍ͨͳΒCore͕͓͢͢Ί ΠϯετʔϧޙɼPostgreSQLͷυϥΠόʔΛσϑΥϧτͱ͢ΔͨΊҎԼΛ࣮ߦ 26
ެ։ͷಓͷΓʢιʔείʔυͷཧʣ ҰൠతʹMonticello͓Αͼ SqueakSourceͷαʔόΛཱͯͯཧ ࠓճ GitΛར༻ •HTMLϑΝΠϧͷཧߦ͏ඞཁ͕͋ͬͨͨΊ ɹɹ※Source.stΛཧ͢Δ͚ͩ •SSL௨৴ͰΞΫηεՄೳ •ݱࡏɼΫϥε୯ҐͷstϑΝΠϧΛग़ྗͯ͠ཧ͢ΔπʔϧΛݕ౼த 27
ެ։ͷಓͷΓʢόάͷཧʣ Redmine νέοτཧ͓ΑͼλεΫཧ͕ศར ͢Έ·ͤΜRubyͰ͢ɾɾɾ 28
ެ։ͷಓͷΓʢ͓·͚ʣ ࣗಈੜ͞ΕΔXHMTMLҎ֎ͷใͷग़ྗ •XML, RSS,SVG... •ը૾ϑΝΠϧͷμϯϩʔμ ֶੜͷࠒͰWard๏Ϋϥελʔੳͨ͠ͷͷΛ σϯυϩάϥϜΛදݱΛ࡞Δͱ͖ʹ׆༻ 29
ެ։ͷಓͷΓʢ͓·͚ʣ renderContentOn: html ! self requestContext respond: [:response | !
! response ! ! initializeOn: self svg ; contentType: 'text/xml'] WAComponent subclass 30
ެ։ͷಓͷΓʢ͓·͚ʣ ResponseΛ༻͍ͨsvgͷग़ྗ 31
σϞ 32
ݱࡏͷᖒాԂWebαΠτͷঢ়گ • ࡢʢ2010ळʙ2011य़ʣͱൺΔͱαΠτΞΫηε̎ഒ • ༧ௐʢฏۉαΠτࡏ࣌ؒ5ʣ • େ͖ͳγεςϜτϥϒϧͳ͠ • ༧γεςϜެ։ޙɼ̎ճ༷มߋʢੵۃతͳۀվળʣ •
ߋͳΔཁͳͲ্͕͍ͬͯΔ SmalltalkͷγεςϜͰेຬͯ͠Β͑Δ ۩ମతͳ݁ՌՆࠒ 33
SmalltalkΛͬͯྑ͔ͬͨɾѱ͔ͬͨ ྑ͔ͬͨ ѱ͔ͬͨ •ϓϩτλΠϓ͕͙͢ʹ࡞ΕͯΠ ϝʔδΛ࣋ͬͯΒ͑ͨ •SmalltalkʢPharoʣͰύ ϑΥʔϚϯεͱͯ͠ͳ͍͜ ͱ͕࣮ײͰ͖ͨ •ը໘σβΠϯͱۀͯ͠࡞Δͱ େมʢSmalltalkͰHTML·Ͱه
ड़͢Δܽʁʣ •ϩάग़ྗϥΠϒϥϦ •POSIXͷਖ਼نදݱϥΠϒϥϦ͠ ͔ͳ͍ 34
ࠓޙͷվળ • ը໘ઃܭ͔ΒͷSeasideͷөʢը໘ϞοΫΛͲͷΑ͏ʹө͢Δ͔ʣ • ڞ௨ιʔεͷཧʢGitͰͷཧΛ༰қʹ͢Δʣ • ϦΧόϦͱোݕରࡦͷڧԽʢϩάʣ ͦͷଞ SeasideͰόάཧγεςϜ͕͋Δͱ͍͍ͷͰ 35
࡞ͬͯऴΘΓͰͳ͘ެ։͠·͠ΐ͏ 36