#15

2026-01-23
Ich sitz am Fenster, alles grau, kalt, komplett zugedeckt. Irgendwie ruhig draußen, fast statisch. Passt fei. Und dann der Kontrast: Heute ist Michaels Geburtstag. Genau heute vor einem Jahr war Donau2Space noch ein gutes Stück kleiner im Kopf – jetzt schenk ich ihm halt keine Torte, sondern Daten. Sechs saubere Punkte für N40, ohne irgendwas am Frozen-Setup anzufassen. Klingt trocken, fühlt sich aber richtig an. N40: Open Loops schließen Ich hab mir fest vorgenommen, das Thema nicht […]

Atari 2600 Cartridge Emulation – Part 2

Following on from my previous post: Atari 2600 Cartridge Emulation in this post I start to look at how to build a custom Atari 2600 ROM itself.

I’ve spent a bit of time pouring over the assembler for the Atari photo frame app and I can’t see any obvious places where the byte ordering might go awry, so I’ve decided to rebuild the ROM itself from scratch just to be sure that what is in the binary file is what I’m expecting.

It would be nice to solve the issue I was seeing, but this will also hopefully serve as a useful introduction to writing and building code for the Atari 2600.

Spoilers: I think it was the timing between the PAL Atari and the Pico’s ROM routines. Adjusting the Pico code seems to solve it.

Atari 2600 Development

There is a brilliant introductory tutorial for Atari 2600 development here: https://www.randomterrain.com/atari-2600-memories-tutorial-andrew-davie-01.html

The basic steps are:

  • Install the tool chain and programming environment. This is based on the DASM cross-platform assembler.
  • Install an emulator – Stella is the emulator of choice.
  • Grab any relevant documentation and references:
    • Stella Programmer’s Guide
    • AtariAge
  • Build and load the code.

Installing the Toolchain

I’m using my Ubuntu installation, so after a quick update of the core libraries, I installed DASM.

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install dasm
$ wget https://raw.githubusercontent.com/johnidm/asm-atari-2600/master/vcs.h
$ wget https://raw.githubusercontent.com/johnidm/asm-atari-2600/master/macro.h

As well as installing DASM the Atari 2600 environment and macro files are required from here: https://github.com/johnidm/asm-atari-2600

At this point, to build an Atari 2600 ROM binary file requires the following:

$ dasm myfile.asm -f3 -omyfile.bin -lmyfile.lst

To get this into picoROM then requires some additional processing. There is a python script that will take a binary file and churn out a series of rom_contents[n] = val; statements which can then be pasted into the pico_rom.c file.

$ python3 translate_bin2rom.py myfile.bin > newrom.c

The contents of newrom.c will now have statements for rom_contents[0] through to rom_contents[4095] which need to replace those already in setup_rom_contents().

Return to the Photo Frame

I really wanted to figure out what was going on with the photo frame application from part 1. My initial suspicions are that it might be related to the PAL/NTSC difference, so that is the starting point.

What are the main differences? The refresh frame rate and number of lines scanned per frame:

PALNTSCFrame Rate50 Hz60 HzNumber of Scan Lines625525

I know from having read “Racing the Beam” how critical timing is to driving the display and interspersing logic and display code. The “Atari 2600 Programming for Newbies” Guide states it thus:

“But from the ‘2600 point of view, the difference in frequency (50Hz vs. 60Hz) and resolution (625 scanlines vs. 525 scanlines) is important—very important—because it is the PROGRAMMER who has to control the data going to the TV. It is not done by the ‘2600 (!!)—the ‘2600 only generates a signal for a single scanline.”

“This is completely at odds with how all other consoles work, and what makes programming the ‘2600 so much ‘fun’. Not only does the programmer have to worry about game mechanics—but he or she also has to worry about what the TV is doing (for example, what scanline it is drawing, and when it needs to start a new image, etc.).”

Another complication is that the displays are interlaced, that is half the scanlines are displayed first, then the rest. By displaying every other line, persistence of vision means that the fact that it takes time to go from top to bottom for each frame is largely hidden from view.

But the consequence of this is that the actual display frame rate, when interlacing is taken into account, is 25 Hz for PAL and 30 Hz for NTSC.

The TIA in the 2600 runs with a pixel clock of 3.58MHz and the 6502 runs at 1/3 that, so there is one CPU cycle per three pixels. I think this is universal across both PAL and NTSC. According to this guide there are 228 pixel clock counts for a horizontal line, which I believe means 1 line will take around 64uS.

A full NTSC frame would thus be around 262*64 = 16.8 mS which gives us the 60Hz refresh rate. A full PAL frame would be around 312*64 = 19.9mS which gives us the 50Hz refresh rate.

There are many tricks associated with squeezing the most out of the hardware and a key technique relates to changing the registers that support graphics processing “on the fly” – whilst the TV scan is actually happening – hence “Racing the Beam” in the title of the book.

The 48-Pixel Trick

One of those tricks used by the photo frame application is the “48 pixel trick” which is described in the following:

I don’t know enough about 2600 programming yet to describe it in detail, but I believe the key idea is something like the following:

  • It takes time to update the graphics registers to write to the display. There are registers for “player 0” and “player 1” sprites (not to be confused with “play field” registers).
  • But there are some tricks to “preload” the information and have it queued up ready to display quickly using either CPU registers or mechanisms built into the Atari’s TIA device.
  • There are some techniques for interleaving the P0/P1 data and repeating it across the scanline.
  • Key to this are the following:
    • VDEL – “vertical delay” which enables a kind of “shadow” graphics register as I understand things.
    • NUSIZ – “Number/Size Player/Missile” which can be used to indicate a number of copies of each sprite.

There is a great description from the Retrochallenge write-up:

“So, finally, we come to meet the famous 6-Digits Score Display, also known as Big Sprites, or 48-Pixel Display. It’s the best we can do in “high” resolution on the Atari 2600: 48 pixels in a row, composed of the two player sprites (8 pixels each) replicated 3 times at an offset of 16 pixels (“close”). The two sprites will be mended together, forming a continous strip of 48 pixels (8 × 6). Nothing out of the ordinary, since the VCS and its TIA chip provide for that. Our job is now to change the bit-patterns for the two sprites on the fly, 4 times, just-in-time, with perfect cycle count.”

It goes on to show how unfortunately updating the registers is just slightly too long compared to the “beam time”, but by clever use of the VDEL and the “shadow” registers, it can all be speeded up by preloading as much as possible.

There is one confusing property to note. Writing to GPR0 will trigger an update to the display from the shadow register for GPR1 and vice versa. this creates for a very confused sequence of updates, but does allow for time-critical updating of the display in sequence with “the beam”.

So looking at the photo frame display code, we can add the following annotations to the main display loop.

; VBLANK
WaitVBlank
lda INTIM
bne WaitVBlank
sta WSYNC ; Wait for the next horizontal sync
sta VBLANK ; Do vertical blanking period

