Christian S. Perone
blog.christianperone.com · Personal blog · on HN since 2015
Christian S. Perone writes technical posts on machine learning, PyTorch, LLVM, geometry, and data pipelines.
What HN saysHN commenters cite his article on Google's S2 geometry library, cells, and the Hilbert curve as a useful explainer when S2 documentation is scarce.
27HN people shared it
11linked it in comments
59stories submitted
1.4Kstory points
4 months agolast shared
2015people per year2026
Most-shared posts
- 1Google’s S2, geometry on the sphere, cells and Hilbert curve (2015)8 people · 5 points · first shared 2016 · discussion on HN
- 2Voynich Manuscript: word vectors and t-SNE visualization of some patterns4 people · 6 points · first shared 2016 · 1 comments on HN
- 3Large language model data pipelines and Common Crawl3 people · 142 points · first shared 2023 · 12 comments on HN
- 4Tutorial on using LLVM to JIT PyTorch graphs to native code (x86/arm/RISC-V)3 people · 11 points · first shared 2022 · discussion on HN
- 5Googles s2 geometry on the sphere cells and hilbert curve3 people · first shared 2017
- 6Convolutional neural networks and feature extraction with Python2 people · 82 points · first shared 2015 · 2 comments on HN
- 7Diffusion Elites: surprisingly good, simple and embarrassingly parallel2 people · 10 points · first shared 2025 · discussion on HN
- 8Using an Arduino MK1310 with the Helium Network (plus cryptochip usage)2 people · 5 points · first shared 2022 · 1 comments on HN
- 9PyTorch 1.0 Tracing JIT and LibTorch C++ API to Integrate PyTorch into Node.js2 people · 4 points · first shared 2018 · 1 comments on HN
- 10Listening to the neural network gradient norms during training2 people · 3 points · first shared 2019 · discussion on HN
- 11PyTorch – Internal Architecture Tour1 people · 193 points · first shared 2018 · 22 comments on HN
- 12A sane introduction to maximum likelihood estimation and maximum a posteriori1 people · 174 points · first shared 2019 · 18 comments on HN
- 13Google’s S2, geometry on the sphere, cells and Hilbert curve1 people · 166 points · first shared 2015 · 29 comments on HN
- 14Voynich Manuscript: word vectors and t-SNE visualization of some patterns1 people · 131 points · first shared 2016 · 29 comments on HN
- 15Real-time Drone object tracking using Python and OpenCV1 people · 110 points · first shared 2015 · 24 comments on HN
What HN people wrote when they linked it
alasdair_ · 2019-03-28
>You could probably do this with other systems, but the goal is to allow everyday people to be able to pack a short string in a tweet and have everybody else know exactly where they mean.
89c25855b9b
That's the S2 string for a section of Times Square, NY.
Usefully "89c25855b" is a well-defined, less precise location comprising a larger area. You can go up or down in levels of precision easily and everything can be stored as a single 64-bit integer with lots of extremely useful properties, (e.g. the use of the Hillbert Curve with all of it's benefits, like localization in address space and real space - see http://blog.christianperone.com/2015/08/googles-s2-geometry-on-the-sph…
If your system adds more benefits than this, I'd love to hear more about it!
gfrangakis · 2018-01-07
Library also available in Java[0] and to an extent in Golang[1], though the latter is incomplete.
S2 is fantastic for geofencing. Arbitrary regions can be covered by a set of S2 cells of varying level. A point (lat/lon) can be converted to a S2 cell of the smallest level (around a cm^2 of area on the sphere). Checking to see if one S2 cell is contained in another amounts to searching an integer range, since all children of a given S2 cell have IDs that fall within a fixed ranged. See also [2]
[0] https://github.com/google/s2-geometry-library-java
[1] https://github.com/golang/geo
[2] http://blog.christianperone.com/2015/08/googles-s2-geometry-on-the-sph…
perone · 2024-07-24
I wrote an article about it and S2 some time ago as well for those interested: https://blog.christianperone.com/2015/08/googles-s2-geometry-on-the-sp…
yencabulator · 2022-09-13
S2 has a good amount of documentation about it.
https://s2geometry.io/
https://blog.christianperone.com/2015/08/googles-s2-geometry-on-the-sp…
vogtb · 2018-08-30
I was playing around with s2 a year or two ago, and it was surprisingly difficult to find information on it, so FWIW here are some links I was able to find at the time if you're looking for some historical reading on s2:
Google Presentation on S2: https://docs.google.com/presentation/d/1Hl4KapfAENAOf4gv-pSngKwvS_jwNV…
Christian Perone's blog post on it: http://blog.christianperone.com/2015/08/googles-s2-geometry-on-the-sph…
Google Code Archive: https://code.google.com/archive/p/s2-geometry-library/
Java Implementation: https://github.com/rschreijer/s2-geometry-library-java
dweekly · 2017-06-13
Here is a writeup on Google's S2 library for considering addressing the surface of the Earth as 1D, using Hilbert Curves.
http://blog.christianperone.com/2015/08/googles-s2-geometry-on-the-sph…
And 2015 HN thread: https://news.ycombinator.com/item?id=10066616
haney · 2017-06-07
Are you familiar with the S2 library for mapping lat/lon into a 1d space? (http://blog.christianperone.com/2015/08/googles-s2-geometry-on-the-sph… any idea what the tradeoffs would be between this and S2?
cletus · 2017-01-30
I'm surprised there's no mention of a rather successful and efficient way of doing this in the real world: Google's S2 geometry library [1]. Basically the earth can be covered in almost aquare tiles down to about 1cm^2 with 64 bit integers.
[1] http://blog.christianperone.com/2015/08/googles-s2-geometry-on-the-sph…
Houshalter · 2016-08-10
Infact someone has run word2vec on the Voynich manuscript: http://blog.christianperone.com/2016/01/voynich-manuscript-word-vector… (web archive while it's down: http://web.archive.org/web/20160205003817/http://blog.christianperone.… Such methods could someday completely decode the thing, but for now they just show the relationships between words and different clusters of words, not their meaning.
Of course we have no idea how the Voynich manuscript is encrypted (which would make the assumptions of word2vec wrong), or if it even has any meaning at all. And it's an incredibly small dataset compared to modern text corpuses, so there is probably significant uncertainty and overfitting. And other problems like inconsistent spellings, many errors in transcriptions, etc. But in principle this is a good strategy.
>how would a person do if they were locked in a room with lots of books written in a language unknown to them?
If you spent all day reading them, for years, and you somehow didn't get bored and kept at it, eventually you would start to see the patterns. You would learn how "slithy toves" are related to "brillig", even if you have no idea how that would translate to English. Study it long enough, and you may even be able to produce text in that language, indistinguishable from the real text. You may be able to predict the next word in a sentence,…
nl · 2016-02-18
TensorFlow: https://www.tensorflow.org/
TensorFlow Serving: https://github.com/tensorflow/serving
ReCeption (actually they call in Inception v3. Not sure where I got the ReCeption name - though I'm sure I read it somewhere?): https://www.tensorflow.org/versions/r0.7/tutorials/image_recognition/i…
Using a SVN on neural network extracted features: http://blog.christianperone.com/2015/08/convolutional-neural-networks-…
If you want a quick and dirty version here's some Python to create a web service that calls a Caffe based Image recognizer: https://gist.github.com/nlothian/c3519adb81b3452c1938
espeed · 2016-12-17
Thanks for the info. I'm looking at this from the perspective of designing a backend datastore and query engine for a knowledge system. The idea is to encode a spatial data structure (similar to Google's S2 Geometry Library [0]) that enables content-based addressing of non-spatial data types for data fusion.
One idea is to make a lattice of unicode characters that builds up to combination of words a la Formal Concept Analysis [1] -- on one level, the characters compose into words that represent properties (key/value pairs), and then the KV pairs compose into higher-level objects. Each property and higher-level object is encoded with an integer derived from its constituent objects/properties, and each object is encoded in such a way that its constituent objects/properties can be determined algorithmically from the integer without having to traverse the structure [2] -- ANS encoding [3] embedded into a space with a VI metric (https://en.wikipedia.org/wiki/Variation_of_information) [4] might make this work. Have you played with this type of design?
[0] http://blog.christianperone.com/2015/08/googles-s2-geometry-on-the-sph…
[1] https://www.youtube.com/watch?v=Xuxm929tIRY
[2] http://www09.sigmod.org/sigmod/record/issues/0506/p47-article-tropashk…
[3] https://en.wikipedia.org/wiki/Asymmetric_Numeral_Systems
[4]…