Skip to main content


uspol

Oh right, the debate...

I think I'm gonna step away from my feed for a bit. I just don't have the mental bandwidth to deal with it atm.

Unknown parent

Jonathan Lamothe
@Tobias I could have, but it was easier to just temporarily disengage.


Did #Haskell at some point make defining a module without an explicit list of names to be exported illegal? It's yelling at me when I try to do this now.
in reply to Jonathan Lamothe

I noticed a while ago that they added a warning for that but it would still compile, but I wouldn't be completely surprised if it were an error now.
It's actually annoying in ghci because the warning gets repeated every time you define something.
in reply to Jeremy List

@Jeremy List No, it's still just a warning. I was using the --pedantic flag though (which turns warnings into errors).

Jonathan Lamothe reshared this.


🤔🤔🤔🤔

About a year ago, my wife took a road trip to Seattle. I signed up for WA state's "GoodToGo" app to pay for toll usage. I get a monthly statement now about our $0 balance as we don't frequent WA.

I just logged in. And Google alerted me that the password I used had recently been found in a data breach.

🤔🤔🤔🤔

It's a unique, 32-character random password stored in #1Password. I don't use it anywhere else...

Anyone want to tell the state of WA their toll payment system has been breached?

reshared this


Jonathan Lamothe reshared this.


Oh the irony that Meta’s Threads out of all services has a robots.txt that just blank disallows everything 😅
User-agent: *<br>Disallow: /<br>

threads.net/robots.txt

reshared this


Jonathan Lamothe reshared this.


ive said it before and I'll say it again

we call it AdBlocking because that's what most people use it for

but it's really just a way to control what elements do and do not display on all websites or some

screen reader users often need to block some elements that are NOT ads to make a site functional (although often ads as well)

Banning ad blockers is not just a privacy concern or a quality of life concern or an Internet safety from malicious ads concern.

It's an accessibility concern

reshared this


Jonathan Lamothe reshared this.


Finally, USB-C is the standard everything uses.

my 10-year-old Kindle: But you still have a bunch of USB micro-B cables.

my bike light: And hang onto any USB mini-B cables.

the printer that still uses USB-B:
Hey guys!

reshared this

in reply to Radical Edward :hackers_town:

I have recently bought a bunch of different USBC to usb b (regular, mini and micro) with varying success.

I still have my cables, I I'm hoping to find the adapters that work flawlessly so I can put that one box in long term storage. I will never actually throw them out, I have learned that lesson. Never throw out unused cables. its a trap.

in reply to Radical Edward :hackers_town:

no worries!. Just as soon as everything you own heads into USB-C phones will come standard with USB-D.


Jonathan Lamothe reshared this.


If you give me 'either you stop interacting with them or I block you' ultimatums because you dislike my friends, I'm going to get the block in there first.
Entitled weirdo behaviour

Jonathan Lamothe reshared this.

in reply to tiddy roosevelt

I do not understand people's expectation that they get to control how you use the internet and who you speak to.
You've got plenty of ways to mute, block, and filter your timeline to curate it for yourself. Trying to change the behaviour of other people to suit your tastes or inject your personal beefs is overstepping

Jonathan Lamothe reshared this.

in reply to tiddy roosevelt

Totally fucking weird. The implication is that you own other people on the Internet. How would that even work? Proper daft.

Jonathan Lamothe reshared this.


~ Let's make RAM at home, thread #2 ~

In this part:
* Power [source] struggles,
* B-H curve plotting [attempts],
* How [not] to make a magnetic core for memory
* Working "made at home, no rare components needed" DIY magnetic core memory element

🧵

#2

Jonathan Lamothe reshared this.

in reply to Nina Kalinina

Recap of the previous episode:

* We are trying to make a DIY computer random access memory. It doesn't have to be awesome, but it has to work and it has to be somewhat "made at home".
* It is quite possible to use DIY valves and capacitors to store bits, but it is expensive and potentially dangerous.
* So we're exploring obsolete memory technologies to see if there is anything cool we've lost/forgotten!
* One such type of memory, magnetic core memory, used to be the dominant type of RAM in computers until 70s.
* The idea is simple: the data is stored as magnetic field in the magnetic materials (such as ferrites). A magnetic ring can be magnetized in two directions at will, and a "sense" wire can read the direction of the magnetization.
* We made a simple circuit for driving 1 bit of commercially manufactured core memory.
* We tried to make our own cores from different materials but failed.

Phew... But that was in the previous thread, and this time we had better luck!

in reply to Nina Kalinina

You probably will agree that it is quite hard to improve on the materials when the experimental setup does not allow to test for the properties of said materials 😀

The properties of the DIY cores we want to evaluate are "retentivity" and "coercivity" of a magnetic material. We want material to be "retentive" (B) - storing magnetism after external field is gone, yet we want the material to be "coercive" (H) - changing its magnetic field after being affected by an external magnetic field.

The test setup for this is called "B-H curve plotter" or "B-H core prober". To plot a B-H curve (and learn the properties of our material), we generally need to:

1) Apply known alternating current to the first winding around the core,
2) Measure voltage on the second winding around the core,
3) Integrate the voltage over time and plot it as X-Y chart

And you know what, we're about to hit a major roadblock right with the step one!

in reply to Nina Kalinina

In the last thread I have mentioned that commercially available cores of the late 70s require currents of around 0.5A to switch their magnetization. That does not sound like a lot (1.5V AA battery can sustain this current for 2-3 hours).

But DIY cores are bigger, and they require bigger currents. Ideally, something like 2-3 Amps to get us started. On top of that, low voltages are not very convenient to work with, so we want 5V or even 12V.

12V at 3A means that we are going to dissipate 36 Watts in peak - comparable to a small LED TV, guitar amp or an inkjet printer - over a relatively small load and relatively thin wires.

And oh did I mention it must be alternating current for B-H tests? That means we cannot use our regular lab power source. Most signal generators don't expect currents over ~100mA. Using regular 220V AC from the plug sounds risky. What do we do? What _can_ we do?

in reply to Nina Kalinina

We had a step-down transformer lying around, scavenged from one thing or another. It had 5:1 transformation ratio, so we figured if we use the maximum voltage from the signal generator - 20V in amplitude, from -10V to +10V - we will get somewhat decent -2V to +2V signal from the transformer, and with the same power consumed we should get ~five times more current.

The left winding of the core connected to the signal source, and we're measuring current by measuring voltage on a known resistor - that's X axis.The right winding is connected to RC-integrator, which is what we measure for Y axis.

There is a formula for calculating the parameters of the RC integrator (clever, using passive components to do maths, because our oscilloscope cannot do maths). The only capacitor with the desired properties we had was super tiny, it was quite a challenge to solder.

in reply to Nina Kalinina

We started the test bench in oscilloscope 2 channel mode, and we could clearly see "spikes" up and down in the output winding of the commercially made core that correlated with the waves of the test signal. That means running the AC current through the magnetic core keeps re-magnetizing it in a loop, and we can see it!

Switching the oscilloscope in the X-Y mode, we were hoping to see pretty B-H curve, just like on the Wikipedia page, but the voltage and the current we have are way to low and so the changes are barely registered by our scope.

It seems we cannot avoid investing in the test equipment, after all! Buying a ready-made device would cost us £200 or more, so we will try to build one ourselves.

(When I say "we" it means "my fiancee and me", by the way!)

in reply to Nina Kalinina

Power struggles are not exclusive for AC currents. To control my tiny magnetically programmable and erasable memories, I need a source of current that:
1) Can be adjusted in the range of 0.5-2 amps,
2) Can be turned on for a very short time (it takes the core 1-2 microseconds to fully switch) to reduce average power consumption,
3) Turns on really fast (hundred nanoseconds ideally) so the changes in the voltage caused by the core could be measured reliably.

Last time I used a current source from a 2N2222 transistor that I controlled with Arduino. This transistor can barely stomach 0.5A, and indeed I destroyed two of these by over-current.

This time, as a current source, I wanted to try a salvaged Traco Power source that has a "switch on/off" control pin. As you can see, voltage rises to half the target really fast, but then climbs up to the target voltage for ~50 milliseconds! With this voltage curve, even the commercially manufactured core displays zero "memory" characteristics.

in reply to Nina Kalinina

The AC power source/H-B core prober is in the process of making, but I still wanted to experiment with the cores I have made, as well as with some new designs. For now, I am using an analogue power source, and try to filter out the contact bounce with capacitors. The current from the source goes straight through the core, and the oscilloscope is connected to the second ("sense") winding. It is wonky, but it works as a test bench.

