RubyConf 2019 – Let’s build a simple HTTP server with Ruby by Esther Olatunde

RubyConf 2019 – Let’s build a simple HTTP server with Ruby by Esther Olatunde


{rtf1ansi{*cxrev100}{*cxtranscript}
{*cxsystem caseCATalyst4 version 18.56 by Stenograph L.L.C.}
{info{title 112019 RubyConf Esther Olatunde 1120 am}{creatimyr2019mo11dy20}
{revtimyr2019mo11dy20} {buptimyr0mo0dy0}
} {*cxsgstenotable cxsgstnormal STKPWHRAO*EUFRPBLGTSDZ#(!
cxsgstshifted 12K3W4R50*EU6R7B8G9SDZ#(! cxsgstenoleft7cxsgstenomiddle5cxsgstenoright10}
deffont0{fonttbl {f0fcharset1 Courier New;}
{f1fromanfcharset1 Arial;} {f2fcharset1 Stenograph;}
{f3fswissfcharset1 Arial;} }
{colortbl;red0green0blue255;red0green255blue0;red128green0blue0;red0green128blue255;red0green0blue0;} {stylesheet
{s0snext0li0fi-720 Normal 0} {s1sbasedon0snext2li0fi720cxsgta1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
Question 1;} {s2sbasedon1snext2li0fi720tx2160 Que
Contin 1;} {s3sbasedon0snext4li0fi720cxsgta1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
Answer 1;} {s4sbasedon3snext4li0fi720tx2160 Ans
Contin 1;} {s5sbasedon0snext6li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
Colloquy 1;} {s6sbasedon5snext6li0fi720tx2160 Col
Contin 1;} {s7sbasedon0snext8li0fi0tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
By Line 1;} {s8sbasedon7snext8li0fi0tx2160 By Contin
1;} {s9sbasedon0snext10li0fi-1tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
Paren 1;} {s10sbasedon9snext10li0fi-1tx2160 Par
Contin 1;} {s11sbasedon0snext12li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User1 Defined 1;} {s12sbasedon11snext12li0fi720tx2160
Use Contin 1;} {s13sbasedon0snext14li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User2 Defined 1;} {s14sbasedon13snext14li0fi720tx2160
Use Contin 1;} {s15sbasedon0snext16li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User3 Defined 1;} {s16sbasedon15snext16li0fi720tx2160
Use Contin 1;} {s17sbasedon0snext18li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User4 Defined 1;} {s18sbasedon17snext18li0fi720tx2160
Use Contin 1;} {s19sbasedon0snext20li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User5 Defined 1;} {s20sbasedon19snext20li0fi720tx2160
Use Contin 1;} {s21sbasedon0snext22li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User6 Defined 1;} {s22sbasedon21snext22li0fi720tx2160
Use Contin 1;} {s23sbasedon0snext24li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User7 Defined 1;} {s24sbasedon23snext24li0fi720tx2160
Use Contin 1;} {s25sbasedon0snext26li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User8 Defined 1;} {s26sbasedon25snext26li0fi720tx2160
Use Contin 1;} {s27sbasedon0snext28li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User9 Defined 1;} {s28sbasedon27snext28li0fi720tx2160
Use Contin 1;} {s29sbasedon0snext30li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User10 Defined 1;} {s30sbasedon29snext30li0fi720tx2160
Use Contin 1;} {s31sbasedon0snext32li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User11 Defined 1;} {s32sbasedon31snext32li0fi720tx2160
Use Contin 1;} {s33sbasedon0snext34li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User12 Defined 1;} {s34sbasedon33snext34li0fi720tx2160
Use Contin 1;} {s35sbasedon0snext36li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User13 Defined 1;} {s36sbasedon35snext36li0fi720tx2160
Use Contin 1;} {s37sbasedon0snext38li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User14 Defined 1;} {s38sbasedon37snext38li0fi720tx2160
Use Contin 1;} {s39sbasedon0snext40li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User15 Defined 1;} {s40sbasedon39snext40li0fi720tx2160
Use Contin 1;} {s41sbasedon0snext42li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User16 Defined 1;} {s42sbasedon41snext42li0fi720tx2160
Use Contin 1;} {s43sbasedon0snext44li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User17 Defined 1;} {s44sbasedon43snext44li0fi720tx2160
Use Contin 1;} {s45sbasedon0snext46li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User18 Defined 1;} {s46sbasedon45snext46li0fi720tx2160
Use Contin 1;} {s47sbasedon0snext48li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User19 Defined 1;} {s48sbasedon47snext48li0fi720tx2160
Use Contin 1;} {s49sbasedon0snext50li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User20 Defined 1;} {s50sbasedon49snext50li0fi720tx2160
Use Contin 1;} {s51sbasedon0snext52li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User21 Defined 1;} {s52sbasedon51snext52li0fi720tx2160
Use Contin 1;} {s53sbasedon0snext54li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User22 Defined 1;} {s54sbasedon53snext54li0fi720tx2160
Use Contin 1;} {s55sbasedon0snext56li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User23 Defined 1;} {s56sbasedon55snext56li0fi720tx2160
Use Contin 1;} {s57sbasedon0snext58li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User24 Defined 1;} {s58sbasedon57snext58li0fi720tx2160
Use Contin 1;} {s59sbasedon0snext60li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User25 Defined 1;} {s60sbasedon59snext60li0fi720tx2160
Use Contin 1;} {s61sbasedon0snext62li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User26 Defined 1;} {s62sbasedon61snext62li0fi720tx2160
Use Contin 1;} {s63sbasedon0snext64li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User27 Defined 1;} {s64sbasedon63snext64li0fi720tx2160
Use Contin 1;} {s65sbasedon0snext66li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User28 Defined 1;} {s66sbasedon65snext66li0fi720tx2160
Use Contin 1;} {s67sbasedon0snext68li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User29 Defined 1;} {s68sbasedon67snext68li0fi720tx2160
Use Contin 1;} {s69sbasedon0snext70li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User30 Defined 1;} {s70sbasedon69snext70li0fi720tx2160
Use Contin 1;} {s71sbasedon0snext72li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User31 Defined 1;} {s72sbasedon71snext72li0fi720tx2160
Use Contin 1;} {s73sbasedon0snext74li0fi720tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200tx7920tx8640
User32 Defined 1;} {s74sbasedon73snext74li0fi720tx2160
Use Contin 1;} }
paperh15840paperw12240margt1440margb1440margl1440margr1440 cxnoflines20cxlinex1080cxsglinefreq0cxsglineformat1
cxtimex11020cxsgtimefreq0cxsgtimeformat2{*cxsgtimesep :}
{pgny720pgnx0{*cxsgpntcxsgpnarchpgnpgndec }}{cxsgdelsteno1 {*cxt 11:15:57:0}{*cxs
*}{*cxt 17:34:0}{*cxs TKEF/TKEF}{*cxt 35:0}{*cxs REB
/REUBG/TKEF}{*cxt 36:0}{*cxs */*/*}{*cxt 39:0}{*cxs WEB/REUBG}{*cxt 40:0}
{*cxs TKEF}{*cxt 50:0}{*cxs PAOU}{*cxt 51:0}{*cxs PHA/*/*}{*cxt 18:12:0}
{*cxs TKEF/TKEF}{*cxt 14:0}{*cxs HREBGS}{*cxt 15:0}{*cxs *}{*cxt 16:0}
{*cxs HR*EBGS}{*cxt 17:0}{*cxs HR*EBGS}{*cxt 18:0}{*cxs TKEF}cxsgdelsteno0}{*cxt 21:42:0}
{*cxs R-R} parpards5qlcxsinglef3fs24cf0li0fi720ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0
>>cxfc {*cxs H*EU}cxsgnocap Hi{*cxt 43:0}{*cxs -RBGS/KWREFRPB}, everyone
{*cxs -FPLT}.cxds ~{*cxt 44:0}{*cxs EU/AOEPL}I’m {*cxt 45:0}{*cxs SO}so
{*cxs EBGS/SAOEUT}{*cxt 46:0}{*cxs -D}excited {*cxs TO}to {*cxs PW}be {*cxs HAOER}
here{*cxs -FPLT}.cxds ~{*cxs TH}cxsgnocap This {*cxt 47:0}{*cxs S}is {*cxs PHEU}
my {*cxs SR-R}very {*cxt 48:0}{*cxs TP*EURS}first {*cxs ROF}RubyConf{*cxt
49:0} {*cxs -RBGS}, {*cxs SKP}and {*cxs T}the
{*cxt 50:0}{*cxs HRA*S}last{*cxs TK-RB} ~__ {*cxs PHRAUZ/PHRAUZ}
parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0 [ Applause ] cxfc {*cxt 55:0}{*cxs P-F}
parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0 cxfc {*cxt 56:0}{*cxs KWRAE}cxsgnocap
Yeah{*cxs -FPLT/SO}.cxds ~So, {*cxs EU}{*cxt 57:0}
{*cxs AOEPL}I’m {*cxs EBGS/SAOEUT/-D}excited {*cxs TO}to {*cxt 58:0}{*cxs PW}
be {*cxs HAOER}here{*cxs -FPLT}.cxds ~{*cxt 59:0}{*cxs EU}I {*cxs KAPBT}can
‘t {*cxt 22:0:0}{*cxs PHAPBLG}imagine {*cxs PW-G}being {*cxs A}a {*cxt 1:0}
{*cxs SPAOEBG/ER}speaker{*cxs -FPLT}.cxds ~{*cxs SKP}cxsgnocap And {*cxs T}
the {*cxs HRA*S}last {*cxt 2:0}{*cxs KOUP/-L}couple {*cxs OF}of {*cxs TKAEU
/-S}days {*cxs HAZ}has {*cxt 3:0}{*cxs PW-PB}been {*cxs RAEL/HREU}really {*cxt
4:0} {*cxs AEU/PHAEUZ/-G}amazing{*cxs -RBGS},
{*cxt 5:0}{*cxs SKP}and {*cxs EUT} it{*cxs AOES}’s{cxsgdelsteno1 {*cxs KWR/*}cxsgdelsteno0}
{*cxt 6:0}{*cxs WHA}what {*cxs EU}I {*cxs PHAPBLG
/-D}imagined {*cxt 7:0}{*cxs ROF}RubyConf {*cxs TO}to {*cxs PW}be {*cxs SKP}
and {*cxs PH-R}more{*cxt 8:0}{*cxs -FPLT/SO}.cxds ~So, {*cxs WEL}{*cxt 9:0}
{*cxs KOPL}welcome{*cxs SKHRAPL}!cxds ~{*cxs WEL/KOPL}cxsgnocap Welcome {*cxt
10:0} {*cxs TO}to {*cxt 11:0}{*cxs PHEU}my
{*cxs TAUBG}talk{*cxs -RBGS}, {*cxt 12:0}
{*cxs KH}which {*cxs S}is {*cxs HRET}let{*cxs AOES}’s {*cxs PWEULD}build {*cxt 13:0}
{*cxs A}a {*cxs SEUPL/P-L}simple {*cxs H-FRBGS}H{*cxt 14:0}{*cxs T-FRBGS}T{*cxs
T-FRBGS} T{*cxs P-FRBGS}P {*cxs SEFRB}{*cxt 15:0}{*cxs
ER}server {*cxs W}with {*cxs RAO*UB} Ruby{*cxs -FPLT}.cxds ~{*cxs P-F}
parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0 cxfc {*cxt 17:0}{*cxs T}cxsgnocap The
{*cxt 18:0}{*cxs RAO*UB}Ruby {*cxs KPHAOUPB /TEU}community {*cxt 19:0}{*cxs HAZ}has
{*cxs A}a {*cxt 20:0}{*cxs TPAOU}few {*cxs POP}{*cxt 21:0}{*cxs KWRAOU/HRAR}popular
{*cxt 22:0}{*cxs WEB}web {*cxt 23:0}{*cxs SEFRB/ER/-S}servers {*cxs
THA}that {*cxs R}are {*cxs PWAEUS}{*cxt 24:0}
{*cxs -D}based {*cxs AUF}off {*cxs OF}of{*cxt 25:0}{*cxs U}cxfc {*cxs RABG}
cxsgnocap Rack{*cxs -RBGS}, {*cxt 26:0}{*cxs WE}we {*cxs SR}have {*cxs WEB}
web {*cxt 27:0}{*cxs REUBG}Rick{*cxs -RBGS}, {*cxs PAOU/PHA}puma{*cxt 28:0}
{*cxs -RBGS},{*cxs U}cxfc {*cxs THEUPB}cxsgnocap Thin{*cxs -RBGS}, {*cxt 29:0}
{*cxs KWRAOUPB/KORPB}unicorn{*cxt 30:0}{*cxs -RBGS},{*cxs U}cxfc {*cxs PASZ}{*cxt
31:0} {*cxs SKWRER}cxsgnocap Passenger{*cxs
-RBGS}, {*cxs SKP}and {*cxs A}a {*cxs TPAOU}
few {*cxt 32:0}{*cxs O*ER/-S}others{*cxs -FPLT}.cxds ~{*cxs THAOEZ}cxsgnocap These
{*cxt 33:0}{*cxs SEFRB/ER/-S}servers {*cxs R}are {*cxs PWAT/-L}battle {*cxt 34:0}
{*cxs T*ES/-D}tested{*cxs -RBGS}, {*cxs SO}so {*cxt 35:0}{*cxs KWROU}you {*cxs
TKOEPBT} don’t {*cxs RAEL/HREU}really {*cxs TPHAOED}need
{*cxt 36:0}{*cxs TO}to {*cxs ROL} roll {*cxs KWROUR}your {*cxs OEPB}own{*cxs
-FPLT}.cxds ~{*cxt 37:0}{*cxs THR} cxsgnocap There{*cxs AOES}’s {*cxs TPHO}no
{*cxs TPHAOED}need {*cxs TP-R}for {*cxt 38:0}{*cxs THA}that{*cxs -FPLT}.cxds
~{*cxs HOUFR}cxsgnocap However {*cxs -RBGS}, {*cxs EU}I {*cxt 39:0}{*cxs
THEU}think {*cxs EUT}it{*cxs AOES} ‘s {*cxs A}a {*cxs TKPWRAET}great {*cxt
40:0}{*cxs HRERPB/-G}learning {*cxs SPAOERPBS} experience {*cxs TP}if {*cxt 41:0}{*cxs
KWROU}you {*cxs WAPBT}want {*cxs TO} to {*cxt 42:0}{*cxs HRERPB}learn {*cxt
43:0}{*cxs HOU}how {*cxt 44:0}{*cxs H-FRBGS}
H{*cxs T-FRBGS}T{*cxs T-FRBGS}T{*cxs P-FRBGS}P {*cxs SKP}and {*cxs A}a {*cxt
45:0} {*cxs SEUPL/P-L}simple {*cxt 46:0}{*cxs
WEB}web {*cxs SEFRB/ER}server {*cxs WORBG}{*cxt 47:0}
{*cxs -S}works {*cxs SO}so {*cxs KWROU}you {*cxs TPHOE}know {*cxs WHA}what{*cxs
AOES} ‘s {*cxt 48:0}{*cxs TKPWOEUPBG}going {*cxs
OPB}on {*cxs URPBD}under {*cxs T} the {*cxs HAOD}hood{*cxt 49:0}{*cxs
-FPLT}.cxds ~{*cxs P-F} parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0
cxfc {*cxt 50:0}{*cxs AT}cxsgnocap At {*cxs T}the {*cxs EPBD}end {*cxs OF}
of {*cxs TH}this {*cxt 51:0}{*cxs TAUBG}talk{*cxs -RBGS}, {*cxs WE/AOEL}we’
ll {*cxs ULT}{*cxt 52:0}{*cxs PHALT/HREU}{*cxs}ultimately {*cxs PW}be {*cxs PWEULD}{*cxt 53:0}
{*cxs AG}building a {*cxs SR-R}very {*cxs SEUPL}{*cxt 54:0}{*cxs PHREUS/TEUBG}
simplistic {*cxt 55:0}{*cxs SEFRB/ER}server {*cxt 56:0}{*cxs WE}we {*cxs HR}
will {*cxs SR}have {*cxt 57:0}{*cxs PWEULT}built {*cxs TP-R}for {*cxs O*URS
/-S}ourselves {*cxs W}with {*cxt 58:0}{*cxs PHEUPB/PHAL}minimal {*cxs H-FRBGS}
H{*cxt 59:0}{*cxs T-FRBGS}T{*cxs T-FRBGS}T{*cxs P-FRBGS}P{*cxs -RBGS}, {*cxt 23:0:0}
{*cxs OBS/HREU}obviously {*cxt 1:0}{*cxs TPHOPB}non_cxds {*cxs SP*EBG}spec
{*cxt 2:0}{*cxs KPHRAOEUPBT}compliant {*cxt 3:0}{*cxs H-FRBGS}H{*cxs T-FRBGS}
T{*cxs T-FRBGS}T{*cxs P-FRBGS}P {*cxs SEFRB}{*cxt 4:0}{*cxs ER}server {*cxs
SKP} and {*cxs KHRAOEUPBT}client{*cxs -FPLT}.cxds
~{*cxt 6:0}{*cxs PW-FR}cxsgnocap Before {*cxs EU}I {*cxs PRO/SAOED}proceed{*cxs
-RBGS}, {*cxt 7:0}{*cxs A}a {*cxs HREUT /-L}little {*cxs ABT}about {*cxs PHE}me{*cxs
-FPLT}.cxds ~{*cxt 11:0}{*cxs EU} I {*cxs WRAOEUT}write {*cxs KOED}code
{*cxs THA}that {*cxt 12:0}{*cxs STAOEUPL /-S}sometimes {*cxs WORBG/-S}works {*cxs
OPB}on {*cxt 13:0}{*cxs KPAOUT/ER/-S} computers{*cxs -FPLT}.cxds ~{*cxt 14:0}{*cxs
SKP}cxsgnocap And {*cxs EU/AOEPL} I’m {*cxt 15:0}{*cxs PWAEUS/-D}based {*cxs
TPH}in {*cxs HR-FRBGS}L{*cxt 16:0} {*cxs AFRPB}a{*cxs TKPW-FRPB}g{*cxs
OFRPB}o{*cxt 17:0}{*cxs S-FRPB}s{*cxs -RBGS}
, {*cxs TPHAOEU/SKWRAOE}{*cxt 18:0}{*cxs KWRA}Nigeria{*cxs -RBGS}, {*cxs SKP}
and {*cxt 19:0}{*cxs EU/AOEPL}I’m {*cxs A}a {*cxs TKWOP/ER}developer {*cxt 20:0}
{*cxs TP-R}for {*cxs AFRBGS}A{*cxt 21:0}{*cxs EFRPB}e{*cxs KP-FRPB}x{*cxs OFRPB}
o{*cxs OFRPB}o{*cxt 22:0}{*cxs -RBGS}, {*cxs A}a {*cxs HRAOEG}league {*cxt
23:0} {*cxs TEBG}tech {*cxs PHARBGT/PHRAEUS}marketplace
{*cxt 24:0}{*cxs PWAEUS/TPH-D} based in {*cxs T}the {*cxs *UBG}UK{*cxs
-FPLT}{*cxt 26:0}{*cxs SO}.cxds ~ So, {*cxs HRET}let{*cxs AOES}’s {*cxs
TKEUG}dig {*cxs TPH}in{*cxt 27:0}{*cxs -FPLT}
.cxds ~{*cxt 31:0}{*cxs HOU}cxsgnocap How {*cxs PH}many {*cxt 32:0}{*cxs OF}
of {*cxs US}us {*cxs TPHOE}{*cxt 33:0}{*cxs -S}knows {*cxs WHAPS}what happens
{*cxs WHEPB}when {*cxt 34:0}{*cxs KWROU}you {*cxs SREUT}visit {*cxs A}a{cxsgdelsteno1
{*cxt 35:0} {*cxs R-FRBGS/UFRBGS/-FRBGS/*/*}{*cxt
36:0}{*cxs UFRBGS/*/*}cxsgdelsteno0} {*cxs UFRBGS}U
{*cxt 37:0}{*cxs R-FRBGS}R{*cxs HR-FRBGS}L {*cxs TPH}in {*cxs A}a {*cxs PWROUZ}{*cxt
38:0} {*cxs ER}browser{*cxs STPH}?cxds ~{*cxs
SO}cxsgnocap So {*cxs TH}this {*cxt 40:0} {*cxs PHAOEUGT}might {*cxt 41:0}{*cxs
SAOEPL}seem {*cxs A}a {*cxs PWEUT}bit {*cxs RE/TKUPB}{*cxt 42:0}{*cxs TAPBT}redundant{cxsgdelsteno1
{*cxs -FPLT/SO/PHO*ES}{*cxt 43:0} {*cxs OF/US/*}{*cxt 44:0}{*cxs */*/*/*}cxsgdelsteno0}
{*cxt 45:0}{*cxs TO}to {*cxs PHO*ES} most {*cxs OF}of {*cxs US}us{*cxt 46:0}{*cxs
-RBGS}, {*cxs PWU}but {*cxs EU} I {*cxs THEU}think {*cxs WE}we {*cxt
47:0}{*cxs SHOULD}should {*cxs START}start {*cxs TPR}from {*cxs HAOER}here {*cxt
48:0}{*cxs SKP}and {*cxs KEBGT}connect {*cxs T}the {*cxt 49:0}{*cxs TKOT/-S}dots{*cxs
-FPLT}.cxds ~{*cxs T}cxsgnocap The {*cxs SPWER}intercxds {*cxt 50:0}{*cxs
TPHET}net {*cxs S}is {*cxs A}a {*cxt 51:0}
{*cxs PHASZ/*EUF}massive {*cxt 52:0}{*cxs TKREUBT}{*cxt 53:0}{*cxs -D}distributed
{*cxs KHRAOEUPBT}client{*cxs SHR-RB}cxds /cxds {*cxt 54:0}{*cxs SEFRB/ER}
server {*cxs TPH-FGS}information {*cxt 55:0}{*cxs S-PL}system{*cxs -FPLT}.cxds
~{*cxs PH}cxsgnocap Many {*cxs AP/HREU}{*cxt 56:0}{*cxs KAEUGS/-S}applications
{*cxs R}are {*cxs RUPB/-G}running {*cxt 57:0}{*cxs O*EFR}over {*cxs T}the
{*cxs WEB}web {*cxt 58:0}{*cxs SUFP}such {*cxs AZ}as {*cxt 59:0}{*cxs PWROUZ
/ER/-S}browsers{*cxs -RBGS}, {*cxt 24:0:0}{*cxs E/PHAEUL}e_mail{*cxt 1:0}{*cxs -RBGS}
, {*cxs TPAOEUL}file {*cxs TR-FR}transfer{*cxt 2:0}{*cxs -RBGS}, {*cxt 3:0}
{*cxs AUD/KWROE}audio{*cxs -RBGS}, {*cxt 4:0}{*cxs SREUD/KWROE}video {*cxs STRAOEPL
/-G}streaming{*cxs -RBGS}, {*cxt 5:0}{*cxs EFRPB}e{*cxs H-F}cxds _cxds {*cxt 6:0}
{*cxs KPHERS}commerce{*cxs -RBGS}, {*cxs ETS}etc.{*cxt 7:0}{*cxs -FPLT}cxfc
cxds ~{*cxt 8:0}{*cxs TPHORD}cxsgnocap In order {*cxs TP-R}for {*cxs PROP
/ER}proper {*cxt 9:0}{*cxs KPHAOUPB/KAEUGS}communication {*cxs TO}to {*cxs TAEUBG}
take {*cxs PHRAEUS}place {*cxt 10:0}{*cxs TWAOEPB}between {*cxs T}the {*cxt 11:0}
{*cxs KHRAOEUPBT}client{*cxs TK-RB}~__ {*cxs THA}that {*cxs S}is {*cxt 12:0}
{*cxs KWROUR}your {*cxs PWROUZ/ER}{*cxt 13:0}{*cxs -S}browsers{*cxs TK-RB}
~__ {*cxs SKP}and {*cxs THAOEZ}these {*cxt 14:0}{*cxs SEFRB/ER/-S}servers
{*cxs WR}where {*cxs T}the {*cxt 15:0}{*cxs AP/HREU/KAEUGS/-S}applications
{*cxs R}are {*cxs OPB}on{*cxt 16:0}{*cxs -RBGS}, {*cxs THAOEZ}these {*cxs AP
/HREU/KAEUGS}{*cxt 17:0}{*cxs -S}applications {*cxs SR}have {*cxs TO}to {*cxs AEU
/TKPWRAOE}agree {*cxt 18:0}{*cxs OPB}on {*cxs T}the {*cxs SPEFBG}specific {*cxt
19:0} {*cxs AP/HREU/KAEUGS}application{*cxs
H-F}cxds _cxds {*cxt 20:0}{*cxs HR*EFL} level {*cxs PROET}{cxsgdelsteno1 {*cxt
21:0}{*cxs KOP/*}cxsgdelsteno0}{*cxs KOL}protocol {*cxt 22:0}{*cxs SUFP}
such {*cxs AZ}as {*cxt 23:0}{*cxs H-FRBGS}H{*cxs T-FRBGS}T{*cxs T-FRBGS}T{*cxs P-FRBGS}
P {*cxs TP-R}for {*cxt 24:0}{*cxs T}the {*cxs WEB}web{*cxs -RBGS}, {*cxs TP-FRBGS}
F{*cxt 25:0}{*cxs T-FRBGS}T{*cxs P-FRBGS}P {*cxs TP-R}for {*cxt 26:0}{*cxs E
/PHAEUL}e_mail{*cxs -RBGS}, {*cxs TP-R}for {*cxt 27:0}{*cxs TPAOEUL}file {*cxs
TR-FR} transfer{*cxt 28:0}{*cxs -RBGS}, {*cxs
S-FRBGS}S{*cxs PH-FRBGS}M{*cxt 29:0} {*cxs T-FRBGS}T{*cxs P-FRBGS}P {*cxs
TP-R}for {*cxs E}{*cxt 30:0}{*cxs PHAEUL} e_mail {*cxs SKP}and {*cxs P-FRBGS}P{*cxs
OFRBGS}O{*cxs P-FRBGS}P{*cxt 31:0} {*cxs -FPLT}.cxds ~{*cxt 36:0}{*cxs
T}cxsgnocap The {*cxs AP/HREU/KAEUGS} application {*cxt 37:0}{*cxs PROET}{*cxt
38:0}{*cxs KOL}protocol {*cxs THA} that {*cxs PHAEUBG/-S}makes {*cxs T}the
{*cxs WEB}web {*cxt 39:0}{*cxs WORBG} work {*cxs S}is {*cxs HAO*EUP}hypercxds
{*cxt 40:0}{*cxs TEBGT}text {*cxt 41:0} {*cxs TR-FR}transfer {*cxs PROET}{*cxt
42:0}{*cxs KOL}protocol {*cxt 43:0} {*cxs OR}or {*cxs H-FRBGS}H{*cxs T-FRBGS}T{*cxs
T-FRBGS}T{*cxt 44:0}{*cxs P-FRBGS} P{*cxs -FPLT}.cxds ~{*cxs EUT}cxsgnocap
It {*cxs S}is {*cxs A}a {*cxs PROET}{*cxt 45:0}
{*cxs KOL}protocol {*cxs THA}that {*cxs WEB}web {*cxs PWROUZ}{*cxt 46:0}{*cxs
ER /SKP-S}browsers and {*cxs WEB}web {*cxs
SEFRB/ER}{*cxt 47:0}{*cxs -S}servers {*cxs KWRAOUZ}use {*cxs TO}to {*cxt
48:0}{*cxs KPHAOUPB/KAEUT}communicate {*cxs W}
with {*cxs AOEFP}each {*cxs O*ER}other {*cxt 49:0}{*cxs O*EFR}over {*cxs T}
the {*cxs SPWER}intercxds {*cxs TPHET}net{*cxt 50:0}{*cxs -FPLT}.cxds ~{*cxs T}
cxsgnocap The{cxsgdelsteno1 {*cxs T-FRBGS}{*cxt 51:0}{*cxs *}cxsgdelsteno0} {*cxs H-FRBGS}H{*cxt
52:0} {*cxs T-FRBGS}T{*cxs T-FRBGS}T{*cxs
P-FRBGS}P {*cxt 53:0}{*cxs PROET/KOL}protocol {*cxt 54:0}{*cxs S}is {*cxs T}the {*cxs
PHOET}mote {*cxt 55:0}{*cxs POP /KWRAOU/HRAR}popular {*cxs AP}{*cxt 56:0}{*cxs
HREU/KAEUGS}application {*cxs PROET /KOL}protocol {*cxt 57:0}{*cxs THA}that
{*cxs S}is {*cxs KWRAOUZ/-D}used {*cxs O*EFR}
over {*cxs T}the {*cxt 58:0}{*cxs SPWER}intercxds {*cxs TPHET}net{*cxs -FPLT}
.cxds ~{*cxt 59:0}{*cxs SKP}cxsgnocap And {*cxt 25:0:0}{*cxs HAOER}here{*cxs
AOES} ‘s {*cxs A}a {*cxt 1:0}{*cxs PWAEUS/EUBG}basic
{*cxs KWRO*EFR}overcxds {*cxs SRAOU} view {*cxt 2:0}{*cxs OF}of {*cxs HOU}how
{*cxs EUT}it {*cxs WORBG/-S}works{*cxs -FPLT}{*cxt 3:0}
{*cxs SO}.cxds ~So,{*cxs -RBGS} {*cxt 4:0}{*cxs HRAOEUBG}like {*cxs EU}I
{*cxs SED}said {*cxs ERL/KWRER}earlier{*cxt 5:0}{*cxs -RBGS}, {*cxs H-FRBGS}
H{*cxs T-FRBGS}T{*cxs T-FRBGS}T{*cxs P-FRBGS}P {*cxt 6:0}{*cxs S}is {*cxs
A} a {*cxs KW}request{*cxt 7:0}{*cxs H-F}cxds
_cxds {*cxt 8:0}{*cxs SPOPBS} response {*cxs PROET/KOL}protocol {*cxt
9:0}{*cxs THA}that {*cxs TKRAOEUB/-S} describes {*cxt 10:0}{*cxs HOU}how {*cxs
WEB}web {*cxt 11:0}{*cxs SEFRB/ER /-S}servers {*cxs EBGS}excxds {*cxt 12:0}{*cxs
KHAEUPBG}change {*cxs TKAEU/TA} data {*cxt 17:0}{*cxs W}with {*cxs KHRAOEUPBT/SKP-S}clients
and {*cxt 18:0} {*cxs PWROUZ/ER/-S}browsers{*cxs -FPLT/SO}.cxds
~So, {*cxs WHEPB}when {*cxt 19:0} {*cxs KWROU}you {*cxs TAOEUP}type {*cxs
TPH}in {*cxs A}a {*cxs PWROUZ}{*cxt 20:0}
{*cxs ER}browser{*cxs -RBGS}, {*cxs TH}this {*cxs S}is {*cxs TEBG}{*cxt
21:0} {*cxs KHREU}technically {*cxs WHAPS}what
happens{*cxs -FPLT}.cxds ~{*cxs T} cxsgnocap The {*cxs WEB}web {*cxt 22:0}{*cxs
PWROUZ/ER}browser {*cxs KEBGT /-S}connects {*cxt 23:0}{*cxs TO}to {*cxs
T}the {*cxs WEB}web {*cxs SEFRB/ER} server{*cxt 25:0}{*cxs -RBGS}, {*cxs
SEPBD/-S}sends {*cxt 26:0}{*cxs APB}an {*cxs H-FRBGS}H{*cxt 27:0}{*cxs T-FRBGS}T{*cxs
T-FRBGS}T{*cxs P-FRBGS}P {*cxs KW} request {*cxs WR}where {*cxt 28:0}{*cxs
T}the {*cxs T-FRBGS}T{*cxs KR-FRBGS} C{*cxs P-FRBGS}P {*cxt 29:0}{*cxs PROET/KOL}protocol
{*cxt 30:0}{*cxs STABG} stack {*cxs TP-R}for {*cxs T}the {*cxt
31:0}{*cxs TKE}decxds {*cxs SAOEUR /-D}sired {*cxs WEB}web {*cxs PAEUPBLG}page
{*cxt 32:0}{*cxs SKP}and {*cxs T} the {*cxs WEB}web {*cxs SEFRB/ER}server
{*cxt 33:0}{*cxs SEF/-S}receives {*cxs T}
the {*cxs KW}request{*cxt 34:0}{*cxs -FPLT}.cxds ~{*cxs EUT}cxsgnocap It
{*cxs KHEBG/-S}checks {*cxs TP}if {*cxt 35:0}{*cxs T}the {*cxs WEB}web {*cxs
PAEUPBLG} page {*cxs S}is {*cxt 36:0}{*cxs AEU/SRAEUL/-BL}available{*cxs
-FPLT}.cxds ~{*cxs TP}cxsgnocap If {*cxs T}the {*cxt
37:0}{*cxs PAEUPBLG}page {*cxs KP*EUS}{*cxt 38:0}
{*cxs -S}exists{*cxs -RBGS}, {*cxs T}the {*cxs WEB}web {*cxs SEFRB}{*cxt 39:0}
{*cxs ER}server {*cxs SEPBD/-S}sends {*cxs EUT}it {*cxt 43:0}{*cxs PWABG}back
{*cxs TO}to {*cxs T}the {*cxs KHRAOEUPBT}client{*cxt 44:0}{*cxs -FPLT}.cxds
~{*cxs SKP}cxsgnocap And {*cxs TP}if {*cxs T}the {*cxs PAEUPBLG}page {*cxt
45:0} {*cxs TKUZ}does {*cxs TPHOT}not {*cxs
KP*EUS}exist{*cxt 46:0}{*cxs -RBGS}, {*cxs T}the {*cxs WEB}web {*cxs SEFRB}{*cxt
47:0}{*cxs ER}server {*cxs SEPBD /-S}sends {*cxs APB}an {*cxt 48:0}{*cxs
RO*R}error {*cxs PHES/SAPBLG}message{*cxs SKP-FPLT}
. And {*cxs TH}this {*cxt 49:0}{*cxs SAOEUBG/-L}cycle{*cxs -RBGS}, {*cxs TH}
this {*cxt 50:0}{*cxs KW}request{*cxs SHR-RB}cxds /cxds {*cxt 51:0}{*cxs SPOPBS}
response {*cxs SAOEUBG/-L}cycle {*cxs S}is {*cxs E}{*cxt 52:0}{*cxs SEPBT
/-RBL/HREU}essentially {*cxs HOU}how {*cxt 53:0}{*cxs H-FRBGS}H{*cxs T-FRBGS}
T{*cxs T-FRBGS}T{*cxs P-FRBGS}P {*cxs SKP}and {*cxt 54:0}{*cxs T}the {*cxs
WEB} web {*cxs WORBG/-S}works{*cxs -FPLT}.cxds
~{*cxt 57:0}{*cxs P-F} parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0
cxfc {*cxt 58:0}{*cxs H-FRBGS}H{*cxs T-FRBGS}T{*cxs T-FRBGS}T{*cxs P-FRBGS}
P{*cxt 59:0}{*cxs -RBGS}, {*cxs AZ}as {*cxs SPES}{*cxt 26:0:0}{*cxs TPEU
/KAEUGS}specification {*cxt 1:0}{*cxs TP-R}for {*cxs TH}this {*cxs PROET}{cxsgdelsteno1
{*cxt 2:0} {*cxs KAL/*}cxsgdelsteno0}{*cxs KOL}protocol{*cxt
8:0}{*cxs -RBGS},{cxsgdelsteno1 {*cxs TKR/*}cxsgdelsteno0} {*cxt 9:0}
{*cxs THR}there{*cxs AOES}’s {*cxs A}a {*cxs TKO*BG}doc {*cxs TP-R}for {*cxt
10:0} {*cxs EUT}it{cxsgdelsteno1 {*cxs -FPLT/*}cxsgdelsteno0}
{*cxs KH}which {*cxt 11:0}{*cxs S}is {*cxs PHAEUPB
/TAEUPB/-D}maintained {*cxs PWEU}by {*cxt 12:0}{*cxs T}the {*cxs WORLD}{*cxt 13:0}
{*cxs WAOEUD}worldwide {*cxt 14:0}{*cxs WEB}web {*cxs KOPB/SORT}{*cxt 15:0}
{*cxs KWRUPL}consortium{*cxs -FPLT}.cxds ~{*cxs SKP}cxsgnocap And {*cxs T}
the {*cxt 16:0}{*cxs ORPBLG}{*cxt 17:0}{*cxs TPHAL}original {*cxt 18:0}{*cxs S}
is {*cxt 19:0}{*cxs 0#}0{*cxs SKWR}cxds .cxds {*cxs -9#}9 {*cxt 20:0}{*cxs
RE /HRAOES/-D}released {*cxt 21:0}{*cxs TPH}in
{*cxs 1-9#}19{*cxs -9#}9{*cxt 22:0} {*cxs 1#}1 {*cxs PWEU}by {*cxt 23:0}{*cxs
TEUPL}Tim{*cxt 24:0}{*cxs U}cxfc {*cxs PWERPB/ER/-S}Berners{*cxt 25:0}{*cxs
H-F}cxds _cxds {*cxs HRAOE}lee {*cxs -FPLT}.cxds ~{*cxs SKP}cxsgnocap
And {*cxt 26:0}{*cxs THR}there {*cxs SR}
have {*cxs PW-PB}been {*cxt 27:0}{*cxs TKEUFRPBT}different {*cxs SRERGS/-S}versions
{*cxs -FPLT}.cxds ~{*cxt 28:0}{*cxs H-FRBGS}H{*cxs T-FRBGS}T{*cxs T-FRBGS}
T{*cxs P-FRBGS}P{*cxt 30:0}{*cxs SHR-RB}cxds /cxds {*cxs 1#}1{*cxs SKWR}cxds
.cxds {*cxt 31:0}{*cxs 0#}0 {*cxs SKP}and {*cxs 1#}1{*cxt 32:0}{*cxs SKWR}
cxds .cxds {*cxs 1#}1{*cxs -FPLT}.cxds ~{*cxs SKP}cxsgnocap And {*cxt 33:0}
{*cxs THR}there {*cxs S}is {*cxs ALS}also {*cxt 34:0}{*cxs H-FRBGS}H{*cxs T-FRBGS}
T{*cxs T-FRBGS}T{*cxs P-FRBGS}P{*cxt 35:0}{*cxs SHR-RB}cxds /cxds {*cxs 2#}
2{*cxs -RBGS}, {*cxs KH}which {*cxt 36:0}{*cxs WUZ}was {*cxs STAPB/TKARD/AOEUZ}{*cxt
37:0} {*cxs -D}standardized {*cxt 38:0}{*cxs
TPH}in {*cxs 20#}20{*cxs 15#}15{*cxs -FPLT}
.cxds ~{*cxs EU}I {*cxt 39:0}{*cxs THEU}think {*cxs THR}there{*cxs AOES}’
s {*cxs A}a {*cxs PRO}procxds {*cxt 40:0}{*cxs POEZ/A*L}posal {*cxs TPH}in
{*cxs T}the {*cxt 41:0}{*cxs WORBG/-S}works {*cxs TP-R}for {*cxt 42:0}{*cxs H-FRBGS}
H{*cxs T-FRBGS}T{*cxs T-FRBGS}T{*cxs P-FRBGS}P{*cxt 43:0}{*cxs SHR-RB}cxds
/cxds {*cxs 3#}3{*cxs -RBGS}, {*cxs SKP}and {*cxs THA}that{*cxs AOES}’s {*cxt
44:0} {*cxs KURPBT/HREU}currently {*cxs TPH}in
{*cxs TKRAFT}draft{*cxs -FPLT}.cxds ~{*cxs TP}cxsgnocap If {*cxt 45:0}{*cxs
KWROU}you{cxsgdelsteno1 {*cxs AOERS/KAOURS}{*cxt 46:0}
{*cxs ABT/*/*/*}cxsgdelsteno0} {*cxt 47:0}{*cxs R}are {*cxs KAOURS}curious
{*cxs ABT}about {*cxs THA}that{*cxs -RBGS}, {*cxt 48:0}{*cxs
TH}this {*cxs S}is {*cxs T}the {cxsgdelsteno1 {*cxs HR*EUBG/S}{*cxt
49:0}{*cxs */*}cxsgdelsteno0} {*cxs HR*EUPBG}link {*cxt 50:0}{*cxs SKP}
and {*cxs KWROU}you {*cxs K}can {*cxs SAOE}see {*cxs T}the {*cxt 51:0}{*cxs
TKEUFRPBT} different {*cxs SP*EBG}spec {*cxs THA}that
{*cxs SPHRAEUPB/-S}explains {*cxs TPH} in {*cxt 52:0}{*cxs TKE}decxds {*cxs
TAEUL/-S}tails{*cxs -FPLT}.cxds ~{*cxs TP}
cxsgnocap If {*cxs KWROU}you {*cxt 53:0}{*cxs WAPBT}want {*cxs TO}to {*cxs SKWROEUPB}
join {*cxt 54:0}{*cxs SPWAO}into {*cxs SKUGS}discussion {*cxs ABT}about {*cxs
H-FRBGS} H{*cxt 55:0}{*cxs T-FRBGS}T{*cxs T-FRBGS}T{*cxs
P-FRBGS}P{*cxt 56:0}{*cxs SHR-RB} cxds /cxds {*cxs 3#}3{*cxs -RBGS}, {*cxs
KWROU}you {*cxs K}can {*cxt 57:0} {*cxs TKO}do {*cxs THA}that{*cxs -FPLT}.cxds
~{*cxt 59:0}{*cxs P-F} parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0
cxfc {*cxs SO}cxsgnocap So{*cxs -RBGS}, {*cxt 27:0:0}{*cxs T}the {*cxs UFRBGS}
U{*cxs R-FRBGS}R{*cxt 1:0}{*cxs HR-FRBGS}L {*cxs AZ}as {*cxs A}a {*cxt 2:0}
{*cxs SEUPB/TABGS}syntax{*cxs -RBGS}, {*cxt 3:0}{*cxs SKP}and {*cxs T}the
{*cxs SEUPB}{*cxt 4:0} {*cxs TABGS}syntax{*cxt 5:0}{*cxs TK-RB}~__
{*cxs UFRBGS}U{*cxs R-FRBGS} R{*cxt 6:0}{*cxs HR-FRBGS}L{cxsgdelsteno1
{*cxs ES/*}cxsgdelsteno0} {*cxs E}{*cxt 7:0}{*cxs SEPBT/-RBL
/HREU}essentially {*cxs S}is {*cxs A}a {*cxt 8:0}{*cxs KWRAOU/TPHAOEBG/HREU}uniquely
{*cxs TK-RB}~__ {*cxt 9:0}{*cxs HRAOEUBG}like {*cxs EUT}it{*cxs AOES}’s
{*cxs KWRAOUZ/-D}used {*cxt 10:0}{*cxs TO}to {*cxs KWRAOU/TPHAOEBG/HREU}uniquely
{*cxt 11:0}{*cxs KWR-F}identify {*cxs A}a {*cxs RE/SOURS}resource {*cxt 12:0}
{*cxs O*EFR}over {*cxs T}the {*cxs WEB}web{*cxs -RBGS}, {*cxt 13:0}{*cxs PWAUZ}
because {*cxs THA}that{*cxs AOES}’s{*cxt 14:0}{*cxs -RBGS}, {*cxs KWR-PB}you
know{*cxs -RBGS}, {*cxs T}the {*cxs AEU}{*cxt 15:0}{*cxs TKRESZ}address{*cxs
-RBGS} , {*cxs E}{*cxt 16:0}{*cxs SEPBT/-RBL/HREU}essentially{*cxs
-RBGS}, {*cxt 17:0} {*cxs WR}where {*cxs TPHEU}any {*cxs
RE}{*cxt 18:0}{*cxs SOURS}resource {*cxs S}
is {*cxs PWAEUS/-D}based {*cxs OPB}on {*cxs T}the {*cxt 19:0}{*cxs WEB}web{*cxs
-FPLT} .cxds ~{*cxs SKP}cxsgnocap And {*cxs
TH}this {*cxt 20:0}{*cxs S}is {*cxs WHA}
what {*cxs T}the {*cxs SEUPB}{*cxt 21:0}{*cxs TABGS}syntax {*cxs HRAOBG/-S}
looks {*cxs HRAOEUBG}like{*cxs -FPLT}.cxds ~{*cxs T}cxsgnocap The {*cxt 22:0}
{*cxs SEUPB/TABGS}syntax {*cxs AZ}as {*cxs T}the {*cxs PROET}{*cxt 23:0}{*cxs KOL}
protocol {*cxs KH}which {*cxt 24:0}{*cxs S}is {*cxt 25:0}{*cxs AP/HREU/KAEUGS}
application{*cxs H-F}cxds _cxds {*cxt 26:0}{*cxs HR*EFL}level {*cxs PROET
/KOL}protocol{*cxt 27:0}{*cxs SKP-FPLT}. And {*cxs THEPB}then {*cxs EUT}it {*cxs
HAZ} has {*cxs T}the {*cxt 28:0}{*cxs HO*ES}host
{*cxs TPHAEUPL}name {*cxt 29:0} {*cxs SKP}and {*cxs EUT}it {*cxt 30:0}{*cxs
HAZ}has {*cxs T}the {*cxs PORT} port {*cxt 31:0}{*cxs TP-R}for {*cxs
T}the {*cxt 32:0}{*cxs WEB}web {*cxs S}
is {*cxs KWRAOUZ}{*cxt 33:0}{*cxs HREU}usually {*cxs PORT}port {*cxt 34:0}
{*cxs -8#}8{*cxs 0#}0{*cxs -FPLT}.cxds ~{*cxs KWROU}cxsgnocap You {*cxt 35:0}
{*cxs TKOEPBT}don’t {*cxs TPHES/HREU}necessarily {*cxt 36:0}{*cxs TPHAOED}need
{*cxs TO}to {*cxs PRO/SRAOEUD}provide {*cxs EUT}it{*cxs -FPLT}.cxds ~{*cxs
SKP} cxsgnocap And {*cxt 37:0}{*cxs EUT}it
{*cxs HAZ}has {*cxs T}the {*cxs PA*T} path {*cxs OR}or {*cxt 38:0}{*cxs T}the
{*cxs TPAOEUL}file {*cxs TPHAEUPL}name {*cxs -FPLT}.cxds ~{*cxt 40:0}{*cxs
P-F} parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0
cxfc {*cxs SO}cxsgnocap So {*cxs TPREUPBS}for instance{*cxs -RBGS}, {*cxt 41:0}
{*cxs WHEPB}when {*cxs KWROU}you {*cxt 42:0}{*cxs SEF}receive {*cxs TH}this
{*cxt 43:0}{*cxs UFRBGS}U{*cxs R-FRBGS}R{*cxs HR-FRBGS}L{*cxs -RBGS}, {*cxt 44:0}
{*cxs KPAPL/P-L}example{*cxt 45:0}{*cxs TKOEUBGT}cxds .com{*cxt 46:0}{*cxs SHR-RB}
cxds /cxds {*cxs HR-FRBGS}L{*cxt 47:0}{*cxs AFRPB}a{*cxs TKPW-FRPB}g{*cxs OFRPB}
o{*cxs S-FRPB}s{*cxt 48:0}{*cxs -RBGS}, {*cxs T}the {*cxs PWROUZ/ER}browser
{*cxs SHU}{*cxt 49:0}{*cxs -S}issues {*cxt 52:0}{*cxs A}a {*cxs KW}request
{*cxt 53:0}{*cxs SKP}and {*cxs OEP/-S}opens {*cxs A}a {*cxt 54:0}{*cxs K*EBGS}
connection {*cxt 55:0}{*cxs TO}to {*cxs T}the {*cxs KPAPL}{*cxt 56:0}{*cxs P-L}
example {*cxt 57:0}{*cxs OPB}on {*cxs PORT}port {*cxs -8#}8{*cxs 0#}0{*cxt
58:0} {*cxs -FPLT}.cxds ~{*cxs T}cxsgnocap
The {*cxs SEFRB/ER}server {*cxs ABG}{*cxt 59:0}
{*cxs SEPT/-S}accepts {*cxs T}the {*cxs K*EBGS}connection{*cxt 28:0:0}{*cxs -RBGS}
, {*cxs SKP}and {*cxs WHEPB}when {*cxs T}the {*cxt 1:0}{*cxs K*EBGS}connection
{*cxs HAZ}has {*cxt 2:0}{*cxs PW-PB}been {*cxs PHAED}made{*cxs -RBGS}, {*cxs
T} the {*cxt 3:0}{*cxs H-FRBGS}H{*cxs T-FRBGS}T{*cxs
T-FRBGS}T{*cxs P-FRBGS}P {*cxt 4:0}{*cxs KHRAOEUPBT}client {*cxs
THA}that {*cxs S}is {*cxt 5:0}{*cxs KWROUR}
your {*cxs PWROUZ/ER}browser {*cxt 6:0}{*cxs TURPB/-S}turns {*cxs THA}that {*cxt 7:0}
{*cxs UFRBGS}U{*cxs R-FRBGS}R{*cxs HR-FRBGS}L {*cxs SPWAO}into {*cxs A}a {*cxt 8:0}
{*cxs KW}request{cxsgdelsteno1 {*cxs PHE/*}cxsgdelsteno0} {*cxt 9:0}{*cxs
PHES/SAPBLG}message {*cxs SKP} and {*cxt 10:0}{*cxs SEPBD/-S}sends {*cxs
APB}an {*cxs H-FRBGS}H{*cxs T-FRBGS} T{*cxt 11:0}{*cxs T-FRBGS}T{*cxs P-FRBGS}P
{*cxs KW}request{*cxs -FPLT}.cxds ~{*cxt 13:0}{*cxs P-F}
parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0 cxfc {*cxs SO}cxsgnocap So {*cxs T}the
{*cxt 14:0}{*cxs SEFRB/ER}server {cxsgdelsteno1 {*cxt 15:0}{*cxs TK-RB}{*cxt
16:0}{*cxs *}cxsgdelsteno0} {*cxt 17:0}{*cxs WHEPB}when
{*cxs EUT}it {*cxs TKPWET/THAS}gets that {*cxt 18:0}{*cxs KW}request{*cxs -RBGS}
, {*cxs EUT}it {*cxs PARS}{*cxt 19:0}{*cxs -S}parses {*cxs T}the {*cxs KW}
request {*cxt 20:0}{*cxs SPWAO}into {*cxs A}a {*cxt 21:0}{*cxs PHUL/TEU}multi
cxds {*cxs HRAOEUPB}line {*cxt 22:0}{*cxs STREUPBG}string {*cxs THA}that {*cxs HRAOBG}{*cxt
23:0} {*cxs -S}looks {*cxs HRAOEUBG}like {*cxs
TH}this{*cxs -FPLT}.cxds ~{*cxt 25:0} {*cxs SKP}cxsgnocap And {*cxs T}the {*cxt
26:0}{*cxs TP*EURS}first {*cxs HRAOEUPB} line {*cxs OF}of {*cxt 27:0}{*cxs THA}that
{*cxs STREUPBG}string {*cxt 28:0} {*cxs S}is {*cxs T}the {*cxt 29:0}{*cxs
KW}request {*cxs HRAOEUPB}line{*cxt 30:0} {*cxs -FPLT}.cxds ~{*cxs TH}cxsgnocap
This {*cxs S}is{*cxt 31:0}{*cxs TK-RB} ~__ {*cxt 32:0}{*cxs TH}this {*cxs
KOPB/TAEUPB/-S}contains {*cxt 33:0}{*cxs T}
the {*cxs H-FRBGS}H{*cxs T-FRBGS}T{*cxt 34:0}{*cxs T-FRBGS}T{*cxs P-FRBGS}P
{*cxs PHE/THOD}method{*cxs -RBGS}, {*cxt 35:0}{*cxs TPH}in {*cxs TH}this {*cxs
KAEUS} case {*cxs EUT}it{*cxt 36:0}{*cxs AOES}’s
{*cxs TKPWET}get{*cxs -FPLT}.cxds ~{*cxs EUT}cxsgnocap It {*cxt 37:0}{*cxs
KOPB/TAEUPB/-S}contains {*cxs T}the {*cxt 38:0}{*cxs KW}request {*cxt 39:0}{*cxs
UFRBGS}U{*cxs R-FRBGS}R{*cxs EUFRBGS} I{*cxt 40:0}{*cxs -RBGS}, {*cxs KH}which
{*cxs S}is {*cxs ALS}also {*cxs T} the {*cxt 41:0}{*cxs PA*T}path{*cxs
-RBGS}, {*cxs SKP}and {*cxs THEPB}then {*cxt 42:0}{*cxs EUT}it {*cxs KOPB/TAEUPB/-S}contains
{*cxs T}the{cxsgdelsteno1 {*cxt 43:0} {*cxs H-FRBGS/T-FRBGS}{*cxt 44:0}{*cxs
*/*}cxsgdelsteno0} {*cxs H-FRBGS}H{*cxt 45:0}{*cxs T-FRBGS}
T{*cxs T-FRBGS}T{*cxs P-FRBGS}P {*cxs SRERGS}version{*cxs -FPLT}.cxds ~{*cxt
46:0} {*cxs SUBS/KWEPBT}cxsgnocap Subsequent
{*cxt 47:0}{*cxs HRAOEUPB/-S}lines {*cxs AF}
after {*cxs T}the {*cxt 48:0}{*cxs SEBGD}second {*cxs HRAOEUPB}line {*cxs R}
are {*cxt 49:0}{*cxs KW}request {*cxt 50:0}{*cxs HAED/ER/-S}Headers{*cxs -RBGS}
, {*cxs KH}which {*cxt 51:0}{*cxs R}are {*cxt 52:0}{*cxs KAOE}key{*cxs H-F}
cxds _cxds {*cxs SRAL}value {*cxt 53:0}{*cxs PAEUR/-S}pairs {*cxs THA}that
{*cxt 54:0}{*cxs R}are {*cxs TKE}decxds {*cxs HREUPLT/-D}limited {*cxs PWEU}
by {*cxt 55:0}{*cxs A}a {*cxs KO/HROPB}colon{*cxs -FPLT}.cxds ~{*cxt 56:0}
{*cxs SKP}cxsgnocap And {*cxs STAOEUPL/-S}sometimes {*cxs APB}an {*cxt 57:0}
{*cxs H-FRBGS}H{*cxs T-FRBGS}T{*cxs T-FRBGS}T{*cxs P-FRBGS}P {*cxt 58:0}{*cxs
KW} request {*cxs KOPB/TAEUPB}{*cxt 59:0}{*cxs
-S}contains {*cxs KW}request {*cxs PWOD /KWREU}body {*cxt 29:0:0}{*cxs AZ}as {*cxs
WEL}well{*cxs -FPLT}.cxds ~{*cxt 1:0} {*cxs P-F}
parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0 cxfc {*cxt 2:0}{*cxs SO}cxsgnocap So
{*cxt 3:0}{*cxs WHEPB}when {*cxs KWROU} you {*cxs SREUT}visit {*cxs THA}that {*cxt
4:0}{*cxs PHRAR}particular {*cxs UFRBGS} U{*cxs R-FRBGS}R{*cxs HR-FRBGS}L {*cxt
5:0}{*cxs OPB}on {*cxt 6:0}{*cxs A} a {*cxs WEB}web {*cxs PWROUZ}{*cxt 7:0}{*cxs
ER}browser{*cxs -RBGS}, {*cxs SO} so {*cxs THA}that {*cxt 8:0}{*cxs KW}request
{*cxs KWROU}you {*cxt 9:0}{*cxs SAU} saw {*cxs ERL/KWRER}earlier {*cxs WUZ}was{*cxt
10:0}{*cxs -RBGS}, {*cxs KWR-PB} you know{*cxs -RBGS},{cxsgdelsteno1 {*cxt
11:0}{*cxs PHE/*}cxsgdelsteno0} {*cxt 12:0}{*cxs T}the {*cxs KPAPL}{*cxt 13:0}
{*cxs P-L}example{*cxt 14:0}{*cxs -FPLT}.cxds ~{*cxs KWROU}cxsgnocap You
{*cxs TKPWET}get {*cxs A}a {*cxs HROT}lot{cxsgdelsteno1 {*cxt 15:0}{*cxs -F/*}cxsgdelsteno0}
{*cxs PH-R} more {*cxs TPH-FGS}information{*cxs -FPLT}.cxds
~{*cxt 16:0}{*cxs PWU}cxsgnocap But {*cxs EUT}it {*cxs S}is {*cxs SHRAR}similar{cxsgdelsteno1
{*cxt 17:0}{*cxs TO/T/TP*EURS}{*cxt 18:0}
{*cxs */*}{*cxt 19:0}{*cxs *}cxsgdelsteno0}{*cxs -FPLT}.cxds ~{*cxs T}cxsgnocap The {*cxt
20:0} {*cxs TP*EURS}first {*cxs HRAOEUPB}line
{*cxs AULS}always {*cxt 21:0}{*cxs HAZ} has {*cxs THA}that {*cxt 22:0}{*cxs
PWU}but {*cxs PWROUZ/ER/-S}browsers {*cxt 23:0}
{*cxs RURPB}return {*cxs PH-R}more {*cxs TPH-FGS}information {*cxs TO}to {*cxt
24:0} {*cxs KWROU}you {*cxs PH-R}more {*cxs
THAPB}than {*cxs KOED}code{cxsgdelsteno1 {*cxt 25:0}
{*cxs TKUS/*}cxsgdelsteno0} {*cxs TKUZ}does{*cxs -FPLT}.cxds ~{*cxt 27:0}{*cxs P-F}
parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0 cxfc {*cxs SO}cxsgnocap So {*cxs KWRAOUZ}{*cxt
28:0}{*cxs THAG}using that {*cxs SAEUPL}same {*cxs K*EBGS}connection
{*cxt 29:0}{*cxs THA}that {*cxs HAZ} has {*cxs PW-PB}been {*cxs PWHREURB}{*cxt
30:0}{*cxs -D}established {*cxs W} with {*cxs KWROUR}your {*cxs SEFRB/ER}server{*cxt
31:0}{*cxs -RBGS}, {*cxs T} the {*cxs SEFRB}{*cxt 32:0}{*cxs ER}server
{*cxs SPOPBD/W-S}responds with {*cxs T} the {*cxt 33:0}{*cxs KOPB/TEPBT}content
{*cxs OF}of {*cxs T}the {*cxt 34:0} {*cxs TPAOEUL}file {*cxs OR}or {*cxs
APB}an {*cxs RO*R}error{*cxs -FPLT}.cxds ~{*cxt 35:0}{*cxs T}cxsgnocap The {*cxt
37:0}{*cxs H-FRBGS}H{*cxs T-FRBGS} T{*cxs T-FRBGS}T{*cxs P-FRBGS}P {*cxt
38:0}{*cxs SEFRB/ER}server {*cxs SEPBD /-S}sends{*cxt 39:0}{*cxs -RBGS}, {*cxs
KWR-PB}you know{*cxs -RBGS}, {*cxs PWAEUS /-D}based {*cxt 40:0}{*cxs OPB}on {*cxs
KWROUR}your {*cxs KW}request{*cxs -RBGS} , {*cxs EUT}it {*cxt 41:0}{*cxs TRAOEU/TOS}tries
to {*cxs EUPB/TERPT}interpret {*cxs TP}if {*cxt 42:0}{*cxs KWROUR}your
{*cxs SEFRB}{*cxt 43:0}{*cxs ER} server {*cxs UPBS/-S}understands {*cxs
T}the {*cxs KW}request{*cxt 44:0}{*cxs -RBGS}
, {*cxs EUT}it {*cxs TRAOEU/TOS}tries to {*cxt 45:0}{*cxs EUPB/TERPT}interpret
{*cxs EUT}it {*cxt 46:0}{*cxs SKP}and {*cxs RURPB}return{*cxs -RBGS}, {*cxt
47:0} {*cxs KWR-PB}you know{*cxs -RBGS}, {*cxs
T}the {*cxs KOPB/TEPBT}content {*cxt 48:0} {*cxs OF}of {*cxs T}the {*cxs PHES/SAPBLG}message
{*cxs PWAEUS/-D}based {*cxt 49:0} {*cxs OPB}on{*cxs -RBGS}, {*cxs KWR-PB}you
know{*cxs -RBGS}, {*cxt 50:0}{*cxs EUT /-S}its{cxsgdelsteno1 {*cxt 51:0}{*cxs
UPBD/*}cxsgdelsteno0} {*cxs UPBS/-G}understanding {*cxt 52:0}{*cxs OF}
of {*cxs KWROUR}your {*cxs KW}request{*cxs -FPLT}{*cxt 53:0}{*cxs SO}.cxds
~So, {*cxs TH}this {*cxs S}is {*cxs T}the {*cxt 54:0}{*cxs SPOPBS}response
{*cxt 55:0}{*cxs THA}that {*cxs KWROU}you {*cxs TKPWET}get {*cxs WHEPB}when
{*cxs KWROU}you {*cxt 56:0}{*cxs KAUL}call {*cxs KPAPL}{*cxt 57:0}{*cxs P-L}
example{*cxs TKOEUBGT}cxds .com{*cxt 59:0}{*cxs SHR-RB}cxds /cxds {*cxt 30:0:0}
{*cxs HR-FRPB}l{*cxs AFRPB}a{*cxs TKPW-FRPB}g{*cxs OFRPB}o{*cxs S-FRPB}s{*cxs -FPLT}{*cxt
1:0} {*cxs SO}.cxds ~So, {*cxs PWAUZ}because
{*cxs EU}I {*cxt 2:0}{*cxs PHAED} made {*cxs HR-FRBGS}L{*cxs AFRPB}a{*cxt
3:0}{*cxs TKPW-FRPB}g{*cxs OFRPB}o{*cxs S-FRPB}
s {*cxs T}the {*cxt 4:0}{*cxs H-FRBGS}H{*cxt 5:0}{*cxs T-FRBGS}T{*cxs PH-FRBGS}
M{*cxs HR-FRBGS}L {*cxt 6:0}{*cxs UP}up{*cxs -RBGS}, {*cxs EUT}it {*cxs TKUPBT}
doesn’t {*cxs KP*EUS}exist{*cxt 7:0}{*cxs -RBGS}, {*cxs SO}so {*cxs T}the {*cxs
SEFRB}{*cxt 8:0} {*cxs ER}server {*cxs S}is {*cxs TEL/-G}telling
{*cxs PHE}me{*cxs -RBGS}, {*cxt 9:0} {*cxs KWR-PB}you know{*cxs -RBGS},{cxsgdelsteno1
{*cxt 10:0}{*cxs TPH/*}{*cxt 12:0}{*cxs TPAOEUL}{*cxt 13:0}
{*cxs *}cxsgdelsteno0} {*cxt 14:0}{*cxs 40#}40{*cxs 4#}4 {*cxs TPHOT}not {*cxt
15:0}{*cxs TPOUPBD} found{*cxs -FPLT}.cxds ~{*cxs TH}cxsgnocap
This {*cxs RURPB/-S}returns {*cxt 16:0} {*cxs T}the {*cxs SRERGS}version{*cxs
-RBGS}, {*cxs T}the {*cxt 17:0}{*cxs SKOEP}
scope{*cxs -RBGS}, {*cxs SKP}and {*cxs T}the {*cxt 18:0}{*cxs STA/TUS}status
{*cxs PHES/SAPBLG}message{*cxt 19:0}{*cxs -FPLT}.cxds ~{*cxs SKP}cxsgnocap And
{*cxs THA}that{*cxs AOES}’s {*cxs ALS}also {*cxs T}the {*cxt 20:0}{*cxs SPOPBS}
response {*cxs HAED}{*cxt 21:0}{*cxs ER}Header{*cxs -FPLT}.cxds ~{*cxs T}
cxsgnocap The {*cxs SPOPBS}response {*cxt 22:0}{*cxs PWOD/KWREU}body {*cxs ALS}
also {*cxt 23:0}{*cxs KOPB/TAEUPB/-S}contains {*cxt 24:0}{*cxs A}a {*cxs PWEUT}
bit {*cxs PH-R}more {*cxs TPH-FGS}information {*cxt 25:0}{*cxs ABT}about {*cxs T}
the {*cxt 26:0}{*cxs SPOPBS}response {*cxt 27:0}{*cxs EUT}it {*cxt 28:0}{*cxs S}
is {*cxs SEPBD/-G}sending {*cxs TO}to {*cxs KWROU}you{*cxs -FPLT}.cxds ~{*cxt
29:0} {*cxs SKP}cxsgnocap And {*cxs KWRURPBD}{*cxt
30:0}{*cxs TPHAO*ET}underneath {*cxs THA}that {*cxs S}is {*cxs T}the
{*cxs PWOD/KWREU}body {*cxt 31:0}{*cxs OF}
of {*cxs T}the {*cxs SPOPBS}response{*cxs -FPLT}{*cxt 32:0}{*cxs SO}.cxds
~So, {*cxs TP}if {*cxs THR}there {*cxs S}is {*cxt 33:0}{*cxs APB}an {*cxt 34:0}
{*cxs H-FRBGS}H{*cxs T-FRBGS}T{*cxs PH-FRBGS}M{*cxs HR-FRBGS}L {*cxt 35:0}{*cxs
PAEUPBLG} page {*cxs THR}there{*cxs -RBGS}, {*cxs
EUT}it{*cxs AOES}’s {*cxt 36:0}{*cxs REPBD
/ER/-D}rendered {*cxs THR}there {*cxt 37:0}{*cxs OR}or {*cxs TKEUS}discxds
{*cxs PHRAEU}{*cxt 38:0} {*cxs -D}played {*cxs TO}to {*cxs KWROU}you{*cxs
-FPLT}.cxds ~{*cxt 40:0} {*cxs P-F}
parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0 cxfc {*cxs SO}cxsgnocap So {*cxs TH}this
{*cxt 41:0}{*cxs TPHROE}flow {*cxs S}is {*cxs E}{*cxt 42:0}{*cxs
SEPBT/-RBL/HREU}essentially {*cxs T}the {*cxs PWAEUS}{*cxt 43:0}{*cxs EUBG}basic
{*cxs EUFRP/HREPLT/TAEUGS}implementation {*cxt 44:0}{*cxs OF}of {*cxs H-FRBGS}H{*cxs
T-FRBGS}T{*cxs T-FRBGS}T{*cxt 45:0} {*cxs P-FRBGS}P{cxsgdelsteno1 {*cxs -FPLT}{*cxt
46:0}{*cxs *}cxsgdelsteno0} {*cxt 47:0}{*cxs SKP}and
{*cxs HOU}how {*cxs H-FRBGS}H{*cxt 48:0}{*cxs T-FRBGS}T{*cxs T-FRBGS}T{*cxs P-FRBGS}
P {*cxs SEFRB}{*cxt 49:0}{*cxs ER/-S}servers {*cxs WORBG}work{*cxs -FPLT}.
cxds ~{*cxs KWROUR}cxsgnocap Your {*cxt 50:0}{*cxs SEFRB/ER}server {*cxs SHOULD}
should {*cxs PW}be {*cxt 51:0}{*cxs AEUBL}able {*cxs TO}to {*cxs ABG}{*cxt
52:0} {*cxs SEPT}accept {*cxs A}a {*cxs KW}request
{*cxs SKP}and {*cxs EUT}it {*cxt 53:0} {*cxs SHOULD}should {*cxs PW}be {*cxs
AEUBL}able {*cxs TO}to {*cxs SEPBD}send {*cxt 54:0}{*cxs PWABG}back {*cxs A}a
{*cxs SPOPBS}response {*cxs TO}to {*cxs KWROU}
you{*cxt 55:0}{*cxs -FPLT}.cxds ~{*cxt 56:0}{*cxs TH}cxsgnocap This {*cxs S}
is {*cxs T}the {*cxt 57:0}{*cxs PHO*ES}most {*cxs KPHOPB}common {*cxt 58:0}
{*cxs SPWER}intercxds {*cxs A*BGS}action {*cxs THA}that {*cxs S}is{cxsgdelsteno1
{*cxt 59:0} {*cxs OPB/*}cxsgdelsteno0} {*cxt 31:0:0}{*cxs
HAP/-G}happening {*cxs OPB}on {*cxt 1:0}{*cxs WEB}
web {*cxs SEFRB/ER/-S}servers {*cxs TORD}today{*cxt 2:0}{*cxs -FPLT}.cxds ~
{*cxs WHA}cxsgnocap What {*cxs WE/AOER}we’re {*cxs TKPWOEUPBG}going {*cxt 3:0}
{*cxs TO}to {*cxs TKO}do {*cxs TORD}today {*cxs S}is {*cxs HRET}let{*cxt 4:0}
{*cxs AOES}’s {*cxs EUFRP/HREPLT}implement {*cxs TH}this{*cxs -FPLT}.cxds ~
{*cxt 5:0}{*cxs HRET}cxsgnocap Let{*cxs AOES}’s {*cxs EUFRP/HREPLT}implement
{*cxs A}a {*cxt 6:0}{*cxs SEFRB/ER}server {*cxs THA}that {*cxs K}can {*cxs TKO}
do {*cxs TH}this {*cxt 7:0}{*cxs W}with {*cxs SKWR*US}just {*cxt 8:0}{*cxs RAO*UB}
Ruby {*cxs SKP}and {*cxt 9:0}{*cxs TPHO}no {*cxt 10:0}{*cxs KP-FRPB}x{*cxt 11:0}
{*cxs PH-FRPB}m{*cxs HR-FRPB}l{*cxs -FPLT}.cxds ~{*cxt 12:0}{*cxs WHA}cxsgnocap
What {*cxs TKO}do {*cxs WE}we {*cxs TPHAOED}need
{*cxs TP-R}for {*cxt 13:0}{*cxs THA} that{*cxs STPH}?cxds ~{*cxt 14:0}{*cxs
WE}cxsgnocap We {*cxs TPHAOED}need {*cxs A}a {*cxs TAOL}tool {*cxt 15:0}{*cxs
THA}that {*cxs K}can {*cxs HR-PB} listen {*cxt 16:0}{*cxs TP-R}for {*cxs
PW*EU}bicxds {*cxs TKR*EBGS/A*L}directional {*cxt 17:0}{*cxs KPHAOUPB/KAEUGS}communication
{*cxs TWAOEPB}between {*cxt 18:0} {*cxs KHRAOEUPBT}client {*cxs SKP}and
{*cxs SEFRB}{*cxt 19:0}{*cxs ER/-S}servers {*cxs -FPLT}.cxds ~{*cxt 20:0}{*cxs
SKP}cxsgnocap And {*cxs TH}this {*cxs HRAOED
/-S}leads {*cxs US}us {*cxt 21:0}{*cxs TO}to{*cxs U}cxfc {*cxs SOBGT/-S}cxsgnocap
Sockets {*cxt 22:0}{*cxs -FPLT}.cxds ~{*cxs
SKP}cxsgnocap And {*cxt 23:0}{*cxs A} a {*cxt 24:0}{*cxs SOBGT}socket {*cxs
TAEUBG/-S}takes {*cxs A}a {*cxt 25:0} {*cxs PWEUT}bit{*cxt 26:0}{*cxs -RBGS},
{*cxt 27:0}{*cxs SOBGT}socket {*cxs PRAPL}{*cxt 28:0}
{*cxs -G}programming{*cxs -FPLT}.cxds ~{*cxs PWU}cxsgnocap But {*cxt 29:0}
{*cxs E/SEPBT/-RBL/HREU}essentially{*cxt 30:0}{*cxs -RBGS}, {*cxs A}a {*cxs SOBGT}
socket {*cxs S}is {*cxt 31:0}{*cxs APB}an {*cxs EPBD}end{*cxs H}cxds {*cxt 32:0}
{*cxs POEUPBT}point {*cxs TP-R}for {*cxs A}a {*cxs TWO}two{*cxs H-F}cxds _
cxds {*cxt 33:0}{*cxs WAEU}way {*cxs KPHAOUPB/KAEUGS}communication {*cxt 34:0}
{*cxs TWAOEPB}between {*cxs TWO}two {*cxs PRAPL/THAS}programs that {*cxt 35:0}
{*cxs R}are {*cxs RUPB/-G}running {*cxs OPB}on {*cxs A}a {*cxs TPHET}net{*cxt
36:0} {*cxs WO*RBG}cxds work{*cxs -FPLT/SO}.cxds
~So, {*cxs EUT}it{*cxs AOES}’s {*cxt 37:0}{*cxs SEURBG/HRAR}circular{*cxs
-RBGS}, {*cxt 38:0}{*cxs EUT}it {*cxs AOES}’s {*cxs PWOUPBD}bound {*cxs
TO}to {*cxt 39:0}{*cxs A}a {*cxs PORT} port {*cxs SO}so {*cxt 40:0}{*cxs T}the
{*cxs T-FRBGS}T{*cxs KR-FRBGS}C{*cxt 41:0}
{*cxs P-FRBGS}P {*cxs HRAEU/ER}layer {*cxt 42:0}{*cxs K}can {*cxs TPAOEUPBD}
find {*cxs T}the {*cxs AP}{*cxt 43:0}{*cxs HREU/KAEUGS}application {*cxs THA}
that {*cxs T}the {*cxs TKAEU/TA}data {*cxt 44:0}{*cxs S}is {*cxs SEPBT}sent
{*cxs TO}to{*cxs -FPLT}.cxds ~{*cxs SKP}cxsgnocap And {*cxt 45:0}{*cxs KWROUR}
your {*cxs SEFRB/ER}server {*cxt 46:0}{*cxs TPORPL/T-S}forms the {*cxs HR-PB
/ER}listener {*cxs SOBGT}socket {*cxt 47:0}{*cxs WHAOEUL}while {*cxs T}the {*cxs
KHRAOEUPBT} client {*cxt 48:0}{*cxs RAOEFP/-S}reaches
{*cxs OUT}out {*cxs TO}to {*cxs T} the {*cxt 49:0}{*cxs SEFRB/ER}server{*cxs
-FPLT}.cxds ~{*cxs PWU}cxsgnocap But {*cxt 50:0}{*cxs KWROU}you {*cxs TKOEPBT}don’t
{*cxs TPHAOED}need {*cxs TO} to {*cxs WOR}{*cxt 51:0}{*cxs REU}worry
{*cxs ABT}about {*cxt 52:0}{*cxs EUFRP} {cxsgdelsteno1 {*cxs HREUPLT}{*cxt 53:0}{*cxs
*}cxsgdelsteno0}{*cxs HREPLT/-G}implementing {*cxs TH}this
{*cxs -RBGS}, {*cxt 54:0}{*cxs PWAUZ}because {*cxs T}the {*cxt 55:0}{*cxs RAO*UB}
Ruby {*cxs ST*D}stdlib {*cxt 56:0}{*cxs HAZ}has {*cxt 57:0}{*cxs HR-RD}already
{*cxs EUFRP/HREPLT/-D}implemented{*cxt 58:0}{*cxs U}cxfc {*cxs SOBGT}cxsgnocap
Socket {*cxs TP-R}for {*cxs US}us{*cxt 59:0}{*cxs
-FPLT}.cxds ~{*cxt 32:1:0}{*cxs SKP} cxsgnocap And {*cxs THA}that {*cxs PWREUPBG/-S}brings
{*cxt 2:0}{*cxs US}us {*cxs TO}to {*cxs T}the{*cxs U}cxfc
{*cxt 3:0}{*cxs SOBGT}cxsgnocap Socket {*cxs U}cxfc {*cxs KHRASZ}cxsgnocap
Class{*cxt 4:0}{*cxs -RBGS}, {*cxs T} the {*cxs RAO*UB}Ruby{*cxs U}cxfc {cxsgdelsteno1
{*cxt 5:0}{*cxs KOBGT/*}cxsgdelsteno0} {*cxt 6:0}{*cxs SOBGT}
cxsgnocap Socket{*cxs U}cxfc {*cxt 7:0}{*cxs KHRASZ}cxsgnocap Class{*cxs -FPLT}
.cxds ~{*cxs EUT}cxsgnocap It {*cxs PRO/SRAOEUD}{*cxt 8:0}{*cxs -S}provides
{*cxs ABG/SESZ}access {*cxs TO}to {*cxt 9:0}{*cxs T}the {*cxs KWRURPBD}under
cxds {*cxt 10:0}{*cxs HRAOEU/-G}lying {*cxs PRAEUT/-G}operating {*cxt 11:0}
{*cxs S-PL}system {*cxs SOBGT}socket {*cxs EUFRP}{*cxt 12:0}{*cxs HREPLT/TAEUGS
/-S}implementations{*cxs -FPLT/SO}.cxds ~So, {*cxs EUT}it {*cxt 13:0}{*cxs
KOPB /TAEUPB/-S}contains {*cxs SPEFBG}specific
{*cxt 14:0}{*cxs KHRASZ/-S}classes {*cxs TP-R}
for {*cxt 15:0}{*cxs HAPBD/-L/-G}handling {*cxs KPHOPB}common {*cxt 16:0}{*cxs
TRAPBZ} transcxds {*cxs PORT/-S}ports {*cxt 17:0}{*cxs
AZ}as {*cxs WEL}well {*cxs AZ} as {*cxs A}a {*cxt 18:0}{*cxs SKWRE/TPHAEUR/EUBG}generic
{*cxs SPWER}intercxds {*cxt 19:0}{*cxs TPAEUS}face {*cxs TP-R}for
{*cxs HAPBD/-L}{*cxt 20:0}{*cxs -G} handling {*cxs T}the {*cxs R*ES}rest{*cxs
-FPLT}.cxds ~{*cxt 21:0}{*cxs AUL} cxsgnocap All {*cxs T}the {*cxs TP*UPBGS/A*L}{cxsgdelsteno1
{*cxs STEU}{*cxt 23:0}{*cxs *} cxsgdelsteno0}{*cxs TEU}functionality {*cxs
TPH}in {*cxs T}the {*cxt 24:0}{*cxs SOBGT}socket
{*cxs HRAOEU/PWRAEUR}library {*cxs S}is {*cxt 25:0}{*cxs ABG/SESZ/-BL}accessible
{*cxs THRU}through {*cxt 26:0}{*cxs A}a{cxsgdelsteno1 {*cxs SEUBG/*}cxsgdelsteno0}
{*cxs SEUPBG}{*cxt 27:0} {*cxs -L}single {*cxs EBGS}excxds {*cxs
TEPBGS}tension {*cxt 28:0}{*cxs HRAOEU /PWRAEUR}library{*cxs -RBGS}, {*cxs SKP}and
{*cxs TH}this {*cxs S}is {*cxt 29:0} {*cxs WEL}well {*cxs TKOUPLT/-D}documented
{*cxt 30:0}{*cxs TPH}in {*cxs THR} there{*cxs -FPLT}{*cxt 31:0}{*cxs SO}.cxds
~So, {*cxs KWROU}you {*cxs K} can {*cxs TKPWO}go {*cxs TPH}in {*cxt
32:0}{*cxs SKP}and {*cxs KHEBG}check {*cxs EUT}it {*cxs OUT}out {*cxs SKP}and
{*cxt 33:0}{*cxs KHEBG}check {*cxs OUT} out {*cxs AUL}all {*cxs T}the {*cxt
34:0}{*cxs KHRASZ/-S}classes {*cxs SKP} and {*cxs AUL}all {*cxs T}the {*cxt
35:0}{*cxs PHE/THOD/-S}methods {*cxt 36:0} {*cxs THA}that {*cxs R}are {*cxs AEU}{*cxt
37:0}{*cxs TAFP/-D}attached {*cxs TO} to {*cxs T}the {*cxs SOBGT}socket{*cxs
-FPLT}{*cxt 38:0}{*cxs SO}.cxds ~ So, {*cxs THA}that{*cxs AOES}’s {*cxs
RAEL}{*cxt 39:0}{*cxs HREU}really {*cxs AUL}
all {*cxs WE}we {*cxs TPHAOED}need{*cxs -RBGS}, {*cxt 40:0}{*cxs TKPWAOEU/-S}
guys{*cxs -FPLT}.cxds ~{*cxt 41:0}{*cxs P-F}
parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0 cxfc {*cxt 42:0}{*cxs SO}cxsgnocap So
{*cxs TPHOU}now {*cxs THA}that {*cxs WE}
we {*cxs SR}have {*cxt 43:0}{*cxs OUR}our {*cxs SOBGT}socket{*cxs -RBGS}, {*cxs
WE} we {*cxt 44:0}{*cxs K}can {*cxs TPHOU}now
{*cxs PRO/SAOED}proceed {*cxt 45:0} {*cxs TO}to {*cxs PWEULD/-G}building {*cxt
46:0}{*cxs OUR}our {*cxs H-FRBGS} H{*cxs T-FRBGS}T{*cxs T-FRBGS}T{*cxt
47:0}{*cxs P-FRBGS}P {*cxs SEFRB/ER}server {*cxs -FPLT}.cxds ~{*cxt 48:0}{*cxs
PW-FR}cxsgnocap Before {*cxs WE}we {*cxs TKPWO}
go{cxsgdelsteno1 {*cxs TKPW}{*cxt 49:0}{*cxs *}cxsgdelsteno0} {*cxt 50:0}{*cxs AEU}acxds
{*cxs HED}head {*cxs -RBGS}, {*cxs PWAEUS}{*cxt 51:0}{*cxs
-D}based {*cxs OPB}on {*cxs AUL} all {*cxs EU}I {*cxs SR}have {*cxs PW-PB}been
{*cxt 52:0}{*cxs SAEU/-G}saying {*cxs -RBGS}, {*cxs EU}I {*cxs WAPBT}want
{*cxs TO}to {*cxt 53:0}{*cxs KWR-F} identify {*cxs T}the {*cxs THRAOE}three
{*cxs PHAEUPB}main {*cxs THEUPBG}{*cxt 54:0}
{*cxs -S}things {*cxs WE}we {*cxs R}are {*cxs TKPWOEUPBG}going {*cxs TO}to {*cxt
55:0} {*cxs PWEULD}build{*cxs -RBGS}, {*cxs
T}the {*cxs THRAOE}three {*cxs PHAEUPB} main {*cxt 56:0}{*cxs TPAOEFP/-S}features
{*cxs THA}that {*cxs OUR}our {*cxs SEFRB}{*cxt 57:0}
{*cxs ER}server {*cxs TPHAOED/-S}needs {*cxs TO}to {*cxt 58:0}{*cxs SR}have
{*cxs TO}to {*cxs PW}be {*cxt 59:0}{*cxs TP*UPBGS/A*L}functional{*cxs -FPLT}
.cxds ~{*cxt 33:0:0}{*cxs OUR}cxsgnocap Our {*cxs SEFRB/ER}server {*cxt 1:0}
{*cxs TPHAOED/-S}needs {*cxs TO}to {*cxs PW}be {*cxs AEUBL}able {*cxs TO}to
{*cxt 2:0}{*cxs HR-PB}listen {*cxs TP-R}for {*cxs K*EBGS}connection{*cxs -FPLT}
.cxds ~{*cxt 3:0}{*cxs EUT}cxsgnocap It {*cxs TPHAOED/TOS}needs to {*cxs PW}
be {*cxt 4:0}{*cxs AEUBL}able {*cxs TO}to {*cxt 5:0}{*cxs PARS}parse {*cxt
6:0} {*cxs T}the {*cxs KW}request{*cxs -RBGS},
{*cxs SKP}and {*cxs EUT}it {*cxt 7:0} {*cxs TPHAOED/TOS}needs to {*cxs PW}be
{*cxs AEUBL}able {*cxs TO}to {*cxt 8:0} {*cxs PWEULD}build {*cxs SKP}and{cxsgdelsteno1
{*cxs SPEPBD}{*cxt 9:0}{*cxs *}cxsgdelsteno0} {*cxs SEPBD}
send {*cxs T}the {*cxt 10:0}{*cxs SPOPBS}response {*cxt 11:0}{*cxs PWABG}back
{*cxs TO}to {*cxs T}the {*cxs KHRAOEUPBT}client{*cxs -FPLT/SO}.cxds ~So, {*cxt 12:0}
{*cxs WE/AOER}we’re {*cxs TKPWOEUPBG}going {*cxs TO}to {*cxs PWEULD}build {*cxt
13:0} {*cxs THA}that{*cxs -FPLT}.cxds ~{*cxt
16:0}{*cxs TO}cxsgnocap To {*cxs HAPBD /-L}handle {*cxt 17:0}{*cxs T}the {*cxs
HR-PB/-G}listening {*cxs TP-R}for {*cxs K*EBGS}{*cxt 18:0}
{*cxs -S}connections {*cxs PWEUT}bit{*cxs -RBGS}, {*cxt 19:0}{*cxs TH}this
{*cxs S}is {*cxs HOU}how {*cxs WE}we {*cxt 20:0}{*cxs TKO}do {*cxs THA}that
{*cxs -FPLT}.cxds ~{*cxt 22:0}{*cxs WE}cxsgnocap We {*cxs RE}{*cxt 23:0}
{*cxs KWAOEUR}require {*cxt 24:0}{*cxs SOBGT}socket {*cxt 25:0}{*cxs TPR}from
{*cxs T}the{cxsgdelsteno1 {*cxt 26:0}{*cxs ST*EUD}{*cxt 29:0}{*cxs *}cxsgdelsteno0}
{*cxs ST*D}stdlib {*cxt 30:0}{*cxs -RBGS}, {*cxs SKP}and
{*cxs THEPB}then {*cxs WE}we {*cxt 31:0} {*cxs TPHAOED}need {*cxs TO}to {*cxs
TKE}decxds {*cxs TPAOEUPB}fine {*cxs OUR}
our {*cxt 32:0}{*cxs SEFRB/ER}server {*cxs PWEU}by {*cxt 33:0}{*cxs TPHEURBL
/AOEUZ/-G}initializing {*cxs T}the {*cxs T-FRBGS}T{*cxt 34:0}{*cxs KR-FRBGS}C
{*cxs P-FRBGS}P{*cxs H}cxds {*cxt 35:0}{*cxs U}cxfc {*cxs SEFRB/ER}cxsgnocap Server
{*cxt 36:0}{*cxs KHRASZ}class {*cxs SKP}and {*cxs SR}have {*cxt 37:0}{*cxs
EUT} it {*cxs HR-PB}listen {*cxs TP-R}for {*cxs
TPHU}new {*cxt 38:0}{*cxs K*EBGS /-S}connections {*cxs OPB}on {*cxt 39:0}{*cxs
T-FRBGS}T{*cxs KR-FRBGS}C{*cxs P-FRBGS} P {*cxt 40:0}{*cxs PORT}port{*cxs -FPLT}.cxds
~{*cxs SREU}I have {*cxs KHOEZ}{*cxt 41:0}
{*cxs -PB}chosen {*cxt 42:0}{*cxs TO}to{cxsgdelsteno1 {*cxt 43:0}{*cxs PWOUPBD/*}cxsgdelsteno0}
{*cxs PWOUPBD} bound {*cxs T}the {*cxt 44:0}{*cxs SEFRB/ER}server
{*cxs TO}to {*cxt 45:0} {*cxs PORT}port {*cxs 50#}50{*cxs 0#}0{*cxt
46:0}{*cxs 0#}0{*cxs -FPLT}.cxds ~{*cxs KWROU}cxsgnocap You {*cxt 47:0}{*cxs
K}can {*cxs KHAOUZ}choose {*cxs TPHEU} any {*cxt 48:0}{*cxs EUPBT/SKWRER}integer
{*cxs TPR}from {*cxt 49:0}{*cxs 10#} 10{*cxs 0#}0 {*cxs SKP}and {*cxt 50:0}{*cxs
PWO*F}above{*cxs -FPLT}.cxds ~ {*cxt 51:0}{*cxs TPHEBGT}cxsgnocap Next{*cxs
-RBGS}, {*cxs WE}we {*cxt 52:0} {*cxs WAPBT}want {*cxs TO}to {*cxs HRAOP}loop
{*cxt 53:0}{*cxs EUPB/TPEU/TPHEUT /HREU}infinitely {*cxt 56:0}{*cxs SO}so
{*cxs THA}that {*cxs WE}we {*cxt 57:0} {*cxs K}can {*cxs PRO/SESZ}process {*cxs
OUR}our {*cxs EUPB}incxds {*cxt 58:0} {*cxs KOPL/-G}coming{cxsgdelsteno1 {*cxs
T*EBGS}{*cxt 59:0}{*cxs *}cxsgdelsteno0} {*cxt 34:0:0}{*cxs K*EBGS}
connection {*cxs WUPB}one {*cxs AT}at {*cxs A}a {*cxt 1:0}{*cxs TAOEUPL}time
{*cxs -FPLT}.cxds ~{*cxt 6:0}{*cxs THA}cxsgnocap That {*cxs HR}will {*cxs
WAEUT} wait {*cxs UPB}{*cxt 7:0}{*cxs TEUL}until
{*cxs A}a {*cxs KHRAOEUPBT}client {cxsgdelsteno1 {*cxs HAZ}{*cxt 8:0}{*cxs
K*EBGS/-D}{*cxt 10:0}{*cxs *}{*cxt 11:0}{*cxs *}{*cxt 12:0}
{*cxs *}cxsgdelsteno0} {*cxs KEBGT/-S}connects {*cxs TO}to {*cxt 13:0}{*cxs OUR}our
{*cxs SEFRB /ER}server {*cxs SKP}and {*cxs EUT}it
{*cxt 14:0}{*cxs HR}will {*cxs RURPB}return {*cxs A}a {*cxs T-FRBGS}T{*cxt 15:0}{*cxs
KR-FRBGS}C{*cxs P-FRBGS}P{*cxs H} cxds {*cxt 16:0}{*cxs U}cxfc {*cxs
SOBGT}cxsgnocap Socket {*cxs THA}that {*cxt 17:0}{*cxs K}can {*cxs PW}be {*cxs
KWRAOUZ/TPH-D}used in {*cxs A}a {*cxt 18:0}
{*cxs SHRAR}similar {*cxs TPAGS}fashion {*cxs TO}to {*cxt 19:0}{*cxs O*ER}other
{*cxs RAO*UB}Ruby {*cxt 21:0}{*cxs EUFRBGS}I{*cxs SHR-RB}cxds /cxds {*cxt 22:0}
{*cxs OFRBGS}O {*cxs OB/SKWREBGT}object{*cxs -FPLT}.cxds ~{*cxt 23:0}{*cxs WUPBS}
cxsgnocap Once {*cxs WE}we {*cxs SR}have {*cxs THA}that{*cxs -RBGS}, {*cxs WE}
we {*cxt 24:0}{*cxs TPHAOED}need {*cxs TO}to {*cxs PW}be {*cxs AEUBL}able {*cxs
TO} to{*cxt 26:0}{*cxs TK-RB}~__ {*cxs
WUPBS}once {*cxs OUR}our {*cxs SEFRB}{*cxt 27:0}
{*cxs ER}server {*cxs HAZ}has {*cxs PW-PB}been {*cxs KEBGT/-D}connected {*cxt
28:0} {*cxs TO}to{*cxs -RBGS}, {*cxs RAOEUGT}right{*cxs
-RBGS}, {*cxs WE}we {*cxt 29:0} {*cxs TPHAOED}need {*cxs TO}to {*cxs
PW}be {*cxs AEUBL}able {*cxs TO}to {*cxt 31:0}
{*cxs RAED}read {*cxs T}the {*cxs KW}request {*cxs THA}that {*cxs HAZ}has {*cxt 32:0}
{*cxs SKWR*US}just {*cxs HEUT}hit {*cxs OUR}our {*cxt 33:0}{*cxs SEFRB/ER}server
{*cxs -FPLT}.cxds ~{*cxt 34:0}{*cxs SKP}cxsgnocap And {*cxs HOU}how {*cxs
WE} we {*cxs TKO}do {*cxs THA}that {*cxt
35:0}{*cxs S}is {*cxt 38:0}{*cxs KWRAOUZ /-G}using {*cxs T}the{*cxt 39:0}{*cxs
SP-S}~cxds {*cxs SKWR}cxds .cxds {*cxt 40:0}
{*cxs TKPWET}get {*cxs PHE/THOD}method{*cxt 41:0}{*cxs -RBGS}, {*cxs SKP}and
{*cxs THA}that {*cxs PHE/THOD}method {*cxt 42:0}{*cxs E/SEPBT/-RBL/HREU}essentially
{*cxt 43:0}{*cxs RAED/T-S}reads the {*cxs TP*EURS}first {*cxs HRAOEUPB}line
{*cxt 44:0}{*cxs OF}of {*cxs T}the {*cxs KW}request{*cxt 45:0}{*cxs -FPLT}
.cxds ~{*cxt 46:0}{*cxs SKP}cxsgnocap And {*cxs KWR-PB}you know{*cxs -RBGS}
, {*cxs TP}if {*cxt 47:0}{*cxs KWROU}you {*cxs TKPWO}go {*cxs SPWAO}into {*cxs
T} the {*cxt 48:0}{*cxs SOBGT}socket {*cxs
HRAOEU/PWRAEUR}library{*cxs -RBGS}, {*cxt 49:0}{*cxs EUT}it {*cxs SPHRAEUPB/-S}explains
{*cxt 50:0}{*cxs T}the {*cxt 52:0}{*cxs P-PBT}~cxds .cxds
{*cxt 53:0}{*cxs H}cxds {*cxt 54:0} {*cxs TKPWET}get {*cxs PHE/THOD}method
{*cxt 55:0}{*cxs RAED/-S}reads {*cxs T}
the{cxsgdelsteno1 {*cxs T/TPHEBGT}{*cxt 56:0}{*cxs */*}cxsgdelsteno0} {*cxs TPHEBGT}next
{*cxs HRAOEUPB} line {*cxt 57:0}{*cxs TPR}from {*cxs
APB}an {*cxt 58:0}{*cxs EUFRBGS}I{cxsgdelsteno1 {*cxs SKWR-RB}{*cxt 59:0}
{*cxs *}cxsgdelsteno0}{*cxs SHR-RB}cxds /cxds {*cxt 35:0:0}{*cxs OFRBGS}O {*cxs
STRAOEPL} stream{*cxs -FPLT}.cxds ~{*cxs WE}cxsgnocap
We {*cxs SR}have{cxsgdelsteno1 {*cxt 1:0}{*cxs TPHEURB
/AOEUZ/-D/OUR}{*cxt 2:0}{*cxs */*/*}{*cxt 3:0}{*cxs *}cxsgdelsteno0} {*cxs TPHEURBL/AOEUZ
/-D}initialized {*cxt 4:0}{*cxs OUR}our {*cxs SEFRB/ER}server {*cxs TO}to {*cxt
5:0} {*cxs PW}be {*cxs RAED}{*cxt 6:0}{*cxs
KWREU}ready {*cxs TP-R}for {*cxs THA} that{*cxs -FPLT}.cxds ~{*cxt 7:0}{*cxs
KWRAOUZ/-G}cxsgnocap Using {*cxs T} the {*cxt 8:0}{*cxs TKPWET}get {*cxs
PHE/THOD}method{*cxt 9:0}{*cxs -RBGS} , {*cxs WE}we {*cxs K}can {*cxs RAED}read
{*cxs EUT}it{*cxs -FPLT}.cxds ~{*cxt 10:0}
{*cxs P-F} parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0
cxfc {*cxs THEPB}cxsgnocap Then {*cxs EU/AOEPL}I’m {*cxt 11:0}{*cxs SKWR*US}
just {*cxs KWRAOUZ/-G}using {*cxs T}the {*cxt 12:0}{*cxs HRA*S}last {*cxs WUPB}
one{*cxs -RBGS}, {*cxt 13:0}{*cxs KWRAOUZ/-G}using {*cxt 15:0}{*cxs S-FRBGS}
S{*cxs T-FRBGS}T{*cxs TK-FRBGS}D{*cxs EFRBGS}E{*cxt 16:0}{*cxs R-FRBGS}R{*cxs
R-FRBGS} R {*cxs TO}to {*cxs PREUPBT}print {*cxt
17:0}{*cxs THA}that {*cxs OUT}out {*cxs TO}
to {*cxs T}the {*cxs KOPB/SOEL}console{*cxt 18:0}{*cxs -FPLT}.cxds ~{*cxt 19:0}
{*cxs SKP}cxsgnocap And {*cxs THA}that{*cxt 20:0}{*cxs AOES}’s {*cxs EUT}it
{*cxs -FPLT/SO}.cxds ~So, {*cxs W}with {*cxt 21:0}{*cxs TH}this{*cxs -RBGS}
, {*cxs WE}we {*cxs SR}have {*cxt 22:0}{*cxs OUR}our {*cxt 23:0}{*cxs SEFRB
/ER}server {*cxs HR-PB/-G}listening {*cxt 24:0}{*cxs AT}at {*cxs PORT}port {*cxs
50#} 50{*cxt 25:0}{*cxs 0#}0{*cxt 26:0}{*cxs
0#}0{*cxs -FPLT}.cxds ~{*cxs EUT} cxsgnocap It {*cxs K}can {*cxt 27:0}{*cxs
ABG/SEPT}accept {*cxs T}the {*cxs K*EBGS} connection {*cxs SKP}and {*cxt 28:0}{*cxs
EUT}it {*cxs K}can {*cxs PREUPBT} print {*cxs T}the {*cxs TP*EURS}first
{*cxt 29:0}{*cxs HRAOEUPB}line {*cxs OF}
of {*cxs T}the {*cxs KW}request {*cxs THA}that {*cxt 30:0}{*cxs WE}we {*cxs
SKWR*US} just {*cxs SEF/-D}received{*cxs -FPLT}.cxds
~{*cxt 32:0}{*cxs EUT}cxsgnocap It {*cxs S}is {*cxt 33:0}{*cxs WO*RT/KWREU}worthy
{*cxs TO}to {*cxs TPHOET}note {*cxt 34:0}{*cxs THA}that {*cxt 39:0}{*cxs
T}the {*cxs SEFRB/ER}server {*cxs TKUZ} does {*cxt 40:0}{*cxs TPHOG}nothing {*cxs
EBGS/SEPT}except {*cxt 41:0}{*cxs HR-PB} listen {*cxs TO}to {*cxs T}the {*cxs
*EUP}IP {*cxt 42:0}{*cxs AEU/TKRESZ}address {*cxs SKP}and {*cxs T}the {*cxs PORT}port
{*cxt 43:0}{*cxs THA}that {*cxs KWROU} you {*cxs SPES/TPEU}specify {*cxt 44:0}{*cxs
UPB/TEUL}until {*cxs KWROU}you {*cxs PHAEUBG}make{*cxt 45:0}{*cxs TK-RB}~__
{*cxs TP}if {*cxs KWROU}you {*cxs RUPB}run {*cxs THA}that {*cxt
46:0}{*cxs SKP}and {*cxs UPB/TEUL}until {*cxs KWROU}you {*cxt 47:0}{*cxs PHAEUBG}make
{*cxt 52:0}{*cxs A}a{cxsgdelsteno1 {*cxs KWE
/*}cxsgdelsteno0} {*cxt 53:0}{*cxs KW}request{*cxs -RBGS}, {*cxs EUT}it {*cxs HR}will {*cxs
PW} be {*cxs WAEUT/-G}waiting {*cxt 54:0}{*cxs
SKP}and {*cxs HR-PB/-G}listening {*cxs TP-R}for {*cxt 55:0}{*cxs KWROU}you
{*cxs TO}to {*cxs KEBGT}connect {*cxs TO}
to {*cxs EUT}it{*cxs -FPLT/SO}.cxds ~So, {*cxt 56:0}{*cxs WHEPB}when {*cxs KWROU}
you {*cxs RUPB}run {*cxs TH}this {*cxt 57:0}{*cxs PWHROBG}block {*cxs OF}of
{*cxs KOED}code{*cxs -RBGS}, {*cxt 58:0}{*cxs TH}this {*cxs S}is {*cxs WHA}
what {*cxs KWROU}you {*cxs TKPWET}get{*cxt 59:0}{*cxs -FPLT}.cxds ~{*cxt 36:0:0}
{*cxs KWROU}cxsgnocap You {*cxt 1:0}{*cxs TKPWET}get {*cxs A}a {*cxs SPOPBS}
response{*cxt 3:0}{*cxs -FPLT}.cxds ~{*cxt 4:0}{*cxs OPB}cxsgnocap On {*cxs KWROUR}
your {*cxs KOPB}{*cxt 5:0}{*cxs SOEL}console{*cxs -RBGS}, {*cxs KWROU}you
{*cxs TKPWET}get {*cxt 6:0}{*cxs TH}this{*cxs -FPLT}.cxds ~{*cxs SKP}cxsgnocap And
{*cxs THA}that{*cxt 7:0}{*cxs AOES}’s {*cxs E/SEPBT/-RBL/HREU}essentially {*cxs
T} the {*cxt 8:0}{*cxs TP*EURS}first {*cxs
HRAOEUPB}line {*cxs OF}of {*cxs T}the {*cxt 9:0}{*cxs H-FRBGS}H{*cxs T-FRBGS}T{*cxs
T-FRBGS}T{*cxs P-FRBGS}P {*cxt 10:0} {*cxs KW}request{*cxs -RBGS}, {*cxs
KH}which {*cxs S}is {*cxs T}the {*cxt 11:0}
{*cxs TKPWET}get {*cxt 12:0}{*cxs PHE/THOD}method {*cxt 13:0}{*cxs SKP}and
{*cxs T}the{cxsgdelsteno1 {*cxt 14:0}{*cxs PART/*}cxsgdelsteno0} {*cxs PA*T}path {*cxs
SKP}and {*cxs T} the {*cxt 15:0}{*cxs H-FRBGS}H{*cxs
T-FRBGS}T{*cxs T-FRBGS}T{*cxs P-FRBGS}P {*cxt 16:0}{*cxs SRERGS}version{*cxs
-FPLT}.cxds ~{*cxt 18:0}{*cxs P-F} parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0
cxfc {*cxt 19:0}{*cxs HOUFR}cxsgnocap However{*cxs -RBGS}, {*cxs TP-R}
for {*cxs A}a {*cxt 20:0}{*cxs RAEL}real {*cxs SEFRB/ER}server{*cxs -RBGS},
{*cxt 21:0}{*cxs WE}we{cxsgdelsteno1 {*cxs WABT/*}cxsgdelsteno0} {*cxt 22:0}{*cxs
WAPBT}want {*cxt 23:0} {*cxs OUR}our {*cxs SEFRB}{*cxt 24:0}{*cxs
ER}server {*cxs TO}to{cxsgdelsteno1 {*cxs P}{*cxt 25:0}
{*cxs *}cxsgdelsteno0} {*cxs PW}be {*cxs AEUBL}able {*cxs TO}to {*cxs RAED}read
{*cxt 26:0} {*cxs EFRG}everything {*cxs THA}that {*cxs
HAZ}has {*cxs PW-PB}been {*cxt 27:0} {*cxs SEPBT}sent {*cxs TO}to {*cxs T}the
{*cxs EUFRBGS}I{*cxt 28:0}{*cxs SHR-RB} cxds /cxds {*cxs OFRBGS}O {*cxt 29:0}{*cxs
STRAOEPL}stream {*cxs TPR}from {*cxs T}the {*cxs KW}request{*cxt 30:0}{*cxs
-FPLT/SO}.cxds ~So, {*cxs WE} we {*cxs TKO}do {*cxs THA}that {*cxt
31:0}{*cxs KWRAOUZ/-G}using {*cxt 34:0} {*cxs T}the{*cxs SKWR}cxds .cxds {*cxt
35:0}{*cxs RAED}read{*cxs H}cxds {*cxt 36:0}{*cxs PART/-RBL}partial{cxsgdelsteno1
{*cxt 38:0}{*cxs STPH-FPLT/*}cxsgdelsteno0} {*cxt 40:0}
{*cxs PR-PB}(cxds {*cxt 42:0}{*cxs 20#}20{*cxs 4-8#}48{*cxt 44:0}{*cxs
PR-PBZ} cxds ) {*cxt 45:0}{*cxs PHE/THOD}method{*cxs
-FPLT}.cxds ~{*cxt 46:0}{*cxs W} cxsgnocap With {*cxs 20#}20{*cxt 47:0}{*cxs
4-8#}48 {*cxt 48:0}{*cxs PWAO*EUT} byte {*cxs STRAOEPL}stream{*cxs -RBGS},
{*cxs KWROU}you {*cxt 49:0}{*cxs K} can {*cxs PWAEUS/KHREU}basically {*cxs
HR-PB}listen {*cxt 50:0}{*cxs TO}to {*cxs HR-PLS}
almost {*cxt 53:0}{*cxs *EFR}every {*cxs STRAOEPL}stream {*cxt 54:0}{*cxs THA}
that{*cxt 55:0}{*cxs TK-RB}~__ {*cxt 56:0}{*cxs *EFR}every {*cxs EUFRBGS}
I{*cxt 57:0}{*cxs SHR-RB}cxds /cxds {*cxs OFRBGS}O {*cxt 58:0}{*cxs STRAOEPL}
stream {*cxs THA}that {*cxt 59:0}{*cxs HEUT/THAS}hits that {*cxt 37:0:0}{*cxs
KW} request{*cxs -FPLT/SO}.cxds ~So, {*cxs
W}with {*cxs THA}that{*cxs -RBGS}, {*cxt 1:0}
{*cxs WE}we {*cxs TKPWET}get {*cxs *EFRG}everything {*cxs TPR}from {*cxt 2:0}
{*cxs OUR}our {*cxs H-FRBGS}H{*cxs T-FRBGS}T{*cxs T-FRBGS}T{*cxs P-FRBGS}P {*cxt 3:0}
{*cxs KW}request{*cxs -FPLT/SO}.cxds ~So, {*cxs WHEPB}when {*cxt 4:0}{*cxs
KWROU} you {*cxs RUPB}run {*cxs THA}that{*cxs
-RBGS}, {*cxs KWROU}you {*cxs TKPWET} get {*cxt 5:0}{*cxs TH}this {*cxt 6:0}{*cxs
TPUL}full {*cxs H-FRBGS}H{*cxs T-FRBGS} T{*cxt 7:0}{*cxs T-FRBGS}T{*cxs P-FRBGS}P
{*cxs KW}request {*cxt 8:0}{*cxs THA} that {*cxs HAZ}has{cxsgdelsteno1 {*cxs
PW-PB}{*cxt 10:0}{*cxs *}cxsgdelsteno0} {*cxt 11:0}{*cxs TKPWOT
/-PB}gotten {*cxs TO}to {*cxs OUR}our {*cxs SEFRB/ER}server{*cxt 12:0}{*cxs
-RBGS} , {*cxs SKP}and {*cxs WE/AOER}we’re {*cxs
PREUPBT}{*cxt 13:0}{*cxs THAG}printing that {*cxs OUT}out{*cxs -FPLT}.cxds ~{*cxs
P-F} parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0
cxfc {*cxs SO}cxsgnocap So {*cxs TPHOU}now {*cxt 14:0}{*cxs THA}that {*cxs KWROU}
you {*cxs SR}have {*cxs TH}this{*cxs -RBGS}, {*cxt 16:0}{*cxs WE}we {*cxt
17:0} {*cxs TPHAOED}need {*cxs TO}to {*cxs
PW}be {*cxs AEUBL}able {*cxs TO}to {*cxt 18:0}
{*cxs PARS}parse {*cxs TH}this{*cxs -FPLT}.cxds ~{*cxs PWAUZ}cxsgnocap Because
{*cxs HRAOEUBG}like {*cxt 19:0}{*cxs EU}I {*cxs PHEPBGS/-D}mentioned {*cxs
ERL /KWRER}earlier{*cxt 20:0}{*cxs -RBGS},
{*cxs THA}that {*cxs S}is {*cxs SKWR*US} just {*cxs A}a {*cxs STREUPBG}string {*cxt
21:0}{*cxs HRAOEUBG}like {*cxs OPB} on {*cxs KWROUR}your {*cxt 22:0}{*cxs
SEFRB/ER}server{*cxs -FPLT}.cxds ~{*cxt 23:0}
{*cxs EUT}cxsgnocap It {*cxs S}is {*cxs SAOEPB}seen {*cxt 24:0}{*cxs AZ}as
{*cxs A}a {*cxs STREUPBG}string{*cxs -FPLT}.cxds ~{*cxs HRAOEUBG}cxsgnocap
Like {*cxs EUT}it {*cxt 25:0}{*cxs TKUPBT}doesn’t
{*cxs UPBS}understand {*cxs EUT} it{*cxs -FPLT}.cxds ~{*cxt 26:0}{*cxs
EUT}cxsgnocap It {*cxs TPHAOED}{*cxt 27:0}
{*cxs TOS}needs to {*cxs PW}be {*cxs AEUBL}able {*cxs TO}to {*cxs PARS}parse
{*cxs EUT}it {*cxt 28:0}{*cxs SO}so {*cxs EUT}it {*cxs UPBS/-S}understands
{*cxs WHA}what {*cxt 29:0}{*cxs TO}to {*cxs TKO}do {*cxs W}with {*cxs T}the
{*cxs STREUPBG}string {*cxt 30:0}{*cxs THA}that {*cxs EUT}it {*cxs HAZ}has
{*cxs SEF/-D}received{*cxs -FPLT}.cxds ~{*cxt 32:0}{*cxs P-F}
parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0 cxfc {*cxt 33:0}{*cxs SO}cxsgnocap So
{*cxs EUT}it{*cxs AOES}’s {*cxs SKWR*US} just {*cxs A}a {*cxs STREUPBG}string{*cxt
34:0}{*cxs -FPLT}.cxds ~{*cxs WE} cxsgnocap We {*cxs TPHAOED}need {*cxs
TO}to {*cxs PW}be {*cxt 35:0}{*cxs AEUBL} able {*cxs TO}to {*cxs PARS}parse {*cxs
EUT}it{*cxs -FPLT}.cxds ~{*cxt 36:0} {*cxs SKP}cxsgnocap And {*cxs TO}to {*cxt
37:0}{*cxs PARS}parse {*cxs EUT} it{*cxs -RBGS}, {*cxs EU}I {*cxs SR}have
{*cxt 38:0}{*cxs TH}this {*cxt 40:0} {*cxs PARS}parse {*cxs PHE}{*cxt 41:0}{*cxs
THOD}method{*cxs -FPLT}.cxds ~{*cxs SKP}cxsgnocap And {*cxs TH}this
{*cxt 42:0}{*cxs PARS}parse {*cxs PHE /THOD}method {*cxt 43:0}{*cxs E/SEPBT/-RBL/HREU}essentially{*cxs
-RBGS}, {*cxt 44:0} {*cxs PWAUZ}because{cxsgdelsteno1 {*cxs
W/E/TPHOE}{*cxt 45:0}{*cxs T}{*cxt 46:0}{*cxs *
/*/*}{*cxt 47:0}{*cxs *}cxsgdelsteno0} {*cxs WE}we {*cxt 48:0}{*cxs TPHOE}know
{*cxs T} the {*cxt 49:0}{*cxs KW}request {*cxs
STREUPBG}string{*cxt 50:0}{*cxs -RBGS} , {*cxs T}the {*cxs TP*EURS}first {*cxt
51:0}{*cxs HRAOEUPB}line {*cxs OF}of {*cxs KWROUR}your {*cxs KW}request {*cxt
52:0}{*cxs STREUPBG}string {*cxt 53:0} {*cxs HAZ}has {*cxs T}the {*cxs PHE/THOD}method{*cxt
54:0}{*cxs -RBGS}, {*cxs T} the {*cxs PA*T}path{*cxs -RBGS}, {*cxs
SKP}and {*cxs T}the {*cxt 55:0}{*cxs SRERGS}
version{*cxs -RBGS}, {*cxt 56:0}{*cxs WE/AOER}we’re {*cxt 57:0}{*cxs E/SEPBT
/-RBL/HREU}essentially {*cxt 58:0}{*cxs SPHREUT/-G}splitting {*cxs KWROUR}your
{*cxs TP*EURS}first {*cxt 59:0}{*cxs HRAOEUPB}line {*cxs SPWAO}into {*cxs THRAOE}
three {*cxt 38:0:0}{*cxs SRAEURBL/SKP-S}variables and {*cxs AEU/SAOEUPB}{*cxt 1:0}
{*cxs -G}assigning {*cxs T}the {*cxs TP*EURS}first {*cxt 2:0}{*cxs S}is {*cxs
T} the {*cxs PHE/THOD}method{*cxs -RBGS},
{*cxs T}the {*cxt 3:0}{*cxs SEBGD}second {*cxs S}is {*cxs T}the {*cxs PA*T}path{*cxt
4:0}{*cxs -RBGS}, {*cxs SKP}and {*cxs T}the {*cxs THEURD}third {*cxs
S}is {*cxs T}the {*cxt 5:0}{*cxs SRERGS} version{*cxs -FPLT/SO}.cxds ~So, {*cxs
THA}that{*cxs AOES}’s {*cxt 6:0}{*cxs SR-R}
very {*cxs SEUPL}{*cxt 7:0}{*cxs P-L}simple {*cxs SKP}and {*cxs THA}that {*cxt 8:0}
{*cxs TKUZ}does {*cxs SKWR*US}just {*cxs THA}that{*cxs -FPLT}.cxds ~{*cxs SKP}
cxsgnocap And {*cxt 9:0}{*cxs THEPB}then {*cxs WE}we {*cxs WAPBT}want {*cxs THA}
that {*cxt 10:0}{*cxs PARS}parse {*cxs PHE/THOD}method {*cxs TO}to {*cxt 13:0}
{*cxs RURPB}return {*cxt 14:0}{*cxs A}a {*cxs HARB}hash {*cxs W}with {*cxs
T} the {*cxs PHE/THOD}method{*cxt 15:0}{*cxs
-RBGS}, {*cxs T}the {*cxs PA*T}path {*cxs -RBGS}, {*cxs SKP}and {*cxt 16:0}{*cxs
T}the {*cxs HED/ER/-S}headers{*cxs -FPLT} .cxds ~{*cxt 17:0}{*cxs SKP}cxsgnocap
And {*cxs TP-R}for {*cxs T}the {*cxs HED}{*cxt 18:0}
{*cxs ER/-S}headers{*cxs -RBGS}, {*cxs WE}we {*cxs TPHAOED}need {*cxt 19:0}
{*cxs TO}to{cxsgdelsteno1 {*cxs PASZ/*}cxsgdelsteno0} {*cxs PARS}parse {*cxt 20:0}{*cxs THA}that
{*cxs A} a {*cxs HREUT/-L}little {*cxs PWEUT}bit
{*cxs PH-R}more{*cxt 21:0}{*cxs -RBGS} , {*cxs PWAUZ}because {*cxs T}the {*cxs
HED}{*cxt 22:0}{*cxs ER/-S}headers {*cxs TPHAOED/-S}needs {*cxs TO}to {*cxs
PW}be {*cxt 27:0}{*cxs PHAED}made {*cxs UP}up {*cxs OF}of {*cxt 28:0}{*cxs
APB}an {*cxs HARB}hash {*cxs OF} of {*cxs KAOE}key{*cxt 29:0}{*cxs H-F}cxds
_cxds {*cxs SRAL}value {*cxt 30:0} {*cxs PAEUR/SOS}pairs so {*cxs KWROU}you
{*cxs TPHOE}know {*cxs WHA}what {*cxt 31:0}
{*cxs S}is {*cxs TPH}in {*cxs T}the {*cxs HED/ER}header {*cxs THA}that {*cxt
32:0} {*cxs KWROUR}your {*cxs H-FRBGS}H{*cxs
T-FRBGS}T{*cxs T-FRBGS}T{*cxs P-FRBGS} P {*cxt 33:0}{*cxs KW}request {*cxs
HAZ}has{*cxs -FPLT}.cxds ~{*cxt 34:0} {*cxs SKP}cxsgnocap And {*cxt 36:0}{*cxs
T}the {*cxt 37:0}{*cxs TPHEBGT}next {*cxs SHRAOEUD}slide {*cxs SHOE/-S}shows
{*cxt 38:0}{*cxs A}a {*cxt 39:0} {*cxs STPHEUPT}snippet {*cxs OF}of {*cxs
KOED}code {*cxt 40:0}{*cxs TP-R}for {*cxs HOU}how {*cxs KWROU}you {*cxs
PARS}parse {*cxs T}the {*cxt 41:0}{*cxs HED
/ER/-S}headers{*cxs -FPLT/SO}.cxds ~So, {*cxt 42:0}{*cxs HAOER}here{*cxs -RBGS}
, {*cxs WE/AOER}we’re {*cxt 43:0}{*cxs TAEUBG/-G}taking {*cxs T}the {*cxs KW}
request {*cxt 44:0}{*cxs PWOD/KWREU}body {*cxs TPR}from {*cxs T}the {*cxt 45:0}
{*cxs SEBGD}second {*cxs HRAOEUPB}line{*cxs -RBGS}, {*cxs PWAUZ}because {*cxt 46:0}
{*cxs WE}we {*cxs HR-RD}already{cxsgdelsteno1 {*cxt 47:0}{*cxs TK-R/*}cxsgdelsteno0}{*cxs
TK-RB}~__ {*cxs WE}{*cxt 48:0} {*cxs AO*EF}we’ve {*cxs HR-RD}already
{*cxs HAPBD}{*cxt 49:0}{*cxs -L/-D}handled {*cxs T}the {*cxs TP*EURS}first{cxsgdelsteno1
{*cxs HRAOEUB}{*cxt 50:0}{*cxs *}cxsgdelsteno0} {*cxs HRAOEUPB}
line{*cxs -FPLT}.cxds ~{*cxs SKP}cxsgnocap And {*cxs THEPB}then {*cxs WE}we
{*cxt 51:0}{*cxs R}are {*cxs TAEUBG/-G}taking {*cxs AOEFP}each {*cxt 52:0}
{*cxs HRAOEUPB}line{cxsgdelsteno1 {*cxs SKP}{*cxt 53:0}{*cxs *}cxsgdelsteno0}
{*cxs UPB}{*cxt 54:0}{*cxs TEUL} until {*cxs WE}we {*cxs TKPWET}get {*cxs
TO}to {*cxs T}the {*cxt 55:0}{*cxs EPBD} end {*cxs OF}of {*cxs T}the {*cxs HRAOEUPB}line{*cxs
-RBGS}, {*cxs WE}{*cxt 56:0} {*cxs AOER}we’re {*cxs SPHREUT/-G}splitting
{*cxs EUT}it {*cxs SPWAO}into {*cxt 57:0}
{*cxs KAOE}key {*cxs SKP}and {*cxt 58:0}{*cxs SRAL}value{*cxs -FPLT}.cxds
~{*cxs THA}cxsgnocap That{*cxs AOES}’s {*cxs E}{*cxt 59:0}{*cxs SEPBT/-RBL
/HREU}essentially {*cxs WHA}what {*cxs THA}that {*cxt 39:0:0}{*cxs TKUZ}does{*cxs
-FPLT} .cxds ~{*cxs EUT}cxsgnocap It {*cxs
PARS/-S}parses {*cxt 1:0}{*cxs SPWAO} into {*cxs KAOE}key{*cxs H-F}cxds _cxds
{*cxs SRAL}value {*cxt 2:0}{*cxs PAEUR /-S}pairs {*cxt 3:0}{*cxs SKP}and {*cxs
TKE}decxds {*cxt 4:0}{*cxs HREUPLT /-D}limited {*cxs PWEU}by {*cxt 5:0}{*cxs
A}a {*cxs KO/HROPB}colon{*cxs -FPLT}{*cxt 7:0}
{*cxs SO}.cxds ~So, {*cxs AT}at {*cxt 8:0}{*cxs T}the {*cxs EPBD}end {*cxs
OF} of {*cxs TH}this{*cxs -RBGS}, {*cxt
9:0}{*cxs HRAOEUBG}like {*cxs WHEPB}when {*cxt 10:0}{*cxs KWROU}you {*cxs RUPB}run
{*cxs AUL}all {*cxs OF}of {*cxt 11:0} {*cxs TH}this {*cxs KOED}code{*cxs -RBGS},
{*cxs WE}we {*cxt 12:0}{*cxs SHOULD} should {*cxs SR}have {*cxt 13:0}{*cxs
A}a {*cxt 14:0}{*cxs PARS/-D}parsed {*cxt 15:0}{*cxs KW}request {*cxs THA}that
{*cxs OUR}our {*cxt 16:0}{*cxs SEFRB /ER}server {*cxs UPBS/-S}understands{*cxs
-FPLT/SO}.cxds ~So, {*cxt 17:0}{*cxs OUR}
our {*cxs SEFRB/ER}server {*cxt 18:0}{*cxs TPHOE/-S}knows {*cxs WHA}what {*cxs S}
is {*cxt 19:0}{*cxs WHA}what {*cxs PWAEUS/-D}based {*cxs OPB}on {*cxs T}the
{*cxt 20:0}{*cxs KW}request {*cxs EUT}it {*cxs TKPWET/-S}gets{*cxt 21:0}{*cxs
-FPLT /SO}.cxds ~So, {*cxt 22:0}{*cxs WHEPB}when
{*cxs KWROU}you {*cxs RUPB}run {*cxs THA}
that{*cxt 23:0}{*cxs -RBGS}, {*cxs KWROU}you {*cxs SHOULD}should {*cxt 24:0}
{*cxs TKPWET}get {*cxs TH}this{*cxt 25:0}{*cxs -RBGS}, {*cxs KH}which {*cxs
S} is{cxsgdelsteno1 {*cxt 26:0}{*cxs APB}{*cxt
27:0}{*cxs HARB/*}{*cxt 28:0}{*cxs *}cxsgdelsteno0} {*cxt 29:0}
{*cxs A}a {*cxs HARB}hash {*cxs THA}that {*cxs HAZ}has {*cxt 30:0}{*cxs PW-PB}
been {*cxs PARS/-D}parsed{*cxs -FPLT}.cxds ~{*cxs TH}cxsgnocap This {*cxs S}
is {*cxt 31:0}{*cxs OUR}our {*cxs KW}request{*cxt 32:0}{*cxs -FPLT}.cxds
~{*cxs OUR}cxsgnocap Our {*cxs SEFRB/ER}server {*cxs TPHOE}{*cxt 33:0}{*cxs -S}
knows {*cxs TH}this {*cxs S}is {*cxt 34:0}{*cxs T}the {*cxs PHE/THOD}method
{*cxt 35:0}{*cxs -FPLT}.cxds ~{*cxs TH}cxsgnocap This {*cxs S}is {*cxs T}
the {*cxt 36:0}{*cxs PA*T}path{*cxs -FPLT}.cxds ~{*cxs SKP}cxsgnocap And
{*cxs THAOEZ}these {*cxs R}are {*cxs T}the {*cxt 37:0}{*cxs HED/ER/-S}headers
{*cxs -FPL}. {*cxs WHEPB}cxsgnocap When {*cxt 38:0}{*cxs WE}we {*cxs SR}have
{*cxs TH}this {*cxs TKAEU/TA}data{*cxt 39:0}{*cxs -RBGS}, {*cxs WE}we {*cxs
K} can {*cxs TPHOU}now {*cxs KWRAOUZ}use
{*cxt 40:0}{*cxs EUT}it {*cxs OPB}on {*cxs OUR}our {*cxs SEFRB}{*cxt 41:0}{*cxs
ER}server {*cxs AZ}as {*cxs WE} we {*cxs WAPBT}want{*cxs -FPLT}{*cxt
45:0}{*cxs SO}.cxds ~So, {*cxs WHEPB} when {*cxt 46:0}{*cxs WE}we {*cxs SR}have
{*cxs TH}this {*cxs TKAEU/TA}data {*cxs -RBGS}, {*cxt 47:0}{*cxs WE}we
{*cxs TPHAOED}need {*cxs TO}to {*cxt 48:0}
{*cxs TPHOU}now {*cxs PWEULD}build {*cxs SKP}and {*cxs SEPBD}send {*cxt 49:0}
{*cxs T}the {*cxs SPOPBS}response {*cxt 50:0}{*cxs PWABG}back {*cxs TO}to {*cxs
OUR} our {*cxt 51:0}{*cxs KHRAOEUPBT}client{*cxs
-FPLT}.cxds ~{*cxs P-F} parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0
cxfc {*cxt 52:0}{*cxs SO}cxsgnocap So {*cxs TO}to {*cxs TKO}do {*cxs THA}
that{*cxs -RBGS}, {*cxt 54:0}{*cxs EU}I {*cxt 55:0}{*cxs SR}have {*cxs TH}
this {*cxs PHE/THOD}method {*cxs THA}that {*cxt 57:0}{*cxs E/SEPBT/-RBL}{*cxt
58:0} {*cxs HREU}essentially {*cxt 59:0}{*cxs
AEU/SAOEUPB/-S}assigns {*cxt 40:0:0} {*cxs T}the {*cxs PA*T}path{*cxt 1:0}{*cxs
-RBGS}, {*cxs KWR-PB}you know{*cxt 2:0} {*cxs -RBGS}, {*cxt 4:0}{*cxs KWRAOUZ/-G}using
{*cxs OUR}our {*cxt 6:0}{*cxs PARS /-D}parsed{*cxt 7:0}{*cxs KWRUPBS}cxds
_cxds {*cxs KW}request {*cxt 8:0}{*cxs SKP}
and {*cxs TPEFP/T-G}fetching the {*cxt 9:0}{*cxs PA*T}path {*cxs THA}that{*cxs
AOES} ‘s {*cxs THR}there {*cxt 10:0}{*cxs
SKP}and {*cxs T}the {*cxs THEURD}third {*cxs HRAOEUPB}line {*cxt 11:0}{*cxs
KHEBG/-S}checks {*cxs TP}if {*cxs T}the {*cxs PA*T}path {*cxt 12:0}{*cxs S}is
{*cxs T}the {*cxt 15:0}{*cxs TKREBGT /REU}directory {*cxt 16:0}{*cxs KWRAOUZ/-G}using
{*cxs T}the{cxsgdelsteno1 {*cxt 17:0}{*cxs TPWRARDZ
/*}cxsgdelsteno0} {*cxt 18:0}{*cxs TPWRARD}forward {*cxs SHRARB}slash{*cxs -FPLT}.cxds ~{*cxt
19:0} {*cxs WE}cxsgnocap We {*cxs SPOPBD}respond
{*cxs W}with {*cxs T}the {*cxs SEFRB}{*cxt 20:0}
{*cxs ER}server {*cxs RAOT}root {*cxs PA*T}path{*cxs -RBGS}, {*cxt 21:0}{*cxs
SKP} and {*cxs T}the {*cxs EUPB/TKEBGS}index{*cxt
22:0}{*cxs SKWR}cxds .cxds {cxsgdelsteno1 {*cxt 23:0}
{*cxs OFRPB/*}cxsgdelsteno0}{*cxt 24:0}{*cxs H-FRPB}h{*cxs T-FRPB}t{*cxs PH-FRPB}m{*cxs
HR-FRPB} l{*cxt 25:0}{*cxs -FPLT}.cxds ~{*cxs
SKP}cxsgnocap And {*cxs EUPB}{*cxt 26:0} {*cxs TKEBGS}index{*cxs SKWR}cxds .cxds
{*cxt 27:0}{*cxs H-FRPB}h{*cxs T-FRPB} t{*cxs PH-FRPB}m{*cxt 28:0}{*cxs HR-FRPB}l
{*cxt 29:0}{*cxs S}is {*cxs A} a {*cxs TPAOEUL}file {*cxs THA}that {*cxs
KP*EUS}{*cxt 30:0}{*cxs -S}exists {*cxs OPB}on {*cxs KWROUR}your {*cxs
SEFRB/ER}server{*cxs -FPLT}.cxds ~{*cxt 31:0}
{*cxs EUT}cxsgnocap It {*cxs KOULD}could {*cxs PW}be {*cxs A}a {*cxt 32:0}
{*cxs SKWR-FRPB}j{*cxs P-FRPB}p{*cxs EFRPB}e{*cxs TKPW-FRPB}g {*cxs OR}or {*cxt
33:0} {*cxs WHAFR}whatever {*cxs KWROU}you {*cxs
WAPBT}want{*cxs -RBGS}, {*cxs KWROUR} your {*cxt 34:0}{*cxs OEPB}own {*cxs
TKREBGT}{*cxt 35:0}{*cxs REU}directory {*cxs TP-R}for {*cxs KWROUR}your {*cxs
SEFRB/ER}server {*cxs TO}to {*cxt 36:0} {*cxs SR}have {*cxt 37:0}{*cxs WHEPB}when
{*cxs KWROU}you {*cxt 38:0}{*cxs HEUT} hit {*cxs T}the {*cxs HOEPL}home {*cxs
PA*T}path {*cxs OF}of {*cxt 39:0}{*cxs KWROUR}
your {*cxs SEFRB/ER}server{*cxs -FPLT}.cxds ~{*cxt 40:0}{*cxs SKP}cxsgnocap And
{*cxs TP}if {*cxs EUT}it{*cxs AOES}’s {*cxs TPHOT}not {*cxs T}the {*cxt 41:0}
{*cxs HOEPL}home {*cxs TKREBGT/REU}directory{*cxs -RBGS}, {*cxs KWROU}you {*cxt 42:0}
{*cxs WAPBT}want {*cxs EUT}it {*cxs TO}to {*cxt 43:0}{*cxs E}{*cxt 44:0}
{*cxs SEPBT/-RBL/HREU}essentially{*cxt 45:0}{*cxs -RBGS}, {*cxs KWR-PB}you know
{*cxs -RBGS}, {*cxt 46:0}{*cxs HRAOBG}look {*cxs TP-R}for {*cxs T}the {*cxs PA*T}
path{*cxt 47:0}{*cxs -RBGS}, {*cxs KWR-PB}you know{*cxs -RBGS}, {*cxs TPH}in
{*cxt 48:0}{*cxs KWROUR}your {*cxs OEPB}own {*cxt 49:0}{*cxs TKREBGT/REU}
directory{*cxs -FPLT}.cxds ~{*cxs SKP}cxsgnocap And{cxsgdelsteno1 {*cxs WE}{*cxt 50:0}{*cxs
TURPB /*/*}cxsgdelsteno0} {*cxt 51:0}{*cxs
RURPB}return {*cxs THA}that {*cxs TO}to {*cxt 52:0}{*cxs KWROU}
you{*cxs -FPLT}.cxds ~{*cxt 53:0}{*cxs TPH}cxsgnocap In {*cxs A}a {*cxt 54:0}
{*cxs SEBGD}second{*cxs -RBGS}, {*cxs EU/AOEPL}I’m {*cxs TKPWOEUPBG}going {*cxs
TO} to {*cxt 55:0}{*cxs SHOE}show {*cxs
KWROU}you {*cxt 56:0}{*cxs WHA}what {*cxs T}
the {*cxt 57:0}{*cxs SPOPBD}respond{cxsgdelsteno1 {*cxt 58:0}{*cxs KWUPBS}{*cxt 59:0}{*cxs
*} cxsgdelsteno0}{*cxs KWRUPBS}cxds _cxds
{*cxs W}with {*cxt 41:0:0}{*cxs PHE/THOD}method {*cxs TKUZ}
does{*cxs -FPLT}.cxds ~{*cxs T}cxsgnocap The {*cxt 1:0}{*cxs SPOPBD}respond
{*cxs KWRUPBS}cxds _cxds {*cxt 2:0}{*cxs W}with {*cxs PHE/THOD}method {*cxt 3:0}
{*cxs S}is {*cxs PRET/KWREU}pretty {*cxt 4:0}{*cxs STRAEUGT/TPWRARD}straightforward
{cxsgdelsteno1 {*cxs TP}{*cxt 5:0}{*cxs *}cxsgdelsteno0} {*cxs TPH}in {*cxs THA}that
{*cxs EUT}it{*cxs AOES} ‘s {*cxt 6:0}{*cxs SKWR*US}just {*cxs
KHEBG/-G}checking {*cxs S}is {*cxs THA} that {*cxt 7:0}{*cxs PA*T}path {*cxs
T}the {*cxt 8:0}{*cxs TPAOEUL}file{*cxs -RBGS}
, {*cxs S}is {*cxt 9:0}{*cxs T}the {*cxs TPAOEUL}file {*cxs AT}at {*cxs THA}
that {*cxs PA*T}path{*cxs STPH}?cxds ~{*cxt 10:0}{*cxs TKUZ}cxsgnocap Does
{*cxs EUT}it {*cxt 11:0}{*cxs KP*EUS}exist{*cxs -RBGS}, {*cxs RAOEUGT}right
{*cxs STPH}?cxds ~{*cxs TP}cxsgnocap If{cxsgdelsteno1 {*cxt 12:0}{*cxs KWROU/*}cxsgdelsteno0}
{*cxs EUT} it {*cxs TPAOEUPBD}{*cxt 13:0}{*cxs
-S}finds {*cxs THA}that {*cxs PA*T}path {*cxs TPH}in {*cxt 14:0}{*cxs KWROUR}your
{*cxt 15:0}{*cxs RAOT}root {*cxs TKREBGT /REU}directory{*cxs -RBGS}, {*cxt 16:0}{*cxs
EUT}it {*cxs E/SEPBT/-RBL}{*cxt 17:0} {*cxs HREU}essentially{*cxt 18:0}{*cxs
TK-RB}~__ {*cxs WE}we {*cxs KAUL} call {*cxt 19:0}{*cxs AOT}another {*cxs
PHE/THOD}method {*cxt 20:0}{*cxs KH} which {*cxs RURPB/-S}returns {*cxs APB}an{cxsgdelsteno1
{*cxt 21:0}{*cxs O*BG/*}cxsgdelsteno0} {*cxs OFRPB}
o{*cxs K-FRPB}k {*cxt 22:0}{*cxs SPOPBS}response {*cxs SKP}and {*cxs RAED/THAS}
reads that {*cxt 23:0}{*cxs TPAOEUL}file {*cxs TO}to {*cxs KWROU}you{*cxs -FPLT
/HREU}. I will {*cxs SHOE}show {*cxt 24:0}{*cxs KWROU}you {*cxs WHA}what {*cxs T}
the {*cxs OFRBGS}O{*cxt 25:0}{*cxs K-FRBGS}K {*cxs SPOPBS}response {*cxs HRAOBG
/-S}looks {*cxs HRAOEUBG}like {*cxt 26:0}{*cxs SHORT/HREU}shortly{*cxs -FPLT}
.cxds ~{*cxs TP}cxsgnocap If {*cxs EUT}it {*cxt 27:0}{*cxs TKUPBT}doesn’t
{*cxs -RBGS}, {*cxt 28:0}{*cxs TP}if {*cxs EUT}it {*cxs RURPB/-S}returns {*cxs
A} a {*cxt 29:0}{*cxs TPHOT}Not {*cxt 31:0}{*cxs
TPOUPBD}Found{*cxs KAP}{*cxt 32:0} {*cxs 2#} {*cxs SPOPBS}response{*cxs
-FPLT}{*cxt 33:0}{*cxs SO}.cxds ~So , {*cxs THOEZ}those {*cxs R}are {*cxs
T}the {*cxs K-PB}{*cxt 34:0}{*cxs -S} conditions {*cxs WE}we {*cxs R}are {*cxs
HAPBD/-L}{*cxt 35:0}{*cxs -G}handling {*cxs AT}at {*cxs T}the {*cxs PHOEPLT}moment{*cxs
-FPLT}.cxds ~{*cxt 36:0} {*cxs SKP}cxsgnocap And {*cxt 38:0}{*cxs
TP-R}for {*cxt 39:0}{*cxs A}a {*cxs TP*UPBGS}{*cxt 40:0}
{*cxs A*L}functional {*cxs PRO/TK*UBGS}production{*cxs H-F}cxds _cxds {*cxt 41:0}
{*cxs RAED/KWREU}ready {*cxs H-FRBGS}H{*cxs T-FRBGS}T{*cxt 42:0}{*cxs T-FRBGS}
T{*cxs P-FRBGS}P {*cxs SEFRB/ER}server{*cxs -RBGS}, {*cxt 43:0}{*cxs KWR-PB}
you know {*cxs THA}that {*cxs K-PB}condition {*cxs K}can {*cxt 44:0}{*cxs TKPWO}
go{*cxs -RBGS}, {*cxs KWR-PB}you know{*cxt 45:0}{*cxs -RBGS}, {*cxs THR}there
{*cxt 46:0}{*cxs K}can {*cxs PW}be {*cxs A}a {*cxs TKEUFRPBT}different {*cxs TPHROE}
flow {*cxt 47:0}{*cxs TP-R}for {*cxs THA}that{*cxs -FPLT}.cxds ~{*cxs SKP}
cxsgnocap And {*cxs EUT}it {*cxs WOULD}would {*cxt 48:0}{*cxs SR}have {*cxs TO}
to {*cxs PW}be {*cxs A}a {*cxs HROT}lot {*cxs PH-R}more {*cxt 49:0}{*cxs EL
/TKPWAPBT}elegant {*cxt 50:0}{*cxs THAPB}than {*cxs THA}that{*cxs -FPLT}{*cxt 51:0}
{*cxs SO}.cxds ~So, {*cxt 52:0}{*cxs TH}this {*cxs S}is {*cxt 53:0}{*cxs
WHA} what {*cxs OUR}our {*cxs OFRBGS}O{*cxt
54:0}{*cxs K-FRBGS}K{*cxt 55:0}{*cxs U}
cxfc {*cxs SPOPBS}cxsgnocap Response {*cxs HRAOBG}{*cxt 56:0}{*cxs -S}looks
{*cxs HRAOEUBG}like{*cxs -FPLT}.cxds ~{*cxt 57:0}{*cxs E/SEPBT/-RBL/HREU}
cxsgnocap Essentially {*cxs PWAUZ}because {*cxt 58:0}{*cxs WE}we {*cxs TPHOE}
know {*cxs AEU/KORD/TOG}according to {*cxt 59:0}{*cxs H-FRBGS}H{*cxs T-FRBGS}
T{*cxs T-FRBGS}T{*cxs P-FRBGS}P {*cxt 42:0:0}{*cxs SP*EBG}spec {*cxs THA}that
{*cxs T}the {*cxs STA/TUS}status {*cxt 1:0}{*cxs KOED}code {*cxs TP-R}for
{*cxs APB}an {*cxt 2:0}{*cxs OFRBGS}O{*cxs K-FRBGS}K {*cxs SPOPBS}response
{*cxs S}is {*cxt 3:0}{*cxs 20#}20{*cxs 0#}0{*cxs -RBGS}, {*cxs WE/AOER}we’
re {*cxt 4:0}{*cxs SKWR*US}just {*cxs KWRAOUZ/-G}using {*cxs THA}that{*cxs -FPLT}
.cxds ~{*cxs SKP}cxsgnocap And {*cxt 5:0}{*cxs THEPB}then {*cxs WE}we {*cxs
R} are {*cxs ALS}also {*cxt 6:0}{*cxs SEPBD/-G}sending
{*cxs T}the {*cxs PWUD}{*cxt 7:0} {*cxs KWREU}buddy {*cxs TPR}from {*cxs
T}the {*cxt 8:0}{*cxs OFRBGS}O{*cxs K-FRBGS}
K {*cxs SPOPBS}response {*cxs TO}to{cxsgdelsteno1 {*cxt 9:0}{*cxs T/*}cxsgdelsteno0} {*cxs
OUR}our {*cxt 10:0} {*cxs SPOPBS}response {*cxs KHRASZ}class{*cxs
-RBGS}, {*cxt 11:0}{*cxs KH}which {*cxs EU}I {*cxs HR}will{cxsgdelsteno1
{*cxs SHOEL/*}cxsgdelsteno0} {*cxt 12:0}{*cxs SHOE}show {*cxs TO}
to {*cxs KWROU}you {*cxs TPH}in {*cxs A}a {*cxs PHEUPB}{*cxt 13:0}{*cxs TPHUT}
minute{*cxs -FPLT}.cxds ~{*cxt 14:0}{*cxs TH}cxsgnocap This {*cxs S}is {*cxs WHA}
what {*cxs T}the{*cxs U}cxfc {*cxt 15:0}{*cxs TPHOT}cxsgnocap Not{*cxs U}
cxfc {*cxs TPOUPBD}cxsgnocap Found {*cxt 16:0}{*cxs SPOPBS}response {*cxs HRAOBG
/-S}looks {*cxs HRAOEUBG}like{*cxt 17:0}{*cxs -FPLT}.cxds ~{*cxs T}cxsgnocap The
{*cxs U}cxfc {*cxs TPHOT}cxsgnocap Not{*cxt 18:0}{*cxs U}cxfc {*cxs TPOUPBD}
cxsgnocap Found {*cxt 19:0}{*cxs SPOPBS}response {*cxs SKWR*US}just {*cxs RURPB
/-S}returns {*cxt 20:0}{*cxs 40#}40{*cxs 4#}4 {*cxs SKP}and {*cxs EUT}it {*cxt
21:0} {*cxs TKUPBT}doesn’t {*cxs PWO*T/ER}bother
{*cxt 23:0}{*cxs TP-R}for {*cxs THA} that{*cxs -FPLT}.cxds ~{*cxt 24:0}{*cxs
SKP}cxsgnocap And {*cxt 25:0}{*cxs HAOER} here {*cxs S}is {*cxs WHA}what {*cxs
T}the {*cxt 26:0}{*cxs SPOPBS}response {*cxs KHRASZ}class {*cxs HRAOBG}{*cxt
27:0}{*cxs -S}looks {*cxs HRAOEUBG} like{*cxs -FPLT/SO}.cxds ~So, {*cxt
28:0}{*cxs HAOER}here{*cxs -RBGS}, {*cxs PWAUZ}
because {*cxt 29:0}{*cxs WE}we {*cxt 30:0}{*cxs HR-RD}already {*cxs TPHOE}
know {*cxt 32:0}{*cxs AEU/KORD/TOG}according to {*cxs T}the {*cxt 33:0}{*cxs H-FRBGS}
H{*cxs T-FRBGS}T{*cxs T-FRBGS}T{*cxs P-FRBGS}P {*cxt 34:0}{*cxs SP*EBG}spec
{*cxs T}the {*cxs STRUBG}{*cxt 35:0}{*cxs KHUR}structure {*cxs OF}of {*cxs WHA}
what {*cxt 36:0}{*cxs APB}an {*cxs H-FRBGS}H{*cxs T-FRBGS}T{*cxs T-FRBGS}T{*cxt 37:0}
{*cxs P-FRBGS}P {*cxs SPOPBS}response {*cxs SHOULD}should {*cxt 38:0}{*cxs
HRAOBG} look {*cxs HRAOEUBG}like{*cxs -FPLT}.cxds
~{*cxs WE}{*cxt 39:0}{*cxs AOER} cxsgnocap We’re {*cxt 40:0}{*cxs E/SEPBT}{*cxt
41:0}{*cxs -RBL/HREU}essentially {*cxt 43:0}{*cxs PEUBG/-G}picking {*cxs
T}the {*cxt 44:0}{*cxs KOER}core{*cxs -RBGS}
, {*cxt 45:0}{*cxs T}the {*cxs PWUD/KWREU}buddy{*cxs -RBGS}, {*cxs SKP}and
{*cxs KRAOE}{*cxt 46:0}{*cxs KWRAEUT/-G}creating {*cxs A}a {*cxs STREUPBG}
string {*cxs THA}that {*cxs HRAOBG/-S}looks {*cxt 47:0}{*cxs HRAOEUBG}like {*cxs
WHA} what {*cxs APB}an {*cxt 48:0}{*cxs H-FRBGS}H{*cxs
T-FRBGS}T{*cxs T-FRBGS}T{*cxs P-FRBGS} P {*cxs SPOPBS}response {*cxt 49:0}{*cxs
SHOULD}should {*cxs HRAOBG}look {*cxs HRAOEUBG}
like{*cxs -RBGS}, {*cxs PWU}but {*cxt 50:0}{*cxs WE}we {*cxs R}are {*cxs KWRAOUZ
/-G}using {*cxs THA}that {*cxs PWAEUS}{*cxt 51:0}{*cxs -D}based {*cxs OPB}on
{*cxs T}the {*cxs KW}request {*cxs THA}that {*cxs WE}{*cxt 52:0}{*cxs AO*EF}
we’ve {*cxs TKPWOT/-PB}gotten {*cxs TPR}from {*cxt 53:0}{*cxs OUR}our {*cxs SEFRB
/ER}server{*cxt 54:0}{*cxs -FPLT}.cxds ~{*cxt 55:0}{*cxs SKP}cxsgnocap And
{*cxt 56:0}{*cxs THEPB}then {*cxs WHEPB}when {*cxs WE}we {*cxs SR}have {*cxt 57:0}
{*cxs T}the {*cxt 58:0}{*cxs SPOPBS}response{*cxs -RBGS}, {*cxt 59:0}{*cxs WE}
we {*cxs SEPBD}send{cxsgdelsteno1 {*cxt 43:0:0}{*cxs PWABG}{*cxt 2:0}{*cxs *}cxsgdelsteno0}
{*cxs THA} that {*cxs PWABG}back {*cxt 3:0}{*cxs
TO}to {*cxs T}the {*cxs KHRAOEUPBT}client {*cxs -FPLT}.cxds ~{*cxt 4:0}{*cxs
SKP}cxsgnocap And {*cxt 5:0}{*cxs THA} that{*cxs AOES}’s {*cxs WHA}what {*cxt
6:0}{*cxs OUR}our {*cxt 7:0}{*cxs SPOPBS} response {*cxs KHRASZ}class {*cxs HRAOBG}{*cxt
8:0}{*cxs -S}looks {*cxs HRAOEUBG} like{*cxs -FPLT}.cxds ~{*cxt 10:0}{*cxs
P-F} parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0
cxfc {*cxs SO}cxsgnocap So{*cxs -RBGS}, {*cxt 11:0}{*cxs TH}this {*cxs S}
is {*cxt 12:0}{*cxs WHA}what {*cxs T}the {*cxs TPUL}full {*cxt 13:0}{*cxs THEUPBG}
thing {*cxs HRAOBG/-S}looks {*cxs HRAOEUBG}like {*cxt 14:0}{*cxs TP}if {*cxs KWROU}
you {*cxs PUT}put {*cxs AUL}all {*cxt 15:0}{*cxs OF}of {*cxs T}the {*cxt 16:0}
{*cxs KOED}code {*cxs EU/AO*EF}I’ve {*cxt 17:0}{*cxs SKWR*US}just {*cxs SHOE
/-D}showed {*cxt 18:0}{*cxs KWROU}you{*cxs -FPLT}.cxds ~{*cxt 19:0}{*cxs KWRAE}
cxsgnocap Yeah{*cxs -FPLT}.cxds ~{*cxs TH}cxsgnocap This {*cxs S}is {*cxs WHA}
what {*cxs T}the {*cxt 20:0}{*cxs TPUL}full {*cxs THEUPBG}thing {*cxs HRAOBG
/-S}looks {*cxt 21:0}{*cxs HRAOEUBG}like{*cxs -FPLT}.cxds ~{*cxs WE/AOER}cxsgnocap
We ‘re{cxsgdelsteno1 {*cxt 22:0}{*cxs RE/KWAOEUR/-G}{*cxt
23:0}{*cxs */*/*}{*cxt 24:0}{*cxs RE /EU/KWAOEUR/-G}{*cxt 25:0}{*cxs */*/*}{*cxt
26:0}{*cxs *}cxsgdelsteno0} {*cxs RE/KWAOEUR /-G}requiring {*cxs T}the {*cxt 27:0}{*cxs
SOBGT}socket {*cxs TPR}from {*cxs T} the {*cxs ST*D}stdlib{*cxt 28:0}{*cxs
-FPLT}.cxds ~{*cxs AUL}cxsgnocap All {*cxt 29:0}{*cxs OF}of {*cxs THOEZ}those
{*cxs PHE/THOD}{*cxt 30:0}{*cxs -S} methods {*cxs THA}that {*cxs EU}I {*cxs
SHOE}{*cxt 31:0}{*cxs -D}showed {*cxs TO}
to {*cxs KWROU}you {*cxs ERL}{*cxt 32:0}{*cxs KWRER}earlier{*cxs -RBGS}, {*cxs EU}
I {*cxs EBGS}excxds {*cxs TRABGT}{*cxt 33:0}{*cxs -D}tracted {*cxs THEPL}
them {*cxs SPWAO}into {*cxs A}a {*cxs KHRASZ}class {*cxt 34:0}{*cxs KAUL/-D}
called {*cxs H-FRBGS}H{*cxs T-FRBGS}T{*cxs T-FRBGS}T{*cxt 35:0}{*cxs P-FRBGS}
P {*cxs KW}request {*cxt 36:0}{*cxs PARS/ER}parser{*cxs -FPLT}.cxds ~{*cxs
SKP} cxsgnocap And {*cxs THEPB}then {*cxt
37:0}{*cxs EU}I{*cxs -RBGS}, {*cxt 38:0} {*cxs KWR-PB}you know{*cxs -RBGS}, {*cxs
EBGS}excxds {*cxs TRABGT}{*cxt 39:0} {*cxs -D}tracted {*cxs T}the {*cxs SPOPBS}response
{*cxs SPWAO}into {*cxt 40:0} {*cxs AOT}another {*cxs KHRASZ}class{*cxs
-RBGS}, {*cxs SKP}and {*cxt 41:0} {*cxs THEPB}then{*cxt 42:0}{*cxs -RBGS},
{*cxs KWR-PB}you know{*cxs -RBGS}, {*cxt 44:0}{*cxs WE}we {*cxs R}are{cxsgdelsteno1
{*cxt 45:0}{*cxs AOEURBL/AOEUZ/*}{*cxt 46:0}
{*cxs *}cxsgdelsteno0} {*cxs TPHEURBL/AOEUZ}{*cxt 47:0}{*cxs -G}initializing {*cxs OUR}our
{*cxs SEFRB/ER}server {*cxs SKP}and {*cxt 48:0}{*cxs PWAOEUPBD/-G}binding {*cxs
EUT} it {*cxs TO}to {*cxt 49:0}{*cxs PORT}port
{*cxs 50#}50{*cxt 50:0}{*cxs 0#} 0{*cxs 0#}0{*cxs -RBGS}, {*cxt 51:0}{*cxs
HR-PB/-G}listening{cxsgdelsteno1 {*cxs TO/*}cxsgdelsteno0} {*cxt 52:0}
{*cxs TP-R}for {*cxs K*EBGS}connection{*cxs -RBGS}, {*cxs RAED}{*cxt 53:0}
{*cxs -G}reading {*cxs *EFRG}everything {*cxs THA}that {*cxs HEUT/-S}hits {*cxt
54:0} {*cxs OUR}our {*cxs K*EBGS}connection
{*cxt 55:0}{*cxs AZ}as {*cxs A}a {*cxs KW}
request{*cxt 56:0}{*cxs -RBGS}, {*cxs KRAOE/KWRAEUT/-G}creating {*cxt 57:0}
{*cxs A}a {*cxs KWRAOUZ}{*cxt 58:0}{*cxs -BL}usable{cxsgdelsteno1 {*cxs SKW}{*cxt
59:0} {*cxs *}cxsgdelsteno0} {*cxs KW}request
{*cxs TPR}from {*cxs THA}that{*cxt 44:0:0}{*cxs -RBGS}
, {*cxs TAEUBG/-G}taking {*cxs THA}that {*cxt 1:0}{*cxs KW}request{*cxs -RBGS}
, {*cxs SEPBD/-G}sending {*cxt 2:0}{*cxs EUT}it {*cxs TO}to {*cxs OUR}our {*cxt
3:0} {*cxs SPOPBS}response {*cxs KHRASZ}class
{*cxt 4:0}{*cxs SO}so {*cxs THA}that {*cxs OUR}our {*cxs SPOPBS}response {*cxt
5:0}{*cxs KHRASZ}class {*cxs K}can {*cxs PARS}parse {*cxt 6:0}{*cxs THA}that{cxsgdelsteno1
{*cxs PRORP}{*cxt 7:0}{*cxs *} cxsgdelsteno0} {*cxs PROP/ER/HREU}properly{*cxt
8:0}{*cxs -RBGS}, {*cxs SKP}and {*cxs WE}
we {*cxs TAEUBG}take {*cxs THA}that {*cxs SPOPBS}response {*cxt 9:0}{*cxs SKP}
and {*cxs SEPBD}send {*cxs EUT}it {*cxs PWABG}back {*cxs TO}to {*cxt 10:0}{*cxs
T} the {*cxs KHRAOEUPBT}client {*cxs SKP}and
{*cxs THEPB}then {*cxs WE}we {*cxt 11:0} {*cxs KHROEZ}close {*cxs T}the {*cxs
KHRAOEUPBT}client{*cxs -FPLT}.cxds ~{*cxs SKP}
cxsgnocap And{cxsgdelsteno1 {*cxt 12:0}{*cxs T/THA/AOES}{*cxt 13:0}{*cxs */*/*}cxsgdelsteno0}
{*cxs THA} that{*cxs AOES}’s {*cxt 14:0}{*cxs T}the
{*cxs SEUPL/P-L}simple {*cxs TPHROE} flow {*cxs TP-R}for {*cxt 15:0}{*cxs
EUFRP/HREPLT/-G}implementing {*cxt 16:0} {*cxs APB}an {*cxs H-FRBGS}H{*cxs T-FRBGS}T{*cxs
T-FRBGS}T{*cxs P-FRBGS}P {*cxt 17:0} {*cxs SEFRB/ER}server{*cxs -FPLT}{*cxt
18:0}{*cxs SO}.cxds ~So, {*cxs WHA} what {*cxs EU}I {*cxs WAPBT}want {*cxs
TO}to {*cxs TKO}do {*cxt 19:0}{*cxs TPHOU}
now {*cxs S}is{*cxt 20:0}{*cxs TK-RB}~__ {*cxs HRET}let{*cxs AOES}’s {*cxt 21:0}
{*cxs SAOE}see{*cxs -FPLT}.cxds ~{*cxs EU}I {*cxs WAPBT}want {*cxs TO}to {*cxt
22:0} {*cxs RUPB}run {*cxs TH}this {*cxs SKP}and
{*cxt 24:0}{*cxs SHOE}show {*cxt 25:0} {*cxs KWROU}you{*cxs -RBGS}, {*cxs KWR-PB}you
know{*cxs -RBGS}, {*cxt 27:0} {*cxs WHA}what {*cxs TH}this {*cxt 28:0}{*cxs
HRAOBG/-S}looks {*cxs HRAOEUBG} like{*cxs -RBGS}, {*cxt 29:0}{*cxs WHA}what
{*cxs WE}we {*cxs SR}have {*cxs EUFRP /HREPLT}{*cxt 30:0}{*cxs -D}implemented
{*cxs SO}so {*cxs TPAR}far{*cxs -FPLT} .cxds ~{cxsgdelsteno1 {*cxt 44:0}{*cxs
PWHR-RT/*}cxsgdelsteno0}{*cxs HR-RT}cxsgnocap All right{*cxs -FPLT}
.cxds ~{*cxt 45:0}{*cxs SHOE/-G}cxsgnocap Showing {*cxs KWROU}you {*cxs TKPWEPB}
again {*cxt 46:0}{*cxs WHA}what {*cxs EU}I {*cxs SR}have {*cxs TKEUS}discxds
{*cxs PHRAEU/-D}played {*cxs TPH}in {*cxt 47:0}{*cxs T}the {*cxs SHRAOEUD/-S}
slides{*cxs -FPLT}.cxds ~{*cxt 49:0}{*cxs TH}cxsgnocap This {*cxs S}is {*cxs TPH}
in {*cxt 50:0}{*cxs SEFRB/ER}server{*cxt 51:0}{*cxs SKWR}cxds .cxds {*cxs R-FRPB}
r{*cxs PW-FRPB}b{*cxs -FPLT}{*cxt 52:0}{*cxs SO}.cxds ~So, {*cxs WHEPB}when
{*cxs WE}we {*cxs RUPB}run {*cxs TH}this{*cxt 53:0}{*cxs HR*EUPS}… {*cxt 45:3:0}
{*cxs RAOUB/KWREU}ruby {*cxt 5:0}{*cxs SEFRB/ER}server{*cxs SKWR}cxds .cxds
{*cxs R-FRPB}r{*cxt 6:0}{*cxs PW-FRPB}b{*cxs -FPLT}.cxds ~{*cxs WE}cxsgnocap We
{*cxs SR}have {*cxt 7:0}{*cxs START/-D}started {*cxs OUR}our {*cxs SEFRB}{*cxt 8:0}
{*cxs ER}server{*cxs -FPLT}.cxds ~{*cxs EUT}cxsgnocap It {*cxs RUPB}{*cxt 9:0}
{*cxs -S}runs {*cxs WHAFR}whatever {*cxs EUT}it {*cxs S}is {*cxt 10:0}{*cxs TPH}
in {*cxs T}the {*cxt 11:0}{*cxs SEFRB/ER}server{*cxt 12:0}{*cxs SKWR}cxds
.cxds {*cxt 13:0}{*cxs R-FRPB}r{*cxs PW-FRPB}b {*cxt 14:0}{*cxs SKP}and {*cxs
WE} we {*cxs SR}have {*cxt 15:0}{*cxs PWOUPBD}bound
{*cxs TO}to {*cxs PORT}port {*cxs 50#}50{*cxt 16:0}{*cxs 0#}0{*cxs
0#}0{*cxs -RBGS}, {*cxt 17:0}{*cxs SKP} and {*cxs EUT}it{*cxs AOES}’s {*cxs
SKWR*US}just {*cxs WAEUT/-G}waiting {*cxt 18:0}
{*cxs TP-R}for {*cxs A}a {*cxs K*EBGS}connection{*cxs -FPLT}.cxds ~{*cxs SKP}
cxsgnocap And {*cxs EUT}it {*cxt 19:0}{*cxs HR}will {*cxs KAOEP}keep {*cxt 20:0}
{*cxs WAEUT/-G}waiting {*cxs UPB}{*cxt 21:0}{*cxs TEUL}until {*cxs WE}we {*cxs
PHAEUBG} make {*cxs A}a {*cxs KW}request {*cxt
22:0}{*cxs TO}to {*cxs EPBD}end{*cxs -FPLT}
.cxds ~{*cxs HRET}cxsgnocap Let{*cxt 23:0}{*cxs AOES}’s {*cxs PHAEUBG}make
{*cxs A}a {*cxs KW}request {*cxs TO}to {*cxt 24:0}{*cxs EPBD}end{*cxs -FPLT}
.cxds ~{*cxs P-F} parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0
cxfc {*cxs EU}I {*cxs WAPBT}want {*cxs TO}to {*cxt 25:0}{*cxs KAUL}call
{*cxt 29:0}{*cxs HROE/KAL}local{*cxs H}cxds {*cxt 30:0}{*cxs HO*ES}host{*cxt
31:0} {*cxs K-BG}cxds :cxds {*cxt 32:0}{*cxs
5#}5{*cxs 0#}0{*cxt 33:0}{*cxs 0#} 0{*cxs 0#}0 {*cxt 37:0}{*cxs P-F}
parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0 cxfc {*cxs KWRAE}cxsgnocap Yeah{*cxs
-FPLT/SO}.cxds ~So, {*cxt 38:0}{*cxs WHEPB}
when {*cxs KWROU}you {*cxs KAUL}call {*cxt 39:0}{*cxs HROE/KAL}local{*cxs H}
cxds {*cxs HO*ES}host{*cxt 40:0}{*cxs K-BG}cxds :cxds {*cxt 41:0}{*cxs 50#}
50{*cxs 0#}0{*cxs 0#}0{*cxs -RBGS}, {*cxt 42:0}{*cxs THA}that{*cxs AOES}’s
{*cxs WHA}what{*cxs AOES}’s {*cxs HAP}{*cxt 43:0}{*cxs -G}happening{*cxs -FPLT}
.cxds ~{*cxs KWR-PB}cxsgnocap You know{*cxs STPH}?cxds ~{*cxs KWROU}cxsgnocap You
{*cxt 44:0}{*cxs SR}have {*cxs T}the {*cxt 46:0}{*cxs H-FRBGS}H{*cxs T-FRBGS}
T{*cxt 47:0}{*cxs T-FRBGS}T{*cxs P-FRBGS}P {*cxs KW}request {*cxt 48:0}{*cxs AT}
at {*cxt 49:0}{*cxs T}the {*cxs TOP}top{*cxs -RBGS}, {*cxs SKP}and {*cxt 51:0}
{*cxs THEPB}then{cxsgdelsteno1 {*cxs KWROU}{*cxt 52:0}{*cxs *}cxsgdelsteno0}
{*cxt 53:0}{*cxs PWE/TPHAO*ET} beneath {*cxt 54:0}{*cxs THA}that {*cxs
KWROU}you {*cxs SR}have {*cxs T}the {*cxs HED}{*cxt 55:0}{*cxs ER}header{*cxs
-RBGS}, {*cxs KH}which {*cxs S} is {*cxs WHA}what {*cxs WE}we {*cxs
SR}have {*cxt 56:0}{*cxs TPH}in {*cxs OUR}
our {*cxs EUPB/TKEBGS}index {*cxt 57:0}{*cxs PAEUPBLG}page{*cxs -FPLT/SO}.cxds
~So, {*cxs TP}if {*cxs EU}I {*cxt 58:0}{*cxs WAPBT}want {*cxt 59:0}{*cxs TO}
to{*cxs TK-RB}~__ {*cxs HRET}let {*cxs PHE}me {*cxt 46:0:0}{*cxs SAOE}see
{*cxs TP}if {*cxs EU}I {*cxs K}can{*cxs TK-RB}~__ {*cxt 1:0}{*cxs THA}
that {*cxs S}is {*cxs KWRAOUZ/-G}using {*cxs KAUL}call{*cxt 2:0}{*cxs -FPLT}
.cxds ~{*cxs HRET}cxsgnocap Let{*cxs AOES}’s {*cxs SAOE}see {*cxt 3:0}{*cxs
WHA} what {*cxs THA}that {*cxs HRAOBG/-S}looks
{*cxs HRAOEUBG}like {*cxt 5:0}{*cxs OPB}
on {*cxs A}a {*cxs PWROUZ}{*cxt 6:0}{*cxs ER}browser{*cxs HR*EUPS}… {*cxt 23:0}
{*cxs P-F} parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0
cxfc {*cxs O*BG}cxsgnocap Okay{*cxs -FPLT}.cxds ~{*cxt 38:0}{*cxs KWRAE}
cxsgnocap Yeah{*cxs -FPLT}{*cxt 39:0}{*cxs SO}.cxds ~So, {*cxs KWROU}you
{*cxs SR}have {*cxs T}the{*cxt 40:0}{*cxs U}cxfc {*cxs HEL}{*cxt 41:0}
{*cxs HROE}cxsgnocap Hello{*cxs U}cxfc {*cxs WORLD}cxsgnocap World{*cxs -FPLT}
.cxds ~{*cxt 42:0}{*cxs EU}I {*cxs SR}have {*cxs AOT}another {*cxt 43:0}
{*cxs TPAOEUL}file {*cxs TPH}in {*cxs THR}there {*cxs THA}that {*cxs S}is{*cxt
44:0} {*cxs U}cxfc {*cxt 45:0}{*cxs HEL/HROE}cxsgnocap
Hello {*cxs WORLD}world{*cxt 46:0} {*cxs TK-RB}~__ {*cxt 47:0}{*cxs
WHA}what{*cxs AOES}’s {*cxs THA}that{*cxs STPH}
?cxds ~{*cxt 50:0}{*cxs HEL/HROE}cxsgnocap Hello{*cxt 51:0}{*cxs SKWR}cxds
.cxds {*cxs T-FRPB}t{*cxs KP-FRPB}x{*cxt 52:0}{*cxs T-FRPB}t{*cxs -RBGS},
{*cxs EU}I {*cxs THEU}think{*cxs STPH}?cxds ~{*cxt 55:0}{*cxs SO}cxsgnocap So
{*cxs THA}that{*cxs AOES}’s {*cxt 56:0}{*cxs TKEUS}discxds {*cxs PHRAEU/-G}
playing {*cxt 57:0}{*cxs HEL/HROE}hello{*cxs SKWR}cxds .cxds {*cxt 58:0}{*cxs T-FRPB}
t{*cxs KP-FRPB}x{*cxs T-FRPB}t{*cxs SKP-RBGS}, and {*cxt 59:0}{*cxs THA}that
{*cxs AOES}’s {*cxs OPB}on {*cxs T}the {*cxs SEFRB/ER}server{*cxt 47:0:0}{*cxs
-FPLT} .cxds ~{*cxs EUT}cxsgnocap It{cxsgdelsteno1
{*cxs AOEUS/*}cxsgdelsteno0}{*cxt 1:0}{*cxs AOES}’s {*cxs PWAEUS
/KHREU}basically {*cxs T}the {*cxt 2:0}{*cxs SAEUPL}same {*cxs THEUPBG}thing
{*cxt 4:0}{*cxs AZ}as {*cxs T}the {*cxs RULT/-S}results{*cxt 5:0}{*cxs -FPLT}
.cxds ~{*cxs THA}cxsgnocap That {*cxs KP*EUS}{*cxt 6:0}{*cxs -S}exists {*cxs
TPH} in {*cxs OUR}our {*cxs SEFRB/ER}server
{*cxt 7:0}{*cxs RAOT}root {*cxs PA*T} path{*cxs -FPLT}.cxds ~{*cxt 8:0}{*cxs
THR}cxsgnocap There {*cxs S}is {*cxs WUPB}
one {*cxs PH-R}more {*cxt 9:0}{*cxs THEUPBG}thing {*cxs THA}that {*cxs EU}I
{*cxs HR}will {*cxt 10:0}{*cxs SPHRAEUPB}explain {*cxs TPH}in {*cxs A}a {*cxs PWEUT}
bit{*cxt 11:0}{*cxs -FPLT}.cxds ~{*cxs WE}cxsgnocap We {*cxs SR}have{*cxt 12:0}
{*cxs TK-RB}~__ {*cxt 13:0}{*cxs EU}I {*cxs SR}have {*cxt 14:0}{*cxs
A} a {*cxs HEL/HROE}{cxsgdelsteno1 {*cxs
SKWR}{*cxt 15:0}{*cxs R-FRPB/*}{*cxt 17:0}{*cxs RAOUB
/KWREU}cxsgdelsteno0}{*cxs}hello.rb{*cxt 18:0}{*cxs -RBGS}, {*cxs SO}so {*cxs
KWROU}you {*cxs K} can {*cxt 19:0}{*cxs EBGS/KAOUT}execute
{*cxs RAO*UB}Ruby {*cxs TP}if {*cxt 20:0}
{*cxs T}the {*cxs TPAOEUL}file {*cxs S}is {*cxs EBGS/KAOUT}{*cxt 21:0}{*cxs
-BL} executable {*cxs OPB}on {*cxs KWROUR}your
{*cxt 22:0}{*cxs RAOT}root {*cxs TKREBGT /REU}directory{*cxt 23:0}{*cxs -FPLT/SO}.cxds
~So, {*cxs HRET}let {*cxs PHE} me {*cxs SHOE}show {*cxt 24:0}{*cxs
KWROU}you {*cxs THA}that{*cxs -FPLT}{*cxt 26:0}
{*cxs SO}.cxds ~So, {*cxt 27:0}{*cxs EU}I {*cxs SR}have {*cxt 29:0}{*cxs
-9#} 9{*cxs PHR*S}cxds +cxds {*cxt 30:0}{*cxs
2#}2 {*cxt 31:0}{*cxs THR}there {*cxt 32:0}{*cxs -RBGS}, {*cxs SKP}and
{*cxs THA}that {*cxs S}is {*cxt 33:0} {*cxs SRAL/HREUD}valid {*cxs TO}to {*cxs
1#}1{*cxt 34:0}{*cxs 1#}1{*cxs -FPLT /SO}.cxds ~So, {*cxs HRET}let{*cxs AOES}’s
{*cxt 35:0}{*cxs TKPWO}go {*cxs PWABG} back {*cxs TO}to {*cxs T}the {*cxs SHRAOEUD}{*cxt
36:0}{*cxs -SZ}slides{*cxs HR*EUPS} … {*cxt 43:0}{*cxs P-F}
parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0 cxfc {*cxs EU}I {*cxt 44:0}{*cxs WAPBT}want
{*cxs TO}to {*cxs PHEUPB/PHAOEUZ} minimize {*cxt 45:0}{*cxs THA}that{*cxs
HR*EUPS}… {*cxt 58:0}{*cxs OE}oh {*cxt 59:0}{*cxs -RBGS}, {*cxs SOR/REU}sorry{cxsgdelsteno1
{*cxs SKHRAPL}{*cxt 48:0:0}{*cxs *} cxsgdelsteno0}{*cxs -FPLT}.cxds ~{*cxt
22:0}{*cxs O*BG}cxsgnocap Okay{*cxs -FPLT}.cxds ~{*cxt 24:0}{*cxs UPL}cxsgnocap Um{*cxs
HR*EUPS}… {*cxt 25:0}{*cxs THA} that{*cxs AOES}’s {*cxs TPHOT}not {*cxt
26:0}{*cxs SHOE/-G}showing {*cxs KWRET} yet{*cxs HR*EUPS}… {*cxt 39:0}{*cxs
WR}where {*cxs WUZ}was {*cxs EU}I{*cxt 40:0}
{*cxs STPH}?cxds ~{*cxs HR-RT}cxsgnocap All right{*cxs -FPLT}.cxds ~{*cxt 42:0}
{*cxs KAOL}cxsgnocap Cool{*cxs -RBGS}, {*cxt 43:0}{*cxs KWRAE}yeah{*cxs -FPLT
/SO}.cxds ~So, {*cxs EU}I {*cxs SKWR*US}just {*cxt 44:0}{*cxs SHOE/-D}showed
{*cxs KWROU}you {*cxs A}a {*cxt 45:0}{*cxs TKE/PHOE}demo {*cxs OF}of {*cxs WHA}
what {*cxt 46:0}{*cxs THA}that {*cxs TKUZ}does {*cxs WHEPB}when {*cxt 47:0}
{*cxs KWROU}you {*cxs RUPB}run {*cxs THA}that{*cxs -FPLT}.cxds ~{*cxt 49:0}
{*cxs TPHOU}cxsgnocap Now {*cxt 50:0}{*cxs THA}that {*cxs WE}we {*cxs SR}have
{*cxt 51:0}{*cxs TK-RB}~__ {*cxs KWROU}you {*cxs K}can {*cxs SAOE}see {*cxt
52:0} {*cxs WE}we {*cxs SR}have {*cxs OUR}our
{*cxt 53:0}{*cxs SEFRB/ER}server {*cxs HAPBD
/-L}{*cxt 54:0}{*cxs -G}handling {*cxs PWAEUS/EUBG}basic {*cxt 55:0}{*cxs RE
/SOURS}resource {*cxt 56:0}{*cxs TPEFP/-G}fetching{*cxs -FPLT}.cxds ~{*cxt 57:0}
{*cxs EU}I {*cxs TPOR}forcxds {*cxs TKPWOT}got {*cxs TO}to {*cxs SHOE}show
{*cxt 58:0}{*cxs KWROU}you {*cxs TP}if {*cxs WE}we {*cxs KW}request{cxsgdelsteno1
{*cxt 59:0} {*cxs TP-R/*}{*cxt 49:0:0}{*cxs 40#/4#}{*cxt
1:0}{*cxs */*}cxsgdelsteno0} {*cxs TP-R} for {*cxs A}a {*cxs TPAOEUL}file {*cxs
THA}that {*cxt 2:0}{*cxs TKUPBT}doesn ‘t {*cxs KP*EUS}exist{*cxt 3:0}{*cxs
-RBGS}, {*cxs EUT}it {*cxs HR}will {*cxs HAPBD
/-L}handle {*cxs THA}that {*cxt 4:0}{*cxs SKP}and {*cxs SHOE}show {*cxs KWROU}
you {*cxs 40#}40{*cxt 5:0}{*cxs 4#}4{*cxs -RBGS},{*cxt 6:0}{*cxs U}cxfc
{*cxs TPHOT}cxsgnocap Not{*cxs U}cxfc {*cxt 7:0}{*cxs TPOUPBD}cxsgnocap Found
{*cxs -FPLT}.cxds ~{*cxs TP}cxsgnocap If {*cxs KWROU}you {*cxs WAPBT}want
{*cxs TO}to {*cxt 8:0}{*cxs TKPWET}get{*cxs TK-RB}~__{cxsgdelsteno1 {*cxt 9:0}{*cxs
TP /*}cxsgdelsteno0} {*cxs THR}there {*cxs
R}are {*cxt 10:0}{*cxs A}a {*cxs TPAOU}few {*cxt 11:0}
{*cxs O*ER}other {*cxs THEUPBG/-S}things {*cxs WE}we {*cxs K}can {*cxt 12:0}
{*cxs TKO}do{*cxs -FPLT}.cxds ~{*cxs WE}cxsgnocap We {*cxs K}can {*cxs TKPWET}
get {*cxt 13:0}{*cxs A}a {*cxs HREUT/-L}little {*cxs APL}{*cxt 14:0}{*cxs PWEURBS}
ambitious{*cxs -FPLT}.cxds ~{*cxs EU}I {*cxs HR-RD}already {*cxs SHOE}{*cxt
15:0} {*cxs -D}showed {*cxs KWROU}you {*cxs
THA}that{*cxs -FPLT}.cxds ~{*cxs WE} cxsgnocap We {*cxt 16:0}{*cxs K}can {*cxs
PHAEUBG}make {*cxs OUR}our {*cxt 17:0} {*cxs SEFRB/ER}server {*cxs EBGS/KAOUT}execute
{*cxt 18:0}{*cxs A}a {*cxs RAO*UB} Ruby {*cxs TPAOEUL}file{*cxs -FPLT}.cxds
~{*cxs SKP}cxsgnocap And {*cxt 19:0} {*cxs WE}we {*cxs K}can {*cxs ALS}also
{*cxt 20:0}{*cxs PHAEUBG}make {*cxs OUR}
our {*cxs SEFRB/ER}server {*cxt 21:0}{*cxs PARS}parse {*cxs A}a {*cxs KWAOER
/REU}query{*cxt 22:0}{*cxs -FPLT/SO}.cxds ~So, {*cxt 23:0}{*cxs HOU}how {*cxt
25:0} {*cxs HR}will {*cxs KWROU}you{*cxt 26:0}{*cxs
-RBGS}, {*cxs KWR-PB}you know {*cxs -RBGS}, {*cxt 27:0}{*cxs TKWOP}develop
{*cxs KWROUR}your {*cxs SEFRB /ER}server{*cxt 28:0}{*cxs -RBGS}, {*cxs
HRAOEUBG}like {*cxs PHOD/TPEU}modify {*cxs WHA}what {*cxt 29:0}{*cxs EU}I
{*cxs SR}have {*cxs SKWR*US}just {*cxt 30:0}
{*cxs SHOUPB}shown {*cxs KWROU}you {*cxs TO}to{cxsgdelsteno1 {*cxt 31:0}{*cxs
PARS/*}cxsgdelsteno0} {*cxt 32:0} {*cxs PARS}parse {*cxs A}a {*cxs KWAOER/REU}query
{*cxs SO}so {*cxt 33:0}{*cxs THA} that {*cxs EUT}it {*cxs UPBS/-S}understands
{*cxs THA}that {*cxt 34:0}{*cxs TH} this {*cxs PHRAR}particular {*cxt 35:0}{*cxs
PART}part {*cxs THA}that {*cxs KWROU} you {*cxt 36:0}{*cxs SKWR*US}just {*cxs
KW-D}requested {*cxs TP-R}for {*cxt 37:0} {*cxs HAZ}has {*cxs A}a {*cxs KWAOER/REU}query{*cxt
38:0}{*cxs -RBGS}, {*cxs SKP} and {*cxs HOU}how {*cxs WOULD}would {*cxs
KWROU}you {*cxt 39:0}{*cxs HAPBD /-L}handle {*cxs THA}that {*cxs KWAOER/REU}query{*cxs
STPH}?cxds ~{*cxt 40:0} {*cxs TO}cxsgnocap To {*cxs EBGS/KAOUT}execute
{*cxs A}a {*cxt 41:0}{*cxs RAO*UB} Ruby {*cxs TPAOEUL}file{*cxt 42:0}{*cxs
-RBGS}, {*cxs KWROU}you {*cxs K}can {*cxt 43:0}{*cxs PHOD/TPEU}modify {*cxt
44:0}{*cxs THA}that {*cxt 45:0}{*cxs STPHEUPT}
snippet {*cxs OF}of {*cxs KOED}code {*cxs EU}I {*cxs SR}have {*cxt 46:0}{*cxs
SKP} and {*cxs E/SEPBT}{*cxt 47:0}{*cxs -RBL/HREU}essentially
{*cxs KHEBG}check {*cxt 48:0}{*cxs TP}if {*cxs THA}that
{*cxs TPAOEUL}file {*cxs S}is {*cxs EBGS}{*cxt 49:0}
{*cxs KAOUT/-BL}executable{*cxs -FPLT/SO}.cxds ~So, {*cxt 50:0}{*cxs SKWR*US}
just {*cxt 51:0}{*cxs STRAEUGT/TPWRARD}straightforward{*cxt 52:0}{*cxs -RBGS}
, {*cxs KWROU}you {*cxt 53:0}{*cxs SR}have {*cxs T}the {*cxs TPAOEUL}file{*cxt
54:0} {*cxs SKWR}cxds .cxds {*cxs EBGS/KAOUT/-BL}executable
{*cxt 55:0}{*cxs PHE /THOD}method {*cxs OPB}on {*cxs T}the
{*cxs TPAOEUL}file {*cxt 56:0}{*cxs KHRASZ}
class{*cxs -FPLT}.cxds ~{*cxt 57:0}{*cxs KHEBG}cxsgnocap Check {*cxs TP}if
{*cxs EUT}it {*cxs S}is {*cxt 58:0}{*cxs EBGS/KAOUT/-BL}executable {*cxs SKP}
and {*cxt 59:0}{*cxs TP}if {*cxs EUT}it {*cxs S}is{*cxs -RBGS}, {*cxt 50:0:0}
{*cxs KWRAOUZ}use {*cxs T}the {*cxs PA*T}path {*cxt 1:0}{*cxs TO}to {*cxs
EBGS /KAOUT}execute {*cxs THA}that{*cxt 2:0}{*cxs
-FPLT}.cxds ~{*cxt 3:0}{*cxs SKP} cxsgnocap And {*cxs TP}if {*cxs EUT}it{*cxs
AOES}’s {*cxt 4:0}{*cxs TPHOT} not{*cxs -RBGS}, {*cxs KWROU}you {*cxs
TKO}do {*cxs T}the {*cxt 5:0}{*cxs REG} regular {*cxt 6:0}{*cxs TPAOEUL}file{*cxs
SKWR}cxds .cxds {*cxt 7:0}{*cxs PWEUPB} bin{*cxs H}cxds {*cxt 8:0}{*cxs RAED}read
{*cxs THA}that {*cxs WE}we {*cxs SR} have {*cxs PW-PB}been {*cxt 9:0}{*cxs
TKOEUPBG}doing {*cxs SKP}and {*cxs SKWR*US} just {*cxs PWAEUS}{*cxt 10:0}{*cxs KHREU}basically
{*cxs RAED}read {*cxs THA} that {*cxs TPAOEUL}file {*cxt 11:0}{*cxs
SKP}and {*cxs RURPB}return {*cxs EUT} it{*cxs -FPLT}.cxds ~{*cxt 12:0}{*cxs
P-F} parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0
cxfc {*cxs TP-R}cxsgnocap For {*cxt 13:0}{*cxs PARS/-G}parsing {*cxs A}
a {*cxs KWAOER/REU}query{*cxt 14:0}{*cxs -RBGS}, {*cxs WE}we {*cxs TPHAOED}
need {*cxt 15:0}{*cxs TO}to {*cxs PHOD/TPEU}modify{*cxt 16:0}{*cxs TK-RB}~
__ {*cxs TP}if {*cxs KWROU}you {*cxs REB}remember {*cxs OUR}our {*cxt 17:0}
{*cxs KWAOER/REU}query {*cxs PARS/ER}parser {*cxt 18:0}{*cxs PHE/THOD}method
{*cxs -RBGS}, {*cxs WE}we {*cxs TPHAOED}need {*cxt 19:0}{*cxs TO}to {*cxs PHOD
/TPEU}modify {*cxs THA}that {*cxs SKWR*US}just {*cxt 20:0}{*cxs A}a {*cxs HREUT
/-L}little {*cxs PWEUT}bit {*cxt 21:0}{*cxs PWAUZ}because {*cxs WE}we {*cxs TPHOE}
know {*cxs THA}that {*cxt 24:0}{*cxs AEU/KORD/TOG}according to {*cxt 25:0}{*cxs
T} the {*cxs H-FRBGS}H{*cxs T-FRBGS}T{*cxs
T-FRBGS}T{*cxt 26:0}{*cxs P-FRBGS}P {*cxs SP*EBG}spec{*cxs -RBGS}, {*cxt
27:0}{*cxs WHEPB}when {*cxs EUT}it {*cxt 30:0}
{*cxs HAZ}has {*cxs A}a {*cxt 31:0}{*cxs KWE}question {*cxs PHARBG}mark {*cxt 32:0}
{*cxs SAOEUPB}sign{*cxs -RBGS}, {*cxs SEUT}sit {*cxs A}a {*cxt 33:0}{*cxs
KWAOER /REU}query{*cxs -FPLT}.cxds ~{*cxs WE}cxsgnocap
We {*cxs SR}have {*cxt 34:0} {*cxs AEU/TKPWRAOE/-D}agreed {*cxs THA}that{cxsgdelsteno1
{*cxt 35:0}{*cxs THAO/*}cxsgdelsteno0} {*cxs THA}
that{*cxs AOES}’s {*cxt 36:0}{*cxs T}the {*cxs SEUFP}sitcxds {*cxt 37:0}{*cxs
WAEUGS} cxds uation{*cxs -FPLT}.cxds ~{*cxs
W/E/SR}We have {*cxs TAEUBG/-PB}taken {*cxs THA}
that {*cxt 38:0}{*cxs PA*T}path {*cxs SKP}and {*cxs SPHREUT}split {*cxs EUT}
it {*cxs PWEU}by {*cxt 39:0}{*cxs T}the {*cxt 40:0}{*cxs KWE}question {*cxs
PHARBG} mark{*cxs -RBGS}, {*cxs SKP}and {*cxt
41:0}{*cxs WHAFR}whatever {*cxs S}is {*cxs AF}after {*cxt 45:0}{*cxs T}the
{*cxt 46:0}{*cxs TP*EURS}first {*cxs EUPB}{*cxt 47:0}
{*cxs TKEBGS}index {*cxs OF}of {*cxs THA}that{*cxt 49:0}{*cxs -RBGS}, {*cxs
T} the {*cxs SEBGD}second {*cxt 50:0}{*cxs
EUPB/TKEBGS}index {*cxt 51:0}{*cxs OF} of {*cxs WHAFR}whatever {*cxs S}is {*cxs
AF}after {*cxt 52:0}{*cxs T}the {*cxs SPHREUT}
split {*cxs S}is {*cxt 53:0}{*cxs KWROUR}your {*cxt 54:0}{*cxs KWAOER/REU}
query{*cxs -FPLT}.cxds ~{*cxs SKP}cxsgnocap And {*cxt 55:0}{*cxs THEPB}then
{*cxs WHEPB}when {*cxs KWROU}you {*cxs SR}have {*cxs THA}that {*cxt 56:0}{*cxs
KWAOER /REU}query{*cxs -RBGS}, {*cxs WE}we {*cxs
K}can {*cxt 57:0}{*cxs THEPB}then {*cxs PHOD/TPEU}modify {*cxs THA}that
{*cxt 58:0}{*cxs SKP}and {*cxs SEPBD} send {*cxs THA}that {*cxs PWABG}back {*cxt
59:0}{*cxs TO}to {*cxs KWROUR}your {*cxt 51:1:0}{*cxs KW}request {*cxt
3:0}{*cxs PARS/ER}parser{*cxt 4:0}{*cxs -RBGS}
,{cxsgdelsteno1 {*cxs HRAOEUBG}{*cxt 5:0}{*cxs *}cxsgdelsteno0} {*cxs RURPB}return
{*cxs KWROUR}your {*cxt 6:0} {*cxs PARS/-D}parsed {*cxs KW}request
{*cxs TPH}in {*cxt 7:0}{*cxs A}a {*cxs WAEU}
way {*cxs THA}that {*cxs KWROU}you {*cxt 8:0}{*cxs AUD}add {*cxs T}the {*cxs
KWAOER /REU}query {*cxs TO}to {*cxt 9:0}{*cxs
KWROUR}your {*cxs PARS/-D}parsed{cxsgdelsteno1 {*cxt 10:0}
{*cxs KWE/*}cxsgdelsteno0} {*cxs KW}request{*cxs -FPLT/SO}.cxds ~So, {*cxt 11:0}{*cxs
WHEPB} when {*cxs THA}that {*cxs HAZ}has {*cxt
12:0}{*cxs PW-PB}been {*cxt 14:0}{*cxs PARS
/-D}parsed{*cxs -RBGS}, {*cxs KWROU}you {*cxs K}can {*cxt 15:0}{*cxs SAOE}see
{cxsgdelsteno1 {*cxs THA/*/HAU}{*cxt 16:0}{*cxs *}cxsgdelsteno0} {*cxs HOU}how
{*cxs KWROU}you {*cxs K} can {*cxs PHOD/TPEU}modify {*cxt 17:0}{*cxs
KWROUR}your {*cxt 18:0}{*cxs KW} request {*cxt 19:0}{*cxs PARS/ER}parser
{*cxs THA}that {*cxt 20:0}{*cxs TP} if {*cxs TH}this {*cxs KW}request {*cxs
HAZ}has {*cxt 21:0}{*cxs A}a {*cxs KWAOER /REU}query{*cxt 22:0}{*cxs -RBGS}, {*cxs
TH}this {*cxs S}is {*cxs T}the {*cxs TPHROE}
flow {*cxs KWROU}you {*cxt 23:0}{*cxs SHOULD}should {*cxs TKPWO}go {*cxs SKP}
and {*cxs HOU}how {*cxt 24:0}{*cxs KWROU}you {*cxs SHOULD}should {*cxs HAPBD
/-L}handle {*cxt 25:0}{*cxs THA}that{*cxs -FPLT}.cxds ~{*cxs PWU}cxsgnocap But
{*cxt 26:0}{*cxs TP-R}for {*cxt 27:0}{*cxs T}the {*cxt 28:0}{*cxs SAEUBG}
sake {*cxs OF}of {*cxs TH}this {*cxt 29:0}{*cxs PREPB/TAEUGS}presentation{*cxs
-RBGS} , {*cxs EU}I {*cxt 31:0}{*cxs TKEUPBT}didn’t
{*cxs PUT}put {*cxt 32:0}{*cxs EUT} it {*cxs TPH}in {*cxs T}the {*cxs TKE/PHOE}demo{*cxs
-FPLT}.cxds ~{*cxt 33:0} {*cxs PWU}cxsgnocap But {*cxs KWROU}you
{*cxs K}can {*cxt 34:0}{*cxs PHRAEU} play {*cxs ARPBD}around {*cxs W}with {*cxt
35:0}{*cxs THA}that {*cxs SKP}and {*cxs TRAOEU}try {*cxt 36:0}{*cxs SKP}and
{*cxs EUFRP/HREPLT}implement {*cxs THA} that{*cxs -FPLT}.cxds ~{*cxt 39:0}{*cxs
P-F} parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0
cxfc {*cxt 42:0}{*cxs HOELD}cxsgnocap Hold {*cxs OPB}on{*cxs HR*EUPS}.
.. {*cxs OE}oh {*cxt 43:0}{*cxs KWRAE}yeah{*cxs -FPLT}.cxds ~{*cxs EU}I {*cxs HAD}
had {*cxs THA}that{*cxt 44:0}{*cxs -FPLT}.cxds ~{*cxt 46:0}{*cxs HR-RT}cxsgnocap All
right{*cxs -FPLT/SO}.cxds ~So, {*cxs THA}that{*cxt 47:0}{*cxs AOES}’s {*cxs
OUR} our {*cxs SEFRB/ER}server{*cxs -RBGS},
{*cxt 48:0}{*cxs PWU}but {*cxt 49:0} {*cxs TKO}do {*cxt 50:0}{*cxs KWROU}you
{*cxs THEU}think {*cxs OUR}our {*cxs SEFRB}{*cxt 51:0}
{*cxs ER}server {*cxs S}is {*cxt 52:0}{*cxs RAED/KWREU}ready {*cxs TO}to {*cxs PW}
be {*cxt 53:0}{*cxs PHAED}made {*cxs AEU/SRAEUL/-BL}available {*cxt 54:0}{*cxs
OPB} on {*cxs T}the {*cxs SPWER}intercxds
{*cxs TPHET}net {*cxt 55:0}{*cxs KWRET} yet{*cxs STPH}?cxds ~{*cxt 56:0}{*cxs
UPL}cxsgnocap Um{*cxs HR*EUPS}… {*cxt 59:0}
{*cxs UPB}uncxds {*cxs TPORT/TPHAT/HREU}fortunately{*cxt 52:0:0}{*cxs -RBGS}
, {*cxs EU}I {*cxs PHAOEPB}mean{*cxs -RBGS}, {*cxs TP}if {*cxt 1:0}{*cxs
KWROU /AOER}you’re {*cxs T}the {*cxs OPBL}only
{*cxs WUPB}one {*cxs THA}that {*cxt 2:0}
{*cxs TPHOE/-S}knows {*cxs T}the {*cxt 3:0}{*cxs UFRBGS}U{*cxs R-FRBGS}R{*cxs
HR-FRBGS} L{*cxt 4:0}{*cxs TK-RB}~__ {*cxs
T}the {*cxs PORT/-S}ports{*cxs -RBGS}, {*cxt 5:0}{*cxs EU}I {*cxt 6:0}{*cxs
PHAOEPB}mean{*cxs -RBGS}, {*cxs T}the {*cxs UFRBGS}U{*cxs R-FRBGS}R{*cxt 7:0}{*cxs
HR-FRBGS}L {*cxt 8:0}{*cxs WR} where {*cxs THA}that {*cxt 9:0}{*cxs
SEFRB/ER}server {*cxs S}is {*cxs SKP}and {*cxs KWROU}{*cxt 10:0}{*cxs AOER}you’re
{*cxs TPHOT}not {*cxs SHAEUR/-G} sharing {*cxs W}with {*cxt 11:0}{*cxs
TPHEUPB}anyone{*cxs -RBGS}, {*cxs TPAOEUPB} fine{*cxs -FPLT}.cxds ~{cxsgdelsteno1
{*cxs TP}{*cxt 12:0}{*cxs *}cxsgdelsteno0}{*cxs PWU}cxsgnocap But
{*cxs TP}if {*cxs KWROU}you {*cxt 13:0}{*cxs WAPBT}want {*cxs TO}to {*cxs PHAEUBG}
make {*cxs EUT}it {*cxs AEU/SRAEUL}{*cxt 14:0}{*cxs -BL}available {*cxs TPH}
in {*cxs PUB/HREUBG}public{*cxs -RBGS}, {*cxt 15:0}{*cxs EU}I {*cxs WOULD}would
{*cxs SAEU}say {*cxs TPHO}no{*cxs -RBGS}, {*cxt 16:0}{*cxs SAD/HREU}sadly{*cxs
-RBGS} , {*cxs PWAUZ}because {*cxs EUT}it{*cxt
17:0}{*cxs AOES}’s {*cxs PHEUSZ/-G} missing {*cxt 18:0}{*cxs HROT/-S}lots
{*cxs OF}of {*cxs TPAOEFP/-S}features{*cxt 19:0}
{*cxs -RBGS}, {*cxs RAOEUGT}right{*cxs STPH}?cxds ~{*cxs TP}cxsgnocap If {*cxs
TH} this {*cxt 20:0}{*cxs S}is {*cxs T}the
{*cxs OPBL}only{cxsgdelsteno1 {*cxt 21:0}{*cxs SE
/*}cxsgdelsteno0} {*cxs SEFRB/ER}server {*cxs WE}we {*cxt 22:0}{*cxs SR}have{*cxs
-RBGS}, {*cxs OUR}our {*cxs SKWROB}job {*cxs
WOULD}would {*cxt 23:0}{*cxs PW}be {*cxs SO}
so {*cxs HARD}hard{*cxs -FPLT}.cxds ~{*cxt 24:0}{*cxs EUT}cxsgnocap It{*cxs AOES}
‘s {*cxs PHEUSZ/-G}missing {*cxs HROT/-S}lots {*cxt 25:0}{*cxs OF}of {*cxs TPAOEFP
/-S}features{*cxs -FPLT}.cxds ~{*cxt 26:0}{*cxs SKP}cxsgnocap And {*cxs THR}
there{*cxs AOES}’s {*cxs SO}so {*cxt 27:0}{*cxs PH}many {*cxs TPAOEFP/-S}features
{*cxt 28:0}{*cxs KWROU}you {*cxs K}can {*cxs AUD}add {*cxs TO}to {*cxs EUT}
it{*cxs -FPLT}.cxds ~{*cxt 31:0}{*cxs WE}cxsgnocap We {*cxs K}can {*cxs TKO}
do {*cxt 32:0}{*cxs KWAOER/REU}query {*cxs PARS}{*cxt 33:0}{*cxs -G}parsing
{*cxs -FPLT}.cxds ~{*cxs WE}cxsgnocap We {*cxs K}can {*cxt 34:0}{*cxs SR}
have {*cxs WUPB}one {*cxt 35:0}{*cxs HAPBD/-L/-G}handling {*cxs SKURT}security
{*cxt 36:0}{*cxs -FPLT}.cxds ~{*cxs WE}cxsgnocap We {*cxs SR}have {*cxs WUPB}
one {*cxt 37:0}{*cxs HAPBD/-L/-G}handling {*cxs HROT/-S}lots {*cxt 38:0}{*cxs
OF} of{*cxs -RBGS}, {*cxt 39:0}{*cxs TUPB/-S}tons
{*cxs OF}of {*cxs STUF}stuff{*cxs -FPLT} .cxds ~{*cxs PWU}cxsgnocap But {*cxt
40:0}{*cxs THR}there{*cxs AOES}’s {*cxs WUPB}
one {*cxt 41:0}{*cxs PHRAR}particular {*cxt 42:0}{*cxs SHU}issue {*cxs EU}
I {*cxs WOULD}would {*cxs HRAOEUBG}like {*cxt 43:0}{*cxs TO}to {*cxs HAOEU
/HRAOEUGT}highlight {*cxt 44:0}{*cxs PWAEUS/-D}based {*cxs OPB}on {*cxs T}the
{*cxt 45:0}{*cxs KURPBT}current {*cxs EUFRP/HREPLT}{*cxt 46:0}{*cxs TAEUGS}
implementation {*cxs OF}of{cxsgdelsteno1 {*cxt 47:0}{*cxs A/SEFRB/*/*}cxsgdelsteno0}
{*cxs T}the {*cxt 48:0} {*cxs SEFRB/ER}server {*cxs THA}that {*cxs
EU}I {*cxs SKWR*US}just {*cxt 49:0} {*cxs SHOE/-D}showed {*cxs KWROU}you{*cxs
-FPLT}.cxds ~{*cxs SKP}cxsgnocap And {*cxt 50:0}{*cxs THA}that {*cxs S}is
{*cxs T}the {*cxt 51:0}{*cxs KURPBT} current {*cxt 52:0}{*cxs EUFRP/HREPLT/TAEUGS}implementation
{*cxt 53:0}{*cxs EU} I {*cxs SKWR*US}just {*cxs SHOE/-D}showed
{*cxs KWROU}you {*cxs S}is {*cxt 54:0} {*cxs SUS}{*cxt 55:0}{*cxs SEPT/-BL}susceptible
{*cxs TO}to {*cxt 56:0}{*cxs PA*T} path {*cxs TRA}{*cxt 57:0}{*cxs SRERS/A*L}traversal
{*cxs AEU/TABG}attack{*cxt 58:0} {*cxs -FPLT}.cxds ~{*cxs SKP}cxsgnocap
And {*cxs TH}this {*cxs S}is {*cxs APB} an {*cxs AEU}{*cxt 59:0}{*cxs TABG}attack{*cxs
-FPLT}.cxds ~{*cxs WHEPB} cxsgnocap When {*cxs KWROU}you {*cxs
PUT}put {*cxs THA}that {*cxt 53:0:0}{*cxs SEFRB
/ER}server {*cxs EU}I {*cxs SR}have {*cxs TPHOU}now {*cxt 1:0}{*cxs OPB}on {*cxs
T} the {*cxt 2:0}{*cxs SPWER}intercxds {*cxs
TPHET}net{*cxs -RBGS}, {*cxs S*PB} someone {*cxt 3:0}{*cxs K}can {*cxs
E}{*cxt 4:0}{*cxs SEPBT/-RBL/HREU}essentially {*cxs KWRAOUZ/-G}using {*cxt 5:0}{*cxs
T}the {*cxt 6:0}{*cxs TKOT}dot{*cxs H-F}
cxds _cxds {*cxs TKOT}dot{*cxt 7:0}{*cxs H-F}cxds _cxds {cxsgdelsteno1 {*cxt
8:0}{*cxs SHR-RB /*}cxsgdelsteno0}{*cxt 9:0}{*cxs SHRARB}slash
{*cxs TO}to{cxsgdelsteno1 {*cxs AEU}{*cxt 10:0}{*cxs */AEU
/*}{*cxt 11:0}{*cxs AEU/SESZ/*}{*cxt 12:0}{*cxs *}cxsgdelsteno0} {*cxs ABG/SESZ}access
{*cxt 13:0}{*cxs RAOT}root {*cxt 14:0}{*cxs TKREBGT/REU/-S}directories {*cxs THA}
that {*cxs EU}I {*cxt 15:0}{*cxs TKO}do {*cxs TPHOT}not {*cxs WAPBT}want {*cxs
THEPL} them {*cxt 16:0}{*cxs TO}to{*cxs -FPLT}.cxds
~{*cxs THA}cxsgnocap That{*cxs AOES} ‘s {*cxs TPHOT}not {*cxt 17:0}{*cxs
SKAOUR}secure{*cxs -FPLT/SO}.cxds ~So, {*cxs S*PB}someone {*cxt 18:0}{*cxs
K}can {*cxs E/SEPBT/-RBL/HREU}essentially {*cxt 20:0}{*cxs -RBGS}, {*cxs KWR-PB}you
know{*cxt 21:0}{*cxs -RBGS}, {*cxs TP} if {*cxs THA}that{*cxs AOES}’s {*cxs
TPHOT}not {*cxt 22:0}{*cxs HROE}{*cxt 23:0}
{*cxs KAL}local{*cxs H}cxds {*cxs HO*ES}host{*cxs -RBGS}, {*cxs EUT}it{*cxt 24:0}
{*cxs AOES}’s {*cxs APB}an {*cxs *EUP}IP {*cxs AEU}{*cxt 25:0}{*cxs TKRESZ}
address {*cxs THA}that {*cxs HR*EUPBG/TOS}links to {*cxs A}a {*cxt 26:0}{*cxs SEFRB
/ER}server {*cxs THA}that {*cxs EU}I {*cxs SR}have {*cxs OPB}on {*cxs T}the {*cxt
27:0} {*cxs SPWER}intercxds {*cxs TPHET}net{*cxs
-FPLT}.cxds ~{*cxt 28:0}{*cxs S*PB} cxsgnocap Someone {*cxs K}can {*cxs KWRAOUZ}use
{*cxs T}the{*cxt 31:0}{*cxs SP-S} ~cxds {*cxt 33:0}{*cxs SKWR}cxds .cxds
{*cxs SKWR}cxds .cxds {*cxt 34:0} {*cxs SHR-RB}cxds /cxds {*cxs TO}to
{*cxt 35:0}{*cxs ABG/SESZ}access {*cxs T}
the {*cxs TKREBGT}{*cxt 36:0}{*cxs REU}directory{*cxs SKP-RBGS}, and {*cxs WE}
we {*cxs TKOEPBT}don’t{cxsgdelsteno1 {*cxt 37:0}{*cxs WABT/*}cxsgdelsteno0} {*cxs
WAPBT}want {*cxs THA}that {*cxs -FPLT}.cxds ~{*cxt 38:0}{*cxs
THR}cxsgnocap There {*cxs R}are {*cxs SHRAOUGS
/-S}solutions {*cxt 39:0}{*cxs SKP}and{cxsgdelsteno1 {*cxt 40:0}{*cxs TKPWEUFP/*}cxsgdelsteno0}
{*cxs TKPWREUFPL /-S}algorithms {*cxs THA}that {*cxt 41:0}{*cxs
SR}have {*cxs PW-PB}been {*cxs WREUT /-PB}written {*cxt 42:0}{*cxs TO}to {*cxs
PRE}precxds {*cxs SREPBT}vent {*cxs TH} this{*cxs -RBGS}, {*cxt 43:0}{*cxs PWU}but
{*cxs EU}I {*cxs TKEUPBT}didn’t {*cxs KO*FR}cover {*cxs THA}that {*cxt
44:0}{*cxs TPH}in {*cxs TH}this {*cxs SKOEP}
scope{*cxt 45:0}{*cxs -FPLT}.cxds ~{*cxs PWU}cxsgnocap But {*cxs EUT}it{*cxs AOES}
‘s {*cxs S-G}something {*cxt 46:0}{*cxs TO}to {*cxs HRAOBG}look {*cxs OUT}out
{*cxs TP-R}for{*cxs -RBGS}, {*cxt 47:0}{*cxs SKP}and {*cxs KWROU}you {*cxs K}
can {*cxs PHRAEU}play {*cxs ARPBD}around {*cxt 48:0}{*cxs W}with {*cxs EUT}
it{cxsgdelsteno1 {*cxs P/*}cxsgdelsteno0} {*cxs W}with {*cxt 49:0}{*cxs KWROUR}your
{*cxs TPREPBD/-S}friends {*cxs -FPLT}{*cxt 50:0}{*cxs SO}.cxds
~So, {*cxt 51:0}{*cxs AZ}as {*cxs RAO*UB} Ruby {*cxt 52:0}{*cxs TKWOP/ER/-S}developers{*cxs
-RBGS}, {*cxs EU/AOEPL}I’m {*cxt 53:0}{*cxs SHAOUR}sure {*cxs WE/AOER}we’re
{*cxs AUL}all {*cxt 54:0} {*cxs WOPBD/ER/-G}wondering{*cxs -RBGS},
{*cxs KWRAE}yeah{*cxt 55:0}{*cxs -RBGS} , {cxsgdelsteno1 {*cxs -B}cxsgdelsteno0}{*cxs
WE}{*cxt 56:0}{*cxs AO*EF}we’ve {*cxs PWEULT}built {*cxs TH}
this {*cxt 57:0}{*cxs SR-R}very {*cxs SEUPL/PHREUS}{*cxt 58:0}{*cxs TEUBG}
simplistic {*cxs THEUPBG}thing{*cxs -FPLT}.cxds ~{*cxt 59:0}{*cxs HOU}cxsgnocap How
{*cxs TKUZ}does {*cxs TH}this {*cxs AEU/TPEBGT}affect{cxsgdelsteno1 {*cxt 54:0:0}{*cxs
OUR /*}cxsgdelsteno0} {*cxt 1:0}{*cxs PHEU}my
{*cxs HRAOEUF}life{*cxs STPH}?cxds ~{*cxs WR}cxsgnocap Where
{*cxt 2:0}{*cxs TKUZ}does{*cxs U}cxfc {*cxs RABG}cxsgnocap Rack {*cxt 3:0}
{*cxs TPEUT}fit {*cxt 4:0}{*cxs TPH}in{*cxs STPH}?cxds ~{*cxs EU}I {*cxt 5:0}
{*cxs WAPBT}want {*cxs TO}to {*cxs TKO}do {*cxs A}a {*cxs HREUT}{*cxt 6:0}
{*cxs -L}little {*cxs PWEUT}bit {*cxs OF}of {*cxs TWO}two {*cxs POEUPBT}{*cxt
7:0} {*cxs -S}points {*cxs TO}to {*cxs PWAEUS}{*cxt
8:0}{*cxs KHREU}basically {*cxs HR*EUPBG} link {*cxs THA}that {*cxt 9:0}{*cxs
PWABG}back {*cxs TO}to{*cxs U}cxfc {*cxs RABG}
cxsgnocap Rack{*cxs -FPLT}.cxds ~{*cxs E}{*cxt 10:0}{*cxs SEPBT/-RBL/HREU}
cxsgnocap Essentially{*cxs -RBGS}, {*cxs KWR}why {*cxt 11:0}{*cxs WE}we {*cxs
KWRAOUZ} use{*cxs U}cxfc {*cxs RABG}cxsgnocap
Rack {*cxs SKP}and {*cxt 12:0}{*cxs KWR}
why {*cxt 13:0}{*cxs T}the{*cxs U}cxfc {*cxs RABG}cxsgnocap Rack {*cxs S}
is {*cxt 14:0}{*cxs SO}so{*cxt 15:0}{*cxs TK-RB}~__ {*cxs SUFP}such {*cxs A}
a {*cxt 16:0}{*cxs HRAOEUF}life{*cxs H-F}cxds _cxds {*cxs SA*EUFR}saver {*cxs
S} is {*cxt 17:0}{*cxs THA}that{*cxs U}cxfc
{*cxs RABG}cxsgnocap Rack {*cxs HAZ} has {*cxt 18:0}{*cxs PWEULT}built {*cxt
19:0}{*cxs APB}an {*cxs H-FRBGS}H{*cxs T-FRBGS}
T{*cxs T-FRBGS}T{*cxs P-FRBGS}P {*cxt 20:0}{*cxs SPWER}intercxds {*cxs TPAEUS}
face {*cxt 21:0}{*cxs TP-R}for {*cxs RAO*UB}Ruby{*cxs -FPLT}.cxds ~{*cxs
PHO*ES} cxsgnocap Most {*cxs OF}of {*cxt 22:0}{*cxs
T}the {*cxs SEFRB/ER/-S}servers {*cxs THA}that {*cxs WE}we {*cxt 23:0}{*cxs
SR}have{*cxs -RBGS},{cxsgdelsteno1 {*cxs HRAOEUBG}{*cxt 24:0}
{*cxs *}cxsgdelsteno0} {*cxs THA}that {*cxt 25:0}{*cxs EU}I {*cxs SHOE/-D}showed
{*cxs KWROU} you {*cxt 26:0}{*cxs ERL/KWRER}earlier{*cxs
-RBGS}, {*cxs WEB}web {*cxt 27:0} {*cxs REUBG}Rick{*cxt 28:0}{*cxs -RBGS},{*cxt
29:0}{*cxs U}cxfc {*cxs THEUPB} cxsgnocap Thin{*cxs -RBGS}, {*cxs THAEU}they
{*cxs R}are {*cxt 30:0}{*cxs AUL} all {*cxs PWEULT}built {*cxt 31:0}{*cxs
OPB}on {*cxs TOP}top {*cxs OF}of{*cxs U}
cxfc {*cxt 32:0}{*cxs RABG}cxsgnocap Rack{*cxs -FPLT}.cxds ~{*cxs EUT}cxsgnocap
It {*cxt 33:0}{*cxs S}is {*cxs TKE}decxds
{*cxt 34:0}{*cxs TPAOEUPB/-D}fined {*cxs A}a {*cxt 35:0}{*cxs STAPB/TKARD}standard
{*cxt 36:0}{*cxs SPWER}inter cxds {*cxs TPAEUS}face {*cxs TP-R}for
{*cxs SPWER}intercxds {*cxt 37:0}{*cxs ABGT
/W-G}acting with {*cxs H-FRBGS}H{*cxt 38:0}{*cxs T-FRBGS}T{*cxs T-FRBGS}T{*cxs
P-FRBGS} P {*cxt 39:0}{*cxs SKP}and {*cxs KEBGT/-G}connecting
{*cxs WEB}web {*cxt 40:0} {*cxs SEFRB/ER/-S}servers{cxsgdelsteno1
{*cxs -L/*}cxsgdelsteno0}{*cxt 41:0}{*cxs -FPLT}.cxds ~{*cxs AUL}
cxsgnocap All {*cxs OF}of {*cxs T}the {*cxt 42:0}{*cxs THEUPBG/-S}things {*cxs
THA} that {*cxs WE}we {*cxs R}are {*cxs PHEUSZ}{*cxt
43:0}{*cxs -G}missing{*cxs -RBGS} , {*cxs THAEU}they {*cxs SR}have {*cxt
44:0}{*cxs PW-PB}been {*cxs TKWOP/-D} developed {*cxs SKP}and {*cxt 45:0}{*cxs
THOUGT}thought {*cxs THRU}through {*cxs SKP}
and {*cxs PWEULT}built {*cxt 46:0}{*cxs PROP/ER/HREU}properly {*cxs TPH}in{*cxs
U} cxfc {cxsgdelsteno1 {*cxt 47:0}{*cxs
RAOBG/*}cxsgdelsteno0} {*cxs RABG}cxsgnocap Rack{*cxs -FPLT}{*cxt 52:0}
{*cxs SO}.cxds ~So,{*cxt 53:0}{*cxs -RBGS}{cxsgdelsteno1 {*cxt 54:0}{*cxs
SO/KWROU/K}{*cxt 55:0} {*cxs */*/*}cxsgdelsteno0} {*cxs KWROU}you
{*cxt 56:0}{*cxs K}can {*cxs TAEUBG}take{*cxs TK-RB}
~__ {*cxt 57:0}{*cxs TP}if {*cxs KWROU}you {*cxs R}are {*cxs TRAOEU/TOG}
trying to {*cxs PWEULD}build {*cxt 58:0}{*cxs A}a {*cxs SEFRB/ER}server {*cxs THA}
that {*cxs KWROU}you {*cxs WAPBT}want {*cxt 59:0}{*cxs TO}to {*cxs PUT}put
{*cxs OPB}on {*cxs T}the {*cxs SPWER}intercxds {*cxt 55:0:0}{*cxs TPHET}net
{*cxs -RBGS}, {*cxs EU}I {*cxs WOULD}would{cxsgdelsteno1 {*cxs A}{*cxt 1:0}{*cxs *}cxsgdelsteno0}
{*cxs AD /SRAOEUZ}advise {*cxs KWROU}you{*cxs -RBGS},
{*cxt 2:0}{*cxs KWR-PB}you know{*cxs -RBGS}
, {*cxs PWEULD}build {*cxs EUT}it {*cxt 3:0}{*cxs OPB}on {*cxs TOP}top {*cxs
OF} of{*cxt 4:0}{*cxs U}cxfc {*cxs RABG}cxsgnocap
Rack{*cxs -FPLT/SO}.cxds ~ So, {*cxt 5:0}{*cxs AUL}all {*cxs THA}that
{*cxs EU}I {*cxs SR}have {*cxs SKWR*US} just {*cxt 6:0}{*cxs SHOUPB}shown {*cxs
KWROU}you {*cxs W}with {*cxs A}a {*cxt 7:0}
{*cxs TPAOU}few {*cxs HRAOEUPB/-S}lines {*cxs OF}of {*cxs KOED}code{*cxt 8:0}
{*cxs -RBGS}, {*cxs KWROU}you {*cxs K}can{*cxs -RBGS}, {*cxs KWR-PB}you know
{*cxt 9:0}{*cxs -RBGS}, {*cxs SR}have {*cxs A}a {*cxt 10:0}{*cxs SEFRB/ER}
server {*cxs THA}that {*cxt 11:0}{*cxs TKUZ}does {*cxs A}a {*cxs HROT}lot {*cxs
PH-R} more {*cxt 12:0}{*cxs THAPB}than {*cxs
EU}I {*cxs SR}have {*cxs SKWR*US}just {*cxt 13:0}{*cxs TKEUS}discxds {*cxs
PHRAEU/-D}played{*cxs -RBGS}, {*cxs SKP} and {*cxt 14:0}{*cxs KWROU}you {*cxs
K}can {*cxs SR}have {*cxs THA}that{*cxt 15:0}
{*cxs -RBGS}, {*cxs KWR-PB}you know{*cxt 16:0}{*cxs -RBGS}, {*cxs A}a {*cxt 17:0}
{*cxs TP*UPBGS/A*L}functional {*cxs PRO/TK*UBGS}production{*cxt 18:0}{*cxs H-F}
cxds _cxds {*cxs RAED/KWREU}ready {*cxs SEFRB/ER}server{*cxt 19:0}{*cxs -FPLT}
.cxds ~{*cxt 22:0}{*cxs P-F} parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0
cxfc {*cxs SKP}cxsgnocap And {*cxt 23:0}{*cxs THA}that{*cxs AOES}’s {*cxs EUT}
it{*cxs -FPLT}.cxds ~{*cxs TP}cxsgnocap If {*cxt 24:0}{*cxs KWROU}you {*cxs
WAPBT} want {*cxs TO}to {*cxs RAED}read {*cxs
PH-R}more{*cxt 25:0}{*cxs -RBGS}, {*cxs THR}
there {*cxs S}is {*cxs T}the {*cxs H-FRBGS}H{*cxt 26:0}{*cxs T-FRBGS}T{*cxs T-FRBGS}
T{*cxs P-FRBGS}P {*cxt 27:0}{*cxs SP*EBG}spec {*cxt 28:0}{*cxs TKO*BG}doc{*cxs -RBGS}
, {*cxs THR}there {*cxs S}is {*cxs A}a {*cxs SOBGT}socket {*cxt 29:0}{*cxs
TKO*BG} doc{*cxs -RBGS}, {*cxs THR}there {*cxs
S}is {*cxt 30:0}{*cxs A}a{*cxs U}cxfc {*cxs RABG}cxsgnocap Rack {*cxs TKO*BG}doc{*cxt
31:0}{*cxs -RBGS}, {*cxs SKP} and {*cxs EU}I {*cxs HRAOEUBG}like {*cxs
TKEUG}{*cxt 32:0}{*cxs -G}digging {*cxs -FPLT}.cxds ~{*cxs EU/AOEPL}I’m
{*cxt 33:0}{*cxs RAEL/HREU}really {*cxs SR-R}
very {*cxt 34:0}{*cxs KAOURS}curious{*cxs -RBGS}, {*cxs PWAUZ}because {*cxt 35:0}
{*cxs THA}that{*cxs AOES}’s {*cxs HOU}how {*cxs EU}I {*cxs HRERPB}learn{*cxt 36:0}
{*cxs -FPLT}.cxds ~{*cxs KWROU}cxsgnocap You {*cxs K}can {*cxs KHEBG}check
{*cxs T}the {*cxt 42:0}{*cxs TKO*BG}{*cxt 43:0}{*cxs -S}docs {*cxs SKP}
and {*cxs SAOE}see {*cxs HOU}how {*cxs T}the {*cxt 44:0}{*cxs THEUPBG/-S}things
{*cxs R}are {*cxs PWEULT}built {*cxs SKP}and {*cxs T}the {*cxt 45:0}{*cxs
KEBGT /-G}connecting {*cxs POEUPBT/-S}points{*cxs
-FPLT}.cxds ~{*cxs EU}{*cxt 46:0} {*cxs AOEPL}I’m {*cxs KHAL/HREPBG/-G}challenging
{*cxt 47:0}{*cxs KWROU}you{*cxs -FPLT} .cxds ~{*cxs TP}cxsgnocap If {*cxs
KWROU}you {*cxt 48:0}{*cxs K}can{*cxs -RBGS}
, {*cxs KWROU}you {*cxs SHOULD}should {*cxt 49:0}{*cxs TRAOEU}try {*cxs SKP}
and {*cxs TKEUG}dig {*cxs SPWAO}into {*cxs T}the{*cxt 50:0}{*cxs U}cxfc {*cxs
RABG} cxsgnocap Rack {*cxs SKP}and {*cxs SAOE}see
{*cxt 51:0}{*cxs WR}where {*cxs T} the {*cxt 52:0}{*cxs TKPWEUPB/-G}beginning
{*cxs PART}part{*cxs -RBGS}, {*cxt 53:0} {*cxs WR}where {*cxs T}the {*cxs SOBGT}socket
{*cxt 54:0}{*cxs HRAOEU/PWRAEUR} library {*cxs THA}that {*cxt 55:0}{*cxs
EU}I {*cxs SHOE/-D}showed {*cxs KWROU} you {*cxs S}is {*cxs KWRAOUZ}{*cxt 56:0}{*cxs
-D}used{*cxs -FPLT}.cxds ~ {*cxs KWROU}cxsgnocap You {*cxs HR}will
{*cxs TPAOEUPBD}find {*cxt 57:0}{*cxs THA}
that {*cxs KOED}code {*cxs T-R/-G}interesting{*cxt 58:0}{*cxs -FPLT}.cxds ~
{*cxs P-F} parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0
cxfc {*cxt 59:0}{*cxs SKP}cxsgnocap And {*cxt 56:0:0}{*cxs THA}that{*cxs
AOES} ‘s {*cxs EUT}it{*cxs -FPLT}.cxds ~{*cxs
TU}cxsgnocap Thank you{cxsgdelsteno1 {*cxs -P}{*cxt 1:0}
{*cxs *}cxsgdelsteno0}{*cxt 2:0}{*cxs -FPLT}.cxds ~{*cxs TU}cxsgnocap Thank
you {*cxs SO} so {*cxs PHUFP}much{*cxt 3:0}{*cxs -FPLT}.cxds
~{*cxs PHRAUZ/PHRAUZ} parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0
[ Applause ] cxfc {*cxt 6:0}{*cxs P-F} parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0
cxfc {*cxt 7:0}{*cxs P-F} parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0
cxfc {*cxs P-F} parpards0qlcxsinglef3fs24cf0li0fi719ri0tx720tx1440tx2160tx2880tx3600tx4320tx5040tx5760tx6480tx7200sl-324slmult0
cxfc }

Leave a Reply

Your email address will not be published. Required fields are marked *