$ spctl -a -v bin/SimpleShell.app bin/SimpleShell.app: accepted source=Notarized Developer ID
I was searching for a good quality but simple free open terminal for MacOS and I couldn’t really find what I was looking for interface wise (I used to use iTerm for a long time but it started getting more and more bloated and laggy on me – using up a lot of system power on battery and I don’t want all that AI stuff baked in).
I started a project earlier this year but got stuck on it because I was trying to implement a basic ANSI parser which was a mistake on my part. I didn’t realize how incredibly complicated that finite state machine would be, esp with bash and ansi apps sending complicated instructions into the machine! I then asked Google AI for help and it pointed me to a GitHub page that hosted a libvterm (from vim) that was compatible with Objective-C.
I’ve been working on this app non-stop for the last 5 days now and I only have the basics covered, I didn’t realize how much code it took just to make a basic text processing input/output app but I think this is one of my more complicated code bases (possibly TurnTable is the other app of mine that might be more complicated but that one is in Swift).
I still have a lot more work on my todo list for and I will continue development on it now that I got ANSI parsing to work, the rest is just mainly ViewController and functionality features. I targeted it for the bash shell so I don’t know if it works with other shells but this is just my first release post about it.
Feature List
Simple Clean Minimal Functional Design
Window Colors / Opacity / Blur
Selector / Highlighter Separator Character List (Automation)
Auto Copy On Selection (Automation)
Single-Line Paste Manual Enter (Safety)
Multi-Line Paste Prevention Protection (Safety)
Huge-Line Paste Limitation Protection (Safety)
Multi-Window / Multi-Tab
Left Aligned Tab Titles With Monospace Font (Readability)
Scriptable Standard Window And Tab Title Text
Scriptable Dynamic Shell Prompt Prefix (Found No Where Else!)
Always Visible Command Line Prompt (Found No Where Else!)
Live System Information Stats Bar
Separated Open / Close Tab Buttons To Reduce Accidental Closures
Multi-Tab Window Detection To Reduce Accidental Closures
Smooth Scroll Locking
Clear Console Command
Pre-Coded Hot Keys
Regular Expression Search
Basic Font Colors
Dock Icon!!
Limitation List
Tabs Can’t Be Transferred To Other Windows
User Beware – This is still a brand new framework and there may be bugs (or at the very least incompatibilities)!
ebtables -t nat -A PREROUTING -i wifi+ -p IPv4 --ip-proto udp --ip-sport 67 -j DROP
~
[kmod-nft-bridge]
table bridge ethernet {
chain PREROUTING {
type filter hook prerouting priority filter; policy accept;
iifname "wifi*" arp operation reply arp saddr ether != 00:11:22:33:44:00 arp saddr ip 192.168.1.1 counter drop
iifname "wifi*" ip protocol udp udp sport 67 counter drop
}
}
~
Note: Most of these commands won’t work on UAP-U7-PRO APs I believe due to hardware based frame/packet routing/forwarding – I have since enabled arp-proxy and dhcp-snooping in the UI network controller application, however, I don’t see them working either, possibly because I am running a third-party gateway device. I have finally enabled client-isolation, which as tested, solves the ARP and DHCP attacks completely and forces client-to-client communication through the router instead for even further filtering!
I have first since used a couple web based AI systems for different specific tech things and they are pretty useful if you do the extra work to verify and modify what they are telling you. I’ve found that Google Gemini AI is really good a general tech questions and configuration items (with looking it over and understanding it and modifying it of course for your specific needs) and Claude Sonnet AI is really amazing at verifying that your code is correct and other more in-depth programming related tasks (for example, memory allocation and pointer handling and file descriptor tracking).
I’ve been using these systems lightly whenever I get stuck and they are able to find the exact code snippets I was looking for to complete the rest of my projects!
Note: It’s a shame that AI resources are being used on social or political issues rather than solving technology and scientific issues to help progress humanity. I’m still amazed that I was able to feed a 1000 lines of C code to Claude as a test and it was able to determine the components purposes and the network proxy applications of it all…
Google AI seems a little more friendly and personable whereas Claude is more on task and professional ha 🙂
I wanted to eventually experiment with using the AES hardware instruction but for the ARM architecture because there are ways to turn block ciphers into stream ciphers for future usage. There appears to be a C header include file that exists on both Mac and Ubuntu (arm_neon.h) and you can compile this small C program file with standard gcc options (no special arguments needed). The hardware instruction method names appear very cryptic, however, they do seem to work when I tested the hex output against other sites!
Thanks to Google’s AI code snippets, I was able to finally implement multiple threads all reading from a singular tun interface as well as each thread performing larger batch reads/writes in one singular syscall (up to 65536 bytes per call)! Here are the parameters (IFF_MULTI_QUEUE | IFF_VNET_HDR) and calls you need to set to get it:
So a little while back I upgraded all my lan components to 2.5gbps and I recently upgraded my wan to 1.5gbps and I wanted to tune up both the VPN solution I had previously made as well as the long since passed Proxy solution. The proxy solution, which is essentially a “Monkey-in-the-Middle” proxy on behalf of all network clients (no TUN interface read/writes are required) but the down side is managing thousands of client based UDP/TCP socket connections and firewall states and file descriptors and memory allocs. On a side note though, as a long time select caller, I finally learnt how to use poll as a better replacement.
With the VPN solution, I like and prefer the clean routing setup, however, I was only able to achieve ~900mbps whereas with the Proxy solution, it’s all pure sockets only where I am able to get ~1300mbps!
I wanted to retest what the performance would be of the MITM Proxy network solution over WiFi 6GHz@2400mbps and I was able to hit pretty fast VPN-style speeds over the network! I will have to retest to see how the VPN solution performs, however, I am trying to explore how multiple bulk IP packets can be read/written to/from the TUN interface in one singular syscall or being able to process larger size packet data before they get broken up by the interface MTU in the Linux Kernel… IFF_VNET_HDR / IFF_MULTI_QUEUE
The kick.com live stream video experience on the web is not the best overall, it seems to constantly lose track of a previously buffered section of the live stream and then sends you to the live portion but mine also gets stuck on reconnecting again and remains frozen until a manual refresh! I tried to write a series of hacky javascript modifications to help solve the following issues:
Always show the bottom video controls bar on the live stream video
Always set the volume level to 100% instead of the continually defaulted 50%
Accepts a basic timestamp parameter to seek to in a live stream video
Keeps track of your latest buffered video seek position
Auto reseeks to the last known tracked timestamp if the buffered video jumps forward to live stream and auto reloads the page with the timestamp parameter if the stream connection becomes frozen
// ==UserScript==
// @name klol
// @namespace http://tampermonkey.net/
// @version 2026-08-19
// @description try to take over the world!
// @author You
// @match https://kick.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=kick.com
// @grant none
// @noframes
// ==/UserScript==
(function() {
'use strict';
var murl = location.href;
var wait = 5;
var redo = 0;
function mmov() {
var elem = document.getElementsByTagName("video");
if (elem.length > 0) {
const mous = new MouseEvent("mousemove", { bubbles:true, cancelable:true, view:window });
elem[0].dispatchEvent(mous);
}
setTimeout(mmov, 0.91 * 1000);
}
setTimeout(mmov, 0.91 * 1000);
function msec(inpt) {
var info = inpt.split(":");
if (info.length == 3) {
return ((parseInt(info[0]) * 3600) + (parseInt(info[1]) * 60) + parseInt(info[2]));
}
return 0;
}
function mbuf(objc, time) {
var left = new KeyboardEvent("keydown", { bubbles:true, cancelable:true, keyCode:37, which:37, key:"ArrowLeft", code:"ArrowLeft" });
document.dispatchEvent(left);
objc.currentTime = time;
}
var r = -1;
var d = -2;
function mtxt() {
var s = location.href.replace(/\?.*$/mig, "");
var l = document.getElementsByClassName("tabular-nums");
if ((l.length > 0) && (l[0].innerText.match(/^[0-9]*:[0-9]*:[0-9]*$/mig))) {
var t = l[0].innerText;
var u = msec(t);
var c = document.getElementById("channel-content");
if (c) {
var o = c.getElementsByClassName("min");
if (o.length > 0) {
var q = document.querySelector("video");
var w = document.getElementById("time");
var z = document.querySelectorAll('[role="slider"]');
if (!w) {
o[0].innerHTML = ("<span style='font-family:Monaco;'><span id='stop' style='display:none;'></span><span id='last' style='display:none;'>0</span> <a href='" + s + "'><b><---></b></a> <a href='javascript:void(0);' onclick='var o = document.getElementById(\"stop\"); var v = document.querySelector(\"video\"); if (o.innerText == \"\") { o.innerText = \"stop\"; v.pause(); } else { v.play(); o.innerText = \"\"; }'><span id='secs'>[X]</span></a> <span id='time'>" + t + "</span> </span>" + o[0].innerHTML);
} else if (z.length > 1) {
if (murl.includes("?t=")) {
var p = (parseFloat(murl.replace(/^.*t=/mig, "")) - 5.0);
console.log(" TIME " + q.readyState + " p:" + p);
mbuf(q, p);
murl = "";
}
var stop = document.getElementById("stop");
if ((q.readyState != 4) && (stop.innerText == "")) {
console.log(" LOAD " + q.readyState + " r:" + r);
if (wait > 0) {
wait -= 1;
} else {
if (r > 15) {
location.href = (s + "?t=" + r);
} else {
location.href = s;
}
stop.innerText = "x";
}
}
var last = document.getElementById("last");
var g = parseFloat(z[1].parentNode.style.left.replace(/[^0-9.]/mig, " "));
var f = parseInt(u / ((g + 0.1) / 100));
var e = parseInt(u + ((f - u) * 0.75));
var h = parseInt(last.innerText);
var x = parseInt(q.currentTime);
if ((r > 15) && ((x < 15) || (redo > 0))) {
if (x < r) {
console.log(" BACK " + q.readyState + " w:" + w.innerText + " x:" + x + " u:" + u + " h:" + h + " e:" + e + " f:" + f + " g:" + g + " r:" + r);
mbuf(q, r);
}
if (redo > 0) { redo -= 1; }
} else if ((r < 0) || (u < h)) {
var y = document.getElementById("secs");
if ((x > 15) && (Math.abs(x - d) > 15)) {
y.style.color = "#31e531";
y.innerText = (" [" + x + "] ");
r = x; d = -9;
last.innerText = e;
} else if (d > -5) {
y.style.color = "#e95555";
y.innerText = (" [" + x + "|" + u + "] ");
r = -9; d = x;
last.innerText = "0";
}
w.innerText = t;
} else if (r > 15) {
console.log(" KICK " + q.readyState + " w:" + w.innerText + " x:" + x + " u:" + u + " h:" + h + " e:" + e + " f:" + f + " g:" + g + " r:" + r);
mbuf(q, r);
redo = 5;
}
}
}
}
}
setTimeout(mtxt, 1.91 * 1000);
}
setTimeout(mtxt, 1.91 * 1000);
function maud() {
var volu = document.querySelector("video");
if (volu) { volu.volume = 1; }
setTimeout(maud, 3.91 * 1000);
}
setTimeout(maud, 3.91 * 1000);
})();
When reading packets or network data from a tunnel interface, the order in which they are read does matter as they can impact connectionless protocols and also cause stateful protocols to spend time re-ordering data! There were three techniques that I tried implementing to solve this issue:
Map a packet address to a thread index during the entire time of every connection state
Index and order every packet read by number and wait to write them out in the same sequence
Lock and time and order each threaded process just like many pistons firing inside of an engine block
One other observation I noticed is speed tests may seem lower which I believe is because of all the extra inner header data being prepended to the buffers in addition to the outer IPv4 + TCP headers:
Added note: Making a VPN-style MITM Proxy service which handles thousands of network states and file descriptors is all about connection management and thread management!
Final note: Building these solutions on top of TCP allows for larger payloads, ordered delivery, auto keepalives, and connection management – full size MTU!
Please help me start a petition to Apple to bring back smaller sized phones with a pro screen and a flat metal ribbon which wraps the curved glass front and back like a beautiful diamond ring design should be! The iPhone 4S was soo close, all it needed was a full AOD screen with curved corners and edges…
So after spending a few years working first on a encrypted proxy solution and then moving to a encrypted tunnel solution, I’ve carried forward this highly modified version of the (ARCF) RC4 stream cipher, trying to tune it up and make improvements to it over time. This latest version includes the following features over the original version.
ARCF [DROP-INIT-XCTR-XKEY-XCBC-KSMG-HASH] MODS
Extended key state generation algorithm to shuffle and drop the first 768-bytes (DROP)
Enhanced KSGA to incorporate and weight both the secret key as well as a 256-bit initialization vector (INIT)
Added IV can also include a 40-bit increasing counter to help prevent replay attacks (XCTR)
The key state itself is never directly used but instead only the XOR of two other key state byte index values (XKEY)
Core crypto allows for Cipher Byte Chaining which will XOR the last output byte with the next input byte (XCBC)
Core crypto loop also mixes in the IV and the CBC byte values back into the key state (KSMG)
The IV is then encrypted by the unique key state to provide a trailing 256-bit pseudo hash integrity tag checksum (HASH)