Coder Social home page Coder Social logo

Comments (2)

jan-wassenberg avatar jan-wassenberg commented on May 28, 2024 1

Hi @Sanmayce, sorry to reply late.

Thanks for adding HighwayHash!

considering you wrote far more stronger hasher than the non-crypto ones?!

Yes, this is plausible. All 'reasonable' hashes can mix sufficiently to avoid collisions for non-adversarial input.
The extra mixing and larger state in HighwayHash is useful for fingerprints/MAC applications, especially for adversarial inputs.

Excuse my amateurism, but I couldn't see how to integrate your optimized CC functions, I use only C.

The large difference in performance between C and C++ is because the C version does not use SIMD instructions.
It is indeed a bit complicated to build the optimized version. It could be interesting to port HighwayHash to the Highway SIMD library, which is easier to build and supports CMake.

please share some thoughts on how you see collision benchmarking done right

Ah, that would be very interesting to see studied in more detail.

Bob Jenkins had a very thorough test program which filled memory with a hash table.
Several TiB are now readily available in the cloud, I would imagine if run today,
this could yield new results and possibly some surprises.

from highwayhash.

Sanmayce avatar Sanmayce commented on May 28, 2024

It took ~240hours (on 8 cores CPU) to complete Bob Jenkins' Froggy with Gumbotron_YMM, no collisions reported.
Here is the package, www.sanmayce.com/Froggy_Gumbotron_XXH128_8threads.zip

H:\Froggy_Gumbotron_XXH128_8threads>dir

09/06/2021  11:51 PM            33,369 froggy.cpp
09/07/2021  12:19 AM            84,992 Froggy_Gumbotron.exe
09/07/2021  12:19 AM            89,088 Froggy_Spooky.exe
09/07/2021  12:19 AM           109,568 Froggy_XXH128.exe
09/06/2021  11:50 PM            75,384 Gumbotron_YMM.h
09/05/2021  06:09 AM               203 makeEXE.bat
09/04/2021  02:17 AM             8,522 spooky.cpp
09/01/2021  08:18 PM            11,884 spooky.h
08/26/2021  08:44 AM             1,855 xxhash.c
08/26/2021  08:44 AM           184,809 xxhash.h

