Hacker Newsnew | past | comments | ask | show | jobs | submit | more Gladdyu's commentslogin

How would electromagnetism work in a world without a cross product?


In 2d electromagnetism splits light waves into TE and TM modes that don't couple to each others (until you add a dielectric). That is unusual to our 3d picture, but doesn't break electromagnetics.

And the generalization of the cross product, the wedge product works just fine in 2d. If you take the wedge of two 1-forms (vectors) in 2d you get a 2-form. In 3d that is equivalent to a (3-2)-form or in other words a (pseudo-)vector. In 2d you get a (2-2)-form or in other words a pseudo-scalar 0-form. That is of course nothing but the z component of the resulting pseudo-vector if you had done it in 3d. So EM in 2d might get flat landers started on weird group theory a bit early, but it is not fundamentally incompatible with life.


Magnetism doesn't use a cross product; it uses a wedge product[0]. It generalizes perfectly well to 2d, you just have <<xy>> instead of <<xy,xz,yz>>, just like you have <x,y> instead of <x,y,z>.

Edit: the reason 2d doesn't have a cross product is because you can no longer misinterpret a bivector <<xy,xz,yz>> as a (1-)vector <yz,xz,xy> by confusing each basis bivector with the basis vector[1] orthogonal to it.

0: https://en.wikipedia.org/wiki/Wedge_product

1: Actually one of the two (positive or negative) possible basis vectors; this is why cross products have a right-hand-rule versus left-hand-rule ambiguity.


You could use the exterior product.

Maxwell did not use a cross product in his original publications. In fact, the development of the cross product was a response to the longer (quaternion based) formulation of electromagnetism equations at the time.


I'm confused by GP's reasoning. Is it valid to assume that since we have an equation that requires three dimensions to show how a force reacts, that if you remove a dimension that force doesn't exist?

Isn't it just as possible that there's a different equation for how that force would work in two dimensions (or to assume our current equation is a specialized version of a general equation that works in all dimensions)?

It just seems rather odd to assume that since our understanding doesn't extend to a circumstance that means something is impossible there. Or is there some aspect of this I'm missing?

Edit: Perhaps I was misinterpreting the GP contextually. Maybe they were just asking if we have an equation for it, rather than questioning how it could exist.


It's a bit complex for a comment, but electromagnetism defined in terms of differential forms generalizes nicely to all dimensions. There certainly is a 2+1D electromagnetism.


It would exist but not in a nice way, with electricity and magnetism inducing each other.


If we’re imagining a 2d world why not imagine all new forces and particles to go with it?




Thanks, that looks pretty cool actually.


I clicked on the first one and most of the animation is distracting and superfluous, like bars of a bar graph repeatedly bouncing off each other.

Does that sort of animation really promote learning? How much ornamental dressing is needed to keep visual attention but not distract?


Aren't they meant to be solid masses with particular collision properties? In which case showing how they collide seems to me exactly want you'd want to show.

EDIT - I just watched it with sound. I suspect you didn't and misunderstood the subject matter.


One example is if suddenly you would require to inherit from the same object multiple times. Example - if you have a "team" object, you might at first inherit it from a list/set (as a team could be a list of members). However, later down the line, you might also want to model backups for your team. You can't inherit from list/set again, so what are you going to do? It it much cleaner in general to avoid inheritance as much as possible and only modelling the data as internal, not publicly-accessible state (by composing smaller state objects). Inheritance on the other hand (in most languages), can make your data model more visible from the outside.

This isn't to say there aren't valid use cases for inheritance (eg. runtime polymorphism), though if something can be accomplished through composition, it's usually the better approach as it only modifies inner details of an object, and not the external interface (of which the inherited classes are part).


The most certainty you are going to get is by taking an open source processor core, and run it on an FPGA with an open toolchain. You won't be able to check the actual FPGA chip, though the risk seems minimal on that front compared to ASICs with the ISA baked in.

You will pay dearly in cost, performance and pretty much every other metric that you care about though.


I doubt those are more complex to parse than C++, as C++ parsing is undecidable.

http://blog.reverberate.org/2013/08/parsing-c-is-literally-u...


There's something that's unsatisfying about most of these examples which is that a sane person wouldn't write code that multiplies two objects and throws away the result, so people might think that if you added extra constraints to prevent depending on silly side effects, the issue would go away. This is definitely false, but it's not exactly obvious if you don't think about it too hard... I wish people actually paid attention to it when constructing counterexamples.

So, for anyone else feeling similarly unsatisfied, here's another example that might be more satisfying in that respect:

  y = f(g<T, U>(x));
In conjunction with the fact that templates are already Turing-complete, we can see that detecting whether this is a call to a templated g or two comparisons is a Turing-complete question.