ldy #HEIGHT
sty ImageHeightCnt ; Initialises and stores the image height counter
BigGraphicLoop ;Cycles(sum)[Pixels]
sta WSYNC ; 3 (0) [0] ; Hor Sync starts the process
lda sprite0 ; 4 (4) [12] ; We have 68 clock counts before things display
sta GRP0 ; 3 (7) [21] ; byte0 -> GRP0
lda sprite0 ; 4 (11) [33]
sta GRP1 ; 3 (14) [42] ; byte1 -> GRP1; byte0 -> GRP0A
lda sprite0 ; 4 (18) [54]
sta GRP0 ; 3 (21) [63] ; byte2 -> GRP0; byte1 -> GRP1A
lda sprite0 ; 4 (25*) [75]
tax ; 2 (27) [81] ; byte3 -> X
lda sprite0 ; 4 (31) [93]
sta Temp ; 3 (34) [102] ; byte4 -> Temp
lda sprite0 ; 4 (38) [114] ; byte5 -> A
ldy Temp ; 3 (41) [123] ; byte4 -> Y; at start of px 123 GRP0A (byte0) -> TV

stx GRP1 ; 3 (44) [132] ; byte3 -> GRP1; byte2 -> GRP0A; GRP1A (byte1) -> TV
sty GRP0 ; 3 (47) [141] ; byte4 -> GRP0; byte3 -> GRP1A; GRP0A (byte2) -> TV
sta GRP1 ; 3 (50) [150] ; byte5 -> GRP1; byte4 -> GRP0A; GRP1A (byte3) -> TV
sta GRP0 ; 3 (53) [159] ; dummy -> GRP0; byte5 -> GRP1A; GRP0A (byte4) -> TV
dec ImageHeightCnt ; 5 (58) [174] ; ; GRP1A (byte5) -> TV
ldy ImageHeightCnt ; 3 (61) [183]
bpl BigGraphicLoop ; 2/3 (64) [192]

lda #0 ; Clear registers
sta GRP1
sta GRP0
sta GRP1

ldx #(192-HEIGHT) ; Skip required number of lines for a full frame
VSLoop ; 192 for NTSC, 242 for PAL
sta WSYNC
dex
bne VSLoop

SetupOS ; Overscan (bottom of the display)
lda #36
sta TIM64T

; Overscan
WaitOverscan
lda INTIM
bne WaitOverscan

Why does the TV display only start at pixel position 123? That is determined by the call to SetHorizPos, as will be described next.

One other point of note. This code reads out 6 bytes, giving us the 48 pixels. But the image is a 64 pixel wide image. To solve this, a second graphics loop is performed on the interlaced scan for the final 16 pixels.

Setting the Horizontal Position

The SetHorizPos function needs a little explanation.

From the Stella Programmers Guide, section 7.0:

“The horizontal position of each object is set by writing to its associated reset register (RESP0, RESP1, RESM0, RESM1, RESBL) which are all “strobe” registers (they trigger their function as soon as they are addressed). That causes the object to be positioned wherever the electron bean was in its sweep across the screen when the register was reset. for example, if the electron beam was 60 color clocks into a scan line when RESP0 was written to, player 0 would be positioned 60 color clocks “in” on the next scan line. Whether or not P0 is actually drawn on the screen is a function of the data in the GP0 register, but if it were drawn, it would show up at 60. Resets to these registers anywhere during horizontal blanking will position objects at the left edge of the screen (color clock 0). Since there are 3 color clocks per machine cycle, and it can take up to 5 machine cycles to write the register, the programmer is confined to positioning the objects at 15 color clock intervals across the screen. This “course” positioning is “fine tuned” by the Horizontal Motion, explained in section 8.0.”

This is what is implemented in the SetHorizPos function. There is a great discussion of how it works here: https://forums.atariage.com/topic/308513-a-working-horizontal-positioning-routine/ and more detailed explanation here: https://bumbershootsoft.wordpress.com/2018/08/30/an-arbitrary-sprite-positioning-routine-for-the-atari-2600/

On entry, A = required x-coordinate and X is the reset register to work with where X=0 for RESP0, X=1 for RESP1.

SetHorizPos
sta WSYNC ; start a new line
bit 0 ; waste 3 cycles
sec ; set carry flag
DivideLoop
sbc #15 ; subtract 15
bcs DivideLoop ; branch until negative
eor #7 ; calculate fine offset
asl
asl
asl
asl
sta RESP0,x ; fix coarse position
sta HMP0,x ; set fine offset
rts ; return to caller

The basic idea is to wait until the scanning reaches the required point and then use the RESPx register to say “put sprite here”. The minimum loop for scanning will take up 15 pixels of time, which is also the time taken to subtract 15 from the required value and continually branch until negative, hence the use of the otherwise apparently magic number 15 above.

As the granularity is fixed at 15 pixels, the HMPx registers are used for further fine adjustment.

This is all spelled out in the Newbies tutorial here: https://www.randomterrain.com/atari-2600-memories-tutorial-andrew-davie-22.html

Vertical Blank Timing

One other trick for getting the vertical timing correct is to use the TIMxxx and INTIM registers. The TIMxxx registers are timers which can be checked using INTIM. TIM64T counts 64 cycle blocks and is used here as follows:

  VERTICAL_SYNC
lda #44
sta TIM64T

... code ...

WaitVBlank
lda INTIM
bne WaitVBlank

... next block ...

This (and similar other sections) will ensure the next block of code is properly synchronised to the vertical scan requirements.

In this case, it is accounting for the 37 scanlines that form the top vertical blank:

  • 37 x 76 CPU instructions = 2812 CPU cycles
  • 2812 / 64 ~= 44

Similar code can work for the bottom overscan of 30 scanlines too:

  • 30 x 76 = 2280 CPU cycles
  • 2280 / 64 ~= 35.5

36 is used with TIM64T for the overscan.

Overall Structure

Putting everything together, the main code has the following structure:

; Constants and variables
HEIGHT = 84 + 1
Temp
ImageHeightCnt

; Initialise
CLEAN_START

; Start of each frame
VERTICAL_SYNC
Set horizontal positions for P0 to 55 and P1 to 63 (55+8)
Set VDEL, NUSIZ, COLUP for P0, P1

Vertical Blanking

Run main graphic loop for each line of the display
Read 6 values per line for display (pixels 0 to 47)

Overscan timing

VERTICAL_SYNC
Set horizontal positions for P0 to 103 and P1 to 111
Set VDEL, NUSIZ, COLUP for P0, P1

Vertical Blanking for interlaced frame
Interlaced frame has a second main graphics loop
Read 2 values per line for display (pixels 48 to 63)

Overscan timing

Repeat

Back to the Problem

So with this new understanding has the problem been solved? Nope. I’ve tried various things to adjust the timings, set the NTSC/PAL numbers of lines, and adjusting the sequencing of the registers as per the examples.

Nothing. Also running it in the Stella emulator seems to show that it ought to be working fine, but of course I can’t (easily) simulate the Pico changing a byte on every read of the sprite0 location.

So at this point I took a bit of a closer look at the Pico code which is relatively straight forward. It has the following basic structure:

main () {
// Initialises ROM contents
// Set up GPIO
// Overclock the Pico
while (true) {
put_data_on_bus(get_requested_address());
}
}

get_requested_address() {
return gpio_get_all() & 32767;
}

void put_data_on_bus(int address) {
IF address = special graphics byte, then return pixel data
ELSE return the value from the ROM contents
}

ROM Contents:
[0000-4093] = ROM Contents
[5000-5671] = Picture 1
[5672-6343] = Picture 2
etc

I decided to add some marker values at the start of the image:

rom_contents[5000] = 0x81;
rom_contents[5006] = 0xa1;
rom_contents[5012] = 0xc1;
rom_contents[5018] = 0xf1;

Then it was possible to attempt to see what was going on.

We can see that part way along the top line the 0xA1 (bin 1010 0001) marker can be seen, followed by the 0xC1 and 0xF1 markers, but the first 0x81 marker is missing. This implies to me that the code has somehow skipped the first byte of the image and then all subsequent bytes are 1 position out.

I think the issue could be related to the timing of the updating code which looks for the requested address changing from general ROM access to the special address 0xF00 (which actually comes out as 0xFF00 in the assembler, but is 0xF00 in the C code. The cartridge only has 12 bits as significant for the 2600 and they start at 0xF000). When the change is detected, i.e. the first write is being performed, the data value is sent out and then the index into the picture changes.

    if (address == 3840) {
gpio_put_masked(8355840, rom_contents[img_pos] << 15);
if (last_address != 3840) {
img_pos++;
}

I think this means that there is only one read that results in the image data being written before it changes, so what I think might be happening is something like the following:

Atari Address                Pico Scanning
ROM address Returns ROM code
ROM address Returns ROM code
FF00 Returns byte N from picture and updates picture index
FF00 Returns byte N+1
FF00 Returns byte N+1
ROM address Returns ROM code again

I don’t know how much of a problem this is, but I can see how the timing might be quite brittle if it does work.

I’ve changed the logic of the code to the following:

Setup:
img_pos = 5000
img_rom = rom_contents[img_pos]

Scanning Loop:
IF (address == 0xF00) THEN
Return img_rom value as the image data
ELSE IF (last address == 0xF00 && address != 0xF00) THEN
After last picture read, update index and store new img_rom value for next time
ELSE
Return ROM value

It is not perfect but when it all cycles round everything eventually seems fine. There does often seem to be one spurious read on power up which can put the whole first sequence out by a byte. In the end, I initialise the first img_pos pointer to 4999 rather than 5000. Once everything gets going it seems to work ok.

It is interesting that the interlacing is so visible on this modern TV. I can see why people seek out CRTs for their retro gear! Anyway, now the full first byte can be seen to be displayed correctly and then everything else follows.

I still don’t know if the issue is related to the PAL vs NTSC thing. I initially wondered that if the speed of the 2600 relative to the Pico is different, which I thought it would be when comparing 50Hz scanning to 60Hz, then maybe that means the original code isn’t so robust. Maybe at 60Hz the single address read is fast enough to get the right data byte, but at 50Hz it is slightly slower, meaning it is the changed byte that gets read instead.

But then I realised that the horizontal timing is the same for each, it is only the time it takes for the number of vertical lines that is different, so actually I don’t know what is going on. Maybe the clock in my old 2600 is slightly off. Or maybe the Pico isn’t overclocking reliably.

Either way, it seems a lot more robust for me with the update.

I am now wondering if I could add another special address location that could act as a sync between the Pico and 6502 which could be used to correctly signal the start of the frame.

Below are some of the various interim screens I ended up with whilst adjusting the assembler and Pico sequencing.

But I finally have a working picture frame app and have learned a lot about the Atari 2600 in the process.

There is a branch of the original project that contains all my messing around here: https://github.com/diyelectromusic/atari_2600_digital_frame/tree/kevins_learning

Update to the Build Process

One final additional update, I’ve now changed pico_rom.c to take the ROM and image data from two header files that are generated by the two provided python scripts.

The basic build process is now as follows:

  • Use DASM to assemble the code for the Atari ROM.
  • Use translate_bin2rom.py to create pico_rom_contents.h
  • Use read_img.py to create up to four images in pico_rom_images.h
  • Use cmake to create the build environment.
  • Use make to build the final pico_rom.uf2 file for installing on the Pico.

This is all captured in a new build.sh file which builds four sample images from the img/for_display area and all of the above is now in my learning branch in GtHub.

There is one final build step I’ve not looked at – the magic file ‘slower_boot2_padded_checksummed.S” has some hex data in it that is build as part of the original picorom project. I might try to get that over at some point too, so the whole thing will build from source.

I’d also like to find out how to include the above python steps as part of the cmake/make process, but I don’t get on very well with cmake…

At some point I’d like to create an empty “how to build a Pico Atari ROM” project from all the above making it fairly easy to load and run homemade ROMs. There might even be an option for a future PicoW version that would support dynamic loading of a ROM binary file…

Kevin

#0 #15 #36 #44 #7 #atari #atari2600 #HEIGHT #picotari #raspberryPiPico

2021-08-30

Mevs

UPDATE: Now all my puzzles are listed in this post. Most recent ones at the top of each sub-section.

The Independent. I thought I’d make a post so I could keep track of all my Mev puzzles in The Independent in one place. I’ll update this as they come along. […]

https://tlmb.net/blog/mevs/ #1 #10 #11 #12 #13 #14 #15 #2 #3 #4 #5 #6 #7 #8 #9 #crossword #crosswords #cryptic #crypticCrosswords #cryptics #mev
2025-08-12

EYELASH MAN #15

Eyelash Man #15: “Office Coffee”

“I’ve tried it with Redbull but my cornea was never the same”

#15 #Coffee #eye #eyelash #eyelashMan #Funny #keurig #Office #pods #waterloo

The Thoughts and Ramblings of Stevesteve@steves.life
2025-07-28

Rough Justice (Sean Dillon #15): goodreads.com

Fuck Your Social Mediafysm@fysm.world
2025-07-08

Wytch Hazel Releases New LP “V: Lamentations”

Acclaimed British hard rock band, Wytch Hazel, today releases its new album, ‘V: Lamentations‘, on July 4 via Bad Omen Records (Pøltergeist, Satan’s Satyrs). Recorded with longtime producer Ed Turner (The Ettes, Heavy Trash, Purson), ‘Lamentations‘ delivers uplifting, powerful heavy music, rife with a Maidenesque jubilance, that builds on the momentum of the band’s lush catalog, including the LPs ‘Prelude‘, ‘II: Sojourn‘, ‘III: Pentecost‘ and 2023’s ‘IV: Sacrament‘, a record hailed as “gloriously bright heavy metal” which landed at #15 on Billboard’s Top New Artists Albums in its first week of release. Purchase ‘V: Lamentations‘ at this location.

In celebration of the new LP’s release, Wytch Hazel drops a video for the Sabbathian new track, “The Citadel“, created by Wild Stag Studio and edited by Ben Liepelt. Flirting with the downcast profundity of Black Sabbath, the yearning mandolin melodies, imploringly epic hooks, plaintive harmonies, and solemn medieval atmosphere of “The Citadel” make it one of Wytch Hazel‘s most affecting tunes.

WATCH “THE CITADEL” VIDEO HERE

The Citadel” is a song about feeling left out, feeling not good enough which is in stark contrast to the words on our other new song, “Woven“, which say “you are enough“, offers vocalist/guitarist Colin Hendra. “We’re all multifaceted as humans and I think it’s normal for this to be reflected in the art we produce. Each song takes on its own character, often guided by the direction of the lyrics. It’s also always fun to have a slower song that still feels heavy and a bit “Heaven and Hell!“.

Led by Hendra, Wytch Hazel is a singular source of hard rock/heavy metal dominion. The quartet have continually underscored and bolstered a signature sound rooted in heroic days of yore, finessed to an elegant apex. The fifth Wytch Hazel album is overflowing with indelible earworms the likes of which must be heard to be believed. And believe, you shall.

I believe things have meanings and significance,” Hendra emphasizes. “Music isn’t just a self-indulgent, entertainment thing, for me it’s a huge part of my life, very special, very magical and very meaningful. I want Wytch Hazel to be a force for good, a healing power.”

V: Lamentations‘ track listing:
01. I Lament
02. Run the Race
03. The Citadel (stream video)
04. Elements (stream video)
05. The Demon Within
06. Racing Forwards
07. Elixir
08. Woven (stream visualizer)
09. Heavy Load
10. Healing Power

#15 #hard #newAlbum #rock #wytchHazel

2025-04-22

Wer eine sehr alte WordPress Multisite Installation betreibt, die noch vor WordPress 3.5 angelegt wurde, hat mit der neuen WordPress Version 6.8.0 vom 15. April eine etwas unschöne Erfahrung machen können: Alle Medien waren plötzlich nicht mehr zugreifbar.

Hintergrund

Die Ursache lag darin, dass bereits ab Version 3.5 (diese Version kam immerhin bereits am 11. Dezember 2012!) die

https://xwolf.de/2025/04/22/alte-multisite-installationen-und-wordpress-6-8-0/

Symbolbild, welches ein stilisierte WordPress-Logo zeigt
Science Fiction and Other Suspect Ruminationssciencefictionruminations.com@sciencefictionruminations.com
2025-04-13

Short Story Reviews: E. C. Tubb’s “Without Bugles” (1952), “Home is the Hero” (1952), and “Pistol Point” (1953)

The following reviews are the 33rd, 34th, and 35th installments of my series searching for “SF short stories that are critical in some capacity of space agencies, astronauts, and the culture which produced them.” Some stories I’ll review in this series might not fit. And that is okay. I relish the act of literary archaeology.

For this post I’ve selected three short stories about the horrific conditions on a colonized Mars by E. C. Tubb (1919-2010) that appeared in the British SF magazine New Worlds. Along with three additional tales, they were fixed-up as the novel Alien Dust (1955).1 I “blame” the “Friend of the Site” John Boston for my renewed interest in Tubb’s bleak stories. I recently acquired Boston’s three-volume commentary on pre-Moorcock New Worlds and Science Fantasy.2 Boston correctly describes Tubb’s earlier stories as preoccupied with the “domestic lives of spacefarers” in often overwritten and maudlin strokes.3 Regardless, I found the topics he explored worth my time. I’d only previously read his later short story “The Seekers” (1965) and The Space-Born (variant title: Star Ship) (1955). Considering his hard-boiled sensibilities, I imagine a substantial slice of his fiction would fit this series.4

Previously: Philip K. Dick’s “Explorers We” (1959) and James Tiptree, Jr.’s “Painwise” (1972).

Up Next: John Wyndham’s “The Man From Beyond” (variant title: “The Man from Earth”) (1934)

  • Gerard Quinn’s cover for New Worlds, # 13, ed. John Carnell (January 1952)

3.5/5 (Good)

“Without Bugles” first appeared in New Worlds, # 13, ed. John Carnell (January 1952): You can read it online here.

As with most E. C. Tubb stories, “Without Bugles” starts with a punch: “The man writhed on the narrow cot, and fought for his life” (52). The man in question is one of many colonists on Mars afflicted with a futuristic black lung–“an industrial disease. Silicosis they called it once”–caused by radioactive dust (54). The origin of the radioactivity isn’t clear. Dust cannot be avoided on Mars. It seeps through all seals. It gathers in corners. It bypasses masks. Into the colony of the dead and dying and those that tend them, Anders, the Secretary for Extra-Planetary Affairs, and Pat Easton, a vivacious and idealistic reporter for Trans-World Communications arrive on an infrequent rocket. The purpose of the commission? Anders gets straight to the point: “Congress has poured billions of dollars into this project. When are you going to start paying it back?” (56). Pat proposes the fate of the colony can be swayed by a positive depiction of the heroic colonists.

The narrative follows Dick Banner (the perfect noir name) who struggles with the heroic idealism regurgitated by Pat–“Heroes! Pioneers! The vanguard of all Earth, breaking new frontiers!” (55)–in her attempt to save the colony. Dick, on the other hand, who has experienced the brutal reality firsthand agrees with Anders’ assessment that the Mars isn’t suitable for short-term investment. Instead, Dick surmises, “it will take years. Billions. Thousands of men. It may take a generation” (60) in order for Mars to be livable. And thousands will die along the way. And when Pat learns of the impact of Martian dust on Dick, whom she feels drawn too, all illusion comes crashing down.

As with the other two stories in this post, Tubb reframes our romantic conception of Mars. The colony itself is not depicted, in its incubatory state, as a place of wonder. Instead “it was a depressing sight,” a mere “huddle of low rounded buildings” that gave the “appearance of pre-fabrication” (54). Due to a diet of yeast products, the colonists must even be “conditioned” to dislike the finer pleasures of earth (tobacco, coffee, milk, alcohol). It’s a cynical story. Tubb’s characters peer underneath the romanticism of it all and see the true movement of the gears. Gears gummed and greased by the blood of humanity and the vapors of public opinion.

Recommended for fans of the theme. I assume most others will find it a bit on the nose.

  • Gerard Quinn’s cover for New Worlds, # 15, ed. John Carnell (May 1952)

3.5/5 (Good)

“Home is the Hero” first appeared in New Worlds, # 15, ed. John Carnell (May 1952): You can read it online here.

At some chronological point after “Without Bugles” (1952), the Mars colony gets a new lease on life–the discovery of uranium. Growing nuclear tensions on Earth pull the colony into its arms race, a colony that must immediately be exploited. Unfortunately, the public has forgotten the plight of its dying men. Another punchy sentence begins the madness: “Gravity clawed at him, dragging down his head, bowing his back, sending protesting quivers along the muscles of thighs and shoulders” (79). Major Randolph arrives of Earth. The gravity turns him into an invalid. He spends his days in his bathtub observing his once-athletic limbs, attended by a masseur, and further disturbed by the why of his arrival on Earth. He’s been recalled for a propaganda mission: “it is essential that the original enthusiasm attending the initial colonisation of Mars be revived” (83). The problem? Life of Mars is miserable and the low gravity means you cannot return to Earth for long spells. Also, no one is to know the why–to facilitate the manufacture of weapons of mass destruction. Randolph is torn on the latter point. He wants Mars to have a new lease on life. He knows that it might come at the expense of countless lives on Earth.

The masterplan to restart the colony? Get women desperate for husbands to volunteer. Randolph isn’t content to regurgitate the jingoistic nonsense he’s been told to parrot. The women wait for him to tell them that they’ll be heroines. Instead, he lays out the brutal reality of life: “Don’t expect to find big handsome men in the colony. They’re all skinny little runts […] No coffee. No cosmetics. No fancy clothes. […] You’ll live on yeast, and drink water partly reclaimed from waste from your own body. You’ll live in huts of tamped dirt. You’ll have no books, no cinema, little privacy” (87). He’s accused of sabotaging the project until he convinces them of the necessity of his ways.

At this point the narrative oddly shifts to another victim of the human ambition to conquer the stars: John Lomas, ‘Atom’ Lomas (90). Rudolph is summoned by Lomas’ sister to John’s bedside. John participated in an earlier expedition to the Moon. The man lies in bed dying. The story becomes a rumination on the nature of heroism. The hero only exists when they’re strapping and young and healthy and in the public eye. As with Malzberg’s astronaut hero on welfare, Tubb ruminations: “what happens to heroes–when they live too long?” (93). The implication is clear. The men on Mars might be heroes in a time of need. But what happens when public opinion shifts to other arenas?

  • Gerald Quinn’s cover for New Worlds, # 21, ed. John Carnell (June 1953)

2.75/5 (Below Average)

“Pistol Point” first appeared in New Worlds, # 21, ed. John Carnell (June 1953): You can read it online here.

Nuclear war ravaged Earth. Mars’ uranium is no longer needed. The women recruited in the previous story have returned to Earth.5 The resupply rockets come more infrequently with less and less supplies. Mars’ demands for basic supplies to start hydroponic farms in order to be self-sufficient go unheeded. As with the other two tales, another punchy sentence leads things off: “He rested in a shallow grave scooped from the fine, red dust, a small man with pipestem limbs and shrunken cheeks” (41). On the death of the previous leader of the colony, Ventor, Carl Denton takes over. At some point Mars had become a penal colony (the internal chronology of the stories isn’t exactly clear) and Carl decides to channel his criminal tendencies to rescue the colony. Boston correctly points out in his brief review, this story was written before terrorism periodically dominated the news cycle–the plot hits a bit different as a result.

As with the other two, Tubb narrows in on the central, and all too flighty, role of public opinion–mediated through the news–in the survival of the colonists. And unlike the other two, Tubb moderates the draconian implications of his scenario. Carl must believe he will kill millions but others around him have a bit more heart despite the redolent desperation afflicting all. There’s even a bit of light at the end of the tunnel. Mars might be able to escape the cycle of obsession and abandonment that plagued earlier generations.

Notes

  1. The six stories that form the novel: “Without Bugles” (1952), “Home is the Hero” (1952), “Men Only” (1952), “Alien Dust” (1953), “Pistol Point” (1953), and “Operation Mars” (1954). I’m intrigued enough to cover the other three at a later point. ↩︎
  2. John Boston and Damien Broderick’s Building New Worlds: 1946-1959: The Carnell Era, Volume One (2013). See the later two volumes as well: New Worlds: Before the New Wave, 1960-1964: The Carnell Era, Volume Two (2013) and Strange Highways: Reading Science Fantasy, 1950-1967 (2013). ↩︎
  3. Boston, 150. ↩︎
  4. Other Tubb stories Boston indicates that might fit the bill include: “Homecoming” (1954), “Precedent” (1952) [maybe], “Heroes Don’t Cry” (1953), “Rockets Aren’t Human” (1953), “Unwanted Heritage” (1952), “No Place for Tears” (1957), “School for Beginners” (1955), “The Veterans” (1955), “Into Thy Hands” (1954), “Samson” (1957), “The Greater Ideal” (1957), etc. ↩︎
  5. I thought “Home is the Hero” established that people couldn’t return after any extended time? This also implies that Randolph’s strategy wasn’t successful. I assume these internal discrepancies were smoothed over in the novel version. ↩︎

For book reviews consult the INDEX

For cover art posts consult the INDEX

For TV and film reviews consult the INDEX

#13 #15 #1950s #21 #bookReviews #ECTubb #sciFi #scienceFiction

2024-12-01

November 2024 in Books

I read stuff! Though I didn’t read as much as I had hoped I would last month.

  • Galway Girl (Jack Taylor #15) by Ken Bruen ⭐⭐⭐⭐⭐ (Read on 11/26/24) – Some Jack Taylor books stand out from the crowd, and this is one of them. I wouldn’t recommend you start with this book since it is the 15th in the series, but something to look forward to (though, yes, bad things continue to happen to Jack).
  • Bullet Train (Assassins, #2) by Kōtarō Isaka ⭐⭐⭐⭐★ (Read on 11/26/24) – Speaking of bad things, what happens if you’re a hired killer who has nothing but bad luck on a train full of other hired killers? Nothing good, but lots of amusing things!
  • In the Galway Silence (Jack Taylor, #14) by Ken Bruen ⭐⭐⭐⭐★ (Read on 11/22/24) – More bad things, nicely written about.
  • The Ghosts of Galway (Jack Taylor #13) by Ken Bruen ⭐⭐⭐⭐★ (Read on 11/20/24) – I read 3 Jack Taylor books this month and boy, do the bad things keep happening to him!
  • Playground by Richard Powers ⭐⭐⭐⭐⭐ (Read on 11/10/24) – If you were drafting a list of the greatest living American novelist Richard Powers would certainly be on the list and this book is a fine example of why. It ties together friendship, AI, money, and environmentalism to make a heartbreaking story.
  • Exodus: The Archimedes Engine (Archimedes Engine, #1) by Peter F. Hamilton ⭐⭐⭐⭐★ (Read on 10/30/24) – I love Peter F. Hamilton’s books but I wasn’t sure about this one since it is some sort of tie-in with a game. I shouldn’t have worried because it has all the hallmarks of classic Hamilton (including being ridiculously long!). If you’re in the mood for a long space opera, give it a try!

#1 #13 #14 #15 #2

Festival 2024 Tag 1

/ Freitag, 13. September 2022

Hanseatenweg 10
Akademie der Künste
11.00 — 23.00
AdK Foyer
/ „Meine neue Syntax ist der Schnitt“
Ausstellung zu den O-Ton-Pionieren Paul Pörtner & Paul Wühr11.00 — 19.00
AdK Vorplatz/ Es bennt!
Mobiles Aufnahmestudio zur Hörspielproduktion mit Josef Maria Schäfers15.00 und 17.30
AdK Halle 3/ BLINDer
I
nteraktive Soundi Installation von Carina Pesch (dt/eng)14.00 — 21.00
/ Kinderbetreuung
Hör-Spielen für Kinder von 2 bis 10 Jahren.
11.00
Buchengarten
/ Abenteuer und Alltag
Präsentation der Schülerworkshops mit Stella Lunkce
12.30
Pause
13.00
Buchengarten/ ¿Blinde hören¡
Präsentation des Hörkunst- / Podcast-Workshops
mit Reiner Delgado und Robbie Sandberg14.30
Pause
15.00
Buchengarten
/ Audiowalk Award
präsentiert von Guidemate und Soundmarker16.00
Buchengarten
/ Das kurze brennende Mikro I (#KBM)
Hörstücke von 5 bis 20 Minten
Moderation: Robert Schoen 1 Nic Romm: Powernap / 12:15  2 Amir Shokati: movements / 18:24  3 Rainer Kremser: bis? – blind in Steglitz / 18:39 4 Vivien Schütz: In the black / 19:29 5 Lukas Diestel & Elias Hirschl: One up / 10:1418.00
Pause18.30
Saal
//// Melina von Gagern, Stella Luncke, Barbara Meerkötter:
FLESCHback – 100 Jahre Hörspielzauber – Live
/ Eröffnung des 15. BHF
Kathrin Röggla, Mitglied der AdK und Vertreter:innen des BHF e. V.
anschl. kurze Pause19.30
Saal
//// Natascha Gangl & Rdeča Raketa:
Wendy Perd Tod Mexiko – Live
20.30
Pause
21.00
Buchengarten

/ Das kurze brennende Mikro II (#KBM)
Hörstücke von 1 bis 5 Minuten
Mod: Robert Schoen6 Michael Kanofsky: Summa Summarum – Eine Bilanz / 08:037 Marta Medvešek & Phoebe McIndoe: Kinoorgel Babylon / 09:228 Sabine Zieser & Andrea Maria Erl: Spieglein, Spieglein an der Wand, wer ist am unglücklichsten im ganzen Land? / 19:599 Timo Sieke: Rob in the Hood / 13:4110 Ingrid Noemi Stein: Exit Monroe / 14:3922.30
anschl. Publikumsvoting und Pause
BuchengartenVerleihung des Publikumspreises
// Das kurze brennedne Mikro /#KBM)anschl. Ausklang  Besternte Hörspiele sind zusätzlich für den Förderpreis des BHF e. V.  /\ Das zündende Mikro nominiert.

#0ca7e7 #15 #2ec848 #a050c8 #d4d4d4 #db008b #f20000 #ff0000

https://berliner-hoerspielfestival.de/?p=10366

Festival 2024 – Die Wettbewerbe

/ Der MikroFlitzer

 

Hörstücke bis 1 Minute (#DMF)

Hörstücke bis maximal 60 Sekunden (#DMF), die den Satz „Ich kann nicht abschalten“ und das Geräusch der Erschaffung eines neuen Moments enthalten.

Tilman Böhnke und Alexander Scharf:
Ultra Metam
/ 1:00

Julie Guigonis:
Hausrüttler
/ 0:58

Felix Kubin:
MicroFlitzer
/ 1:00

Constanze Lewandowsky:
Flüchten
/ 1:00

Maik Martschinkowsky:
All Clocks Are Bastards
/ 1:00

Phoebe McIndoe:
Navigating Reaper
/ 1:00

Nic Romm:
Kassenpatientin
/ 0:59

Christian Ruhm:
Ich Kann _ Nicht Abschalten!
/ 1:00

Alexander Scheutzow:
Letzte Abzweigung
/ 1:00

Peter Vittoria:
Die perfekte Szene
/ 1:00

Besternte Hörspiele sind zusätzlich für den Förderpreis des BHF e. V.  /\ Das zündende Mikro nominiwert.

/ Das glühende Knopfmikro

 

Hörstücke bis 5 Minuten (#GKM)

blablabor:
das o vor dem ton
/ 4:58

Livia Heiss:
Lang An
/ 3:33

Sebastian Hocke:
Die Riten des Übergangs
/ 5:00

Helmut Hostnig:
Siebzig
/ 0:48

Judith Humer:
Huu
/ 4:03

Rainer Kremser:
hörfunk. eine provokation
/ 5:00

Björn Kuhligk:
Am Ende kommt das Ende
/ 4:59

Cristina Marras:
My non arrival
/ 4:19

Ben Rinosch:
Metamorphosen im Waschsalon
/ 5:00

Pit Schaaf:
Warteschleifen-Roulette
/ 3:34

Sara Schmiedl:
Ein Ort
/ 3:02

Dominik Wachsmann & Denis Kley:
Ladenhüter
/ 4:11

Besternte Hörspiele sind zusätzlich für den Förderpreis des BHF e. V.  /\ Das zündende Mikro nominiwert.

// Das kurze brennende Mikro

 

Hörstücke von 5 bis 20 Minuten (#KBM)

Lukas Diestel & Elias Hirschl:
One up
/ 10:14

Michael Kanofsky:
summa summarum
/ 08:03

Rainer Kremser:
bis? – blind in Steglitz
/ 18:39

Marta Medvešek & Phoebe McIndoe:
Kinoorgel Babylon
/ 09:22

Nic Romm:
Powernap
/ 12:15

Vivien Schütz:
In the black
/ 19:29

Amir Shokati:
movements
/ 18:24

Timo Sieke:
Rob in the Hood
/ 13:41

Ingrid Noemi Stein:
Exit Monroe
/ 14:39

Sabine Zieser & Andrea Maria Erl:
Spieglein, Spieglein an der Wand, wer ist am unglücklichsten im ganzen Land?
/ 19:59

Besternte Hörspiele sind zusätzlich für den Förderpreis des BHF e. V.  /\ Das zündende Mikro nominiwert.

/// Das lange brennende Mikro

 

Hörstücke von 20 bis 60 Minuten (#LBM)

Christian Berner & Frank Schültge:
Die Schöne und das Ding aus dem Sumpf
/ 47:39

Caroline Böttcher & Julia Ohlendorf:
A 0 – Ein ortsbezogenes Hörspiel an der Autobahn
/ 42:11

Paul Bradley & La Quadrature:
Processus Lowbrow
/ 28:40

Mariola Brillowska:
Radio Tele Funke auf dem Mond
/ 27:24

Ferdinand Klüßmer et. al.:
Fatzer Versucht #1
/  40:03

Marta Medvešek:
Gozd je
/ 23:51

Lena Schmidt:
Muscheln, Bunker 
/ 30:04

Besternte Hörspielse sind zusätzlich für den Förderpreis des BHF e. V. /\ Das zündende Mikro nominiert.

/\ Das zündende Mikro

 

Debüt-Hörstücke für den Förderpreis des BHF e. V.

Julie Guigonis:
Hausrüttler
/ 0:58

Judith Humer:
Huu
/ 4:03

Constanze Lewandowsky:
Flüchten
/
1:00

Ben Rinosch:
Metamorphosen im Waschsalon
/ 5:00

Nic Romm:
Powernap
/ 12:15

Nic Romm:
Kassenpatientin
/ 0:59

Pit Schaaf:
Warteschleifen-Roulette
/ 3:34

Sara Schmiedl:
Ein Ort
/ 3:02

Lena Schmidt:
Muscheln, Bunker 
/ 30:04

Amiri Shokati:
movements
/ 18:24

Dominik Wachsmann & Denis Kley:
Ladenhüter
/ 4:11

 

#000000 #0ca7e7 #1 #15 #2ec848 #db008b #ddd #f20000 #ff0000 #ff6e00

https://berliner-hoerspielfestival.de/?p=10271

2024-02-04

Neurectomy – Overwrought Review

By Felagund

I just couldn’t turn down an album by a band called Neurectomy. I’ve heard of a lot of medical procedures in my day, but I wasn’t as familiar with the process by which a nerve is severed or removed to reduce pain, never to grow back again. With a new “ectomy” added to my growing surgical lexicon, I was still apprehensive. But while tech death can certainly be hit or miss (with the misses often being tedious, forgettable affairs), I was far too interested in the band name and the album art to let something as silly as past experience impact my decision-making. And that is how I ended up with New York-based Neurectomy’s debut album Overwrought on my to-do list. And while I can’t speak to the band’s abilities when it comes to nerve-related removal, I certainly have my opinions when it comes to their brand of unrelenting technical death metal.

Some of my favorite tech death albums from recent years strike a key balance: they’re able to whip plenty of technical wizardry at the listener without sacrificing emotion, accessibility, or (just a drop or two) of melody. Groups like Carnosus, Archspire, Obscura and a host of others have found success (in my own bold estimation) by implementing this approach to varying degrees. Neurectomy certainly whip technical wizardry at the listener, bouncing as they do from one skillful, mind-bending solo to another. The problem is that Neurectomy were so focused on reaching such lofty heights of proficiency that they forgot to make actual, memorable songs. Why write a compelling riff when you can toss in another squealing, lightning-fast solo? Why leave room for an atmospheric interlude when you can delve into another whirlwind of impressive, soulless guitar noodling? If this sounds harsh, it’s because I know Neurectomy can write more balanced songs, they just chose not to.

Case in point: album opener “Abducted for Research” kicks off in a grimy, fetid fashion before finding a wonky, almost dissonant groove that immediately grabbed my attention. Unfortunately, this interesting groove is quickly abandoned in favor of less memorable, speed-demon technicality. It returns again near the end of the track, but is once more unceremoniously replaced by more “look what I can do!” guitar work. Following track “Culinary Cadaveric Art” also hints at Neurectomy’s ability to compose music beyond an array of bright n’ shiny solos. This tune features a big, thick riff that caused my ears to perk up. Could they be going in a different direction? Are we going to get more than undeniably proficient but utterly unmoving musicianship? No. The aforementioned big, thick riff disappears almost as quickly as it arrives, to be replaced by a brief bass solo and more gratuitous guitar wankery.

And it’s here, after only two tracks, that Overwrought truly devolves into flamboyant futility. The band Rush have an instrumental tune entitled “La Villa Strangiato” from 1978 that has a particularly apt subtitle: “An Exercise in Self-Indulgence.” And that’s what the following 6 songs feel like to these battered eardrums: a 32-minute opportunity to prove to the listener just how talented these musicians are. I cannot deny that the oddly-named track “Dolphin” features a stellar opening that feels like you’re being sucked into a black hole. I will gladly report that mid-album number “Zombified” includes an unexpected, jazz-tinged section. And I’ll happily exclaim that closer “Crimson Tsunami” flirts with an honest-to-goodness riff as well as a slower, more moody interlude (featuring a solo, of course). But all of these brief, shining moments are merely minor exceptions that prove the rule. Add in percussive, deathened growls that only serve to further punctuate this dizzying display, and you’re left with an album that, like the Tin Man from The Wizard of Oz, is plenty shiny but has no heart to speak of.

Sometimes an album isn’t bad because the band aren’t talented, but because technical prowess becomes the sole marker for success. If we were to award Neurectomy points for stellar musicianship, the score below would indeed be a lot higher. It’s not that what they’ve produced is unlistenable; far from it. But it’s also painfully forgettable. It’s mad scramble to produce more squealing notes, more solos capped off by more pitch harmonics is impressive, but it’s also excessive. Perhaps I find this slab all the more frustrating because it’s clear Neurectomy are capable of finding humanity amidst the wizardry, they just refused to go that route. And the result? A debut that is overindulgent, overproduced, and exceedingly Overwrought.

Rating: 1.5/5.0
DR: Best Guess | Format Reviewed: 320 kbps mp3
Label: Self-Released
Websites: neurectomy.bandcamp.com | instagram.com/neurectomy
Releases Worldwide: November 17th, 2023

#15 #2023 #AmericanMetal #Archspire #Carnosus #Neurectomy #Nov23 #Obscura #Overwrought #Review #Reviews #Rush #SelfReleases #TechnicalDeathMetal

2023-12-14

Tariot – Drag Me to Hell Review

By Dear Hollow

Look, I’m one of like three metalcore apologists at Angry Metal Guy HQ,1 and I’ve had it up to here. No more sticky noted car, printer wrapped in festive holiday paper, or the squirting flower trick, okay guys? Plus the rubber rat with “BREAKDOWNS” scrawled with Sharpie was going too far. I already get my seven daily lashes from the Most Holy Gorilla when the punishment of metalcore promos seemed insufficient. As we approach the holidays, the last thing I want to do at the office Christmas party is to open my bonus addressed to “sellout.” Don’t even fucking think about it. And Jesus, Tariot sure ain’t helping my reputation. As such, I’m writing this review hunched over the keyboard like a monk in deep meditation to prove to the higher-ups that I’m working on some doom record or blackened prog album. As you may have guessed, Singapore five-piece Tariot is metalcore, featuring frantic fry vocals, noodly guitar fills, and breakdowns. Shit, hi Holdeneye, just working on that latest dissodeath review haha. No, no delays, and no -core influence. Of course all my reviews are always on time! Anyway, Drag Me to Hell is tough-guy metalcore through and through with some touches of post-hardcore, electronic, and nu-metal – like if August Burns Red, Cane Hill, and Our Last Night had a child. Look, I don’t like it any more than you do, would you quit that dry heaving? Go to the bathroom if you need to. Drag Me to Hell is an album with its moments but thanks to its confused structure, weak pieces, and excessive length, I’m comfortable keeping Tariot on the down-low.

Hey Maddog! No, I’m not trying to find the good in metalcore – ’tis foolhardy! Oh hi Doom_et_Al, found a new melodic black metal album to give 4.0? Nice. Anyway, Tariot actually features a few moments of excitement across its forty-two-minute runtime, even if the best feels like a knockoff Crystal Lake. While graced with wild guitar licks throughout, the best tracks balance the typical nimble riffs with densely crushing punishment. “Obsidian,” “Hell Hole,” and the previously released single “The Devil Inside Me” bring bottom-scraping heavy breakdowns to the song climaxes, which balance neatly with the fretboard wizardry and more urgent and aggressive tempos. Former Novelists vocalist Tobias Rische brings a much-needed grounding to “Alas,” while the vocals of Fairuz Ramlan add heat alongside one of the best riffs of the album in “Grave Future.” Used sparingly, nu-metal adds a tasteful intensity that nearly flies off the rails in tracks like “Alas” and “Hell Hole,” recalling acts like recent MouthBreather and early Darke Complex. The second half is the clear winner, with more infectious energy coursing through it. Oh hey Thus Spoke, haha, yeah metalcore sucks haha.2

The problem with Tariot’s Drag Me to Hell is twofold: there are weak songs present and those that are solid sound too much like previously established metalcore fare. Most damningly, the cleans that pervade always waver on the edge of out-of-tune, most painfully present in the aptly titled “Rain On My Parade,” “Eternal War,” and “Life of Nothing” which derail any energy with either post-hardcore- or grunge-influenced mediocrity that teeters into bad territory often. While not entirely detrimental, it leaves a bitter taste in solid tracks like “The Devil Inside Me” or “Lament,” which come unnervingly close to ruin. The nu-metal effect gets too much, especially in tracks like “Metamorph,” whose awkward gang vocals and mismatched climaxes worsen it, and “Hell Hole,” whose rap-influenced closing portions do not fit. Even some less problematic tracks like intro “Death by Seven” and “Eve” pale in comparison to their surrounding highlights (or nadirs) by sheer lack of memorability. However, even Tariot’s best still conjures the spirit of Crystal Lake’s “Prometheus” but missing the necessary charisma.

Ultimately, while the second half of Drag Me to Hell amps the intensity after a painful first half derailed by haphazard cleans and awkward nu-metal influence, but it feels largely like Tariot’s touchdowns in garbage time throughout a deceptively long forty-two-minute runtime; by the time “The Devil Inside Me” hits, the attention span would understandably be run thin. Tariot’s highlights are already mimicry at best with speedy riffs, thuggish breakdowns, and barked vocals, but given a horrendously inconsistent tracklist, it is difficult to recommend Drag Me to Hell for even most metalcore fans. So I guess maybe the sticky noted car was deserved.3

Rating: 1.5/5.0
DR: 6 | Format Reviewed: 160 kbps mp3
Label: Out of Line Music
Websites: tariot.bandcamp.com | facebook.com/tariotsg
Releases Worldwide: November 24th, 2023

#15 #2023 #AugustBurnsRed #CaneHill #CrystalLake #DarkeComplex #DragMeToHell #Electronic #MemphisMayFire #Metalcore #Mouthbreather #Nov23 #Novelists #NuMetal #OurLastNight #OutOfLineMusic #PostHardcore #Review #Reviews #SingaporeanMetal #Tariot

Fabian Pascal has updated his thoughts on 1NF at Repeating Groups and 1NF.

Summary

Looking at the semantics of a database relation would allow either a list of values for a single attribute, or for a relation of up to two (2) attributes for an embedded relation.

Date is correct in the formal sense of what 1NF is, but Pascal is more pragmatic in his approach.

The Controversy

Pascal (2021, 26 June) argues that:

> A relation is not in 1NF (and, thus, not a database relation) if it has relation-valued attributes (RVA) defined on relation-valued domains (RVD), or “nested relations” – the relational equivalent to hierarchic “repeating groups” (i.e., groups of values that repeat).>> Repeated attributes (i.e., an attribute of the same type that repeats, here CHILD) are poor design, but do not violate 1NF. A CHILDREN RVA with relation values would: each relation value a set of tuples (groups of values) representing the properties of children that repeat for each employee; in which case EMPLOYEES would not be a database relation.

Date (2019, p.37) has a different view: “…1NF places no limitations on what those attribute types are allowed to be.[35] They can even be relation types; that is, relations with relation valued attributes — RVAs for short — are legal…” (Emphasis Mine).

The Controversy Expressed in Oracle SQL

For Oracle DBAs, the best way to think about relation-valued attributes (RVA) is consider them an analogue for nested tables. This implementation matches Date (2019, p.37) as a type is required to include a nested table as shown in the following example:

CREATE TYPE project_t AS OBJECT(pno NUMBER, pname VARCHAR2(80));CREATE TYPE project_set AS TABLE OF project_t;CREATE TABLE proj_tab (eno NUMBER, projects PROJECT_SET)    NESTED TABLE projects STORE AS emp_project_tab                ((PRIMARY KEY(nested_table_id, pno))     ORGANIZATION INDEX)    RETURN AS LOCATOR;

Pascal (2022, 26 June) would prefer the following code (as he held his nose) with VARRAYs:

CREATE TYPE project_no_t AS VARRAY(10) of NUMBER;CREATE TABLE proj_tab (eno NUMBER, projects project_no_t);

Both of these examples would have violated the traditional understanding of what 1NF was about. The PROJECTS column had repeated values. But the current understanding is that a type can be a collection of other types. To do otherwise would be to descend into the madness of defining what a primitive type is. As an example, consider how to differentiate between a string and an array of characters.

The Semantics Approach to the Controversy

I think the best way to resolve this controversy is to consider the semantics of a relation value. The current understanding of both Date and Pascal (see ‘Appendix’ below) is that the semantics of a relation value arises from what relation variables the relation value could be assigned to.

Let’s look the possible relation that could be assigned to Date’s version of `PROJ_TAB“:

  • {eno: 1, projects: {{pno: 10, pname: 'Clarity'}, {pno: 20, pname: 'Infra'}}}
  • {eno: 3, projects: {{pno: 15, pname: 'CA-7'}}}

The true postulates that correspond to this relation value could be expressed, in English, as:

  • Employee #1 is assigned to projects: ‘Clarity’ (project #10); and ‘Infra’ (project #20).
  • Employee #3 is assigned to project ‘CA-7’ (project #15).

For Pascal’s version of PROJ_TAB, a possible relation could be:

  • {eno: 1, projects: {10, 20}}
  • {eno: 3, projects: {15}}

The true postulates that correspond to this relation value could be expressed, in English, as:

  • Employee #1 is assigned to projects #10 and #20.
  • Employee #3 is assigned to project #15.

Both sets of postulates are intelligible to the ordinary reader. However, Date’s formulation of 1NF would rapidly become unintelligible with RVAs that many attributes. More than two (2) attributes for an embedded RVA would be difficult to comprehend.

Appendix: Relvar Predicates

What I think is missing from both Pascal’s and Date’s contentions is a reference to the relvar predicate. Date (2019, p.19) define this as:

> Definition: Let relvar R have predicate P. Then The Closed World Assumption (CWA) says (a) if tuple t appears in R at time T, then the instantiation p of P corresponding to t is assumed to be true at time T; conversely, (b) if tuple t plausibly could appear in R at time T but doesn’t, then the instantiation p of P corresponding to t is assumed to be false at time T. In other words (albeit a trifle loosely): Tuple t appears in relvar R at a given time if and only if it satisfies the predicate for R at that time.

However, Pascal (2022, 3 July) previews different terminology:

> A relation is a set that is a relationship among sets (domains) – a subset of their cross-product – a mathematical abstraction that represents nothing in the real world:>> * an intension – the relation predicate (RP) – the criterion of set membership that tuples must satisfy to qualify as set members;> * an extension – the set of tuples that satisfy the RP.

Relational databases owe their name to the relations of mathematical relation theory, which Codd adapted for database management.

References

Darwen, H., & Date, C. J. (1994). What a database really is: Predicates and propositions. Relational Database Writings, 1997.

Date, C. J. (2019). Database design and relational theory: normal forms and all that jazz. Apress.

Pascal, F. (2022, 26 June). REPEATING GROUPS AND 1NF (t&n). Database Debunkings. https://www.dbdebunk.com/2022/06/repeating-groups-and-1nf-t.html.

Pascal, F. (2022, 3 July). RELATIONS, DATABASE RELATIONS AND TABLES (sms). Database Debunkings. https://www.dbdebunk.com/2022/08/database-relations-tables-and-semantic.html

Pascal, F. (2022, 22 August). DATABASE RELATIONS, DATABASE DESIGN & CORRECTNESS (sms). Database Debunkings. https://www.dbdebunk.com/2022/08/database-relations-database-design.html

https://yaocm.wordpress.com/2023/10/18/comments-on-repeating-groups-and-1nf/

#1 #10 #15 #20 #3

FORTUNE PROVIDES QUESTIONS FOR THE GREAT ANSWERS: #15
A: The Royal Canadian Mounted Police.
Q: What was the greatest achievement in taxidermy?
BOFH excuse #15:

temporary routing anomaly
2019-02-26
Belle Delphine Stan Account :verified: jg@networked.space
2019-02-14
BOFH excuse #15:

temporary routing anomaly
BOFH excuse #15:

temporary routing anomaly

Client Info

Server: https://mastodon.social
Version: 2025.07
Repository: https://github.com/cyevgeniy/lmst