GOOGLE ADS

sábado, 30 de abril de 2022

Al establecer mi ID de canal de bienvenida en mongodb, ¿por qué cambian mis últimos dos dígitos?

Cuando estoy tratando de configurar mi ID de canal de bienvenida en MongoDB ¿Por qué mi canal cambia los últimos dos dígitos a " 00 ", por ejemplo?
954226649841430572 --> (when i send to database it changes to) 954226649841430500

página mongodb

mi código:

 await guild.updateOne(
{ guildID },
{ $set: { leavechannel: channelID } }
);


Solución del problema

En MongoDB, a veces se pueden cortar números grandes debido a la naturaleza del almacenamiento de Ints grandes. En lugar de guardar el valor sin procesar como un número, primero use el .toString()método y almacene el valor como una cadena. Esto eliminará el problema de MongoDB cortando Ints grandes y debido a que JS se escribe dinámicamente no tendrá ningún efecto en el uso de la ID como un número una vez que la obtenga de MongoDB.

Pregunta similar respondida aquí sobre Ints que son demasiado grandes

Editar: además del gran problema de Int, Discord.js analizará los copos de nieve en cadenas de todos modos.

De https://discord.com/developers/docs/reference#snowflakes
Hay algunos casos en los que nuestra API y Gateway pueden devolver ID en un formato inesperado. Internamente, Discord almacena ID como copos de nieve enteros. Cuando serializamos ID en JSON, transformamos bigints en cadenas. Dado que todas las ID de Discord son copos de nieve, siempre debe esperar una cadena.

Nuevo sistema de entrada de Unity: transferencia de parámetros genéricos

Estoy escribiendo un envoltorio semigenérico para el nuevo sistema de entrada de Unity.

using UnityEngine.InputSystem;

public class NewInputSystemWrapper
{
public void test<T>() where T: notnull
{
InputAction action = Whatever();
_ = action.ReadValue<T>();
}
}

Recibo el siguiente mensaje de error. ¿Pero por qué? He declarado que T no es nulo. (Solo quiero pasar a través de T al método ReadValue).
ingrese la descripción de la imagen aquí


Solución del problema

Just follow the constraint of ReadValue method.

public void test<T>() where T: struct

Cómo pasar una variable de un archivo Node.js a un archivo JavaScript frontend

Me gustaría saber cómo pasar la variable "myBlogs" que tengo en mi archivo Node.js ("server.js") a un archivo JavaScript frontend ("blogs.js"). Una vez que tenga acceso a él en el archivo JS, mapearé la matriz que está almacenada en esa variable y generaré una plantilla para cada blog en un archivo HTML ("blogs.html").

Más tarde, la idea es obtener los datos de los blogs de una base de datos (MongoDB) en lugar de tenerlos codificados. He visto cómo hacer esto con Express y un motor de plantillas (EJS), pero como práctica para un principiante, me gustaría entender los conceptos básicos de si se puede hacer sin estas herramientas y cómo.

Mi estructura de archivos:

blogs.css
blogs.html
blogs.js
server.js

servidor.js:

const http = require("http");
const fs = require("fs");
const myBlogs = [
{
title: "My first blog",
author: "John",
},
{
title: "My second blog",
author: "Mike",
},
];
const server = http.createServer((req, res) => {
console.log("request made");
// set header content type
let path = "";
switch (req.url) {
case "/blogs.css":
path += "blogs.css";
res.setHeader("Content-Type", "text/css");
break;
case "/blogs.js":
path += "blogs.js";
res.setHeader("Content-Type", "text/javascript");
break;
default:
path += "blogs.html";
res.setHeader("Content-Type", "text/html");
}
// send file
fs.readFile(path, (err, data) => {
if (err) {
console.log(err);
res.end();
} else {
res.write(data);
res.end();
}
});
});
server.listen(3000, "localhost", () => {
console.log("listening for requests on port 3000");
});

blogs.js:

const container = document.querySelector("div")
const html = myBlogs.map(blog => (
`<h2>${blog.title}</h2>
<p>${blog.author}</p>`
))
container.innerHTML = html;

blogs.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<link rel="stylesheet" href="blogs.css" />
</head>
<body>
<div></div>
<script src="blogs.js"></script>
</body>
</html>

blogs.css:

p {
color: red;
}

PD: Si tal enfoque es completamente incorrecto, ¿podría explicar la forma correcta en que se haría sin el uso de Express y un motor de plantillas?


Solución del problema

servidor.js

 // send file
fs.readFile(path, "utf8", (err, data) => {
if (err) {
console.log(err);
res.end();
} else {
res.write(data.replace(/%MY_BLOGS%/g, JSON.stringify(myBlogs)));
res.end();
}
});

blogs.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<link rel="stylesheet" href="blogs.css" />
<script>
var myBlogs = %MY_BLOGS%;
console.log(myBlogs);
</script>
</head>
<body>
<div></div>
<script src="blogs.js"></script>
</body>
</html>

Esto es increíblemente hacky y no es una buena práctica en absoluto. Básicamente, solo encuentra %MY_BLOGS% e interpola un objeto codificado en JSON. Dado que JSON es JS válido, se podrá acceder directamente a él en el JS del lado del cliente. Ahora puede acceder myBlogsen blogs.js ya que es una variable global.

Reaccionar .map y setState comportamiento extraño

La siguiente es una versión simplificada de la parte del código completo.

Básicamente, se supone que toda la aplicación es una aplicación para tomar notas creada en React, y actualmente estoy atascado en la función de edición de sus respectivas notas.

