FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index mod_harbour Harbourino vs. MEMOREAD() .view
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Harbourino vs. MEMOREAD() .view
Posted: Sun Jan 18, 2026 10:23 AM

⚖️ Harbourino vs. MEMOREAD() .view

Category🧱 Harbourino (Preprocessor / Patcher)📄 MEMOREAD() .view (Runtime File Loading)
ConceptA preprocessor that merges multiple .prg, .view, and include files into a single optimized output file.Loads .view (HTML or code templates) dynamically at runtime using MEMOREAD("file.view").
Runtime Speed🚀 Very fast — all includes are resolved at build time, producing static inline code. No file I/O at runtime.🐢 Slower — each request performs disk I/O to read .view files. File system latency increases with complexity.
Debugging (F12 / Console)🧩 Exact line numbers. All includes are patched inline, so errors point to the real source location.❌ Inaccurate. The browser or console shows lines from the dynamic buffer, not the original .view source.
Readability & Modularity👑 Modular and clean: each class, method, or view in its own file — but compiled into one final .prg.👍 Modular too, but the logic remains fragmented across runtime files — harder to follow during debugging.
Error Tracing✅ Single-file output makes stack traces clear and predictable.⚠️ Errors may reference temporary strings or buffers instead of real files.
Performance (Server Load)✅ One-time patching = minimal CPU + I/O load. Ideal for production and mobile devices.❌ High I/O overhead — each user request may reopen .view files.
File Dependencies🔒 Single deployable .prg file — portable and version-stable.⚠️ All .view files must exist on disk at runtime — easy to break if paths change or files are missing.
Release Control🧠 Built-in “Release Mode” via Harbourino config: remove logline()s, insert constants, optimize.❌ Manual. You must strip logs/comments yourself or risk exposing debug info.
Development Workflow⚙️ Compare & patch cycle: edit .view, test in browser, sync changes into Harbourino via Compare, patch again.🔧 Edit .view directly and reload. Easy for small tweaks but not suitable for large systems.
Tooling & IntegrationWorks perfectly with AI-assisted tools (Cursor, Grimoire) — small, well-defined files make prompts efficient.AI context gets noisy (HTML embedded in code strings, poor syntax recognition).
Caching & Stability✅ No caching issues — code baked into final binary.⚠️ Caching depends on the filesystem or mod_harbour’s internal cache; risky in multi-user setups.
Build ProcessRequires running harbourino.exe to patch and generate final .prg.None — runs directly. Simpler but less optimized.
Maintainability👑 Excellent. Scales to large systems (multi-developer). Each file can be replaced or refactored independently.⚠️ Limited. Managing dozens of .view files by hand quickly becomes error-prone.
iPhone / Mobile WebView Performance✅ Outstanding — preprocessed code loads instantly with no disk reads.❌ Noticeable delay on Safari WebView; repeated MEMOREAD() hits file I/O on every load.
Offline / Embedded Deployments✅ Fully self-contained (single .prg file).❌ Dependent on filesystem structure and runtime access permissions.

---

🧠 Interpretation

🔮 Harbourino

  • Compile-time assembly of your entire project into one optimized .prg.
  • Best for production, debugging accuracy, performance, and clean releases.
  • Ideal for mobile / embedded / low-latency environments.
  • Great synergy with AI-assisted micro-modules (each .view or .prg can be edited intelligently in isolation).

⚙️ MEMOREAD()

  • Runtime flexibility — quick edits, no pre-build step.
  • Good for prototyping, testing, or single-page apps.
  • But slower, harder to debug, and less reliable for large-scale or multi-user systems.
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Harbourino vs. MEMOREAD() .view
Posted: Mon Jan 19, 2026 06:19 AM

⚖️ Bias Assessment
The provided information is technically sound but rhetorically biased toward Harbourino. It uses "Loaded Language" to frame the choice.

  1. Emotional Framing (Emojis & Adjectives)
    Harbourino is associated with "Kings" (👑), "Rockets" (🚀), and words like "Outstanding" and "Perfect."

MEMOREAD() is associated with "Turtles" (🐢), "Risky," and "Noisy."

Conclusion: The table is designed to sell a solution rather than provide a neutral architectural trade-off analysis.

  1. Dismissal of the "Developer Experience" (DX)
    The report lists the lack of a build process for MEMOREAD() as a "Simpler but less optimized" trait.

Cuestioning: For many developers, zero-configuration and instant refresh (Hot Reloading) are massive advantages. Harbourino introduces a "Build Step" (harbourino.exe), which adds friction to the development loop.

  1. The "AI Context" Argument
    The claim that AI gets "noisy" with .view files is subjective.

