The Guardian

Latest news, sport, business, comment, analysis and reviews from the Guardian, the world's leading liberal voice

Freedom-loving Britain was at the heart of the 18th century slave trade – and this register proves it | William Pettigrew

Register of British Slave Traders reveals how deeply the trafficking of Africans was embedded in the country’s politics, economy, institutions and culture

Two obstacles have prevented us from appreciating the significance of the slave trade in British history. The first arose from the abolition campaign, which finally overcame opposition in parliament in 1807. The abolitionists promoted the idea that opposition to the slave trade flowed naturally from British values: justice, freedom and Christian benevolence. The success of this strategy obscured the role those same British values had played in supporting the trafficking. Today, Britain’s leaders place abolition in the pantheon of great and definitive national moments.

The second obstacle has been the ingrained tendency of the British to offshore the causes and effects of African chattel slavery to the Americas. According to this view, slavery, and the racial thinking it engendered, was an American, not European concern. But Europeans transported the great majority of enslaved African people to the Americas and reaped huge advantages from doing so. These advantages reshaped European societies.

Continue reading...

Lovely sunrise from Tsurugi

gregcpb has added a photo to the pool:

Lovely sunrise from Tsurugi

Lovely sunrise from Tsurugi

gregcpb has added a photo to the pool:

Lovely sunrise from Tsurugi

Lovely sunrise from Tsurugi

gregcpb has added a photo to the pool:

Lovely sunrise from Tsurugi

Lovely sunrise from Tsurugi

gregcpb has added a photo to the pool:

Lovely sunrise from Tsurugi

IA8A5859

Digital_trance has added a photo to the pool:

IA8A5859

Wel.nl

Minder lezen, Meer weten.

Frankrijk komt met nieuw voorstel voor maatregelen sociale media

PARIJS (ANP/AFP) - Frankrijk doet een nieuwe poging om sociale media voor minderjarigen te verbieden. President Emmanuel Macron maakte bekend dat de Europese Commissie daar maandag over wordt geĂŻnformeerd.

Macron heeft van het verbieden van sociale media voor jongeren onder de 15 jaar een speerpunt gemaakt. Hij wil dat het wordt geregeld terwijl hij nog president is. Een eerdere poging sneuvelde nadat de Franse Grondwettelijke Raad vorige maand een voorstel had verworpen.

De president meldde op X dat de regering "na grondig technisch voorwerk" klaar is om het dagelijks bestuur van de EU te informeren over aangepaste plannen. Dat is een belangrijke tussenstap die ervoor moet zorgen dat wetgeving ook aan EU-regels voldoet.

Steeds meer landen komen met maatregelen om jongeren te weren van sociale media. Dat heeft te maken met zorgen over het welzijn van jonge gebruikers.


The Daily WTF

Curious Perversions in Information Technology

CodeSOD: I Exist

In addition to using an ancient development environment, with terrible UX, Greta also has the misfortune of working in Pascal.

Recently, she was diagnosing a bug. The program was reporting that files didn't exist when they definitely existed. She traced the problem down into the system library. Let's see if you can spot what's wrong:

{ Delphi / Kylix Cross-Platform Runtime Library                           }
{ System Utilities Unit                                                   }
{                                                                         }
{ Copyright (c) 1995-2001 Borland Softwrare Corporation                   }
...

function FileAge(const FileName: string): Integer;
{$IFDEF MSWINDOWS}
var
  Handle: THandle;
  FindData: TWin32FindData;
  LocalFileTime: TFileTime;
begin
  Handle := FindFirstFile(PChar(FileName), FindData);
  if Handle <> INVALID_HANDLE_VALUE then
  begin
    Windows.FindClose(Handle);
    if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
    begin
      FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime);
      if FileTimeToDosDateTime(LocalFileTime, LongRec(Result).Hi,
        LongRec(Result).Lo) then Exit;
    end;
  end;
  Result := -1;
end;
{$ENDIF}

function FileExists(const FileName: string): Boolean;
{$IFDEF MSWINDOWS}
begin
  Result := FileAge(FileName) <> -1;
end;
{$ENDIF}

The first function here is FileAge, which returns the last modified timestamp on a file. Note the use of FileTimeToDosDateTime, which is a Windows API function. It converts LocalFileTime and stores the date part in the first output parameter (LongRec(Result).Hi) and the time part in the second output parameter (LongRec(Result).Lo). Result, in this case, is our return value. If anything goes wrong, we return -1.

The FileExists function then, simply calls FileAge. If it doesn't return a -1, there must be a file there.

That's an awkward, weird solution to the problem. There has to be a system call that can answer that question more obviously. But it doesn't seem like it should be blowing up- it looks like it should work.

But note that FileTimeToDosDateTime also returns a boolean value. If it succeeds, great, but if it fails, it returns false and sets an error code you can check. An error code that definitely isn't being checked.

And this brings us to the root cause of Greta's bug: the process that's writing the files isn't setting the "last write time", so while the file exists, the attempt to check its age fails, so FileExists believes that the file doesn't exist, just because it doesn't have a valid timestamp.

This is the kind of high quality softwrare that sometimes infects our system libraries.

[Advertisement] Keep the plebs out of prod. Restrict NuGet feed privileges with ProGet. Learn more.

The Register

Biting the hand that feeds IT — Enterprise Technology News and Analysis

Who, Me? Tech team stood and laughed at colleague who pressed the wrong off button

WHO, ME? Admitting to mistakes is a ticklish task, but one The Register tackles head-on each Monday in "Who, Me?" – the reader-contributed column that chronicles your worst working moments. This week, meet a reader we'll Regomize as "Bowman," who sent us a story from the early 2000s, a time when he says most servers were floor-mounted monsters. "I worked in an organization in Glasgow with a datacenter full of them, some with an external disk storage array sitting neatly beside the server." Maintenance was complicated by the arrays and servers looking remarkably similar. One fine day, Bowman learned that one of the servers needed some maintenance, including a hard reboot. A colleague named "Vince" set off to do the job, which everyone assumed would take a handful of minutes. Rather longer than expected passed before anyone realized Vince had not returned. Another member of the tech team was sent to check that Vince was all right. He soon returned with a grin and suggested that everyone should come and see what had happened. "Vince pressed what he thought was the relevant server's power button but immediately realized it belonged to the storage array sitting next to it," Bowman told The Register. Letting go of the power button would have turned off the array and caused an outage, but nobody else was within earshot. Vince therefore decided his best option was to keep his finger on the button. The entire tech team filed into the datacenter to witness Vince's predicament. "After taking sufficient time to show our support and compassion by pointing and laughing at him, and going to do under arm tickles, we finally asked the boss to take the server down with the excuse of 'urgent maintenance,'" Bowman wrote. "And that's how Vince's finger got some well-earned relief from the pressure it was under!" Have you been just a little cruel when confronted with a colleague’s misfortune? If so, you can confess by clicking here to send you story to Who, Me? ®

Pro-leider Jesse Klaver wil ‘ondanks alles’ praten over de begroting

Jesse Klaver is „ondanks alles” bereid om met de minderheidscoalitie in gesprek te gaan over de begroting van volgend jaar.