#Johnstone
caitlinjohnst.one/
#Israel #apartheid-Israel #EU #US #US-Israel #US-Israel-terrorism #Israel #Netanyahu #zionism #genocide #Gaza #Palestine #WestBank #Cisjordanie

Rogue communication devices found in Chinese solar power inverters


Aerial view of a vast solar farm featuring rows of black solar panels under a clear sky, with green fields and trees in the background.
“Rogue communication devices not listed in product documents have been found in some Chinese solar power inverters by US experts who strip down equipment hooked up to grids to check for security issues, the two people said. Over the past nine months, undocumented communication devices, including cellular radios, have also been found in some batteries from multiple Chinese suppliers, one of them said.”

I generally ignore all the unsubstantiated propaganda (think Huawei) out of the USA unless it actually is substantiated by some evidence. This does look like such a case, as undocumented devices have apparently been found in some Chinese inverters. Pure speculation is never evidence of anything.

My own LiPO4 battery for example does have a Wi-Fi communication device in it for calling home to the OEM, but firstly it is documented, and secondly I configure it to only connect via my IoT VLAN, and thirdly it calls home to the local company in my town who manufactured it. The same goes for my German made Victron inverter.

It is becoming more and more apparent though, given all the IoT devices we now install on our home networks, that just using any basic ISP router is no longer acceptable. You do need to separate your user devices from any such IoT devices, and then also vet which of those devices are allowed to access the Internet. There may be valid reasons for accessing the Internet such as getting updates, managing warranties, syncing to a cloud service you know about, etc.

Remotely accessing your IoT devices when you are away from home should be considered carefully. For example, my CCTV cameras are not allowed any Internet access, and if I want to access them while I’m away, I have to initiate a secure Tailscale tunnel and only then can I see them. The same goes for login access to my OPNsense firewall, it has no open login access facing the Internet at all.

It is true though that anyone capable of accessing your inverter (or many of them across a city or a country) could not only disable all your power, but it could also spark a massive demand load on the grid, possibly calling a blackout. So this has more severe implications than one home just being hacked to access data.

The analogy could be made with cars where 20 or 30 years ago airbags were not seen as essential, and going back further, neither were seatbelts nor power brakes, but today those are essential standard components of all cars. It is also time that home networking started to move with the times. There is actually no excuse on the hardware side, as much of this is just about software, not even actual hardware requiring replacement.

The problem though is a bit more complex as:

  • OEMs want to sell you new hardware, not just upgrade software on what you have.
  • Many cheaper devices have no automatic software upgrades.
  • Most home users are just not skilled enough yet to implement VLANs properly.
  • It is too easy for IoT devices to just be connected with a Wi-Fi ID and password to open home networks.

So there is some way to go still before this type of vulnerability will be properly addressed.

See reuters.com/sustainability/cli…
#Blog, #inverters, #security, #technology, #vulnerability

ℝ𝕠𝕓𝕚𝕟 reshared this.

## Golf holidays in Greece: Ancient beauty meets modern greens with TEMA Golf


Griechenland, bekannt für seine antike Geschichte und atemberaubenden Inseln, etabliert sich zunehmend auch als erstklassiges Ziel für Golfer. Wer eine einzigartige Kombination aus kulturellen Entdeckungen und erstklassigem Golf sucht, sollte die verschiedenen Angebote für Golfreisen nach Griechenland in Betracht ziehen, die dieses faszinierende Land zu bieten hat. TEMA Golf ist Ihr Experte für die Gestaltung maßgeschneiderter Golferlebnisse, die Ihre Erwartungen übertreffen und sicherstellen, dass jede Runde so entspannend ist wie ein Sonnenuntergang über der Ägäis.

Die Hauptregion für Golf in Griechenland ist zweifellos die Halbinsel Peloponnes. Hier finden Sie das renommierte Costa Navarino, ein wahrer Juwel für Golfer. Mit seinen vier preisgekröften Plätzen – The Dunes Course, The Bay Course, The Olympic Course und The International Olympic Academy Golf Course – bietet Costa Navarino eine unvergleichliche Vielfalt und Qualität. Entworfen von Legenden wie Bernhard Langer und Robert Trent Jones Jr., fügen sich diese Plätze nahtlos in die mediterrane Landschaft ein und bieten spektakuläre Ausblicke auf das Ionische Meer und die umliegende Natur. Es ist ein Ort, an dem Luxus, Nachhaltigkeit und exzellentes Golf Hand in Hand gehen.

Abseits der Peloponnes gibt es auch auf der Insel Korfu einen schönen Golfplatz, den Corfu Golf Club, der sich in einem grünen Tal befindet und eine entspannte Atmosphäre bietet. Auch wenn die Anzahl der Golfplätze im Vergleich zu anderen europäischen Destinationen noch begrenzt ist, zeichnet sich Griechenland durch die hohe Qualität seiner Anlagen und die einzigartige Umgebung aus.

Ein Golfurlaub in Griechenland ist mehr als nur das Spiel. Er bietet die Möglichkeit, die reiche Geschichte zu erkunden, köstliche mediterrane Küche zu genießen und die berühmte griechische Gastfreundschaft zu erleben. Nach einer Runde Golf können Sie antike Ruinen besichtigen, in kristallklarem Wasser schwimmen oder einfach die entspannte Inselatmosphäre genießen. TEMA Golf kümmert sich um alle Details Ihrer Reise, von der Auswahl der besten Abschlagzeiten bis hin zu luxuriösen Unterkünften, damit Ihr Golfurlaub zu einem unvergesslichen Erlebnis wird. Entdecken Sie die perfekte Symbiose aus Leidenschaft und Erholung!

"Un nouveau sondage de Penn State confirme que la société juive israélienne est globalement fasciste, totalement irrécupérable et qu'elle constitue une menace grave pour l'humanité :
-82% soutiennent l'expulsion forcée des habitants de #Gaza
-56 % soutiennent l'expulsion forcée des citoyens arabes d' #Israël
-47% pensent que l'armée israélienne devrait « agir comme les Israélites bibliques sous Josué à Jéricho - tuer tous les habitants d'une ville conquise ».
-65% « croient en une incarnation moderne d' #Amalek, l'ennemi biblique des #Juifs ».
-93 % de ceux qui croient en « Amalek » pensent que le commandement biblique d'« effacer Amalek » s'applique encore aujourd'hui.
-69 % des Israéliens laïques soutiennent l'expulsion de la population de Gaza et 31 % sont favorables à l'imitation de la destruction biblique de Jéricho.
-Seulement 9 % des hommes de moins de 40 ans s'opposent à tous les scénarios de #génocide des Palestiniens."
source : Max Blumenthal @MaxBlumenthal

