Fix <sql> silent-failure bug; split /vst into overview + subpage; misc site fixes
- __mysql.cpp: <sql> never checked mysql_real_query's own return code, so a genuine query failure was indistinguishable from "ran fine, zero rows" - <try>/<catch> around a failing <sql> never actually caught anything anywhere. Now throws on a real failure. - spa.js: dynamically re-injected scripts now run in true sequential order (wait for each external script's load event before running the next), fixing checkout's Square card field never building on the first client-side navigation to /checkout (only after a refresh) - async=false alone only orders multiple external scripts relative to each other, it doesn't delay a plain inline sibling. - /vst split into a real overview + /vst/modular1 subpage with a left menu, reusing opensource.page's existing subpage-tier pattern (opensource.menu/main.css's submenuitem-active highlighting, and several other subpage-tier retirements, were already finished earlier this session but never committed - included here too). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
46ef67b735
commit
905fbafa5a
17 files changed
+465
-54
No files matched your search
+12
@@ -157,6 +157,18 @@ namespace jet {
|
||||
|
||||
void __mysql::query(coreutils::MString query) {
|
||||
int rc = mysql_real_query(mysql, query.getData(), query.getLength());
|
||||
// rc was captured but never checked - a genuinely failed query
|
||||
// (syntax error, constraint violation, etc.) fell straight into
|
||||
// the result==NULL branch below, which is ALSO the normal path
|
||||
// for a successful non-SELECT statement (INSERT/UPDATE/DELETE
|
||||
// have no result set to store either). That made every SQL error
|
||||
// in the whole codebase silently indistinguishable from "ran fine,
|
||||
// no rows" - <try>/<catch> around a failing <sql> never caught
|
||||
// anything, since no exception was ever thrown in the first place.
|
||||
// Only rc (mysql_real_query's own success/failure signal) can
|
||||
// actually tell the two cases apart; result's nullness can't.
|
||||
if(rc != 0)
|
||||
throw coreutils::Exception(std::string("mysql query failed: ") + mysql_error(mysql));
|
||||
result = mysql_store_result(mysql);
|
||||
if(result) {
|
||||
row = mysql_fetch_row(result);
|
||||
|
||||
@@ -365,6 +365,24 @@ textarea.fieldinputerror {
|
||||
transition: color 0.2s ease, border-color 0.2s ease;
|
||||
}
|
||||
|
||||
/* The currently-active entry in a page's own sidebar submenu (e.g.
|
||||
opensource.menu's list of subpages) - a background highlight rather
|
||||
than baritemselected's "raised tab" treatment, since these are plain
|
||||
inline links stacked in a list, not tabs sitting on a bar edge.
|
||||
Applied server-side (see opensource.menu) by comparing each
|
||||
linkbutton's own subpage against $[SUBPAGE] - spa.js already
|
||||
re-renders and swaps this menu's markup on every client-side
|
||||
navigation (see its #_spa_panelmenu handling), so this stays correct
|
||||
without any script of its own. */
|
||||
.submenuitem-active {
|
||||
background: var(--bond-panel-2);
|
||||
color: var(--bond-gold-bright) !important;
|
||||
padding: 2px 6px;
|
||||
margin: -2px -6px;
|
||||
border-radius: 3px;
|
||||
box-shadow: inset 0 0 0 1px var(--bond-gold);
|
||||
}
|
||||
|
||||
.panel {
|
||||
background: var(--bond-panel);
|
||||
margin: 10px;
|
||||
|
||||
@@ -127,19 +127,43 @@
|
||||
// a client-side SPA swap (e.g. clicking "Check Out") instead of a
|
||||
// full reload; only worked by accident on a fresh /checkout load.
|
||||
// Re-creating each script element makes the browser actually run
|
||||
// it. async=false on src="" ones preserves normal in-order
|
||||
// execution (dynamically-inserted external scripts default to
|
||||
// async otherwise), matching how a real page load would run them.
|
||||
// it. A prior fix set async=false on src="" ones, but that only
|
||||
// orders MULTIPLE external scripts relative to each other - it
|
||||
// does nothing to delay a plain inline script sitting right after
|
||||
// one, which still runs immediately on insertion regardless of a
|
||||
// sibling's in-flight fetch. checkout.page is exactly that shape
|
||||
// (an external Square SDK <script src> immediately followed by an
|
||||
// inline script calling Square.payments(...)): on a client-side
|
||||
// SPA swap the inline script ran before Square had actually
|
||||
// finished downloading, throwing "Square is not defined" inside an
|
||||
// async function with no visible catch, leaving the card container
|
||||
// permanently empty - reported as "checkout's card field doesn't
|
||||
// build the first time, only after a refresh" (a real full page
|
||||
// load's parser-inserted <script src> blocks until loaded before
|
||||
// the next tag runs, which a dynamically re-created one does not
|
||||
// do on its own). Fixed by actually waiting for each external
|
||||
// script's load/error event before moving on to the next one,
|
||||
// rather than trusting async=false's narrower ordering guarantee -
|
||||
// reproduced the failure and confirmed the fix against a real
|
||||
// artificially-delayed script load before deploying.
|
||||
var scripts = content.querySelectorAll('script');
|
||||
for (var i = 0; i < scripts.length; i++) {
|
||||
var old = scripts[i];
|
||||
var scriptList = [];
|
||||
for (var i = 0; i < scripts.length; i++) scriptList.push(scripts[i]);
|
||||
(function runScript(index) {
|
||||
if (index >= scriptList.length) return;
|
||||
var old = scriptList[index];
|
||||
var fresh = document.createElement('script');
|
||||
for (var j = 0; j < old.attributes.length; j++)
|
||||
fresh.setAttribute(old.attributes[j].name, old.attributes[j].value);
|
||||
if (fresh.src) fresh.async = false;
|
||||
fresh.textContent = old.textContent;
|
||||
if (fresh.src) {
|
||||
fresh.onload = fresh.onerror = function() { runScript(index + 1); };
|
||||
old.parentNode.replaceChild(fresh, old);
|
||||
} else {
|
||||
old.parentNode.replaceChild(fresh, old);
|
||||
runScript(index + 1);
|
||||
}
|
||||
})(0);
|
||||
// #_spa_panelmenu carries the CURRENT page's own side-menu markup
|
||||
// (mainpagetemplate.jet renders it into every fragment response
|
||||
// specifically so this can pull it out) - extracted from the
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
<page secure="yes" loggedin="yes" admin="true">
|
||||
<title>ADMIN INVOICES</title>
|
||||
<contents>
|
||||
<eval name="_menu">
|
||||
<include file="adminmenu.section">
|
||||
</eval>
|
||||
<retain name="invoice_id">
|
||||
<h3>Invoices</h3>
|
||||
<showtable page="admin_invoice" process="selectinvoice" name="invoice_id" value="X">
|
||||
select invoices.id as X,invoices.id,user_id,name,invoices.created,amount,invoices.status from invoices join users on invoices.user_id=users.id
|
||||
</showtable>
|
||||
<br>
|
||||
</contents>
|
||||
</page>
|
||||
@@ -0,0 +1,52 @@
|
||||
<page>
|
||||
<title>RCA1802 Micro-Controller Assembler/Emulator</title>
|
||||
<contents>
|
||||
<sectionframe title="RCA1802">
|
||||
<h1>The RCA1802 Micro-Controller</h1>
|
||||
<img src="/assets/rca1802chip.jpeg" align="right">
|
||||
<p>Back in the 1970's RCA released a chip that was widely used in
|
||||
satellites and other spacecraft to this day. It is a very simple
|
||||
8-bit micro-controller with 16-bit addressibility enabling memory
|
||||
access to 65,536 bytes of data.</p>
|
||||
|
||||
<p>The main chip is core to the COSMAC-ELF computers from the early period of
|
||||
micro-controllers. Because of theyre reliability and lower clock
|
||||
speeds the RCA1802 is a rugged controller for abusive environments.</p>
|
||||
|
||||
</sectionframe>
|
||||
<sectionframe title="RCA1802 Assembler">
|
||||
<p>The assembler allows the compilation of 1802 assembler language (as
|
||||
defined in the chip's data reference manual) into a RAM file that is
|
||||
65,536 bytes in size. This file can be loaded into the emulator which
|
||||
can then be used to debug the code.</p>
|
||||
|
||||
<p>Output device 1 provides a console type display of ASCII characters
|
||||
sent to it. Input device 1 is used to retrieve data from the keyboard
|
||||
device.</p>
|
||||
|
||||
</sectionframe>
|
||||
<sectionframe title="RCA1802 Emulator">
|
||||
<img src="/assets/emu1802a.png" align="right" width="500">
|
||||
<p>The 1802 emulator provides a fully functional RCA1802
|
||||
micro-controller device complete with interupt handling and DMA
|
||||
controls for memory access. Experiment with code structures and build
|
||||
an associated kit that allows you to operate the software on real
|
||||
hardware controllers.</p>
|
||||
|
||||
<p>The RAM for the device can be loaded from RAM file (.ram extension)
|
||||
that contain 65,536 bytes of pre-assembled machine code created from
|
||||
the assembler module.</p>
|
||||
|
||||
<p>The emulator has IDLE, RUN, STEP and DMA modes for easy code
|
||||
visibility and manipulation.</p>
|
||||
|
||||
</sectionframe>
|
||||
<sectionframe title="RCA1802 Computer Device">
|
||||
We are working to provide a hardware kit for the controller device.
|
||||
Current schematics are being layed out using Kicad. I have a full git
|
||||
change environment going for the Kicad project as well as the source
|
||||
code for the assembler and emulator components.
|
||||
</sectionframe>
|
||||
|
||||
</contents>
|
||||
</page>
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
<page>
|
||||
<title>BARANTMAIL OPEN SOURCE PROJECT</title>
|
||||
<contents>
|
||||
<sectionframe title="BARANTMAIL OPEN SOURCE PROJECT">
|
||||
<p>In the year 2000 I was extremely frustrated with the state of e-amil
|
||||
systems available to Linux. Sendmail and q-mail were pretty much the two
|
||||
mainstays. sendmail was prohibitively complex for the newly emerging
|
||||
Internet method of using e-mail and q-mail was poorly maintained.</p>
|
||||
<p>As a result, I embarked on a mission to write my own e-mail system that used
|
||||
mysql as it's storage medium. I wanted to keep it simple and support
|
||||
multiple users and domains with the simplest of configurations imaginable.
|
||||
I also wanted a scalable multi-server capability.</p>
|
||||
<p>The result is BARANTMAIL.</p>
|
||||
<h2>Features</h2>
|
||||
<p>Features of BARANTMAIL are:</p>
|
||||
<ul>
|
||||
<li>Fully compliant e-mail system.</li>
|
||||
<li>Support for multiple domains.</li>
|
||||
</ul>
|
||||
<p></p>
|
||||
</sectionframe>
|
||||
</contents>
|
||||
</page>
|
||||
@@ -0,0 +1,128 @@
|
||||
<page secure="yes" loggedin="yes">
|
||||
<title>EMAIL</title>
|
||||
<contents>
|
||||
<style>
|
||||
#email-connect-form { max-width: 360px; margin: 40px auto; }
|
||||
#email-connect-form input { display: block; width: 100%; box-sizing: border-box; margin-bottom: 10px; padding: 6px; }
|
||||
#email-connect-error { color: #a00; min-height: 1.2em; margin-bottom: 10px; }
|
||||
#email-app { height: 100%; }
|
||||
#email-client { display: flex; flex-direction: column; max-height: 100%; }
|
||||
#email-toolbar { display: flex; align-items: center; justify-content: space-between; padding: 6px 0; border-bottom: 1pt solid var(--bond-line-soft); margin-bottom: 6px; }
|
||||
#email-toolbar-actions { display: flex; align-items: center; gap: 6px; }
|
||||
#email-search-box { display: flex; align-items: center; gap: 4px; margin-right: 6px; }
|
||||
#email-search-input {
|
||||
background: #101014; color: var(--bond-text);
|
||||
border: 1px solid var(--bond-line-soft); border-radius: 4px;
|
||||
padding: 4px 8px; font-size: 9pt; width: 150px;
|
||||
}
|
||||
#email-search-input:focus {
|
||||
outline: none; border-color: var(--bond-gold-bright);
|
||||
box-shadow: 0 0 0.6em rgba(197, 164, 90, 0.5), 0 0 0.2em rgba(227, 196, 126, 0.55);
|
||||
}
|
||||
#email-list-count { color: var(--bond-text-dim); font-size: 9pt; margin-left: 6px; }
|
||||
#email-layout { display: flex; flex: 1; min-height: 0; }
|
||||
#email-list { width: 340px; flex-shrink: 0; overflow-y: auto; border-right: 1pt solid var(--bond-line-soft); transition: opacity 0.18s ease; }
|
||||
#email-reading-pane { flex: 1; min-width: 0; overflow-y: auto; padding: 0 12px; transition: opacity 0.18s ease; }
|
||||
.email-fading { opacity: 0; }
|
||||
.email-row {
|
||||
display: flex; align-items: center; gap: 6px; padding: 8px 10px 8px 13px;
|
||||
border-bottom: 1pt solid var(--bond-line-soft); border-left: 3px solid transparent; cursor: pointer;
|
||||
overflow: hidden;
|
||||
transition: opacity 0.2s ease,
|
||||
height 0.22s ease 0.2s, padding-top 0.22s ease 0.2s, padding-bottom 0.22s ease 0.2s,
|
||||
margin-top 0.22s ease 0.2s, margin-bottom 0.22s ease 0.2s, border-width 0.22s ease 0.2s;
|
||||
}
|
||||
.email-row:hover { background: rgba(255, 255, 255, 0.05); }
|
||||
.email-row.unread {
|
||||
font-weight: bold;
|
||||
background: rgba(197, 164, 90, 0.12);
|
||||
box-shadow: inset 0 0 0 1px var(--bond-gold);
|
||||
}
|
||||
.email-row.selected { background: rgba(197, 164, 90, 0.16); border-left-color: var(--bond-gold); }
|
||||
.email-row.selected:hover { background: rgba(197, 164, 90, 0.22); }
|
||||
/* Per-row removal animation for the trash button (see trashMessage()
|
||||
in email.js) - dissolves in place first (the opacity transition,
|
||||
no delay), then collapses its own box to nothing (the delayed
|
||||
height/padding/margin/border transitions kick in once the fade is
|
||||
mostly done) so every row below it slides up smoothly to close the
|
||||
gap, purely as a side effect of ordinary document-flow reflow - no
|
||||
other row is touched, faded, or re-rendered to make that happen. */
|
||||
.email-row.email-row-removing {
|
||||
opacity: 0;
|
||||
height: 0 !important;
|
||||
padding-top: 0; padding-bottom: 0;
|
||||
margin-top: 0; margin-bottom: 0;
|
||||
border-width: 0;
|
||||
}
|
||||
.email-row-info { flex: 1; min-width: 0; }
|
||||
.email-row .email-from { font-size: 10pt; }
|
||||
.email-row .email-subject { font-size: 9pt; color: var(--bond-text-dim); }
|
||||
.email-row .email-date { font-size: 8pt; color: var(--bond-text-dim); }
|
||||
.email-row-trash-btn { flex-shrink: 0; width: 24px; height: 24px; opacity: 0.55; }
|
||||
.email-row-trash-btn svg { width: 13px; height: 13px; }
|
||||
.email-row-trash-btn:hover { opacity: 1; }
|
||||
#email-reading-pane .email-header { border-bottom: 1pt solid var(--bond-line-soft); margin-bottom: 10px; padding-bottom: 10px; }
|
||||
#email-reading-pane .email-body { white-space: pre-wrap; overflow-wrap: break-word; word-break: break-word; font-family: monospace; font-size: 9pt; }
|
||||
#email-reading-pane .email-body-frame { width: 100%; height: 520px; border: none; border-radius: 4px; background: #fff; }
|
||||
#email-reading-pane .email-actions { margin-top: 10px; }
|
||||
#email-empty-state { color: var(--bond-text-dim); padding: 20px; }
|
||||
#email-folder-list { display: flex; flex-direction: column; }
|
||||
.email-folder-link { display: flex; align-items: center; justify-content: space-between; padding: 6px 8px; margin-bottom: 2px; border-radius: 4px; text-decoration: none; color: inherit; }
|
||||
.email-folder-link:hover { background: rgba(255,255,255,0.08); }
|
||||
.email-folder-link.email-folder-selected { background: rgba(255,255,255,0.14); font-weight: bold; }
|
||||
.email-folder-count { font-size: 8pt; padding: 1px 6px; border-radius: 8px; background: rgba(197, 164, 90, 0.25); color: var(--bond-gold-bright); }
|
||||
.email-folder-count:empty { display: none; }
|
||||
.icon-btn {
|
||||
display: inline-flex; align-items: center; justify-content: center;
|
||||
width: 30px; height: 30px; padding: 0; margin: 0; cursor: pointer;
|
||||
border-radius: 6px; border: 1px solid var(--bond-gold);
|
||||
background: linear-gradient(180deg, #1c1c24, #131318);
|
||||
color: var(--bond-gold-bright);
|
||||
box-shadow: 0 0 0.4em rgba(197, 164, 90, 0.25);
|
||||
transition: box-shadow 0.2s ease, background 0.2s ease, transform 0.1s ease;
|
||||
}
|
||||
.icon-btn svg { width: 16px; height: 16px; display: block; }
|
||||
.icon-btn:hover {
|
||||
box-shadow: 0 0 0.8em rgba(197, 164, 90, 0.5), 0 0 0.25em rgba(227, 196, 126, 0.55);
|
||||
background: linear-gradient(180deg, #24242e, #1a1a20);
|
||||
}
|
||||
.icon-btn:active { transform: scale(0.94); }
|
||||
.icon-btn.icon-btn-active {
|
||||
color: #131318;
|
||||
background: linear-gradient(180deg, var(--bond-gold-bright), var(--bond-gold));
|
||||
box-shadow: 0 0 0.7em rgba(197, 164, 90, 0.6);
|
||||
}
|
||||
</style>
|
||||
<div id="email-app">
|
||||
<if value1="$[@_imap_user]" value2="" type="eq">
|
||||
<div id="email-connect-form">
|
||||
<h3>Connect to Mailbox</h3>
|
||||
<input type="text" id="email-user-input" placeholder="you@barant.com" autocomplete="username">
|
||||
<input type="password" id="email-password-input" placeholder="Password" autocomplete="current-password">
|
||||
<button type="button" id="email-connect-btn">Connect</button>
|
||||
<div id="email-connect-error"></div>
|
||||
</div>
|
||||
<else>
|
||||
<div id="email-client">
|
||||
<div id="email-toolbar">
|
||||
<span id="email-connected-as">$[@_imap_user]</span><span id="email-list-count"></span>
|
||||
<span id="email-toolbar-actions">
|
||||
<span id="email-search-box">
|
||||
<input type="text" id="email-search-input" placeholder="Search mail…">
|
||||
<button type="button" id="email-search-btn" class="icon-btn" title="Search"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="7"/><path d="M21 21l-4.35-4.35"/></svg></button>
|
||||
</span>
|
||||
<button type="button" id="email-compose-btn" class="icon-btn" title="New Mail"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M4 6h13a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2z"/><path d="M2.5 7.5 12 14l9.5-6.5"/><path d="M18.5 3.5v5M16 6h5"/></svg></button>
|
||||
<button type="button" id="email-refresh-btn" class="icon-btn" title="Refresh"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M20 11a8 8 0 0 0-14.6-4.4M4 4v5h5"/><path d="M4 13a8 8 0 0 0 14.6 4.4M20 20v-5h-5"/></svg></button>
|
||||
<button type="button" id="email-disconnect-btn" class="icon-btn" title="Disconnect"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"/><path d="M16 17l5-5-5-5"/><path d="M21 12H9"/></svg></button>
|
||||
</span>
|
||||
</div>
|
||||
<div id="email-layout">
|
||||
<div id="email-list"></div>
|
||||
<div id="email-reading-pane"><div id="email-empty-state">Select a message to read it.</div></div>
|
||||
</div>
|
||||
</div>
|
||||
</if>
|
||||
</div>
|
||||
<script src="/assets/email.js?v=20260905m"></script>
|
||||
</contents>
|
||||
</page>
|
||||
@@ -0,0 +1,13 @@
|
||||
<page>
|
||||
<title>barant.com - JET Extension Tags</title>
|
||||
<contents>
|
||||
|
||||
<if value1="$[ARGS]" value2="" type="eq">
|
||||
<include file="jet_overview.section">
|
||||
<else>
|
||||
<set name="subpage" expr="substring('$[ARGS]', 2)">
|
||||
<include file="jet_$[subpage].section">
|
||||
</if>
|
||||
|
||||
</contents>
|
||||
</page>
|
||||
@@ -72,7 +72,7 @@ $[_BODY]
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>BARANT Technology Group</title>
|
||||
<link rel="stylesheet" href="/assets/main.css?v=20260906a">
|
||||
<link rel="stylesheet" href="/assets/main.css?v=20260908a">
|
||||
<link rel="stylesheet" href="/assets/control.css?v=20260902">
|
||||
</head>
|
||||
<body>
|
||||
@@ -131,7 +131,7 @@ $[_BODY]
|
||||
<div id="filemgr-list"><div id="filemgr-empty">No transfers yet.</div></div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/assets/spa.js?v=20260906a"></script>
|
||||
<script src="/assets/spa.js?v=20260913a"></script>
|
||||
<script src="/assets/documents.js?v=20260906a"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
File renamed without changes.
@@ -0,0 +1,4 @@
|
||||
<sectionframe title="Git Repository">
|
||||
<iframe src="https://git.barant.com" style="width:100%; height:80vh; border:1px solid var(--bond-line-soft); border-radius:3px; background:var(--bond-panel);"></iframe>
|
||||
|
||||
</sectionframe>
|
||||
@@ -1,8 +1,37 @@
|
||||
<sectionframe title="OPEN SOURCE PROJECTS">
|
||||
<if value1="$[SUBPAGE]" value2="" type="eq">
|
||||
<linkbutton page="opensource" class="submenuitem-active">OVERVIEW</linkbutton><br>
|
||||
<else>
|
||||
<linkbutton page="opensource">OVERVIEW</linkbutton><br>
|
||||
</if>
|
||||
<if value1="$[SUBPAGE]" value2="barantmail" type="eq">
|
||||
<linkbutton page="opensource" subpage="barantmail" class="submenuitem-active">BARANTMAIL</linkbutton><br>
|
||||
<else>
|
||||
<linkbutton page="opensource" subpage="barantmail">BARANTMAIL</linkbutton><br>
|
||||
</if>
|
||||
<if value1="$[SUBPAGE]" value2="jet" type="eq">
|
||||
<linkbutton page="opensource" subpage="jet" class="submenuitem-active">JET</linkbutton><br>
|
||||
<else>
|
||||
<linkbutton page="opensource" subpage="jet">JET</linkbutton><br>
|
||||
</if>
|
||||
<if value1="$[SUBPAGE]" value2="synthmax" type="eq">
|
||||
<linkbutton page="opensource" subpage="synthmax" class="submenuitem-active">SYNTHMAX</linkbutton><br>
|
||||
<else>
|
||||
<linkbutton page="opensource" subpage="synthmax">SYNTHMAX</linkbutton><br>
|
||||
</if>
|
||||
<if value1="$[SUBPAGE]" value2="serverframework" type="eq">
|
||||
<linkbutton page="opensource" subpage="serverframework" class="submenuitem-active">SERVER CORE FRAMEWORK</linkbutton>
|
||||
<else>
|
||||
<linkbutton page="opensource" subpage="serverframework">SERVER CORE FRAMEWORK</linkbutton>
|
||||
</if>
|
||||
<if value1="$[SUBPAGE]" value2="asm1802" type="eq">
|
||||
<linkbutton page="opensource" subpage="asm1802" class="submenuitem-active">ASM/MCH 1802 SIMULATOR</linkbutton><br>
|
||||
<else>
|
||||
<linkbutton page="opensource" subpage="asm1802">ASM/MCH 1802 SIMULATOR</linkbutton><br>
|
||||
</if>
|
||||
<if value1="$[SUBPAGE]" value2="git" type="eq">
|
||||
<linkbutton page="opensource" subpage="git" class="submenuitem-active">GIT REPOSITORY</linkbutton><br>
|
||||
<else>
|
||||
<linkbutton page="opensource" subpage="git">GIT REPOSITORY</linkbutton><br>
|
||||
</if>
|
||||
</sectionframe>
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
<page>
|
||||
<title>Server Core Framework</title>
|
||||
<contents>
|
||||
<sectionframe title="Server Core Framework">
|
||||
<p>It is finally here! The Server Core Framework is now available. The
|
||||
framework offers support for just about any server you can devise.</p>
|
||||
|
||||
<p>Now why would I want to go and build a server when there are all
|
||||
sorts of frameworks out there for supporting server activity? All I
|
||||
can say is top notch performance. The Server Core is all C++ and is
|
||||
built on the epoll structure of the Linux operating system.</p>
|
||||
|
||||
<ul>
|
||||
<li>TCP and/or UDP server capabilities.</li>
|
||||
<li>Straight socket or TLS connections.</li>
|
||||
</ul>
|
||||
|
||||
<p>Using the Server Core you can build out server elements for
|
||||
embedded systems or massively publicly accessible servers with simple
|
||||
code. Use the Server Core for:</p>
|
||||
<ul>
|
||||
<li>Micro-services engine for code generators.</li>
|
||||
<li>Game servers of all types.</li>
|
||||
<li>E-Mail services (checkout barantmail project).</li>
|
||||
<li>SIP telephony server.</li>
|
||||
<li>HTTP/HTTPS for embedded web sites.</li>
|
||||
<li>Streaming server for online radio stations.</li>
|
||||
<li>Any other TCP or UDP based server.</li>
|
||||
</ul>
|
||||
|
||||
<p>For the game server we will be offering client modules for both
|
||||
Unty 3D and for the Unreal Engine 4 with drop in and play options that
|
||||
can be heavily modified to support unique game features. Offers
|
||||
support for mySQL backends.</p>
|
||||
|
||||
<img src="/assets/ServerCoreMap.png" width="80%">
|
||||
<br>
|
||||
<code>
|
||||
git clone https://barant.com/git@ServerCore.git
|
||||
</code>
|
||||
|
||||
</sectionframe>
|
||||
</contents>
|
||||
</page>
|
||||
@@ -0,0 +1,47 @@
|
||||
<retain name="sku">
|
||||
<sectionframe title="Modular1">
|
||||
<sql>select * from products where sku='MODULAR1'</sql>
|
||||
<div style="display: cell-column;">
|
||||
<h2>$[description]</h2>
|
||||
<div style="display: cell-column; margin-right: 10px;"><img style="width: 800px;" src="/assets/modular1_0.png"></div>
|
||||
<p>$[text]</p></div>
|
||||
<div>
|
||||
<span><font size="+3">$19.<su>95</su></font></span>
|
||||
</div>
|
||||
<div>
|
||||
<addtocart sku="$[.sku]">
|
||||
</div>
|
||||
<p>
|
||||
Precision modular synthesizer with fully automatic patching and
|
||||
polyphony in one VST instrument. 12 module types provide a rich
|
||||
synthesis structural capability providing FM, additive and subtractive
|
||||
methods of creating musical instrumentation using traditional modular
|
||||
synthsis methods. 2 filter types provide both a Korg sound as well as
|
||||
the old popular Moog Filter sound.
|
||||
<ul>
|
||||
<li>6 full spectrum voltage controlled oscillators with sine,
|
||||
triangle, saw, pulse with modulation, pink noise, white noise. Sync
|
||||
and phase modulation for DX7 style FM synthesis. Wide range from
|
||||
.2Hz to 20kHz.</li>
|
||||
<li>6 ADSR envelope generators with voltage controlled parameters.</li>
|
||||
<li>4 delay units up to 10 seconds each.</li>
|
||||
<li>2 combination filters offering low pass, high pass, band pass
|
||||
and notch filtering modes.</li>
|
||||
<li>4 Moog style low pass filters offering a rich analog sound.</li>
|
||||
<li>MIDI input with velocity and aftertouch provides sensitivity
|
||||
for more expressive sounds.</li>
|
||||
<li>Monophonic and polyphonic modes with 128 voices.
|
||||
<li>Many many presets with more being added regularly.</li>
|
||||
</ul>
|
||||
</p>
|
||||
<hr>
|
||||
<h2>Samples</h2>
|
||||
<audio controls>
|
||||
<source src="/assets/trytryagain.mp3"
|
||||
type="audio/mp3">
|
||||
</audio>
|
||||
<audio controls>
|
||||
<source src="/assets/trytryagain6.mp3" type="audio/mp3">
|
||||
</audio>
|
||||
<div style="clear: both;"></div>
|
||||
</sectionframe>
|
||||
@@ -0,0 +1,27 @@
|
||||
<sectionframe title="Virtual Studio Technology">
|
||||
<h1>Virtual Studio Technology</h1>
|
||||
<p>VST (Virtual Studio Technology) is an industry-standard plugin format
|
||||
that lets a software instrument or effect run directly inside a digital
|
||||
audio workstation (DAW) - Ableton Live, Cubase, Reaper, FL Studio, and
|
||||
most others all support it. A VST instrument behaves like a piece of
|
||||
outboard synthesizer hardware, but lives entirely in software: you play
|
||||
it from a MIDI keyboard or a piano-roll in your DAW, and it renders
|
||||
audio in real time alongside every other track in your session.</p>
|
||||
|
||||
<p>We build VST instruments in-house, focused on real synthesis
|
||||
architectures rather than sample playback - the kind of thing you'd
|
||||
patch together on a real modular rack, but without the cabling.</p>
|
||||
|
||||
<h2>Available Instruments</h2>
|
||||
<ul>
|
||||
<li><linkbutton page="vst" subpage="modular1">MODULAR1</linkbutton> - a
|
||||
precision modular synthesizer with fully automatic patching and
|
||||
polyphony in one VST instrument. 12 module types (6 oscillators, 6
|
||||
envelope generators, delays, and both Korg- and Moog-style filters)
|
||||
give it the structural depth of a real modular rack in a single
|
||||
plugin.</li>
|
||||
</ul>
|
||||
|
||||
<p>More instruments are in development and will appear here as they're
|
||||
released.</p>
|
||||
</sectionframe>
|
||||
@@ -0,0 +1,12 @@
|
||||
<sectionframe title="VST INSTRUMENTS">
|
||||
<if value1="$[SUBPAGE]" value2="" type="eq">
|
||||
<linkbutton page="vst" class="submenuitem-active">OVERVIEW</linkbutton><br>
|
||||
<else>
|
||||
<linkbutton page="vst">OVERVIEW</linkbutton><br>
|
||||
</if>
|
||||
<if value1="$[SUBPAGE]" value2="modular1" type="eq">
|
||||
<linkbutton page="vst" subpage="modular1" class="submenuitem-active">MODULAR1</linkbutton><br>
|
||||
<else>
|
||||
<linkbutton page="vst" subpage="modular1">MODULAR1</linkbutton><br>
|
||||
</if>
|
||||
</sectionframe>
|
||||
@@ -1,52 +1,16 @@
|
||||
<page>
|
||||
<title>VST INSTRUMENTS</title>
|
||||
<contents>
|
||||
<retain name="sku">
|
||||
<sectionframe title="Virtual Studio Technology">
|
||||
<sql>select * from products where sku='MODULAR1'</sql>
|
||||
<div style="display: cell-column;">
|
||||
<h2>$[description]</h2>
|
||||
<div style="display: cell-column; margin-right: 10px;"><img style="width: 800px;" src="/assets/modular1_0.png"></div>
|
||||
<p>$[text]</p></div>
|
||||
<div>
|
||||
<span><font size="+3">$19.<su>95</su></font></span>
|
||||
<div id="vst-subpage">
|
||||
<if value1="$[SUBPAGE]" value2="" type="eq">
|
||||
<include file="vst-overview.subpage">
|
||||
<else>
|
||||
<try>
|
||||
<include file="vst-$[SUBPAGE].subpage">
|
||||
<catch>
|
||||
<p>That VST instrument doesn't exist.</p>
|
||||
</try>
|
||||
</if>
|
||||
</div>
|
||||
<div>
|
||||
<addtocart sku="$[.sku]">
|
||||
</div>
|
||||
<p>
|
||||
Precision modular synthesizer with fully automatic patching and
|
||||
polyphony in one VST instrument. 12 module types provide a rich
|
||||
synthesis structural capability providing FM, additive and subtractive
|
||||
methods of creating musical instrumentation using traditional modular
|
||||
synthsis methods. 2 filter types provide both a Korg sound as well as
|
||||
the old popular Moog Filter sound.
|
||||
<ul>
|
||||
<li>6 full spectrum voltage controlled oscillators with sine,
|
||||
triangle, saw, pulse with modulation, pink noise, white noise. Sync
|
||||
and phase modulation for DX7 style FM synthesis. Wide range from
|
||||
.2Hz to 20kHz.</li>
|
||||
<li>6 ADSR envelope generators with voltage controlled parameters.</li>
|
||||
<li>4 delay units up to 10 seconds each.</li>
|
||||
<li>2 combination filters offering low pass, high pass, band pass
|
||||
and notch filtering modes.</li>
|
||||
<li>4 Moog style low pass filters offering a rich analog sound.</li>
|
||||
<li>MIDI input with velocity and aftertouch provides sensitivity
|
||||
for more expressive sounds.</li>
|
||||
<li>Monophonic and polyphonic modes with 128 voices.
|
||||
<li>Many many presets with more being added regularly.</li>
|
||||
</ul>
|
||||
</p>
|
||||
<hr>
|
||||
<h2>Samples</h2>
|
||||
<audio controls>
|
||||
<source src="/assets/trytryagain.mp3"
|
||||
type="audio/mp3">
|
||||
</audio>
|
||||
<audio controls>
|
||||
<source src="/assets/trytryagain6.mp3" type="audio/mp3">
|
||||
</audio>
|
||||
<div style="clear: both;"></div>
|
||||
</sectionframe>
|
||||
</contents>
|
||||
</page>
|
||||
Reference in new issue
Block a user