-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathpackage.json
More file actions
129 lines (129 loc) · 137 KB
/
package.json
File metadata and controls
129 lines (129 loc) · 137 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
{
"_aerobatic": {
"build": {
"engine": "jekyll"
},
"router": [
{
"module": "redirect",
"options": {
"/articles": "/",
"/articles/1": "/articles/ways-to-load-code",
"/articles/2": "/articles/attacking-sticky-problems",
"/articles/3": "/articles/closures-are-complicated",
"/articles/4": "/articles/building-enumerable-and-enumerator",
"/articles/5": "/articles/regession-testing",
"/articles/6": "/articles/learning-new-things-step-by-step",
"/articles/7": "/articles/unobtrusive-ruby-in-practice",
"/articles/8": "/articles/ruby-and-the-singleton-pattern-dont-get-along",
"/articles/9": "/articles/building-unix-style-command-line-applications",
"/articles/10": "/articles/from-requirements-discovery-to-release",
"/articles/11": "/articles/domain-specific-apis",
"/articles/12": "/articles/binary-file-formats",
"/articles/13": "/articles/designing-business-reporting-applications",
"/articles/14": "/articles/arguments-and-results-1",
"/articles/15": "/articles/arguments-and-results-2",
"/articles/18": "/articles/qualities-of-great-software",
"/articles/19": "/articles/patterns-for-building-excellent-examples",
"/articles/20": "/articles/exploring-a-turing-tarpit",
"/articles/21": "/articles/spiral-staircase-of-refactoring",
"/articles/22": "/articles/framework-design-and-implementation-1",
"/articles/23": "/articles/framework-design-and-implementation-2",
"/articles/24": "/articles/disciplined-inheritance-1",
"/articles/25": "/articles/disciplined-inheritance-2",
"/articles/26": "/articles/using-games-to-practice-domain-modeling",
"/articles/27": "/articles/coding-in-the-danger-zone",
"/articles/28": "/articles/tdd-costs-and-benefits",
"/articles/29": "/articles/method-lookup-1",
"/articles/30": "/articles/method-lookup-2",
"/articles/31": "/articles/configurable-applications-1",
"/articles/32": "/articles/configurable-applications-2",
"/articles/33": "/articles/testing-private-methods",
"/articles/34": "/articles/meditations-on-bad-and-good-code-1",
"/articles/35": "/articles/meditations-on-bad-and-good-code-2",
"/articles/36": "/articles/uses-for-modules-1",
"/articles/37": "/articles/uses-for-modules-2",
"/articles/38": "/articles/uses-for-modules-3",
"/articles/39": "/articles/uses-for-modules-3a",
"/articles/40": "/articles/uses-for-modules-4",
"/articles/41": "/articles/rapid-prototyping",
"/articles/42": "/articles/obfuscations-of-christmas-past",
"/articles/43": "/articles/duck-typing-in-practice-1",
"/articles/44": "/articles/duck-typing-in-practice-2",
"/articles/45": "/articles/ruby-hackers",
"/articles/46": "/articles/ruby-hacker-writers",
"/articles/47": "/articles/dirty-testing-secrets",
"/articles/48": "/articles/thoughts-on-mocking-1",
"/articles/49": "/articles/thoughts-on-mocking-2",
"/articles/50": "/articles/how-to-practice-1",
"/articles/51": "/articles/how-to-practice-2",
"/articles/52": "/articles/solid-design-principles",
"/articles/53": "/articles/connascence",
"/articles/54": "/articles/creational-design-patterns",
"/articles/55": "/articles/structural-design-patterns",
"/articles/56": "/articles/from-prototype-to-minimal-product",
"/articles/57": "/articles/tricks-for-working-with-text-and-files",
"/articles/58": "/articles/solving-the-scoring-predictions-kata",
"/articles/59": "/articles/persisting-relations-in-a-polyglot-world",
"/articles/60": "/articles/implementing-the-active-record-pattern-1",
"/articles/61": "/articles/confident-ruby",
"/articles/62": "/articles/hidden-costs-of-inheritance",
"/articles/63": "/articles/implementing-the-active-record-pattern-2",
"/articles/64": "/articles/responsibility-centric-vs-data-centric-design",
"/articles/65": "/articles/tdd-lessons-learned",
"/articles/66": "/articles/end-to-end-testing-is-essential",
"/articles/67": "/articles/refactoring-is-not-redesign",
"/articles/68": "/articles/mock-objects-deeply-influence-design",
"/articles/69": "/articles/spiking-is-not-cowboy-coding",
"/articles/70": "/articles/intro-to-basic-statistical-methods",
"/articles/71": "/articles/temporal-coupling-and-the-law-of-demeter",
"/articles/80": "/articles/event-loops-demystified",
"/articles/81": "/articles/building-the-rstatus-api",
"/articles/89": "/articles/process-spawning-patterns",
"/articles/90": "/articles/relationships-between-objects",
"/articles/91": "/articles/growing-a-stable-codebase",
"/articles/92": "/articles/expanding-your-code-reading-horizons",
"/articles/93": "/articles/ant-colony-simulation",
"/articles/95": "/articles/adventure-in-prototypes",
"/articles/96": "/articles/parsing-json-the-hard-way",
"/articles/99": "/articles/self-guided-code-tour",
"/articles/100": "/articles/gentle-intro-to-actor-based-concurrency",
"/articles/101": "/articles/code-reuse-is-complicated",
"/articles/102": "/articles/debugging-without-doom-and-gloom",
"/articles/103": "/articles/cleaning-up-bloated-method-interfaces",
"/articles/104": "/articles/demeter-archaeology",
"/articles/105": "/articles/from-scripting-to-oop",
"/articles/106": "/articles/avoiding-brittleness-in-data-munging",
"/articles/108": "/articles/low-cost-approach-to-side-projects",
"/articles/109": "/articles/simulating-tiny-worlds",
"/articles/110": "/articles/implementing-an-http-file-server",
"/articles/111": "/articles/exploratory-data-analysis",
"/articles/112": "/articles/improving-legacy-systems",
"/articles/113": "/articles/low-level-computing",
"/articles/114": "/articles/infrastructure-automation",
"/articles/115": "/articles/wumpus",
"/articles/116": "/articles/deliberate-language-learning",
"/articles/117": "/articles/sustainable-foss-quality",
"/articles/118": "/articles/study-guide-1",
"/articles/119": "/articles/information-anatomy",
"/articles/120": "/articles/problem-discovery",
"/articles/121": "/articles/formula-processing",
"/testred": "https://google.com",
"/articles/shared/eislpkhxolnr": "/articles/building-enumerable-and-enumerator", "/articles/shared/frcyvpuqryiefgidywfuzaukihafon": "/articles/attacking-sticky-problems", "/articles/shared/yymngsoguidx": "/articles/attacking-sticky-problems", "/articles/shared/abjsabluehvx": "/articles/ways-to-load-code", "/articles/shared/zhdfoizqipsd": "/articles/regession-testing", "/articles/shared/jlaxqjuxeytz": "/articles/ways-to-load-code", "/articles/shared/kwtvfjgrovys": "/articles/regession-testing", "/articles/shared/etdmboijyxfc": "/articles/ways-to-load-code", "/articles/shared/albqedewseuj": "/articles/attacking-sticky-problems", "/articles/shared/shpfuiukgzid": "/articles/attacking-sticky-problems", "/articles/shared/bfocgpgaujlp": "/articles/attacking-sticky-problems", "/articles/shared/ahsdjnyzpfdu": "/articles/ways-to-load-code", "/articles/shared/uahxgzqtgpmr": "/articles/building-unix-style-command-line-applications", "/articles/shared/inkcsehkmono": "/articles/ways-to-load-code", "/articles/shared/fptcglerubzo": "/articles/attacking-sticky-problems", "/articles/shared/uaeytngjxlfg": "/articles/ways-to-load-code", "/articles/shared/kwvvkxhsyric": "/articles/ways-to-load-code", "/articles/shared/xnsrxvcrkthv": "/articles/attacking-sticky-problems", "/articles/shared/kfufxnxrflgs": "/articles/closures-are-complicated", "/articles/shared/hjdixjirhtob": "/articles/ways-to-load-code", "/articles/shared/uiagdskkafyj": "/articles/ways-to-load-code", "/articles/shared/rvzypmqchwbq": "/articles/building-enumerable-and-enumerator", "/articles/shared/lgngphlggpcx": "/articles/ways-to-load-code", "/articles/shared/olkibulcgztr": "/articles/regession-testing", "/articles/shared/tqxwakbbjkbg": "/articles/regession-testing", "/articles/shared/brlbfurrensh": "/articles/building-enumerable-and-enumerator", "/articles/shared/eqnrcglleous": "/articles/closures-are-complicated", "/articles/shared/zrmuzuffvbtz": "/articles/learning-new-things-step-by-step", "/articles/shared/ejjemsxazkgy": "/articles/closures-are-complicated", "/articles/shared/zoxpturzgxis": "/articles/ways-to-load-code", "/articles/shared/rbwfhqidsudq": "/articles/closures-are-complicated", "/articles/shared/ohwnfkwbuwir": "/articles/closures-are-complicated", "/articles/shared/axmfoybtcdne": "/articles/attacking-sticky-problems", "/articles/shared/xdidxjlhnrue": "/articles/ways-to-load-code", "/articles/shared/babxfadtlbzn": "/articles/closures-are-complicated", "/articles/shared/bzcfllurnfxj": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/nzwmpnxluwas": "/articles/regession-testing", "/articles/shared/qmifcugwponl": "/articles/ways-to-load-code", "/articles/shared/vikrvyrloqke": "/articles/closures-are-complicated", "/articles/shared/jdaggesufqpz": "/articles/ways-to-load-code", "/articles/shared/sdajjcwmbjnr": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/hnuzgjobymma": "/articles/ways-to-load-code", "/articles/shared/jcxjhierfebz": "/articles/attacking-sticky-problems", "/articles/shared/ouzopyphlmdj": "/articles/attacking-sticky-problems", "/articles/shared/bhqaanaordxp": "/articles/ways-to-load-code", "/articles/shared/ljpkkwwhzlih": "/articles/closures-are-complicated", "/articles/shared/fammdryidzqx": "/articles/building-enumerable-and-enumerator", "/articles/shared/sysobzhayfzy": "/articles/attacking-sticky-problems", "/articles/shared/gmpfsnhazqss": "/articles/learning-new-things-step-by-step", "/articles/shared/ijtlbjuarkgy": "/articles/building-enumerable-and-enumerator", "/articles/shared/ljfodusewajs": "/articles/ways-to-load-code", "/articles/shared/abgdnomzkzoe": "/articles/ways-to-load-code", "/articles/shared/gaebvxmusjts": "/articles/learning-new-things-step-by-step", "/articles/shared/yfildjshgzew": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/rymujvsfunac": "/articles/attacking-sticky-problems", "/articles/shared/pglrlkdmlfli": "/articles/building-enumerable-and-enumerator", "/articles/shared/hfkbgfotromz": "/articles/attacking-sticky-problems", "/articles/shared/ojxnicmtfcrz": "/articles/closures-are-complicated", "/articles/shared/geshtvouswzk": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/pvcttwfqyjsv": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/glvpnaknszry": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/klyyrrcejhhv": "/articles/learning-new-things-step-by-step", "/articles/shared/ticxchshcrhi": "/articles/ways-to-load-code", "/articles/shared/uotqtrlmxxqg": "/articles/ways-to-load-code", "/articles/shared/yttirpkukual": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/rklmomhzbgkm": "/articles/building-enumerable-and-enumerator", "/articles/shared/jxarordzyuzs": "/articles/learning-new-things-step-by-step", "/articles/shared/nyvphvmylhet": "/articles/learning-new-things-step-by-step", "/articles/shared/bonyidtpvqfg": "/articles/learning-new-things-step-by-step", "/articles/shared/qyxvmrgmhuln": "/articles/building-unix-style-command-line-applications", "/articles/shared/stsbaecwohuq": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/owscxfhsgovq": "/articles/regession-testing", "/articles/shared/pobajvhdylgo": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/ljgihbslizni": "/articles/learning-new-things-step-by-step", "/articles/shared/mzjuukckdhfu": "/articles/regession-testing", "/articles/shared/ufeylpjznaqp": "/articles/ways-to-load-code", "/articles/shared/sumzrzxbezhr": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/ykbmeeakxlca": "/articles/closures-are-complicated", "/articles/shared/kvryhiwugtvq": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/untiuvxirhik": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/afshdqdholth": "/articles/regession-testing", "/articles/shared/bhftubljbomqpmifbibmzmptlxhoin": "/articles/attacking-sticky-problems", "/articles/shared/mfnhyysaffyw": "/articles/attacking-sticky-problems", "/articles/shared/grlayawwwoyf": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/hlsombnmusla": "/articles/building-enumerable-and-enumerator", "/articles/shared/zhontqliwdhh": "/articles/regession-testing", "/articles/shared/njcfajyyutly": "/articles/attacking-sticky-problems", "/articles/shared/rzljumrvzzcd": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/aetjlkbhkads": "/articles/building-enumerable-and-enumerator", "/articles/shared/yhukdnhxkdyb": "/articles/building-enumerable-and-enumerator", "/articles/shared/fuwcevrpwqew": "/articles/attacking-sticky-problems", "/articles/shared/xxgtqivufrho": "/articles/attacking-sticky-problems", "/articles/shared/grebhchngtak": "/articles/attacking-sticky-problems", "/articles/shared/mvzhovpjbghr": "/articles/closures-are-complicated", "/articles/shared/wibbdqozehlu": "/articles/regession-testing", "/articles/shared/fbnxpcginpsl": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/xhigsuygqtdc": "/articles/learning-new-things-step-by-step", "/articles/shared/clnfbshdlfdn": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/bfkvwijgisnb": "/articles/building-unix-style-command-line-applications", "/articles/shared/ggpyelodgogb": "/articles/closures-are-complicated", "/articles/shared/zobtvcmrcxrh": "/articles/from-requirements-discovery-to-release", "/articles/shared/oguxibnjirzj": "/articles/binary-file-formats", "/articles/shared/wmdaovsuvylu": "/articles/binary-file-formats", "/articles/shared/cccytelmderh": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/irbxrtptybia": "/articles/building-unix-style-command-line-applications", "/articles/shared/xwdsxkasobgr": "/articles/domain-specific-apis", "/articles/shared/edcjlxzuknbj": "/articles/closures-are-complicated", "/articles/shared/ozkzbsdmagcm": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/icsamrhtmfej": "/articles/attacking-sticky-problems", "/articles/shared/uajvuzciqgjx": "/articles/from-requirements-discovery-to-release", "/articles/shared/siuiqpntnikc": "/articles/domain-specific-apis", "/articles/shared/uvufhvokkywa": "/articles/attacking-sticky-problems", "/articles/shared/fksihratbzlh": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/orybzlukynvj": "/articles/learning-new-things-step-by-step", "/articles/shared/oiyqghimitvm": "/articles/closures-are-complicated", "/articles/shared/bkedysfptmvc": "/articles/building-unix-style-command-line-applications", "/articles/shared/rwffcqydsoyc": "/articles/domain-specific-apis", "/articles/shared/puamrkqbkcrv": "/articles/domain-specific-apis", "/articles/shared/bdhkmbkbtzcj": "/articles/from-requirements-discovery-to-release", "/articles/shared/yjpwjcfxlrsi": "/articles/building-unix-style-command-line-applications", "/articles/shared/tbsnutcdraox": "/articles/building-unix-style-command-line-applications", "/articles/shared/hvuailmwviaw": "/articles/learning-new-things-step-by-step", "/articles/shared/ybscjetutify": "/articles/regession-testing", "/articles/shared/ggosracggxsp": "/articles/binary-file-formats", "/articles/shared/wpfxqzecgmat": "/articles/from-requirements-discovery-to-release", "/articles/shared/qbfmufmactuc": "/articles/ways-to-load-code", "/articles/shared/tfcwlviryvao": "/articles/binary-file-formats", "/articles/shared/wdauwngtbewd": "/articles/building-unix-style-command-line-applications", "/articles/shared/flzbwtdwgsbg": "/articles/domain-specific-apis", "/articles/shared/yaeshsfhialn": "/articles/building-enumerable-and-enumerator", "/articles/shared/dhblpxjyzgfa": "/articles/designing-business-reporting-applications", "/articles/shared/dlmerjykpdmi": "/articles/from-requirements-discovery-to-release", "/articles/shared/tlsrwobdxawk": "/articles/building-unix-style-command-line-applications", "/articles/shared/blfczficoccp": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/pjetlemmfely": "/articles/closures-are-complicated", "/articles/shared/vjdrbuuivbqh": "/articles/building-unix-style-command-line-applications", "/articles/shared/beytalfzqjbn": "/articles/ways-to-load-code", "/articles/shared/sqxizcojkahr": "/articles/attacking-sticky-problems", "/articles/shared/usjwboqcbzgy": "/articles/domain-specific-apis", "/articles/shared/ujapmpclqavs": "/articles/ways-to-load-code", "/articles/shared/txareakicgpa": "/articles/building-enumerable-and-enumerator", "/articles/shared/zbbfouozxpqp": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/aybrtinazeyt": "/articles/building-unix-style-command-line-applications", "/articles/shared/gmuyxgsbtnma": "/articles/ways-to-load-code", "/articles/shared/ldvyrcgwecko": "/articles/domain-specific-apis", "/articles/shared/cbzwynqbhsyh": "/articles/building-unix-style-command-line-applications", "/articles/shared/hdjyhwcafxam": "/articles/domain-specific-apis", "/articles/shared/cgdeewimgstu": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/yxoyysnsewdp": "/articles/regession-testing", "/articles/shared/orbsaqkwqicl": "/articles/domain-specific-apis", "/articles/shared/dgkxuzqwtpit": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/hmnhpjilxnah": "/articles/learning-new-things-step-by-step", "/articles/shared/mvbfacsnstqn": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/gthgvfebjvyn": "/articles/designing-business-reporting-applications", "/articles/shared/lgalklducgaa": "/articles/from-requirements-discovery-to-release", "/articles/shared/fiymoaropxuc": "/articles/binary-file-formats", "/articles/shared/gtakpoxubfpl": "/articles/designing-business-reporting-applications", "/articles/shared/uwjyuviigswd": "/articles/from-requirements-discovery-to-release", "/articles/shared/jnnrplpdwzfp": "/articles/learning-new-things-step-by-step", "/articles/shared/ljqopnsvxjzh": "/articles/attacking-sticky-problems", "/articles/shared/zsxrfmidlgyc": "/articles/building-unix-style-command-line-applications", "/articles/shared/oelhlibhtlkx": "/articles/binary-file-formats", "/articles/shared/ncjcwonhlnce": "/articles/from-requirements-discovery-to-release", "/articles/shared/fumwalwsfdst": "/articles/binary-file-formats", "/articles/shared/lbgpaazchnpj": "/articles/from-requirements-discovery-to-release", "/articles/shared/olsrjfhcnhag": "/articles/domain-specific-apis", "/articles/shared/zqggkgvqwvac": "/articles/domain-specific-apis", "/articles/shared/lattisgyqhah": "/articles/designing-business-reporting-applications", "/articles/shared/ipqqrlsoigge": "/articles/binary-file-formats", "/articles/shared/fjafygjaeyrh": "/articles/closures-are-complicated", "/articles/shared/jvctenwcuzvi": "/articles/binary-file-formats", "/articles/shared/vvvfqukwvbmz": "/articles/building-unix-style-command-line-applications", "/articles/shared/xliatlvaclkt": "/articles/attacking-sticky-problems", "/articles/shared/xwmlqlklywuu": "/articles/binary-file-formats", "/articles/shared/jleygxejeopq": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/xkeitikligle": "/articles/designing-business-reporting-applications", "/articles/shared/ydzfracwkrlp": "/articles/building-unix-style-command-line-applications", "/articles/shared/uxjxaggortxi": "/articles/ways-to-load-code", "/articles/shared/nlhxgszkgenq": "/articles/from-requirements-discovery-to-release", "/articles/shared/ggxkefqlsmlv": "/articles/learning-new-things-step-by-step", "/articles/shared/ttlzqkjwpath": "/articles/domain-specific-apis", "/articles/shared/lkpzdadhhtkp": "/articles/designing-business-reporting-applications", "/articles/shared/lngkebjdggen": "/articles/ways-to-load-code", "/articles/shared/vqxfqzgzsgiu": "/articles/from-requirements-discovery-to-release", "/articles/shared/jcmvbryftvza": "/articles/from-requirements-discovery-to-release", "/articles/shared/yxcbvhtcaguv": "/articles/domain-specific-apis", "/articles/shared/lbbvdppvtfrp": "/articles/building-unix-style-command-line-applications", "/articles/shared/nchlcauyyves": "/articles/designing-business-reporting-applications", "/articles/shared/emvbjnwkpnbl": "/articles/attacking-sticky-problems", "/articles/shared/adcfjcatwtvl": "/articles/domain-specific-apis", "/articles/shared/lexwdpwshgkk": "/articles/ways-to-load-code", "/articles/shared/ncjbqscncqqj": "/articles/from-requirements-discovery-to-release", "/articles/shared/vpcfjkxutiyv": "/articles/closures-are-complicated", "/articles/shared/pgjflhjizehm": "/articles/building-enumerable-and-enumerator", "/articles/shared/lwimnxutkmok": "/articles/regession-testing", "/articles/shared/tlmvdnjwvexd": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/mtkuwubhcapy": "/articles/from-requirements-discovery-to-release", "/articles/shared/puyxfqaigzzw": "/articles/learning-new-things-step-by-step", "/articles/shared/aaspkngfkpil": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/uqsorkfodqyf": "/articles/building-unix-style-command-line-applications", "/articles/shared/srofgncjpwjv": "/articles/from-requirements-discovery-to-release", "/articles/shared/ururmbpuuhsv": "/articles/domain-specific-apis", "/articles/shared/rbcfhbgimtdh": "/articles/binary-file-formats", "/articles/shared/kdsdqndvyljl": "/articles/designing-business-reporting-applications", "/articles/shared/culsaedvjzzs": "/articles/building-unix-style-command-line-applications", "/articles/shared/qdmqnfjbombz": "/articles/arguments-and-results-1", "/articles/shared/vnmzqflvzhis": "/articles/arguments-and-results-2", "/articles/shared/rdwyoyumxnlq": "/articles/designing-business-reporting-applications", "/articles/shared/meobpzhqogts": "/articles/building-enumerable-and-enumerator", "/articles/shared/tzijvbhdqwdu": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/byufcvtcgxvi": "/articles/arguments-and-results-1", "/articles/shared/hycpppruqwrr": "/articles/arguments-and-results-1", "/articles/shared/rzxjkisehuhb": "/articles/arguments-and-results-1", "/articles/shared/unymuglndxfd": "/articles/closures-are-complicated", "/articles/shared/uiamqwgggabk": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/mhbfyuaskorw": "/articles/regession-testing", "/articles/shared/mlydpxfkmjwu": "/articles/arguments-and-results-2", "/articles/shared/lpqvszhgthnx": "/articles/arguments-and-results-2", "/articles/shared/lnqpxlokfqjf": "/articles/arguments-and-results-1", "/articles/shared/gyyxgmppbhyd": "/articles/building-enumerable-and-enumerator", "/articles/shared/xyfxdqfeofaz": "/articles/from-requirements-discovery-to-release", "/articles/shared/szylebvdyzfa": "/articles/arguments-and-results-1", "/articles/shared/fapnjtykmdus": "/articles/arguments-and-results-1", "/articles/shared/jaapzukhvljh": "/articles/ways-to-load-code", "/articles/shared/mwxtcpzvlnju": "/articles/ways-to-load-code", "/articles/shared/tsushbxyfxnq": "/articles/exploring-a-turing-tarpit", "/articles/shared/gsohovdosmcd": "/articles/attacking-sticky-problems", "/articles/shared/xyewyazddyyt": "/articles/arguments-and-results-2", "/articles/shared/dsnmzdjxhvjk": "/articles/ways-to-load-code", "/articles/shared/pjckiqpkqsfh": "/articles/attacking-sticky-problems", "/articles/shared/jokazrtvssvh": "/articles/attacking-sticky-problems", "/articles/shared/bwgflabwncjv": "/articles/exploring-a-turing-tarpit", "/articles/shared/mcnmuivvxcea": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/qujciwrtxvwk": "/articles/ways-to-load-code", "/articles/shared/bxgfknkfxvrg": "/articles/arguments-and-results-2", "/articles/shared/spuzrwstlluw": "/articles/arguments-and-results-2", "/articles/shared/agufeovlqeie": "/articles/arguments-and-results-2", "/articles/shared/hrmkvwlszorb": "/articles/patterns-for-building-excellent-examples", "/articles/shared/oznhcdtnfudc": "/articles/qualities-of-great-software", "/articles/shared/emzcvhvilsmo": "/articles/arguments-and-results-1", "/articles/shared/mjngfenbdlpv": "/articles/arguments-and-results-1", "/articles/shared/jjosdbncyrda": "/articles/arguments-and-results-2", "/articles/shared/ndejcopauhne": "/articles/spiral-staircase-of-refactoring", "/articles/shared/clspppbqjfzc": "/articles/arguments-and-results-1", "/articles/shared/lefusijeqfun": "/articles/arguments-and-results-2", "/articles/shared/wscqgyfwvvnl": "/articles/arguments-and-results-1", "/articles/shared/wyutkwtqhcmp": "/articles/closures-are-complicated", "/articles/shared/cpihumlznruh": "/articles/building-unix-style-command-line-applications", "/articles/shared/tdbvmgxdvasm": "/articles/regession-testing", "/articles/shared/lcmhoyyelpkx": "/articles/domain-specific-apis", "/articles/shared/wfsyjrkiwidq": "/articles/patterns-for-building-excellent-examples", "/articles/shared/ylgznkpefyzo": "/articles/learning-new-things-step-by-step", "/articles/shared/npfgvexfoxir": "/articles/qualities-of-great-software", "/articles/shared/cqdvabiajnwp": "/articles/ways-to-load-code", "/articles/shared/vwdmbytrthfd": "/articles/ways-to-load-code", "/articles/shared/zbffwcmcltkw": "/articles/patterns-for-building-excellent-examples", "/articles/shared/cesapplgyhaq": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/dzmnweksykrt": "/articles/patterns-for-building-excellent-examples", "/articles/shared/nakyzsibivjl": "/articles/attacking-sticky-problems", "/articles/shared/kyozdrwcrsii": "/articles/closures-are-complicated", "/articles/shared/gyuvyqizvjyb": "/articles/ways-to-load-code", "/articles/shared/mupuergickjz": "/articles/arguments-and-results-2", "/articles/shared/pchnacwopmna": "/articles/qualities-of-great-software", "/articles/shared/czdlxcstkggu": "/articles/ways-to-load-code", "/articles/shared/zmrfnxqpahmf": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/dqsbhpfyehms": "/articles/ways-to-load-code", "/articles/shared/uuuasrxjzbct": "/articles/patterns-for-building-excellent-examples", "/articles/shared/atruyujhflpc": "/articles/patterns-for-building-excellent-examples", "/articles/shared/lqolmknwhdsb": "/articles/patterns-for-building-excellent-examples", "/articles/shared/otwfifaqzplb": "/articles/arguments-and-results-1", "/articles/shared/nspnctupwmur": "/articles/domain-specific-apis", "/articles/shared/vbmlgkdtahzd": "/articles/learning-new-things-step-by-step", "/articles/shared/temqnjljgufk": "/articles/arguments-and-results-2", "/articles/shared/ztwbnplugqxu": "/articles/qualities-of-great-software", "/articles/shared/zndsdpxibrjm": "/articles/arguments-and-results-1", "/articles/shared/ejemjhnsoqkk": "/articles/arguments-and-results-1", "/articles/shared/zljwufrfgpxi": "/articles/exploring-a-turing-tarpit", "/articles/shared/zpjvngcfptuc": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/vyhfnrtouyri": "/articles/exploring-a-turing-tarpit", "/articles/shared/siyilifkjjkq": "/articles/regession-testing", "/articles/shared/rfzujpvzkkaz": "/articles/closures-are-complicated", "/articles/shared/mkqgyrlxwzbl": "/articles/domain-specific-apis", "/articles/shared/brctpvwqgjcp": "/articles/qualities-of-great-software", "/articles/shared/xwrjgudkxhma": "/articles/qualities-of-great-software", "/articles/shared/whwojuttqkdm": "/articles/disciplined-inheritance-1", "/articles/shared/uvgdkprzmoqf": "/articles/disciplined-inheritance-1", "/articles/shared/uqngwupajrji": "/articles/framework-design-and-implementation-1", "/articles/shared/qtusefxrpben": "/articles/framework-design-and-implementation-1", "/articles/shared/dqazpxgcamvx": "/articles/building-unix-style-command-line-applications", "/articles/shared/htpodhdifezp": "/articles/disciplined-inheritance-2", "/articles/shared/dhracppxyrsx": "/articles/framework-design-and-implementation-1", "/articles/shared/sqdngzrhmqms": "/articles/spiral-staircase-of-refactoring", "/articles/shared/tqpmnkbcvogn": "/articles/framework-design-and-implementation-2", "/articles/shared/kfeqgptkyhsd": "/articles/using-games-to-practice-domain-modeling", "/articles/shared/bsqskoizjajk": "/articles/spiral-staircase-of-refactoring", "/articles/shared/ajkhgluoxlyh": "/articles/disciplined-inheritance-2", "/articles/shared/ihlfxtwgquny": "/articles/using-games-to-practice-domain-modeling", "/articles/shared/mdvyedupaiek": "/articles/framework-design-and-implementation-1", "/articles/shared/lxgettcjiggh": "/articles/disciplined-inheritance-2", "/articles/shared/nikpyolkkjjj": "/articles/building-enumerable-and-enumerator", "/articles/shared/yvvqghqiwlng": "/articles/disciplined-inheritance-1", "/articles/shared/uirhkilcayfv": "/articles/disciplined-inheritance-1", "/articles/shared/cvfciwdfckrs": "/articles/qualities-of-great-software", "/articles/shared/wzrbmdcykpkc": "/articles/patterns-for-building-excellent-examples", "/articles/shared/ptpnykidmdgf": "/articles/framework-design-and-implementation-1", "/articles/shared/iswpuvojoplc": "/articles/spiral-staircase-of-refactoring", "/articles/shared/dsuyjrgnqjkx": "/articles/framework-design-and-implementation-2", "/articles/shared/bwfbuoewwgqe": "/articles/qualities-of-great-software", "/articles/shared/rruwgxwojunq": "/articles/exploring-a-turing-tarpit", "/articles/shared/ldorzqddtfjc": "/articles/spiral-staircase-of-refactoring", "/articles/shared/lxotxsywetyf": "/articles/spiral-staircase-of-refactoring", "/articles/shared/uqwqwqdzydaa": "/articles/qualities-of-great-software", "/articles/shared/ralurdydoqeu": "/articles/disciplined-inheritance-1", "/articles/shared/bbajxxjlzupb": "/articles/disciplined-inheritance-1", "/articles/shared/vtuegejfdyrk": "/articles/using-games-to-practice-domain-modeling", "/articles/shared/wyhoahjoxvme": "/articles/qualities-of-great-software", "/articles/shared/olyxmpiokesi": "/articles/framework-design-and-implementation-2", "/articles/shared/ngxqcsjtlbrz": "/articles/framework-design-and-implementation-2", "/articles/shared/gkytisdtpghg": "/articles/framework-design-and-implementation-1", "/articles/shared/jbgoqkdunish": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/pbflvfoiawak": "/articles/tdd-costs-and-benefits", "/articles/shared/zwosyniwhsie": "/articles/ways-to-load-code", "/articles/shared/nhlzawzhjlgf": "/articles/ways-to-load-code", "/articles/shared/pcchjfzkeduc": "/articles/disciplined-inheritance-2", "/articles/shared/kedtvhvneuns": "/articles/ways-to-load-code", "/articles/shared/zdchphargjcp": "/articles/framework-design-and-implementation-1", "/articles/shared/cbjqekappqgs": "/articles/spiral-staircase-of-refactoring", "/articles/shared/jhjjbnhhhdcw": "/articles/exploring-a-turing-tarpit", "/articles/shared/crxcokipvcfp": "/articles/patterns-for-building-excellent-examples", "/articles/shared/gdcdjhkyqgpa": "/articles/using-games-to-practice-domain-modeling", "/articles/shared/pbtbdtanbyam": "/articles/domain-specific-apis", "/articles/shared/fxfxhidolvdy": "/articles/arguments-and-results-1", "/articles/shared/fakvtuzlvgku": "/articles/binary-file-formats", "/articles/shared/kkzqzocegvde": "/articles/attacking-sticky-problems", "/articles/shared/kzcgzyjbdgzj": "/articles/spiral-staircase-of-refactoring", "/articles/shared/atokrjyfhofy": "/articles/exploring-a-turing-tarpit", "/articles/shared/xtvlqfgasqzd": "/articles/coding-in-the-danger-zone", "/articles/shared/uhifvgzefxgg": "/articles/designing-business-reporting-applications", "/articles/shared/mcjiobzqlsuh": "/articles/qualities-of-great-software", "/articles/shared/ggcwduoyfqmz": "/articles/building-enumerable-and-enumerator", "/articles/shared/kiubjhoamkvc": "/articles/disciplined-inheritance-1", "/articles/shared/hkznelyhcwlq": "/articles/disciplined-inheritance-2", "/articles/shared/jgxzhbpvmalc": "/articles/using-games-to-practice-domain-modeling", "/articles/shared/odrrthmfgrpg": "/articles/disciplined-inheritance-1", "/articles/shared/aprnlnlwnpsr": "/articles/qualities-of-great-software", "/articles/shared/kcopiqriguko": "/articles/disciplined-inheritance-2", "/articles/shared/bpjreqnkguaf": "/articles/disciplined-inheritance-2", "/articles/shared/uqsuczzpbgpn": "/articles/closures-are-complicated", "/articles/shared/yhiohmzlwssb": "/articles/framework-design-and-implementation-2", "/articles/shared/ssusfsptrpkw": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/kccrxqyurbdr": "/articles/learning-new-things-step-by-step", "/articles/shared/gavottflgsrf": "/articles/patterns-for-building-excellent-examples", "/articles/shared/tdmctxztsdol": "/articles/using-games-to-practice-domain-modeling", "/articles/shared/eezhxhgldjqj": "/articles/framework-design-and-implementation-1", "/articles/shared/vkuussqfkbhb": "/articles/disciplined-inheritance-1", "/articles/shared/bzsghxrvvuvw": "/articles/using-games-to-practice-domain-modeling", "/articles/shared/lmchbavrxvyq": "/articles/using-games-to-practice-domain-modeling", "/articles/shared/tettexthouif": "/articles/disciplined-inheritance-2", "/articles/shared/wjklovnmsywn": "/articles/disciplined-inheritance-1", "/articles/shared/iumrvfluosyi": "/articles/attacking-sticky-problems", "/articles/shared/pbzedqoxzgqy": "/articles/coding-in-the-danger-zone", "/articles/shared/ncjvmsmndcru": "/articles/disciplined-inheritance-2", "/articles/shared/nklwaodhatws": "/articles/ways-to-load-code", "/articles/shared/qyqqvmzzpxfv": "/articles/using-games-to-practice-domain-modeling", "/articles/shared/ydlxesyrwpct": "/articles/disciplined-inheritance-1", "/articles/shared/rtzdzdwwzfxm": "/articles/framework-design-and-implementation-1", "/articles/shared/thuvorfdqrni": "/articles/from-requirements-discovery-to-release", "/articles/shared/xmgmjegmefwy": "/articles/domain-specific-apis", "/articles/shared/ptuhxprtplxp": "/articles/using-games-to-practice-domain-modeling", "/articles/shared/bwzyazqaekib": "/articles/coding-in-the-danger-zone", "/articles/shared/kypauclcduek": "/articles/disciplined-inheritance-1", "/articles/shared/hvilyokcyvzp": "/articles/arguments-and-results-2", "/articles/shared/clcjhbkaxkzg": "/articles/disciplined-inheritance-1", "/articles/shared/dezdcvwtffbw": "/articles/regession-testing", "/articles/shared/fabeacmfpgjf": "/articles/coding-in-the-danger-zone", "/articles/shared/gymmilonloxu": "/articles/ways-to-load-code", "/articles/shared/lwvegkvhalqr": "/articles/coding-in-the-danger-zone", "/articles/shared/hvqcipxlmgcs": "/articles/coding-in-the-danger-zone", "/articles/shared/odokrbauoika": "/articles/building-enumerable-and-enumerator", "/articles/shared/vjurlggpsnae": "/articles/using-games-to-practice-domain-modeling", "/articles/shared/fmzqblswkvqf": "/articles/disciplined-inheritance-1", "/articles/shared/rjltkjtldzze": "/articles/spiral-staircase-of-refactoring", "/articles/shared/ogeksyptajzi": "/articles/qualities-of-great-software", "/articles/shared/lqprqlzivydl": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/hzufzwxrygux": "/articles/testing-private-methods", "/articles/shared/yjurdytfrayl": "/articles/configurable-applications-1", "/articles/shared/svozigfmvmcn": "/articles/creational-design-patterns", "/articles/shared/uwezsynmqbiv": "/articles/from-prototype-to-minimal-product", "/articles/shared/mzsbpueqvqxw": "/articles/uses-for-modules-1", "/articles/shared/mdetccehjaoe": "/articles/using-games-to-practice-domain-modeling", "/articles/shared/tellgkdbbxaf": "/articles/closures-are-complicated", "/articles/shared/bispnscwbrfp": "/articles/tdd-costs-and-benefits", "/articles/shared/xltklrjprxxh": "/articles/tdd-costs-and-benefits", "/articles/shared/fmextloayuvh": "/articles/method-lookup-1", "/articles/shared/bynzwwcwrlqz": "/articles/structural-design-patterns", "/articles/shared/qpszsyafhzep": "/articles/tdd-costs-and-benefits", "/articles/shared/kwkenaofhtgb": "/articles/patterns-for-building-excellent-examples", "/articles/shared/ranqdebtcsdw": "/articles/method-lookup-1", "/articles/shared/ycahmlkjktke": "/articles/tdd-costs-and-benefits", "/articles/shared/ppmlirclctdw": "/articles/tdd-costs-and-benefits", "/articles/shared/ztoebdnnkmma": "/articles/tdd-costs-and-benefits", "/articles/shared/fxjhcrlrsrxo": "/articles/disciplined-inheritance-1", "/articles/shared/yiwriehxfzjq": "/articles/tdd-costs-and-benefits", "/articles/shared/thfqanrrfbag": "/articles/tdd-costs-and-benefits", "/articles/shared/qwwzwjjaljod": "/articles/tdd-costs-and-benefits", "/articles/shared/ykvalnbgktsw": "/articles/qualities-of-great-software", "/articles/shared/jltyglotmhxo": "/articles/tdd-costs-and-benefits", "/articles/shared/mapigbsafidz": "/articles/tdd-costs-and-benefits", "/articles/shared/cnsjnmuvvfnn": "/articles/building-enumerable-and-enumerator", "/articles/shared/kzphoizdemjz": "/articles/uses-for-modules-3", "/articles/shared/iuaydxtavugo": "/articles/building-unix-style-command-line-applications", "/articles/shared/qeuucqhjlocn": "/articles/ruby-hacker-writers", "/articles/shared/mlgmtigwkhtf": "/articles/from-prototype-to-minimal-product", "/articles/shared/kvipxaojqmha": "/articles/from-prototype-to-minimal-product", "/articles/shared/htsmeduujvpj": "/articles/qualities-of-great-software", "/articles/shared/jrbuwkpuwudi": "/articles/tdd-costs-and-benefits", "/articles/shared/moqlpyitssbj": "/articles/tdd-costs-and-benefits", "/articles/shared/sdkystgqkfoz": "/articles/from-prototype-to-minimal-product", "/articles/shared/hsxxvojeoxce": "/articles/tdd-costs-and-benefits", "/articles/shared/jrrtkjlqaiax": "/articles/qualities-of-great-software", "/articles/shared/tjicheopindl": "/articles/coding-in-the-danger-zone", "/articles/shared/usokptzzgocv": "/articles/tdd-costs-and-benefits", "/articles/shared/qmmppwavsbbq": "/articles/tdd-costs-and-benefits", "/articles/shared/idgrandrredk": "/articles/framework-design-and-implementation-1", "/articles/shared/hjjxulzawuio": "/articles/spiral-staircase-of-refactoring", "/articles/shared/hwwdvyvcnsvz": "/articles/patterns-for-building-excellent-examples", "/articles/shared/qtmxkhtwarau": "/articles/qualities-of-great-software", "/articles/shared/ihreeezkpsmv": "/articles/coding-in-the-danger-zone", "/articles/shared/tpfepfffxzzi": "/articles/using-games-to-practice-domain-modeling", "/articles/shared/znibfubxtjpl": "/articles/disciplined-inheritance-2", "/articles/shared/uecrbiznivfn": "/articles/uses-for-modules-3", "/articles/shared/gzqebaubupdx": "/articles/framework-design-and-implementation-2", "/articles/shared/tccovofpgljw": "/articles/framework-design-and-implementation-1", "/articles/shared/qmuotpjwwuml": "/articles/spiral-staircase-of-refactoring", "/articles/shared/yedoejlwktnp": "/articles/exploring-a-turing-tarpit", "/articles/shared/joifqajvpmdw": "/articles/tdd-costs-and-benefits", "/articles/shared/frfafxrnkgkk": "/articles/method-lookup-1", "/articles/shared/jdfzhrkreuqo": "/articles/method-lookup-1", "/articles/shared/ddbcjbscfrru": "/articles/tdd-costs-and-benefits", "/articles/shared/arjkcnzqireu": "/articles/method-lookup-1", "/articles/shared/lhxbnfbwqucn": "/articles/building-enumerable-and-enumerator", "/articles/shared/jyhgousstigi": "/articles/tdd-costs-and-benefits", "/articles/shared/mwuzpwptlucs": "/articles/tdd-costs-and-benefits", "/articles/shared/jrezznoeehld": "/articles/tdd-costs-and-benefits", "/articles/shared/abdmyzqwowaz": "/articles/tdd-costs-and-benefits", "/articles/shared/hqypahwqgups": "/articles/building-unix-style-command-line-applications", "/articles/shared/agstqiogssqn": "/articles/from-prototype-to-minimal-product", "/articles/shared/dxrxbhjluvpy": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/fngkajvxfkni": "/articles/method-lookup-1", "/articles/shared/jsihemdfovbz": "/articles/from-prototype-to-minimal-product", "/articles/shared/dbkexhvfhfly": "/articles/from-prototype-to-minimal-product", "/articles/shared/lhtwwqosjjpf": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/lulytjojykvw": "/articles/connascence", "/articles/shared/wqoomzlerqot": "/articles/using-games-to-practice-domain-modeling", "/articles/shared/qcfmpzclbvqx": "/articles/uses-for-modules-1", "/articles/shared/azhctfpqwgev": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/cnsjhywgezbe": "/articles/connascence", "/articles/shared/nvqgopvnmwls": "/articles/from-prototype-to-minimal-product", "/articles/shared/bdhricibwowc": "/articles/uses-for-modules-3", "/articles/shared/vgswwwuwuwph": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/cgkwfbrnkeup": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/ijauumypabej": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/kcnwhizkumot": "/articles/from-prototype-to-minimal-product", "/articles/shared/ffasvnssaxek": "/articles/solving-the-scoring-predictions-kata", "/articles/shared/xwrpzvajwyxy": "/articles/from-prototype-to-minimal-product", "/articles/shared/dptdanqovucu": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/zpahykypgpvv": "/articles/solving-the-scoring-predictions-kata", "/articles/shared/gsqsqzqrrstv": "/articles/tdd-costs-and-benefits", "/articles/shared/vsdvtxxadrtz": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/rgcvskgbwkof": "/articles/connascence", "/articles/shared/vflwjeezbyyk": "/articles/tdd-costs-and-benefits", "/articles/shared/bnmkyhhysoye": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/ksknlabzkqtx": "/articles/solving-the-scoring-predictions-kata", "/articles/shared/iubttxjvgdru": "/articles/solving-the-scoring-predictions-kata", "/articles/shared/uiqbzhxjulix": "/articles/solving-the-scoring-predictions-kata", "/articles/shared/wwtehotoulfk": "/articles/closures-are-complicated", "/articles/shared/oxcpupjsuqik": "/articles/method-lookup-1", "/articles/shared/pdsoxhovzzia": "/articles/solving-the-scoring-predictions-kata", "/articles/shared/enwcaticyuqv": "/articles/obfuscations-of-christmas-past", "/articles/shared/exckjeiytsaw": "/articles/framework-design-and-implementation-2", "/articles/shared/ccivepfxynrq": "/articles/thoughts-on-mocking-1", "/articles/shared/pcuqjoxkbjgr": "/articles/solving-the-scoring-predictions-kata", "/articles/shared/vpxpovppchww": "/articles/arguments-and-results-1", "/articles/shared/rvzglzyshhuu": "/articles/from-prototype-to-minimal-product", "/articles/shared/nkvxttwspiwm": "/articles/solving-the-scoring-predictions-kata", "/articles/shared/stjcuuzdbagl": "/articles/building-unix-style-command-line-applications", "/articles/shared/ucydhkoezonq": "/articles/confident-ruby", "/articles/shared/fraypzrdkywl": "/articles/hidden-costs-of-inheritance", "/articles/shared/vvhnbpyctgdz": "/articles/uses-for-modules-1", "/articles/shared/fgderzfbeajp": "/articles/tdd-costs-and-benefits", "/articles/shared/bpccspdxyuzz": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/ydnrmshcewkt": "/articles/solving-the-scoring-predictions-kata", "/articles/shared/qprzixgmahgl": "/articles/persisting-relations-in-a-polyglot-world", "/articles/shared/rclnssqzsbbb": "/articles/structural-design-patterns", "/articles/shared/mzuunepjvgks": "/articles/disciplined-inheritance-1", "/articles/shared/bkwdmsezbuds": "/articles/disciplined-inheritance-2", "/articles/shared/hjxnctzvvnwv": "/articles/confident-ruby", "/articles/shared/yktmednmvkyv": "/articles/confident-ruby", "/articles/shared/pmsipuhjlyqa": "/articles/designing-business-reporting-applications", "/articles/shared/bxtmnwdjidza": "/articles/uses-for-modules-2", "/articles/shared/jtebvnftkzwb": "/articles/method-lookup-2", "/articles/shared/wlncjrzzfwnu": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/bjegdpxpgdso": "/articles/persisting-relations-in-a-polyglot-world", "/articles/shared/cljxpzpdzjwu": "/articles/method-lookup-2", "/articles/shared/cpqewwhqoaeq": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/yrghzjqusbqp": "/articles/solving-the-scoring-predictions-kata", "/articles/shared/wfahdxltkpmd": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/eimeqlfiktob": "/articles/method-lookup-2", "/articles/shared/spminlhmvvhr": "/articles/persisting-relations-in-a-polyglot-world", "/articles/shared/rbrtqiwikano": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/gsydpqiqkgqb": "/articles/from-requirements-discovery-to-release", "/articles/shared/mditysujwjcm": "/articles/hidden-costs-of-inheritance", "/articles/shared/gdhyskcixuhs": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/wdykkrmdfjvf": "/articles/arguments-and-results-2", "/articles/shared/gqqdnsoqsobn": "/articles/solving-the-scoring-predictions-kata", "/articles/shared/uqjmyadljmfz": "/articles/solving-the-scoring-predictions-kata", "/articles/shared/rfnnmitnyhkk": "/articles/persisting-relations-in-a-polyglot-world", "/articles/shared/loutozwbesvq": "/articles/confident-ruby", "/articles/shared/qwukqamaboim": "/articles/confident-ruby", "/articles/shared/sgikyonmawat": "/articles/confident-ruby", "/articles/shared/kffidvdcttue": "/articles/arguments-and-results-1", "/articles/shared/jzuapmexswqk": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/rcywzmzgjtnq": "/articles/method-lookup-1", "/articles/shared/qyvfdhhyghem": "/articles/method-lookup-1", "/articles/shared/wpuqbuzswtiz": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/cseupxhjclwu": "/articles/building-enumerable-and-enumerator", "/articles/shared/xyiwxormouxh": "/articles/persisting-relations-in-a-polyglot-world", "/articles/shared/qvwtxmqcfhys": "/articles/solving-the-scoring-predictions-kata", "/articles/shared/sxaxygrhrrfi": "/articles/method-lookup-1", "/articles/shared/gkfvghzunnsv": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/lskonfjygbvp": "/articles/confident-ruby", "/articles/shared/wudydnfyhyun": "/articles/thoughts-on-mocking-2", "/articles/shared/btrafaxjlgsv": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/vhxldjiwbifo": "/articles/exploring-a-turing-tarpit", "/articles/shared/kazsjyuqbsne": "/articles/qualities-of-great-software", "/articles/shared/zsnvgupzifil": "/articles/confident-ruby", "/articles/shared/ucqsaohjxddv": "/articles/implementing-the-active-record-pattern-2", "/articles/shared/vzdhpnbjypma": "/articles/hidden-costs-of-inheritance", "/articles/shared/zmkztdzucsgv": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/xnfkcvdmuxpr": "/articles/confident-ruby", "/articles/shared/fhxizmopzgop": "/articles/persisting-relations-in-a-polyglot-world", "/articles/shared/hgsxzteksrkx": "/articles/confident-ruby", "/articles/shared/kriejxgeyiuc": "/articles/solving-the-scoring-predictions-kata", "/articles/shared/tvtqekhpyjla": "/articles/solid-design-principles", "/articles/shared/ezpvjkbaqvwb": "/articles/confident-ruby", "/articles/shared/hacpwcqrpnxz": "/articles/confident-ruby", "/articles/shared/asfflhsizdki": "/articles/hidden-costs-of-inheritance", "/articles/shared/kkefgrtpjjqg": "/articles/hidden-costs-of-inheritance", "/articles/shared/rfwgrvjmvtqu": "/articles/disciplined-inheritance-1", "/articles/shared/lsibqtrsjqug": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/jxmpwlcuwoej": "/articles/hidden-costs-of-inheritance", "/articles/shared/vagkrbkzhjop": "/articles/confident-ruby", "/articles/shared/kevdfawqcrac": "/articles/from-prototype-to-minimal-product", "/articles/shared/pnmwvyoavfah": "/articles/tdd-costs-and-benefits", "/articles/shared/qazvqhxjfjlc": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/tjxwkksjwcmq": "/articles/disciplined-inheritance-2", "/articles/shared/goiwglvezuip": "/articles/hidden-costs-of-inheritance", "/articles/shared/bgjjfrwauppz": "/articles/confident-ruby", "/articles/shared/bbispwpkwgkn": "/articles/confident-ruby", "/articles/shared/worrmthrewwl": "/articles/hidden-costs-of-inheritance", "/articles/shared/tcumguvaedhn": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/dnfqqwzeceun": "/articles/method-lookup-1", "/articles/shared/bkizflpnyfif": "/articles/method-lookup-1", "/articles/shared/kizftpuglxpa": "/articles/method-lookup-1", "/articles/shared/gcbqgbwxyhzt": "/articles/disciplined-inheritance-1", "/articles/shared/pamacngebgdz": "/articles/hidden-costs-of-inheritance", "/articles/shared/msibsnovgtiq": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/aujchzmomomc": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/befvsedkuuwj": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/gvckrherssmm": "/articles/method-lookup-1", "/articles/shared/vawlgkoywpek": "/articles/hidden-costs-of-inheritance", "/articles/shared/tpfojdmmsaqb": "/articles/using-games-to-practice-domain-modeling", "/articles/shared/rdfqmdtelyux": "/articles/confident-ruby", "/articles/shared/prudoxwxxudi": "/articles/hidden-costs-of-inheritance", "/articles/shared/yisdqrcctbcp": "/articles/persisting-relations-in-a-polyglot-world", "/articles/shared/gnktqzkcostc": "/articles/hidden-costs-of-inheritance", "/articles/shared/nktatcwtamrg": "/articles/connascence", "/articles/shared/ihlsofrzxshr": "/articles/hidden-costs-of-inheritance", "/articles/shared/sgxrboeujrxr": "/articles/solid-design-principles", "/articles/shared/phiuuswyhlwx": "/articles/creational-design-patterns", "/articles/shared/yddazggrvift": "/articles/disciplined-inheritance-1", "/articles/shared/cqahltqzifyr": "/articles/confident-ruby", "/articles/shared/savznbcjopex": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/tmxmprhfrpwq": "/articles/ways-to-load-code", "/articles/shared/gokindqiyczr": "/articles/confident-ruby", "/articles/shared/ohstvgfvromg": "/articles/domain-specific-apis", "/articles/shared/wngbjohcvczx": "/articles/connascence", "/articles/shared/tejkcfclscsu": "/articles/structural-design-patterns", "/articles/shared/qlufudtfzbxb": "/articles/uses-for-modules-1", "/articles/shared/mmpmjpncppcr": "/articles/uses-for-modules-2", "/articles/shared/ahaaayhhavcl": "/articles/uses-for-modules-3", "/articles/shared/aelzksxdquns": "/articles/uses-for-modules-3a", "/articles/shared/rvqovmwfqqlk": "/articles/uses-for-modules-4", "/articles/shared/ekbftpjmdrss": "/articles/closures-are-complicated", "/articles/shared/yvhssahgmuzc": "/articles/building-enumerable-and-enumerator", "/articles/shared/wwairvvifmpr": "/articles/obfuscations-of-christmas-past", "/articles/shared/xjhlahzmvnwy": "/articles/using-games-to-practice-domain-modeling", "/articles/shared/pjyccbgoqabk": "/articles/hidden-costs-of-inheritance", "/articles/shared/miyivgvpnnlc": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/mcstenssvayn": "/articles/implementing-the-active-record-pattern-2", "/articles/shared/bgbiaezlwiej": "/articles/from-prototype-to-minimal-product", "/articles/shared/rjnvaciewihy": "/articles/testing-private-methods", "/articles/shared/efcnhaqphzxu": "/articles/end-to-end-testing-is-essential", "/articles/shared/spsddxmgppsq": "/articles/end-to-end-testing-is-essential", "/articles/shared/kltlatrdieuo": "/articles/qualities-of-great-software", "/articles/shared/ddcmfpsulavf": "/articles/ways-to-load-code", "/articles/shared/rhfxdyjqhgdy": "/articles/meditations-on-bad-and-good-code-2", "/articles/shared/gwzrmcxreovz": "/articles/mock-objects-deeply-influence-design", "/articles/shared/ikbmonxlljuh": "/articles/ruby-hackers", "/articles/shared/yadkfiqraimz": "/articles/method-lookup-1", "/articles/shared/xraerhtpuwue": "/articles/hidden-costs-of-inheritance", "/articles/shared/vpqmwrhegmcj": "/articles/dirty-testing-secrets", "/articles/shared/qqoavhczsrgh": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/rgkrcftyxofn": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/djevxnmqotai": "/articles/meditations-on-bad-and-good-code-1", "/articles/shared/pxfotvjsfdyg": "/articles/meditations-on-bad-and-good-code-2", "/articles/shared/ykhqyaduhllv": "/articles/meditations-on-bad-and-good-code-1", "/articles/shared/vkvkpfxlfuka": "/articles/implementing-the-active-record-pattern-2", "/articles/shared/metjoeoweijc": "/articles/implementing-the-active-record-pattern-2", "/articles/shared/ahqjgeokgvgx": "/articles/implementing-the-active-record-pattern-2", "/articles/shared/chirbofgelef": "/articles/rapid-prototyping", "/articles/shared/bxstlrbnrjzt": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/ypnujdwqufax": "/articles/testing-private-methods", "/articles/shared/jemhyhtpmyci": "/articles/implementing-the-active-record-pattern-2", "/articles/shared/jknbqmwfuwrv": "/articles/confident-ruby", "/articles/shared/gbduhnlwbdau": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/suxmgcujgcro": "/articles/rapid-prototyping", "/articles/shared/wewzenkiudyl": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/rjwlkkmddvjs": "/articles/implementing-the-active-record-pattern-2", "/articles/shared/dakvtltuxnou": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/rvbxbcgqjtey": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/dnsphviklxpm": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/lrwkumltjnxr": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/eifbsceyqhdn": "/articles/end-to-end-testing-is-essential", "/articles/shared/bmtmmgriefbp": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/qtegejtvzcja": "/articles/uses-for-modules-2", "/articles/shared/dmvofczmmgtd": "/articles/end-to-end-testing-is-essential", "/articles/shared/dglqsqkqbglg": "/articles/uses-for-modules-3", "/articles/shared/rpqivlyrcobr": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/psudcyhgnkcj": "/articles/configurable-applications-2", "/articles/shared/hiuqaykaclxu": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/jsikhjtwzhdu": "/articles/end-to-end-testing-is-essential", "/articles/shared/mtulskvnxwwn": "/articles/creational-design-patterns", "/articles/shared/ozeqynokqykn": "/articles/end-to-end-testing-is-essential", "/articles/shared/nwtojmfkvwjq": "/articles/uses-for-modules-3a", "/articles/shared/oponmvfrtwgx": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/hdgsurojhdbp": "/articles/from-prototype-to-minimal-product", "/articles/shared/qjihdnekvzkz": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/vzhhzqtkzmxn": "/articles/solid-design-principles", "/articles/shared/ggutntbedrui": "/articles/confident-ruby", "/articles/shared/idjjsyagnufr": "/articles/hidden-costs-of-inheritance", "/articles/shared/brryxmgfcesf": "/articles/end-to-end-testing-is-essential", "/articles/shared/ameilnifjyzs": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/llhpzodvtdni": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/juktqsummiqn": "/articles/mock-objects-deeply-influence-design", "/articles/shared/fvdxhnrylxqd": "/articles/method-lookup-2", "/articles/shared/gxktksgmlpis": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/uxhxkddbqgir": "/articles/ways-to-load-code", "/articles/shared/zdzupcjigzhu": "/articles/rapid-prototyping", "/articles/shared/lqjloagmijug": "/articles/tdd-costs-and-benefits", "/articles/shared/pdcabdowgpji": "/articles/duck-typing-in-practice-2", "/articles/shared/fwscgxgullfk": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/eybxttzuqdpp": "/articles/end-to-end-testing-is-essential", "/articles/shared/rvdcaomuyjzr": "/articles/duck-typing-in-practice-1", "/articles/shared/wjulouymnmge": "/articles/end-to-end-testing-is-essential", "/articles/shared/fdaikyllpsya": "/articles/refactoring-is-not-redesign", "/articles/shared/kxiqflxvgems": "/articles/tdd-lessons-learned", "/articles/shared/ngaeukvrtrgw": "/articles/tdd-costs-and-benefits", "/articles/shared/atpfiiigquwr": "/articles/implementing-the-active-record-pattern-2", "/articles/shared/xpylcrvtrexl": "/articles/configurable-applications-1", "/articles/shared/mvzltpbdtdft": "/articles/ruby-hacker-writers", "/articles/shared/ntsjdjswjtpm": "/articles/persisting-relations-in-a-polyglot-world", "/articles/shared/fenavpjocftt": "/articles/structural-design-patterns", "/articles/shared/omvbisgoawta": "/articles/hidden-costs-of-inheritance", "/articles/shared/vywtleonuxst": "/articles/domain-specific-apis", "/articles/shared/mplhlqnvdtwe": "/articles/how-to-practice-1", "/articles/shared/bhruxrejuagc": "/articles/end-to-end-testing-is-essential", "/articles/shared/pdhrkjizwngc": "/articles/mock-objects-deeply-influence-design", "/articles/shared/kynuuaohpinx": "/articles/refactoring-is-not-redesign", "/articles/shared/pozccfaahxtp": "/articles/how-to-practice-2", "/articles/shared/stpkjdmhlrhw": "/articles/mock-objects-deeply-influence-design", "/articles/shared/piamqzplvsqi": "/articles/refactoring-is-not-redesign", "/articles/shared/ytkoytijspav": "/articles/refactoring-is-not-redesign", "/articles/shared/ouwhipqmrirh": "/articles/refactoring-is-not-redesign", "/articles/shared/zfaliwwwqhoj": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/uhblmimwnpvr": "/articles/event-loops-demystified", "/articles/shared/zyyfayawfveu": "/articles/confident-ruby", "/articles/shared/hfetrdtuksga": "/articles/regession-testing", "/articles/shared/zfjamjzgrrzs": "/articles/closures-are-complicated", "/articles/shared/oeszxoqkrxsz": "/articles/learning-new-things-step-by-step", "/articles/shared/ioysgcuurbiq": "/articles/attacking-sticky-problems", "/articles/shared/xczkcdfnuofm": "/articles/arguments-and-results-1", "/articles/shared/izbrmuebfgtd": "/articles/using-games-to-practice-domain-modeling", "/articles/shared/qwrepqokstgp": "/articles/tdd-lessons-learned", "/articles/shared/jwdeplgubovz": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/svlgrilhquhx": "/articles/method-lookup-1", "/articles/shared/rrqofsfdenbb": "/articles/confident-ruby", "/articles/shared/sbguavilduif": "/articles/tdd-costs-and-benefits", "/articles/shared/tnhypqqzmhfs": "/articles/from-prototype-to-minimal-product", "/articles/shared/hwemcgfytbzc": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/hhdtctkohsos": "/articles/solving-the-scoring-predictions-kata", "/articles/shared/niqxetaokino": "/articles/persisting-relations-in-a-polyglot-world", "/articles/shared/mmiebloibrdf": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/ogyozhdpqpij": "/articles/method-lookup-1", "/articles/shared/rgacoueaqmkd": "/articles/intro-to-basic-statistical-methods", "/articles/shared/sdriwjjqfwwi": "/articles/method-lookup-1", "/articles/shared/qmcwrpbwfqhx": "/articles/event-loops-demystified", "/articles/shared/vlreealbsajr": "/articles/method-lookup-2", "/articles/shared/cfqargqmyjkr": "/articles/implementing-the-active-record-pattern-2", "/articles/shared/rqelzhondkkd": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/fjpdsyvgprvm": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/mtonkqpvfgnn": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/yprfqrziekhi": "/articles/designing-business-reporting-applications", "/articles/shared/iijhpfddwtlg": "/articles/tdd-costs-and-benefits", "/articles/shared/fooydwuqtpzz": "/articles/confident-ruby", "/articles/shared/htuwseerzirg": "/articles/method-lookup-1", "/articles/shared/ernyaibrhijd": "/articles/thoughts-on-mocking-1", "/articles/shared/srnckxzpbgrx": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/cdvpeyxzetvz": "/articles/testing-private-methods", "/articles/shared/mgmgqabzrmpu": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/oxdvvzynwoan": "/articles/testing-private-methods", "/articles/shared/olvcfmhdhzak": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/ovmyryxlncfs": "/articles/binary-file-formats", "/articles/shared/mjauwrjdjylh": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/klpaodurolin": "/articles/event-loops-demystified", "/articles/shared/gcavhqarsbse": "/articles/spiking-is-not-cowboy-coding", "/articles/shared/aapteuasborg": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/fwyfpqasvnyw": "/articles/method-lookup-2", "/articles/shared/rrgqkbygmueu": "/articles/event-loops-demystified", "/articles/shared/vcrrekmpjejd": "/articles/event-loops-demystified", "/articles/shared/nnjgawmcrhot": "/articles/from-prototype-to-minimal-product", "/articles/shared/yqrraksqnhpf": "/articles/ways-to-load-code", "/articles/shared/yxenjwycobdl": "/articles/event-loops-demystified", "/articles/shared/fxalylpweuiw": "/articles/end-to-end-testing-is-essential", "/articles/shared/xdssyfjivayz": "/articles/event-loops-demystified", "/articles/shared/vyqmgafmfmzj": "/articles/creational-design-patterns", "/articles/shared/vsfwavwlmhbc": "/articles/method-lookup-1", "/articles/shared/hzbglsulpbxf": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/ljuyivgatrqm": "/articles/duck-typing-in-practice-1", "/articles/shared/mfcfmfosgbsv": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/fbhhorjzpaii": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/lcrkplasqdvy": "/articles/domain-specific-apis", "/articles/shared/jkjfjifanrlo": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/kogdkgudnzbv": "/articles/intro-to-basic-statistical-methods", "/articles/shared/tytwqyoeinvh": "/articles/method-lookup-1", "/articles/shared/ayxignpzyhxs": "/articles/building-the-rstatus-api", "/articles/shared/glnwhujnbhhi": "/articles/intro-to-basic-statistical-methods", "/articles/shared/lfurndndbsso": "/articles/intro-to-basic-statistical-methods", "/articles/shared/imhiugsmmrjc": "/articles/intro-to-basic-statistical-methods", "/articles/shared/faixxailttno": "/articles/intro-to-basic-statistical-methods", "/articles/shared/uhdbzwkwdgqk": "/articles/persisting-relations-in-a-polyglot-world", "/articles/shared/shwuwtdmrxgj": "/articles/method-lookup-1", "/articles/shared/qxcofyvtmeqt": "/articles/thoughts-on-mocking-1", "/articles/shared/piikvacwvmys": "/articles/method-lookup-1", "/articles/shared/yhvvetpygxzl": "/articles/confident-ruby", "/articles/shared/laftarrpmrmu": "/articles/method-lookup-1", "/articles/shared/qfiwyihvlwjo": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/jqpgdvvdgwcl": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/yvuvgsrfktla": "/articles/ways-to-load-code", "/articles/shared/msgggyugfobk": "/articles/intro-to-basic-statistical-methods", "/articles/shared/dqbnvixrfmcq": "/articles/event-loops-demystified", "/articles/shared/xvzvcizhraxp": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/ilxsfgipkgyw": "/articles/ways-to-load-code", "/articles/shared/rcqumsjcvnpq": "/articles/event-loops-demystified", "/articles/shared/hhjemnviiscq": "/articles/how-to-practice-1", "/articles/shared/wfzvopzfwhdl": "/articles/method-lookup-1", "/articles/shared/qlgyoajoitnd": "/articles/refactoring-is-not-redesign", "/articles/shared/tiprbfxfjpvs": "/articles/refactoring-is-not-redesign", "/articles/shared/xbmrfddgkjlj": "/articles/method-lookup-1", "/articles/shared/njyanvcmuqau": "/articles/intro-to-basic-statistical-methods", "/articles/shared/knoxjagqheyu": "/articles/method-lookup-1", "/articles/shared/dhhrfjlelujt": "/articles/mock-objects-deeply-influence-design", "/articles/shared/wxzyfkxzwtmp": "/articles/event-loops-demystified", "/articles/shared/zzjshwbylloa": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/rhppvmdiajta": "/articles/event-loops-demystified", "/articles/shared/pxwrcmrexxmq": "/articles/intro-to-basic-statistical-methods", "/articles/shared/bamklgqqrzkv": "/articles/thoughts-on-mocking-1", "/articles/shared/rlkydtqyvsvj": "/articles/intro-to-basic-statistical-methods", "/articles/shared/xlqsnomjhtvo": "/articles/hidden-costs-of-inheritance", "/articles/shared/zdkxlvehtcdr": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/boywqqbnuisp": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/hwkjynujlncc": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/maxbauchobro": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/rbhswnjhxihr": "/articles/intro-to-basic-statistical-methods", "/articles/shared/keghvnnxrypv": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/kzosgsxjjbar": "/articles/persisting-relations-in-a-polyglot-world", "/articles/shared/czttduufjlwt": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/ncaerxoeksfl": "/articles/event-loops-demystified", "/articles/shared/llhczjjhhymf": "/articles/method-lookup-1", "/articles/shared/ohkjyebgzfkg": "/articles/refactoring-is-not-redesign", "/articles/shared/cfagmxlotnyq": "/articles/patterns-for-building-excellent-examples", "/articles/shared/mfjjdjfyqvto": "/articles/building-the-rstatus-api", "/articles/shared/xqwzftuwjfhf": "/articles/building-the-rstatus-api", "/articles/shared/lppnqfzzsuie": "/articles/method-lookup-1", "/articles/shared/eeennsmplebp": "/articles/tdd-lessons-learned", "/articles/shared/hkltfvlonnjn": "/articles/spiking-is-not-cowboy-coding", "/articles/shared/fbsyjzhoopiy": "/articles/method-lookup-1", "/articles/shared/bqsxdppdsywd": "/articles/building-the-rstatus-api", "/articles/shared/hlsuvfdrejdw": "/articles/duck-typing-in-practice-1", "/articles/shared/apmdscbmnwah": "/articles/meditations-on-bad-and-good-code-1", "/articles/shared/urhsosscjevz": "/articles/method-lookup-1", "/articles/shared/boyshmlkbsnr": "/articles/ruby-hackers", "/articles/shared/ipyfqbwmqgdu": "/articles/building-the-rstatus-api", "/articles/shared/mmfllfkcikyr": "/articles/intro-to-basic-statistical-methods", "/articles/shared/anxpcbjbjnid": "/articles/mock-objects-deeply-influence-design", "/articles/shared/oubvfmszbeyx": "/articles/persisting-relations-in-a-polyglot-world", "/articles/shared/fjcvfatvplec": "/articles/event-loops-demystified", "/articles/shared/crusofmexapo": "/articles/process-spawning-patterns", "/articles/shared/ubpuknplsmqo": "/articles/method-lookup-1", "/articles/shared/asmbmcxoprzf": "/articles/method-lookup-2", "/articles/shared/xsizwwfoacfa": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/vanzcnjhievd": "/articles/implementing-the-active-record-pattern-2", "/articles/shared/trxdadzwfbsg": "/articles/building-the-rstatus-api", "/articles/shared/nkliqciplquj": "/articles/building-the-rstatus-api", "/articles/shared/pintimmcuysk": "/articles/framework-design-and-implementation-2", "/articles/shared/thcjdjfepgwt": "/articles/confident-ruby", "/articles/shared/zovybritqhlj": "/articles/thoughts-on-mocking-2", "/articles/shared/nqhajmmmtjfp": "/articles/refactoring-is-not-redesign", "/articles/shared/gtqnygfpebqj": "/articles/method-lookup-1", "/articles/shared/tucpiodvbkdx": "/articles/process-spawning-patterns", "/articles/shared/spbvylcjkjah": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/ckdqrkbptljb": "/articles/configurable-applications-2", "/articles/shared/slqiikesrdom": "/articles/thoughts-on-mocking-2", "/articles/shared/hefhvumunobw": "/articles/testing-private-methods", "/articles/shared/fqkjqzphlnja": "/articles/process-spawning-patterns", "/articles/shared/julmpiwqyyxf": "/articles/building-enumerable-and-enumerator", "/articles/shared/mayatacktars": "/articles/disciplined-inheritance-1", "/articles/shared/uqjcyxlilrim": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/cdyqqeeanbxi": "/articles/duck-typing-in-practice-1", "/articles/shared/uawqhoteujwj": "/articles/learning-new-things-step-by-step", "/articles/shared/amhoydijylze": "/articles/building-the-rstatus-api", "/articles/shared/urotcgukfgoj": "/articles/building-the-rstatus-api", "/articles/shared/aebtycecopkh": "/articles/qualities-of-great-software", "/articles/shared/pxrpelhngmxx": "/articles/ways-to-load-code", "/articles/shared/yjvlgwnindxg": "/articles/patterns-for-building-excellent-examples", "/articles/shared/konbpjkglrjq": "/articles/meditations-on-bad-and-good-code-2", "/articles/shared/duwqhpyqqpvy": "/articles/meditations-on-bad-and-good-code-2", "/articles/shared/heusrqjiormg": "/articles/how-to-practice-1", "/articles/shared/epbqzlmdeqdt": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/kpodvawdqctj": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/mldyeasxxkey": "/articles/method-lookup-1", "/articles/shared/qmftdmbcwwoc": "/articles/building-the-rstatus-api", "/articles/shared/gbzutlxfkqod": "/articles/rapid-prototyping", "/articles/shared/jrjyjbctouir": "/articles/attacking-sticky-problems", "/articles/shared/vrxfwnnmtwyy": "/articles/method-lookup-1", "/articles/shared/oasimgxwvmsn": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/tbtlurggdtcc": "/articles/ruby-hacker-writers", "/articles/shared/bctuibrumdkk": "/articles/uses-for-modules-1", "/articles/shared/xqbgxqrorgcb": "/articles/building-the-rstatus-api", "/articles/shared/sjpyiquchjym": "/articles/testing-private-methods", "/articles/shared/nvtlnwwhzzct": "/articles/building-the-rstatus-api", "/articles/shared/bkrkjccclngm": "/articles/building-the-rstatus-api", "/articles/shared/nglomuxploxz": "/articles/event-loops-demystified", "/articles/shared/fnlpcujxpads": "/articles/confident-ruby", "/articles/shared/irgybjymbtpk": "/articles/hidden-costs-of-inheritance", "/articles/shared/itxpywbhqhdx": "/articles/process-spawning-patterns", "/articles/shared/xilfqbvrivte": "/articles/ways-to-load-code", "/articles/shared/srihzmshgfgw": "/articles/spiral-staircase-of-refactoring", "/articles/shared/stopehmzbmuy": "/articles/framework-design-and-implementation-1", "/articles/shared/segylpjyutdc": "/articles/building-enumerable-and-enumerator", "/articles/shared/dicntffwqsrb": "/articles/building-the-rstatus-api", "/articles/shared/rkseuenoyruw": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/ebbxozarepdy": "/articles/method-lookup-2", "/articles/shared/ilcfxuconqic": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/gsyclrmbhxdp": "/articles/exploring-a-turing-tarpit", "/articles/shared/cwqunkeixuua": "/articles/configurable-applications-1", "/articles/shared/hghlkftmwhsl": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/swernbwlonak": "/articles/confident-ruby", "/articles/shared/bzhrgbbmabjg": "/articles/configurable-applications-2", "/articles/shared/gcokabykzpli": "/articles/event-loops-demystified", "/articles/shared/fnociwyiefyp": "/articles/solving-the-scoring-predictions-kata", "/articles/shared/xuljvfsbnqin": "/articles/tdd-costs-and-benefits", "/articles/shared/jhrmpsetoysq": "/articles/uses-for-modules-1", "/articles/shared/gwjlahvgafde": "/articles/disciplined-inheritance-2", "/articles/shared/ngoanftrkrfe": "/articles/solving-the-scoring-predictions-kata", "/articles/shared/gulrqynwlywm": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/rtehvhrbgble": "/articles/regession-testing", "/articles/shared/roektweenaaa": "/articles/hidden-costs-of-inheritance", "/articles/shared/twrbofpqcgsl": "/articles/from-prototype-to-minimal-product", "/articles/shared/vxfkairwxvlc": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/zqayijclkccz": "/articles/building-the-rstatus-api", "/articles/shared/hcnslfwvqbay": "/articles/process-spawning-patterns", "/articles/shared/fuwscxjrlvjm": "/articles/process-spawning-patterns", "/articles/shared/ufytwyfmuopn": "/articles/ways-to-load-code", "/articles/shared/hzoxrntmjxwx": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/duvjqizbpyzv": "/articles/closures-are-complicated", "/articles/shared/wewfgarbojme": "/articles/designing-business-reporting-applications", "/articles/shared/lxtzszkkovma": "/articles/process-spawning-patterns", "/articles/shared/gwgvgfhqyocl": "/articles/method-lookup-1", "/articles/shared/yaijmijfewwt": "/articles/growing-a-stable-codebase", "/articles/shared/fljqipvmnixu": "/articles/mock-objects-deeply-influence-design", "/articles/shared/tyuoxwdqznbm": "/articles/refactoring-is-not-redesign", "/articles/shared/clfhmtxuxdiz": "/articles/end-to-end-testing-is-essential", "/articles/shared/yqovnevhxlbm": "/articles/tdd-lessons-learned", "/articles/shared/nuimznctzehs": "/articles/attacking-sticky-problems", "/articles/shared/kvapagvxmbge": "/articles/relationships-between-objects", "/articles/shared/vcjqwmcctffo": "/articles/growing-a-stable-codebase", "/articles/shared/jfnvtubbawdx": "/articles/process-spawning-patterns", "/articles/shared/kjvdtlkyotmq": "/articles/process-spawning-patterns", "/articles/shared/jnubflxlunfw": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/yyihspiqzxnk": "/articles/relationships-between-objects", "/articles/shared/qljvdrapogcx": "/articles/uses-for-modules-1", "/articles/shared/extclrjugocc": "/articles/meditations-on-bad-and-good-code-1", "/articles/shared/rnbcvzwirlir": "/articles/meditations-on-bad-and-good-code-2", "/articles/shared/bcvjngzyhwzb": "/articles/growing-a-stable-codebase", "/articles/shared/qajmrodoejjd": "/articles/growing-a-stable-codebase", "/articles/shared/txiqcrajkoqg": "/articles/relationships-between-objects", "/articles/shared/iuorhceeiget": "/articles/building-the-rstatus-api", "/articles/shared/onadvjztpoyk": "/articles/growing-a-stable-codebase", "/articles/shared/xrrzgxxmiqyy": "/articles/growing-a-stable-codebase", "/articles/shared/ccsxrgwbasjv": "/articles/growing-a-stable-codebase", "/articles/shared/blxzrypgdnts": "/articles/event-loops-demystified", "/articles/shared/tdrvxjmyysql": "/articles/relationships-between-objects", "/articles/shared/aholmzaxpots": "/articles/duck-typing-in-practice-1", "/articles/shared/dvnkkimqlfib": "/articles/growing-a-stable-codebase", "/articles/shared/cupqqtdvmktx": "/articles/refactoring-is-not-redesign", "/articles/shared/rtrsbqogvaoj": "/articles/process-spawning-patterns", "/articles/shared/aaoabhykbncc": "/articles/attacking-sticky-problems", "/articles/shared/zmfktaonezkw": "/articles/uses-for-modules-1", "/articles/shared/xbcmpgrrvwxc": "/articles/method-lookup-1", "/articles/shared/uvomvkjzguoi": "/articles/growing-a-stable-codebase", "/articles/shared/jaiatiwfrhbb": "/articles/process-spawning-patterns", "/articles/shared/zbhulgkdlovf": "/articles/attacking-sticky-problems", "/articles/shared/wrvepaovvalq": "/articles/relationships-between-objects", "/articles/shared/yhydffcweymm": "/articles/attacking-sticky-problems", "/articles/shared/felvjrgrbfwr": "/articles/growing-a-stable-codebase", "/articles/shared/ihbftggxiuyz": "/articles/process-spawning-patterns", "/articles/shared/sfuleycjeqlh": "/articles/growing-a-stable-codebase", "/articles/shared/qwluqtzqnatb": "/articles/growing-a-stable-codebase", "/articles/shared/sxfkdaswccto": "/articles/building-enumerable-and-enumerator", "/articles/shared/bvxnbeoabuhs": "/articles/building-unix-style-command-line-applications", "/articles/shared/tdqdnpmdoucg": "/articles/attacking-sticky-problems", "/articles/shared/ubkcowchjtpt": "/articles/growing-a-stable-codebase", "/articles/shared/sybfxtlcklzo": "/articles/domain-specific-apis", "/articles/shared/dccllgpwzklm": "/articles/attacking-sticky-problems", "/articles/shared/xslpoiimitpf": "/articles/testing-private-methods", "/articles/shared/lryxglnkhiil": "/articles/ways-to-load-code", "/articles/shared/igtciigpoxsg": "/articles/growing-a-stable-codebase", "/articles/shared/mhzwavtvesgw": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/skxyfxenbroa": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/okjmfqjsmycz": "/articles/growing-a-stable-codebase", "/articles/shared/qqmqxdvkscew": "/articles/disciplined-inheritance-1", "/articles/shared/zblvgrgkmnmk": "/articles/testing-private-methods", "/articles/shared/bbjoqikoflpf": "/articles/growing-a-stable-codebase", "/articles/shared/owfvtihzqdof": "/articles/relationships-between-objects", "/articles/shared/kzkdxowhwipy": "/articles/growing-a-stable-codebase", "/articles/shared/xaqotuyzbwnk": "/articles/growing-a-stable-codebase", "/articles/shared/gendroseshkp": "/articles/spiking-is-not-cowboy-coding", "/articles/shared/vewbcusqmytx": "/articles/arguments-and-results-1", "/articles/shared/ilielptbcwwh": "/articles/relationships-between-objects", "/articles/shared/mjexggmwsqhg": "/articles/relationships-between-objects", "/articles/shared/rcqwhuewvhqy": "/articles/growing-a-stable-codebase", "/articles/shared/elpirkwbfpsr": "/articles/event-loops-demystified", "/articles/shared/wwanbitbsxxg": "/articles/relationships-between-objects", "/articles/shared/zpqkrjjelzrl": "/articles/ways-to-load-code", "/articles/shared/vfawyggrrgon": "/articles/solving-the-scoring-predictions-kata", "/articles/shared/nicfpgebqnab": "/articles/closures-are-complicated", "/articles/shared/bzbqpvtkbmyb": "/articles/ruby-hackers", "/articles/shared/xnlgvwzcbxay": "/articles/relationships-between-objects", "/articles/shared/ijngguxvbfdn": "/articles/relationships-between-objects", "/articles/shared/dzidrimakknw": "/articles/event-loops-demystified", "/articles/shared/qiwrhsgiudgg": "/articles/relationships-between-objects", "/articles/shared/vhycjbsbdnpm": "/articles/relationships-between-objects", "/articles/shared/qerdgzemcnpl": "/articles/confident-ruby", "/articles/shared/gqujhfhdpbak": "/articles/process-spawning-patterns", "/articles/shared/uynzdmnvrngf": "/articles/domain-specific-apis", "/articles/shared/dudrsdgvzvwm": "/articles/growing-a-stable-codebase", "/articles/shared/loqddtihmkdj": "/articles/relationships-between-objects", "/articles/shared/mitxfkqwdofb": "/articles/event-loops-demystified", "/articles/shared/cpyqpyciqszs": "/articles/relationships-between-objects", "/articles/shared/nylzszlrsqnf": "/articles/growing-a-stable-codebase", "/articles/shared/xlqonpzmjukr": "/articles/framework-design-and-implementation-2", "/articles/shared/nrhmicmpzigp": "/articles/dirty-testing-secrets", "/articles/shared/mbuunzeklydj": "/articles/configurable-applications-2", "/articles/shared/xkpyigpfmzqx": "/articles/growing-a-stable-codebase", "/articles/shared/ujxrxprnlugz": "/articles/process-spawning-patterns", "/articles/shared/ynzkvznjfiht": "/articles/relationships-between-objects", "/articles/shared/jxbthsmmgpup": "/articles/process-spawning-patterns", "/articles/shared/dtwwtgsyprzg": "/articles/growing-a-stable-codebase", "/articles/shared/ggdhbgtlwmxy": "/articles/growing-a-stable-codebase", "/articles/shared/oqcenblfwvhw": "/articles/relationships-between-objects", "/articles/shared/jprsesbszsgg": "/articles/relationships-between-objects", "/articles/shared/ngnnvahouikg": "/articles/growing-a-stable-codebase", "/articles/shared/spxgpasgdfcj": "/articles/dirty-testing-secrets", "/articles/shared/cxkorydweauk": "/articles/growing-a-stable-codebase", "/articles/shared/qmivsyanvbfr": "/articles/growing-a-stable-codebase", "/articles/shared/pklibdmszflp": "/articles/dirty-testing-secrets", "/articles/shared/bltrwupvmecy": "/articles/uses-for-modules-3a", "/articles/shared/pmexpwbdmyrg": "/articles/building-unix-style-command-line-applications", "/articles/shared/fvihuvbmraes": "/articles/relationships-between-objects", "/articles/shared/sewtdeybfgrx": "/articles/growing-a-stable-codebase", "/articles/shared/arbjkuhrsxwt": "/articles/relationships-between-objects", "/articles/shared/apbtgeqpmniv": "/articles/relationships-between-objects", "/articles/shared/zjlcunpabhoh": "/articles/dirty-testing-secrets", "/articles/shared/rowixwzfbjps": "/articles/from-prototype-to-minimal-product", "/articles/shared/wyvnrigfytxq": "/articles/expanding-your-code-reading-horizons", "/articles/shared/jqjlufnwpcgc": "/articles/expanding-your-code-reading-horizons", "/articles/shared/plslhtdguaoa": "/articles/intro-to-basic-statistical-methods", "/articles/shared/mcjpfguyxkhu": "/articles/expanding-your-code-reading-horizons", "/articles/shared/enwnhknxbhgw": "/articles/relationships-between-objects", "/articles/shared/hmthtsqrdbmz": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/wwhjurhtqsau": "/articles/growing-a-stable-codebase", "/articles/shared/adejmbhjoerq": "/articles/process-spawning-patterns", "/articles/shared/tuivuuarydul": "/articles/ways-to-load-code", "/articles/shared/hvbqqnrptdmh": "/articles/solving-the-scoring-predictions-kata", "/articles/shared/untgdmqxnziq": "/articles/building-the-rstatus-api", "/articles/shared/lhmqtwxpxxxr": "/articles/event-loops-demystified", "/articles/shared/viejkclgqwwo": "/articles/expanding-your-code-reading-horizons", "/articles/shared/jbnkjqomufjx": "/articles/persisting-relations-in-a-polyglot-world", "/articles/shared/ttsiobxdvbwy": "/articles/uses-for-modules-1", "/articles/shared/kghutjmxsydp": "/articles/relationships-between-objects", "/articles/shared/sutlykpkcaot": "/articles/confident-ruby", "/articles/shared/fgttxksakvcs": "/articles/testing-private-methods", "/articles/shared/dxzyuvowmegy": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/ezvrwcwyyfzq": "/articles/hidden-costs-of-inheritance", "/articles/shared/pqutnyjpksyb": "/articles/intro-to-basic-statistical-methods", "/articles/shared/vjhnojdydcow": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/cwyejxryipgo": "/articles/event-loops-demystified", "/articles/shared/nvtnwjbdvndu": "/articles/building-the-rstatus-api", "/articles/shared/dbupcfakbbrd": "/articles/process-spawning-patterns", "/articles/shared/hiigrfxfwemv": "/articles/solid-design-principles", "/articles/shared/fpeiltlpoabq": "/articles/building-enumerable-and-enumerator", "/articles/shared/vjtkjztxecwh": "/articles/ant-colony-simulation", "/articles/shared/epqhlcvjhqqi": "/articles/ant-colony-simulation", "/articles/shared/spokvzpcnstx": "/articles/relationships-between-objects", "/articles/shared/uedyasvjfsmi": "/articles/method-lookup-1", "/articles/shared/vcvyoyogmkld": "/articles/ant-colony-simulation", "/articles/shared/bhmvsgqroppa": "/articles/relationships-between-objects", "/articles/shared/yuheldlxvhqa": "/articles/expanding-your-code-reading-horizons", "/articles/shared/qldeexasphmw": "/articles/expanding-your-code-reading-horizons", "/articles/shared/ymnrbdtrozfx": "/articles/expanding-your-code-reading-horizons", "/articles/shared/nvjewrgqkiqi": "/articles/expanding-your-code-reading-horizons", "/articles/shared/wyljgjhhpqbz": "/articles/method-lookup-2", "/articles/shared/ucxryvgnovdi": "/articles/configurable-applications-1", "/articles/shared/deatqiwbctlu": "/articles/meditations-on-bad-and-good-code-1", "/articles/shared/ypsdmktyzgcs": "/articles/expanding-your-code-reading-horizons", "/articles/shared/zhtuwunschlc": "/articles/configurable-applications-2", "/articles/shared/rgjvlihbjikf": "/articles/expanding-your-code-reading-horizons", "/articles/shared/gtzzmdowphoi": "/articles/ways-to-load-code", "/articles/shared/buzgmiqertuy": "/articles/testing-private-methods", "/articles/shared/wycoumtqlbum": "/articles/testing-private-methods", "/articles/shared/uiznipvpinsx": "/articles/meditations-on-bad-and-good-code-1", "/articles/shared/vgzllzimewnh": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/mtgdvyovgdsa": "/articles/meditations-on-bad-and-good-code-2", "/articles/shared/itlnkvsjqhwf": "/articles/uses-for-modules-1", "/articles/shared/ivimczorsipx": "/articles/attacking-sticky-problems", "/articles/shared/weisllkqdxso": "/articles/closures-are-complicated", "/articles/shared/xazxfhwrnnyh": "/articles/method-lookup-1", "/articles/shared/vhbytzbgqgev": "/articles/building-enumerable-and-enumerator", "/articles/shared/vewbeoklcjiq": "/articles/method-lookup-1", "/articles/shared/telpluggsoue": "/articles/regession-testing", "/articles/shared/wjtytrkdqgcy": "/articles/method-lookup-2", "/articles/shared/gusgbdirlnmq": "/articles/relationships-between-objects", "/articles/shared/cobmyzfrwmyy": "/articles/learning-new-things-step-by-step", "/articles/shared/fqnsykgyjbfu": "/articles/growing-a-stable-codebase", "/articles/shared/qiszsyzpyszm": "/articles/building-the-rstatus-api", "/articles/shared/sgltzpvkjfxo": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/epughfiibdyb": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/yfcnduhhlvjj": "/articles/intro-to-basic-statistical-methods", "/articles/shared/xonndvpscgdk": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/gxzcyiqqcnez": "/articles/qualities-of-great-software", "/articles/shared/itofaghnzvya": "/articles/expanding-your-code-reading-horizons", "/articles/shared/zvhwrvpkgfah": "/articles/patterns-for-building-excellent-examples", "/articles/shared/vtogrxlwfoza": "/articles/exploring-a-turing-tarpit", "/articles/shared/xidaitgyqqbk": "/articles/expanding-your-code-reading-horizons", "/articles/shared/raovryhjnoog": "/articles/spiral-staircase-of-refactoring", "/articles/shared/jpflatgyqapa": "/articles/framework-design-and-implementation-1", "/articles/shared/zahmahamclgx": "/articles/process-spawning-patterns", "/articles/shared/dqxenozdyaut": "/articles/expanding-your-code-reading-horizons", "/articles/shared/hhgcloeuoega": "/articles/qualities-of-great-software", "/articles/shared/ghylojanihbf": "/articles/framework-design-and-implementation-2", "/articles/shared/mnjrxprvywkm": "/articles/growing-a-stable-codebase", "/articles/shared/wplebegwwyvs": "/articles/ant-colony-simulation", "/articles/shared/kkowvwxmhlky": "/articles/disciplined-inheritance-1", "/articles/shared/zefymsghsunf": "/articles/disciplined-inheritance-2", "/articles/shared/uneffqhyfkjm": "/articles/ant-colony-simulation", "/articles/shared/otrmrhfeajun": "/articles/relationships-between-objects", "/articles/shared/vcrpnhxogyva": "/articles/expanding-your-code-reading-horizons", "/articles/shared/tnxvubepqdag": "/articles/tdd-costs-and-benefits", "/articles/shared/uvbjggmyckkd": "/articles/testing-private-methods", "/articles/shared/jrnpsqegnmme": "/articles/expanding-your-code-reading-horizons", "/articles/shared/rksyxcazhqfm": "/articles/relationships-between-objects", "/articles/shared/vlijjvwoqhzr": "/articles/growing-a-stable-codebase", "/articles/shared/xjhovcnfqaui": "/articles/adventure-in-prototypes", "/articles/shared/lggjffsrgikx": "/articles/expanding-your-code-reading-horizons", "/articles/shared/ocfvwezlzole": "/articles/configurable-applications-1", "/articles/shared/rlndajlyzmcv": "/articles/uses-for-modules-1", "/articles/shared/vlucomovcspu": "/articles/ant-colony-simulation", "/articles/shared/fpzcwekvkbub": "/articles/building-the-rstatus-api", "/articles/shared/lkyenvdngvhd": "/articles/expanding-your-code-reading-horizons", "/articles/shared/klbmjxdvvggh": "/articles/ways-to-load-code", "/articles/shared/glfezpgeqzlm": "/articles/ant-colony-simulation", "/articles/shared/xtcxhltnyazf": "/articles/expanding-your-code-reading-horizons", "/articles/shared/almwahclghgv": "/articles/adventure-in-prototypes", "/articles/shared/aawegseoqowr": "/articles/mock-objects-deeply-influence-design", "/articles/shared/akeiufeqsqvi": "/articles/spiking-is-not-cowboy-coding", "/articles/shared/yeknriqtjzpk": "/articles/relationships-between-objects", "/articles/shared/ajwzgeyndvpi": "/articles/uses-for-modules-2", "/articles/shared/jpxbmiabtfey": "/articles/expanding-your-code-reading-horizons", "/articles/shared/dogyxwhxgttw": "/articles/implementing-the-active-record-pattern-2", "/articles/shared/eaumwryygles": "/articles/adventure-in-prototypes", "/articles/shared/hqpfmrmzreps": "/articles/framework-design-and-implementation-1", "/articles/shared/pngnjvvbvqxs": "/articles/adventure-in-prototypes", "/articles/shared/afsbcmqlwpeh": "/articles/thoughts-on-mocking-1", "/articles/shared/hntsitrlgxsg": "/articles/building-the-rstatus-api", "/articles/shared/enmhekhsuyzm": "/articles/how-to-practice-2", "/articles/shared/eedcfscypule": "/articles/persisting-relations-in-a-polyglot-world", "/articles/shared/rffudbmdkmzq": "/articles/tdd-costs-and-benefits", "/articles/shared/qhsutskcuhsc": "/articles/adventure-in-prototypes", "/articles/shared/gesauwbelods": "/articles/adventure-in-prototypes", "/articles/shared/gkugwzuqmhle": "/articles/process-spawning-patterns", "/articles/shared/ncqvwptshjsd": "/articles/adventure-in-prototypes", "/articles/shared/zjfdvoskqtas": "/articles/arguments-and-results-2", "/articles/shared/nuqusbbgbfcn": "/articles/configurable-applications-2", "/articles/shared/efcaohnecceq": "/articles/duck-typing-in-practice-2", "/articles/shared/tevvgwuhnjyb": "/articles/disciplined-inheritance-2", "/articles/shared/inqgrjjxmpcd": "/articles/adventure-in-prototypes", "/articles/shared/ltllhqpprhey": "/articles/building-enumerable-and-enumerator", "/articles/shared/oieikyqckdsc": "/articles/adventure-in-prototypes", "/articles/shared/bfarbldsqwsj": "/articles/using-games-to-practice-domain-modeling", "/articles/shared/auvyjmmhcknc": "/articles/solid-design-principles", "/articles/shared/qddgblotxrqo": "/articles/coding-in-the-danger-zone", "/articles/shared/mzdmcddeifab": "/articles/adventure-in-prototypes", "/articles/shared/xjtfikpipayq": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/ouehwxhbeacb": "/articles/end-to-end-testing-is-essential", "/articles/shared/wbsupybkzjbt": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/sbtxsizyxqjq": "/articles/adventure-in-prototypes", "/articles/shared/yztqqgnmpafd": "/articles/adventure-in-prototypes", "/articles/shared/gnasxljojjpn": "/articles/confident-ruby", "/articles/shared/ctpoyzaficyz": "/articles/adventure-in-prototypes", "/articles/shared/lovthunxgart": "/articles/ruby-hacker-writers", "/articles/shared/hwhuiyryjncz": "/articles/ways-to-load-code", "/articles/shared/fuwrgshtsjlv": "/articles/uses-for-modules-1", "/articles/shared/dlbkbwfoxfhs": "/articles/spiral-staircase-of-refactoring", "/articles/shared/jhikqnjfogai": "/articles/from-prototype-to-minimal-product", "/articles/shared/ohmzmqgcqonj": "/articles/adventure-in-prototypes", "/articles/shared/ganpvgvgzrzd": "/articles/adventure-in-prototypes", "/articles/shared/fxovtloplxlr": "/articles/intro-to-basic-statistical-methods", "/articles/shared/xrkrpkuwcaps": "/articles/refactoring-is-not-redesign", "/articles/shared/xbypzeeuxzjg": "/articles/adventure-in-prototypes", "/articles/shared/sepwvtrraevo": "/articles/creational-design-patterns", "/articles/shared/sfqkzqvbmtvf": "/articles/solving-the-scoring-predictions-kata", "/articles/shared/iwnosjcytjjx": "/articles/meditations-on-bad-and-good-code-2", "/articles/shared/cfnluvdaqola": "/articles/duck-typing-in-practice-1", "/articles/shared/mwpkbominbfg": "/articles/framework-design-and-implementation-2", "/articles/shared/vunhciezzvha": "/articles/uses-for-modules-4", "/articles/shared/olixdltnimil": "/articles/adventure-in-prototypes", "/articles/shared/igwypinvnwyl": "/articles/closures-are-complicated", "/articles/shared/jpucqzlgfdgf": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/oqrscklsjxqi": "/articles/how-to-practice-1", "/articles/shared/lquivzshgacv": "/articles/method-lookup-1", "/articles/shared/zsckztfqeezc": "/articles/hidden-costs-of-inheritance", "/articles/shared/jotwzngwznlc": "/articles/adventure-in-prototypes", "/articles/shared/vnepaquhepyi": "/articles/confident-ruby", "/articles/shared/kblvaooittvw": "/articles/growing-a-stable-codebase", "/articles/shared/ehiyknnsskrr": "/articles/event-loops-demystified", "/articles/shared/nrohhcdwevsc": "/articles/building-unix-style-command-line-applications", "/articles/shared/etchikvirnkc": "/articles/disciplined-inheritance-1", "/articles/shared/rjmunjwxalqo": "/articles/dirty-testing-secrets", "/articles/shared/nyutmerlijsw": "/articles/method-lookup-1", "/articles/shared/ewejhjvazloa": "/articles/obfuscations-of-christmas-past", "/articles/shared/wtsmpfmzgrpo": "/articles/patterns-for-building-excellent-examples", "/articles/shared/hmmqpvlzjomk": "/articles/ant-colony-simulation", "/articles/shared/xuhyhxmysbdi": "/articles/parsing-json-the-hard-way", "/articles/shared/gybdxzxerwew": "/articles/hidden-costs-of-inheritance", "/articles/shared/dhgaziwdehyp": "/articles/uses-for-modules-3", "/articles/shared/vsiqkamfyysj": "/articles/persisting-relations-in-a-polyglot-world", "/articles/shared/rjeismdvjluf": "/articles/exploring-a-turing-tarpit", "/articles/shared/abmldhafpuvj": "/articles/qualities-of-great-software", "/articles/shared/wnwvtapguzzt": "/articles/end-to-end-testing-is-essential", "/articles/shared/qjkendyxhdxr": "/articles/ruby-hackers", "/articles/shared/qjqstlfebphf": "/articles/process-spawning-patterns", "/articles/shared/flxlzqdiryuq": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/jwpblqseosiy": "/articles/expanding-your-code-reading-horizons", "/articles/shared/pygnhtmrftup": "/articles/event-loops-demystified", "/articles/shared/omfjgmjpdhyc": "/articles/meditations-on-bad-and-good-code-1", "/articles/shared/hlfyuhwefeoz": "/articles/disciplined-inheritance-2", "/articles/shared/zpkojtsxqven": "/articles/meditations-on-bad-and-good-code-2", "/articles/shared/bipjtrpjfjfe": "/articles/meditations-on-bad-and-good-code-1", "/articles/shared/bwnmowcetodh": "/articles/arguments-and-results-2", "/articles/shared/ifwqmxjuolgt": "/articles/arguments-and-results-1", "/articles/shared/dbbktxsrjkzs": "/articles/mock-objects-deeply-influence-design", "/articles/shared/pejbligghjyu": "/articles/disciplined-inheritance-1", "/articles/shared/uaofbuxavsah": "/articles/uses-for-modules-2", "/articles/shared/dnfznnzezshs": "/articles/thoughts-on-mocking-2", "/articles/shared/ypsckqzlmyrc": "/articles/hidden-costs-of-inheritance", "/articles/shared/dxhyebuewsig": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/msforxutaghj": "/articles/configurable-applications-1", "/articles/shared/ztyfkkzpmbmd": "/articles/adventure-in-prototypes", "/articles/shared/psxuezgagklg": "/articles/testing-private-methods", "/articles/shared/dljqmhpupdxq": "/articles/connascence", "/articles/shared/hpcrkixhytxn": "/articles/tdd-lessons-learned", "/articles/shared/brkeuhxkvvfd": "/articles/rapid-prototyping", "/articles/shared/uoxqaxyiamyu": "/articles/process-spawning-patterns", "/articles/shared/quznqjauleiv": "/articles/growing-a-stable-codebase", "/articles/shared/gdsqyatyaxoz": "/articles/relationships-between-objects", "/articles/shared/mtduzlpbvulg": "/articles/expanding-your-code-reading-horizons", "/articles/shared/ssfzoieehmcq": "/articles/method-lookup-1", "/articles/shared/evfvxfyzwxbz": "/articles/parsing-json-the-hard-way", "/articles/shared/pioquggqefzo": "/articles/parsing-json-the-hard-way", "/articles/shared/mtghxywjgiwb": "/articles/ways-to-load-code", "/articles/shared/nchbowadmwpe": "/articles/parsing-json-the-hard-way", "/articles/shared/kxktsautvlqp": "/articles/method-lookup-2", "/articles/shared/lgsuvmwykior": "/articles/configurable-applications-1", "/articles/shared/kydbtimmfaqw": "/articles/configurable-applications-2", "/articles/shared/emolofucugou": "/articles/testing-private-methods", "/articles/shared/jskaerimxmbi": "/articles/meditations-on-bad-and-good-code-1", "/articles/shared/bidpdwskebxp": "/articles/meditations-on-bad-and-good-code-2", "/articles/shared/papetiqbaecv": "/articles/uses-for-modules-1", "/articles/shared/hltjuvodqsli": "/articles/uses-for-modules-2", "/articles/shared/vazcufcfqmdi": "/articles/uses-for-modules-3", "/articles/shared/mtfqiqzlizmw": "/articles/uses-for-modules-3a", "/articles/shared/gmuhtuluyxrz": "/articles/uses-for-modules-4", "/articles/shared/rdcwbuxikzug": "/articles/rapid-prototyping", "/articles/shared/tqdqtwrfkelo": "/articles/obfuscations-of-christmas-past", "/articles/shared/qsuqtmbnlpns": "/articles/duck-typing-in-practice-1", "/articles/shared/gtnilkfjszny": "/articles/ruby-hackers", "/articles/shared/qpzwxhtqfemq": "/articles/ruby-hacker-writers", "/articles/shared/sjckumwsgssf": "/articles/dirty-testing-secrets", "/articles/shared/odqhwfqmrfud": "/articles/thoughts-on-mocking-1", "/articles/shared/thtjviincgcx": "/articles/thoughts-on-mocking-2", "/articles/shared/fwjpnjnaeibm": "/articles/how-to-practice-1", "/articles/shared/kdxpbfnhzdwy": "/articles/how-to-practice-2", "/articles/shared/yipkqajrctec": "/articles/solid-design-principles", "/articles/shared/qfvbqhbxfwqy": "/articles/connascence", "/articles/shared/ivqpfubqvgug": "/articles/structural-design-patterns", "/articles/shared/exkjvliwumzc": "/articles/parsing-json-the-hard-way", "/articles/shared/dypfilygrmdp": "/articles/rapid-prototyping", "/articles/shared/twkifktsocsi": "/articles/parsing-json-the-hard-way", "/articles/shared/eedlitjpojmy": "/articles/parsing-json-the-hard-way", "/articles/shared/ujsfvpwmlitc": "/articles/ant-colony-simulation", "/articles/shared/catlxvwjwjwu": "/articles/parsing-json-the-hard-way", "/articles/shared/aqirnjdvdtey": "/articles/adventure-in-prototypes", "/articles/shared/svakmuhcvmvt": "/articles/parsing-json-the-hard-way", "/articles/shared/gsgjavwzjzod": "/articles/attacking-sticky-problems", "/articles/shared/vctpyxnwzujb": "/articles/closures-are-complicated", "/articles/shared/fyssnqsqtksz": "/articles/building-enumerable-and-enumerator", "/articles/shared/olwrkakvlaaz": "/articles/regession-testing", "/articles/shared/kmrxrwgnovhp": "/articles/learning-new-things-step-by-step", "/articles/shared/ftpuuxwfcowh": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/zbnmsimfwkqr": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/zarpkdktlvei": "/articles/building-unix-style-command-line-applications", "/articles/shared/qulmbpkortkx": "/articles/from-requirements-discovery-to-release", "/articles/shared/tgnlwdpbxzds": "/articles/domain-specific-apis", "/articles/shared/flnbdjgzlqbp": "/articles/binary-file-formats", "/articles/shared/xvgxqgxgkypc": "/articles/designing-business-reporting-applications", "/articles/shared/yqofqzipldyd": "/articles/arguments-and-results-1", "/articles/shared/yhwdlsthekjg": "/articles/arguments-and-results-2", "/articles/shared/leiycaxufhpl": "/articles/qualities-of-great-software", "/articles/shared/gpdxeydixgbj": "/articles/patterns-for-building-excellent-examples", "/articles/shared/ihjobhuwgifw": "/articles/exploring-a-turing-tarpit", "/articles/shared/nydnwmlbeyfp": "/articles/spiral-staircase-of-refactoring", "/articles/shared/yhjbahcipcaa": "/articles/framework-design-and-implementation-1", "/articles/shared/rbxjazortgwe": "/articles/framework-design-and-implementation-2", "/articles/shared/tkbhhhbueadv": "/articles/disciplined-inheritance-1", "/articles/shared/fcliezlcmrdg": "/articles/disciplined-inheritance-2", "/articles/shared/rcdcjmlktehx": "/articles/using-games-to-practice-domain-modeling", "/articles/shared/vrjlscbzltnk": "/articles/coding-in-the-danger-zone", "/articles/shared/jkqrwantupgh": "/articles/tdd-costs-and-benefits", "/articles/shared/kkentfpmqqeb": "/articles/from-prototype-to-minimal-product", "/articles/shared/wqbbuizowpbq": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/xjcltukwqgzz": "/articles/solving-the-scoring-predictions-kata", "/articles/shared/ksfgudhorlyk": "/articles/persisting-relations-in-a-polyglot-world", "/articles/shared/jbotyzsssmwz": "/articles/confident-ruby", "/articles/shared/bekgpfwvpbai": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/teraynhmkrvd": "/articles/hidden-costs-of-inheritance", "/articles/shared/uboakzevausg": "/articles/implementing-the-active-record-pattern-2", "/articles/shared/uwwbwajwpjqg": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/sbelhnvimvzw": "/articles/tdd-lessons-learned", "/articles/shared/aphoxznfnvuz": "/articles/end-to-end-testing-is-essential", "/articles/shared/asmxdmrnekyd": "/articles/refactoring-is-not-redesign", "/articles/shared/viggilpxcdtw": "/articles/mock-objects-deeply-influence-design", "/articles/shared/olxxwcprgzdq": "/articles/spiking-is-not-cowboy-coding", "/articles/shared/eewfatykuofp": "/articles/intro-to-basic-statistical-methods", "/articles/shared/udlhzoufevta": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/pizgyijaudtd": "/articles/event-loops-demystified", "/articles/shared/gqkgocjsmboz": "/articles/building-the-rstatus-api", "/articles/shared/kaotbfpeepph": "/articles/parsing-json-the-hard-way", "/articles/shared/xfvtzlkzanhj": "/articles/testing-private-methods", "/articles/shared/wnyhsptdexpy": "/articles/uses-for-modules-3a", "/articles/shared/puhfpipripzo": "/articles/uses-for-modules-4", "/articles/shared/wbfpznrlrhxn": "/articles/parsing-json-the-hard-way", "/articles/shared/fntvurirdfkt": "/articles/duck-typing-in-practice-2", "/articles/shared/auvqnlfiiqrh": "/articles/obfuscations-of-christmas-past", "/articles/shared/uoorvnzqhxql": "/articles/duck-typing-in-practice-1", "/articles/shared/oqqpqotsvrkr": "/articles/duck-typing-in-practice-2", "/articles/shared/nksuaizhnwjd": "/articles/ruby-hackers", "/articles/shared/ulevbpqdlvzh": "/articles/ruby-hacker-writers", "/articles/shared/hswlvewnlsnn": "/articles/dirty-testing-secrets", "/articles/shared/gyroksswvhnx": "/articles/thoughts-on-mocking-1", "/articles/shared/wuwgmqphzdcf": "/articles/thoughts-on-mocking-2", "/articles/shared/yaiygqcnktok": "/articles/how-to-practice-1", "/articles/shared/zaezpwnstpve": "/articles/how-to-practice-2", "/articles/shared/lexvxefwznjr": "/articles/solid-design-principles", "/articles/shared/elgwyhcobbdh": "/articles/creational-design-patterns", "/articles/shared/dqgzmuififja": "/articles/expanding-your-code-reading-horizons", "/articles/shared/svsdpfpvhkve": "/articles/adventure-in-prototypes", "/articles/shared/kuwwxftcyadu": "/articles/connascence", "/articles/shared/gasizzvhdppp": "/articles/creational-design-patterns", "/articles/shared/uyozmmiblauh": "/articles/structural-design-patterns", "/articles/shared/lbqypwlcojsz": "/articles/from-prototype-to-minimal-product", "/articles/shared/skwlmacmmhmw": "/articles/parsing-json-the-hard-way", "/articles/shared/nqkhyjldwuuh": "/articles/ruby-hackers", "/articles/shared/ugfoozkobvqe": "/articles/method-lookup-2", "/articles/shared/mvjxtahkevwn": "/articles/configurable-applications-1", "/articles/shared/qshgajswrzwv": "/articles/configurable-applications-2", "/articles/shared/vnuitdwajspo": "/articles/testing-private-methods", "/articles/shared/jerxiyziqmuf": "/articles/meditations-on-bad-and-good-code-1", "/articles/shared/kdaszswuqquu": "/articles/meditations-on-bad-and-good-code-2", "/articles/shared/etwkuiywaszb": "/articles/code-reuse-is-complicated", "/articles/shared/ehxurnrlkzum": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/hrxgfybjflxy": "/articles/code-reuse-is-complicated", "/articles/shared/plgjjonrkggl": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/acooybrasgcn": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/nidizzcshlga": "/articles/debugging-without-doom-and-gloom", "/articles/shared/uwozxymekrra": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/atkfznazrroc": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/ijnmzpzhalgs": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/zixjyelmamew": "/articles/ways-to-load-code", "/articles/shared/xxlfbbmogtqu": "/articles/adventure-in-prototypes", "/articles/shared/dcktuddfjgbw": "/articles/configurable-applications-2", "/articles/shared/dwzzkibdjpns": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/xcmfshqupxzz": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/hoefclcwwmzh": "/articles/self-guided-code-tour", "/articles/shared/wzammiiekdtm": "/articles/ways-to-load-code", "/articles/shared/iimrcdiovvwh": "/articles/code-reuse-is-complicated", "/articles/shared/txmmltzmfhcj": "/articles/closures-are-complicated", "/articles/shared/dqreqdjqkolh": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/ufrqrdggfjgm": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/whtcpnailnph": "/articles/method-lookup-1", "/articles/shared/ocxoqeqhrpbx": "/articles/debugging-without-doom-and-gloom", "/articles/shared/nkhaprcgwrpv": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/izfjsmghpfmv": "/articles/debugging-without-doom-and-gloom", "/articles/shared/ckiosyizilag": "/articles/closures-are-complicated", "/articles/shared/kegvzlbkmoqn": "/articles/meditations-on-bad-and-good-code-2", "/articles/shared/dgbdxxemkriw": "/articles/disciplined-inheritance-1", "/articles/shared/zmyfqckyuwkl": "/articles/configurable-applications-1", "/articles/shared/jcdusjrumzph": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/htslldnpccxi": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/orwylbhcvkfh": "/articles/code-reuse-is-complicated", "/articles/shared/onmjmzfccorm": "/articles/parsing-json-the-hard-way", "/articles/shared/dmewjgbxwkkd": "/articles/self-guided-code-tour", "/articles/shared/dkcmogladapt": "/articles/ways-to-load-code", "/articles/shared/ajrhnodrrpnl": "/articles/self-guided-code-tour", "/articles/shared/ujxjuewsxmgp": "/articles/method-lookup-2", "/articles/shared/wfkbqqtdeavc": "/articles/designing-business-reporting-applications", "/articles/shared/hbkbfiqprfrt": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/qwvkglzzuxdj": "/articles/growing-a-stable-codebase", "/articles/shared/qbipherncizs": "/articles/uses-for-modules-1", "/articles/shared/wiacbxcohvip": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/rfnmcjkgcwqv": "/articles/parsing-json-the-hard-way", "/articles/shared/xeivjabnyqcx": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/dbrjijkothpa": "/articles/parsing-json-the-hard-way", "/articles/shared/tmkmfjthujzx": "/articles/self-guided-code-tour", "/articles/shared/glavcyxkbqzf": "/articles/parsing-json-the-hard-way", "/articles/shared/vvkwygjcqrml": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/xzoafduyvuvd": "/articles/method-lookup-1", "/articles/shared/hfjwmzoqkwex": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/whpybiwgxfwt": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/jfvuxteohpxf": "/articles/self-guided-code-tour", "/articles/shared/hubeukbqcdmr": "/articles/solid-design-principles", "/articles/shared/emyvtufvztcn": "/articles/structural-design-patterns", "/articles/shared/bbjmlagnyfcn": "/articles/patterns-for-building-excellent-examples", "/articles/shared/fhvhoxdbjrge": "/articles/debugging-without-doom-and-gloom", "/articles/shared/hhbgwxusziwj": "/articles/hidden-costs-of-inheritance", "/articles/shared/nuzovswmzixg": "/articles/parsing-json-the-hard-way", "/articles/shared/vhcffvopasau": "/articles/code-reuse-is-complicated", "/articles/shared/xqihycnduqcd": "/articles/uses-for-modules-1", "/articles/shared/dowmfziwdore": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/yvxdzjhjykez": "/articles/uses-for-modules-2", "/articles/shared/bvxfihdmcpvz": "/articles/parsing-json-the-hard-way", "/articles/shared/nrrfwokqeovn": "/articles/arguments-and-results-1", "/articles/shared/umvaroqaqrqw": "/articles/arguments-and-results-2", "/articles/shared/ltzfwydfqoql": "/articles/persisting-relations-in-a-polyglot-world", "/articles/shared/lqkafgudfqon": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/dntstznuxvez": "/articles/building-enumerable-and-enumerator", "/articles/shared/fzdrkehnwpjk": "/articles/debugging-without-doom-and-gloom", "/articles/shared/hnwvssxvkyno": "/articles/closures-are-complicated", "/articles/shared/awdgyaitgivu": "/articles/debugging-without-doom-and-gloom", "/articles/shared/jtbizyudpncn": "/articles/debugging-without-doom-and-gloom", "/articles/shared/mprbhlgkgfkp": "/articles/debugging-without-doom-and-gloom", "/articles/shared/dhxaczfmwulp": "/articles/debugging-without-doom-and-gloom", "/articles/shared/hvopoqztgbqq": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/pezdsfxadbih": "/articles/expanding-your-code-reading-horizons", "/articles/shared/szyerzdmdgav": "/articles/tdd-costs-and-benefits", "/articles/shared/aesxbtcpcgzk": "/articles/debugging-without-doom-and-gloom", "/articles/shared/xifyeervxjpp": "/articles/cleaning-up-bloated-method-interfaces", "/articles/shared/cuopzdpaoaaj": "/articles/debugging-without-doom-and-gloom", "/articles/shared/yrznhmdcwxex": "/articles/mock-objects-deeply-influence-design", "/articles/shared/anhpxhlhakvu": "/articles/testing-private-methods", "/articles/shared/sthrtfkiifhr": "/articles/cleaning-up-bloated-method-interfaces", "/articles/shared/phzscfkjsecd": "/articles/parsing-json-the-hard-way", "/articles/shared/rhcmbxcdpjxw": "/articles/debugging-without-doom-and-gloom", "/articles/shared/fmlrlcgumjti": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/dkypcoxgjfry": "/articles/debugging-without-doom-and-gloom", "/articles/shared/iycqzsrcfnyh": "/articles/cleaning-up-bloated-method-interfaces", "/articles/shared/ugbuzjnqotij": "/articles/debugging-without-doom-and-gloom", "/articles/shared/ttggnyysghpd": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/neotcvhnrnoj": "/articles/debugging-without-doom-and-gloom", "/articles/shared/zzdrpyxcqtan": "/articles/parsing-json-the-hard-way", "/articles/shared/bhnwqnupdcmn": "/articles/cleaning-up-bloated-method-interfaces", "/articles/shared/qxbztlomqgtp": "/articles/cleaning-up-bloated-method-interfaces", "/articles/shared/krprsitktpxp": "/articles/cleaning-up-bloated-method-interfaces", "/articles/shared/ghnuolgjzlop": "/articles/code-reuse-is-complicated", "/articles/shared/kgblfxryikjh": "/articles/debugging-without-doom-and-gloom", "/articles/shared/trmauylaeimg": "/articles/self-guided-code-tour", "/articles/shared/pimuzcqofygb": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/jffzfumbdnal": "/articles/code-reuse-is-complicated", "/articles/shared/mmawnounihfr": "/articles/cleaning-up-bloated-method-interfaces", "/articles/shared/lumdnudeswhn": "/articles/process-spawning-patterns", "/articles/shared/bsdikubnyhvi": "/articles/using-games-to-practice-domain-modeling", "/articles/shared/gwvvymaglpuu": "/articles/expanding-your-code-reading-horizons", "/articles/shared/hdxmbmxvlkxd": "/articles/ruby-hacker-writers", "/articles/shared/gobjrxpyyhqg": "/articles/from-scripting-to-oop", "/articles/shared/xvzisifomzyw": "/articles/cleaning-up-bloated-method-interfaces", "/articles/shared/desejorwoxdg": "/articles/debugging-without-doom-and-gloom", "/articles/shared/bczhxikiehty": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/rcoloczsetqy": "/articles/code-reuse-is-complicated", "/articles/shared/xdtxlnuhhveb": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/rcvluyvhwcaw": "/articles/self-guided-code-tour", "/articles/shared/bcqvruznakcn": "/articles/parsing-json-the-hard-way", "/articles/shared/kzztjrkpdxyi": "/articles/adventure-in-prototypes", "/articles/shared/nmjwsgvzzcsd": "/articles/ant-colony-simulation", "/articles/shared/vtkxqofulfia": "/articles/expanding-your-code-reading-horizons", "/articles/shared/fnkryzjqoxur": "/articles/relationships-between-objects", "/articles/shared/zusgxcrbvoxz": "/articles/growing-a-stable-codebase", "/articles/shared/jwuyvgnwnfai": "/articles/process-spawning-patterns", "/articles/shared/jdbkqtsdzlec": "/articles/building-the-rstatus-api", "/articles/shared/kwynjgtlezhr": "/articles/domain-specific-apis", "/articles/shared/duuyomrjtpgz": "/articles/event-loops-demystified", "/articles/shared/pkaptwupazjs": "/articles/intro-to-basic-statistical-methods", "/articles/shared/nceducuxdioz": "/articles/tdd-lessons-learned", "/articles/shared/zdpmbhweoamc": "/articles/end-to-end-testing-is-essential", "/articles/shared/lcxccdtahtyn": "/articles/refactoring-is-not-redesign", "/articles/shared/pyssutioqalq": "/articles/mock-objects-deeply-influence-design", "/articles/shared/cqunafmasygg": "/articles/spiking-is-not-cowboy-coding", "/articles/shared/nyyxhojueldn": "/articles/demeter-archaeology", "/articles/shared/nqydubaezkfa": "/articles/demeter-archaeology", "/articles/shared/gkypawuoyfkg": "/articles/low-cost-approach-to-side-projects", "/articles/shared/zsdilvbldczn": "/articles/from-scripting-to-oop", "/articles/shared/kxmahzypeuyt": "/articles/connascence", "/articles/shared/rhhokzgnuxcd": "/articles/building-unix-style-command-line-applications", "/articles/shared/mcxcdxyujvnd": "/articles/low-cost-approach-to-side-projects", "/articles/shared/egjsblvrblqp": "/articles/from-scripting-to-oop", "/articles/shared/gwpshwxfnavg": "/articles/demeter-archaeology", "/articles/shared/jgxhmqxhtfil": "/articles/demeter-archaeology", "/articles/shared/qdkztbnzqeqw": "/articles/demeter-archaeology", "/articles/shared/ywxjkeyptoap": "/articles/demeter-archaeology", "/articles/shared/nahylpsjhmxk": "/articles/parsing-json-the-hard-way", "/articles/shared/drtmzhgmbwzo": "/articles/from-scripting-to-oop", "/articles/shared/vptkhrjtrkmn": "/articles/parsing-json-the-hard-way", "/articles/shared/cbccsuyjvfkd": "/articles/using-games-to-practice-domain-modeling", "/articles/shared/gfyxewxsnqea": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/vouurnhnvgwm": "/articles/from-requirements-discovery-to-release", "/articles/shared/bapikazpkssh": "/articles/ways-to-load-code", "/articles/shared/uvjxzrofifjo": "/articles/from-scripting-to-oop", "/articles/shared/ikhfefkggikv": "/articles/from-scripting-to-oop", "/articles/shared/qbcaqhcyhmxl": "/articles/meditations-on-bad-and-good-code-1", "/articles/shared/vtathxfxsdpr": "/articles/from-scripting-to-oop", "/articles/shared/xevvhtbexndu": "/articles/cleaning-up-bloated-method-interfaces", "/articles/shared/ojxfgakqkyxz": "/articles/from-scripting-to-oop", "/articles/shared/kawnuiekipgs": "/articles/demeter-archaeology", "/articles/shared/lmbpstughfjp": "/articles/demeter-archaeology", "/articles/shared/lktaxohkbuso": "/articles/solid-design-principles", "/articles/shared/zszrputyojnp": "/articles/avoiding-brittleness-in-data-munging", "/articles/shared/mvqkrxzeipsd": "/articles/code-reuse-is-complicated", "/articles/shared/oscjjkejbolf": "/articles/demeter-archaeology", "/articles/shared/qbroskmfnpbk": "/articles/from-scripting-to-oop", "/articles/shared/bmhpdxooeuno": "/articles/demeter-archaeology", "/articles/shared/ephinlyhkgxz": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/dacpctqzgcmw": "/articles/from-scripting-to-oop", "/articles/shared/ufcrbrrumpym": "/articles/demeter-archaeology", "/articles/shared/ausjiapcdxvz": "/articles/from-scripting-to-oop", "/articles/shared/zsalcmwoaoqp": "/articles/ways-to-load-code", "/articles/shared/edtdvqitmupx": "/articles/from-scripting-to-oop", "/articles/shared/vhoejbpnekfa": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/qqemycfebxat": "/articles/from-scripting-to-oop", "/articles/shared/vbrgjydcnhwu": "/articles/uses-for-modules-3", "/articles/shared/dvvkqcgwumdq": "/articles/demeter-archaeology", "/articles/shared/lceukmjxnovj": "/articles/avoiding-brittleness-in-data-munging", "/articles/shared/vlfodhsjzqym": "/articles/avoiding-brittleness-in-data-munging", "/articles/shared/uecdbsjqmyku": "/articles/avoiding-brittleness-in-data-munging", "/articles/shared/llgriixnvgeb": "/articles/avoiding-brittleness-in-data-munging", "/articles/shared/pvulkmcnafma": "/articles/demeter-archaeology", "/articles/shared/urgddkraohcz": "/articles/avoiding-brittleness-in-data-munging", "/articles/shared/wtszbozdhhvn": "/articles/avoiding-brittleness-in-data-munging", "/articles/shared/lkbebllaaigp": "/articles/avoiding-brittleness-in-data-munging", "/articles/shared/syntqywgklzn": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/ewsbnjirbqls": "/articles/avoiding-brittleness-in-data-munging", "/articles/shared/szbgqbzmvvkb": "/articles/avoiding-brittleness-in-data-munging", "/articles/shared/xwppfyimprtw": "/articles/avoiding-brittleness-in-data-munging", "/articles/shared/kdziwerpffjc": "/articles/avoiding-brittleness-in-data-munging", "/articles/shared/ahrhnuyrouau": "/articles/demeter-archaeology", "/articles/shared/owwygumucsux": "/articles/cleaning-up-bloated-method-interfaces", "/articles/shared/hvcndwybwrho": "/articles/demeter-archaeology", "/articles/shared/gkesaeepwtfo": "/articles/low-cost-approach-to-side-projects", "/articles/shared/vgmdbdimfbrn": "/articles/from-scripting-to-oop", "/articles/shared/wqyjkzqpdpvb": "/articles/from-scripting-to-oop", "/articles/shared/paxjqxegoaef": "/articles/low-cost-approach-to-side-projects", "/articles/shared/atrnepvcgndn": "/articles/debugging-without-doom-and-gloom", "/articles/shared/irjjrxvqeget": "/articles/demeter-archaeology", "/articles/shared/qxkvlvbjzptv": "/articles/domain-specific-apis", "/articles/shared/xkmhfzynkraw": "/articles/low-cost-approach-to-side-projects", "/articles/shared/kgxevhwngtgf": "/articles/low-cost-approach-to-side-projects", "/articles/shared/ahvijetizshs": "/articles/implementing-an-http-file-server", "/articles/shared/hjsnsoikbdjs": "/articles/method-lookup-1", "/articles/shared/whfhjhfqkuaf": "/articles/from-scripting-to-oop", "/articles/shared/awurccpvoezv": "/articles/method-lookup-2", "/articles/shared/nzlhwcbnhbsz": "/articles/method-lookup-1", "/articles/shared/ammzxeddxybr": "/articles/simulating-tiny-worlds", "/articles/shared/mpkocdzyuxqk": "/articles/from-scripting-to-oop", "/articles/shared/pmtriyrmzzhr": "/articles/simulating-tiny-worlds", "/articles/shared/efrzjlyxuqbm": "/articles/simulating-tiny-worlds", "/articles/shared/lnuysyjvvwhv": "/articles/low-cost-approach-to-side-projects", "/articles/shared/zhkvuypqcyyg": "/articles/low-cost-approach-to-side-projects", "/articles/shared/isnicmhnnfdt": "/articles/implementing-an-http-file-server", "/articles/shared/lbqywvbzuegr": "/articles/low-cost-approach-to-side-projects", "/articles/shared/nymyfjrlcokk": "/articles/simulating-tiny-worlds", "/articles/shared/ozhnqhohtwts": "/articles/simulating-tiny-worlds", "/articles/shared/mqlqbkqcciii": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/igbmrmxplcui": "/articles/simulating-tiny-worlds", "/articles/shared/asmyaujfiicv": "/articles/cleaning-up-bloated-method-interfaces", "/articles/shared/uwtotxwqbill": "/articles/implementing-an-http-file-server", "/articles/shared/qgmnpxxutxcp": "/articles/implementing-an-http-file-server", "/articles/shared/edxccrrohrpl": "/articles/demeter-archaeology", "/articles/shared/equltfifgvil": "/articles/building-enumerable-and-enumerator", "/articles/shared/vivmeofthzub": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/ibnilmhhovlb": "/articles/low-cost-approach-to-side-projects", "/articles/shared/zvqbcagunxlf": "/articles/spiral-staircase-of-refactoring", "/articles/shared/acelfzbfjlcm": "/articles/growing-a-stable-codebase", "/articles/shared/rggtizcrtkro": "/articles/method-lookup-2", "/articles/shared/ayzraqwpxwlv": "/articles/implementing-an-http-file-server", "/articles/shared/scqtutaqfldp": "/articles/parsing-json-the-hard-way", "/articles/shared/lguepnnmvlvn": "/articles/implementing-an-http-file-server", "/articles/shared/fbctihxdfypx": "/articles/implementing-an-http-file-server", "/articles/shared/fbjcjusjlxbw": "/articles/method-lookup-2", "/articles/shared/mmlcuxezhcxa": "/articles/simulating-tiny-worlds", "/articles/shared/alptjgvnulcj": "/articles/simulating-tiny-worlds", "/articles/shared/faxtemxhrbli": "/articles/implementing-an-http-file-server", "/articles/shared/cfintieexkdh": "/articles/implementing-an-http-file-server", "/articles/shared/llkirfkslfiz": "/articles/configurable-applications-1", "/articles/shared/rwbdgfijvbay": "/articles/refactoring-is-not-redesign", "/articles/shared/bjddfgaibsxz": "/articles/simulating-tiny-worlds", "/articles/shared/ppvskivtthbw": "/articles/implementing-an-http-file-server", "/articles/shared/vwzbvzmthfem": "/articles/simulating-tiny-worlds", "/articles/shared/ktoctdcktgeb": "/articles/simulating-tiny-worlds", "/articles/shared/ntjcptsudtfh": "/articles/simulating-tiny-worlds", "/articles/shared/yafovwmrcrug": "/articles/low-cost-approach-to-side-projects", "/articles/shared/ndyrearmltak": "/articles/simulating-tiny-worlds", "/articles/shared/yaprpexqiqpd": "/articles/simulating-tiny-worlds", "/articles/shared/ugmkwvvtbqws": "/articles/building-the-rstatus-api", "/articles/shared/bpmteiizekiq": "/articles/simulating-tiny-worlds", "/articles/shared/jgkobcrhvvzz": "/articles/implementing-an-http-file-server", "/articles/shared/yxxafsdcpjxq": "/articles/simulating-tiny-worlds", "/articles/shared/futrjedqbrgh": "/articles/from-scripting-to-oop", "/articles/shared/gmoafjgblrwm": "/articles/testing-private-methods", "/articles/shared/ydaarfglhqwh": "/articles/implementing-an-http-file-server", "/articles/shared/ghsnlbfasrik": "/articles/implementing-an-http-file-server", "/articles/shared/fxskouooyfjb": "/articles/implementing-an-http-file-server", "/articles/shared/dfdtqccgxcke": "/articles/method-lookup-1", "/articles/shared/othfhgpeedcs": "/articles/implementing-an-http-file-server", "/articles/shared/hdugtuymzdri": "/articles/low-cost-approach-to-side-projects", "/articles/shared/dxtfvstejcrh": "/articles/implementing-an-http-file-server", "/articles/shared/inasayynntcr": "/articles/simulating-tiny-worlds", "/articles/shared/mjpkrnlgyzpc": "/articles/configurable-applications-2", "/articles/shared/ohdwuogszwrw": "/articles/simulating-tiny-worlds", "/articles/shared/himifvmvznvi": "/articles/implementing-an-http-file-server", "/articles/shared/gvhkgpaaxhop": "/articles/method-lookup-1", "/articles/shared/cnzpzqmhjhdx": "/articles/testing-private-methods", "/articles/shared/klwuotfjeuye": "/articles/meditations-on-bad-and-good-code-1", "/articles/shared/ryipayyhybko": "/articles/meditations-on-bad-and-good-code-2", "/articles/shared/fflksheugtco": "/articles/uses-for-modules-1", "/articles/shared/mrdibvcitpui": "/articles/uses-for-modules-4", "/articles/shared/gegutpvpziat": "/articles/uses-for-modules-3", "/articles/shared/htcjtqtnldlo": "/articles/uses-for-modules-2", "/articles/shared/xxkyxusljwns": "/articles/uses-for-modules-3a", "/articles/shared/dallhxzeufwq": "/articles/rapid-prototyping", "/articles/shared/otzdjipjkxgn": "/articles/obfuscations-of-christmas-past", "/articles/shared/uocrvnmgvunt": "/articles/duck-typing-in-practice-1", "/articles/shared/julhwdyrgygt": "/articles/duck-typing-in-practice-2", "/articles/shared/bufsdtddrcsv": "/articles/ruby-hackers", "/articles/shared/ljfsyjqzfbez": "/articles/ruby-hacker-writers", "/articles/shared/fxipazikzurd": "/articles/thoughts-on-mocking-2", "/articles/shared/tkyabipsswse": "/articles/thoughts-on-mocking-1", "/articles/shared/htpclhzsiljr": "/articles/dirty-testing-secrets", "/articles/shared/brabsjalksog": "/articles/how-to-practice-1", "/articles/shared/ukdrsytjokup": "/articles/how-to-practice-2", "/articles/shared/anttoqkiphmb": "/articles/creational-design-patterns", "/articles/shared/czjdbiuwwavm": "/articles/solid-design-principles", "/articles/shared/dkrurbvnhuxs": "/articles/connascence", "/articles/shared/zlcqhpxhuosr": "/articles/structural-design-patterns", "/articles/shared/higqpyvbjmmo": "/articles/building-unix-style-command-line-applications", "/articles/shared/gfjbsjcbqnrq": "/articles/method-lookup-1", "/articles/shared/usauqkqgwkno": "/articles/implementing-an-http-file-server", "/articles/shared/mrniplpcscoj": "/articles/implementing-an-http-file-server", "/articles/shared/deohcngzjhok": "/articles/parsing-json-the-hard-way", "/articles/shared/fdemmkuglpmp": "/articles/implementing-an-http-file-server", "/articles/shared/rukezgklzllg": "/articles/method-lookup-1", "/articles/shared/fxdhztfppzni": "/articles/method-lookup-2", "/articles/shared/gidplvlpibin": "/articles/configurable-applications-1", "/articles/shared/rlyewqslxkva": "/articles/duck-typing-in-practice-1", "/articles/shared/obzkvnjccogp": "/articles/duck-typing-in-practice-2", "/articles/shared/olattsucbcox": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/gohnnqewohjx": "/articles/implementing-an-http-file-server", "/articles/shared/sxydkdgjhvze": "/articles/event-loops-demystified", "/articles/shared/uivxlrvuktat": "/articles/process-spawning-patterns", "/articles/shared/tadltwungtld": "/articles/configurable-applications-2", "/articles/shared/tjrrpdybcccu": "/articles/implementing-an-http-file-server", "/articles/shared/qgwiscqzcpmd": "/articles/demeter-archaeology", "/articles/shared/pdmxbrjznvzg": "/articles/from-scripting-to-oop", "/articles/shared/oxoilnrrzpng": "/articles/avoiding-brittleness-in-data-munging", "/articles/shared/qbyjprmbfqce": "/articles/low-cost-approach-to-side-projects", "/articles/shared/xqfwyayxdgef": "/articles/simulating-tiny-worlds", "/articles/shared/uxbnjnkoiurg": "/articles/implementing-an-http-file-server", "/articles/shared/zxexhxtdebtn": "/articles/building-unix-style-command-line-applications", "/articles/shared/wwthmlkgvmxr": "/articles/from-requirements-discovery-to-release", "/articles/shared/rwjgllfflehs": "/articles/domain-specific-apis", "/articles/shared/zyvgpiwvembq": "/articles/binary-file-formats", "/articles/shared/dmxaeuyurfuw": "/articles/designing-business-reporting-applications", "/articles/shared/qwsqyrvfjfir": "/articles/arguments-and-results-2", "/articles/shared/glloicvyvxsh": "/articles/implementing-an-http-file-server", "/articles/shared/tcqpaztwqafy": "/articles/confident-ruby", "/articles/shared/zcgffpojcjsl": "/articles/parsing-json-the-hard-way", "/articles/shared/ykyuwdspazmx": "/articles/intro-to-basic-statistical-methods", "/articles/shared/wfvvhpdxcqev": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/hyvtapekvzng": "/articles/relationships-between-objects", "/articles/shared/deuveazczzcx": "/articles/connascence", "/articles/shared/oniqnsfungtn": "/articles/solid-design-principles", "/articles/shared/iuvjminzktkz": "/articles/persisting-relations-in-a-polyglot-world", "/articles/shared/lieinzfxzzwi": "/articles/exploratory-data-analysis", "/articles/shared/qydiyojhbvoz": "/articles/implementing-an-http-file-server", "/articles/shared/qixbofouuvgk": "/articles/confident-ruby", "/articles/shared/iptocucwujtj": "/articles/domain-specific-apis", "/articles/shared/qjbjdiiwcivm": "/articles/binary-file-formats", "/articles/shared/qfrklnmtdpyo": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/trtywujyhpuh": "/articles/implementing-the-active-record-pattern-1", "/articles/shared/zfbdfzhyxdgi": "/articles/hidden-costs-of-inheritance", "/articles/shared/yefbiqvtqqzp": "/articles/exploratory-data-analysis", "/articles/shared/uuzunjrpspfb": "/articles/implementing-an-http-file-server", "/articles/shared/ibidbupjguxe": "/articles/implementing-an-http-file-server", "/articles/shared/fdavvmgegpaw": "/articles/rapid-prototyping", "/articles/shared/lohhahtxtpnu": "/articles/exploratory-data-analysis", "/articles/shared/nirmcxfrrpgx": "/articles/spiking-is-not-cowboy-coding", "/articles/shared/uxajslundshz": "/articles/exploratory-data-analysis", "/articles/shared/nasqvsoicdpw": "/articles/simulating-tiny-worlds", "/articles/shared/shtphrehmtzo": "/articles/implementing-an-http-file-server", "/articles/shared/cqfxnghkzjyl": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/yvusbokfvqcz": "/articles/implementing-an-http-file-server", "/articles/shared/fyitckpxqkay": "/articles/connascence", "/articles/shared/jbjajydnygjf": "/articles/implementing-the-active-record-pattern-2", "/articles/shared/pyzpkayerdea": "/articles/simulating-tiny-worlds", "/articles/shared/luftgpsjxmnd": "/articles/connascence", "/articles/shared/emlbkzsytxug": "/articles/mock-objects-deeply-influence-design", "/articles/shared/zkuocddwixef": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/utlymfnsszgk": "/articles/self-guided-code-tour", "/articles/shared/dptfgwedmytp": "/articles/uses-for-modules-1", "/articles/shared/jutypfinkdoo": "/articles/exploratory-data-analysis", "/articles/shared/cenjjklzbxgg": "/articles/implementing-an-http-file-server", "/articles/shared/mzvzwojnokme": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/sebceznwtpfi": "/articles/exploratory-data-analysis", "/articles/shared/swbdvhygajnc": "/articles/gentle-intro-to-actor-based-concurrency", "/articles/shared/ogoactltlndg": "/articles/code-reuse-is-complicated", "/articles/shared/mzxoxsqipmoo": "/articles/debugging-without-doom-and-gloom", "/articles/shared/osobfvlkilql": "/articles/cleaning-up-bloated-method-interfaces", "/articles/shared/quokijkwdgab": "/articles/solid-design-principles", "/articles/shared/atlfqvoykalh": "/articles/demeter-archaeology", "/articles/shared/absxjbhcpcma": "/articles/from-scripting-to-oop", "/articles/shared/rrxjezkkgjgf": "/articles/avoiding-brittleness-in-data-munging", "/articles/shared/nxnzzcjipowx": "/articles/low-cost-approach-to-side-projects", "/articles/shared/jsonqtnbloep": "/articles/intro-to-basic-statistical-methods", "/articles/shared/hgefepzkpfum": "/articles/implementing-an-http-file-server", "/articles/shared/blefpsiaqahm": "/articles/temporal-coupling-and-the-law-of-demeter", "/articles/shared/zwedqkhzsdws": "/articles/event-loops-demystified", "/articles/shared/mvzyuesiqrkw": "/articles/building-the-rstatus-api", "/articles/shared/nhggtszlefyk": "/articles/process-spawning-patterns", "/articles/shared/zwieyttyliqf": "/articles/responsibility-centric-vs-data-centric-design", "/articles/shared/zddalwhtfuzn": "/articles/growing-a-stable-codebase", "/articles/shared/cjxbigsuhsdw": "/articles/relationships-between-objects", "/articles/shared/fggrgcmcuzit": "/articles/patterns-for-building-excellent-examples", "/articles/shared/scayzdlstjka": "/articles/code-reuse-is-complicated", "/articles/shared/hpeujsdoiehq": "/articles/mock-objects-deeply-influence-design", "/articles/shared/kdtkquyowcve": "/articles/connascence", "/articles/shared/ijeunrktzbsj": "/articles/adventure-in-prototypes", "/articles/shared/jnqccostdimj": "/articles/expanding-your-code-reading-horizons", "/articles/shared/jlpbldrhihoe": "/articles/parsing-json-the-hard-way", "/articles/shared/adbsmjhidpvg": "/articles/tdd-lessons-learned", "/articles/shared/cwflfahjabvq": "/articles/process-spawning-patterns", "/articles/shared/ilcxlqdnculv": "/articles/ant-colony-simulation", "/articles/shared/pxithuwvajzn": "/articles/adventure-in-prototypes", "/articles/shared/vqanjamatpgj": "/articles/end-to-end-testing-is-essential", "/articles/shared/lpcfeubdjici": "/articles/tdd-costs-and-benefits", "/articles/shared/krvkxvltcpkk": "/articles/from-prototype-to-minimal-product", "/articles/shared/twankxrppeas": "/articles/refactoring-is-not-redesign", "/articles/shared/thkvjhkfmtse": "/articles/tricks-for-working-with-text-and-files", "/articles/shared/kuhlnfnyfxdd": "/articles/solving-the-scoring-predictions-kata", "/articles/shared/kbgnevyrziam": "/articles/mock-objects-deeply-influence-design", "/articles/shared/ogoxadaudfbm": "/articles/spiking-is-not-cowboy-coding", "/articles/shared/kgnxysrxkdjh": "/articles/qualities-of-great-software", "/articles/shared/corvqnfxzlwt": "/articles/patterns-for-building-excellent-examples", "/articles/shared/iykpaxdaeuna": "/articles/exploring-a-turing-tarpit", "/articles/shared/cskgceuohmti": "/articles/spiral-staircase-of-refactoring", "/articles/shared/dhvzkjttrfbw": "/articles/framework-design-and-implementation-1", "/articles/shared/lmqvtqpqhjpz": "/articles/framework-design-and-implementation-2", "/articles/shared/ndpbejhqznlr": "/articles/disciplined-inheritance-1", "/articles/shared/allunhrfqssh": "/articles/disciplined-inheritance-2", "/articles/shared/ehwyxrchgntr": "/articles/connascence", "/articles/shared/bgtfdvbtvdnl": "/articles/end-to-end-testing-is-essential", "/articles/shared/yhrmpichydpe": "/articles/uses-for-modules-4", "/articles/shared/bttzzfpuyasw": "/articles/using-games-to-practice-domain-modeling", "/articles/shared/rgrmfugzznck": "/articles/coding-in-the-danger-zone", "/articles/shared/njkahblicrhv": "/articles/attacking-sticky-problems", "/articles/shared/cuhxnjfdunrb": "/articles/closures-are-complicated", "/articles/shared/oixtjqygntda": "/articles/building-enumerable-and-enumerator", "/articles/shared/gwdvahmuihgo": "/articles/regession-testing", "/articles/shared/hqervkpkikzx": "/articles/learning-new-things-step-by-step", "/articles/shared/cosozfvobuet": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/unmcqbypaysr": "/articles/ruby-and-the-singleton-pattern-dont-get-along", "/articles/shared/omfdyvrzlxri": "/articles/building-unix-style-command-line-applications", "/articles/shared/dzgwaqmttzkg": "/articles/from-requirements-discovery-to-release", "/articles/shared/gmzflklhxwxc": "/articles/domain-specific-apis", "/articles/shared/dltpqckmydxc": "/articles/binary-file-formats", "/articles/shared/mfwmfdtwxtgi": "/articles/designing-business-reporting-applications", "/articles/shared/dujvumhmzeda": "/articles/arguments-and-results-1", "/articles/shared/wjgxhkzboeth": "/articles/arguments-and-results-2", "/articles/shared/bwuffuysblkl": "/articles/method-lookup-1", "/articles/shared/jpvqjgjkfikj": "/articles/configurable-applications-1", "/articles/shared/ogjafmsvnmiv": "/articles/configurable-applications-2", "/articles/shared/pwvwclwzzvxy": "/articles/testing-private-methods", "/articles/shared/sxdjcxrtuail": "/articles/meditations-on-bad-and-good-code-1", "/articles/shared/xmhnqzqtfusf": "/articles/meditations-on-bad-and-good-code-2", "/articles/shared/jutxweevotoc": "/articles/uses-for-modules-1", "/articles/shared/fhakujvbvwvv": "/articles/uses-for-modules-2", "/articles/shared/jvuwjrclcttd": "/articles/uses-for-modules-3", "/articles/shared/sfixgiunnawb": "/articles/uses-for-modules-3a", "/articles/shared/ncnplzwwtbri": "/articles/uses-for-modules-4", "/articles/shared/bneufluiabsl": "/articles/rapid-prototyping", "/articles/shared/ipmpjnomgebs": "/articles/obfuscations-of-christmas-past", "/articles/shared/pkforrubmsaz": "/articles/duck-typing-in-practice-1", "/articles/shared/kdodlapxtmiu": "/articles/duck-typing-in-practice-2", "/articles/shared/duxzvobvuaav": "/articles/ruby-hackers", "/articles/shared/myvngwzwrwov": "/articles/ruby-hacker-writers", "/articles/shared/unhuvoggxyej": "/articles/dirty-testing-secrets", "/articles/shared/sojscyyevlkz": "/articles/thoughts-on-mocking-1", "/articles/shared/olifrymqdcxp": "/articles/thoughts-on-mocking-2", "/articles/shared/usooueyfsmct": "/articles/how-to-practice-1", "/articles/shared/qkrchmejgojr": "/articles/how-to-practice-2", "/articles/shared/zbjjkbynjnyn": "/articles/solid-design-principles", "/articles/shared/yciooqrdhavv": "/articles/connascence", "/articles/shared/xlcvhwhlgkxj": "/articles/creational-design-patterns", "/articles/shared/ymwktwgwqeon": "/articles/structural-design-patterns", "/articles/shared/ybjxzfbaxwyi": "/articles/exploratory-data-analysis", "/articles/shared/bjbqfwshtdem": "/articles/exploratory-data-analysis", "/articles/shared/unqsskelcrhj": "/articles/exploratory-data-analysis", "/articles/shared/vpqnefwaegte": "/articles/exploratory-data-analysis", "/articles/shared/xwgedtoeqcjq": "/articles/exploratory-data-analysis", "/articles/shared/uuzvblfyqrde": "/articles/debugging-without-doom-and-gloom", "/articles/shared/wlinvvchcoti": "/articles/exploratory-data-analysis", "/articles/shared/ptrpcteasbdv": "/articles/end-to-end-testing-is-essential", "/articles/shared/eoegpjduzbgs": "/articles/exploratory-data-analysis", "/articles/shared/bujyjgdrbika": "/articles/ways-to-load-code", "/articles/shared/ghbtcxkdybbb": "/articles/spiral-staircase-of-refactoring", "/articles/shared/piputmzrodhb": "/articles/building-enumerable-and-enumerator", "/articles/shared/bvgkjnvkiwld": "/articles/self-guided-code-tour", "/articles/shared/ymdwkutaypyh": "/articles/cleaning-up-bloated-method-interfaces", "/articles/shared/giksmaarfdpc": "/articles/exploratory-data-analysis", "/articles/shared/wdvgulzrstdi": "/articles/exploratory-data-analysis", "/articles/shared/ojgnyxyeomcz": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/krreczdxtrhf": "/articles/configurable-applications-1", "/articles/shared/kaatmzagohgm": "/articles/method-lookup-1", "/articles/shared/hdzilffbjvrk": "/articles/unobtrusive-ruby-in-practice", "/articles/shared/xerbtdvlgbpl": "/articles/from-scripting-to-oop", "/articles/shared/uymcxxmeqeir": "/articles/improving-legacy-systems", "/articles/shared/wfakxwhkawhd": "/articles/exploratory-data-analysis", "/articles/shared/oifntllyxshm": "/articles/low-cost-approach-to-side-projects", "/articles/shared/zfepjgomdrkz": "/articles/configurable-applications-1", "/articles/shared/yeojqqrqupgu": "/articles/improving-legacy-systems", "/articles/shared/xnosixiiuljp": "/articles/method-lookup-1", "/articles/shared/peotettnmxui": "/articles/improving-legacy-systems", "/articles/shared/vjhbdjxlqvta": "/articles/improving-legacy-systems", "/articles/shared/wxsonvguotgk": "/articles/improving-legacy-systems", "/articles/shared/kejnaxgedizc": "/articles/improving-legacy-systems", "/articles/shared/xbodqhhieqzt": "/articles/process-spawning-patterns", "/articles/shared/jyokzfqwhtsm": "/articles/ways-to-load-code", "/articles/shared/odnazlvdgqve": "/articles/simulating-tiny-worlds",
"/open-source": "/about"
}
},
{
"module": "custom-errors",
"options": {
"errors": {
"404": "errors/404.html"
}
}
},
{
"module": "webpage"
}
]
}
}