arduino – NodeMCU falla al hacer actualizaciones OTA por http

Intento actualizar mediante OTA un nodemcu con display oled con el siguiente codigo:

#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>

#include <ESP8266HTTPClient.h>
#include <ESP8266httpUpdate.h>

ESP8266WiFiMulti WiFiMulti;

int ledState = LOW;

unsigned long previousMillis = 0;
const long interval = 2000;

int count = 0;

void setup() {
  Serial.begin(115200);
  pinMode(LED_BUILTIN, OUTPUT);
}

void ota_update() {

  for (uint8_t t = 4; t > 0; t--) {
    Serial.printf("(SETUP) WAIT %d...n", t);
    Serial.flush();
    delay(1000);
  }

  WiFiMulti.addAP("SSID", "PASS");

  // wait for WiFi connection
  if ((WiFiMulti.run() == WL_CONNECTED)) {

    t_httpUpdate_return ret = ESPhttpUpdate.update("http://server.com/public/update.bin");

    switch (ret) {
      case HTTP_UPDATE_FAILED:
        Serial.printf("HTTP_UPDATE_FAILD Error (%d): %s", ESPhttpUpdate.getLastError(), ESPhttpUpdate.getLastErrorString().c_str());
        break;

      case HTTP_UPDATE_NO_UPDATES:
        Serial.println("HTTP_UPDATE_NO_UPDATES");
        break;

      case HTTP_UPDATE_OK:
        Serial.println("HTTP_UPDATE_OK");
        break;
    }
  }
}

void loop() {

  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {

    previousMillis = currentMillis;

    if (ledState == LOW)
      ledState = HIGH;  
    else
      ledState = LOW;   

    digitalWrite(LED_BUILTIN, ledState);
    Serial.println("Blink LED at 2 seconds interval");

    count = count + 1;
    if (count > 25) ota_update();
  }
}

pero al cargar el sketch me muestra el error:

 ets Jan  8 2013,rst cause:2, boot mode:(3,0)

load 0x4010f000, len 3656, room 16 
tail 8
chksum 0x0c
csum 0x0c
v9c56ed1f
@cp:0
ld
e: ets Jan  8 2013,rst cause:3, boot mode:(3,0)

Tengo entendido que el primer boot es necesario para cargar el nuevo sketch.

Ademas cargo el mismo sketch a otro nodemcu sin el display y funciona sin problemas.

La informacion de la placa es:

Flash real id: 00164020
Flash real size: 4194304 bytes
Flash ide size: 4194304 bytes
Flash ide speed: 40000000 Hz
Flash ide mode: DIO
Flash Chip configuration ok.

Placa que genera error:
Nodemcu Display

Placa sin error:
Nodemcu

**SQL** ¿Porqué al pasarle por parámetro a un Gráfico esta operación aritmética me muestra 0?

SELECT sum(MAESTRO_DE_ARTICULOS.ALTO*ESTRUCTURA_ORDENES.RELACION)
FROM ESTRUCTURA_ORDENES
LEFT JOIN MAESTRO_DE_ARTICULOS ON MAESTRO_DE_ARTICULOS.CODIGO_ARTICULO = ESTRUCTURA_ORDENES.COMPONENTE
WHERE ESTRUCTURA_ORDENES.N_ORDEN = :ParamOrden

Las tablas tienen valores y los Parámetros se envían y reciben correctamente.
Debe ser problema de la query pero no lo veo.

java – ¿Por qué al cerrar un ObjectInputStream con close() se lanza una IOException?

Estoy intentando recuperar los datos de una lista ligada desde un archivo serializable, en este archivo lo que guardo son los nodos de la lista, para esto en mi clase ListaLigadaOrdenada incluyo la siguiente función

public void recuperarLista(String nombreFichero) throws IOException, ClassNotFoundException, FileNotFoundException {
     ObjectInputStream entrada = new ObjectInputStream(new FileInputStream(nombreFichero));
     Nodo aux;
     aux = (Nodo) entrada.readObject();
     aux.setSig(null);
     this.raiz = aux;
     while (aux != null) {
         aux = (Nodo) entrada.readObject();
         if(aux!=null){
             aux.setSig(null);
             this.insertarNodo(aux);
         }
     }
     entrada.close();
 }

Aseguro que siempre haya al menos un objeto en el archivo así que de eso no hay problema, de hecho, recupera todos los nodos guardados en el archivo leído pero siempre lanza una IOException y no logro entender porqué, estas excepciones las capturo en el main y si pongo en el catch de la IOException lo mismo que debería de hacer en el caso de que no ocurriera el programa va de la misma manera.

He puesto algunos println que he quitado en el código de esta publicación y todo va muy bien hasta que llega al close(), puse uno antes de este y otro después y solo el que estaba antes ha salido en consola, lo que me hace pensar que es esta la sentencia que lanza la excepción.

Les agradecería mucho si pudieran ayudarme a entender qué es lo que estoy haciendo mal 🙂

Problema al visibilizar por tipo de archivo en el cuadro de abrir Java Swing

Hola buenas noches tengo un problema cada vez que abro un archivo, porque aunque abre bien el programa no me muestra los archivos por extensión (.txt) en este caso por lo que tengo que poner que me muestre por “todos los archivos” para que pueda encontrar los ficheros de texto que quiero. Probé a crear FileFilters pero al no controlarlo bien no sé que puedo estar haciendo mal, deshice y este es el código que tengo, saludos.

    private void jButton9ActionPerformed(java.awt.event.ActionEvent evt) {                                         
// TODO add your handling code here:

        jLabel1.setText("Abre el archivo actual");
        FileNameExtensionFilter filter = new FileNameExtensionFilter("Documento de texto (.txt)", ".txt");      //Filtro de la extensión de archivo a guardar
        final JFileChooser selector = new JFileChooser();                                                       //Creo el selector
        selector.setApproveButtonText("Abrir");                                                                 //Botón guardar
        selector.setFileFilter(filter);

        int returnVal = selector.showOpenDialog(this);
        if (returnVal != JFileChooser.APPROVE_OPTION) {
            return;
        }

        File archivo = selector.getSelectedFile();
        if (!archivo.getName().endsWith(".txt")) {
            archivo = new File(archivo.getAbsolutePath() + ".txt");

        }
        
        BufferedReader archivo_entrada = null;
        try {
            archivo_entrada = new BufferedReader(new FileReader(archivo));
            jTextArea1.read(archivo_entrada, evt);
        } catch (IOException e) {
        } finally {
            if (archivo_entrada != null) {
                try {
                    archivo_entrada.close();
                    jLabel1.setText("Listo para trabajar!");
                } catch (IOException e) {

                }
            }
        }
    }   

visual studio – ¿Por qué tengo dos toolbars en mi app?

os comento.

Este es un proyecto en Xamarin forms que fui desarrollando poco a poco.
Tengo una Master Page y el proyecto Main se inicia con la misma. El caso es que en esa primera pantalla (probando la app en Android) me aparecen 2 Toolbar una debajo de la otra, una de ellas la que Android crea a través del atributo ToolbarResource y otra que es la creada en la parte compartida del código, la cual pertenece a mi Master Page.

He intentado de mil formas hacer que la Toolbar que crea Android desaparezca en esta primera pantalla (ya que en las siguientes pantallas no me aparece la Toolbar del Master) y ninguna de las soluciones me funciona.
Alguna idea? Os dejo una captura de como se ve esta Toolbar en la pantalla inicial por si os sirve de guía:

(Imagen de las 2 Toolbars1

Como siempre, cualquier dato que necesitéis a más os lo puedo proporcionar sin problema.

P.D. Si ya me ayudáis a cambiarle el color a la barra de arriba del todo os hago un monumento. Muchas gracias.

css3 – Reemplazar texto por un icono cuando sea responsive

Tengo una tienda en donde se muestran estos dos botones, cuando es un celular o un tablet muestra en icono del carrito, cuando es una pc muestra el texto completo

<button type="button" class="bg-success text-white addToCart d-sm-block d-xs-block d-none d-md-none d-lg-none"><i class="fa fa-shopping-cart fa-2x mt-1"></i></button>

<button type="button" class="bg-success text-white addToCart d-md-block d-lg-block d-none d-sm-none d-xs-none">Agregar al Carrito</button>

Lo estoy haciendo con bootstrap 4, pero no me funciona correctamente, la idea es que cuanto lo vean en el celular se muestre el carrito y cuando sea la web se muestre el texto.

De que otra forma puedo resolver esto.

python – intercambiar los valores que estan en posiciones pares de una lista por otros de otra lista

acabo de empezar con las listas y estaba buscando la manera de crear una función que me dejase cambiar los elementos que están en las posiciones pares por otros de otra lista alternativa:

Esto es lo que tengo hasta ahora (pero me pone a 0 los elementos que están en posiciones pares). Me gustaría saber si debería tirar por otro método o si tengo algún fallo en el codigo y por que.
Muchas gracias

def pares(lista1, lista2):
    for i in range(0, len(lista1)):
         for j in lista2:
             if i % 2 == 0:
                 lista1(i)=j
    return lista1



list=(1,2,3,4,5,6)
list2=(3, 6, 0) 
print(pares(list, list2))

python 3.x – Hacer uso de la api de gmail por medio de una cuenta de servicio desde el lado del servidor evitando la GUI de OAUTH2

Tengo una aplicación desarrollada en python que usa el servicio SMPT para conectarse a una cuenta de gmail. Ese tipo de conexión está tipificada como un “Acceso de aplicaciones poco seguras” https://myaccount.google.com/lesssecureapps

Para subsanar esto me he puesto con la tarea de actualizar mi app, usando la api de gmail y para la autenticación hacer uso de una clave privada generada a partir de una cuenta de servicio (si usar G-Suit).

He creado una primera prueba de concepto y parece que conecta correctamente, pero al intentar obtener las labels de la cuenta de gmail obtengo el siguiente mensaje:

<HttpError 400 when requesting https://gmail.googleapis.com/gmail/v1/users/me/labels?alt=json returned "Precondition check failed.">

Recapitulo los pasos que he seguido para configurar mi cuenta de google:

  1. Acceder a Google Api Console y habilitar el uso de la api de gmail por medio del botón que aparece en la parte de arriba: Habilitar apis y servicios
  2. Acceder al apartado de credenciales, hacer click en el botón superior: “crear credenciales” y seleccionar Cuenta de servicio
  3. Crear una cuenta de servicio y seguidamente generar una clave privada en formato json

Añado un pequeño fragmento de código con mi prueba de concepto y que me devuelve el error que coemnto en la parte superior:

    from google.oauth2 import service_account
    from googleapiclient.discovery import build

    SCOPES = ('https://mail.google.com/','https://www.googleapis.com/auth/gmail.modify','https://www.googleapis.com/auth/gmail.readonly','https://www.googleapis.com/auth/gmail.labels','https://www.googleapis.com/auth/gmail.metadata','https://www.googleapis.com/auth/gmail.addons.current.message.metadata','https://www.googleapis.com/auth/gmail.addons.current.message.readonly')
    SERVICE_ACCOUNT_FILE = '/home/user/keys/privatekey_from_service_account.json'

    credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES)

    service = build('gmail', 'v1', credentials=credentials)

    # Call the Gmail API
    results = service.users().labels().list(userId='me').execute()
    labels = results.get('labels', ())

    if not labels:
        print('No tienes labels.')
    else:
        print('Labels:')
        for label in labels:
            print(label('name'))

