<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Eli Grubb · Thoughts</title><description>Thoughts from Eli Grubb.</description><link>https://eligrubb.com/</link><language>en-us</language><item><title>Don&apos;t wait for FHE, encryption-in-use is possible today*!</title><link>https://eligrubb.com/writings/thoughts/2025/encryption-in-use-today/</link><guid isPermaLink="true">https://eligrubb.com/writings/thoughts/2025/encryption-in-use-today/</guid><description>Don&apos;t wait for FHE, encryption-in-use is possible today*!</description><pubDate>Fri, 26 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;* This post is an extension of a recent
&lt;a href=&quot;https://x.com/grubbbyte/status/1972824596039786803&quot;&gt;social&lt;/a&gt;
&lt;a href=&quot;https://bsky.app/profile/eligrubb.com/post/3lzzchs7vbs2g&quot;&gt;media&lt;/a&gt;
&lt;a href=&quot;https://www.threads.com/@elijahlloydgrubb/post/DPNPJnLjKy8&quot;&gt;thread&lt;/a&gt;.*&lt;/p&gt;
&lt;p&gt;Fully Homomorphic Encryption (FHE) is really cool!
&lt;a href=&quot;https://www.youtube.com/@lauriewired&quot;&gt;LaurieWired&lt;/a&gt;’s recent thread on the topic
has great pointers,
&lt;a href=&quot;https://bsky.app/profile/lauriewired.bsky.social/post/3lzootjhrfc2l&quot;&gt;check&lt;/a&gt;-&lt;a href=&quot;https://www.threads.com/@lauriewired/post/DPCX9oUklk8&quot;&gt;it&lt;/a&gt;-&lt;a href=&quot;https://x.com/lauriewired/status/1971293688786755926&quot;&gt;out&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;However, FHE isn’t the only answer to “encryption-in-use”. Other solutions exist
that are efficient, employ well-established cryptography, and are deployable
today!&lt;/p&gt;
&lt;p&gt;There is just one small catch:&lt;/p&gt;
&lt;h2 id=&quot;why-not-fhe&quot;&gt;Why &lt;em&gt;not&lt;/em&gt; FHE?&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;mizu arms&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3024&quot; height=&quot;4032&quot; src=&quot;https://eligrubb.com/_astro/mizu_arms.NUs7kttu_2n05V4.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;FHE’s draw comes from its universality, it’s called &lt;em&gt;fully&lt;/em&gt; homomorphic
encryption for a reason. But performance concerns in practical use are real.&lt;/p&gt;
&lt;p&gt;Laurie references the recent speedups; unfortunately most of the breakthroughs
fail to address the complexity inherent to FHE, instead optimizing constant
factors.&lt;/p&gt;
&lt;p&gt;For example, Zama’s recent blog post&lt;sup&gt;&lt;span data-footnote-ref=&quot;&quot;&gt;1&lt;/span&gt;&lt;/sup&gt; cites impressive speed ups to 64-bit
encrypted addition and multiplication, clocking in at 8.7 milliseconds and 32
milliseconds per operation, respectively.&lt;/p&gt;&lt;aside id=&quot;sidecar-footnote-zama&quot; class=&quot;sidecar-box sidecar-box--right sidecar-footnote&quot;&gt;&lt;p class=&quot;sidecar-box__title&quot;&gt;Note 1&lt;/p&gt;&lt;div class=&quot;sidecar-box__body&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://www.zama.ai/post/bootstrapping-tfhe-ciphertexts-in-less-than-one-millisecond&quot;&gt;https://www.zama.ai/post/bootstrapping-tfhe-ciphertexts-in-less-than-one-millisecond&lt;/a&gt; &lt;/p&gt;
&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;&lt;img alt=&quot;zama 64-bit add and mul benchmarks&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2534&quot; height=&quot;1094&quot; src=&quot;https://eligrubb.com/_astro/zama-fhe-add-mul-bench-hq.ov76A58Q_ZVW4f9.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;That’s a real performance improvement and awesome to see! I recommend you
check out the full post for all the juicy details.&lt;/p&gt;
&lt;p&gt;But Zama’s experiments were on an AWS &lt;code&gt;hpc7a.96xlarge&lt;/code&gt; instance, with 192 cores
and 768 GiB of memory,&lt;sup&gt;&lt;span data-footnote-ref=&quot;&quot;&gt;2&lt;/span&gt;&lt;/sup&gt; so let’s compare it with unencrypted &lt;code&gt;add&lt;/code&gt; and &lt;code&gt;mul&lt;/code&gt;
on Apple’s 2020 M1 chip.&lt;/p&gt;&lt;aside id=&quot;sidecar-footnote-aws&quot; class=&quot;sidecar-box sidecar-box--right sidecar-footnote&quot;&gt;&lt;p class=&quot;sidecar-box__title&quot;&gt;Note 2&lt;/p&gt;&lt;div class=&quot;sidecar-box__body&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://aws.amazon.com/ec2/instance-types/hpc7a/&quot;&gt;https://aws.amazon.com/ec2/instance-types/hpc7a/&lt;/a&gt; &lt;/p&gt;
&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;An M1 addition is ~1 cycle, and multiplication is ~3 cycles.&lt;sup&gt;&lt;span data-footnote-ref=&quot;&quot;&gt;3&lt;/span&gt;&lt;/sup&gt; On
a 3.2Ghz chip, a.k.a. 3.2 billion cycles per second, that’s 0.3125 nanoseconds
or 0.0003125 microseconds or 0.0000003125 milliseconds per add. And 0.9375
nanoseconds or 0.0009375 nanoseconds or 0.0000009375 milliseconds per
mul. This doesn’t take into account the M1’s multiple cores or the CPU’s
internal parallelism.&lt;sup&gt;&lt;span data-footnote-ref=&quot;&quot;&gt;4&lt;/span&gt;&lt;/sup&gt;&lt;/p&gt;&lt;aside id=&quot;sidecar-footnote-firestorm&quot; class=&quot;sidecar-box sidecar-box--right sidecar-footnote&quot;&gt;&lt;p class=&quot;sidecar-box__title&quot;&gt;Note 3&lt;/p&gt;&lt;div class=&quot;sidecar-box__body&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://dougallj.github.io/applecpu/firestorm-int.html&quot;&gt;https://dougallj.github.io/applecpu/firestorm-int.html&lt;/a&gt; &lt;/p&gt;
&lt;/div&gt;&lt;/aside&gt;&lt;aside id=&quot;sidecar-footnote-cpu&quot; class=&quot;sidecar-box sidecar-box--right sidecar-footnote&quot;&gt;&lt;p class=&quot;sidecar-box__title&quot;&gt;Note 4&lt;/p&gt;&lt;div class=&quot;sidecar-box__body&quot;&gt;
&lt;p&gt;Modern CPU’s can actually progress on more than one instruction per
cycle. If you, like me until an embarrassing age, didn’t know that, check out
the &lt;a href=&quot;https://computerenhance.com&quot;&gt;performance-aware programming series&lt;/a&gt; for
more. &lt;/p&gt;
&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;That’s a 27,840,000-34,133,133X gap between FHE and unencrypted computation,
and the gap only grows more plain as the computation grows in
complexity.&lt;sup&gt;&lt;span data-footnote-ref=&quot;&quot;&gt;5&lt;/span&gt;&lt;/sup&gt;&lt;/p&gt;&lt;aside id=&quot;sidecar-footnote-silicon&quot; class=&quot;sidecar-box sidecar-box--right sidecar-footnote&quot;&gt;&lt;p class=&quot;sidecar-box__title&quot;&gt;Note 5&lt;/p&gt;&lt;div class=&quot;sidecar-box__body&quot;&gt;
&lt;p&gt;In particular, the decision to invest heavily in custom hardware is
a fun one to overanalyze. Although insanely cool, creating your own silicon is
not cheap. To me, the armchair cryptographer, it reads as a lack of confidence
that the theoretical complexity of FHE will meaningly improve in the near
future. So money is hedging its bets by investing R&amp;#x26;D elsewhere. &lt;/p&gt;
&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;However, many people much smarter than I are all in on FHE, and I’m still
bullish on it long term.&lt;/p&gt;
&lt;h2 id=&quot;if-not-fhe-then-what&quot;&gt;If not FHE, then what?&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;mizu glare&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3120&quot; height=&quot;2080&quot; src=&quot;https://eligrubb.com/_astro/mizu_glare.D4AJrwUo_aBnmC.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;So what can we do, in practice, today?&lt;/p&gt;
&lt;p&gt;The term fully homomorphic encryption begs the question, is there such a thing
as partially or somewhat homomorphic encryption? Yes!&lt;/p&gt;
&lt;p&gt;System design is all about compromise. By softening some of FHE’s guarantees
(universal applicability, specific security properties) other approaches
gain performance. While these schemes aren’t universal, they address a large
percentage of the everyday computation many businesses are doing. And many only
have a performance overhead of 5-30%!&lt;/p&gt;
&lt;h3 id=&quot;searchable-encryption&quot;&gt;Searchable Encryption&lt;/h3&gt;
&lt;p&gt;An underrated approach is Searchable Encryption (SE). With SE, you can search,
filter, and perform analytics on structured data. SE isn’t applicable to every
possible computation over encrypted data, but some of the most common (sum, avg,
count, min, max) have realistic solutions.&lt;sup&gt;&lt;span data-footnote-ref=&quot;&quot;&gt;6&lt;/span&gt;&lt;/sup&gt;&lt;/p&gt;&lt;aside id=&quot;sidecar-footnote-sesurvey&quot; class=&quot;sidecar-box sidecar-box--right sidecar-footnote&quot;&gt;&lt;p class=&quot;sidecar-box__title&quot;&gt;Note 6&lt;/p&gt;&lt;div class=&quot;sidecar-box__body&quot;&gt;
&lt;p&gt;I recommend reading &lt;a href=&quot;https://dl.acm.org/doi/10.1145/3617991&quot;&gt;this excellent recent
survey&lt;/a&gt; and following the citations and
follow-up work of whatever interests you. &lt;/p&gt;
&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;From startups like Blind Insight&lt;sup&gt;&lt;span data-footnote-ref=&quot;&quot;&gt;7&lt;/span&gt;&lt;/sup&gt; to big companies like
MongoDB’s Queryable Encryption,&lt;sup&gt;&lt;span data-footnote-ref=&quot;&quot;&gt;8&lt;/span&gt;&lt;/sup&gt; searchable encryption is about to
hit production-ready.&lt;/p&gt;&lt;aside id=&quot;sidecar-footnote-blindinsight&quot; class=&quot;sidecar-box sidecar-box--right sidecar-footnote&quot;&gt;&lt;p class=&quot;sidecar-box__title&quot;&gt;Note 7&lt;/p&gt;&lt;div class=&quot;sidecar-box__body&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://www.blindinsight.com/&quot;&gt;https://www.blindinsight.com/&lt;/a&gt; &lt;/p&gt;
&lt;/div&gt;&lt;/aside&gt;&lt;aside id=&quot;sidecar-footnote-mongodb&quot; class=&quot;sidecar-box sidecar-box--right sidecar-footnote&quot;&gt;&lt;p class=&quot;sidecar-box__title&quot;&gt;Note 8&lt;/p&gt;&lt;div class=&quot;sidecar-box__body&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://www.mongodb.com/docs/manual/core/queryable-encryption/&quot;&gt;https://www.mongodb.com/docs/manual/core/queryable-encryption/&lt;/a&gt; &lt;/p&gt;
&lt;/div&gt;&lt;/aside&gt;
&lt;h3 id=&quot;oblivious-ram&quot;&gt;Oblivious RAM&lt;/h3&gt;
&lt;p&gt;“Oblivious” computation comes from relaxing the strict security guarantees of
encryption.&lt;/p&gt;
&lt;p&gt;While encryption guarantees complete secrecy, oblivious schemes only guarantee
indistinguishability from “similar” computation patterns. Your data and
operations aren’t completely private, but you still get a haze of deniability in
return for performance gains.&lt;sup&gt;&lt;span data-footnote-ref=&quot;&quot;&gt;9&lt;/span&gt;&lt;/sup&gt; &lt;sup&gt;&lt;span data-footnote-ref=&quot;&quot;&gt;10&lt;/span&gt;&lt;/sup&gt; Oblivious RAM (ORAM) is an
oblivious scheme built for general computation.&lt;sup&gt;&lt;span data-footnote-ref=&quot;&quot;&gt;11&lt;/span&gt;&lt;/sup&gt;&lt;/p&gt;&lt;aside id=&quot;sidecar-footnote-ringoram&quot; class=&quot;sidecar-box sidecar-box--right sidecar-footnote&quot;&gt;&lt;p class=&quot;sidecar-box__title&quot;&gt;Note 9&lt;/p&gt;&lt;div class=&quot;sidecar-box__body&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://eprint.iacr.org/2014/997&quot;&gt;https://eprint.iacr.org/2014/997&lt;/a&gt; &lt;/p&gt;
&lt;/div&gt;&lt;/aside&gt;&lt;aside id=&quot;sidecar-footnote-pathoram&quot; class=&quot;sidecar-box sidecar-box--right sidecar-footnote&quot;&gt;&lt;p class=&quot;sidecar-box__title&quot;&gt;Note 10&lt;/p&gt;&lt;div class=&quot;sidecar-box__body&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://eprint.iacr.org/2013/280&quot;&gt;https://eprint.iacr.org/2013/280&lt;/a&gt; &lt;/p&gt;
&lt;/div&gt;&lt;/aside&gt;&lt;aside id=&quot;sidecar-footnote-oram&quot; class=&quot;sidecar-box sidecar-box--right sidecar-footnote&quot;&gt;&lt;p class=&quot;sidecar-box__title&quot;&gt;Note 11&lt;/p&gt;&lt;div class=&quot;sidecar-box__body&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://dl.acm.org/doi/pdf/10.1145/100216.100289&quot;&gt;https://dl.acm.org/doi/pdf/10.1145/100216.100289&lt;/a&gt; &lt;/p&gt;
&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;There’s even brand new research that combines SE and ORAM techniques to enable
semantic text search over encrypted data via a privacy-preserving Retrieval
Augmented Generation (RAG) system.&lt;sup&gt;&lt;span data-footnote-ref=&quot;&quot;&gt;12&lt;/span&gt;&lt;/sup&gt; RAGs are a hot topic today due to
their relevance in vector databases and LLMs. End-to-end encrypted vector database
soon? 👀&lt;/p&gt;&lt;aside id=&quot;sidecar-footnote-compass&quot; class=&quot;sidecar-box sidecar-box--right sidecar-footnote&quot;&gt;&lt;p class=&quot;sidecar-box__title&quot;&gt;Note 12&lt;/p&gt;&lt;div class=&quot;sidecar-box__body&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://eprint.iacr.org/2024/1255&quot;&gt;https://eprint.iacr.org/2024/1255&lt;/a&gt; &lt;/p&gt;
&lt;/div&gt;&lt;/aside&gt;
&lt;h3 id=&quot;somewhat-homormorphic-encryption&quot;&gt;Somewhat Homormorphic Encryption&lt;/h3&gt;
&lt;p&gt;It turns out, &lt;em&gt;Somewhat&lt;/em&gt; Homomorphic Encryption (SHE) is a real, formally defined,
thing! Instead of restricting the &lt;em&gt;type&lt;/em&gt; of encryption, SHE sets a maximum on
the &lt;em&gt;complexity&lt;/em&gt; of the possible computations over encrypted data.&lt;/p&gt;
&lt;p&gt;By setting a upper bound at initialization, cryptographic system designers can
make assumptions that allow for optimizations to the total system’s
performance complexity.&lt;/p&gt;
&lt;p&gt;SHE is still an emerging area of research, gaining popularity in recent years,
with regular exciting theoretical breakthroughs.&lt;sup&gt;&lt;span data-footnote-ref=&quot;&quot;&gt;13&lt;/span&gt;&lt;/sup&gt;&lt;/p&gt;&lt;aside id=&quot;sidecar-footnote-she&quot; class=&quot;sidecar-box sidecar-box--right sidecar-footnote&quot;&gt;&lt;p class=&quot;sidecar-box__title&quot;&gt;Note 13&lt;/p&gt;&lt;div class=&quot;sidecar-box__body&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://eprint.iacr.org/2024/1760&quot;&gt;https://eprint.iacr.org/2024/1760&lt;/a&gt; &lt;/p&gt;
&lt;/div&gt;&lt;/aside&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;&lt;img alt=&quot;mizu grug&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;3024&quot; height=&quot;4032&quot; src=&quot;https://eligrubb.com/_astro/mizu_grug.BWGo2j15_Z2vSSCM.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;I didn’t even scratch the surface on the nifty tricks and applications of
these schemes. And there are other, adjacent, techniques I didn’t have time
to mention.&lt;sup&gt;&lt;span data-footnote-ref=&quot;&quot;&gt;14&lt;/span&gt;&lt;/sup&gt;&lt;/p&gt;&lt;aside id=&quot;sidecar-footnote-other&quot; class=&quot;sidecar-box sidecar-box--right sidecar-footnote&quot;&gt;&lt;p class=&quot;sidecar-box__title&quot;&gt;Note 14&lt;/p&gt;&lt;div class=&quot;sidecar-box__body&quot;&gt;
&lt;p&gt;Multi-party computation, linearly homomorphic encryption,
homomorphic secret sharing and private information retrieval first come to
mind as techniques with dense histories, that have potential applications to
encryption-in-use schemes. &lt;/p&gt;
&lt;/div&gt;&lt;/aside&gt;
&lt;p&gt;&lt;strong&gt;Feedback&lt;/strong&gt;: If you’re interested in any research I’ve mentioned
here, if I forgot your favorite primitive/protocol, or if you’d like to
disuss anything related to applied cryptography and systems &lt;a href=&quot;mailto:folkcrypto@eligrubb.com&quot;&gt;send me an
email&lt;/a&gt;.&lt;/p&gt;
</content:encoded><category>Thoughts</category><category>programming</category><category>cryptography</category><category>fully homomorphic encryption</category><category>encryption-in-use</category><category>searchable encryption</category><category>somewhat homomorphic encryption</category><category>oram</category><author>Eli Grubb</author></item><item><title>Madrid Culture Nuances</title><link>https://eligrubb.com/writings/thoughts/2019/madrid-culture-things/</link><guid isPermaLink="true">https://eligrubb.com/writings/thoughts/2019/madrid-culture-things/</guid><description>Madrid Culture Nuances</description><pubDate>Thu, 05 Sep 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;Last Updated: 05-September-2019&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I am spending this fall in Madrid working at the &lt;a href=&quot;http://software.imdea.org/&quot;&gt;IMDEA Software
Institute&lt;/a&gt; with &lt;a href=&quot;https://www.dariofiore.it/&quot;&gt;Dario
Fiore&lt;/a&gt;. This is my first time in Europe and I feel
extremely lucky that it is for an extended period of time so I have a chance to
shallowly experience daily life here.&lt;/p&gt;
&lt;p&gt;This post is an on-going, incomplete, extremely biased look at the little and
unique things I’ve noticed about the culture here compared to what I am used
to.&lt;/p&gt;
&lt;p&gt;Obviously there is no scientific rigour behind any of this. These are just
things that stood out to me with my background of being raised in Utah and
having fairly recently moved to the Washington D.C. area and what things I have
happened to notice. What I’ve noticed may not actually true. Or maybe where I’m
from is the same way and I have just been ignorant to that fact. This is all
very subjective and is more a collection of anecdotes than a document meant to
inform.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The personal space bubble is much smaller here.&lt;/strong&gt; Whether sitting or
standing, whether on the metro or in line or at a park, the standard bubble of
personal space seems smaller here. Just enough smaller that you notice how
often people end up there. It’s taken some getting used to that strangers are
comfortable being that close even when they don’t necessarily have to be.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Madridians love to sit.&lt;/strong&gt; If there is an open seat on the metro, it is
immediately taken by the next passenger. Related to my previous point, it
doesn’t matter if there are people in the seats beside it, you take the open
seat. When someone gets up from a bus bench or a metro seat if there are people
standing by they immediately fill the new opening. In my experience on metros
in the US people are just as likely to stand as to sit directly next to a
stranger.  That is not a problem here.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;There is much more smoking in public spaces.&lt;/strong&gt; I have heard that the rates of
smoking are very high here and that pretty much everyone smokes. I have had no
experience to confirm or deny that. However, there is a definite increase in
the number of people smoking in public areas. I am not sure if the concept of
a designated smoking area is a thing here.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dinner really is eaten very late.&lt;/strong&gt; It’s definitely been an odd experience
for me to find that when it’s warm it doesn’t matter if it’s 11pm on a Tuesday
night, as you walk around the streets of Madrid you will find many people
eating dinner and drinking wine at outdoor seating from restaurants and bars.
You generally don’t have to walk more than 10-15 minutes to find a restaurant
that is at least 80% full at that time.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;There is no rush or promptness in day to day life.&lt;/strong&gt; Everything moves
somewhat slowly. Most meetings are held “around” a time instead of at a
specific time. There is a common attitude of things will happen when they
happen. Unless the next metro train is about to leave. Then you must full on
sprint to take it because suddenly waiting 5 minutes for the next one would be
too much.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;There are very few fat people here.&lt;/strong&gt; As an overweight person I have noticed
that in fact, yes, obesity is a very American problem. I don’t see many other
fat people and I certainly do not see any my age. I believe I have gotten more
than a few stares for being a member of such a small group.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;They refer to their metro lines by number.&lt;/strong&gt; This may not be weird for other
Americans who have lived in other cities, but both the public light rails in
Salt Lake City and Washington D.C. are colloquially referred to by the line’s
color. However, due to the size of the city and the resulting metro system, it
becomes hard to refer to the “blue line” when there are several shades of blue.
Instead you would ask whether someone had taken the 10 or the 5 to get there.&lt;/p&gt;</content:encoded><category>Thoughts</category><category>Personal</category><category>archive</category><category>spain</category><author>Eli Grubb</author></item><item><title>Some Thoughts... On Designing My New Site</title><link>https://eligrubb.com/writings/thoughts/2017/some-thoughts-on-new-site/</link><guid isPermaLink="true">https://eligrubb.com/writings/thoughts/2017/some-thoughts-on-new-site/</guid><description>Some Thoughts... On Designing My New Site</description><pubDate>Thu, 30 Mar 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;It has been a while. How are you? I’m tired. It’s almost 2am here.&lt;/p&gt;
&lt;p&gt;I’m hoping to post more here now, both about Computer Science based topics and about other things that peak my interest.&lt;/p&gt;
&lt;p&gt;This is the first of a couple “Some Thoughts…” posts that are going to come out over the next few days. I’ve been thinking about a lot lately and trying to put more of it down.&lt;/p&gt;
&lt;p&gt;I spent most of the night tonight redesigning/rebuilding my &lt;a href=&quot;http://www.elijahgrubb.com&quot;&gt;personal homepage&lt;/a&gt;. I wanted to build a page that would best help me in my path forward. I based the design off of &lt;a href=&quot;http://www.cs.cmu.edu/~pavlo/&quot;&gt;Andy Pavlo’s site&lt;/a&gt;, &lt;a href=&quot;http://ezyang.com/&quot;&gt;Edward Yang’s site&lt;/a&gt;, my old homepage and just the general design and organization I’ve seen PhD students use.&lt;/p&gt;
&lt;p&gt;One of the points in Matt Might’s &lt;em&gt;amazing&lt;/em&gt; &lt;a href=&quot;http://matt.might.net/articles/what-cs-majors-should-know/&quot;&gt;undergrad CS major advice column&lt;/a&gt; that’s always hit hardest with me is his emphasis of a portfolio over a resume. While building out my new homepage I’m trying to focus on that idea. My goal is a nice-looking, simple page that allows people to easily get to know me and my experience. However, since my long term goals more and more involve academia, I’m also trying to emphasize my research experience and give it a look that is familiar for those who have experience with academic personal sites.&lt;/p&gt;
&lt;p&gt;The tweaking will continue for the foreseeable future. I’ve also come across how barren my side projects section is. In the near future I plan to build out a user level threads library and I’ll add it to the list once it’s semi-functional. Over the summer I’m also planning on building a rudimentary DBMS as I study the designs of database kernels, so that will be added as well.&lt;/p&gt;
&lt;p&gt;Anyways, I believe it’s a huge improvement over its old form. Hopefully this more accurately represents who I am.&lt;/p&gt;</content:encoded><category>Thoughts</category><category>archive</category><category>Programming</category><category>Software</category><category>meta</category><author>Eli Grubb</author></item><item><title>On Rejection</title><link>https://eligrubb.com/writings/thoughts/2017/on-rejection/</link><guid isPermaLink="true">https://eligrubb.com/writings/thoughts/2017/on-rejection/</guid><description>On Rejection</description><pubDate>Wed, 29 Mar 2017 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I wrote a &lt;a href=&quot;https://eligrubb.com/writings/thoughts/2015/microsoft-interview/&quot;&gt;post&lt;/a&gt; a while back about my
experience interviewing with Microsoft for an internship in the Fall of 2015. I
never got around to updating my blog, but I did not get an offer.&lt;/p&gt;
&lt;p&gt;Instead, I spent last summer interning at Goldman Sachs. Excuse me, I wasn’t an
“intern”, I was a “Technology Summer Analyst”. Let me tell you, I still hate
putting that title on my resume.&lt;/p&gt;
&lt;p&gt;Goldman Sachs was an okay experience. I met some really cool people there,
especially my &lt;a href=&quot;https://www.instagram.com/p/BI9RUu8DGKh/&quot;&gt;fellow&lt;/a&gt;
&lt;a href=&quot;https://www.instagram.com/p/BIeQUBLDJhv/&quot;&gt;interns&lt;/a&gt;. However, the culture was a
major turn off. While the internship experience was great, the impression I got
from my time there was that full time employees were often overworked and in
the long term, the growth and learning of employees was not a priority. It
didn’t help that the full time offer I received at the end of the summer was
nothing to write home about.&lt;/p&gt;
&lt;p&gt;This last fall I interviewed around again, planning for another internship for
this coming summer. Another year older and wiser too, I had slightly more
success in my efforts.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I received an offer from &lt;a href=&quot;https://www.instructure.com/&quot;&gt;Instructure&lt;/a&gt; who
had declined me last year.&lt;/li&gt;
&lt;li&gt;I received an offer from &lt;a href=&quot;https://www.qualtrics.com/&quot;&gt;Qualtrics&lt;/a&gt; who I had
turned down last year.&lt;/li&gt;
&lt;li&gt;I got to a final round interview with Facebook but they ultimately decided
not give me an offer.&lt;/li&gt;
&lt;li&gt;My resume was once again swallowed up by Google’s &lt;a href=&quot;https://www.nytimes.com/2017/03/25/opinion/sunday/thanks-for-submitting-your-resume-to-this-black-hole.html&quot;&gt;black
hole&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And, once again, I got to a final round interview with Microsoft. I flew out to
Seattle this past fall and really enjoyed my stay. I got to visit my cousin
(he’s since moved to the bay area) and one of the days it was raining so I went
and enjoyed the water.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;Water Pic 1&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4048&quot; height=&quot;3036&quot; src=&quot;https://eligrubb.com/_astro/seattle-lake-1.CL5YiWuf_1wn4TA.webp&quot; srcset=&quot;&quot;&gt;
&lt;img alt=&quot;Water Pic 2&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;4048&quot; height=&quot;3036&quot; src=&quot;https://eligrubb.com/_astro/seattle-lake-2.B1rETJkh_ZtVskr.webp&quot; srcset=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;The interview portion of the trip went well too, I thought. I had three
interviews, all with very great people. They were part of the Office 365 team
working on the web version of Microsoft’s Office products. While I won’t go
into detail like my last post, these are the basics of my interview questions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Given two strings of character trees, one preorder and one in order, recreate
the tree.&lt;/li&gt;
&lt;li&gt;Given an array of size N, containing the integers from 0 to N, find all that
are missing. For both the case where each number exists once and where numbers
can be repeated.&lt;/li&gt;
&lt;li&gt;Given a 2D array filled with Xs representing walls, and an S representing the
start and an E representing the end, find the shortest path from S to E.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I have never felt so confident coming out of an interview as I did that
afternoon. I had nailed every question and felt like I had a reasonable
connection with all my interviewers for the time spent together.&lt;/p&gt;
&lt;p&gt;I waited eagerly to see if I would get an offer from Microsoft. My buddy
&lt;a href=&quot;http://tannerbarlow.com/&quot;&gt;Tanner&lt;/a&gt; received his offer from Microsoft the day of
the interview, but I went back to my hotel room empty handed.&lt;/p&gt;
&lt;p&gt;I waited until the end of the next week with no response. I sent a follow-up
email to my recruiter, who asked for my patience.&lt;/p&gt;
&lt;p&gt;Another week, another email.&lt;/p&gt;
&lt;p&gt;And again.&lt;/p&gt;
&lt;p&gt;Then, exactly one month to the day, I finally received an email confirming that
Microsoft wouldn’t be moving forward with an offer at this time. It hurt. While
last year I could name 20 different mistakes and moments of frustration, this
time had felt different. It hurt all the more because I have no idea what I
would do differently even if I could hit the redo button.&lt;/p&gt;
&lt;p&gt;The timing didn’t help either. I had to extend my offer from Qualtrics and was
in a weird place interviewing with Facebook because I was strung along for a
full month after my interview, despite being told I would hear back in less
than two weeks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rejection is a bitch&lt;/strong&gt;. When you get your hopes up and they’re cut from under
you, that fall hurts. There is no getting around it.&lt;/p&gt;
&lt;p&gt;I ended up accepting Qualtrics’ offer, so I’ll be spending my summer in Provo.
I’m excited about experiencing a more startup-esque, free flowing culture than
I’m used to. &lt;a href=&quot;https://en.wikipedia.org/wiki/Holy_War_(Utah_vs._BYU)&quot;&gt;I’m less excited about the
city&lt;/a&gt;. I’m grateful for
the opportunity and can’t wait to see what adventures await me.&lt;/p&gt;
&lt;p&gt;It still stings. But there’s nowhere to go but up. And one rejection doesn’t
mean the end of the world. And, unfortunately, there’s a whole lot of rejection
in my future, especially considering my career choice. An entire world of
possibilities is still ahead of me. Can’t wait to see what’s next.&lt;/p&gt;</content:encoded><category>Thoughts</category><category>archive</category><category>Personal</category><category>Programming</category><author>Eli Grubb</author></item><item><title>Interviewing with Microsoft</title><link>https://eligrubb.com/writings/thoughts/2015/microsoft-interview/</link><guid isPermaLink="true">https://eligrubb.com/writings/thoughts/2015/microsoft-interview/</guid><description>Interviewing with Microsoft</description><pubDate>Wed, 16 Sep 2015 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Yesterday I had the amazing opportunity to interview with one of the most prolific software companies in the world: Microsoft.&lt;/p&gt;
&lt;p&gt;A few weeks back a couple of Microsoft Reps visited Campus and I gave them my resume. Last week I received a call from a Microsoft rep to set up an on campus interview. This post is just to detail what it was like and some of the questions I was asked to help others prep for similar situations.&lt;/p&gt;
&lt;p&gt;Scattered through the interview were the typical job interview questions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“Why do you want to work for Microsoft?”&lt;/li&gt;
&lt;li&gt;“Tell me about a time you had trouble in a group?”&lt;/li&gt;
&lt;li&gt;“Tell a me a bit about yourself.”&lt;/li&gt;
&lt;li&gt;ETC.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the 30ish minute interview there were also 2 problem solving questions.&lt;/p&gt;
&lt;h4 id=&quot;problem-1-ftoa&quot;&gt;Problem #1: ftoa&lt;/h4&gt;
&lt;p&gt;The first was to build a ‘ftoa’ function. That is a method that takes in a string like “1234” or “25” and returns the integer form of it: 1234 or 25.&lt;/p&gt;
&lt;h6 id=&quot;answer&quot;&gt;Answer:&lt;/h6&gt;
&lt;p&gt;The solution is pretty simple once you think about it:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;public static int myStringToInteger(String str) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	int answer = 0, factor = 1;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	for (int i = str.length()-1; i &gt;= 0; i--) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;		answer += (str.charAt(i) - &apos;0&apos;) * factor;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;		factor *= 10;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;	return answer;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It’s just based on the ASCII values of char’s that are integers being the same distance from ‘0’ as that integer really is from 0.&lt;/p&gt;
&lt;p&gt;Now, this method does contain an error. Ints are inherently 32-bit and you have a risk of overflow. Since these are signed integers that will occur once answer &gt; 2^31 - 1. For your own little brain teaser, see how you would handle dictating this as a Long (which is basically a 64-bit integer). The twist is you can only use ints.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HINT: Instead of answer, use two values like int answerHi and int answerLo to detail the more significant 32-bits and less significant 32-bits respectively.&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id=&quot;problem-2-lightbulb-dropping&quot;&gt;Problem #2: Lightbulb Dropping&lt;/h4&gt;
&lt;p&gt;The other problem solving question was a logic puzzle.&lt;/p&gt;
&lt;p&gt;Let’s assume your research department built a lightbulb that is supposed to be ‘indestructible’. Obviously, you are skeptical of this claim and decide to test it for yourself.&lt;/p&gt;
&lt;p&gt;You have access to a 100 story building and exactly 2 of these lightbulbs. (They are really expensive)&lt;/p&gt;
&lt;p&gt;Using just these supplies how can you test what floor the lightbulb will break at when dropped?&lt;/p&gt;
&lt;p&gt;And, how can you optimize this algorithm to minimize the number of drops in the worst case scenario?&lt;/p&gt;
&lt;p&gt;For the record, you can develop and optimize an algorithm down to where the worst case scenario is 19 drops.&lt;/p&gt;
&lt;p&gt;I’ll give you a minute to work it out.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HINT: What happens if you drop a lightbulb and it doesn’t break?&lt;/strong&gt;&lt;/p&gt;
&lt;h6 id=&quot;answer-1&quot;&gt;Answer:&lt;/h6&gt;
&lt;p&gt;Now, the simplest algorithm is to realize that if you drop a lightbulb and it doesn’t break, you can drop it again! So if you start at floor one and successively move up dropping it at each floor until it breaks you will know exactly what floor it can no longer survive the landing force. However, worst case scenario, you are going to be dropping this lightbulb 100 times! Let’s make use of &lt;em&gt;both&lt;/em&gt; of our lightbulbs and optimize the number of drops.&lt;/p&gt;
&lt;p&gt;Optimizing it is simple. Let’s say you deside to drop the first lightbulb every 5 levels. When it breaks you simply need to do the original algorithm from the last known safe level. I.e. if you drop your lightbulb and it’s safe at levels 5, 10, 15, 20, and 25 but breaks on 30 all you need to do is take your second lightbulb and drop it at levels 26, 27, 28 and 29 to see which level is the breaking point! If it doesn’t break at any of those levels then you know that level 30 is the breaking point.&lt;/p&gt;
&lt;p&gt;Of course this would result in a worst case scenario of 24 drops. To get rid of those last few drops it turns out dropping from every 10th floor results in the best worst case scenario.&lt;/p&gt;
&lt;h4 id=&quot;conclusion&quot;&gt;Conclusion:&lt;/h4&gt;
&lt;p&gt;All in all, it was a very enlightening experience. I would like to thank Microsoft for the opportunity to interview with them and everyone cross your fingers that I hear back from a recruiter in 3 weeks time.&lt;/p&gt;
&lt;p&gt;Wish me luck!&lt;/p&gt;</content:encoded><category>Thoughts</category><category>archive</category><category>Programming</category><author>Eli Grubb</author></item><item><title>Hello World</title><link>https://eligrubb.com/writings/thoughts/2015/hello-world/</link><guid isPermaLink="true">https://eligrubb.com/writings/thoughts/2015/hello-world/</guid><description>Hello World</description><pubDate>Mon, 07 Sep 2015 00:00:00 GMT</pubDate><content:encoded>&lt;h3 id=&quot;welcome-to-my-world&quot;&gt;Welcome to my world&lt;/h3&gt;
&lt;p&gt;On this blog I will be discussing things that either interest me or bug me. Mostly this will consist of software and general Computer Science issues, but there may be other things that crop up. I’m glad you could join me.&lt;/p&gt;</content:encoded><category>Thoughts</category><category>Personal</category><category>archive</category><author>Eli Grubb</author></item><item><title>The Power of an Artist</title><link>https://eligrubb.com/writings/thoughts/2013/the-power-of-an-artist/</link><guid isPermaLink="true">https://eligrubb.com/writings/thoughts/2013/the-power-of-an-artist/</guid><description>The Power of an Artist</description><pubDate>Thu, 01 Aug 2013 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;October 9, 2018: This post is an old draft of mine on Medium, written sometime in mid-2013. It has now been moved here, for the record and your groans.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I have recently become interested in what an artist is. I maybe even slightly thought I could be one.&lt;/p&gt;
&lt;p&gt;But, how?&lt;/p&gt;
&lt;p&gt;So, I looked up the definition of artist: &lt;em&gt;“a person who produces works in any of the arts that are primarily subject to aesthetic criteria” or “a person whose work exhibits exceptional skill”&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The thing is, that doesn’t satisfy me.Because, while I know that we all can be artists, and I know that we all could do work that &lt;em&gt;“exhibits exceptional skill”&lt;/em&gt;, true artists are not &lt;strong&gt;just&lt;/strong&gt; about showing off what they’ve done. They’re about much, much more.&lt;/p&gt;
&lt;p&gt;We are all contributing in one way. We all have to power to effect other’s lives, and even cause everlasting changes. But, once again, how? How can we do something that alters the very destiny of those around us? Because it’s only when we create something that makes a difference, that we can truly call ourselves an artist.&lt;/p&gt;
&lt;p&gt;One of my favorite artists once said:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;See life’s a beautiful struggle, I record it&lt;/p&gt;
&lt;p&gt;Hope it helps you maneuvering through yours&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Whatever our medium is, this is all we can do before we become an artist.&lt;/p&gt;
&lt;p&gt;Whether you’re a rapper, a singer, a musician,&lt;/p&gt;
&lt;p&gt;Whether you’re a painter, a sculptor, a sketcher,&lt;/p&gt;
&lt;p&gt;Whether you’re an author, a journalist, a writer,&lt;/p&gt;
&lt;p&gt;Whether you’re a politician, a speaker, a leader,&lt;/p&gt;
&lt;p&gt;Whether you’re a programmer, a CEO, a visionary,&lt;/p&gt;
&lt;p&gt;Whether you’re a architect, a fashion designer, or a wedding planner,&lt;/p&gt;
&lt;p&gt;&lt;em&gt;No matter who you are, or what you do:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;You can be an artist.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As soon as your work becomes not about making the money, or making a name for yourself, but about the lives of the people who experience your work everyday, that’s how you know. That’s when you become an artist, and that is when you feel, and can exercise the power of one. They are powerful, I promise. The artists are the ones who will shape and effect the future of this planet. They’re the ones who you should be friends with. Or better yet, become an artist yourself.&lt;/p&gt;</content:encoded><category>Thoughts</category><category>Personal</category><category>archive</category><author>Eli Grubb</author></item><item><title>If Only You Would Just Ask</title><link>https://eligrubb.com/writings/thoughts/2013/if-only-you-would-just-ask/</link><guid isPermaLink="true">https://eligrubb.com/writings/thoughts/2013/if-only-you-would-just-ask/</guid><description>If Only You Would Just Ask</description><pubDate>Mon, 29 Jul 2013 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;em&gt;October 9, 2018: This post originally appeared on Medium. It has now been moved here.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I adore my little 3-year old cousin Brooklynn. She has me wrapped around her little finger. She’s an adorable girl, and I’d do anything for her, but today I learned an important lesson from her.&lt;/p&gt;
&lt;p&gt;We were racing around my driveway, her on her cute little pink princess bike. Her mother, my aunt, calls to her, it’s time for her to come inside to eat dinner.&lt;/p&gt;
&lt;p&gt;As Brooklynn hops up and runs off towards her mother, I gently remind her that she needs to put her bike away.&lt;/p&gt;
&lt;p&gt;“Can you please put my bike away Eli?” she sweetly asks me.&lt;/p&gt;
&lt;p&gt;Of course I can. How can I say no to adorable little Brooklynn?&lt;/p&gt;
&lt;p&gt;And yet, as I walked away, carrying the pink princess bike, I consider what I had just done. Was I creating a spoiled personality, rotten and expected others to serve her? Was I making life too easy for her, leading her to expect everything to be done for her in life?&lt;/p&gt;
&lt;p&gt;Then something occurred to me. There was a key difference to our interaction then there was to those of one who is spoiled.&lt;/p&gt;
&lt;p&gt;She had &lt;strong&gt;asked&lt;/strong&gt; me to put the bike away.&lt;/p&gt;
&lt;br&gt;
&lt;hr&gt;
&lt;br&gt;
&lt;p&gt;All too often you worry about seeming out of hand. You worry about upsetting other people around you. It bothers you to think that your request, your needs could be a bother to someone else.&lt;/p&gt;
&lt;p&gt;But if you would just ask, whole worlds of possibility can open up to you.&lt;/p&gt;
&lt;p&gt;You should never be afraid to ask when you are in need of something.&lt;/p&gt;
&lt;p&gt;What’s the worst they can say? “No”?&lt;/p&gt;
&lt;p&gt;If you aren’t willing to ask others for help when you need it, you are going to be left carrying everything on your own shoulders. Why would you do everything by yourself, be forced to find your own out of the way solution to your problems, when a simple question, a plea for help can have it possibly solved so much quicker?&lt;/p&gt;
&lt;br&gt;
&lt;hr&gt;
&lt;br&gt;
&lt;p&gt;A 2008 study by US National Library of Medicine found that we as people are far too pessimistic when it comes to the success of asking:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“People underestimated by as much as 50% the likelihood that others would agree to a direct request for help”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Why are we so afraid, so determined that everyone is out to refuse us? As people, we cannot and should not get hung up on the idea that others don’t want to help us. We should want to help others, and at least hope that others want to help us.&lt;/p&gt;
&lt;br&gt;
&lt;hr&gt;
&lt;br&gt;
&lt;p&gt;The difference between being spoiled and being someone who is willing to ask for help, is that simple question. By asking that question, Brooklynn was showing that she wasn’t spoiled brat who expects everything to be done for her, but a polite girl who is willing to ask for help when she feels she needs it.&lt;/p&gt;
&lt;p&gt;At least I like to think so.&lt;/p&gt;</content:encoded><category>Thoughts</category><category>Personal</category><category>archive</category><author>Eli Grubb</author></item></channel></rss>