Tedium on Waking Protest Songs https://jessewellesworld.com/tedium-on-waking-protest-songs/
Search
8 results for “tedi”
-
ILO Convention 193: a global floor for platform work
In Latin America and the Caribbean, platform work is growing in a labour market already marked by informality. A UNDP study (Mariana Viollaz, 2025) defines gig work as short-term work, paid per task and often facilitated by digital platforms. These jobs offer flexibility and income, and serve as a gateway
https://www.tedic.org/en/ilo-convention-193-a-global-floor-for-platform-work/
-
TEDIC: Derechos digitales y feminismos hacker
Nuestra directora Ejecutiva Maricarmen Sequera participará el 16/10/2026 a las 16 hs (Arg-Bra) de un taller abierto y comunitario en el marco del ciclo de conversaciones sobre apropiación de tecnologías e interseccionalidades.
Un evento liderado por CLACSO - Grupo de Trabajo de apropiación de tecnologías e intersecci
https://www.tedic.org/tedic-derechos-digitales-y-feminismos-hacker/
-
'Our community needs it': High #HeatingOil prices drive more #Mainers to #WoodBanks for help
Drew Peters
Mon, October 5, 2026"As high heating oil prices put pressure on household budgets, wood banks across Maine are seeing more families turn to firewood to help keep their homes warm.
"At the #MidcoastWoodBank in #TopshamME, volunteers are increasing production to meet the growing demand.
" 'Last year, we did 120 cords. This year, we said we can do 200 cords,' volunteer Nat Bulsifar said.
"For Bulsifar, the hours spent splitting and stacking wood are more than just tedious work.
" 'Our clients need it. Our community needs it,' he said.
"Midcoast Wood Bank Director Rich Gravelin said demand has increased as heating costs reach up to $6 dollars per gallon, a record high according to the Maine Department of Energy Resources.
" 'We're seeing the demand is much higher with the cost of heating being as high as it is right now,' Gravelin said.
"According to state officials, Maine is the most heating oil-dependent state in the country. With just over 50% of residents relying on the expensive fuel source, Gravelin said many families are struggling.
" 'We've had some people who have had unfortunate situations where they have oil heat, but they're perhaps unable to afford oil,' he said.
"The #Midcoast Wood Bank serves #BathME, #WestBathME, #BowdoinME, #BowdoinhamME, #BrunswickME, #HarpswellME, #LisbonME, #TopshamME, and #WoolwichME. Gravelin said they provide emergency firewood bins to each community and allow any family in need to pick up as much as two cords of wood. He said all of their wood is donated by residents as well as local businesses and organizations."
Read more:
https://www.yahoo.com/news/us/articles/community-needs-high-heating-oil-231533446.html#SolarPunkSunday #MainersHelpingMainers
#WinterIsComing #FirewoodBanks
#WoodBanks #HeatingInsecurity #HeatingOil -
I was thinking continuing or forking the work done by the excellent indie.pass to bring a #Micropub mobile app to the stores… But…
Since I have managed to make Plume work on mobile, I’m questioning the need for a native micropub mobile app altogether.This post is created from Plume on my mobile, it works on Vivaldi or Firefox mobile nightly, out of the box.
Publishing and maintaining app stores app have become so tedious, I’m not sure I want to do any of that if I can avoid it.
-
With the rapid development of Artificial Intelligence (AI), the field of programming is undergoing unprecedented change. This has sparked widespread debate: What exactly has AI brought to programmers? Is it an engine driving progress, or a catalyst for skill regression?
The answer isn't black and white; it's a game of efficiency versus dependency, and innovation versus foundation.- The Progress: A Leap in Efficiency and the Dawn of Universal Coding Undoubtedly, AI has brought a massive boost in productivity, which is the most visible form of "progress." Rapid Implementation and Assisted Coding: AI's core value lies in its ability to quickly turn ideas into code. Whether it's generating boilerplate code, writing unit tests, or refactoring, AI handles it instantly. This "co-pilot" experience has exponentially increased development efficiency. Breaking Barriers: This is the most revolutionary change. In the past, programming was a high wall blocking many creative people who didn't know syntax. Now, product managers, designers, and even ordinary users can write runnable programs via natural language interaction. Programming is shifting from a "specialized skill" to a "general capability," unlocking immense innovative potential.
- The Concern: Programming is More Than Just Code However, the other side of the coin cannot be ignored. When code becomes readily available, we risk overlooking the deeper value behind programming. Programming ≠ Writing Code; It is Software Engineering: Many mistake programming for just writing snippets that run. But true programming is Software Engineering—it involves architecture design, module decoupling, maintainability, scalability, and team collaboration standards. AI can write beautiful functions, but it struggles to grasp the macro architecture of a massive system. If programmers focus only on local code generation while ignoring the big picture, they may end up building a fragile "house of cards." The Gap in Algorithmic Logic and Fundamentals: Algorithms and data structures are the soul of a program. While AI can provide implementations, if the user doesn't understand the underlying logic (like time and space complexity), they can't judge if it's the optimal solution. More dangerously, if new developers rely entirely on AI, leading to a cognitive gap in computer fundamentals (like memory management or concurrency models), we will be helpless when facing deep bugs or performance bottlenecks that AI cannot solve.
- Conclusion: Master the Tool, Return to the Essence The impact of AI ultimately depends on the user. For the strong, AI is a lever. They use it to handle tedious implementation, freeing up energy to dive deeper into software engineering architecture and algorithmic logic. For them, it is significant progress. For the weak, AI is a crutch. If they are satisfied with "it just works" and give up exploring underlying principles, this is a terrifying regression. The elite programmers of the future won't be those who memorize the most syntax, but those with a solid foundation in software engineering, a deep understanding of algorithms, and the ability to command AI for efficient execution. We should neither reject nor blindly follow AI. Maintain respect for the fundamentals, and let AI be the sword in your hand, not the shackles on your mind.
#ai #productivity #programming #softwaredevelopment #software #coding #development #engineering #inclusive #community
What has AI brought to programmers? Is it progress or regression? -
I wanted to make VSCodium prompt me for my YubiKey PIN when I do a git push. It “should” be easy, right? It works for you out of the box, after all. But that’s because you’re not as security-conscious as I am. 😉
I have a YubiKey that holds my SSH key for GitLab. It requires a PIN to use, and I have to enter it when I run git push on the command-line. But VSCodium support was missing. And it all goes back to the fact that the YubiKey holds my SSH key more securely than any other option.
Quick aside: I’m rather active in #NolaSec, and I’m a huge fan of saying that I can help novice speakers turn ANYTHING they research into at least a 20-minute presentation. In that vein, I did a write-up of this problem after solving. This is a good 30 to 40 minutes of a talk, and I may make that presentation one day. But for now it’s just an article.
There are a lot of moving parts at play in the scenario.
* A bug in VSCode
* A million articles with outdated recommendations
* Multiple graphical ssh-askpass tools already installed on my system
* A bug in the graphical ssh-askpass tool I chose
* Wayland’s security model
* A sideways workaroundHonestly, without VSCode’s naïve behavior causing the bug, I never would have gone down this rabbit hole. But being forced to go to a terminal window and manually git push every time becamse tedious; an extra step in a world where I prefer to automate away the boring parts of work.
So I found a good graphical ssh-askpass program to run that was already installed on my system—there were four. Then I identified the problem causing a Wayland pop-up every time it ran. And finally created the workaround with the help of GNOME-Shell’s lookingglass (steps not included in the article for brevity).
Read my full solution in my article.
#VSCode #YubiKey #SSH #Linux #LinuxDesktop #YearOfTheLinuxDesktop
-
Why did the median look fine while the tail looked like a different machine?
I spent the first two days of a small measurement project convinced I had a slow code path. The median request landed in a tight cluster, the tail sat an order of magnitude above it, and the tail moved depending on which hour I sampled. So what happens when you average those two clusters into one number? You get a statistic that describes neither of them, and then you optimize the wrong thing.My first ledger recorded exactly one value per request: total wall time from "start" to "response fully read". That single number mixed four phases together — name resolution, TCP connect, TLS handshake, and the server actually producing bytes. Cold infrastructure inflates the first three, while my own code inflates the fourth. Separating them took about forty lines, and it changed the entire conclusion.
What does a single duration number actually hide?
Before reaching for a profiler, ask which phase you are measuring, because a profiler will not answer a network question. Here is the split I started recording for every attempt:connect—socket.create_connectionreturning.tls— the handshake finishing on top of that socket.send— the last request byte leaving my machine.ttfb— the first response byte arriving.total— the last byte arriving, plus the body size.
If
ttfbdominates whileconnectstays flat, the endpoint is slow to think. Ifconnectandtlsjump together whilettfbstays flat, nothing is slow — something was asleep, and you measured the wake-up. Those two diagnoses lead to completely different fixes, which is exactly why the aggregate number was worthless to me.The quick triage: one
curlcall, five timestamps
Before writing any Python, I confirmed the split with a single command.curlalready records the phases, and this format string is the fastest way to see whether your tail is network or compute:curl -sS -o /tmp/body.bin \
-w 'dns=%{time_namelookup} connect=%{time_connect} tls=%{time_appconnect} ttfb=%{time_starttransfer} total=%{time_total} bytes=%{size_download}\n' \
your-endpoint.example/healthRun it twice in a row and compare the two lines instead of reading them once. A large gap between the first and second invocation is the clearest cold-start signal a shell can give you, and it costs two seconds to check. Remember that
time_appconnectis zero on plain HTTP, so do not read that zero as "TLS was instant".A probe that keeps the phases apart
Here is the artifact I ended up running in a loop. It is standard library only, it writes one JSON object per attempt, and it refuses to collapse the result into one duration.# probe.py — phase-separated latency ledger
import json, socket, ssl, sys, time
from urllib.parse import urlparsedef probe(url: str, timeout: float = 15.0) -> dict:
u = urlparse(url)
host = u.hostname
port = u.port or (443 if u.scheme == "https" else 80)
path = u.path or "/"
rec = {"ts": time.time(), "url": url, "ok": False}t0 = time.perf_counter()
try:
raw = socket.create_connection((host, port), timeout=timeout)
except OSError as e:
rec["error"] = f"connect:{type(e).__name__}"
rec["total_s"] = round(time.perf_counter() - t0, 4)
return rec
rec["connect_s"] = round(time.perf_counter() - t0, 4)sock = (ssl.create_default_context().wrap_socket(raw, server_hostname=host)
if u.scheme == "https" else raw)
rec["tls_s"] = round(time.perf_counter() - t0, 4)sock.sendall((
f"GET {path} HTTP/1.1\r\nHost: {host}\r\n"
"User-Agent: coldstart-probe/1\r\nAccept: */*\r\n"
"Connection: close\r\n\r\n"
).encode("ascii"))first = sock.recv(1)
rec["ttfb_s"] = round(time.perf_counter() - t0, 4)
rec["first_byte"] = first.decode("latin1") if first else Nonebody = 0
while True:
chunk = sock.recv(65536)
if not chunk:
break
body += len(chunk)
sock.close()
rec["body_bytes_after_first"] = body
rec["total_s"] = round(time.perf_counter() - t0, 4)
rec["ok"] = True
return recif __name__ == "__main__":
with open(sys.argv[2], "a", buffering=1) as fh:
fh.write(json.dumps(probe(sys.argv[1])) + "\n")Invoke it as
python probe.py https://your-endpoint.example/health ledger.jsonl, then watch the file grow withtail -f ledger.jsonl. Thebuffering=1line matters more than it looks: a killed loop keeps every observation it already made, which is a lesson I learned after an interrupted process left me with an empty file.What broke during the first six hours
- My probe became part of the load. Polling once per second added a request per second, and the endpoint behaved differently under that traffic.
- Retries polluted the ledger. A retried request is not the same sample as a first attempt, and I had not tagged which was which.
- The loop had no stop condition. When the endpoint stopped answering, I collected hours of identical failures without noticing.
- A
200in the log proved nothing about the payload. Body byte count, not status code, told me whether a response was complete.
Is a warm gate better than a bigger sample?
Yes, when your question is about steady-state behaviour, because a gate removes variance instead of averaging over it. Before timing anything, I now run this gate and record how many attempts it consumed:def warm_gate(url, threshold_s=1.0, attempts=8, pause_s=2.0):
for i in range(attempts):
r = probe(url)
if r.get("ok") and r["ttfb_s"] <= threshold_s:
return i, r # i == 0 means it was already warm
time.sleep(pause_s)
raise SystemExit(f"no warm response in {attempts} attempts")Report that attempt count next to your timing results, because it is a result too. If the gate needs six attempts on every single run, the endpoint is re-initializing, and any steady-state number is valid only for the short window that follows the gate. A warm endpoint is not a fast endpoint; it is an endpoint whose cold phase is no longer inside your sample.
Where free model access and a free server fit into this workflow
Disclosure: This article was prepared as part of MonkeyCode's product outreach.Two parts of this loop are tedious rather than difficult, and that is where I leaned on MonkeyCode. Its free model access handled the glue work: generating probe variants for other runtimes, drafting the JSONL summarizer, and re-reading my
curlformat string every time I misread a zero. Its free server option let the 48-hour collection loop run somewhere other than my laptop, which mattered because my laptop sleeps and a sleeping collector produces gaps indistinguishable from an outage.What it did not do is make the measurement trustworthy on its own. I am quoting no quotas, hardware, model names, or duration limits here, because I have not verified them and the claims above are operator-supplied availability claims. Treat any shared endpoint as a best-effort instrument, confirm its behaviour with the probe above, and keep the conclusion you draw proportionate to that uncertainty.
Decision table: is a shared endpoint the right instrument?
Question you are askingShared/free endpoint OK?Why"Is my parser correct?"YesCorrectness does not depend on latency or isolation."Is my unit test green?"YesKeep it hermetic and offline anyway."What is my p95 under load?"NoYou will measure neighbours, not your code."Did my change make this faster?"Only with a warm gate and paired runsCold starts dominate the difference."Will this pass a latency SLA?"NoNo SLA on the instrument means no SLA in the result."Can I run a long collection loop?"Yes, if the job is idempotent and restartableDuration is what idle machines are good at.What I would repeat, and what I would change
- Repeat: record
connect,tls,ttfb, andtotalseparately from the very first request. - Repeat: append to JSONL synchronously so a crash keeps the evidence.
- Repeat: write down the stop condition before starting the loop, not after it ends.
- Change: log whether each attempt followed an idle gap, since that column is what explained the split.
- Change: run a paired comparison with alternating targets instead of two sequential campaigns.
Who should not use this approach
Skip it if your question concerns production capacity, hard real-time behaviour, or data under a regulated policy. Skip it if you need a number defensible in a contract, because a shared best-effort endpoint cannot supply one. And skip the long loop entirely when a two-minute paired run answers your question, since duration is not the same thing as rigour.The takeaway I keep relearning
A benchmark is only as honest as its instrument, and an endpoint that sleeps at night is an instrument with a bad habit. The fix was not a faster machine or a larger sample; it was refusing to collapse four phases into one number and refusing to average two different populations together. Keep the ledger, draw the histogram before you compute the mean, and you will catch the cold start before it turns into a conclusion. If you run the probe and your tail splits in two, that histogram is worth far more than an average, so keep it around.#performance #python #debugging #devtools #software #coding #development #engineering #inclusive #community
48-Hour Field Notes: I Benchmarked a Cold Endpoint and Called It Compute