<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>hive-186392 community on Hive</title><description>RSS feed for the hive-186392 community on the Hive blockchain</description><link>https://hiverss.com/</link><atom:link href="https://hiverss.com/community/hive-186392.xml" rel="self" type="application/rss+xml"/><image><url>https://hiverss.com/hive_logo.png</url><title>hive-186392 community on Hive</title><link>https://hiverss.com/</link></image><item><title>PR #141: Letting Hive-Engine Lite Nodes Catch Up Before Cleaning House</title><link>https://hive.blog/hive-186392/@thecrazygm/pr-141-letting-hive-engine-lite-nodes-catch-up-before-cleaning-house</link><guid isPermaLink="true">https://hive.blog/hive-186392/@thecrazygm/pr-141-letting-hive-engine-lite-nodes-catch-up-before-cleaning-house</guid><description>Hey everyone, In my last update, I broke down the Knobs A, B, and C changes and teased what was coming next. The latest piece of that puzzle, Knobs D, is now built, tested on live mainnet traffic, and submitted as PR #141 against the qa branch. This round focuses squarely on lite-node operations:…</description><pubDate>Sat, 17 Oct 2026 14:24:45 GMT</pubDate><content:encoded>&lt;p&gt;Hey everyone,&lt;/p&gt;
&lt;p&gt;In my last update, I broke down the Knobs A, B, and C changes and teased what was coming next. The latest piece of that puzzle, &lt;strong&gt;Knobs D&lt;/strong&gt;, is now built, tested on live mainnet traffic, and submitted as &lt;a href=&quot;https://github.com/hive-engine/hivesmartcontracts/pull/141&quot;&gt;PR #141&lt;/a&gt; against the &lt;code&gt;qa&lt;/code&gt; branch.&lt;/p&gt;
&lt;p&gt;This round focuses squarely on lite-node operations: specifically, teaching the node to hold off on pruning local database history when it has more urgent work to do.&lt;/p&gt;
&lt;h2&gt;The Problem: Housekeeping During a Fire&lt;/h2&gt;
&lt;p&gt;Lite nodes stay small and efficient by periodically running cleanup jobs (&lt;code&gt;database.cleanupLightNode()&lt;/code&gt;) to purge old blocks and transactions they no longer need. Under normal conditions, this background housekeeping runs quietly and everyone is happy.&lt;/p&gt;
&lt;p&gt;The trouble starts when a node falls behind. Whether it&apos;s scheduled server maintenance, an unexpected reboot, or an upstream network hiccup, a node that wakes up thousands of blocks behind the chain head needs all the CPU cycles and disk I/O it can get just to ingest and validate incoming blocks.&lt;/p&gt;
&lt;p&gt;Having MongoDB stop what it&apos;s doing every few minutes to execute heavy delete operations right in the middle of a catch-up sprint is the database equivalent of vacuuming the living room while the house is on fire. It causes unnecessary I/O contention and drags out the time it takes to get back to the head block.&lt;/p&gt;
&lt;p&gt;The fix is straightforward in concept: make cleanup lag-aware. If the node is struggling to catch up, let it defer cleanup for a bit and focus on block ingestion.&lt;/p&gt;
&lt;p&gt;Crucially, this doesn&apos;t touch block processing order, smart contracts, or consensus rules. It strictly changes &lt;em&gt;when&lt;/em&gt; local pruning takes place.&lt;/p&gt;
&lt;h2&gt;The New Configuration Knobs&lt;/h2&gt;
&lt;p&gt;The adaptive cleanup behavior is completely opt-in and controlled under the &lt;code&gt;lightNode&lt;/code&gt; configuration block:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;lightNode&quot;: {
    &quot;enabled&quot;: true,
    &quot;adaptiveCleanup&quot;: true,
    &quot;cleanupLagThreshold&quot;: 1000,
    &quot;maxConsecutiveCleanupSkips&quot;: 3,
    &quot;lastVerifiedBlockCacheTTL&quot;: 900000
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here’s how these pieces work together:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;adaptiveCleanup&lt;/code&gt;&lt;/strong&gt;: Enables the lag-aware logic. If left &lt;code&gt;false&lt;/code&gt; (the default), the node behaves exactly as it always has.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;cleanupLagThreshold&lt;/code&gt;&lt;/strong&gt;: How many blocks behind the node needs to be before it starts skipping cleanup passes. In this example, if the node is more than 1,000 blocks behind head, it postpones pruning.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;maxConsecutiveCleanupSkips&lt;/code&gt;&lt;/strong&gt;: The safety valve. We can&apos;t let a node defer cleanup indefinitely while syncing a massive backlog, or local disk usage would balloon. Setting this to &lt;code&gt;3&lt;/code&gt; means the node will skip at most three consecutive cleanup cycles before forcing a cleanup pass anyway, regardless of lag.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;lastVerifiedBlockCacheTTL&lt;/code&gt;&lt;/strong&gt;: Caches the lookup for &lt;code&gt;lastVerifiedBlockNumber&lt;/code&gt; in memory for 15 minutes (900,000 ms).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That last setting is a quiet efficiency win. Previously, every single cleanup pass did a full database lookup against &lt;code&gt;witnesses.params&lt;/code&gt; to find the last verified block height. Since round verification only advances every ~40 minutes (~1,200 blocks), re-querying the database every cleanup cycle was pure waste.&lt;/p&gt;
&lt;p&gt;Because verified block height only moves forward, a cached value is inherently safe: the absolute worst case is that the node retains an extra 15 minutes of old blocks before pruning them. It can never cause the node to delete data too aggressively.&lt;/p&gt;
&lt;h2&gt;Live Testing on a 19,000-Block Catch-Up&lt;/h2&gt;
&lt;p&gt;Unit tests are good for checking logic, but I always prefer seeing how these changes behave under actual pressure. I&apos;ve been running this branch on my live witness setup since October 5th.&lt;/p&gt;
&lt;p&gt;As luck would have it, my test node ended up falling about &lt;strong&gt;19,000 blocks behind&lt;/strong&gt;: giving me a far more realistic stress test than any tidy benchmark I could have staged.&lt;/p&gt;
&lt;p&gt;Watching &lt;code&gt;journalctl&lt;/code&gt; during the catch-up confirmed the safety limits were working exactly as designed. The node fell into a predictable rhythm: three skipped cleanup passes followed by one forced cleanup pass, repeating continuously while it processed the backlog.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://files.peakd.com/file/peakd-hive/thecrazygm/23tRtNZZJsvSoXvQgfUVR9YFxNKHz43w9G1WokygUnnPfGsWpSdKyDBTAY9Hu2HsGVrwt.png&quot; alt=&quot;screenshot-20261017-092502.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Over the course of the run, the logs recorded &lt;strong&gt;90 skipped cleanups and 30 forced cleanups&lt;/strong&gt;. The lag steadily dropped from 19,000 blocks down past the 1,000-block threshold, at which point normal periodic cleanup resumed smoothly. The node is now sitting happily locked to the Hive head.&lt;/p&gt;
&lt;h2&gt;Designing for Failure: The Fallback Guardrail&lt;/h2&gt;
&lt;p&gt;One detail I was very deliberate about: what happens if the streamer encounters an RPC blip and can&apos;t accurately report chain lag?&lt;/p&gt;
&lt;p&gt;A naive implementation might assume zero lag and clean up constantly, or worse, assume infinite lag and stop cleaning up forever.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://hive.blog/hive-186392/@thecrazygm/pr-141-letting-hive-engine-lite-nodes-catch-up-before-cleaning-house&quot;&gt;Read the full post&lt;/a&gt;&lt;/p&gt;</content:encoded><dc:creator>thecrazygm</dc:creator><category>hive-186392</category></item><item><title>Upgrading MongoDB 8 to 9: Why Systemd Refused to Start and How to Bridge the FCV Gap</title><link>https://hive.blog/hive-186392/@thecrazygm/upgrading-mongodb-8-to-9-why-systemd-refused-to-start-and-how-to-bridge-the-fcv-gap</link><guid isPermaLink="true">https://hive.blog/hive-186392/@thecrazygm/upgrading-mongodb-8-to-9-why-systemd-refused-to-start-and-how-to-bridge-the-fcv-gap</guid><description>Hey everyone, If you run a Hive-Engine node (or manage a self-hosted MongoDB instance on Linux), you might run into a nasty surprise after bumping your apt repositories for MongoDB 9.0. You configure the official repository, run sudo apt update &amp;&amp; sudo apt dist-upgrade, let the package manager do…</description><pubDate>Mon, 05 Oct 2026 15:40:51 GMT</pubDate><content:encoded>&lt;p&gt;Hey everyone,&lt;/p&gt;
&lt;p&gt;If you run a Hive-Engine node (or manage a self-hosted MongoDB instance on Linux), you might run into a nasty surprise after bumping your apt repositories for MongoDB 9.0.&lt;/p&gt;
&lt;p&gt;You configure the official repository, run &lt;code&gt;sudo apt update &amp;amp;&amp;amp; sudo apt dist-upgrade&lt;/code&gt;, let the package manager do its thing, and wait for &lt;code&gt;mongod&lt;/code&gt; to spin back up.&lt;/p&gt;
&lt;p&gt;Except it doesn&apos;t.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;systemctl status mongod&lt;/code&gt; shows the service failed immediately on boot with exit code &lt;code&gt;62&lt;/code&gt;, leaving you staring at an offline database and wondering whether your node&apos;s 400+ GB dataset just got toasted.&lt;/p&gt;
&lt;p&gt;The good news: your data is completely fine.&lt;/p&gt;
&lt;p&gt;The catch: you&apos;ve stepped right into MongoDB&apos;s rapid release compatibility trap.&lt;/p&gt;
&lt;p&gt;Here is what went wrong, why MongoDB 9.0 flat-out refused to boot, and the step-by-step process to safely bridge the gap (including the replica set details that Hive-Engine strictly enforces) so you can get your node back online with zero data loss.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;The Symptoms: Exit Code 62 on Startup&lt;/h2&gt;
&lt;p&gt;Immediately after upgrading packages from MongoDB 8.2 to 9.0, &lt;code&gt;systemctl status mongod&lt;/code&gt; reported:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;× mongod.service - MongoDB Database Server
     Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; preset: enabled)
     Active: failed (Result: exit-code)
    Process: 3053614 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=62)
   Main PID: 3053614 (code=exited, status=62)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Exit code &lt;code&gt;62&lt;/code&gt; in MongoDB means server initialization failed during startup checks before opening network listeners.&lt;/p&gt;
