It looks like this is a web page, not a feed. I looked for a feed associated with this page, but couldn't find one. Please enter the address of your feed to validate.

Source: https://www.hivenet.com/post/technology-peer-to-peer-file-systems-how-does-it-work

  1. <!DOCTYPE html><!-- Last Published: Fri Jul 05 2024 15:41:42 GMT+0000 (Coordinated Universal Time) --><html data-wf-domain="www.hivenet.com" data-wf-page="65fdacaa10564d73e1fa2b97" data-wf-site="628611cd396b6924a80afe09" lang="en"><head><meta charset="utf-8"/><title>Embracing P2P: All about peer-to-peer technology and how it harnesses decentralized storage and scalability</title><link rel="alternate" hrefLang="x-default" href="https://www.hivenet.com/post/technology-peer-to-peer-file-systems-how-does-it-work"/><link rel="alternate" hrefLang="en" href="https://www.hivenet.com/post/technology-peer-to-peer-file-systems-how-does-it-work"/><link rel="alternate" hrefLang="pt" href="https://www.hivenet.com/pt/post/technology-peer-to-peer-file-systems-how-does-it-work"/><link rel="alternate" hrefLang="es" href="https://www.hivenet.com/es/post/technology-peer-to-peer-file-systems-how-does-it-work"/><link rel="alternate" hrefLang="fr" href="https://www.hivenet.com/fr/post/technology-peer-to-peer-file-systems-how-does-it-work"/><meta content="Dive into the world of peer-to-peer technology and explore how Hive&#x27;s innovative storage system leverages the power of decentralized networks, encryption, and location awareness to transform data management and usher in a new era of secure, scalable storage solutions." name="description"/><meta content="https://cdn.prod.website-files.com/62879c5d83d830c65478cb8a/629740f6fc00f643d7a3ff49_technology-peer-2-peer.jpg" property="og:image"/><meta content="https://cdn.prod.website-files.com/62879c5d83d830c65478cb8a/629740f6fc00f643d7a3ff49_technology-peer-2-peer.jpg" property="twitter:image"/><meta content="width=device-width, initial-scale=1" name="viewport"/><meta content="IncswpQZnYywMln3QIEDvj7L1wk5swkar0mDF8KePZU" name="google-site-verification"/><link href="https://cdn.prod.website-files.com/628611cd396b6924a80afe09/css/hive-staging.webflow.c7bf6a615.min.css" rel="stylesheet" type="text/css"/><script type="text/javascript">!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);</script><link href="https://cdn.prod.website-files.com/628611cd396b6924a80afe09/65328cc5643089dc3f1ecc90_favicon.png" rel="shortcut icon" type="image/x-icon"/><link href="https://cdn.prod.website-files.com/628611cd396b6924a80afe09/6388cf8ff9252b756fdc497b_hive-webicon.png" rel="apple-touch-icon"/><link href="https://hivenet.com/post/technology-peer-to-peer-file-systems-how-does-it-work" rel="canonical"/><script async="" src="https://www.googletagmanager.com/gtag/js?id=G-HM04QZ3Q50"></script><script type="text/javascript">window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}gtag('js', new Date());gtag('set', 'developer_id.dZGVlNj', true);gtag('config', 'G-HM04QZ3Q50');</script><!-- Google Tag Manager -->
  2. <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
  3. new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
  4. j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
  5. 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
  6. })(window,document,'script','dataLayer','GTM-KDR3F54M');</script>
  7. <!-- End Google Tag Manager -->
  8. <script>
  9. //FIND DEVICE TYPE
  10. const isStaging = window.location.hostname === 'hive-staging.webflow.io';
  11. const isProd = window.location.hostname === 'www.hivenet.com';
  12. const isMobileOrTablet = /Tablet|Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) || (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);
  13. function isInIframe() {
  14.  try {
  15.    return window.self !== window.top;
  16.  } catch (e) {
  17.    return true;
  18.  }
  19. }
  20. // script
  21. window.addEventListener('DOMContentLoaded', (event) => {
  22.  
  23. if (document.getElementById('header_cta')) {
  24. document.getElementById('header_cta').href = window.location.hostname === 'www.hivenet.com' ? 'http://app.hivenet.com/' : 'http://app.preprod.hivenet.com/';
  25. }
  26.      if (document.getElementById('header_cta_menu')) {
  27. document.getElementById('header_cta_menu').href = window.location.hostname === 'www.hivenet.com' ? 'http://app.hivenet.com/' : 'http://app.preprod.hivenet.com/';
  28. }
  29. });
  30. // script
  31.  var TOKEN = '';
  32.  var MIXPANELCDN = '';
  33.  var MIXPANELAPI = '';
  34.  if (window.location.hostname === 'hive-sandbox.webflow.io') {
  35.    TOKEN = '570607cedbc410c9b38c059ce724b094';
  36.  }
  37.  else if (window.location.hostname === 'hive-staging.webflow.io') {
  38.    MIXPANELCDN = 'mixpanelcdnstaging.divine-thunder-7e35.workers.dev'
  39.    MIXPANELAPI = 'mixpanelapistaging.divine-thunder-7e35.workers.dev'
  40.    TOKEN = 'b58e943376f3d62ede0ef2574c7a1f66'
  41.  }
  42.  else if (window.location.hostname === 'www.hivenet.com') {
  43.    MIXPANELCDN = 'mixpanelcdnprod.divine-thunder-7e35.workers.dev'
  44.    MIXPANELAPI = 'mixpanelapiprod.divine-thunder-7e35.workers.dev';
  45.    TOKEN = 'b8363b5e48f570d9bc94c9c8d744d7a6'
  46.  }
  47.  
  48.  (function (f, b) {
  49.    if (!b.__SV) {
  50.      var e, g, i, h; window.mixpanel = b; b._i = []; b.init = function (e, f, c) {
  51.        function g(a, d) { var b = d.split("."); 2 == b.length && (a = a[b[0]], d = b[1]); a[d] = function () { a.push([d].concat(Array.prototype.slice.call(arguments, 0))) } } var a = b; "undefined" !== typeof c ? a = b[c] = [] : c = "mixpanel"; a.people = a.people || []; a.toString = function (a) { var d = "mixpanel"; "mixpanel" !== c && (d += "." + c); a || (d += " (stub)"); return d }; a.people.toString = function () { return a.toString(1) + ".people (stub)" }; i = "disable time_event track track_pageview track_links track_forms track_with_groups add_group set_group remove_group register register_once alias unregister identify name_tag set_config reset opt_in_tracking opt_out_tracking has_opted_in_tracking has_opted_out_tracking clear_opt_in_out_tracking start_batch_senders people.set people.set_once people.unset people.increment people.append people.union people.track_charge people.clear_charges people.delete_user people.remove".split(" ");
  52.        for (h = 0; h < i.length; h++)g(a, i[h]); var j = "set set_once union unset remove delete".split(" "); a.get_group = function () { function b(c) { d[c] = function () { call2_args = arguments; call2 = [c].concat(Array.prototype.slice.call(call2_args, 0)); a.push([e, call2]) } } for (var d = {}, e = ["get_group"].concat(Array.prototype.slice.call(arguments, 0)), c = 0; c < j.length; c++)b(j[c]); return d }; b._i.push([e, f, c])
  53.      }; b.__SV = 1.2; e = f.createElement("script"); e.type = "text/javascript"; e.async = !0; e.src = "undefined" !== typeof MIXPANEL_CUSTOM_LIB_URL ?
  54.        MIXPANEL_CUSTOM_LIB_URL : "file:" === f.location.protocol && "//" + MIXPANELCDN + "/libs/mixpanel-2-latest.min.js".match(/^\/\//) ? "https://" + MIXPANELCDN + "/libs/mixpanel-2-latest.min.js" : "//" + MIXPANELCDN + "/libs/mixpanel-2-latest.min.js"; g = f.getElementsByTagName("script")[0]; g.parentNode.insertBefore(e, g)
  55.    }
  56.  })(document, window.mixpanel || []);
  57.  
  58.  mixpanel.init(TOKEN, {api_host: "https://" + MIXPANELAPI})
  59.  const cookie = decodeURIComponent(document.cookie);
  60.  const cookieData = JSON.parse(getMixpanelCookie());
  61.  //const cookiePiwikID = getPiwikID();
  62.  
  63.  const urlParams = new URLSearchParams(window.location.search);
  64.  
  65.  function registerMixpanelProperties() {
  66.    // Parse the URL query string and extract the values of the utm_* parameters
  67.    const utmSource = urlParams.get('utm_source');
  68.    const utmMedium = urlParams.get('utm_medium');
  69.    const utmCampaign = urlParams.get('utm_campaign');
  70.    const referral = urlParams.get('referral_code');
  71.  
  72.    mixpanel.register({
  73.      'source': 'Website',
  74.      'GA_client_id': getGAToken(),
  75.      // 'utm_source_last_touch': cookieData.utmSource,
  76.      // 'utm_medium_last_touch': cookieData.utmMedium,
  77.      // 'utm_campaign_last_touch': cookieData.utmCampaign,
  78.      'utm_source': utmSource ?? undefined,
  79.      'utm_medium': utmMedium ?? undefined,
  80.      'utm_campaign': utmCampaign ?? undefined,
  81.      'referral_code': referral ?? undefined,
  82.    });
  83.  }
  84.  
  85.  if (mixpanel.configured && !mixpanel._loaded) {
  86.    // Mixpanel is not ready yet, wait for it to load
  87.    mixpanel.ready(function () {
  88.      // Execute your code here
  89.      registerMixpanelProperties();
  90.    });
  91.  } else {
  92.    // Mixpanel is ready, execute your code immediately
  93.    registerMixpanelProperties();
  94.  }
  95.  
  96.  function getUtmString() {
  97.    const cookie = decodeURIComponent(document.cookie);
  98.    const cookieData = JSON.parse(getMixpanelCookie());
  99.    const utm_source_last_touch = cookieData?.utm_source;
  100.    const utm_medium_last_touch = cookieData?.utm_medium;
  101.    const utm_campaign_last_touch = cookieData?.utm_campaign;
  102.    return `utm_source_last_touch=${utm_source_last_touch}&utm_medium_last_touch=${utm_medium_last_touch}&utm_campaign_last_touch=${utm_campaign_last_touch}`;
  103.  }
  104.  
  105.  function clearCookiesWithPrefix(prefix) {
  106.    const cookies = document.cookie.split(';');
  107.  
  108.    function deleteCookie(name, path, domain) {
  109.      let cookieStr = name + '=;expires=Thu, 01 Jan 1970 00:00:00 UTC';
  110.  
  111.      if (path) {
  112.        cookieStr += ';path=' + path;
  113.      }
  114.  
  115.      if (domain) {
  116.        cookieStr += ';domain=' + domain;
  117.      }
  118.  
  119.      document.cookie = cookieStr;
  120.    }
  121.  
  122.    cookies.forEach(cookie => {
  123.      const [name, value] = cookie.split('=').map(s => s.trim());
  124.      if (name.startsWith(prefix)) {
  125.        // Delete cookie with current domain and path
  126.        deleteCookie(name, '/', location.hostname);
  127.  
  128.        // Delete cookie with subdomains and root path
  129.        location.hostname.split('.').forEach((_, i, arr) => {
  130.          const domain = '.' + arr.slice(i).join('.');
  131.          deleteCookie(name, '/', domain);
  132.        });
  133.      }
  134.    });
  135.  }
  136.  
  137.  function resetMixpanel() {
  138.    // Clear Mixpanel cookies
  139.    clearCookiesWithPrefix('mp_');
  140.  
  141.    // Reset the Mixpanel user
  142.    if (typeof mixpanel !== 'undefined' && mixpanel) {
  143.      mixpanel.reset();
  144.    } else {
  145.      console.warn('Mixpanel library not found. Make sure Mixpanel is loaded before calling this function.');
  146.    }
  147.  }
  148.  
  149.  
  150.  
  151.  function getCookie(name) {
  152.    const cookies = document.cookie.split(';');
  153.    for (let i = 0; i < cookies.length; i++) {
  154.      const cookie = cookies[i].trim();
  155.      if (cookie.startsWith(name + '=')) {
  156.        return decodeURIComponent(cookie.substring(name.length + 1));
  157.      } else if (cookie.startsWith('mp_') || cookie.endsWith('_mixpanel')) {
  158.        const cookieName = cookie.split('=')[0];
  159.        if (cookieName === name) {
  160.          return decodeURIComponent(cookie.split('=')[1]);
  161.        }
  162.      }
  163.    }
  164.    return null;
  165.  }
  166.  
  167.  function getMixpanelCookie() {
  168.    const cookies = document.cookie.split(';');
  169.    for (let i = 0; i < cookies.length; i++) {
  170.      const cookie = cookies[i].trim();
  171.      if (cookie.startsWith('mp_') || cookie.endsWith('_mixpanel')) {
  172.        return decodeURIComponent(cookie.split('=')[1]);
  173.      }
  174.    }
  175.    return null;
  176.  }
  177.  
  178.  function getMixpanelDistinctID() {
  179.    const mixpanelCookie = getMixpanelCookie();
  180.    if (mixpanelCookie) {
  181.      const mixpanelData = JSON.parse(mixpanelCookie);
  182.      return mixpanelData?.distinct_id;
  183.    }
  184.    return null;
  185.  }
  186.  
  187.  function getGAToken() {
  188.    const GA_Cookie = getCookie('_ga');
  189.    if (GA_Cookie) {
  190.      const GA_Token = GA_Cookie.split('.')[2];
  191.      const regex = /GA1\.\d+\.(.*)/; // Matches "GA1." followed by one or more digits, followed by a dot, and captures the rest of the string
  192.      const match = GA_Cookie.match(regex); // Returns an array with the entire match and the captured group
  193.      let result;
  194.      if (match) {
  195.        result = match[1]; // Extracts the captured group
  196.        return result;
  197.      }
  198.  
  199.    }
  200.    return null;
  201.  }
  202. </script>
  203. <script>
  204.  window.intercomSettings = {
  205.    api_base: "https://api-iam.eu.intercom.io",
  206.    app_id: "e7qrp69x",
  207.  };
  208. </script>
  209. <script>
  210.  // We pre-filled your app ID in the widget URL: 'https://widget.intercom.io/widget/e7qrp69x'
  211.  (function(){var w=window;var ic=w.Intercom;if(typeof ic==="function"){ic('reattach_activator');ic('update',w.intercomSettings);}else{var d=document;var i=function(){i.c(arguments);};i.q=[];i.c=function(args){i.q.push(args);};w.Intercom=i;var l=function(){var s=d.createElement('script');s.type='text/javascript';s.async=true;s.src='https://widget.intercom.io/widget/e7qrp69x';var x=d.getElementsByTagName('script')[0];x.parentNode.insertBefore(s,x);};if(document.readyState==='complete'){l();}else if(w.attachEvent){w.attachEvent('onload',l);}else{w.addEventListener('load',l,false);}}})();
  212. </script>
  213. <style>
  214. /*BURGER MENU STYLE*/
  215. [data-nav-menu-open]{
  216. display: flex !important;
  217. height: 100vh;
  218. width: 100%;
  219. align-items: center;
  220. }
  221. </style>
  222. <!-- Google tag (gtag.js) -->
  223. <script async src="https://www.googletagmanager.com/gtag/js?id=G-HM04QZ3Q50"></script>
  224. <script>
  225.  window.dataLayer = window.dataLayer || [];
  226.  function gtag(){dataLayer.push(arguments);}
  227.  gtag('js', new Date());
  228.  
  229.  gtag('config', 'G-HM04QZ3Q50');
  230. </script>
  231. <meta name="google-site-verification" content="IncswpQZnYywMln3QIEDvj7L1wk5swkar0mDF8KePZU" /></head><body class="hivenet products-page-body"><div class="new-page-wrapper"><div class="global-styles w-embed"><style>
  232.  
  233.  html { font-size: calc(0.625rem + 0.41666666666666663vw); }
  234.  @media screen and (max-width:1920px) { html { font-size: calc(0.625rem + 0.41666666666666674vw); } }
  235.  @media screen and (max-width:1440px) { html { font-size: calc(0.8126951092611863rem + 0.20811654526534862vw); } }
  236.  @media screen and (max-width:479px) { html { font-size: calc(0.7494769874476988rem + 0.8368200836820083vw); } }
  237.  
  238.  
  239. /* Make text look crisper and more legible in all browsers */
  240. body {
  241.  -webkit-font-smoothing: antialiased;
  242.  -moz-osx-font-smoothing: grayscale;
  243.  font-smoothing: antialiased;
  244.  text-rendering: optimizeLegibility;
  245. }
  246.  
  247. /* Focus state style for keyboard navigation for the focusable elements */
  248. *[tabindex]:focus-visible,
  249.  input[type="file"]:focus-visible {
  250.   outline: 0.125rem solid #4d65ff;
  251.   outline-offset: 0.125rem;
  252. }
  253.  
  254. /* Get rid of top margin on first element in any rich text element */
  255. .w-richtext > :not(div):first-child, .w-richtext > div:first-child > :first-child {
  256.  margin-top: 0 !important;
  257. }
  258.  
  259. /* Get rid of bottom margin on last element in any rich text element */
  260. .w-richtext>:last-child, .w-richtext ol li:last-child, .w-richtext ul li:last-child {
  261. margin-bottom: 0 !important;
  262. }
  263.  
  264. /* Prevent all click and hover interaction with an element */
  265. .pointer-events-off {
  266. pointer-events: none;
  267. }
  268.  
  269. /* Enables all click and hover interaction with an element */
  270. .pointer-events-on {
  271.  pointer-events: auto;
  272. }
  273.  
  274. /* Create a class of .div-square which maintains a 1:1 dimension of a div */
  275. .div-square::after {
  276. content: "";
  277. display: block;
  278. padding-bottom: 100%;
  279. }
  280.  
  281. /* Make sure containers never lose their center alignment */
  282. .container-medium,.container-small, .container-large {
  283. margin-right: auto !important;
  284.  margin-left: auto !important;
  285. }
  286.  
  287. /*
  288. Make the following elements inherit typography styles from the parent and not have hardcoded values.
  289. Important: You will not be able to style for example "All Links" in Designer with this CSS applied.
  290. Uncomment this CSS to use it in the project. Leave this message for future hand-off.
  291. */
  292. /*
  293. a,
  294. .w-input,
  295. .w-select,
  296. .w-tab-link,
  297. .w-nav-link,
  298. .w-dropdown-btn,
  299. .w-dropdown-toggle,
  300. .w-dropdown-link {
  301.  color: inherit;
  302.  text-decoration: inherit;
  303.  font-size: inherit;
  304. }
  305. */
  306.  
  307. /* Apply "..." after 3 lines of text */
  308. .text-style-3lines {
  309. display: -webkit-box;
  310. overflow: hidden;
  311. -webkit-line-clamp: 3;
  312. -webkit-box-orient: vertical;
  313. }
  314.  
  315. /* Apply "..." after 2 lines of text */
  316. .text-style-2lines {
  317. display: -webkit-box;
  318. overflow: hidden;
  319. -webkit-line-clamp: 2;
  320. -webkit-box-orient: vertical;
  321. }
  322.  
  323. /* Adds inline flex display */
  324. .display-inlineflex {
  325.  display: inline-flex;
  326. }
  327.  
  328. /* These classes are never overwritten */
  329. .hide {
  330.  display: none !important;
  331. }
  332.  
  333. @media screen and (max-width: 991px) {
  334.    .hide, .hide-tablet {
  335.        display: none !important;
  336.    }
  337. }
  338.  @media screen and (max-width: 767px) {
  339.    .hide-mobile-landscape{
  340.      display: none !important;
  341.    }
  342. }
  343.  @media screen and (max-width: 479px) {
  344.    .hide-mobile{
  345.      display: none !important;
  346.    }
  347. }
  348. .margin-0 {
  349.  margin: 0rem !important;
  350. }
  351.  
  352. .padding-0 {
  353.  padding: 0rem !important;
  354. }
  355.  
  356. .spacing-clean {
  357. padding: 0rem !important;
  358. margin: 0rem !important;
  359. }
  360.  
  361. .margin-top {
  362.  margin-right: 0rem !important;
  363.  margin-bottom: 0rem !important;
  364.  margin-left: 0rem !important;
  365. }
  366.  
  367. .padding-top {
  368.  padding-right: 0rem !important;
  369.  padding-bottom: 0rem !important;
  370.  padding-left: 0rem !important;
  371. }
  372.  
  373. .margin-right {
  374.  margin-top: 0rem !important;
  375.  margin-bottom: 0rem !important;
  376.  margin-left: 0rem !important;
  377. }
  378.  
  379. .padding-right {
  380.  padding-top: 0rem !important;
  381.  padding-bottom: 0rem !important;
  382.  padding-left: 0rem !important;
  383. }
  384.  
  385. .margin-bottom {
  386.  margin-top: 0rem !important;
  387.  margin-right: 0rem !important;
  388.  margin-left: 0rem !important;
  389. }
  390.  
  391. .padding-bottom {
  392.  padding-top: 0rem !important;
  393.  padding-right: 0rem !important;
  394.  padding-left: 0rem !important;
  395. }
  396.  
  397. .margin-left {
  398.  margin-top: 0rem !important;
  399.  margin-right: 0rem !important;
  400.  margin-bottom: 0rem !important;
  401. }
  402.  
  403. .padding-left {
  404.  padding-top: 0rem !important;
  405.  padding-right: 0rem !important;
  406.  padding-bottom: 0rem !important;
  407. }
  408.  
  409. .margin-horizontal {
  410.  margin-top: 0rem !important;
  411.  margin-bottom: 0rem !important;
  412. }
  413.  
  414. .padding-horizontal {
  415.  padding-top: 0rem !important;
  416.  padding-bottom: 0rem !important;
  417. }
  418.  
  419. .margin-vertical {
  420.  margin-right: 0rem !important;
  421.  margin-left: 0rem !important;
  422. }
  423.  
  424. .padding-vertical {
  425.  padding-right: 0rem !important;
  426.  padding-left: 0rem !important;
  427. }
  428.  
  429. span.rightcloud::before {
  430.    position: absolute;
  431.    left: -22px;
  432.    top: -30px;
  433.    content: url(https://cdn.prod.website-files.com/628611cd396b6924a80afe09/64917df0843009bf006de7ed_left-accent.svg);
  434.    width: 1.87rem;
  435. }
  436. span.rightcloud:after {
  437.    position: absolute;
  438.    right: -22px;
  439.    top: -35px;
  440.    content: url(https://cdn.prod.website-files.com/628611cd396b6924a80afe09/64917df0270212395ea4c7d5_right-accent.svg);
  441.    width: 1.87rem;
  442.    height: 22px;
  443. }
  444. .homegrid_item-inner.red:hover .homegrid_icon-wrapper{background-color:#641722}
  445. .homegrid_item-inner.blue:hover .homegrid_icon-wrapper{background-color:#0B4065}
  446. .homegrid_item-inner.green:hover .homegrid_icon-wrapper{background-color:#194D2A}
  447. .homegrid_item-inner:hover .hivecta { color: #000;background-color: #E1FF01;}
  448. .card-border-gradient {
  449.  position: absolute;
  450.  width: 100%;
  451.  height: 100%;
  452.  z-index: 2;
  453.  border-radius: 1rem;
  454.  border: 0.09px solid transparent;
  455.  background: linear-gradient(180deg,rgba(255,255,255,0.17),rgba(255,255,255,0.03) 45%) border-box;
  456.  -webkit-mask:
  457.     linear-gradient(#fff 0 0) padding-box,
  458.     linear-gradient(#fff 0 0);
  459.  -webkit-mask-composite: xor;
  460.          mask-composite: exclude;
  461. }
  462.  
  463.  
  464.  
  465.  
  466. </style></div><div data-animation="default" class="navbar referral-alternate-content w-nav" data-easing2="ease-out-quint" data-easing="ease-out-quint" data-collapse="medium" role="banner" data-no-scroll="1" data-duration="1000" id="navbar"><div class="new-container"><div class="new-section-padding is-nav"><div class="nav-layout"><a id="w-node-_5652cdb4-5293-d457-4a09-3b44f69e19a4-f69e19a0" href="/" class="brand w-nav-brand"><img width="143" height="46" alt="Hive logotype" src="https://cdn.prod.website-files.com/628611cd396b6924a80afe09/665709e2a8e34974a4cd9e7a_anniversary-logo-color.svg" loading="eager" class="nav-logo"/></a><nav role="navigation" id="w-node-_5652cdb4-5293-d457-4a09-3b44f69e19a6-f69e19a0" class="nav-links-wrapper w-nav-menu"><a cta_type="nav-button" href="/" class="new-nav-link w-nav-link">hiveDisk</a><a cta_type="nav-button" href="/hivenet" class="new-nav-link w-nav-link">hiveNet</a><a id="bf-landing-page" cta_type="nav-button" href="/hivecompute" class="new-nav-link w-nav-link">hiveCompute</a><a cta_type="nav-button" href="/contribution" class="new-nav-link hide w-nav-link">Community</a><a cta_type="nav-button" href="/contribution" class="new-nav-link show-tablet w-nav-link">Contribution</a><a cta_type="nav-button" href="/feature-feedback-vote" class="new-nav-link show-tablet w-nav-link">Feature request</a><a cta_type="nav-button" href="https://discord.com/invite/p2CwYSKsQU" target="_blank" class="new-nav-link show-tablet w-nav-link">Discord community</a><div data-w-id="0e0400e2-b7d4-2d3a-a4a2-b6a71c7ea28e" class="new-nav-dropdown"><div class="new-nav-link">Community</div><img src="https://cdn.prod.website-files.com/628611cd396b6924a80afe09/639c3340aec4fd0d2bf50138_chevron-gray.svg" loading="lazy" alt="" class="dropdown-arrow"/><div class="dropdown-wrapper"><a cta_type="nav-button" href="/contribution" class="new-nav-link w-nav-link">Contribution</a><a cta_type="nav-button" href="/feature-feedback-vote" class="new-nav-link w-nav-link">Feature request</a><a cta_type="nav-button" href="https://discord.gg/sW4x2yDxJX" target="_blank" class="new-nav-link w-nav-link">Discord server</a></div></div><a id="pricing-link-navbar" cta_type="nav-button" href="/subscribe" class="new-nav-link w-nav-link">Pricing</a><div class="show-tablet is-flex hide w-locales-list"><img src="https://cdn.prod.website-files.com/628611cd396b6924a80afe09/664cb70462c7a2429c8ec77d_language-selector.svg" loading="eager" width="24" height="24" alt="" class="language-icon"/><div role="list" class="locales-list-menu w-locales-items"><div role="listitem" class="w-locales-item"><a hreflang="en" href="/post/technology-peer-to-peer-file-systems-how-does-it-work" aria-current="page" class="new-nav-link is-language w--current">English</a></div><div role="listitem" class="w-locales-item"><a hreflang="pt" href="/pt/post/technology-peer-to-peer-file-systems-how-does-it-work" class="new-nav-link is-language">Portuguese</a></div><div role="listitem" class="w-locales-item"><a hreflang="es" href="/es/post/technology-peer-to-peer-file-systems-how-does-it-work" class="new-nav-link is-language">Spanish</a></div><div role="listitem" class="w-locales-item"><a hreflang="fr" href="/fr/post/technology-peer-to-peer-file-systems-how-does-it-work" class="new-nav-link is-language">French</a></div></div></div><div class="nav-buttons show-phone"><a id="header_cta_menu" href="#" cta_type="sticky_button" class="outline_btn_sign_in download_cta w-button">Sign in</a><a id="header_cta_signin_menu" href="/subscribe" cta_type="sticky_button" class="outline_btn download_cta is-get-started w-button">Get started</a></div><div class="locales-wrapper hide-tablet hide w-locales-list"><div data-w-id="29d57bf6-05e5-2844-0e4d-455daf7bac1d" class="new-nav-dropdown"><img src="https://cdn.prod.website-files.com/628611cd396b6924a80afe09/664cb70462c7a2429c8ec77d_language-selector.svg" loading="eager" width="24" height="24" alt="" class="language-icon"/><img src="https://cdn.prod.website-files.com/628611cd396b6924a80afe09/639c3340aec4fd0d2bf50138_chevron-gray.svg" loading="lazy" alt="" class="dropdown-arrow"/><div id="language-selector" role="list" class="dropdown-wrapper w-locales-items"><div role="listitem" class="w-locales-item"><a hreflang="en" href="/post/technology-peer-to-peer-file-systems-how-does-it-work" aria-current="page" class="new-nav-link w--current">English</a></div><div role="listitem" class="w-locales-item"><a hreflang="pt" href="/pt/post/technology-peer-to-peer-file-systems-how-does-it-work" class="new-nav-link">Portuguese</a></div><div role="listitem" class="w-locales-item"><a hreflang="es" href="/es/post/technology-peer-to-peer-file-systems-how-does-it-work" class="new-nav-link">Spanish</a></div><div role="listitem" class="w-locales-item"><a hreflang="fr" href="/fr/post/technology-peer-to-peer-file-systems-how-does-it-work" class="new-nav-link">French</a></div></div></div></div></nav><div id="w-node-_5652cdb4-5293-d457-4a09-3b44f69e19b4-f69e19a0" class="nav-buttons hide-phone"><a id="header_cta" href="#" cta_type="sticky_button" class="outline_btn_sign_in download_cta w-button">Sign in</a><a id="get-started-navbar" href="/subscribe" data-goatcounter-click="" cta_type="sticky_button" class="outline_btn download_cta is-get-started w-button">Get started</a></div><div id="w-node-_5652cdb4-5293-d457-4a09-3b44f69e19b9-f69e19a0" data-w-id="5652cdb4-5293-d457-4a09-3b44f69e19b9" class="nav-menu-button w-nav-button"><div data-is-ix2-target="1" class="nav-lottie" data-w-id="5652cdb4-5293-d457-4a09-3b44f69e19ba" data-animation-type="lottie" data-src="https://cdn.prod.website-files.com/628611cd396b6924a80afe09/653bad4001813ef573707cfd_ZPP0Gyi1dn.json" data-loop="0" data-direction="1" data-autoplay="0" data-renderer="svg" data-default-duration="2" data-duration="0" data-ix2-initial-state="0"></div></div></div></div></div></div><div class="new-page-main"><section class="new-section"><div class="new-container"><div class="new-section-padding is-large-hero"><div class="centered-layout is-compressed is-blog-template"><a href="/blog" class="blog-template-back w-inline-block"><div class="w-inline-block">← All posts</div></a><img src="https://cdn.prod.website-files.com/62879c5d83d830c65478cb8a/629740f6fc00f643d7a3ff49_technology-peer-2-peer.jpg" loading="lazy" alt="Embracing P2P: All about peer-to-peer technology and how it harnesses decentralized storage and scalability" sizes="(max-width: 479px) 92vw, (max-width: 767px) 90vw, (max-width: 991px) 84vw, (max-width: 1279px) 67vw, (max-width: 1439px) 54vw, (max-width: 1919px) 49vw, 41vw" srcset="https://cdn.prod.website-files.com/62879c5d83d830c65478cb8a/629740f6fc00f643d7a3ff49_technology-peer-2-peer-p-500.jpeg 500w, https://cdn.prod.website-files.com/62879c5d83d830c65478cb8a/629740f6fc00f643d7a3ff49_technology-peer-2-peer-p-800.jpeg 800w, https://cdn.prod.website-files.com/62879c5d83d830c65478cb8a/629740f6fc00f643d7a3ff49_technology-peer-2-peer.jpg 1140w" class="blog-post-img"/><p class="new-p text-size-16">July 20, 2022</p><h1 class="new-h1 text-size-40">Embracing P2P: All about peer-to-peer technology and how it harnesses decentralized storage and scalability</h1><div class="rte w-richtext"><h4><strong>KEY TAKEAWAYS</strong></h4><ul role="list"><li>In a peer-to-peer network, all computers are created equal, and cooperate directly between themselves to deliver a service. No intermediary, no centralized server.</li><li>In a peer-to-peer network, there could be millions of computers. They are powered by very efficient and scalable algorithms, that don’t deteriorate the service as the size of the network grows, and as nodes become overloaded or leave the network.</li><li>Hive&#x27;s storage service relies on these core peer-to-peer principles and on the important free capacities sitting in our personal devices at the edge of the network. In the years to come, it is inevitable that computation and storage will move away from centralized. </li></ul><h2><strong>The evolution of file sharing: P2P technology and its pioneers</strong></h2><p>Napster, Gnutella, Kazaa, BitTorrent, we have been sharing files with tools on the Internet for a while... Did you know that they rely on peer-to-peer (p2p) computing technology? </p><p>In a <a href="https://www.lifewire.com/p2p-networking-and-software-818019">peer-to-peer network</a>, all computers are created equal, are endowed with the same rights, and cooperate directly between themselves to deliver a service. No hierarchy, no intermediary, no orchestra conductor. </p><p>In a peer-to-peer infrastructure, users share resources through direct exchanges between computers, which are called “nodes”. The data is distributed among the nodes instead of being sent to servers for processing. Unlike in client-server computing technology, each node plays a symmetric and autonomous role to provide to the end user the expected solution.</p><h2><strong>Core characteristics of peer-to-peer systems</strong></h2><p>The complexity of design and use of peer-to-peer systems allow them to have their own characteristics:</p><ul role="list"><li>Symmetric, distributed and decentralized: </li></ul><p>All the nodes play a similar role, acting as both client and server. They fetch, distribute, and process content.</p><ul role="list"><li>Dynamic participants:</li></ul><p>Peer-to-peer systems must be resilient to nodes joining and leaving, whereas a centralized system expects its servers to remain up at all times.</p><ul role="list"><li>Resource localization: </li></ul><p>One of the key challenges in a p2p network is to find the peer hosting the requested data. A well-known technique is to use a Distributed Hash Table (DHT), which is a decentralized, distributed system that provides a lookup service similar to a hash table. One of the most cited papers on this topic is<a href="https://link.springer.com/chapter/10.1007/3-540-45748-8_5"> &quot;Kademlia: A Peer-to-peer Information System Based on the XOR Metric&quot;</a> by Petar Maymounkov and David Mazieres. This paper introduces the Kademlia DHT, which has become a widely-used DHT in various peer-to-peer applications. These algorithms are very efficient and scalable even with a large number of nodes and resources.</p><ul role="list"><li>Rebalancing and replication:</li></ul><p>As nodes become overloaded, or leave the network the peer-to-peer system must ensure that services remain accessible, available, performant and data remains persistent.</p><ul role="list"><li>Scalability and security:</li></ul><p>In a peer-to-peer network there could be millions of nodes. <a href="https://windowsreport.com/skype-number-of-users/">Skype at its peak had over 300M users.</a> Such networks must have irreproachable security tools which don&#x27;t deteriorate as the size of the network grows.</p><h2><strong>Hive&#x27;s P2P storage: A new paradigm for data management</strong></h2><p>Hive&#x27;s peer-to-peer storage relies on these core principles. It is based on the open source IPFS protocol for the core filesystem layer. But it is more than, on top of which we have built additional services and features to provide: </p><ul role="list"><li>End-to-end encryption: </li></ul><p>No private data leaves the end users&#x27; device in clear form. The encryption model enables the sharing of data across multiple participants without replicating the content, nor sharing keys.</p><ul role="list"><li>Proof of content integrity: </li></ul><p>As participants in the Hive network store other&#x27;s data, they are incentivized to do so as long as they continue providing proof of content integrity.</p><ul role="list"><li>Location awareness: </li></ul><p>Hive&#x27;s peer-to-peer placement algorithms take into account the user&#x27;s privacy requirements and preferred locations for both data storage and processing.</p><ul role="list"><li>Error correction:</li></ul><p>When nodes suddenly go offline, the data they hold is no longer available. When such an event occurs Hive will recreate the lost data and distribute it to other nodes to ensure durability of the stored files. </p><h2><strong>The rising potential of peer-to-peer technologies</strong></h2><p>One may wonder why peer-to-peer technologies which are mature since the mid 2000s aren&#x27;t more in use. Well they are omnipresent already in gaming, crypto world, and content distribution. Windows 10 updates are distributed using peer to peer technologies. </p><p>But it is only recently that the technology environment evolution has aligned all the stars for peer-to-peer to reach its full potential:</p><ul role="list"><li>Fiber is now in many countries more common than DSL, which has brought symmetry between upload and download speeds.</li><li>Data is now produced at the edge more than ever; IOT devices have outgrown non IOT devices.</li><li>There is more power and capacity than ever in edge devices that are growing to be billions...</li></ul><h2><strong>The future of decentralized storage and computing</strong></h2><p>In the years to come, it is inevitable that computation and storage will logically move away from centralized, distant servers to distributed systems closer to the end users. The amount of data produced and stored in the Internet is massive and growing by approximately 20% every year. The world&#x27;s data storage capacity is <a href="https://www.statista.com/statistics/871513/worldwide-data-created/">expected to reach 13 ZB by 2024</a>, vs. 6.8 ZB today. As an alternative to huge data centers for storing all this data, Hive&#x27;s peer-to-peer storage system will rely on the important free capacities sitting in our personal devices at the edge of the network. </p></div><a cta_type="hero_cta" href="#" class="yellow_btn toblue cta_button hero-action download-hero-action max-width-704 w-inline-block w-condition-invisible"><div class="w-dyn-bind-empty"></div></a></div></div></div></section><section class="new-section is-about-hero"><div class="new-section-divider"></div><div class="new-container"><div class="new-section-padding"><div class="centered-layout is-text-align-center"><h2 class="new-h2">Related Articles</h2><div class="w-dyn-list"><div role="list" class="new-grid is-3 is-flex w-dyn-items w-row"><div role="listitem" class="related-post-item w-dyn-item w-col w-col-4"><a style="background-image:url(&quot;https://cdn.prod.website-files.com/62879c5d83d830c65478cb8a/667561e8253445db1232a0b5_blog-picture.png&quot;)" href="/post/introducing-hives-new-yearly-plans-affordable-and-sustainable-cloud-storage" class="related-post-link w-inline-block"><p class="new-p text-color-white is-relative">Introducing hiveDisk&#x27;s new yearly plans: affordable and sustainable cloud storage</p><p class="new-p text-color-yellow is-relative">Read</p><div class="related-post-bg-gradient"></div></a></div><div role="listitem" class="related-post-item w-dyn-item w-col w-col-4"><a style="background-image:url(&quot;https://cdn.prod.website-files.com/62879c5d83d830c65478cb8a/66698a398818f7bc10556c73_IMG_5772.jpg&quot;)" href="/post/hive-celebrates-two-years-of-innovation-and-growth" class="related-post-link w-inline-block"><p class="new-p text-color-white is-relative">Hive celebrates two years of innovation and growth</p><p class="new-p text-color-yellow is-relative">Read</p><div class="related-post-bg-gradient"></div></a></div><div role="listitem" class="related-post-item w-dyn-item w-col w-col-4"><a style="background-image:url(&quot;https://cdn.prod.website-files.com/62879c5d83d830c65478cb8a/666986c90b9f0a488b86b618_cloud-computing.jpg&quot;)" href="/post/where-is-the-cloud-stored-exploring-data-storage-locations" class="related-post-link w-inline-block"><p class="new-p text-color-white is-relative">Where is the cloud stored? Exploring data storage locations</p><p class="new-p text-color-yellow is-relative">Read</p><div class="related-post-bg-gradient"></div></a></div></div><div role="navigation" aria-label="List" class="w-pagination-wrapper"></div></div><a href="/blog" class="yellow_btn toblue cta_button hero-action download-hero-action max-width-704 w-inline-block"><div>Back to the blog</div></a></div></div></div></section></div><div id="footer" class="footer referral-alternate-content"><div class="new-container"><div class="new-section-padding is-footer"><div class="centered-layout is-align-left-phone"><div class="new-grid is-footer"><img src="https://cdn.prod.website-files.com/628611cd396b6924a80afe09/665709e2a8e34974a4cd9e7a_anniversary-logo-color.svg" loading="lazy" width="143" height="46" alt="Hive logotype" id="w-node-_5eb244f0-177d-4c78-0478-e9f39736bfb7-73cde1aa" class="new-footer-logo"/><div id="w-node-_2f789a2c-2222-c7cf-3381-6145b3c35209-73cde1aa" class="footer-column"><p class="new-p text-size-16">Company</p><a href="/company" class="new-p text-size-16 text-color-dark-gray is-footer">About</a><a href="#" class="new-p text-size-16 text-color-dark-gray is-footer hide-element">Careers</a><a href="/support" class="new-p text-size-16 text-color-dark-gray is-footer">Contact us</a></div><div id="w-node-_00c76a3d-efec-5ef8-0934-c63a8f85ff5a-73cde1aa" class="footer-column"><p class="new-p text-size-16">Resources</p><a href="/support" class="new-p text-size-16 text-color-dark-gray is-footer">Support</a><a href="/blog" class="new-p text-size-16 text-color-dark-gray is-footer">Blog</a><a href="/faq" class="new-p text-size-16 text-color-dark-gray is-footer">FAQ</a><a href="/downloads" class="new-p text-size-16 text-color-dark-gray is-footer">Apps</a><a href="/hivedisk-referral-program" class="new-p text-size-16 text-color-dark-gray is-footer">Refer a friend</a></div><div id="w-node-_958c28f3-3c32-d6dc-3b52-ddf40610f5de-73cde1aa" class="footer-column"><p class="new-p text-size-16">Product</p><a href="/" class="new-p text-size-16 text-color-dark-gray is-footer">hiveDisk</a><a href="/hivenet" class="new-p text-size-16 text-color-dark-gray is-footer">hiveNet</a><a href="/hivecompute" class="new-p text-size-16 text-color-dark-gray is-footer">hiveCompute</a><a href="/subscribe" class="new-p text-size-16 text-color-dark-gray is-footer">Pricing</a><a href="/feature-feedback-vote" class="new-p text-size-16 text-color-dark-gray is-footer">Feature request</a></div><div id="w-node-ecda3309-39ce-1250-9466-28fb664e6503-73cde1aa" class="footer-column"><p class="new-p text-size-16">Legal</p><a href="/terms-of-use" class="new-p text-size-16 text-color-dark-gray is-footer">Terms of use</a><a href="/hive-privacy-policy" class="new-p text-size-16 text-color-dark-gray is-footer">Privacy policy</a><div fs-cc="manager" class="fs-cc-manager2_component-2 hide-element"><a tabindex="0" fs-cc="open-preferences" tite="Cookie Preferences" aria-label="Cookie Preferences" href="#" class="new-p text-size-16 text-color-dark-gray is-footer">Cookie preferences</a><div fs-cc="open-preferences" role="button" tabindex="0" title="Cookie Preferences" aria-label="Cookie Preferences" class="fs-cc-manager2_button-2 w-embed"><svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
  467. <path d="M9 8L9 8.01" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
  468. <path d="M16 15L16 15.01" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
  469. <path d="M10 17L10 17.01" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
  470. <path d="M11 13L11 13.01" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
  471. <path d="M6 12L6 12.01" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
  472. <path d="M12 21C16.9706 21 21 16.9706 21 12C21 11.4402 20.9489 10.8924 20.8511 10.361C20.3413 10.7613 19.6985 11 19 11C18.4536 11 17.9413 10.8539 17.5 10.5987C17.0587 10.8539 16.5464 11 16 11C14.3431 11 13 9.65685 13 8C13 7.60975 13.0745 7.23691 13.2101 6.89492C11.9365 6.54821 11 5.38347 11 4C11 3.66387 11.0553 3.34065 11.1572 3.03894C6.58185 3.46383 3 7.31362 3 12C3 16.9706 7.02944 21 12 21Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
  473. </svg></div></div></div></div><div class="centered-layout-part is-text-align-center"><div class="footer-socials-flex is-width-100--phone"><a aria-label="Visit our Linkedin page" rel="noopener noreferrer nofollow" href="https://www.linkedin.com/company/hivedistributed/" target="_blank" class="social w-inline-block"><img src="https://cdn.prod.website-files.com/628611cd396b6924a80afe09/6374ffd392f2dca2335c7125_linkedin.svg" loading="lazy" width="28" height="28" alt="LinkedIn link"/></a><a aria-label="Visit our Twitter profile" rel="noopener noreferrer nofollow" href="https://twitter.com/HiveDistributed" target="_blank" class="social w-inline-block"><img src="https://cdn.prod.website-files.com/628611cd396b6924a80afe09/6568b2cb350655f9d5807011_x-icon.svg" loading="lazy" width="28" height="28" alt="X (former twitter) link"/></a><a aria-label="Visit our Medium page" rel="noopener noreferrer nofollow" href="https://medium.com/@hive-distributed" target="_blank" class="social w-inline-block"><img src="https://cdn.prod.website-files.com/628611cd396b6924a80afe09/6439408cd34e78636da25aae_medium%20logo.svg" loading="lazy" width="28" height="28" alt=""/></a><a aria-label="Visit our Facebook page" rel="noopener noreferrer nofollow" href="https://www.facebook.com/Hive-Computing-104923659272780" target="_blank" class="social w-inline-block"><img src="https://cdn.prod.website-files.com/628611cd396b6924a80afe09/6374ffd26f52d92a5a8eff67_facebook.svg" loading="lazy" width="28" height="28" alt="Facebook link"/></a><a aria-label="Visit our Instagram profile" rel="noopener noreferrer nofollow" href="https://www.instagram.com/hivenet_computing/" target="_blank" class="social w-inline-block"><img src="https://cdn.prod.website-files.com/628611cd396b6924a80afe09/6374ffd22df943d48eb1d28f_instagram.svg" loading="lazy" width="28" height="28" alt="Instagram link"/></a><a aria-label="Visit our YouTube channel" rel="noopener noreferrer nofollow" href="https://www.youtube.com/channel/UCHdnJA_E4wE1poEqjvO8knw/featured" target="_blank" class="social w-inline-block"><img src="https://cdn.prod.website-files.com/628611cd396b6924a80afe09/6374ffd2f99969d81dccb993_youtube.svg" loading="lazy" width="28" height="28" alt="YouTube link"/></a><a aria-label="Join our Discord" rel="noopener noreferrer nofollow" href="https://discord.gg/sW4x2yDxJX" target="_blank" class="social w-inline-block"><img src="https://cdn.prod.website-files.com/628611cd396b6924a80afe09/6374ffd337358a5e5084a923_discord.svg" loading="lazy" width="28" height="28" alt="Discord link"/></a></div><div class="centered-layout-part is-gap-12"><a href="https://www.websitecarbon.com/website/hivenet-com/" target="_blank" class="new-p text-size-16 is-link">How do we calculate this?</a></div><img src="https://cdn.prod.website-files.com/628611cd396b6924a80afe09/6581bef56bd95956e6ce3547_www.hivenet.png" loading="lazy" width="300" height="135" alt="The green web foundation badge. www.hivenet.com is green hosted by Amazon Web Services." class="green-web-badge"/></div></div></div></div></div></div><script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=628611cd396b6924a80afe09" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script><script src="https://cdn.prod.website-files.com/628611cd396b6924a80afe09/js/webflow.155112772.js" type="text/javascript"></script><!-- Google Tag Manager (noscript) -->
  474. <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KDR3F54M"
  475. height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
  476. <!-- End Google Tag Manager (noscript) -->
  477. <!-- 100% privacy-first analytics -->
  478. <script async defer src="https://scripts.simpleanalyticscdn.com/latest.js"></script>
  479. <script async src="https://scripts.simpleanalyticscdn.com/auto-events.js">
  480. <noscript><img src="https://queue.simpleanalyticscdn.com/noscript.gif" alt="" referrerpolicy="no-referrer-when-downgrade" /></noscript>
  481. <script>
  482. $(document).ready(()=>{
  483.  let isMenuAlreadyOpen = false;
  484.  $('.w-nav-button').on('click',()=>{
  485.    $('body').css("overflow",isMenuAlreadyOpen?"auto":"hidden")
  486.    isMenuAlreadyOpen = !isMenuAlreadyOpen
  487.  })
  488. })
  489. </script><script type="text/javascript">
  490. mixpanel.track('BLOGPOST_PAGE_VIEWED', { source: 'Website' });
  491. </script></body></html>
Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda