问:
Neo4j Complex Queries (DARK TV SERIES)
I have a Java project with Neo4j that links the different characters in the Dark(Netflix) series.
I now have to create different "complex" queries in Cypher.
A complex query is defined by the fact that we don't know what kind of data will be returne, but I'm not sure I understand what that means.
Is there anyone who can give me an example of a complex query for my project?

Here is my Java Code :

```<code>package dao;

import domaine.Personnage;
import org.neo4j.driver.GraphDatabase;
import org.neo4j.driver.*;
import org.neo4j.driver.Record;
import org.neo4j.driver.types.Node;

import java.util.List;

public class BDD {
    public static Session connect_db() {
        return GraphDatabase.driver("bolt://localhost:7687").session();
    }
    public static void import_base(Session bdd) {
        delete_all(bdd);
        List<Personnage> persos = Data.get_liste_personnages();
        //Create the SicMundus node
        bdd.run("CREATE (s:SicMundus {name: 'Sic Mundus Creatus Est'})");
        //Creation of the
        for (Personnage p : persos) {
            try {
                Result res = bdd.run("MATCH (p:Personne) WHERE p.nom='" + p.getLastname() + "' AND p.prenom='" + p.getName() + "' RETURN p");
                bdd.run("MERGE (f:Famille {famille: $famille})", Values.parameters("famille", p.getLastname()));

                Value p1 = res.next().get("p");
                //verifie si l'année existe déjà
                Result res2 = bdd.run("MATCH (a:Annee) WHERE a.annee=" + p.getYears() + " RETURN a");
                Value a1 = res2.next().get("a");
            } catch (Exception e) {
                //bdd.run("CREATE (p:Personne {nom:'" + p.getName() + "', genre:'" + p.getGender() + "', aliases: '" + p.getAlias() + "',
                // marriedTo:'" + p.getMarried() + "', parentOf:'" + p.getParentOf() + "', childOf:'" + p.getParents() + "', siblings:'" + p.getSiblings() + "',
                // killedby:'" + p.getKilledBy() + "', sicMundus:'" + p.getSicMundus() + "'})");
                bdd.run("CREATE (p:Personne {nom: $name, genre: $gender, aliases: $aliases, lastname: $lastname})", Values.parameters("name", p.getName(), "gender",
                        p.getGender(), "aliases", p.getAlias(), "lastname", p.getLastname()));
                //Create the nodes for each year
                for (int i = 0; i < p.getYears().size(); i++) {
                    bdd.run("MERGE (a:Annee {annee: $annee})", Values.parameters("annee", p.getYears().get(i)));
                }
            }
        }
        for (Personnage p : persos){
            //match les personne avec leur famille via lastname seulement une fois
            bdd.run("MATCH (p:Personne {nom: $name, lastname: $lastname}), (f:Famille {famille: $famille}) MERGE (p)-[:FAMILY]->(f)",
                    Values.parameters("name", p.getName(), "lastname", p.getLastname(), "famille", p.getLastname()));

            //Match les personnes entre elles via leur attribut parentof
            if(p.hasParents()){
                for (int i = 0; i < p.getParents().size(); i++) {
                    bdd.run("MATCH (p:Personne {nom:'" + p.getName() + "'}), (p2:Personne {nom:'" + p.getParents().get(i) + "'}) CREATE (p)-[:CHILDOF]->(p2)");
                }
            }
            if(p.hasKids()){
                for (int i = 0; i < p.getParentOf().size(); i++) {
                    bdd.run("MATCH (p:Personne {nom:'" + p.getName() + "'}), (p2:Personne {nom:'" + p.getParentOf().get(i) + "'}) CREATE (p2)<-[:PARENTOF]-(p)");
                }
            }
            if(p.isMarried()){
                bdd.run("MATCH (p:Personne {nom:'" + p.getName() + "'}), (p2:Personne {nom:'" + p.getMarried() + "'}) CREATE (p)-[:MARRIED]->(p2)");
            }
            //Match les personnes entre elles via leur attribut siblings
            if(p.hasSiblings()){
                for (int i = 0; i < p.getSiblings().size(); i++) {
                    bdd.run("MATCH (p:Personne {nom:'" + p.getName() + "'}), (p2:Personne {nom:'" + p.getSiblings().get(i) + "'}) CREATE (p)-[:SIBLINGS]->(p2)");
                }
            }
            //Match les personnes entre elles via leur attribut killedby
            bdd.run("MATCH (p:Personne {nom:'" + p.getName() + "'}), (p2:Personne {nom:'" + p.getKilledBy() + "'}) CREATE (p)-[:KILLEDBY]->(p2)");
            //Create sic mundus relations
            if(p.getSicMundus())
                bdd.run("MATCH (p:Personne {nom:'" + p.getName() + "'}), (s:SicMundus) CREATE (p)-[:SICMUNDUS]->(s)");
            //match personnes et années
            for (int i = 0; i < p.getYears().size(); i++) {
                bdd.run("MATCH (p:Personne {nom:'" + p.getName() + "'}), (a:Annee {annee:" + p.getYears().get(i) + "}) CREATE (p)-[:LIVEIN]->(a)");
            }
        }
    }
    public static void delete_all(Session bdd){
        bdd.run("match (a) -[r] -> () delete a, r");

        bdd.run("match (a) delete a");
    }

}
</code>```

Here is the graph :

Neo4j Dark Graph

Here is an exemple of a query i've made :

```<code>public static void afficher_personnes_saut(Session bdd){
Result res2 = bdd.run("MATCH (c:Personne)-[r:LIVEIN]->(y:Annee)\n" +
                "WITH c AS personne, y\n" +
                "ORDER BY y.annee\n" +
                "WITH personne, reverse(collect(y.annee)) AS annees\n" +
                "WITH personne, annees, range(0, size(annees)-1) AS is\n" +
                "WITH personne, annees, is, annees + (last(annees) - 33) AS isa\n" +
                "WITH personne, annees, reduce(total=0, n IN is | (total + toInteger((isa[n] - isa[n+1]) / 33 - 1))) AS sum\n" +
                "WHERE sum > 0\n" +
                "RETURN personne.nom AS nom, annees AS Annees");
        System.out.println("Liste des personnes ayant sauté des années de façon anormale :");
        //print les personnes ayant sauté des années
        while (res2.hasNext()){
            Record record = res2.next();
            System.out.println(record.get("nom").asString() + " : " + record.get("Annees").asList());
        }

        System.out.println();

    }
</code>```

The problem is that I know what to expect from this query and don't understand the difference with a complex one.

Here is a query i've made and considered as "complex" :

```<code>public static Personnage getRelationsPersonne(Session bdd, String nom) {
        Result res = bdd.run("MATCH (p:Personne)-[r]->(x) WHERE p.nom = '" + nom + "' RETURN p, x, type(r)");
        Personnage perso = new Personnage(nom);
        while (res.hasNext()) {
            Record r = res.next();
            String type = r.get("type(r)").asString();
            switch (type) {
                case "FAMILY":
                    perso.addFamily(r.get("x").asNode().get("famille").asString());
                    break;
                case "PARENTOF":
                    perso.addKid(r.get("x").asNode().get("nom").asString());
                    break;
                case "LIVEIN":
                    perso.addYear(r.get("x").asNode().get("annee").asInt());
                    break;
                case "MARRIED":
                    perso.addSpouse(r.get("x").asNode().get("nom").asString());
                    break;
                case "CHILDOF":
                    perso.addParent(r.get("x").asNode().get("nom").asString());
                    break;
                case "KILLEDBY":
                    perso.addKiller(r.get("x").asNode().get("nom").asString());
                    break;
                case "SIBLINGS":
                    perso.addSibling(r.get("x").asNode().get("nom").asString());
                    break;
                case "SICMUNDUS":
                    perso.addSicMundus(r.get("x").asNode().get("nom").asString());
                    break;
            }
        }
        return perso;
    }

</code>```
```<code>Personnage jonas = BDD.getRelationsPersonne(bdd, "Jonas Kahnwald");
        jonas.ToStringClean();
        System.out.println("-------------------");
        Personnage ulrich = BDD.getRelationsPersonne(bdd, "Ulrich Nielsen");
        ulrich.ToStringClean();
</code>```

