View allAll Photos Tagged JSON,
via
GTA V Bread (stat editor, basic unlocks)
Set the value of the request for ballistic equipment (with its help you can get rid of money).
Change of rank.
Statistics editor (int, float, bool).
Packed bouls (_NGPSTAT_BOOL, _NGTATPSTAT_BOOL, _NGDLCPSTAT_BOOL, _DLCBIKEPSTAT_BOOL, _DLCGUNPSTAT_BOOL, _GUNTATPSTAT_BOOL, _DLCSMUGCHARPSTAT_BOOL _BUSINESSBATPSTAT_BOOL, _GANGOPSPSTAT_BOOL, _BUSINESSBATPSTAT_BOOL, _BUSINESSBATPSTAT_BOOL, _ARENAWARSPSTAT_BOOL, _CASINOPSTAT_BOOL, _CASINOHSTPSTAT_BOOL, _HEIST3TATTOOSTAT_BOOL, _SU20PSTAT_BOOL, _SU20TATTOOSTAT_BOOL, _HISLANDPSTAT_BOOL, _TUNERPSTAT_BOOL).
Unlocks (Bouls, Intas, Character Stats, Modified Mileage, Shotaro, Cayo Perico Robbery, Diamond Casino Robbery, Bunker Exploration, Mental State Reset, Gold Business Battle Trophy).
Clear Desired Level.
Stop showing.
Get in your private car.
Packaged Editor Int.
Packed Bool editor.
If it fails because your processor doesn't support AVX2, there's nothing I can do about it.
How to use:
enter DLL (Bread.dll) using PH2 or Xenos(download here)in "GTA5.exe", return to the game and click "INSERT" to open the graphical interface.
the statistics are in AppData/Roaming/BigBaseV2/stat_editor.json.
Use at your own risk.
Download
Use at your own risk.
GeoData Technologies Inc. - Gala Night 2019
Ballroom, Joy-Nostalg Center, 17 ADB Ave, San Antonio, Pasig, Metro Manila
Photograph by Geoffrey C. Embuscado for JSon Luna Photography
Feb.15.2019
Falcor is the open-source, JS data access framework that powers Netflix. Falcor lets you represent all of your cloud data sources as one virtual JSON model on the server. On the client, Falcor makes it appear as if the entire JSON model is available locally and allows you to access data the same way you would from an in-memory JSON object. Falcor retrieves the model data you request from the cloud on-demand, transparently handling all the network communication and keeping the server and client in sync.
$bp("Brid_50595239589779697", "id":"4393", "yt" : "src" : "8N-4mQFlZCE", image:"https://i.ytimg.com/vi/8N-4mQFlZCE/hqdefault.jpg" ,"video":"//services.brid.tv/services/ytvideo/4059.json", "width":"95%","height":"360");
Đôi mắt nâu cuốn hút và màu môi cam đỏ “sexy” sẽ khiến bạn gái trở nên ấ...
yeumoingay.com/video-hay/clip-trang-diem-hut-hon-voi-mat-...
In the last tutorial we learnt to insert values in our server’s mysql database from android. In this part we will be fetching the values from the server. We will use Android JSON Parsing for reading the data from the server. So lets begin. If you haven’t read the last tutorial then...
www.simplifiedcoding.net/android/android-json-parsing-ret...
Reformatted was AbTeC Gallery's inaugural exhibition. The vernissage, which took place on May 1st, 2020, was a live, public, online event attended by the exhibiting artists, AbTeC team members, and other art-lovers via their avatars. The establishment of this former machinima set as a functioning virtual gallery occurred in response to the COVID-19 pandemic. Check out the keyword tags for individual image information.
Realizing that you have lost or misplaced your social security card likely means that you had a need for it. This can be stressful, especially if you needed it to obtain employment or other important process. While you will not be able to get a replacement card the same day that you realize that yours […]
The post How To Get A New Social Security Card In A Rush appeared first on SS4 Online.
Source/Repost=>
ss4online.net/how-to-get-a-new-social-security-card-in-a-... ** SS4 Online, EIN (Employer Identification Number) Application ** ss4online.net/
Source/Repost=>
ss-4online.blogspot.com/2018/01/how-to-get-new-social-sec... ** Jesse Anderson __Creative Engineer & CEO (Smoking Hand) ** ss-4online.blogspot.com/
GeoData Technologies Inc. - Gala Night 2019
Ballroom, Joy-Nostalg Center, 17 ADB Ave, San Antonio, Pasig, Metro Manila
Photograph by Geoffrey C. Embuscado for JSon Luna Photography
Feb.15.2019
Who's safe kiddos? Glad I don't make a living in Information Technology or work in an office doing any manual input... Interesting now with the way we are going with AI. "LLM" Large Language models will probably wipe out a lot of Data Entry Clerks and Administrators. they are highly susceptible to automation due to repetitive, structured, and unstructured data handling: Customer Service Representatives & Support: Chatbots and AI assistants/agents are managing routine customer inquiries and internal queries. Junior Software Developers & Coders: AI-powered tools are now able to write, debug, and test code, reducing the need for entry-level human developers.
Quality Assurance (QA) Testers: Automated testing tools are becoming more intelligent and faster than manual testers.
Graphic Designers & Content Writers: Generative AI tools (e.g., DALL-E, GPT) can rapidly produce content and designs, lowering demand for entry-level creative work.
Translators and Interpreters: High-level AI language models have rendered traditional translation work largely obsolete.
IT Support/System Administrators: Routine troubleshooting is increasingly handled by AI diagnostics.
I was contracted in the early 2000's by Dell Computers through "Tecnet" --my employer at the time. Dell was based out of Texas and if you reached the call center, there was a person with a strong Texas drawl - similar to the traditional "Deep South" drawl- hard to understand. This soon changed to cost saving remote call centers in India. This arrangement didn't last long at first because people, especially the Texans couldn't understand the East Asian accent. Funny to think but a lot of us couldn't understand either of these parties but the Texans talking to the East Asians is funny to ponder. Call Centers went back to Texas temporarily but then returned to India shortly after. I remember reading somewhere they had training programs for people to lose their accent in Asia call centers.
BB and Reddit: My searches 2026. India Built the World’s Back Offices in mass. A.I. Is Starting to Shrink It. "Artificial intelligence promises to automate the white-collar work that made India a tech powerhouse. The country is racing to adapt before it’s too late."
BB--I'm trying to understand AI myself and help others in laymen's terms!
Linguistic Intelligence is really just the beginning of AI.
What is the Socratic Method of teaching?
Instead of giving information and facts, an instructor using the Socratic method of teaching asks students a series of open-ended questions (questions with more than a yes or no answer) about a specific topic or issue. In turn, the students can also pose questions of their own.
So , I will include the betterment Ideas of LLM instead of the best word inference in the chain that is typical of LLM--
LLM's are so much better when instructed to be socratic.
This idea basically started from Grok, but it has been extremely efficient when used in other models as well, for example in Google's Gemini.
Sometimes it actually leads to a better and deeper understanding of the subject you're discussing about, thus forcing you to think instead to just consume its output.
It works with some simple instructions saved in Gemini's memory. It may feel boring at first, but it will be worth it at the end of the conversation.
Of course AIs do not have critical thinking, but they can trigger and impel their user to activate their own critical thinking capacity. That is the value of a Socratic exchange, it aids the human user in the use of their own, perhaps weak, critical analysis. Over time and repeated use of Socratic exchanges with an LLM, a user will develop greater, better than before, cognitive abilities. I'm not keeping the references to the proof, but this has been demonstrated and published in Psychology journals.
When you tell an LLM to be Socratic, you aren’t magically making it “smarter.” What you’re really doing is reorganizing the interaction loop. Rather than the model collapsing uncertainty into one elegant, finalized response, you’re prompting it to keep the reasoning space open longer. That alters the nature of the conversation.
For example, if you ask Why do startups fail?
a default response might give you a clean list: poor product-market fit, funding issues, bad leadership, etc. It feels complete. But if the model is instructed to be Socratic, it might respond with: Are you asking from the perspective of a founder, investor, or policymaker? or Are you more interested in early-stage failure or scale-stage collapse?
Suddenly, the reasoning space widens before it narrows. The discussion becomes shaped rather than delivered.
LLMs are essentially next-token predictors trained on patterns of conversation and exposition.
By default, they optimize for completion ..they produce something coherent and finished. In Socratic instruction, the objective shifts from answer production to guided exploration. And that shift alone often increases engagement. Consider a student asking, “What is justice?”
A standard response might summarize Rawls, Aristotle, and utilitarianism in a neat paragraph.
A Socratic version might ask: Do you think justice is about fairness, equality, or desert? and Can a system ever produce unequal outcomes?
Now the student has to think. The model hasn’t just transferred information, but it has activated cognition.
Here’s the additional perspective: It’s not only about clearer understanding for the user but also about distributed cognition between human and model.
When the model asks questions back, it externalizes intermediate reasoning steps that would otherwise remain compressed. In a typical answer, much of the reasoning is hidden behind the final synthesis.
In a Socratic exchange, those intermediate steps become interactive checkpoints.
Take a practical case: User: How do I improve my productivity? Default model: gives 10 tips.
Socratic model: What currently distracts you most is digital interruptions, unclear goals, or energy levels?
Now the human provides constraints. The model adapts. The final strategy emerges collaboratively. The intelligence is co-constructed rather than pre-packaged.
So the gain is not merely a feature of the model, it’s a feature of the interaction protocol.
There’s also a cognitive forcing function at work. When models ask clarifying questions, they narrow the hypothesis space and reduce hallucination risk. Instead of guessing what the user means, they query ambiguity directly.
For instance, if a user asks, “Explain the impact of the revolution,” that’s dangerously underspecified. Which revolution? French? Industrial? Digital? A default answer risks misalignment.
A Socratic response might begin: “Which revolution are you referring to, and in what context — political, economic, or technological?” That clarification increases epistemic alignment before any claim is made.
However, there is a tradeoff. Socratic prompting increases depth but reduces throughput. It is inefficient if the task is quick synthesis. If you ask, “What’s the capital of Japan?” a Socratic reply asking, “Are you preparing for a geography exam or planning travel?” is unnecessary friction.
It shines when the task involves: Conceptual learning (e.g., understanding entropy beyond a definition) Moral or philosophical inquiry (e.g., debating free will) Ambiguous problem framing (e.g., defining strategy before execution) Creative exploration (e.g., shaping a novel’s theme through iterative refinement) It is less useful for: Factual lookups Structured output tasks (e.g., “Format this as JSON”) Deterministic problem-solving (e.g., “Solve this equation”)
Socratic prompting does not universally enhance LLM performance. It restructures the reasoning topology of the exchange. It shifts the model from an answer engine to a cognitive scaffold. And perhaps the deeper insight is this: as LLMs grow more capable, the limiting factor increasingly becomes question quality rather than raw model intelligence.
For example, two users can query the same powerful model.
User A asks: Tell me about economics. User B, guided Socratically, refines through dialogue: I’m trying to understand why inflation hurts borrowers differently than lenders — can we unpack that step by step?
The second interaction produces deeper understanding not because the model changed, but because the questioning improved. A Socratic mode doesn’t merely enhance outputs. It upgrades the human participant in the loop. That is why it feels more powerful.
Discovr Bubbles is a new interactive approach to navigate hierarchies of data using touch and gestures.
Discovr Bubbles was build using HTML5, JQuery and Box2D; it was hosted in Google Appengine and the data was exposed as a series of REST services serving JSON blobs.
Image taken from:
Title: "Paraguay. Capítulos entresacados de la Nueva Geografía Universal ... Prólogo, traducción y notas por R. de Olascoaga, etc", "Nouvelle Géographie universelle. La terre et les hommes"
Author: RECLUS, Élisée.
Contributor: OLASCOAGA, Ramón de.
Shelfmark: "Nguyễn Văn Hiếu HMNTS 10480.d.32."
Page: 67
Place of Publishing: Asunción del Paraguay
Date of Publishing: 1896
Issuance: monographic
Identifier: 003055009
Explore:
Find this item in the Nguyễn Văn Hiếu catalogue, 'Explore'.
Download the PDF for this book (volume: 0) Image found on book scan 67 (NB not necessarily a page number)
Download the OCR-derived text for this volume: (plain text) or (json)
Click here to see all the illustrations in this book and click here to browse other illustrations published in books in the same year.
When it comes to using a federal tax ID in Ohio over your social security number, is a popular trend that is dramatically on the rise. This is due to the fact that people do not like giving out their social security number to just anyone. This can become a big problem if they give […]
The post Employer Identification Number Ohio appeared first on SS4 Online.
Source/Repost=>
www.ss4online.net/employer-identification-number-ohio/ ** SS4 Online, EIN (Employer Identification Number) Application ** ss4online.net/
Source/Repost=>
ss-4online.blogspot.com/2017/07/employer-identification-n... ** Jesse Anderson __Creative Engineer & CEO (Smoking Hand) ** ss-4online.blogspot.com/
GeoData Technologies Inc. - Gala Night 2019
Ballroom, Joy-Nostalg Center, 17 ADB Ave, San Antonio, Pasig, Metro Manila
Photograph by Geoffrey C. Embuscado for JSon Luna Photography
Feb.15.2019
View this map on the BL Georeferencer service.
Image taken from:
Title: "Travels in Albania and other provinces of Turkey in 1809 & 1810. A new edition"
Author: HOBHOUSE, John Cam - Baron Broughton
Shelfmark: "British Library HMNTS 10125.e.30."
Volume: 02
Page: 563
Place of Publishing: London
Date of Publishing: 1855
Issuance: monographic
Identifier: 001697701
Explore:
Find this item in the British Library catalogue, 'Explore'.
Open the page in the British Library's itemViewer (page image 563)
Download the PDF for this book Image found on book scan 563 (NB not a pagenumber)Download the OCR-derived text for this volume: (plain text) or (json)
Click here to see all the illustrations in this book and click here to browse other illustrations published in books in the same year.
View this map on the BL Georeferencer service.
Image taken from:
Title: "Journal of a Tour in the Levant"
Author: TURNER, William - of the Foreign Office
Shelfmark: "British Library HMNTS 1047.e.3-5."
Volume: 03
Page: 102
Place of Publishing: London
Date of Publishing: 1820
Issuance: monographic
Identifier: 003694296
Explore:
Find this item in the British Library catalogue, 'Explore'.
Open the page in the British Library's itemViewer (page image 102)
Download the PDF for this book Image found on book scan 102 (NB not a pagenumber)Download the OCR-derived text for this volume: (plain text) or (json)
Click here to see all the illustrations in this book and click here to browse other illustrations published in books in the same year.
Reduce development effort for API Consumption process by 95%. Compatible with Enterprise Schedulers, iPAAS platforms, POSTMAN and Web Applications. Solution to simplify the complexities in parsing JSON & XML structures without coding. In few clicks, Convert Relational tables to JSON/XML/API, REST API to Snowflake, Oracle to REST API, REST API to REST API, MS SQLServer to XML and vice versa. For More info check >> apifinz.com/
<!DOCTYPE html>
GLSL_DB: Yi Jing SDR P2P
:root {
--neon: rgb(0, 255, 255);
--neon-glow: rgba(0, 255, 255, 0.2);
--bg: rgba(0, 15, 15, 0.9);
}
body { margin: 0; overflow: hidden; background: #000; font-family: 'Courier New', monospace; color: var(--neon); transition: color 0.3s; }
canvas { width: 100vw; height: 100vh; display: block; position: fixed; top: 0; left: 0; z-index: -1; }
#ui-layer {
position: absolute; inset: 0; display: flex; flex-direction: column;
justify-content: space-between; padding: 25px; pointer-events: none;
}
.panel {
background: var(--bg); border: 1px solid var(--neon);
padding: 15px; pointer-events: auto; transition: border-color 0.3s, box-shadow 0.3s;
box-shadow: 0 0 15px var(--neon-glow); backdrop-filter: blur(4px);
}
#telemetry { width: 280px; border-left: 5px solid var(--neon); }
.val { color: #fff; font-size: 26px; text-shadow: 0 0 8px var(--neon); }
.label { font-size: 10px; color: #088; text-transform: uppercase; display: block; margin-bottom: 5px; }
#control-panel { width: 320px; }
button {
background: #011; color: var(--neon); border: 1px solid var(--neon);
padding: 8px; cursor: pointer; width: 100%; text-transform: uppercase; font-size: 10px; margin-bottom: 5px;
transition: all 0.2s;
}
button:hover { background: var(--neon); color: #000; }
button:disabled { opacity: 0.5; cursor: not-allowed; border-color: #555; color: #555; }
#channel-log {
margin-top: 10px; height: 100px; overflow-y: auto; font-size: 9px;
border: 1px dashed #044; padding: 5px; color: #aaa; background: rgba(0,0,0,0.5);
}
#start-overlay {
position: fixed; inset: 0; background: rgba(0,0,0,0.85); z-index: 9999;
display: flex; justify-content: center; align-items: center; cursor: pointer; backdrop-filter: blur(5px);
}
#debug-log { position: fixed; top: 10px; right: 10px; color: red; font-size: 10px; z-index: 10000; pointer-events: none; max-width: 300px; }
E N G A G E . S Y S T E M
(Initialiseer Audio, WebGL & Netwerk)
System Angle
42.00°
Yi Jing Hexagram
...
P2P Status: IDLE
1. Host Kamer
2. Join Kamer
SDR BAND: 2.4GHz // AUTO-SIGNALING ACTIVE
// --- GLOBALS & CONFIG ---
window.onerror = (msg) => { document.getElementById('debug-log').innerHTML += `[ERR]: ${msg}`; return false; };
const ROOM_ID = "82815e11";
let angle = 42.0;
let lastP2PSend = 0;
// Audio & WebGL Globals
let audioCtx, osc, delay, feedback, mainGain, panner;
const canvas = document.getElementById("c");
let gl, uLoc = {};
// WebRTC & Socket Globals
let socket;
let peerConn;
let dataChannel;
const rtcConfig = { iceServers: [{ urls: "stun:stun.l.google.com:19302" }] };
const hexSequence = [
{ id: 13, sym: "䷌", name: "TONG REN" }, { id: 8, sym: "䷇", name: "BI" },
{ id: 33, sym: "䷠", name: "DUN" }, { id: 49, sym: "䷰", name: "GE" },
{ id: 13, sym: "䷌", name: "TONG REN" }, { id: 4, sym: "䷃", name: "FLUX" },
{ id: 33, sym: "䷠", name: "DUN" }, { id: 49, sym: "䷰", name: "GE" },
{ id: 13, sym: "䷌", name: "TONG REN" }, { id: 4, sym: "䷃", name: "FLUX" },
{ id: 1, sym: "䷀", name: "QIAN" }, { id: 49, sym: "䷰", name: "GE" }
];
// --- 1. SYSTEEM INITIALISATIE (Graphics & Audio) ---
async function initSystem() {
document.getElementById("start-overlay").remove();
appendLog("sys", "Systeem opgestart. Engine initialiseren...");
// Verbind Socket.io met de backend
try {
if (typeof io !== 'undefined') {
socket = io();
socket.on('connect', () => appendLog("net", "Verbonden met Signaling Server."));
setupSocketListeners();
} else {
throw new Error("Socket.io library niet geladen.");
}
} catch(e) {
appendLog("err", "Kon signaling server niet bereiken. Draait index.js?");
}
// Start de Graphics
try { initWebGL(); appendLog("sys", "WebGL2 Shader online."); }
catch(e) { appendLog("err", "WebGL faalde: " + e.message); }
// Start de Audio Engine
try {
audioCtx = new (window.AudioContext || window.webkitAudioContext)();
await audioCtx.resume();
osc = audioCtx.createOscillator();
delay = audioCtx.createDelay(1.0);
feedback = audioCtx.createGain();
mainGain = audioCtx.createGain();
if (audioCtx.createStereoPanner) panner = audioCtx.createStereoPanner();
osc.type = 'sawtooth'; delay.delayTime.value = 0.4;
feedback.gain.value = 0.5; mainGain.gain.value = 0.05;
osc.connect(delay); delay.connect(feedback); feedback.connect(delay);
delay.connect(mainGain); osc.connect(mainGain);
if (panner) { mainGain.connect(panner); panner.connect(audioCtx.destination); }
else { mainGain.connect(audioCtx.destination); }
osc.start();
appendLog("sys", "Audio Engine online.");
} catch (e) { appendLog("err", "Audio gedeactiveerd."); }
// Start de render loop
requestAnimationFrame(render);
}
// --- 2. WEBRTC AUTO-SIGNALING ---
async function startP2P(isHost) {
if(!socket) { appendLog("err", "Geen server verbinding mogelijk."); return; }
document.getElementById('btn-host').disabled = true;
document.getElementById('btn-join').disabled = true;
appendLog("rtc", `Aanmelden bij kamer: ${ROOM_ID}...`);
socket.emit('join-room', ROOM_ID);
peerConn = new RTCPeerConnection(rtcConfig);
peerConn.onconnectionstatechange = () => {
if (peerConn.connectionState === 'connected') {
document.getElementById("p2p-status").innerText = "100% DIRECT LINK";
document.getElementById("p2p-status").style.color = "#0f0";
document.querySelector('.panel').style.borderColor = "#0f0";
appendLog("rtc", "P2P Verbinding Succesvol opgebouwd!");
}
};
peerConn.onicecandidate = (e) => {
if (e.candidate) {
socket.emit('signal', { room: ROOM_ID, signal: { type: 'ice-candidate', candidate: e.candidate } });
}
};
if (isHost) {
document.getElementById("p2p-status").innerText = "HOSTING...";
dataChannel = peerConn.createDataChannel("telemetry");
setupDataChannelEvents();
const offer = await peerConn.createOffer();
await peerConn.setLocalDescription(offer);
socket.emit('signal', { room: ROOM_ID, signal: { type: 'offer', sdp: peerConn.localDescription } });
appendLog("rtc", "Offer verzonden. Wachten op peer...");
} else {
document.getElementById("p2p-status").innerText = "JOINING...";
peerConn.ondatachannel = (e) => {
dataChannel = e.channel;
setupDataChannelEvents();
};
appendLog("rtc", "Wachten op host offer via server...");
}
}
function setupSocketListeners() {
socket.on('signal', async (data) => {
const sig = data.signal;
try {
if (sig.type === 'offer') {
appendLog("rtc", "Offer ontvangen. Answer genereren...");
await peerConn.setRemoteDescription(new RTCSessionDescription(sig.sdp));
const answer = await peerConn.createAnswer();
await peerConn.setLocalDescription(answer);
socket.emit('signal', { room: ROOM_ID, signal: { type: 'answer', sdp: peerConn.localDescription } });
}
else if (sig.type === 'answer') {
appendLog("rtc", "Answer ontvangen. Connectie stabiliseren...");
await peerConn.setRemoteDescription(new RTCSessionDescription(sig.sdp));
}
else if (sig.type === 'ice-candidate') {
await peerConn.addIceCandidate(new RTCIceCandidate(sig.candidate));
}
} catch(e) {
appendLog("err", "Signaling fout: " + e.message);
}
});
}
function setupDataChannelEvents() {
dataChannel.onopen = () => appendLog("rtc", "DataKanaal OPEN. Start synchronisatie.");
dataChannel.onmessage = (e) => {
try {
const data = JSON.parse(e.data);
if(data.a !== undefined) {
document.getElementById("ang-slider").value = data.a;
angle = data.a;
}
} catch(err) {}
};
}
// --- 3. WEBGL HEXAGRAM SHADER ---
function initWebGL() {
gl = canvas.getContext("webgl2");
if (!gl) throw new Error("WebGL2 not supported");
const vs = `#version 300 es\nin vec2 pos; void main(){ gl_Position=vec4(pos,0.,1.); }`;
const fs = `#version 300 es
precision highp float;
uniform float u_time, u_angle, u_stress; uniform vec2 u_res;
out vec4 fragColor;
#define GRID_SCALE 9.0
float hash(vec2 p) { return fract(sin(dot(p, vec2(12.98, 78.23))) * 43758.54); }
vec4 hexGrid(vec2 uv) {
vec2 r = vec2(1.0, 1.7320508), h = r * 0.5;
vec2 a = mod(uv, r) - h, b = mod(uv - h, r) - h;
vec2 localPos = dot(a, a) < dot(b, b) ? a : b;
return vec4(localPos, uv - localPos);
}
float hexDist(vec2 p) {
p = abs(p); float d = dot(p, normalize(vec2(1.0, 1.7320508)));
return max(d, p.x);
}
void main() {
vec2 uv = (gl_FragCoord.xy - 0.5 * u_res.xy) / u_res.y;
uv *= GRID_SCALE;
vec4 gridData = hexGrid(uv);
vec2 localPos = gridData.xy; vec2 cellID = gridData.zw;
float dist = hexDist(localPos);
float outline = smoothstep(0.48, 0.45, dist) - smoothstep(0.45, 0.42, dist);
// System Angle drives the flux wave through the grid
float waveOffset = sin(length(cellID) * 0.5 - u_time * 2.0 + u_angle * 0.05);
float activeState = step(0.5, hash(cellID + floor(u_time * 1.5)) + waveOffset * u_stress);
float drawAreaMask = smoothstep(0.45, 0.42, dist);
float ny = (localPos.y + 0.4) / 0.8;
float lineIndex = floor(ny * 6.0);
float lineFract = fract(ny * 6.0);
int hexValue = int(hash(cellID * 1.61) * 64.0);
int bit = (hexValue >> int(lineIndex)) & 1;
float lineThickness = smoothstep(0.15, 0.25, lineFract) * smoothstep(0.85, 0.75, lineFract);
float centerGap = smoothstep(0.04, 0.06, abs(localPos.x));
float isYin = float(1 - bit), isYang = float(bit);
float pattern = lineThickness * (isYang + isYin * centerGap);
pattern *= step(0.0, ny) * step(ny, 0.99) * drawAreaMask;
// Color shifts from Cyan to Magenta based on stress
vec3 baseColor = mix(vec3(0.0, 0.6, 1.0), vec3(1.0, 0.0, 0.8), u_stress);
baseColor.g += hash(cellID) * 0.2;
vec3 finalColor = vec3(0.05, 0.1, 0.2) * outline;
if (activeState > 0.0) {
finalColor += baseColor * pattern * 1.5;
finalColor += baseColor * drawAreaMask * 0.15;
}
// Glitch effect on high stress
if(hash(uv*u_time) < u_stress*0.02) finalColor = vec3(1.0);
fragColor = vec4(finalColor, 1.0);
}`;
const prg = gl.createProgram();
const createS = (t, s) => {
const sh = gl.createShader(t); gl.shaderSource(sh, s); gl.compileShader(sh);
if (!gl.getShaderParameter(sh, gl.COMPILE_STATUS)) throw new Error(gl.getShaderInfoLog(sh));
return sh;
};
gl.attachShader(prg, createS(gl.VERTEX_SHADER, vs));
gl.attachShader(prg, createS(gl.FRAGMENT_SHADER, fs));
gl.linkProgram(prg); gl.useProgram(prg);
uLoc = { t: gl.getUniformLocation(prg, "u_time"), r: gl.getUniformLocation(prg, "u_res"), a: gl.getUniformLocation(prg, "u_angle"), s: gl.getUniformLocation(prg, "u_stress") };
gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer());
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1,-1, 1,-1, -1,1, 1,1]), gl.STATIC_DRAW);
const pLoc = gl.getAttribLocation(prg, "pos");
gl.enableVertexAttribArray(pLoc); gl.vertexAttribPointer(pLoc, 2, gl.FLOAT, false, 0, 0);
window.addEventListener('resize', () => {
canvas.width = window.innerWidth; canvas.height = window.innerHeight;
gl.viewport(0, 0, canvas.width, canvas.height);
});
window.dispatchEvent(new Event('resize'));
}
// --- 4. RENDER LOOP ---
function render(ms) {
if(!gl) return;
angle = parseFloat(document.getElementById("ang-slider").value);
let stress = Math.max(0, 1.0 - Math.abs(angle - 42.0) / 25.0); // Hoogste stress rond 42 graden
let r = Math.floor(stress * 255), g = Math.floor((1.0 - stress) * 255), b = 255;
document.documentElement.style.setProperty('--neon', `rgb(${r},${g},${b})`);
document.documentElement.style.setProperty('--neon-glow', `rgba(${r},${g},${b},0.3)`);
document.getElementById("ang-disp").innerText = angle.toFixed(2);
let index = Math.floor((angle / 360) * hexSequence.length);
if (index >= hexSequence.length) index = hexSequence.length - 1;
if (index < 0) index = 0;
let currentHex = hexSequence[index];
document.getElementById("hex-disp").innerText = `${currentHex.sym} #${currentHex.id} ${currentHex.name}`;
try {
if(audioCtx && audioCtx.state === 'running' && osc) {
osc.frequency.setTargetAtTime(110 + angle, audioCtx.currentTime, 0.1);
feedback.gain.setTargetAtTime(0.3 + stress * 0.4, audioCtx.currentTime, 0.1);
if (panner) panner.pan.setTargetAtTime(Math.max(-1, Math.min(1, (angle / 180) - 1.0)), audioCtx.currentTime, 0.1);
}
} catch(e) {}
// P2P Sync (Maximaal 10x per seconde verzenden)
if(dataChannel && dataChannel.readyState === "open" && (ms - lastP2PSend > 100)) {
dataChannel.send(JSON.stringify({ a: angle }));
lastP2PSend = ms;
}
gl.uniform1f(uLoc.t, ms * 0.001);
gl.uniform2f(uLoc.r, canvas.width, canvas.height);
gl.uniform1f(uLoc.a, angle);
gl.uniform1f(uLoc.s, stress);
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
requestAnimationFrame(render);
}
// Hulpfunctie voor UI logs
function appendLog(type, msg) {
const log = document.getElementById("channel-log");
const t = new Date().toLocaleTimeString('nl-NL', { hour12: false });
let color = "var(--neon)";
if (type === "err") color = "#f00";
if (type === "sys") color = "#0af";
log.innerHTML += `[${t}] [${type}] ${msg}`;
log.scrollTop = log.scrollHeight;
}
BtS Meeting No.: 138
Theme: English International Speech and Table Topics Contest
Date: 14 January 2022
Follow us on YouTube @ bit.ly/3oFQhQ9
Please also connect with us on facebook
TGIF @ www.facebook.com/groups/TGIFCT/
Born to Shine @ www.facebook.com/groups/BornToShineTM