tag:blogger.com,1999:blog-85526232024-03-12T19:28:44.188-07:00Church of BSDThis was Intended to be a BSD only blog, but now it's about all Unix Like Free Operating Systems, Linux, FreeBSD etc.John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.comBlogger965125tag:blogger.com,1999:blog-8552623.post-89215132177002243882023-08-28T18:07:00.004-07:002023-08-28T18:13:34.152-07:00simulate loss and latency on networks,<p><span face="Söhne, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, Helvetica Neue, Arial, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji" style="color: #343541;"><span style="white-space-collapse: preserve;">there is was package called dummy net that would simulate loss and latency on networks, what is there like this for linux today?</span></span> </p><p><code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 0.875em; font-weight: 600; white-space-collapse: preserve;">Dummynet</code><span face="Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"" style="background-color: #f7f7f8; color: #374151; font-size: 16px; white-space-collapse: preserve;"> was originally developed for FreeBSD to simulate various network properties like bandwidth limitations, latency, and packet loss. For Linux, there are a few tools that can be used to achieve similar network simulations. The most notable one is </span><code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 0.875em; font-weight: 600; white-space-collapse: preserve;">tc</code><span face="Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"" style="background-color: #f7f7f8; color: #374151; font-size: 16px; white-space-collapse: preserve;"> (Traffic Control), which is part of the </span><code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 0.875em; font-weight: 600; white-space-collapse: preserve;">iproute2</code><span face="Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"" style="background-color: #f7f7f8; color: #374151; font-size: 16px; white-space-collapse: preserve;"> package.</span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin: 1.25em 0px; white-space-collapse: preserve;">Here's a brief overview of how you can use <code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 0.875em; font-weight: 600;">tc</code> to simulate network conditions:</p><ol style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; counter-reset: list-number 0; display: flex; flex-direction: column; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; list-style: none; margin: 1.25em 0px; padding: 0px; white-space-collapse: preserve;"><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; counter-increment: list-number 1; display: block; margin-bottom: 0px; margin-top: 0px; min-height: 28px; padding-left: 0.375em;"><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px;"><span color="var(--tw-prose-bold)" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; font-weight: 600;">Latency</span>: To introduce a delay of 100ms on all outgoing packets on the interface <code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 0.875em; font-weight: 600;">eth0</code>:</p><pre style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: currentcolor; font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 0.875em; line-height: 1.71429; margin-bottom: 0px; margin-top: 0px; overflow-x: auto; padding: 0px;"><div class="bg-black rounded-md mb-4" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: rgba(0,0,0,var(--tw-bg-opacity)); border-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin-bottom: 1rem;"><div class="flex items-center relative text-gray-200 bg-gray-800 px-4 py-2 text-xs font-sans justify-between rounded-t-md" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-text-opacity: 1; --tw-translate-x: 0; --tw-translate-y: 0; align-items: center; background-color: rgba(52,53,65,var(--tw-bg-opacity)); border-top-left-radius: 0.375rem; border-top-right-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: rgba(217,217,227,var(--tw-text-opacity)); display: flex; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 0.75rem; justify-content: space-between; line-height: 1rem; padding: 0.5rem 1rem; position: relative;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box;">bash</span><button class="flex ml-auto gap-2" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; appearance: button; background-image: none; border-color: rgb(217, 217, 227); border-style: solid; border-width: 0px; cursor: pointer; display: flex; font-family: inherit; font-size: 12px; font-weight: inherit; gap: 0.5rem; line-height: inherit; margin: 0px 0px 0px auto; padding: 0px;"><svg class="h-4 w-4" fill="none" height="1em" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="currentColor" viewbox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"></path><rect height="4" rx="1" ry="1" width="8" x="8" y="2"></rect></svg>Copy code</button></div><div class="p-4 overflow-y-auto" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; overflow-y: auto; padding: 1rem;"><code class="!whitespace-pre hljs language-bash" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: none; border-radius: 0.3em; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; hyphens: none; line-height: 1.5; overflow-wrap: normal; padding: 0.1em; tab-size: 4; white-space: normal; word-break: normal; word-spacing: normal;">tc qdisc add dev eth0 root netem delay 100ms
</code></div></div></pre></li><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; counter-increment: list-number 1; display: block; margin-bottom: 0px; margin-top: 0px; min-height: 28px; padding-left: 0.375em;"><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px;"><span color="var(--tw-prose-bold)" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; font-weight: 600;">Packet Loss</span>: To simulate a 10% packet loss on the interface <code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 0.875em; font-weight: 600;">eth0</code>:</p><pre style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: currentcolor; font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 0.875em; line-height: 1.71429; margin-bottom: 0px; margin-top: 0px; overflow-x: auto; padding: 0px;"><div class="bg-black rounded-md mb-4" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: rgba(0,0,0,var(--tw-bg-opacity)); border-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin-bottom: 1rem;"><div class="flex items-center relative text-gray-200 bg-gray-800 px-4 py-2 text-xs font-sans justify-between rounded-t-md" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-text-opacity: 1; --tw-translate-x: 0; --tw-translate-y: 0; align-items: center; background-color: rgba(52,53,65,var(--tw-bg-opacity)); border-top-left-radius: 0.375rem; border-top-right-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: rgba(217,217,227,var(--tw-text-opacity)); display: flex; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 0.75rem; justify-content: space-between; line-height: 1rem; padding: 0.5rem 1rem; position: relative;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box;">bash</span><button class="flex ml-auto gap-2" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; appearance: button; background-image: none; border-color: rgb(217, 217, 227); border-style: solid; border-width: 0px; cursor: pointer; display: flex; font-family: inherit; font-size: 12px; font-weight: inherit; gap: 0.5rem; line-height: inherit; margin: 0px 0px 0px auto; padding: 0px;"><svg class="h-4 w-4" fill="none" height="1em" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="currentColor" viewbox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"></path><rect height="4" rx="1" ry="1" width="8" x="8" y="2"></rect></svg>Copy code</button></div><div class="p-4 overflow-y-auto" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; overflow-y: auto; padding: 1rem;"><code class="!whitespace-pre hljs language-bash" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: none; border-radius: 0.3em; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; hyphens: none; line-height: 1.5; overflow-wrap: normal; padding: 0.1em; tab-size: 4; white-space: normal; word-break: normal; word-spacing: normal;">tc qdisc add dev eth0 root netem loss 10%
</code></div></div></pre></li><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; counter-increment: list-number 1; display: block; margin-bottom: 0px; margin-top: 0px; min-height: 28px; padding-left: 0.375em;"><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px;"><span color="var(--tw-prose-bold)" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; font-weight: 600;">Combine Latency and Packet Loss</span>: To introduce both a delay of 100ms and a 10% packet loss:</p><pre style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: currentcolor; font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 0.875em; line-height: 1.71429; margin-bottom: 0px; margin-top: 0px; overflow-x: auto; padding: 0px;"><div class="bg-black rounded-md mb-4" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: rgba(0,0,0,var(--tw-bg-opacity)); border-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin-bottom: 1rem;"><div class="flex items-center relative text-gray-200 bg-gray-800 px-4 py-2 text-xs font-sans justify-between rounded-t-md" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-text-opacity: 1; --tw-translate-x: 0; --tw-translate-y: 0; align-items: center; background-color: rgba(52,53,65,var(--tw-bg-opacity)); border-top-left-radius: 0.375rem; border-top-right-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: rgba(217,217,227,var(--tw-text-opacity)); display: flex; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 0.75rem; justify-content: space-between; line-height: 1rem; padding: 0.5rem 1rem; position: relative;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box;">bash</span><button class="flex ml-auto gap-2" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; appearance: button; background-image: none; border-color: rgb(217, 217, 227); border-style: solid; border-width: 0px; cursor: pointer; display: flex; font-family: inherit; font-size: 12px; font-weight: inherit; gap: 0.5rem; line-height: inherit; margin: 0px 0px 0px auto; padding: 0px;"><svg class="h-4 w-4" fill="none" height="1em" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="currentColor" viewbox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"></path><rect height="4" rx="1" ry="1" width="8" x="8" y="2"></rect></svg>Copy code</button></div><div class="p-4 overflow-y-auto" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; overflow-y: auto; padding: 1rem;"><code class="!whitespace-pre hljs language-bash" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: none; border-radius: 0.3em; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; hyphens: none; line-height: 1.5; overflow-wrap: normal; padding: 0.1em; tab-size: 4; white-space: normal; word-break: normal; word-spacing: normal;">tc qdisc add dev eth0 root netem delay 100ms loss 10%
</code></div></div></pre></li><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; counter-increment: list-number 1; display: block; margin-bottom: 0px; margin-top: 0px; min-height: 28px; padding-left: 0.375em;"><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px;"><span color="var(--tw-prose-bold)" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; font-weight: 600;">Bandwidth Limitation</span>: To limit bandwidth to, say, 1mbit:</p><pre style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: currentcolor; font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 0.875em; line-height: 1.71429; margin-bottom: 0px; margin-top: 0px; overflow-x: auto; padding: 0px;"><div class="bg-black rounded-md mb-4" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: rgba(0,0,0,var(--tw-bg-opacity)); border-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin-bottom: 1rem;"><div class="flex items-center relative text-gray-200 bg-gray-800 px-4 py-2 text-xs font-sans justify-between rounded-t-md" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-text-opacity: 1; --tw-translate-x: 0; --tw-translate-y: 0; align-items: center; background-color: rgba(52,53,65,var(--tw-bg-opacity)); border-top-left-radius: 0.375rem; border-top-right-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: rgba(217,217,227,var(--tw-text-opacity)); display: flex; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 0.75rem; justify-content: space-between; line-height: 1rem; padding: 0.5rem 1rem; position: relative;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box;">bash</span><button class="flex ml-auto gap-2" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; appearance: button; background-image: none; border-color: rgb(217, 217, 227); border-style: solid; border-width: 0px; cursor: pointer; display: flex; font-family: inherit; font-size: 12px; font-weight: inherit; gap: 0.5rem; line-height: inherit; margin: 0px 0px 0px auto; padding: 0px;"><svg class="h-4 w-4" fill="none" height="1em" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="currentColor" viewbox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"></path><rect height="4" rx="1" ry="1" width="8" x="8" y="2"></rect></svg>Copy code</button></div><div class="p-4 overflow-y-auto" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; overflow-y: auto; padding: 1rem;"><code class="!whitespace-pre hljs language-bash" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: none; border-radius: 0.3em; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; hyphens: none; line-height: 1.5; overflow-wrap: normal; padding: 0.1em; tab-size: 4; white-space: normal; word-break: normal; word-spacing: normal;">tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms
</code></div></div></pre></li><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; counter-increment: list-number 1; display: block; margin-bottom: 0px; margin-top: 0px; min-height: 28px; padding-left: 0.375em;"><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px;"><span color="var(--tw-prose-bold)" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; font-weight: 600;">Removing the rules</span>: To remove the rules and return to normal:</p><pre style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; border-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: currentcolor; font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 0.875em; line-height: 1.71429; margin-bottom: 0px; margin-top: 0px; overflow-x: auto; padding: 0px;"><div class="bg-black rounded-md mb-4" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: rgba(0,0,0,var(--tw-bg-opacity)); border-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin-bottom: 1rem;"><div class="flex items-center relative text-gray-200 bg-gray-800 px-4 py-2 text-xs font-sans justify-between rounded-t-md" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-text-opacity: 1; --tw-translate-x: 0; --tw-translate-y: 0; align-items: center; background-color: rgba(52,53,65,var(--tw-bg-opacity)); border-top-left-radius: 0.375rem; border-top-right-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: rgba(217,217,227,var(--tw-text-opacity)); display: flex; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 0.75rem; justify-content: space-between; line-height: 1rem; padding: 0.5rem 1rem; position: relative;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box;">bash</span><button class="flex ml-auto gap-2" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; appearance: button; background-image: none; border-color: rgb(217, 217, 227); border-style: solid; border-width: 0px; cursor: pointer; display: flex; font-family: inherit; font-size: 12px; font-weight: inherit; gap: 0.5rem; line-height: inherit; margin: 0px 0px 0px auto; padding: 0px;"><svg class="h-4 w-4" fill="none" height="1em" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" stroke="currentColor" viewbox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"></path><rect height="4" rx="1" ry="1" width="8" x="8" y="2"></rect></svg>Copy code</button></div><div class="p-4 overflow-y-auto" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; overflow-y: auto; padding: 1rem;"><code class="!whitespace-pre hljs language-bash" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: none; border-radius: 0.3em; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: white; font-family: inherit; font-size: inherit; font-weight: inherit; hyphens: none; line-height: 1.5; overflow-wrap: normal; padding: 0.1em; tab-size: 4; white-space: normal; word-break: normal; word-spacing: normal;">tc qdisc del dev eth0 root
</code></div></div></pre></li></ol><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin: 1.25em 0px; white-space-collapse: preserve;">Additionally, there are other tools and utilities, such as:</p><ul style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; display: flex; flex-direction: column; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; list-style-image: initial; list-style-position: initial; margin: 1.25em 0px; padding: 0px; white-space-collapse: preserve;"><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: block; margin: 0px; min-height: 28px; padding-left: 0.375em;"><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px;"><span color="var(--tw-prose-bold)" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; font-weight: 600;">Comcast</span>: It's a tool that allows you to simulate bad network connections, so you can test your applications under various conditions.</p></li><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: block; margin: 0px; min-height: 28px; padding-left: 0.375em;"><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px;"><span color="var(--tw-prose-bold)" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; font-weight: 600;">NetEm</span>: It is actually an underlying tool (used in conjunction with <code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 0.875em; font-weight: 600;">tc</code>) that allows you to introduce various network impairments like delay, loss, duplication, and reordering.</p></li></ul><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin: 1.25em 0px 0px; white-space-collapse: preserve;">Always remember, if you're going to apply any of these changes to a live system, especially one serving real users or critical functions, take care to ensure you understand the implications and have a rollback plan. Also, testing in a controlled environment first is always a good idea.</p><br /><br /><br /><a href="https://wiki.linuxfoundation.org/networking/iproute2">https://wiki.linuxfoundation.org/networking/iproute2</a><br /><br /><a href="https://github.com/shemminger/iproute2">https://github.com/shemminger/iproute2</a><div><br /></div><div><br /></div><div><a href="https://github.com/tylertreat/comcast">https://github.com/tylertreat/comcast</a></div><div><br /></div><div><br /></div><div><h1 dir="auto" style="background-color: white; border-bottom: 1px solid var(--borderColor-muted, var(--color-border-muted)); box-sizing: border-box; color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-weight: var(--base-text-weight-semibold, 600); line-height: 1.25; margin-bottom: 16px; margin-left: 0px; margin-right: 0px; margin-top: 0px !important; padding-bottom: 0.3em;" tabindex="-1">Comcast</h1><p dir="auto" style="background-color: white; box-sizing: border-box; color: #1f2328; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; margin-bottom: 16px; margin-top: 0px;">Testing distributed systems under hard failures like network partitions and instance termination is critical, but it's also important we test them under <a href="http://www.bravenewgeek.com/sometimes-kill-9-isnt-enough/" rel="nofollow" style="background-color: transparent; box-sizing: border-box; text-decoration-line: none;">less catastrophic conditions</a> because this is what they most often experience. Comcast is a tool designed to simulate common network problems like latency, bandwidth restrictions, and dropped/reordered/corrupted packets.</p></div>John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-56248654429263322052023-08-27T09:14:00.001-07:002023-08-27T09:14:28.381-07:00TTL Apple 2 computer. No 6502 required.<iframe frameborder="0" height="270" src="https://youtube.com/embed/mo9VvPProoY?si=BMD7vyVFJZtuvt8C" width="480"></iframe><div><br /></div><div>just amazing building the cpu from the ground up. </div>John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-52964442115321222622023-08-03T11:43:00.003-07:002023-08-03T11:43:27.100-07:00Sun SPARC binaries back to C source code<p>from <span style="background-color: #fec925; color: #0d0d0d; font-family: Helvetica, ui-sans-serif, "system-ui", sans-serif; font-size: 13px; font-weight: 600;">h2oGPT [Model: llama]</span> </p><p><span style="background-color: #f8f8f8; color: #333333; font-family: Helvetica, ui-sans-serif, "system-ui", sans-serif; font-size: 16px;">Yes, it is possible to reverse compile Sun SPARC binaries back to C source code using a tool called "objdump". Objdump is a command-line utility that comes with most Unix-like operating systems and can be used to disassemble machine code into assembly code or source code.</span></p><p style="background-color: #f8f8f8; border-style: solid; border-width: 0px; box-sizing: border-box; color: #333333; font-family: Helvetica, ui-sans-serif, "system-ui", sans-serif; font-size: 16px; margin: 0px;">Here's an example of how to use objdump to reverse compile a Sun SPARC binary:</p><ol style="background-color: #f8f8f8; border-style: solid; border-width: 0px; box-sizing: border-box; color: #333333; font-family: Helvetica, ui-sans-serif, "system-ui", sans-serif; font-size: 16px; margin: 0px; padding-inline-start: 2em; padding: 0px;"><li style="border-style: solid; border-width: 0px; box-sizing: border-box;">First, you need to find the binary file you want to reverse compile. Let's assume you have a binary file called "myprogram" that you want to reverse compile.</li><li style="border-style: solid; border-width: 0px; box-sizing: border-box;">Open a terminal and navigate to the directory where your binary file is located.</li><li style="border-style: solid; border-width: 0px; box-sizing: border-box;">Use the following command to disassemble the binary file into assembly code:<br style="border-style: solid; border-width: 0px; box-sizing: border-box;" />objdump -D myprogram<br style="border-style: solid; border-width: 0px; box-sizing: border-box;" />This will produce an assembly code file called "myprogram.s" that contains the assembly code for the binary program.</li><li style="border-style: solid; border-width: 0px; box-sizing: border-box;">To reverse compile the assembly code back to C source code, you can use a tool called "gas". Gas is a GNU assembler that can take assembly code as input and generate C source code as output.<br style="border-style: solid; border-width: 0px; box-sizing: border-box;" />Use the following command to reverse compile the assembly code:<br style="border-style: solid; border-width: 0px; box-sizing: border-box;" />gas -C myprogram.s -o myprogram.c<br style="border-style: solid; border-width: 0px; box-sizing: border-box;" />This will produce a C source code file called "myprogram.c" that contains the original C source code for the program.<br style="border-style: solid; border-width: 0px; box-sizing: border-box;" />Note: The -C option tells gas to generate C source code, and the -o option specifies the output file name.</li><li style="border-style: solid; border-width: 0px; box-sizing: border-box;">Finally, you can compile the C source code using a C compiler like GCC to produce an executable file.<br style="border-style: solid; border-width: 0px; box-sizing: border-box;" />For example, you can use the following command:<br style="border-style: solid; border-width: 0px; box-sizing: border-box;" />gcc -o myprogram myprogram.c<br style="border-style: solid; border-width: 0px; box-sizing: border-box;" />This will produce an executable file called "myprogram" that runs the original program.<br style="border-style: solid; border-width: 0px; box-sizing: border-box;" />It's worth noting that the reverse compilation process may not always work perfectly, especially if the binary code has been heavily optimized or obfuscated. In some cases, the resulting C source code may contain errors or be difficult to understand. Therefore, it's important to use objdump and gas with caution and only for educational or debugging purposes.</li></ol><div><span style="color: #333333; font-family: Helvetica, ui-sans-serif, system-ui, sans-serif;"><br /></span></div><div><span style="color: #333333; font-family: Helvetica, ui-sans-serif, system-ui, sans-serif;">(ChatGPT4) - response to the above</span></div><div><span style="color: #333333; font-family: Helvetica, ui-sans-serif, system-ui, sans-serif;"><br /></span></div><div><div class="separator" style="background-color: #f7f7f8; clear: both; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; text-align: center; white-space-collapse: preserve;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiFSkDvBhrvXud2AMLCAPCdLF2-JBzOE72RqQM9FbOV_LX6kAcbjbmg_oF0ux0KRTumgGu-J9ly-qcnNjzL6Vnk44dXLwEQWxvFAfAHK50O9mzkGyA5w11slb4flFTTsmxFfSs0dSyaaboTnFpdSNGAwJyQ0PXk4wYPZt2tOMOOj0swbhLMvzMp" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="33" data-original-width="35" src="https://blogger.googleusercontent.com/img/a/AVvXsEiFSkDvBhrvXud2AMLCAPCdLF2-JBzOE72RqQM9FbOV_LX6kAcbjbmg_oF0ux0KRTumgGu-J9ly-qcnNjzL6Vnk44dXLwEQWxvFAfAHK50O9mzkGyA5w11slb4flFTTsmxFfSs0dSyaaboTnFpdSNGAwJyQ0PXk4wYPZt2tOMOOj0swbhLMvzMp=s16000" /></a></div><br style="background-color: #f7f7f8; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; white-space-collapse: preserve;" /></div><div><span style="color: #333333; font-family: Helvetica, ui-sans-serif, system-ui, sans-serif;"><br /></span></div><div><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin: 0px 0px 1.25em; white-space-collapse: preserve;">I'm afraid there might be some misunderstanding here. <code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace !important; font-size: 0.875em; font-weight: 600;">objdump</code> and <code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace !important; font-size: 0.875em; font-weight: 600;">gas</code> do not work quite as described in your example. Allow me to clarify:</p><ul style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; display: flex; flex-direction: column; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; list-style-image: initial; list-style-position: initial; margin: 1.25em 0px; padding: 0px; white-space-collapse: preserve;"><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: block; margin: 0px; min-height: 28px; padding-left: 0.375em;"><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px;"><code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace !important; font-size: 0.875em; font-weight: 600;">objdump</code> is indeed a very powerful tool, but it's not a decompiler. It can disassemble binary code into assembly code, not into C source code. The assembly output can be used for further reverse-engineering tasks, but turning that into high-level C code is a much more complex task. There's no direct option in <code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace !important; font-size: 0.875em; font-weight: 600;">objdump</code> to generate C source code from a binary or assembly.</p></li><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: block; margin: 0px; min-height: 28px; padding-left: 0.375em;"><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px;"><code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace !important; font-size: 0.875em; font-weight: 600;">gas</code>, the GNU Assembler, is used to convert assembly language into machine code, not to convert assembly into C code. It cannot generate C code from assembly code.</p></li></ul><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin: 1.25em 0px; white-space-collapse: preserve;">There are decompilers available that attempt to generate high-level language code (such as C) from binary, but they are often complex to use, imperfect, and the output requires a fair amount of manual interpretation and reworking. For example, Ghidra, an open-source software reverse engineering suite developed by the NSA, includes decompiling capabilities.</p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin: 1.25em 0px; white-space-collapse: preserve;">Recompiling the decompiled C code also does not ensure the same functionality, as many details about the original implementation can be lost during the initial compile process (such as variable names, specific optimization decisions, etc.).</p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin: 1.25em 0px 0px; white-space-collapse: preserve;">Please also note the legal and ethical implications of decompiling software, as I mentioned in my previous response.</p><div class="flex-shrink-0 flex flex-col relative items-end" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; align-items: flex-end; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #343541; display: flex; flex-direction: column; flex-shrink: 0; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; position: relative;"><div class="w-[30px]" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; width: 30px;"><div class="relative flex" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: flex; position: relative;"><br /></div></div><div class="text-xs flex items-center justify-center gap-1 invisible absolute left-0 top-2 -ml-4 -translate-x-full group-hover:visible !invisible" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: -100%; --tw-translate-y: 0; align-items: center; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: flex; font-size: 0.75rem; gap: 0.25rem; justify-content: center; left: 0px; line-height: 1rem; margin-left: -1rem; position: absolute; top: 0.5rem; transform: translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); visibility: visible;"><button class="dark:text-white disabled:text-gray-300 dark:disabled:text-gray-400" disabled="" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-text-opacity: 1; --tw-translate-x: 0; --tw-translate-y: 0; appearance: button; background-image: none; border-color: rgb(217, 217, 227); border-style: solid; border-width: 0px; font-family: inherit; font-size: 12px; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px;"><svg class="h-3 w-3" fill="none" height="1em" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" stroke="currentColor" viewbox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><polyline points="15 18 9 12 15 6"></polyline></svg></button><span class="flex-grow flex-shrink-0" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; flex-grow: 1; flex-shrink: 0;"></span><button class="dark:text-white disabled:text-gray-300 dark:disabled:text-gray-400" disabled="" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-text-opacity: 1; --tw-translate-x: 0; --tw-translate-y: 0; appearance: button; background-image: none; border-color: rgb(217, 217, 227); border-style: solid; border-width: 0px; font-family: inherit; font-size: 12px; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px;"><svg class="h-3 w-3" fill="none" height="1em" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" stroke="currentColor" viewbox="0 0 24 24" width="1em" xmlns="http://www.w3.org/2000/svg"><polyline points="9 18 15 12 9 6"></polyline></svg></button></div></div><div class="relative flex w-[calc(100%-50px)] flex-col gap-1 md:gap-3 lg:w-[calc(100%-115px)]" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #343541; display: flex; flex-direction: column; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; gap: 0.75rem; position: relative; width: calc(100% - 115px);"><div class="flex flex-grow flex-col gap-3" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: flex; flex-direction: column; flex-grow: 1; gap: 0.75rem;"><div class="min-h-[20px] flex flex-col items-start gap-3 overflow-x-auto whitespace-pre-wrap break-words" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; align-items: flex-start; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; display: flex; flex-direction: column; gap: 0.75rem; min-height: 20px; overflow-wrap: break-word; overflow-x: auto; white-space-collapse: preserve;"><div class="empty:hidden" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box;">ME: Are there Sparc decompilers by now?</div></div></div></div><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 1.25em 0px 0px;"><span style="color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, Helvetica Neue, Arial, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;"><span style="white-space-collapse: preserve;"></span></span></p><div class="separator" style="clear: both; text-align: center;"><span style="color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, Helvetica Neue, Arial, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiFSkDvBhrvXud2AMLCAPCdLF2-JBzOE72RqQM9FbOV_LX6kAcbjbmg_oF0ux0KRTumgGu-J9ly-qcnNjzL6Vnk44dXLwEQWxvFAfAHK50O9mzkGyA5w11slb4flFTTsmxFfSs0dSyaaboTnFpdSNGAwJyQ0PXk4wYPZt2tOMOOj0swbhLMvzMp" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="33" data-original-width="35" src="https://blogger.googleusercontent.com/img/a/AVvXsEiFSkDvBhrvXud2AMLCAPCdLF2-JBzOE72RqQM9FbOV_LX6kAcbjbmg_oF0ux0KRTumgGu-J9ly-qcnNjzL6Vnk44dXLwEQWxvFAfAHK50O9mzkGyA5w11slb4flFTTsmxFfSs0dSyaaboTnFpdSNGAwJyQ0PXk4wYPZt2tOMOOj0swbhLMvzMp=s16000" /></a></span></div><span style="color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, Helvetica Neue, Arial, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;"><br /><br /></span><p></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 1.25em 0px 0px;"><span style="color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, Helvetica Neue, Arial, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;"><span style="white-space-collapse: preserve;">As of my last training data in September 2021, there were no decompilers specifically designed for the SPARC architecture that could generate high-level C code. However, you may use disassemblers like objdump or radare2 to translate machine code into assembly instructions for analysis and understanding.
For decompiling to higher level languages like C, one of the more powerful tools is Ghidra, developed by the National Security Agency (NSA) of the United States. Ghidra supports a wide range of processor instruction sets and executable formats, but you would need to check if it has updated to support the SPARC architecture specifically.
Please remember that decompiling is a complex process and the output will not look like the original C code. Much information (such as variable names, comments, and specific structure of the original code) is lost during compilation, and won't be restored by decompilation.
Moreover, remember the legal and ethical implications of decompiling software without explicit permission. Decompiling is considered a form of reverse engineering and can potentially infringe copyright laws or end-user license agreements.
</span></span><span style="color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; white-space-collapse: preserve;">
</span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin: 1.25em 0px 0px; white-space-collapse: preserve;"><br /></p></div>John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-86973802178829768612023-03-20T11:52:00.000-07:002023-03-20T11:52:03.203-07:00Tiny Windows 10 & windows 11<p> </p><p><span style="background-color: white; color: #2c2c2c; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 30px; white-space: pre-wrap;">Tiny10-21h2-x64,x86-NTDEV</span></p><p><span style="background-color: white; color: #2c2c2c; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px;">Tiny10 21H2 2209 by NTDV</span></p><div style="background-color: white; box-sizing: border-box; color: #2c2c2c; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px;"><div style="box-sizing: border-box;">newer version of Tiny10 that includes Microsoft Edge and other features</div><div style="box-sizing: border-box;">includes both 64 bit and 32bit ISOs.</div><div style="box-sizing: border-box;">taken from <a href="https://youtu.be/4cF3UW5W980">https://youtu.be/4cF3UW5W980</a></div></div><p><a href="https://archive.org/details/tiny-10-21h2-x64-2209">https://archive.org/details/tiny-10-21h2-x64-2209</a></p><p><br /></p><p><br /></p><p><br /></p><p><a href="https://www.youtube.com/watch?v=g8Bl6rUNx8w">https://www.youtube.com/watch?v=g8Bl6rUNx8w</a><br /><span style="background-color: rgba(0, 0, 0, 0.05); color: #0f0f0f; font-family: Roboto, Arial, sans-serif; font-size: 14px; white-space: pre-wrap;">A few months ago, we took a look at Tiny10, which was based off of Windows 10 Enterprise LTSC 2019. However, since then, NTDEV has released Tiny10 21H2, which is based off LTSC 2021. In this video, we'll be taking a look at Tiny10 21H2 and seeing how it compares to the original version.</span></p><p><br /></p><p><a href="https://twitter.com/NTDEV_/status/1505656808576372753">https://twitter.com/NTDEV_/status/1505656808576372753</a> Download link are dead, get from Archive.org above.</p><p>This related to Tiny11. </p><p><a href="https://hackaday.com/2023/02/21/tiny11-makes-windows-11-small/">https://hackaday.com/2023/02/21/tiny11-makes-windows-11-small/</a></p><p><a href="https://archive.org/details/tiny-11_202302">https://archive.org/details/tiny-11_202302</a></p><p><br /></p><p>Youtube channel of guy who's building these. </p><p><a href="https://www.youtube.com/ntdev">https://www.youtube.com/ntdev</a></p>John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-51061235417237957712023-03-10T21:35:00.004-08:002023-03-10T21:35:13.072-08:00Why DOS Was (and Is) a Thing<iframe width="480" height="270" src="https://youtube.com/embed/3E5Hog5OnIM" frameborder="0"></iframe>John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-4390046674593527282023-02-18T22:46:00.001-08:002023-02-18T22:46:43.483-08:00How did Elon Musk end up owning x.com?<p><br /></p><p>I ran this through ChatGPT, so far it looks like it might be accurate. </p><p><br /></p><p><b>How did Elon Musk end up owning x.com?</b></p><p></p><blockquote><p>In 1999, Elon Musk founded a company called X.com, which was an online payment company that eventually became PayPal. At that time, Musk was the majority shareholder and CEO of the company.</p><p>As part of the company's branding efforts, Musk wanted to secure the domain name X.com. He initially tried to buy it from its owner, a man named Jack Selby, but Selby wasn't interested in selling. Instead, Selby suggested that they <span style="background-color: #ffd966;">play a game of "extreme poker"</span> to determine who would get the domain name.</p><p>According to Musk, they played the game, and Musk won, which allowed him to take control of the X.com domain. Musk later sold PayPal to eBay for $1.5 billion in 2002, and he retained ownership of the X.com domain.</p><p>In 2017, Musk announced that he had reacquired the domain name X.com, but he has not yet announced any specific plans for how he intends to use it.</p></blockquote><p> </p><p><b>How did Jack Selby end up with X.com before Elon?</b></p><p></p><blockquote><p>X.com was initially registered in 1987 by a software engineer named Elizabeth Feinler, who was responsible for assigning domain names and IP addresses at the time. The domain name was used for a variety of purposes over the years, including as an email service for members of the online community The WELL.</p><p>In the late 1990s, the domain name was acquired by a company called Confinity, which was co-founded by Max Levchin, Peter Thiel, and Luke Nosek. Confinity created a product called PayPal, which was an online payment system, and in 1999, the company was renamed PayPal.</p><p>Around this time, Jack Selby, who was an early PayPal employee and a friend of Elon Musk, became the manager of the X.com domain. Selby was responsible for maintaining the domain and managing its DNS records.</p><p>When Musk founded X.com in 1999, he wanted to use the X.com domain name for his new company, but it was already in use by PayPal. Musk eventually convinced Selby to transfer ownership of the X.com domain to him so that he could use it for his new venture.</p></blockquote><p></p>John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-16367587000287392492023-02-12T16:37:00.008-08:002023-02-12T19:18:58.002-08:00Tox, secure open source P2P communication<div><br /></div><div>Decentralized Skype</div><div><br /></div><iframe frameborder="0" height="270" src="https://youtube.com/embed/kA3jtFTFm5I" width="480"></iframe><div><br /></div><div><br /></div><div><a href="https://tox.chat/">https://tox.chat/</a></div><div><br /></div><div><a href="https://github.com/JFreegman/toxic">https://github.com/JFreegman/toxic</a></div><div><br /></div><div><a href="https://github.com/TokTok/c-toxcore">https://github.com/TokTok/c-toxcore</a></div><div><br /></div><div><a href="https://media.ccc.de/v/glt19-51-tox-secure-open-source-p2p-communication">https://media.ccc.de/v/glt19-51-tox-secure-open-source-p2p-communication</a></div><div><br /></div><div><br /></div><div>Tox uses UDP for its underlying transport protocol. Tox was designed to be lightweight, fast, and secure, and using UDP helps to achieve these goals. Unlike TCP, which is a reliable transport protocol that requires that all packets be acknowledged, UDP is an unreliable protocol that does not guarantee delivery of packets. This means that packets can be lost or arrive out of order, but it also means that UDP is faster and less resource-intensive than TCP.</div><div><br /></div><div><div>In Tox, the well-known servers that are used to start the initial communications are called bootstrap nodes. The bootstrap nodes are publicly accessible servers that are run by Tox community members and are used by Tox clients to join the Tox network and find other Tox clients.</div><div><br /></div><div>When a Tox client starts up for the first time, it connects to one or more bootstrap nodes and uses them to join the Tox Distributed Hash Table (DHT). The DHT is a decentralized, distributed database that is used by Tox clients to find and connect to each other. Once the client has joined the DHT, it can use it to find other Tox clients and to publish its own IP address and public key so that other clients can find and connect to it.</div></div><div><br /></div><div><a href="https://nodes.tox.chat/">https://nodes.tox.chat/</a></div><div><br /></div><div><br /></div><div><br /></div><div>Python3 client. </div><div><a href="https://github.com/toxygen-project/toxygen">https://github.com/toxygen-project/toxygen</a></div><div><br /></div><div>Java Client. </div><div><a href="https://github.com/TokTok/jtox">https://github.com/TokTok/jtox</a></div>John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-21145612195088850392023-02-07T21:52:00.004-08:002023-02-07T21:52:33.783-08:00Decentralized Storage and p2p databases. <br /><br /><a href="https://www.youtube.com/watch?v=AbvxEOG2EWU">https://www.youtube.com/watch?v=AbvxEOG2EWU<br /></a><br />Decentralized Storage Summit 2019 <div>Moderator: Raymond Cheng (former CTO at Oasis Labs) </div><div>GunDB: Mark Nadal </div><div>Textile: Carson Farmer </div><div>Fluence: Dmitry Kurinskiy </div><div>VulcanizeDB: Rick Dudley</div><div><br /></div><div><br /></div><div><a href="https://gun.eco/">https://gun.eco/</a><br />GunDB: GunDB ii an open-source, decentralized, NoSQL database, real-time, distributed database that is written in JavaScript. It provides a simple and intuitive API for storing and retrieving data. GunDB is designed to be highly scalable, easy to use, and secure, making it a good choice for a wide range of applications, including social networks, messaging apps, and other real-time applications.</div><div><br /><a href="https://github.com/textileio/go-threads">https://github.com/textileio/go-threads</a><br /><a href="https://docs.textile.io/threads/">https://docs.textile.io/threads/<br /></a>Textile: Server-less p2p database built on libp2p. Textile is a decentralized, end-to-end encrypted, and peer-to-peer database that provides a simple and intuitive API for storing and retrieving data. Textile is designed to be highly secure, with end-to-end encryption, and is a good choice for applications that require a high degree of privacy and security, such as healthcare or financial applications.<br /><br /><a href="https://fluence.network/">https://fluence.network/</a><br />Fluence: Fluence is a decentralized, <b>blockchain-based</b> database that provides a simple and intuitive API for storing and retrieving data. Fluence is designed to be highly scalable, secure, and fast, making it a good choice for applications that require a high degree of reliability, such as financial applications.<br /><br /><a href="https://github.com/vulcanize/vulcanizedb">https://github.com/vulcanize/vulcanizedb</a><br />VulcanizeDB: VulcanizeDB is a <b>blockchain-based</b> database that provides a simple and intuitive API for storing and retrieving data. VulcanizeDB is designed to be highly scalable, secure, and fast, making it a good choice for applications that require a high degree of reliability, such as financial applications.<br /><br /><br /></div><div><br /></div><div><a href="https://github.com/orbitdb/orbit-db">https://github.com/orbitdb/orbit-db</a></div><div>OrbitDB: OrbitDB is an open-source, decentralized, NoSQL database that is built on top of <b>IPFS</b>. It uses a distributed peer-to-peer network to store and manage data, making it a highly scalable and secure option for decentralized applications. </div><div><br /></div><div><br /></div><div><br /></div><div><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin: 0px 0px 1.25em; white-space: pre-wrap;">GUN vs. OrbitDB </p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin: 1.25em 0px; white-space: pre-wrap;">GUN (Graph Universe Network) has been around since 2016 and is focused on providing a simple and intuitive API for building decentralized apps. It uses a novel data structure called the "Radix tree" for storing data, which enables GUN to handle large amounts of data and maintain a high level of performance even in decentralized scenarios. GUN is designed to be easy to use, and it doesn't require a deep understanding of blockchain technology.</p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin: 1.25em 0px; white-space: pre-wrap;">OrbitDB is a database on IPFS (InterPlanetary File System), and it uses a distributed ledger technology (DLT) called IPDB (InterPlanetary Database) for data storage. OrbitDB provides a higher level of control over data storage, consistency, and versioning compared to GUN. OrbitDB is designed for more complex use cases, and it requires a deeper understanding of the underlying technology.</p></div><div><br /></div><div><br />IPFS: IPFS (InterPlanetary File System) is a decentralized, peer-to-peer file storage network that is written in JavaScript. It allows users to store and share files on a distributed network, making it a secure and scalable option for decentralized applications. <br /><br /><div>Accessing <b>IPFS (InterPlanetary File System)</b> does require a proxy server. IPFS is a decentralized peer-to-peer file storage network, and it doesn't have a centralized server to access its content. To access IPFS content, you need to use a gateway or a proxy server that acts as an intermediary between your client and the IPFS network.</div><div><br /></div><div>There are several public IPFS gateways that you can use for free, such as ipfs.io, gateway.ipfs.io, and many others. These gateways allow you to access IPFS content by simply specifying the hash of the content in the URL. For example, you can access a file stored on IPFS using a URL like this: https://ipfs.io/ipfs/<hash>.</div><div><br /></div><div>You can also run your own IPFS gateway if you need more control over the access to your IPFS content. This requires setting up an IPFS node and configuring it as a gateway. This option may be more suitable for applications that require more control over the access to the content, higher performance, or lower latency.</div><br /><br /><br /><br /><div><br /></div><div><a href="https://github.com/beakerbrowser/beaker">https://github.com/beakerbrowser/beaker</a></div><div>Beaker: Beaker is an open-source, decentralized browser that provides a built-in database for storing and retrieving data. It uses a peer-to-peer network to store and manage data, making it a highly scalable and secure option for decentralized applications.<br /><span style="background-color: white; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px;"></span><blockquote><span style="background-color: white; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px;">Hi friends! This won't come as a huge shock, but the time has finally come that I archive the Beaker Browser repo. In 2022 I moved on to working at </span><a href="https://blueskyweb.xyz/" rel="nofollow" style="background-color: white; box-sizing: border-box; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px; text-decoration-line: none;">Bluesky</a><span style="background-color: white; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px;">, and, while the Beaker project is coming to an official end, the heart of Beaker continues with Bluesky. I hope the work we do will make Beaker's end a little less painful in the long run.</span></blockquote><div><span style="background-color: white; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px;"><br /></span></div><span style="background-color: white; color: #24292f; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px;"></span></div><br /></div>John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-37255969716095950822023-02-07T05:35:00.008-08:002023-02-07T05:35:39.730-08:00Free Online FPGA simulator. <p><br /></p><p>Just like the Online html.css.js editor and test environments, I found one for FPGA hardware development</p><p><br /></p><p> <a href="https://www.edaplayground.com/">https://www.edaplayground.com/</a></p><p><br /></p><p><br /></p><p>LEARN FPGA FAST WITH HACKADAY’S FPGA BOOT CAMP</p><p><a href="https://hackaday.io/project/159720-fpga-bootcamp-0">https://hackaday.io/project/159720-fpga-bootcamp-0</a></p><p><a href="https://hackaday.io/project/159191-fpga-bootcamp-1">https://hackaday.io/project/159191-fpga-bootcamp-1</a></p><p><a href="https://hackaday.io/project/159216-fpga-bootcamp-2">https://hackaday.io/project/159216-fpga-bootcamp-2</a></p><p><a href="https://hackaday.io/project/159692-fpga-bootcamp-3">https://hackaday.io/project/159692-fpga-bootcamp-3</a></p>John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-60969812483995649702023-02-06T17:27:00.000-08:002023-02-06T17:27:52.092-08:00Online Hybrid Mobile App development & hosting<p>Both of these are a bit more serious in that you need a real account before you an play with code.</p><p><a href="http://replit.com">replit.com</a><br />Replit is a web-based platform that provides a coding environment for various programming languages, including JavaScript. It allows developers to quickly write, run, and share code snippets, small projects, and full applications with others. It provides a basic text editor and a command-line interface to run code, and allows you to save your projects to the cloud.</p><p><a href="https://replit.com/site/hosting">https://replit.com/site/hosting</a></p><p><br /></p><p><a href="http://expo.dev">expo.dev </a><br />Expo, on the other hand, is a free and open-source platform for building native mobile apps using JavaScript and React Native. It provides a development environment, build tools, and a library of pre-built components and services that help you build and deploy your apps to both iOS and Android platforms. Expo also provides an online client, which is similar to Replit, for writing and testing your React Native code in the browser.</p><p><br /></p><p><a href="https://codepen.io">https://codepen.io</a><br />CodePen: a social development environment for front-end developers. It allows you to write, test, and share your HTML, CSS, and JavaScript code snippets.</p><p>A processing p5.js example<br /><a href="https://codepen.io/johnsokol/pen/eYMgjgV">https://codepen.io/johnsokol/pen/eYMgjgV</a></p><p><br /></p><p><a href="https://glitch.com/">https://glitch.com/</a><br />Glitch: a web-based platform that provides a full-featured code editor and a development environment for various programming languages, including JavaScript. It also provides a simple way to host and share your web apps.<br />play with React, or build new worlds with WebXR. </p><p><br /></p><p><a href="https://jsfiddle.net/7u84j6kp/">https://jsfiddle.net</a><br />JSFiddle: a web-based platform that allows you to write, test, and share your HTML, CSS, and JavaScript code snippets.</p><p>Three.js example<br /><a href="https://jsfiddle.net/7u84j6kp/">https://jsfiddle.net/7u84j6kp/</a></p><p><br /></p><p><a href="https://stackblitz.com/">https://stackblitz.com/<br /></a>StackBlitz: a web-based development environment that provides a full-featured code editor and a live preview of your code. It supports multiple programming languages, including JavaScript.</p><p><br /></p><p><a href="https://codesandbox.io/">https://codesandbox.io/</a><br />CodeSandbox is an online code editor and development environment for web applications. It provides a simple way to write, run, and share your web projects, including full-stack applications, React and React Native apps, and more. CodeSandbox supports multiple programming languages, including JavaScript, HTML, and CSS, and provides a live preview of your code as you type. It also integrates with popular tools and libraries, such as GitHub, and allows you to share your projects with others by providing a unique URL. CodeSandbox is often compared to other online development environments like Replit and JSFiddle, but it is specifically geared towards web development.</p><p><br /></p><p><a href="https://monaca.io/">https://monaca.io/<br /></a>Monaca: a cloud-based platform that provides a complete development environment for Cordova app development, including a code editor, debugging tools, and live-reload functionality.</p><p>https://en.wikipedia.org/wiki/Monaca_(software)<br /><br /><br /><br /><a href="https://codeanywhere.com/">https://codeanywhere.com/<br /></a>Codeanywhere is a cross-platform cloud integrated development environment created by Codeanywhere, Inc. Codeanywhere enables users to write, edit, collaborate, and run web development projects from a web browser or mobile device. Codeanywhere is written in JavaScript</p><p>Codeanywhere: a cloud-based development environment that provides a code editor, file management, and collaboration tools, as well as support for Cordova app development.</p><p><br /></p><p><br /></p>John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-17194813900445435432023-02-05T12:34:00.004-08:002023-02-05T12:34:53.248-08:00How would I just insert my three.js visualization in to a react native app?<p><br /></p><p><br /></p><p>So I found this website that had a real time editor for react native apps </p><p><a href="https://expo.dev/">https://expo.dev/</a></p><p><a href="https://snack.expo.dev/@johnsokol/basic-ar-with-three.js">https://snack.expo.dev/@johnsokol/basic-ar-with-three.js</a></p><p>Except every demo was broken and failed. No amount of debugging would bring any back to life. </p><p>I update the library version and security things break just one problem after the next. </p><p>I am really upset with it really because it's so cool if it actually worked. </p><p>I tried the gyro, magnetometer, light sensor, all just read 0... Zip nada. </p><p>three.js just will not run for anything. <br /><br />This one is working after mashing library version numbers for 2 hours: <br /><a href="https://snack.expo.dev/@johnsokol/react-three-fiber-example">https://snack.expo.dev/@johnsokol/react-three-fiber-example</a> </p><p>It react native itself broken? or just expo? and it expo a library or this website?</p><p><br /></p><p>Response from ChatGPT. </p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin: 0px 0px 1.25em; white-space: pre-wrap;">In order to integrate a Three.js visualization into a React Native app, you will need to wrap your Three.js code in a React Native component. Here are the steps you can follow:</p><ol style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; counter-reset: item 0; display: flex; flex-direction: column; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; list-style-image: initial; list-style-position: initial; margin: 1.25em 0px; padding: 0px 0px 0px 1rem; white-space: pre-wrap;"><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;"><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px;">Install the react-three-fiber library: React-three-fiber is a React renderer for Three.js that makes it easy to use Three.js in React Native. You can install it using npm by running the following command: <code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace !important; font-size: 0.875em; font-weight: 600;">npm install react-three-fiber</code>.</p></li><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;"><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px;">Create a React Native component: Create a new React Native component that will render your Three.js visualization. You can use the <code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace !important; font-size: 0.875em; font-weight: 600;">useThree</code> hook provided by react-three-fiber to access the Three.js renderer and scene.</p></li><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;"><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px;">Wrap your Three.js code: Wrap your existing Three.js code in the React Native component you created in step 2. You can use the <code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace !important; font-size: 0.875em; font-weight: 600;">Canvas</code> component provided by react-three-fiber to create a Three.js renderer, and the <code style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: var(--tw-prose-code); font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace !important; font-size: 0.875em; font-weight: 600;">useRender</code> hook to trigger updates to your Three.js scene.</p></li><li style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px; padding-left: 0.375em;"><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin: 0px;">Import the React Native component: Import the React Native component you created in step 2 into your main React Native app, and use it to render your Three.js visualization.</p></li></ol><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin: 1.25em 0px; white-space: pre-wrap;">Here is an example of what your React Native component might look like:</p><pre style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace !important; font-size: 0.875em; line-height: 1.71429; margin-bottom: 0px; margin-top: 0px; overflow-x: auto; padding: 0px;"><div class="bg-black mb-4 rounded-md" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: rgba(0,0,0,var(--tw-bg-opacity)); border-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin-bottom: 1rem;"><div class="flex items-center relative text-gray-200 bg-gray-800 px-4 py-2 text-xs font-sans" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-text-opacity: 1; --tw-translate-x: 0; --tw-translate-y: 0; align-items: center; background-color: rgba(52,53,65,var(--tw-bg-opacity)); border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: rgba(217,217,227,var(--tw-text-opacity)); display: flex; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 0.75rem; line-height: 1rem; padding: 0.5rem 1rem; position: relative;"><span class="" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box;">javascript</span></div><div class="p-4 overflow-y-auto" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; overflow-y: auto; padding: 1rem;"><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">import</span><span style="color: white;"> </span><span class="hljs-title class_" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d;">React</span><span style="color: white;"> </span><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">from</span><span style="color: white;"> </span><span class="hljs-string" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d;">'react'</span><span style="color: white;">;
</span><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">import</span><span style="color: white;"> { </span><span class="hljs-title class_" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d;">Canvas</span><span style="color: white;">, useThree } </span><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">from</span><span style="color: white;"> </span><span class="hljs-string" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d;">'react-three-fiber'</span><span style="color: white;">;
</span><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">const</span><span style="color: white;"> </span><span class="hljs-title function_" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d;">ThreeJSVisualization</span><span style="color: white;"> = (</span><span class="hljs-params" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: white;"></span><span style="color: white;">) => {
</span><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">const</span><span style="color: white;"> { gl, scene, camera } = </span><span class="hljs-title function_" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d;">useThree</span><span style="color: white;">();
</span><span class="hljs-comment" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: rgba(255, 255, 255, 0.5);">// Your Three.js code here</span><span style="color: white;">
</span><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">return</span><span style="color: white;"> (
</span><span class="xml" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: white;"><span class="hljs-tag" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box;"><<span class="hljs-name" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box;">Canvas</span> <span class="hljs-attr" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #df3079;">gl</span>=<span class="hljs-string" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d;">{gl}</span> <span class="hljs-attr" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #df3079;">camera</span>=<span class="hljs-string" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d;">{camera}</span>></span>
<span class="hljs-tag" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box;"><<span class="hljs-name" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box;">ambientLight</span> /></span>
<span class="hljs-tag" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box;"><<span class="hljs-name" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box;">pointLight</span> <span class="hljs-attr" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #df3079;">position</span>=<span class="hljs-string" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #00a67d;">{[10,</span> <span class="hljs-attr" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #df3079;">10</span>, <span class="hljs-attr" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #df3079;">10</span>]} /></span>
{/* Your Three.js scene here */}
<span class="hljs-tag" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box;"></<span class="hljs-name" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box;">Canvas</span>></span></span><span style="color: white;">
);
};
</span><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">export</span><span style="color: white;"> </span><span class="hljs-keyword" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #2e95d3;">default</span><span style="color: white;"> </span><span class="hljs-title class_" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #f22c3d;">ThreeJSVisualization</span><span style="color: white;">;</span></div></div></pre><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin: 1.25em 0px 0px; white-space: pre-wrap;">This is a basic example of how you can integrate a Three.js visualization into a React Native app using react-three-fiber. You can learn more about react-three-fiber and how to use it to create Three.js scenes in React Native by visiting the official documentation at <a href="https://github.com/react-spring/react-three-fiber" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; text-underline-offset: 2px;" target="_new">https://github.com/react-spring/react-three-fiber</a>.</p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin: 1.25em 0px 0px; white-space: pre-wrap;"><br /></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: #374151; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; margin: 1.25em 0px 0px; white-space: pre-wrap;">Below is the actual code that worked in Expo
<a href="https://snack.expo.dev/@johnsokol/react-three-fiber-example">https://snack.expo.dev/@johnsokol/react-three-fiber-example</a>
</p><pre style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: #f7f7f8; border-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; line-height: 1.71429; margin-bottom: 0px; margin-top: 0px; overflow-x: auto; padding: 0px;"><div class="bg-black mb-4 rounded-md" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: rgba(0,0,0,var(--tw-bg-opacity)); border-radius: 0.375rem; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; margin-bottom: 1rem;"><div class="flex items-center relative text-gray-200 bg-gray-800 px-4 py-2 text-xs font-sans" style="--tw-bg-opacity: 1; --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-text-opacity: 1; --tw-translate-x: 0; --tw-translate-y: 0; align-items: center; background-color: rgba(52,53,65,var(--tw-bg-opacity)); border: 0px solid rgb(217, 217, 227); box-sizing: border-box; color: rgba(217,217,227,var(--tw-text-opacity)); display: flex; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 0.75rem; line-height: 1rem; padding: 0.5rem 1rem; position: relative;"><span class="" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box;">javascript</span></div><div class="p-4 overflow-y-auto" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(59,130,246,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(217, 217, 227); box-sizing: border-box; overflow-y: auto; padding: 1rem;"><span style="color: #2e95d3; font-family: Söhne Mono, Monaco, Andale Mono, Ubuntu Mono, monospace;"><span style="font-size: 14px;">import React, { useRef, useState } from 'react';
import { StyleSheet, View } from 'react-native';
import { Canvas, useRender, useFrame } from 'react-three-fiber';
function Box(props) {
// This reference will give us direct access to the mesh
const mesh = useRef();
// Set up state for the hovered and active state
const [hovered, setHover] = useState(false);
const [active, setActive] = useState(false);
// Rotate mesh every frame, this is outside of React without overhead
useFrame(() => (mesh.current.rotation.x = mesh.current.rotation.y += 0.01));
return (
<mesh
{...props}
ref={mesh}
scale={active ? [1.5, 1.5, 1.5] : [1, 1, 1]}
onClick={e => setActive(!active)}
onPointerOver={e => setHover(true)}
onPointerOut={e => setHover(false)}>
<boxBufferGeometry attach="geometry" args={[1, 1, 1]} />
<meshStandardMaterial
attach="material"
color={hovered ? 'hotpink' : 'orange'}
/>
</mesh>
);
}
export default function App() {
return (
<View style={styles.container}>
<Canvas>
<ambientLight />
<pointLight position={[10, 10, 10]} />
<Box position={[-1.2, 0, 0]} />
<Box position={[1.2, 0, 0]} />
</Canvas>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: 'black',
},
});</span></span><span style="color: #374151; font-family: Söhne Mono, Monaco, Andale Mono, Ubuntu Mono, monospace;"><span style="font-size: 0.875em;">
</span></span></div><div style="color: #374151; font-family: "Söhne Mono", Monaco, "Andale Mono", "Ubuntu Mono", monospace !important; font-size: 0.875em;"><br /></div><div><span style="color: white; font-family: Söhne Mono, Monaco, Andale Mono, Ubuntu Mono, monospace;"><span style="font-size: 14px;">Package.json
{
"dependencies": {
"three": "^0.108.0",
"expo-gl": "8.0.0",
"scheduler": "0.13.3",
"expo-three": "5.0.0",
"react-reconciler": "0.20.4",
"react-three-fiber": "4.0.17"
}
}</span></span></div></div></pre>John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-48778545270456259092023-02-04T11:53:00.001-08:002023-02-23T04:12:56.126-08:00GLSL Shaders, code that run on the GPU.<p><a href="https://thebookofshaders.com/">https://thebookofshaders.com/</a> Wow super awesome. </p><p><a href="https://www.lighthouse3d.com/tutorials/glsl-tutorial/">https://www.lighthouse3d.com/tutorials/glsl-tutorial/</a></p><p><br /></p><p>Resource for News<br /><a href="https://www.lighthouse3d.com/">https://www.lighthouse3d.com/</a></p><p><br /></p><p>Live Interactive editor for GL_ES<br /><a href="https://thebookofshaders.com/edit.php">https://thebookofshaders.com/edit.php</a></p><p><br /></p><p>Tons of demos many you can view the source . <br /><a href="https://www.shadertoy.com/">https://www.shadertoy.com/</a></p>John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-81589851094070259322023-01-28T09:51:00.001-08:002023-01-28T09:51:25.695-08:00VisionFive 2: RISC-V Quad Core Low Cost SBC<iframe frameborder="0" height="270" src="https://youtube.com/embed/ykKnc86UtXg" width="480"></iframe><div><br /></div><div><br /></div><div>https://www.starfivetech.com/en/site/boards</div><div><br /></div><div><br /></div><div><br /></div>John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-42906215950281940892021-09-21T00:49:00.001-07:002022-03-11T05:52:04.210-08:00GRC's | UHE PRNG Ultra-High Entropy Pseudo-Random Number Generator. Demo <div dir="auto"><a href="https://www.grc.com/otg/uheprng.htm">https://www.grc.com/otg/uheprng.htm</a> </div><div dir="auto"><br /></div><div dir="auto"><br /></div><div dir="auto"><span class="bigred" style="background-color: white; color: #aa0000; font-family: arial, helvetica, sans-serif; font-size: larger;"><b>What's so special about this pseudo-random number generator?</b></span><br style="background-color: white; color: #000099; font-family: verdana, tahoma, arial, helvetica, sans-serif, "MS Sans Serif"; font-size: 13.3333px;" /><span style="background-color: white; color: #000099; font-family: verdana, tahoma, arial, helvetica, sans-serif, "MS Sans Serif"; font-size: 13.3333px;">This carefully designed PRNG utilizes more than 1536 bits of internal “state” memory. The operating parameters of the generator's algorithm were carefully chosen (it uses a “</span><a href="http://en.wikipedia.org/wiki/Safe_prime" style="background-color: white; font-family: verdana, tahoma, arial, helvetica, sans-serif, "MS Sans Serif"; font-size: 13.3333px;">safe prime</a><span style="background-color: white; color: #000099; font-family: verdana, tahoma, arial, helvetica, sans-serif, "MS Sans Serif"; font-size: 13.3333px;">” factor) to guarantee that every possible PRNG “state” is visited before the sequence begins to repeat. The result is that the “period” of this generator will be the “</span><a href="http://en.wikipedia.org/wiki/Sophie_Germain_prime" style="background-color: white; font-family: verdana, tahoma, arial, helvetica, sans-serif, "MS Sans Serif"; font-size: 13.3333px;">Germain prime</a><span style="background-color: white; color: #000099; font-family: verdana, tahoma, arial, helvetica, sans-serif, "MS Sans Serif"; font-size: 13.3333px;">” 1,768,863 x 2</span><sup style="background-color: white; color: #000099; font-family: verdana, tahoma, arial, helvetica, sans-serif, "MS Sans Serif";">1535</sup><span style="background-color: white; color: #000099; font-family: verdana, tahoma, arial, helvetica, sans-serif, "MS Sans Serif"; font-size: 13.3333px;"> - 1, which is approximately 2.132 x 10</span><sup style="background-color: white; color: #000099; font-family: verdana, tahoma, arial, helvetica, sans-serif, "MS Sans Serif";">468</sup><span style="background-color: white; color: #000099; font-family: verdana, tahoma, arial, helvetica, sans-serif, "MS Sans Serif"; font-size: 13.3333px;">. This is such a large number that it might as well be infinite. This generator effectively never repeats.</span></div> John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-10700252016972778692021-02-13T15:54:00.001-08:002021-02-13T15:54:20.882-08:00How to trigger an action at the end of the Shell/Bash script<div dir="auto"><a href="https://medium.com/bash-tips-and-tricks/how-to-trigger-an-action-at-the-end-of-the-shell-bash-script-52b0ba9c157e">https://medium.com/bash-tips-and-tricks/how-to-trigger-an-action-at-the-end-of-the-shell-bash-script-52b0ba9c157e</a> </div> John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-48114799539333661692021-01-29T09:30:00.000-08:002021-01-29T09:46:23.173-08:00Understand Data Structures in C and C++<div dir="auto"><a href="https://www.freecodecamp.org/news/understand-data-structures-in-c-and-cpp/amp/">https://www.freecodecamp.org/news/understand-data-structures-in-c-and-cpp/amp/</a> </div> John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-41064006879191451552021-01-20T08:51:00.001-08:002021-01-20T08:51:05.866-08:00The next censorship is on DNS<p> </p><p><br /></p><p><a href="https://datechguyblog.com/2021/01/16/the-next-censorship-is-on-dns/">https://datechguyblog.com/2021/01/16/the-next-censorship-is-on-dns/</a></p><p>I completely agree with this article. </p><p style="background-color: white; box-sizing: inherit; color: #222222; font-family: Lora, serif; font-size: 16px; margin: 0px 0px 24px;"></p><blockquote><p style="background-color: white; box-sizing: inherit; color: #222222; font-family: Lora, serif; font-size: 16px; margin: 0px 0px 24px;"><i>"I was planning on reviewing Parler on my quest to look for Facebook alternatives, and then Parler essentially disappeared. At least you could find websites that hosted articles about Parler disappearing. But what if you plugged in a website, and it never appeared? Think that couldn’t happen?</i></p><p style="background-color: white; box-sizing: inherit; color: #222222; font-family: Lora, serif; font-size: 16px; margin: 0px 0px 24px;"><i>Think again. For 2021, I’m predicting that the next big thing in censorship will be DNS censorship."</i></p></blockquote><p style="background-color: white; box-sizing: inherit; color: #222222; font-family: Lora, serif; font-size: 16px; margin: 0px 0px 24px;"></p>John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-50915299011937321852021-01-17T20:41:00.002-08:002023-02-05T13:37:02.442-08:00Solid (web decentralization project)<br /><a href="https://en.wikipedia.org/wiki/Solid_(web_decentralization_project)">https://en.wikipedia.org/wiki/Solid_(web_decentralization_project)<br /></a><br /><a href="https://solid.mit.edu/">https://solid.mit.edu/<br /></a><br /><a href="https://solidproject.org/">https://solidproject.org/<br /></a><br /><a href="https://www.inrupt.com/">https://www.inrupt.com/<br /></a><br />The Guy Who Built The World Wide Web Is Building A 'New Internet', Where You Control Your Data<br /><a href="https://www.indiatimes.com/technology/news/tim-berners-lee-wants-to-turn-the-internet-on-its-head-and-decentralize-it-once-more-353998.html">https://www.indiatimes.com/technology/news/tim-berners-lee-wants-to-turn-the-internet-on-its-head-and-decentralize-it-once-more-353998.html</a><br /><br /><br />Solid: taking back the Web through decentralization App development as we know it will radically ch…<br /><a href="https://www.youtube.com/watch?v=Fy5eKqM8-OA">https://www.youtube.com/watch?v=Fy5eKqM8-OA</a><br /><br /><br /><a href="https://en.wikipedia.org/wiki/InterPlanetary_File_System">https://en.wikipedia.org/wiki/InterPlanetary_File_System</a>John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-69054487592938243032020-08-19T21:09:00.000-07:002020-08-19T21:09:40.984-07:00MISRA (Motor Industry Software Reliability Association).<a href="https://en.wikipedia.org/wiki/MISRA_C">https://en.wikipedia.org/wiki/MISRA_C</a><br />
<br />
<b style="background-color: white; color: #202122; font-family: sans-serif; font-size: 14px;">MISRA C</b><span style="background-color: white; color: #202122; font-family: sans-serif; font-size: 14px;"> is a set of software development guidelines for the </span><a href="https://en.wikipedia.org/wiki/C_(programming_language)" style="background: none rgb(255, 255, 255); color: #0b0080; font-family: sans-serif; font-size: 14px; text-decoration-line: none;" title="C (programming language)">C</a><span style="background-color: white; color: #202122; font-family: sans-serif; font-size: 14px;"> </span><a href="https://en.wikipedia.org/wiki/Programming_language" style="background: none rgb(255, 255, 255); color: #0b0080; font-family: sans-serif; font-size: 14px; text-decoration-line: none;" title="Programming language">programming language</a><span style="background-color: white; color: #202122; font-family: sans-serif; font-size: 14px;"> developed by </span><a href="https://en.wikipedia.org/wiki/Motor_Industry_Software_Reliability_Association" style="background: none rgb(255, 255, 255); color: #0b0080; font-family: sans-serif; font-size: 14px; text-decoration-line: none;" title="Motor Industry Software Reliability Association">MISRA</a><span style="background-color: white; color: #202122; font-family: sans-serif; font-size: 14px;"> (Motor Industry Software Reliability Association). Its aims are to facilitate code </span><a href="https://en.wikipedia.org/wiki/Safety" style="background: none rgb(255, 255, 255); color: #0b0080; font-family: sans-serif; font-size: 14px; text-decoration-line: none;" title="Safety">safety</a><span style="background-color: white; color: #202122; font-family: sans-serif; font-size: 14px;">, </span><a href="https://en.wikipedia.org/wiki/Computer_security" style="background: none rgb(255, 255, 255); color: #0b0080; font-family: sans-serif; font-size: 14px; text-decoration-line: none;" title="Computer security">security</a><span style="background-color: white; color: #202122; font-family: sans-serif; font-size: 14px;">, </span><a href="https://en.wikipedia.org/wiki/Porting" style="background: none rgb(255, 255, 255); color: #0b0080; font-family: sans-serif; font-size: 14px; text-decoration-line: none;" title="Porting">portability</a><span style="background-color: white; color: #202122; font-family: sans-serif; font-size: 14px;"> and reliability in the context of </span><a class="mw-redirect" href="https://en.wikipedia.org/wiki/Embedded_systems" style="background: none rgb(255, 255, 255); color: #0b0080; font-family: sans-serif; font-size: 14px; text-decoration-line: none;" title="Embedded systems">embedded systems</a><span style="background-color: white; color: #202122; font-family: sans-serif; font-size: 14px;">, specifically those systems programmed in </span><a class="mw-redirect" href="https://en.wikipedia.org/wiki/ISO_C" style="background: none rgb(255, 255, 255); color: #0b0080; font-family: sans-serif; font-size: 14px; text-decoration-line: none;" title="ISO C">ISO C</a><span style="background-color: white; color: #202122; font-family: sans-serif; font-size: 14px;"> / C90 / </span><a href="https://en.wikipedia.org/wiki/C99" style="background: none rgb(255, 255, 255); color: #0b0080; font-family: sans-serif; font-size: 14px; text-decoration-line: none;" title="C99">C99</a><span style="background-color: white; color: #202122; font-family: sans-serif; font-size: 14px;">.</span><sup class="reference" id="cite_ref-1" style="background-color: white; color: #202122; font-family: sans-serif; font-size: 11.2px; line-height: 1; unicode-bidi: isolate; white-space: nowrap;"><a href="https://en.wikipedia.org/wiki/MISRA_C#cite_note-1" style="background: none; color: #0b0080; text-decoration-line: none;">[1]</a></sup><br />
<br />
<a href="https://www.misra.org.uk/Activities/MISRAC/tabid/160/Default.aspx">https://www.misra.org.uk/Activities/MISRAC/tabid/160/Default.aspx</a><br />
<br />
<br />
<a href="https://www.misra.org.uk/Activities/MISRAC/tabid/171/Default.aspx">https://www.misra.org.uk/Activities/MISRAC/tabid/171/Default.aspx</a><br />
<table border="0" cellpadding="0" cellspacing="0" class="DesignRow" style="background-color: white; color: #840028; font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; font-size: 12px; padding-top: 4px; width: 100%px;"><tbody>
<tr><td nowrap="nowrap"><span class="DesignTitle" id="dnn_ctr518_dnnTitle_lblTitle" style="font-family: Tahoma, Arial, Helvetica; font-size: 16px; font-weight: bold;">MISRA C++</span></td><td align="center" class="Design" style="height: 20px; width: 20px;" valign="middle" width="60"></td></tr>
</tbody></table>
<table border="0" cellpadding="0" cellspacing="0" style="background-color: white; font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; font-size: 12px; width: 100%px;"><tbody>
<tr><td class="DesignPane DNNAlignleft" id="dnn_ctr518_ContentPane" style="padding: 4px;" width="100%"> <div class="DNN_HTMLContent" id="dnn_ctr518_ModuleContent">
<div class="Normal" id="dnn_ctr518_HtmlModule_lblContent" style="font-family: Tahoma, Arial, Helvetica; font-size: 11px;">
<div class="DNN_HTMLContent" id="dnn_ctr386_ModuleContent">
<div class="Normal" id="dnn_ctr386_HtmlModule_lblContent">
<div style="font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; font-size: 12px;">
In the beginning "C" was considered unsuitable for safety critical and safety related systems, however, it was so used ...</div>
<div style="font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; font-size: 12px;">
In 1998, as a response to this situation, MISRA produced MISRA C, a set of guidelines to aid the development of safety related systems in "C" in the automotive world. Since then, MISRA C has been adopted by the wider embedded systems community and has become the dominant, international coding guidelines for the use of "C" in critical systems. The MISRA C guidelines are widely accepted as fulfilling the requirements for a language subset as required by both the 1994 MISRA <em>Development guidelines for vehicle based software</em> and IEC 61508.</div>
<div style="font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; font-size: 12px;">
Things move on, and now C++ is in the position once held by "C"; many people believe that it should not be used for critical systems, but its use within the field is growing and that growth is without a common set of guidelines.</div>
<div style="font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; font-size: 12px;">
MISRA has recently completed work on the production of a set of guidelines for the use of C++ in critical systems, the output of which will be a set of guidelines similar to those that were produced for "C".</div>
<div style="font-family: Tahoma, Verdana, Arial, Helvetica, sans-serif; font-size: 12px;">
The document, known as MISRA C++ <i>Guidelines for the use of the C++ language in critical systems</i>, was published and officially launched on 5 June 2008.</div>
</div>
</div>
</div>
</div>
</td></tr>
</tbody></table>
John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-19114884343621845632020-08-12T12:21:00.001-07:002020-08-12T12:21:31.406-07:00Lightweight Web Browser: Dillo <iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/FVmgLJPMmaM" width="480"></iframe><br /><br />
<br /><br />
<br /><br />
<br /><br />
<a href="https://www.dillo.org/">https://www.dillo.org/</a><br /><br />
<br /><br />
<br /><br />
<br />John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-67611362188255308692020-08-05T09:19:00.194-07:002020-08-05T16:43:22.510-07:00Aryeh Friedman mentions me in his BSD Magazine Interview.<h1 class="ixu-heading sel-doc-info-title ixu-heading--small" lang="en" style="-webkit-font-smoothing: antialiased; background-color: #f9f9f9; border: 0px; box-sizing: inherit; color: #353535; font-family: "open sans", arial, sans-serif; font-size: 20px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: 1.3; margin: 0px 0px 6px; padding: 0px; position: relative; vertical-align: baseline;">BSD Magazine 2016-12 </h1><div class="PublishedDate__date--2OHFJ" datetime="2019-10-18" style="background-color: #f9f9f9; box-sizing: inherit; margin-bottom: 12px;"><div class="ixu-paragraph ixu-paragraph--tiny" style="-webkit-font-smoothing: antialiased; border: 0px; box-sizing: inherit; color: #353535; font-family: "open sans", arial, sans-serif; font-size: 12px; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;"><span style="box-sizing: inherit;">Published on Oct 17, 2019 </span></div><div class="ixu-paragraph ixu-paragraph--tiny" style="-webkit-font-smoothing: antialiased; border: 0px; box-sizing: inherit; color: #353535; font-family: "open sans", arial, sans-serif; font-size: 12px; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;"><span style="box-sizing: inherit;"><br /></span></div><div class="ixu-paragraph ixu-paragraph--tiny" style="-webkit-font-smoothing: antialiased; border: 0px; box-sizing: inherit; color: #353535; font-family: "open sans", arial, sans-serif; font-size: 12px; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;"><span style="box-sizing: inherit;"><a href="https://issuu.com/george_radev/docs/bsd_magazine_2016-12" style="color: #888888; text-decoration-line: none;">https://issuu.com/george_radev/docs/bsd_magazine_2016-12</a></span></div><div class="ixu-paragraph ixu-paragraph--tiny" style="-webkit-font-smoothing: antialiased; border: 0px; box-sizing: inherit; color: #353535; font-family: "open sans", arial, sans-serif; font-size: 12px; font-stretch: inherit; font-style: inherit; font-variant: inherit; line-height: 1.5; padding: 0px; vertical-align: baseline;"><br /></div><div class="separator" style="clear: both; color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://1.bp.blogspot.com/-A-N-ckPjkU8/Xyj6AuZxonI/AAAAAAAARjQ/4lIH-vQCIdohTE04t2t56qJ09z3wsuQBgCLcBGAsYHQ/s1600/BSDMAG1.PNG" style="color: #888888; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="684" data-original-width="524" height="320" src="https://1.bp.blogspot.com/-A-N-ckPjkU8/Xyj6AuZxonI/AAAAAAAARjQ/4lIH-vQCIdohTE04t2t56qJ09z3wsuQBgCLcBGAsYHQ/s320/BSDMAG1.PNG" style="background: rgb(255, 255, 255); border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="245" /></a></div><br style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;" /><div class="separator" style="clear: both; color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://1.bp.blogspot.com/-unXU1rYH3vM/Xyj6AKH9dqI/AAAAAAAARjM/7GEJgif2YBUIQAa2P_KhzkdKLpMfIXlXgCLcBGAsYHQ/s1600/BSDMAG2.PNG" style="color: #888888; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="687" data-original-width="1042" height="261" src="https://1.bp.blogspot.com/-unXU1rYH3vM/Xyj6AKH9dqI/AAAAAAAARjM/7GEJgif2YBUIQAa2P_KhzkdKLpMfIXlXgCLcBGAsYHQ/s400/BSDMAG2.PNG" style="background: rgb(255, 255, 255); border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="400" /></a></div><br style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;" /><div class="separator" style="clear: both; color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://1.bp.blogspot.com/-BgAnc0QFAbI/Xyj6A1cHuTI/AAAAAAAARjU/tk-xY7nq3O82qj4u_u4wYK0SYZkTYSsBACLcBGAsYHQ/s1600/BSDMAG3.PNG" style="color: #888888; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="682" data-original-width="1040" height="261" src="https://1.bp.blogspot.com/-BgAnc0QFAbI/Xyj6A1cHuTI/AAAAAAAARjU/tk-xY7nq3O82qj4u_u4wYK0SYZkTYSsBACLcBGAsYHQ/s400/BSDMAG3.PNG" style="background: rgb(255, 255, 255); border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="400" /></a></div><div class="separator" style="clear: both; color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px; text-align: center;"><br /></div><div class="separator" style="clear: both; color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://1.bp.blogspot.com/-B_JsnPpwSRQ/Xyj6ABKUMxI/AAAAAAAARjI/LtqDAws2d4IwHzFWq8DiHYUyLTznJV3sQCLcBGAsYHQ/s1600/BSDMAG2b.PNG" style="color: #888888; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="685" data-original-width="1041" height="262" src="https://1.bp.blogspot.com/-B_JsnPpwSRQ/Xyj6ABKUMxI/AAAAAAAARjI/LtqDAws2d4IwHzFWq8DiHYUyLTznJV3sQCLcBGAsYHQ/s400/BSDMAG2b.PNG" style="background: rgb(255, 255, 255); border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="400" /></a></div><br style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;" /><div class="separator" style="clear: both; color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://1.bp.blogspot.com/-0Ma8OPSNgio/Xyj6A3yMGhI/AAAAAAAARjY/EnnYQmS1lLoHUOR_e9H_xnm9_tEVJiy-wCLcBGAsYHQ/s1600/BSDMAG4.PNG" style="color: #888888; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="680" data-original-width="1039" height="261" src="https://1.bp.blogspot.com/-0Ma8OPSNgio/Xyj6A3yMGhI/AAAAAAAARjY/EnnYQmS1lLoHUOR_e9H_xnm9_tEVJiy-wCLcBGAsYHQ/s400/BSDMAG4.PNG" style="background: rgb(255, 255, 255); border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="400" /></a></div><br style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;" /><div class="separator" style="clear: both; color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://1.bp.blogspot.com/-q05pFZxQK8E/Xyj6BPuIt8I/AAAAAAAARjc/KaI0N9AyLtgHzmSke5fZo9o33vvVtylTQCLcBGAsYHQ/s1600/BSDMAG4b.PNG" style="color: #888888; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="683" data-original-width="1047" height="260" src="https://1.bp.blogspot.com/-q05pFZxQK8E/Xyj6BPuIt8I/AAAAAAAARjc/KaI0N9AyLtgHzmSke5fZo9o33vvVtylTQCLcBGAsYHQ/s400/BSDMAG4b.PNG" style="background: rgb(255, 255, 255); border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="400" /></a></div><br style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;" /><div class="separator" style="clear: both; color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://1.bp.blogspot.com/-JOKAYOVgrOM/Xyj6BSxPoVI/AAAAAAAARjg/Zg82uZHhjpUh-fn8PrNwppIQNAS-PZx6ACLcBGAsYHQ/s1600/BSDMAG5.PNG" style="color: #33aaff; margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="684" data-original-width="1040" height="262" src="https://1.bp.blogspot.com/-JOKAYOVgrOM/Xyj6BSxPoVI/AAAAAAAARjg/Zg82uZHhjpUh-fn8PrNwppIQNAS-PZx6ACLcBGAsYHQ/s400/BSDMAG5.PNG" style="background: rgb(255, 255, 255); border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="400" /></a></div><div class="separator" style="clear: both; color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px; text-align: center;"><br /></div><div class="separator" style="clear: both; color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"> </span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Promote what you are doing with</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">FreeBSD, and what you like and</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">don’t like.</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Interview with Aryeh Friedman, CTO and Co-CEO of</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Friedman-Nixon-Wong Enterprises, LLC</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">by Marta Ziemianowicz, Marta Surzelec & Marta Sienicka</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"> </span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">[BSD Magazine]: Hello Aryeh, how have you been doing? Can you introduce yourself to</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">our readers?</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">[Aryeh Friedman}: Since 2008, I've been co-owner of a small boutique software consulting fir,</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Friedman-Noxon-Wong Enterprises.</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"> </span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">In the mid-1990s, along with John L. Sokol, I was the co-inventor of live Streaming Media, real-</span></font><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;">time streaming protocols (the best known modem version is RSVP), CDN's and SDN's (used to</span></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">create the first streaming media network, which operated from 1994 to 2001), and single</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">threaded web servers (thttpd is a modem version of our work). Concurrently in the early to mid-</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">1990s, I helped start the first generation of ISPs in Southern and Central California. (For details,</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">see my LinkedIn profile and the links at the bottom of this interview) I was also on an early incar</span></font><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;">nation of the IETF committee that led </span><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;">to the</span><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;"> creation of ICANN.</span></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">In The late 1990s and early 2000s, I worked in eDemocracy, debetes.com, one of the earliest o-</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">cial networking sites (although it wasn't called that back then). I also got interested in election security in this capacity and therefore have deep doubts about the integrity of the voting system in </span></font><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;">the 2016 Presidential election.</span></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">In The 2000s, I decided to go back to school and get my BS in Computer Science Education. (A </span></font><font color="#666666" face=""><span style="font-size: 13.2px;">side note; I do not agree with the “CS for all” current push in CS education, particularly in elemen</span></font><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;">tary school) As I was graduating, the department chair introduced me to another student with an</span></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">idea for a widget-based website builder</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">While that company went nowhere, due to problems on the business side of the company, I cid</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">meet FNWE's current co-CEO and lead architect, Dee Nixon.</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;">Working with Dee has allowed FNWE to do amazing work with a tiny team. For example, we </span><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;">maintain 800k lines of Java across our different projects with Dee and </span><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;">myself</span><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;"> doing almost 100%</span></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Of the work. I tend to be a highly creative but not super detail-oriented big-picture programmer, </span></font><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;">while Dee is excellent at getting all the i's dotted and all the t's crossed, We use a development </span><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;">methodology we call ‘sketch artist’ from our strengths and weaknesses. Typically, I create a proto</span><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;">type and then Dee works on the most critical, </span><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;">detail</span><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;">-oriented aspects to ensure that they are rock </span><font color="#666666" face=""><span style="font-size: 13.2px;">solid in stability and robustness, while I work on aspects that are less detail-oriented but may re</span></font><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;">quire a wider range of technical knowledge. For example, I am the one that did the min thinking</span></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">(on how to do the transport and reporting of remote cardiac data for Specialized Medical, while</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Dee is the one who made it so it can be used in a high-security life critical environment,</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">[BSD Mag]: Can you tell us something about your company, Friedman-Nixon-Wong Enter</span></font><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;">prises, LLC?</span></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"> </span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">[AF]: FNWE specializes in technical management and customized software based on our open</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">soutte work, Our ideal client is a small to medium company that has healthy natural growth prosp</span></font><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;">ects (not the highly risky big bang growth that many VC's and other investors irrationally de</span><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;">mand these days) and that requires the unique </span><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;">capabilities</span><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;"> of the open source products we are</span></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">currently developing</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">(Our open source work focuses mainly on secure cloud computing in life-critical applications. Our</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">open-source projects include (1) a soon-forthcoming AP/DB framework that can manage hetero</span></font><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;">geneous micro-services including fully encrypted hierarchical database; (2) PetiteCloud, an</span></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">IAAS platform designed primarily for use with FreeBSD as a host and bhyve as a hypervisor, with</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">the robustness needed for small private clouds in non-data-center environments; and (3) thisTest,</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">« Java unit-testing framework similar to JUnit but much faster and with a much lighter footprint</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">(Our main current custom/commercial software focus is medical labs, telemedicine, banking and</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">other fields that require high security and the rock-solid stability demanded by life critical </span></font><font color="#666666" face=""><span style="font-size: 13.2px;">applica</span></font><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;">tions. As 8 small consulting company, we've also done a variety of other projects, such as a poker</span></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">odds calculator, a social media popularity algorithm, and various web development work requiring</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">fully custom back ends andlor computationally sophisticated algorithms,</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Our longest term client is Specialized Medical, which does remote cardiac monitoring such as</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Holter and Cardiac Telemetry tests in real time. We developed and maintain a system that enables their clients (various private medical practices) to run multi-day cardiac monitoring tests on</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Patients. This allows them to spot heart irregulares that a normal in-office EKG would not spot</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">because its too short in duration and does not follow the patient through their normal daily activ</span></font><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;">ity.</span></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">“The combination of purpose-built open-source end custom software is prieusrytnprat in</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">the industries we work in because, for example, HIPAA requires a formal (long-term)</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"> </span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">-----</span></font></div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;"><font color="#666666" face=""><div class="separator" style="clear: both; font-size: 13.2px;"><br /></div><div class="separator" style="clear: both; font-size: 13.2px;">“Business Associate” relationship to exist between the developer and the “covered entity” (the company <span style="font-size: 13.2px;">that makes/manages the medical system),</span></div><div class="separator" style="clear: both; font-size: 13.2px;"><br /></div><div class="separator" style="clear: both; font-size: 13.2px;">When working on long term projects, we generally will agree to work with only one company in 2</div><div class="separator" style="clear: both; font-size: 13.2px;">sven vertical market. For example, we are not available for work with other remote cardiac moni<span style="font-size: 13.2px;">toring companies, although we are open for work with other kinds of medical labs, IoT, and tele</span><span style="font-size: 13.2px;">medicine applications.</span></div><div class="separator" style="clear: both; font-size: 13.2px;"><br /></div><div class="separator" style="clear: both; font-size: 13.2px;">Our advisers include a technical investment banker and a few OS developers. One of our adiis-</div><div class="separator" style="clear: both; font-size: 13.2px;">cers is Stanley P. Hanks, the CTO of Columbia Ventures, which, uni recently, wholly-owned Hibernia<span style="font-size: 13.2px;">bemia Networks, which in turn owns the highest-capacity and lowest-latency transatlantic cable</span></div><div class="separator" style="clear: both; font-size: 13.2px;">between Ireland and the US (NYC). Stanley was also the Inventor of Internet VPN’s while at MFS</div><div class="separator" style="clear: both; font-size: 13.2px;">Datanet then went on to become the CTO of Enron Communications (not the part of Enron that</div><div class="separator" style="clear: both; font-size: 13.2px;">was involved in the accounting scandal). At Enron he and his team co-invented CDN's independ <span style="font-size: 13.2px;">cently from the team I was associated with at Sokol and Associates, described below, who also co-</span><span style="font-size: 13.2px;">invented CDN's at the same time</span></div><div class="separator" style="clear: both; font-size: 13.2px;"><br /></div><div class="separator" style="clear: both; font-size: 13.2px;">Another adviser of ours is John L. Sokol, who, besides being my boss at the early streaming</div><div class="separator" style="clear: both; font-size: 13.2px;">video company DVBS in the mid-1990s, was a member of the team that originally put 386BSD up</div><div class="separator" style="clear: both; font-size: 13.2px;">on UseNet for people to download, back around 1990 or so. FreeBSD 2.0.5 was forked from this</div><div class="separator" style="clear: both; font-size: 13.2px;">late 1990s effort. The fist time I had heard of 3268S was when I Met Bill Jolt in a Berkeley <span style="font-size: 13.2px;">bookstore in 1986,I had already been using BSD since 4.2 BSD at that point, since I grew up in</span></div><div class="separator" style="clear: both; font-size: 13.2px;">Berkeley.</div><div class="separator" style="clear: both; font-size: 13.2px;"><br /></div><div class="separator" style="clear: both; font-size: 13.2px;">[BSD Mag]: Tell us something about your open source products. Which open source solut<span style="font-size: 13.2px;">ions do you use and why?</span></div><div class="separator" style="clear: both; font-size: 13.2px;"><br /></div><div class="separator" style="clear: both; font-size: 13.2px;">[AF]: Our main open-source projects have the eventual goal of making an IaaS/PaaS framework</div><div class="separator" style="clear: both; font-size: 13.2px;">that can be used on the public Internet while meeting the end-to-end encryption requirements of</div><div class="separator" style="clear: both; font-size: 13.2px;">HIPAA and other high-security standards. Preliminary steps toward that goal include (1) 8 small</div><div class="separator" style="clear: both; font-size: 13.2px;">scale laa S framework, PetiteCloud, and (2) papi, a hierarchical AP/DB framework that allows full</div><div class="separator" style="clear: both; font-size: 13.2px;">encryption ofthe DB, as well 25 management of other kinds of resources,</div><div class="separator" style="clear: both; font-size: 13.2px;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both; font-size: 13.2px;"><span style="font-size: 13.2px;">As far as we know, there is no other AP/DB combo with a DB that encrypts entire fles. All other</span></div><div class="separator" style="clear: both; font-size: 13.2px;">solutions we know of use encrypted disks, SSL/TLS andlor encrypted DB fields, but NOT fully en<span style="font-size: 13.2px;">crypted records or tables.</span></div><div class="separator" style="clear: both; font-size: 13.2px;"><br /></div><div class="separator" style="clear: both; font-size: 13.2px;">PetiteCloud, our IaaS framework, is now good enough for email-business in-house use but nat</div><div class="separator" style="clear: both; font-size: 13.2px;">yet good enough for data center use (29. itis not yet “lights out" capable, nor doss it currently</div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">have the administrative interface needed for large stale deployment, nor doss it yet have the security features we plan to add soon) — although it is already much more robust, in some ways, </span><span style="font-size: 13.2px;">than he pel eter ae pao,</span></div><div class="separator" style="clear: both; font-size: 13.2px;"><br /></div><div class="separator" style="clear: both; font-size: 13.2px;"><br /></div><div class="separator" style="clear: both; font-size: 13.2px;">For example, PetiteCloud can recover from power failures much more easily than, say, Open-</div><div class="separator" style="clear: both; font-size: 13.2px;">Stack, and we plan to keep it that way as we scale it up,</div><div class="separator" style="clear: both; font-size: 13.2px;"><br /></div><div class="separator" style="clear: both; font-size: 13.2px;">PetiteCioud is the only laaS effort we know that is based on FreeBSD and bhyve as is main building<span style="font-size: 13.2px;">ing blocks. The main design philosophy is to delegate as much as possible to the host OS, which</span></div><div class="separator" style="clear: both; font-size: 13.2px;">puts us in contrast to more heavyweight laaS's like OpenStack. We ate currently working on mak<span style="font-size: 13.2px;">ing PetiteCloud fully HIPAA-compliant and date-center-ready.</span></div><div class="separator" style="clear: both; font-size: 13.2px;"><br /></div><div class="separator" style="clear: both; font-size: 13.2px;">We are also creating a hierarchical APUDB framework called pAP!, which will become the founda<span style="font-size: 13.2px;">tion of our PaaS: thinStom. pAPI can manage heterogeneous collections of resources including,</span></div><div class="separator" style="clear: both; font-size: 13.2px;">among other things, records and tables of the aforementioned fully enerypted hierarchical DB.</div><div class="separator" style="clear: both; font-size: 13.2px;"><br /></div><div class="separator" style="clear: both; font-size: 13.2px;">Another open-source project of ours thet is more mature is thisTest, a Java unitesting frame-<span style="font-size: 13.2px;">work similar to JUnit but much faster and lighter weight.</span></div><div class="separator" style="clear: both; font-size: 13.2px;"><br /></div><div class="separator" style="clear: both; font-size: 13.2px;">Since paid work takes priority over our open source work, for obvious reasons, progress on</div><div class="separator" style="clear: both; font-size: 13.2px;">PetteCloudithinstorm is not as fast as we wish. For that reason, we plan eventually to launch</div><div class="separator" style="clear: both; font-size: 13.2px;">something like the FreeBSD Foundation sround PetiteCloudthinStorm (and pAPI), and in that</div><div class="separator" style="clear: both; font-size: 13.2px;">way, enable faster progress without requiring FNWE to become 3 large fim (we want to stay rela<span style="font-size: 13.2px;">tively small),</span></div><div class="separator" style="clear: both; font-size: 13.2px;"><br /></div><div class="separator" style="clear: both; font-size: 13.2px;">We love the FreeBSD development model, in contrast to the Linux model. The FreeBSD model</div><div class="separator" style="clear: both; font-size: 13.2px;">allows for mote coherent and focused open-source work. Since we use the BSD license for our o<span style="font-size: 13.2px;">ur open source work, we also welcome others to use it for their commercial products without</span></div><div class="separator" style="clear: both; font-size: 13.2px;">having to pay us royatis.</div><div class="separator" style="clear: both; font-size: 13.2px;"><br /></div><div class="separator" style="clear: both; font-size: 13.2px;">[BSD Mag]: Is your solution designed for banking and healthcare mostly or can it be used</div><div class="separator" style="clear: both; font-size: 13.2px;">in any industry?</div><div class="separator" style="clear: both; font-size: 13.2px;"><br /></div><div class="separator" style="clear: both; font-size: 13.2px;">[AF]: The next major version of PetiteCloudithinStorm will be designed for any cloud computing</div><div class="separator" style="clear: both; font-size: 13.2px;">applications that require true end-to-end encryption. The need for security is one of the reasons</div><div class="separator" style="clear: both; font-size: 13.2px;">we choose FreeBSD over other OS's. The other main reason is the legendary stability of</div><div class="separator" style="clear: both; font-size: 13.2px;">FreeBSD, both as a host and as 2 guest. PetieClouclthinStorm currently runs on both Linux and</div><div class="separator" style="clear: both; font-size: 13.2px;">FreeBSD as both host and guest (using QEMU on Linux and bhyve on FreeBSD). We will soon</div><div class="separator" style="clear: both; font-size: 13.2px;">be updating PetiteCloud to allow Windows quests to run under bhyve (it already runs fine under</div><div class="separator" style="clear: both; font-size: 13.2px;">(QEMU). We also plan to expand our hypervisor options to include VirtualBox.</div><div class="separator" style="clear: both; font-size: 13.2px;"><br /></div><div class="separator" style="clear: both; font-size: 13.2px;">As we are nearing the first sufficiently heterogeneous version of pAPI, we will be converting Pe<span style="font-size: 13.2px;">titeCloud over to it and making PetiteCloud truly end-to-end encrypted. This means it will be usable</span><span style="font-size: 13.2px;">ble in any secure setting, not just medical and banking. We will then turn our focus to thinStorm</span></div><div class="separator" style="clear: both; font-size: 13.2px;">to make the only open source PaaS designed for security from the ground up. It will run on hyper<span style="font-size: 13.2px;">visors and not containers/iails, because the latter do not offer enough separation between the</span></div><div class="separator" style="clear: both; font-size: 13.2px;">host and guest for the security features we want.</div><div class="separator" style="clear: both; font-size: 13.2px;"><br /></div><div class="separator" style="clear: both; font-size: 13.2px;"><br /></div><div class="separator" style="clear: both; font-size: 13.2px;">-----</div><div class="separator" style="clear: both; font-size: 13.2px;"><br /></div><div class="separator" style="clear: both;"><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">Another unique aspect of all our work is that, since we are not associated with any large hosting</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">company andlor data center, we are designing PetiteClouslthinStorm to be used outside of data</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">centers (as well as, eventually, in them). For example, the OpenStack documentation describes</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">power loss as “the worst possible disaster that can happen to a clouded data center (largely due</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">to using iSCSI instead of more fault tolerant network file systems ike NFS backed by a ZFS file</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">server). Since we run PetiteCloud in our non-purpose-built office, it routinely loses power due to</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">things like one of us kicking the power strip while cleaning the room. The only recovery needed,</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">typically, is just hooking the power back up. OpenStack, on the other hand, wil brick up if it loses</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">power for as little as one second.</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">All the above will make PetiteCloud an ideal private hybrid cloud needed for high security opera</span><span style="font-size: 13.2px;">tions in small and medium businesses. For example, once all the security features are added, it</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">will be ideal for a small bank, law firm, medical clinic/small hospital, etc. We estimate that will en</span><span style="font-size: 13.2px;">able it to be used by the 49% of the computing word that requires security better than what can</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">be offered with OpenStack or with commercial cloud providers (without contracting with them for</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">a private cloud). Since we plan to use PetiteCioudithinStorm to support HIPAA compliant custom</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">electronic medical records systems, it will mest PCI-DSS also if properly secured physically and</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">on on a private cloud.</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">[BSD Mag]: Do you have your favorite open source system?</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">[AF]: There is not a single system I like the best, but the combination of tools listed below give us </span><span style="font-size: 13.2px;">an amazing foundation to bull our open source and custom systems on,</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">I am a FreeBSD fanatic and have used it since 2.0.5, so I would say that FreeBSD is by far my</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">favorite open source platform. OpenJDK is a close second, though, because Java is uniquely</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">well suited to the type of development we do. We like Java because it has the software engineeri</span><span style="font-size: 13.2px;">ng characteristics that allow us to avoid — or, if necessary, quickly debug — life-threatening bugs</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">in a life-vertical application, without compromising on the security (which is legal requirement for </span><span style="font-size: 13.2px;">our clients),</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">Also in the interests of keeping bugs to a minimum, we believe that change management is of</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">critical importance in large systems. By change management, we mean not just version control</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">but also atomic change sets, with controlled access to the baseline/repository. For that reason,</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">our preferred development environment is a combination of devel/aegis (which I am the port main</span><span style="font-size: 13.2px;">tainer of) and devel/cook (for which I've written a tutorial). Both these tools were developed by Peter Miller and are still, as far as I am aware, the only tools that satisfy all of his three laws of </span><span style="font-size: 13.2px;">change management. His laws are</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">1, Without controlled access to the baseline, the number of interactions within a development</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">team is O(n), where is the number of developers android the number of ies in the source tree</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">whichever is larger. With controlled access to the baseline, it can be reduced to near O(n)</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">2. The baseline MUST always be in working order.</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">3. The software build construction process can be reduced to a directed acyclic graph (DAG),</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">as described in his paper ‘Recursive Make Considered Harmful</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">The first law addresses the main reason for change management systems, namely source-code</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">control. When you have too many people simultaneously interacting with the code, unless you</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">make sure each is working on local copies unt they ate ready to merge them back into the mas</span><span style="font-size: 13.2px;">ter copy, they will constantly step on each others’ feet</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">Then, there is the second law that only Aegis enforces. A good change management system</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">should make it difficult to check in buggy, non-working code and integrate it into the baseline.</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">This means atomic checking in of change sets, in contrast to the far less robust check-in proce</span><span style="font-size: 13.2px;">dures of ait and most other version control systems. I have been a strong advocate of the</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">FreeBSD base system switching over to atomic change sets vs. the git model. If it had, my esti</span><span style="font-size: 13.2px;">mate is that 11-RELEASE could easily have been on time instead of being almost six weeks late</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">[BSD Mag]: You have been participating in couple of projects and volunteer activities.</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">Have you ever been a part of open source community? Or is it security you are interested</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">in more than open source?</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">[AF]: I have been associated with several open source efforts and we plan to use that experience</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">to build a strong non-profit organization to handle the care and feeding of PetiteCloudithinStorm</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">in the long run, As stated above, I am also the maintainer of several FreeBSD ports. My main ar-</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">2 of interest are cloud computing and security currently, but I am also interested in other types</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">of open source projects as well</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"> </span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">During the early and mid-2000s, I was one of the founders of the now-defunct Software Develop-</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">lets Cooperative (SDC) that sought to create a set of licenses that would not need dual licensing</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">to.use open source for commercial purposes. At the time, I had a false understanding of the BSD</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">license; I thought i, ke some other open-source licenses, forbade commercial use. Once this</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">misunderstanding was resolved, I cropped out of SDC and started using the BSD license exclus</span><span style="font-size: 13.2px;">ively for my open source work Around this time, I wrote several blogs that examined the problems GPL created for developers who do not get subsidized by their employers/schools for their </span><span style="font-size: 13.2px;">open source work. The primary issue here is that, while the BSD license is both free beer and in</span><span style="font-size: 13.2px;">tellectual freedom, GPL is only free beer unless you happen to have 2 well heeled employer </span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">behind you instead of making a living from your own work</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">For this reason, the model we will be using with PetiteCloud thinStorm is a fully free and open-</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">source core with commercial or FOSS add-ons made by competing groups. The core, though, will</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">be maintained by a single organization. The closest model is that of the FreeBSD base system</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"> </span></div></div><div class="separator" style="clear: both;"><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"> </span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">This is a specific example of a larger small business/open source business model we envision,</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">called neo-Jeffersonianism, which is intended to enable small companies to compete effectively</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">as clusters against even the largest and most entrenched competitors without losing their individual</span><span style="font-size: 13.2px;"> identities. We believe that, I properly structured, neo-Jeffersonianism could be one of the few</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">scalable sustainable economic growth models we know of.</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">“Thomas Jefferson wrote: “I hope we shall crush ints birth the aristocracy of our moneyed corpo-</span><span style="font-size: 13.2px;">corporations which dare already to challenge our government toa trial by strength, and bid defiance to</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">the laws of our country.” We don't advocate getting rid of large corporations entirely, since there a</span><span style="font-size: 13.2px;">re many economic activities that can be done only by large corporations. But we believe that the</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">power of large corporations needs to be counterbalanced by organized clusters of small busi</span><span style="font-size: 13.2px;">nesses. Jefferson envisioned a world in which the majority of families owned small farms. That</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">Particular goal is obviously outdated in today's world of mechanized agriculture, which has freed</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">Up the vast majority of people to do all manner of other things besides farming, but the next best</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">thing, consistent with Jefferson's goal of limiting the power of big corporations, is to encourage</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">the creation of organized business clusters that can enable small businesses to survive and</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">thrive without requiring huge monetary investments,</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">[BSD Mag]: You also have a patent! Tell us something about it.</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">[AF]: A small disclaimer: I am an un-named inventor on the patent, because I left the company</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">(Sokol and Associates) before the paperwork was complete and thus only John L. Sokol's name</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">appears on the patent itself, but he has given me credit in the original documentation and else</span><span style="font-size: 13.2px;">where.</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">“The patent is for a single threaded web server called AfterGumer, currently posted on Source-</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">Forge under the BSD lense. The idea is that, for static content (ve. stuff that does not need</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">backend), the maximum hit capacity of the web server can be cranked up much higher than with</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">2 threaded web server such as Apache or Tomcat. There are several current web servers based</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">on this design now, with the best known being thttpd</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">In testing the prototype of AfterBurner in 1894 and 1985, we were able to support, on a single</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">Pentium-20, almost the entire load that Yahoo! was reporting for their entire site, yet the CPU was</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">stil 20% idle. The same machine then maxed out four 1,000 Mbps Ethernet NIC's and was still</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">running only at 15% capacity. As far I Know, AfterBurner sill holds the raw performance record</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">{or any web server.</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">John Sokol and Terry Lambert later adapted the same model to create the first kemel queues im</span><span style="font-size: 13.2px;">plementation for BSD. My understanding is that a variant of this model is sill used in the</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">FreeBSD kernel</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">The other items I mentioned above as being the co-inventor of were judged to not be patentable</span></div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">by Sokol & Associates IP attorney. I guess I will have to live with bragging rights only on them.</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">(Gee list of links for details.)</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">[BSD Mag]: What is Rent-a-CTO? Sounds like “Rent a Chief Technology Officer”</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"> </span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">[AF]: One of the largest misconceptions many non-technical founders have is what exactly the</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">role and function of a Chief Technical Officer is, The standard assumption is that it is some kind of</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">super techie who can jump over tall buildings in a simple leap and can write code by just thinking</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">about it (no typing needed). The reality is that being 2 CTO is largely a business position rather</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">than a technical position, although it does require wide-ranging technical knowledge and experience.</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">The main jobs of 2 CTO are to develop coherent technical strategy, explain the technical as</span><span style="font-size: 13.2px;">pects of the company to the non-technical stakeholders, and, ina start up, assemble the technical team that will do the R&D and then continued support of the company’s products and service.</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">This means that most small and startup companies don't need s CTO except when they are mak</span><span style="font-size: 13.2px;">ing & pivot from one phase of their life to another, and or when they grow. The rest of the time</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">they don't need a fulltime person in this role. What many small companies and startups do,</span><span style="font-size: 13.2px;"> is to have one fulltime person in the role of both CTO and lead developer. However, a wider</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">range of technical knowledge can be brought to bear if the company has both a full-time lead de</span><span style="font-size: 13.2px;">veloper and a very experienced consultant acting as a parttime CTO. FNWE can provide either</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">development services or part time CTO services, as needed.</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">[BSD Mag]: What are the challenges your company is facing at the moment?</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">[AF]: The main challenge we face is how to balance the demands of our work for clients vs. our</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">open source work. We have a policy of not billing clients for open source work, even when their</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">Projects benefit from it</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">For this reason, we want to move to a non-profit foundation model for PetiteCloudlthinStorm. We</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">would, of course, be pleased if some of our clients, as well non-clients, made donations of their</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">time andlor money to the foundation. Sustaining members would have a say in the projects fu</span><span style="font-size: 13.2px;">ture direction without having to pay, individually, more than a small fraction of the cost. The main</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">90a of the foundation will be to allow a wider ownership of our open-source projects beyond just</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">FNWE, so we can get paid for at least some of our open-source work while continuing our policy</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">Cf not billing our clients for. We do hope, at some point in the future, that the foundation can support </span><span style="font-size: 13.2px;">one or more full time project developers, since they would speed up development significantly.</span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span style="font-size: 13.2px;">Until then, our largest challenge is balancing the demand for immediate paid work with the long </span><span style="font-size: 13.2px;">term investment needed to make PetteCloud thinStorm a realty</span></div></div></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Fortunately, since we have no external pressure from investors or other non-llents, we can allow</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">PetiteCloud/thinstorm to evolve as needed without the need to slap on features that may be ill ad</span></font><span style="color: #666666; font-size: 13.2px;">vised from a technical standpoint but the marketing department demanded them,</span></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">[BSD Mag]: Any plans for the future?</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">[AF]: From the personal stand point, I would love to find enough time to go back to school to get</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">my PhD, but from what I have learned from talking to others in my position, this would be largely</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">just 2 piece of paper, given my background.</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">From the technical stand point, I would eventually like to leverage PetiteCloud/thinStorm into a</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">full distributed OS design I have been working on for about 10 years now. With that OS, I plan to</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">move as far past cloud computing as cloud computing has moved past traditional IT.</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">For FNWE, we plan to continue to grow organically so that we can fund the development of this</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">(OS without the need for outside investors. I want to see neo-Jeffersonianism become a much</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">more widely used business model because it allows for the average person to start a small form</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">that will grow organically while at the same time returning the economy to & more balanced ecos</span></font><span style="color: #666666; font-size: 13.2px;">ystem between small and large companies,</span></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Miero-economists like my father, have long known from experimental and other real world studies </span></font><font color="#666666" face=""><span style="font-size: 13.2px;">that the more times the same dollar circulates within a semi-closed economy, such as the one </span></font><font color="#666666"><span style="font-size: 13.2px;">found in pre-civil rights black neighborhoods or currently found in many immigrant and religious</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">minority communities, it does that much more work. For example, in the average pre-civil rights</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">black neighborhood, a dollar would circulate within the community six times before leaving the</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">community for the larger economy. This means that dollar essentially does six mes more work</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">than the same dollar in a mass of atomized individual actors. In the atomized case, there is much</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">more overhead (¢.9. advertising expenses and longer times required to build 4 suitable network</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">of business connections). In the atomized case, there is an algorithm (known as Simple Mar)</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">that shows that eventually, everything else being equal, one actor will end up holding all the gol.</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">One of the main goals of neo-Jeffersonianism is to encourage the creation of many different, but</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">interlocking, semi-closed economies that can easily capture dollars in 3 manner that allows the</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">money to circulate multiple times within a relatively small community before leaving it</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">The communities do not have to be racial, ethnic or religious. Neo-Jeffersonianism can be struc</span></font><span style="color: #666666; font-size: 13.2px;">tured around small business clusters. A business cluster is group of companies that are comple</span><span style="color: #666666; font-size: 13.2px;">mentary in some way (exactly how is up to the cluster members).</span></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">The eventual structure for PetiteCloud/thinStorm development and deployment is one type of</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">such a cluster. In the case of PetiteCloud/thinStorm, we plan to build a group of companies each o</span></font><span style="color: #666666; font-size: 13.2px;">f which, while deriving some or all of its revenue from PetiteCloudithinStorm-related products</span></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">land services, is not large enough by itself to shoulder more than & small rection of the R&D, general</span></font><span style="color: #666666; font-size: 13.2px;">etal marketing/PR, etc. the project requires. Thus, there is 2 common good that all cluster mem</span><span style="color: #666666; font-size: 13.2px;">bers have access to, but at the same time they are free to develop their own strategies about</span></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">how to maximize their own potential. For readers who understand economic theory think of it as</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">collective ownership and oversight ofthe commons in order to avoid the tragedy of the commons.</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">[BSD Mag]: Do you have any piece of advice for our readers?</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">[AF]: The pace and bustle of tech in general and Silicon Valley specifically should not defocus</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">you from your core goals and vision. The extremely rapid pace of progress in computer technol-</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Cay over the past 50 years has been due mainly to Moore's Law, not to advances in computer sci</span></font><span style="color: #666666; font-size: 13.2px;">ence or software engineering, which have moved st a glacial pace compared to sheer capacity</span></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">increases due to Moore's Law. Since Moore's Law is near its physical mits, the pace of progress</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">(on the hardware front will soon slow down. Hence, we as an industry will need to focus more on</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">how to make our software more efficient in terms of performance, resource demands, and devel</span></font><font color="#666666"><span style="font-size: 13.2px;">oper time effort.</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Sadly, as Fred Brooks stated, there are no silver bullets to these problems; hence, we need to</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Continue honest and open efforts to improve. We should not settle for fake silver bullets ike Agile</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Development and its spin offs ~ although, at the same time, pure waterfall is completely dead it </span></font><span style="color: #666666; font-size: 13.2px;">was ever alive in the first place. Ditto for design patterns: Model-view-controller, for example, is</span></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">excellent for many applications but not appropriate for everything. Only with experience can pro</span></font><span style="color: #666666; font-size: 13.2px;">grammers leam which methodologies are appropriate for which kinds of projects, or find the</span></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">happy middle ground between the latest fad and older software engineering practices.</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">(On the social level, ech can improve life for everyone, but only if it becomes truly and democrati</span></font><font color="#666666"><span style="font-size: 13.2px;">cally open to all. Silicon Valley has created a bubble around itself and fooled itself into thinking</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">that it is in fact diverse and inclusive. Nothing can be further from the truth. NYC is much more di</span></font><span style="color: #666666; font-size: 13.2px;">verse in its point of view and startup culture, but even in NYC, due to the investment focus of</span></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">most companies, their values get warped,</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">So I guess one piece of advice I would give is that tech and CS have a lotto offer the world but</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">as long we allow unrealistically rapid growth/profit expectations to be the primary driver. they will</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">fall short. The only way to avoid excessive focus on rapid growth is to return to a small business:</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">focus.</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Also, if you are just starting out in the field, you should focus on building a solid foundation for a</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">decades long career instead of just going for the “hot” tech of the moment. Like the world of high</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">fashion, the hottest new tech is often impractical in the real world, and often has little value be</span></font><span style="color: #666666; font-size: 13.2px;">yond being flashy and “cool’. One should focus, instead, on finding the best ways to solve real </span><span style="color: #666666; font-size: 13.2px;">problems for real people . —</span></div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">For more information, see:</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Real Time Transport Protocols (S-Pack and ECIP): <a href="http://ecip.org/">http://ecip.org/</a> (see history page:</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><a href="http://www.ecip.com/history.htm">http://www.ecip.com/history.htm</a>),</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Streaming media (done for DVBS, Inc.)</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><a href="https://www.quora.com/Who-invented-streaming-video">https://www.quora.com/Who-invented-streaming-video</a></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">AfterBurner Web server patent:</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><a href="http://johnsokol.blogspot.com/2006/11/afterburner-web-server.html">http://johnsokol.blogspot.com/2006/11/afterburner-web-server.html</a></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><a href="https://patentscope.wipo.int/search/en/detail.jsf?docld=WO2000041455">https://patentscope.wipo.int/search/en/detail.jsf?docld=WO2000041455</a></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">CDN/SDN (Race and SDSN): <a href="http://www.videotechnology.com/old1005.html">http://www.videotechnology.com/old1005.html</a></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Stanley P. Hanks and VPNs: <a href="https://www.rfc-editor.org/rfc/pdfrfc/rfc2784.txt.pdf" target="_blank">https://www.rfc-editor.org/rfc/pdfrfc/rfc2784.txt.pdf</a></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">John L. Sokol and 386BSD:<a href="http://www.dnull.com/bsd/others/17.txt" target="_blank">http://www.dnull.com/bsd/others/17.txt</a></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Specialized Medical: <a href="http://www.specialized-med.com" target="_blank">http://www.specialized-med.com</a></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Columbia Ventures: <a href="http://colventures.com/">http://colventures.com/</a></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Hibernia Networks: <a href="http://www.hiberniaatlantic.com/">http://www.hiberniaatlantic.com/</a></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Aegis/cook: <a href="http://aegis.st.net">http://aegis.st.net</a></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Recursive Make Considered Harmful <a href="http://aegis.sourceforge.net/auug97.pdf">http://aegis.sourceforge.net/auug97.pdf</a></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">PeliteCloud: <a href="http://www.petitecloud.org" target="_blank">http://www.petitecloud.org</a></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">FNWE: <a href="http://www.fnwe.net">http://www.fnwe.net</a> (under construction)</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Cook tutorial: <a href="http://ibiblio.ora/pub/Linux/devel/make/cook-2.25.tut.pdf">http://ibiblio.ora/pub/Linux/devel/make/cook-2.25.tut.pdf</a></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">Aegis port (FreeBSD):</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666"><span style="font-size: 13.2px;"><u><a href="https://www.freebsd.org/cgi/ports.cgi?query=aryeh.friedman%40gmail.com&stype=maintainer&sektion=all">https://www.freebsd.org/cgi/ports.cgi?query=aryeh.friedman%40gmail.com&stype=maintainer&sektion=all</a></u></span></font></div><div class="separator" style="clear: both;"><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;"><br /></span></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"> </span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">About the Aryeh</span></font></div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">‘Aryeh M. Friedman is Co-CEO/CTO of Friedman-Nixon-Wong Enterprises</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">(FNWE), 2 small boutique consulting firm specializing in mission-critical secure</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">cloud computing, He draws on over 25 years of industry experience including be</span></font><font color="#666666" face=""><span style="font-size: 13.2px;">ing 2 pioneer in the technologies that enable cloud computing. FNWE offers develo</span></font><span face="" style="color: #666666; font-family: "trebuchet ms", trebuchet, verdana, sans-serif; font-size: 13.2px;">pment and technical management services. Mr. Friedman currently lives in New</span></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">‘York City but grew up in and around Silicon Valley before leaving it to find wider</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">technical opportunities after high school. You can contact him at</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;">aryeh.friedman@gmail.com or via his Linkedin profile at:</span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><a href="https://www.linkedin.com/in/friedmanaryeh">https://www.linkedin.com/in/friedmanaryeh</a></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"> </span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"> </span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"><br /></span></font></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"> </span></font></div><div class="separator" style="clear: both;"></div><div class="separator" style="clear: both;"><font color="#666666" face=""><span style="font-size: 13.2px;"> </span></font></div><div class="separator" style="clear: both;"></div></div><div><br /></div></div>John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-30777453958420035972020-08-05T09:04:00.001-07:002020-08-05T09:04:10.012-07:00The 10 Types of Programmers you'll encounter.<iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/OU55PWXm2rg" width="480"></iframe>John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-85139700823821007842020-08-04T00:23:00.000-07:002020-08-04T00:23:43.852-07:00Experiments in C++<a href="https://github.com/bryik/experiments-in-cpp">https://github.com/bryik/experiments-in-cpp</a> <br />
<br />
Cool little C++ programs by Ben Pyrik instructor at <span style="background-color: white; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px;">uOttawa</span><br />
<span style="background-color: white; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px;"><br /></span>
<span style="background-color: white; color: #24292e; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; font-size: 16px;">He's also done a lot of AFrame coding. </span>John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-10789317689083470002020-08-03T23:56:00.001-07:002021-01-20T08:55:03.790-08:00Quick and Dirty SSL HTTPD web server for testing. (Stupid Node.js tricks)<br />
(for the Python Version of this see <a href="https://churchofbsd.blogspot.com/2020/07/quick-and-dirty-ssl-httpd-web-server.html">HERE</a>) <br />
<br />
<a href="https://www.npmjs.com/package/budo">https://www.npmjs.com/package/budo</a><br />
<br />
<div style="box-sizing: border-box; color: #333333; font-family: "Source Sans Pro", "Lucida Grande", sans-serif; font-size: 18px; letter-spacing: 0.1px; line-height: 1.65; margin-bottom: 16px;">
This is a <a href="https://github.com/substack/node-browserify" rel="nofollow" style="box-sizing: border-box; color: #cb3837; font-size: 1em; font-weight: 600; text-decoration-line: none;">browserify</a> development server focused on incremental reloading, LiveReload integration (including CSS injection) and other high-level features for rapid prototyping.</div>
<div style="box-sizing: border-box; color: #333333; font-family: "Source Sans Pro", "Lucida Grande", sans-serif; font-size: 18px; letter-spacing: 0.1px; line-height: 1.65; margin-bottom: 16px;">
To install it globally:</div>
<div class="highlight sh" style="background-color: #f0f0f0; border-radius: 6px; box-sizing: border-box; font-family: "Source Sans Pro", "Lucida Grande", sans-serif; font-size: 16px; margin-bottom: 16px;">
<pre class="editor editor-colors" style="background: rgb(247, 247, 247); border-radius: 2px; box-sizing: border-box; font-family: monospace, monospace; font-size: 1em; margin-bottom: 24px; overflow-x: auto; padding: 13px 15px;"><div class="line" style="box-sizing: border-box;">
<span class="source shell" style="box-sizing: border-box;">npm install budo -g</span></div>
</pre>
</div>
<div style="box-sizing: border-box; color: #333333; font-family: "Source Sans Pro", "Lucida Grande", sans-serif; font-size: 18px; letter-spacing: 0.1px; line-height: 1.65; margin-bottom: 16px;">
Running budo will start a server with a default <code style="background: rgb(247, 247, 247); border-radius: 2px; box-sizing: border-box; font-family: "Fira Mono", "Andale Mono", Consolas, monospace; font-size: 0.9em; font-variant-ligatures: none; letter-spacing: 0px; line-height: 24px; padding: 0px 5px;">index.html</code> and incrementally bundle your source on filesave. The requests are delayed until the bundle has finished, so you won't be served stale or empty bundles if you refresh the page mid-update. Examples:</div>
<div class="highlight sh" style="background-color: #f0f0f0; border-radius: 6px; box-sizing: border-box; font-family: "Source Sans Pro", "Lucida Grande", sans-serif; font-size: 16px; margin-bottom: 16px;">
<pre class="editor editor-colors" style="background: rgb(247, 247, 247); border-radius: 2px; box-sizing: border-box; font-family: monospace, monospace; font-size: 1em; margin-bottom: 24px; overflow-x: auto; padding: 13px 15px;"><div class="line" style="box-sizing: border-box;">
<span class="source shell" style="box-sizing: border-box;"><span class="comment line number-sign shell" style="box-sizing: border-box; color: #999988; font-style: italic;"><span class="punctuation definition comment shell" style="box-sizing: border-box;"><span style="box-sizing: border-box;">#</span></span><span style="box-sizing: border-box;"> serve file on port 9966 and open browser</span><span style="box-sizing: border-box;"> </span></span></span></div>
<div class="line" style="box-sizing: border-box;">
<span class="source shell" style="box-sizing: border-box;">budo index.js --open</span></div>
<div class="line" style="box-sizing: border-box;"><br /></div><div class="line" style="box-sizing: border-box;"><span class="source shell" style="box-sizing: border-box;"><span class="comment line number-sign shell" style="box-sizing: border-box; color: #999988; font-style: italic;"><span class="punctuation definition comment shell" style="box-sizing: border-box;"><span style="box-sizing: border-box;">#</span></span><span style="box-sizing: border-box;"> enable LiveReload on HTML/CSS/JS file changes</span><span style="box-sizing: border-box;"> </span></span></span></div>
<div class="line" style="box-sizing: border-box;">
<span class="source shell" style="box-sizing: border-box;">budo index.js --live</span></div>
<div class="line" style="box-sizing: border-box;"><br /></div></pre>
</div>
John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0tag:blogger.com,1999:blog-8552623.post-84811820223817342352020-07-24T13:48:00.001-07:002021-01-20T08:56:37.920-08:00Quick and Dirty SSL HTTPD web server for testing. (Stupid python tricks) <div class="tr_bq">
<br /></div>
(For the Node.js version see <a href="https://churchofbsd.blogspot.com/2020/08/quick-and-dirty-ssl-httpd-web-server.html">HERE</a>)<br /><br /><div>
So I found myself trying to run some webxr demos and couldn't because I didn't have an SSL server available.<br />
<br />
I found a super simple trick with python for doing this with regular NON-SSL web pages.<br />
<br />
<blockquote class="tr_bq">
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;">python3 -m http.server 8000</span></blockquote>
<br />
This works on everything. For windows I am using cygwin but any python environment should work.<br />
<br />
This will create a webserver on port 8000 and server any files in the directory you ran it in and below.<br />
<br />
But now I needed a Secure SSL version of this.<br />
<br />
<br />
First Create your certificates, since this is a test server, there is no point in getting real ones.<br />
<br />
I am going to use openssl to create self signed certs.<br />
<br />
Most browsers will put up some scary warning that you can agree to the warnings and continue and have a secure session with using a self signed cert.<br />
<br />
<blockquote class="tr_bq">
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;">mkdir /home/johns/ssl/<br /> cd /home/johns/ssl/<br /> <br />openssl req -x509 -nodes -newkey rsa:2048 -days 3650 -keyout key.pem -out cert.pem</span></blockquote>
<div>
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;"><br /></span>
<br />
<br />
I found a number of examples python SSL code but most were outdated and had issues, I eventually got the code below to run well.<br />
<br />
Super Simple SSL python.<br />
<span style="font-family: "courier new" , "courier" , monospace;">ssssl.py</span><br />
<br />
<blockquote class="tr_bq">
<span style="font-family: Courier New, Courier, monospace; font-size: x-small;">from http.server import HTTPServer, SimpleHTTPRequestHandler</span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">import ssl</span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">bind_to_address = ''</span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">server_port = 4443</span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">ssl_key_file = "/home/johns/ssl/key.pem"</span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">ssl_certificate_file = "/home/johns/ssl/cert.pem"</span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">httpd = HTTPServer((bind_to_address, server_port), SimpleHTTPRequestHandler)</span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">httpd.socket = ssl.wrap_socket (httpd.socket, server_side=True, keyfile=ssl_key_file, certfile=ssl_certificate_file)</span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">print("Serving http://0.0.0.0:%i" % 4443)</span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;"><br /></span><span style="font-family: Courier New, Courier, monospace; font-size: x-small;">httpd.serve_forever()</span></blockquote>
</div>
<div>
<div>
<br /></div>
<div>
to run just run:</div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;">python3 ssssl.py </span></div>
<div>
<br /></div>
<div>
<br /></div>
</div>
</div>John Sokolhttp://www.blogger.com/profile/17719400170309249969noreply@blogger.com0