This allows me to get all the nodes to which a given character is connected (French):

Code Printed

I'm now having trouble creating functions similar to this one.

Title: Neo4j Complex Queries (DARK TV SERIES)

Body:
I have a Java project with Neo4j that links the different characters in the Dark(Netflix) series.
I now have to create different "complex" queries in Cypher.
A complex query is defined by the fact that we don't know what kind of data will be returne, but I'm not sure I understand what that means.
Is there anyone who can give me an example of a complex query for my project?

Here is my Java Code :

package dao;

import domaine.Personnage;
import org.neo4j.driver.GraphDatabase;
import org.neo4j.driver.*;
import org.neo4j.driver.Record;
import org.neo4j.driver.types.Node;

import java.util.List;

public class BDD {
    public static Session connect_db() {
        return GraphDatabase.driver("bolt://localhost:7687").session();
    }
    public static void import_base(Session bdd) {
        delete_all(bdd);
        List<Personnage> persos = Data.get_liste_personnages();
        //Create the SicMundus node
        bdd.run("CREATE (s:SicMundus {name: 'Sic Mundus Creatus Est'})");
        //Creation of the
        for (Personnage p : persos) {
            try {
                Result res = bdd.run("MATCH (p:Personne) WHERE p.nom='" + p.getLastname() + "' AND p.prenom='" + p.getName() + "' RETURN p");
                bdd.run("MERGE (f:Famille {famille: $famille})", Values.parameters("famille", p.getLastname()));

                Value p1 = res.next().get("p");
                //verifie si l'année existe déjà
                Result res2 = bdd.run("MATCH (a:Annee) WHERE a.annee=" + p.getYears() + " RETURN a");
                Value a1 = res2.next().get("a");
            } catch (Exception e) {
                //bdd.run("CREATE (p:Personne {nom:'" + p.getName() + "', genre:'" + p.getGender() + "', aliases: '" + p.getAlias() + "',
                // marriedTo:'" + p.getMarried() + "', parentOf:'" + p.getParentOf() + "', childOf:'" + p.getParents() + "', siblings:'" + p.getSiblings() + "',
                // killedby:'" + p.getKilledBy() + "', sicMundus:'" + p.getSicMundus() + "'})");
                bdd.run("CREATE (p:Personne {nom: $name, genre: $gender, aliases: $aliases, lastname: $lastname})", Values.parameters("name", p.getName(), "gender",
                        p.getGender(), "aliases", p.getAlias(), "lastname", p.getLastname()));
                //Create the nodes for each year
                for (int i = 0; i
(f)",
                    Values.parameters("name", p.getName(), "lastname", p.getLastname(), "famille", p.getLastname()));

            //Match les personnes entre elles via leur attribut parentof
            if(p.hasParents()){
                for (int i = 0; i
(p2)");
                }
            }
            if(p.hasKids()){
                for (int i = 0; i < p.getParentOf().size(); i++) {
                    bdd.run("MATCH (p:Personne {nom:'" + p.getName() + "'}), (p2:Personne {nom:'" + p.getParentOf().get(i) + "'}) CREATE (p2)<-[:PARENTOF]-(p)");
                }
            }
            if(p.isMarried()){
                bdd.run("MATCH (p:Personne {nom:'" + p.getName() + "'}), (p2:Personne {nom:'" + p.getMarried() + "'}) CREATE (p)-[:MARRIED]->(p2)");
            }
            //Match les personnes entre elles via leur attribut siblings
            if(p.hasSiblings()){
                for (int i = 0; i
(p2)");
                }
            }
            //Match les personnes entre elles via leur attribut killedby
            bdd.run("MATCH (p:Personne {nom:'" + p.getName() + "'}), (p2:Personne {nom:'" + p.getKilledBy() + "'}) CREATE (p)-[:KILLEDBY]->(p2)");
            //Create sic mundus relations
            if(p.getSicMundus())
                bdd.run("MATCH (p:Personne {nom:'" + p.getName() + "'}), (s:SicMundus) CREATE (p)-[:SICMUNDUS]->(s)");
            //match personnes et années
            for (int i = 0; i
(a)");
            }
        }
    }
    public static void delete_all(Session bdd){
        bdd.run("match (a) -[r] -> () delete a, r");

        bdd.run("match (a) delete a");
    }

}

Here is the graph :

Neo4j Dark Graph

Here is an exemple of a query i've made :

public static void afficher_personnes_saut(Session bdd){
Result res2 = bdd.run("MATCH (c:Personne)-[r:LIVEIN]->(y:Annee)\n" +
                "WITH c AS personne, y\n" +
                "ORDER BY y.annee\n" +
                "WITH personne, reverse(collect(y.annee)) AS annees\n" +
                "WITH personne, annees, range(0, size(annees)-1) AS is\n" +
                "WITH personne, annees, is, annees + (last(annees) - 33) AS isa\n" +
                "WITH personne, annees, reduce(total=0, n IN is | (total + toInteger((isa[n] - isa[n+1]) / 33 - 1))) AS sum\n" +
                "WHERE sum > 0\n" +
                "RETURN personne.nom AS nom, annees AS Annees");
        System.out.println("Liste des personnes ayant sauté des années de façon anormale :");
        //print les personnes ayant sauté des années
        while (res2.hasNext()){
            Record record = res2.next();
            System.out.println(record.get("nom").asString() + " : " + record.get("Annees").asList());
        }

        System.out.println();

    }

The problem is that I know what to expect from this query and don't understand the difference with a complex one.

Here is a query i've made and considered as "complex" :

public static Personnage getRelationsPersonne(Session bdd, String nom) {
        Result res = bdd.run("MATCH (p:Personne)-[r]->(x) WHERE p.nom = '" + nom + "' RETURN p, x, type(r)");
        Personnage perso = new Personnage(nom);
        while (res.hasNext()) {
            Record r = res.next();
            String type = r.get("type(r)").asString();
            switch (type) {
                case "FAMILY":
                    perso.addFamily(r.get("x").asNode().get("famille").asString());
                    break;
                case "PARENTOF":
                    perso.addKid(r.get("x").asNode().get("nom").asString());
                    break;
                case "LIVEIN":
                    perso.addYear(r.get("x").asNode().get("annee").asInt());
                    break;
                case "MARRIED":
                    perso.addSpouse(r.get("x").asNode().get("nom").asString());
                    break;
                case "CHILDOF":
                    perso.addParent(r.get("x").asNode().get("nom").asString());
                    break;
                case "KILLEDBY":
                    perso.addKiller(r.get("x").asNode().get("nom").asString());
                    break;
                case "SIBLINGS":
                    perso.addSibling(r.get("x").asNode().get("nom").asString());
                    break;
                case "SICMUNDUS":
                    perso.addSicMundus(r.get("x").asNode().get("nom").asString());
                    break;
            }
        }
        return perso;
    }

Personnage jonas = BDD.getRelationsPersonne(bdd, "Jonas Kahnwald");
        jonas.ToStringClean();
        System.out.println("-------------------");
        Personnage ulrich = BDD.getRelationsPersonne(bdd, "Ulrich Nielsen");
        ulrich.ToStringClean();

This allows me to get all the nodes to which a given character is connected (French):

Code Printed

I'm now having trouble creating functions similar to this one.


来源: stackexchange

问:
EPPLUS calculating existing workbook gives circular reference error
I am using an existing workbook to feed data in an input sheet and picks results from an output sheet. all the calculations are done in a calculator sheet.

when I input values using EPPLUS in Input sheet and use calculate function, EPP throws circular reference error on Calculator!G14 cell. When i use excel workbook normally, it doesn't give any error

Please see my excel cell formula as well as C# code below to calculator workbook

```<code>ExcelWorksheet worksheet = package.Workbook.Worksheets.Where(x => x.Name == "Input").First();

worksheet.Cells["F5"].Value = calc.FinanceRate / 100;
worksheet.Cells["F6"].Value = "0"; // to be fetched from available product list
worksheet.Cells["C5"].Value = propertyFinance.FinanceAmount;
worksheet.Cells["C6"].Value = propertyFinance.FinanceTerminMonths / 12; // convert to years
worksheet.Cells["C7"].Value = propertyFinance.FrequencyMultiplier; // multiplier is used for frequency
worksheet.Cells["C8"].Value = propertyFinance.ContractStartDate.Date;
worksheet.Cells["C9"].Value = propertyFinance.RepaymentStartDate.Date;
worksheet.Cells["C10"].Value = propertyFinance.ExtraPayment;
package.Workbook.Calculate();

Excel cell formula is mentioned below Calculator!G14 is

=IF(Calculator!$B14<>"",IF(Calculator!$F14+ExtraPayments<Calculator!$E14,ExtraPayments,IF(Calculator!$E14-Calculator!$F14>0,Calculator!$E14-Calculator!$F14,0)),"")

i tried to calculate workbook using epplus 6.1 but there is a circular reference error even though opening this workbook directly from MS Excel doesn't show any circular reference error
</code>```

ContentLicense: CC BY-SA 4.0

Body:
I am using an existing workbook to feed data in an input sheet and picks results from an output sheet. all the calculations are done in a calculator sheet.

when I input values using EPPLUS in Input sheet and use calculate function, EPP throws circular reference error on Calculator!G14 cell. When i use excel workbook normally, it doesn't give any error

Please see my excel cell formula as well as C# code below to calculator workbook

ExcelWorksheet worksheet = package.Workbook.Worksheets.Where(x => x.Name == "Input").First();

worksheet.Cells["F5"].Value = calc.FinanceRate / 100;
worksheet.Cells["F6"].Value = "0"; // to be fetched from available product list
worksheet.Cells["C5"].Value = propertyFinance.FinanceAmount;
worksheet.Cells["C6"].Value = propertyFinance.FinanceTerminMonths / 12; // convert to years
worksheet.Cells["C7"].Value = propertyFinance.FrequencyMultiplier; // multiplier is used for frequency
worksheet.Cells["C8"].Value = propertyFinance.ContractStartDate.Date;
worksheet.Cells["C9"].Value = propertyFinance.RepaymentStartDate.Date;
worksheet.Cells["C10"].Value = propertyFinance.ExtraPayment;
package.Workbook.Calculate();

Excel cell formula is mentioned below Calculator!G14 is

=IF(Calculator!$B14<>"",IF(Calculator!$F14+ExtraPayments<Calculator!$E14,ExtraPayments,IF(Calculator!$E14-Calculator!$F14>0,Calculator!$E14-Calculator!$F14,0)),"")

i tried to calculate workbook using epplus 6.1 but there is a circular reference error even though opening this workbook directly from MS Excel doesn't show any circular reference error


问:
How to debug a function while there are no errors and warnings?
I want to make a program to get course information from my college website, then generate a .xlsx for print use and a .ics so that I can import it into Apple Calendar.
https://github.com/civilix/WasedaClassSchedule

I had only been learning python for a week when I wrote main.py, so it may seem naive. But it does work properly and can generate an xlsx file. I've now written another ics.py and tried to call it in the main.py. I only added few lines in the main.py, but now the program will abort here.

```<code>import ics
ics.calendar(1,day,period,name,room,fq,sq)
</code>```

This is a set of parameters actually looks like:
(1,1,3,Introductory Statistics A 62,Online,2022-09-28,2022-11-28)

ics.py runs fine on its own, and I also tried to print its arguments and they also seem fine. There are no errors or warnings there, so I'm really confused as to what to do. I know there's an ics module, but it doesn't support repeating events, so I made one by myself.

Body:
I want to make a program to get course information from my college website, then generate a .xlsx for print use and a .ics so that I can import it into Apple Calendar.
https://github.com/civilix/WasedaClassSchedule

I had only been learning python for a week when I wrote main.py, so it may seem naive. But it does work properly and can generate an xlsx file. I've now written another ics.py and tried to call it in the main.py. I only added few lines in the main.py, but now the program will abort here.

import ics
ics.calendar(1,day,period,name,room,fq,sq)

This is a set of parameters actually looks like:
(1,1,3,Introductory Statistics A 62,Online,2022-09-28,2022-11-28)

ics.py runs fine on its own, and I also tried to print its arguments and they also seem fine. There are no errors or warnings there, so I'm really confused as to what to do. I know there's an ics module, but it doesn't support repeating events, so I made one by myself.


问:
Codelite code completion not working properly?
enter image description here
I install codelite the second time after I re-install win10, but it seems thet the code completion is not working as it did before, and I still on't know how to fix it

I honestly don't have much trouble with that but I do like the diversity o colors in my code so I want to fix it, plus it's more convenient to have that, so how can I dix it?


问:
I added Route in my react app but when I click on the components the path changes but nothing renders and it gives a blank page instead
this is my app.js file

```<code>import "./App.css";
import PreNavbar from "./components/PreNavbar";
import Navbar from "./components/Navbar";
import Slider from "./components/Slider";
import data from "./data/data.json";
import Offers from "./components/Offers.jsx";
import Heading from "./components/Heading.jsx";
import StarProduct from "./components/StarProduct.jsx";
import HotAccessoriesMenu from "./components/HotAccessoriesMenu.jsx";
import HotAccessories from "./components/HotAccessories.jsx";
import { BrowserRouter as Router , Route , Routes} from "react-router-dom";
const banner = data.banner;

function App() {
  return (
    <Router>
      <PreNavbar />
      <Navbar />
      <Slider start={banner.start} />
      <Offers offer={data.offer} />
      <Heading text="Star Products" />
      <StarProduct item={data.starProduct} />
      <Heading text="hot accessories" />
      <HotAccessoriesMenu />
      <Heading text="product reviews" />

      <Routes>
        <Route
          path="/music"
          element={
            <HotAccessories
              music={data.hotAccessories.music}
              musicCover={data.hotAccessoriesCover.music}
            />
          }
        />

      </Routes>
    </Router>
  );
}

export default App;

</code>```

HotAccessories.js  below

```<code>import React from "react";
import HotItemCard from "./components/HotItemCard.jsx";
import "../styles/HotAccessories.css";
const HotAccessories = (
  music,
  musicCover,
  home,
  homeCover,
  lifeStyle,
  lifeStyleCover,
  mobileAccessories,
  mobileAccessoriesCover
) => {
  return (
    <div className="HotAccessories">
      <div>
        <img
          src={
            musicCover || homeCover || lifeStyleCover || mobileAccessoriesCover
          }
          alt="Cover"
        />
      </div>

      {/* -----2nd */}

      <div>
        {music &&
          music.map((item, index) => (
            <HotItemCard
              key={item.image}
              index={index}
              image={item.image}
              price={item.price}
            />
          ))}
    </div>
  );
};

export default HotAccessories;

</code>```

HotItemCard.js below

```<code>import React from "react";
import "../styles/HotItemCard.css"

const HotItemCard = ({ name, price, image, index }) => {
  return (
    <div className="HotItemCard">
      <img src={image} alt={`${index} product`} />
      <p>{name}</p>
      <span>{price}</span>
    </div>
  );
};

export default HotItemCard;

</code>```

I added route with a path "/music" and expecting that whenever music  in the navbar is clicked the route changes to "/music" and only after clicking it renders hotAccessories component instead the path changes and the complete page goes to blank white page.

Body:
this is my app.js file

import "./App.css";
import PreNavbar from "./components/PreNavbar";
import Navbar from "./components/Navbar";
import Slider from "./components/Slider";
import data from "./data/data.json";
import Offers from "./components/Offers.jsx";
import Heading from "./components/Heading.jsx";
import StarProduct from "./components/StarProduct.jsx";
import HotAccessoriesMenu from "./components/HotAccessoriesMenu.jsx";
import HotAccessories from "./components/HotAccessories.jsx";
import { BrowserRouter as Router , Route , Routes} from "react-router-dom";
const banner = data.banner;

function App() {
  return (
    <Router>
      <PreNavbar />
      <Navbar />
      <Slider start={banner.start} />
      <Offers offer={data.offer} />
      <Heading text="Star Products" />
      <StarProduct item={data.starProduct} />
      <Heading text="hot accessories" />
      <HotAccessoriesMenu />
      <Heading text="product reviews" />

      <Routes>
        <Route
          path="/music"
          element={
            <HotAccessories
              music={data.hotAccessories.music}
              musicCover={data.hotAccessoriesCover.music}
            />
          }
        />

      </Routes>
    </Router>
  );
}

export default App;

HotAccessories.js  below

import React from "react";
import HotItemCard from "./components/HotItemCard.jsx";
import "../styles/HotAccessories.css";
const HotAccessories = (
  music,
  musicCover,
  home,
  homeCover,
  lifeStyle,
  lifeStyleCover,
  mobileAccessories,
  mobileAccessoriesCover
) => {
  return (

      {/* -----2nd */}

        {music &&
          music.map((item, index) => (
            <HotItemCard
              key={item.image}
              index={index}
              image={item.image}
              price={item.price}
            />
          ))}

  );
};

export default HotAccessories;

HotItemCard.js below

import React from "react";
import "../styles/HotItemCard.css"

const HotItemCard = ({ name, price, image, index }) => {
  return (

      <img src={image} alt={`${index} product`} />

{name}

      {price}

  );
};

export default HotItemCard;

I added route with a path "/music" and expecting that whenever music  in the navbar is clicked the route changes to "/music" and only after clicking it renders hotAccessories component instead the path changes and the complete page goes to blank white page.


问:
How to draw a rectangle in Tradingview by charting library?
To draw a rectangle in the charting_library, the createMultipointShape method must be called, but I don't know how


问:
How to get all output from subprocess.PIPE
I am wrapping a GUI tool around a command line tool in python and I am using subprocess module.

```<code>process = subprocess.Popen(
    args, stdout=subprocess.PIP, encoding='utf8',
)

while True:
    output = process.stdout.readline()
    if output == b"" and process.poll() is not None:
        print("BREAKING")
        break
    if output:
        print(f'stdout: {output.strip()}')
result_code = process.poll()
print(f"result_code: {result_code }")
</code>```

I am trying to read all output from the console, but with subprocess.PIPE I can only read part of it.

Below is output from wrapper script using subprocess:

Below is output I want to read:

Using the stdout=subprocess.PIPE, it does not include the Download 9%, Download 12% etc.

How can I also capture this sys output?

I've tried using stdout=sys.stdout, this will output evertything but I can't read from it like process.stdout.readline() to handle the output.

Body:
I am wrapping a GUI tool around a command line tool in python and I am using subprocess module.

process = subprocess.Popen(
    args, stdout=subprocess.PIP, encoding='utf8',
)

while True:
    output = process.stdout.readline()
    if output == b"" and process.poll() is not None:
        print("BREAKING")
        break
    if output:
        print(f'stdout: {output.strip()}')
result_code = process.poll()
print(f"result_code: {result_code }")

I am trying to read all output from the console, but with subprocess.PIPE I can only read part of it.

Below is output from wrapper script using subprocess:

Below is output I want to read:

Using the stdout=subprocess.PIPE, it does not include the Download 9%, Download 12% etc.

How can I also capture this sys output?

I've tried using stdout=sys.stdout, this will output evertything but I can't read from it like process.stdout.readline() to handle the output.


问:
How can i include squares of lagged variables in regression models
I want to include squares of lagged variables in my regression like this:

```<code>lm(y ~ x + I((l(x, 1:24))^2), data)
</code>```

But i get only one coefficient for:

```<code>I((l(PV, 1) + l(PV, 2) + l(PV, 3) + l(PV, 4) + l(PV, 5) + l(PV, 6) + l(PV, 7) + l(PV, 8) + l(PV, 9) + l(PV, 10) + l(PV, 11) + l(PV, 12) + l(PV, 13) + l(PV, 14) + l(PV, 15) + l(PV, 16) + l(PV, 17) + l(PV, 18) + l(PV, 19) + l(PV, 20) + l(PV, 21) + l(PV, 22) + l(PV, 23) + l(PV, 24))^2)
</code>```

But i need 24 like:

```<code>I((l(PV,1))^2)

I((l(PV,2))^2)

...

I((l(PV,3))^2)
</code>```

Does anyone have a coding solution for this?

Body:
I want to include squares of lagged variables in my regression like this:

lm(y ~ x + I((l(x, 1:24))^2), data)

But i get only one coefficient for:

I((l(PV, 1) + l(PV, 2) + l(PV, 3) + l(PV, 4) + l(PV, 5) + l(PV, 6) + l(PV, 7) + l(PV, 8) + l(PV, 9) + l(PV, 10) + l(PV, 11) + l(PV, 12) + l(PV, 13) + l(PV, 14) + l(PV, 15) + l(PV, 16) + l(PV, 17) + l(PV, 18) + l(PV, 19) + l(PV, 20) + l(PV, 21) + l(PV, 22) + l(PV, 23) + l(PV, 24))^2)

But i need 24 like:

I((l(PV,1))^2)

I((l(PV,2))^2)

...

I((l(PV,3))^2)

Does anyone have a coding solution for this?


问:
Set scroll distance on a scroll view kotlin
My app has a pretty long scroll view for its main menu, I would like it to save the scroll Y position so if the user goes to another activity, when they return to the main menu it takes them back to the scroll position they where in before leaving it.

Main activity:

```<code>override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)

        val disScrolled = sharedPreferences.getInt("SSS", 0)
        val scrollView = findViewById<ScrollView>(R.id.scrollView)
        scrollView.scrollY = disScrolled
</code>```

disScrolled is the Distance scrolled previously, it is saved before leaving the main activity as a shared preferences in the code below

```<code>button.setOnClickListener {
            val scroll = scrollView.scrollY
            val scrollyScrolled = getSharedPreferences("save", AppCompatActivity.MODE_PRIVATE).edit()
            scrollyScrolled.putInt("SSS", scroll)
            scrollyScrolled.commit()
            val intent = Intent(this, General::class.java)
            startActivity(intent)
</code>```

I know it saves correctly as I added logs to log the values and they look correct. I think its an issue with the scrollY = bit but am not sure. Any help would be appreciated!

PS. Sorry for random variable names, naming them odd makes coding more fun for me lol :)

Body:
My app has a pretty long scroll view for its main menu, I would like it to save the scroll Y position so if the user goes to another activity, when they return to the main menu it takes them back to the scroll position they where in before leaving it.

Main activity:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)

        val disScrolled = sharedPreferences.getInt("SSS", 0)
        val scrollView = findViewById<ScrollView>(R.id.scrollView)
        scrollView.scrollY = disScrolled

disScrolled is the Distance scrolled previously, it is saved before leaving the main activity as a shared preferences in the code below

button.setOnClickListener {
            val scroll = scrollView.scrollY
            val scrollyScrolled = getSharedPreferences("save", AppCompatActivity.MODE_PRIVATE).edit()
            scrollyScrolled.putInt("SSS", scroll)
            scrollyScrolled.commit()
            val intent = Intent(this, General::class.java)
            startActivity(intent)

I know it saves correctly as I added logs to log the values and they look correct. I think its an issue with the scrollY = bit but am not sure. Any help would be appreciated!

PS. Sorry for random variable names, naming them odd makes coding more fun for me lol :)


问:
can't able to show equalizer in flutter using just_audio pakage
I am facing error while showing equalizer.
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: UnimplementedError: audioEffectSetEnabled() has not been implemented.

my code to initialize audio player in controller class:

and the code i access my equalizer from controller class is below:

the same code is working in test implementation but not in my project i follow the code from the official example of the just-audio package


问:
Flutter define and use global variable from SharedPreferences
My rest service return some value eg. username and job.

After get data from api I save username and job to SharedPreferences.

How after add to SharedPreferences set this value as global variable and use on other page?

some like this eg. page.dart

Text(MySharedPreferences().username.toString());

```<code>//Set to SharedPreferences
setToSharedPreferences(String username, String job) async {
    SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
    sharedPreferences.setStringList('mySp',[username.toString(), job.toString()]);
}
</code>```

Or some other solution to save value from api as global variable without SharedPreferences?

Body:
My rest service return some value eg. username and job.

After get data from api I save username and job to SharedPreferences.

How after add to SharedPreferences set this value as global variable and use on other page?

some like this eg. page.dart

Text(MySharedPreferences().username.toString());

//Set to SharedPreferences
setToSharedPreferences(String username, String job) async {
    SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
    sharedPreferences.setStringList('mySp',[username.toString(), job.toString()]);
}

Or some other solution to save value from api as global variable without SharedPreferences?


问:
Using sed in AWS Lambda to Delete Rows
I have a Python AWS Lambda which is bulk inserting some csv data into a Postgres database using the copy command. One line uses sed to remove the headers from the csv:

```<code>subprocess.run(f"sed -i '' {local_path}", shell=True)
</code>```

This is fine on my Mac, but isn't working in the Lambda environment. What should I be using instead?

Alternatively, is there a way to do this in Python? I haven't found a way to directly edit the file to remove the headers without copying every line minus headers to a new file, which seems like overkill.

Title: Using sed in AWS Lambda to Delete Rows

Body:
I have a Python AWS Lambda which is bulk inserting some csv data into a Postgres database using the copy command. One line uses sed to remove the headers from the csv:

subprocess.run(f"sed -i '' {local_path}", shell=True)

This is fine on my Mac, but isn't working in the Lambda environment. What should I be using instead?

Alternatively, is there a way to do this in Python? I haven't found a way to directly edit the file to remove the headers without copying every line minus headers to a new file, which seems like overkill.


问:
How to correctly import the package org.json.simple into Android Studio
I want to import the package "org.json.simple" in my Capacitor Plugin.

My Import:

```<code>import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
</code>```

When I try to start the App in Android Studio I get the message:

error: package org.json.simple does not exist

import org.json.simple.JSONArray;

Other imports are working. Is there something I need to do additionally ?

Body:
I want to import the package "org.json.simple" in my Capacitor Plugin.

My Import:

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

When I try to start the App in Android Studio I get the message:

error: package org.json.simple does not exist

import org.json.simple.JSONArray;

Other imports are working. Is there something I need to do additionally ?


问:
AndroidManifest invalid package when building with gluonfx-gradle-plugin
I'm trying to use the gradle plugin gluonfx-gradle-plugin to package my application for Android.

With a template project provided in Intellij, I'm getting the following error when launching the nativePackage task :

[lun. déc. 19 21:22:05 CET 2022][PRÉCIS] [SUB] Execution failed for task ':app:processDebugResources'.
[lun. déc. 19 21:22:05 CET 2022][PRÉCIS] [SUB] > A failure occurred while executing com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask$TaskAction
[lun. déc. 19 21:22:05 CET 2022][PRÉCIS] [SUB]    > Android resource linking failed
[lun. déc. 19 21:22:05 CET 2022][PRÉCIS] [SUB]      /home/***/TestGluonMobile/Gluon-SingleViewProject/build/gluonfx/aarch64-android/gvm/android_project/app/build/intermediates/packaged_manifests/debug/AndroidManifest.xml:2: error: attribute 'package' in  tag is not a valid Android package name: '.GluonSingleViewProject'.

The package name is malformed. I haven't seen where the package is set.

My configuration is the following :

Gradle 7.2

Java 17.0.4

gluonfx-gradle-plugin 1.0.16

JavaFX 17

Thank you for advance


问:
Only show tooltip on specific matrix cells
I have a Power BI Matrix that uses an icon for conditional formatting. Right now I'm using a custom report page tooltip to show more info. However, my customer only wants the tooltip to be enabled on cells that have the icon. Else, he wants no tooltip at all. How to implement?


问:
Can I use picture in-picture-mode with single Activity Jetpack Compose?
My application uses Jetpack Compose code all contained in a single activity without fragments. I'd like to develop a picture-in-picture feature for a video chat feature.

When video chat is started, user will see remote camera stream on full screen, and his local camera stream inside a picture-in-picture box. After user clicks on a chat icon, chat Composable (screen) should be shown that takes up full screen, and remote camera stream should be visible inside the picture-in-picture box. User can then restore the full screen video chat from the picture-in-picture box.

I'm having problem understanding whether it is possible to do as described in a single activity because picture-in-picture feature will put the whole activity inside the picture-in-picture, and I cannot show any other composable UI on the screen underneath.

I assume that my solution can either be done by starting another activity, or creating custom draggable picture-in-picture box for my local/remote camera streams.


问:
how to upload image in node js using multer path of file is url
```<code>const stroge = multer.diskStorage({
    destination : function(req,file,cb){
        cb(null,**URL**)
    },
    filename : function(req,file,cb){
        cb(null,'/home/abhishek/Desktop/uplode/')
    }
})
console.log(path);
const upload = multer({ storage: stroge });
</code>```

i need to pass URL path in destination  http://localhost:8000/uploads/image.png

Body:
const stroge = multer.diskStorage({
    destination : function(req,file,cb){
        cb(null,**URL**)
    },
    filename : function(req,file,cb){
        cb(null,'/home/abhishek/Desktop/uplode/')
    }
})
console.log(path);
const upload = multer({ storage: stroge });

i need to pass URL path in destination  http://localhost:8000/uploads/image.png


问:
How to get multiple query parameters from a URL in FastAPI?
This is an example of Flask code for getting multiple query parameters:

@app.route('/createcm')
def createcm():
   product = request.args.get('product', None)
   color = request.args.get('color', None)
   size = request.args.get('size', None)

   return "response"
```

The question is, how can I create multiple query params in FastAPI framework? The user could select all three query params, but could also select only two or one. Based on these params, it should return data from the database.

Thanks!

Body:
This is an example of Flask code for getting multiple query parameters:

@app.route('/createcm')
def createcm():
   product = request.args.get('product', None)
   color = request.args.get('color', None)
   size = request.args.get('size', None)

   return "response"

The question is, how can I create multiple query params in FastAPI framework? The user could select all three query params, but could also select only two or one. Based on these params, it should return data from the database.

Thanks!


问:
In ecto migration is there a way to rename a table without updating the constraint references
I'm trying to change a non null column to a column that can be null.

```<code>alter table(:members) do
  modify :email, :string, null: true
end
</code>```

However as I'm using sqlite I'm getting: ALTER COLUMN not supported by SQLite3

I attempted to rename the table and copy the data to a new table. However renaming the table also updates all the constraint references. The sqlite docs say I should modify some pragmas, however I can not work out how to do that in an ecto migration.

```<code>execute "PRAGMA foreign_keys = OFF"
execute "PRAGMA legacy_alter_table = ON"
</code>```

Does not work. How can I do this?

Full migration code:

```<code>defmodule Oas.Repo.Migrations.NullEmail do
  use Ecto.Migration

  def up do
    # alter table(:members) do
    #   modify :email, :string, null: true
    # end

    execute "PRAGMA foreign_keys=OFF"
    execute "PRAGMA legacy_alter_table = ON"
    result = repo().query! "PRAGMA foreign_keys"
    # This should return 0, it returns 1 :(
    IO.inspect(result)

    rename table(:members), to: table(:members_tmp6)

    create table(:members) do
      add :email, :string, null: true, collate: :nocase
      add :name, :string, null: false

      timestamps()
    end

    execute("INSERT INTO members SELECT * FROM members_tmp6")

    execute "PRAGMA foreign_keys=ON"
    execute "PRAGMA legacy_alter_table=OFF"

    drop table(:members_tmp6)
  end

  def down do

  end
end
</code>```

Body:
I'm trying to change a non null column to a column that can be null.

alter table(:members) do
  modify :email, :string, null: true
end

However as I'm using sqlite I'm getting: ALTER COLUMN not supported by SQLite3

I attempted to rename the table and copy the data to a new table. However renaming the table also updates all the constraint references. The sqlite docs say I should modify some pragmas, however I can not work out how to do that in an ecto migration.

execute "PRAGMA foreign_keys = OFF"
execute "PRAGMA legacy_alter_table = ON"

Does not work. How can I do this?

Full migration code:

defmodule Oas.Repo.Migrations.NullEmail do
  use Ecto.Migration

  def up do
    # alter table(:members) do
    #   modify :email, :string, null: true
    # end

    execute "PRAGMA foreign_keys=OFF"
    execute "PRAGMA legacy_alter_table = ON"
    result = repo().query! "PRAGMA foreign_keys"
    # This should return 0, it returns 1 :(
    IO.inspect(result)

    rename table(:members), to: table(:members_tmp6)

    create table(:members) do
      add :email, :string, null: true, collate: :nocase
      add :name, :string, null: false

      timestamps()
    end

    execute("INSERT INTO members SELECT * FROM members_tmp6")

    execute "PRAGMA foreign_keys=ON"
    execute "PRAGMA legacy_alter_table=OFF"

    drop table(:members_tmp6)
  end

  def down do

  end
end


问:
How to set equal height columns in Mui Grid V2 depending on largest content in either column
I'm trying to figure out a layout using MUI Gridv2. The grid will consist of two columns both having equal heights, dependent on what content is in them. The second column has an inner grid consisting of two row items.

I have found a couple of examples on how to do something similar, however, they are using Mui Box and Mui Grid version 1 and act a little different with wrapping(Box) and element types(Gridv1).

Here is what I have so far:

```<code><Gridv2 container xs={6} spacing={{ xs: 1 }} sx={{ flexGrow: 1 }}>
  <Gridv2 container xs={12} sx={{ backgroundColor: "yellow" }} flexGrow={1}>
    <Gridv2 md={12} lg={6} xl={8}>
      <Item elevation={2} sx={{ backgroundColor: "#476485" }}>
        <FormLabel component="legend">
          Designation{" "}
          <Tooltip title="Select a Service Type">
            <IconButton size="small" sx={{ padding: 0 }}>
              <MenuOpenIcon />
            </IconButton>
          </Tooltip>
        </FormLabel>
        is this it is this it is this it is this it is this it is this it is
        this it is this it is this it is this it is this it is this it is
        this it is this it is this it is this it is this it is this it is
        this it is this it is this it is this it is this it is this it is
        this it is this it is this it is this it is this it is this it is
        this it is this it is this it is this it is this it
      </Item>
    </Gridv2>
    <Gridv2 md={12} lg={6} xl={4}>
      <Item elevation={2} sx={{ backgroundColor: "#476485", marginBottom: '8px' }}>
        <FormLabel component="legend">
          Points of Interest{" "}
          <Tooltip title="Add a Point of Interest">
            <IconButton size="small" sx={{ padding: 0 }}>
              <AddLocationAltOutlinedIcon />
            </IconButton>
          </Tooltip>
        </FormLabel>
        is this it is this it is this it is this it is this it is this it is
        this it is this it is this it is this it is this it is this it is
        this it is this it
      </Item>
      <Item elevation={2} sx={{ backgroundColor: "#476485", marginTop: '8px' }}>
        <FormLabel component="legend">
          Extra Contact List{" "}
          <Tooltip title="Add a Contact">
            <IconButton size="small" sx={{ padding: 0 }}>
              <AddIcCallOutlinedIcon />
            </IconButton>
          </Tooltip>
        </FormLabel>
        is this it is this it is this it is this it is this it is this it is
        this it is this it is this it is this it is this it is this it is
        this it is this it is this it is this it is this it is this it is
        this it is this it is this it is this it is this it is this it is
        this it is this it is this it is this it
      </Item>
    </Gridv2>
  </Gridv2>
</Gridv2>
</code>```

CodeSandbox Example You can see by dragging between large and medium screens how the largest height can swap from one column to the other.

From the image above, what I would like is if the second column is larger than the first, expand the first column and vice versa.

Body:
I'm trying to figure out a layout using MUI Gridv2. The grid will consist of two columns both having equal heights, dependent on what content is in them. The second column has an inner grid consisting of two row items.

I have found a couple of examples on how to do something similar, however, they are using Mui Box and Mui Grid version 1 and act a little different with wrapping(Box) and element types(Gridv1).

Here is what I have so far:

<Gridv2 container xs={6} spacing={{ xs: 1 }} sx={{ flexGrow: 1 }}>
  <Gridv2 container xs={12} sx={{ backgroundColor: "yellow" }} flexGrow={1}>
    <Gridv2 md={12} lg={6} xl={8}>
      <Item elevation={2} sx={{ backgroundColor: "#476485" }}>
        <FormLabel component="legend">
          Designation{" "}
          <Tooltip title="Select a Service Type">
            <IconButton size="small" sx={{ padding: 0 }}>
              <MenuOpenIcon />
            </IconButton>
          </Tooltip>
        </FormLabel>
        is this it is this it is this it is this it is this it is this it is
        this it is this it is this it is this it is this it is this it is
        this it is this it is this it is this it is this it is this it is
        this it is this it is this it is this it is this it is this it is
        this it is this it is this it is this it is this it is this it is
        this it is this it is this it is this it is this it
      </Item>
    </Gridv2>
    <Gridv2 md={12} lg={6} xl={4}>
      <Item elevation={2} sx={{ backgroundColor: "#476485", marginBottom: '8px' }}>
        <FormLabel component="legend">
          Points of Interest{" "}
          <Tooltip title="Add a Point of Interest">
            <IconButton size="small" sx={{ padding: 0 }}>
              <AddLocationAltOutlinedIcon />
            </IconButton>
          </Tooltip>
        </FormLabel>
        is this it is this it is this it is this it is this it is this it is
        this it is this it is this it is this it is this it is this it is
        this it is this it
      </Item>
      <Item elevation={2} sx={{ backgroundColor: "#476485", marginTop: '8px' }}>
        <FormLabel component="legend">
          Extra Contact List{" "}
          <Tooltip title="Add a Contact">
            <IconButton size="small" sx={{ padding: 0 }}>
              <AddIcCallOutlinedIcon />
            </IconButton>
          </Tooltip>
        </FormLabel>
        is this it is this it is this it is this it is this it is this it is
        this it is this it is this it is this it is this it is this it is
        this it is this it is this it is this it is this it is this it is
        this it is this it is this it is this it is this it is this it is
        this it is this it is this it is this it
      </Item>
    </Gridv2>
  </Gridv2>
</Gridv2>

CodeSandbox Example You can see by dragging between large and medium screens how the largest height can swap from one column to the other.

From the image above, what I would like is if the second column is larger than the first, expand the first column and vice versa.


问:
Unable to take Moodle Mobile prod build
I have set up a development environment for Moodle Mobile. I am able to compile and take the build successfully (version 4.0.1). However, now if I clone the latest code (version 4.1.0-dev) I am getting errors while executing npm run prod:android.

I executed the same command in the 4.0.1 version and there I was able to take the build successfully.

The following are the errors:

```<code>ask :CordovaLib:compileDebugJavaWithJavac FAILED

FAILURE: Build failed with an exception.

What went wrong:
Execution failed for task ':CordovaLib:compileDebugJavaWithJavac'.
Compilation failed; see the compiler error output for details.

Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

See https://docs.gradle.org/7.1.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 43s
23 actionable tasks: 5 executed, 18 up-to-date
Command failed with exit code 1: /home/moodle/DevEnvironment/projects/moodleapp/platforms/android/gradlew cdvBuildDebug -b /home/moodle/DevEnvironment/projects/moodleapp/platforms/android/build.gradle
[ERROR] An error occurred while running subprocess cordova.

        cordova build android exited with exit code 1.
</code>```

I tried some solutions, but nothing worked. Then I executed the command using the verbose flag and in the terminal, I noticed this:

```> Task :CordovaLib:compileDebugJavaWithJavac
An exception has occurred in the compiler (1.8.0_261). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you.

java.lang.AssertionError: annotationType(): unrecognized Attribute name MODULE (class com.sun.tools.javac.util.UnsharedNameTable$NameImpl)
        at com.sun.tools.javac.util.Assert.error(Assert.java:133)
        at com.sun.tools.javac.code.TypeAnnotations.annotationType(TypeAnnotations.java:231)
        at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.separateAnnotationsKinds(TypeAnnotations.java:294)
        at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.visitMethodDef(TypeAnnotations.java:1066)
        at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:778)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
        at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:275)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
        at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.visitClassDef(TypeAnnotations.java:1042)
        at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:693)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
        at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:275)
        at com.sun.tools.javac.code.TypeAnnotations$1.run(TypeAnnotations.java:127)
        at com.sun.tools.javac.comp.Annotate.flush(Annotate.java:152)
        at com.sun.tools.javac.comp.Annotate.enterDone(Annotate.java:129)
        at com.sun.tools.javac.comp.Enter.complete(Enter.java:512)
        at com.sun.tools.javac.comp.Enter.main(Enter.java:471)
        at com.sun.tools.javac.main.JavaCompiler.enterTrees(JavaCompiler.java:982)
        at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:857)
        at com.sun.tools.javac.main.Main.compile(Main.java:523)
        at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:129)
        at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:138)
        at org.gradle.internal.compiler.java.IncrementalCompileTask.call(IncrementalCompileTask.java:89)
        at org.gradle.api.internal.tasks.compile.AnnotationProcessingCompileTask.call(AnnotationProcessingCompileTask.java:94)
        at org.gradle.api.internal.tasks.compile.ResourceCleaningCompilationTask.call(ResourceCleaningCompilationTask.java:57)
        at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:54)
        at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:39)
        at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:97)
        at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:51)
        at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:37)
        at org.gradle.api.internal.tasks.compile.AnnotationProcessorDiscoveringCompiler.execute(AnnotationProcessorDiscoveringCompiler.java:51)
        at org.gradle.api.internal.tasks.compile.AnnotationProcessorDiscoveringCompiler.execute(AnnotationProcessorDiscoveringCompiler.java:37)
        at org.gradle.api.internal.tasks.compile.ModuleApplicationNameWritingCompiler.execute(ModuleApplicationNameWritingCompiler.java:46)
        at org.gradle.api.internal.tasks.compile.ModuleApplicationNameWritingCompiler.execute(ModuleApplicationNameWritingCompiler.java:36)
        at org.gradle.jvm.toolchain.internal.DefaultToolchainJavaCompiler.execute(DefaultToolchainJavaCompiler.java:57)
        at org.gradle.api.tasks.compile.JavaCompile.lambda$createToolchainCompiler$1(JavaCompile.java:231)
        at org.gradle.api.internal.tasks.compile.CleaningJavaCompiler.execute(CleaningJavaCompiler.java:53)
        at org.gradle.api.internal.tasks.compile.incremental.IncrementalCompilerFactory.lambda$createRebuildAllCompiler$0(IncrementalCompilerFactory.java:52)
        at org.gradle.api.internal.tasks.compile.incremental.SelectiveCompiler.execute(SelectiveCompiler.java:67)
        at org.gradle.api.internal.tasks.compile.incremental.SelectiveCompiler.execute(SelectiveCompiler.java:41)
        at org.gradle.api.internal.tasks.compile.incremental.IncrementalResultStoringCompiler.execute(IncrementalResultStoringCompiler.java:65)
        at org.gradle.api.internal.tasks.compile.incremental.IncrementalResultStoringCompiler.execute(IncrementalResultStoringCompiler.java:51)
        at org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler$2.call(CompileJavaBuildOperationReportingCompiler.java:59)
        at org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler$2.call(CompileJavaBuildOperationReportingCompiler.java:51)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:79)
        at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:79)
        at org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler.execute(CompileJavaBuildOperationReportingCompiler.java:51)
        at org.gradle.api.tasks.compile.JavaCompile.performCompilation(JavaCompile.java:278)
        at org.gradle.api.tasks.compile.JavaCompile.performIncrementalCompilation(JavaCompile.java:164)
        at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:145)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
        at org.gradle.api.internal.project.taskfactory.IncrementalInputsTaskAction.doExecute(IncrementalInputsTaskAction.java:32)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
        at org.gradle.api.internal.project.taskfactory.AbstractIncrementalTaskAction.execute(AbstractIncrementalTaskAction.java:25)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$2.run(ExecuteActionsTaskExecuter.java:506)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:74)
        at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:74)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:491)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:474)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$300(ExecuteActionsTaskExecuter.java:106)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.executeWithPreviousOutputFiles(ExecuteActionsTaskExecuter.java:271)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:249)
        at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:83)
        at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:37)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:50)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:47)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:79)
        at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:79)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:47)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:37)
        at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:68)
        at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:38)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:50)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:36)
        at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41)
        at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74)
        at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:29)
        at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:54)
        at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:35)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:60)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:27)
        at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:174)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:74)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:45)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:40)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:29)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:36)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:22)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:99)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:92)
        at java.util.Optional.map(Optional.java:215)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:52)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:36)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:85)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:42)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:91)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:49)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:106)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:51)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:72)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:46)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:86)
        at java.util.Optional.orElseGet(Optional.java:267)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:86)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:32)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
        at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:43)
        at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:31)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:40)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution$2.withWorkspace(ExecuteActionsTaskExecuter.java:284)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:40)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:30)
        at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:37)
        at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:27)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:44)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:33)
        at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:76)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:185)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:174)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:79)
        at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:79)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:408)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:395)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:388)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:374)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
        at java.lang.Thread.run(Thread.java:748)
*
```

How can I resolve this?

Title: Unable to take Moodle Mobile prod build

Body:
I have set up a development environment for Moodle Mobile. I am able to compile and take the build successfully (version 4.0.1). However, now if I clone the latest code (version 4.1.0-dev) I am getting errors while executing npm run prod:android.

I executed the same command in the 4.0.1 version and there I was able to take the build successfully.

The following are the errors:

ask :CordovaLib:compileDebugJavaWithJavac FAILED

FAILURE: Build failed with an exception.

What went wrong:
Execution failed for task ':CordovaLib:compileDebugJavaWithJavac'.
Compilation failed; see the compiler error output for details.

Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

See https://docs.gradle.org/7.1.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 43s
23 actionable tasks: 5 executed, 18 up-to-date
Command failed with exit code 1: /home/moodle/DevEnvironment/projects/moodleapp/platforms/android/gradlew cdvBuildDebug -b /home/moodle/DevEnvironment/projects/moodleapp/platforms/android/build.gradle
[ERROR] An error occurred while running subprocess cordova.

        cordova build android exited with exit code 1.

I tried some solutions, but nothing worked. Then I executed the command using the verbose flag and in the terminal, I noticed this:

> Task :CordovaLib:compileDebugJavaWithJavac
An exception has occurred in the compiler (1.8.0_261). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you.

java.lang.AssertionError: annotationType(): unrecognized Attribute name MODULE (class com.sun.tools.javac.util.UnsharedNameTable$NameImpl)
        at com.sun.tools.javac.util.Assert.error(Assert.java:133)
        at com.sun.tools.javac.code.TypeAnnotations.annotationType(TypeAnnotations.java:231)
        at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.separateAnnotationsKinds(TypeAnnotations.java:294)
        at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.visitMethodDef(TypeAnnotations.java:1066)
        at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:778)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
        at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:275)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:57)
        at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.visitClassDef(TypeAnnotations.java:1042)
        at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:693)
        at com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:49)
        at com.sun.tools.javac.code.TypeAnnotations$TypeAnnotationPositions.scan(TypeAnnotations.java:275)
        at com.sun.tools.javac.code.TypeAnnotations$1.run(TypeAnnotations.java:127)
        at com.sun.tools.javac.comp.Annotate.flush(Annotate.java:152)
        at com.sun.tools.javac.comp.Annotate.enterDone(Annotate.java:129)
        at com.sun.tools.javac.comp.Enter.complete(Enter.java:512)
        at com.sun.tools.javac.comp.Enter.main(Enter.java:471)
        at com.sun.tools.javac.main.JavaCompiler.enterTrees(JavaCompiler.java:982)
        at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:857)
        at com.sun.tools.javac.main.Main.compile(Main.java:523)
        at com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:129)
        at com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:138)
        at org.gradle.internal.compiler.java.IncrementalCompileTask.call(IncrementalCompileTask.java:89)
        at org.gradle.api.internal.tasks.compile.AnnotationProcessingCompileTask.call(AnnotationProcessingCompileTask.java:94)
        at org.gradle.api.internal.tasks.compile.ResourceCleaningCompilationTask.call(ResourceCleaningCompilationTask.java:57)
        at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:54)
        at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:39)
        at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:97)
        at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:51)
        at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:37)
        at org.gradle.api.internal.tasks.compile.AnnotationProcessorDiscoveringCompiler.execute(AnnotationProcessorDiscoveringCompiler.java:51)
        at org.gradle.api.internal.tasks.compile.AnnotationProcessorDiscoveringCompiler.execute(AnnotationProcessorDiscoveringCompiler.java:37)
        at org.gradle.api.internal.tasks.compile.ModuleApplicationNameWritingCompiler.execute(ModuleApplicationNameWritingCompiler.java:46)
        at org.gradle.api.internal.tasks.compile.ModuleApplicationNameWritingCompiler.execute(ModuleApplicationNameWritingCompiler.java:36)
        at org.gradle.jvm.toolchain.internal.DefaultToolchainJavaCompiler.execute(DefaultToolchainJavaCompiler.java:57)
        at org.gradle.api.tasks.compile.JavaCompile.lambda$createToolchainCompiler$1(JavaCompile.java:231)
        at org.gradle.api.internal.tasks.compile.CleaningJavaCompiler.execute(CleaningJavaCompiler.java:53)
        at org.gradle.api.internal.tasks.compile.incremental.IncrementalCompilerFactory.lambda$createRebuildAllCompiler$0(IncrementalCompilerFactory.java:52)
        at org.gradle.api.internal.tasks.compile.incremental.SelectiveCompiler.execute(SelectiveCompiler.java:67)
        at org.gradle.api.internal.tasks.compile.incremental.SelectiveCompiler.execute(SelectiveCompiler.java:41)
        at org.gradle.api.internal.tasks.compile.incremental.IncrementalResultStoringCompiler.execute(IncrementalResultStoringCompiler.java:65)
        at org.gradle.api.internal.tasks.compile.incremental.IncrementalResultStoringCompiler.execute(IncrementalResultStoringCompiler.java:51)
        at org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler$2.call(CompileJavaBuildOperationReportingCompiler.java:59)
        at org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler$2.call(CompileJavaBuildOperationReportingCompiler.java:51)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:79)
        at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:79)
        at org.gradle.api.internal.tasks.compile.CompileJavaBuildOperationReportingCompiler.execute(CompileJavaBuildOperationReportingCompiler.java:51)
        at org.gradle.api.tasks.compile.JavaCompile.performCompilation(JavaCompile.java:278)
        at org.gradle.api.tasks.compile.JavaCompile.performIncrementalCompilation(JavaCompile.java:164)
        at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:145)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
        at org.gradle.api.internal.project.taskfactory.IncrementalInputsTaskAction.doExecute(IncrementalInputsTaskAction.java:32)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
        at org.gradle.api.internal.project.taskfactory.AbstractIncrementalTaskAction.execute(AbstractIncrementalTaskAction.java:25)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$2.run(ExecuteActionsTaskExecuter.java:506)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:74)
        at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:74)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:491)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:474)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$300(ExecuteActionsTaskExecuter.java:106)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.executeWithPreviousOutputFiles(ExecuteActionsTaskExecuter.java:271)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:249)
        at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:83)
        at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:37)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:50)
        at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:47)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:79)
        at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:79)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:47)
        at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:37)
        at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:68)
        at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:38)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:50)
        at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:36)
        at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41)
        at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74)
        at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
        at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:29)
        at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:54)
        at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:35)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:60)
        at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:27)
        at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:174)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:74)
        at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:45)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:40)
        at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:29)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:36)
        at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:22)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:99)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:92)
        at java.util.Optional.map(Optional.java:215)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:52)
        at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:36)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:85)
        at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:42)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:91)
        at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:49)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:106)
        at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:51)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:72)
        at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:46)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:86)
        at java.util.Optional.orElseGet(Optional.java:267)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:86)
        at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:32)
        at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
        at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:43)
        at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:31)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:40)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution$2.withWorkspace(ExecuteActionsTaskExecuter.java:284)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:40)
        at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:30)
        at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:37)
        at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:27)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:44)
        at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:33)
        at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:76)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:185)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:174)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
        at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
        at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
        at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
        at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:79)
        at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:79)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
        at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:408)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:395)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:388)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:374)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
        at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
        at java.lang.Thread.run(Thread.java:748)
*

How can I resolve this?


问:
how to upload in multiple ftp servers in ftp-kr at once
I currently have an application running the backend on a dedicated server (vps) for each of my clients,
every time I need to make a change in the backend I need to upload it using the ftp-kr extension
but as I have several servers I need to change the extension json file to change from one server to another
I would like to know if there is a way to upload only one but that it affects the others servers

I already tried to create a commented list of servers in the json file,
but he does not accept comments


问:
What's the right way of observing interpolated values of an animated property of a SwiftUI view?
I'd like to observe the interpolated value of rotation in the below example. How does one achieve that? I only seem to be able to get the end value.

Preview

```<code>struct ExampleView: View {

    @State var rotation = Angle.zero

    var body: some View {
        ZStack {
            RoundedRectangle(cornerRadius: 20)
                .fill(Color.blue)
            Text("Example")
                .foregroundColor(.white)
        }
        .frame(width: 300, height: 300)
        .rotation3DEffect(rotation, axis: (x: 0, y: 1, z: 0))
        .onTapGesture {
            withAnimation {
                rotation = Angle(degrees: rotation.degrees + 60)
            }
        }.onChange(of: rotation) { newValue in
            // Only prints the end value
            print(newValue.degrees)
        }
    }
}
</code>```

I tried both with implicit animation and explicit animations but both give me the same output. Same applies to animatedData of the Angle instance rotation here.

Body:
I'd like to observe the interpolated value of rotation in the below example. How does one achieve that? I only seem to be able to get the end value.

Preview

struct ExampleView: View {

    @State var rotation = Angle.zero

    var body: some View {
        ZStack {
            RoundedRectangle(cornerRadius: 20)
                .fill(Color.blue)
            Text("Example")
                .foregroundColor(.white)
        }
        .frame(width: 300, height: 300)
        .rotation3DEffect(rotation, axis: (x: 0, y: 1, z: 0))
        .onTapGesture {
            withAnimation {
                rotation = Angle(degrees: rotation.degrees + 60)
            }
        }.onChange(of: rotation) { newValue in
            // Only prints the end value
            print(newValue.degrees)
        }
    }
}

I tried both with implicit animation and explicit animations but both give me the same output. Same applies to animatedData of the Angle instance rotation here.


问:
I can't launch a file called pteroq.service in wsl
I'm trying to install https://pterodactyl.io/ in wsl
I have the problem when launching the services.

I am creating this file "pteroq.service" in "/etc/systemd/system"
Sure, the problem is that I can't use this command "sudo systemctl enable --now pteroq.service"
Why wsl doesn't work systemctl, I have to use sudo service, to activate the services.
The problem that the file that it creates tells me that it does not recognize it as a service.

Is there any way to create a script or something that launches the service?