Wednesday, April 29, 2026
7e1998d1-0d0c-4c78-bfa6-c49a8cdcefc6
| Summary | ⛅️ Clear until afternoon, returning overnight. |
|---|---|
| Temperature Range | 14°C to 23°C (57°F to 73°F) |
| Feels Like | Low: 55°F | High: 76°F |
| Humidity | 75% |
| Wind | 13 km/h (8 mph), Direction: 219° |
| Precipitation | Probability: 0%, Type: No precipitation expected |
| Sunrise / Sunset | 🌅 06:00 AM / 🌇 07:30 PM |
| Moon Phase | Waxing Gibbous (43%) |
| Cloud Cover | 13% |
| Pressure | 1014.13 hPa |
| Dew Point | 57.13°F |
| Visibility | 6.22 miles |
The Mediterranean Sea has always been more than a stretch of water. As a cradle of civilisation and a source of food, jobs and identity for the people who live around it, it is not just a body of water between countries, but the heart of a culture and a bridge between peoples.
Today, Cyprus holds the presidency of the Council of the European Union, while Commissioner Costas Kadis helps steer EU fisheries and ocean policy. Under their auspices, Mediterranean fisheries ministers will gather in Cyprus in May to define a future vision for the region, to be outlined in the next ‘MedFish4Ever ministerial declaration’.
These discussions take place under increasing strain on the Mediterranean. The sea is warming at two to three times the global average and is considered a climate change hotspot, while most fish stocks in the region remain overexploited. Invasive species are reshaping ecosystems across the Eastern Mediterranean, including in Cypriot waters. In this context, protecting marine life is not a distant environmental ambition: it is a question of resilience, food security and regional responsibility.
That is why an apparently technical issue now deserves political attention. With background studies having concluded positively, Mediterranean countries now have an opportunity to adopt a precautionary, science-based decision in 2026 that would ensure real protection for the Mediterranean deep sea. This would take the form of shifting the regional ban on bottom trawling from the current 1,000 metres to 800 metres. At first glance, a change of 200 metres may sound minor, and yet this is one of the clearest steps to strengthen protection for some of the most vulnerable deep-sea ecosystems across the Mediterranean, with limited cost to the fishing sector. It is about returning to the abundance that once characterised this sea.
A science-based, low-cost opportunity
The current 1,000-metre limit was adopted by the General Fisheries Commission for the Mediterranean (GFCM) in 2005 as a precautionary measure to protect vulnerable deep-sea habitats, such as cold-water corals and sponge grounds. It was an important step at the time, but more than twenty years later, the region is still operating under that same threshold, even as deep-sea science has leapt ahead. In 2016, Mediterranean scientists called to revise this rule in light of new evidence. Yet, a decade on, that regional revision remains overdue.
It is much needed because bottom trawling is one of the most destructive fishing methods at sea. It drags heavy gear across the seabed, damages fragile habitats, affects non-target species and adds pressure to ecosystems that recover slowly, if at all. Indeed, a single pass of a trawl net can cause irreversible damage. In a sea already stretched by warming waters and biodiversity loss, leaving vulnerable deep-sea areas exposed to trawling is becoming harder to defend.
Not to mention that this is a low-cost intervention. Pilot projects carried out in seven Mediterranean countries (Egypt, France, Greece, Italy, Malta, Spain and Tunisia) found that the fishing sector would broadly maintain its economic performance if the ban were shifted. This proves its minimal economic and social costs, yet high ecological gain.
Indeed, shifting the ban would help protect an estimated 100,000 additional square kilometres of deep-sea across the Mediterranean, according to research by Oceana. This overlaps with areas of vulnerable marine ecosystems that are especially sensitive to bottom trawling and climate stress. It would also safeguard key essential fish habitats for overexploited stocks, including commercially important deep-sea shrimp such as the blue and red shrimp, which can still be caught in shallower waters.
A precautionary approach in a changing climate
As the Mediterranean Sea warms, deep waters are increasingly acting as climate refuges. Protecting ecosystems below 800 metres is therefore about keeping habitats resilient enough to support life and fisheries into the future.
For Cyprus, the issue is also relevant. Cyprus does not fish at these depths itself, yet deep-sea fishing by other EU fleets takes place within Cyprus’s waters. Supporting a Mediterranean-wide shift in the ban would therefore help protect Cypriot deep-sea habitats, while reinforcing a principle that matters deeply across the region: fisheries rules must apply fairly, be consistent with international obligations, and be applied across all fleets.
In this context, the case for acting with caution is compelling, as fishing fleets risk moving into deeper waters as some fish stocks migrate to cooler waters. This goes hand in hand with having in place effective monitoring systems of fishing activities, including mandatory satellite tracking of vessels, as well as enhanced surveillance and inspections by Mediterranean countries, to ensure proper protection of these deep-sea climate refuges.
A legacy opportunity
This is what makes the current political moment crucial. The MedFish4Ever ministerial declaration is approaching its ten-year anniversary, and a new ministerial declaration is due in 2027. 2026 offers a window to demonstrate ambition for Mediterranean fisheries policy to deliver measurable results, not just commitments on paper.
For Commissioner Costas Kadis, this represents a defining opportunity. As EU Commissioner for Fisheries and Oceans, coming from the Mediterranean, he is uniquely placed to champion a decision that strengthens both EU leadership and regional cooperation. Supporting an extension of the deep-sea trawl ban to below 800 metres at the GFCM annual meeting in October 2026 would strengthen the EU as a global leader in deep-sea protection.
The Mediterranean has already witnessed too much delay. Shifting the deep-sea trawl ban from 1,000 to 800 metres will not solve every problem facing the region’s fisheries, but it can contribute to easing them by creating a sense of shared purpose across the region to reverse the decline of the Mediterranean Sea. And it would send an important signal that protection of the Mediterranean is still possible when science is matched by political will.
Commissioner Kadis has all the cards in his hand to turn a fishing depth limit into something more important: an inspiring Mediterranean success story, and a legacy for the sea that has shaped Cyprus’ history, its culture, and will shape its future. It is now simply a matter of political willingness and commitment.
Further measures to protect the southwestern coasts in the municipalities of Paphos and Ierokipia including 16 breakwaters were at the centre of a meeting at the transport ministry on Tuesday.
According to the municipality of Paphos, a total of 11 parallel and 5 transverse breakwaters are set to be built as part of efforts to protect the coastline.
The breakwaters will extend from Geroskipou to the municipal baths of Paphos, with works expected to begin in March 2027 and a relevant tender to be issued in 2026.
The municipality said that one of the design’s key elements is the access point for transporting quarry materials, which has been designated in the eastern part of Geroskipou’s municipal beach, near the Ezousa river in order to avoid impacting the beaches and local businesses.
The project is regarded as vital as coastal erosion in Paphos has worsened in recent years, resulting in the sea having already devoured substantial portions of the coastline in several areas.
A court has found fault with the cabinet’s prior decision to revoke the citizenship of an Indian investor, reports said on Tuesday.
The case concerns Indian national Anubhav Aggarwal, who had secured a Cypriot passport in 2016 under the now-defunct citizenship-via-investment programme.
In 2021, following a report by a commission of inquiry – known as the Nikolatos committee – the cabinet moved to revoke the passports of scores of foreign investors.
Aggarwal was one of those swept up in the revocations net.
The cabinet had sought the opinion of the citizenship revocation committee. That panel concluded that Aggarwal had misled authorities in his citizenship application, by omitting to mention he had been implicated in a financial fraud case under investigation in India. The cabinet then accepted this opinion, and canceled Aggarwal’s citizenship.
The man’s wife and son also had their Cypriot citizenships revoked.
Aggarwal then appealed the decision with the administrative court.
Earlier this week, the administrative ruled in his favour, according to Phileleftheros.
From 2011 to 2014, Aggarwal had been an executive with ARK Imports Private Limited, the company implicated in a spot exchange scam in India.
In 2020 he was reportedly arrested in Abu Dhabi on the strength of an international warrant – a ‘red notice’ issued by Interpol.
The Nikolatos report had mentioned Aggarwal by name, noting that he “appeared” to have furnished false or misleading information on his application for Cypriot citizenship.
His lawyers subsequently told the citizenship revocation committee that during the material time – when he applied for citizenship – the man was not wanted by authorities. Criminal proceedings against him began in 2017, after he obtained the Cypriot passport. However, in their filings they did concede that Aggarwal did not disclose his ties to ARK – but that this was not out of intent to deceive.
According to the administrative court’s ruling, the citizenship revocation committee failed to take these facts into consideration.
In her ruling, the judge confirmed that Aggarwal was not wanted by authorities either before or during the material time. No criminal case had been filed against him at the time.
Therefore, the judge said, the conclusions of the citizenship revocation committee had been “misguided”.
Moreover, the administrative court said that no attention was paid to the fact that Aggarwal was rendered stateless by having his Cypriot passport revoked. He had relinquished his Indian citizenship on becoming a Cypriot citizen. Indian nationals cannot hold dual citizenship.
The court stressed this point, noting that depriving the man of his Cypriot citizenship constituted “a disproportionate measure”.
In August 2020, the Al Jazeera news network released the ‘Cyprus Papers’ – a documents dump relating to Cyprus’ investment programme.
The media outlet conducted an investigation based on the leaked papers, alleging to have found that the Republic of Cyprus provided citizenship through the programme to several people linked to crime and corruption.
In October of the same year, Al Jazeera released a video of an undercover investigation related to the ‘Cyprus Papers’. The video purported to reveal how Cypriot lawyers, businesspeople and top-tier politicians were willing to aid and abet convicted criminals to obtain Cypriot citizenship, granting them access to the European Union’s internal markets and visa-free travel.
The reveals led to the Nikolatos commission of inquiry, which found that 53 per cent of the 6,779 passports issued between 2007 and 2020 were granted illegally or irregularly.
Barn owls support the natural biological control of rodents, benefitting both public health and the environment and therefore require special protection, the game and wildlife service said on Tuesday.
“A pair of barn owls can prey on a few thousand rodents per year, thereby reducing crop damage and limiting the need to use chemical rodenticides. In this way, both the environment and public health are protected,” the service said.
Emphasising the crucial role of barn owls in the ecosystem, the game and wildlife service warned that the use of rat poison and similar substances can have serious consequences, affecting non-target species such as the owls and other wildlife.
“In a relevant research carried out by our service in collaboration with the state laboratory, dozens of samples from dead predators were analysed, where remains of rodenticides were found in 80 per cent of them,” it added.
The service said that during a recent inspection of one of the nests, dead rodents were found, thus confirming the species’ continuous and active contribution to rodent population control.
At the same time, the game and wildlife service recorded some barn owl chicks, demonstrating the successful propagation of the species in artificial nests that have been set up for the animals.
“For more than 25 years, the game and wildlife service has been implementing a systematic monitoring and protection programme for the barn owl, a particularly beneficial predatory species for agricultural ecosystems,” the service said.
A total of 1,650 kilograms of medals from three events organized by Limassol marathon organiser Eleven Blue Events will be handed to a local blacksmith in an attempt to reduce the environmental footprint of its events.
“The initiative is part of the broader context of the company’s social and environmental responsibility actions, aiming to reduce the environmental footprint of events and promote sustainable practices in sports,” Eleven Blue Events said.
The company said the project is intended to reinforce the circular economy, with a beneficial effect on both the environment and the local community.
The medals are from the three events XM Limassol Marathon, Radisson Blu Larnaca International Marathon and Bank of Cyprus Nicosia Marathon.
The fire service on Tuesday inaugurated its new 24-hour operations coordination centre, created with a total budget of €6.5 million.
“The climate crisis, extreme weather events, technological risks, but also new forms of threats, create an environment of increased demands and multi-level challenges,” President Nikos Christodoulides said at the inauguration.
He described the centre as a “substantial investment in the safety of citizens”, as well as Cyprus’ operational readiness, stressing that it played a crucial role in terms of prevention and preparation while speeding up response mechanisms.
“It is a modern tool, which changes in practice the way the fire service coordinates and executes its operations,” he added.
The centre, Christodoulides said, bolsters regional collaboration and joint readiness in the face of natural catastrophes, acting as a “critical bulwark against the challenges in our region”.
“The security of the citizen, we have said it many times, we mean it, is not negotiable. It is the daily responsibility of the state, and all of us,” he concluded.
Raising the basic pension, without impacting the robustness of the Social Insurance Fund, is a key government objective, the labour minister said on Tuesday.
“What I can say for sure, is that the basic pension will be lower than €1,088,” Marinos Mousiouttas told journalists during a Q&A after a presentation of the ministry’s work and its goals going forward.
He was being asked to pinpoint what the basic pension amount would look like after the reform of the pension system.
The €1,088 number he referenced is the national minimum wage.
Weighing in, the permanent secretary at the labour ministry said: “We are giving the maximum possible, without causing an imbalance.”
The basic pension to be announced would be “according to the capabilities” of the Social Insurance Fund (SIF).
The government has already drafted an outline for a reformed pension system, and is currently holding talks with stakeholders – unions and employers organisations – on the particulars.
There are two ‘pillars’, or tracks: the first concerns state pensions; the second concerns provident funds, as well as the cash reserves of the SIF and its investment policy.
As of right now, the statutory pension system in Cyprus consists of two main components: a fixed (basic) pension and a proportional (supplementary) pension, calculated based on contributions.
The basic pension (fixed component) is designed to provide a minimum income based on the average weekly basic insurable earnings, which are revalued annually. It is generally 60 per cent of the weekly average of basic insurable earnings, plus a 10 per cent increase for each dependent.
The other component, the proportional/supplementary pension, is calculated based on total contributions above the basic insurable earnings.
The government’s thinking for the reform is to raise the pension amounts for those on the low end, funding this from cuts to the pensions on those on the high end.
According to Mousiouttas, the timetable for the reform sees the tabling of the relevant legislation to parliament in June, and certainly before the House breaks for the summer recess.
Actual debate on the bills would start in September, with the official launch of the revamped pension system scheduled for January 1, 2027.
Asked if this is feasible given the tight margins, the minister sounded confident, noting that the stakeholders appear to largely converge on the first pillar of the reform.
Regarding the second pillar, he said, the stakeholders agree that its rollout would come later – three to four years.
The overriding goal, stressed the minister, is to ensure adequate and resilient pensions for all, reducing the risk of poverty among pensioners, and the long-term viability of the SIF.
The last major reform on the pension system took place in 1980, with additional changes introduced during 2012-2013 as part of Cyprus’ agreement with international lenders.
On the investment policy envisioned for the SIF, Mousiouttas said they are coordinating with the finance ministry.
For decades, the state has dipped into the SIF for financing, paying it 2.15 per cent interest for the money it borrows. In January, Mousiouttas told a parliamentary committee that the state’s accrued debt to the SIF comes to €11.3 billion.
Regarding how the state will gradually repay this, the minister said the formula applied would be such that “the money keeps coming into the Fund without endangering the economy at large”.
At present, the reserves of the SIF appear robust. Citing data for 2024, Mousiouttas said contributors to the SIF increased to 592,000. Actual contributions came to €2.7 billion, while payouts clocked in at €2.06 billion.
In 2024, the SIF registered a €290 million surplus.
Another plus is the high level of employment in Cyprus. In 2025, the joblessness rate was under 4.4 per cent, compared to the six per cent average across the EU.
At the same time, average earnings in Cyprus last year came to €2,605, while the median salary registered at €1,968.
The minister recalled that as of January this year, the national minimum wage was revised upward to €1,088 – benefiting some 40,000 low wage earners.
Going forward, one of the goals set by the government is to crack down on undeclared work and illegal employment.
During 2025, 7,920 inspections at workplaces were carried out, tracking around a thousand undeclared workers. Overall, the percentage of undeclared work was calculated at 5.48 per cent – it was much higher among foreign nationals, at 23.24 per cent.
Authorities issued fines totaling €1.8 million for undeclared work.
Decisions regarding rare breeds affected by foot and mouth disease (FMD), specifically fat-tailed sheep and red cattle, will be taken by the end of the week, Veterinary Services spokesperson Sotiria Georgiadou said on Tuesday.
She said the decisions would be reached in cooperation with the agriculture ministry based on legislation, scientific documentation, their genetic purity, as well as how many of them there are compared to the breed’s total population.
Authorities will weigh the risks and the potential benefits of any decision to preserve or cull the animals, she said.
“Our primary priority in everything we do is to contain the spread of the disease,” she said, noting that culling, vaccination and restrictive measures are all part of this effort.
Around 350 adult animals, approximately 33 red cattle and 320 fat tail sheep, are currently infected.
These are indigenous breeds developed over time through evolution and crossbreeding that exist in relatively small numbers on the island, with red cattle mainly found in the Paphos district and fat-tailed sheep in various areas.
Regarding the practical management of the situation, she said multiple scenarios are under consideration. “It is possible that only animals that test positive will be culled. It is also possible that all animals will be culled. Total culling cannot be ruled out,” she said, adding that the number of infected units has reached 105.
In emotional remarks to Cyprus Mail, breeder Constantinos Mouskou said he fears his flock of 600 fat tail sheep could be destroyed by the Veterinary Services.
“My family has been breeding the same flock for six generations,” he said. “During the 1974 war, this flock was trapped in Lysi and my father saved it. Since then, I have kept it exactly as he brought it back,” he added.
Andreas Christodoulou, representative of the breeders’ association for native cattle and a breeder of the red cattle himself told the Cyprus Mail that “this breed is different from all others”, the issue is also deeply personal as he described the cattle as more than livestock, recalling how he grew up alongside them.
Experts warn that even if some animals are spared, the remaining population may not be sufficient to ensure the breed’s survival.
Ouranios Tzamaloukas, associate professor at the Cyprus University of Technology, told the Cyprus Mail the number of animals likely to remain would not be enough for the fat-tailed sheep breed to continue.
Under EU Regulations, member states may request exemptions from blanket culling for breeds of high genetic or cultural value, provided disease control is not compromised.
Lead in shotguns and fishing weights has a negative impact on both human health and biodiversity, BirdLife said on Tuesday.
“Lead is a highly toxic metal, with no safe level of exposure. Its use, especially in hunting, leads to the dispersion of thousands of tonnes into the environment every year, with serious consequences,” the organisation said.
BirdLife warned that lead can enter the human food chain, putting children and pregnant women at particular risk, as fragments may be found in game meat consumed by humans.
“At the same time, more than a million birds die annually in Europe from lead poisoning,” the group added.
The organisation’s call comes two weeks after the publication of a study highlighting the presence of lead in Larnaca Salt Lake and Paralimni Lake – two of the island’s protected wetlands.
Data from the Game Fund indicated that 169 flamingos have suffered lead poisoning in the Larnaca Salt Lake complex since 2020.
“In Cyprus, the need for meaningful action is already evident. Although a ban on the use of lead gunshot near wetlands has been in force since February 2023 under a European regulation adopted in 2021, its implementation remains insufficient,” BirdLife said.
Sediment and soil sampling revealed high concentrations of lead at specific points around the lakes, with elevated levels at Larnaca Salt Lake linked to a former shooting range in the area.
According to the study, concentrations decrease further from the old range, indicating it as the main source of pollution.
The salt lake complex includes Latsi Lake in Meneou, also known as Soros Lake, where hunting is permitted. A separate study there confirmed the presence of lead, linked to pellets from hunting cartridges.
In Paralimni, lead contamination also appears to be primarily linked to hunting, with a shooting range still operating on the lake’s southern side within the protected area, while hunting is allowed in parts of the Natura 2000 site during the hunting season.
BirdLife has called for the reinforcement of restrictions and more extensive European policies to be implemented.
The group proposed that these include a complete shift to non-toxic substitutes for lead such as steel pellets
BirdLife has called for stricter enforcement of existing rules and broader European measures, including a full transition to non-toxic alternatives such as steel pellets.
“There is no more room for delays. Lead restrictions must proceed now, without further concessions. The benefits are clear and significant, both for human health and biodiversity,” the organisation said.
The call comes ahead of a meeting of the EU REACH (registration, evaluation, authorisation and restriction of chemicals) committee, scheduled to take place in Brussels on April 29.
A 28-year-old man arrested after 1.5kg of drugs were found in his possession was remanded for seven days on Tuesday by the Nicosia district court.
Officers from the anti-drug unit conducted a court-approved search at his home in Nicosia on April 23.
During the search, 1.5kg of Class B synthetic cannabinoids and a large sum of money were found and seized.
The suspect was arrested on Monday under a court warrant.
The Nicosia Ykan unit is handling the case.
A section of Griva Digeni Avenue in Nicosia will close between 8pm and 10pm on Tuesday evening for a crash reconstruction linked to a fatal collision in March.
The closure will affect the stretch heading from central Nicosia to Engomi, from Ayios Prokopios Street (Kykkou lights) to the traffic lights at 25th March Street.
Traffic will be diverted from Ayios Prokopios through Kolokasidis roundabout, via Agios Prokopios, Delfon, Achaion and Kyriakou Matsi streets.
Drivers are advised to follow police instructions and expect delays.
The reconstruction is part of an investigation into a fatal car crash that took place on March 27.
Police said the exercise is necessary to clarify how the collision occurred, and asked for public understanding over any disruption.
The crash involved 28-year-old police officer Andreas Antoniou, who died after his motorcycle collided with a car driven by a 23-year-old woman.
The officer, who served in the drug squad Ykan, was taken by ambulance to Nicosia general hospital where he was pronounced dead.
The car driver tested negative for alcohol and drugs.
Turkish Cypriot leader Tufan Erhurman said on Tuesday he cannot disclose the content of discussions held with Turkish officials regarding reported entry restrictions affecting Turkish Cypriots, citing diplomatic principles.
Speaking in a televised interview, Erhurman said it would be “neither appropriate nor possible” to reveal what was conveyed during his meetings in Ankara, despite having raised the issue repeatedly with Turkish authorities.
He said that he is “not in a position” to share the details.
The matter has featured prominently in the Turkish Cypriot press, with reports focusing on restrictions affecting individuals attempting to enter Turkey.
Erhurman described the situation as a serious issue and said the uncertainty “does not contribute positively” to relations between Turkey and the north.
He clarified that during his election campaign he had committed to raising the matter within 10 days, rather than resolving it within that period.
Since taking office, he said the issue has been addressed “in every meeting” held with Turkish counterparts.
According to Erhurman, approximately 16 Turkish Cypriots are known to have been directly affected, though he indicated that the number of those concerned is higher.
He said the responsibility lies primarily with Turkey’s interior ministry.
The issue follows recent incidents, including the case of Cypriot academic Senih Cavusoglu, who was refused entry to Turkey and reported being placed on an “N-82” list requiring prior clearance.
Other individuals are believed to be listed under separate classifications, including the “G-82” designation, which entails a ban on entry.
Workplace accidents in Cyprus have fallen by nearly half over the past decade, Labour Minister Marinos Mousioutas said on Tuesday, while warning that more needs to be done to eliminate fatalities and address emerging risks in the labour market.
In an address marking World Day for Safety and Health at Work, he said cooperation between social partners and the state had yielded “significant results”, with accident rates dropping by around 48 per cent between 2014 and 2025.
“Despite this, workplace incidents continue to occur and we must intensify our efforts to achieve the Vision 0 goal of zero fatal accidents,” he said.
Mousioutas stressed the need for stronger action to safeguard both the physical safety and mental wellbeing of employees, noting that this year’s global observance focuses on psychosocial risks in the workplace.
“The event aims to raise public awareness about occupational safety and health and to honour those who lost their lives due to workplace accidents or occupational diseases,” he said, adding that it should also serve as “a trigger for deep reflection on the goals not achieved and the lives lost”.
He warned that new challenges stemming from technological advances, climate change and demographic shifts are reshaping workplace risks.
“Taking into account these new risks, we must step up efforts to protect workers’ safety and health, which is a fundamental social right,” he said.
Highlighting psychosocial factors, the minister pointed to issues such as workload, role clarity, autonomy and fair procedures as key determinants of employee wellbeing. He also described workplace violence and harassment as a “serious problem” and a recognised health and safety risk affecting both physical and psychological wellbeing.
Citing a 2024 European survey, Mousioutas said there is a shortage of specialised personnel to identify and manage psychosocial risks, while six in ten employees hesitate to speak openly about such issues.
“This makes coordinated action between social partners and the state even more urgent,” he said.
He concluded by paying tribute to victims of workplace accidents and occupational diseases.
“It is our duty to ensure that every worker returns home to their family and loved ones safe and unharmed,” he said.
SEK union chief Andreas Matsas said the annual event on workplace safety is part of a global effort to raise awareness and mobilise social partners to reduce and ultimately eliminate workplace accidents.
He pointed to factors such as increased work intensity, uncertainty, role overload and the impact of digitalisation and automation as creating additional pressures on workers.
“The labour market is changing in a way that requires us to take into account many factors that may have been underestimated in the past,” he said.
Matsas called for more targeted safeguards through collective agreements and stronger mechanisms to assess workplace risks, while urging broader implementation of health and safety committees.
Meanwhile, data published by Eurostat on Tuesday showed that 1,314 non-fatal workplace accidents were recorded in Cyprus in 2023, corresponding to a frequency rate of 304.54 per 100,000 workers, marking a notable decline from 1,529 incidents and a rate of 498.09 in 2013.
The highest number of accidents were recorded in the accommodation and food services sector (282 cases), followed by construction (218) and manufacturing (199).
A 51-year-old man was sentenced to concurrent prison terms of up to 18 years for multiple sexual offences committed against his stepdaughter over a prolonged period on Tuesday by the Limassol criminal court.
The court also issued a six-year supervision order to take effect after his release.
The defendant, originally from Greece, had initially denied the charges but later admitted to the offences during proceedings.
He faced dozens of charges relating to sexual abuse and sexual exploitation of a child, as well as common assault and threats.
The offences were found to have taken place between 2007 and 2016, beginning when the victim was 12-years-old and continuing until she reached adulthood.
Further incidents were also referenced in relation to events reported in 2025, shortly before a formal complaint was submitted to authorities.
According to Phileleftheros, the abuse occurred within the family home over an extended period.
The court heard that the disclosure followed a domestic dispute in which the defendant allegedly pushed the victim during an argument.
Following this incident, the victim reported the abuse to authorities, leading to the criminal investigation and subsequent charges.
It was also reported that the defendant had, at one stage, asked the victim to install a camera in her bedroom, a claim confirmed during the investigation.
Illegal structures operating on a state-owned coastal plot in Protaras were dismantled on Tuesday following a 24-hour directive issued by the Interior Minister Constantinos Ioannou.
As confirmed by the Famagusta district self-government organisation (EOA), the intervention took place on a state-owned parcel within a beach protection zone, where a massage service business had been operating from unauthorised constructions, including a pergola, kiosk and storage unit.
The ministry ordered the immediate demolition, instructing the district administration to “proceed without delay with the necessary actions for the immediate demolition and removal of the illegal structure, within 24 hours of receipt of this letter”.
The land, leased to Paralimni–Deryneia municipality for an annual fee of €5,000, is designated for use solely as a public parking area, with no permission granted for permanent structures or commercial activity.
According to ministry documentation, the enforcement action follows a prolonged administrative dispute over responsibility for removal of the illegal installations.
The ministry said inspections confirmed commercial activity was taking place unlawfully on state land, prompting repeated administrative correspondence before the final order was issued.
The municipality expressed satisfaction with the enforcement action, stating it welcomed steps taken “regarding the enforcement of legality in a property within the beach protection zone in Protaras”.
The municipality had previously maintained that it did not hold licensing or enforcement authority over the site following administrative restructuring, and that intervention required clarification of jurisdiction between state and local bodies.
Ministerial spokesperson Margarita Kyriacou said legislative changes are being examined to ensure faster intervention in cases involving illegal occupation of public land, stating the aim is enforcement “without procedural delay where violations are confirmed”.
The case has also been linked to a broader investigation following complaints of possible corruption and failure of duty relating to the continued operation of the structures since at least 2022.
The trial of five defendants linked to the January 17 shooting incident in Larnaca was postponed again on Tuesday after a member of the criminal court was absent, with all accused remaining in custody pending a new hearing on May 14.
The five defendants, aged 20, 26, 26, 32 and 48, appeared before the Larnaca permanent criminal court as part of an ongoing investigation into a violent confrontation in the city centre earlier this year.
Proceedings could not continue due to the court’s incomplete composition.
All five face multiple charges, including conspiracy to commit a felony, participation in a criminal organisation, illegal possession and transportation of a firearm, possession of explosives, extortion, racketeering, and assault causing actual bodily harm.
Two of the defendants, the 48-year-old and a 26-year-old, also face additional charges related to the alleged assault of a 39-year-old European national in the village of Pyla in the early hours of the same day.
Authorities have confirmed that three additional suspects, aged 26, 27 and 35, remain at large.
The charges stem from events on January 17, when a confrontation in central Larnaca escalated into violence involving weapons including knives, metal bars and an axe.
Two gunshots were reported near Larnaca police headquarters during the incident.
Investigators allege the case is linked to attempted extortion, with claims that a businessman was approached for an initial payment followed by ongoing demands.
President Nikos Christodoulides said on Tuesday that Cyprus will continue to sign international agreements regardless of external criticism, stressing that the Republic acts as both an EU and UN member state with full sovereign rights.
As such, he said “it is time for everyone to realise that Cyprus is an EU member state, a UN state and will continue to sign agreements that highlight not only the international status of the republic but also address the challenges we have before us”.
He added that Cyprus participates in negotiations “in a dual capacity”, both as the de facto leader of the Greek Cypriot community and as the internationally recognised state authority on issues including guarantees.
The comments come amid renewed criticism from the north over Cyprus’ expanding defence and diplomatic partnerships, including a planned Status of Forces Agreement (SOFA) with France, which would allow French military personnel to be present on the island for operational and humanitarian purposes.
Turkish Cypriot leader Tufan Erhurman on Tuesday lambasted recent agreements, including the one with France. In a social media post, he questioned whether a solution could be achieved while Turkish Cypriots are excluded from key decision-making processes.
“Does anyone really think a solution is possible on this island by ignoring the Turkish Cypriots?” he asked.
The north’s ‘prime minister’ Unal Usteldescribed the arrangement as “extremely dangerous, provocative, and an unacceptable step”, arguing it could “seriously damage the atmosphere of peace and tranquillity on the island”.
He also said French involvement reflected what he called a broader disregard for Turkish Cypriot consent in decisions affecting the island’s security architecture.
The government has maintained that all agreements are conducted within the sovereign rights of the Republic of Cyprus and within its international obligations.
Christodoulides also said preparatory work is ongoing on the Cyprus issue at multiple levels and that the government is ready to respond at short notice.
“We are ready,” he said, adding that even if an invitation were issued “next week”, Cyprus would respond without delay.
He rejected claims linking domestic political cycles to the pace of diplomatic developments, including the end of Cyprus’ European Union Council presidency, saying such suggestions “have absolutely no correlation with the reality of negotiations”.
“If we go after June, the Turkish side is stalling so as to confirm its position,” he said, while reiterating that Cyprus remains ready to proceed if called upon.
The government has a role to play in preventing repeated violations of the buffer zone, Avlona community leader Menelaos Savva said on Tuesday, urging authorities to step up practical measures to protect lawful activity in the area.
“We want our own state, our own government, to take measures to prevent violations,” he said, noting that while military action is not an option, other steps could strengthen protection and safety for those legally operating within the buffer zone.
Savva outlined a series of proposals, including infrastructure projects, the registration of public and rural roads, the extension of lighting, and permits for prefabricated structures to be used as agricultural storage.
He pointed out that in some areas the buffer zone in Avlona exceeds four kilometres in width, suggesting that controlled development could be possible without raising tensions.
“In some areas, a young couple could build a home two kilometres from the northern boundary, if they own the land,” he said.
He argued that increased legitimate activity would act as a deterrent to violations and illegal practices, including smuggling, irregular migration and poaching.
“Activity in the area would prevent violations and any unlawful actions,” he said.
Expressing frustration at decades of inaction, Savva added: “There are many things our state can do, and unfortunately for 52 years nothing has been done. We are asking for the obvious and we are not being heard.”
He stressed that communities affected by the division, including Avlona, Katokopia and Zodia, deserve concrete support.
“This injustice must be addressed through measures taken by the state,” he said, clarifying that “We are not asking the state to go to war or create an incident.”
Savva also warned that current responses to repeated incursions remain insufficient.
“Our government must take measures to prevent violations,” he said on Tuesday.
He added that the situation in the Avlona buffer zone had been calm until Monday, though uncertainty remained over developments earlier on Tuesday.
He confirmed that a Turkish settler who had recently entered the buffer zone without authorisation had completed agricultural work on Sunday afternoon. According to Savva, the individual ignored instructions from the UN force in Cyprus, lacked permission to enter the area and was not the lawful owner of the land being cultivated.
Savva noted that the same individual had breached the buffer zone the previous week and had been asked to leave by UN forces.
The community leader said patrols by Unficyp had intensified following a meeting on March 31 with the UN Secretary-General’s Special Representative in Cyprus, Khassim Diagne, during which concerns were raised about an expected increase in violations ahead of the harvest period.
He said instructions had been given for more frequent patrols, both by vehicle and helicopter.
“The area is being monitored, but patrols alone do not bring results,” Savva said. “Something more must be done by the UN peacekeeping force to stop the Turks.”
We rarely realise when something is happening for the last time. Conversations feel normal, and days blend together. There is usually no clear sign that a chapter is quietly coming to an end.
We only notice change later, when something familiar is gone, a routine fades away, or a memory starts to feel different. Throughout life, people often find that the most important moments are not those they recognise at the time but those they only come to understand afterward.
For Angela Ioannou, this was something she would only fully understand years later, when she looked back on the summer of 1979, when she and her husband made the decision to leave Ireland and start a new life in Cyprus.
“I remember very well that summer of ’79 when my husband and I made the decision to live in Cyprus,” she says. “Leaving Ireland was poignant, saying goodbye to my parents was especially emotional as we didn’t know when we would see each other again”.
The night before they left, there were friends and family at her parents’ house, a send-off that at the time felt more like a celebration than an ending. “It was a night of Irish music, stories and lots of memories shared,” Angela says. “One song in particular that stays in my mind of that night was the Fields of Athenry – I still have it on a tape that one of my friends had made for me to remember that night.”
Deep down, she says, she knew that her life was about to change, but not fully what this meant yet. “I knew life was about to change permanently, but being young, beneath the feeling of nervousness was excitement too”.
For Christina Efthymiou, a teacher with experience in several countries, endings are something she knows well, though not always in the way you may think. “I have worked in several countries, and in some schools I have taught at, I would be there for a few years,” she says. “You become part of the community, the staff becomes a little family, and you can end up teaching siblings”.
Over time, those relationships are built not just through lessons but through everyday moments, small conversations, familiar routines and watching children grow in confidence. “Moving on is a natural part of life, but goodbyes are always tricky; you build a bond with your class”.
One experience in particular remained with her more than others, because it happened as a bit of a shock. “It was quite sudden, I had to leave due to differences with management. I wasn’t prepared for that goodbye. It felt like just a normal day which then turned very quickly”. The abruptness of the day left something unresolved not only for her but also for one of her students.
“A mother asked if we could meet for coffee just so her son could have a proper goodbye, as he had missed seeing me when I had moved from the school, and was crying at night. He just needed that extra little time together to be able to move on and accept the change.” It was a reminder, she says, that endings are not always fully comprehended in that moment, especially for children.
“In that moment I didn’t see it, but when I step back and recall it’s so clear that phases of life pass so quickly”.
For Georgina Dimas, a mother of two boys, endings don’t come from big decisions or dramatic changes. Instead, they show up in the small, almost unnoticed moments of everyday life. One of the moments that stayed with her was small, something that might have gone unnoticed if not for the sudden realisation it had already passed.
“One thing that really stayed with me was the way my boys used to say certain words when they were little. They had their own versions of words for things that didn’t really make sense to anyone else, but I always knew exactly what it meant.”
There was no defining moment that marked this ending. “One day, I realised they had started saying words properly, and it suddenly hit me that I had heard their little versions for the last time without even realising it. It was such a small thing, but it marked the end of that stage of them being little.”
Now she says that this awareness has changed how she spends time with her children. With her second child, she notices details she once may have missed; small habits, little stages, and ordinary moments that later meant the most. Like many parents, she has come to realise that while some days feel long, the years go by fast.
Some endings unravel little by little, while others arrive without warning. I was working abroad when my father went into the hospital for what was meant to be a routine surgical procedure. It was described as having a high success rate, and there was little reason to expect anything would go wrong.
I remember speaking to him on the phone afterwards. He sounded calm, and everything seemed fine, the kind of ordinary conversation you don’t think twice about at the time.
Complications followed the procedure, and he never made it out of the hospital. It was only later that I understood that phone call had been the last time I would ever speak to him. Like so many endings, it had passed without either of us knowing.
The ongoing foot and mouth disease (FMD) outbreak is reshaping the debate around Cyprus’ agricultural model with Employers and Industrialists Federation (OEV) President Giorgos Pantelides on Tuesday warning that food security and livestock resilience must now become national priorities.
Speaking at the federation’s AGM, Pantelides said “agricultural production must stop being approached solely in terms of cost,” stressing that in today’s unpredictable global environment, self-sufficiency in food is fundamentally a matter of national security.
“This is security we must safeguard in a timely manner,” he added, pointing to the need for Cyprus to ensure autonomous production capacity, “just as we managed to do with medicines through our domestic pharmaceutical industry.”
His warning comes as the FMD outbreak continues to deepen, placing unprecedented pressure on livestock farmers.
He underlined the urgent need to resolve the island’s long-standing water problem, adopt new agricultural technologies, and provide strong incentives to attract younger people into farming.
“The ageing of the professional farming population makes this an immediate priority,” he said.
Pantelides described the water issue as “an existential challenge”, arguing that Cyprus must decisively reduce its dependence on weather conditions.
“We were fortunate this year with beneficial rainfall, but we know our country is repeatedly hit by droughts and prolonged heatwaves,” he said, calling for full reliance on desalination for water supply, while reserving dams primarily for agricultural use.
Turning specifically to livestock, he said “the foot and mouth crisis must become an opportunity for the sector’s regeneration”, calling for a holistic plan to restart and restructure affected farming operations.
Meanwhile President Nikos Christodoulides arriving at the AGM said he was willing to engage directly with protesting farmers.
The outbreak, first confirmed in the Republic in February, has steadily escalated. By early April, infections had spread to 50 livestock units, primarily in Larnaca district, with authorities implementing culling and vaccination protocols.
However, the latest data shows more than 100 livestock units are now affected nationwide, alongside the culling of tens of thousands of animals .
Officials insist the spread remains geographically contained within designated zones, but acknowledge a “persistent presence” of the virus.
The outbreak has also sparked alarm over the survival of Cyprus’ rare indigenous breeds, which are particularly vulnerable to blanket culling measures. Experts have highlighted the risks facing traditional varieties such as the Cyprus fat-tailed sheep and the Red cattle, both of which have limited populations and significant genetic value.
Breeders and conservationists have warned that the loss of even a small number of these animals could have lasting consequences.
They stressed that beyond immediate economic losses, the disappearance of these breeds would represent an irreversible blow to Cyprus’ agricultural heritage and long-term biodiversity.
Authorities have intensified enforcement of emergency measures, issuing €45,000 of fines for illegal animal movements linked to the spread of the disease, while additional cases have been referred to police.
Experts increasingly point to poor biosafety practices and human movement between farms as key drivers of transmission, rather than animal movement alone.
The impact on the livestock sector is severe and potentially long-lasting.
More than 30,000 animals have already been culled, while industry representatives warn that up to half of livestock farmers may not restart operations after the crisis .
Compensation schemes are underway, but delays and uncertainty including the need for EU approval are adding to farmers’ concerns.
At the same time, protests and growing frustration among producers highlight the strain on rural communities.
Question about melee combat feel in indie vs. Fromsoft games:
As a huge fan of Enshrouded, Valheim, and now Windrose I’m trying to better understand the combat from a game-design perspective.
Windrose has many of the same core ingredients as FromSoft-style melee combat: lock-on, dodge, light/heavy attacks, stamina, healing, enemy patterns, etc. But the overall feel is very different. FromSoft combat tends to feel more grounded, weighty, responsive, and deliberate, while Windrose feels a bit more floaty to me.
I’m not saying Windrose should match FromSoft one-to-one, and I understand budget, team size, and experience are major factors. I’m more curious about the specific design details that create that difference in feel.
Is it mostly animation timing, recovery frames, hit feedback, enemy stagger, stamina tuning, input buffering, camera/lock-on behavior, sound design, or something else?
For people who understand combat design better than I do: what are the main reasons two games with similar combat mechanics can feel so different in practice?
One of our games has been nominated for this "awards" and my supervisor told me to do a research on who they are and if they have credibility. So far I cannot find any information besides their website and X. It would be really helpful if anyone knew or heard about this awards. Thanks in advance.
Literally just moments ago, my game, IRON NEST, broke into the Top 200 Most Wishlisted Games on Steam. So this number is fresh from the front line.
Full-stack dev here. C# was the easy part the language is fine, the tooling around it is fine. What got me was Unity as a development environment. The disconnect between code and runtime state. The way half the actual game logic lives in scene files and prefabs as serialized data instead of code, so reading the codebase tells you almost nothing about how the game actually behaves. Domain reload wiping your state every time you hit play. Scene and prefab merges in git being their own special hell. Tutorials that were correct in 2022 referencing APIs that don't exist anymore. The render pipeline mess picking URP vs HDRP vs Built-in feels like choosing which set of broken tutorials you want to use. AssetDatabase quirks where you touch a file the wrong way and corrupt your project's metadata.
None of this is "Unity is hard to learn." It's more like Unity has its own way of doing everything and a lot of it actively fights how I'd build software anywhere else.
Curious if other devs from other stacks (web, backend, mobile, ML) had the same experience. What was the moment you nearly bailed? Did you push through?
10 years ago I had an idea for a (IMO) genuinely unique game. So I made, refined, tested and released it onto steam. It was terrible.
Wrong Dimension - The ‘One Dimensional’ Platformer.
I knew rather quickly (genuinely thanks to a very comprehensive negative review) that the game I released was not what I wanted to bring into the world. Not really. Unfortunately what I ended up releasing was what my current skill level, game design understanding and all around ability could create. I wanted to play with the constraints of what could be accomplished on a ‘single line’ and how that could be made into something not only interesting but fun. I didn’t execute it well and sunk into the shadows once I faced that failure and decided to put my time into other of life’s responsibilities.
My father worked in the professional game industry when I was a kid (Quest for Glory 5 at Sierra Online, EverQuest etc) and I guess growing up and watching him use the strange and complex tools he had to make something fun to play has always stuck with me. Because in this decade (how does time pass so fast!?) since I released my game I haven’t been able to stop wanting to keep making them. So in this post I'm going to go over why I decided to ‘revive’ my dead game instead of just giving up on it and starting a new one.
Like many of us here (maybe all?) I dream of being a game developer. Despite knowing how hard it truly can be and unsure the future in the industry is, I want it. I could give a huge list why but I'm sure most of you know what I’d say. Lately I’ve had a few ideas that I have selectively floated past some people I trust who can take an objective look at them and tell me if they sound like terrible or great ideas (or something in between). I’ve gotten great responses to my favorite ideas and It lit the fire under me even more than just daydreaming about it ever did. However, deep in the crevices of my brain caves there was this ominous echoing of the voice of shame every time I considered making a new game. Speaking to me like Norman Osbourne's mask. “You failed. You didn't do good enough! You let your customers (all like… 6) down!”
And you know what, the voice was right. I can forgive myself for my first ‘real’ game not being amazing and being rough around the edges. Even getting it onto steam was an accomplishment! What I couldn't forgive myself for is moving onto another game and leaving the customers who bought Wrong Dimension (all 5 of em) with lame promises and a disappointing ‘game’. I realized that not only would making the game I set out to make all those years ago be fun but it’s the perfect way for me to re-sharpen my skills and get the fires of my forge burning again before moving onto other projects!
I also think it would be amazing for the people who DID take a chance on this strange little game a decade ago to get a notification for an update - only to receive a brand new, polished, much better game that delivers on the original premise. (I plan on trying to leave the old version in there accessible through the menus because why not, I will let my shame be discoverable by those who search it out!)
On launch my game sold 6 units (at that time it was at $2.99 - which I believe hurt the exposure of the game. Too low. With my feeling like I didn’t deliver on what I promised I’m actually ok it didn't sell well). Despite joking about all 4 buyers, I have sold a total of 84 units since launch.
Interestingly, I have had consistent sales (typically 1 at a time every month or 2) even into March of this year! Keeping in mind ALL online interaction has been dead for literal years. No social media presence, no participation in fests or online conversation. I do not know what exactly is driving organic attention to my game. I’m very excited to see what not only a brand new development but an actual marketing campaign and social media presence can do for the exposure and growth of the game.
I’m in a unique spot, as I am not shooting for wishlists or gaining a following before launching a new game. I am remaking a game that is functionally dead, 6 feet under and mummified. Which is why this post is a Resurrectio, not a Post Mortem.
I think this is an exciting opportunity and I can’t wait to see how it turns out. I don’t expect to make much (if any money) off of this, but it is a hell of an experiment and I’m psyched to see what I can learn from it.
| Hyper-Drive is a high-speed, futuristic anti-gravity racing experience where precision driving meets intense competition. Inspired by F-Zero and Wipeout players tear through dynamic tracks, mastering tight corners, boosting at the perfect moment, and battling rivals for position. With responsive controls, strategic gameplay, and adrenaline-fueled action, ever race is a test of skill, timing and control. Wishlist Now on Steam. [link] [comments] |
I've been developing for about 2 months and my game takes a minimum of 6 hours to 100% if you do every single thing perfectly, closer to 10 hours for the average player. What about you?
My little brother is 12 years old and has adhd, but he wants to learn how to make games, i do too. from the advice ive gathered online taking the CS50 course is a good foundation for the basics and after that looking through the Godot docs seems like a good place to start. But my little brother will likely struggle to follow along with a course like that, i guess im just wondering if maybe theres maybe some other resources for kids available that will teach the basic stuff in a fun way or maybe another way altogether. i dont know if you guys got some advice id appreciate it.
June Next Fest has completely exploded with 5.4k games participating (Feb was 3.4k games, already a lot)... maybe devs are avoiding the October Fest because of GTA 6? It used to grow by like 200, 400, 600 games between each festival, jezz...
Now that performance is judged within the first 2 days, anyone with an existing community can probably stay in the algorithm, and the rest without traction just gets swept under the rug.
Third-party festivals have been affected too, I mean, last year I got 1.2k wishlists just from festivals alone, but recently I’ve been rejected from the last 5 I applied to. The only one I got into said they accepted 400 out of 2,000+ applications.
I know there are a lot of games made in 2 weeks with like 80% AI, and those get ignored anyway… but still, as a festival curator, you’re not going to manually check 2,000 submissions to see which ones fit the theme. You just pick like 30 per category and send automated rejection emails to the rest, I guess, right? no? what about 4k submissions next year?...
At this point, even players might start avoiding Next Fest during the first few days. It might make more sense to wait until day 3, when 80% of the “slop” has already been filtered out.
Personally, I can't postpone my own game any longer... so I'll be very happy and accept my 200 new future additions!!
Game developers, what's a feature you spent 40 hours implementing that players never notice when it works, but would instantly rage-quit if it broke?
| I’ve been thinking a lot about how people actually get comfortable with complex topics like programming, not by tutorials, but by just being passively around the conversations. So I recorded one of those conversations. I sat down with Dietmar Hauser (25+ years in the industry, Principal Software Engineer at Epic), and we went from Commodore 64 days, literally typing code out of magazines. All the way to modern C++ and where we find ourselves at the moment with another layer of abstraction = LLMs. What stuck with me wasn’t just the history, but how he talks about coding as this fragile, interconnected system (“a delicate crystal”), that shatters if you touch the wrong thing, which i found very interesting. It’s a long, unfiltered discussion, more like something you overhear between two people deep in the field than a structured interview. If you’re trying to get a feel for how experienced engineers actually think about code, or if you wanna warm up to the idea, this convo might be useful: [link] [comments] |
My friend, who also makes games, is coming to my city soon. But, unlike me, she hates offline developer events (showcase, meet-ups). She finds it pointless to show off her game at offline, and she's not interested in other events at major events.
I was curious to see what others thought about this. I'd also like to hear some positive experiences.
I’m a solo dev working on a card-based game about corporate software development.
At first it was meant to be satire, but the more mechanics I add, the more it feels like a documentary 😅
For example:
- “Mass Recruitment” → review 500 CVs, hire 20, lose 3 seniors in the process
- “Knowledge Transfer” → lose an expert, gain a document
- “Decimation” → remove 30% of the team, no one knows what anything does anymore
I’m trying to capture that shift from:
“we build software”
to
“we manage capacity”
Does this resonate with anyone else?
(working title: Overcommit)
Real question, if you create cool Game AI (like rules etc. that act to actions against the Player), how do you call it nowadays?
Saying its AI will start a whole argument about using AI s ethical or not etc., but people always mean LLMs, not state machines, AI Game logic etc.
Is there s better name for it?
One of those questions where the answer is obviously "it depends" but I want the real answer tbh, not the safe answer.
We've been sitting on a build of our mobile game that is playable with very nice game design/lore, has the core loop working, and would generate useful feedback. But the presentation layer isn't finished, some screens are placeholder, and certain mechanics don't have their full visual feedback/review yet.
The instinct is to wait until it looks 100% right. But every week we wait is a week we're not finding out whether the core design actually works.
I keep coming back to the idea that what external testers are evaluating isn't the polish, it's the design. And the design is as ready as it's going to get without external feedback.
We're building the Lost Tower, mobile tower defense, god power system, idle mechanics. Still pre-beta. I think we're at the point where the right answer is to open it up to a small group and accept the discomfort of showing something unfinished.
How did you know when the time was right?
I'm making a game by myself, and I want to keep it that way. It sonds cocky but I'm not making it with the plan to succeed or anything, I just want to finish a project entirely by myself with various different skillsets and making a game has been a fun way to go about it, plus it's something I wanted to do when I was a kid. But the thing I've always sucked at throughout my life is making any type of art whether it is drawing digitally or physically, painting, etc.
Obviously these skills are needed to make textures and things of that nature, so where should I start? I want to just develop the skills, I'm not trying to make the most beautiful groundbreaking textures of all time or anything, but I genuinely don't know where to start with getting better at art. I've been drawing stuff recently as a way to improve, but I'm not sure if I'm even doing anything right to improve. I know it's a slow process but how do I know I'm going about it correctly? And what should I work on if I want to make textures for the games map and characters?
And of course before anyone says, I'm not going to use ai because all of the controversy around it aside, it would just defeat the entire purpose of me doing this project to begin with. Is there some sort of digital art course or something like that anyone would recommend to beginners? Especially the type that would help with the sort of art skills you'd need when making game textures and stuff?
Sorry if this sounds stupid or is posted in the wrong place, I'm just looking for any degree of advice when it comes to this topic.
tl;dr i work alone, won't use ai, just want to improve at art to make the textures and art for my game
Hey everyone, quick question about motivation. In long-ish projects: what keeps you going when progress slows down?
Not the initial hype, but the middle phase where things work, but aren’t exciting as much as they were at the beginning and the progress feels incremental.
Do you rely on discipline, breaks, or external feedback?
I've seen it come up a lot of times in different contexts : the idea that "pixel art is slower and more complicated because it forces you to redraw everything, every time." while 3D "is faster because you only have to model once and then you can re-use the same model over and over and animate it"
But after thinking about it, i'm not so sure it's always true.
If you have 1 player character and 1 ennemy :
- With pixel art, you need 2 spritesheets, let's say 2*30 drawings
- with 3D you need two models, two rigs, and 2 times the animation
With 2D, most of the time spent is on drawing the spritesheet while in 3D a lot of time will be spent on modelling, texturing and righing with less time spent on animating (relatively speaking)
If you take an existing ennemy/character and have it do "one extra thing", 3D has a clear advantage because you can keep the model and only animate one extra action while 2D forces you to redraw the whole thing.
But if you add one ennemy, you have to redo the modelling, the texturing and the rigging before you can animate while in 2D it's just another spritesheet.
Same with the levels, for 3D it's gonna be a whole environment kit, texturing, placing, etc while 2D is gonna be a set of drawings.
It all comes down to how long it takes to create a spritesheet versus how long takes to model, texture, rig and animate, and i'm not so sure drawing a spritesheet takes longer.
Thoughts?
| Cubedoom is an arena shooter implemented entirely in the Spectre Programming Language, it depends on the SDL2 and SDL2_Image dev libraries. It began as an experiment with the languages multi-dimensional array capabilities, on towards its C-interop (the extern-related "header" syntax was introduced in particular for compatibility with the alternate backend of the compiler). It uses raycasting rendering for its 3D world, similar in spirit to early first person shooters such as Wolfenstein 3D or the original DOOM. At runtime each frame casts a set of rays from the player’s position, stepping through the map grid until a wall collision is detected. The distance to that collision determines the vertical slice height drawn to the screen, producing the illusion of depth, which keeps the engine lightweight. The game features a single enemy type and viewbob, as per classic DOOM, and a health/minimap HUD. The gameplay is intentionally minimal, in that the player navigates a maze-like arena, engages in combat with the enemies, and attempts to survive as long as possible. The git repository for cubedoom itself can be found here. PS: Whoever downvoted fuck off tbh [link] [comments] |
I run a community for fans of fantasy, RPG and strategy games, and occasionally I get to interview the people behind the projects we love. SaxonDragon, the lead behind Prophesy of Pendor, is one of them.
What he said about managing a 20-person volunteer team across time zones, with no budget and no authority, hit close to home for anyone who has built something with others.
Curious whether this matches what you have experienced leading mod teams or indie projects, especially keeping volunteers engaged when life gets in the way.
Full interview here : https://tomehero.com/en/news/13_saxondragon-on-prophesy-of-pendor-modding-taught-me-how-to-lead-without-authority
| Balatro needs no introduction, it's a popular roguelike deckbuilder game written in Lua (free open-source Love2D engine) by a solo dev (LocalThunk). As you already know, I'm a reverse enthusiast, thus I like reading the code of certain games/apps, as it helps me to learn how they solve "real world" problems. One more thing that I wanted to make clear, is a CODE QUALITY of Balatro. Some technical takeaways:
Full Video: https://www.youtube.com/watch?v=54w9crNNThU [link] [comments] |
Released our first trailer on YouTube last Friday for our puzzle-platformer. Sat at ~30 views over the weekend, normal indie life.
Monday morning, views started ticking up faster. By lunch we'd done a few hundred views in the day, with "Browse features" at 80%+ of our traffic. YouTube was actively pushing the video on its homepage.
For a hot minute I was convinced we were about to go viral. We didn't. By Tuesday morning the impressions had plateaued hard (currently ~4.4k impressions, 5.2% CTR, ~450 views total). The push lasted essentially a few hours of active growth.
A couple things surprised me:
Anyone else had a short Browse features bump like this? Curious how long yours lasted before plateauing, and whether anything trickled in downstream once it flatlined.
Many consider text-based games to be way too simple without complexity.
Well, I'm new to coding, so I may not know much about the game development world, but I'm trying to start from the roots.
I think other people thot of it too, but when they try it, they change their mind and switch to more advanced game types.
I swear that text-based died because everyone wants cool graphics and refuses to use their imagination.
That's why I want to make a text-based game with actual mechanics and not simple text on the screen. To be sincere, what I have in mind is not a complete text-based approach, but how else am I supposed to grab attention?
Any suggestions on making it feel cool?
On the UI, there would be status bars, the map, and the description box, with the actions.
Hey so i am porting the remaster of the previously popular uiGrid for angularjs to rust (i am the original author of ui-grid)
i am wondering what your ui framework of choice is for the rust side of things?
ive got the core now already converted to rust and going to make a vanilla version, but wondering if there’s a specific framework that lacks a fully-featured data grid right now that could use one?
edit: the grid is MIT and basically blows agGrid and others out of the water on free enterprise features. i’m not asking for you to visit the repository or anything i just wanna know what to drop for you guys. it will remain free forever
Due to the need for special cursor api, (and cursor feature in std is not stable yet), I've spent a month writing an alternate version of BTreeMap. The intended scenarios are for integer keys with a large and long-lived dataset. The result is satisfying.
doc: https://docs.rs/embed-collections/latest/embed_collections/btree/
repo: https://github.com/NaturalIO/embed-collections-rs
I have done a little investigation of std implementation before I started:
My approach:
CloneAlthough it's possible to squeeze more fanout for u32 at InterNode, I decided to wrap up the work for now.
benchmark:
(platform: intel i7-8550U, key: u32, value: u32, rust 1.92)
| insert_seq (me/s) | btree | std |
|---|---|---|
| 1k | 88.956 | 20.001 |
| 10k | 75.291 | 16.04 |
| 100k | 45.959 | 11.207 |
| insert_rand (me/s) | btree | std | avl(box) | avl(arc) |
|---|---|---|---|---|
| 1k | 21.311 | 17.792 | 11.172 | 9.5397 |
| 10k | 14.268 | 11.587 | 6.3669 | 5.651 |
| 100k | 5.4814 | 3.0691 | 0.78 | 0.732 |
| get_seq (me/s) | btree | std |
|---|---|---|
| 1k | 59.448 | 34.248 |
| 10k | 37.225 | 27.571 |
| 100k | 30.77 | 19.907 |
| get_rand (me/s) | btree | std | avl(box) | avl(arc) |
|---|---|---|---|---|
| 1k | 47.33 | 27.651 | 24.254 | 23.466 |
| 10k | 19.358 | 16.868 | 11.771 | 10.806 |
| 100k | 5.2584 | 3.2569 | 1.4423 | 1.2712 |
| remove_rand (me/s) | btree | std |
|---|---|---|
| 1k | 20.965 | 15.968 |
| 10k | 16.073 | 11.701 |
| 100k | 5.0214 | 3.0724 |
| iter (me/s) | btree | std |
|---|---|---|
| 1k | 1342.8 | 346.8 |
| 10k | 1209.4 | 303.83 |
| 100k | 152.57 | 51.147 |
| into_iter (me/s) | btree | std |
|---|---|---|
| 1k | 396.07 | 143.81 |
| 10k | 397.05 | 81.389 |
| 100k | 360.18 | 56.742 |
WayDriver is a Rust library for writing functional tests against Wayland desktop apps. Each test session boots a headless Mutter, a private D-Bus, and PipeWire, launches your app inside that bubble, and drives it through AT-SPI and real Wayland input events. You get screenshots, a WebM recording, and an event log per run, packaged as a self-contained HTML viewer.
The locator API is XPath over the AT-SPI tree with auto-waits baked in:
rust session.locate("//Button[@name='Sign in']").click().await?; session.locate("//Text[@name='username']").fill("alice").await?; session.locate("//Label[@name='status']") .wait_for_text(|t| t == "saved").await?;
The library is split around three traits — CompositorRuntime, InputBackend, CaptureBackend — with concrete implementations as sibling crates. Mutter is the only backend wired up today; KWin and sway are reachable from the same surface. The locator is lazy: each method re-snapshots the AT-SPI tree and re-runs the XPath, so there are no stale handles when the UI rebuilds underneath you.
There's also a bundled MCP server (waydriver-mcp) that exposes the same primitives to AI agents — that's how the project started, before I realized the same primitives make a real test framework.
On crates.io as waydriver, Apache-2.0. Built with help of Claude (~15M tokens).
Happy to hear feedback on the API.
Spent the last few months building a `no_std` Rust family of zero-knowledge proof verifiers that fits under 128 KB SRAM the tier most hardwarewallet class chips sit at (nRF52, STM32F4, etc.).
Three proof systems, same repo shape: Groth16 over BN254, Groth16 over BLS12-381, and a winterfell STARK over Goldilocks.
Measured on a Raspberry Pi Pico 2 W (RP2350), which is a fun chip because it has both a Cortex-M33 and a RISC-V Hazard3 core on the same die at the same clock, so cross-ISA comparisons is easy.
Headline numbers, on-device with `DWT::cycle_count` / `mcycle`:
| verify | M33 | Hazard3 | proof size |
|---|---|---|---|
| STARK Fibonacci-1024 (95-bit) | 75 ms | 112 ms | 30.9 KB |
| Groth16/BN254 (real Semaphore v4) | 1,176 ms | 1,564 ms | 256 B |
| Groth16/BLS12-381 | 2,015 ms | 5,151 ms | 512 B |
A few things that might be interesting from a Rust-specific angle:
- ARMv8-M assembly for `substrate-bn`'s Montgomery multiply (UMAAL on 32-bit limbs, placed in SRAM at boot to dodge the XIP cache), gated behind a Cargo feature so the host build and all 34 upstream tests still use the pure-Rust path. Drops BN254 verify from 962 → 641 ms.
- Wrote a custom `GlobalAlloc` (~200 lines, atomic CAS bump pointer with watermark reset) to isolate allocator noise from the crypto being measured. Turns out the allocator choice swings the M33-vs-Hazard3 ratio from 1.21× to 1.51× on the STARK path, which means a lot of "ARM vs RISC-V" embedded crypto numbers are partially measuring the allocator.
Repo, MIT/Apache: https://github.com/Niek-Kamer/zkmcu
Happy to answer questions about the no_std setup, the asm work, or the methodology.
I’ve just released count-min-sketch-rs, a pure Rust implementation of the Count-Min Sketch (CMS) probabilistic data structure. If you need to estimate frequencies in massive data streams while keeping memory usage constant and minimal, this crate provides a lightweight and fast solution.
This implementation is engineered for high-throughput scenarios where every nanosecond counts. It outperforms generic implementations through four key technical optimizations:
increment and estimate functions perform zero heap allocations during execution. By eliminating system allocator overhead and fragmentation, the crate ensures predictable, lightning-fast performance.ahash) and derive multiple indices using a SplitMix64 mixer. This provides the required statistical independence at a fraction of the CPU cost.u64 with saturating_add logic ensures that under extreme loads, counters stop at u64::MAX instead of wrapping around to zero. This preserves the statistical integrity of your data even during overflow events.%) with a much faster bitwise AND (&) for bucket mapping, significantly reducing CPU cycles per operation.Imagine you have a table of records, and its column distributions are changing over time...I would like to use the CMS as a distribution CDF snapshot.
Beyond simple counting, this implementation supports treating sketches as high-dimensional vectors. By calculating the Cosine Similarity between two different sketches, you can efficiently:
The implementation was benchmarked using Criterion.rs to ensure efficiency across different sketch sizes (Width x Depth). Results show that update times remain in the nanosecond range even with very large configurations:
Crates.io:https://crates.io/crates/count-min-sketch-rs
Performance Report:https://ggraziadei.github.io/count-min-sketch-rust/CountMinSketch_Performance/report/index.html
GitHub: https://github.com/GGraziadei/count-min-sketch-rust
I would appreciate any feedback on the API or suggestions for additional probabilistic features. PRs are welcome!
MuJoCo-rs includes MuJoCo bindings and high-level wrappers for the Rust programming language. Includes a Rust-native viewer and also bindings to a modified C++ one.
MuJoCo (Multi-Joint dynamics with Contact) is a general-purpose physics engine, developed by Google DeepMind.
MuJoCo-rs links:
Notable changes in 4.0.0 release:
If anyone is using MuJoCo-rs or is interest in using it, feel free to leave feedback criticism about API design, missing features, other possible improvements.
Thank you!
MuJoCo-rs's viewer with UI, with Unitree G1 from MuJoCo menagerie
Clean literate programming for Rust programmers, without the odour.
If you ever wanted to refer to a snippet of code in docs and have it remain in sync with the actual code, this may be for you.
#[litter] creates and hash-versions a snippet:
```rust use litter_dox::litter;
fn fibonacci_n(n: u32) -> u32 { ... } ```
Which looks like this: ````md <!-- litter-hash: 72ea20f -->
fibonacci```rust /// Returns n-th Fibonacci number. fn fibonacci_n(n: u32) -> u32 { if n <= 1 { return n; } fibonacci_n(n - 1) + fibonacci_n(n - 2) }
```
[← Back to documentation](../README.md#fibonacci) ``` The#[litter]` macro won't overwrite the snippet if it is up to date.
You can then refer to the fragment by name: text A reference to [complicated code](litdox/fibonacci.md)
But wait, there's more!
For maximum convenience, add litter_anchors!() to your code to automatically get anchors added to all your links! rust litter_dox::litter_anchors!(); Because Markdown lacks native inlining, these anchors ensure readers can always jump back from a snippet to the main documentation.
or cargo add litter-dox right away!
I posted an earlier ESP32-S3/C6 version about a month ago. Since then, I expanded the project to all ESP32 families currently supported by esp-hal, while keeping the same core Conway’s Game of Life code shared across ESP32, Raspberry Pi Pico, and WASM.
The embedded versions run bare metal, with no OS . On ESP32-S3, the demo drives a 16×16 NeoPixel-style LED panel and uses an IR remote for speed, stepping, colors, pattern selection, and backward-in-time search.
Video: https://www.youtube.com/watch?v=ZweVGnUX-ZU
Browser/WASM version: https://carlkcarlk.github.io/device-envoy/conway/
The backward-in-time button searches for a previous board state "no-alloc". It's literally NP-hard, so sometimes it is slow.
The demo is built with device-envoy, a new experimental Rust project that builds on Embassy and the Rust HALs. The idea is application-level code that still compiles to bare metal: devices such as LED panels, Wi-Fi, IR remotes, audio, and servos appear as normal Rust structs with simple methods.
New article with more ESP32 demos including 3 Wi-Fi-synced clocks with different chips and displays, but the same core code: https://medium.com/@carlmkadie/device-envoy-esp-making-embedded-esp32-fun-872e251b88f3
This is kind of a revenge of the sith post, since I've done one more post in this subreddit quite a few months ago with the same project but I am really excited with how it has turned out. Last time, I didn't have any of the other dsp goodies such as noise suppression or gain control (2) but I have since added them.
I've also added in 0.2 (breaking) a graph based builder with the nodes being pretty much the processing steps of the audio. My last interface was good enough, but I had trouble with it on my own projects since it was very rigid, so I have discarded it for the aforementioned event driven dag one. I really like it as it has made by own processing very elegant but I've attached a generic linear pipeline that matches what the previous interface did with the new graph stuff.
Next thing is a bit of divergence with the actual webrtc project but I want to develop a better noise suppression module since the current one is very barebones (similar to the upgrade of webrtc from agc to agc2) but im happy with where the current project is at.
Check it out: https://github.com/RubyBit/aec3-rs
I'm a 3rd-year CS student with Java experience (DSA + backend), starting Rust for systems/security.
Goal: become a systems/security engineer in 2 years.
I understand basics (variables, ownership intro), but I struggle with:
What worked for you to bridge this gap?
Also:
Looking for practical advice, not just theory.
I have been working on a project with Axum and I need some way to generate and validate OTPs. I found these two libraries: https://github.com/constantoine/totp-rs and https://github.com/WesleyBatista/rust-otp while searching online. However, I am curious to know what most people use and any recommendation for me. Also, if you have any horror story using any library / implementing your own, please share.
We're building Hyperswitch Prism (https://github.com/juspay/hyperswitch-prism) — a stateless payment connector library in Rust with server-side SDKs for Python, Java, Node.js, and Rust.
Current FFI setup:
- UniFFI handles Python and Java bindings
- For Node.js, we're using Koffi to load the compiled Rust library
My question: Is Koffi the right choice when UniFFI doesn't support your target language, or are there better alternatives for JS server-side bindings?
Would like to hear how others handle multi-language server SDKs when UniFFI's language support falls short!
I'm a chronic terminal user & an average music enthusiast, studio headphones on & something playing in the background whenever the rig is up, and tbh most terminal visualizers feel like watching a sterile data readout with absolutely no soul.
Bars snap to a height, gravity pulls them down, and...they repeat. It looks reactive, sure, but it feels completely disconnected from the music. CAVA etc, you might be familiar with.
I built Lookas around the idea that raw FFT output has nothing to do with how humans actually perceive sound. The human ear is non-linear & our pitch resolution and loudness sensitivity don't map to linear bins and basic gravity falloff. And...I don't listen to deep house all day, sometimes I might go classical, etc, it won't feel so natural having a visualizer bouncing up and down like a 90s disco floor.
So, I had to build something that aligns those pixels with biological reality and physical weight. Human hearing aligned physics so the bars feel like real sound propagating through air.
Here's a summary of how it works:
For the frequency mapping it uses a Mel scale so bar density actually matches how our ears resolve pitch. For the animation, the bars are driven by a second order spring damper system, which gives them real mass AND momentum AND organic decay tail.
Adjacent bars also share energy, so instead of acting like isolated digital spikes the spectrum moves together as one continuous fluid wave. For perceptual loudness it uses continuous percentile tracking for dynamic range and A weighting to balance frequencies proportional to what you actually hear, NOT what a meter measures.
To make this feel immediate and fluid the underlying engine is built for low latency and zero visual stutter. The audio capture runs on its own dedicated thread and continuously fills a ring buffer. The render loop reads from that buffer independently always grabbing the latest audio window. They never wait on each other, zero stalling on the capture side. On the render side the entire frame is built in memory first and then written to the terminal in one contiguous shot.
There's no line by line output and no partial redraws. The screen only fully clears on a resize event and every other frame just overwrites in place.
This yields zero flicker even pushing 60+ FPS in dense Unicode.
Deps are cpal and parec for audio capture and rustfft for the heavy lifting and crossterm for the terminal backend.
Both PulseAudio and PipeWire work flawlessly.
If you want to try it out it requires zero configuration out of the box and will automatically try to hook into your system audio or fallback to your mic.
You can install it with cargo.
For the source code, documentation, math used, demo videos (with sound) and a detailed breakdown of how it compares to standard tools like CAVA, etc @ the repo:
After many weeks of learning, watching tutorials about Rust, and partaking in Rust exercises, I decided to port a small Go library into Rust. I do recognize I have a lot to learn but just getting out of my comfort zone and trying my hands at this has be rewarding and revealing.
Link: https://github.com/neneodonkor/asciigraph-rs
Crates: https://crates.io/crates/asciigraph-rs
PS. Making it work for real-time data was 🥵
Let me add that I only started learning Rust in February, so please forgive me, if everything is not idiomatic Rust.
I've been programming on mainstream languages for quite some time, but since I started to use more Scala and Rust my mindset has completely shifted and I can't put the genie back in the bottle. But I'm facing some philosophical dilemas now. I really can't decide on what to use, and I don't want to be a jack of all trades. Not that I'll not learn new languages, but I would like to go deep in one.
In terms of type system I think Rust nails the idea of "make invalid states unrepresentable", at least on, let's say, reasonable adopted languages. What is bothering me is that I'll not write any sort of systems code and I'm totally fine with a GC, which would massively simplify the code. But I don't think there is anything on this space today and maybe Rust is the best we have?
For example, OCaml would be a good alternative, but very very very little adoption and missing libraries. Scala would be the biggest contender but such a mess language and ecosystem, and the idea of "best effort" effect handlers don't feel good to me.
Please, share your ideas and opinions, specially if you've faced this question before.
Most of my experience is with TypeScript but I want to use Go more often. I'm looking for guidance/opinions on web application design. I have read a dozen posts on that here but things still aren't really clicking.
Often when working on a web app I will start off with simple transaction scripts. But it doesn't take long before I'm introducing 3rd party services and background jobs into the mix.
A transactional outbox comes in handy in these cases but wiring it all together can be a chore. And as HTTP handlers grow testing becomes a pain.
So I was exploring some tools that can help simplify things while also setting me up for success later. I think `sqlc` and `river` are really great. I build a project to explore these tools and try out some hex arch patterns I've read about here.
I don't really like the way it turned out. So I'm trying to see if there is some middle ground. Here's what I'm thinking so far.
Imagine an up with some kind of user signup where we create a user in the DB and send a welcome email. I extract core logic and DB code from the handler like so:
type UserHandler struct { svc *Service logger *slog.Logger } func NewUserHandler(logger *slog.Logger, svc *Service) *UserHandler { return &UserHandler{svc: svc, logger: logger} } func (h *UserHandler) HandleCreate(w http.ResponseWriter, r *http.Request) { // Parse JSON/form data to get values for an instance of `User`. id, err := h.svc.CreateUser(r.Context(), user) if err != nil { // Handle error. } // Send some response } The user service looks like this
type UserService struct { pool *pgxpool.Pool repo Repository jobs TXJobs } type Repository interface { Create(context.Context, User) (int64, error) WithTx(tx pgx.Tx) UserRepository } type TXJobs interface { InsertTx(ctx context.Context, tx pgx.Tx, args river.JobArgs, opts *river.InsertOpts) error } The idea Is that `Repository` and `TXJobs` starts to abstract away the details of `sqlc` and `river` but I'm still largely tied to Postgres. Still, the HTTP handler doesn't know about that.
The user service exposes this method which manages a transaction:
func (svc UserService) CreateUser(ctx context.Context, u User) (int64, error) { // Validate data here. var id int64 var err error err = svc.atomic(ctx, func(tx pgx.Tx) error { id, err = svc.repo.WithTx(tx).Create(ctx, u) if err != nil { return err } err = svc.jobs.InsertTx(ctx, tx, WelcomeEmailArgs{}, nil) if err != nil { return err } return nil }) return id, nil } func (svc UserService) atomic(ctx context.Context, fn func(tx pgx.Tx) error) error { tx, err := svc.pool.Begin(ctx) if err != nil { return err } defer tx.Rollback(ctx) err = fn(tx) if err != nil { return err } return tx.Commit(ctx) } From here I can evolve my user service independently of the HTTP handler. Testing with Postgres is pretty easy with `pgtestdb` so I'm not super worried about the coupling.
I would love to get some advice about this or the GitHub repo I posted above. Thanks!
https://github.com/benedoc-inc/pdfer
I've been working on a PDF library that's stdlib-only — no CGO, no third-party dependencies. The go.mod is just the module name and go 1.21, and go test ./... runs anywhere Go does. Just updated it to handle redactions and signatures better.
I started it because I wanted to fill out XFA forms from a Go service, and the realistic options were Adobe Acrobat or a commercial library reached through CGO. XFA is a niche, deprecated-but-not-dead PDF standard still used for a lot of government paperwork, kind of like the zombie version of AcroForms. I figured if I had to write the XFA piece anyway, I might as well do the rest in pure Go too.
So what I've created is a library that can merge, split, reorder, Acroform fill and flatten, content extraction, AES-128 write encryption, PDF/A-1b/2b/3b conversion, and structural + text + image diff between two PDFs.
Because there's no CGO, you get a static binary, fast cross-compile, distroless-friendly Docker images, and go install just works. Package layout is core/{parse,write,manipulate,sign,compare}, forms/{acroform,xfa}, and content/extract — root pdfer package is a thin facade that re-exports types and forwards calls.
Would love to hear if anyone finds this useful. And if you're using it for XFA - curious what your use case is. Would also love feedback on the API ergonomics, the package layout, or the parser internals. The signing layer in core/sign and the XFA dataset rebuild path in forms/xfa are the bits I'd most expect to break on weird inputs.
Hi everyone,
I decided to take on the challenge of writing a full 8-bit emulator (Sinclair ZX Spectrum) from scratch using Go.
It’s been a great project for diving deep into things like Z80 instruction sets, memory mapping, and managing state at a low level without using C. Handling the timing-critical aspects of the Speccy in Go was an interesting hurdle, but it's coming along well.
It’s called zx_go. It can currently load tape files and execute the original ROM code. I’m sharing it now because I’d love some fresh eyes on the code - specifically how I’m handling the CPU loop and memory access.
If you’re into retro tech or systems programming in Go, I’d appreciate any thoughts or feedback you have on the implementation.
| submitted by /u/finallyanonymous [link] [comments] |
today I found deadcode and bisect go tools.
it was really awakening. how good it is !
Is there another nice cli tools, which you uses to make your project cleaner?
| My teammate Rory has written up how we optimised the code for on-call schedule generation after specific pathological requests could cause the scheduler to spin out and consume a bunch of CPU. It’s a good story including a lot of tips on how to optimise Go applications in production, as well as generally how to approach a problem like this. [link] [comments] |
EDIT: After looking at the responses, the code basically just had some copy-paste coding errors that were giving the result. I've left the original contents in-tact for people interested below, but after fixing the issues and shifting things around I started getting results in-line with what I would expect.
I'm building a caching layer and wanted to test go's struct pooling to make sure I understood it before I used it, and see if it was worth messing around with. I setup a little test that just counts the unique pointers:
```go package main
import ( "fmt" "sync" )
type User struct { Name string Age int }
type Set map[string]struct{}
func AllocateNormally(n int) Set { res := make(Set) for range n { q := User{Name: "kieran", Age: 27} res[fmt.Sprintf("%p", &q)] = struct{}{} // Store value with an empty flag
} return res }
var userPool = sync.Pool{ New: func() any { return &User{} }, }
func AllocateViaPool(n int) Set { res := make(Set) for range n { q := userPool.Get().(*User) defer userPool.Put(q) q.Name = "kieran" q.Age = 27
res[fmt.Sprintf("%p", &q)] = struct{}{} } return res }
func main() { pointers := AllocateNormally(50000) fmt.Printf("Number of pointers in normal allocation: %d\n", len(pointers)) pointers = AllocateViaPool(50000) fmt.Printf("Number of pointers in normal pool allocation: %d\n", len(pointers))
} ```
I ran it:
bash $>go run . Number of pointers in normal allocation: 33686 Number of pointers in normal pool allocation: 45299
I know that it's supposed to mainly be used for large short-lived structs, but why is it's performance worse than doing nothing? Is go internally already struct pooling, and mines just worse? If so why does manually pooling perform worse? I feel more confused than when I started and resources online did not help me understand this behaviour at all.