&lt;p&gt;To see the real reason, checking &lt;code&gt;/var/log/mongodb/mongod.log&lt;/code&gt; (or &lt;code&gt;journalctl -u mongod&lt;/code&gt;) revealed this fatal log entry:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;s&quot;: &quot;F&quot;,
  &quot;c&quot;: &quot;CONTROL&quot;,
  &quot;id&quot;: 20573,
  &quot;ctx&quot;: &quot;initandlisten&quot;,
  &quot;msg&quot;: &quot;Wrong mongod version&quot;,
  &quot;attr&quot;: {
    &quot;error&quot;: &quot;UPGRADE PROBLEM: Found an invalid featureCompatibilityVersion document (ERROR: Location4926900: Invalid featureCompatibilityVersion document in admin.system.version: { _id: \&quot;featureCompatibilityVersion\&quot;, version: \&quot;8.2\&quot; }. See https://docs.mongodb.com/master/release-notes/8.0-compatibility/#feature-compatibility. :: caused by :: Invalid feature compatibility version value &apos;8.2&apos;. Expected one of the following versions: &apos;9.0&apos;, &apos;8.3&apos;, &apos;8.0&apos;.)&quot;
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Notice the crucial detail:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Invalid feature compatibility version value &apos;8.2&apos;. Expected one of the following versions: &apos;9.0&apos;, &apos;8.3&apos;, &apos;8.0&apos;.&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Immediately after emitting this error, &lt;code&gt;mongod&lt;/code&gt; initiated an orderly rollback checkpoint and shut itself down cleanly without touching or modifying any user collections.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Why Did This Happen? The Rapid Release Trap&lt;/h2&gt;
&lt;p&gt;MongoDB follows two release tracks:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Major / LTS Releases:&lt;/strong&gt; (e.g., 7.0, 8.0, 9.0)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rapid Releases:&lt;/strong&gt; quarterly minor feature releases between major versions (e.g., 8.1, 8.2, 8.3)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Every MongoDB database contains an internal setting called &lt;code&gt;featureCompatibilityVersion&lt;/code&gt; (FCV) stored in the &lt;code&gt;admin.system.version&lt;/code&gt; collection. FCV controls which on-disk features, file structures, and internal behaviors the engine is permitted to use.&lt;/p&gt;
&lt;p&gt;MongoDB enforces strict rules when upgrading:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You cannot skip versions.&lt;/li&gt;
&lt;li&gt;A major release binary only knows how to handle datasets from the &lt;strong&gt;previous LTS release&lt;/strong&gt; (e.g., FCV &lt;code&gt;8.0&lt;/code&gt;) or the &lt;strong&gt;final rapid release&lt;/strong&gt; immediately preceding the new major version (e.g., FCV &lt;code&gt;8.3&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Because my machine was previously tracking the rapid release channel on &lt;strong&gt;MongoDB 8.2&lt;/strong&gt; (&lt;code&gt;8.2.12&lt;/code&gt;), its internal FCV was set to &lt;code&gt;&quot;8.2&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;When the MongoDB 9.0 binary checked the metadata at startup, it saw an FCV of &lt;code&gt;&quot;8.2&quot;&lt;/code&gt;. But 9.0 only knows about &lt;code&gt;&apos;8.0&apos;&lt;/code&gt;, &lt;code&gt;&apos;8.3&apos;&lt;/code&gt;, and &lt;code&gt;&apos;9.0&apos;&lt;/code&gt;. It does not support jumping directly from 8.2 to 9.0.&lt;/p&gt;
&lt;p&gt;Furthermore, you cannot simply tell 8.2 to downgrade its FCV to 8.0. MongoDB only allows setting FCV to its current minor version or the immediately prior one (8.2 or 8.1).&lt;/p&gt;
&lt;p&gt;The only supported bridge to 9.0 is &lt;strong&gt;MongoDB 8.3&lt;/strong&gt;.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;The Hive-Engine Factor: Replica Sets Are Mandatory&lt;/h2&gt;
&lt;p&gt;There is another crucial detail every node operator must know: &lt;strong&gt;Hive-Engine strictly forces MongoDB to run as a replica set&lt;/strong&gt; (typically &lt;code&gt;replSetName: &quot;rs0&quot;&lt;/code&gt; in &lt;code&gt;/etc/mongod.conf&lt;/code&gt;), even when running on a single local server.&lt;/p&gt;
&lt;p&gt;Hive-Engine relies heavily on multi-document ACID transactions and change stream / oplog tailing to process smart contracts deterministically. A standalone MongoDB instance simply will not run Hive-Engine.&lt;/p&gt;
&lt;p&gt;This requirement introduces three essential rules during this upgrade process:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://hive.blog/hive-186392/@thecrazygm/upgrading-mongodb-8-to-9-why-systemd-refused-to-start-and-how-to-bridge-the-fcv-gap&quot;&gt;Read the full post&lt;/a&gt;&lt;/p&gt;</content:encoded><dc:creator>thecrazygm</dc:creator><category>hive-186392</category></item><item><title>Recap of the Useful Knobs for Hive-Engine Nodes</title><link>https://hive.blog/hive-186392/@thecrazygm/recap-of-the-useful-knobs-for-hive-engine-nodes</link><guid isPermaLink="true">https://hive.blog/hive-186392/@thecrazygm/recap-of-the-useful-knobs-for-hive-engine-nodes</guid><description>Hey everyone, Over the past few weeks, I’ve been chipping away at a series of performance tweaks and operator controls for the Hive-Engine node. What started as a sprawling wish list of potential optimizations quickly became a deliberate exercise in restraint. Instead of dropping one massive,…</description><pubDate>Thu, 24 Sep 2026 13:48:06 GMT</pubDate><content:encoded>&lt;p&gt;Hey everyone,&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://files.peakd.com/file/peakd-hive/thecrazygm/23tGVdrVUAykaWngvJRk2sETosExnoX37KBWtgCPLhobhhbKWJBvhvJcjyyD8knBPDjKj.png&quot; alt=&quot;hive-engine-node-knobs-a-b-c-header.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Over the past few weeks, I’ve been chipping away at a series of performance tweaks and operator controls for the Hive-Engine node. What started as a sprawling wish list of potential optimizations quickly became a deliberate exercise in restraint. Instead of dropping one massive, high-risk pull request on the maintainers, I broke the work down into three smaller, easily reviewable bundles, all of which should currently be available in the &lt;code&gt;qa&lt;/code&gt; branch of &lt;code&gt;hive-engine/hivesmartcontracts&lt;/code&gt; (at least for now, as they get broader testing before hitting a main release):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Knobs A:&lt;/strong&gt; Expose a few critical runtime settings that were previously hardcoded.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Knobs B:&lt;/strong&gt; Cut out avoidable waiting in the core block-processing path.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Knobs C:&lt;/strong&gt; Make block fetching adapt intelligently when a node falls behind.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In plain English: operators can now tune the JavaScript VM pool, customize MongoDB connection pooling, and let the streamer catch up faster after maintenance—all without touching the source code. Under the hood, transaction index writes are now cleanly batched, and the VM pool warms up predictably on first use.&lt;/p&gt;
&lt;p&gt;Most importantly, none of this touches consensus, smart contract execution rules, or block processing order. Here’s a breakdown of what changed, why it matters, and how it held up in live testing on my witness node.&lt;/p&gt;
&lt;h2&gt;Knobs A: Un-hardcoding Useful Runtime Settings&lt;/h2&gt;
&lt;p&gt;The first bundle focused on exposing two settings that were either hardcoded or awkward to adjust without maintaining custom forks.&lt;/p&gt;
&lt;h3&gt;JavaScript VM Pool Count&lt;/h3&gt;
&lt;p&gt;Hive-Engine executes smart contracts inside isolated JavaScript VMs. Previously, the engine locked this down to a hardcoded ceiling of five VM instances. You can now configure this directly in &lt;code&gt;config.json&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;maxJSVMs&quot;: 5
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Five remains the default fallback if the setting is omitted or misconfigured.&lt;/p&gt;
&lt;p&gt;Raising this isn&apos;t a magic button that makes your node twice as fast. It’s an operator tradeoff: bumping the VM count gives a heavily loaded node more execution headroom for concurrent tasks, but it also increases your memory footprint once that pool is spun up. If you&apos;re on a memory-constrained box, you&apos;ll want to leave this alone or even tune it down; if you have plenty of RAM and run a busy node, you now have the freedom to adjust it.&lt;/p&gt;
&lt;h3&gt;MongoDB Connection Pool&lt;/h3&gt;
&lt;p&gt;The node now also lets you define explicit connection pool settings for MongoDB:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;databasePool&quot;: {
    &quot;maxPoolSize&quot;: 20,
    &quot;minPoolSize&quot;: 2,
    &quot;maxIdleTimeMS&quot;: 30000,
    &quot;waitQueueTimeoutMS&quot;: 10000
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here is what these control:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;maxPoolSize&lt;/code&gt;: The maximum number of concurrent MongoDB connections in the pool.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;minPoolSize&lt;/code&gt;: The minimum baseline of connections to keep open.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxIdleTimeMS&lt;/code&gt;: How long an idle connection can sit before being closed.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;waitQueueTimeoutMS&lt;/code&gt;: How long an operation will wait for an available connection before timing out.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you don&apos;t specify &lt;code&gt;databasePool&lt;/code&gt;, the MongoDB driver falls back to its standard defaults.&lt;/p&gt;
&lt;p&gt;This flexibility matters because different node roles have completely different workloads. A dedicated witness node usually wants a lean, conservative pool with minimal overhead. On the other hand, a public RPC node fielding dozens of queries alongside block processing can easily starve for database connections if it&apos;s stuck with default limits.&lt;/p&gt;
&lt;h2&gt;Knobs B: Cutting Out Pipeline Latency&lt;/h2&gt;
&lt;p&gt;Where Knobs A was about configuration, Knobs B tackled two internal bottlenecks in the block-processing path that were quietly wasting time.&lt;/p&gt;
&lt;h3&gt;Batching Transaction-Index Writes&lt;/h3&gt;
&lt;p&gt;Every time the node commits a sidechain block, it generates transaction-index records so historical lookups and explorer queries can find them later. Historically, the code iterated through the block and inserted these records one by one:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;insertOne()
insertOne()
insertOne()
...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Each insert meant another round-trip through the MongoDB driver. For blocks with lots of transactions, that back-and-forth adds noticeable latency.&lt;/p&gt;
&lt;p&gt;Now, the node collects all index records for the block and flushes them in a single &lt;code&gt;insertMany()&lt;/code&gt; call. I kept the insert explicitly ordered (&lt;code&gt;ordered: true&lt;/code&gt;) because transaction indexes encode positions within the block, and keeping that guarantee crystal clear in the code makes life much easier for reviewers. Also, if a block happens to have zero transactions, it skips the call entirely rather than firing off an empty array.&lt;/p&gt;
&lt;h3&gt;Pre-warming the VM Pool on First Execution&lt;/h3&gt;
&lt;p&gt;With &lt;code&gt;maxJSVMs&lt;/code&gt; now configurable, we also revisited how and when those VMs get initialized.&lt;/p&gt;
&lt;p&gt;Previously, isolates were created lazily one at a time as smart contracts trickled in. That meant early contract calls suffered allocation jitter while spinning up new VMs on demand.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://hive.blog/hive-186392/@thecrazygm/recap-of-the-useful-knobs-for-hive-engine-nodes&quot;&gt;Read the full post&lt;/a&gt;&lt;/p&gt;</content:encoded><dc:creator>thecrazygm</dc:creator><category>hive-186392</category></item><item><title>Private vs Public Repos - Learning about GitHub</title><link>https://hive.blog/hive-186392/@ecoinstant/private-vs-public-repos-learning-about-github</link><guid isPermaLink="true">https://hive.blog/hive-186392/@ecoinstant/private-vs-public-repos-learning-about-github</guid><description>Keep tabs with the earlier pieces in this series: How I use AI to build things on HIVE and I created an opinionated Price Feed Widget and Got Blocked by Google. If you have been following along, we have been reviewing exactly the &quot;how&quot; - including tips, tricks and detours - of working with &quot;AI&quot; to…</description><pubDate>Thu, 24 Sep 2026 12:54:54 GMT</pubDate><content:encoded>&lt;p&gt;Keep tabs with the earlier pieces in this series: &lt;a href=&quot;https://peakd.com/hive-186392/@ecoinstant/how-i-use-ai-to-build-things-on-hive&quot;&gt;How I use AI to build things on HIVE&lt;/a&gt; and &lt;a href=&quot;https://peakd.com/hive-186392/@ecoinstant/i-created-an-opinionated-price-feed-widget-and-got-blocked-by-google&quot;&gt;I created an opinionated Price Feed Widget and Got Blocked by Google&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you have been following along, we have been reviewing exactly the &quot;how&quot; - including tips, tricks and detours - of working with &quot;AI&quot; to build things.  Its a non-linear path, but we do have the tools, and its not usually all that hard (although it might be outside our comfort zone).&lt;/p&gt;
&lt;p&gt;A nice update first - our work from the last post &lt;em&gt;worked&lt;/em&gt;!  The site is not marked as dangerous social engineering anymore :)&lt;/p&gt;
&lt;center&gt;
![image.png](https://files.peakd.com/file/peakd-hive/ecoinstant/23u5Zbp6sYTUUHCGpKoBXpm3orJz9W1WujvLxFjD78rQVc5ESnhjLHJepij4MjyeXqSKY.png)
&lt;/center&gt;&lt;p&gt;So let&apos;s get back to our series - while writing this I stumbled upon a &lt;a href=&quot;https://peakd.com/dhf/@dungeon.cities/dungeon-cities--claude-subscription-from-dhf&quot;&gt;new proposal&lt;/a&gt; with an &lt;a href=&quot;https://peakd.com/dhf/@dungeon.cities/re-ecoinstant-tld6oo&quot;&gt;old conversation&lt;/a&gt; about open source, sharing code and &quot;where does the value live?&quot;.&lt;/p&gt;
&lt;p&gt;Topical - because today we are going to talk about Public and Private repos!  And make sure to keep an eye on the &lt;a href=&quot;https://www.youtube.com/playlist?list=PL3et84ivMbf3g26u7DF4VbT_pco2iF_lf&quot;&gt;HIVE Thrive Playlist&lt;/a&gt; because @meno, @buttcoins and I recently had a great show talking about this topic, and it&apos;s next on my upload list - and it even had @acidyo popping on to chat with us as well and discuss his efforts and intentions around the AI sponsorships.&lt;/p&gt;
&lt;p&gt;But let&apos;s get down to our lesson today:&lt;/p&gt;
&lt;h2&gt;Why almost anything starts private&lt;/h2&gt;
&lt;p&gt;The honest case for a private repo: unfinished opinions, business logic, embarrassing commit history, not wanting to defend half-baked decisions in public &quot;yet&quot; - these are real decisions that have big consequences especially depending on the project.&lt;/p&gt;
&lt;p&gt;Let&apos;s tie this back directly to the &quot;opinionated&quot; price feed widget from the &lt;a href=&quot;https://peakd.com/hive-186392/@ecoinstant/i-created-an-opinionated-price-feed-widget-and-got-blocked-by-google&quot;&gt;previous post&lt;/a&gt; — privacy as the space where an opinion gets to be wrong before it&apos;s public.  &lt;/p&gt;
&lt;p&gt;My goal in making the widget in the first place was &quot;two-fold&quot; - which in open source just means: I want it to serve my need FIRST - and if it serves anyone else&apos;s needs then that is even better.  Now that its serving my needs just fine - we can double back and ask Claude about the steps of making such a private repo public - and the first step is to &quot;check&quot;.&lt;/p&gt;
&lt;center&gt;
![image.png](https://files.peakd.com/file/peakd-hive/ecoinstant/23tGVQuTM1uP9Qa91STDddpwNKmuHKXWxiMH39dPp1RyGuoAahLLGdCzofb1eufULp91n.png)
&lt;/center&gt;&lt;h2&gt;Always Check First - Public is PUBLIC&lt;/h2&gt;
&lt;p&gt;You agent knows (more or less) what to check - and I was able to follow along.  But just out of curiousity, after we were done, I asked - &quot;Hey, what are the steps to ensure that this repository is actually ready to be public?&quot;&lt;/p&gt;
&lt;p&gt;And you know what Claude said?  &quot;Great question Eco.&quot;&lt;/p&gt;
&lt;center&gt;
![image.png](https://files.peakd.com/file/peakd-hive/ecoinstant/23tkfTp7hN5sTadHxJpTjhDznyPvBGo3awrCdzujm4rpHXNBjmCdEUZLvQQT4p1rJVuC8.png)&lt;/center&gt;&lt;p&gt;Let&apos;s check back with Claude and ask - What did we just do and why?&lt;/p&gt;
&lt;h2&gt;What we checked, and why - by Claude&lt;/h2&gt;
&lt;blockquote&gt;
&lt;h4&gt;1. Git history for secrets&lt;/h4&gt;
&lt;p&gt;  We ran &lt;code&gt;git log --all -p | grep -iE &quot;api[_-]?key|secret|password|...&quot;&lt;/code&gt; across every commit, not just the current files. This matters because a public GitHub repo exposes its entire history, forever — if a credential was ever committed and later deleted, it&apos;s still sitting in an old commit anyone can git log into. We found nothing, and the repo only had one commit to begin with, which made this an easy pass.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;h4&gt;2. .gitignore coverage&lt;/h4&gt;
&lt;p&gt;  We confirmed &lt;code&gt;config.yaml&lt;/code&gt;, &lt;code&gt;.env&lt;/code&gt;, and &lt;code&gt;*.db&lt;/code&gt; were already excluded. The distinction: config.example.yaml (committed, generic, safe) vs. config.yaml (your real node URLs, real tokens, never committed). This is the difference between a template and your actual deployment.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;h4&gt;3. Does the code do what the docs claim?&lt;/h4&gt;
&lt;p&gt;  This was the biggest finding — the README and pyproject.toml advertised PostgreSQL and MongoDB storage backends that were never actually written. Anyone who tried database_url: &quot;postgresql://...&quot; would&apos;ve hit a crash, not the graceful error the code implied. For a private repo only you use, that&apos;s a TODO. For a public repo, that&apos;s a trust problem on day one — especially awkward for a project whose whole pitch (the &quot;opinionated&quot; section) is &quot;we tell you exactly what we&apos;re doing.&quot; We removed the false claims rather than rush the implementations.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://hive.blog/hive-186392/@ecoinstant/private-vs-public-repos-learning-about-github&quot;&gt;Read the full post&lt;/a&gt;&lt;/p&gt;</content:encoded><dc:creator>ecoinstant</dc:creator><category>hive-186392</category></item><item><title>Helping Hive Engine Nodes Catch Up Without Getting Too Clever</title><link>https://hive.blog/hive-186392/@thecrazygm/helping-hive-engine-nodes-catch-up-without-getting-too-clever</link><guid isPermaLink="true">https://hive.blog/hive-186392/@thecrazygm/helping-hive-engine-nodes-catch-up-without-getting-too-clever</guid><description>Hey everyone, I have been working through the next small performance bundle for the Hive-Engine node, and this one is about the part of the node that fetches Hive blocks. The short version is: I added opt-in adaptive fetch concurrency and dynamic lookahead buffering, tested it on my custom witness…</description><pubDate>Thu, 17 Sep 2026 15:11:09 GMT</pubDate><content:encoded>&lt;p&gt;Hey everyone,&lt;/p&gt;
&lt;p&gt;I have been working through the next small performance bundle for the Hive-Engine node, and this one is about the part of the node that fetches Hive blocks.&lt;/p&gt;
&lt;p&gt;The short version is:&lt;/p&gt;
&lt;p&gt;I added opt-in adaptive fetch concurrency and dynamic lookahead buffering, tested it on my custom witness setup, and opened the changes toward the QA branch.&lt;/p&gt;
&lt;p&gt;Making the node a little less stubborn when it has some catching up to do.&lt;/p&gt;
&lt;h2&gt;The Problem&lt;/h2&gt;
&lt;p&gt;The streamer had two fixed values controlling how aggressively it fetched blocks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;how many block requests it could have in flight per RPC node&lt;/li&gt;
&lt;li&gt;how many blocks it prefetched ahead of the current block&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those defaults are reasonable for a node sitting near the chain head. They are not necessarily the best settings for a node that is hundreds or thousands of blocks behind after maintenance, downtime, or a restart.&lt;/p&gt;
&lt;p&gt;A catching-up node should be able to make progress without changing how blocks are processed.&lt;/p&gt;
&lt;h2&gt;What Changed&lt;/h2&gt;
&lt;p&gt;The new behavior is opt-in.&lt;/p&gt;
&lt;p&gt;When adaptive QPS is enabled, the streamer watches the existing per-node failure and cooldown information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;healthy RPC nodes can use more fetch concurrency&lt;/li&gt;
&lt;li&gt;one struggling node brings the setting back to the configured baseline&lt;/li&gt;
&lt;li&gt;multiple struggling nodes cause a more conservative reduction&lt;/li&gt;
&lt;li&gt;the healthy-node ceiling is explicitly capped in configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I am calling this QPS because that is the existing configuration name, but technically this is a per-node in-flight request limit rather than a precise requests-per-second meter.&lt;/p&gt;
&lt;p&gt;The lookahead buffer now adapts to sync lag as well:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;5 blocks when the node is close to the head&lt;/li&gt;
&lt;li&gt;20 blocks while catching up&lt;/li&gt;
&lt;li&gt;up to a configured maximum when it is far behind&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The defaults remain unchanged unless an operator enables the new settings.&lt;/p&gt;
&lt;p&gt;This is important because existing nodes should not suddenly decide to behave differently just because the code was updated.&lt;/p&gt;
&lt;h2&gt;The Config I Tested&lt;/h2&gt;
&lt;p&gt;For the live test, I used settings shaped like this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &quot;maxQps&quot;: 2,
  &quot;adaptiveQps&quot;: true,
  &quot;adaptiveQpsMax&quot;: 4,
  &quot;lookaheadBufferSize&quot;: 15,
  &quot;dynamicLookaheadBuffer&quot;: true,
  &quot;dynamicLookaheadBufferMaxSize&quot;: 50
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The ceiling is there on purpose. Healthy RPC nodes are not an invitation to send an unlimited amount of traffic at public endpoints.&lt;/p&gt;
&lt;h2&gt;The Test&lt;/h2&gt;
&lt;p&gt;I let my node fall roughly 300 Hive blocks behind and watched it catch up.&lt;/p&gt;
&lt;p&gt;Once the transition logging was made visible, the journal showed:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Streamer QPS changed to 4
Streamer lookahead buffer changed to 20
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The node then worked its way back toward the Hive head. Sidechain blocks continued to advance, and the database and block hashes matched between the main reference values and the locally produced values.&lt;/p&gt;
&lt;p&gt;Eventually the lag returned to zero.&lt;/p&gt;
&lt;h2&gt;One Honest Caveat&lt;/h2&gt;
&lt;p&gt;There was a transient MongoDB &lt;code&gt;NoSuchTransaction&lt;/code&gt; error during one of the restarts. The service remained technically active, but block processing stalled until a second restart recovered it.&lt;/p&gt;
&lt;p&gt;I am not treating that as proof that the adaptive fetch code caused it. I have seen this same kind of restart/session behavior before this bundle. Still, it is worth mentioning because production testing should include the ugly bits, not just the clean screenshots.&lt;/p&gt;
&lt;h2&gt;What This Does Not Change&lt;/h2&gt;
&lt;p&gt;This bundle changes fetch scheduling, not state transition logic.&lt;/p&gt;
&lt;p&gt;It does not change:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;smart contract execution&lt;/li&gt;
&lt;li&gt;transaction ordering&lt;/li&gt;
&lt;li&gt;block hashing&lt;/li&gt;
&lt;li&gt;database state rules&lt;/li&gt;
&lt;li&gt;witness consensus behavior&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The goal is simply to get the right blocks into the existing processing pipeline more efficiently while backing off when the RPC environment looks unhealthy.&lt;/p&gt;
&lt;h2&gt;The Outcome&lt;/h2&gt;
&lt;p&gt;The code is now in a &lt;a href=&quot;https://github.com/hive-engine/hivesmartcontracts/pull/140&quot;&gt;PR prepared for QA branch&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://files.peakd.com/file/peakd-hive/thecrazygm/23t732VRgXL6Sa8USA1TFwAZca91F2dg8WMRp4HUzUPR85q1VZkXTo9r6x1Bwmygrbf2H.png&quot; alt=&quot;image.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The live test node caught up from roughly 300 blocks behind, reported the expected adaptive settings, and returned to the chain head without hash divergence in the sampled blocks.&lt;/p&gt;
&lt;p&gt;As always,&lt;br /&gt;&lt;strong&gt;Michael Garcia a.k.a. TheCrazyGM&lt;/strong&gt;&lt;/p&gt;
</content:encoded><dc:creator>thecrazygm</dc:creator><category>hive-186392</category></item><item><title>Keeping Pascal Alive: Patching NVIDIA 580 DKMS for Linux Kernel 7.2+</title><link>https://hive.blog/hive-186392/@thecrazygm/keeping-pascal-alive-patching-nvidia-580-dkms-for-linux-kernel-72</link><guid isPermaLink="true">https://hive.blog/hive-186392/@thecrazygm/keeping-pascal-alive-patching-nvidia-580-dkms-for-linux-kernel-72</guid><description>Hey everyone, If you are running a Linux workstation or server with a Pascal-generation GPU (like a GTX 1060, 1070, 1080, or 1080 Ti) alongside bleeding-edge kernels, you might have hit a brick wall recently. A few days ago, XanMod pushed out Linux kernel 7.2.4. As usual, apt upgrade grabbed the new…</description><pubDate>Fri, 11 Sep 2026 13:02:00 GMT</pubDate><content:encoded>&lt;p&gt;Hey everyone,&lt;/p&gt;
&lt;p&gt;If you are running a Linux workstation or server with a Pascal-generation GPU (like a GTX 1060, 1070, 1080, or 1080 Ti) alongside bleeding-edge kernels, you might have hit a brick wall recently.&lt;/p&gt;
&lt;p&gt;A few days ago, XanMod pushed out Linux kernel &lt;code&gt;7.2.4&lt;/code&gt;. As usual, &lt;code&gt;apt upgrade&lt;/code&gt; grabbed the new kernel and headers, triggered DKMS, and immediately blew up with:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Error! Bad return status for module build on kernel: 7.2.4-x64v3-xanmod1 (x86_64)
Consult /var/lib/dkms/nvidia/580.142/build/make.log for more information.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;No module built, no driver signed, and an unbootable graphical session waiting on the other side of a reboot.&lt;/p&gt;
&lt;p&gt;If you are running modern cards (RTX 20-series and newer), the standard advice is simple: just bump to the latest driver branch. But if you are holding onto Pascal silicon, that option does not exist.&lt;/p&gt;
&lt;p&gt;Here is what broke in kernel 7.2, why legacy drivers are caught in the crossfire, and how to patch the &lt;code&gt;nvidia-580&lt;/code&gt; source to get your modules compiling and running cleanly.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;The Hardware Dilemma: The Pascal Trap&lt;/h2&gt;
&lt;p&gt;First, some context on why this is even a problem.&lt;/p&gt;
&lt;p&gt;NVIDIA officially dropped support for Pascal GPUs starting in the &lt;code&gt;595&lt;/code&gt; driver branch. If you install &lt;code&gt;595&lt;/code&gt; with a GTX 1080, the driver loads, acknowledges the card&apos;s existence, and explicitly refuses to initialize it.&lt;/p&gt;
&lt;p&gt;That means anyone on Pascal is effectively pinned to the legacy &lt;code&gt;580.xx&lt;/code&gt; branch.&lt;/p&gt;
&lt;p&gt;In an ideal world, when a new major kernel drops, NVIDIA backports compatibility patches to all active legacy branches, distro maintainers package them up, and everything &quot;just works.&quot;&lt;/p&gt;
&lt;p&gt;In the real world, upstream Linux kernel refactoring moves fast, XanMod and Arch track mainline closely, and legacy proprietary driver packages lag behind. If you want to run the newest kernel right now, you have to patch the driver source yourself.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;What Broke in Linux 7.2&lt;/h2&gt;
&lt;p&gt;Digging through &lt;code&gt;/var/lib/dkms/nvidia/580.142/build/make.log&lt;/code&gt; revealed two distinct breaking changes introduced in Linux 7.2:&lt;/p&gt;
&lt;h3&gt;1. &lt;code&gt;strncpy&lt;/code&gt; Was Completely Removed&lt;/h3&gt;
&lt;p&gt;The Linux kernel has been slowly deprecating unsafe string functions for years in favor of &lt;code&gt;strscpy&lt;/code&gt;. In Linux 7.2, kernel developers finally pulled the trigger: &lt;code&gt;strncpy&lt;/code&gt; was purged entirely from &lt;code&gt;include/linux/string.h&lt;/code&gt; and the kernel&apos;s exported symbols.&lt;/p&gt;
&lt;p&gt;Unfortunately, &lt;code&gt;nvidia-580.142&lt;/code&gt; still has calls to &lt;code&gt;strncpy&lt;/code&gt; scattered across multiple components: core driver code, display modesetting, and the Unified Virtual Memory (&lt;code&gt;nvidia-uvm&lt;/code&gt;) module. With the kernel header no longer declaring the prototype, the compiler treats it as an error or fails at link time.&lt;/p&gt;
&lt;h3&gt;2. DRM Atomic State Was Renamed to Atomic Commit&lt;/h3&gt;
&lt;p&gt;The Direct Rendering Manager (DRM) subsystem in Linux 7.2 underwent a refactor around atomic modesetting. Specifically:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;struct drm_atomic_state&lt;/code&gt; was renamed to &lt;code&gt;struct drm_atomic_commit&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The corresponding state management functions (&lt;code&gt;drm_atomic_state_alloc&lt;/code&gt;, &lt;code&gt;drm_atomic_state_clear&lt;/code&gt;, &lt;code&gt;drm_atomic_state_put&lt;/code&gt;, etc.) were renamed to match.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The NVIDIA driver uses a script called &lt;code&gt;conftest.sh&lt;/code&gt; to probe the kernel headers at build time and determine which function signatures and structures are supported. The probe checks whether &lt;code&gt;drm_plane_helper_funcs.atomic_check&lt;/code&gt; and &lt;code&gt;drm_crtc_helper_funcs.atomic_check&lt;/code&gt; accept a &lt;code&gt;struct drm_atomic_state *&lt;/code&gt; argument.&lt;/p&gt;
&lt;p&gt;Because kernel 7.2 changed the argument type to &lt;code&gt;struct drm_atomic_commit *&lt;/code&gt;, the conftest check failed. DKMS decided those arguments were missing entirely, leaving &lt;code&gt;#undef NV_DRM_PLANE_ATOMIC_CHECK_HAS_ATOMIC_STATE_ARG&lt;/code&gt; and &lt;code&gt;#undef NV_DRM_CRTC_ATOMIC_CHECK_HAS_ATOMIC_STATE_ARG&lt;/code&gt;. When the driver attempted to compile &lt;code&gt;nvidia-drm&lt;/code&gt;, the function prototypes mismatched and compilation halted.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(Note: If you are upgrading across multiple kernel milestones, Linux 7.0 and 7.1 also dropped the legacy Device Tree header &lt;code&gt;&amp;lt;linux/of_gpio.h&amp;gt;&lt;/code&gt;, which requires its own small stub. I will include that below for completeness).&lt;/em&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;The Fixes&lt;/h2&gt;
&lt;p&gt;To fix this, we need to apply two targeted patches directly to the source directory in &lt;code&gt;/usr/src/nvidia-580.142/&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Patch 1: Providing an Inline &lt;code&gt;strncpy&lt;/code&gt; Fallback&lt;/h3&gt;
&lt;p&gt;Instead of patching dozens of individual C files across the driver, the cleanest solution is to inject an inline implementation into a header included by every sub-module.&lt;/p&gt;
&lt;p&gt;The compatibility header &lt;code&gt;common/inc/nv-time.h&lt;/code&gt; is unconditionally included by the core driver, modeset, DRM, and UVM.&lt;/p&gt;
&lt;p&gt;Open the file:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo nvim /usr/src/nvidia-580.142/common/inc/nv-time.h
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Jump to the bottom of the file. Directly before the final &lt;code&gt;#endif // __NV_TIME_H__&lt;/code&gt;, add:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#include &amp;lt;linux/version.h&amp;gt;
#if (LINUX_VERSION_CODE &amp;gt;= KERNEL_VERSION(7, 2, 0))
static inline char *strncpy(char *dest, const char *src, size_t count)
{
    char *tmp = dest;
    while (count) {
        if ((*tmp = *src) != 0)
            src++;
        tmp++;
        count--;
    }
    return dest;
}
#endif
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://hive.blog/hive-186392/@thecrazygm/keeping-pascal-alive-patching-nvidia-580-dkms-for-linux-kernel-72&quot;&gt;Read the full post&lt;/a&gt;&lt;/p&gt;</content:encoded><dc:creator>thecrazygm</dc:creator><category>hive-186392</category></item><item><title>I created an opinionated price feed widget - and got blocked by Google</title><link>https://hive.blog/hive-186392/@ecoinstant/i-created-an-opinionated-price-feed-widget-and-got-blocked-by-google</link><guid isPermaLink="true">https://hive.blog/hive-186392/@ecoinstant/i-created-an-opinionated-price-feed-widget-and-got-blocked-by-google</guid><description>Please see my previous &quot;building on HIVE&quot; post How I use AI to &quot;Build Things on HIVE&quot; to get caught up to date. While working on this story, I stumbled through all sorts of exemplary complications that one faces when &quot;building on HIVE&quot; - so today we get a grab bag of lessons learned and being…</description><pubDate>Thu, 03 Sep 2026 18:30:39 GMT</pubDate><content:encoded>&lt;p&gt;Please see my previous &quot;building on HIVE&quot; post &lt;a href=&quot;https://peakd.com/hive-186392/@ecoinstant/how-i-use-ai-to-build-things-on-hive&quot;&gt;How I use AI to &quot;Build Things on HIVE&quot;&lt;/a&gt; to get caught up to date.&lt;/p&gt;
&lt;p&gt;While working on this story, I stumbled through all sorts of exemplary complications that one faces when &quot;building on HIVE&quot; - so today we get a grab bag of lessons learned and being learned.&lt;/p&gt;
&lt;h2&gt;&quot;It all fits together&quot; (in your head)&lt;/h2&gt;
&lt;p&gt;So our site today happens to be a grab-bag of experimental ideas all its own - at once a Colombian operating entity (S.A.S.), a hive-engine token, an experimental &quot;front-end and onboarding platform&quot;, and loosely linked to other experimental work with standalone tools (&lt;a href=&quot;https://tools.crypto-dreamr.com&quot;&gt;https://tools.crypto-dreamr.com&lt;/a&gt;) and TTRPG gaming (&lt;a href=&quot;https://thecrazygm.com&quot;&gt;https://thecrazygm.com&lt;/a&gt;), which I am sure will feature more as this series goes on.   &lt;/p&gt;
&lt;center&gt;
![image.png](https://files.peakd.com/file/peakd-hive/ecoinstant/23uRLBGvnHH6bowioBNbXpuXdY1SrAm16NU5BcCLrpzT5pc3de3sJoQnNpsy5YjGgXEpx.png)
&lt;/center&gt;&lt;p&gt;It turns out our &lt;a href=&quot;https://ecobankdevelopment.com&quot;&gt;https://ecobankdevelopment.com&lt;/a&gt; site is already public, I guess I didn&apos;t know this - but probably after our experimental attempt with DHF funding on a platform of &quot;yourFrontend / yourBackend&quot; - and a few years of actually being &quot;HIVE travelling &lt;del&gt;salesman&lt;/del&gt;onboarders&quot; - we began exploring deeper and more sophisticated onboarding &quot;optional solutions&quot; directly inside our work with Ecological Restoration.&lt;/p&gt;
&lt;center&gt;![image.png](https://files.peakd.com/file/peakd-hive/ecoinstant/23wMS5MAsHe7F6jnoqtuE6TYPQ2qRNuZt9hP2iVY7cjAkNxB263uufk6LKgn3NDHKHa8C.png)&lt;/center&gt;
&lt;center&gt;Easily found with [TAO image search tool](https://tools.crypto-dreamr.com/tao?username=ecoinstant&amp;amp;tag_filter=&amp;amp;community_filter=&amp;amp;title_filter=yourBackend&amp;amp;language=&amp;amp;sort_order=desc&amp;amp;start_date=2024-01-20&amp;amp;end_date=2026-09-03)&lt;/center&gt;&lt;h2&gt;This Repository is Public&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/TheCrazyGM/ecobank&quot;&gt;https://github.com/TheCrazyGM/ecobank&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I insist this post started by talking about an opinionated price feed widget!  It turns out that the original widget mock-up isn&apos;t even public repository (but that&apos;s the subject of the next post now... such is life), but our fascinating rabbit hole here will only let us stop to contemplate the &quot;opinionated&quot; decision-making framework - in a world of &quot;open data&quot; - opinions are valuable!&lt;/p&gt;
&lt;center&gt;![image.png](https://files.peakd.com/file/peakd-hive/ecoinstant/48GCWs4r4jqKehaPN5o5Di3c92so7RRGGJQe2Vb5whYho2BKJq2vufoFMBgaMgJuxU.png)&lt;/center&gt;&lt;h2&gt;I have an opinion&lt;/h2&gt;
&lt;p&gt;If I learned anything from our experimental DHF shenanigans, its that everyone has an opinion.  You don&apos;t have to like it, you might not agree with it, you probably don&apos;t have time to rebutt &quot;all of it&quot; (pick your battles), but now I&apos;m on that DHF drip with @acidyo and I am set out to prove one of my opinions - &quot;making posts about what you (we) do is important, especially in &quot;development&quot;, and not doing so - considering HIVE&apos;s nature - is a sociological crime&quot;.&lt;/p&gt;
&lt;p&gt;Yes posting is hard - and its a separate skill set you might say than &quot;development&quot;.  &lt;/p&gt;
&lt;p&gt;And beyond that - development is non-linear.  It turns out - Google has an opinion too!&lt;/p&gt;
&lt;center&gt;
![image.png](https://files.peakd.com/file/peakd-hive/ecoinstant/23tRvDeMYDNt4KRf1m5BeYYmxQTziry4duvg5PXK4SM1UNpwPKSuUZpTTWdq5P4RQrQwL.png)&lt;/center&gt;&lt;h2&gt;Claude, I have a problem - and I need your help&lt;/h2&gt;
&lt;p&gt;So the first thing you can do when &quot;things happen&quot; is talk to your agent.  Talk to your agent and make a plan - this is the way.  The modern way:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Please explain this, what is the scope?&lt;/li&gt;
&lt;li&gt;Let&apos;s make a plan to address this - what are the options?&lt;/li&gt;
&lt;li&gt;What are the tradeoffs - pros and cons?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;And soon enough you will be &quot;proceeding step by step&quot;:&lt;/p&gt;
&lt;center&gt;
![image.png](https://files.peakd.com/file/peakd-hive/ecoinstant/23swigmzpSYsDj6PG9Z2hb1xUgmSAU2hwbW9oaX3Usu4woyR48UV7ze1Lox2xjQ2CzggT.png)&lt;/center&gt;&lt;h2&gt;&lt;a href=&quot;https://github.com/TheCrazyGM/ecobank/pull/18&quot;&gt;https://github.com/TheCrazyGM/ecobank/pull/18&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You can review the Pull Request yourself - check the commit lists - read the comments.  Github isn&apos;t an alien planet - but it can feel that way at first.  &lt;/p&gt;
&lt;center&gt;
![image.png](https://files.peakd.com/file/peakd-hive/ecoinstant/23t76buN7RTPfDpacbpZ7thnoex79KWswMXjNTgoYLjYLz6FxMfZHHcyLjtApnUmFUiGs.png)
&lt;/center&gt;&lt;h2&gt;Group onboarding&lt;/h2&gt;
&lt;p&gt;While I have explained &lt;a href=&quot;https://peakd.com/hive-139531/@ecoinstant/why-we-built-ecobankdevelopmentcom-and-who-it-is-actually-for&quot;&gt;Who is this for?&lt;/a&gt; and tried to break down the &lt;a href=&quot;https://peakd.com/hive-186392/@ecoinstant/group-onboarding-strategy-ecobankdevelopmentcom&quot;&gt;Group Onboarding Strategy&lt;/a&gt; in the past - I&apos;m not convinced anyone actually noticed.  But now that I&apos;m getting the DHF bucks, prepare for more explanations and efforts to break down this strategy and techniques more fully.  &lt;/p&gt;
&lt;p&gt;&quot;We need these things for our business&quot;, maybe others will too.  And we are happy to help - including recieving feedback, issues and PRs.  The last grab-bag item today is about &quot;collaborators&quot; - this is Open Source after all!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://hive.blog/hive-186392/@ecoinstant/i-created-an-opinionated-price-feed-widget-and-got-blocked-by-google&quot;&gt;Read the full post&lt;/a&gt;&lt;/p&gt;</content:encoded><dc:creator>ecoinstant</dc:creator><category>hive-186392</category></item><item><title>Making Hive-Engine Nodes Do Less Waiting</title><link>https://hive.blog/hive-186392/@thecrazygm/making-hive-engine-nodes-do-less-waiting</link><guid isPermaLink="true">https://hive.blog/hive-186392/@thecrazygm/making-hive-engine-nodes-do-less-waiting</guid><description>I have been continuing the small, careful performance work on the Hive-Engine node. This time the change is less about adding a new operator setting and more about removing two bits of avoidable waiting from the normal path. The short version is: Transaction index writes are now batched, and the…</description><pubDate>Tue, 25 Aug 2026 10:35:06 GMT</pubDate><content:encoded>&lt;p&gt;I have been continuing the small, careful performance work on the Hive-Engine node.&lt;/p&gt;
&lt;p&gt;This time the change is less about adding a new operator setting and more about removing two bits of avoidable waiting from the normal path.&lt;/p&gt;
&lt;p&gt;The short version is:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Transaction index writes are now batched, and the JavaScript VM pool is warmed up once on first use.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;But the node has now been running this branch on a live witness for more than 72 hours, and it has been doing very well.&lt;/p&gt;
&lt;h2&gt;The First Part: Fewer MongoDB Writes&lt;/h2&gt;
&lt;p&gt;When a sidechain block is saved, the node also creates small transaction-index documents so it can find transaction information later.&lt;/p&gt;
&lt;p&gt;Previously, it wrote those documents one at a time:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;insertOne()
insertOne()
insertOne()
...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That works, but every individual insert is another trip through the MongoDB driver.&lt;/p&gt;
&lt;p&gt;The change builds the complete set of transaction-index documents for the block and sends them with one &lt;code&gt;insertMany()&lt;/code&gt; call instead.&lt;/p&gt;
&lt;p&gt;The insert is explicitly ordered.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://files.peakd.com/file/peakd-hive/thecrazygm/23vhMQK9Gxj8zun7RxxhoySKXSt1JDcyhB5QRpo3rBbZMTG1XNPsYDvzaouQTSxBpANiW.png&quot; alt=&quot;screenshot-20260825-063402.png&quot; /&gt;&lt;/p&gt;
&lt;p&gt;That matters because this is a consensus-adjacent codebase, and the transaction indexes contain the transaction positions within the block. I did not want to make a reviewer infer that ordering was still intentional, so the code says &lt;code&gt;ordered: true&lt;/code&gt; directly.&lt;/p&gt;
&lt;p&gt;Empty blocks are handled separately too. The node does not call &lt;code&gt;insertMany([])&lt;/code&gt; for a block with no transactions.&lt;/p&gt;
&lt;h2&gt;The Second Part: Warming the VM Pool&lt;/h2&gt;
&lt;p&gt;Hive-Engine runs smart contract code inside isolated JavaScript virtual machines.&lt;/p&gt;
&lt;p&gt;The node already had a configurable &lt;code&gt;maxJSVMs&lt;/code&gt; setting from the previous work. Before this change, those isolates were created one at a time as contract execution needed them.&lt;/p&gt;
&lt;p&gt;That meant the first contract execution after startup paid the allocation cost.&lt;/p&gt;
&lt;p&gt;When the first contract needs to run, the node allocates the configured VM pool in one eager-once warmup. The first contract still runs normally, and later executions can reuse the already-created pool.&lt;/p&gt;
&lt;p&gt;So the behavior is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;no VM allocation for a node that never executes contracts&lt;/li&gt;
&lt;li&gt;one pool warmup on the first contract execution&lt;/li&gt;
&lt;li&gt;reuse afterward&lt;/li&gt;
&lt;li&gt;the existing &lt;code&gt;maxJSVMs&lt;/code&gt; value remains the limit&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Why These Two Changes Together?&lt;/h2&gt;
&lt;p&gt;The original proposal contains much bigger ideas: caching, faster sync, snapshots, lite-node improvements, RPC changes, and dependency upgrades.&lt;/p&gt;
&lt;p&gt;Those are still interesting, but the first goal was to build a contribution that is easy to explain and easy to review.&lt;/p&gt;
&lt;p&gt;The safety claim for this bundle is simple:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The node processes the same transactions in the same order. It just batches one database write pattern and moves VM allocation to a predictable one-time warmup.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Testing It&lt;/h2&gt;
&lt;p&gt;I added focused tests for the transaction batching behavior:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the generated documents preserve block order&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ordered: true&lt;/code&gt; is passed&lt;/li&gt;
&lt;li&gt;the active MongoDB session is preserved&lt;/li&gt;
&lt;li&gt;empty batches do not issue an insert&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The focused database tests passed, and the Smart Contracts suite passed all 25 tests under Node 22.&lt;/p&gt;
&lt;h2&gt;The Live Test&lt;/h2&gt;
&lt;p&gt;After merging the branch into my custom Hive-Engine node setup, I put it on a live witness node.&lt;/p&gt;
&lt;p&gt;It has now been running for more than 72 hours without a recurring issue.&lt;/p&gt;
&lt;h2&gt;Where It Is&lt;/h2&gt;
&lt;p&gt;The branch is here:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/TheCrazyGM/hivesmartcontracts/tree/feature/knobs-b-batching-vm-prewarm&quot;&gt;feature/knobs-b-batching-vm-prewarm&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The commit is &lt;strong&gt;&lt;a href=&quot;https://github.com/TheCrazyGM/hivesmartcontracts/commit/6e0c24d6d1abcb57e55f1c9f3424debec38f4de&quot;&gt;6e0c24d&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The next step is &lt;a href=&quot;https://github.com/hive-engine/hivesmartcontracts/pull/139&quot;&gt;upstream review&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I am especially interested in feedback on the VM memory tradeoff. Prewarming the configured pool makes first-use timing more predictable, but a larger pool also means more memory is committed sooner once contracts begin executing.&lt;/p&gt;
&lt;p&gt;That is the sort of tradeoff that should be visible to operators, not hidden behind a vague performance claim.&lt;/p&gt;
&lt;p&gt;For now, though, the live result is good.&lt;/p&gt;
&lt;p&gt;A little less database chatter. A predictable VM warmup. The same processing order.&lt;/p&gt;
&lt;p&gt;Nothing fancy.&lt;/p&gt;
&lt;p&gt;As always,&lt;br /&gt;&lt;strong&gt;Michael Garcia&lt;/strong&gt; a.k.a. &lt;strong&gt;TheCrazyGM&lt;/strong&gt;&lt;/p&gt;
</content:encoded><dc:creator>thecrazygm</dc:creator><category>hive-186392</category></item><item><title>How I use &quot;ai&quot; to build things (on HIVE)</title><link>https://hive.blog/hive-186392/@ecoinstant/how-i-use-ai-to-build-things-on-hive</link><guid isPermaLink="true">https://hive.blog/hive-186392/@ecoinstant/how-i-use-ai-to-build-things-on-hive</guid><description>Warm greetings to all readers! I recently applied to get some money from @acidyo&apos;s Hive development fund - and the money came through! Suddenly - I am under pressure to perform on behalf of HIVE!…</description><pubDate>Mon, 24 Aug 2026 11:53:57 GMT</pubDate><content:encoded>&lt;p&gt;Warm greetings to all readers!  I recently &lt;a href=&quot;https://peakd.com/hive-186392/@ecoinstant/application-srbde-for-the-ai-coding-proposal&quot;&gt;applied to get some money&lt;/a&gt; from @acidyo&apos;s Hive development fund - and the money came through!  Suddenly - I am under pressure to perform on behalf of HIVE!&lt;/p&gt;
&lt;center&gt;
![image.png](https://files.peakd.com/file/peakd-hive/ecoinstant/23tkfzn6nTPSbAUpxgkgZDmpN62cfPpb1i3BpcRiGXrSTEgx5HDPZrtAr6RhXpQHRQ8h1.png)&lt;/center&gt;&lt;p&gt;Luckily - myself and my team and many of the people I surround myself with - we have been &quot;building on HIVE&quot; for a long time - most of our ideas are tied into HIVE in one way or another.  I just need to figure out how to &quot;show it&quot;. &lt;/p&gt;
&lt;h2&gt;Show your work&lt;/h2&gt;
&lt;p&gt;This is actually the main reason I joined this quest - what pushed me over the line to apply - I was disappointed in the fact that a previous iteration ran by deathwing did not result in any (that I noticed) follow up posts.  As a sociologist myself, this is a grievous error on what could have been a great experiment (hopefully this doesn&apos;t turn into the new HIVE motto).&lt;/p&gt;
&lt;p&gt;So &quot;showing my work&quot; is the whole point, and now since somebody managed a DHF proposal and sent me a few of those forbidden HBDs - I am morally obligated to take a shot at it.  I have no one to blame or cheer but myself - so let&apos;s cheer me on as I get started.&lt;/p&gt;
&lt;h2&gt;Where to begin?&lt;/h2&gt;
&lt;p&gt;I have been contemplating my experience on such a social chain, I actually got my start making &quot;tutorial-style&quot; posts - about how to use markdown and other semi-technical features of a blockchain that was then known as &quot;steem&quot;.  Crypto framed my journey from lowly tech-writer to full blown product manager, and now AI is eating everyone&apos;s lunch and the PM&apos;s reign supreme.  Managing ai agents isn&apos;t actually &quot;easy&quot; - its just verbose, and still requires a lot of finessing to make useful - ironically similar skill sets to dealing with &quot;devs&quot; and &quot;clients&quot; aka &quot;people&quot;.&lt;/p&gt;
&lt;p&gt;So I thought it might be relevent, historically appropriate, and actually needed to start a tutorial about &quot;how&quot; to actually use these new generation of tools to &quot;build on HIVE&quot;, as is popular to shout about these days.&lt;/p&gt;
&lt;h2&gt;Step 1 - Get an Agent&lt;/h2&gt;
&lt;center&gt;
![image.png](https://files.peakd.com/file/peakd-hive/ecoinstant/23tkjzWUsvSjuJFkFuzngarspC29DfL9LvN1ysbKAyBsWaZd6rg1UWYcaPoyaKDneAcsZ.png)
&lt;/center&gt; &lt;p&gt;In this series we will be using &quot;Claude&quot; in its &quot;Claude Code&quot; version - but you can use any one of them.  It sounds funny - they are not people (they act like people) - but they all have different personalities, its true.  There are other &quot;non-Claude&quot; agents, many even - and you can use any of them. &lt;/p&gt;
&lt;p&gt;If you use google or chat-gpt - they have the exact same functionalities, just replace &quot;claude code setup&quot; with your version&apos;s set up.&lt;/p&gt;
&lt;h2&gt;Step 2 - Getting Setup&lt;/h2&gt;
&lt;center&gt;![image.png](https://files.peakd.com/file/peakd-hive/ecoinstant/23t74yRdK2Xyn4TL58gQxZa7puhEHRNwcC2hF9e2Y8Hd1xvLAj42X4G5D6d2xVHVK1usZ.png)&lt;/center&gt;&lt;p&gt;When I first tried out &quot;ai&quot;, I got about this far.  I can ask it anything here - and if I ask it to make me some code it would, and spit it out at me.  But this isn&apos;t &quot;building&quot;, and I didn&apos;t know how to get further.  You could ask about recipes, or write a book, or get a tutorial like explanation....&lt;/p&gt;
&lt;p&gt;Wait....&lt;/p&gt;
&lt;center&gt;
![image.png](https://files.peakd.com/file/peakd-hive/ecoinstant/23tGTdoY2cGsn1CF9aHwQRDFA3LfmkBGnfKREYUfBHbzMjJhCaAzXTTwhEcnPhLpQxNFT.png)
&lt;/center&gt;&lt;p&gt;It seems the world has changed since I last wrote tutorials.  Suffice it to say - you probably should be asking agents about &quot;how&quot; to do things.  The limit is knowing how to ask, or what to ask about - for example, knowing that for windows computers - you probably should be using VSC - is something you might not know.  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use VSC (download it) - its by microsoft so it works in windows&lt;/li&gt;
&lt;li&gt;Install your agents&apos; local piece&lt;/li&gt;
&lt;li&gt;Connect both through login&lt;/li&gt;
&lt;/ul&gt;
&lt;center&gt;
![image.png](https://files.peakd.com/file/peakd-hive/ecoinstant/23t7BQ3z9Q7My3E78z9UvsXFnuJHbV4QFexoTcaxtoSkEBEf313o3MzvsdCwgkRRqA6ME.png)
&lt;/center&gt;&lt;blockquote&gt;
&lt;p&gt;&quot;The payoff line: &quot;That&apos;s it. Both links are done. Everything from here is the same chat you already know — you&apos;re just having the conversation next to your actual files instead of in a browser tab.&quot;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Claude Sonnet, 2026&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Step 3: Models and Efforts&lt;/h2&gt;
&lt;p&gt;We have gone as far as we can without tackling the &quot;elephant in the room&quot; - These tools cost Money!  Like yes, dollars and cents they will charge you money and take it out of your bank account and then you cannot use it for anything else.  And that distinction starts with models and their efforts.&lt;/p&gt;
&lt;center&gt;
![image.png](https://files.peakd.com/file/peakd-hive/ecoinstant/23swib1P28zCPLv2R96FtLhFFoBZhxTuFgAWPD4CsZhrw7R8jc3o3h2M8vwY2THz9WSv6.png)
&lt;/center&gt;&lt;p&gt;So for Claude there are currently 3 model options, 3 &quot;personalities&quot; for you to chose from - from cheap to expensive - Sonnet, Opus and Fable.&lt;/p&gt;
&lt;h2&gt;Step 4 - Start with Sonnet&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://hive.blog/hive-186392/@ecoinstant/how-i-use-ai-to-build-things-on-hive&quot;&gt;Read the full post&lt;/a&gt;&lt;/p&gt;</content:encoded><dc:creator>ecoinstant</dc:creator><category>hive-186392</category></item><item><title>I am okay!  Reporting safe after heavy earthquake in Colombia</title><link>https://hive.blog/hive-186392/@ecoinstant/i-am-okay-reporting-safe-after-heavy-earthquake-in-colombia</link><guid isPermaLink="true">https://hive.blog/hive-186392/@ecoinstant/i-am-okay-reporting-safe-after-heavy-earthquake-in-colombia</guid><description>I am okay! We are okay, my television fell off the dresser, and many other things did fall on the floor - during an incredible earthquake that we definitely did feel. Here is a picture of my garage, I&apos;m not sure how much of the mess it to blame on the earthquake. I keep busy, working on a number of…</description><pubDate>Wed, 12 Aug 2026 02:08:12 GMT</pubDate><content:encoded>&lt;p&gt;I am okay!  We are okay, my television fell off the dresser, and many other things did fall on the floor - during an incredible earthquake that we definitely did feel.&lt;/p&gt;
&lt;p&gt;Here is a picture of my garage, I&apos;m not sure how much of the mess it to blame on the earthquake.  &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://files.peakd.com/file/peakd-hive/ecoinstant/EoErSzHGXAXM7a5t94h5Umi9JFHKLv9wSvFtD7HjT6NgTK2SvLR6j1MTg15fSHvi2zr.jpg&quot; alt=&quot;1000074815.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I keep busy, working on a number of projects - including but not limited to - being a land owner and farmer in a rural community of families in Colombia, called a &quot;vereda&quot;.  &lt;/p&gt;
&lt;p&gt;Below you can see a picture of me &quot;doing my part&quot; of bringing high quality cobblestones from town to continue fixing up our road - which is now a hodge podge of various techniques all the way up to our front door, approximately one kilometer from the main road.  &lt;/p&gt;
&lt;p&gt;With great consistency we continue, and we are always improving our skills in &quot;working together&quot;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://files.peakd.com/file/peakd-hive/ecoinstant/EoGyuLF61HskMytwhF4mxwRt5HdsrQE1P9rdokyqW7PVJLJbZU4Gd3GT4YKSsaMTDtx.jpg&quot; alt=&quot;1000075861.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Luckily, we were outside when it started.  It lasted about 2 minutes and it was surprisingly strong, the whole mountain shook and I watched my house on stilts, and I was quite impressed. &lt;/p&gt;
&lt;p&gt;We are all fine, a plate did get broken - I still have to test the television, it might still work.  But all in all we are lucky and happy and healthy, no major damages reported in our municipality either, Gracias a Dios.&lt;/p&gt;
&lt;p&gt;Thanks for caring, Hive friends &amp;lt;3&lt;/p&gt;
&lt;h2&gt;Freedom and Friendship&lt;/h2&gt;
</content:encoded><dc:creator>ecoinstant</dc:creator><category>hive-186392</category></item></channel></rss>