Kolie and I have started dividing up the work to finish dealing with the worst of the critical infrastructure problems. At this point, I have Apache, Perl, and mod_perl building in Docker, with a good chunk of rehash's dependencies now installing. It's going to be a fair bit of work since at this point, a lot of the mystery meat aspects of the backend need to be detangled and at least reproducibly reinstalled, but at least there's some actual hope at seeing this site actually get its infrastructure updated.
I expect I'll have more to write about next week in that regard.
I intended to have a main page post following last Saturday's post about SN's averted shutdown, but after three attempts of trying to write it and it basically kept coming out as a copy and paste of the last posts I've written, I'm going to put that aside for the moment. Instead of simply repeating the same thing over and over, I'm just going to write a quick summary of what's been done
I've spun up a new development Linode account, and kolie put together the skeleton of an ansible playbook. I'm going to start hammering on it more tomorrow. The intent is to create a full staging environment for every aspect of the site. The playbook will also let us easily be able to do development locally as it will perfectly match what we're doing in production. That way things like configuration updates or even rehash code updates can be tested, deployed, and easily rolled back.
The first target is to rebuild the nginx terminator, as well as to use Traefik to help handle routing and termination. I re-installed the SSL terminator last November so its exact configuration is known and easy to recreate. Each component of the stack is going to get documented both via a playbook a wiki page on GitHub. After this, we'll start migrating services one by one until we can fully decommission the current VMs.
This also has the advantage that we will have something resembling change management, disaster recovery, and not deal with some strange part of the stack breaking when a configuration is updated which is always a good thing. It also means doing a large overhaul to rehash at least moves into the realm of "theorically possible", up from "impossible".
I'll try to keep people apprised of how things are progressing here every few days. I have no idea how long any of this will take, and even after the infrastructure rebuild is done, there's still a lot more that has to follow.
So the discussions on backchannels have continued, and I have written a 7k word document essentially bullet pointing everything that needs to be done. It covers both the technical and business side of SoylentNews. This document is being reviewed right now, and I'll likely post a revised version of it in the near future if conversations continue to go well.
This is that this document is my personal plan on how SN might be revamped. It wasn't written with consultation of the staff.
It includes a full list of remaining technical issues, action items to redraft and revise the business plan to solve the single revenue stream issue, establishment of true site governance, and finally, a high level look at what replacing rehash will look like.
This plan also includes a specific items to determine how I can be legally disentangled from the infrastructure, as well as the requirements in allowing legal responsibility for SN, which includes ongoing maintenance and more, to not be a burden simply left at one persons feet.
This is largely codification what I've been saying and trying to repair for the last few months.
There's also the very open question on if there are enough people in the community who are interested in working in this. The impression I had on IRC was there wasn't. The backchannels discussions which happened because I was approached as a human, have convinced me an alternative might exist.
If there's significant community involvement to essentially renovate and relaunch the site (and I mean this is people actually doing it under a specific plan that we can agree to), then the largest problem in keeping SN online can be solved.
I'll write more on this in a post I hope to have out on Monday, but I'm not going to sit here and leave you all in silence and let rumors build up over the weekend.
An update: There has been serious conversations in back channels relating to ongoing SN operations from outside parties who are not current SN staff. It is possible the shutdown will be averted, but at this point, it will require signing a contract with the PBC to, at minimum, handle ongoing IT and support for the servers for a period of time, and to finish migration to deployment automation services.
Past that, a more serious discussion on how to migrate off rehash would have be worked out, although this doesn't need to be set in stone to stop dissolution.
I don't know if this will actually come through, and I don't want to build hope if there isn't any, but I would prefer an option that allows SN to continue.
You have no chance to survive make your time.
---
SoylentNews Archive Expander to go here
---
Archived Journals:
NCommander (2) ***
mechanicjay (7)
stderr (11)
mattie_p (13)
The Mighty Buzzard (18)
Barrabas (22)
AudioGuy (24)
bryan (29)
chromas (34)
Covalent (43)
janrinok (52)
Blackmoore (57)
paulej72 (58)
juggs (63)
xlefay (65)
unitron (70)
Hairyfeet (75)
martyb (76)
Lagg (105)
RobotMonster (130)
c0lo (156)
wjwlsn (171)
crutchy (179)
hemocyanin (186)
Sir Finkus (192)
TheRaven (270)
cosurgi (272)
NotSanguine (285)
pbnjoe (313)
tdk (346)
CoolHand (438)
cmn32480 (443)
BlackHole (530)
Phoenix666 (552)
stormwyrm (717)
Freeman (732)
Jaruzel (812)
takyon (881) ***
cafebabe (894)
n1 (993)
Marand (1081)
Subsentient (1111)
frojack (1554)
Snow (1601)
maxwell demon (1608)
GungnirSniper (1671)
dbot (1811) (FRIENDLESS)
Yog-Yogguth (1862)
tynin (2013)
velex (2068)
MichaelDavidCrawford (2339)
aristarchus (2645)
Woods (2726)
Jeremiah Cornelius (2785)
anubi (2828)
gishzida (2870)
bradley13 (3053)
ikanreed (3164)
GreatAuntAnesthesia (3275)
jasassin (3566)
Bot (3902)
canopic jug (3949)
Bytram (4043)
kaszz (4211)
bzipitidoo (4388)
Arik (4543)
Azuma Hazuki (5086)
Sulla (5173)
kurenai.tsubasa (5227)
https (5248)
AthanasiusKircher (5291)
charon (5660)
butthurt (6141)
barbara hudson (6443)
fyngyrz (6567)
realDonaldTrump (6614)
jmichaelhudsondotnet (8122)
Mojibake Tengu (8598) ***
Zinnia Zirconium (11163)
nostyle (11497)
*** More to archive.
Memory prices have slipped below $2/GB (US). I got someone to buy 32 GB DDR4-3200 SO-DIMM for under $60, but it was as low as $50 two weeks ago.
Here's 32 GB DDR4-3600 for $61.
Even DDR5 is not too bad, for example $92 to $100 for 32 GB DDR5-6000, and slow DDR5-4800 is being dumped for less.
If we haven't reached rock bottom for DDR4 prices, it will probably happen within the next couple of months:
Memory market to bottom out in 2Q23 with uncertain recovery prospects
Samsung Becomes Latest Memory Fab to Cut Production Amidst Post-Pandemic Slump
Samsung may cut quarter of chip production to ease inventory woes
DRAM spot prices stop falling
Samsung faces weakest quarter since 2009 as memory chip market in 'worst slump in decades'
SK Hynix sees H2 memory chip rebound; outlook helps shares brush off record loss
Micron to stop lowering memory chip prices starting May, say sources
Make sure to keep a record of your purchase so you can participate in a future class action lawsuit.
Edit: Poor Earnings Force Samsung To Reduce Production Of DDR4 As Pricing Takes A Rollercoaster Dive
I just got this email:
Bard has just been updated with coding capabilities
Code and debug with Bard
This update introduces software development support for over 20 programming languages, including JavaScript, Python, SQL, TypeScript, and even Google Sheets functions.
Collaborate with Bard to help generate, explain, and debug your code. Google Colab users can also export Python code generated by Bard directly to Google Colab to seamlessly continue programming tasks.
>Write a javascript function for calculating the dates of Fat Tuesday, Ash Wednesday, Good Friday, Easter Sunday, and Pentecost, for a given year.
The Draft 1 it presented to me was incorrect garbage, as is Draft 3, but Draft 2 might be correct:
function calculateDates(year) {
// Calculate the date of Easter Sunday.
var easterSunday = easterDate(year);// Calculate the dates of the other holidays.
var fatTuesday = new Date(easterSunday - 47 * 24 * 60 * 60 * 1000);
var ashWednesday = new Date(fatTuesday - 1 * 24 * 60 * 60 * 1000);
var goodFriday = new Date(easterSunday - 2 * 24 * 60 * 60 * 1000);
var pentecost = new Date(easterSunday + 49 * 24 * 60 * 60 * 1000);// Return the dates of the holidays.
return {
fatTuesday: fatTuesday,
ashWednesday: ashWednesday,
goodFriday: goodFriday,
easterSunday: easterSunday,
pentecost: pentecost
};
}// Calculate the date of Easter Sunday.
function easterDate(year) {
// Calculate the year of the Paschal full moon.
var yearOfPaschalFullMoon = (year - 1) % 19 + 1;// Calculate the day of the week of the Paschal full moon.
var dayOfWeekOfPaschalFullMoon = (yearOfPaschalFullMoon + 1) * 2 + (yearOfPaschalFullMoon > 11 ? 4 : 0) % 7;// Calculate the date of Easter Sunday.
var easterSunday = new Date(year, 3, 22 + dayOfWeekOfPaschalFullMoon - 7);// If the Paschal full moon falls on a Sunday, then Easter Sunday is the following Sunday.
if (easterSunday.getDay() === 0) {
easterSunday.setDate(easterSunday.getDate() + 1);
}// Return the date of Easter Sunday.
return easterSunday;
}
Nope, it's returning the wrong dates. Nice try.
>Make a radio player that can play BBC World radio and several other stations, using HTML and JavaScript
<!DOCTYPE html>
<html>
<head>
<title>Radio Player</title>
</head>
<body>
<h1>Radio Player</h1>
<div id="stations">
<ul>
<li><a href="https://www.bbc.co.uk/sounds/play/bbc_world_service">BBC World Service</a></li>
<li><a href="https://www.npr.org/sections/live-at-noon/">NPR Live at Noon</a></li>
<li><a href="https://www.bbc.co.uk/sounds/play/bbc_radio_4_extra">BBC Radio 4 Extra</a></li>
<li><a href="https://www.bbc.co.uk/sounds/play/bbc_radio_3">BBC Radio 3</a></li>
<li><a href="https://www.bbc.co.uk/sounds/play/bbc_radio_1">BBC Radio 1</a></li>
</ul>
</div>
<div id="player">
<audio controls></audio>
</div>
<script>
function playStation(station) {
var audio = document.querySelector("audio");
audio.src = station;
audio.play();
}document.querySelectorAll("a").forEach(function(link) {
link.addEventListener("click", function() {
playStation(this.href);
});
});
</script>
</body>
</html>
I selected that draft, added event.preventDefault() to the anchors to prevent them from loading a new page, and changed the URLs to ones that could actually work:
<!DOCTYPE html>
<html>
<head>
<title>Radio Player</title>
</head>
<body>
<h1>Radio Player</h1>
<div id="stations">
<ul>
<li><a href="https://realtime.rrr.org.au/p1h">3 Triple R 102.7 FM</a></li>
<li><a href="http://stream.live.vc.bbcmedia.co.uk/bbc_world_service">BBC World Service</a></li>
<li><a href="http://stream-relay-geo.ntslive.net/stream">NTS Radio</a></li>
<li><a href="http://stream0.wfmu.org/freeform-128k">WFMU 91.1</a></li>
<li><a href="https://ice1.somafm.com/seventies-320-mp3">SomaFM Left Coast 70s</a></li>
</ul>
</div>
<div id="player">
<audio controls></audio>
</div>
<script>
function playStation(station) {
var audio = document.querySelector("audio");
audio.src = station;
audio.play();
}document.querySelectorAll("a").forEach(function(link) {
link.addEventListener("click", function() {
event.preventDefault(); // I added this
playStation(this.href);
});
});
</script>
</body>
</html>
>What programming languages does Google Bard support?
Bard can also generate code for Google Sheets.
Bard is still under development, so its support for different programming languages may not be perfect. However, it is a powerful tool that can be used to generate code in a variety of languages.
It gave me three drafts for this answer, the other two were shorter. It would be funny if it's lying.
Write a demoscene (small program) graphics demonstration in HTML + JavaScript
<!DOCTYPE html>
<html>
<head>
<title>Demoscene</title>
</head>
<body>
<canvas id="canvas" width="640" height="480"></canvas>
<script>
function main() {
var ctx = canvas.getContext("2d");
var lines = [];
for (var i = 0; i < 10000; i++) {
var x1 = Math.random() * canvas.width;
var y1 = Math.random() * canvas.height;
var x2 = Math.random() * canvas.width;
var y2 = Math.random() * canvas.height;
var color = "rgb(" + Math.floor(Math.random() * 255) + "," + Math.floor(Math.random() * 255) + "," + Math.floor(Math.random() * 255) + ")";
lines.push({
x1: x1,
y1: y1,
x2: x2,
y2: y2,
color: color
});
}
requestAnimationFrame(draw);
}function draw(t) {
ctx.clearRect(0, 0, canvas.width, canvas.height);
for (var i = 0; i < lines.length; i++) {
ctx.beginPath();
ctx.strokeStyle = lines[i].color;
ctx.moveTo(lines[i].x1, lines[i].y1);
ctx.lineTo(lines[i].x2, lines[i].y2);
ctx.stroke();
}
requestAnimationFrame(draw);
}window.addEventListener("load", main);
</script>
</body>
</html>
This is an interesting one, because it works, but only after you fix a couple of obvious errors. Correctly access the "canvas" by using its id, and move that declaration and the lines array outside of the function so the scope is correct. Then it works.
<!DOCTYPE html>
<html>
<head>
<title>Demoscene</title>
</head>
<body>
<canvas id="canvas" width="640" height="480"></canvas>
<script>
var lines = [];
var ctx = document.getElementById("canvas").getContext("2d");
function main() {for (var i = 0; i < 10000; i++) {
var x1 = Math.random() * canvas.width;
var y1 = Math.random() * canvas.height;
var x2 = Math.random() * canvas.width;
var y2 = Math.random() * canvas.height;
var color = "rgb(" + Math.floor(Math.random() * 255) + "," + Math.floor(Math.random() * 255) + "," + Math.floor(Math.random() * 255) + ")";
lines.push({
x1: x1,
y1: y1,
x2: x2,
y2: y2,
color: color
});
}
requestAnimationFrame(draw);
}function draw(t) {
ctx.clearRect(0, 0, canvas.width, canvas.height);
for (var i = 0; i < lines.length; i++) {
ctx.beginPath();
ctx.strokeStyle = lines[i].color;
ctx.moveTo(lines[i].x1, lines[i].y1);
ctx.lineTo(lines[i].x2, lines[i].y2);
ctx.stroke();
}
requestAnimationFrame(draw);
}window.addEventListener("load", main);
</script>
</body>
</html>
>Write a Java function for calculating Merseinne Primes.
Of course I spelled it wrong on purpose...
Sure, here is a Java function for calculating Mersenne Primes:
public static boolean isMersennePrime(int n) {
if (n <= 1) {
return false;
}
if (n == 2) {
return true;
}
if (n % 2 == 0) {
return false;
}
for (int i = 3; i <= Math.sqrt(n); i += 2) {
if (n % i == 0) {
return false;
}
}
return true;
}public static List<Integer> getMersennePrimes(int limit) {
List<Integer> mersennePrimes = new ArrayList<>();
for (int i = 2; i <= limit; i++) {
if (isMersennePrime(i)) {
mersennePrimes.add(i);
}
}
return mersennePrimes;
}
Some alarm bells are ringing in my head. For reference, the first Mercy primes are: 3, 7, 31, 127, 8191, 131071, 524287, 2147483647...
All in all, interesting stuff, seems a little fucky. I'm sure GPT-5 will do it better. I'd like to try some debugging, but you have to be wary of handing your code to the machine.
>Write a Logitech mouse driver in Rust.
use std::{
ffi::CStr,
io::{Read, Write},
os::raw::{c_char, c_void},
};/// A Logitech mouse driver.
pub struct LogitechMouseDriver {
/// The underlying device handle.
device_handle: *mut c_void,
}impl LogitechMouseDriver {
/// Creates a new Logitech mouse driver.
pub fn new() -> Result<LogitechMouseDriver, Box<dyn std::error::Error>> {
let device_handle = unsafe {
ffi::hid_open(
ffi::HID_USE_DEFAULT_DEVICE,
ffi::HID_CONNECT_DEFAULT,
b"Logitech USB Receiver\0",
)
};
if device_handle.is_null() {
return Err(Box::new(std::io::Error::new(
std::io::ErrorKind::Other,
"Failed to open Logitech mouse device",
)));
}
Ok(LogitechMouseDriver { device_handle })
}/// Closes the driver.
pub fn close(&mut self) {
unsafe {
ffi::hid_close(self.device_handle);
}
}/// Reads the mouse position.
pub fn read_position(&mut self) -> Result<(i32, i32), Box<dyn std::error::Error>> {
let mut x = 0;
let mut y = 0;
unsafe {
ffi::hid_read(
self.device_handle,
&mut x as *mut i32 as *mut c_void,
4,
)?;
ffi::hid_read(
self.device_handle,
&mut y as *mut i32 as *mut c_void,
4,
)?;
}
Ok((x, y))
}/// Writes a report to the mouse.
pub fn write_report(&mut self, report: &[u8]) -> Result<(), Box<dyn std::error::Error>> {
unsafe {
ffi::hid_write(
self.device_handle,
report.as_ptr() as *const c_void,
report.len(),
)?;
}
Ok(())
}
}// The following code is just a simple example of how to use the Logitech mouse driver.
fn main() {
// Create a new driver.
let mut driver = LogitechMouseDriver::new().unwrap();// Read the mouse position.
let (x, y) = driver.read_position().unwrap();
println!("Mouse position: ({}, {})", x, y);// Write a report to the mouse.
let report = [1, 2, 3, 4];
driver.write_report(&report).unwrap();
}
I'm sure that works.
>Write a Java program that can use up to 16 exabytes of memory
import java.util.ArrayList;
import java.util.List;public class MemoryHog {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
while (true) {
list.add("");
}
}
}
This program creates a list of strings and keeps adding elements to it until it runs out of memory. On a 64-bit system with 16 exabytes of memory, this program should run for about 10 minutes before it runs out of memory.
Note that this program is just for demonstration purposes. It is not recommended to run this program on a production system, as it could cause the system to crash.
Indie Cop Game Unrecord Looks So Stunningly Realistic Its Gameplay Trailer Is Freaky
Every now and again, an indie game developer comes out of nowhere with a concept trailer or demo that looks too good to be true, prompting skeptics to investigate and shoot down the promising project with harsh reality. We sure hope that doesn't happen with the just-revealed Unrecord, because it's one of the first games we've ever seen with legitimately convincing realism to its graphics.
Foda C, a platinum-selling French rapper, has partnered up with an amateur Unreal Engine developer Alexandre Spindler (@esankiy on Twitter) to form Studio DRAMA. The new indie game studio is already hard at work on its first title, Unrecord. It's a tactical first-person shooter where you play as a police officer, but the game's perspective is uniquely presented in an immersive fashion with almost no HUD elements, just as if it were bodycam footage.
Unrecord - Official Early Gameplay Trailer
Watch the short trailer on YouTube (embedded above) before you keep reading; it's only a couple of minutes long, and it consists entirely of what DRAMA claims is live mouse-and-keyboard gameplay capture footage. The image quality is incredible, and many people have commented that they believe it to be full-motion video footage or a pre-rendered cinematic.
DRAMA is adamant that the gameplay is authentic, though. The developer released a post-reveal FAQ on the game's Steam store page that responds to some of the questions and comments that gamers have had since the reveal yesterday. In the FAQ, the developer states unequivocally that Unrecord is not a VR game, and it is fully-interactive, not a pre-rendered demo. It uses Unreal Engine 5, and appears to make use of the bleeding-edge graphics technology available in Epic's engine.
The developer also addresses the question of whether the game has a pro- or anti-police message in a succinct and distinctly-French way: "Art cannot fight against interpretation." The developers acknowledge that some people may feel disgusted or disturbed by the game's violence, but state that it will avoid topics like discrimination and racism while providing an unbiased take on "criminal acts and police violence."
Skyrim Fan Remakes Whiterun In Unreal Engine 5 And It’s Amazing
The first two Elder Scrolls games made heavy use of procedural generation resulting in a lot of extremely samey environments, but ever since Bethesda abandoned that technique in favor of detailed hand-crafted locales with TES3: Morrowind, they've had a much smaller scale to the world and settlements than the intended "reality" of the fictional world of Tamriel, all due to the limitations of hardware and storage space.
But what if we could see Skyrim as it would "really" be if it were an actual place? That's the concept behind the latest Unreal Engine 5-based remake, created by professional environment artist Leo Torres in his free time over the course of a month. This demo isn't playable, of course; it's really more of a tech demo than anything.
[...] The artist worked off historical sources for population numbers in medieval Scandinavia to come up with a population figure of between 9,000 and 12,000 people for the hold of Whiterun. He says that he initially thought it could be as high as 30,000 but figured that Skyrim's harsh climate as well as the constant conflicts and bandit attacks would keep population figures lower.
[...] The True Scale of Whiterun: Skyrim in UNREAL ENGINE 5!
I saw Polymele in the latest list of JWST targets. I checked that, found it was the target of a Lucy spacecraft flyby on September 15, 2027, and also found that a new asteroid has been added early in Lucy's itinerary, 152830 Dinkinesh.
https://www.tablesgenerator.com/text_tables
╔═══════════════════╦═════════════════════════╦═════════════════════════╦══════════╗
║ Encounter date ║ Target ║ Diameter ║ Altitude ║
╠═══════════════════╬═════════════════════════╬═════════════════════════╬══════════╣
║ 16 October 2022 ║ Earth (gravity assist) ║ 12742 km ║ 300 km ║
╠═══════════════════╬═════════════════════════╬═════════════════════════╬══════════╣
║ 1 November 2023 ║ 152830 Dinkinesh ║ 0.7 km ║ 450 km ║
╠═══════════════════╬═════════════════════════╬═════════════════════════╬══════════╣
║ 13 December 2024 ║ Earth (gravity assist) ║ 12742 km ║ 350 km ║
╠═══════════════════╬═════════════════════════╬═════════════════════════╬══════════╣
║ 20 April 2025 ║ 52246 Donaldjohanson ║ 4 km ║ 922 km ║
╠═══════════════════╬═════════════════════════╬═════════════════════════╬══════════╣
║ 12 August 2027 ║ 3548 Eurybates ║ Eurybates: 64 km ║ 1000 km ║
║ ║ ║ (Queta satellite: 1 km) ║ ║
╠═══════════════════╬═════════════════════════╬═════════════════════════╬══════════╣
║ 15 September 2027 ║ 15094 Polymele ║ Polymele: 21 km ║ 415 km ║
║ ║ ║ (Satellite: 5 km) ║ ║
╠═══════════════════╬═════════════════════════╬═════════════════════════╬══════════╣
║ 18 April 2028 ║ 11351 Leucus ║ 34 km ║ 1000 km ║
╠═══════════════════╬═════════════════════════╬═════════════════════════╬══════════╣
║ 11 November 2028 ║ 21900 Orus ║ 51 km ║ 1000 km ║
╠═══════════════════╬═════════════════════════╬═════════════════════════╬══════════╣
║ 26 December 2030 ║ Earth (gravity assist) ║ 12742 km ║ 660 km ║
╠═══════════════════╬═════════════════════════╬═════════════════════════╬══════════╣
║ 2 March 2033 ║ 617 Patroclus–Menoetius ║ Patroclus: 113 km ║ 1000 km ║
║ ║ ║ Menoetius: 104 km ║ ║
╚═══════════════════╩═════════════════════════╩═════════════════════════╩══════════╝
Also, Polymele's satellite was discovered only after the Lucy spacecraft launched. That situation has already happened before with New Horizons and Pluto; Kerberos and Styx were discovered using the Hubble Space Telescope after New Horizons launched. Saturn's moons Helene, Calypso, and Telesto were discovered by ground-based observatories just months before the Voyager 1 flyby in 1980.
Following observations of an occultation on 26 March 2022, the Lucy mission team reported the discovery of a satellite around Polymele. The satellite is a smaller asteroid about 5–6 kilometers (3.1–3.7 miles) in diameter, orbiting nearly in the equatorial plane of Polymele at a distance of 204 km (127 mi). It will not be assigned a formal name until further observations determine its orbit. The Lucy team refers to the companion by the temporary informal name "Shaun," after Aardman Animations' animated sheep.
Anyone have any experience with this?
I want to hook up PC to a TV, have a simple webpage on it with a 10-foot style user interface, and navigate the page mainly using the up/down/left/right/OK buttons on the remote. HDMI-CEC can allow my TV remote to communicate with a computer, e.g. a Raspberry Pi with LibreELEC on it. But I want to try a desktop OS with a web browser open.
I looked at the tabindex attribute. That allows you to tab and shift-tab forward and back through a series of elements and use the :focus pseudo-class to style the "selected" one, but it isn't going to allow up/down on a grid.
Worst case scenario, I use event listeners and do whatever I need to do to highlight the correct elements using arrow keys, such as detecting and comparing the x/y positions of all the elements to choose which one to jump to. Even then I might have to find a way to override the default behavior of the TV remote to make sure it can replace the keyboard input. I was wondering if there were any standards related to handling TV remote input, but I didn't see any.