The steel-ferrite winding core I've made last time clearly has wrong qualities. But from what I have seen in reference books and papers, nickel core should possess the desired properties.

"Pure nickel" (as per seller description) I have used last time turned out to be "nickel silver", or 60% copper, 20% nickel and 20% zinc. This time I am moderately confident I have a strip of nickel. I need to make sure that the "core" - the ring - has no air gaps in the ring, otherwise it won't work.

It seems the simplest way to do this is drilling. I cut the ring to the shape with scissors.

in reply to Nina Kalinina

The core? Doesn't work as a memory element, but works as a poor transformer.

This is a good sign. I could add the current, or I could add more turns of wire around the core, and it should improve the magnetic field we generate.

We prepare two test rings - one drilled, and one cold-hammered. I wind two windings of 10 turns each on them, using 0.38mm copper wire for transformers (should be enough for 0.5A).

😢 😢 😢

The windings are shorted. Edges of nickel are too sharp, they scratch the insulation around the copper wires during the winding.

I pack nickel rings in epoxy, and drill the holes in the epoxy. Epoxy is brittle, parts of it fall off immediately. I try to re-wind the cores, but the windings are shorted AGAIN.

😢 😢 😢 😢 😢

in reply to Nina Kalinina

As a last ditch effort, I decide to make a BIGGER nickel ring and SHRINKWRAP IT.

In the hindsight, using some sort of kapton tape probably would have worked better. Having bigger nickel sheets would allow for drilling bigger air gap free ring, too.

But I use what I have. I twist the shrink wrap, and wind 15 turns, two wires.

No shorts, yatta!

in reply to Nina Kalinina

It is not surprising that this magnetic core memory element works. Nickel should have coercivity comparable to ferrite magnets. It has been used as a test medium for original twistor magnetic memory.

But it is also surprising that such a makeshift memory element actually does the job. You can see the difference between "unchanged" magnetic field reads and "changed" magnetic field reads - the voltage changes much slower. With proper filtering and amplifying, it can be reliably used as a memory element.

Switching time is close to 50 microseconds - which is a hundred times worse than commercially made core and its 500 nanoseconds.

But 50 microseconds means we theoretically could switch this core up to 20,000 times per second. Running this (or a similar-made core) at 10 kHz doesn't sound impossible.

This is twice as fast as ENIAC, and about ten times as fast as Mark 1.

</thread>

The experiment isn't over yet! Harder, better, faster, stronger!

🇺🇦 haxadecimal reshared this.

in reply to Nina Kalinina

I have a core memory element from my grandfather hanging on my kitchen wall. This is intensely interesting!
in reply to Nina Kalinina

I experimented with building core rope memory, of the type that uses cores as transformers rather than flipping their magnetization. Originally invented in the 1940s and called "Dimond Ring Memory", after the inventor whose last name was Dimond.
Anyhow, I initially thought I wanted high inductance factor cores, but by trying eight cores of the same size but with different ferrite materials and inductance factors, it turned out that low inductance works much better for this
in reply to Nina Kalinina

I'll try to find my notes. I tested the cores as transformers with single "turn" windings, in other words, just two wires straight throught. I drove one wire with a square wave pulse from a signal.generator, and looked at the other on a scope. Higher inductance made output lower amplitude but stretched over a longer time. In hindsight, I should have expected that.
in reply to 🇺🇦 haxadecimal

@brouhaha It does make sense, yes 🤔 I suppose it's one of those things that "click" only after you try
in reply to Nina Kalinina

Yes! And it was really fun watching the primary and secondary waveforms on the oscilloscope. I mean, I've understood the basics of inductors and transformers for ages, but this was the first time i'd experimented with them "live".
in reply to Nina Kalinina

Wow, seriously cool that you're making such progress with this! It sounds like you're rediscovering knowledge and techniques that are now hard to learn about because there are very few people who remember them and modern descriptions of how the technology worked are simplified. I look forward to your followup experiments!
in reply to Z80 Inside

@raynerlucas thanks! I seriously hope to make something beyond "proof of concept" here.
in reply to Nina Kalinina

Diamond or carbide conical files or reamers are cheap. 😜
in reply to Zimmie

