GOOGLE ADS

miércoles, 4 de mayo de 2022

Flutter: error de rango al acceder a la respuesta JSON

Estoy accediendo a una respuesta JSON con la siguiente estructura.

{
"fullName": "FirstName LastName",
"listings": "5",
"items": [{
"type": "A",
"id": "xi0823109y",
"imgUrl": "imageurl.com/logo/png",
"addressListings": [{
"type": "residential",
"amount": "790909"
},
{
"type": "commerical",
"amount": "9808212"
}
]
}]
}

Puedo mostrar todos los datos en mi ListView, excepto en ciertas condiciones en las que addressListings puede tener 1 o 2 objetos, lo que significa que puede tener tanto Residencial como Comercial y solo quiero el valor por cantidad. Tengo problemas para poner una condición para verificar si alguno de los artículos está presente, siempre hay 1 artículo (residencial o comercial). Cuando trato de hacer una verificación nula, me da un error de rango.

Aquí está mi modelo

class CusomerDetails {
final String fullName;
final String listings;
final String type;
final String imgUrl;
final String id;
final String? amount;
CusomerDetails({
required this.fullName,
required this.listings,
required this.type,
required this.imgUrl,
required this.id,
this.amount,
});
}

Esta es la función en la que estoy tratando de obtener los datos y pasarlos al generador ListView

 Class GetCustomerData{
Future<List<CustomerDetails>> fetchData(queryStr) async {
try{
var response = await http.get(Uri,parse(apiurl+queryStr);
if(reponse.statusCode == 200){
return _parseResponse(response.body);
}else{
print('someError'}
}
on TimeoutException catch (_) {
print('Timeout Error');
}
throw {};
}
}

List<CustomerDetails> _parseResponse(String jsonObj){
final jsonMapObj = jsonDecode(jsonObj);
final list = (jsonMapObj['items'] as list);
var obj = list.map((map)=> CustomerDetails)(
id:map['id'],
fullname:map['fullName'],
type:map['type'],
imgUrl:map[imgUrl],
amount:map['addressListings']['0']?['amount']?? 'Not Available',
// amount1:map['addressListings']['1']?['amount']?? 'Not Available' // tried this way out but didn't work so commented for now.
)).toList()
return obj;
}
}

Por último, si la cantidad no está presente, estoy tratando de pasar "No disponible", sin embargo, todavía tengo que llegar a eso, debido al error de rango.


Solución del problema

Class GetCustomerData{
Future<List<CustomerDetails>> fetchData(queryStr) async {
try{
var response = await http.get(Uri,parse(apiurl+queryStr);
if(reponse.statusCode == 200){
return _parseResponse(response.body);
}else{
print('someError'}
}
on TimeoutException catch (_) {
print('Timeout Error');
}
throw {};
}
}
List<CustomerDetails> _parseResponse(String jsonObj){
final jsonMapObj = jsonDecode(jsonObj);
final list = (jsonMapObj['items'] as list);
var obj = list.map((map)=> CustomerDetails)(
id:map['id'],
fullname:map['fullName'],
type:map['type'],
imgUrl:map[imgUrl],
amount:map['addressListings'].length<1?'Not Available':map['addressListings']['0']['amount']?? 'Not Available',
amount1:map['addressListings'].length<2? 'Not Available':map['addressListings']['1']['amount']?? 'Not Available' // tried this way out but didn't work so commented for now.
)).toList()
return obj;
}
}

Eliminar archivos y carpetas dentro de la carpeta si está vacía (Java)

 String dirWay = "C:\\Project";
int daysBack = 7;
File directory = new File(dirWay);
if(directory.exists()){
File[] listFiles = directory.listFiles();
long purgeTime = System.currentTimeMillis() - (daysBack * 24 * 60 * 60 * 1000);
for(File listFile: listFiles) {
if(listFile.lastModified() < purgeTime) {
if(!listFile.delete()) {
System.err.println("Unable to delete file: " + listFile);

} else {
System.out.println(listFile);
}
}
}
}

Esto funciona solo para archivos de carpetas de proyectos. Pero tengo algunas carpetas y archivos en la carpeta Proyecto, y cada carpeta tiene algunas carpetas y archivos.

¿Cómo puedo verificar dentro de todas las carpetas y verificar la última fecha de modificación de los archivos y eliminarlos si tienen más de 7 días?

Por ejemplo, tengo el directorio: C:/Proyecto/JavaIdea/... Si los archivos en la carpeta JavaIdea tienen más de 7 días, necesito eliminar todos los archivos y la carpeta JavaIdea también.


Solución del problema

La forma más fácil es probablemente usar Files.walkFileTree. Files.walkte da un Stream<Path>, pero las carpetas van primero, no después. Por FileVisitorotro lado, usa dos eventos para carpetas: antes de visitar y después.

Algo que podría funcionar (no probado):

Deque<LongAdder> counts = new ArrayDeque<>(); // counting # of remaining files per level
Files.walkFileTree(start, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(T dir, BasicFileAttributes attrs) {
counts.push(new LongAdder());
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(T dir, BasicFileAttributes attrs) throws IOException {
long remaining = counts.pop().sum();
if (remaining == 0) {
// the directory is empty now, delete it
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(T file, BasicFileAttributes attrs) throws IOException {
if (is old enough to delete) {
// delete
} else {
counts.peek().increment();
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(T file, IOException exc) {
counts.peek().increment();
return FileVisitResult.CONTINUE;
}
});

JavaScript: AJAX espera el valor de retorno de PHP

Soy novato en AJAX. Mi objetivo es abrir en JavaScript un archivo php.


function checkCorrect(userEntry, solution) {
return fetch("checkSolution.php", {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
},
body: `userEntry=${userEntry}&solution=${solution}`,
})

.then((response) => response.text())
.then((res) => (res))
.catch(err => console.log("checkCorrect: " + err));
}
function checkSolution() {
result = checkCorrect(userEntry, solution);
alert(result)
}

Solución del problema

De hecho, fetch es asíncrono. no lo sabía En mi caso, estoy buscando un método síncrono.

XMLHttpRequest es el enfoque correcto en mi caso.

Y aquí está la solución:


function checkCorrect(userEntry, solution) {
var ret_value = null;
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function() {
if (this.readyState==4 && this.status==200) {
ret_value = xmlhttp.responseText;
}
}

xmlhttp.open("POST","checkSolution.php",false);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send("userEntry="+userEntry+"&solution="+solution);
return ret_value;
}

reaccionar | ForwardedRef usando React.Component

Estoy creando un componente personalizado en React y necesito exportarlo usando forwardedRef. Pero cuando lo intento, aparece este error:

error

my code:

export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>{
ref?: React.RefObject<HTMLButtonElement>;
}
class Button extends React.Component<ButtonProps> {
render() {
const {
ref,
children,
...otherProps
} = this.props;
return (
<button
{...otherProps}
ref={ref}
>
{children}
</button>
)
}
}
const ButtonForwarded = React.forwardRef<ButtonProps>((props, ref) =>
<Button {...props} ref={ref} /> );
ButtonForwarded.displayName = 'Button';
export default ButtonForwarded;


Solución del problema

Cree el componente ButtonForwarded así:

const ButtonForwarded = React.forwardRef((props: ButtonProps, ref: LegacyRef<Button>) => <Button {...props} ref={ref} /> );

¿Cómo puedo estimar la compresibilidad de un archivo sin comprimirlo?

Estoy usando un servidor basado en bucle de eventos en python retorcido que almacena archivos, y me gustaría poder clasificar los archivos según su compresibilidad.

Si la probabilidad de que se beneficien de la compresión es alta, irán a un directorio con la compresión btrfs activada; de lo contrario, irán a otro lugar.

No necesito estar seguro: una precisión del 80% sería suficiente y ahorraría mucho espacio en disco. Pero dado que también existe el problema de rendimiento de la CPU y fs, no puedo simplemente guardar todo comprimido.

Los archivos están en los megabytes bajos. No puedo probarlos y comprimirlos sin usar una gran cantidad de CPU y retrasar indebidamente el ciclo de eventos o refactorizar un algoritmo de compresión para que encaje en el ciclo de eventos.

¿Hay alguna mejor práctica para dar una estimación rápida de la compresibilidad? Lo que se me ocurrió fue tomar una pequeña porción (unos pocos kB) de datos desde el principio del archivo, probarlo y comprimirlo (con un retraso presumiblemente tolerable) y basar mi decisión en eso.

¿Alguna sugerencia? ¿Sugerencias? ¿Defectos en mi razonamiento y/o problema?


Solución del problema

Solo 10K desde la mitad del archivo hará el truco. No desea el principio ni el final, ya que pueden contener información de encabezado o avance que no es representativa del resto del archivo. 10K es suficiente para obtener cierta cantidad de compresión con cualquier algoritmo típico. Eso predecirá una cantidad relativa de compresión para todo el archivo, en la medida en que ese medio 10K sea representativo. La proporción absoluta que obtenga no será la misma que para todo el archivo, pero la cantidad que difiere de la no compresión le permitirá establecer un umbral. Simplemente experimente con muchos archivos para ver dónde establecer el umbral.

Como se indicó, puede ahorrar tiempo al no hacer nada con los archivos que obviamente ya están comprimidos, por ejemplo,.png..jpg.,.mov,.pdf,.zip, etc.

Medir la entropía no es necesariamente un buen indicador, ya que solo proporciona una estimación de la compresibilidad de orden cero. Si la entropía indica que es lo suficientemente comprimible, entonces es correcto. Si la entropía indica que no es lo suficientemente comprimible, entonces puede ser correcta o no. Su compresor real es un estimador mucho mejor de la compresibilidad. Ejecutarlo en 10K no llevará mucho tiempo.

Creando una capa de máscara en p5js

Me gustaría dibujar un patrón, y luego solo mostrar ese patrón donde se superpone con una forma que especifique. Similar a cómo funciona una capa de máscara en Photoshop. ¿Alguien sabe cómo puedo abordar esto?


Solución del problema

Esto debería usar un proceso de 4 pasos:

  • cree su máscara con beginShape()/endShape y beginContour()/endContour() en el medio para que se muestre el área. Haces esto en un búfer.

    function setup() {
    createCanvas(400, 400);
    background(30)
    fill(200,50,60)
    msk = createGraphics(width,height)
    pattern = createGraphics(width,height)
    pixelDensity(1)
    msk.beginShape();
    // Exterior part of shape, clockwise winding
    msk.vertex(0, 0);
    msk.vertex(400, 0);
    msk.vertex(400, 400);
    msk.vertex(0, 400);
    // Interior part of shape, counter-clockwise winding
    msk.beginContour();
    msk.vertex(20, 20);
    msk.vertex(50, 220);
    msk.vertex(120, 380);
    msk.vertex(370, 320);
    msk.vertex(240, 160);
    msk.vertex(350, 40);
    msk.endContour();
    msk.endShape(CLOSE);
    mPixs = msk.loadPixels()
    }


  • Luego crea un búfer diferente para el patrón.

    for (let c=0; c<9; c++) {
    for (let r=0; r<9; r++) {
    pattern.circle(width/8*c,height/8*r,40)
    }
    }


  • Ahora cargue píxeles de la máscara y use el valor alfa de cada píxel en el nivel alfa de cada píxel correspondiente en el patrón.

    pattern.loadPixels()
    msk.loadPixels()
    for (let i=0; i < pattern.pixels.length; i+=4){
    pattern.pixels[i+3] = msk.pixels[i+3]
    }
    pattern.updatePixels()


  • Finalmente, simplemente agregue el búfer resultante a su lienzo principal conimage(pattern,0,0)


  • ¡Eche un vistazo a este ejemplo de trabajo cuidadosamente codificado solo para usted!:D


    let msk, pattern, mPixs
    function setup() {
    createCanvas(400, 400);
    background(30)
    fill(200,50,60)
    msk = createGraphics(width,height)
    pattern = createGraphics(width,height)
    pixelDensity(1)
    msk.beginShape();
    // Exterior part of shape, clockwise winding
    msk.vertex(0, 0);
    msk.vertex(400, 0);
    msk.vertex(400, 400);
    msk.vertex(0, 400);
    // Interior part of shape, counter-clockwise winding
    msk.beginContour();
    msk.vertex(20, 20);
    msk.vertex(50, 220);
    msk.vertex(120, 380);
    msk.vertex(370, 320);
    msk.vertex(240, 160);
    msk.vertex(350, 40);
    msk.endContour();
    msk.endShape(CLOSE);
    mPixs = msk.loadPixels()
    }
    function draw() {

    for (let c=0; c<9; c++) {
    for (let r=0; r<9; r++) {
    pattern.circle(width/8*c,height/8*r,40)
    }
    }
    for (let c=0; c<9; c++) {
    for (let r=0; r<9; r++) {
    let xo=random(-5,5), yo=random(-5,5)
    circle(width/8*c+xo,height/8*r+yo,50)
    }
    }
    pattern.loadPixels()
    msk.loadPixels()
    for (let i=0; i < pattern.pixels.length; i+=4){
    pattern.pixels[i+3] = msk.pixels[i+3]
    }
    pattern.updatePixels()
    image(pattern,0,0)
    }

    html, body {
    margin: 0;
    padding: 0;
    }
    canvas {
    display: block;
    }

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/p5.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/addons/p5.sound.min.js"></script>
    <link rel="stylesheet" type="text/css" href="style.css">
    <meta charset="utf-8" />
    </head>
    <body>
    <main>
    </main>
    <script src="sketch.js"></script>
    </body>
    </html>

    asp consumiendo un servicio web, ¿qué hacer con el objeto del conjunto de registros?

    Actualmente ejecuto una página web ASP clásica (antigua) con un objeto de conjunto de registros que se usa directamente en el viejo código Spagethi incorrecto.

    Estoy pensando en implementar una capa de datos en asp.net como servicio web para mejorar la capacidad de administración. Este es también un primer paso para actualizar el sitio web a asp.net. El sitio en sí sigue siendo ASP por el momento...

    ¿Alguien puede recomendar una buena manera de reemplazar el tipo de objeto del conjunto de registros con un tipo compatible con el servicio web (como una matriz o algo así)? ¿Con qué reemplazo a continuación?:

    set objRS = oConn.execute(SQL)
    while not objRS.eof
    ...
    name = Cstr(objRS(1))
    ...
    wend

    y también se pueden reemplazar varios conjuntos de registros? Yo estoy hablando:

     set objRS = objRs.nextRecordset 

    ¿Alguien pasó por esto y puede recomendar?

    @AdditionalInfo - lo pediste:-)

    Dejame empezar por el principio.
    La situación existente es: tengo un sitio web ASP antiguo con contenido jerárquico clásico (encabezado, sección, subsección, contenido) extraído de la base de datos a través de procedimientos almacenados y las páginas de contenido también están en la base de datos (un enlace a un archivo html).

    Ahora lo malo es que el código ASP en todas partes se distribuye en muchos archivos.asp, todos haciendo sus propias conexiones de base de datos, leyendo, escribiendo (tienes que registrarte para el contenido). Recientemente tuvimos problemas con los ataques de inyección SQL, así que me llamaron para solucionarlo.

    Podría cambiar todas las páginas.asp para evitar la inyección de sql, pero sería una locura. Así que pensé en crear una capa de datos: todas las páginas que usan esta capa para acceder a la base de datos. Una vez colocado para corregir y actualizar el código de acceso a la base de datos.

    Al tomar esa decisión, pensé que la actualización de asp.net no estaba muy lejos, ¿por qué no comenzar a usar asp.net para la capa de datos? De esta manera, se puede reutilizar al actualizar el sitio.

    ¡Eso me lleva a las preguntas anteriores!


    Solución del problema

    Primero, mi consejo favorito de esta semana: no trate su servicio web como si fuera un objeto local o pagará un precio de rendimiento muy alto. Esencialmente, no haga cosas como esta en su aplicación web:

    MyDataWebService ws = new MyDataWebService();
    foreach(DataItem item in myData)
    {
    ws.Insert(item);
    }

    Siempre debe preferir minimizar las llamadas a su servicio web (y SQL):

    MyDataWebService ws = new MyDataWebService();
    ws.Insert(myData); // Let the web service process the whole set at once.

    Ahora, en cuanto al tipo de datos a usar para las llamadas de su servicio web, básicamente tiene dos opciones:


    • conjunto de datos

    • Todo lo demás (matriz)


    La mayoría de las colecciones devueltas por un servicio web (como List<MyData>) en realidad se convierten en una matriz durante la invocación del servicio web. Recuerde que los servicios web no devuelven objetos (datos + comportamiento) sino solo estructuras de datos (o una secuencia de). Por lo tanto, hay poca distinción entre una Lista y una Matriz.

    Los conjuntos de datos son clases más complejas; usan su propio serializador personalizado y prácticamente se recrean por completo en la aplicación de llamada. Hay un costo en el rendimiento a pagar por el uso de conjuntos de datos como ese, por lo que generalmente no lo recomiendo para la mayoría de los escenarios. El uso de matrices para pasar datos de un lado a otro tiende a ser más eficiente y, francamente, es más fácil de hacer.

    Tu caso es un poco diferente; debido a que está convirtiendo un sitio existente que ya usa ADO, un DataSet de ADO.NET podría ser su mejor ruta de actualización. ADO.NET y ADO son lo suficientemente similares como para que una actualización directa sea más fácil de esa manera. Depende de cómo esté construido su sitio web.

    Para la última parte de su pregunta, DataSets admite múltiples conjuntos de registros similares al Recordset de ADO. Se llaman tablas de datos. Cada DataSet tiene al menos un DataTable y puede leerlos en cualquier orden.

    Buena suerte.

    Electron no se inicia correctamente debido a SIGTRAP

    Me estoy metiendo en Electron para intentar comenzar a crear aplicaciones de escritorio. Me encuentro con este error:

    /home/me/dev/my-electron-app-2/node_modules/electron/dist/electron exited with signal SIGTRAP

    Esta ruta conduce a un archivo binario, por lo que realmente no puedo leer lo que está sucediendo. Este error viene cuando ejecuto:

    npm start

    Mi objetivo es que aparezca una ventana en mi escritorio que refleje la página HTML. Hasta ahora, la aplicación es solo:

    índice.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
    <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
    <meta http-equiv="X-Content-Security-Policy" content="default-src 'self'; script-src 'self'">
    <title>Hello World!</title>
    </head>
    <body>
    <h1>Hello World!</h1>
    We are using Node.js <span id="node-version"></span>,
    Chromium <span id="chrome-version"></span>,
    and Electron <span id="electron-version"></span>.
    </body>
    </html>

    principal.js

    const { app, BrowserWindow } = require('electron')
    const createWindow = () => {
    const win = new BrowserWindow({
    width: 800,
    height: 600
    })

    win.loadFile('index.html')
    }
    app.whenReady().then(() => {
    createWindow()
    })

    Este código proviene de los documentos, aquí: https://www.electronjs.org/docs/latest/tutorial/quick-start

    He buscado en Google un poco y no he podido encontrar una solución que se mantenga. Estoy usando Ubuntu en WSL. Si alguien tiene algún consejo, sería apreciado.

    Gracias


    Solución del problema

    Dado que electron es una aplicación GUI, y está usando Ubuntu en WSL (¿supongo que WSL2?), Debe ejecutar un servidor X para que Ubuntu tenga algo para representar la GUI.

    Puede descargar e instalar VcXsrv desde aquí: https://sourceforge.net/projects/vcxsrv/

    Cómo configurarlo se explica en la respuesta superior a esta pregunta: Cómo configurar el reenvío X11 en funcionamiento en WSL2

    Su otra opción es no usar WSL; simplemente ejecute node, npm y electron directamente en su máquina con Windows. Entonces, no necesitará instalar ningún servidor X por separado; tu aplicación debería funcionar.

    No puedo conectarme a MySQL

    Estoy tratando de conectarme a MySQL, usando Sequel Pro, algo que he hecho muchas veces antes. Host 127.0.0.1, usuario raíz, sin contraseña. Recibo el siguiente mensaje:

    No se pudo conectar al host 127.0.0.1 porque se denegó el acceso.

    Vuelva a verificar su nombre de usuario y contraseña y asegúrese de que el acceso desde su ubicación actual esté permitido.

    MySQL dijo: Acceso denegado para el usuario 'root'@'localhost' (con contraseña: NO)

    Por lo que vale, recibí este mensaje después de actualizar a un nuevo sistema operativo Mac (Mavericks), me di cuenta de que el servidor no se estaba ejecutando, descargué un nuevo servidor (que actualmente se está ejecutando) y lo intenté nuevamente, pero tenía el mismo problema..


    Solución del problema

  • Asegúrese de estar ejecutando MySql en segundo plano Preferencias del sistema -> Mysql -> Iniciar MySql

  • Asegúrese de poder conectarse a MySql a través de la línea de comandos, si la línea de comandos funciona, no hay razón por la que no debería funcionar en SequelPro.

  • Si el problema persiste, intente cambiar la contraseña 'root'.
  • ¿Por qué Go maneja los cierres de manera diferente en goroutines?

    Considere el siguiente código Go (también en el Go Playground ):

    package main
    import "fmt"
    import "time"
    func main() {
    for _, s:= range []string{"foo", "bar"} {
    x:= s
    func() {
    fmt.Printf("s: %s\n", s)
    fmt.Printf("x: %s\n", x)
    }()
    }
    fmt.Println()
    for _, s:= range []string{"foo", "bar"} {
    x:= s
    go func() {
    fmt.Printf("s: %s\n", s)
    fmt.Printf("x: %s\n", x)
    }()
    }
    time.Sleep(time.Second)
    }

    Este código produce el siguiente resultado:

    s: foo
    x: foo
    s: bar
    x: bar
    s: bar
    x: foo
    s: bar
    x: bar

    Asumiendo que esto no es un error extraño del compilador, tengo curiosidad por qué a) el valor de s se interpreta de manera diferente en la versión goroutine que en la llamada de función normal yb) y por qué asignarlo a una variable local dentro del ciclo funciona en ambos casos.


    Solución del problema

    Los cierres en Go tienen un alcance léxico. Esto significa que cualquier variable a la que se haga referencia dentro del cierre desde el ámbito "externo" no es una copia sino una referencia. Un forbucle en realidad reutiliza la misma variable varias veces, por lo que está introduciendo una condición de carrera entre la lectura/escritura de la svariable.

    Pero xestá asignando una nueva variable (con :=) y copiando s, lo que da como resultado que ese sea el resultado correcto cada vez.

    En general, es una buena práctica pasar cualquier argumento que desee para que no tenga referencias. Ejemplo:

    for _, s:= range []string{"foo", "bar"} {
    x:= s
    go func(s string) {
    fmt.Printf("s: %s\n", s)
    fmt.Printf("x: %s\n", x)
    }(s)
    }

    Next.js: cómo obtener activos estáticos desde getStaticProps

    Estoy usando Netlify CMS. Quiero importar todas las diapositivas de un carrusel a mi componente. Hice una colección llamada slider y agregué algunas diapositivas. Eso creó dos archivos de rebajas (uno para cada diapositiva) en formato public/content/slider/. Me gustaría importarlos todos en un objeto iterable para poder construir el carrusel.

    Debido a que tengo un cargador de paquete web configurado para archivos de descuento, puedo importar un solo archivo de descuento sin problema, como este:

    import post from '../public/content/posts/[post name].md

    Pero cuando trato de usar require.context, require-context o import fs, no funciona. Así que decido intentar requerir esas librerías desde adentro getStaticProps. Pero __dirnamein getStaticPropsis /, la raíz del sistema de archivos de mi computadora.

    Todos los getStaticPropsejemplos utilizan la obtención de datos. Me falta algo de información. ¿Cómo puedo importar todos los archivos de rebajas en la /slides/carpeta?


    Solución del problema

    Este es un problema conocido en Next.js, __dirnamese resuelve incorrectamente en /: debe usar en su process.cwd()lugar.

    De la documentación de los archivos de lectura de Next.js:

    Los archivos se pueden leer directamente desde el sistema de archivos en getStaticProps.

    Para hacerlo, debe obtener la ruta completa de un archivo.

    Dado que Next.js compila su código en un directorio separado que no puede usar __dirname, ya que la ruta que devolverá será diferente del directorio de páginas.

    En su lugar, puede usar process.cwd()which le da el directorio donde se está ejecutando Next.js.

    martes, 3 de mayo de 2022

    IntelliJ: no se puede resolver el método 'ejecutar (java.lang.Class, String [])'

    Encontré un problema en el que, en todas mis aplicaciones, hay una cruz roja en la parte superior derecha. Puedo ejecutarlo, pero la cruz no parece desaparecer.

    Abrí las configuraciones de ejecución/depuración y dice Advertencia: Método principal no encontrado. No entiendo por qué no se encuentra cuando ya tengo una clase principal y un método correspondientes para todas y cada una de las aplicaciones.

    Intenté cerrar el proyecto, reiniciar IntelliJ, reiniciar mi computadora portátil, actualizar mi escritorio, actualizar Gradle haciendo clic en Reimportar todos los proyectos de Gradle, reconstruir el proyecto y hacer clic en Invalidar cachés/Reiniciar. También probé otras sugerencias que encontré en StackOverflow, como eliminar la carpeta.idea. Ninguna cosa. La cruz roja sigue apareciendo. También me di cuenta de que no tengo la carpeta de salida en todas mis aplicaciones.

    cuadro de diálogo editar configuraciones de ejecución/depuración

    no se puede resolver el método 'run(java.lang.Class, String[])'


    Solución del problema

    En Configuración del proyecto, primero asegúrese de que la ruta del SDK sea correcta. Preferiblemente instale y use su propio SDK. Luego use el mismo SDK en Proyecto y Módulos en Configuración del proyecto.

    proxy inverso entre un clúster de kubernetes y otro

    Tengo 2 clústeres de kubernetes

    clúster 2: nginx de loadblancer expuesto con IP regionalIP_PRIVATE

    service 1 - website `/website`
    service 2 - blog `blog`
    service 3 - api `api`

    clúster 1: gce de loadblancer expuesto con IP globalIP_PUBLIC

    Quiero implementar este comportamiento.

    IP_PUBLIC/api -> service 2 response
    IP_PUBLIC/* -> cdn -> service 1 response

    Para implementar esto, he creado una capa de servicio cdn en el clúster 1 como se define aquí https://cloud.google.com/kubernetes-engine/docs/how-to/ingress-features#expandable-1

    Ahora mi dominio se asignará a IP_PUBLIC, por lo tanto, cualquier solicitud llegará primero al clúster 1, luego debe pasar la solicitud al clúster 2 y obtener la respuesta.

    Nota: tengo que crear 2 clústeres porque

  • No quiero cambiar nada en el clúster.

  • No puedo tener IP global con ingreso nginx

  • No puedo tener 2 balanceadores de carga (tanto gce como nginx) en un clúster

  • Quiero pasar la solicitud exacta (dominio, encabezados, etc.) del clúster 1 al clúster 2 como si la solicitud llegara directamente al clúster 2.

    ¿Cuál es la forma correcta de hacer esto? En caso de que haya alguna solución alternativa para lograr lo anterior con cambios mínimos, sugiérala.


    Solución del problema

    No estoy seguro de qué ingreso está ejecutando en segundo plano, sin embargo, puede cambiar la configuración usando la anotación.

    Puede habilitar el paso de los encabezados en Nginx usando esta anotación para que reenvíe todos los encabezados personalizados y los detalles del dominio.

    enable-underscores-in-headers: true

    con

    nginx.ingress.kubernetes.io/configuration-snippet: |
    proxy_set_header My-Custom-Header $http_my_custom_header;

    Pero no estoy seguro de una parte cuando dices:

    Ahora mi dominio se asignará a IP_PUBLIC, por lo tanto, cualquier solicitud llegará primero al clúster 1, luego debe pasar la solicitud al clúster 2 y obtener la respuesta.

    Una vez que su solicitud llegue al tráfico del dominio, tal vez fluya como

    Request > domain > cluster 1 > cluster 1's service > IP or Domain of cluster 2 > cluster 2's ingress controller > cluster 2's service

    en este caso, debe pasar los encabezados para solicitar y habilitar la configuración de ingreso en el controlador de cluster2 para que reenvíe los detalles al servicio de back-end que se ejecuta en cluster2.

    Tampoco estoy seguro de cómo su tráfico de salida sale del clúster utilizando la puerta de enlace NAT o directamente desde el nodo, considerando que tiene un clúster público, su servicio llamará directamente al dominio de cluster2 en ese caso, debe agregar los encabezados con la solicitud.

    Simplemente configure la anotación adecuada para ingresar y sus servicios de back-end obtendrán los encabezados con los detalles del dominio.

    La instancia EC2 no aparece después de reiniciar

    Esta mañana me di cuenta de que una de mis instancias aws EC2 estaba funcionando demasiado lento, así que pensé en reiniciar la instancia.

    Sin embargo, después de reiniciar, nunca volvió y hacer ping a la IP pública devuelve un "Tiempo de espera de solicitud".

    Realmente siento que he llegado a un callejón sin salida. ¿Alguna sugerencia brillante sobre cómo resolver este problema?


    Solución del problema

    Terminé deteniendo la instancia y volviéndola a iniciar. Leí que una parada completa de la instancia cambia el hardware físico en el que se encuentra la instancia, mientras que un reinicio es solo un reinicio del sistema operativo.

    Después de comenzar de nuevo, solo tuve que actualizar mis registros dns ya que la instancia obtuvo una nueva IP.

    No puedo encontrar dónde colocar archivos para el simulador Xcode en mi Mac

    Tengo problemas para encontrar dónde colocar archivos en mi Mac para que mi simulador Xcode los vea.

    Trabajando en una sección de "carga de archivos" para mi aplicación. Antes de llamar a UIDocumentPickerViewController, llamo a mi propia función printSimDir que uso para abrir la carpeta adecuada en mi Mac para poder colocar mis archivos allí.

    Y ahí tengo tres archivos: "blank_inv, bill_001.cvs y example.mp3"

    Sin embargo, en mi simulador, no veo estos archivos. Sin embargo, sigo viendo un archivo xls que no es ninguno de los tres archivos anteriores. Así que en un momento lo hice bien. Pero ya no más.

    Me doy cuenta de que mi problema también podría estar en cómo llamo al UIDocumentPickerViewController, así que también incluyo ese código.

    case ButtType.file.rawValue:
    printSimDir()
    let supportedTypes: [UTType] = [UTType.spreadsheet, UTType.commaSeparatedText,.mp3]
    let pickerViewController = UIDocumentPickerViewController(forOpeningContentTypes: supportedTypes)
    pickerViewController.delegate = self
    pickerViewController.allowsMultipleSelection = false
    present(pickerViewController, animated: true, completion: nil)
    ...
    extension UploadInv: UIDocumentPickerDelegate {
    func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {

    for url in urls {
    guard url.startAccessingSecurityScopedResource() else {
    print ("error")
    return
    }

    xFile = XFile(fileUrl: url, key: "filename")
    myStartUPButt.isEnabled = true

    do { url.stopAccessingSecurityScopedResource() }
    myStatus.text = xFile?.filename
    }
    }
    func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
    controller.dismiss(animated: true, completion: nil)
    }
    }

    imprimirSimDir ()

    func printSimDir(){
    // tried the commented code as well
    // let fManager = FileManager.default
    // guard let url = fManager.urls(for:.documentDirectory, in:.userDomainMask).first else {return}
    // print ("\(url)")

    #if targetEnvironment(simulator)
    if let documentsPath = FileManager.default.urls(for:.documentDirectory, in:.userDomainMask).first?.path {
    print("Documents Directory: \(documentsPath)")
    }

    ¿Cómo puedo obtener el valor mínimo de la columna en SQL?

    tengo mesa


























    IDENTIFICACIÓNnúmero
    uno4
    uno5
    uno2
    35

    Solución del problema

    Suponiendo que está en un RDBMS que admite SQL moderno, solo necesita agregar

    MIN(number) OVER (PARTITION BY id) AS min_number

    a tu lista SELECT

    No se pueden conectar aplicaciones internas usando el nombre del servidor de escala final con el puerto especificado

    Como sugiere el título, básicamente quiero deshabilitar el puerto TCP público y permitir que plex u otras aplicaciones solo se conecten usando Tailscale.

    Como, no quiero permitir server-public-ip:32400, sino que quiero hacer tailscale-server-name:32400.

    Si tengo el puerto abierto en TCP para todas las fuentes, funciona, no funciona cuando elimino la regla de ingreso.

    oráculo-vcn

    El servidor hace ping bien (MagicDNS habilitado)

    Pinging oracle.hidden-name.ts.net [tailscale-ip] with 32 bytes of data:
    Reply from tailscale-ip: bytes=32 time=36ms TTL=64
    Reply from tailscale-ip: bytes=32 time=36ms TTL=64
    Reply from tailscale-ip: bytes=32 time=38ms TTL=64
    Reply from tailscale-ip: bytes=32 time=37ms TTL=64
    Ping statistics for tailscale-ip:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
    Approximate round trip times in milli-seconds:
    Minimum = 36ms, Maximum = 38ms, Average = 36ms


    Solución del problema

    Si tengo el puerto abierto en TCP para todas las fuentes, funciona, no funciona cuando elimino la regla de ingreso.

    Eso probablemente significa que las aplicaciones que se conectan a plex todavía usan la dirección IP de LAN, no la dirección IP de Tailscale. El uso de MagicDNS podría ayudar, se le puede indicar a la aplicación Plex que vaya a plex.example.com.beta.tailscale.net.

    ¿Es posible eliminar "Inspeccionar elemento"?

    ¿Es posible eliminar o deshabilitar el menú contextual "Inspeccionar elemento" en la aplicación Chrome a través de Javascript?

    He buscado en varios foros pero no hay una respuesta definitiva.


    Solución del problema

    Tengo un requisito para una página. En esa página, quiero bloquear al usuario para que realice las siguientes acciones,


    • Botón derecho del ratón

    • F12

    • Ctrl + Mayús + I

    • Ctrl + Mayús + J

    • Ctrl + Mayús + C

    • Control + U


    Para esto busqué en Google, finalmente obtuve el siguiente enlace,

    http://andrewstutorials.blogspot.in/2014/03/disable-ways-to-open-inspect-element-in.html

    Lo probé con Chrome y Firefox. Está funcionando para mi requerimiento.

    Botón derecho del ratón

     <body oncontextmenu="return false">

    Llaves

    document.onkeydown = function(e) {
    if(event.keyCode == 123) {
    return false;
    }
    if(e.ctrlKey && e.shiftKey && e.keyCode == 'I'.charCodeAt(0)) {
    return false;
    }
    if(e.ctrlKey && e.shiftKey && e.keyCode == 'C'.charCodeAt(0)) {
    return false;
    }
    if(e.ctrlKey && e.shiftKey && e.keyCode == 'J'.charCodeAt(0)) {
    return false;
    }
    if(e.ctrlKey && e.keyCode == 'U'.charCodeAt(0)) {
    return false;
    }
    }

    Campo de búsqueda dinámico de Symfony usando Ajax

    Quería implementar una búsqueda dinámica usando Ajax en Symfony. Tengo una entidad y una tabla en mi base de datos llamada Sesión. Quiero cargar datos de la tabla y mostrarlos en la plantilla. Luego, usando un campo de texto, simplemente puedo escribir lo que estoy buscando y aparecerá dinámicamente.

    Puedo cargar desde la base de datos y puedo implementar una búsqueda usando un botón de envío que actualizaría la página. Pero eso no es lo que quiero, no quiero actualizar, quiero que sea dinámico o lo que algunos llamarían una búsqueda en vivo.

    Aquí está mi SessionController.php

     /**
    * @Route("/", name="app_session_index", methods={"GET", "POST"})
    * @param Request $request
    * @return Response
    */
    public function index(Request $request): Response
    {
    $propertySearch = new MyPropertySearch();
    //si si aucun nom n'est fourni on affiche tous les articles
    $sessions= $this->getDoctrine()->getRepository(Session::class)->findAll();
    $form = $this->createForm(PropertySearchType::class, $propertySearch);
    $form->handleRequest($request);
    //initialement le tableau des articles est vide,
    //c.a.d on affiche les articles que lorsque l'utilisateur clique sur le bouton rechercher
    $articles= [];
    if($form->isSubmitted() && $form->isValid()) {
    //on récupère le nom d'article tapé dans le formulaire
    $titre = $propertySearch->getTitle();
    if ($titre!="")
    //si on a fourni un nom d'article on affiche tous les articles ayant ce nom
    $sessions= $this->getDoctrine()->getRepository(Session::class)
    ->findByMultiple($titre);
    }
    return $this->render('session/index.html.twig',[ 'form' =>$form->createView(), 'sessions' => $sessions]);
    }

    Aquí está usando una entidad y su formulario llamado PropertySearchType.php que he creado. No creo que sea relevante. Sin embargo, está usando el

    findByMultiple($título)

    que es un método personalizado de QueryBuilder para buscar una sesión utilizando varios criterios.

     /**
    // * @return Session[] Returns an array of Session objects
    // */
    public function findByMultiple($searchValue)
    {
    return $this->createQueryBuilder('s')
    ->join('s.coach', 'c')
    ->addSelect('c')
    ->where('s.title LIKE:title')
    ->orWhere('s.description LIKE:desc')
    ->orWhere('s.rating LIKE:rate')
    ->orWhere('c.tier LIKE:tier')
    ->setParameters(
    ['title' => $searchValue, 'tier'=>$searchValue,
    'desc'=>$searchValue, 'rate'=>$searchValue
    ])
    ->getQuery()
    ->getResult();
    }

    Y finalmente, debería generar lo que necesito en la vista session/index.html.twig que contiene el javascript y el ajax necesarios. Representa todas las sesiones cuando actualizo y un campo de texto para escribir. Pero mientras escribo lo que estoy buscando, la tabla no cambia.

    Aquí está el archivo twig que estoy renderizando.

     {% extends 'base.html.twig' %}
    {% block title %}Session index{% endblock %}
    {% block body %}
    <h1>Session index</h1>
    <h2>Search A Session!!</h2>
    <div class="sidebar-search">
    <div class="input-group custom-search-form">
    <input type="text" id="search" class="form-control" placeholder="Search here">
    </div>
    </div>
    <table class="table">
    <thead>
    <tr>
    <th>Id</th>
    <th>Title</th>
    <th>Description</th>
    <th>Date</th>
    <th>StartTime</th>
    <th>Link</th>
    <th>Rating</th>
    <th>actions</th>
    </tr>
    </thead>
    <tbody>
    {% for session in sessions %}
    <tr>
    <td>{{ session.id }}</td>
    <td>{{ session.title }}</td>
    <td>{{ session.description }}</td>
    <td>{{ session.date? session.date|date('Y-m-d'): '' }}</td>
    <td>{{ session.startTime? session.startTime|date('H:i:s'): '' }}</td>
    <td>{{ session.link }}</td>
    <td>{{ session.rating }}</td>
    <td>
    <a href="{{ path('app_session_show', {'id': session.id}) }}">show</a>
    <a href="{{ path('app_session_edit', {'id': session.id}) }}">edit</a>
    </td>
    </tr>
    {% else %}
    <tr>
    <td colspan="8">no records found</td>
    </tr>
    {% endfor %}
    </tbody>
    </table>
    <a href="{{ path('app_session_new') }}">Create new</a>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js">
    </script>
    <script type="text/javascript">
    jQuery( document ).ready(function() {
    var searchRequest = null;
    $("#search").keyup(function(e){
    /* La variable value va prendre la valeur insérer dans le champ de texte afin d'effectuer la recherche */
    var value = $(this).val();
    /* Ajax est lancé lors du remplissage du champ texte dont l'id est « search » pour faire la recherche */
    $.ajax({
    /* l'url est une chaine de caractères contenant l'adresse où la requête est envoyée */
    url:{{ path('searchSessions') }},
    /* La méthode utilisée pour transférer les données est GET */
    type: 'GET',
    /*Ici search value va prendre la chaine entrée par un utilisateur dans la zone de recherche et sera placée après l'url */
    data: {
    'searchValue': value
    },
    /*Cette fonction permet de vider le contenu du tableau pour recevoir le nouveau contenu*/
    success: function(retour){
    if(retour){
    $('#t tbody#search').empty();
    $.each(JSON.parse(retour), function(i, obj) {
    $('#t tbody#all').hide();
    $('#t tbody#search').append('<tr><td> '+obj.id+' </td><td> '+obj.title+' </td>' +
    '<td>'+obj.description+' </td><td>'+obj.date+' </td><td> '+obj.startTime+' </td>' +
    '<td> '+obj.link+' </td><td> '+obj.rating+' </td>' +
    '<td><a href="/'+obj.id+'/edit">edit</a> </br>' +
    '<a href="/'+obj.id+'">remove</a></td></tr>');

    });
    }
    else
    {
    $('#t tbody#all').show();
    $('#t tbody#search').empty();
    $('#t tbody#search').fadeIn('fast');
    }``
    },
    });
    return false;
    });
    });
    </script>
    {% endblock %}

    ¡¡Representación visual!!


    Solución del problema

    Lo primero que noto es en tu código twig: llamas {{ path('searchSessions') }}pero la ruta definida en tu código Symfony es app_session_index.

    Pruebe su ruta Symfony con Postman (u otro software similar) y si funciona correctamente, continúe con su código javascript.

    De lo contrario, no podrá encontrar el origen del problema (o llevará más tiempo:))

    Color de fondo en el indicador cuando se cumplen las condiciones

    He estado tratando de agregar colores de fondo cuando se cumplen ciertas condiciones en este indicador que combina el doble estocástico de Walter Bressert y el RSI.

    Quiero que el color de fondo se vuelva verde cuando se cumplan las condiciones "largas" y rojo cuando se cumplan las condiciones "cortas":

    largo = ((rsi < 15 o rsi[1] < 15 o rsi[2] < 15) y (dds10 < 25))

    corto = ((rsi > 85 o rsi[1] > 85 o rsi[2] > 85) y (dds10 > 85))

    ¿Alguien aquí sabe cómo hacer eso?

    Gracias de antemano Felipe

    //@version=5
    indicator('RSI & DT Bressert')
    HighlightBreaches = input(true, title='Highlight Oversold/Overbought?')
    period = input.int(defval=13, title='Period', minval=1, maxval=16)
    top = 85
    bot = 25
    len = input.int(2, minval=1, title='Length')
    src = input(close, 'Source')
    up = ta.rma(math.max(ta.change(src), 0), len)
    down = ta.rma(-math.min(ta.change(src), 0), len)
    rsi = down == 0? 100: up == 0? 0: 100 - 100 / (1 + up / down)
    plot(rsi, 'RSI', color=color.new(#C0C0C0, 0))
    period10 = input(title='Periodes', defval=10)
    period5 = input(title='Periodes', defval=5)
    stochastic10 = ta.ema((close - ta.lowest(low, period10)) / (ta.highest(high, period10) - ta.lowest(low, period10)) * 100, 3)
    dds10 = ta.ema((stochastic10 - ta.lowest(stochastic10, period10)) / (ta.highest(stochastic10, period10) - ta.lowest(stochastic10, period10)) * 100, 3)
    stochastic5 = ta.ema((close - ta.lowest(low, period5)) / (ta.highest(high, period5) - ta.lowest(low, period5)) * 100, 3)
    dds5 = ta.ema((stochastic5 - ta.lowest(stochastic5, period5)) / (ta.highest(stochastic5, period5) - ta.lowest(stochastic5, period5)) * 100, 3)
    hline(title='OB', price=top, color=color.black)
    hline(title='OS', price=bot, color=color.black)
    plot(series=dds10, color=dds10[1] < dds10? color.green: color.red, linewidth=2)
    plot(series=dds5, color=dds5[1] < dds5? color.blue: color.navy, linewidth=2)


    Solución del problema

    Puede agregar algo como esto al final de su código. Utiliza bgcolor()

    long = ((rsi < 15 or rsi[1] < 15 or rsi[2] < 15) and (dds10 < 25))
    short = ((rsi > 85 or rsi[1] > 85 or rsi[2] > 85) and (dds10 > 85))
    bgcolor(long? color.green: short? color.red: na)

    Error de Azure "Error en la implementación de la plantilla debido a una infracción de la política. Consulte los detalles para obtener más información".

    Error al ejecutar la canalización de referencia de la cuenta en DevOps. Al ejecutar el script de PowerShell que configura automáticamente el registro de actividad, solo se produce un error en algunas suscripciones. Por favor, ayúdame a resolver el siguiente error.

    Mensaje de error: Errores internos: {'code': 'RequestDisallowedByPolicy', 'target': 'ActivityLogs', 'message': 'Resource 'ActivityLogs' fue rechazado por la política. Identificadores de política: '[{"policyAssignment":{"name":"Denegar la modificación de la configuración de diagnóstico en el registro de actividad", "id":"/providers/Microsoft.Management/managementGroups/SKT/providers/Microsoft.Authorization/policyAssignments /PA_201027_C_005"}, "policyDefinition":{"name":"Denegar la modificación de la configuración de diagnóstico en el registro de actividad", "id":"/providers/Microsoft.Management/managementGroups/SKT/providers/Microsoft.Authorization/policyDefinitions/ ff8f7238-2c3c-549f-9613-fcf1b62962a0"}}]'.', 'información adicional': [{'tipo': ']', 'ruta': 'properties.logs[ ]', 'expressionValue': 8, 'targetValue': 1, 'operator': 'GreaterOrEquals'}, {'result': 'True', 'expressionKind': ' Field', 'expression': 'Microsoft.Insights/diagnosticSettings/storageAccountId', 'path': 'properties.storageAccountId', 'expressionValue': '',

    Registro de actividad -> Validar implementación -> Contenido "Json"

    fue rechazado por la política. Identificadores de política: '[{\"policyAssignment\":{\"name\":\"Denegar modificación de la configuración de diagnóstico en el registro de actividad\",\"id\":\"/providers/Microsoft.Management/managementGroups/ SKT/providers/Microsoft.Authorization/policyAssignments/PA_201027_C_005\"},\"policyDefinition\":{\"name\":\"Denegar la modificación de la configuración de diagnóstico en el registro de actividad\",\"id\":\" /providers/Microsoft.Management/managementGroups/SKT/providers/Microsoft.Authorization/policyDefinitions/ff8f7238-2c3c-549f-9613-fcf1b62962a0\"}}]'.","AdditionalInfo":[{"type":"PolicyViolation" }]}]}}", "categoría de evento": "Administrativo", "entidad": "


    Solución del problema

    Parece que tiene asignada una política de Azure que bloquea las modificaciones de los registros de actividad. Si tiene permisos, puede ver las definiciones de política en su suscripción y agregar una excepción para lo que está tratando de hacer. Si no es el administrador de su suscripción, deberá comunicarse con ellos para agregar la excepción o eliminar la política.

    Descripción general de la política

    https://docs.microsoft.com/en-us/azure/governance/policy/overview

    Excepciones de la política

    https://docs.microsoft.com/en-us/azure/governance/policy/concepts/exemption-structure

    Cómo editar datos de forma dinámica creada en angular 8

    Soy nuevo en el desarrollo de Angular. En mi proyecto, tengo un formulario con un cuadro de entrada para agregar y eliminar dinámicamente usando el botón Agregar y Eliminar en la aplicación Angular 8. Después de enviar el formulario, quiero mostrar y editar los campos de entrada con el mismo botón Agregar y Eliminar. ¿Cómo puedo lograr la funcionalidad en edit.

    Comparto la URL de stackblitz para crear un formulario dinámico con el botón Agregar y quitar. Necesito el mismo formulario para editar. ¿Alguien puede ayudarme a dar solución?
    https://stackblitz.com/edit/angular-dynamic-form-fields-y2ijvu?file=src%2Fapp%2Fapp.component.ts


    Solución del problema

    Para llenar los teléfonos con valores recibidos dinámicamente (por ejemplo, de api), deberá agregar un parámetro addPhone()y llamarlo al iterar sobre los valores recibidos.

     addPhone(phone: string): void {
    (this.userForm.get('phones') as FormArray).push(phone);
    }

    receivedPhones.forEach(phone => this.addPhone(phone))

    o podría .setValue()o .patchValue()de FormArray así:

    this.userForm.get('phones').setValue(receivedPhones)

    ( setValue()requiere que la matriz tenga el mismo número de miembros)

    Es posible compartir un formulario para editar y ver situaciones, simplemente agregue una bandera isNew, complétela y utilícela. A menudo, la funcionalidad de edición reside en una ruta diferente (.../editar) que le permite proporcionar la definición isNew: truede la ruta.data

    Personalizar gráfico de caja flotante: Python para ajustar texto

    ¿Hay alguna manera de personalizar el cuadro de texto flotante en plotly? El texto que tengo que mostrar en el cuadro flotante es bastante largo y no cabe en la pantalla. ¿Hay alguna manera de cambiar las dimensiones del cuadro de texto flotante o hacer que el texto sea más pequeño para que quepa todo en la pantalla? Aún mejor sería un cuadro fijo en el costado del gráfico que muestra la nota correspondiente a medida que me desplazo sobre ese punto de datos, pero no estoy seguro de cómo hacerlo.

    Aquí hay una muestra de lo que estoy tratando de hacer con un texto de longitud similar.

    import plotly.plotly as py
    from plotly.graph_objs import *
    import plotly
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    notes=["Clinton is also navigating delicate ties with Israel and the American Jewish community, an influential group of voters and donors. Israeli Prime Minister Benjamin Netanyahu, a fierce critic of the Obama administration's outreach to Iran, described the framework deal as a threat to the very survival of his nation.", "Fire crews in Cambria County were called to the Revloc duplex Friday morning and found much of the building engulfed in flames. Chief Deputy Coroner Jeffrey Leeds said at least seven people were in the duplex and all, but one, were able to get out safely.Witnesses said Jake Lewis, 24, re-entered the house to rescue 65-year-old Anna LaJudice. But father, Robert LaJudice, told The (Altoona) Mirror.Their bodies were later recovered. The deputy coroner said autopsies determined that both died from smoke and gas inhalation.", "As crews worked to tear down the rest of the home, Ott said she planned to attend a church service and say a prayer for the family."]
    balance=[1000,2000,4000]
    dates=[1,2,3]
    data1 = Data([
    Scatter(
    x=dates,
    y=balance,
    mode='markers',
    text=notes,
    )
    ])
    layout = Layout(
    title='Hover over the points to see the text',autosize=True,
    )
    fig = Figure(data=data1, layout=layout,)
    fig['layout'].update(
    hovermode='closest',
    showlegend=False,
    autosize=True,
    )
    plot_url = py.plot(fig, filename='hover-chart-basic')
    py.plot(fig, filename='hover-chart-basic')

    ¡Cualquier ayuda sería muy apreciada!


    Solución del problema

    Es posible que desee buscar en las anotaciones para crear un cuadro de texto fijo. Consulte nuestra documentación aquí: https://plot.ly/python/text-and-annotations/ Verá cómo especificar tamaños de fuente para anotaciones o texto flotante.

    Orden de SQL Server por procedimiento

    Tengo la siguiente consulta que funciona bien en SQL Server:

    SELECT InvoiceID, SUM(UnitPrice)
    FROM Sales.InvoiceLines
    GROUP BY InvoiceID
    ORDER BY InvoiceID

    Cuando lo pongo en un procedimiento order byno se acepta la cláusula:

    CREATE OR ALTER PROCEDURE dbo.ReportsSales
    AS
    SET NOCOUNT ON
    BEGIN (
    SELECT InvoiceID, SUM(UnitPrice)
    FROM Sales.InvoiceLines
    GROUP BY InvoiceID
    ORDER BY InvoiceID)
    END;
    EXEC dbo.ReportsSales;

    ¿Por qué es eso y hay alguna forma recomendada de tratarlo?


    Solución del problema

    No debe usar corchetes alrededor de SELECTen el procedimiento:

    CREATE OR ALTER PROCEDURE dbo.ReportsSales
    AS
    BEGIN
    SET NOCOUNT ON;
    SELECT InvoiceID, SUM(UnitPrice)
    FROM Sales.InvoiceLines
    GROUP BY InvoiceID
    ORDER BY InvoiceID;
    END;
    GO
    -- execute it
    EXEC dbo.ReportsSales;

    Entonces deberías estar bien.

    Configuración de variables en copo de nieve

    Quiero definir variables antes de una tabla CTE y después de una tabla CTE porque algunas variables dependen del resultado de la tabla CTE. Por ejemplo

    SET(K,B) = (5,2);
    with my_data as (
    -- data table as cte
    select
    1 as Key,
    3 as Index,
    10 as Value
    union all
    select
    1,
    5,
    18
    union all
    select
    1,
    14,
    4
    union all
    select
    2,
    2,
    11
    union all
    select
    2,
    13,
    24
    union all
    select
    2,
    29,
    40
    )
    SELECT VALUE + $K
    FROM my_data

    Este ejemplo funciona perfectamente. Pero este código:

    SET(K,B) = (5,2);
    with my_data as (
    -- data table as cte
    select
    1 as Key,
    3 as Index,
    10 as Value
    union all
    select
    1,
    5,
    18
    union all
    select
    1,
    14,
    4
    union all
    select
    2,
    2,
    11
    union all
    select
    2,
    13,
    24
    union all
    select
    2,
    29,
    40
    )
    SET AVG_VAL = (SELECT AVG(VALUE) FROM my_data);
    SELECT VALUE + $AVG_VAL
    FROM my_data

    no porque copo de nieve me da este error "Error de compilación de SQL: línea de error de sintaxis 34 en la posición 0 inesperado 'SET'". ¿Debería crear una tabla temporal para almacenar el resultado de esta consulta (SELECCIONAR PROMEDIO (VALOR) DE my_data) y luego incluir/usar esta tabla temporal para consultas futuras en lugar de una variable?


    Solución del problema

    Esto se puede hacer como en -

    select * from d2;
    +-----+-----+
    | ID1 | ID2 |
    |-----+-----|
    | 1 | 2 |
    | 100 | 2 |
    | 3 | 4 |
    | 300 | 4 |
    +-----+-----+

    Variable de ajuste -

    set (var1) = (select sum(id2) from d2);
    +----------------------------------+
    | status |
    |----------------------------------|
    | Statement executed successfully. |
    +----------------------------------+

    Usando variables -

    select id1+$var1 from d2;
    +-----------+
    | ID1+$VAR1 |
    |-----------|
    | 13 |
    | 112 |
    | 15 |
    | 312 |
    +-----------+

    Python-camelot (Error: GhostscriptNotFound mientras está instalado)

    Estoy tratando de extraer datos tabulares de pdf usando camelot y recibo el siguiente error.

    Código:

    tables = camelot.read_pdf(file_name)

    Error:

    GhostscriptNotFound: asegúrese de que Ghostscript esté instalado y disponible en la variable de entorno PATH

    Ya instalé Ghostscript y lo tengo disponible en la variable de entorno PATH.

    Encuentre a continuación los detalles de la versión:


    • Windows-10-10.0.17134-SP0

    • Python 3.6.5 |Anaconda, Inc.| (predeterminado, 29 de marzo de 2018, 13:32:41) [MSC v.1900 64 bits (AMD64)]

    • NumPy 1.14.3

    • OpenCV 3.4.3

    • Camelot 0.3.2


    Por favor, ayuda a resolver este problema.


    Solución del problema

    Me di cuenta que. Si está utilizando Python de 64 bits, necesita instalar ghostcript de 64 bits, de lo contrario, 32 bits.

    También configure la ruta para 64 bits: C:\Program Files\gs\gs9.26\bin C:\Program Files\gs\gs9.26\lib

    o por debajo de 32 bits C:\Archivos de programa (x86)\gs\gs9.26\bin C:\Archivos de programa (x86)\gs\gs9.26\lib

    ¿Qué está haciendo la siguiente MACRO?

    #define DEFINE_VECTOR_MEMBER_DATA_S(T,c,n,s) T c ##:: ## n[s]

    Lo tengo en el código heredado. Está compilado por MSVC 2022, pero no con Clang. Planeo reemplazarlo, pero antes necesito saber qué hace.


    Solución del problema

    Define un vector que es un miembro estático de una clase.

    tipo T_
    clase c_
    Nombre del vector n.
    Tamaño del vector s.

    ##pega 2 piezas juntas, pero no es necesario de todos modos.

    Si el enlazador dice que falta el vector, simplemente agregue:

    T c::n[s];

    En un .cpparchivo con las partes reemplazadas en consecuencia.

    Anular el constructor predeterminado de una clase parcial con otra clase parcial

    No creo que esto sea posible, pero si lo es, entonces lo necesito:)

    Tengo un archivo proxy generado automáticamente desde la herramienta de línea de comandos wsdl.exe de Visual Studio 2008.

    La salida del proxy son clases parciales. Quiero anular el constructor predeterminado que se genera. Preferiría no modificar el código ya que se genera automáticamente.

    Intenté crear otra clase parcial y redefinir el constructor predeterminado, pero eso no funciona. Luego intenté usar la anulación y las nuevas palabras clave, pero eso no funciona.

    Sé que podría heredar de la clase parcial, pero eso significaría que tendría que cambiar todo nuestro código fuente para apuntar a la nueva clase principal. Preferiría no tener que hacer esto.

    ¿Alguna idea, solución o truco?

    //Auto-generated class
    namespace MyNamespace {
    public partial class MyWebService: System.Web.Services.Protocols.SoapHttpClientProtocol {
    public MyWebService() {
    string myString = "auto-generated constructor";
    //other code...
    }
    }
    }
    //Manually created class in order to override the default constructor
    namespace MyNamespace {
    public partial class MyWebService: System.Web.Services.Protocols.SoapHttpClientProtocol {
    public override MyWebService() { //this doesn't work
    string myString = "overridden constructor";
    //other code...
    }
    }
    }


    Solución del problema

    A veces no tiene acceso o no está permitido cambiar el constructor predeterminado, por esta razón no puede tener el constructor predeterminado para llamar a ningún método.

    En este caso, puede crear otro constructor con un parámetro ficticio y hacer que este nuevo constructor llame al constructor predeterminado usando ": this ()"

    public SomeClass(int x): this()
    {
    //Your extra initialization here
    }

    Y cuando crea una nueva instancia de esta clase, simplemente pasa un parámetro ficticio como este:

    SomeClass objSomeClass = new SomeClass(0);

    Encontrar el valor MAX usando BUSCARV con muchos "ID" duplicados

    Usando una fórmula de Excel, estoy tratando de obtener el valor MAX para un NOMBRE que tiene una LETRA determinada al lado.

    Por ejemplo: # más alto para un % específico para cada nombre único

    Entonces, el valor Q de Jeff sería 7.

    (Estoy tratando de explicar en exceso porque tiene sentido en mi mente, pero puede que no tenga sentido para otros...)

    Name % #
    Jeff O 4
    Jeff D 3
    Jeff Q 4
    Jeff O 1
    Jeff D 9
    Jeff Q 7
    Tom O 6
    Tom D 7
    Tom Q 8
    Tom O 2
    Tom D 8
    Tom Q 3
    Peter O 3
    Peter D 8
    Peter Q 7
    Peter O 4
    Peter D 10
    Peter Q 3
    Bob O 2
    Bob D 6
    Bob Q 10
    Bob O 6
    Bob D 10
    Bob Q 9
    Mark O 4
    Mark D 7
    Mark Q 4
    Mark O 7
    Mark D 8
    Mark Q 1

    No puedo pensar en una manera de ejecutar esto sin tener hojas de trabajo dedicadas para cada persona y ejecutar MAX en la columna específica.

    Probé IF, VLOOKUP y MAX en varias configuraciones pero no obtengo nada.

    ¿Alguien tiene alguna experiencia con esto y podría indicarme la dirección correcta?


    Solución del problema

    La MAXIFSfunción debe ser lo que quieres. Por ejemplo, suponiendo que tiene sus datos en las columnas A:C, la fórmula

    =MAXIFS(C:C,A:A,"Jeff",B:B,"Q")

    le dará el número máximo en la columna C donde el valor en la fila A es "Jeff" y el valor en la fila B es "Q".

    Incrustación de datos 3D en Pytorch

    Quiero implementar incrustaciones a nivel de carácter.

    Esta es la incrustación de palabras habitual.

    Incrustación de palabras

    Input: [ ['who', 'is', 'this'] ] 
    -> [ [3, 8, 2] ] # (batch_size, sentence_len)
    -> // Embedding(Input)
    # (batch_size, seq_len, embedding_dim)

    Esto es lo que quiero hacer.

    Incrustación de personajes

    Input: [ [ ['w', 'h', 'o', 0], ['i', 's', 0, 0], ['t', 'h', 'i', 's'] ] ]
    -> [ [ [2, 3, 9, 0], [ 11, 4, 0, 0], [21, 10, 8, 9] ] ] # (batch_size, sentence_len, word_len)
    -> // Embedding(Input) # (batch_size, sentence_len, word_len, embedding_dim)
    -> // sum each character embeddings # (batch_size, sentence_len, embedding_dim)
    The final output shape is same as Word embedding. Because I want to concat them later.

    Aunque lo probé, no estoy seguro de cómo implementar la incrustación 3D. ¿Sabes cómo implementar esos datos?

    def forward(self, x):
    print('x', x.size()) # (N, seq_len, word_len)
    bs = x.size(0)
    seq_len = x.size(1)
    word_len = x.size(2)
    embd_list = []
    for i, elm in enumerate(x):
    tmp = torch.zeros(1, word_len, self.embd_size)
    for chars in elm:
    tmp = torch.add(tmp, 1.0, self.embedding(chars.unsqueeze(0)))

    El código anterior obtuvo un error porque la salida de self.embeddinges Variable.

    TypeError: torch.add received an invalid combination of arguments - got (torch.FloatTensor, float, Variable), but expected one of:
    * (torch.FloatTensor source, float value)
    * (torch.FloatTensor source, torch.FloatTensor other)
    * (torch.FloatTensor source, torch.SparseFloatTensor other)
    * (torch.FloatTensor source, float value, torch.FloatTensor other)
    didn't match because some of the arguments have invalid types: (torch.FloatTensor, float, Variable)
    * (torch.FloatTensor source, float value, torch.SparseFloatTensor other)
    didn't match because some of the arguments have invalid types: (torch.FloatTensor, float, Variable)

    Actualizar

    Yo podría hacer esto. Pero forno es efectivo para lotes. ¿Conocen una forma más eficiente?

    def forward(self, x):
    print('x', x.size()) # (N, seq_len, word_len)
    bs = x.size(0)
    seq_len = x.size(1)
    word_len = x.size(2)
    embd = Variable(torch.zeros(bs, seq_len, self.embd_size))
    for i, elm in enumerate(x): # every sample
    for j, chars in enumerate(elm): # every sentence. [ ['w', 'h', 'o', 0], ['i', 's', 0, 0], ['t', 'h', 'i', 's'] ]
    chars_embd = self.embedding(chars.unsqueeze(0)) # (N, word_len, embd_size) ['w','h','o',0]
    chars_embd = torch.sum(chars_embd, 1) # (N, embd_size). sum each char's embedding
    embd[i,j] = chars_embd[0] # set char_embd as word-like embedding
    x = embd # (N, seq_len, embd_dim)

    Actualizar2

    Este es mi código final. ¡Gracias, Wasi Ahmad!

    def forward(self, x):
    # x: (N, seq_len, word_len)
    input_shape = x.size()
    bs = x.size(0)
    seq_len = x.size(1)
    word_len = x.size(2)
    x = x.view(-1, word_len) # (N*seq_len, word_len)
    x = self.embedding(x) # (N*seq_len, word_len, embd_size)
    x = x.view(*input_shape, -1) # (N, seq_len, word_len, embd_size)
    x = x.sum(2) # (N, seq_len, embd_size)
    return x


    Solución del problema

    Supongo que tienes un tensor de forma 3d BxSxWdonde:

    B = Batch size
    S = Sentence length
    W = Word length

    Y ha declarado la capa de incrustación de la siguiente manera.

    self.embedding = nn.Embedding(dict_size, emsize)

    Donde:

    dict_size = No. of unique characters in the training corpus
    emsize = Expected size of embeddings

    Entonces, ahora necesita convertir el tensor de forma 3d en un tensor de forma BxSxW2d BSxWy dárselo a la capa de incrustación.

    emb = self.embedding(input_rep.view(-1, input_rep.size(2)))

    La forma de embserá BSxWxEdonde Eestá el tamaño de incrustación. Puede convertir el tensor 3d resultante en un tensor 4d de la siguiente manera.

    emb = emb.view(*input_rep.size(), -1)

    La forma final de embserá BxSxWxEla que esperas.

    No se pueden asignar valores a la matriz de punteros en C

    Quiero copiar mi matriz en un puntero, para poder ordenar la matriz sin cambiar el original. No recibo ningún error y estoy en un callejón sin salida. Intenté imprimir el contenido del puntero, pero siempre son datos no deseados. Si alguien pudiera ayudarme sería muy apreciado.

    #include <stdio.h>
    void bubbleSort(char *array[], int arrIndex);
    void displaySort (char *array[], int arrIndex);
    int main (void)
    {
    int index;
    int count = 0;

    printf("Enter number of people (0 - 50): ");
    scanf("%d", &index);
    index -= 1;

    char userLastFirst[25][index];
    int userAge[index];
    //defining pointer
    char *namePtr[25][index];

    //do while loop, loops while count is less than or equal to the index
    do{
    printf("Enter name %d (last, first): ", count);
    scanf(" %[^\n]s", userLastFirst[count]);
    printf("Enter age %d: ", count);
    scanf("%d", &userAge[count]);

    // printf("\n\n%s %d\n\n", userLastFirst[count], userAge[count]);

    count++;
    } while (count <= index);

    //assigning values to pointer
    for(int i = 0; i < index; i++){
    namePtr[25][i] = &userLastFirst[25][i];
    }
    //does not print values of pointer
    for(int i = 0; i < index; i++){
    printf("value of ptr[%d] = %s\n", i, namePtr[i]);
    }

    bubbleSort(*namePtr, index);

    displaySort(*namePtr, index);
    return 0;
    }
    void bubbleSort(char *array[], int arrIndex)
    {
    for (unsigned int pass = 0; pass < arrIndex - 1; ++pass) {
    for (int i = 0; i < arrIndex - 1; ++i) {
    if (array[i] < array[i + 1]) {
    int temp = *array[i];
    *array[i] = *array[i + 1];
    *array[i + 1] = temp;
    }
    }
    }
    }
    void displaySort(char *array[], int arrIndex)
    {
    for(int i = 0; i < arrIndex; i++){
    printf("%s",*array[i]);
    }
    }

    Lo siento, es mucho, pero he buscado por todas partes y no estoy exactamente seguro de cuál es el problema. Sospecho que es cómo paso los punteros a través de las funciones, o cómo estoy usando *, &pero no estoy totalmente seguro de lo que estoy haciendo mal. El bucle for debajo del que asigna los valores de matriz al puntero es para probar. Se supone que debe imprimir los valores que le di en el bucle for anterior, pero no lo hace. Solo imprime datos basura.


    Solución del problema

    Hay un par de problemas aquí, y dado que no sé exactamente cómo quiere que se vea su código final, voy a dar algunos ejemplos de lo que está mal y cómo podría solucionarlo.

    char userLastFirst[25][index];

    Esto debería ser

    char userLastFirst[index][25];

    No desea 25 personas con nombres de hasta 25 caracteres en ellos, sino más bien indexar personas con nombres de hasta 25 caracteres en ellos.

    char *namePtr[25][index];

    debiera ser

    char namePtr[index][25];

    Igual que antes + no necesita el * aquí. Ya que decidiste ir con vla, sigamos con eso. Usaría * y más específicamente char **si fuera con malloc/ calloc.

    namePtr[25][i] = &userLastFirst[25][i];

    en lugar de hacer esta copia incómoda, intente:

    strcpy(namePtr[i], userLastFirst[i]);

    copia la cadena completa para usted, en lugar de solo un carácter. Necesitarás #includela <string.h>biblioteca para eso.

    void bubbleSort(char *array[], int arrIndex)

    El primer argumento de clasificación de burbuja debería ser:

    char array[][25] // the same in displaySort

    si quieres hacerlo sin la molestia de malloc/ calloc. Y tampoco vayas con inttu temptipo. Más bien hazlo char temp[25]y cópialo con strcpy. Y no compare cadenas con <, no funciona en C. Úselo strcmppara eso. Y eso es todo por hacerlo sin malloc/ calloc, aquí hay un código de ejemplo:

    #include <stdio.h>
    #include <string.h>
    void bubbleSort(char array[][25], int size);
    void displaySort(char array[][25], int size);
    int main (void)
    {
    int num_of_people;
    printf("Enter number of people (0 - 50): ");
    scanf("%d", &num_of_people);
    char original_array[num_of_people][25];
    char copied_array[num_of_people][25];
    for (int i = 0; i < num_of_people; i++) {
    printf("Enter name %d (last, first): ", i);
    scanf(" %[^\n]s", original_array[i]);
    }

    for(int i = 0; i < num_of_people; i++){
    strcpy(copied_array[i], original_array[i]);
    }
    bubbleSort(copied_array, num_of_people);
    displaySort(copied_array, num_of_people);
    return 0;
    }
    void bubbleSort(char array[][25], int size)
    {
    for (int i = 0; i < size - 1; ++i) {
    for (int j = 0; j < size - 1 - i; ++j) {
    if (strcmp(array[j], array[j + 1]) > 0) {
    char temp[25];
    strcpy(temp, array[j]);
    strcpy(array[j], array[j + 1]);
    strcpy(array[j + 1], temp);
    }
    }
    }
    }
    void displaySort(char array[][25], int size)
    {
    for(int i = 0; i < size; i++){
    printf("%s\n",array[i]);
    }
    }

    y el programa funciona así:

    Enter number of people (0 - 50): 4
    Enter name 0 (last, first): Kowalski, Jan
    Enter name 1 (last, first): Kowalska, Anna
    Enter name 2 (last, first): Nowak, Miłosz
    Enter name 3 (last, first): Amper, Ohm
    Amper, Ohm
    Kowalska, Anna
    Kowalski, Jan
    Nowak, Miłosz

    Espero que esto sea algo que quisieras lograr.

    Redondeo al segundo lugar decimal en python [duplicado]

    Esta pregunta ya tiene respuestas aquí:


    Solución del problema

    Puede utilizar la roundfunción integrada para redondear un número hasta 2 decimales. Parece que solo necesita incluir esto en las funciones milesToKilometersy kilometers to miles.

    def milesToKilometers(miles):
    mileConverstion = miles * 1.60934
    return round(mileConverstion, 2)
    def kilometersToMiles(kilometers):
    kilometerConverstion = kilometers * 0.621371
    return round(kilometerConverstion, 2)

    Nota: si desea que la salida mantenga los ceros finales, por ejemplo 2.10, debe convertirla en una cadena, ya que los valores numéricos omiten los ceros finales. Puede convertir a una cadena como esta:

    with_decimals = f'{round(number, 2):.2f}'

    Bloqueo del sistema usando pandas para datetimeindex

    Estoy tratando de abrirme camino a través de este tutorial de RealPython en el paquete de visualización de Python llamado bokeh https://realpython.com/lessons/using-columndatasource-object/#transcript. Esta versión de video tiene 2,5 años y la versión de texto que la precedió tiene 3,5 años https://realpython.com/python-data-visualization-bokeh/#generating-your-first-figure. No hace falta decir que aquí y allá tampoco funcionan como se esperaba debido a cambios en los programas afectados.

    En este punto en particular, estoy tratando de poner un índice de fecha y hora en un marco de datos que se creó a partir de algunos datos CSV. El problema es que cada vez que ejecuto esto, una vez anoche y dos veces esta mañana, todo el sistema se congela y tengo que reiniciar la computadora. No hay mensaje de error u otra salida.

    Python 3.9.12 bokeh 2.4.2 pandas 1.3.3 Ubuntu 20.04 LTS PyCharm 2020.1

    Aquí está el guión:

    import pandas as pd
    from pandas import Timestamp
    from datetime import datetime, date
    import time
    start = time.time()
    player_stats = pd.read_csv('data/2017-18_playerBoxScore.csv', index_col='gmDate')
    team_stats = pd.read_csv('data/2017-18_teamBoxScore.csv', index_col='gmDate')
    standings = pd.read_csv('data/2017-18_standings.csv', index_col='stDate')
    dti_p = pd.DatetimeIndex(player_stats.index)
    dti_t = pd.DatetimeIndex(team_stats.index)
    dti_s = pd.DatetimeIndex(standings.index)
    player_stats.replace(to_replace=player_stats.index, value=dti_p, inplace=True)
    team_stats.replace(to_replace=team_stats.index, value=dti_t, inplace=True)
    standings.replace(to_replace=standings.index, value=dti_s, inplace=True)
    end = time.time()
    prgrm = start-end
    print(f"start: {start}")
    print(f"total time = {prgrm}")
    print(f"end: {end}")

    Esta versión usa DatetimeIndex() y replace(), pero anteriormente probé.apply() y Timestamp.date() sin éxito. Al escribir esta publicación, ejecuté el script nuevamente solo para ver qué cobertura y el depurador me darían antes de publicar y ahora, por razones que no puedo explicar, recibo un error:

    /home/malikarumi/.virtualenvs/chronicle/lib/python3.9/site-packages/pandas/core/indexing.py
    def _validate_key_length(self, key: Sequence[Any]) -> None:
    line 791 → if len(key) > self.ndim:
    raise IndexingError("Too many indexers")
    (<class 'pandas.core.indexing.IndexingError'>, IndexingError('Too many indexers'), <traceback object at 0x7fe8c8d45b80>)

    Su ayuda muy apreciada.


    Solución del problema

    ¿Esto da el resultado deseado? (para player_stats)

    player_stats = pd.read_csv('data/2017-18_playerBoxScore.csv')
    player_stats['gmDate'] = pd.to_datetime(player_stats['gmDate'])
    player_stats.set_index('gmDate', inplace=True)

    cómo contar caracteres en una cadena y cómo contar números impares JS

    estoy en mi primera semana de aprendizaje de javascript; Estoy un poco confundido sobre cómo abordar estas preguntas. Tenga en cuenta que NO debe iniciar sesión en la consola; el código debe ejecutarse exactamente como está escrito para verificar.

    Escriba una función llamada contarCaracteres que tome un argumento llamado palabra, que es una cadena. Cuando se invoca countCharacters, devolverá el número de caracteres que hay en la palabra

    countCharacters('hello') // => should return 5
    countCharacters('cookie monster') // => should return 14
    countCharacters('abcdefghijklmnopqrstuvwxyz') // => should return 26

    Para esta pregunta, estoy atascado en cómo escribir una función que cuente los caracteres en una cadena.

    function odd(myArray) {
    for (let i = 0; i < myArray.length; i++) {
    if (myArray.length[i] % 2 === 1) {
    return myArray);
    }
    }
    }

    Escriba una función llamada impar que tome un argumento llamado myArray, que es una matriz de números. Cuando se invoca impar, registrará en la consola todos los números de la matriz que son impares.

    odd([1, 4, 6, 7, 3]) // => should log 1, 7, & 3;
    odd([3, 4, 1, 7, 13]) // => should log 3, 1, 7, & 13

    o esta pregunta lo he intentado

    function odd(myArray) {
    for (let i = 0; i < myArray.length; i++) {
    if (myArray.length[i] % 2 === 1) {
    return myArray);
    }
    }
    }


    Solución del problema

    String tiene una propiedad de longitud. Representa la longitud de un String.


    function countCharacters(input) {
    console.log(input.length)
    }
    countCharacters('hello')
    countCharacters('cookie monster')
    countCharacters('abcdefghijklmnopqrstuvwxyz')

    lunes, 2 de mayo de 2022

    Vlookup para estado duplicado

    He estado buscando diferentes enfoques para solucionar mi problema, ya sea con vlookup, index, index/match, pero aún no pude resolverlo.

    Estoy tratando de enumerar los mismos co-inquilinos del mismo apartamento en la misma línea que se muestra en la imagen. ¡gracias por la ayuda!

    un


    Solución del problema

    Un enfoque VBA

    Sub list()
    Dim wb As Workbook, ws As Worksheet
    Dim iRow As Long, iHeaderRow As Long
    Dim sApt As String, sStatus, sName As String
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")
    Set wb = ThisWorkbook
    Set ws = wb.Sheets("Sheet1")
    iRow = 4 'start
    sApt = CStr(ws.Cells(iRow, 1))
    Do While Len(sApt) > 0
    sStatus = ws.Cells(iRow, 2)
    sName = ws.Cells(iRow, 3)
    If Not dict.exists(sApt) Then
    dict.Add sApt, ""
    End If
    If LCase(sStatus) = "main" Then
    dict(sApt) = sName & dict(sApt) ' add to front
    Else
    dict(sApt) = dict(sApt) & ";" & sName ' add to back
    End If
    iRow = iRow + 1
    sApt = CStr(ws.Cells(iRow, 1))
    Loop
    ' result header
    iHeaderRow = iRow + 1
    ws.Cells(iHeaderRow, 1) = "Apt"
    ws.Cells(iHeaderRow, 2) = "Main"
    iRow = iRow + 2
    ' result table
    Dim k As Variant, ar As Variant, n As Integer, m As Integer
    For Each k In dict.keys
    ws.Cells(iRow, 1) = k
    ar = Split(dict(k), ";")
    n = UBound(ar)
    ws.Cells(iRow, 2).Resize(1, n + 1) = ar
    If n > m Then m = n ' max for n
    iRow = iRow + 1
    Next
    ' complete header row
    For n = 1 To m
    ws.Cells(iHeaderRow, n + 2) = "Co-tenant"
    Next
    MsgBox "Done"
    End Sub

    microsoft word - expresión regular con corchetes y formato?

    Intentando usar expresiones regulares en MS Word, consulte https://www3.ntu.edu.sg/home/ehchua/programming/howto/PowerUser_MSOffice.html

  • ¿Cómo encuentro todo el texto "{texto}" en el documento de Word? Esta expresión regular funciona en text/regex \{(.*?)\} pero no funciona en Word.

  • Además, ¿hay alguna forma de formatear esto automáticamente con un estilo si se encuentra?


  • Solución del problema

    En MS Word, los comodines tienen una funcionalidad algo limitada y no puede traducir el *cuantificador exactamente ( {0,}no funciona por alguna razón). Entonces, lo que puedes usar es

    (\{[!{}]@})

    y reemplazar con \1.

    Para aplicar algún formato o estilo, debe seleccionarlo en la esquina inferior izquierda de la ventana de diálogo Buscar y reemplazar cuando el cursor esté en el campo de texto de reemplazo.

    Detalles del patrón:


    • (- comienzo de la captura del grupo #1

      • \{{- un carácter literal

      • [!{}]@- uno o más ( @) caracteres distintos de {y }(emparejados con [!{}])

      • }- un }char.



    • )- Fin del grupo.

    Cambiar el color de fondo del encabezado cuando la página se desplaza en el encabezado fijo

    tengo un encabezado transparente pegajoso usando el siguiente código css en mi sitio web www.obviagency.com

    CÓDIGO CSS:

    #site-header-inner {
    height:0px;
    z-index:170;
    margin:0 auto;
    width:100%;
    position:fixed;
    top:0;
    margin-top:10px;
    }

    me gustaría cambiar el color de fondo en el desplazamiento a blanco. alguien me puede ayudar por favor porque nada de lo que he intentado funciona:/

    gracias


    Solución del problema

    Tendría que usar JavaScript con un detector de eventos de desplazamiento. Utilicé el azul como ejemplo para que pueda ver el cambio y agregué una propiedad de transición al encabezado para que transcurriera sin problemas.


    let header = document.getElementById('site-header-inner');
    document.addEventListener('scroll', function() {

    // Get the scroll position
    let scrollPos = window.pageYOffset;

    if ( scrollPos > 100 ) {
    header.style.backgroundColor = "white";
    } else {
    header.style.backgroundColor = "blue";
    }


    });

    #site-header-inner {
    height:50px;
    z-index:170;
    margin:0 auto;
    width:100%;
    position:fixed;
    top:0;
    margin-top:10px;
    background-color: blue;
    transition: all 0.3s;
    }
    #section {
    height: 1000px;
    }

    <header id="site-header-inner">
    </header>
    <section id="section">
    </section>

    Crear una nueva matriz y eliminar objetos no deseados de matrices antiguas javascipt

    Tengo 2 matrices que contienen objetos, quiero crear una nueva matriz sin "duplicados". El problema es que las dos matrices no son idénticas y quiero elegir según la identificación. Esta es una versión simple de lo que obtuve:

    let array1 = [
    {
    "id": "1",
    "type": "abc"
    },
    {
    "id": "2",
    "type": "one, two, three"
    }
    ]
    let array2 = [
    {
    "id": "1",
    "type": "abc",
    "country": "England"
    },
    {
    "id": "3",
    "type": "one, two, three",
    "country": "Germany"
    }
    ]
    let array3 = array1.filter(x => array2.forEach(y => x.id === y.id)).concat(array2);

    El resultado que quiero para array3 es:

    {
    "id": "1",
    "type": "abc"
    }

    En este caso particular, el país no es importante y se descartará de todos modos.

    ¿Cómo filtro los objetos no deseados y creo una nueva matriz solo con los objetos que quiero?


    Solución del problema

    Si está buscando una intersección entre las matrices, la respuesta más corta es usar el filtro con un hallazgo.


    let array1 = [{
    id: '1',
    type: 'abc',
    },
    {
    id: '2',
    type: 'one, two, three',
    },
    ];
    let array2 = [{
    id: '1',
    type: 'abc',
    country: 'England',
    },
    {
    id: '3',
    type: 'one, two, three',
    country: 'Germany',
    },
    ];
    const array3 = array1.filter(value => array2.find((a)=>a.id==value.id));
    console.log(array3);

    SKLearn: ¿Obtener la distancia de cada punto desde el límite de decisión?

    Estoy usando SKLearn para ejecutar SVC en mis datos.

    from sklearn import svm
    svc = svm.SVC(kernel='linear', C=C).fit(X, y)

    Quiero saber cómo puedo obtener la distancia de cada punto de datos en X desde el límite de decisión.


    Solución del problema

    Resulta que estoy haciendo la tarea 1 de un curso llamado Técnicas de aprendizaje automático. Y sucede que hay un problema sobre la distancia del punto al hiperplano incluso para el núcleo RBF.

    Primero sabemos que SVM es encontrar un w "óptimo" para un hiperplano wx + b = 0.

    Y el hecho es que

    w = \sum_{i} \alpha_i \phi(x_i)

    donde esos x son los llamados vectores de soporte y esos alfa son coeficientes de ellos. Tenga en cuenta que hay un phi() fuera de la x; es la función de transformación que transforma x en un espacio de dimensión alta (para RBF, es una dimensión infinita). Y sabemos que

    [\phi(x_1)\phi(x_2) = K(x_1, x_2)][2]

    para que podamos calcular

    ingrese la descripción de la imagen aquí

    ingrese la descripción de la imagen aquí

    entonces podemos obtener w. Por lo tanto, la distancia que desea debe ser

    svc.decision_function(x) / w_norm

    donde w_norm es la norma calculada anteriormente.

    (StackOverflow no me permite publicar más de 2 enlaces, así que renderice el látex usted mismo, bah).

    "Solicitud de procesamiento de error invalid_grant" al hacer un bot de reddit

    Estoy creando un bot de reddit que responde algo a un comentario específico.

    Pero recibo este error: solicitud de procesamiento de error invalid_grant

    y no encuentro la solucion.

    aquí está mi código, estoy usando Python.

    import praw
    import time
    import config
    def login():
    r = praw.Reddit(user_agent = "test bot",
    username = config.username,
    password = config.password,
    client_id = config.client_id,
    client_secret = config.client_secret)
    print("logged in")
    return r
    cache = []
    def run_bot(r):
    subreddit = r.subreddit("Test")
    comments = subreddit.get_comments(limit=25)
    for comment in comments:
    comment_text = comment.body.lower()
    if "xD" in comment_text and comment.id not in cache:
    comment.reply("xD")
    cache.append(comment.id)
    while True:
    r = login()
    run_bot(r)
    time.sleep(5)

    rastrear:

     logged in
    Traceback (most recent call last):
    File "xdbot.py", line 28, in <module>
    run_bot(r)
    File "xdbot.py", line 19, in run_bot
    comments = subreddit.get_comments(limit=25)
    File "D:\Programming\Phyton\lib\site-packages\praw\models\reddit\base.py", line 31, in __getattr__
    self._fetch()
    File "D:\Programming\Phyton\lib\site-packages\praw\models\reddit\base.py", line 66, in _fetch
    params=self._info_params)
    File "D:\Programming\Phyton\lib\site-packages\praw\reddit.py", line 367, in get
    data = self.request('GET', path, params=params)
    File "D:\Programming\Phyton\lib\site-packages\praw\reddit.py", line 451, in request
    params=params)
    File "D:\Programming\Phyton\lib\site-packages\prawcore\sessions.py", line 174, in request
    params=params, url=url)
    File "D:\Programming\Phyton\lib\site-packages\prawcore\sessions.py", line 108, in _request_with_retries
    data, files, json, method, params, retries, url)
    File "D:\Programming\Phyton\lib\site-packages\prawcore\sessions.py", line 93, in _make_request
    params=params)
    File "D:\Programming\Phyton\lib\site-packages\prawcore\rate_limit.py", line 32, in call
    kwargs['headers'] = set_header_callback()
    File "D:\Programming\Phyton\lib\site-packages\prawcore\sessions.py", line 134, in _set_header_callback
    self._authorizer.refresh()
    File "D:\Programming\Phyton\lib\site-packages\prawcore\auth.py", line 328, in refresh
    password=self._password)
    File "D:\Programming\Phyton\lib\site-packages\prawcore\auth.py", line 142, in _request_token
    payload.get('error_description'))
    prawcore.exceptions.OAuthException: invalid_grant error processing request


    Solución del problema

    Vuelva a verificar sus credenciales como dice esta nota.

    Recuerda que el nombre de usuario es el nombre de tu cuenta de reddit, no el nombre del bot.

    Cómo sombrear una región bajo una curva usando ggplot2

    He estado tratando de usar ggplot2 para producir una trama similar a este gráfico R:

    xv<-seq(0,4,0.01)
    yv<-dnorm(xv,2,0.5)
    plot(xv,yv,type="l")
    polygon(c(xv[xv<=1.5],1.5),c(yv[xv<=1.5],yv[xv==0]),col="grey")

    Esto es todo lo que he conseguido con ggplot2:

    x<-seq(0.0,0.1699,0.0001) 
    ytop<-dnorm(0.12,0.08,0.02)
    MyDF<-data.frame(x=x,y=dnorm(x,0.08,0.02))
    p<-qplot(x=MyDF$x,y=MyDF$y,geom="line")
    p+geom_segment(aes(x=0.12,y=0,xend=0.12,yend=ytop))

    Me gustaría sombrear la región de la cola más allá de x=0,12. ¿Cómo haría esto usando ggplot o qplot?

    En términos generales, ¿cómo se sombrea cualquier subconjunto debajo de la curva, ya sea una cola o entre dos líneas arbitrarias que dividen la región en áreas distintas?

    Gracias por cualquier consejo.


    Solución del problema

    Crea un polígono con el área que quieres sombrear

    #First subst the data and add the coordinates to make it shade to y = 0
    shade <- rbind(c(0.12,0), subset(MyDF, x > 0.12), c(MyDF[nrow(MyDF), "X"], 0))
    #Then use this new data.frame with geom_polygon
    p + geom_segment(aes(x=0.12,y=0,xend=0.12,yend=ytop)) +
    geom_polygon(data = shade, aes(x, y))

    ingrese la descripción de la imagen aquí

    Usando > y nombre de archivo variable [duplicado]

    Esta pregunta ya tiene respuestas aquí:


    Solución del problema

    Escape de $para evitar que el caparazón se expanda $FILE:

    if [! -e "\$FILE" ]; then
    echo "min_granularity_ns" > \$FILE
    fi

    Nota: Esta no es una gran respuesta, pero explica el problema: la expansión variable antes de que se cree el documento aquí. Así que lo dejo por ahora.

    Obtener la extensión de un MimeType

    Quiero obtener la extensión de un MimeType.

    Por ejemplo:

    video/mp4  ----> mp4
    application/x-rar-compressed ----> rar
    text/plain ----> txt
    application/pdf ----> pdf

    Para guardar mi archivo en Windows o Linux, tengo este método que me permite descargar un archivo desde una URL. Entonces, solo puedo guardarlo sin extensión (no quiero eso).

    Este método solo me permite obtener MimeType, no la extensión.

    public void downloadImage() {
    String dirPath = "/home/MyPC/Downloaded";
    String fileName = "My downloaded file";

    URL fetchFile = new URL(IMAGE_URL);
    byte[] fileAsArray = Resources.toByteArray(fetchFile);

    //Getting the MimeType
    String mimeType = URLConnection.guessContentTypeFromStream(new ByteArrayInputStream(fileAsArray));
    System.out.println(mimeType);
    File fileToWriteTo = new File(dirPath.concat("/" + fileName));
    //Saving the file using Guava
    Files.write(fileAsArray, fileToWriteTo);
    }

    ¿Cómo puedo escribir un archivo con extensión usando MimeType?


    Solución del problema

    Generalmente hay dos formas:


    • tener un mapeo de MimeTypes a extensiones;

    • calcularlo, usando alguna lógica;


    El segundo enfoque realmente no es bueno, así que lo ofrezco solo para completarlo. Para el primer enfoque, puede usar este recurso: https://www.freeformatter.com/mime-types-list.html

    Yo usaría HashMap<K,V>: la clave es MimeType y el valor es la extensión (o similar).

    Flutter: error de rango al acceder a la respuesta JSON

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