Also notice a similar parsing issue arises in C# as well, but I don't think generics there can be used to perform Turing-complete computation... though not sure.


You can use generics and overload resolution to solve satisfiability problems in C# and Java. But not in the way like templates in C++ allow for compile-time computation.


Yup I've seen that aspect haha.


C# compiler can generate a huge amount of code from simple and small programs: https://mattwarren.org/2017/11/08/A-DoS-Attack-against-the-C...

But you can very easily get the AST. Obviously it may happen that you have to wait until the hell is frozen to get a result, but generally it doesn’t happen in code that you see day to day..


Though it might finally do away with the ever-persisting Windows error messages about "this file is already open" followed by a search through all of the processes that might have it open to terminate the offender.


That error is orthogonal to the filesystem in use. Every OS that provides exclusive locking, regardless of filesystem, will return an error if more than one process wants to acquire such a lock.


    PS> $lockedFile="C:\Windows\System32\wshtcpip.dll"
    PS> Get-Process | foreach{$processVar = $_;$_.Modules | foreach{if($_.FileName -eq $lockedFile){$processVar.Name + " PID:" + $processVar.id}}}


    PS C:\> gps |? {$_.Modules.FileName -match "wshtcpip\.dll"} | select name, id


That foreach looks like it should really be a where


It was copied from stackoverflow... apologies, I just knew it was possible.


> Every OS that provides exclusive locking, regardless of filesystem, will return an error if more than one process wants to acquire such a lock.

Obviously.

The super annoying thing is when the OS doesn't try to tell you which process(es) keeps it open and doesn't even ship with built in tooling to let you find out on your own.

I think that is the point GP tries to make.


Open up "Resource Monitor" and go to the "Disk" tab. Under "Disk Activity" you can see all open file handles.


Certainly not a sensible solution like having a dialog button that gives you all the relevant information immediately and empowers you to solve the problem without a goose chase.


Which are thousands...


You need the Sysinternals utilities to make life tolerable: https://docs.microsoft.com/en-us/sysinternals/downloads/hand... from the command line or Ctrl-F in https://docs.microsoft.com/en-us/sysinternals/downloads/proc... if you prefer a GUI. They do a brute-force search over the open handles in all processes, but it's effective.


I prefer this utility: http://www.emptyloop.com/unlocker/

It lets you see which process locked a file, and optionally remove the lock.


The way filesystem locking works on Windows is an intentional decision and not an NTFS thing. It's there for a good reason even if it's inconvenient. The alternative has some real downsides. "Two CMD windows have the same CWD but are showing different folders" is not a user-friendly experience.


I bet pretty much every Windows user would trade confusing command prompts in strange circumstances for not having to reboot for pretty much every single Windows Update (due to it being unable to update files that are in use)


It would be horrendous to even try to troubleshoot a system with a dozen different version of OS DLLs loaded because the system had not been rebooted for a dozen patches.

Or, imagine every copy of Word you have running is using a different set of binaries.

No, thank you.


And yet Linux distros some how manage years of uptime with continuous updates.


download sysinternals tools, one of which is "handle" for quickly finding open files.

Yeah, it should come with the OS, but that's Windows for you.


Send To > Unlocker


Hasn't worked since XP, has it? I'd love to see the source for that - I don't know how they were hooking the Copy dialog.


http://www.emptyloop.com/unlocker/

I use it in Win 7; I think it works most of the time (not always).


Yes, but you can't install a LIDAR over a software update. They've been promising full self-driving mode and getting closer by updating the software - the owners that already have the current car won't be to thrilled if they get cut-off from the state-of-the-art in Tesla's self-driving tech.


... particularly since they were charged up to three or five thousand dollars more for Elon's "promise" that some day (apparently this year) it will be available...


I've attempted to run it (not with this latest release yet though) and it appeared as if calling a numpy function essentially disabled the JIT for that function, which was not acceptable for us at that point. What did seem to help curiously was wrapping the numpy function in a python function and then calling that, which seemed to prevent the JIT being disabled in the calling function.


Curious why? We use numpy is easily optimizable areas so there's very little python code, and JITing a call to a C library is pointless.


Some NICs are able to dump data directly into the (L3) cache (DDIO on Intel), so either the L3 will have to be encrypted or the IOMMU needs to contain the crypto functionality.


Or maybe the kernel would have to except some memory for MMIO from being encrypted. That way the PCIe bus gets access to the memory without needing the keys but also can't read what it shouldn't.


AIUI Intel TME sits in the memory controller, same for MKTME. Therefore memory protection as usual protects access, and any read/write requests made to the IMC will have it use the correct keys for en/decryption. The IMC doesn't care/tell where those requests came from.


That's the way the 360 did it, total memory encryption, but practically DMA buffers were unencrypted.


Consider applying for YC's Summer 2026 batch! Applications are open till May 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: