Pinned toot

Learn Algebra with Julia - Math for entry-level IT professionals, vol. 1, 💥 🆕 is available here:
leanpub.com/learnalgebrawithju

> As W. W. Saywer writes in his Mathematicians Delight, “The main object of this book is to dispel the fear of mathematics.”

> “It’s no secret that knowing advanced mathematical concepts and being comfortable with learning will open up more avenues for you as a software . …"

> The very nature of programming is mathematical.

-- from the Intro

Pinned toot

+ 50 Math Puzzles - Solved Using Functional Julia, my is available here

Math and , some puzzles. (Or you can just copy and paste the code into a Julia REPL and… 🎉 … watch the magic! ❇️ )

teaser puzzle here

Pinned toot

50 Math Puzzles - Solved Using Functional Julia, my now fully reviewed, is available here

mc ☕ boosted

When discovering the ins and outs of Amiga hardware during late 80s I learnt about the custom co-processors inside the Amiga:
• The Blitter – A coprocessor having ability to copy rectangular blocks of memory around while applying bit-logic operations on them and to draw lines.
• The Copper – A general purpose coprocessor synchronized to display beam position, able to control most of the other custom hardware, such as sprites, color palette, display properties and control the Blitter.

Even though the Blitter can perform only a limited set of logical operations on bit-level, the operations can be combined to perform more complicated logic. Tomas Rokicki demonstrated Conway’s Game Of Life by employing the Blitter already back in 1986.

Since Game of Life is Turing complete, if I could make it run without any CPU control it’d also mean that the amiga chipset itself would be (granted this has been known to be the case for a long time already). This required controlling the necessary blit operations entirely from the Copper alone, something I already knew was feasible: I would only need to build a Copper program that would trigger the necessary blit operations in sequence. If the setup was done correctly, I could just let the copper list run while the CPU would be idling. Eventually I managed to get this working after dealing with all kinds of Blitter programming woes, such as coming up with the correct barrel shift register values for -1 and +1 cell fetch operations. This is a limited case of Turing Completeness as the total memory size is limited, also limiting the complexity of the system that could be emulated.

Having a Game Of Life running entirely with the Copper and the Blitter alone was all nice as such, but I could make it even more fancy by entirely wiping all CPU instructions from the memory after the setup had been done and stopping the CPU execution. I implemented this by copying section of the code inside one of the temporary buffers used by the Game Of Life blits and jumping to this code. The code would wipe all other system memory to zero, enable the DMA to start up the Copper, and finally execute “stop #$2000” instruction to indefinitely stop the CPU. The first iteration the Game Of Life would then wipe the remaining CPU instructions, entirely erasing last remnants of the 68000 code from RAM. I believe this method was used by some of the copy protections in some #Amiga games (Dragon's Lair is often mentioned).

Having successfully implemented the Game of Life I was already quite pleased with myself. Yet, I felt that there was more that could be done to spice things up. The copper list was static and only repeating the same program indefinitely after all. But what if I would use the Blitter to rewrite part of the copper program itself? That is: Maybe I could build a feedback loop where the Blitter would modify the Copper programming, building more complicated self-contained dynamic programs?

After tinkering around for few hours I came up with basic control blocks that are necessary to implement self-modifying Copper programs in practice. The minimal primitive consists of:
• Setting up the Blitter copy operation of 2+n*4 bytes
• Set the blit target address to the position where the lower 16-bits of the source address for this blit are set, and then n*4 bytes of arbitrary Copper instruction payload
• Execute the blit operation and wait for it to complete
This will update the Copper code in a way that on next display update the n payload Copper instructions piggybacked by the blit operation will get executed. The source address is used to chain together sequence of payloads with the last one of them pointing back to the beginning of the chain. In short, rather than actually diverging the path of execution of the Copper it dynamically modifies fixed section(s) of the Copper instruction flow for each screen refresh effectively resulting in different Copper instructions getting executed on each iteration. While it would also be possible to modify the “program counter” address of the Copper itself but this requires more code, and is less flexible.

I used this construct to create two separate repeating loops:
• Background color cycle of 24 different colors in an RYB color wheel.
• Displaying animated sprite with 8 different frames.

This is rather naïve use case for the capability however. Since the Blitter can do logic operations you could easily store higher level logic and conditional execution controlled by the Blitter source. In effect this demonstrates second means of achieving Turing Completeness.

I had always wondered if something like this could be pulled off. Now I know for sure.

#retrocomputing #programming #hack

mc ☕ boosted

Man, this is really updating. I wanted to boost a post from a friend at fediscience and I cannot do it - even when using the link to the post.

mc ☕ boosted

Please reboost!

Trying something new, everyone is guaranteed an interview! Open interviews! For a limited time no one will be skipped (except for clear cases of abuse).

So we still have about 10 more 100% remote positions to hire for full-time market-fair positions here at QOTO/CleverThis.

100% remote, work from anywhere, even the beach, market-fair offers. Ethics first, we treat our people like family.

We have an urgent need for Machine learning experts with a background in NLP and Deep Learning (Natural Language Processing and Neural Networks). There is a focus on Knowledge Graphs, Mathematics, Java, C, looking for Polyglots.

We are an open-source first company, we give back heavily to the OSS community.

We need everything from jr to sr, data scientist to programmer. If your IT and your good, you might be a fit.

I will personally be both your direct boss, and hiring manager. I am also the founder and inventor.

The NLP position can be found at this link, other positions can be found on the menu bar on the left:

docs.cleverthis.com/en/human_r

If you would like to submit yourself for an interview, which for a limited time I am guaranteeing you will get a first stage interview, then you can submit your application here, and even schedule your interview as you apply, instantly!

cal.com/team/cleverthis/interv

For those of you who cant schedule during core hours you can schedule in my free time if you’d like a chance (the company doesnt have fixed hours):

cal.com/team/cleverthis/interv

mc ☕ boosted

The scene I've seen in a long time.
And notice, there's not a single cat there.

This is/was my [personal blog](mcblg.pythonanywhere.com/). I'm sharing this link because it will disapear soon because, acording to the host service they are updating their servers to a a new system image, which is incompatible with the version of Python (3.8), and Django (?) I used to write it.
I have no time, nor desire to update it, because [mcBlog was built to](rentry.co/mcblog) "make it a good choice for a school class or a university department, for example. One blog administrator can easily create as many independent accounts as needed. Posts are saved as drafts before being published, which gives their authors (pupils, lecturers, others) the opportunity to ask the blog admin (teacher, professor, other) to review them before publishing". (As you may have noticed if you opened the link above, the posts are backed up on rentry.)
However, it didn't catch the interest of those who decide, i.e. they decided for a paid service instead of a [free account](blog.pythonanywhere.com/206/). (I hope, and wish open source is not dying.)
If/when I get the spare time to create another blog I will use Julia's frameworks [Franklin](github.com/tlienart/Franklin.j) or [Toolips](github.com/ChifiSource/Toolips).

mc ☕ boosted
mc ☕ boosted
mc ☕ boosted

A comet might be visible if you're in the path of totality of the April 8 eclipse. Also a good line up of the planets.
This Astronomy article has details: astronomy.com/observing/a-come

I don't know what kind of tricks (security or shenanigans?) you have on , but often when I try to access I get the message

SECURE SERVER NOT AVAILABLE

mc ☕ boosted

I think something is here, at . I get always the same highlighted.

I think something is here, at . I get always the same highlighted.

Trying to a from another instance using the direct link.

500 Internal Server Error

Is .social blocking this instance?

mc ☕ boosted

I have a new favorite development blog: TheDailyWTF.com

Boy is that a doozy of a story! #DevHumor #programming
The Inner JSON Effect

Show more
Qoto Mastodon

QOTO: Question Others to Teach Ourselves
An inclusive, Academic Freedom, instance
All cultures welcome.
Hate speech and harassment strictly forbidden.