Xi sends congratulatory letter to 20th Western China International Fair en.qstheory.cn/2025-05/26/c_10…

Ansarullah Political Bureau congratulates Lebanese people on Liberation Day en.ypagency.net/357673

[📢 Conférence de presse -2d rapport #OCMA - #marchandisation 💶 VS #démarchandisation]

En directe de la conférence qui présente la sortie du nouveau rapport de l’observatoire citoyen de la marchandisation des associations #OCMA.
Après le 1er rapport expliquant le processus de marchandisation des #associations, on explore les pistes concrètes de « démarchandisation » pour mieux défendre un socle associatif : la #nonLucrativité avec l'exemple Belge avant le contre exemple italien.

@ThomasChevellier
@JenniferNeilz

👉 associations-citoyennes.net/so…

in reply to oatmeal

[…] If we are thirsty, we will squeeze the rock, and if we are hungry, we will eat the earth. We will not leave. Here we have a past, present, and future.

Zionist historians, such as Benny Morris, dismiss personal accounts of survivors and eyewitnesses, except for those who were #Holocaust survivors. In fact, Israel’s ethos is built on these accounts, albeit retrospectively. These accounts have been exploited to justify the genocide of the Palestinian people.

The #Tantura massacre, an event of the Nakba that Israelis are still unable to acknowledge, has been a subject of controversy in recent years. Documentaries exposing the horror of the massacre continue to be produced today. Here’s a story of a second-generation #Nakba survivor from her speech at the ceremony commemorating the ongoing Nakba on May 14th, Antin Square, Tel Aviv University (which stands on the lands of Sheikh Munis).

—————-

Ayoub, Muhsen, Dasouki, and Kanaanah. These are the names of my families, from different places in historical Palestine. In a parallel world, where the Nakba had not occurred, I would have grown up in Ajzam, my father's family's village, and I would spend every weekend at my grandfather's house, facing the coast in Tantura. I was supposed to be a daughter of the Carmel, and even though I am now a daughter of the Carmel and the coastal plain, it is much more complicated... I remember the age when I began to see the difference between my grandfathers. One would go to Ajzam, today Kerem Maharal. The other would walk down to the beach of Tantura every morning, and I would accompany both of them on their walks.

I don't know how to tell you this story. The most appropriate thing is to tell it to you as it is. My grandfather, Youssef, is a survivor of the Tantura massacre. He was six years old at the time of the massacre, when he saw his loved ones killed, and was forced to bury some of his family with his own hands. His entire family is buried under the ruins of the village. Today, this area has a parking lot for visitors to the beach, which has been given the name "Dor Beach."

My grandfather was not one of those who talked about and shared the story of their displacement. He was one of those who lived the tragedy in silence and pain. Until a certain age, I was unable to understand his insistence on visiting the beach every day. Until one day he said that he had one wish in life – to die on the beach of Tantura. My grandfather did not continue with his wish, and did not say that he wanted to be buried on the beach of Tantura, because he knew that a thick layer of asphalt separated him from his wish.

My grandfather on the other side, Hassan, was a farmer who loved his land. He taught us to love the land like him and to enjoy picking za'atar, hubeza, and everything that the good land gives us. He used to describe Ajzam as a paradise, where pure springs flow. Although he was displaced and lived in several places since that cursed day, in Ein Hod or in my current residence of Furaydis, the name Ajzam always remained on his lips. He would glorify it to such an extent that if one of his grandchildren showed intelligence or talent, my grandfather would say to him with great pride: "You are truly a Jazmawi."

Despite the different stories, both of my grandfathers felt the pain of losing land and saw their loved ones die before their eyes. Israel not only stole the land and the lives of those who lived on it, it also stole their dreams and wishes, it stole their lives. I want to go back and complete the story of my grandfather Youssef – the Tanturi. The story of my grandfather's life ended two years ago, but it accompanies me to this day. His wish that I told you about came true. On a day like any other, two years ago, my grandfather went for a walk on the beach of Tantura – and fate decided to fulfill his last wish. My grandfather died of a heart attack on the beach of Tantura, after he finished walking, breathed the air of Tantura, and was satisfied with the beauty of its landscapes.

My grandfather Youssef's story is indeed a sad story, but I, as his granddaughter, would not wish him any other fate. He was born in Tantura and returned to it. How can I wish something else for someone who was always singing about Tantura: "You filled my heart with your love. Wrap yourself in my eyelashes and sleep in peace. And like your land, I have not loved and to my blood it is equal." Both of my grandfathers continued to Furaydis, which was a safe haven for them. But my story does not end there.

Israel, in its criminal ways, has tried and is still trying to erase everything Palestinian. The war of extermination against our people in Gaza is still ongoing. Since its beginning, many stories have been added to the stories of the Nakba – more than 70,000 stories. From this platform, I want to promise my grandfather and our heroic people clinging to their homeland in Gaza that we will preserve your stories and tell them to preserve the memory. They will be the answer to any attempt to separate us from our people and from their right to return and liberation.

And because we are a proud, stubborn, and living people, I found in the stories of our family displacement the story of Palestine. My grandfather Youssef fulfilled his wish and died on the beach of Tantura as he wished. I found the spring of Ajzam and drank from its waters, and I met my neighbor from #Ajzam on the path of struggle. But the road is still long. The Palestinian students, and all our people who remained in their homeland, promise that we will continue on this path until the end – until liberation, return, and the Palestinian state. We are here to stay, and if you do not agree – drink the sea water. We will preserve the shade of the fig and olive tree and sow thoughts, like yeast in dough, with coolness and a burning heart. If we are thirsty, we will squeeze the rock, and if we are hungry, we will eat the earth. We will not leave. Here we have a past, present, and future.

Translated from Hebrew zoha.org.il/137557/

Tantura (2022) trailer
youtube.com/watch?v=HNtrUjUNkJ…

tantura-film.com/

@histodons #histodons #tanturamassacre
@palestine
@israel

This entry was edited (2 months ago)
in reply to oatmeal

Anti-War Activism / We Refuse: Saying No to the Army in Israel [French]

A new book titled "Nous refusons. Dire non à l'armée en Israël" (We Refuse: Saying No to the Army in Israel) has been published by #Libertalia m.

It is a collection of testimonies and photographs of Israeli war and occupation resisters. The book is a follow-up to a previous work by Martin Barzilai, "Refuzniks," published in 2017, and includes personal stories of Israeli activists explaining their reasons for refusing military service.

The introduction was written by French-Israeli filmmaker Eyal Sivan.

We Refuse: Saying No to the Army in Israel

[…] « La chose la pire qui soit en Israël, à part être palestinien, c'est être un traître. » Eviatar Rubin a 22 ans. Quand le photographe Martin Barzilai le rencontre pour la première fois il y a deux ans, l'attaque terroriste du Hamas et la riposte israélienne n'ont pas encore eu lieu.
Le jeune homme, qui vit à Haïfa, est déjà déterminé : pas question de faire son service militaire, pas question de « participer à l'occupation sioniste, à un régime d'apartheid ». Alors il refuse de rejoindre l'armée. Il passera pour cela quatre mois en prison. Puis il retournera à ses activités militantes : manifestations politiques et soutien aux familles palestiniennes expulsées de leur logement.

[…] "The worst thing in Israel, apart from being Palestinian, is being a traitor." Eviatar Rubin is 22 years old. When the photographer Martin Barzilai meets him for the first time two years ago, the Hamas terrorist attack and the Israeli response have not yet taken place. The young man, who lives in Haifa, is already determined: no question of doing his military service, no question of "participating in the Zionist occupation, in an apartheid regime." So he refuses to join the army. He will spend four months in prison for this. Then he will return to his militant activities: political demonstrations and support for Palestinian families evicted from their homes.

editionslibertalia.com/catalog…

@bookstodon #bookstodon
@palestine
@israel
#Resistance #IsraelFascism #AntiWar #IsraelOccupation #Apartheid

Something *really* big seems to be happening in Russia. Government official planes fly east, military build up near border at Lithuania and overflight into Finnish airspace.

Link is live feed but timestamped top pick up where it gets interesting.

youtu.be/fG5Ncp_E2qo?t=788

Gaza Ministry reports 38 martyrs, 204 wounded in 24 hours english.almayadeen.net/news/po…

Protecting Marble Tiles in Moist Climates


With the right care routine, you can keep your marble looking stunning. Here’s how to clean and protect it in humid environments.

Marble’s timeless elegance enhances any space, but humid climates can threaten its pristine condition. If you’re in a damp, coastal, or tropical area, you may have noticed marble surfaces—like a large marble slab for wall accents or luxury wall tiles—showing signs of mildew, yellowing, or dullness. With the right care routine, you can keep your marble looking stunning. Here’s how to clean and protect it in humid environments.

Why Marble Struggles with Humidity


Marble’s porous nature makes it vulnerable to moisture. In humid conditions, water from steam, spills, or even the air can penetrate the stone, leading to stains, etching, or mold growth. Grout lines are particularly susceptible to mildew, especially in bathrooms or kitchens. High-end installations like luxury wall tiles or a large marble slab for wall use require consistent care to maintain their beauty in moist settings.

Keep It Dry Every Day


The best defense against humidity is keeping marble dry. Wipe down marble surfaces daily with a soft, dry microfiber cloth, especially in high-moisture areas like bathrooms or kitchens. Focus on areas where water tends to pool, such as near sinks or the base of a large marble slab for wall installations in showers. Even small amounts of standing water can cause damage over time.

Don’t let wet items like towels, sponges, or soap bottles sit on marble surfaces. A quick daily wipe-down prevents moisture from seeping in and keeps mold at bay.

Clean with Care


Marble demands a gentle cleaning approach. Avoid acidic cleaners like vinegar or bleach, which can etch or discolor the stone. Opt for a pH-neutral cleaner formulated for natural stone, or mix a few drops of mild dish soap with warm water. Wipe the marble with a damp, soft cloth, rinse with clean water, and dry immediately to avoid water spots.

This method is essential for luxury wall tiles, where even slight damage is noticeable. Never let cleaning solutions linger, as they can cause etching if not rinsed promptly.

Seal Consistently for Protection


Sealing is critical in humid climates to protect marble from moisture. A quality sealant forms a protective layer that blocks water and prevents stains. In drier climates, sealing once a year may be enough, but in humid areas, reseal every six months. This is particularly important for light-colored marble or luxury wall tiles in high-traffic areas like bathrooms.

To check if resealing is needed, place a few drops of water on the marble. If they bead up, the sealant is working. If they soak in or darken the stone, apply a new coat of stone-specific sealant, ensuring the surface is clean and dry.

Maintain Grout Lines


Grout is a magnet for moisture and mold in humid environments. Seal it every six months alongside the marble to keep it protected. For stains or mildew, apply a paste of baking soda and water, let it sit for a few minutes, then scrub gently with a soft brush. Rinse thoroughly and dry completely to prevent further issues.

Avoid harsh chemicals or abrasive scrubbers, as they can damage both the grout and the marble. Regular grout maintenance ensures your marble installation stays clean and durable.

Enhance Ventilation


Good airflow is essential for marble in humid spaces. Stagnant, damp air encourages mold growth, even on sealed surfaces. Run exhaust fans during and after showers or cooking to lower humidity levels. A dehumidifier can help in consistently moist rooms. Open windows when the outdoor air is less humid, and use ceiling fans to promote air circulation. This is vital for large marble slabs for wall use, where trapped moisture can cause unseen damage.

Prevent Small Mistakes


Marble damage often results from minor oversights. Don’t let wet items like soap dispensers or damp cloths sit on marble surfaces, as they can cause stains over time. Clean spills immediately to avoid etching. Avoid abrasive scrubbers or generic cleaners, which can strip the sealant or scratch the stone. Regularly dry areas prone to water buildup, like shower corners or sink backsplashes.

Polish Carefully


If your marble loses its shine, a marble-specific polish can restore its natural luster. Use it sparingly with a soft cloth, following the product’s instructions closely. Over-polishing or using the wrong product can harm the surface, so aim for a gentle, natural sheen rather than an overly glossy finish.

Call in Experts When Needed


For deep stains, persistent mold, or severe etching, professional help is the best option. DIY attempts to sand or chemically treat marble can worsen the damage. A stone restoration specialist can safely repair high-value installations like luxury marble tiles or a large marble slab for wall use, ensuring long-lasting results.

Final Thoughts


Marble can remain stunning in humid climates with consistent care. Dry it daily, clean it gently, seal it regularly, and maintain good airflow. These straightforward steps protect your investment, keeping your marble—whether it’s a large marble slab for wall accents or exquisite luxury wall tiles—beautiful for years.

This paragraph from the excellent article in the Irish Examiner nails it.
#TransRights #SistersNotCISters
“It’s too early to know the practical ramifications of Wednesday’s UK Supreme Court ruling on trans identities, in which the meaning of the Gender Recognition Act was reversed without a single testimony from a trans person being heard, but said ruling has been a source of lip-smacking delight for the fringe group of gender-critical activists who have worked hard to making Britain the Anglosphere’s uncontested capital of galloping, gleeful transphobia.
And it is this glee, this sheer horrible joy at everything being done, that can be so hard to swallow, so wearying to comprehend. It’s not enough that decades of slow, painful advances in human rights and basic decency can be reversed in a matter of weeks, it’s that we must watch the world’s collective ghouls cackling loudly with ecstasy as it happens”

Séamas O'Reilly: 'We’ve watched as the worst people on Earth have had the best days of their lives' irishexaminer.com/lifestyle-co…

UPDATE;
I am adding this long and excellent article from The Gist, because it’s a really important one; it clarifies where the UK has gone wrong, and where the EU gives protections for trans people. It also points out at the end that the UK is going to have a little issue with that ruling from the Supreme Court….
thegist.ie/the-gist-trans-righ…

Another important edit. - the science on genetics DNA and the variety of genders. The transphobes, Starmer and the Supreme Court judges really need to read and understand all of this.
thinkbigpicture.substack.com/p…

UPDATE [26th April 2025]
This is one excellent journalist, who really gets to the heart of the matter.
And no, we do not want this very British hate and harassment coming to Ireland at all.
#TransRightsAreHumanRights
irishexaminer.com/lifestyle-co…

UPDATE [26th May 2025]
TERF analysis
thenation.com/article/society/…

UPDATE [18 June 2025]
Kennedy, N. (2025). Harming children: the effects of the #UK puberty blocker ban. Journal of Gender Studies, 1–17. doi.org/10.1080/09589236.2025.…
#trans #research #GenderNonConforming

This entry was edited (1 month ago)

Nicolas Maduro summons to vote for peace and life in Venezuela plenglish.com/news/2025/05/25/…

Zelensky does not want peace.

"Ukraine Attempted to Assassinate Russian President Vladimir Putin by Attacking His Helicopter with Drones"

thegatewaypundit.com/2025/05/u…

Trump’s Tariff Ultimatum: Whichever Side Brussels Picks, Europeans Lose sputnikglobe.com/20250525/trum…

Cautionary tale from the Metaverse:

My wife's Meta accounts have been deleted for reasons that are not particularly clear.

She uploaded some (extremely uncontroversial) family holiday photos to Instagram and some AI bot has decided they "Violated community rules". She appealed and another AI bot agreed with the first one.

So her Instagram account was "permanently disabled", and that appears to have taken down her Facebook and Messenger access too. Because apparently that's a thing that can happen to loyal users of 15 years.

Doing my best to convince her to take the hint and join the Fediverse instead, but running into the usual Mutual Action Problem.

Anyway, I was reminded of this column from Cory Doctorow, outlining how Metagoogle have done even worse to others.
pluralistic.net/2022/08/22/all…

in reply to Michæl La💤

The added irony is that she doesn't even care about Instagram, and only uses it to post photos for some far-flung family. But it's taken down Facebook and Messenger that she does rely on for communication.

The added added irony is that she posted the exact same photos to Facebook the day before without any problems.

Welcome to a world where AI has ingested The Trial by Franz Kafka and mistaken it for an instruction manual.

#Germany / Growing internal pressure to halt weapon exports to Israel

Leading members of Germany's SPD are urging the government to stop weapon exports to #Israel die to concerns about potential war crimes in #Gaza. Pressure is mounting on the government due to the humanitarian crisis and alleged violations of international law. The #SPD is also facing internal pressure to take a stronger stance.

German stern.de/politik/deutschland/s…

@palestine
@israel
#GazaGenocide

US envoy to Syria praises Sharaa for counterterrorism, warming relations with Israel following Istanbul meeting thecradle.co/articles-id/30989

Mes amis, nous ne sommes ni dans un film ni dans les années 40. Nous sommes en 2025, les sionistes ont frappé l’école Fahmi Al-Jargawi, brûlant vives 30 personnes, dont les frères et la famille de la petite fille qui a survécu aux flammes.

Partagez au maximum pour que le monde voie la réalité : c’est un nettoyage ethnique sous les yeux de tous.

Zionist Terror Campaign on the Eve of Municipal Elections #Palestine freepalestinetv.substack.com/p…

Hey, investors!


#AI madness

Meet Collario — the world’s first AI-powered smart accessory that combines fashion, function, and full-time guidance. Equipped with dual cameras, a microphone, LED indicator, speakers, and a self-adjusting fit system, Collario watches your surroundings, listens, and speaks back through a built-in assistant. It’s always on, always with you — making decisions easier, safer, and smarter.

We’re building a new category of wearable: not just a tracker, but a behavioral co-pilot. Think of it as an AirPods-meets-guardian-angel — with mass market potential across lifestyle, wellness, and security.

We’re raising a seed round at a $2B valuation to launch the future of autonomous personal guidance.

Collario: Don’t just wear tech. Let it lead.
im
linkedin.com/feed/update/urn:l…

in reply to Emmanuel Florac

Hmmmm.... There have been several science fiction stories, including TV shows and movies, where prisoners, or "citizens", are "collared" with a smart device..... I think in some the devices were programmed to decapitate the wearer.

Ah, yes, one was en.wikipedia.org/wiki/The_Reef…

SQL vs NoSQL


My personal compendium

A while ago I got the chance to get lessons on NoSQL. I already had lessons and some experience with SQL in the past, so here I'd like to share in short my current knowledge about these two concepts. Note that I liberally use the word query in this article both for querying data (i.e. select), as well as changing data (i.e. insert, update, delete).

SQL


SQL is short for Structured Query Language, and is often pronounced "sequel". It's a language to query a so called Relational Database. When people talk about a SQL database, they mean a Relational Database that you can query using the SQL language. The database model is mostly aimed at being consistent. The database consists of tables with columns and rows. Columns tell you what type of data we have, and new data is added by adding rows. You can visualise it by thinking of spreadsheets. There can be relations between different tables, they are defined by saying what columns in different tables correspond with each other. There are so called one-to-one relations, one-to-many relations, and many-to-many relations. Typically you can group tables together in a so called schema. It's not always useful to use this, so in many cases people just put all tables from the database in a default schema. In PostgreSQL the default schema is called public.

To give a simplified example of how a SQL database can look;
Let's say we have a social network platform with users who make posts and they can like posts. We want to store that in a SQL database. We can have a table USERS, a table POSTS, and a table LIKES. The USERS table can have a column username. Maybe there's also other columns, like profile for profile information, email and passwordhash for authentication, etc.
Then we have the POSTS table who needs a column content, user, and created_time.
A table will generally have a so called "primary key". This is a unique value that we can use to uniquely identify the correct row. Often this is a single field, but it's possible to use a combination of fields to form a so called composite primary key. Let's say we use username as the primary key for USERS. We currently don't have a unique key for POSTS, but you can always add an extra column for that, so we will add a column id for POSTS.
Finally we have the LIKES table who needs the user who did the like in a user column, and a post column containing the id of the post that was liked.
Columns also have a type and it's possible to set constraints on columns like saying that they must be unique or can't be NULL.
A post is always made by a user, that's a one-to-many relation between the USERS and POSTS table. We can define this relation by stating that POSTS.user is a foreign key corresponding to USERS.username. Meanwhile a like is made by a user, and corresponds to a post. These relations can be defined by saying that LIKES.user is a foreign key corresponding to USERS.username, and LIKES.post is a foreign key corresponding to POSTS.id. The primary key for the LIKES table can be a composite primary key of user and liked post.

To create these, it could look something like

create table if not exists public.users(
  username varchar primary key,
  profile varchar
);

create table if not exists public.posts(
  id serial primary key,
  username varchar,
  content varchar,
  created_time timestamp default current_timestamp not null,
  foreign key (username)
    references public.users (username)
);

create table if not exists public.likes(
  username varchar,
  post serial,
  foreign key (username)
    references public.users (username),
  foreign key (post)
    references public.posts (id),
  primary key (username, post)
);

NoSQL


Depending on implementation, a NoSQL database can also use the SQL language for querying. The difference is not so much the language to query the database, but rather the underlying technology. While the data is strongly defined in SQL by using columns and types, a NoSQL database doesn't have that. It consists of so called containers that store JSON objects, and there is no check on the content of the JSON object. This JSON object is also called a document in this context, which is why people sometimes refer to this type of database as document storage. It's not about documents like you have in a file system, but storage of JSON objects. In a way you can see the containers as being similar to SQL tables and the documents similar to the rows in SQL. You can also define a partition key per container. The partition key is a field that you expect in each of the JSON documents of the container, and allows the underlying database system to split the container up over different servers. This can reduce load when querying on a specific partition key.

If we take the previous example, and we decide that we generally want to fetch all the likes corresponding to a post, then the users can be put into a container users, and posts and likes can be put together in another container post_actions (feel free to come up with a better name). We have to make sure that the field we query on has the same name, so a post can look something like {post_id: 123, content: "blablabla", created_time: "2023-08-16 10:06:23+00:00", user: "Alice"} while a user can look like {username: "Alice", profile: "Hey, I'm Alice, let's be friends <3"}, and if Alice likes her own post, it could look like {user: "Alice", post_id: 123}.

Now we can query select * from post_actions where post_id = 123 and we immediately have the post and all likes corresponding to it. And if we add a partition key on post_id, or some function based on it, we won't even need to query all partitions, only the one where this post is stored. When done right, this can be a very powerful setup.

Scaling


While SQL was mostly aimed at consistency, NoSQL is mostly aimed at horizontal scaling.

When we talk about vertical scaling, it often means that, to allow more load, you have to use a heavier server. More RAM, faster CPU, larger and faster disks... This is the case for a SQL database. Horizontal scaling on the other hand allows you to scale by adding more servers instead of having to make them heavier.

In NoSQL you will mostly group data according to how it's queried, and, unlike with SQL who wants to be consistent, duplication of data is allowed. As we saw in the example, one simple select can often give you a full set of data of different types, and a partition key allows you to split up the container so that one container can be split up and stored across multiple servers, while only having to query the one partition, and thus spreading load over the different servers. Another reason why NoSQL can scale better, is because it does less. For example, it doesn't check for correct data types or consistency. It's up to the application to do that, and it's up to the developer to make sure their application can properly scale.

SQL normalisation


When you have an application and you need a database, you need a way to represent the data correctly. There's a whole study on how to properly do that. In SQL we call this process normalisation. Here's a short list of steps to take, but note that for most applications these steps are not followed to the letter. Sometimes because a developer sees a reason to deviate from it, but a big reason is that frameworks take over a lot of the logic, and they may have reasons to do things in slightly different ways.

  1. For each form/page you have, list the data. Choose good names for each piece of data, group repeating parts (e.g. a profile with posts has the data of the profile, but posts can be grouped as repeating parts).
  2. Now we isolate the repeating parts in their own separate entity. One attribute should be the primary key of the parent (e.g. for posts, we require the username of the person who made the post as attribute) and you should find a second unique attribute. Together they can form the primary key.
  3. Check for attributes with composite primary keys for attributes who are not functionally dependent from the primary key. These should also be made their own entity with their own primary key. (E.g. login data can be considered functionally different from the username they post with)
  4. Bring attributes together who are functionally dependent from non-key attributes. These should also be brought into it's own entity, and the attribute that identified this entity becomes the primary key.
  5. Integrate the normalised data groups. This is mostly choosing consistent naming for everything and group entities together where you're talking about the same underlying data.
  6. Then we determine the relations between the entities. A relation in SQL is always 1-to-1, 1-to-many, or many-to-many. A user has multiple posts, so that's a 1-to-many relation. In SQL we show this by making sure the primary key from the user is a foreign key attribute in the post. For a many-to-many relation, we add a new table with records containing the primary key from one entity and the primary key from the other.

Note that the example we used earlier was mostly to show some principles, and may not be a good example of a properly normalised model.

NoSQL modeling


While NoSQL is much newer, there are similar steps you can take to create a proper model of your data. Here it's less important to force consistency, but more important to keep queries cheap. You can take the word cheap very literally. Each query takes cpu, memory, time... All of this costs money. As such, it's possible to estimate how much a certain execution costs. This cost is what we want to optimise for. Here are steps you can take to model your database;

  1. look at the normalised (i.e. SQL) model, including the relations
  2. In a normalised model, we want to put things in different tables if they are functionally different. In NoSQL that isn't the case. We want to group things according to what will be cheapest when querying. When we have a relation, we check if we should embed or reference
    • Typical cases where you embed are 1:1 or 1:few relations who are read and updated together
    • Referencing (i.e. put the data in different containers) is typically done with 1:many or many:many relations when you read or update separate
    • Note that there may be cases where we both reference and embed, see later


  3. Choose a partition Key
    • This must obviously be a name of a key in our document
    • You should not have too many documents per partition and you should have a nice spread regarding both storage and request. When the partitions are not nicely balanced like that, you have a so called "hot partition".
      • Depending on technology, the maximum JSON object and partition size may both have a limit.
      • Maybe counterintuitive, but there is no limit regarding the amount of partitions, so one document per partitions is OK. Many partitions like this is also referred to as having a "high cardinality".


    • What partition key to use, depends on the most important requests.
      • If the data you generally select on is not part of the data, because you normally join, you can embed the data but also keep the data in a separate container, and make sure that updates propagate.
      • When you don't really have a key you query on, you can add a new key-value with fixed value, e.g. {type: ""}. This is OK, because it's probably only intermediate, see next step.



  4. When different containers have the same partitionKey, move the data to one container. This step shows how completely different data can be stored in one container.
  5. Lastly, add fields to keep queries cheap. Expensive (e.g. cross partition) queries should only run rarely. Think once per week, rather than multiple times per day. This is typical for things like count(*) and you need to make sure your software updates these fields in the same transaction of the corresponding change.


I'm an expert now!


This is just a short introduction, and there are many peculiarities that you only learn to see and properly handle by experience. I think the important difference is that in SQL you try to optimise for consistency, while in NoSQL you try to optimise for keeping the queries cheap, even for huge amounts of data. If you optimise for the correct property, you should be fine. I think it's also important to note that while you're supposed to optimise for being cheap in NoSQL, it is therefor not always cheaper than SQL. NoSQL is good for huge amounts of data where vertical scaling becomes hard or impossible. But it also requires more work from your program to keep things consistent. Whether SQL or NoSQL makes more sense for your project, is something you'll need to decide yourself.

Good luck!

in reply to ilja

Impressive web site, Distinguished feedback that I can tackle. Im moving forward and may apply to my current job as a pet sitter, which is very enjoyable, but I need to additional expand. Regards. olxtoto I think this is one of the most significant information for me. And i’m glad reading your article. But should remark on some general things, The web site style is perfect, the articles is really great : D. Good job, cheers 카드 현금화 I am unable to read articles online very often, but I’m glad I did today. This is very well written and your points are well-expressed. Please, don’t ever stop writing. hp toto Someone Sometimes with visits your blog regularly and recommended it in my experience to read as well. The way of writing is excellent and also the content is top-notch. Thanks for that insight you provide the readers! شرط بندی انفجار هات بت I can’t imagine focusing long enough to research; much less write this kind of article. You’ve outdone yourself with this material. This is great content. situs toto toto 4d
in reply to ilja

Wonderful blog! I found it while surfing around on Yahoo News. Do you have any suggestions on how to get listed in Yahoo News? I’ve been trying for a while but I never seem to get there! Appreciate it. olxtoto slot i am always looking for some free stuffs over the internet. there are also some companies which gives free samples. bocoran toto macau Hi there! Nice stuff, do keep me posted when you post again something like this! 4D Hi there! Nice post! Please tell us when I will see a follow up! situs togel online Hello I am so delighted I located your blog, I really located you by mistake, while I was watching on google for something else, Anyways I am here now and could just like to say thank for a tremendous post and a all round entertaining website. Please do keep up the great work. situs toto slot olxtoto togel terpercaya

friendica - Link to source

Hallo @Friendica Support, ich glaube, wir haben bei der aktuellen DEV-Version ein Problem bei der Option "Entkoppelter Empfänger":

Habe diese Option heute mal testweise aktiviert. Wie zu erwarten, treten nach der Aktivierung alle "paar" Minuten Spitzen beim Worker auf. Ich habe gelernt, dass dies angeblich normal ist, wenn man diese Option aktiviert hat. Siehe Screenshot:

In diesem Screenshot sieht man auch ganz deutlich, wann diese Option aktiviert wurde.

Sobald so eine Worker-Spitze auftritt, lädt die Oberfläche deutlich langsamer. Aber auch das Abschicken von Beiträgen oder Kommentaren sowie "Liken" in der Oberfläche dauert ewig.

Dabei ist die Auslastung des Systems alles andere als hoch. Siehe Screenshot:

Was mir auffällt, dass immer zu der gleichen Zeit wenn so eine Spitze auftritt, folgende Exception beim Worker im Logfile auftaucht:

2025-05-26T07:15:51Z worker [ERROR]: Uncaught exception in worker method execution {"class":"TypeError","message":"Friendica\\Util\\HTTPSignature::isValidContentType(): Argument #2 ($url) must be of type string, null given, called in /var/www/html/src/Protocol/ActivityPub/Receiver.php on line 2068","code":0,"file":"/var/www/html/src/Util/HTTPSignature.php:509","trace":"#0 /var/www/html/src/Protocol/ActivityPub/Receiver.php(2068): Friendica\\Util\\HTTPSignature::isValidContentType()\n#1 /var/www/html/src/Protocol/ActivityPub/Receiver.php(1896): Friendica\\Protocol\\ActivityPub\\Receiver::getObjectDataFromActivity()\n#2 /var/www/html/src/Protocol/ActivityPub/Receiver.php(1475): Friendica\\Protocol\\ActivityPub\\Receiver::processObject()\n#3 /var/www/html/src/Protocol/ActivityPub/Receiver.php(424): Friendica\\Protocol\\ActivityPub\\Receiver::fetchObject()\n#4 /var/www/html/src/Protocol/ActivityPub/Receiver.php(680): Friendica\\Protocol\\ActivityPub\\Receiver::prepareObjectData()\n#5 /var/www/html/src/Protocol/ActivityPub/Processor.php(1788): Friendica\\Protocol\\ActivityPub\\Receiver::processActivity()\n#6 /var/www/html/src/Protocol/ActivityPub/Processor.php(1689): Friendica\\Protocol\\ActivityPub\\Processor::processActivity()\n#7 /var/www/html/src/Protocol/ActivityPub/Receiver.php(830): Friendica\\Protocol\\ActivityPub\\Processor::fetchMissingActivity()\n#8 /var/www/html/src/Protocol/ActivityPub/Queue.php(235): Friendica\\Protocol\\ActivityPub\\Receiver::routeActivities()\n#9 /var/www/html/src/Worker/ProcessQueue.php(25): Friendica\\Protocol\\ActivityPub\\Queue::process()\n#10 [internal function]: Friendica\\Worker\\ProcessQueue::execute()\n#11 /var/www/html/src/Core/Worker.php(570): call_user_func_array()\n#12 /var/www/html/src/Core/Worker.php(378): Friendica\\Core\\Worker::execFunction()\n#13 /var/www/html/src/Core/Worker.php(112): Friendica\\Core\\Worker::execute()\n#14 /var/www/html/src/Console/Worker.php(91): Friendica\\Core\\Worker::processQueue()\n#15 /var/www/html/vendor/asika/simple-console/src/Console.php(108): Friendica\\Console\\Worker->doExecute()\n#16 /var/www/html/src/Core/Console.php(171): Asika\\SimpleConsole\\Console->execute()\n#17 /var/www/html/vendor/asika/simple-console/src/Console.php(108): Friendica\\Core\\Console->doExecute()\n#18 /var/www/html/src/App.php(234): Asika\\SimpleConsole\\Console->execute()\n#19 /var/www/html/bin/console.php(22): Friendica\\App->processConsole()\n#20 {main}","previous":null,"worker_id":"9fd747b","worker_cmd":"ProcessQueue"} - {"file":"Worker.php","line":572,"function":"execFunction","request-id":"6834151fdcb0a","stack":"Worker::execFunction (378), Worker::execute (112), Worker::processQueue (91), Worker::doExecute (108), Console::execute (171), Console::doExecute (108), Console::execute (234), App::processConsole (22)","uid":"3a8c6f","process_id":511148}

Ist so eine Worker-Spitze abgebaut, verhält sich das System bzw. die Oberfläche wieder normal. Bis eben wieder die Spitze aufgebaut wird. Das ganze ist also reproduzierbar.

Fürs Erste werde ich die entkoppelten Empfänger wieder deaktivieren und hoffe, dass diese Symptome wieder verschwinden.

C.c.: @Michael 🇺🇦

in reply to Tuxi ⁂

@Michael 🇺🇦
Okay, Update ist durch. Habe die "Entkoppelung" wieder aktiviert und das System einige Zeit beobachtet.
Die Fehlermeldungen bzgl. der Exception sind weg. Allerdings ist das System damit immer noch kaum nutzbar, da die gleichen Probleme immer noch existieren.

Sobald so eine Worker-Spitze auftritt, lädt die Oberfläche deutlich langsamer. Aber auch das Abschicken von Beiträgen oder Kommentaren sowie "Liken" in der Oberfläche dauert ewig.
in reply to Tuxi ⁂

Hab das gleiche vor einigen Wochen festgestellt. Nachdem die Option lange Zeit aktiviert und unauffällig war, hatte ich plötzlich extreme Verzögerungen in der Abarbeitung von Jobs. Die Queue ist auch immer wieder extrem angestiegen - über 100000 wartende Jobs.

Nach der Deaktivierung der Einstellung, war die Queue schnell abgearbeitet und das Verhalten war wieder normal.

U2 - Beautiful Day (Official Music Video)


The heart is a bloom, shoots up through stony ground
But there's no room, no space to rent in this town
You're out of luck and the reason that you had to care,
The traffic is stuck and you're not moving anywhere.
You thought you'd found a friend to take you out of this place
Someone you could lend a hand in return for grace

It's a beautiful day, the sky falls
And you feel like it's a beautiful day
It's a beautiful day
Don't let it get away

You're on the road but you've got no destination
You're in the mud, in the maze of her imagination
You love this town even if it doesn't ring true
You've been all over and it's been all over you

It's a beautiful day
Don't let it get away
It's a beautiful day
Don't let it get away

Touch me, take me to that other place
Teach me, I know I'm not a hopeless case

See the world in green and blue
See China right in front of you
See the canyons broken by cloud
See the tuna fleets clearing the sea out
See the bedouin fires at night
See the oil fields at first light
See the bird with a leaf in her mouth
After the flood all the colours came out
It was a beautiful day
A beautiful day
Don't let it get away

Touch me, take me to that other place
Reach me, I know Im not a hopeless case

What you don't have you don't need it now
What you don't know you can feel it somehow
What you don't have you don't need it now
You don't need it now, you don't need it now
Beautiful day

Written by: Paul David Hewson, Adam Clayton, Larry Mullen, Dave Evans
Album: All That You Can't Leave Behind
Released: 2000

#U2 #BeautifulDay #Remastered #rockMusic #lyrics #rock #2000s #youtubeFree #googleFree #metaFree #alphabetFree #songLyrics #alternativeRock #popMusic #rockMusic #Bono #AdamClayton #TheEdge #LarryMullen

This entry was edited (3 weeks ago)

Music Videos reshared this.

Fountains of Wayne - Stacy's Mom (Official Music Video)


Album: Welcome Interstate Managers
Released: 2003

Lyric:
Stacy's mom has got it goin' on
Stacy's mom has got it goin' on
Stacy's mom has got it goin' on
Stacy's mom has got it goin' on

Stacy, can I come over after school?
(After school)
We can hang around by the pool
(Hang by the pool)
Did your mom get back from her business trip?
(Business trip)
Is she there, or is she trying to give me the slip?
(Give me the slip)

You know, I'm not the little boy that I used to be
I'm all grown up now
Baby, can't you see?

Stacy's mom has got it goin' on
She's all I want
And I've waited for so long
Stacy, can't you see?
You're just not the girl for me
I know it might be wrong but
I'm in love with Stacy's mom

Stacy's mom has got it goin' on
Stacy's mom has got it goin' on

Stacy, do you remember when I mowed your lawn?
(Mowed your lawn)
Your mom came out with just a towel on
(Towel on)
I could tell she liked me from the way she stared
(The way she stared)
And the way she said
"You missed a spot over there"
(A spot over there)

And I know that you think it's just a fantasy
But since your dad walked out
Your mom could use a guy like me

Stacy's mom has got it goin' on
She's all I want
And I've waited for so long
Stacy, can't you see?
You're just not the girl for me
I know it might be wrong but
I'm in love with Stacy's mom

Stacy's mom has got it goin' on (she's got it going on)
She's all I want and I've waited for so long (waited and waited)
Stacy, can't you see?
You're just not the girl for me
I know it might be wrong
I'm in love with

Stacy's mom, oh, oh
(I'm in love with)
Stacy's mom, oh, oh
(Wait a minute)
Stacy, can't you see?
You're just not the girl for me
I know it might be wrong but
I'm in love with Stacy's mom

Written by: Christopher B Collingwood, Adam "compositions, Inc." Schlesinger

#googleFree #youtubeFree #musicVideo #officialMusicVideo

This entry was edited (2 weeks ago)

friendica - Link to source

Hallo @Friendica Support, ich glaube, wir haben bei der aktuellen DEV-Version ein Problem bei der Option "Entkoppelter Empfänger":

Habe diese Option heute mal testweise aktiviert. Wie zu erwarten, treten nach der Aktivierung alle "paar" Minuten Spitzen beim Worker auf. Ich habe gelernt, dass dies angeblich normal ist, wenn man diese Option aktiviert hat. Siehe Screenshot:

In diesem Screenshot sieht man auch ganz deutlich, wann diese Option aktiviert wurde.

Sobald so eine Worker-Spitze auftritt, lädt die Oberfläche deutlich langsamer. Aber auch das Abschicken von Beiträgen oder Kommentaren sowie "Liken" in der Oberfläche dauert ewig.

Dabei ist die Auslastung des Systems alles andere als hoch. Siehe Screenshot:

Was mir auffällt, dass immer zu der gleichen Zeit wenn so eine Spitze auftritt, folgende Exception beim Worker im Logfile auftaucht:

2025-05-26T07:15:51Z worker [ERROR]: Uncaught exception in worker method execution {"class":"TypeError","message":"Friendica\\Util\\HTTPSignature::isValidContentType(): Argument #2 ($url) must be of type string, null given, called in /var/www/html/src/Protocol/ActivityPub/Receiver.php on line 2068","code":0,"file":"/var/www/html/src/Util/HTTPSignature.php:509","trace":"#0 /var/www/html/src/Protocol/ActivityPub/Receiver.php(2068): Friendica\\Util\\HTTPSignature::isValidContentType()\n#1 /var/www/html/src/Protocol/ActivityPub/Receiver.php(1896): Friendica\\Protocol\\ActivityPub\\Receiver::getObjectDataFromActivity()\n#2 /var/www/html/src/Protocol/ActivityPub/Receiver.php(1475): Friendica\\Protocol\\ActivityPub\\Receiver::processObject()\n#3 /var/www/html/src/Protocol/ActivityPub/Receiver.php(424): Friendica\\Protocol\\ActivityPub\\Receiver::fetchObject()\n#4 /var/www/html/src/Protocol/ActivityPub/Receiver.php(680): Friendica\\Protocol\\ActivityPub\\Receiver::prepareObjectData()\n#5 /var/www/html/src/Protocol/ActivityPub/Processor.php(1788): Friendica\\Protocol\\ActivityPub\\Receiver::processActivity()\n#6 /var/www/html/src/Protocol/ActivityPub/Processor.php(1689): Friendica\\Protocol\\ActivityPub\\Processor::processActivity()\n#7 /var/www/html/src/Protocol/ActivityPub/Receiver.php(830): Friendica\\Protocol\\ActivityPub\\Processor::fetchMissingActivity()\n#8 /var/www/html/src/Protocol/ActivityPub/Queue.php(235): Friendica\\Protocol\\ActivityPub\\Receiver::routeActivities()\n#9 /var/www/html/src/Worker/ProcessQueue.php(25): Friendica\\Protocol\\ActivityPub\\Queue::process()\n#10 [internal function]: Friendica\\Worker\\ProcessQueue::execute()\n#11 /var/www/html/src/Core/Worker.php(570): call_user_func_array()\n#12 /var/www/html/src/Core/Worker.php(378): Friendica\\Core\\Worker::execFunction()\n#13 /var/www/html/src/Core/Worker.php(112): Friendica\\Core\\Worker::execute()\n#14 /var/www/html/src/Console/Worker.php(91): Friendica\\Core\\Worker::processQueue()\n#15 /var/www/html/vendor/asika/simple-console/src/Console.php(108): Friendica\\Console\\Worker->doExecute()\n#16 /var/www/html/src/Core/Console.php(171): Asika\\SimpleConsole\\Console->execute()\n#17 /var/www/html/vendor/asika/simple-console/src/Console.php(108): Friendica\\Core\\Console->doExecute()\n#18 /var/www/html/src/App.php(234): Asika\\SimpleConsole\\Console->execute()\n#19 /var/www/html/bin/console.php(22): Friendica\\App->processConsole()\n#20 {main}","previous":null,"worker_id":"9fd747b","worker_cmd":"ProcessQueue"} - {"file":"Worker.php","line":572,"function":"execFunction","request-id":"6834151fdcb0a","stack":"Worker::execFunction (378), Worker::execute (112), Worker::processQueue (91), Worker::doExecute (108), Console::execute (171), Console::doExecute (108), Console::execute (234), App::processConsole (22)","uid":"3a8c6f","process_id":511148}

Ist so eine Worker-Spitze abgebaut, verhält sich das System bzw. die Oberfläche wieder normal. Bis eben wieder die Spitze aufgebaut wird. Das ganze ist also reproduzierbar.

Fürs Erste werde ich die entkoppelten Empfänger wieder deaktivieren und hoffe, dass diese Symptome wieder verschwinden.

C.c.: @Michael 🇺🇦

#Johnstone
caitlinjohnst.one/
#Israel #apartheid-Israel #EU #US #US-Israel #US-Israel-terrorism #Israel #Netanyahu #zionism #genocide #Gaza #Palestine #WestBank #Cisjordanie

The EU is launching another attack on end to end encryption with the most draconian mass surveillance bill ever, and our media doesn't seem to notice or care.
Read it here, it is jaw dropping: home-affairs.ec.europa.eu/docu…

TL;DR The end off e2e, even for self hosting, even for peer to peer messengers. EUSSR used to be a bit of a joke of mine, but we've passed that

reshared this

Israel Controls 77% of Gaza As ‘Genocide, Ethnic Cleansing’ Continues tn.ai/3321009

Während der Regierungserklärung von Bundeskanzler Friedrich #Merz am 14. Mai rief jemand von der Linken: »Es gibt keinen Krieg! Es gibt einen Genozid!«. Der Bundestagsabgeordnete Mirze Edis outet sich als Rufer des Wortes, für das #DieLinke eine Rüge kassierte. Im nd-Interview äußert er sich zur Situation, zu Palästina sowie zum neuen Bundestag. 👉 nd-aktuell.de/artikel/1191363.…