-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
253 lines (230 loc) · 8.94 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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
<!DOCTYPE html>
<html>
<head>
<link rel="canonical" href="https://johari.me/" />
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="author" content="Nima Johari" />
<meta name="keywords"
content="programming languages, davis, software engineer, johari, nima, نیما, جوهری, جوهری زاده, دیویس, کالیفرنیا" />
<meta name="robots" content="index, follow">
<meta name="description"
content="Nima's internet corner. Nima Johari (Farsi: نیما جوهری) is a hobbyist, computer programmer and a PhD student currently in Davis, CA." />
<title>Nima Johari</title>
<link rel="stylesheet" href="grid.css">
<style type="text/css">
body {
font-family: Helvetica Neue, Helvetica, Arial;
}
div#container {
margin: 0 auto;
max-width: 33em;
}
@media only screen and (min-width: 500px) {
body {
font-size: 1.2em;
}
}
#videos {
width: 100%;
text-align: center;
}
</style>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-41835218-1']);
_gaq.push(['_trackPageview']);
(function () {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<body>
<h1>Nima Johari</h1>
<div class="css-masonry css-nimasonry">
<div class="item nima">
<img src="nima_johari.jpg" alt="Photo of Nima Johari" style="min-width: 100%" />
<div class="title">
<p>Hi! My name is Nima.</p>
<br />
<p>I'm a software engineer at Apple. I work on Xcode as a build system engineer, focusing on:
</p>
<ul>
<li>Build correctness</li>
<li>Build performance</li>
<li>Low-level incremental computation frameworks for local and cloud builds</li>
</ul>
<p>
I like to build simple tools that make humans do things better.
Prior to Apple I pursued implementing a cloud spreadsheet system with rich values inside cells (images,
sounds, videos).
</p>
<br />
<p>
I'm deeply enthused about developer tools, IDEs and programming languages.
I use Swift and Xcode in my day job.
I find myself lucky that I'm in the vicinity of people who hack on
<a href="https://developer.apple.com/xcode/">Xcode</a>,
<a href="https://github.com/apple/swift-llbuild">llbuild</a> and
<a href="https://github.com/apple/swift-llbuild2">llbuild2</a>. :)
</p>
<br />
<p>
Fun facts:
<ul>
<li>
My legal last name is Joharizadeh and I prefer to drop the "-zadeh" suffix.
</li>
</ul>
You should follow me on Twitter here: <a href="https://twitter.com/NimaJohari">@NimaJohari</a>
</p>
<br />
<p>You can find me on other places too:
<ul>
<li>
My <a href="https://www.youtube.com/@NimaJohari">YouTube channel</a>
</li>
<li>My <a href="https://www.linkedin.com/in/nimajohari">LinkedIn</a></li>
<li>My <a href="https://github.com/johari">GitHub</a> profile</li>
<li><a href="https://johari.me/fa/">نیما جوهری به فارسی</a></li>
</ul>
</p>
</div>
</div>
<div class="item nima">
<img src="pirate.png" alt="Recalc or Die" style="min-width: 100%" />
<div class="title">
<p><b>Build systems 🤝 Calc engines</b></p>
<br />
<p>
Back in grad school, I re-discovered the idea of “rich spreadsheets”—dating back to 1986.
Modern spreadsheets (Excel and Google Sheets) are <a href="https://support.google.com/docs/answer/3093333?hl=en">slowly</a> <a href="https://insider.microsoft365.com/en-us/blog/insert-pictures-in-cells-in-excel">adopting</a> some of these ideas..
but I think there is room for a lot more.
</p>
<br />
<p>
I believe a non-mainstream spreadsheet system can realize the vision of "rich spreadsheets" at a higher velocity:
there is less baggage from the past, and more room to rethink the core architecture of the calc engine. ("What can be, unburdened by what has been".)
</p>
<br />
<p>
From an engineering perspective, there are commonalities between rich spreadsheets and my role as a cloud build system engineer.
</p>
<br />
<p>
Implementing <a href="https://github.com/johari/minicell">a rich calc engine</a> has made me
appreciate how core underlying primitives of a build system intersect with ones of a calc engine.
If you are curious, this paper [3] elegantly dives into this topic and explores various aspects of it.
</p>
<p>
<ol>
<li>Object Oriented Spreadsheets: The Analytic Spreadsheet Package (by Kurt W. Piersol published in <a
href="https://dl.acm.org/doi/abs/10.1145/28697.28737">OOPSLA'86</a>)</li>
<li><a href="https://github.com/johari/minicell">https://github.com/johari/minicell</a></li>
<li>Build Systems à la Carte (<a
href="https://www.microsoft.com/en-us/research/uploads/prod/2018/03/build-systems.pdf">ICFP'18</a>)</li>
</ol>
</p>
</div>
</div>
<div class="item nima">
<iframe width="100%" style="min-height:400px" src="https://www.youtube.com/embed/NZo4cGzcSK0" frameborder="0"
allowfullscreen></iframe>
<div class="title">
<p><b>Rich values inside cells (11 minute video)</b></p>
<br />
<p>
Prior to my internship at Microsoft Research in 2019 I prototyped an experimental spreadsheet system
in Elm and Haskell. Here is the <a href="https://www.youtube.com/watch?v=NZo4cGzcSK0">video demo</a> of it.
</p>
<br />
<p>
<table border="1">
<tr>
<td>Timestamp</td>
<td>Description</td>
<td>Formula</td>
</tr>
<tr>
<td>0:50</td>
<td>Motivating example</td>
<td></td>
</tr>
<tr>
<td>2:45</td>
<td>Code-free interaction model to pluck dynamic graphs out of spreadsheets</td>
<td><code>=X</code></td>
</tr>
<tr>
<td>3:50</td>
<td>Calculating the shortest path</td>
<td><code>=SP</code></td>
</tr>
<tr>
<td>5:14</td>
<td>Minicell's graph primitives</td>
<td><code>Various formulas to work with graphs</code></td>
</tr>
<tr>
<td>6:05</td>
<td>Shapes</td>
<td><code>=SHAPE, =PAINT</code></td>
</tr>
<tr>
<td>7:43</td>
<td>Combining shapes</td>
<td><code>=HCONCAT, =VCONCAT</code></td>
</tr>
<tr>
<td>8:24</td>
<td>Integers that flow in time</td>
<td><code>=UNIXEPOCH</code></td>
</tr>
<tr>
<td>8:24</td>
<td>Arithmetic on integers that flow in time</td>
<td><code>=MOD</code></td>
</tr>
<tr>
<td>9:08</td>
<td>Making a 5-frame animation</td>
<td><code>=ROTATE</code></td>
</tr>
</table>
</p>
<br />
<p>
Implementing a polished "rich spreadsheet system" is still a very dear problem to my heart, but
I have not been working on rich spreadsheets since I joined Apple,
and my work as an intern in Excel team was focused on <a
href="https://www.youtube.com/watch?v=UXAD6rvfR8o">"Gridlets"</a>—a robust mechanism for
reusing formulas and formatting across multiple spreadsheet grids.
</p>
<br />
<p>
I secretly wish Apple rebranded “Numbers” to “Media Editor” by adding formulas that manipulate image, audio and video
clips stored inside cells.
</p>
</div>
</div>
</div>
<h2 id="music">Sound tools, sound synthesis and music</h2>
<div class="css-masonry css-nimasonry">
<div class="item">
<div class="title">
See <a href="./sound.html"><code>./sound.html</code></a>
</div>
</div>
</div>
<h2>Things that inspire me</h2>
<div class="css-masonry css-nimasonry">
<div class="item">
<div class="title">
See <a href="./inspirations.html"><code>./inspirations.html</code></a>
</div>
</div>
</div>
</body>
</html>