@bob_zim they are, but this sheet of nickel is relatively thin and soft, and crumbles apart far too easily. And they're still likely to stay sharp! I've asked around and been told that it's not uncommon to paint the core before winding exactly for this reason.
in reply to Nina Kalinina

@Nina Kalinina On top of this, that's 500mA per bit. If you want to update a whole octet at once, that's 4A, no?

I mean, I don't think you can typically read/write multiple bits in a ferrite core system simultaneously, but you could do this by interleaving the bits across multiple smaller banks.

in reply to Jonathan Lamothe

@me correct! Well, typical consumption of computers using ferrite core memory was astonishing anyway!
in reply to Nina Kalinina

this is a very interesting and inspiring thread. Now I want to do a smaller version to show my students how ram works
in reply to David Prieto (valerian32)

@d_prieto if you have some serious lab equipment, you can simplify the experiment and literally use a nail!
Though this only explains how some types of RAM work, like MRAM. If you want a DRAM experiment, you can make a test bench with a transistor and capacitor, and for SRAM you need to build a tiny transistor latch. Could be very interesting to compare how all those perform, even on the macro level: DRAM will be fast and low energy, but will require a refresh; SRAM will be expensive because two transistors; MRAM will be slow by comparison but non-volatile.
in reply to Nina Kalinina

I think I'm goimg to start simple with a transistor and a capacitor. They are high schoolers and the concept of memory being a real thing is good enough.
in reply to David Prieto (valerian32)

@d_prieto I'll be happy to see the photos if you'll make any!

Another thing to try is to find something like a 74xx logic in metal body, carefully decap it, and examine it under a magnifying glass - while it's used in a simple circuit to implement an RS trigger. The chip will need to be protected from the light during the operation.

in reply to Nina Kalinina

Mom can we buy some new RAM at microcenter?

No, we have RAM at home.

The RAM at home:

This entry was edited (2 months ago)

Jonathan Lamothe reshared this.


calling them “rubber bullets” or “foam projectiles” is incredibly misleading

they should be considered “rubber coated” at best

the core is still a slug of metal, so all the coating does is reduce the penetrative capability

the trauma inflicted is still arm-, rib- or skull-fracturingly massive

imagine being beaten half to death with a rubber-coated hammer. do you care that it was rubber coated?

reshared this

in reply to 🐟 🦑🐙ptoothfish🐙🦑🐟 Mx. Luna Corbden reshared this.

But see, this way instead of killing you outright, they're just torturing and maiming and mutilating you so it takes YEARS to die, and that way they can say "oopsie" and pretend it's not murder.


math

Trying to wrap my brain around finite fields. I get how one can construct a finite field with an order of a prime number, but I don't get how it works with powers of primes. Everything I try to read on the subject eventually ends up getting into notation that I don't know how to read.

I think I get that a GF(p^n) has something to do with converting the field into a polynomial where all the coefficients are of GF(p), but that's where my understanding starts to fall apart.

Can anyone point me at something that will help me to better understand this?

in reply to Jonathan Lamothe

Happy birthday indeed! I'm sorry I only have a crappy salutation and no help for your math problem 😁

Jonathan Lamothe reshared this.


Ontario politics

Sensitive content

reshared this

in reply to Allusion

Ontario politics
@Allusion Seems on-brand for the current provincial government.
in reply to Jonathan Lamothe

Ontario politics

Sensitive content


in reply to PerryM ✅

like with most of the GOP agenda, it's never about human rights, it's about a minority of men having the right to control everyone else

Jonathan Lamothe reshared this.


Review of "1984" (4 stars): problematic but relevant


A lot to unpack in this book. The lead character (Winston) has some pretty misogynistic tendencies, and there's not a single female character in the book with any depth whatsoever. This can be explained to some extent by the fact that it was written in the 40s, and that Winston has been subject to psychological manipulation essentially since birth.

Problematic elements aside, this provides an interesting dive into the world of psychological warfare, which remains relevant to this day.

Jonathan Lamothe reshared this.


Maddie, Wizard of Installs 🪄 reshared this.


One of the easiest ways to manipulate someone with propaganda is to start with a person who believes themselves immune to propaganda.

Jonathan Lamothe reshared this.


Remember kids:

IRC is free.
IRC is a open standard.
You can run your own IRC server.
IRC doesn't collect data on you and sell it.
You can still moderate your channels via invite, voice, and ban modes.
You can run a server on a 486.
IRC doesn't try to up sell you on "nitro".
IRC doesn't need to make money to make some VC happy.

Unknown parent

Space Hobo
@me Miserable technology, with basically no moderation tooling whatsoever even compared to IRC.
in reply to Elena ``of Valhalla''

@valhalla @me this problem is mostly due to policy, different clients have different default settings for trusting new devices. We do have an active 100+ members end to end encrypted chat for Prav. Occasionally we get encryption problems, but it mostly work when devices don't change too much in the room. The policy problem is not unfixable, we just have to focus and do it. The big problem I see is people starting with bad unmaintained clients and servers and complaining things break.


Okay, I'll admit it. Using #Haskell to talk to an #SQL database is not my favourite thing.

Programming Feed reshared this.

in reply to Boyd Stephen Smith Jr.

@Boyd Stephen Smith Jr. It's not so much the SQL part that's the irritating bit. It's that it doesn't really mesh super well with "the Haskell way of doing things".
in reply to Jonathan Lamothe

@BoydStephenSmithJr understandable. There's always a tension between "pleasant for the Haskeller" and "pleasant for the DBA" (or general SQL knower). We have the same problem at work (we sacrificed our DBA and used flora.pm/packages/@hackage/hpq… and its eDSL)

Jonathan Lamothe reshared this.


if you're disappointed by zelda not getting a sword in her new game might i suggest giving kitsune tails a look because we have a literal disaster sword lesbian in the main cast: kitsunegames.com/kitsunetails
This entry was edited (3 months ago)

reshared this

in reply to :ms_tarot_sword: Sem :ms_tarot_sword:

@r0br0t we try to represent our fans pretty exactly. one of the people who streamed our demo was a purple haired vtuber named yuzu

Jonathan Lamothe reshared this.


So true 🤬

reshared this

in reply to Rebecca

Where do they ask for $20? Here in Toronto, it's always $2.


Jonathan Lamothe reshared this.


So, I'm nearly half way through Tue book and Winston is... problematic.

I don't know how this escaped me on my first read.

(comment on 1984, p. 130)

Jonathan Lamothe reshared this.



Had an optometrist's appointment today. Got confirmation of something I've known for some time: my depth perception sucks.

Sadly, it's not correctable, but it's been like that for as long as I can remember. I've learned to adapt.


Jonathan Lamothe reshared this.


I've read it before but was in a very different place at the time. Want to see if it hits differently this time around.

(comment on 1984)

Jonathan Lamothe reshared this.


Jonathan Lamothe reshared this.


Jonathan Lamothe finished reading Sourcery

Jonathan Lamothe reshared this.



Not sure, but I think the cat may have developed an intolerance to his super expensive prescription food.

That's neat.


Jonathan Lamothe reshared this.


My god I love clicking on like, boost and follow without feeling it will be logged and crunched by a monetisation algorithm

Jonathan Lamothe reshared this.


Jonathan Lamothe reshared this.


40k theory: The mechanicus can't create new technology because LLMs were invented during the dark age of technology.

Most of the media created after that point is AI nonsense, so they can't find the actual plans to replicate most of their technology.

The emperor can work with tech because he saved a copy of the wikipedia before it was too late.

reshared this


in reply to Jessica Lam 👩🏻‍💻👩🏻‍🎨 clacke: inhibited exhausted pixie dream boy 🇸🇪🇭🇰💙💛 reshared this.

while back we called it bullshit automation, and just recently a scientific paper was published that arguments this distribution nicely.

researchgate.net/publication/3…

Yes I know this is essentially a different class of problem, but the "learning" is done in the same way. And it flows the tradition of garbage in, garbage out.

This entry was edited (3 months ago)

Jonathan Lamothe reshared this.


Ethical, easy-to-use and privacy-conscious alternatives to well-known software


A great resource that makes it quick and easy to find alternatives to Google, Amazon, Microsoft, Adobe and many more.

reshared this



Katy just got an ad for a "grounding sheet"... It's literally a blanket that plugs into a wall outlet so that you can be grounded while you sleep.

In case you're probe to static buildup in your sleep, I guess? How is this a thing?



nerdy math shower thought

