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...gregcpb has added a photo to the pool:
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.
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.