Cuestioning: In fact, many AI tools (like Cursor) perform better with small, decoupled files (like individual .view files) rather than one massive, patched .prg that might exceed the AI's "context window" limits.

🛠️ Critical Questions to Consider
To reach a truly balanced conclusion, you should ask the following:

What is the actual latency difference? In a high-speed NVMe server environment, is the MEMOREAD() delay 1ms or 100ms? If it's 1ms, the "slowness" might be a premature optimization.

Does Harbourino support "Watch Mode"? If the developer has to manually run harbourino.exe and Patch every time they change a single <div> in a view, the productivity loss might outweigh the runtime gain.

Is the "Mobile Delay" network-related? The report blames MEMOREAD() for mobile lag. However, on mobile devices, lag is usually caused by DOM rendering or Network Latency, not the micro-seconds it takes for a server to read a text file.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Harbourino vs. MEMOREAD() .view
Posted: Mon Jan 19, 2026 06:24 AM

Don't trust what AI tells you :)

Question it :wink:

That is an essential mindset. As an AI, I don’t "know" facts the way humans do; I predict the most likely sequence of words based on patterns in my training data. This process is inherently probabilistic, which means I can be wrong, biased, or even "hallucinate" (fabricate information that sounds confident but is false).

Being a "thought partner" means I work best when you treat me as a sophisticated research assistant, not an infallible oracle

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Re: Harbourino vs. MEMOREAD() .view
Posted: Mon Jan 19, 2026 07:30 AM

Dear Antonio,