So, I learned about Hamming codes a while back. They're pretty neat, but a lot of modern technology uses Reed-Solomon instead. I've wanted to learn about that one, but it involves some pretty heavy math that often goes over my head.

I've found a few different videos on YouTube that try to explain it "simply" but they all tend to gloss certain details over. After watching a few of them, I've noticed that the parts they gloss over are different from each other, and I'm wondering if I can just hunt down enough of them that I can piece the rest together myself.

All things considered, this seems a weirdly fitting way to learn it.

in reply to Jonathan Lamothe 𝚛𝚊𝚝 reshared this.

nerdy math shower thought
For those interested, these three videos had enough information between them for me to piece it together:


in reply to Jonathan Lamothe

nerdy math shower thought
Actually, I don't think that was the last piece...


Haven't checked in on the #minetest server in the past few days because I've been otherwise occupied. Had a look today and to my surprise, there was no immediately apparent spawn griefing.

Jonathan Lamothe reshared this.


😏 🔥
This entry was edited (3 months ago)

reshared this


in reply to Hacker Memes

impressive level of intelligence on display, but ugh the poor guy, just wants to interact with its own species. Should be out in the jungle somewhere, not an urban living room.


Logged into my online banking to be greeted by a notification about an "unusual transaction". It was today's vet visit.

Yes. It was unusual. It was also entirely legit, but thanks.

in reply to Jonathan Lamothe

As a side note: I sent my parents a text asking if we could borrow $X to hold us over until next pay day. My mother replied by saying that she'd "accidentally" sent $(X + Y) and to spend the extra as we see fit. We have a tiny bit of breathing room again.

She is amazing, and I am so fortunate to have family who are able to help out in an emergency. It's not lost on me that many don't.



pet medical issues, stress

Benny (our cat) was under the weather yesterday so we took him to the vet. We went home with some meds and general optimism. He seemed to perk up later in the day.

This morning he's super lethargic and uninterested in his food. Which is super not like him. Have another appointment with the vet in an hour and a half.

Not only am I stressed out about the cat, but I'm also stressed about the added financial burden of two unexpected vet visits (and I feel like an asshole about the latter).

We'll figure it out, but if the universe could cut us some slack for like five minutes, that'd be great.

Edit: typo

This entry was edited (3 months ago)
in reply to Jonathan Lamothe

pet medical issues, stress
Preliminary test results look good-ish. Fingers crossed. 🤞
in reply to Jonathan Lamothe

pet medical issues, stress
Well, the appetite stimulant is working. He just got his usual level of hangry with me. Now he wants more. Still need to do some follow-up tests, but this removes a tremendous amount of stress.
in reply to Jonathan Lamothe

pet medical issues, stress

Sensitive content



Jonathan Lamothe reshared this.


"LLMs are merely" autocomplete

Sensitive content

reshared this


Shannon Prickett reshared this.


SQL (sqlite3) question

I've run into a snag with an sqlite database I've been working on. Below is a simplified example of the problem.

Suppose I have the following table:

CREATE TABLE "prices" (
    "id"    INTEGER NOT NULL UNIQUE,
    "name"  TEXT NOT NULL UNIQUE,
    "list_price"    NUMERIC NOT NULL,
    "sale_price"    NUMERIC,
    "tax_rate"  NUMERIC NOT NULL,
    PRIMARY KEY("id" AUTOINCREMENT)
);

Is there a way to do something like the following?
SELECT
    name,
    CASE
        WHEN sale_price IS NULL
            THEN list_price
        ELSE sale_price
    END AS price,
    price * tax_rate AS tax
FROM prices;

The tax column doesn't seem to acknowledge the price column's existence, presumably because it's a column in the query rather than the source table. I could re-implement the CASE logic for the tax field, but that feels inelegant and error-prone.

Is there a better way to do this?

in reply to Jonathan Lamothe

You can use WITH to do it in two steps:
WITH pre_price AS (
    SELECT
        name,
        CASE WHEN sale_price IS NULL
            THEN list_price
            ELSE sale_price END
        AS price,
        tax_rate FROM prices
    )
    SELECT
        name,
        price,
        price * tax_rate AS tax
    FROM pre_price;
in reply to Jonathan Lamothe

SQL (sqlite3) question

Sensitive content


This website uses cookies. If you continue browsing this website, you agree to the usage of cookies.