Entonces, la siguiente parte del script básicamente es compatible para hacer:

  • Representar una matriz de <Card />componentes basada en la this.state.notesmatriz de la aplicación

  • Al hacer clic en el Edit notebotón, establece el this.state.noteEditingIdestado de la aplicación

  • (para que la instancia de React pueda saber más tarde qué Tarjeta generada está siendo editada actualmente por la identificación)

  • Al hacer clic en el Save Editbotón, intenta actualizar la this.state.notesmatriz de la aplicación con el texto de edición enviado.

  • (Mira, usé muchos filtros para tratar de lograr esto, ya que no tengo una buena idea de cómo lograrlo mejor. Creo que debería haber una manera mejor)

  • Pero el resultado no es el que esperaba.

  • (Si bien se suponía que lograría actualizar la matriz de notas del componente Card esperado con el texto de "nota" de la nueva instancia de nota, actualiza la matriz de notas con el texto de "nota" de la instancia de nota de las diferentes notas. No puedo explicar esto claramente, ya que esto es un problema del tipo no sé qué es lo que está mal para mí).


    const Card = (props) => {
    const [noteEditing, setNoteEditing] = useState(false);
    return (
    <div {...props}>
    <div>
    <div>
    <span>
    <button onClick={() => {
    noteEditing? setNoteEditing(false): setNoteEditing(true);
    props.thisApp.setState({ noteEditingId: props.config.id })
    }}>Edit note</button>
    </span>

    {noteEditing
    ?
    <div>
    <textarea className='__text' />
    <button onClick={() => {
    let note = document.querySelector('.__text').value
    let current_note = props.thisApp.state.notes.filter(a => a.id == props.config.id)[0]
    let notesAfterRemoved = props.thisApp.state.notes.filter(a => a.id!== props.config.id)
    if (props.thisApp.state.noteEditingId == props.config.id)
    {
    props.thisApp.setState({
    notes: [...notesAfterRemoved, {...current_note, note: note }]
    })
    }
    }}>
    Save Edit
    </button>
    </div>
    : ""
    }
    </div>
    </div>
    </div>
    )
    }
    class App extends React.Component {
    constructor() {
    super();
    this.state = {
    notes: [
    {
    note: "note1.",
    id: nanoid(),
    },
    {
    note: "note2.",
    id: nanoid(),
    },
    {
    note: "note3.",
    id: nanoid(),
    },
    ]
    };
    }
    render() {
    return (
    <div>
    <h2>
    Notes ({this.state.notes.length})
    </h2>
    <div className='__main_cards'>
    <div>
    {this.state.notes.map((a, i) => {
    return <Card key={i} className="__card" thisApp={this} config={
    {
    note: a.note,
    }
    } />
    })}
    </div>
    </div>
    </div>
    )
    }
    }

    Entonces, ¿qué puedo hacer para que la pieza funcione correctamente? Gracias.


    Solución del problema

    También debe pasar la nota actual y deshacerse del filtro en el componente de la tarjeta:

    this.state.notes.map((note, i) => {
    return (
    <Card
    key={i}
    className="__card"
    thisApp={this}
    currentNote={note}
    />
    );
    })

    Y luego elimina esto:

    let current_note = props.thisApp.state.notes.filter(a => a.id == props.config.id)[0]

    Y luego, en lugar de encontrar las notas sin la nota editada, puede crear una nueva matriz con datos editados como este:

    const x = props.thisApp.state.notes.map((n) => {
    if (n.id === props.currentNote.id) {
    return {...n, note}
    }
    return n
    })

    Y deshazte de esta línea:

    let notesAfterRemoved = props.thisApp.state.notes.filter(a => a.id!== props.config.id)

    Además, cambia esto

    noteEditing? setNoteEditing(false): setNoteEditing(true);

    Para:

    setNoteEditing(prev =>!prev)

    Como es una forma mucho más limpia de alternar el valor.

    Y creo que no hay necesidad de verificar si el noteEditingId es igual al ID de la nota activa actual.

    Así que también puedes deshacerte de eso (¡Corrígeme si me equivoco!)

    Here's the full code:


    const Card = (props) => {
    const [noteEditing, setNoteEditing] = useState(false);
    const textareaRef = useRef();
    return (
    <div {...props}>
    <div>
    <div>
    <span>
    <button
    onClick={() => {
    setNoteEditing((prev) =>!prev); // Cleaner way to toggle
    }}
    >
    Edit note
    </button>
    </span>
    {noteEditing && (
    <div>
    <textarea className="__text" ref={textareaRef} />
    <button
    onClick={() => {
    let note = textareaRef.current.value;
    const x = props.thisApp.state.notes.map(
    (n) => {
    if (n.id === props.currentNote.id) {
    return {...n, note };
    }
    return n;
    }
    );
    props.thisApp.setState({
    notes: x,
    });
    }}
    >
    Save Edit
    </button>
    </div>
    )}
    </div>
    </div>
    </div>
    );
    };
    class App extends React.Component {
    constructor() {
    super();
    this.state = {
    notes: [
    {
    note: "note1.",
    id: nanoid(),
    },
    {
    note: "note2.",
    id: nanoid(),
    },
    {
    note: "note3.",
    id: nanoid(),
    },
    ],
    };
    }
    render() {
    return (
    <div>
    <h2>Notes ({this.state.notes.length})</h2>
    <div className="__main_cards">
    <div>
    {this.state.notes.map((note, i) => {
    return (
    <Card
    key={i}
    className="__card"
    thisApp={this}
    currentNote={note}
    />
    );
    })}
    </div>
    </div>
    </div>
    );
    }
    }
    }
    );
    props.thisApp.setState({
    notes: x,
    });
    }
    }}
    >
    Save Edit
    </button>
    </div>
    )}
    </div>
    </div>
    </div>
    );
    };
    class App extends React.Component {
    constructor() {
    super();
    this.state = {
    notes: [
    {
    note: "note1.",
    id: nanoid(),
    },
    {
    note: "note2.",
    id: nanoid(),
    },
    {
    note: "note3.",
    id: nanoid(),
    },
    ],
    };
    }
    render() {
    return (
    <div>
    <h2>Notes ({this.state.notes.length})</h2>
    <div className="__main_cards">
    <div>
    {this.state.notes.map((note, i) => {
    return (
    <Card
    key={i}
    className="__card"
    thisApp={this}
    currentNote={note}
    />
    );
    })}
    </div>
    </div>
    </div>
    );
    }
    }

    ¡Espero que esto sea útil para usted!

    Notificación push para Mapbox Navigation Android SDK

    ¿Es posible enviar notificaciones automáticas personalizadas a un usuario que se acerca al destino del símbolo de marcador con Mapbox Navigation Android SDK? Si tiene enlaces a la documentación, por favor ayuda. Gracias


    Solución del problema

    para resolver su problema, puede usar LocationManager

    PendingIntent proximityIntent = PendingIntent.getBroadcast(
    context,
    requestCode,
    intent,
    PendingIntent.FLAG_CANCEL_CURRENT);
    locationManager.addProximityAlert(
    latitude, // width
    longitude, // longitude
    POINT_RADIUS, // notification radius
    PROX_ALERT_EXPIRATION, // alert timeout, -1 for "forever"
    proximityIntent

    );

    Para cada nueva ubicación, configura su código de solicitud, bueno, luego registra el receptor, recibe alertas.

    Aquí hay un ejemplo completo de cómo agregar una alerta.

    Espero que esto te ayude a resolver tu pregunta y apreciarás mi respuesta.

    Obtenga el código javascript y modifíquelo para ejecutar chainable

    Quiero cambiar mi código para ejecutar el encadenamiento. este es mi código:

    let stepCount = {
    step: 0,
    up() {
    this.step++;
    },
    down() {
    this.step--;
    },
    showStep: function () {
    return this.step;
    }
    };

    ¿Cómo debo cambiarlo? Quiero ejecutar este código para obtener respuesta.

    stepCount.up().up().down().up();


    Solución del problema

    solo necesita devolver el objeto actual de cada función como esta


    let stepCount = {
    step: 0,
    up() {
    this.step++;
    return this;
    },
    down() {
    this.step--;
    return this
    },
    showStep() {
    console.log(this.step)
    return this;
    }
    };
    stepCount.up().up().down().showStep().down().showStep();

    Archivo xml de cadena en Flutter

    En flutter string, el texto se establece directamente en el TextFieldwidget como:

    new Text('Hello, How are you?')

    ¿Es la forma correcta? o podemos mantener todas las cadenas en un archivo y usarlo como:

    <string name="name_hint">Hello, How are you?</string>

    Es posible?


    Solución del problema

    Captura de pantalla:

    Complementaré la respuesta de Mantas.

    Código completo (seguro nulo):

    Para aquellos de ustedes que no quieren usar ningún complemento de terceros, así es como pueden hacerlo.

  • Crea una carpeta stringsen assets. Ponga su archivo de idioma en él.

    assets
    strings
    - en.json // for english
    - ru.json // for russian


  • Ahora en en.json, escribe tu cadena, por ejemplo.

    {
    "text1": "Hello",
    "text2": "World"
    }

    Del mismo modo, en ru.json,

    {
    "text1": "Привет",
    "text2": "Мир"
    }


  • Añadir esto al pubspec.yamlarchivo (cuidado con los espacios)

    flutter:
    uses-material-design: true
    assets:
    - assets/strings/en.json
    - assets/strings/ru.json
    flutter_localizations:
    sdk: flutter


  • Ahora ya está todo listo para usar estas cadenas en su aplicación. Aquí está el código de muestra, AppBarmuestra el texto traducido.

     void main() {
    runApp(
    MaterialApp(
    locale: Locale("ru"), // switch between en and ru to see effect
    localizationsDelegates: [const DemoLocalizationsDelegate()],
    supportedLocales: [const Locale('en', ''), const Locale('ru', '')],
    home: HomePage(),
    ),
    );
    }
    class HomePage extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    return Scaffold(
    appBar: AppBar(title: Text(DemoLocalizations.of(context).getText("text2")?? "Error")),
    );
    }
    }
    // this class is used for localizations
    class DemoLocalizations {
    static DemoLocalizations? of(BuildContext context) {
    return Localizations.of<DemoLocalizations>(context, DemoLocalizations);
    }
    String getText(String key) => language[key];
    }
    late Map<String, dynamic> language;
    class DemoLocalizationsDelegate extends LocalizationsDelegate<DemoLocalizations> {
    const DemoLocalizationsDelegate();
    @override
    bool isSupported(Locale locale) => ['en', 'ru'].contains(locale.languageCode);
    @override
    Future<DemoLocalizations> load(Locale locale) async {
    String string = await rootBundle.loadString("assets/strings/${locale.languageCode}.json");
    language = json.decode(string);
    return SynchronousFuture<DemoLocalizations>(DemoLocalizations());
    }
    @override
    bool shouldReload(DemoLocalizationsDelegate old) => false;
    }

  • Sintaxis de plegado de la región de Python

    Sé que Python no admite formalmente ninguna sintaxis de plegado de código regional integrada. Sé que existen algunas sintaxis con convenciones vinculadas a editores específicos y pares de comentarios particulares.

    Conozco la sintaxis de plegado del código fuente de Python reconocida por VS Code que usa la #regionpalabra clave

    #region MY_CODE_REGION
    ...

    Spring Batch: defina el alcance de paso del lector/escritor mediante programación sin anotación

    Definiría múltiples lectores/escritores Spring Batch programáticamente, especialmente para StepScope.

    Es común definir un lector con la anotación @StepScope, etc., pero este no es mi escenario.

    COMO ES:

    @Bean
    public Job exporterJobForLUS149A() {
    Job jobWithStep = buildJobWithStep(LUS149A.class, readerForLUS149A(), writerForLUS149A());
    return jobWithStep;
    }
    @StepScope
    @Bean
    public EntityMongoItemReader<LUS149A> readerForLUS149A() {
    final EntityMongoItemReader<LUS149A> reader = reader(LUS149A.class);
    return reader;
    }
    @StepScope
    @Bean
    public CommonEntityToFlatFileItemWriter<LUS149A> writerForLUS149A() {
    final CommonEntityToFlatFileItemWriter<LUS149A> writerForLUS149A = writer(LUS149A.class);
    return writerForLUS149A;
    }

    Pero tengo mucho trabajo (con su lector y escritor) para definir (~20) y podría llegar más... y, en general, no modificaría el código para cada nuevo trabajo/lector/escritor que tengo que proporcionar.

    Entonces, la idea, TO-BE (pseudo-código):

    for (String entityClass: entities) {
    // this provides the entityClass, in some way
    Class<? extends AccountSessionAware> entityClass = buildEntityClass(entitiesDefaultPackage, entityName,
    output.getEntityPackage());

    // for readers
    EntityMongoItemReader<? extends AccountSessionAware> reader = buildReader(entityClass);
    GenericBeanDefinition readerBeanDefinition = new GenericBeanDefinition();
    readerBeanDefinition.setBeanClassName(EntityMongoItemReader.class.getName());
    readerBeanDefinition.setInstanceSupplier(() -> reader);
    // this setScope allows scope from BeanDefinition (application/singleton, infrastructure, prototype, etc...) but I would use StepScope
    readerBeanDefinition.setScope(STEP_SCOPE_I_HAVE_NOT);
    registry.registerBeanDefinition("readerFor" + entityName, readerBeanDefinition);
    log.info("registered: " + "readerFor" + entityName);
    // for writers
    CommonEntityToFlatFileItemWriter<? extends AccountSessionAware> writer = buildWriter(entityClass);
    GenericBeanDefinition writerBeanDefinition = new GenericBeanDefinition();
    writerBeanDefinition.setBeanClassName(EntityMongoItemReader.class.getName());
    writerBeanDefinition.setInstanceSupplier(() -> writer);
    // same problem as reader above
    writerBeanDefinition.setScope(STEP_SCOPE_I_HAVE_NOT);
    registry.registerBeanDefinition("writerFor" + entityName, writerBeanDefinition);
    log.info("registered: " + "writerFor" + entityName);
    Job jobWithStep = buildJobWithStep(entityClass, reader, writer);
    GenericBeanDefinition jobBeanDefinition = new GenericBeanDefinition();
    jobBeanDefinition.setBeanClassName(Job.class.getName());
    jobBeanDefinition.setInstanceSupplier(() -> jobWithStep);
    // for Job we have singleton scope
    jobBeanDefinition.setScope(BeanDefinition.SCOPE_SINGLETON);
    registry.registerBeanDefinition("jobFor" + entityName, jobBeanDefinition);
    log.info("registered: " + "jobFor" + entityName);
    }

    A continuación, métodos comunes para crear lectores y escritores, comunes a los escenarios TAL CUAL y FUTURA:

    private public <eASAx extends AccountSessionAware> EntityMongoItemReader<eASAx> reader(final Class<eASAx> entityToReadClass) {
    LinkedHashMap<String, SortType> commonSort = outputFromDomain.getSort().getCommon();
    final LinkedHashMap<String, SortType> furtherSort = csvExporterType.getOutputs().get(entityToReadClass.getSimpleName()).getAdditionalSort();
    final EntityMongoItemReader<eASAx> reader = new EntityMongoItemReader<>(entityToReadClass, readingPageSize, commonSort, furtherSort, mongoTemplate);
    return reader;
    }
    private <eASAx extends AccountSessionAware> CommonEntityToFlatFileItemWriter<eASAx> writer(final Class<eASAx> eASAxxxClass) {
    final String[] headerColumnNames = csvExporterType.getOutputs().get(eASAxxxClass.getSimpleName()).getColumns().split(ExporterConstants.COMMA);
    final String outputFileName = eASAxxxClass.getSimpleName();
    final EntityToFlatFileItemWriter<eASAx> writer = new EntityToFlatFileItemWriter<>(eASAxxxClass, headerColumnNames, outputDir, outputFileName, fieldsSeparator, writingChunkSize);
    // if required, create multifile writer instance
    if (resourceLimit > 0) {
    final EntityToMultiResourceFlatFileItemWriter<eASAx> entityToMultiResourceFlatFileItemWriter = new EntityToMultiResourceFlatFileItemWriter<>(writer, resourceLimit);
    return entityToMultiResourceFlatFileItemWriter;
    }
    return writer;
    }

    Desafortunadamente, no puedo encontrar una manera de especificar el StepScope para aplicar al lector/escritor GenericBeanDefinition. Además, encontré la clase org.springframework.batch.core.scope.StepScope, que parece ser responsable de aplicar ese alcance al bean anotado @StepScope, y declarado en una clase anotada @Configuration que también tiene la anotación @EnableBatchProcessing en la parte superior de la clase mismo, entre @Configuration. Desafortunadamente, tampoco pude encontrar una manera de usar ese StepScope. Y necesito StepScope para lector/escritor porque necesitan algunos parámetros del contexto laboral, como:

    @Value("#{jobParameters['session']}")
    private String session;
    @Value("#{jobParameters['sort']}")
    private boolean toSort;

    Al no proporcionar el alcance del paso para el lector/escritor, por supuesto, esas inyecciones no funcionarán y tendré un valor nulo, ya que los datos que pasan entre los pasos no funcionarán (usando StepExecutionContext).

    Entonces, ¿alguna sugerencia? También usando otra forma, por supuesto... un enfoque diferente al mío.

    Gracias


    Solución del problema

    Puedes GenericBeanDefinition#setScope(String)usar Así que en tu caso podría ser algo como:

    readerBeanDefinition.setScope("step");

    Tenga en cuenta que el "paso" del alcance debe registrarse en el contexto de la aplicación, ya que no está registrado de forma predeterminada (es un alcance personalizado de Spring Batch).

    ¿Por qué Blazor InputSelect se comporta de manera diferente para los valores de cadena e int?

    Digamos que tenemos una clase realmente simple con 2 propiedades, una es un entero y la otra es una cadena. Quiero usar EditForm con 2 elementos InputSelect que se unen a estas propiedades. El código se ve así:

    @page "/test"
    @using Microsoft.AspNetCore.Components
    @using Newtonsoft.Json
    <PageTitle>Test</PageTitle>
    <h3>Test form</h3>
    <EditForm Model="@_dummy" OnValidSubmit="@TestAsync">
    <DataAnnotationsValidator/>
    <ValidationSummary/>
    <div class="mb-3">
    <label for="string" class="form-label">String</label>
    <InputSelect id="string" @bind-Value="_dummy.StringProp" class="form-select">
    <option value="A">A</option>
    <option value="B">B</option>
    <option value="C">C</option>
    </InputSelect>
    </div>
    <div class="mb-3">
    <label for="int" class="form-label">Integer</label>
    <InputSelect id="int" @bind-Value="_dummy.IntProp" class="form-select">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    </InputSelect>
    </div>
    <button type="submit" class="btn btn-primary">Start</button>
    </EditForm>
    @code {
    readonly Dummy _dummy = new();
    private void TestAsync()
    {
    Console.WriteLine("Object state: " + JsonConvert.SerializeObject(_dummy));
    }
    class Dummy
    {
    public string? StringProp { get; set; }
    public int IntProp { get; set; }
    }
    }

    Así es como se ve en un navegador web:

    ingrese la descripción de la imagen aquí

    ¿Por qué se selecciona el valor de cadena y no el valor entero?

    Cuando envío este formulario sin interactuar con el elemento Seleccionar, obtendré un valor nulo para StringProp. Eso no es intuitivo para los usuarios ya que esta opción se muestra como ya seleccionada. Si interactúo con él, el valor será correcto.

    También traté de usar el atributo seleccionado en el elemento de opción de entero y no tiene ningún efecto. No puedo hacer que ningún valor sea preseleccionado.

    ¿Estoy haciendo algo mal o es un error? estoy usando.NET 6.0


    Solución del problema

    El valor de cadena predeterminado se establece en null. Entonces Select muestra el primer valor. Tenga en cuenta que solo lo muestra en la interfaz de usuario, no lo establece en el objeto modelo ya que no se ha producido ningún evento de cambio.

    El intvalor predeterminado es 0, que es un número real pero no está en la lista de opciones, por lo que no se selecciona nada porque el valor real no está en la lista.

    Puedes hacer que el comportamiento sea el mismo con esto:

     class Dummy
    {
    public string StringProp { get; set; } = string.Empty;
    public int IntProp { get; set; } = 0;
    }

    Este es el comportamiento predeterminado codificado para InputSelect. Puede que no estés de acuerdo con eso, pero no es un error.

    Si desea que su objeto modelo tenga valores predeterminados, configúrelos en el objeto. Si desea obligar al usuario a seleccionar valores, realice la validación de datos.

    php: agregue el separador de miles de comas pero elimine los ceros finales

    Estoy tratando de usar PHP para formatear un número para

  • Eliminar todos los ceros finales


  • Agregue una coma para el separador de miles


  • Haz una lista de dos puntos decimales, asumiendo que no son ceros


  • Intenté esto, pero no está haciendo exactamente lo que estoy tratando de lograr:

    $prices[$title]['reg_price'] = (float)number_format($membership->sell_price, 2, ".", "");
    $prices[$title]['three_year_price'] = (float)number_format($membership->attributes[$aid]->options[$three_year_oid]->price, 2, ".", "");

    Descubrí que podía eliminar los ceros finales convirtiendo el número en un flotador. Sin embargo, descubrí que necesitaba decirle a number_format que NO use el separador de coma de miles, porque de lo contrario, al convertir 1,500.00 a un flotante, el resultado fue 1.

    En resumen, quiero que mi código cambie de 1500,00 a 1500, de 150,00 a 150 y de 19,99 a 19,99. ¿Cómo puedo hacer que esto suceda?


    Solución del problema

    function parseCurrency($value) {
    if ( intval($value) == $value ) {
    $return = number_format($value, 0, ".", ",");
    }
    else {
    $return = number_format($value, 2, ".", ",");
    /*
    If you don't want to remove trailing zeros from decimals,
    eg. 19.90 to become: 19.9, remove the next line
    */
    $return = rtrim($return, 0);
    }
    return $return;
    }
    $prices[] = parseCurrency(1500.00);
    $prices[] = parseCurrency(1500.10);
    $prices[] = parseCurrency(1500.1);
    $prices[] = parseCurrency(1500);
    $prices[] = parseCurrency(123.53);
    $prices[] = parseCurrency(1224323.53);
    $prices[] = parseCurrency(19.99);
    print_r($prices);

    Salidas:

    Array
    (
    [0] => 1,500
    [1] => 1,500.1
    [2] => 1,500.1
    [3] => 1,500
    [4] => 123.53
    [5] => 1,224,323.53
    [6] => 19.99
    )

    ¿Cómo vuelvo a empaquetar archivos .deb en ubuntu snappy (snapcraft)?

    Quería volver a empaquetar los archivos.deb, específicamente la instalación del archivo XWiki.deb en un archivo ubuntu snappy. ya que carezco de conocimiento sobre la creación de instantáneas, ¿qué métodos sugiere que use? ¿Sería mejor compilar XWiki desde el código fuente en Snappy o volver a empaquetar el archivo.deb en Snappy? Y también cuál sería fácil de mantener. También busqué una pregunta similar aquí, pero como ubuntu eliminó la mayoría de la documentación, fue difícil.

    gracias


    Solución del problema

    mkdir tmp
    dpkg-deb -R package deb tmp
    dpkg-deb -b tmp new.deb

    ¿Cómo cerrar una página PHP invocada por código QR?

    Creé un código QR que invoca una página PHP pura para realizar la actualización de la base de datos. Actualmente estoy probando con la cámara del iPhone y activa las operaciones de back-end como se esperaba. La pregunta es cuando se escanea el código QR, aparece una página en blanco. ¿Es posible cerrar esta página en blanco por sí sola al final de las operaciones de back-end o al menos no abrir una nueva página en blanco cada vez sino permanecer en la misma página en blanco para cada nuevo escaneo?

    Gracias enemigo por cualquier consejo.


    Solución del problema

    Puede usar window.close() en javascript si su página es creada por window.open(). De lo contrario, no es posible cerrar una página desde el lado del cliente.

    Si no desea que sus usuarios vean una página en blanco, puede redirigirlos a otra página después de que se haya realizado la operación. Utilice la función de encabezado en php.

    header('Location: http://localhost/');

    Deshabilitar autocompletar irb

    La última versión de irb introdujo un autocompletado que tiene bastantes errores y generalmente no me gusta distraerme con un autocompletado, ¿alguna idea de cómo puedo desactivarlo?



    Solución del problema

    Intenta poner esto en tu~/.irbrc

    IRB.conf[:USE_AUTOCOMPLETE] = false

    Gradiente móvil para la columna del marco de datos de Pandas

    ¿Cómo puedo crear una columna en un marco de datos de pandas con el gradiente de otra columna?

    Quiero que el gradiente se ejecute en una ventana móvil, de modo que solo se evalúen 4 puntos de datos a la vez.

    Supongo que es algo como:

    df['Gradient'] = np.gradient(df['Yvalues'].rolling(center=False,window=4))

    Sin embargo, esto da error:

     raise ValueError('Length of values does not match length of ' 'index')
    ValueError: Length of values does not match length of index

    ¿Algunas ideas?

    ¡¡Gracias!!


    Solución del problema

    A partir de la información proporcionada, se puede ver que no ha proporcionado una función de agregación a su ventana móvil.

    df['Gradient'] = np.gradient(
    df['Yvalues']
    .rolling(center=False, window=4)
    .mean()
    )

    o

    df['Gradient'] = np.gradient(
    df['Yvalues']
    .rolling(center=False, window=4)
    .sum()
    )

    Puede leer más sobre las funciones de balanceo en este sitio web.

    Quiero que el logotipo aparezca animado cuando la barra de navegación se vuelva pegajosa

    https://weartuality.com/

    Verá la barra de navegación negra en ese sitio. No hay ningún logotipo en esa barra de navegación negra, pero cuando se vuelve pegajosa, aparece el logotipo. ¿Cómo puedo hacer esto usando html css javascript?


    Solución del problema

    Escuche el evento de desplazamiento y muestre/oculte el logotipo si se alcanza una cierta posición de desplazamiento Y.

    const logoElement = document.querySelector(".logo"); // <--- update this selector
    const checkLogo = () => {
    if (window.scrollY > 100) {// <-- your non-sticky nav's height here
    logoElement.style.setProperty("transform", "scale(1)");
    } else {
    logoElement.style.setProperty("transform", "scale(0)");
    }
    }
    checkLogo();
    window.addEventListener("scroll", checkLogo);

    CSS:

    .my-logo {
    transform: scale(0);
    transition: transform.3s;
    }

    ¿Cuál es la diferencia entre "=null" y "IS NULL"?

    ¿Cuál es la diferencia entre "=null" y "IS NULL"? ¿Cómo se usan de manera diferente?


    Solución del problema

    En una WHEREcláusula, column=nullnunca será cierto, no es válido usar nulo de esta manera, debe decir column IS NULLo column IS NOT NULL. Esto habla de la naturaleza especial de NULL, no es un valor para verificar la igualdad, es un valor desconocido, por lo que debe usar la sintaxis ISo.IS NOT

    Puede asignar algo el NULLvalor usando el =igual. Por ejemplo:UPDATE TableX SET Column=NULL...

    links:
    Wikipedia NUll (SQL)
    w3schools SQL NULL Values
    SQL Tutorial, see IS NULL Operator section

    Obtenga una fila en el marco de datos R por nombre

    Estoy empezando a aprender R y tengo algunos problemas para recuperar una fila en el marco de datos por nombre. A continuación se muestra la salida de la consola. ¿Por qué df[c("0610007C21Rik"),] da el mismo resultado que df[1,] y qué debo hacer para recuperar la fila por nombre? Gracias de antemano.

    > df
    # A tibble: 7,236 × 2
    gene means
    <chr> <dbl>
    1 0610007C21Rik 22.2
    2 0610007L01Rik 72.1
    3 0610007P08Rik 75.2
    4 0610007P14Rik 20.3
    5 0610009B22Rik 44.4
    6 0610009D07Rik 42.8
    7 0610009O20Rik 53.7
    8 0610010O12Rik 57.6
    9 0610011F06Rik 29.4
    10 0610030E20Rik 66.0
    # … with 7,226 more rows
    > df[1,]
    # A tibble: 1 × 2
    gene means
    <chr> <dbl>
    1 0610007C21Rik 22.2
    > df[c("0610007C21Rik"),]
    # A tibble: 1 × 2
    gene means
    <chr> <dbl>
    1 <NA> NA


    Solución del problema

    Técnicamente, los nombres de las filas son esos números a la izquierda, por lo que en este caso, indexar por número de fila es lo mismo que indexar por nombre de fila. Puede cambiar sus nombres de fila usando la rownames()función, pero probablemente no sea eso lo que quiera hacer. Lo que probablemente quiera hacer en este caso es encontrar todas las filas donde la columna de datos "gen" es igual al gen que desea. Por ejemplo:

    df[df$gene=="0610007C21Rik",]

    Si tienes varios genes diferentes, puedes hacer esto:

    df[df$gene == c("0610007C21Rik","0610007L01Rik"),]

    Si quisieras usar dplyrdesde tidyverse, también podrías hacer esto

    library(dplyr)
    df %>%
    filter(gene=="0610007C21Rik")

    Usando la recursividad para concatenar dos cadenas

    Mi objetivo es concatenar dos cadenas usando recursividad.

    La entrada sería str1 = ("cadena larga") str2 = ("sí, tanto tiempo")

    y la salida sería: 'lyoensg ssto rlionngg'

    Se supone que ambas cadenas tienen la misma longitud.

    Mi código a partir de ahora es:

    def concat_order(str1, str2):
    if len(str1) == 0:
    return 'complete'
    i = 0
    new_str = str1[i] + str2[i]
    i = i + 1
    return concat_order(str1[1:], str2[1:])
    return new_str
    print(concat_order("long string"', "yes so long"))

    Estoy seguro de que no estoy cerca, pero estoy luchando para que se repita.

    No tengo permitido usar bucles, pero puedo usar sentencias if


    Solución del problema

    No necesita pasar 'i' de esta manera: new_str = str1[i] + str2[i] ya que está devolviendo una cadena que excluye el carácter anterior: return concat_order(str1[1:], str2[1:]).

    Además, una función no puede tener dos declaraciones de retorno como esta:

     return concat_order(str1[1:], str2[1:])
    return new_str

    cualquier declaración después de la declaración de devolución no se ejecutará. Es por eso que escribimos declaraciones de devolución múltiples en alguna declaración condicional comoif else

    Modificó su programa para dar la respuesta correcta.

    def concat_order(str1, str2, new_str):
    if len(str1) == 0:
    return new_str
    new_str += str1[0] + str2[0]
    return concat_order(str1[1:], str2[1:], new_str)
    ans = ""
    print(concat_order("long string", "yes so long", ans))

    o puedes hacer esto:

    def concat_order(str1, str2):
    if len(str1) == 0:
    return ''

    return str1[0] + str2[0] + concat_order(str1[1:], str2[1:])
    print(concat_order("long string", "yes so long"))

    a medida que el flujo de control alcanza el caso base, ya tenemos lo que queríamos, así que no devuelva nada.

    ¿Cómo puedo extraer palabras de un archivo de una cadena?

    Así que he tratado de hacer que pueda extraer palabras en un archivo con cada palabra en inglés de letras aleatorias que me da un generador. Luego me gustaría agregar las palabras encontradas a una lista. Pero estoy teniendo un pequeño problema para obtener este resultado. ¿Usted me podría ayudar por favor?

    Esto es lo que he probado:

    import string
    import random
    def gen():
    b = []
    for i in range(100):
    a = random.choice(string.ascii_lowercase)
    b.append(a)


    with open('allEnglishWords.txt') as f:
    words = f.read().splitlines()
    joined = ''.join([str(elem) for elem in b])
    if joined in words:
    print(joined)
    f.close()

    print(joined)
    gen()

    si se pregunta dónde obtuve el archivo txt, se encuentra aquí http://www.gwicks.net/dictionaries.htm. Descargué el que dice INGLÉS - 84,000 palabras el archivo de texto


    Solución del problema

    import string
    import random
    b = []
    for i in range(100):
    a = random.choice(string.ascii_lowercase)
    b.append(a)
    b = ''.join(b)
    with open('engmix.txt', 'r') as f:
    words = [x.replace('\n', '') for x in f.readlines()]
    output=[]
    for word in words:
    if word in b:
    output.append(word)
    print(output)

    Producción:

    ['a', 'ad', 'am', 'an', 'ape', 'au', 'b', 'bi', 'bim', 'c', 'cb', 'd', 'e',
    'ed', 'em', 'eo', 'f', 'fa', 'fy', 'g', 'gam', 'gem', 'go', 'gov', 'h',
    'i', 'j', 'k', 'kg', 'ko', 'l', 'le', 'lei', 'm', 'mg', 'ml', 'mr', 'n',
    'no', 'o', 'om', 'os', 'p', 'pe', 'pea', 'pew', 'q', 'ql', 'r', 's', 'si',
    't', 'ta', 'tap', 'tape', 'te', 'u', 'uht', 'uk', 'v', 'w', 'wan', 'x', 'y',
    'yo', 'yom', 'z', 'zed']

    Indicadores Perl -pe, -pi, -p, -w, -d, -i, -t?

    He visto muchas formas de ejecutar código Perl o scripts, con diferentes banderas. Sin embargo, cuando trato de buscar en Google lo que significa cada bandera, obtengo principalmente resultados en sitios genéricos de Perl y no se encuentra información específica sobre las banderas o su uso allí.

    A continuación se muestran las banderas que encuentro con más frecuencia, y no tengo ni idea de lo que significan:


    • perl -pe

    • perl -pi

    • perl -p

    • perl -w

    • Perl -d

    • perl -i

    • perl -t


    Estaré muy agradecido si me dice qué significa cada uno de ellos y algunos casos de uso para ellos, o al menos me dice una forma de averiguar su significado.


    Solución del problema

    Sí, Google es notoriamente difícil para buscar puntuación y, desafortunadamente, Perl parece estar compuesto principalmente de puntuación:-)

    Los modificadores de la línea de comandos se detallan en perlrun (disponibles desde la línea de comandos llamando a perldoc perlrun). Entrando en las opciones brevemente, una por una:


    • -p: coloca un bucle de impresión alrededor de su comando para que actúe en cada línea de entrada estándar. Se usa principalmente para que Perl pueda vencer a Awk en términos de potencia Y simplicidad:-)

    • -n: coloca un bucle que no se imprime alrededor de su comando.

    • -e: Le permite proporcionar el programa como argumento en lugar de en un archivo. No desea tener que crear un archivo de secuencia de comandos para cada pequeña frase de Perl.

    • -i: modifica su archivo de entrada en el lugar (haciendo una copia de seguridad del original). Práctico para modificar archivos sin el {copy, delete-original, rename}proceso.

    • -w: Activa algunas advertencias. Cualquier buen codificador de Perl usará esto.

    • -d: se ejecuta bajo el depurador de Perl. Para depurar su código Perl, obviamente.

    • -t: trata ciertos códigos "contaminados" (dudosos) como advertencias (el modo de contaminación adecuado generará un error en este código dudoso). Se utiliza para reforzar la seguridad de Perl, especialmente cuando se ejecuta código para otros usuarios, como secuencias de comandos setuid o material web.

    viernes, 29 de abril de 2022

    Cómo insertar una fecha (en un formato diferente) procedente de un archivo CSV en MySQL

    Estoy insertando una fila proveniente de un archivo CSV en mi base de datos SQL. La columna de fecha de nacimiento que tengo en el archivo CSV tiene un formato de fecha como este 10/29/1992, parece que las Hojas de cálculo de Google que uso para crear el archivo CSV lo convierten a ese formato aunque lo introduzco así 1992-10-29, ya que este último formato es el formato en la base de datos SQL para las fechas.

    Así que intenté importar el archivo CSV a mi tabla en la base de datos, y no inserta la columna de fecha de nacimiento correctamente, inserta 0000-00-00y me da una advertencia Mysql date warning data truncated. Entonces parece que es imposible insertar en este formato10/29/1992

    ¿Cuál podría ser la mejor manera de resolver esto? ¿Sin manejar esto en el backend o en el lado del servidor? ¿Se puede manejar esto en la configuración de phpMyAdmin o en las hojas de Google para que no convierta la fecha que ingresé a un formato diferente?


    Solución del problema

    Acabo de descubrir que en Hojas de cálculo de Google, donde creo el archivo CSV, hay una configuración en la que puede formatear sus fechas de forma personalizada para una columna de fecha. Supongo que eso es todo lo que necesitaba para que coincida el formato de fecha del CSV con la tabla MySQL. El ajuste se puede encontrar enFormat-> Numbers-> Custom date and time

    Función asíncrona que consulta datos de Entity Framework

    Creé esta función y no estoy seguro de que sea la mejor manera de crear una función asíncrona que obtenga datos del marco de la entidad:

    public async Task<Employe?> EmployeToConnect(string login, string password)
    {
    Employe? employeResult = null;
    employeResult = await _context.Employes.FirstOrDefaultAsync
    (empl => empl.Login == login && empl.Password == password);
    return employeResult;
    }

    Hay una mejor manera de hacerlo? (¿Al ver que el tipo devuelto inspeccionado es Tarea<Empleado> y acabamos de devolver Empleado? )


    Solución del problema

    El tipo de retorno seguirá siendo un Task<Employee?>. Debido a la asyncpalabra clave, el resultado de EmployeToConnectestará envuelto en una tarea. También puede evitar la palabra clave asíncrona y devolver la tarea directamente, pero esto afectará el funcionamiento del manejo de excepciones (aunque significaría un beneficio de rendimiento muy pequeño).


    • Debido a la asyncpalabra clave, el resultado de EmployeToConnectse incluirá en su propia tarea nueva, que a su vez espera la tarea subyacente deFirstOrDefaultAsync

    • Sin la asyncpalabra clave, también podría devolver directamente la tarea FirstOrDefaultAsync(sin esperarla debido a que awaitsolo se puede usar en un método asíncrono)

    ¿Cómo configurar un proxy Scrapy con autorización?

    Mi configuración de middleware:

    from w3lib.http import basic_auth_header
    class CustomProxyMiddleware(object):
    def process_request(self, request, spider):
    request.meta['proxy'] = "111.11.11.111:1111"
    request.headers['Proxy - Authorization'] = basic_auth_header('login', 'password')

    Mi configuración:

    DOWNLOADER_MIDDLEWARES = {
    'my_project.middlewares.CustomProxyMiddleware': 350,
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 400,
    }

    Después de iniciar, aparece un error:

    scrapy.core.downloader.handlers.http11.TunnelError: Could not open CONNECT tunnel with proxy 217.29.53.106:51725 [{'status': 407, 'reason': b'Proxy Authentication Required'}]

    ¿Cuál es la razón, cómo solucionarlo? (Utilizo proxies https válidos)


    Solución del problema

    Intente cambiar el nombre del encabezado para que seaProxy-Authorization

    request.headers['Proxy-Authorization'] = basic_auth_header('login', 'password')

    ¿Por qué recibo este error? Los elementos en la iteración esperan tener directivas 'v-bind: key'

    mi código funciona perfectamente, pero todavía no logré averiguar por qué recibo este mensaje de error. Lo busqué y parece que me falta.

    Y otro problema que tengo es que cuando hace clic en el botón Agregar para agregar una cuecard (una pregunta), la opción Seleccionar en CueCard no muestra la opción "Seleccionar color", solo muestra la selección sin texto.
    ingrese la descripción de la imagen aquí


    new Vue({
    el: "#demo",
    data() {
    return {

    que: '',
    queS: [],
    inputCls: 'inputbox',
    bgColour: 'white',
    classes: ['Select Color', 'Blue', 'Red', 'Green','Orange','Gray','Magenta','Cyan'
    ],


    };
    },
    watch: {
    que(value) {
    if(value.length > 2) {
    this.showIcon = true;
    }
    else {
    this.showIcon = false;
    }
    }
    },
    methods: {
    addqueS() {
    this.inputCls = 'inputbox';
    this.queS.unshift(
    {
    task: this.que,
    completed: false
    }
    );
    this.que = '';
    setTimeout(() => {

    }, 1000);
    },

    deleteque(index) {
    this.queS.splice(index, 1);
    },
    },

    })

    @import url('https://fonts.googleapis.com/css?family=Poppins');
    a {
    text-decoration: none;
    }
    .pol,.section {
    padding: 1em;
    position: relative;

    }
    .container {
    width: 400px;
    margin: 40px auto;
    }
    .container h1 {
    font-size: 2em;
    text-align: center;
    text-transform: uppercase;
    padding: 1em;
    }
    .pol input {
    flex: 1;
    padding: 0 10px;
    width: 90%;
    height: 30px;
    outline: none;
    border-radius: 5px;
    border: 1px solid #00A2DF;

    }
    .pol.addBtn {

    border-radius: 10%;
    overflow: hidden;
    position: absolute;
    top: 50%;
    right: 15px;
    transform: translateY(-50%);
    }
    .pol.addBtn i {

    flex: 40px;
    height: 40px;
    text-align: center;
    line-height: 40px;
    color: #FFF;
    font-size: 1.5em;
    }
    .inputbox {
    transform: scaleX(0);
    transform-origin: right center;
    transition: all.2s ease-out;
    opacity: 0;
    }
    .extend {
    transform: scaleX(1);
    opacity: 1;
    }
    .queS {
    font-family: sans-serif;
    }
    .queS li {
    margin: 0 0 10px 0;
    padding: 10px;
    border: 1px solid silver;
    display: flex;
    justify-content: space-between;
    }
    .Blue {
    background: blue;
    }
    .Red {
    background: red;
    }
    .Green {
    background: green;
    }
    .Orange {
    background: orange;
    }
    .Gray {
    background: gray;
    }
    .Magenta {
    background: magenta;
    }
    .Cyan {
    background: cyan;
    }
    /* Add task transition */
    .list-enter-active,.list-leave-active {
    transition: all 1s;
    }
    .list-enter,.list-leave-to /*.list-leave-active below version 2.1.8 */ {
    opacity: 0;
    transform: translateY(-20px);
    }
    .list-move {
    transition: transform.2s;
    }

    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
    <link href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&display=swap" rel="stylesheet">
    <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet">
    <div class="container" id="demo">
    <h1>CueCards</h1>
    <div class="pol">
    <input type="text" v-model="que":class="inputCls" autofocus>
    <span class="addBtn">

    <button @click="inputCls='inputbox extend'"
    class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-full"
    v-if="!showIcon">Add Cue</button>
    <button @click="addqueS"
    class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-full"
    v-else>Add</button>

    </span>
    </div>
    <div class="section">
    <ul class="queS" v-if="queS.length > 0">
    <transition-group name="list">
    <li:class="item.bgColour" v-for="(item, index) in queS":key="index">
    <span>{{ item.task }}</span>


    <span>


    <button @click="deleteque(index)"
    class="bg-red-500 hover:bg-red-700 text-white font-bold py-2 px-4 rounded-full">Delete</button>
    <select class="bg-gray-500" v-model="item.bgColour">
    <option v-for="myClass in classes":value="myClass">{{ myClass }}

    </option>
    </select>
    </span>
    </li>


    </transition-group>
    </ul>
    <h3 v-else>no CueCards to be shown.</h3>
    </div>
    </div>

    Solución del problema

    agregar accesorio clave en esta etiqueta

     <option v-for="myClass in classes":value="myClass">{{ myClass }}

    </option>

    Cómo seleccionar un dispositivo de entrada específico con PyAudio

    Al grabar audio a través de PyAudio, ¿cómo se especifica el dispositivo de entrada exacto que se va a usar?

    Mi computadora tiene dos micrófonos, uno incorporado y otro a través de USB, y quiero grabar usando el micrófono USB. La clase Stream tiene un input_device_indexpara seleccionar el dispositivo, pero no está claro cómo se correlaciona este índice con los dispositivos. Por ejemplo, ¿cómo sé a qué dispositivo se refiere el índice 0? Si tuviera que adivinar, diría que 0 se refiere al dispositivo integrado mientras que 1 se refiere al dispositivo USB, pero me gustaría encontrar alguna forma programática de confirmar esto. En Linux, ¿hay alguna forma de obtener una lista de estos índices y los dispositivos a los que se refieren?


    Solución del problema

    puede usar get_device_info_by_host_api_device_index.

    Por ejemplo:

    import pyaudio
    p = pyaudio.PyAudio()
    info = p.get_host_api_info_by_index(0)
    numdevices = info.get('deviceCount')
    for i in range(0, numdevices):
    if (p.get_device_info_by_host_api_device_index(0, i).get('maxInputChannels')) > 0:
    print("Input Device id ", i, " - ", p.get_device_info_by_host_api_device_index(0, i).get('name'))

    No puedo deshacerme de los espacios en la entrada

    Estoy tratando de codificar un cuestionario de estados y capitales y casi lo tengo completo, sin embargo, cuando intento ingresar cualquiera de las mayúsculas donde tengo que poner 2 palabras (es decir, Little Rock o Oklahoma City) lo tiene como 2 entradas separadas y por mi vida no puedo conseguir que lo cuente como uno.

    Aquí está mi código hasta ahora:

    public static void main(String[] args) {
    Scanner input = new Scanner (System.in);

    ArrayList<String> States = new ArrayList<>();
    ArrayList<Object> Capitals = new ArrayList<>(States);


    String capitals [][] = {
    {"Alabama", "Montgomery"},
    {"Alaska", "Juneau"},
    {"Arizona", "Phoenix"},
    {"Arkansas", "LittleRock"},
    {"California", "Sacramento"},
    {"Colorado", "Denver"},
    {"Connecticut", "Hartford"},
    {"Delaware", "Dover"},
    {"Florida", "Tallahasse"},
    {"Georgia", "Atlanta"},
    {"Hawaii", "Honolulu"},
    {"Idaho", "Boise"},
    {"Illinois", "Springfield"},
    {"Indiana", "Indianapolis"},
    {"Iowa", "DesMoines"},
    {"Kansas", "Topeka"},
    {"Kentucky", "Frankfort"},
    {"Louisiana", "BatonRouge"},
    {"Maine", "Augusta"},
    {"Maryland", "Annapolis"},
    {"Massachusettes", "Boston"},
    {"Michigan", "Lansing"},
    {"Minnesota", "Saint Paul"},
    {"Mississippi", "Jackson"},
    {"Missouri", "JeffersonCity"},
    {"Montana", "Helena"},
    {"Nebraska", "Lincoln"},
    {"Nevada", "CarsonCity"},
    {"New Hampshire", "Concord"},
    {"New Jersey", "Trenton"},
    {"New York", "Albany"},
    {"New Mexico", "SantaFe"},
    {"North Carolina", "Raleigh"},
    {"North Dakota", "Bismark"},
    {"Ohio", "Columbus"},
    {"Oklahoma", "OklahomaCity"},
    {"Oregon", "Salem"},
    {"Pennslyvania", "Harrisburg"},
    {"Rhode Island", "Providence"},
    {"South Carolina", "Columbia"},
    {"South Dakota", "Pierre"},
    {"Tennessee", "Nashville"},
    {"Texas", "Austin"},
    {"Utah", "Salt Lake City"},
    {"Vermont", "Montpelier"},
    {"Virginia", "Richmond"},
    {"Washington", "Olympia"},
    {"West Virginia", "Charleston"},
    {"Wisconsin", "Madison"},
    {"Wyoming", "Cheyenne"}
    };


    for(int i = 0; i<=49; i++){
    States.add(capitals[i][0]);
    Capitals.add(capitals[i][1]);
    }


    for(int i = 0; i<49; i++){
    String guess;
    int index = (int)((Math.random())*(49 - i));
    System.out.println("What is the capital of: " + States.get(index));
    States.remove(index);

    guess = input.next();

    if(Capitals.get(index).equals(guess)){
    System.out.println("Correct");
    Capitals.remove(index);
    }else{ System.out.println("Incorrect");
    Capitals.remove(index);
    }
    }


    }


    Solución del problema

    Para profundizar en lo que dice @Gus aquí "Puede cambiar el patrón delimitador, o tal vez usar nextLine ()",

    Leer tokens individuales puede ser su perdición. "I like pie" se lee separado como "I" "like" "pie" con line.next() pero junto como "I like pie" con line.nextLine()

    EDITAR PARA MÁS DETALLES
    Para traer una línea de ejemplo en:

    for(int i = 0; i<=49; i++) // {"Utah", "Salt Lake City"},
    {
    States.add(capitals[i][0]); // add Utah
    Capitals.add(capitals[i][1]); // add Salt
    }

    En este índice, capitales[44][], el tamaño se establece en 4 debido a cada palabra leída.

    ¿Cómo puedo hacer datos dinámicos?

    from PySide6.QtWidgets 
    import QApplication,QLabel, QWidget
    from PySide6
    import QtCore
    import psutil
    class MainApp(QWidget):
    def __init__(self):
    super(MainApp,self).__init__()
    self.resize(1050, 950)
    self.setWindowTitle('Sistem Monitör')
    cpul = QLabel('İşlemci', self)
    cpul.move(20, 80)
    cpuusagel = QLabel('Yük Ortalaması', self)
    cpuusagel.move(20, 120)
    self.cpuyük = QLabel("*", self)
    self.cpuyük.move(200, 120)
    self.cpuyük.resize(800, 30)
    self.timer = QtCore.QTimer(self)
    self.timer.timeout.connect(self.refresh)
    self.timer.start(1000)
    def refresh(self):
    self.cpuyük.setText(str(psutil.getloadavg()))
    def main():
    app = QApplication()
    w = MainApp()
    w.show()
    app.exec_()
    if __name__ == '__main__':
    main()

    Mi código funciona pero mis datos no son dinámicos. ¿Cómo puedo crear datos dinámicos en Qt porque uso set tex? Soy nuevo en Python, cada idea es importante para mí. Sé que también puede suceder con el matraz...

    ¿Cómo puedo obtener el valor sin este * objeto? No tiene que ser manual -


    Solución del problema

    Tu pregunta es muy vaga, pero creo que sé lo que quieres decir. Desea poder cambiar el valor * en QLable después de cada actualización, creo. Si ese es el caso, simplemente cree una clase global llamada data o label_string o algo por el estilo y luego guárdela como una cadena vacía o si se supone que el valor predeterminado es *, entonces hágalo.

    class MainApp(QWidget):
    data = "*" //New variable for string what you want in the label
    def __init__(self):
    super(MainApp,self).__init__()
    self.resize(1050, 950)
    self.setWindowTitle('Sistem Monitör')
    cpul = QLabel('İşlemci', self)
    cpul.move(20, 80)
    cpuusagel = QLabel('Yük Ortalaması', self)
    cpuusagel.move(20, 120)
    self.cpuyük = QLabel(data, self) //Changed this so it represents the data variable and not *
    self.cpuyük.move(200, 120)
    self.cpuyük.resize(800, 30)
    self.timer = QtCore.QTimer(self)
    self.timer.timeout.connect(self.refresh)
    self.timer.start(1000)
    def refresh(self):
    self.cpuyük.setText(str(psutil.getloadavg()))

    Con esta variable puede actualizar QLabel como quiera para que sea "dinámico". Espero que te ayude de nuevo, no estoy del todo seguro de lo que estás preguntando.

    ¿Encuentre la suma máxima de elementos eliminados de la cabeza o la cola?

    Se le da una pila de N enteros de manera que el primer elemento representa la parte superior de la pila y el último elemento representa la parte inferior de la pila. Debe extraer al menos un elemento de la pila. En cualquier momento, puede convertir la pila en una cola. La parte inferior de la pila representa el frente de la cola. No puede volver a convertir la cola en una pila. Su tarea es eliminar exactamente K elementos de modo que se maximice la suma de los K elementos eliminados. Imprime la máxima suma posible M de los K elementos eliminados

    Entrada: N=10, K=4
    pila = [10 9 1 2 3 4 5 6 7 8]

    Salida: 34

    Explicación:
    saca dos elementos de la pila. es decir, {10,9}
    Luego, convierta la pila en cola y elimine los primeros 2 elementos de la cola. es decir, {8,7}.
    La suma máxima posible es 10+9+8+7 = 34

    Estaba pensando en resolverlo con algo codicioso, con un código como el siguiente:

    stk = [10, 9, 1, 30, 3, 4, 5, 100, 1, 8]
    n = 10
    k = 4
    removed = 0
    top = 0
    sum = 0
    bottom = len(stk)-1
    while removed < k:
    if stk[top] >= stk[bottom]:
    sum += stk[top]
    top += 1

    else:
    sum += stk[bottom]
    bottom -= 1
    removed += 1
    print(sum)

    en un caso de prueba normal (dado uno) funcionará, pero fallará en muchos otros escenarios como:

    [10, 9, 1, 30, 3, 4, 5, 100, 1, 8]

    ¿Alguna sugerencia sobre cómo mejorar esto?


    Solución del problema

    La estructura de datos le da la opción de seleccionar 1,...,n valores desde la parte superior de la estructura y luego m elementos desde la parte inferior de la estructura donde K = m+n. Puede encontrar el máximo si comienza sumando los primeros elementos K de la estructura y luego avanza hacia atrás reemplazando el elemento n con el primer elemento desde atrás. Trabajando hacia atrás para llegar a un solo elemento de pila. Mantenga un registro del máximo a lo largo del camino.

    En pitón:

    lst = [10, 9, 1, 30, 3, 4, 5, 100, 1, 8]
    K = 4
    sum_ = sum(lst[0:K])
    max_so_far = sum_
    for i in range(K-1):
    sum_ = sum_ - lst[K-1-i] + lst[-i-1]
    max_so_far = max(sum_, max_so_far)
    print(max_so_far)

    El tiempo de ejecución es O(n).

    Los comandos de barra discord.py están dando un error prohibido 403

    Estoy tratando de hacer un bot de discordia usando python, y me encontré con un problema al agregar comandos de barra oblicua.

    Cada vez que ejecuto el bot, después de unos segundos aparece un error. La única información sobre este error que pude encontrar fue el desbordamiento de la pila, pero ninguna de las respuestas solucionó el problema.

    Cualquier/toda ayuda es muy apreciada, ¡gracias!

    Código principal:

    import discord
    from discord.ext import commands
    intents = discord.Intents.all()
    bot = commands.Bot(command_prefix="!", intents = intents)
    class myClient(discord.Client):
    @bot.event
    async def on_ready():
    print(f"Bot is now online.")
    @bot.event
    async def on_message(message):
    await bot.process_commands(message)
    @bot.slash_command(
    description="Test.",
    guild_ids=[redacted])
    async def test(self, ctx: discord.ApplicationContext):
    await ctx.respond("Test")
    client = myClient()
    bot.run(redacted)

    seguimiento de pila:

    Ignoring exception in on_connect
    Traceback (most recent call last):
    File "C:\Users\ilove\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\client.py", line 382, in _run_event
    await coro(*args, **kwargs)
    File "C:\Users\ilove\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\bot.py", line 1025, in on_connect
    await self.sync_commands()
    File "C:\Users\ilove\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\bot.py", line 558, in sync_commands
    registered_guild_commands[guild_id] = await self.register_commands(
    File "C:\Users\ilove\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\bot.py", line 471, in register_commands
    registered = await register("bulk", data)
    File "C:\Users\ilove\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\http.py", line 351, in request
    raise Forbidden(response, data)
    discord.errors.Forbidden: 403 Forbidden (error code: 50001): Missing Access

    Le he dado al bot todos los permisos que necesita:

    permisos


    Solución del problema

    Esto es lo que hice para arreglar esto:

    Antes de hacer nada a continuación, asegúrese de haber seleccionado el guild_id correcto en el decorador slash_command. Si esto no funciona, intente esto:

  • Expulsa al bot del servidor en el que se encuentra actualmente.


  • Vaya a: https://discord.com/developers/applications/, diríjase a su bot preferido, luego a "0Auth2" y finalmente a "Url Generator".


  • En los ámbitos, seleccione "bot" Y "applications.commands", luego, en los permisos del bot, puede seleccionar todos los permisos para su bot.


  • Deje que el bot vuelva a unirse al servidor correcto e inicie su Bot, ahora ya no debería mostrarle un mensaje de error.


  • Referencia (sé que es Discord.js, pero es un problema similar)

    Esto solucionó mi mensaje de error, espero que ayude.

    Consulta SQL, lista de AMBOS valores?

    Estoy bastante seguro de que esto se puede responder con bastante rapidez, pero parece que no puedo encontrar una solución en línea. Podría agregar también (si aún no lo ha descubierto) que soy un principiante completo.

    La siguiente consulta enumera todas las películas protagonizadas por Johnny Depp y todas las películas protagonizadas por Helena Bonham Carter. ¿Cómo enumero todas las películas protagonizadas por AMBOS Johnny y Helena?

    ¡Gracias!

    SELECT title FROM movies
    JOIN stars
    ON stars.movie_id = movies.id
    JOIN people
    ON people.id = stars.person_id
    WHERE people.name IN ("Johnny Depp", "Helena Bonham Carter")
    ORDER BY title;


    Solución del problema

    Vea si esto funciona para usted, agregue el título y filtre donde solo hay 2, asumiendo que una persona solo puede protagonizar una película una vez.

    select m.title 
    from movies m
    join stars s on s.movie_id = m.id
    join people p on p.id = s.person_id
    where p.name in ('Johnny Depp', 'Helena Bonham Carter')
    group by m.title
    having Count(*) = 2
    order by m.title;

    También tenga en cuenta que el uso de alias mejora la legibilidad y los literales de cadena deben estar entre comillas 'simples', las comillas dobles están reservadas para delimitadores en la mayoría de las bases de datos.

    El complemento de Chrome edita la página.

    Tengo un problema, quiero escribir un complemento que edite la página y puedo escribir un complemento, pero no sé cómo hacer un complemento que edite la página (javascript)


    Solución del problema

    ¿Por qué reinventar la rueda? Simplemente use una extensión que inyecte código.

    Por ejemplo: https://chrome.google.com/webstore/detail/page-manipulator/mdhellggnoabbnnchkeniomkpghbekko?hl=en

    'react-scripts' no se reconoce como un comando interno o externo

    Tengo un proyecto maven, dentro del cual se clona el proyecto JavaScript como un submódulo git. Así que la estructura del directorio se ve comomavenapp/src/main/javascript/[npm project files]

    Dentro de mi paquete.json, la prueba se ve así:

    "test": "react-scripts test --env=jsdom",

    pero cuando intento correr npm testme dice

    'react-scripts' no se reconoce como un comando interno o externo,

    Curiosamente, cuando clono el proyecto javascript de forma independiente, no recibo este error. He intentado volver a ejecutar npm install.

    Versión de NPM: 5.5.1
    Versión de Node.js: 9.3.0


    Solución del problema

    Es un error sobre el archivo de scripts de reacción que falta en su node_modules/directorio en el momento de la instalación.

    Verifique que su dependencia de script de reacción esté disponible o no en package.json.

    Si no está disponible, agréguelo manualmente a través de:

    npm install react-scripts --save

    ¿Existen buenos conjuntos de pruebas automatizadas para Perl? [cerrado]

    Cerrado. Esta pregunta no cumple con las pautas de desbordamiento de pila. Actualmente no está aceptando respuestas.


    Solución del problema

    Realmente depende de lo que esté tratando de hacer, pero aquí hay algunos antecedentes para gran parte de esto.

    Primero, generalmente escribiría sus programas de prueba con Test::More o Test::Simple como el programa de prueba principal:

    use Test::More tests => 2;
    is 3, 3, 'basic equality should work';
    ok!0, '... and zero should be false';

    Internamente, se llama a Test::Builder para generar esos resultados de prueba como TAP ( Test Anything Protocol ). Test::Harness (un envoltorio delgado alrededor de TAP::Harness), lee e interpreta el TAP, diciéndole si sus pruebas pasaron o fallaron. La herramienta "probar" mencionada anteriormente se incluye con Test::Harness, así que digamos que guarde lo anterior en el directorio t/ (el directorio de prueba estándar de Perl) como "numbers.t", luego puede ejecutarlo con este comando:

    prove --verbose t/numbers.t

    O para ejecutar todas las pruebas en ese directorio (recursivamente, asumiendo que desea descender a los subdirectorios):

    prove --verbose -r t/

    (--verbose, por supuesto, es opcional).

    Como nota al margen, no use TestUnit. Muchas personas lo recomiendan, pero se abandonó hace mucho tiempo y no se integra con las herramientas de prueba modernas.

    Método principal no encontrado en BaseClass [duplicado]

    Esta pregunta ya tiene respuestas aquí:


    Solución del problema

    Su código no tiene un método principal, que es lo que el compilador está buscando para compilar.

    Anidar cada elemento de una matriz

    Necesito que mi matriz
    const arr = [a, b, c, d, e, f] esté anidada, más específicamente, que cada elemento sea así. Lo que significa que mi efecto deseado es que la matriz se vea asíarr = [[a], [b], [c], [d], [e], [f]]

    Para lo contrario de lo que quiero lograr, podría usar arr.flat(), pero ese no es el caso aquí. Así que estoy buscando respuestas.


    Solución del problema

    Desea realizar algo para cada elemento de una matriz (en particular, envolverlo dentro de otra matriz). Para realizar una operación en cada elemento de una matriz, puede usar Array.map().

    const arr = [1, 2, 3];
    const newArr = arr.map(item => [item]);
    // newArr is [[1], [2], [3]]

    ¿El elemento de imagen HTML5 no parece ser compatible con Chrome 52? Srcset no funciona

    Acabo de comenzar una nueva página web, por lo que no hay mucho marcado para repasar.

    Dejo esto abajo:

    <picture>
    <source media="(min-width: 1000px)"
    srcset="images/largeme.jpg">
    <source media="(min-width: 465px)"
    srcset="images/medme.jpg">
    <img src="images/smallme.jpg"alt="hero profile">
    </picture>

    y el valor predeterminado es la imagen medme.jpg sin importar el ancho de la ventana. Dejo esto:

    <picture>
    <source media="(min-width: 1000px)"
    srcset="images/largeme.jpg">
    <source media="(min-width: 465px)"
    srcset="images/medme.jpg">
    <!-- <img src="images/smallme.jpg"alt="hero profile">-->
    </picture>

    comentando la etiqueta de respaldo img y no muestra nada.

    Estoy ejecutando Chrome 52, que debería ser compatible con el elemento de imagen. Pero parece estar actuando como si no lo apoyara o algo así. ¿Qué estoy haciendo mal aquí?


    Solución del problema

    Suena tonto, pero ¿has probado a revertir el orden? Por alguna razón, hacer esto hizo que funcionara para mí.

    Entonces, en lugar de:

    <picture>
    <source media="(min-width: 1000px)"
    srcset="images/largeme.jpg">
    <source media="(min-width: 465px)"
    srcset="images/medme.jpg">
    <img src="images/smallme.jpg"alt="hero profile">
    </picture>

    prueba esto:

    <picture>
    <source media="(min-width: 465px)"
    srcset="images/medme.jpg">
    <source media="(min-width: 1000px)"
    srcset="images/largeme.jpg">
    <img src="images/smallme.jpg"alt="hero profile">
    </picture>

    Error de segmentación al pasar un arreglo 2D a otra función e intentar acceder a sus elementos

    Estoy tratando de asignar una matriz 2D dentro de AllocateMatrix y devolverla, pero cuando uso la matriz 2D devuelta, aparece un error de segmento. Mi pregunta es, ¿por qué falla la segmentación y cómo lo soluciono para que pueda pasarlo y usarlo en otras funciones? fileTest es solo un archivo txt con la siguiente fila, la siguiente línea, la columna, la siguiente línea y luego la matriz con un espacio en cada columna y una nueva línea para cada fila.

    class Matrix 
    {
    public:
    Matrix();
    ~Matrix();
    double** AllocateMatrix(unsigned rows, unsigned columns);
    Matrix(std::string filePath);
    private:
    unsigned rows_;
    unsigned columns_;
    };
    Matrix::Matrix(std::string filePath)
    {
    std::ifstream matrixFile;
    try
    {
    matrixFile.open(filePath);
    if(matrixFile.fail())
    throw "Failed to open file.";
    std::cout << "Starting read file...\n";
    matrixFile >> rows_;
    std::cout << "rows: " << rows_ << "\n";
    if(rows_ < 0)
    throw "Number of rows cannot be negative.";
    matrixFile >> columns_;
    std::cout << "columns: " << columns_ << "\n";
    if(columns_ < 0)
    throw "Number of columns cannot be negative.";
    double** array2D;
    array2D = AllocateMatrix(rows_, columns_);
    for(uint64_t i = 0; i < rows_; i++)
    {
    for(uint64_t j = 0; j < columns_; j++)
    {
    std::cout << i << " " << j << " " << array2D[i][j] << "\n"; // seg fault here
    }
    }
    std::cout << "Finished file read" << std::endl;
    matrixFile.close();
    }
    catch(const char* message)
    {
    std::cerr << message << std::endl;
    rows_ = 0;
    columns_ = 0;
    return;
    }
    }
    double** Matrix::AllocateMatrix(unsigned rows, unsigned columns)
    {
    try
    {
    double** matrix = new double *[rows];
    for(unsigned i = 1; i <= rows; i++)
    {
    matrix[i] = new double[columns];
    }
    for(unsigned i = 1; i <= rows; i++)
    {
    for(unsigned j = 1; j <= columns; j++)
    {
    matrix[i][j] = 0;
    std::cout << "i: " << i << " j: " << j << " value: " << matrix[i][j] << "\n";
    }
    }
    matrix = result_;
    std::cout << "Returning 2D Array\n";
    return matrix;
    }
    catch(const std::bad_alloc&) {
    std::cerr << "Bad allocation." << std::endl;
    return nullptr;
    }
    }
    int main()
    {
    Matrix matrixOne("fileTest.txt");
    return 0;
    }


    Solución del problema

    intente no usar punteros de estilo C, no use punteros de estilo C. su problema es un error de usuario. use std::vector en lugar de usar el doble puntero porque es un gran problema, si lo ha usado, haga esto: double* array2d[array_sz]; en cuanto a no memleak.

    Google Colab: repetir la desconexión del tiempo de ejecución

    Intenté buscar a través de Stack Overflow para este problema y no pude encontrar ninguna solución a mi situación específica, que es la siguiente (por cierto, también soy un novato de Python):

    **Estoy usando Google Colab (Gratis).

    Estoy tratando de visualizar algunos datos (temperatura global) en un gráfico radial, siguiendo un tutorial que encontré en línea. Todo parecía ir decentemente hasta que se produjo la animación final; inicialmente todo estaba bien, con la excepción de esta advertencia:

    El tamaño de la animación alcanzó los 22083561 bytes, superando el límite de 20971520.0. Si está seguro de que desea incrustar una animación más grande, establezca el parámetro rc animation.embed_limit en un valor mayor (en MB). Este y otros fotogramas se eliminarán.

    Busqué este bit/error de información y descubrí que el siguiente código aumentaría el límite:

    from matplotlib import rcParams
    rcParams['animation.embed_limit'] = 2**128

    A partir de ahí, mis sesiones se desconectaron alrededor de 1 minuto después de ejecutar el código de salida apropiado. Se necesita reiniciar el tiempo de ejecución y establecer animation.embed_limit en 20 para que pueda volver a mi estado semi-exitoso de generar una animación incompleta.

    Cualquier ayuda con esto sería muy apreciada.

    El código es el siguiente

    # Drive Mounting
    from google.colab import drive
    drive.mount('/content/drive')
    # Library Imports
    import pandas as pd
    from matplotlib import pyplot as plt
    from matplotlib.animation import FuncAnimation
    from matplotlib import rc
    rc('animation', html='jshtml')
    from matplotlib import rcParams
    rcParams['animation.embed_limit'] = 2**128
    import numpy as np
    # Raw Data Import
    hadcrut = pd.read_csv(
    '/content/drive/MyDrive/HadCRUT.4.6.0.0.monthly_ns_avg.txt',
    delim_whitespace=True,
    usecols=[0, 1],
    header=None)
    # Data Prep
    hadcrut['year'] = hadcrut.iloc[:, 0].apply(lambda x: x.split("/")[0]).astype(int)
    hadcrut['month'] = hadcrut.iloc[:, 0].apply(lambda x: x.split("/")[1]).astype(int)
    hadcrut = hadcrut.rename(columns={1: 'value'})
    hadcrut = hadcrut.iloc[:, 1:]
    hadcrut = hadcrut.drop(hadcrut[hadcrut['year'] == 2018].index)
    hadcrut = hadcrut.set_index(['year', 'month'])
    hadcrut -= hadcrut.loc[1850:1900].mean()
    hadcrut = hadcrut.reset_index()
    years = hadcrut['year'].unique()
    fig = plt.figure(figsize=(14,14))
    ax1 = plt.subplot(111, projection='polar')
    ax1.axes.get_yaxis().set_ticklabels([])
    ax1.axes.get_xaxis().set_ticklabels([])
    fig.set_facecolor('#323331')
    full_circle_thetas = np.linspace(0, 2*np.pi, 1000)
    blue_line_one_radii = [1.0]*1000
    red_line_one_radii = [2.5]*1000
    red_line_two_radii = [3.0]*1000
    ax1.plot(full_circle_thetas, blue_line_one_radii, c='blue')
    ax1.plot(full_circle_thetas, red_line_one_radii, c='red')
    ax1.plot(full_circle_thetas, red_line_two_radii, c='red')
    ax1.text(np.pi/2, 1.0, '0.0 C', color='blue', ha='center', fontdict={'fontsize': 20})
    ax1.text(np.pi/2, 2.5, '1.5 C', color='red', ha='center', fontdict={'fontsize': 20})
    ax1.text(np.pi/2, 3.0, '2.0 C', color='red', ha='center', fontdict={'fontsize': 20})
    def update(i):
    year = years[i]
    r = hadcrut[hadcrut['year'] == year]['value'] + 1
    theta = np.linspace(0, 2*np.pi, 12)
    ax1.grid(False)
    ax1.set_title('Global Temperature Change (1850-2017)', color='white', fontdict={'fontsize': 20})
    ax1.set_ylim(0, 3.25)
    ax1.set_facecolor('#000100')
    ax1.plot(theta, r, c=plt.cm.viridis(i*2))
    return ax1
    anim = FuncAnimation(fig, update, frames=len(years), interval = 50, repeat_delay = 1000)
    anim

    Y aquí está el registro de tiempo de ejecución desde el reinicio hasta la desconexión

    "16 de abril de 2022, 16:18:38", ADVERTENCIA, futuro: "16 de abril de 2022, 4:18:38 p.:18:38 p. m.", INFORMACIÓN, Iniciando almacenamiento en búfer para d5ff7869-edb3-4e31-a38e-20e2c655f7d2: c7df80dc0b1b4ae7959d1ea88b633edb "16 de abril de 2022, 4:16:35 p. m.", INFORMACIÓN, Adaptación al protocolo v5.1 para kernel d5ff3869-edb -4e31-a38e-20e2c655f7d2 "16 de abril de 2022, 4:16:33 p. Use Control-C para detener este servidor y cerrar todos los núcleos (dos veces para omitir la confirmación). "16 de abril de 2022, 4:13:35 p. 16 de abril de 2022, 4:13:35 p. m.", INFO, 0 núcleos activos "16 de abril de 2022, 4:13: 35 p. m.", ADVERTENCIA, /etc/jupyter/jupyter_notebook_config.json "16 de abril de 2022, 4:13:35 p. m.", ADVERTENCIA, /etc/jupyter/jupyter_notebook_config.json "16 de abril de 2022, 4:13:35 p. m. ", INFORMACIÓN, Escribiendo el secreto de la cookie del servidor de notebook en /root/.local/share/jupyter/runtime/notebook_cookie_secret "16 de abril de 2022, 4:13:35 p. m.", ADVERTENCIA, Advertencia futura) "16 de abril de 2022, 4:13:35 PM",ADVERTENCIA,"/usr/local/lib/python3.7/dist-packages/traitlets/traitlets.py:2205: FutureWarning: La compatibilidad con comillas adicionales alrededor de cadenas está obsoleta en traitlets 5.0. Puede usar '/content' en lugar de '""/content""' si necesita rasgos >=5". "16 de abril de 2022, 4:13:35 p. 4:13:35 p. m.", ADVERTENCIA,"/usr/local/lib/python3. 7/dist-packages/traitlets/traitlets.py:2205: FutureWarning: La compatibilidad con comillas adicionales alrededor de cadenas está obsoleta en traitlets 5.0. Puede usar '/' en lugar de '""/""' si necesita rasgos >=5." "16 de abril de 2022, 4:13:35 p. m.", ADVERTENCIA, Advertencia futura) "16 de abril de 2022, 4: 13:35 PM",ADVERTENCIA,"/usr/local/lib/python3.7/dist-packages/traitlets/traitlets.py:2205: FutureWarning: La compatibilidad con comillas adicionales alrededor de cadenas está obsoleta en traitlets 5.0. Puede usar '172.28.0.12' en lugar de '""172.28.0.12""' si necesita rasgos >=5". "16 de abril de 2022, 4:13:35 p. /root/.local/share/jupyter/runtime/notebook_cookie_secret "16 de abril de 2022, 4:13:35 p. m.", ADVERTENCIA, Advertencia futura) "16 de abril de 2022, 4:13:35 PM",ADVERTENCIA,"/usr/local/lib/python3.7/dist-packages/traitlets/traitlets.py:2205: FutureWarning: La compatibilidad con comillas adicionales alrededor de cadenas está obsoleta en traitlets 5.0. Puede usar '/contenido' en lugar de '""/contenido""' si necesita rasgos >=5". "16 de abril de 2022, 4:13:35 p. 4:13:35 PM",ADVERTENCIA,"/usr/local/lib/python3.7/dist-packages/traitlets/traitlets.py:2205: FutureWarning: La compatibilidad con comillas adicionales alrededor de cadenas está obsoleta en traitlets 5.0. Puede usar '/' en lugar de '""/""' si necesita rasgos >=5." "16 de abril de 2022, 4:13:35 p. m.", ADVERTENCIA, Advertencia futura) "16 de abril de 2022, 4: 13:35 p. m.", ADVERTENCIA,"/usr/local/lib/python3.7/dist-packages/traitlets/traitlets. py:2205: FutureWarning: La compatibilidad con comillas adicionales alrededor de las cadenas está obsoleta en traitlets 5.0. Puede usar '172.28.0.2' en lugar de '""172.28.0.2""' si necesita rasgos >=5".

    Cualquier ayuda sería muy apreciada.


    Solución del problema

    Con la ayuda de @r-beginners, pude resolver un poco este problema al reducir el tamaño de la imagen (fig) a aproximadamente (8,8), lo que me permitió renderizarla completamente sin errores.

    Previamente:

    fig = plt.figure(figsize=(14,14))

    Después:

    fig = plt.figure(figsize=(8,8))

    Honestamente, dado lo simple que era el gráfico, no pensé que el proceso hubiera topado con una pared de recursos. Sin embargo, podría haber mucho más involucrado de lo que pensaba en el cálculo y la creación del gráfico, y podría ser mi ingenuidad sostenida.

    Aún así, ¡espero que esto ayude a alguien más!

    tl; dr: el tamaño del archivo de salida es demasiado grande, suponga un límite con Google Colab (versión gratuita), reduzca el tamaño del archivo de salida, éxito

    Envío de mensajes Midi Sysex en C#

    ¡Comenzaré admitiendo que soy algo nuevo en C#, ya que he estado atascado en VB6 durante muchos años!

    Estoy tratando de descubrir cómo hacer una aplicación Winform simple que envíe un mensaje SysEx MIDI cuando hago clic en un botón para que el botón 1 envíe:

    F0 7F 22 02 50 01 31 00 31 00 31 F7

    El botón 2 envía

    F0 7F 22 02 50 01 32 00 31 00 31 F7

    y así...

    Parece que puedo encontrar mucha información sobre el envío de notas y datos de instrumentos, pero nada realmente sobre sysex. He jugado con la referencia de Sanford que parecía acercarme, pero aún no hay nada sobre el uso de Sysex.

    Gracias de antemano por cualquier sugerencia


    Solución del problema

    Hay varias bibliotecas MIDI disponibles y la mayoría admite SysEx de una forma u otra. Principalmente he usado el managed-midipaquete, aunque antes he usado el paquete Sanford.

    Al menos en midi administrado, enviar un mensaje SysEx es tan simple como obtener un IMidiOutput(generalmente de un MidiAccessManager) y luego llamar al Sendmétodo. Por ejemplo:

    // You'd do this part just once, of course...
    var accessManager = MidiAccessManager.Default;
    var portId = access.Outputs.First().Id;
    var port = await access.OpenOutputAsync(portId);
    // You'd port this part in your button click handler.
    // The data is copied from the question, so I'm assuming it's okay...
    var message = new byte[] {
    0xF0, 0x7F, 0x22, 0x02, 0x50, 0x01,
    0x31, 0x00, 0x31, 0x00, 0x31, 0xF7 };
    port.Send(message, 0, message.Length, timestamp: 0);

    Reaccionar: cómo pasar el estado a otro componente

    Estoy tratando de averiguar cómo notificar a otro componente sobre un cambio de estado. Digamos que tengo 3 componentes: App.jsx, Header.jsx y SidebarPush.jsx y todo lo que intento hacer es alternar una clase con un onClick.

    Entonces, el archivo Header.jsx tendrá 2 botones cuando se haga clic en cambiará los estados a verdadero o falso. Los otros 2 componentes App.jsx y Header.jsx deberán conocer estos cambios de estado para que puedan alternar una clase cada vez que cambien esos estados.

    Aplicación.jsx

    import React from 'react';
    import Header from 'Header';
    import classNames from "classnames";
    import SidebarPush from 'SidebarPush';
    import PageWrapper from 'PageWrapper';
    var MainWrapper = React.createClass({
    render: function() {
    return (
    <div className={classNames({ 'wrapper': false, 'SidebarPush-collapsed':!this.state.sidbarPushCollapsed })}>
    <Header/>
    <SidebarPush/>
    <PageWrapper>
    {this.props.children}
    </PageWrapper>
    </div>
    );
    }
    });
    module.exports = MainWrapper;

    Encabezado.jsx

    import React from 'react';
    import ReactDom from 'react-dom';
    class Header extends React.Component {
    constructor() {
    super();
    this.state = {
    sidbarPushCollapsed: false,
    profileCollapsed: false
    };
    this.handleClick = this.handleClick.bind(this);
    }
    handleClick() {
    this.setState({
    sidbarPushCollapsed:!this.state.sidbarPushCollapsed,
    profileCollapsed:!this.state.profileCollapsed
    });
    }
    render() {
    return (
    <header id="header">
    <ul>
    <li>
    <button type="button" id="sidbarPush" onClick={this.handleClick} profile={this.state.profileCollapsed}>
    <i className="fa fa-bars"></i>
    </button>
    </li>
    <li>
    <button type="button" id="profile" onClick={this.handleClick}>
    <i className="icon-user"></i>
    </button>
    </li>
    </ul>
    <ul>
    <li>
    <button id="sidbarOverlay" onClick={this.handleClick}>
    <i className="fa fa-indent"></i>
    </button>
    </li>
    </ul>
    </header>
    );
    }
    };
    module.exports = Header;

    SidebarPush.jsx

    import React from 'react';
    import ReactDom from 'react-dom';
    import classNames from "classnames";
    class SidebarPush extends React.Component {
    render() {
    return (
    <aside className="sidebarPush">
    <div className={classNames({ 'sidebar-profile': true, 'hidden':!this.state.pagesCollapsed })}>
    ....
    </div>
    <nav className="sidebarNav">
    ....
    </nav>
    </aside>
    );
    }
    }
    export default SidebarPush;


    Solución del problema

    Mueva todo su estado y su handleClickfunción de Headera su MainWrappercomponente.

    Luego pase valores como accesorios a todos los componentes que necesitan compartir esta funcionalidad.

    class MainWrapper extends React.Component {
    constructor() {
    super();
    this.state = {
    sidbarPushCollapsed: false,
    profileCollapsed: false
    };
    this.handleClick = this.handleClick.bind(this);
    }
    handleClick() {
    this.setState({
    sidbarPushCollapsed:!this.state.sidbarPushCollapsed,
    profileCollapsed:!this.state.profileCollapsed
    });
    }
    render() {
    return (
    //...
    <Header
    handleClick={this.handleClick}
    sidbarPushCollapsed={this.state.sidbarPushCollapsed}
    profileCollapsed={this.state.profileCollapsed} />
    );

    Luego, en el método render() de su encabezado, usaría this.props:

    <button type="button" id="sidbarPush" onClick={this.props.handleClick} profile={this.props.profileCollapsed}>

    script php para eliminar archivos de más de 24 horas, elimina todos los archivos

    Escribí este script php para eliminar archivos antiguos de más de 24 horas, pero eliminó todos los archivos, incluidos los más nuevos:

    <?php
    $path = 'ftmp/';
    if ($handle = opendir($path)) {
    while (false!== ($file = readdir($handle))) {
    if ((time()-filectime($path.$file)) < 86400) {
    if (preg_match('/\.pdf$/i', $file)) {
    unlink($path.$file);
    }
    }
    }
    }
    ?>


    Solución del problema

    <?php
    /** define the directory **/
    $dir = "images/temp/";
    /*** cycle through all files in the directory ***/
    foreach (glob($dir."*") as $file) {
    /*** if file is 24 hours (86400 seconds) old then delete it ***/
    if(time() - filectime($file) > 86400){
    unlink($file);
    }
    }
    ?>

    También puede especificar el tipo de archivo agregando una extensión después del * (comodín), por ejemplo

    Para imágenes jpg use:glob($dir."*.jpg")

    Para archivos txt use:glob($dir."*.txt")

    Para archivos htm use:glob($dir."*.htm")

    ¿Es void** un tipo aceptable en ANSI-C?

    He visto una función cuyo prototipo es:

    int myfunc(void** ppt)

    Esta función se llama en un archivo C como a = myfunc(mystruct **var1);

    donde mystruct es typedef para una de las estructuras que tenemos.

    Esto funciona sin ningún error de compilación en MSVC6.0, pero cuando lo compilo con algún otro compilador de C, da un error en el lugar donde se llama a esta función con un mensaje de error:

    El argumento de tipo mystruct ** es incompatible con el parámetro de tipo void **

    El argumento de myfunc() se mantiene como void** porque parece ser un tipo de función malloc genérica que se llama con varios tipos de variables de estructura para la asignación de memoria.

  • ¿Hay algún tipo como void ** permitido en el estándar C/cualquier compilador C?

  • ¿Cómo puedo solucionar esto? [Intenté enviar el argumento de la llamada a la función mystruct**, pero no funcionó]

  • -ANUNCIO


    Solución del problema

    Las preguntas frecuentes de comp.lang.c abordan este problema en detalle en la Pregunta 4.9. En resumen, dicen que no es estrictamente portátil convertir un puntero a puntero arbitrario en un void **; continúan explicando que "un código como este puede funcionar y, a veces, se recomienda, pero se basa en que todos los tipos de punteros tengan la misma representación interna (que es común, pero no universal)". Continúan explicando que "cualquier void **valor con el que juegues debe ser la dirección de un void *valor real en alguna parte; las conversiones como (void **)&dp, aunque pueden cerrar el compilador, no son portátiles (y es posible que ni siquiera hagan lo que quieres)".

    Por lo tanto, puede lograr de manera segura/portátil el comportamiento deseado con código como:

    some_type *var1 = foo();
    void *tmp_void_ptr = (void *)var1;
    myfunc(&tmp_void_ptr);

    jueves, 28 de abril de 2022

    ¿Buenas aplicaciones asp.net (C#)? [cerrado]

    Cerrado. Esta pregunta no cumple con las pautas de desbordamiento de pila. Actualmente no está aceptando respuestas.


    Solución del problema

    Tendría que estar de acuerdo con BlogEngine. Implementa un montón de habilidades diferentes y necesidades comunes en asp.net, además de permitir que sea totalmente personalizable y muy fácil de entender. Puede funcionar con XML o SQL (a tu elección) y tiene una gran comunidad detrás.

    En cuanto a sus solicitudes ( negrita significa que sí):

  • Bien diseñado y de varios niveles.

  • Código limpio y comentado

  • Buen uso de varios patrones de diseño.

  • Las páginas web se muestran correctamente en todos los navegadores comunes

  • Produce html válido y tiene un buen uso de css

  • Uso de temas css. Prefiere el uso de css que tablas

  • NO depende de componentes de terceros (cuadrículas, menús, árboles, etc.), más o menos, todavía usa algunos dll personalizados

  • Tiene buenas pruebas unitarias - no estoy seguro

  • Las páginas web no son simplistas y se ven profesionales, sí, y hay TONELADAS de plantillas gratuitas por ahí.

  • Utiliza tecnologías más nuevas como MVC, LINQ... (no importante) - todavía no

  • (Cualquier otra cosa importante que no se me ocurra en este momento): un montón de cosas más, como feeds rss dinámicos, mapas de sitio dinámicos, referencias de datos, etc.

  • También hay un montón más de grandes proyectos de código abierto disponibles aquí: http://www.asp.net/community/projects/

    Sé que dotNetNuke también es bastante popular, y el Programa clasificado es bastante fácil de usar.

    Flutter: error de rango al acceder a la respuesta JSON

    Estoy accediendo a una respuesta JSON con la siguiente estructura. { "fullName": "FirstName LastName", "listings...