‘Hands Off Our NHS’: Anti-Palantir Protests Break Out in UK Over Deal With National Health Service


“It’s exactly the use case that you don’t outsource, and you certainly don’t outsource outside the country,” Laura Gilbert, senior director of AI at the Tony Blair Institute, a think tank founded by the former prime minister, tells WIRED. “We should be learning from that data and building a better health service, not allowing an offshore company to learn and build better products they can sell to someone else.”

Ayub Bhayat, the director of data and analytics at the NHS, tells WIRED that the federated data platform is helping patients “while saving money for NHS teams and taxpayers.”

“There is no requirement for its use,” he says.

In early June, members of Parliament published a report warning that the UK’s growing dependence on Palantir represents “an unacceptable point of weakness.” The company is on track to become highly entangled in the public sector, the parliamentary committee argued, giving it immense leverage over the British state. The report also described a “clear mismatch with UK values.”

After the report was published, the UK technology secretary, Liz Kendall, said that the government is conducting a review of “every single aspect” of the NHS contract with Palantir before deciding whether to carry the deal forward.

Responding to the report in an op-ed published by The Telegraph, Mosley accused the MPs of “putting politics above patients” and fearmongering over the possibility that the company might abuse its access to sensitive health data. “Each NHS trust controls its own data; Palantir cannot use it, sell it, or move it,” he wrote.

Whether or not the government decides to carry the NHS contract forward, Palantir has demonstrated a willingness to resist attempts to oust it from the UK public sector. According to The Times, the company is gearing up to sue the mayor of London, Sadiq Khan, who blocked a $65 million deal with the Metropolitan Police, citing concerns about the procurement process and “values.”

A couple of hours after the demonstrations began, the protesters withdrew to a café at the nearby public library.

The group shared an optimism over a perceived swell in momentum behind calls to eject Palantir from the NHS, particularly in the wake of the parliamentary report. “We have this really big opportunity right now, because of the break clause,” says Lurken, the Pull the Plug cofounder.

But there’s also a world in which renewed public attention to the Palantir question could backfire, some feel, if the government decides to forge ahead with the contract. Another protester, who gave his name as JJ and identified himself as an NHS practitioner, says he worries that Palantir’s notoriety could cause already-skittish patients to think twice before volunteering information to their health care provider, with implications for their care. “We know that people don’t want to tell us everything. People are already distrustful. They’re just going to clam up,” says JJ. “We’re going to get less information, less history to be able to help people.”

Additional reporting by Isabella Ward.

Is Congestion Pricing Working? The MTA’s Revamped Data Team Is Figuring It Out


For the New York City Metropolitan Transportation Authority’s data and analytics team, January 5, 2025, felt a lot like kismet.

Three and a half years earlier, New York state legislators had passed a law requiring the MTA to release “easily accessible, understandable, and usable” data to the public; by January 2022, MTA chair and CEO Janno Lieber officially announced the new team’s formation. Meanwhile, New York City’s controversial congestion pricing program, which tolls cars entering Manhattan’s busiest streets, officially kicked off in 2019 but was chugging through a lengthy setup process, with the transit agency and state fighting lawsuits, politicians, and vocal naysayers along the way.

So when the program finally started in January, the MTA’s data and analytics team had prepared. They could see the moment the tolling started right in the spreadsheets. “The day that it turned on, one field changed from ‘no revenue collection’ to ‘revenue,’” says Andy Kuziemko, the deputy chief of the data and analytics team.

A few days later, the team was pumping out data on vehicle entries into the zone in 10-minute increments, and posting the data on its website, so that New Yorkers themselves could decide whether the congestion program was actually reducing traffic on city streets. The agency has been doing it since. You—yes, you—can view and download the MTA’s data right here.

The online web pages aren’t flashy, but they represent a rare and comprehensive public transit win for open-data advocates, who argue that access to well-maintained public datasets is crucial to government transparency and efficiency.

Since 2022, the MTA’s data and analytics team has grown to 26 full-time employees, who spend their workdays centralizing information that was once scattered through the entire MTA. The agency, to be clear, is big. The nation’s largest, it carries some 5.9 million riders on subways, buses, commuter railways, and through tunnels and bridges every day. That’s a lot of numbers to track.

Really a lot; MTA now publishes more than 180 datasets. Recent additions include more than a decade’s worth of data on the time MTA employees spend on “productive tasks,” a new dataset on subway-delay-causing incidents; and bus speeds on Manhattan’s most crowded downtown roads. Kuziemko says 30 more datasets are becoming publicly available “in the near future.”

Counter Intelligence

In an interview, Kuziemko and MTA chief of strategic initiatives Jon Kaufman credited a new culture of intra-agency data sharing for the renewed program. In 2023, leadership encouraged managers across the agency to allow their data to be ingested into the MTA’s “data lake,” which can be refined, stripped of identifying information, and eventually published openly. (Some of the MTA’s data contains the personally identifiable information of commuters; the agency says this specific data is not published for the public.) The agency has also started using new in-house software and tools, which give them technical capabilities they didn’t have before. “We have paid for zero hours of consulting time, which is a thing we’re really proud of—that we actually built in-house expertise in the public sector,” says Kuziemko. “It’s really cool.”

“It’s rare for a government agency to share this level of data granularity,” says Sarah Kaufman, who directs the NYU Rudin Center for Transportation and once led the agency’s open-data program. In fact, it’s something like an about-face for the MTA, which before 2009 made a habit of legally pursuing developers who scraped system timetable and route data to build rider-friendly apps.

not all arguments converted during string formatting


Estimated reading time: 2 minutes

In our latest post, we are going to discuss formatting issues that you may come across. It relates to how you format the data when passing it from the input of a user.

This scenario can happen as a result of user input, which then has some comparisons completed on it.

How does the problem occur?

The problem occurs when you pass the data, but do not format it correctly before you present it in the output.

In the below code you will see these lines:

print ("'{0}' is older than '{1}'"% age1, age2)
print("'{0}'is younger than '{1}', that looks correct!" % age1, age2)

The specific problem is that when you put the % before age1, and age 2 you will get this TypeError.

Why does the problem occur?

This problem occurs as the way you are referencing age1 and age2 has been deprecated.

For reference please look at PEP 3101 – Advanced String Formatting, but essentially if you are using % it is the old way of achieving this!

How can the problem be fixed?

So to fix this please look at the below code:

age1 = input("Please enter your age: ")
age2 = input("Please enter your father's age: ")

if age1 == age2:
    print("The ages are the same, are you sure?!")
if age1 > age2:
    #print ("'{0}' is older than '{1}'"% age1, age2)
    print("'{0}' is older than '{1}', you better check!" .format(age1, age2))
if age1 < age2:
    print("'{0}'is younger than '{1}', that looks correct!" % age1, age2)
    #print("'{0}'is younger than '{1}', that looks correct!".format(age1, age2))

As you can see, I have included the old incorrect code and the new correct code, and when I use the proper Python logic, it gives me the correct output as follows:

Please enter your age: 25
Please enter your father's age: 28
'25'is younger than '28', that looks correct!

Process finished with exit code 0