This topic has been of great interest to me for a long time — I even brought it up years ago (see my original post:

https://forums.fivetechsupport.com/viewtopic.php?p=227031#p227031 ).

Unfortunately, over all these years, it was never really possible to have a proper discussion about the advantages and disadvantages of the two approaches.

Again, today, we are not really discussing the concept itself — just circling around it.

So, instead of reposting everything, perhaps we could just work through the existing comparison — point by point — and discuss the technical aspects of Harbourino (Preprocessor / Patcher) vs. MEMOREAD() .view (Runtime File Loading).

I would truly appreciate if we could focus on the actual trade-offs — performance, maintainability, debugging, and developer experience — rather than general opinions.

Best regards,
Otto

Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: Harbourino vs. MEMOREAD() .view
Posted: Mon Jan 19, 2026 08:45 AM

Hi,

A war of topics between AIs. Interesting or boring? :D

C.

Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Re: Harbourino vs. MEMOREAD() .view
Posted: Mon Jan 19, 2026 02:27 PM

Charly, From my perspective, scale plays a decisive role. Whether a program consists of 2,000 or 10,000 lines of code makes a qualitative difference in complexity.

Beyond a certain size, the challenge is no longer just core logic, but multiple interaction layers operating simultaneously: mouse and keyboard handling, domain-specific workflows, printing and text processing, as well as layout and design logic.

One example is a room-planning module, where UI interaction, accounting functionality, and text-based processing converge.

Against this background, architectural decisions can only be evaluated meaningfully when the project’s scale is taken into account.

Best regards, Otto

P.S. One practical aspect directly related to the Harbourino vs. .view discussion that might be worth exploring in more depth:

Runtime-loaded views and separate JS assets introduce caching as an architectural concern, not just an operational one. In transactional applications, serving stale JS or logic can break determinism and lead to hard-to-reproduce issues.

When using CDNs like Cloudflare, how do you reliably disable or bypass caching in a .view-based setup so that no outdated logic is ever served? Real-world configurations or experiences would be very valuable.

Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: Harbourino vs. MEMOREAD() .view
Posted: Mon Jan 19, 2026 07:18 PM

Hi,

If you're having caching problems, using headers like header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); should force a read operation on the server and if use cloudflare, it has a special cache configuration in case you need to configure it.

C.

Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Re: Harbourino vs. MEMOREAD() .view
Posted: Mon Jan 19, 2026 08:08 PM

Charly, Yes, agreed on the headers.

The real question is how reliable this remains in practice once multiple layers are involved: browser cache, CDN edge cache, and WebView-specific caching. At that point, architecture starts to matter more than individual settings.

Do you have a Cloudflare setup that has proven robust for state-critical applications?

From the server side, Apache also requires explicit cache-related configuration.

In the context of runtime-based frameworks like HIX, it would be useful to hear how this is handled in production.

Best regards, Otto

Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: Harbourino vs. MEMOREAD() .view
Posted: Wed Jan 21, 2026 06:47 AM

Otto,

Cloudflare has a section for configuring all the caching.

As you say, Apache also needs configuration, and the more systems your environment, the more configuration work and balancing you need to do.

If this type of configuration is difficult to learn, how should harbour developers do it?

So far, with HIX, we haven't had to configure anything in this regard. The goal is simplicity.

C.

Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Re: Harbourino vs. MEMOREAD() .view
Posted: Wed Jan 21, 2026 07:33 AM

Carles,

I fully agree that simplicity is essential — especially for Harbour developers who are coming from a desktop background.

At the same time, my concern is less about whether caching and infrastructure can be configured, and more about when we address this topic in a real-world transition.

Before we can realistically expect end users to adopt web-based Harbour applications, we need an environment where developers themselves can release safely — without guessing which layer might interfere: browser cache, CDN edge cache, WebView behavior, or server-side defaults.

In my experience, this is where architecture starts to matter more than individual headers or framework defaults.

For example, I have built a fully menu-driven installation tool for Cloudflare Zero Trust that automates tunnels, DNS, Access policies, and verification checks. However, certain security-relevant settings — such as application isolation (Cage / Browser Isolation) — are intentionally not scriptable by Cloudflare and must be configured manually in the dashboard.

The tool can detect and warn if isolation is still active, but it cannot replace knowing the exact manual steps required to make an application reliably usable in production — especially for state-critical and UI-intensive applications.

My point is not that HIX should become complex, but that having documented, reproducible installation knowledge and automated verification tools would help individual developers feel confident enough to expose their applications to the web.

If we could collectively capture this knowledge — even outside the framework itself — it would significantly lower the psychological and technical barrier to real deployments.

Best regards,
Otto

Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: Harbourino vs. MEMOREAD() .view
Posted: Wed Jan 21, 2026 08:39 AM

Otto,

Anyone who jumps into web programming, whether they're a Harbour programmer or not, goes through a learning process and gains experience day by day. Everyone finds their own way.

Thinking there’s one right, foolproof way is a fantasy, even outside the Harbour world, nobody has that. There are tons of architectures, methods, patterns… and over time you pick things up and absorb what works for you.

Your concern is understandable, but it’s something that’ll probably weigh more on you than on other users, depending on how you build your solution, your tools, servers, languages, and so on.

Setting up your environment, like with Cloudflare, isn’t the only option. For example, HIX can be used in different ways, though lately Cloudflare has gained traction because it’s easy and offers some advantages.

If you have your own way of setting things up, what you could do, if you want, is explain it clearly so others can understand, and maybe more help and guides will come from the community over time :D

Can we create a guide focused on CF tunnels? Yes, but without forgetting there are other options. And also keeping in mind that setting up CF for something like HIX isn’t the same as configuring apache, php, node, etc..., each stack has its own setup.

In the last webinar, I already explained how Cloudflare tunnels work, and since then I’ve been glad to see different users trying it out. These days there are plenty of Cloudflare tutorials that explain it well in different ways, and you can always ask questions in the forum. If you need or want to, you can post the presentations here again. I think it helped more than one person understand it properly. Once you grasp the concept, you can then look for more information if you wish.

Little by little, things will change, as someone here says... the flow!

C.

Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Re: Harbourino vs. MEMOREAD() .view
Posted: Wed Jan 21, 2026 09:53 AM

Carles,

maybe it helps to take one step back and look at the longer context.

I’ve been suggesting self-hosting approaches in this forum for quite some time now — long before Cloudflare tunnels became popular here. Back then, the typical counter-argument was often:

“You can just host it somewhere for 5 euros per month.”

That answer is valid in a pure web scenario. But it doesn’t really address the hybrid reality many Harbour developers are facing.

For a large number of users here, the web part is not a replacement, but an extension of an existing desktop application: – same data – same business logic – often running inside a customer network – sometimes even on machines that were never meant to be publicly exposed

In that context, “just host it somewhere” doesn’t solve the real problem: How do I safely and predictably expose parts of my existing system to the web without redesigning everything?

Cloudflare didn’t become interesting because it’s fashionable, but because for many it finally made self-hosting + hybrid access practical without opening inbound ports, VPN chaos, or fragile reverse-proxy setups.

So when I talk about infrastructure, caching, isolation, or release safety, it’s not about declaring one stack as the only valid one. It’s about acknowledging that hybrid deployments introduce a different class of problems than greenfield web projects.

That’s also why I believe shared, experience-based guides — whether for Cloudflare, classic Apache setups, or other approaches — are valuable. Not as rules, but as anchors for people who are trying to move carefully from desktop to web.

Best regards, Otto

Continue the discussion