forked from speedshop/speedshop
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
157 lines (140 loc) · 7.76 KB
/
index.html
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
---
title: Speedshop - the Ruby on Rails performance company
summary:
layout: default
---
<div class="container">
<div class="row margin-top-xl">
<div class="column column-50 column-mobile-100">
{% include speedshop_wordmark.svg %}
<p>
Speedshop is a Ruby on Rails performance consultancy that
optimizes the full stack - frontend, backend and environment - to generate
revenue and cut scaling costs for businesses on Rails through tools, information and training.
Fast sites are profitable sites. Speed is a feature.
</p>
<p><b>New:</b> <a href="https://www.speedshop.co.jp">日本に支社があります</a></p>.
<h2>Products and Services</h2>
<ul>
<li>
<a href="https://www.fastruby.io/tune"><b><i>New!</i> Tune Reports</b></a>. An audit and code review for Ruby and Rails performance, powered by my partners at Ombu Labs.
</li>
<li>
<a href="/rails-performance-workshop.html"><b>The Rails Performance Workshop</b></a>. A four-week program that makes your Rails app faster and more scalable. Attended by over 500 developers so far. Team and solo editions.
</li>
<li>
<a href="https://railsspeed.com"><b>The Complete Guide to Rails Performance</b></a>,
an in-depth 370 page reference manual on making Rails apps faster.
</li>
<li>
<a href="https://nateberk.gumroad.com/l/sidekiqinpractice"><b>Sidekiq in Practice</b></a>,
a workshop for teaching you how to scale Sidekiq from 0 to 10,000 jobs per second.
</li>
<li>
<a href="https://nateberk.gumroad.com/l/apocrypha"><b>The Ruby on Rails Performance Apocrypha</b></a>,
a short book about the ins and outs of scaling Rails
</li>
<li>
<a href="/blog/"><b>Speedshop Blog</b></a>,
the number one Ruby on Rails performance blog on the 'net.
</li>
<li>
<a href="https://eepurl.com/cr4fDj"><b>The Speedshop Newsletter</b></a>,
a weekly email newsletter that talks about issues surrounding optimizing and scaling Ruby web applications.
</li>
</ul>
<h2>Who is Speedshop?</h2>
<p>
Speedshop is me,
<a href="https://www.nateberkopec.com/"><b>Nate Berkopec</b></a>. I've been working on Ruby on Rails applications for almost 10 years, and I've taught thousands how to make their apps faster, more scalable, and more maintainable. I maintain Puma, the popular open-source Ruby application server. You're probably running my code on your Rails server right now, somewhere.
</p>
<p>
I've given talks at dozens of conferences. <a href="https://www.youtube.com/playlist?list=PLmEErUwnghlELuYrmNhIcDU0_KtXQIUpW">You can view some of those talks on YouTube.</a>
</p>
<h2>Trusted By</h2>
<img src="/assets/img/ss_client_logos_md.jpg" style='margin-left:-10px;margin-bottom: 3.5rem' loading='lazy'>
<h2>Philosophy</h2>
<ul>
<li>
<b>Full-stack and user-first.</b> Your users have to go through
the full stack to use your application - so we optimize at every
level. All performance optimization flows from the end-user experience.
</li>
<li>
<b>Never underestimate developers.</b> Many performance tools,
consultancies and teams today believe that developers only have a
limited capacity to understand performance issues. Speedshop believes
in the unlimited capacity of software developers to learn, and that
even the most complex performance issue is not out of the reach of any.
</li>
<li><b>Performance and deployment are essentials, not luxuries.</b>
All organizations have performance goals and targets,
but they are left unstated. Is it acceptable for this page to load in
more than 2 minutes? No? Then you have a requirement. What is measured is managed.
</li>
<li><b>Optimization without measurement is premature.</b> By applying a
rigorous, scientific process to optimization
we can be certain that optimizations are necessary and successful.
</li>
<li><b>Measurement is worthless without context.</b> Measurement is not
a panacea. Relative
benchmarking (% improved/faster) should generally not be used when
an absolute benchmark (# of milliseconds/seconds faster) would be
more relevant and provide more context. Metrics alone cannot help if
they are not understood.
</li>
<li><b>Simple and fast are complements, not mutually exclusive.</b> We
cannot optimize what we do not understand. Code that is simple is
usually also fast. Optimizing code does not necessarily make it more
complicated or harder to read.
</li>
<li><b>Experimentation over best practice.</b> Best-practice-driven
development allows lazy decision-making. Instead, we can use precise
measurement and abundant experimentation to determine what works in a
specific organization.
</li>
</ul>
<p>
You can contact Speedshop via <a href="mailto:[email protected]">email</a>.
</p>
<p>
Logo visualization by <a href="http://luis.net/">Luis Gonzalez.</a>
</p>
</div>
</div>
</div>
<div id="big-black-bar" class="visible-desktop">
<canvas height=1000px width=1000px id="sslogocanvas" style="position: relative"></canvas>
<svg style="position: absolute; top:0; left: 0; overflow: visible"
xmlns="http://www.w3.org/2000/svg"
preserveAspectRatio="xMidYMid slice">
<defs>
<style type="text/css">
svg mask rect {
fill: rgba(255, 255, 255, 1);
}
svg > rect {
fill: black;
-webkit-mask: url(#mask);
mask: url(#mask);
}
</style>
<mask id="mask" x="0" y="0" width="1920" height="1080" >
<rect x="0" y="0" width="9999" height="9999"/>
<path transform="scale(0.35)translate(100,450)" d="M432.82 936.54c8.66-6.23 26.27-20.04 37.37-32.5 32.73-37.1 32.5-76.64-200.85-394.57-77.72-106.03-106.97-168.72-106.97-231 17.2-155.47 144.9-146 218.96-146 65-.8 149.36 0 215.3 0l-20.04 14.2c-38.32 26.4-65 54.18-50.9 97.78C536 275.2 611 388.67 707.12 518.67c107.4 144.9 139.5 205.55 143.56 272.7 2.15 120.8-114.16 156.14-181.2 156.28H417.66z" />
<circle transform="scale(0.35)translate(100, 450)" r="171.02" cy="777.98" cx="185.56" />
<circle transform="scale(0.35)translate(100, 450)" cx="825.23" cy="302.02" r="171.02" />
</mask>
</defs>
<rect x="0" y="0" width="9999" height="9999"/>
</svg>
</div>
<script async="">
canvas = document.getElementById("sslogocanvas");
window.a = canvas;
window.b = document.getElementById("big-black-bar");;
window.c = canvas.getContext('2d');
c=window.a;c.height=c.width=w=b=255;t=r=0;G=c.getContext('2d');m=[];s=G.getImageData(0,0,w,w);p=s.data;
function e(){k=0;with(Math)for(j=0;j<w;j++)for(i=0;i<w;i++){y=-1+2*j/w;x=-1+2*i/w;d=sqrt(x*x+y*y);a=atan2(y,x);eval('u='+['cos(a)/d;v=sin(a)/d','cos(a+cos(3*d))/(pow(d,.2));v=sin(a+cos(3*d))/(pow(d,.2))','a*3/PI;v=2/(6*d + 3*x)','.5+.5*a/PI;v=(-.4/d)+.1*sin(8*a)','(.02*y+.03)*cos(a*3)/d;v=(.02*y+.03)*sin(a*3)/d','1/(d+0.5+0.5*sin(5*a));v=a*3/PI','.1*x/(.11+d*.5);v=.1*y/(.11+d*.5)','x/abs(y);v=1/abs(y)','.5*(a)/PI;v=sin(2*d)','(1*a/PI)+d;v=pow(d,0.1)','y*(3-sqrt(4-5*d*d))/(d*d+1);v=x*(3-sqrt(4-5*d*d))/(d*d+1)'][r%
11]);m[k++]=b*v&b;m[k++]=b*u&b}r++}onmouseup=e;e();setInterval("i=0;t++;c.style.width='100%';c.style.height=innerHeight+'px';for(g=0;g<w*w;g++){f=m[o=g*2]+t&b^m[o+1]+t&b;p[i++]=r&7?f:0;p[i++]=r&4?0:f;p[i++]=r&1?f:0;p[i++]=b}G.putImageData(s,0,0);",25)
</script>