pine script – Información volumen por tick en PineScript

Estoy realizando un indicador basado en volumen en PineScript. Necesito obtener el volumen comerciado para cada nivel del precio en un periodo determinado.
He revisado mucha documentación pero no encuentro la manera de obtener el volumen comerciado por cada tick en una vela.
Se que en otras plataformas como NinjaTrader se puede obtener mediante el eventos ejecutados cada ticks.
Necesitaría saber como hacer algo similar en PineScript o alguna alternativa viable.
La idea es crear un indicador de MarketProfile para mostrar el histograma vertical de volumen, POC y zona de valor.
Ya uso el de TradingView, pero necesito crear el mío propio por que necesito añadir/modificar otras cosas.

Un saludo y gracias.

java – Aunque modifique las variables, siempre tienen su valor por defecto

Estoy haciendo un mod para minecraft y tengo una clase con la que manejo las animaciones y al momento
de querer modificar las variables siempre tienen su valor por defecto, cuando estoy en la funcion tick
y quiero imprimir el valor de la variable change me dice que es 0 pero yo le estoy asigando otro valor,
incluso intente sumarle a aty el valor directamente y sigue sin modificarse,espero que me puedan ayudar, gracias.

”’
public class ASVALModel extends GunModel{

public float atx, aty, atz;
public final float change;

public static ModelResourceLocation HAMMER = new ModelResourceLocation(ItemRegistries.asval.get().getRegistryName() + "_hammer", "inventory");
public static ModelResourceLocation MAG = new ModelResourceLocation(ItemRegistries.asval.get().getRegistryName() + "_mag", "inventory");

public ASVALModel(IBakedModel model, int fire, int reload,float tx, float ty, float tz) {
    super(model, fire, reload,tx, ty, tz);
    atx = 0;
    aty = 0;
    atz = 0;
    change = 100/(50*200);
}

@OnlyIn(Dist.CLIENT)
public void doArmAnimation(ItemStack stack, MatrixStack matrix) {
    matrix.rotate(new Quaternion((float)Math.toRadians(rx), (float)Math.toRadians(ry), (float)Math.toRadians(rz), false));
    matrix.translate(atx, aty, atz);
}

@Override
public void tick(ItemStack stack, PlayerEntity player) {
    super.tick(stack, player);
    if(reload > 0) {
        System.out.println("aty: " + this.aty + "change: " + this.change);
        if(aty > -0.6875) {
            aty -= change;
            System.out.println("--");
        }else {
                System.out.println("aty == -0.6875");
                if(atz > -0.140625) {
                    atz -= change;
                }
                if(atx < 0.359375) {
                    atx += change;
                }else {
                if(atz > -0.40625) {
                    atz -= change;
                }
            }
        }
    }else {
        if(atz < -0.140625) {
            atz += change;
        }else {
            if(atx > 0) {
                atx -= change;
            }else {
                if(atz < 0) {
                    atz += change;
                }
                if(aty < 0) {
                    aty += change;
                }
            }
        }
    }
}

Aqui les dejo lo que me sale cuando imprimo las variables
”’

(m(32m(12:14:51) (Server thread/INFO) (STDOUT/): (com.jg.guns.client.models.ASVALModel:tick:56): aty: 0.0change: 0.0

(m(32m(12:14:52) (Server thread/INFO) (STDOUT/): (com.jg.guns.client.models.ASVALModel:tick:59): —
”’