D:\Froggy_Gumbotron_XXH128_8threads>Froggy_Gumbotron.exe
count 2^^3, covered 2^^5 key pairs (thread 1)
count 2^^4, covered 2^^7 key pairs (thread 1)
count 2^^3, covered 2^^5 key pairs (thread 7)
count 2^^3, covered 2^^5 key pairs (thread 5)
count 2^^3, covered 2^^5 key pairs (thread 4)
count 2^^4, covered 2^^7 key pairs (thread 4)
count 2^^3, covered 2^^5 key pairs (thread 2)
count 2^^4, covered 2^^7 key pairs (thread 7)
count 2^^5, covered 2^^9 key pairs (thread 7)
count 2^^4, covered 2^^7 key pairs (thread 5)
count 2^^5, covered 2^^9 key pairs (thread 5)
count 2^^3, covered 2^^5 key pairs (thread 3)
count 2^^4, covered 2^^7 key pairs (thread 3)
count 2^^5, covered 2^^9 key pairs (thread 3)
count 2^^4, covered 2^^7 key pairs (thread 2)
count 2^^5, covered 2^^9 key pairs (thread 2)
count 2^^6, covered 2^^11 key pairs (thread 7)
count 2^^7, covered 2^^13 key pairs (thread 7)
count 2^^6, covered 2^^11 key pairs (thread 5)
count 2^^5, covered 2^^9 key pairs (thread 1)
count 2^^6, covered 2^^11 key pairs (thread 1)
count 2^^6, covered 2^^11 key pairs (thread 3)
count 2^^3, covered 2^^5 key pairs (thread 6)
count 2^^6, covered 2^^11 key pairs (thread 2)
count 2^^7, covered 2^^13 key pairs (thread 2)
count 2^^8, covered 2^^15 key pairs (thread 7)
count 2^^7, covered 2^^13 key pairs (thread 5)
count 2^^5, covered 2^^9 key pairs (thread 4)
count 2^^6, covered 2^^11 key pairs (thread 4)
count 2^^7, covered 2^^13 key pairs (thread 3)
count 2^^4, covered 2^^7 key pairs (thread 6)
count 2^^5, covered 2^^9 key pairs (thread 6)
count 2^^8, covered 2^^15 key pairs (thread 2)
count 2^^9, covered 2^^17 key pairs (thread 7)
count 2^^8, covered 2^^15 key pairs (thread 5)
count 2^^7, covered 2^^13 key pairs (thread 1)
count 2^^7, covered 2^^13 key pairs (thread 4)
count 2^^8, covered 2^^15 key pairs (thread 3)
count 2^^3, covered 2^^5 key pairs (thread 0)
count 2^^6, covered 2^^11 key pairs (thread 6)
count 2^^9, covered 2^^17 key pairs (thread 2)
count 2^^10, covered 2^^19 key pairs (thread 7)
count 2^^9, covered 2^^17 key pairs (thread 5)
count 2^^8, covered 2^^15 key pairs (thread 1)
count 2^^8, covered 2^^15 key pairs (thread 4)
count 2^^9, covered 2^^17 key pairs (thread 3)
count 2^^4, covered 2^^7 key pairs (thread 0)
count 2^^7, covered 2^^13 key pairs (thread 6)
count 2^^10, covered 2^^19 key pairs (thread 2)
count 2^^8, covered 2^^15 key pairs (thread 6)
count 2^^10, covered 2^^19 key pairs (thread 5)
count 2^^9, covered 2^^17 key pairs (thread 1)
count 2^^9, covered 2^^17 key pairs (thread 4)
count 2^^10, covered 2^^19 key pairs (thread 3)
count 2^^5, covered 2^^9 key pairs (thread 0)
count 2^^11, covered 2^^21 key pairs (thread 7)
count 2^^11, covered 2^^21 key pairs (thread 2)
count 2^^9, covered 2^^17 key pairs (thread 6)
count 2^^11, covered 2^^21 key pairs (thread 5)
count 2^^10, covered 2^^19 key pairs (thread 1)
count 2^^10, covered 2^^19 key pairs (thread 4)
count 2^^11, covered 2^^21 key pairs (thread 3)
count 2^^6, covered 2^^11 key pairs (thread 0)
count 2^^12, covered 2^^23 key pairs (thread 7)
count 2^^12, covered 2^^23 key pairs (thread 2)
count 2^^10, covered 2^^19 key pairs (thread 6)
count 2^^12, covered 2^^23 key pairs (thread 5)
count 2^^11, covered 2^^21 key pairs (thread 1)
count 2^^11, covered 2^^21 key pairs (thread 4)
count 2^^7, covered 2^^13 key pairs (thread 0)
count 2^^12, covered 2^^23 key pairs (thread 3)
count 2^^13, covered 2^^25 key pairs (thread 7)
count 2^^13, covered 2^^25 key pairs (thread 2)
count 2^^11, covered 2^^21 key pairs (thread 6)
count 2^^13, covered 2^^25 key pairs (thread 5)
count 2^^12, covered 2^^23 key pairs (thread 1)
count 2^^12, covered 2^^23 key pairs (thread 4)
count 2^^8, covered 2^^15 key pairs (thread 0)
count 2^^13, covered 2^^25 key pairs (thread 3)
count 2^^12, covered 2^^23 key pairs (thread 6)
count 2^^14, covered 2^^27 key pairs (thread 5)
count 2^^14, covered 2^^27 key pairs (thread 2)
count 2^^13, covered 2^^25 key pairs (thread 1)
count 2^^9, covered 2^^17 key pairs (thread 0)
count 2^^13, covered 2^^25 key pairs (thread 4)
count 2^^14, covered 2^^27 key pairs (thread 7)
count 2^^13, covered 2^^25 key pairs (thread 6)
count 2^^14, covered 2^^27 key pairs (thread 3)
count 2^^10, covered 2^^19 key pairs (thread 0)
count 2^^14, covered 2^^27 key pairs (thread 1)
count 2^^14, covered 2^^27 key pairs (thread 4)
count 2^^11, covered 2^^21 key pairs (thread 0)
count 2^^15, covered 2^^29 key pairs (thread 5)
count 2^^15, covered 2^^29 key pairs (thread 2)
count 2^^14, covered 2^^27 key pairs (thread 6)
count 2^^12, covered 2^^23 key pairs (thread 0)
count 2^^15, covered 2^^29 key pairs (thread 7)
count 2^^15, covered 2^^29 key pairs (thread 3)
count 2^^13, covered 2^^25 key pairs (thread 0)
count 2^^15, covered 2^^29 key pairs (thread 1)
count 2^^15, covered 2^^29 key pairs (thread 4)
count 2^^15, covered 2^^29 key pairs (thread 6)
count 2^^16, covered 2^^31 key pairs (thread 5)
count 2^^14, covered 2^^27 key pairs (thread 0)
count 2^^16, covered 2^^31 key pairs (thread 2)
count 2^^16, covered 2^^31 key pairs (thread 7)
count 2^^15, covered 2^^29 key pairs (thread 0)
count 2^^16, covered 2^^31 key pairs (thread 3)
count 2^^16, covered 2^^31 key pairs (thread 1)
count 2^^16, covered 2^^31 key pairs (thread 4)
count 2^^16, covered 2^^31 key pairs (thread 6)
count 2^^16, covered 2^^31 key pairs (thread 0)
count 2^^17, covered 2^^33 key pairs (thread 2)
count 2^^17, covered 2^^33 key pairs (thread 5)
count 2^^17, covered 2^^33 key pairs (thread 7)
count 2^^17, covered 2^^33 key pairs (thread 3)
count 2^^17, covered 2^^33 key pairs (thread 4)
count 2^^17, covered 2^^33 key pairs (thread 1)
count 2^^17, covered 2^^33 key pairs (thread 6)
count 2^^17, covered 2^^33 key pairs (thread 0)
count 2^^18, covered 2^^35 key pairs (thread 2)
count 2^^18, covered 2^^35 key pairs (thread 7)
count 2^^18, covered 2^^35 key pairs (thread 5)
count 2^^18, covered 2^^35 key pairs (thread 3)
count 2^^18, covered 2^^35 key pairs (thread 4)
count 2^^18, covered 2^^35 key pairs (thread 6)
count 2^^18, covered 2^^35 key pairs (thread 1)
count 2^^18, covered 2^^35 key pairs (thread 0)
count 2^^19, covered 2^^37 key pairs (thread 2)
count 2^^19, covered 2^^37 key pairs (thread 7)
count 2^^19, covered 2^^37 key pairs (thread 3)
count 2^^19, covered 2^^37 key pairs (thread 4)
count 2^^19, covered 2^^37 key pairs (thread 6)
count 2^^19, covered 2^^37 key pairs (thread 5)
count 2^^19, covered 2^^37 key pairs (thread 1)
count 2^^19, covered 2^^37 key pairs (thread 0)
count 2^^20, covered 2^^39 key pairs (thread 2)
count 2^^20, covered 2^^39 key pairs (thread 7)
count 2^^20, covered 2^^39 key pairs (thread 6)
count 2^^20, covered 2^^39 key pairs (thread 3)
count 2^^20, covered 2^^39 key pairs (thread 4)
count 2^^20, covered 2^^39 key pairs (thread 0)
count 2^^20, covered 2^^39 key pairs (thread 5)
count 2^^20, covered 2^^39 key pairs (thread 1)
count 2^^21, covered 2^^41 key pairs (thread 2)
count 2^^21, covered 2^^41 key pairs (thread 7)
count 2^^21, covered 2^^41 key pairs (thread 6)
count 2^^21, covered 2^^41 key pairs (thread 3)
count 2^^21, covered 2^^41 key pairs (thread 4)
count 2^^21, covered 2^^41 key pairs (thread 0)
count 2^^21, covered 2^^41 key pairs (thread 5)
count 2^^21, covered 2^^41 key pairs (thread 1)
count 2^^22, covered 2^^43 key pairs (thread 2)
count 2^^22, covered 2^^43 key pairs (thread 6)
count 2^^22, covered 2^^43 key pairs (thread 3)
count 2^^22, covered 2^^43 key pairs (thread 4)
count 2^^22, covered 2^^43 key pairs (thread 5)
count 2^^22, covered 2^^43 key pairs (thread 7)
count 2^^22, covered 2^^43 key pairs (thread 1)
count 2^^22, covered 2^^43 key pairs (thread 0)
count 2^^23, covered 2^^45 key pairs (thread 6)
count 2^^23, covered 2^^45 key pairs (thread 4)
count 2^^23, covered 2^^45 key pairs (thread 3)
count 2^^23, covered 2^^45 key pairs (thread 2)
count 2^^23, covered 2^^45 key pairs (thread 7)
count 2^^23, covered 2^^45 key pairs (thread 1)
count 2^^23, covered 2^^45 key pairs (thread 5)
count 2^^23, covered 2^^45 key pairs (thread 0)
count 2^^24, covered 2^^47 key pairs (thread 4)
count 2^^24, covered 2^^47 key pairs (thread 6)
count 2^^24, covered 2^^47 key pairs (thread 3)
count 2^^24, covered 2^^47 key pairs (thread 7)
count 2^^24, covered 2^^47 key pairs (thread 5)
count 2^^24, covered 2^^47 key pairs (thread 1)
count 2^^24, covered 2^^47 key pairs (thread 2)
count 2^^24, covered 2^^47 key pairs (thread 0)
count 2^^25, covered 2^^49 key pairs (thread 4)
count 2^^25, covered 2^^49 key pairs (thread 3)
count 2^^25, covered 2^^49 key pairs (thread 1)
count 2^^25, covered 2^^49 key pairs (thread 5)
count 2^^25, covered 2^^49 key pairs (thread 7)
count 2^^25, covered 2^^49 key pairs (thread 6)
count 2^^25, covered 2^^49 key pairs (thread 0)
count 2^^25, covered 2^^49 key pairs (thread 2)
count 2^^26, covered 2^^51 key pairs (thread 3)
count 2^^26, covered 2^^51 key pairs (thread 5)
count 2^^26, covered 2^^51 key pairs (thread 4)
count 2^^26, covered 2^^51 key pairs (thread 1)
count 2^^26, covered 2^^51 key pairs (thread 7)
count 2^^26, covered 2^^51 key pairs (thread 6)
count 2^^26, covered 2^^51 key pairs (thread 0)
count 2^^26, covered 2^^51 key pairs (thread 2)
count 2^^27, covered 2^^53 key pairs (thread 3)
count 2^^27, covered 2^^53 key pairs (thread 5)
count 2^^27, covered 2^^53 key pairs (thread 4)
count 2^^27, covered 2^^53 key pairs (thread 7)
count 2^^27, covered 2^^53 key pairs (thread 1)
count 2^^27, covered 2^^53 key pairs (thread 6)
count 2^^27, covered 2^^53 key pairs (thread 0)
count 2^^27, covered 2^^53 key pairs (thread 2)
count 2^^28, covered 2^^55 key pairs (thread 3)
count 2^^28, covered 2^^55 key pairs (thread 5)
count 2^^28, covered 2^^55 key pairs (thread 4)
count 2^^28, covered 2^^55 key pairs (thread 6)
count 2^^28, covered 2^^55 key pairs (thread 1)
count 2^^28, covered 2^^55 key pairs (thread 7)
count 2^^28, covered 2^^55 key pairs (thread 2)
count 2^^28, covered 2^^55 key pairs (thread 0)
count 2^^29, covered 2^^57 key pairs (thread 6)
count 2^^29, covered 2^^57 key pairs (thread 3)
count 2^^29, covered 2^^57 key pairs (thread 1)
count 2^^29, covered 2^^57 key pairs (thread 5)
count 2^^29, covered 2^^57 key pairs (thread 4)
count 2^^29, covered 2^^57 key pairs (thread 7)
count 2^^29, covered 2^^57 key pairs (thread 0)
count 2^^29, covered 2^^57 key pairs (thread 2)
count 2^^30, covered 2^^58 key pairs (thread 5)
count 2^^30, covered 2^^58 key pairs (thread 4)
count 2^^30, covered 2^^58 key pairs (thread 6)
count 2^^30, covered 2^^58 key pairs (thread 1)
count 2^^30, covered 2^^58 key pairs (thread 0)
count 2^^30, covered 2^^58 key pairs (thread 3)
count 2^^30, covered 2^^58 key pairs (thread 2)
count 2^^30, covered 2^^58 key pairs (thread 7)
count 2^^31, covered 2^^59 key pairs (thread 5)
count 2^^31, covered 2^^59 key pairs (thread 4)
count 2^^31, covered 2^^59 key pairs (thread 1)
count 2^^31, covered 2^^59 key pairs (thread 3)
count 2^^31, covered 2^^59 key pairs (thread 0)
count 2^^31, covered 2^^59 key pairs (thread 7)
count 2^^31, covered 2^^59 key pairs (thread 6)
count 2^^31, covered 2^^59 key pairs (thread 2)
count 2^^32, covered 2^^60 key pairs (thread 5)
count 2^^32, covered 2^^60 key pairs (thread 3)
count 2^^32, covered 2^^60 key pairs (thread 0)
count 2^^32, covered 2^^60 key pairs (thread 1)
count 2^^32, covered 2^^60 key pairs (thread 4)
count 2^^32, covered 2^^60 key pairs (thread 6)
count 2^^32, covered 2^^60 key pairs (thread 7)
count 2^^32, covered 2^^60 key pairs (thread 2)
count 2^^33, covered 2^^61 key pairs (thread 5)
count 2^^33, covered 2^^61 key pairs (thread 1)
count 2^^33, covered 2^^61 key pairs (thread 7)
count 2^^33, covered 2^^61 key pairs (thread 3)
count 2^^33, covered 2^^61 key pairs (thread 4)
count 2^^33, covered 2^^61 key pairs (thread 0)
count 2^^33, covered 2^^61 key pairs (thread 6)
count 2^^33, covered 2^^61 key pairs (thread 2)
count 2^^34, covered 2^^62 key pairs (thread 3)
count 2^^34, covered 2^^62 key pairs (thread 5)
count 2^^34, covered 2^^62 key pairs (thread 7)
count 2^^34, covered 2^^62 key pairs (thread 1)
count 2^^34, covered 2^^62 key pairs (thread 4)
count 2^^34, covered 2^^62 key pairs (thread 2)
count 2^^34, covered 2^^62 key pairs (thread 0)
count 2^^34, covered 2^^62 key pairs (thread 6)
count 2^^35, covered 2^^63 key pairs (thread 5)
count 2^^35, covered 2^^63 key pairs (thread 1)
count 2^^35, covered 2^^63 key pairs (thread 3)
count 2^^35, covered 2^^63 key pairs (thread 7)
count 2^^35, covered 2^^63 key pairs (thread 0)
count 2^^35, covered 2^^63 key pairs (thread 4)
count 2^^35, covered 2^^63 key pairs (thread 2)
count 2^^35, covered 2^^63 key pairs (thread 6)
count 2^^36, covered 2^^64 key pairs (thread 5)
count 2^^36, covered 2^^64 key pairs (thread 1)
count 2^^36, covered 2^^64 key pairs (thread 7)
count 2^^36, covered 2^^64 key pairs (thread 3)
count 2^^36, covered 2^^64 key pairs (thread 0)
count 2^^36, covered 2^^64 key pairs (thread 4)
count 2^^36, covered 2^^64 key pairs (thread 6)
count 2^^36, covered 2^^64 key pairs (thread 2)
count 2^^37, covered 2^^65 key pairs (thread 5)
count 2^^37, covered 2^^65 key pairs (thread 3)
count 2^^37, covered 2^^65 key pairs (thread 1)
count 2^^37, covered 2^^65 key pairs (thread 6)
count 2^^37, covered 2^^65 key pairs (thread 7)
count 2^^37, covered 2^^65 key pairs (thread 2)
count 2^^37, covered 2^^65 key pairs (thread 0)
count 2^^37, covered 2^^65 key pairs (thread 4)
count 2^^38, covered 2^^66 key pairs (thread 5)
count 2^^38, covered 2^^66 key pairs (thread 6)
count 2^^38, covered 2^^66 key pairs (thread 1)
count 2^^38, covered 2^^66 key pairs (thread 3)
count 2^^38, covered 2^^66 key pairs (thread 7)
count 2^^38, covered 2^^66 key pairs (thread 2)
count 2^^38, covered 2^^66 key pairs (thread 4)
count 2^^38, covered 2^^66 key pairs (thread 0)
count 2^^39, covered 2^^67 key pairs (thread 6)
count 2^^39, covered 2^^67 key pairs (thread 1)
count 2^^39, covered 2^^67 key pairs (thread 5)
count 2^^39, covered 2^^67 key pairs (thread 7)
count 2^^39, covered 2^^67 key pairs (thread 2)
count 2^^39, covered 2^^67 key pairs (thread 3)
count 2^^39, covered 2^^67 key pairs (thread 0)
count 2^^39, covered 2^^67 key pairs (thread 4)
count 2^^40, covered 2^^68 key pairs (thread 6)
count 2^^40, covered 2^^68 key pairs (thread 5)
count 2^^40, covered 2^^68 key pairs (thread 1)
count 2^^40, covered 2^^68 key pairs (thread 2)
count 2^^40, covered 2^^68 key pairs (thread 7)
count 2^^40, covered 2^^68 key pairs (thread 3)
count 2^^40, covered 2^^68 key pairs (thread 0)
count 2^^40, covered 2^^68 key pairs (thread 4)
count 2^^41, covered 2^^69 key pairs (thread 6)
count 2^^41, covered 2^^69 key pairs (thread 5)
count 2^^41, covered 2^^69 key pairs (thread 1)
count 2^^41, covered 2^^69 key pairs (thread 2)
count 2^^41, covered 2^^69 key pairs (thread 7)
count 2^^41, covered 2^^69 key pairs (thread 3)
count 2^^41, covered 2^^69 key pairs (thread 0)
count 2^^41, covered 2^^69 key pairs (thread 4)
count 2^^42, covered 2^^70 key pairs (thread 6)
count 2^^42, covered 2^^70 key pairs (thread 5)
count 2^^42, covered 2^^70 key pairs (thread 1)
count 2^^42, covered 2^^70 key pairs (thread 2)
count 2^^42, covered 2^^70 key pairs (thread 3)
count 2^^42, covered 2^^70 key pairs (thread 7)
count 2^^42, covered 2^^70 key pairs (thread 0)
count 2^^42, covered 2^^70 key pairs (thread 4)
count 2^^43, covered 2^^71 key pairs (thread 6)
count 2^^43, covered 2^^71 key pairs (thread 5)
count 2^^43, covered 2^^71 key pairs (thread 1)
count 2^^43, covered 2^^71 key pairs (thread 2)
count 2^^43, covered 2^^71 key pairs (thread 3)
count 2^^43, covered 2^^71 key pairs (thread 7)
count 2^^43, covered 2^^71 key pairs (thread 0)
count 2^^43, covered 2^^71 key pairs (thread 4)
count 2^^44, covered 2^^72 key pairs (thread 6)
count 2^^44, covered 2^^72 key pairs (thread 5)
count 2^^44, covered 2^^72 key pairs (thread 1)
count 2^^44, covered 2^^72 key pairs (thread 2)
count 2^^44, covered 2^^72 key pairs (thread 3)
count 2^^44, covered 2^^72 key pairs (thread 7)
count 2^^44, covered 2^^72 key pairs (thread 0)
count 2^^44, covered 2^^72 key pairs (thread 4)

D:\Froggy_Gumbotron_XXH128_8threads>

In my view keys 1..63 long are problematic, someone can do better, yet, for now Gumbotron_YMM serves well.
Have the idea to change the reading of the key, e.g. for 64+ long ones as 00,01,02,03,...,64,65:
Instead of reading 00..63 and then the remainder 64..65, the new one will read:
00..63
02..65
Could be faster, as well.

from highwayhash.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.