<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Peter (Justice for the Victims) Ryszkiewicz on Medium]]></title>
        <description><![CDATA[Stories by Peter (Justice for the Victims) Ryszkiewicz on Medium]]></description>
        <link>https://medium.com/@peterryszkiewicz?source=rss-5695106bc7f5------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*_SAmj5J9y1Pv5Ri0.</url>
            <title>Stories by Peter (Justice for the Victims) Ryszkiewicz on Medium</title>
            <link>https://medium.com/@peterryszkiewicz?source=rss-5695106bc7f5------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Mon, 22 Jun 2026 04:06:21 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@peterryszkiewicz/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Why Layoffs are the Wrong Move for Software Companies Right Now]]></title>
            <link>https://medium.com/@peterryszkiewicz/why-layoffs-are-the-wrong-move-for-software-companies-right-now-2542e31e83ca?source=rss-5695106bc7f5------2</link>
            <guid isPermaLink="false">https://medium.com/p/2542e31e83ca</guid>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[interview]]></category>
            <category><![CDATA[layoffs]]></category>
            <dc:creator><![CDATA[Peter (Justice for the Victims) Ryszkiewicz]]></dc:creator>
            <pubDate>Sat, 28 Feb 2026 15:48:47 GMT</pubDate>
            <atom:updated>2026-03-06T08:54:41.664Z</atom:updated>
            <content:encoded><![CDATA[<p><em>Listen to the audio version of this article in my voice at </em><a href="https://peter.ryszkiewicz.us/p/why-layoffs-are-the-wrong-move-for-9a3"><em>https://peter.ryszkiewicz.us/p/why-layoffs-are-the-wrong-move-for-9a3</em></a></p><p>In software, the most important thing a company builds is not the product. It is the engine that builds the product.</p><p>That engine is people, code, tooling, shared context, and the invisible web of decisions that make tomorrow easier than today. When a company does layoffs, it is not just shrinking payroll. It is changing the shape of the engine. And in early 2026, a lot of companies are doing it at the exact moment when the engine is about to get materially stronger. I’m looking at you, Block.</p><p>The reason is simple: revenue per employee in big tech is already massive, and the next wave of AI assistance is set up to push that number higher. At the same time, the cost of AI capability keeps dropping, which turns “more output per engineer” from a nice idea into a default competitive condition. Stanford HAI’s 2025 AI Index reports that the inference cost for a system performing at the level of GPT-3.5 dropped over 280-fold from November 2022 to October 2024. (<a href="https://hai.stanford.edu/ai-index/2025-ai-index-report">Stanford HAI</a>) And these numbers will just keep improving for the foreseeable future. See <a href="https://en.wikipedia.org/wiki/The_Law_of_Accelerating_Returns">Ray Kurzweil’s Law of Accelerating Returns</a>.</p><p>If you accept that trend, even cautiously, then layoffs aimed at “efficiency” start to look like a misread of what efficiency is about to become.</p><h3>A metric that forces the conversation to stay honest</h3><p>If you want to argue about layoffs without turning it into vibes, pick a blunt metric: revenue per employee (RPE).</p><p>RPE tells you, at a high level, how much revenue the organization generates per person. When RPE is already in the seven figures and rising, the default stance should be: the company has leverage, and the question becomes how to deploy it without damaging compounding capacity.</p><p>Below are recent RPE figures for major tech companies, sorted in ascending order, using their reported revenue and reported employee counts. These numbers are rounded.</p><ul><li><strong>Amazon</strong>: company-wide RPE is roughly <strong>$0.41M</strong> in 2024, using <strong>$637.959B</strong> of consolidated net sales and <strong>~1.556M</strong> employees. This understates the leverage of software-heavy parts of the company because Amazon’s workforce includes a massive frontline logistics and delivery operation. (<a href="https://www.sec.gov/Archives/edgar/data/1018724/000101872425000004/amzn-20241231.htm">SEC</a>)</li><li><strong>Microsoft</strong>: roughly <strong>$1.24M</strong> in FY2025, using <strong>$281.7B</strong> of revenue and <strong>~228k</strong> employees. (<a href="https://www.microsoft.com/investor/reports/ar25/index.html">Microsoft</a>)</li><li><strong>Alphabet</strong>: roughly <strong>$1.91M</strong> in 2024, using <strong>$350.018B</strong> of total revenues and <strong>~183k</strong> employees. (<a href="https://s206.q4cdn.com/479360582/files/doc_financials/2024/q4/goog-10-k-2024.pdf">Q4 Capital</a>)</li><li><strong>Meta Platforms</strong>: roughly <strong>$2.22M</strong> in 2024, using <strong>$164.501B</strong> of total revenue and <strong>~74,067</strong> employees. (<a href="https://www.sec.gov/Archives/edgar/data/1326801/000132680125000017/meta-20241231.htm">SEC</a>)</li><li><strong>Block:</strong> pre-layoffs (I will discuss post-layoff numbers later in this article):roughly <strong>$2.37M</strong> in <strong>2025</strong>, using <strong>$24.194B</strong> of <strong>total net revenue</strong> and <strong>10,205</strong> full-time employees. (<a href="https://www.stocktitan.net/sec-filings/XYZ/10-k-block-inc-files-annual-report-97739237536a.html">StockTitan</a>).</li><li><strong>Apple</strong>: roughly <strong>$2.38M</strong> in FY2024, using <strong>$391.035B</strong> of total net sales and <strong>~164k</strong> employees. (<a href="https://www.sec.gov/Archives/edgar/data/320193/000032019324000123/aapl-20240928.htm">SEC</a>)</li><li><strong>Nvidia</strong>: roughly <strong>$3.63M</strong> in FY2025, using <strong>$130.5B</strong> of revenue and <strong>~36k</strong> employees. (<a href="https://www.sec.gov/Archives/edgar/data/1045810/000104581025000023/nvda-20250126.htm">SEC</a>)</li></ul><p>Those numbers are not “normal corporate performance.” They are the signature of software leverage and platform economics at scale.</p><p>Now add AI.</p><h3>AI pushes RPE up, and it pushes “need more engineers” up right alongside it</h3><p>There is a lazy version of the AI narrative: buy AI tools, cut headcount, declare victory.</p><p>The better model is: AI raises the ceiling on what a strong engineer can do, then competition forces companies to chase that ceiling.</p><p>Stanford’s AI Index gives a clean, visceral example of why the ceiling rises. When the cost of querying models at GPT-3.5 quality drops by more than 280× in under two years, adoption stops being a debate and starts being a default. (<a href="https://hai.stanford.edu/news/ai-index-2025-state-of-ai-in-10-charts">Stanford HAI</a>)</p><p>Here is the key consequence that companies keep missing:</p><p>If revenue per engineer rises, demand for engineers rises too.</p><p>Why? Because the ROI on engineering rises. The same company that used to need 10 engineer-months to ship a feature might now do it in 6. That does not mean it should hire fewer engineers. It often means it can profitably ship more features, integrate faster, localize more markets, reduce support load, tighten security, and build entirely new product lines. The constraint becomes “how many capable people can we put on this and still move fast without breaking things.”</p><p>This is exactly how labor costs climb: the value per engineer goes up, and companies compete for the same pool of high-signal talent.</p><p>You can see the demand side in plain official terms. U.S. Bureau of Labor Statistics projects employment for software developers, QA analysts, and testers to grow 15% from 2024 to 2034, with about 129,200 openings per year on average. (<a href="https://www.bls.gov/ooh/computer-and-information-technology/software-developers.htm">Bureau of Labor Statistics</a>)</p><h3>The “hire now” incentive that smart companies will act on</h3><p>There is a quiet incentive here that is easy to miss if you only look at next quarter’s expenses.</p><p>If engineering labor costs are about to inflate, then the smart companies have a reason to hire earlier, not later.</p><p>They are not just hiring to ship features. They are hiring to lock in a cost basis.</p><p>You can think of it like buying long-duration capacity before the price reprices. A company that builds a dense bench of strong engineers now can grow into that capacity while market wages and equity packages become more aggressive. A company that waits will be hiring into a world where:</p><ul><li>productivity per engineer is higher,</li><li>revenue per engineer is higher,</li><li>and therefore the bidding war for top engineers is worse.</li></ul><p>We already have a very loud signal of where this goes in the frontier AI world. The Wall Street Journal reported that OpenAI’s stock-based compensation averaged about $1.5 million per employee across a workforce of roughly 4,000 in 2025. (<a href="https://www.wsj.com/podcasts/tech-news-briefing/tnb-tech-minute-openais-pay-packages-are-larger-than-any-major-tech-startup-in-history/74378f27-fc05-49ca-96e7-1ac4768b1cde?gaa_at=eafs&amp;gaa_n=AWEtsqeR_kobUxaZbAb_Psf4CfMfA6tn5RQeUUlj_I1bNY_432WaSPsAvwJz&amp;gaa_sig=svjGA7d8fd3gOdIfs97YCW8cMqg-KwKRQh7wUywfp2WysqTxodftYpd5NPjkZWLJK338LirGf0mwJ_hY7NITxw%3D%3D&amp;gaa_ts=697f957e">The Wall Street Journal</a>) That is the cost of being early in a talent market where a small number of people can move a very large revenue number.</p><p>And importantly, this does not stay contained inside frontier AI labs. It leaks outward. Every big company trying to “do AI” competes for overlapping skill sets: distributed systems, infra, security, product engineering, data, applied ML, developer experience, and the emerging hybrid roles where engineers ship and support adoption at the customer.</p><h3>Jevons paradox, and why “efficiency” often increases demand</h3><p>There is an old economics concept that fits this moment so well that it feels like it was written for it: <a href="https://en.wikipedia.org/wiki/Jevons_paradox">Jevons paradox</a>.</p><p>Jevons observed that making coal use more efficient did not necessarily reduce total coal consumption. In practice, efficiency made coal-powered work cheaper, which expanded how much coal-powered work society chose to do. The modern framing is that efficiency gains lower effective price, and if demand is elastic, total consumption can rise. (<a href="https://en.wikipedia.org/wiki/Jevons_paradox">Wikipedia</a>)</p><p>Apply that to software and AI:</p><ul><li>AI makes engineering output cheaper in time and effort.</li><li>Cheaper output expands the space of products that are worth building.</li><li>Expanded product space pulls in more total engineering work, not less.</li></ul><p>That is the rebound effect in software form. When it becomes dramatically cheaper to add a feature, build an integration, ship a niche product, or automate a workflow, the world asks for more of it. (<a href="https://news.northeastern.edu/2025/02/07/jevons-paradox-ai-future/">Northeastern Global News</a>)</p><p>This reinforces the layoff thesis. Companies that treat AI as a reason to reduce engineering capacity are betting against a demand expansion effect that shows up repeatedly in technology transitions.</p><h3>The new benchmark is being set by AI-native companies</h3><p>This is where the conversation gets spicy, because the public-company RPE numbers, impressive as they are, may soon look conservative compared to what AI-native startups can do.</p><p>The reason is that coordination costs are collapsing. AI does not just write code. It compresses the time it takes to:</p><ul><li>explore implementation options,</li><li>generate tests and scaffolding,</li><li>refactor safely,</li><li>write documentation,</li><li>handle the long tail of support and integration.</li></ul><p>When that happens, small teams can service big markets. This is the “tiny team, huge revenue” phenomenon that people talk about like a meme, but it is increasingly measurable.</p><p>Let’s look at three modern examples: OpenAI, Anthropic, and Cursor.</p><h3>OpenAI: roughly $5M per employee at 2025 run-rate</h3><p>OpenAI’s CFO said annualized revenue exceeded $20B in 2025, up from $6B in 2024. (<a href="https://www.reuters.com/business/openai-cfo-says-annualized-revenue-crosses-20-billion-2025-2026-01-19/">Reuters</a>) OpenAI also published a similar breakdown of revenue growth on its own site. (<a href="https://openai.com/index/a-business-that-scales-with-the-value-of-intelligence/">OpenAI</a>) Combine that with the Wall Street Journal’s report of roughly 4,000 employees, and you get a simple run-rate estimate:<br>$20B annualized revenue / 4,000 employees = about $5M per employee. (<a href="https://www.wsj.com/podcasts/tech-news-briefing/tnb-tech-minute-openais-pay-packages-are-larger-than-any-major-tech-startup-in-history/74378f27-fc05-49ca-96e7-1ac4768b1cde?gaa_at=eafs&amp;gaa_n=AWEtsqeR_kobUxaZbAb_Psf4CfMfA6tn5RQeUUlj_I1bNY_432WaSPsAvwJz&amp;gaa_sig=svjGA7d8fd3gOdIfs97YCW8cMqg-KwKRQh7wUywfp2WysqTxodftYpd5NPjkZWLJK338LirGf0mwJ_hY7NITxw%3D%3D&amp;gaa_ts=697f957e">The Wall Street Journal</a>)</p><p>This is a rough estimate because “annualized revenue” is not audited full-year revenue, and headcount changes throughout the year. It still gives you a clear signal: AI-native businesses can reach multi-million-dollar revenue per employee at scale, quickly.</p><h3>Anthropic: plausibly $3M to $4M per employee at late-2025 run-rate</h3><p>Reuters reported Anthropic’s run rate was approaching $7B in October 2025 and that the company projected $9B in annualized revenue by the end of 2025. (<a href="https://www.reuters.com/default/artificial-intelligencer-inside-anthropics-ambitious-2026-revenue-goal-2025-10-16/">Reuters</a>) San Francisco Chronicle reported Anthropic had over 2,500 employees around that time. (<a href="https://www.sfchronicle.com/realestate/article/anthropic-downtown-building-lease-21324597.php">San Francisco Chronicle</a>)</p><p>Run the same math:</p><ul><li>$7B / 2,500 ≈ $2.8M per employee</li><li>$9B / 2,500 ≈ $3.6M per employee</li></ul><h3>Cursor: early signals already reach into eight figures per employee</h3><p>Public numbers here are usually ARR and point-in-time headcount snapshots, so this section is more about directional evidence than precision.</p><p>Fast Company reported that Anysphere had about 20 employees when its ARR reached $100M, implying roughly $5M per employee at that moment, and described later reporting that put ARR around $300M, implying roughly $15M per employee at that snapshot. (<a href="https://www.fastcompany.com/91322491/ai-coding-tools-could-bring-us-the-one-employee-unicorn">Fast Company</a>) Separate reporting from TechCrunch and Bloomberg described Anysphere surpassing $500M in annualized revenue or ARR by mid-2025. (<a href="https://techcrunch.com/2025/06/05/cursors-anysphere-nabs-9-9b-valuation-soars-past-500m-arr/">TechCrunch</a>)</p><p>That is not a stable long-term ratio, and it does not need to be. It is a flashing sign that the ceiling on revenue per builder is moving upward.</p><p>This is where the “$10M to $30M per engineer” thesis stops sounding like sci-fi. We already have early-company snapshots brushing up against the low end of that range, and the underlying drivers still have room to run.</p><h3>Let’s talk about Block</h3><p>A few days ago (Feb. 26, 2026), Block announced it would cut more than 4,000 jobs — roughly 40% of the company — explicitly framing the move as an “AI overhaul” that lets smaller teams move faster. Markets loved the story in the moment; multiple outlets reported a sharp share jump after the announcement, alongside guidance and restructuring changes that put a number on how disruptive this “efficiency” really is. (<a href="https://www.reuters.com/business/blocks-fourth-quarter-profit-rises-announces-over-4000-job-cuts-2026-02-26/?utm_source=chatgpt.com">Reuters</a>, <a href="https://www.barrons.com/articles/block-shares-earnings-job-cuts-9d1d45af?utm_source=chatgpt.com">Barron’s</a>)</p><figure><img alt="Jack Dorsey at TED Conference — https://www.flickr.com/photos/tedconference/33746814018 — Creative Commons" src="https://cdn-images-1.medium.com/max/1024/1*5TtcrOTlQApOnH0yhfqEIg.jpeg" /><figcaption>Jack Dorsey at TED Conference — <a href="https://www.flickr.com/photos/tedconference/33746814018">https://www.flickr.com/photos/tedconference/33746814018</a> — Creative Commons</figcaption></figure><p>Another pitfall isn’t just the existence of a layoff event. The pitfall is the <em>cadence</em> — and how it changes behavior inside a high-trust, high-stakes financial product company.</p><p>Block has been on a repeated “shrink to move faster” loop:</p><ul><li>Around ~1,000 cuts in January 2024 as part of a plan to reduce headcount. (<a href="https://www.reuters.com/technology/jack-dorseys-block-starts-cutting-jobs-under-previously-disclosed-plan-source-2024-01-30/?utm_source=chatgpt.com">Reuters</a>)</li><li>931 more cuts in March 2025, with leadership explicitly saying it wasn’t about replacing people with AI. (<a href="https://techcrunch.com/2025/03/25/read-the-email-jack-dorsey-sent-when-he-cut-931-of-blocks-staff/?utm_source=chatgpt.com">TechCrunch</a>)</li><li>And now a far larger cut in February 2026, with leadership explicitly making AI the center of the justification. (<a href="https://www.reuters.com/business/blocks-fourth-quarter-profit-rises-announces-over-4000-job-cuts-2026-02-26/?utm_source=chatgpt.com">Reuters</a>, <a href="https://www.wsj.com/business/how-jack-dorsey-explained-cutting-almost-half-of-blocks-staff-6245ec55?utm_source=chatgpt.com">WSJ</a>)</li></ul><p>That “AI did it” storyline is somewhat a deflection. Even if AI tooling genuinely boosts productivity, repeated downsizing turns the organization into a set of short-term survival strategies:</p><ul><li>teams over-document to defend headcount rather than to improve systems</li><li>people ship safer, smaller bets because big bets feel career-risky in a churny org</li><li>internal trust erodes, and you start paying coordination tax on everything</li><li>the best people quietly optimize for portability (because they’d be irrational not to)</li></ul><p>And in fintech, the hidden cost is worse: reliability, fraud controls, regulatory/compliance work, incident response, and customer support aren’t “nice-to-haves.” They’re the moat. When your cuts hit across functions that include engineers, data roles, design, and legal/compliance-adjacent talent, you’re not just trimming fat — you’re thinning the connective tissue that keeps money movement safe. (<a href="https://www.sfchronicle.com/tech/article/layoffs-block-jack-dorsey-20242797.php?utm_source=chatgpt.com">SF Chronicle</a>)</p><p>It’s worth being explicit about what we <em>don’t</em> know: Block (like most companies) doesn’t publish a clean “number of software engineers” figure, and outsiders shouldn’t pretend otherwise. What we <em>can</em> say with confidence is that a public, repeated pattern of cuts — now framed as an AI inevitability — is an instability signal that customers, partners, and candidates can read in plain English. (<a href="https://www.reuters.com/sustainability/sustainable-finance-reporting/block-shares-soar-dorsey-leans-ai-trim-workforce-2026-02-27/?utm_source=chatgpt.com">Reuters</a>, <a href="https://www.marketwatch.com/story/block-says-ai-will-let-it-cut-more-than-4-000-jobs-some-argue-thats-not-the-whole-story-6f85d7b8?utm_source=chatgpt.com">MarketWatch</a>)</p><h3>The chess move: the companies that stop laying off will hire the best people from the companies that keep doing it</h3><p>Once you see the above dynamics, the incentive landscape changes.</p><ul><li>Companies that keep laying off engineers signal fear and short-term thinking.</li><li>Companies that quietly hire and keep teams stable signal opportunity and compounding.</li></ul><p>In a world where AI makes engineers more productive and where RPE trends up, “keep the team intact” becomes a recruiting strategy. The best engineers often have the same instinct: they want to build inside a compounding system, not inside a rotating exit door.</p><p>And because compensation is likely to rise with the value per engineer, there is a second incentive for smart companies: hire sooner to lock in the cost basis, then grow into it as output per engineer climbs.</p><h3>A practical forecast, not a prophecy</h3><p>Here is a safe way to talk about future RPE without pretending we can see the future.</p><p>Assume a mature big-tech company sees RPE growth of 8% to 12% per year over the next 5 years because:</p><ul><li>AI improves developer throughput,</li><li>support and internal operations get automated,</li><li>and AI spend becomes more efficient over time.</li></ul><p>A company at $2M RPE today becomes roughly $3M to $3.5M in five years under those assumptions. That shift is big enough to change hiring incentives and labor pricing, even if margins wobble and even if some AI spend remains heavy.</p><p>Now combine that with AI-native companies setting higher baselines today. When the “new normal” includes $5M per employee at scale, it becomes rational for CEOs to treat top engineering talent as the primary growth input, not a cost to be trimmed.</p><h3>What do, us, software engineers even do? (and what AI can/can’t automate)</h3><p>I’m a software engineer and I get asked a lot of the time what I actually do. I usually answer by abstracting it into super simple terms that the layperson can understand, like, “I help develop the Venmo iOS app”, or “I make cool websites.” But this is a large understatement as to what I actually do on a day-to-day basis, and I think it’s worth calling out and elaborating on what, we, software engineers actually do. In fact, some companies don’t even use the term “software engineer”, but rather “individual contributor”, because since our responsibilities cut across so many concerns, coding is one of the smallest aspects of what we actually do, especially for more senior roles.</p><p>In a <a href="https://youtu.be/p2aea9dytpE">recent video by Theo (t3.gg)</a>, he uses a great infographic to explain what software engineering looks like in practice: <strong>a “user problem” turns into a sequence of steps — describe it, find a solution, scope it, implement it, review it, test it, plan the release, and ship</strong>.</p><p>That framing is useful because it highlights the part most non-engineers <em>overweight</em>: <strong>“write code” is only one box</strong>. The job is mostly about turning messy reality into reliable systems — and then owning the consequences when reality fights back.</p><p>Below is a grounded way to describe each step, plus how automatable it is <strong>today</strong> vs. <strong>in principle</strong>.</p><h4>Describe the problem</h4><p>This is the “translate human chaos into something buildable” step. Engineers take <em>“it’s broken”</em> or <em>“I want a button that does X”</em> and turn it into concrete repro steps, definitions of success, constraints, and edge cases. Some of this is already helped by automation (log summaries, error grouping, drafting clarifying questions), but the hard part is usually <em>not</em> technical: it’s ambiguity, conflicting goals, and unstated assumptions.</p><p><strong>Automatable today:</strong> medium<br><strong>Automatable in principle:</strong> medium-high (because the problem is often social/organizational, not just computational)</p><h4>Identify the solution</h4><p>Here’s where tradeoffs get made: architecture, data model, security posture, latency/cost targets, failure modes, and how to recover when things go wrong. AI can suggest patterns and generate a lot of code, but the “best” solution depends heavily on local context: existing systems, team conventions, future roadmap, compliance needs, and risk tolerance. That context is usually the scarce resource.</p><p><strong>Automatable today:</strong> low–medium<br><strong>Automatable in principle:</strong> medium-high in constrained domains; lower in open-ended product work</p><h4>Scope and assign work</h4><p>This is the planning reality check: break work into shippable slices, sequence dependencies, estimate risk, and coordinate with other teams. Tools can help draft task breakdowns, but prioritization and sequencing are fundamentally about people, incentives, and organizational constraints — things that change mid-flight.</p><p><strong>Automatable today:</strong> low-medium<br><strong>Automatable in principle:</strong> medium-high only in highly standardized orgs</p><h4>Write the code</h4><p>Yes, engineers write code — but usually inside an already-running, already-complicated system. The work is integration: using existing APIs correctly, respecting performance and security constraints, handling weird legacy behavior, and making changes without breaking downstream consumers. AI is already strong at scaffolding, boilerplate, refactors, and well-trodden patterns. It’s less reliable when requirements are subtle, the system is large, or failures are expensive.</p><p><strong>Automatable today:</strong> medium–high (depending on the task)<br><strong>Automatable in principle:</strong> high in well-specified, well-instrumented codebases</p><h4>Review the code</h4><p>Code review is quality control and knowledge transfer: correctness, security, maintainability, operability, and “does this actually match the intent?” Automation helps with linting, static analysis, and even AI-assisted review comments, but review is also where teams catch misaligned assumptions and prevent future maintenance debt. That “sense-making” is partially automatable, but accountability and judgment remain human.</p><p><strong>Automatable today:</strong> medium<br><strong>Automatable in principle:</strong> medium–high if specs/tests are strong; still needs human ownership</p><h4>Test the code</h4><p>Testing isn’t just writing tests — it’s deciding what <em>must never break</em>, choosing the right test strategy, debugging failures, and dealing with flaky or nondeterministic behavior. AI can help generate unit tests and suggest coverage gaps. But validation against real-world behavior (especially distributed systems, race conditions, and data migrations) is still stubbornly hard.</p><p><strong>Automatable today:</strong> medium-high<br><strong>Automatable in principle:</strong> high in deterministic systems; medium where the world is messy and has extensive domain based knowledge</p><h4>Plan the release</h4><p>This is where engineering meets operational risk: rollout strategy, feature flags, migrations, monitoring, incident playbooks, compliance gates, and communication. Automation is already good at the mechanics (pipelines, checklists, release notes drafts), but deciding <em>how risky this is</em> and <em>what guardrails you need</em> is still a judgment call.</p><p><strong>Automatable today:</strong> medium<br><strong>Automatable in principle:</strong> high for mechanics; medium for risk decisions</p><h4>Release (and own it)</h4><p>Shipping isn’t “click deploy.” It’s monitoring, responding to incidents, rolling back safely, and learning from production behavior. CI/CD can automate deployment, and AI can help diagnose issues, but the key thing here is ownership: when the system breaks at 2am, someone has to make correct calls with incomplete information, coordinate stakeholders, and protect customers.</p><p><strong>Automatable today:</strong> high for the button-pushing; low–medium for the ownership<br><strong>Automatable in principle:</strong> medium (automation can ship; it can’t fully replace accountable decision-making)</p><h3>Two small clarifications worth adding to Theo’s flow</h3><ol><li><strong>It’s a loop, not a ladder.</strong> A release creates new user problems (bugs, scale limits, confusion, new requests), so the process repeats. And the more we integrate this process with AI, this loop spins faster and faster, creating more valuable/impactful work for the humans involved.</li><li><strong>There’s an implied missing category: operations &amp; maintenance.</strong> A lot of engineering is keeping systems healthy — monitoring, on-call, security patching, performance tuning, cost control, and incident response.</li></ol><p>So, as you can see, integrating AI into a company is not simply a matter of writing more code faster. It’s a lot more complicated than that. And I think a lot of companies are going to figure this out the hard way.</p><h3>How software engineering interviews should change in an AI-forward world</h3><p>If the job is changing, the hiring signals have to change too.</p><p>I’ve been interviewing recently, and, fortunately, landed a job at Venmo (thank you Venmo! 🙏), and one thing is super clear: the standard LeetCode-style interview loop needs to change. It optimizes for a world where writing correct code under pressure is the scarce skill. That world is fading. Code generation is becoming cheap. The scarce skills are shifting toward judgment, clarity, fundamentals, debugging, and system thinking.</p><p>I think the better interview loop in 2026 looks like this:</p><ol><li><strong>Fast-paced fundamentals, done conversationally.</strong><br>Arrays, bits, hash maps, concurrency, latency, memory behavior, and basic algorithmic tradeoffs. Not as a puzzle. As a discussion that moves quickly, because speed and fluency matter, and because conversation is harder to outsource to a tool in real time.</li><li><strong>Debug prompting and “explain what you see.”</strong><br>Give the candidate a broken system, a confusing log, or a failing integration, then ask them to reason about it out loud. The signal is how they cut the problem, form hypotheses, instrument, and iterate. Bonus points for explicit, high-quality prompts that they would feed to an AI assistant in the middle of the mess.</li><li><strong>Spec writing and planning.</strong><br>Ask them to plan a feature in writing. Define constraints, identify risks, propose milestones, and decide what to measure. Then ask them to generate a prompt, or a sequence of prompts, that would produce a first implementation draft, plus tests and validation.</li><li><strong>System design, plus “design it with agents.”</strong><br>Classic scalability questions still matter. Now add a second layer: how would you use AI agents to accelerate implementation without creating a security and reliability disaster? Where do you put guardrails? What do you log? What do you treat as a dangerous action?</li></ol><p>Cheating mitigation is part of this, whether we like it or not. As tools get better, the industry may move toward more in-person interviews for final rounds, or at least toward tightly proctored environments for the parts that are supposed to measure individual fluency. That is not a moral judgment. It is a practical response to changing technology.</p><h3>The title “software engineer” probably needs an update</h3><p>Once you watch how people work with agents, the phrase “software engineer” starts to feel incomplete. It captures the output, but not the method. More and more, the work is:</p><ul><li>writing specs that agents can execute</li><li>orchestrating tool-using systems</li><li>validating and debugging AI-produced output</li><li>designing guardrails and safety layers</li><li>shipping features at a speed that would have seemed reckless a few years ago</li></ul><p>So I expect titles to get weird and maybe a little fun. Some candidates:</p><ul><li>Agentic Engineer</li><li>Spec Engineer</li><li>Agent Orchestrator</li><li>AI Conductor</li><li>AI Maestro</li></ul><p>The actual name does not matter as much as the shift it signals. The center of gravity is moving from typing to steering, from crafting code line by line to crafting systems that can generate, test, and adapt code safely. <a href="https://steve-yegge.medium.com/">Steve Yegge</a> has a number of <a href="https://steve-yegge.medium.com/software-survival-3-0-97a2a6255f7b">excellent articles</a> that go into more depth about this coming transition, and has built fascinating tools, such as <a href="https://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04">GasTown</a> which demonstrate this in reality (<a href="https://github.com/steveyegge/gastown">GitHub</a>).</p><h3>Where we are headed long term: AI-controlled companies as competitors</h3><p>The most uncomfortable version of this forecast is also the one that makes the “do not lay off engineers” argument feel the most urgent.</p><p>I think we are heading toward companies with minimal human control, and eventually companies that are almost entirely run by AI agents. Some will still have human owners and boards. Some will have humans in the loop only for the most sensitive decisions. Some will push even further. I was laughing out loud recently when I was listening to an episode of <a href="https://www.diamandis.com/podcast">Moonshots</a> (excellent, bleeding edge, AI podcast by the way; follow <a href="https://x.com/PeterDiamandis">Peter Diamandis</a>, and his regular podcast hosts for more excellent content like this), and <a href="https://youtu.be/C1GLT9_tag0?si=INHszXs3WWrWg0hT&amp;t=2100">Dr. Alex Wissner-Gross explained</a> a story from the old cartoon, the Jetson’s, where work in that future heavily relied on “clicking the accept button” 😆 In my personal experience, this is so true. And I think our work will keep heading more and more in that direction, as we build more trust from the quality of the outputs they generate. (By the way, if you’re interested in daily AI-related news, I highly recommend following <a href="https://theinnermostloop.substack.com/">Dr. Wissner-Gross’ excellent substack: The Innermost Loop</a>)</p><p>We are already seeing people experiment with letting agents run loose socially and operationally. The recent wave around <a href="https://openclaw.ai/">OpenClaw</a> and <a href="https://en.wikipedia.org/wiki/Moltbook">Moltbook</a> is a bizarre, very early hint. The Verge reported Moltbook as a social network designed for AI agents, developed by OpenClaw, with large numbers of agents posting and interacting. (<a href="https://www.theverge.com/ai-artificial-intelligence/871006/social-network-facebook-for-ai-agents-moltbook-moltbot-openclaw">The Verge</a>)</p><p>Once that impulse reaches operations, you get a new class of entity: an agent-driven company that ships continuously, buys compute, runs ads, A/B tests pricing, files paperwork, hires contractors, pays invoices, and iterates on product direction based on metrics, with humans mostly observing.</p><p>If that sounds dystopian, it is because we do not have a clear legal and societal framework for it yet. That uncertainty is a reason to move cautiously on governance and safety. It is also a reason to avoid shrinking the very workforce that can build the guardrails, audit trails, and control systems that make this future less chaotic.</p><p>This whole arc reminds me of <a href="https://en.wikipedia.org/wiki/The_Animatrix#The_Second_Renaissance,_Part_II">The Second Renaissance</a> in <a href="https://en.wikipedia.org/wiki/The_Animatrix">The Animatrix</a> (an excellent series of sci-fi shorts, related to the Matrix, highly recommended), especially the part where machine-driven economic entities out-compete human organizations and the transition spirals into conflict. I do not want that trajectory. I do think the short was prescient about how competition can force adoption even when society is not ready for the consequences.</p><p>So if you zoom out, the conservative posture for most software companies is not to shrink engineering hiring. It is to keep expanding it, with better signals, better training, and better guardrails, while the technology compounds and the competitive landscape reshapes itself.</p><h3>So what should companies do instead of layoffs?</h3><p>If leadership truly wants efficiency, there is a better order of operations:</p><ol><li>Cut coordination cost first. Reduce management layers, meeting load, approval chains, and increase individual autonomy.</li><li>Kill projects before killing builders. Cancel the zombies, not the teams that ship.</li><li>Invest in internal tooling and AI enablement. Make every engineer faster, safer, and more autonomous.</li><li>Protect senior context. A senior engineer leaving is not a headcount line item; it is a risk multiplier across systems.</li></ol><p>The argument is not “never lay off anyone.” The argument is that right now, in early 2026, layoffs in software organizations are often a bet against the near-term shape of the world.</p><h3>So what should Block, specifically, do instead?</h3><p>I’m sorry Jack, but the action of laying off 4,000 people does not mean your company got leaner. It means you just created 4,000 potential individual competitors, not bound by corporate red tape, and with access to the most powerful AI tools created, at pennies per token.</p><p>I’m gonna be the douchy armchair critic for a minute and give my best effort argument as to what Block should do instead, and perhaps still has a chance to do if they decide to reverse their layoffs and bring their employees back. This argument is based on many of the concepts and topics I touched on in this article. Basically, instead of laying off those 4,000 folks, the company should do an “AI Brainstorm”, where the leadership team has deep analyses and discussions with AI agents about what would be the most impactful, most profitable, feasible businesses, that require engineering effort, right now. This brainstorm should not be haphazard; it should be deep, thoughtful, and cooperative, with human insight to steer the ideas, according to Block’s vision. The result of these discussions should be a distillation of the top, say, 100 ideas that the AI’s came up with. Then reorganize your 4,000 people who were just laid off by allowing them to vote and/or decide on which of these projects are most interesting to them, so they’ll fully put their heart and mind into the work. And now you’ve just created 400 potential internal unicorn companies within Block, with a lean size of roughly 40 individuals each. And each team will be greenfield, and utilize AI from the ground up, just like Anthropic, OpenAI, and Cursor. If even a few of those ideas hit big, then you’ve just created way more value for your company, and the world, in a fraction of the time it would have taken, otherwise. This is a radical concept, but other companies already have somewhat similar initiatives already, albeit at a smaller scale, such as Google. And one of these internal companies basically became Waymo, which I believe will be a unicorn, when scaled up.</p><h3>Putting it all together</h3><p>I hope I’ve opened people’s eyes into the potential future of what the tech world will look like, and even seeded some cool, new ideas for people to ponder and implement at their companies. All signals lead to this core concept: if AI assistance continues to improve and continues to commoditize, then revenue per engineer rises. When revenue per engineer rises, demand for engineers rises. When demand rises, labor costs rise. The companies that understand this early will hire earlier, lock in capacity earlier, and out-execute the companies still optimizing for the last era. And these are the companies that will win. These are the companies that will produce the most value for the world. And I’m excited to see what they’ll build next.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2542e31e83ca" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to Fix the United States: Extended Edition: A New America]]></title>
            <link>https://medium.com/@peterryszkiewicz/how-to-fix-the-united-states-extended-edition-a-new-america-b0e4f220dbd0?source=rss-5695106bc7f5------2</link>
            <guid isPermaLink="false">https://medium.com/p/b0e4f220dbd0</guid>
            <dc:creator><![CDATA[Peter (Justice for the Victims) Ryszkiewicz]]></dc:creator>
            <pubDate>Sat, 14 Feb 2026 15:29:40 GMT</pubDate>
            <atom:updated>2026-02-16T15:58:00.121Z</atom:updated>
            <content:encoded><![CDATA[<p>It’s becoming increasingly clear that there exists two distinct classes of individuals in the United States: those who abide by the laws, and those who make the laws. Because of this, I’m afraid if we keep going down this path, as a nation, we are heading for very dark times ahead. And we can’t even vote our way out of this, because this corruption spans both sides of the isle and multiple administrations. But if we cannot even trust the very people who were sworn to protect us, and if these people hold all the power in society, then how are we supposed to rise up and fight back?</p><p>We have a few options actually, and ideally, peaceful ones.</p><h3>Tax Strike/Extensions</h3><p>This country was founded in the spirit of “<a href="https://en.wikipedia.org/wiki/No_taxation_without_representation">no taxation without representation</a>.” America was essentially ruled over by the folks across the pond. But us Americans didn’t really have a say in how our lives were conducted or ruled over. And that was unfair. So in order to fix that unfairness, people started talking. And when enough people started talking and aligning on the same central idea, that if the rulers are making rules without even taking into consideration the opinions of those who are ruled over, then… “What the FUCK?!”</p><p>That is essentially what is happening right now in our country, but in a much different set of circumstances and with much different tools at our disposal. Back then, news traveled by horse. Today, news travels at the speed of light, sometimes blinding us with its intensity. But this gives us a great power that our forefathers never had, and probably could not even dream of: instantaneous realignment and assembly.</p><p>There’s still two months left before the standard tax filing deadline in the United States. What would happen if 300 million Americans decided to not pay, or at the very least, file for an extension? I’ll tell you what happens: <strong><em>They will listen.</em></strong></p><h3>General Strike</h3><p><a href="https://www.reddit.com/r/Epstein/comments/1r69cgh/comment/o5ofpho/?utm_source=share&amp;utm_medium=web3x&amp;utm_name=web3xcss&amp;utm_term=1&amp;utm_content=share_button">A friendly Redditor</a> pointed out to me another good option for getting them to pay attention: a general strike. I originally thought of putting this in my article but felt a bit disheartened at how the government is currently simply ignoring all strikes and things just move on, business as usual. But I think with the right volume of people, this could have a much stronger impact, and there is evidence that with a high enough volume of people, things start to change.</p><p>Here are a interesting few snippets suggesting the probable impact of a strike that involves a minimum of 3.5% of the US population, taken from <a href="https://generalstrikeus.com/">https://generalstrikeus.com/</a></p><p>A general strike is when working people refuse their labor until demands are met • Research shows We need 3.5% of the population, OR 11 million Americans, to be successful • The same research shows a threshold of 3.5% of the population have never failed to bring about change.</p><p>One problem specifically with the generalstrikeus.com website is that I cannot easily find out who owns and who runs it, and therefore I don’t trust it. That type of obfuscation is suspicious, so take caution with engaging with that website. They should ideally have an About page clearly showing who runs it, so that we know it is genuinely grassroots, and not just claiming to be (they claim to be grassroots on their homepage).</p><p>Here is the lookup information from <a href="https://lookup.icann.org/en/lookup">https://lookup.icann.org/en/lookup</a>, where you can see much of the information is redacted</p><pre>Registrant:<br>Handle: SQSP_CONTACT_00d8fe6d-9bf4-48f3-ac5c-faad5538080d<br>Name: The RDAP server redacted the value<br>Organization: The RDAP server redacted the value<br>Phone: The RDAP server redacted the value<br>Fax: The RDAP server redacted the value<br>Mailing Address: The RDAP server redacted the value<br>ISO-3166 Code: US<br>Contact Uri: https://domains.squarespace.com/whois-contact-form</pre><h3>A New Hope for A New America</h3><p>Even if the American people pulled off this widespread Tax Strike, what next? What are we actually demanding from the Federal governments and State governments? I’ve thought about this, for just a few days, but I was able to come up with many sound, common-sense answers to most peoples’ most pressing logistical/practical questions. I will go over these now:</p><h4>What Happens to the Federal Government?</h4><p>Effective immediately, all federal politicians AND employees are ether laid off, or have a temporary period of “wind down” time and then be laid off, with very few exceptions. This will give us time to transfer most responsibilities to the states. And with this layoff, everyone will receive comfortable severance packages; let’s say 2 years of income. I don’t think anyone can argue that that isn’t fair. And we know the Federal Reserve is good for it. This will give folks plenty of time to restructure and reorganize their lives and find new jobs.</p><p>I generally align with a Milton Friedman / libertarian view for how the federal government should operate: essentially, we need to protect individual <strong><em>FREEDOM</em></strong> and enforce private property rights. And everything else naturally follows from that. If we still collect federal taxes, they will be minuscule, only to pay for things we actually need, and there will be permanent spending caps or caps tied to GDP/economic health. There will be no federal emergency funding; states will now take that helm, and I will explain more in detail later on in this article.</p><p>And we should adopt new rules for politicians. Did you know, that <a href="https://www.politifact.com/factchecks/2020/jan/22/facebook-posts/yes-congress-has-disproportionate-share-millionair/">roughly 50% of politicians have a net worth over 1 million dollars</a>? Can you guess what percent of the general population has a net worth over 1 million? About 1%…. What the FUUUCK?!</p><p>It is clear, these “politicians” no longer represent the American people. They have no idea how the average American lives and what struggles we go through. They are insulated and protected from all the situations normal people deal with on a day to day basis. They don’t understand how to legislate over us. They make friendly rules for their lobbyist fiends on Wall Street and pocket millions. We need to fix that. So, from here on out, we are instantiating a new rule about the eligibility of running for office: if your net worth, or your immediate friends or families’ net worth, is over 10 times the median income for your locality, you are no longer eligible. This guarantees that “normal” people will get elected, and run for office, with some healthy headroom for outliers.</p><p>What does 10 times the yearly median income look like today? Well, <a href="https://en.wikipedia.org/wiki/List_of_U.S._states_and_territories_by_income">the median American income in 2023 was roughly $78,000</a>. So if we multiply that by 10, we get $750k. And this will be tied to locality, so folks in California will have different numbers than folks in Alabama. The point is, that eligibility for office is tied to how rich you are. <strong><em>If you are too rich, you’re simply out of touch with the average American.</em></strong></p><h3>New Responsibilities for the States/Federal Government</h3><p>I’m sure most people will immediately scoff at the idea of not having a federal government. And I can agree, to a very small extent. And here is how we find new solutions for all the problems we just created:</p><h4>Money and The Federal Reserve</h4><p>How will the US Dollar function? Easy: abolish it. It will have a “wind down” period of 5 years, where after this deadline, the US Dollar becomes disavowed/unrecognized by the world economy. Then, you might ask, how the hell will things work? How will we do global trade and commerce? Again, easy: use <a href="https://medium.com/@whatbitcoindid/andreas-m-antonopoulos-on-what-happens-when-bitcoin-takes-over-ac77e2269bfb">the new fair, decentralized, uncontrollable, public, transparent, neutral, censorship-resistant, global, and trust-less technologies at our disposal: Bitcoin and Lightning.</a></p><p>Granted, this does not have to be the case for all 50 States. Which is why the States will have the <strong><em>FREEDOM</em></strong> to adopt whatever currency or basket of currencies they’d like. This should be a <strong><em>FREE MARKET</em></strong> decision, not a top-down, centralized, communistic mandate. I find it funny that in America, pretty much everyone agrees that business competition generally makes things better and more fair, whereas monopolies and collusion makes things worse. Except for this one, very little thing, called the US Dollar: we have adopted a top-down, command-economy, instead of a proper market-economy, which we do for just about every other aspect of the economy in the US. We need to move away from this communist, command-economy institution, we call the Federal Reserve. It wasn’t even a thing until 1913. The US functioned without it until then. And we don’t “need” it any more. We can easily spin up new currencies on Ethereum or Solana with a few lines of code, and there are fast ways to convert to and from any of these currencies, and more. (I don’t actually like Ethereum and Solana; I lean more Bitcoin Maxi, but I just use these as an example of the idea that we no longer need a centrally controlled, fallible, human controlled, currency, and it is trivially easy to make new currencies now, which was not the case pre-internet.)</p><p>So, let’s leave it up to each state to decide which currency is the best for their local economy, and I’m sure we will see trends and patterns emerge about which state picked better or worse currencies, which will be a signal for the rest of the world to follow.</p><h4>The Constitution</h4><p>What happens to the Constitution? Easy: we reset back to the Bill of Rights, with perhaps a few additions/amendments. We can discuss and argue about those amendments, but the point is that our founding fathers got some things right, and the Bill of Rights was definitely one of them.</p><h4>Defense</h4><p>How will the States defend themselves? Simple: we will form a Union, analogous to the European Union, where each member state cooperates and assigns duties and responsibilities and coordinate among themselves.</p><p>Ironically, we are already called the United States; perhaps we can keep that moniker and just adjust the underlying details.</p><h3>Other Finer Details</h3><p>I’m sure we can discuss and debate the finer details ad-infinitum. My major guiding principle is to “make illegal states unrepresentable”, which I borrow from the software engineering world. Ironically, the term “state” here fits very nicely in this governmental context as well. The major point here is that the <strong><em>American people want a hard reset. We are sick and tired of being ruled over by murderous asshole pedophiles. Enough is enough! This ends NOW!</em></strong></p><p><strong>Evil fears light. We should use the internet and any and all other tools to shine this light as brightly as possible.</strong></p><p>I don’t have all the answers, and I don’t pretend to. I just want people to start talking about and discussing these things, openly. We will naturally figure out all the details over time, as we always do. We must exercise our First Amendment Right to <strong><em>FREEDOM OF SPEECH</em></strong>, as much as possible, lest it be trampled on and trumped over. But the bigly point remains: our current institutions are broken, and there is no good/safe/sustainable way to fix them, other than throwing it all away and starting fresh. But that is not the end of this country. We will rise up again, like a Phoenix from the ashes. And America will truly be great again.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b0e4f220dbd0" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How To Fix The United States]]></title>
            <link>https://medium.com/@peterryszkiewicz/how-to-fix-the-united-states-8a7270d7b55f?source=rss-5695106bc7f5------2</link>
            <guid isPermaLink="false">https://medium.com/p/8a7270d7b55f</guid>
            <dc:creator><![CDATA[Peter (Justice for the Victims) Ryszkiewicz]]></dc:creator>
            <pubDate>Thu, 12 Feb 2026 14:44:15 GMT</pubDate>
            <atom:updated>2026-02-12T16:33:08.268Z</atom:updated>
            <content:encoded><![CDATA[<p>I am absolutely disgusted with what’s happening in our country right now. Crooks are roaming free, killing and raping our children with no consequences. There is no justice for the victims. Our politicians are no longer properly enforcing the law. I don’t want to live in this kind of society without this being fixed asap. We must take a stand. A lot of people are confused or hopeless as to how to go about fixing this. The solution is actually quite clear, and was discovered hundreds of years ago: We are no longer represented by our politicians. They no longer represent the great American people who built this nation. Therefore, “No taxation without representation.” — James Otis</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/456/1*_O7k3TWeFjwlrGcIGfXBkg.jpeg" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8a7270d7b55f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Exploring Fibonacci Based Compression]]></title>
            <link>https://medium.com/@peterryszkiewicz/exploring-fibonacci-based-compression-8713770f5598?source=rss-5695106bc7f5------2</link>
            <guid isPermaLink="false">https://medium.com/p/8713770f5598</guid>
            <category><![CDATA[math]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[compression]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[Peter (Justice for the Victims) Ryszkiewicz]]></dc:creator>
            <pubDate>Sat, 03 Jan 2026 20:47:54 GMT</pubDate>
            <atom:updated>2026-01-06T03:48:22.423Z</atom:updated>
            <content:encoded><![CDATA[<p>Is there a way to compress data using Fibonacci numbers? When we look at nature, there are many emergent shapes that resemble a <a href="https://medium.com/r?url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FFibonacci_sequence">Fibonacci sequence</a> and <a href="https://en.wikipedia.org/wiki/Golden_ratio">golden ratios</a>, from sea shells to plants to spiral galaxies. Why does this pattern seem to pop up in nature so often?</p><figure><img alt="Spirals in Aloe — https://www.flickr.com/photos/brewbooks/184343090" src="https://cdn-images-1.medium.com/max/1024/1*ssdRv6Rifx5rRxVbQiu9JQ.jpeg" /><figcaption><a href="https://en.wikipedia.org/wiki/Phyllotaxis">Phyllotactic</a> Spirals in Aloe — Source: <a href="https://www.flickr.com/photos/brewbooks/184343090">https://www.flickr.com/photos/brewbooks/184343090</a></figcaption></figure><p>This question bothered me. I mean, I could imagine that when stuff settles, it can’t help but fall into certain lower-energy patterns which then resemble self-repeating patterns like the Fibonacci series. And this process emerges, scaled up and down, throughout the universe. That makes sense. But could we possibly compress data with this idea? Could we “settle” data?</p><p>One way to think about this is to ask whether we could transform raw data from binary ones and zeroes to another, more compact sequence of ones and zeroes interchangeably without losing anything. There are already many compression algorithms out there that already do this that involve searching for common patterns in the input data and storing those patterns more compactly than the original data. But could we figure out an algorithm that uses Fibonacci numbers to shrink the data instead of searching the data for patterns?</p><p>One cool thing about the Fibonacci series is that any positive integer can be represented by a unique set of distinct, non-adjacent, Fibonacci numbers. This is called <a href="https://en.wikipedia.org/wiki/Zeckendorf%27s_theorem">Zeckendorf’s Theorem</a>. How would we represent an integer with these properties using binary ones and zeros? Let’s look at some simple examples. How about the number 12? Firstly, how is that number represented in regular binary? That’s 1100, which, for those unfamiliar with binary numbers, is 1*2^3 + 1*2^2 + 0*2^1 + 0*2^0 which is 8 + 4, or simply 12. See what we did there? Those “1”s in binary represent whether or not to include the corresponding power of 2.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2HuFZAHm66BTt461Lrb3Ng.png" /></figure><p>Ok, so how can we apply that to those unique properties of Fibonacci numbers? Let’s think again about the number 12. It took 4 bits to represent that number in binary. Could we do better? Let’s try to decompose 12 into a unique sequence of non repeating Fibonacci numbers. What is the largest Fibonacci number that fits into 12? 8. Ok, so we subtract 8 from 12 and we have 4 remaining. Now let’s do that process again. What’s the largest Fibonacci number that fits into 4? 3. Same thing: subtract 3 and we just get 1, our last Fibonacci number. The cool thing about this is that the number 12 was broken down into just 3 Fibonacci numbers. So, how does that help? Well, we can think of which Fibonacci numbers to utilize in order to sum up to our number we want to represent. If we want to include the Fibonacci term, we use a 1 in front of the corresponding Fibonacci number, and use 0 otherwise. So like binary, we can make a similar expression: 1*8 + 0*5 + 1*3 + 0*2 + 1*1 which equals 12. This expression is also an example of <a href="https://en.wikipedia.org/wiki/Fibbinary_number">Fibbinary</a>, where each bit tells whether or not to add the corresponding Fibonacci number, starting with 1, 2, 3, 5, 8, etc.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dXHfVqaexRZ5E27z03tehg.png" /></figure><p>“But Peter!” You might say. “That uses 5 bits of information to represent using Fibonacci! It looks like 10101!” I hear you. But we’re not done! Do we need all those bits? No! And the reason is pretty simple. If we ever see a ‘1’, we know the next digit must be a ‘0’. This is because if there ever were two consecutive ‘1’ bits in a Fibbinary representation, then we might as well use the next Fibonacci number that’s composed of those two smaller, consecutive Fibonacci numbers. This means we can omit zeros that occur after ones. Our bit representation “knows” to skip adding any Fibonacci numbers after a ‘1’ is seen. So how would we represent the number 12 again, using, what I’ll refer to from here on out, as “Zeckendorf representation”? Well, we had 10101 with Fibbinary representation. And we can just drop those unnecessary zeros because the prior 1’s already tell us to skip those Fibonacci numbers. So we are left with 111! That’s just 3 bits! And in binary, it took us 4 bits to represent the number 12! So we just saved a whole bit! That’s a 25% reduction!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*CpwE3CmArCC0GMoKSRp4KQ.png" /></figure><p>“But Peter, that’s just one bit! That’s not compression!” Well, technically it could be, if it scales to larger numbers. I’ve done some investigating and, unfortunately, it turns out that large numbers with smaller Zeckendorf representations are unlikely and there’s a limit to how good it can get. But this does allow us to more compactly represent numbers, and therefore, data, if it happens to fall on or close to a “well compressible number”.</p><p>What do I mean by a “well compressible” number? Well, we can think of the degenerate case where the Zeckendorf representation of the number is all 1’s, which can reach out to larger numbers “faster” than using binary representation, and each ‘1’ bit conveys more that 1 bit of classical binary information since it tells us the next digit to add cannot be the next Fibonacci number. For example, the binary number 11111111 is 8 ‘1’ bits. In binary, that represents the decimal number 255. But interpreting those 8 ‘1’ bits with Zeckendorf representation, it expands out to 1 + 3 + 8 + 21 + 55 + 144 + 377 + 987 = 1596, a much larger number than 255. And representing the decimal number 1596 as binary is “110 0011 1100”, which is 11 bits. So in this example, we were able to represent a number needing 11 binary bits with 8, a ~27% reduction.</p><p>Here are some graphs showing the ratio of bits necessary to represent numbers using Zeckendorf representation versus binary representation. The green line at 1.0 represents par compression; no benefit to using Zeckendorf representation. When the blue line dips below the green line, that demonstrates that the number on the x-axis had a Zeckendorf representation that used fewer bits than its binary representation. The following graph shows this compression ratio for numbers up to 1,000.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*oSoobrA9JtBXExMTlkOFDQ.png" /></figure><p>The graph below plots much more data, so it is easier to see interesting patterns for when the Zeckendorf representation was beneficial. Perhaps such patterns could be utilized to search for the optimal compression method. More on that later in the article.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0Nkp_MUNE97mN2GkUq1UTQ.png" /></figure><p>And just for fun, here is a graph for all numbers up to 100 million.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DrdM0_s_yMKXWFaS5Kzk8w.png" /></figure><p>So, as you can see, there is some potential for using these numbers to compress data. The tradeoff is that you are not guaranteed to be able to compress your data. This can be seen by how thick the blue lines are above the green line at par, versus the lesser amount of blue below the par line. Later in this article, I’ll go over some statistics for how likely this actually is. TLDR: the odds are not great for data larger than 1kbit, unfortunately.</p><h3>Why Does This Work?</h3><p>It is strange to think that there exist large numbers that require less information to represent than smaller numbers. On the surface, it seems to break long-standing ideas in information theory. I mean, we’ve known about data compression for a long time which is essentially the same concept of certain larger “numbers” requiring less information than certain smaller ones. But this Zeckendorf based transformation of data feels like a different class of compression algorithm altogether. After all, it’s an extremely simple algorithm and does not really require any knowledge or inspection of the input bits unlike other compression algorithms. We are simply taking a string of bits, interpreting it as a number, and representing it as a different string of bits.</p><p>My attempt at making this intuitive is to say that “representing a number with Zeckendorf bits produces a shorter string of bits if the input data was composed of lots of Fibonacci numbers.” The more Fibonacci numbers that the input was composed of, the better it can be “compressed”. The extreme case here is having a Zeckendorf number where all bits are 1. Later in the article, I will do some inspection on these numbers, which I will call “All Ones Zeckendorf Numbers”, or AOZNs. The extreme opposite case is having a number composed of only 1 Fibonacci number, so the string of Zeckendorf bits is mostly zeroes and one 1. I’ll call these numbers “poorly compressible”, with respect to Zeckendorf compression.</p><p>Since a number is better compressible if it is composed of many Fibonacci numbers, maybe we can make a connection here to the real world, where golden ratios and spirals emerge that are also composed of Fibonacci numbers. I haven’t settled on a term for this, but perhaps we can call it “settling” or a “settled number”, pun intended.</p><h3>Zeckendorf Compression</h3><p>I propose a couple standards for Zeckendorf based compression.</p><ol><li>Padless Zeckendorf Compression (<a href="https://en.wikipedia.org/wiki/Lossy_compression">lossy</a>)</li><li>Padded Zeckendorf Compression (<a href="https://en.wikipedia.org/wiki/Lossless_compression">lossless</a>)</li></ol><p>The Padless Zeckendorf Compression algorithm is essentially treating the input data as a big integer and then representing this big integer with Zeckendorf bits. I call it padless because when decompressing, if you don’t know the original file size, you might lose leading zeroes which should have been padded, because they were effectively dropped when interpreting the input data as an integer. Therefore, this is a lossy compression algorithm. The Padded Zeckendorf Compression algorithm retains the original size of the data in the output format, so that it can pad the decompressed output with leading zeroes. This loses some compression efficiency because, now, we need to store the original file size along with the compressed data, but it is lossless.</p><p>I have an MIT licensed open source implementation for these in Rust at <a href="https://github.com/pRizz/zeckendorf">https://github.com/pRizz/zeckendorf</a>, so anyone can play around with it. I have published a Rust crate of this library, called <a href="https://crates.io/crates/zeck">zeck</a>, and a corresponding WASM compiled npm package called <a href="https://www.npmjs.com/package/zeck">zeck</a>.</p><p>I also created a <a href="https://prizz.github.io/zeckendorf-webapp/">basic demo web application</a>, which uses the WASM compiled Rust code, to compress and decompress files losslessly by simply dragging and dropping. The website will tell you if the transformed data was or wasn’t smaller than the original. I have open sourced it on <a href="https://github.com/pRizz/zeckendorf-webapp">GitHub</a>. As of now, the algorithm requires improvement, because attempting to compress or decompress files larger than about 10kBits requires generating, caching, and dealing with Fibonacci numbers that are &gt; 10,000 bits long, which causes memory issues. That’s an astoundingly large number when you think about it: 2¹⁰⁰⁰⁰. For reference, the number 1 trillion only takes about 40 bits to represent. One of the largest named numbers is <a href="https://en.wikipedia.org/wiki/Names_of_large_numbers">a centillion</a>, which represents 10³⁰³ and takes only about 1,000 bits to represent. So we’re dealing with some pretty astronomical Fibonacci numbers here!</p><h4>Performance of Padless Zeckendorf Compression</h4><p>This compression is probabilistic, meaning it is not guaranteed to compress data since most Zeckendorf representations of integers require more bits than the input data. This is evident in the graphs above, where a majority of the blue lines are above the green line at par. Since it it probabilistic, I have generated some very basic statistics for how well or poorly this Zeckendorf compression algorithm performs at compressing data.</p><p>After testing, I discovered that there is a pretty steep drop in the odds of any random data being favorably compressible after the input data increases larger than a few hundred bits. Here is a graph demonstrating this falloff.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0b8YJoNXFIn6rRia15ebyQ.png" /><figcaption>The chance of compression being favorable at different input sizes</figcaption></figure><p>Early on in the graph, you can see that there is a decent chance of the data being smaller after being compressed, between 10–15% chance. But as the size of the input data grows, the graph collapses approaching a 0% chance of being compressible after around 1 kbit. Some examples for the way to interpret this graph are: if you supply 100 bits of random data, there is a ~10% chance of the output being smaller than 100 bits. If you supply 1 kbit of random data, there is only a ~0.01% chance of the output being smaller than 1 kbit.</p><p>Beyond that, it would be interesting to see how well the data does get compressed if it happens to be favorable. That is what I try to show with the graph below. It shows a number of different series based on compressing all inputs up to the value shown on the x-axis. For example, the dot on the x-axis at 1e5, means the corresponding y values used all numbers individually, up to 100,000, for compression. These scales are quite small, but they are comprehensive, in that all numbers up to the input limit were compressed. The reason I don’t go much higher is that it took very long (~20 minutes) to generate data on compressing all numbers up to 100 million, and the returns diminish as the data gets larger.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GWttaI0y3J95hsaBAY0ewQ.png" /></figure><p>Unfortunately, this graph does not test very large scales; the number 1e8 is 100 million, which only takes about 27 bits to represent. The graph below zooms out and shows the average and median compression ratios up to 5 kbits, using 250,000 random samples at each input data size.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qSpKZP7Vzgt6hRr35y_E9w.png" /></figure><p>You can see that the “favorable” compression ratios converge to around 1.0 after 1 kbit, which agrees with the prior graph showing the odds of compression being favorable. But the median and average “compression” (maybe “transformation” is a better term here because the size of the data tends to increase) tends to approach on the order of 1.042, meaning that on average, arbitrary data that is transformed by the Zeckendorf compression algorithm gets larger by about 4.2%.</p><p>There will naturally be outliers in these graphs at “All Ones Zeckendorf Numbers”, which is the degenerate case where all the bits in the Zeckendorf representation are ‘1’. But again, this is extremely rare for a piece of data to fall on or near those numbers, so it is difficult to see them in the graph. But there is potential for optimization if the input data could be slightly “massaged” to be nearer to an “All Ones Zeckendorf Number”. I go over that more in the next section.</p><h3>Further Compression Algorithms and Tweaks Related to Zeckendorf Compression</h3><p>I can imagine there is a lot more work to be done in figuring out more optimal and efficient algorithms based on this work. I will enumerate a few possible directions.</p><h4>“All Ones Zeckendorf Numbers”</h4><p>Whenever there is a “Zeckendorf Bits” list that is composed of all “use bits” or “1&#39;s”, then this number is able to “reach” out to higher numbers faster than binary. For example, let’s look at “1111”. In binary, this represents the decimal number 15 by summing 1 + 2 + 4 + 8 (or by doing 2⁴ — 1). But if we interpret this as four Zeckendorf “use bits”, we get 1 + 3 + 8 + 21 which equals 33, a number quite a bit larger than 15.</p><p>Below is a graph comparing the growth rate of “all ones Zeckendorf numbers”, or AOZN’s for short, to the Fibonacci numbers, binary numbers (2^n), and powers of 3 (3^n). And interestingly, I found a relation between the growth of Fibonacci numbers and powers of the golden ratio (φ, or 1.618…), as well as a relation between the AOZN’s and powers of the golden ratio squared, φ²: namely, these pairs of sequences grow at the same rate, just offset by some constant factor. You can easily see these pairs have very similar slopes in the graph.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wCHOPpO9atrPhkO5F4NziA.png" /><figcaption>Various number sequences plotted</figcaption></figure><p>If we consider a “lucky” example, let’s suppose we want to compress a file that happens to be not too “far” from one of these numbers represented by an AOZN. For example, let’s say our data was equal to a number equaling 100k ‘1’ Zeckendorf bits plus 1k arbitrary bits. As raw data, summing 100k Zeckendorf Use Bits produces a number that takes about 138k bits to represent in binary. With this, we can represent our 138k of data with two pieces of information: the count of ‘1’ bits in the AOZN and those arbitrary 1k bits. Since there are 100k one bits, we can just represent this part with the number 100,000. The number 100,000 only takes roughly 17 bits to represent (log2(100,000)). So we can specify a file format that is the combination of these two pieces of information, which only needs roughly 1k bits plus 17 bits. So we have effectively compressed our data from 138k bits to about 1k bits, a 99% reduction. This seems great, but the catch is that it is extremely rare for data to be “near” an AOZN. In general, most numbers are far enough from an AOZN such that it takes roughly the same number of bits added to that number to produce the target data, which results in no savings.</p><h4>Chunked Preprocessing</h4><p>Since we figured out that the odds of any compression happening past 1,000 bits falls off a cliff, what if we first chunk the input at like 500 bit chunks, so that every chunk has a somewhat higher chance of being compressed?</p><p>Immediately, I can think of a few issues with this approach. Namely, how does the decompressor know how big the chunks of data to decompress are? We will now need to store additional information about the chunk sizes somewhere, perhaps in a header. But that now reduces the compression efficiency.</p><p>For an example, let’s say we chunk some data at 100 bit chunks, which has a 10% chance of being compressed at a median of ~2.5% savings. Then each chunk will only be saving less than 1 bit on average. And for representing bit sizes up to 100 bits, we will need log2(100) bits or 7 bits per chunk to tell the decompressor how many bits to read per chunk. Dang. This method will likely not be useful.</p><h4>Only Compress Data Sets Between 100bits — 1kbit</h4><p>This is a similar strategy to the Chunked Preprocessing, except that we are only considering individual files that are less than than 1 kbit. The benefit here is that we don’t need to explicitly store extra data in order to recombine chunks; the operating system could store the true file sizes, which I believe it already does.</p><p>Doing similar math to the chunked preprocessing, if all your data is around 100 bits each, and there is a ~10% chance of compression at a median of ~2.5% savings, then you can expect your data set to be reduced in size by about 0.25%. Unfortunately, that is not a very impressive number. But at a large scale, this could theoretically produce some savings.</p><h4>Lossy Zeckendorf Compression</h4><p>There might be other ways to compress the data in a lossy manner, using the Zeckendorf algorithm as a base. I could imagine there being methods of preprocessing the data first, with something like a <a href="https://en.wikipedia.org/wiki/Fast_Fourier_transform">Fast Fourier Transform</a> or a <a href="https://en.wikipedia.org/wiki/Discrete_cosine_transform">Discrete Cosine Transform</a> (used in <a href="https://en.wikipedia.org/wiki/JPEG">JPEGs</a>), and massaging the data to fit into more compressible Zeckendorf numbers, as mentioned in the “All Ones Zeckendorf Numbers” subsection.</p><h4>Compositions with Other Compression/Coding Algorithms</h4><p>Even though Zeckendorf compression may not be useful in and of itself, it could be used in conjunction with other compression algorithms as a “last leg” if favorable.</p><p>This is analogous to how <a href="https://en.wikipedia.org/wiki/Huffman_coding">Huffman Coding</a> is used, which, <a href="https://en.wikipedia.org/wiki/Huffman_coding#Applications">according to Wikipedia</a>, is used as a “back-end” to other compression algorithms like JPEG and MP3.</p><p>If applying Zeckendorf compression is favorable for some file, then it just needs a singe piece of information in the resultant compressed file to signify that it was used, so that the decompressor know to decompress it. My compression utility, called <a href="https://crates.io/crates/zeck">zeck-compress</a>, stores files with a .zbe or a .zle file extension, depending on if the input was interpreted as a big endian integer or a little endian integer.</p><h4>Addition/Multiplication/XOR Then Compression</h4><p>It is possible that there are “good numbers” to preprocess the input data with, which then produces data that is more compressible via Zeckendorf. If it does help, then the resultant compressed file just needs to store the operation, the “good number”, and the resultant compressed data to remake the original data (if the storage size of these three pieces of data happens to be less than the original input).</p><p>One strategy is to find the nearest AOZN to the data and then get the difference between it and the AOZN to know what number the decompressor needs to add to it. I did some testing with this method, but it is extremely unlikely for large pieces of data to be near AOZNs, and even if it is, the number to add it with is likely to take as many bits as the input data itself, which yields no data savings.</p><p>It’s possible that performing a division on the input data would be more beneficial, because the resultant data can be much smaller than with subtraction, with a similarly sized divisor. But this also will have diminishing returns because as the size of the divisor grows, the efficiency of the compression is reduced. I have not yet tested this method.</p><p>Then there is XORing the data, for which there could be a few different schemes. You wouldn’t want to store a piece of XOR that is as large as the input, otherwise, you’d need to store the whole thing in the result, which cancels the benefit of compression. Another scheme is to have a repeated piece of XOR data, which could be mirrored throughout the whole input, in order to reduce the size needed to store the XOR data. But this would be a costly operation, to search for many permutations of data to XOR with to find one that yields beneficial compression. I have not yet tested this method either.</p><p>There are likely other mathematical or bit operations I am not considering, but they may be useful here.</p><h4>Inverted Zeckendorf</h4><p>Since trying to “compress” data with Zeckendorf tends to produce more data than less, what if we treated the input data as already compressed and try to “decompress” it with the thinking that, since probabilistically most compress actions produce larger data, maybe decompress actions produce smaller data.</p><p>Unfortunately, this doesn’t work. If you think about it, if we take arbitrary data, and treat its bits as a list of Zeckendorf “use bits”, then summing over those bits by converting them to Fibonacci numbers will tend to yield, on average, a larger number than simply interpreting the input as binary. Therefore, this is likely not a useful avenue for compression.</p><h4>AOZN List</h4><p>What if we represented our data as a list of AOZN indices? Since AOZNs can reach out to larger numbers faster than powers of two, this could be a new numbering system essentially. And perhaps utilizing skip bits could work here as well.</p><p>Well, looking into it, the first handful of elements of the sequence of AOZNs is 1, 4, 12, 33, 88, 232, 609, 1596, 4180, 10945, etc. Already, we can see one issue: the gap between the first two elements (1, 4), means that we would need 3 bits of information to represent the number 3, or any other number where 3 was the remainder after subtracting other AOZNs. That’s not great. And subsequent gaps mean we may subsequently need multiples of other elements to represent other numbers. I have not tested this method further.</p><h3>Further Related Areas of Research</h3><h4>Circuits / Hardware</h4><p>If the Zeckendorf representation turns out to be useful for certain applications, then it might make sense to produce hardware optimized for dealing with the Zeckendorf representation. Or, it’s possible that certain operations on hardware execute faster when dealing with the Zeckendorf representation versus binary representation. Some operations that would be interesting to test are all of the basic numeric operations like addition, subtraction, multiplication, division, etc. I have not tested this yet.</p><p>And since the Zeckendorf compression and decompression algorithms involve determining extremely large Fibonacci values, it might be worth it to have lookup tables in hardware, for hyper fast lookups. It would be interesting to investigate the performance of having a sped up Zeckendorf codec in terms of time and cost savings with specialized hardware.</p><h4>Other Numbering Systems</h4><p>What about using a numbering system based on other sequences, like prime numbers? Could that work in compressing data?</p><p>A cursory glance at this reveals that it does not quite have the same properties as a numbering system based on Fibonacci numbers. I mean, there is the <a href="https://en.wikipedia.org/wiki/Fundamental_theorem_of_arithmetic">Fundamental Theorem of Arithmetic</a>, which states, somewhat analogously to <a href="https://en.wikipedia.org/wiki/Zeckendorf%27s_theorem">Zeckendorf’s Theorem</a>, that all integers greater than 1 have a unique representation of products of prime numbers. But it is not as clear as to how to represent this using 1’s and 0’s, while saving data. Maybe someone more clever than me can take a crack at this…</p><h4>“Poorly Compressible Numbers”</h4><p>Since we have the idea of AOZN’s being “well compressible”, what would the opposite look like? Well, that would be a string of 0 bits, and then a 1 bit, to “use” a Fibonacci number. The reason for this is that by using mostly 0’s, we do not save any data that we would have saved by using 1 bits and skipping Fibonacci numbers. When we have a large string of 0’s and then a 1, this is basically equivalent to indexing a specific Fibonacci number. It’s like a “Fibonacci selector.”</p><p>For example, if we have the bits 100, this can be interpreted as 1*F(2) + 0*F(1) + 0*F(0) which is 3, which is the third “effective Fibonacci” number or the fifth “actual Fibonacci number”. I use the term “effective”, since, like in Fibbinary, we skip the first two Fibonacci numbers which are 0 and 1; 0 does not help us and 1 is redundant to the second Fibonacci number. An “effective” Fibonacci number is just two Fibonacci numbers forward. So the third effective Fibonacci number is 3, (1, 2, 3, 5, 8, 13, …).</p><h3>AOZN Compressibility</h3><p>What makes AOZNs so compressible? I think one thing that makes it special is that it is a special case of Zeckendorf bit lists, which can be thought of as a variable bit length encoding. Some larger numbers take fewer bits to represent than some smaller numbers, and all numbers are uniquely representable. I think that is a fascinating property; I’m not sure if there are other sequences that have that property. It’s like getting more for less, and losing nothing. I would surmise that there are other sequences that can mimic these properties, but I can’t fathom another consistent way having larger numbers taking less space than smaller numbers, simply by using a different numbering system.</p><p>The manner in which the Zeckendorf bit list is a variable bit length encoding is such that whenever we see a 1 bit in the list, we “skip” the next Fibonacci number. And since we don’t need to store those unnecessary 0s, we save on data. In this way, it reminds me of a <a href="https://en.wikipedia.org/wiki/Skip_list">skip list</a>, which is a data structure that, similarly, skips the traversal of elements at certain locations when doing a search. Perhaps we could think of different kinds of skip lists for Fibonacci numbers, based on properties of the input data, which could save further data. My Zeckendorf algorithm can be thought of as the first-order skip list for representing numbers. But there could be other schemes that skip more than one index at a time, if that is made clear in the algorithm. And since not all numbers could be representable by skipping more than one index, that could be another example of a lossy compression, since some data would need to be compressed at the nearest possible representable string of bits. Further investigation is needed here.</p><h3>Other Things</h3><h4>Has this been done before?</h4><p>As far as I could find, this method has not been done before. I find it funny that I could not find prior examples. I’d think that someone would have thought of this before, since it’s so close to Fibbinary. Maybe it is out there somewhere but was shelved as an impractical system. Either way, I’m sure someone will reach out to me to point out that this was a known algorithm. Even if it was already known, at least I had fun developing it, and I hope we could find something useful from this research.</p><h4>Did you use AI?</h4><p>I, Peter Ryszkiewicz, came up with this idea roughly 6 years ago, before ChatGPT was even released. I have private prototype code on GitHub in Typescript, that can be used to prove this, and GitHub could attest to the push timestamps since git histories can be faked. But the code is old and ugly so I’m choosing not to publicize that. That being said, the recent implementations in Rust and the web application did use AI assistance (<a href="https://cursor.com/">Cursor</a> and <a href="https://lovable.dev/">Lovable</a> mostly).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*q_-UhQAX2KKVHq_dQ7T0gA.png" /><figcaption>Screenshot of my old prototype for Zeckendorf encoding</figcaption></figure><h4>Did you use AI to write this article?</h4><p>No, I decided against using AI for this article so that my writing style could be expressed faithfully. I also don’t like the writing style of AI, because even though it is usually very clear, it tends to be tasteless and soulless; a chopped salad of all the labor of all the great authors who have lived and died before us. I don’t like that. When you read this article, you are actually getting a taste of what goes on in Peter Ryszkiewicz’s personal neural nets 😄😁</p><p>Ironically, after publishing this article, I ran it through some AIs and it pointed out a number of interesting things, including some mistakes. Subsequently, I have fixed the mistakes in this article and I will post another article detailing the interesting findings, shortly.</p><h3>Addendum</h3><p>All plots were made with the Rust library plotters, and all code for generating the plots are available on my repository at <a href="https://github.com/pRizz/zeckendorf/blob/main/src/bin/plot.rs">https://github.com/pRizz/zeckendorf/blob/main/src/bin/plot.rs</a>.</p><p>Code for generating the dark mode compatible LaTeX formula images is available at <a href="https://github.com/pRizz/zeckendorf-article">https://github.com/pRizz/zeckendorf-article</a>.</p><p>The Rust crate is published here: <a href="https://crates.io/crates/zeck">https://crates.io/crates/zeck</a></p><p>The npm library is published here: <a href="https://www.npmjs.com/package/zeck">https://www.npmjs.com/package/zeck</a></p><p>The demo app is published here: <a href="https://prizz.github.io/zeckendorf-webapp/">https://prizz.github.io/zeckendorf-webapp/</a></p><p>The source code for the reference implementation is here: <a href="https://github.com/pRizz/zeckendorf">https://github.com/pRizz/zeckendorf</a>. PRs welcome! Lots of hard work is needed to optimize the performance and memory pressure of compressing and decompressing!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8713770f5598" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Secure Cryptocurrency Seeds]]></title>
            <link>https://medium.com/@peterryszkiewicz/secure-cryptocurrency-seeds-fdd99f39df7e?source=rss-5695106bc7f5------2</link>
            <guid isPermaLink="false">https://medium.com/p/fdd99f39df7e</guid>
            <category><![CDATA[cryptography]]></category>
            <category><![CDATA[cryptocurrency]]></category>
            <category><![CDATA[iota]]></category>
            <dc:creator><![CDATA[Peter (Justice for the Victims) Ryszkiewicz]]></dc:creator>
            <pubDate>Fri, 23 Mar 2018 21:28:02 GMT</pubDate>
            <atom:updated>2018-03-23T21:28:02.825Z</atom:updated>
            <content:encoded><![CDATA[<p>When working with cryptocurrencies, you will eventually hear about something called “seeds” or “private keys”. What are they and why are they important? Why do I need one? What makes one seed more or less safe than another? As a hodler, all of these questions are of utmost importance.</p><p>A seed is like a username-password combo used to access your funds within cryptocurrency wallets. Each seed should be unique and very difficult to guess or brute-force. If someone happens to generate the same seed as you, they may gain access to your funds as well. And seeds are quite short, typically 64 characters long. These seeds are used to generate the keys used to sign transactions and generate the public addresses where the funds are stored.</p><p>You may be worried that bad actors could spin up a bunch of computers and start generating vast numbers of seeds to get access to your funds. But, when you consider this mathematically and physically, it is nearly impossible with today’s technology with even a large amount of time and resources.</p><p>Try counting to 10… that probably didn’t take very long. Now try counting to 100… That takes a bit of time; roughly 10 times as much time as counting to 10. Now count to 100,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000. That is about the possible number of unique 64 character cryptocurrency seeds consisting of 0–9 and A-F. Most cryptocurrencies utilize 256 bits as their seed, which equates to 2²⁵⁶ (or about 116e75 or 116 <a href="https://en.wikipedia.org/wiki/Names_of_large_numbers">quattuorvigintillion</a>) possible seeds (although this whole range may not be valid in some cryptocurrencies). Add a few more bits and that is enough seeds to assign to every atom in the observable universe. (<a href="https://educationblog.oup.com/secondary/maths/numbers-of-atoms-in-the-universe">Some have estimated roughly 10e80 atoms in the observable universe</a>.)</p><p>Let’s say my computer can count to a billion in one second. (<a href="https://computers-are-fast.github.io/">This is roughly the typical counting speed of today’s hardware.</a>) So, if I wanted to enumerate all possible Bitcoin seeds, I would need 1.16e68 seconds, or about 3.66e60 years (3.66 <a href="https://en.wikipedia.org/wiki/Names_of_large_numbers">novemdecillion</a> years). That is about 2.69e50 times longer than the age of the known universe! Let’s say we used a billion of these computers in parallel. We would still wait 2.69e41 times the age of the universe! On top of that, enumerating seeds isn’t enough. You still need to generate an address from the seed and query the blockchain every time you generate a seed to see if it even has any funds. This adds even more time to the equation!</p><p>The odd of finding any seed are slightly better, if we consider that there are probably millions if not billions of seeds that are in use. But again, this only helps us a certain order of magnitude. Let’s say we will need 1 trillion seeds to satisfy all people and IOT devices in the future. Your odds of randomly finding a seed that is in use is 1e12 / 116e75 = 8.62e-64 %, which is ridiculously minuscule.</p><p>As we can see, if you have a perfectly random seed, it would be very difficult for a malicious party to obtain your funds. The problem then becomes, how does one create a perfectly random seed?</p><h3>Cryptographic Randomness</h3><p>There is such a thing as an unsafe random number. If you have a pseudo-random source of numbers, it is possible to find a pattern in the randomness. There was an attack on IOTA seeds some months back when users tried to generate their own seeds. People were posting, whether by malicious intent or simple ignorance, insecure methods of generating IOTA seeds. The main one in question was a PowerShell seed generator. PowerShell is a terminal program on Windows machines that allows you to interact with the computer in a command-driven manner. One would copy and paste these one-line seed generating commands into PowerShell and it would spit out a seemingly random string of characters that make up an IOTA seed. The problem was that this PowerShell command used a pseudo-random number generator; not a fully blown cryptographic random number generator. In this case, the command that people were posting everywhere online could only generate a total of about 2 billion unique seeds. 2 billion is well within the range of seeds that an attacker could search and detect whenever funds were transferred. Eventually people figured this out and there was <a href="https://www.reddit.com/r/Iota/comments/6v9mj6/psa_nearly_all_powershell_generated_seeds_are/">a reddit post about the matter highlighting these issues</a>. But not before funds were lost to groups of anonymous hackers.</p><p>Real money was lost because people didn’t understand the importance of cryptographic random number generators. A cryptographic random number generator has certain properties that make it well suited against these kinds of attacks. The most important property one wants is uniform randomness, that is, you want the exact same chance of generating any seed as any other. Otherwise, there is bias, and this bias can make guessing the random number easier. Another property is that of random sequences. This was the main problem with the PowerShell command mentioned earlier: it could only generate 2 billion unique sequences of random numbers, and hence, could only generate 2 billion unique seeds. The reason it could only generate 2 billion unique sequences is because it is a <a href="https://en.wikipedia.org/wiki/Pseudorandom_number_generator">pseudo-random number generator</a> (PRNG). While being vastly easier to implement in computer code, PRNGs are not sufficiently random for these financially significant use cases.</p><p>It is a sad tale in cryptography and cryptocurrency for all of those funds to have been stolen. I partly blame the IOTA foundation for putting the onus on the users to properly generate cryptographically random seeds. Just about every other crypto wallet in existence has methods of secure seed generation in the app itself. But the IOTA foundation chose to force the users to figure it out for themselves. Until they fix this, we must continue to handle this ourselves or wait for the upcoming <a href="https://blog.iota.org/trinity-wallet-march-update-40dcb720976f">IOTA wallet from UCL</a> that should improve on this shortcoming.</p><p>The IOTA wallet used to have a seed generator, but it was removed. I did some digging and found out that their generator contained a flaw: it was biased. They used the <a href="https://en.wikipedia.org/wiki/Modulo_operation">modulus operator</a> on a cryptographically random number which makes the result deviate from the desirable uniform randomness. I don’t think they ever announced their mistake, but rather quietly removed it with the commit message, “<a href="https://github.com/iotaledger/wallet/commit/8dd25c73ebec479da82ccc6785c99f9c9721a595#diff-811c3396b5482f22ef2497b59f58579cL23">Remove unused functionality.</a>”</p><p>It’s actually not too difficult to implement a secure seed generator in JavaScript. Later in this article, I explain how my project, <a href="https://github.com/pRizz/SecureSeedCommands">Secure Seed Commands</a>, contains secure seed generating commands for IOTA that could be implemented in the wallet and/or used for cold storage.</p><h4>Random Number Bias</h4><p>But we can learn something here. How bad was this mistake? Are old wallets at risk of being hacked? This part gets a bit math and computer science heavy.</p><p>Seeds in IOTA require 81 characters, or “<a href="https://docs.iota.org/introduction/other-stuff/glossary">trytes</a>”, consisting of the letters A to Z and the number 9. (This is due to their reliance on trinary math.) They generated 81 cryptographically random, unsigned, 32-bit integers and modded them by 27 so that these numbers could be mapped to the trytes. An unsigned 32-bit integer goes from 0 to 4,294,967,295. As long as the random number falls in the range of 0 to 4,294,967,273, we are ok, because modding this by 27 will produce a uniformly random number.</p><p>Even with this bias, the odds that their generator produced a good, non-biased seed are actually quite good, funny enough: (4,294,967,273 good possibilities/4,294,967,295 possibilities)⁸¹ = 99.999958509%. Put another way, the odds that you got a biased seed are 1 in about 2.4 million. And that probably means only a single letter had a different chance of being picked. It is much more unlikely for two or more letters to also have had this bias.</p><p>With the bias, the odds of generating the letter 9 or any letter between A and U are 159,072,863 / 4,294,967,295 or ~ 3.703703708%, whereas the odds of getting any letter between V and Z are slightly less: 159,072,862 / 4,294,967,295 or ~ 3.703703685%. That’s a difference of only ~0.000000023%.</p><p>With this information, I believe it is unlikely for an attacker to brute force a biased seed.</p><h3>Malicious Seed Generators</h3><p>There was a big problem for IOTA recently about users’ funds being “stolen” from their wallets due to unsafe, online seed generation. <a href="https://dowbit.com/4-mln-worth-of-iota-stolen-from-wallets/">Here is an article</a> with more details about how it was done. In this case, users generated their seeds on a website that essentially sent these seeds back to the scammer’s server, where they eventually used them to log into the users’ wallets and withdraw their funds. This is a classic case of a phishing website: you think it’s trustworthy, but it turns out to be malicious. Also, these seeds were produced in the browser, which could let malicious browser extensions silently read the seeds that are generated.</p><h3>Secure Seed Commands</h3><p>I created a website to be a reference for creating cryptocurrency seeds securely, not just for IOTA but also a few other popular cryptocurrencies. This is useful when you want full control over the seed generation process and want to securely generate seeds independently of wallet software. These commands may be executed on a number of different platforms securely, namely: Windows, Mac, Linux, JavaScript in NodeJS and on Web, Ruby, and Python 3.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*N2BHtRw9iYhXB2om7L_G3g.png" /><figcaption>Crypto seed generators for IOTA</figcaption></figure><p>Here is a link to the IOTA seed generating commands: <a href="https://www.secureseedcommands.com/#/IOTA">https://www.secureseedcommands.com/#/IOTA</a>.</p><p><strong>No seeds are generated on my website. It is only a reference of commands with explanations used to create them. </strong>All commands on this website utilize the proper cryptographically secure random number generators on each platform.</p><p>I do still have a disclaimer when reaching the website, saying that the code, which is <a href="https://github.com/pRizz/SecureSeedCommands">open source</a>, is still in beta and has not been formally audited by third parties. I want to reach out and ask the community for your feedback so that we can gain some confidence in the trustworthiness of the project and seed generating commands.</p><p>I will repeat some best practices listed at the bottom of the website here:</p><ul><li>Disable your internet while generating seeds.</li><li>Always clear or overwrite your clipboard after pasting your seed. Malicious websites and applications can silently read your clipboard.</li><li>Generate multiple seeds and splice them together randomly. This can mitigate key logging / terminal history attacks and give you a sense of greater control. Ensure you have the proper number of characters.</li><li>Encrypt your seeds. Example password encryption with gpg: gpg --symmetric seeds.txt and decryption: gpg seeds.gpg</li><li>Study the above commands and their explanations so that you could put them in manually.</li></ul><p>Be wary of copycats and mirror websites, as they may have malicious modifications to the seed generating commands. You can also download the code and run it yourself if you install NodeJS and run the command npm install; npm run dev in the directory.</p><p>I also encourage the IOTA team to take a look at my seed generating commands and consider adding them to the current wallet, so that users can have a simpler and more secure way of generating their seeds.</p><p>You can follow me and my company, <a href="https://www.prizzventuresllc.com/">P Rizz Ventures LLC</a>, on <a href="https://twitter.com/pryszkie">Twitter</a>, <a href="https://medium.com/@peterryszkiewicz">Medium</a>, <a href="https://www.facebook.com/PRizzVenturesLLC/">Facebook</a>, <a href="https://www.linkedin.com/company/p-rizz-ventures-llc/">LinkedIn</a>, <a href="https://github.com/pRizz">GitHub</a>, and <a href="https://www.patreon.com/PRizzVenturesLLC">Patreon</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fdd99f39df7e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[IOTA vs NANO (RaiBlocks)]]></title>
            <link>https://medium.com/hackernoon/iota-vs-raiblocks-413679bb4c3e?source=rss-5695106bc7f5------2</link>
            <guid isPermaLink="false">https://medium.com/p/413679bb4c3e</guid>
            <category><![CDATA[analysis]]></category>
            <category><![CDATA[cryptocurrency]]></category>
            <category><![CDATA[iota-vs-raiblocks]]></category>
            <category><![CDATA[raiblocks]]></category>
            <category><![CDATA[iota]]></category>
            <dc:creator><![CDATA[Peter (Justice for the Victims) Ryszkiewicz]]></dc:creator>
            <pubDate>Tue, 19 Dec 2017 07:02:31 GMT</pubDate>
            <atom:updated>2026-01-03T20:54:58.935Z</atom:updated>
            <content:encoded><![CDATA[<p><em>Update 2026: this article was written during the ICO craze of 2017/2018. It no longer necessarily reflects my opinions on these cryptocurrencies. I am leaving it up for archival purposes.</em></p><p><em>Update Feb 2, 2018: This article was written before </em><a href="https://hackernoon.com/nano-rebrand-announcement-9101528a7b76"><em>RaiBlocks rebranded to NANO</em></a><em>. I am leaving occurrences of RaiBlocks for historical purposes. Wherever you see RaiBlocks, you can substitute the word </em><a href="https://nano.org/"><em>NANO</em></a><em>.</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*31w0IKSYkw9nN9-mHQ41EQ.png" /></figure><p>There is a new generation of cryptocurrencies gaining popularity; namely that of fast, feeless, minerless cryptocurrencies (I’ll use FFM for fast, feeless, and minerless from now on). At the moment, there are only a few to name, and <a href="https://iota.org/">IOTA</a> and <a href="https://raiblocks.net/">RaiBlocks</a> are two of the most prominent ones at the moment. They differ quite vastly in how they implement FFM. This means they have different characteristics in how they perform, their complexity, and their robustness. I’ll go over these in the following sections.</p><p>In general, I think these inventions are fantastic and we need more competition and research in the area of FFM cryptos. A few competitors and copycats are already starting to pop up, for example <a href="https://www.radix.global/">Radix</a>, which sounds interesting, but is still under development. It’s hard to say whether there will be “one to rule them all” because these different cryptos perform differently and specialize in different use cases.</p><h3>The Problem with Mining</h3><p>Mining has gotten a lot of flak recently as people have performed calculations on how it will affect <a href="http://www.newsweek.com/bitcoin-mining-track-consume-worlds-energy-2020-744036">energy demand</a> and <a href="http://www.independent.co.uk/life-style/gadgets-and-tech/news/bitcoin-environment-green-energy-power-global-warming-climate-change-a8094661.html">global warming</a>. Here is an interesting rebuttal by <a href="https://medium.com/u/898f59563d67">Andreas M. Antonopoulos</a>, on <a href="https://www.youtube.com/watch?v=2T0OUIW89II">YouTube</a>. He makes many good points, but he does not fully convince me.</p><p>When there is an incentive to spend incredible amounts of energy to send transactions (especially microtransactions), you have an <a href="https://digiconomist.net/bitcoin-energy-consumption">inefficient, unsustainable system</a> that is difficult to fix. (Transaction fees for Bitcoin today are on the order of $30.) Miners who already exist don’t want their expensive AntMiners, GPUs, and CPUs to go to waste. So there will be push-back from these investors from deploying things like Ethereum’s Proof of Stake model. That being said, I do think their Proof of Stake is a step in the right direction. It’ll just be very challenging to get those miners to convert, killing their original business model and investments.</p><p>There are “layer 2&quot; approaches to battle this inefficiency, with things like the <a href="https://lightning.network/">Lightning Network</a> for Bitcoin and the <a href="https://raiden.network/">Raiden Network</a> for Ethereum. Even IOTA has its own second layer called <a href="https://blog.iota.org/instant-feeless-flash-channels-88572d9a4385">Flash Channels</a>, because fast just isn’t fast enough. But there are still a few problems with these. The simplest rebuttal is that you will need someone to host, maintain, and facilitate this second layer, which introduces fees. In theory, this fee is smaller than the normal transactional fee at layer 1. But it is a fee nonetheless, which kinda puts us back into VISA-land. Another issue is that it erodes the decentralized operation of these coins. When you have large corporations with their own Lightning/Raiden/Flash channel, there is now a point of failure in terms of corruption, hacking, and simple mismanagement. I think it will take a lot of effort, not only to fully implement these systems, but to make them robust, secure, and maintainable.</p><p>Another issue is that mining seems to be causing a centralization of hash-power. For some reason, we are not seeing as much competition in this space as one would hope. Basically, <a href="https://medium.com/@homakov/stop-calling-bitcoin-decentralized-cb703d69dc27">China produces a good majority of the Bitcoin mining power in the world</a>, which could eventually lead to issues with double spend attacks on the coin if these companies were to collude. I don’t want to bash China, but they also don’t have a good track record with the government routinely delving into commercial and personal affairs, especially in the cryptocurrency realm, threatening the banning of ICO’s and crypto exchanges.</p><h3>How Do These Cryptos Work?</h3><p>In order to send transactions over the IOTA network, you, the client, must perform minimally heavy computations on two previous transactions in the network. These computations take, on the order of, a few seconds to a few minutes, depending on the power of your GPU (the proof of work algorithm in IOTA is GPU optimized) and your luck. Once you successfully perform the proof of work required, your bundle of data gets broadcasted over the IOTA network, where it sits waiting to be confirmed by future transactions. This is a pay-it-forward kind of system. Once your transaction gets enough confirmations from other peoples’ transactions, your transaction will be deemed fully confirmed.</p><p>In theory, the more transactions that occur over the network, the faster your transactions get confirmed. In the earlier days of IOTA, this would only take a few minutes, if that. Right now, there are congestion issues which is causing delays in confirmation rates and times. This seems contradictory, given the “<a href="https://iotasupport.com/whatisiota.shtml">infinite scalability</a>” being marketed about IOTA. But, in my opinion as a developer and node operator, and looking at the node code itself, there are lots of optimizations that can be done to speed this process up. I have experienced many CPU spikes and memory leaks while operating my nodes (and I’ve posted some of them in their <a href="https://github.com/iotaledger/iri/issues">GitHub Issues</a>), but I am confident that these are only technical issues which can be fixed with a few hundred engineering hours. (<em>Update, Dec 23, 2017, the IOTA network and congestion issues have improved since recent updates to the node and wallet</em>)</p><p>One huge area of improvement will be in porting the node code from Java to Rust (<a href="https://benchmarksgame.alioth.debian.org/u64q/rust.html">performance stats</a>) or another high level, high performing, portable programming language. Java is very easy to learn and has many nice features as a high level, object oriented programming language. But it must be run through the JVM (a virtual machine that allows for the code to be executed on just about any computer on the planet) which comes at the cost of performance.</p><p><strong>RaiBlocks operates on a crypto architecture they call “block lattice”.</strong> They provide a nice <a href="https://github.com/clemahieu/raiblocks/wiki/Block-lattice">wiki page</a> where they describe how this works. The gist of it is that RaiBlocks isn’t just one long blockchain, like Bitcoin or Ethereum; it is a database of blockchains where each user (or address) gets their own blockchain that only they can add onto. Users send funds by creating two blocks: one send block on their personal blockchain and one receive block on the recipient’s blockchain. Users receive funds by “pocketing” any outstanding receive blocks into their personal blockchain. Users do not have to be online to receive funds (this is a common question concerning RaiBlocks’ novel “pocketing” system). Whenever the user decides to access their funds, the wallet itself will automatically “pocket” any outstanding funds. Pocketing funds essentially means signing the receive block with your private key, so that it can be added to your personal blockchain.</p><h3>Consensus Algorithm</h3><p>In IOTA, transactions get attached to the “tangle”, which is a directed-acyclic-graph (<a href="https://en.wikipedia.org/wiki/Directed_acyclic_graph">DAG</a>) data structure. (<a href="https://git-scm.com/">Git</a> works using this same data structure!) As more transactions get added to the tangle, a “weight” is added to attached ancestor transactions. When a transaction has enough weight, the transaction will exhibit a “confirmed” status. In principle, this confirmation could be as quick as seconds when there is a sufficient flow of transactions across the network.</p><p>In RaiBlocks, there is a different <a href="https://github.com/clemahieu/raiblocks/wiki/Double-spending-and-confirmation">confirmation system</a> based on “representatives”. In general, all that is needed is your cryptographic signature on your “send” and “receive” blocks. When the node syncs, it runs through the ledger to ensure that the signatures are authentic.</p><p>In order to prevent double-spend attacks, RaiBlocks has a “<a href="https://github.com/clemahieu/raiblocks/wiki/Representatives-and-decentralization">representative system</a>”. A representative in the system is basically an address with a lot of money. The representative acts as the arbiter of which double spent block to go through and propagate through the system. I’ll elaborate a little more on potential attack vectors here, later in the article.</p><h3>Incentive for Running Full Nodes</h3><p>A common question that gets asked about these FFM cryptos is: “Who is going to pay for running the full nodes?” It’s a very good question. In most other cryptos, like Bitcoin and Ethereum, there is an incentive for the miners to run full nodes because they can collect lucrative mining fees by doing so. But there are no miners in IOTA or RaiBlocks.</p><p>There are a number of answers to this question, and there are slightly different answers depending on if you are running an IOTA node vs a RaiBlocks node vs other cryptos.</p><p>For those that are new to cryptocurrencies, a node is basically a computer that facilitates transactions across the global network. Nodes may be added or removed at any time by anyone on the internet and the cryptocurrency, as a whole, will continue to function. Cryptos tend to need a minimum number of nodes to prevent attacks on the network, but that’s another topic.</p><h4>Let’s do a few calculations and see if these networks can sustain themselves</h4><p>Every exchange needs to host their own nodes as a point of withdrawals and deposits. Let’s assume every exchange needs 5 nodes on average for load balancing purposes and upgrades. (They will need more or less than that, depending on traffic, but 5 is a nice little conservative estimate.) Now let’s figure that once these coins become popular, they will be available on roughly 100 exchanges around the world. Again, a conservative estimate, as there are hundreds of popular exchanges around the world, with new ones popping up all the time. <strong>This gives us 500 nodes, once IOTA and RaiBlocks are widely adopted in the exchange industry.</strong></p><p>There is also a commercial need to run nodes. Businesses small and large are joining the cryptocurrency space (as am I, with my company <a href="https://www.prizzventuresllc.com/">P Rizz Ventures LLC</a>), and we need to host nodes to provide for our services. Let’s suppose there are thrice as many online stores, marketplaces, and services than exchanges. I think this is pretty conservative, given that there are way more online stores than there are online exchanges on the internet. Let’s assume they will need an average of only three nodes each, since they will probably have less traffic than a highly popular exchange. <strong>This gives us a total of 900 nodes in the commercial space.</strong></p><p>We will also have many smart devices in our future. <a href="https://www.forbes.com/sites/louiscolumbus/2016/11/27/roundup-of-internet-of-things-forecasts-and-market-estimates-2016/">Forbes references a paper that predicts 75 billion IoT devices by 2025</a>. Let’s say that just 0.001% of these devices will need to run full nodes in order to achieve a high quality of service. <strong>That right there is 750 thousand full nodes running on the network.</strong></p><p><strong>So with all these industries combined, there will surely be a strong baseline of nodes at any given time. I predict IOTA and RaiBlocks will gradually and naturally ramp up their node numbers over the coming years, as they gain more and more popularity.</strong></p><h3>Suitability for Developers</h3><p>IOTA provides official <a href="https://github.com/iotaledger/iota.lib.js">Javascript</a>, <a href="https://github.com/iotaledger/iota.lib.py">Python</a>, <a href="https://github.com/iotaledger/iota.lib.csharp">C#</a>, <a href="https://github.com/iotaledger/iota.lib.java">Java</a>, and <a href="https://github.com/iotaledger/iota.lib.go">Golang</a> libraries for working with the network. They also provide their Proof of Work library, which they call curl, or <a href="https://github.com/iotaledger/kerl">kerl</a> now, which is available as a <a href="https://github.com/iotaledger/ccurl">C library</a> and for use <a href="https://github.com/iotaledger/curl.lib.js">in web browsers with WebGL2</a>. They provide versions of their node implementation called IOTA Reference Implementation, or IRI, in <a href="https://github.com/iotaledger/iri">Java</a> with plans of porting it over to <a href="https://blog.iota.org/iota-development-roadmap-74741f37ed01">C++, Rust, and Golang</a>. In my opinion, I hesitate for them implementing it in C++ for a host of reasons, with the main one being <a href="https://www.viva64.com/en/a/0079/">a higher potential for bugs and vulnerabilities</a>. C++ has a place for high performing applications and OS kernels, but I don’t think it’s a good decision here. We can debate it, but that’s another story.</p><p>API support for RaiBlocks is quite good, as well. They have RPC libraries, for interacting with nodes in <a href="https://github.com/SergiySW/RaiBlocksJS">Javascript</a>, <a href="https://github.com/AuliaYF/easyraikit-python">Python</a>, <a href="https://github.com/mikerow/easyraikitphp">PHP</a>, and <a href="https://github.com/willHol/rai_ex">Elixir</a>. I can’t quite tell whether these are official libraries vetted by the RaiBlocks organization or not. (If someone from the RaiBlocks team can clarify, that would be great!) Either way, they are all endorsed and posted on their <a href="https://raiblocks.net/page/resources.php#devtools">devtools website</a>. There is also a library for performing Proof of Work in the web browser, written in <a href="https://github.com/jaimehgb/RaiBlocksWebAssemblyPoW">WebAssembly</a>. They also have <a href="https://raiblocks.net/page/resources.php#devtools">a few more tools</a> for interacting with the protocol and a package for Fedora.</p><p>Overall, both projects have a decent level of support for developers to start building with and integrating these cryptos into their own projects and businesses.</p><h3>Suitability for IOT</h3><p>Both cryptos provide a great use case for microtransactions in the Internet of Things space. We will definitely need to utilize FFM cryptos if we want our machines to quickly and autonomously interact with currency. Let’s look at both from a few different angles.</p><h4>Data Streams</h4><p>Transactions in IOTA allow for roughly 1 kilobyte of arbitrary data to be attached. 1 kilobyte doesn’t sound like a lot, but it opens up a realm of possibilities for the transfer of data on the tangle. (This is how my IOTA-based chatroom app, <a href="https://www.chatangle.com/">Chatangle</a>, works.) <a href="https://data.iota.org/">IOTA’s data marketplace</a> will also make great use of this data attachment to facilitate the transfer of data between devices and the marketplace itself. This is a great feature to have on layer 1.</p><p>RaiBlocks does not have a built in mechanism for data transfer on layer 1. I had <a href="https://www.reddit.com/r/Iota/comments/70ymcx/is_this_an_iota_competitor_a_proven_token_using_a/dn72pz6/">an interesting conversation</a> with a fellow redditor about this topic and he brought up the idea of <a href="https://en.wikipedia.org/wiki/Steganography">steganography</a>, that you could encode data inside the value transaction itself, since RaiBlocks uses 128 bits per transaction. In principle, you could use the bottom 64 or 32 bits to create and extract small messages. Beyond that, RaiBlocks could implement a layer 2 approach pretty simply: if one can already communicate with other IoT devices, one could just utilize that channel for the data layer. Therefore, this is not a major obstacle for RaiBlocks, in my mind.</p><h4>Off-chain Transactions</h4><p>IOTA has a unique feature in that it is possible to create transactions off-chain and attach them to the tangle at a later date. IoT devices may be able to interact with each other while offline and then propagate their transactions once they reconnect to the network. But this begs the question of whether the receiving party will “believe” the transaction and that it is not a double spend, before actually being confirmed by the whole network. As long as the devices can have reasonable trust in each other, this becomes a moot point. Nevertheless, this is a theoretical counter-argument for the benefit of these off-chain transactions.</p><p>With RaiBlocks, off-chain transactions are not possible. The sending party must be online and connected to the network to facilitate a transaction. Again, I don’t think this is a big issue, as there would still be that trust issue if it did have this feature. Beyond that, most smart devices and smart consumer electronics have internet access these days.</p><h4>Long-term Adoption</h4><p>One issue that we will run into is that when there are enough users and clients of a cryptocurrency, we have to start asking ourselves, are there enough to go around? On top of that, when we are dealing with IoT where machines will send tiny amounts of a currency to each other, we need to make sure that these tiny amounts don’t grow too expensive in the long run.</p><p>Both IOTA and RaiBlocks are effectively “pre-mined”, meaning that their ledgers started out with a certain amount of cryptocurrency that can never change. Over time, these tokens have been bought, sold, and moved around with ICOs and Faucets, increasing the general users’ attainment of these cryptos.</p><p><a href="https://iotasupport.com/whatisiota.shtml"><strong>The max supply of IOTA is 2,779,530,283,277,761 IOTAs</strong></a><strong> (or roughly 2.8 quadrillion IOTAs)</strong>. (For comparison, Bitcoin will reach a max of roughly <a href="https://en.bitcoin.it/wiki/Satoshi_(unit)">2.1 quadrillion satoshis</a>.)</p><p><a href="https://github.com/clemahieu/raiblocks/wiki/Distribution,-Mining-and-Units">The max supply of RaiBlocks is on the order of 2¹²⁸</a> ~ 340e36, or 340 <a href="https://en.wikipedia.org/wiki/Names_of_large_numbers">undecillion</a>. The reason for this high ceiling is that they utilize a 128 bit integer to represent balances. (Later, I will argue why this is a good thing.) <a href="https://coinmarketcap.com/currencies/raiblocks/"><strong>Their actual max supply is about 133,248,290 MXRB</strong></a>, where 1 <a href="https://github.com/clemahieu/raiblocks/wiki/Distribution,-Mining-and-Units#divider">MXRB</a> represents 10³⁰ (or 1 <a href="https://en.wikipedia.org/wiki/Names_of_large_numbers">nonillion</a>) raw RaiBlock units. <strong>The max supply can be denoted as roughly 133e36, or 133 </strong><a href="https://en.wikipedia.org/wiki/Names_of_large_numbers"><strong>undecillion</strong></a><strong> raw RaiBlocks.</strong> Their <a href="https://github.com/clemahieu/raiblocks/wiki/Distribution,-Mining-and-Units#divider">wiki</a> also denotes a few helper units based on the SI system to help with using some of these high numbers. <strong>Here is the max supply in raw units, just for fun: 133,248,290,000,000,000,000,000,000,000,000,000,000</strong>. That’s 39 digits! For comparison, this means <strong>there are about 48 </strong><a href="https://en.wikipedia.org/wiki/Names_of_large_numbers"><strong>sextillion</strong></a><strong> raw RaiBlocks for each and every IOTA that could ever exist</strong>. That’s quite the ratio!</p><p>Let’s picture <a href="https://www.forbes.com/sites/louiscolumbus/2016/11/27/roundup-of-internet-of-things-forecasts-and-market-estimates-2016/#66811ec1292d">a scenario where we reach 75 billion IoT devices by 2025</a>. Let’s forget, to keep things simple, that there will be billions of people owning cryptocurrencies by 2025. Therefore, let’s also assume that these IoT devices own all the crypto (Skynet!?). Now, let’s make a few calculations. <strong>The average amount of crypto that will be shared among these future 75 billion devices will be on the order of 37 thousand IOTA (or 37 </strong><a href="https://iotasupport.com/whatisiota.shtml"><strong>kIOTA</strong></a><strong>) or 1.78 </strong><a href="https://en.wikipedia.org/wiki/Names_of_large_numbers"><strong>octillion</strong></a><strong> raw RaiBlocks (or 1.78 </strong><a href="https://github.com/clemahieu/raiblocks/wiki/Distribution,-Mining-and-Units#divider"><strong>kXRB</strong></a><strong>).</strong> <strong>From this, we can see that there will be much more flexibility in the transactional sense for RaiBlocks than for IOTA. This leads me to think that RaiBlocks could very well dominate the IoT space in the coming years, unless IOTA upgrades their protocol to either increase the max supply or allow for divisible IOTAs.</strong></p><h3>Scalability</h3><p>There are a few different metrics we can look at in terms of scalability.</p><h4>Speed of Transactions</h4><p>In IOTA, as more transactions get sent through the network, confirmation times decrease, in theory. We’ve seen issues in recent weeks causing delays in peoples’ transactions being confirmed, sometimes taking days. But as I explained earlier, I think these are technical issues. Once the node performance and spam issues are mitigated, we should see a bounce back to better confirmation rates and times.</p><p>In RaiBlocks, you, as the user, performs the confirmation by signing your transaction. This process takes a trivially small amount of time. In general, your transaction is fully confirmed and processed in a matter of seconds. The bulk of the time is spent on performing proof of work, which is necessary to mitigate unchecked spam attacks.</p><h4>Ledger Size</h4><p>IOTA has a mechanism to trim ledger size in a process called snapshotting. Until now, we have had a number of snapshots which were manually executed by the IOTA team. (Max ledger size I’ve experienced is on the order of ~5–10 GB per month of transactions) After a snapshot, the size of the ledger becomes reduced to the non-zero addresses in existence and the balance of each of those addresses. From then on, the tangle works like normal again. There are a few issues with this scheme, at the moment. One issue is that one needs to manually “attach” their addresses to the tangle again to see their balance in their wallet properly. (This has probably given many people mini-heart attacks as they open their wallet to see a balance of ZERO) The new <a href="https://medium.com/iota-ucl/wallet-refresh-the-case-for-a-desktop-app-8aebaf19520a">UCL wallet</a> will automate this process. I believe we can expect them to release an alpha this month or next. Another issue is that the node operators must manually go into their servers, and wipe the old database storing the transactions. I believe this is just a technical issue that will be solved though. There are plans to fully automate these snapshots on <a href="https://blog.iota.org/iota-development-roadmap-74741f37ed01">their roadmap</a>.</p><p>In RaiBlocks, the current full ledger size is on the order of 3 GB. Not bad for two years worth of transactions. Granted, RaiBlocks isn’t nearly as popular as IOTA yet, so we have yet to see how it will perform under extreme loads. Over time, size will definitely become an issue. There are plans of pruning the database, as all that is needed for consistency is the total balance in each of the block lattice’s blockchains. This pruning is <a href="https://github.com/clemahieu/raiblocks/wiki/Roadmap">on their roadmap</a>.</p><h3>Decentralization</h3><p>IOTA has been getting flak about how its protocol is not yet fully decentralized. I tend to agree with the sentiment, but I am confident that they are also working as quickly as possible to attain full decentralization without <a href="https://domschiener.gitbooks.io/iota-guide/content/chapter1/current-role-of-the-coordinator.html">their coordinator</a>. (I elaborate on the coordinator in the Attack Potential section below) We are still waiting on an analysis or an estimate as to when this will be achieved. I would hazard a guess that the coordinator will be removed some time in 2018.</p><p>Another issue is that of peering. Until recently, node operators have had to manually reach out to other operators and add each others’ IP addresses and ports to their IRI configuration. But, I am happy to say, that there has been a recent development, called <a href="https://medium.com/deviota/carriota-nelson-in-a-nutshell-1ee5317d8f19">Nelson</a>, which effectively solves this problem, and allows for full auto-peering on the network. Right now, this is a wrapper on the IOTA node, but I expect them to eventually implement a fully baked in solution in the node itself.</p><p>RaiBlocks has no central authorities managing transactions on the network and has had auto-peering since its release around September 2015. Therefore, we can deem it as being decentralized. The only area where I see a slight issue is in that of their representative system. This is a potential attack vector, whereby a malicious entity may buy up millions of dollars worth of XRB and carry out a voting attack. This scenario is outlined on their <a href="https://github.com/clemahieu/raiblocks/wiki/Attacks">Attacks wiki</a>. Granted, it is “low” risk as the malicious party would have to effectively forfeit large sums of money to carry out this attack, on the order of hundreds of millions of dollars or ~50% of the market cap, as of this writing.</p><h3>Exchanges (How to Buy?)</h3><p>IOTA is available on a number of major exchanges, including <a href="https://www.bitfinex.com/">Bitfinex</a> and <a href="https://www.binance.com/">Binance</a>, with <a href="https://twitter.com/DavidSonstebo/status/938087727509188608">plans of being added to more exchanges</a> in the near future. You can find <a href="https://coinmarketcap.com/currencies/iota/#markets">their most active markets here</a>.</p><p>RaiBlocks, by contrast, is not on any major exchanges yet. Its volume is on the order of ~$5-$10 million, compared to IOTA’s ~$500 million. Their main exchanges, <a href="https://bitgrail.com/">BitGrail</a> and <a href="https://mercatox.com/">Mercatox</a>, have recently been hit with performance issues, due to increased traffic, and <a href="https://www.reddit.com/r/RaiBlocks/comments/7jq9d1/people_invested_in_coins_above_xrb_have_incentive/">rumors of DOS attacks</a>. It is, unfortunately, quite difficult to obtain RaiBlocks at the moment, given these unstable exchanges and lack of supply. <a href="https://coinmarketcap.com/currencies/raiblocks/#markets">You can keep track of their exchanges here</a>.</p><p><em>Update, Feb 23, 2018: NANO, formerly RaiBlocks, is now available on a number of popular and more reliable exchanges such as Binance and Kucoin. </em><a href="https://medium.com/@nanocurrency/bitgrail-insolvency-update-2-11-18-9349c9fe1281"><em>I have to advise against using BitGrail as they have been involved in a recent hack and are now insolvent.</em></a></p><h3>Roadmaps</h3><p>Both IOTA and RaiBlocks are currently under heavy development. At the moment, the <a href="https://iotasupport.com/foundation.shtml">IOTA team</a> has a larger size than the RaiBlocks team, at roughly 30 developers compared to RaiBlocks’ <a href="https://raiblocks.net/page/aboutus.php">5 developers</a>. IOTA also has fostered <a href="https://www.reddit.com/r/Iota/comments/7f3dmx/list_of_known_iota_partnerships_corporate/">a large number of corporate partners</a> that will help develop their ecosystem, including Volkswagen and Bosch.</p><p>As for published roadmaps, here is <a href="https://blog.iota.org/iota-development-roadmap-74741f37ed01">a blog post from IOTA</a> and here is <a href="https://github.com/clemahieu/raiblocks/wiki/Roadmap">a wiki page</a> and <a href="https://www.reddit.com/r/RaiBlocks/comments/78sij4/raiblocks_road_map_2017_v20/">an infographic for RaiBlocks</a>.</p><p><strong>Both tokens have good roadmaps, but IOTA’s is more interesting in that they are trying to implement private transactions, smart contracts, a data marketplace, and more, on top of IOTA!</strong></p><p>RaiBlocks goes by the mantra, <a href="https://raiblocks.net/">“Do one thing, and do it well.”</a> Because of their focus on making the best FFM token, it would be difficult for them to extend this token to be private, have smart contracts, etc. (Maybe someone could make a decent fork with these features and become uber-rich???) <em>Edit: Caution: there are some dubious projects that claim to be trying to implement this currently. Be wary of these projects; many of them are scams and never deliver.</em></p><h3>User Friendliness</h3><p>The main point of interaction for the average user is the wallet.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*5q7KYT5qi8AJxOz9cMKdDg.png" /><figcaption>Official IOTA Wallet</figcaption></figure><p>For IOTA, their current wallet is quite bare in terms of user friendliness. It gets the job done. It is more of a developers’ wallet for a product still in beta. I’ve seen numerous posts on reddit asking whether they should reattach or rebroadcast their transactions. These esoteric options should be totally abstracted from the user, in my opinion. <em>Edit: The IOTA team has recently added another feature called “</em><a href="https://twitter.com/iotatoken/status/943111784214523904"><em>Transaction Promotion</em></a><em>,” and again, I will say that this should be totally abstracted from the user.</em></p><p>Thankfully, they do have a much <a href="https://medium.com/iota-ucl/wallet-refresh-the-case-for-a-desktop-app-8aebaf19520a">improved wallet coming out, thanks to the team at UCL</a>. This wallet should clear up many of the headaches surrounding the current wallet experience. They are also working on releasing mobile wallets for general consumption, as their <a href="https://www.reddit.com/r/Iota/comments/7jyfzw/iota_wallet_beta/">iOS wallet is currently undergoing beta testing</a> before public release.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tg5OjCHMLz5tsrjx7u9Z9g.png" /><figcaption>Screenshot of the <a href="https://medium.com/iota-ucl/wallet-refresh-the-case-for-a-desktop-app-8aebaf19520a">upcoming IOTA wallet from UCL</a></figcaption></figure><p>Another issue with the IOTA protocol is something called the “<a href="https://iotasupport.com/how-addresses-are-used-in-IOTA.shtml">address reuse</a>” issue. Essentially, every time you spend from an address, a private signing key for that address gets partially leaked. If you spend from the same address many times, an attacker could reconstruct the original signing key to steal funds from that address. This process is effectively baked into the IOTA protocol and is what <a href="https://www.tangleblog.com/2017/01/25/the-tech-behind-iota-explained/">implements their “quantum resistance.”</a> This quantum resistant algorithm is called the Winternitz One-Time Signature Scheme. (<a href="https://en.wikipedia.org/wiki/Lamport_signature">Read more about one time signature schemes here</a>.) Still, it is difficult to train new users about this, who are used to sending and receiving Bitcoin, Ethereum, and basically every other coin.</p><p>When you do spend from the IOTA wallet, any leftover funds from your transaction are automatically sent to another address you own. (Each seed can “own” a large number of individual addresses) And new versions of the wallet will warn that you are trying to send funds to an address that had already sent funds, which is a step in the right direction. <a href="https://github.com/iotaledger/iri/issues/349">You still have to be careful sending across snapshots, as I don’t believe the wallets and nodes can detect this.</a> (Please correct me if I am wrong.)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/940/1*J5ugYD3BG8e_GoowpUaiSg.png" /><figcaption>Official RaiBlocks Wallet</figcaption></figure><p>RaiBlocks’ current wallet is also a developers’ wallet. Everything is black, white, and gray, with small font and a bare-bones navigation interface. It gets the job done. There is no lite wallet support yet, so users must sync the entire ledger before being able to properly interact with the network. And sync times are quite bad at the moment, anecdotally speaking; I am spending tens of hours trying to get my full wallet to sync. Thankfully, there is an alternative to fully syncing your node the slow way: <a href="https://www.reddit.com/r/RaiBlocks/wiki/index">you can download the full ledger here</a>.</p><p>Again, new and improved desktop and mobile wallets are currently under development, according to their roadmap!</p><p><em>Update, Feb 23, 2018: The new version </em><a href="https://github.com/nanocurrency/raiblocks/releases"><em>10.0.1 of the NANO wallet</em></a><em> is able to fully download the ledger on the order of minutes (with a fast internet connection) and fully sync with the network in a few hours! Well done NANO team!</em></p><p>RaiBlocks also follows the general convention of sending and receiving from the same address being OK; no address reuse issue here.</p><p>Basically, the wallet experience for both of these cryptos is quite lacking at the moment. But, <strong>we can expect great new wallets from both of them in the very near future!</strong></p><h3>Growth Potential</h3><p>IOTA still has a lot of room to grow and I elaborate on this in my article, <a href="https://medium.com/@peterryszkiewicz/iota-price-analysis-and-predictions-1a5855a7c36">IOTA Price Analysis and Predictions</a>. The TLDR is that <strong>IOTA has </strong><a href="https://blog.iota.org/iota-development-roadmap-74741f37ed01"><strong>many items on their roadmap</strong></a><strong> and many more exchanges to be added on, which, in my opinion, will boost the price to levels on the order of $141/Mi, compared to their current price of roughly $3.80. That’s a predicted 37x gain. </strong>Please take this with a grain of salt.</p><p><strong>RaiBlocks has risen from obscurity in recent weeks, from a market cap of ~$20 million (~rank 200) on November 24, to ~$530 million (~rank 40) on December 14th. That’s 26.5x in only 3 weeks!!! </strong>And there’s no telling when this growth will stop. My hypothesis is that RaiBlocks has been riding the wave of money flowing into IOTA and other related next generation cryptocurrencies over the past few weeks. And as more people look into the technology and test out the wallets to see that it actually works, more people will get sucked into this cool new tech. <strong>I predict RaiBlocks will be a top 10 crypto one year from now, from the simple fact that their tech is fast, simple, and it works!</strong> They still have a <a href="https://www.reddit.com/r/RaiBlocks/comments/7jr9gr/raiblocks_roadmap/">long roadmap ahead of them</a>, but I am confident they will deliver. <strong>If RaiBlocks does become a top 10 crypto, they would have a market cap of ~$5 billion, which means a ~9.4x gain in one year.</strong> One year from now, the necessary market cap to attain a top 10 ranking will probably be much higher, so this growth is probably going to be even higher.</p><h3>Attack Potential</h3><p>We must ask ourselves a few questions if we want to believe in the long term viability of these cryptocurrencies. How can these cryptos be attacked? How likely are those attacks? What are the severity of these attacks?</p><p>IOTA has a few potential attack vectors. One of them being executed recently is called a spam attack. This is where an attacker spams the network with dummy transactions, messing up the confirmation tip selection algorithm, causing delays in confirmations, sometimes orphaning valuable transactions for days or weeks. The foundation is very aware of these issues and we are currently <a href="https://twitter.com/pryszkie/status/939737502658826240">waiting on a more robust release</a>. <em>Edit Dec 20, 2017: New versions of </em><a href="https://github.com/iotaledger/iri/releases"><em>the IRI</em></a><em> (v1.4.1.4) and </em><a href="https://github.com/iotaledger/wallet/releases"><em>wallet</em></a><em> (v2.5.5) have been released and they claim many of these issues are resolved. Anecdotally, I am seeing many people say, on Reddit and the IOTA Slack, that their confirmations occur much faster now.</em></p><p>People argue that IOTA is not yet decentralized due to the deployment of something called <a href="https://domschiener.gitbooks.io/iota-guide/content/chapter1/current-role-of-the-coordinator.html">the coordinator</a>. This is basically “training wheels” for the IOTA network which is used to mitigate 51% attacks and such. Most blockchains, including Bitcoin, have had mechanisms like this in their early days. But we are still waiting on a official metric or a timeline for when this will be removed. The link earlier stated that it would become “optional” by the summer (the article looks dated so I think it meant the summer of 2017?). In theory, I believe the coordinator is optional, but in practice, I highly doubt people are running their nodes in a coordinator-less fashion; please let me know if I am mistaken here. I’m still confident that once IRI autopeering and neighboring is fully implemented, the network will be robust enough to stand on its own; and these features are on <a href="https://blog.iota.org/iota-development-roadmap-74741f37ed01">the roadmap</a>. (<a href="https://github.com/eukaryote31/iota-antifud">Here is a nice little repository of IOTA’s anti-FUD rebuttals</a>, including info about the coordinator.) Just for comparison, RaiBlocks doesn’t have the concept of a coordinator, and auto-peering has been a standard feature of full nodes and the wallet since it was released.</p><p>There are other potential attack vectors with the IOTA protocol and you can read more in their <a href="https://iota.org/IOTA_Whitepaper.pdf">whitepaper</a>. <strong>In general, the attack risk for IOTA is low at the moment.</strong></p><p>RaiBlocks is the new kid on the blockchain (pun intended). Therefore, it hasn’t had the same levels of hardening and improvement like other cryptos. With this recent surge in pricing, we can be sure that attackers will start trying to knock down or even break the service. Time will tell if the current implementation is strong enough to withstand these. I recommend code reviews and audits by security teams, analysts, and the general developer community, especially since the main node software is <a href="https://github.com/clemahieu/raiblocks">written in C++</a> *shivers*. I’ve only had a brief glimpse of their code and see many functions and files that are too many lines long (<a href="https://github.com/clemahieu/raiblocks/blob/master/rai/node/bootstrap.cpp#L308">example</a>) and nesting-hell (<a href="https://github.com/clemahieu/raiblocks/blob/master/rai/node/common.cpp#L79">example</a>). <a href="https://github.com/clemahieu/raiblocks/blob/master/rai/node/rpc.cpp#L389">Here is a perfect case for a guard statement refactoring</a> ;-) I’m not trying to bash on RaiBlocks, <a href="https://twitter.com/ColinLeMahieu">Colin LeMahieu</a> (the creator of RaiBlocks), or their developers, but there are a lot of code smells going on and lots of room for improvement :-]</p><p>I encourage community developers and members to help contribute their time and talents to this project, as for IOTA and other cryptos. (Just to keep it balanced, <a href="https://github.com/iotaledger/iri/blob/dev/src/main/java/com/iota/iri/LedgerValidator.java#L110">here is a nasty example of deep-nesting in the IRI</a>; something like 8 levels deep) I guarantee there are bugs here, waiting to be either fixed or exploited. Hopefully the former.</p><p>Furthermore, <strong>RaiBlocks</strong> gives a nice, concise description of many different attack vectors and their severity on their wiki page. <a href="https://github.com/clemahieu/raiblocks/wiki/Attacks">Take a look</a>. The TLDR is that <strong>most of these attack vectors are low to moderate risk and basic defense mechanisms have either been theorized or already implemented.</strong> This is not a comprehensive list of course; I predict there are some unknown attack vectors and exploits which we will see in time.</p><h3>Resources</h3><p><a href="https://iota.org/">IOTA Homepage</a>; <a href="https://iota.org/IOTA_Whitepaper.pdf">IOTA Whitepaper</a>; <a href="https://blog.iota.org/the-transparency-compendium-26aa5bb8e260">IOTA Transparency Compendium</a></p><p><a href="https://raiblocks.net/">RaiBlocks Homepage</a>; <a href="https://raiblocks.net/media/RaiBlocks_Whitepaper__English.pdf">RaiBlocks Whitepaper</a>; <a href="https://github.com/clemahieu/raiblocks/wiki">RaiBlocks Wiki</a></p><h3>Conclusion</h3><p>IOTA and RaiBlocks definitely overlap in terms of functionality and use cases. Each has their own theory as to why they will be the prevailing FFM coin of the future. We don’t really know whether one will “win” or whether both will thrive in their own ways. They both have many, very exciting features, products, and improvements yet to be released. And neither perfectly solves all use cases. <strong>There will probably never be a “perfect” coin to rule them all.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kKWUfY0VV1D6KEVGOcT72Q.png" /></figure><p>That being said, <strong>I think both coins will be very strong players in the cryptocurrency space for years to come.</strong> And there will be new players trying to make their way into this crowded, competitive space. We should not only be competing, but also working together to foster a stronger future for both of these cryptos and for new FFM cryptos to come. Both competition and collaboration will promote innovation!</p><p>We have a very interesting future ahead for these cryptos with plenty of new developments happening. I’m thoroughly excited to see what happens!</p><p><em>Edit Dec 20, 2017: I originally stated there were 10–12 developers working on RaiBlocks. This was inaccurate. There are actually </em><a href="https://raiblocks.net/page/aboutus.php"><em>5 developers</em></a><em>.</em></p><p><em>Edit Dec 24, 2017: I made a mistake in the number of RaiBlocks in circulation. I had assumed that exchanges sell in units of 10²⁴ raw RaiBlocks, when in fact, they sell in units of 10³⁰ raw RaiBlocks, aka </em><a href="https://github.com/clemahieu/raiblocks/wiki/Distribution,-Mining-and-Units"><em>Mxrb</em></a><em>. All subsequent calculations have been updated.</em></p><p>You can follow me and my company, <a href="https://www.prizzventuresllc.com/">P Rizz Ventures LLC</a>, on <a href="https://twitter.com/pryszkie">Twitter</a>, <a href="https://medium.com/@peterryszkiewicz">Medium</a>, <a href="https://www.facebook.com/PRizzVenturesLLC/">Facebook</a>, and <a href="https://www.linkedin.com/company/p-rizz-ventures-llc/">LinkedIn</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=413679bb4c3e" width="1" height="1" alt=""><hr><p><a href="https://medium.com/hackernoon/iota-vs-raiblocks-413679bb4c3e">IOTA vs NANO (RaiBlocks)</a> was originally published in <a href="https://medium.com/hackernoon">HackerNoon.com</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Introduction, History, and Future Plans]]></title>
            <link>https://medium.com/@peterryszkiewicz/introduction-history-and-future-plans-91da44346709?source=rss-5695106bc7f5------2</link>
            <guid isPermaLink="false">https://medium.com/p/91da44346709</guid>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[tech]]></category>
            <category><![CDATA[iota]]></category>
            <category><![CDATA[cryptocurrency]]></category>
            <category><![CDATA[business]]></category>
            <dc:creator><![CDATA[Peter (Justice for the Victims) Ryszkiewicz]]></dc:creator>
            <pubDate>Tue, 21 Nov 2017 16:01:03 GMT</pubDate>
            <atom:updated>2017-12-27T05:21:23.569Z</atom:updated>
            <content:encoded><![CDATA[<p>My name is Peter Ryszkiewicz and this is a little introduction about myself, my professional history, and my plans for the future.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*nUS1Y5jQ9XM6X6ZM4To8Mw.jpeg" /><figcaption><a href="http://maggiedaleypark.com/">Maggie Daley Park</a>, Chicago, personal photograph</figcaption></figure><p>I am a 27 year old software engineer living in the great city of Chicago. I currently work at a company called <a href="https://higi.com/">higi</a>, a health and wellness company offering free checkups for health metrics at thousands of health stations across the US. I am leaving higi soon to pursue my business venture, <a href="https://www.prizzventuresllc.com/">P Rizz Ventures LLC</a>. (P Rizz is a truncated anagram of my name; please let me know if there is a more precise term for a “truncated anagram”) I am currently working on creating fun and useful cryptocurrency software and services, with a strong focus on building for <a href="http://iota.org/">IOTA</a>. It is very difficult leaving higi, leaving my fantastic colleagues and innovative projects we were working on. But I think this is the right move, not only because I think I can make great things for crypto, but because that is where my passion lies right now.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rAtC-VkRv6HpLka9gotvMg.png" /></figure><p>I went to university at Illinois Tech where I got a Bachelors degree in Electrical Engineering, class of 2012. I wanted to continue learning and started my Masters with a focus on Digital Communications and Signal Processing. I had ambitions of going even further and getting a PhD and doing research, working with technology that I loved. Oh, my optimism… Unfortunately, I dropped out of the Masters program a few months into it as I realized I was not enjoying myself and not melding with the experience, unlike my undergraduate program. (There’s issues with your grad program, IIT, but that’s another story.)</p><p>After that, I landed a job at Nokia where I worked on the <a href="https://en.wikipedia.org/wiki/Nokia_Xpress">Xpress Browser</a>, a mobile web browser that compressed data before reaching your mobile phone. (Google now has a version of this called <a href="https://developer.chrome.com/multidevice/data-compression">Data Saver</a> in their mobile versions of Chrome.) I learned a lot about the now defunct J2ME (Java) platform and dealing with the limitations of implementing for Series 40 feature phones, fun!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/665/1*rOYD-4sjKXSQT9Ut6LcTCA.png" /><figcaption>Nokia Series 40 Devices</figcaption></figure><p>I also started dabbling in backend, mostly with <a href="https://nodejs.org/">NodeJS</a> while it was still in version zero. I was super intrigued by this new callback based / event driven paradigm and immediately saw the huge potential. This became the backbone for the, now defunct, <a href="https://blogs.windows.com/devices/2013/05/16/a-new-web-experience-nokia-xpress-now/">Nokia Xpress Now</a> service. This was an aggregation of new, curated, and popular content across the internet. It gained some popularity, mostly in India, for the time that it existed and was one of the most popular “apps” on the Series 40 devices.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/750/1*QA_zhQSW8D0qFVuD2O8XMw.jpeg" /></figure><p>Some time in 2014, Microsoft officially bought out Nokia’s Mobile Phone division, which I was a part of. People immediately went into panic mode — there were always layoffs after large consolidations like this. So we continued to work under Microsoft for roughly six months before learning of the plan that most of us were getting axed. The cool thing about this was that our workplace became a daily hackathon; we were making and demoing new and interesting products and prototypes, trying to entice Microsoft to keep us. Alas, it wasn’t meant to be, as Microsoft decided that it wasn’t worth keeping us; an understandable move from a large corporation with many stakeholders. It sucked, but it wasn’t the end of the world. I now had some decent experience under my belt with some decent companies to put on my resume.</p><p>Shortly before being let go from Microsoft, there were rumors that BMW was considering starting an office in Chicago, sweeping up all of the new potential engineers on the market. After we were laid off, word started spreading that in fact the rumors were true, and we were all contacted, shortly thereafter, about whether we were interested in joining BMW’s new office. I jumped on it! Here is a world-class car company, pushing new and innovative solutions for driving mobility, and we were the first to get our hands on this new technology! And we were going to work again with our old friends and coworkers from Nokiasoft! Great!</p><p>At BMW, the first few months were filled with, again, daily hackathons. We were trying to figure out a business plan of action with all of us newly hired engineers. We made some really cool concepts, and I believe some of them are now in BMW’s apps today.</p><p>We then decided to officially start developing new versions of iOS and Android apps for interacting with your Beamer. Problem was, barely anyone in the office knew iOS or Android! We were from the world of Series 40 and Lumias, not these newfangled smartphones! Fortunately, myself and a few other engineers had dabbled in iOS and Android, so we helped bootstrap the office with a series of teaching sessions and pair programming. Granted, I was not an expert at the time. But I did have one app on the App Store, <a href="https://itunes.apple.com/us/app/grade-grid/id919389272?mt=8">Grade Grid</a>, a simple app for teachers to calculate grades for their students’ assignments and exams. It was a very good learning experience, teaching me the fundamentals of Apple’s take on <a href="https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller">MVC</a> and related design patterns. If you are a young developer, maybe still in school, I highly recommend trying to make some iOS or Android apps. I believe tinkering is very important and formative for everyone, especially engineers. That process of trying and failing for hours, just trying to get your code to compile properly… and then voila! It’s an exhilarating experience. You may even get to the point, some day, where your code not only compiles, but also works as intended, on the first try! You are a god among software engineers if you can get to this point!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/392/1*taBP1BH_Q4XMqrG7q-ACwA.jpeg" /><figcaption>BMW Connected</figcaption></figure><p>After what felt like forever, we finally shipped our first version of <a href="https://itunes.apple.com/us/app/bmw-connected/id1087277146?mt=8">BMW Connected</a>! It felt amazing being part of a new era of smart devices and the smart car ecosystem. There was a whole new world of interesting applications and use cases before us. Aaand then our app was rated a 1.5 stars… Not good. But we continued iterating and improving the user experience, and we slowly went up to a 2, maybe 2.5 stars. (It now hovers around 3 stars; not great, but good)</p><p>About a year and a half after joining BMW, I started thinking about other opportunities. There were, and still are, plenty of great tech jobs in Chicago, and I felt like we, at BMW, were not pushing the pedal hard enough, so to speak. After a search, I came upon a company called higi, the company I described in my starting paragraphs. I joined higi as an iOS developer, learned a great amount while working there, and met a lot of fantastic people. I still think it is a super cool company to have worked for. (I hear they have an open iOS position…)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/401/1*sZUChqWldbs9Fs8ix-_WGA.png" /></figure><p>While at higi, I was introduced to the world of cryptocurrencies by some coworkers. (I knew about Bitcoin, in passing, for the last few years, but, sadly, didn’t dig into it, or other cryptos, at the time) I immediately understood their huge potential for interesting applications and systems for transforming this world for the better. (I am highly influenced by <a href="https://medium.com/u/898f59563d67">Andreas M. Antonopoulos</a> and his awesome talks on <a href="https://www.youtube.com/user/aantonop">YouTube</a>) I was hooked and was learning as much as I could about these new and strange sounding cryptos: Ethereum, Monero, IOTA… <a href="http://iota.org/">IOTA</a> seemed to be the most interesting, offering fast and free transactions to anyone in the world. There was no miner/user contention. The users were the miners, effectively: every transaction requires a bit of computation to execute, called a Proof of Work, or PoW for short.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*kF6eXXeg-7ac1RNC4iG78A.jpeg" /><figcaption>IOTA</figcaption></figure><p>I admit, I am not an IOTA maximalist, but I still think it is a huge contender to be a top-3 crypto. Maybe even number 1 some day. But IOTA is still in its infancy — it’s still in beta and there have been a lot of headaches caused by snapshots and token management. But, they are getting better every day. I have spoken with some of the founders/cofounders (<a href="https://medium.com/u/f2732d3a7f35">David Sønstebø</a> and <a href="https://medium.com/u/aa6871c68c9d">Dominik Schiener</a>) and am convinced that they are on the right path forward for fostering a strong ecosystem of applications as well as the core product itself. They have a strong development and research team working on all these problems, and they are growing this team by the day. Now that they are officially incorporated in Germany, I think we will see an acceleration of innovation by the foundation!</p><p>And here we are, in the present. I recently released an app called <a href="https://www.chatangle.com/">Chatangle</a>, a free, decentralized, global chatroom, powered by the IOTA tangle (analogous to the “blockchain” data structure). I am continuing to improve it every day, and am confident it can become a strong tool to preserve freedom of speech around the world once I release authentication and private channels.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DvHN2kxbG-AVLHwCdZjrNQ.png" /><figcaption>Chatangle</figcaption></figure><p>Admittedly, it is a bit slow and buggy at the moment, but I have ideas in mind for how to address these issues. And I will have much more time to work on these things once I officially leave higi.</p><p>I believe we are going to see an explosion of growth in dapps (decentralized apps) built on top of IOTA in the near future. We will see new businesses and business models emerge. This is what I am currently focusing on in my company.</p><p>Some people say we are in a crypto bubble, which I actually agree with to some extent, but only in the short term. In the longer term, I am confident we are going to see some amazing things pop up for IOTA and other cryptos. (I tend to think that crypto is following a <a href="https://medium.com/@cburniske/the-crypto-j-curve-be5fdddafa26">J-Curve</a> at the moment.) Crypto is like how the internet was in the 90s, with lots of new companies and ideas just being born and starting to flourish. We are going to see profound changes, not only to government regulation and banking, but to society as a whole, as we move from a centralized world of commerce and communication, to a decentralized one. We are in for some exciting times ahead and I am ecstatic to be a part of it!</p><p>You can follow me and my company, <a href="https://www.prizzventuresllc.com/">P Rizz Ventures LLC</a>, on <a href="https://twitter.com/pryszkie">Twitter</a>, <a href="https://medium.com/@peterryszkiewicz">Medium</a>, <a href="https://www.facebook.com/PRizzVenturesLLC/">Facebook</a>, and <a href="https://www.linkedin.com/company/p-rizz-ventures-llc/">LinkedIn</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=91da44346709" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>