¿Qué página o aplicación es la mejor para tomar cursos de programación?

He usado SoloLearn para aprender lo básico de Python, SQL, Java y HTML. Son cursos que toman de 1 a 2 días en terminar, tampoco es que me acuerde totalmente de lo aprendido. El caso es que me gustaría saber de otra alternativa para aprender lenguajes de programación, de preferencia C y C++. ¿Dónde aprendiste, o dónde estás aprendiendo programación?

Gracias por responder.

Saludos cordiales.

¿Por qué este script de video se muestra en cualquier dominio?

Estoy haciendo un reproductor, la idea es que solo se muestre en mi dominio, lo intenté con PHP y JavaScript pero no funciona.
Esto es lo que pensé e hice:

<?php $  host= $  _SERVER["HTTP_HOST"];  // echo $  host;  if ($  host=="midominio.com") {     # code...  ?> <br /> <div id="player"> </div> <script>  </script>  <?php  }  else{  ?>  <script type="text/javascript"> window.location="http://www.midominio.com"; </script> <?php } ?> 

¿Por qué no puede leerse la propiedad length?

Soy estudiante y comienzo a programar, les presento mi problema incluyendo el pseudo-código con mi lógica, esperando que alguien me pueda aportar porque no está leyendo la propiedad length al recorrer un string. Este es el error: introducir la descripción de la imagen aquí

cipher.js:

/*LABORATORIA:Implementar el objeto cipher, el cual debe estar exportado en el objeto global (window). Este objeto (cipher) debe contener dos métodos:  cipher.encode(offset, string): offset es el número de posiciones que queremos mover a la derecha en el alfabeto y string el mensaje (texto) que queremos cifrar.  cipher.decode(offset, string): offset es el número de posiciones que queremos mover a la izquierda en el alfabeto y string el mensaje (texto) que queremos descifrar.*/  window.cipher = {     encode: (offset, string) => {  //PASO 3: Iterar sobre la palabra para saber cuantas letras cifraremos     for (let i= 0; i<(string.length); i++) {     //PASO 3.1: Saber cuál es la posición ascci para c/letra que se recorre         let asciiPosition = string.charCodeAt(i);         //console.log('asciiPosition');      /*PASO 3.2: Aplicar fórmula al texto ascci para saber cual es la nueva posición (x -65 + n) % 26 +65*/         let enCodexString = (asciiPosition-65 + offset) %26 + 65;      //PASO 3.3: Teniendo la posición definitiva de cifrado, transformar a alfabeto y guardarlo en una variable     let result = String.fromCharCode(enCodexString);         }         return result;     } }; 

index.js /LABORATORIA: Aquí debes escuchar eventos del DOM, invocar cipher.encode() o cipher.decode() según sea necesario y actualizar el resultado en la UI./

//PASO 1: Obtener número de desplazamiento (offset/key/llave), guardárlo en una varible y convertirlo a entero (parseInt). (Pasarlo como parámetro al objeto window.cipher)  const offset = document.getElementById('offset-box').value; //console.log(key);  //PASO 2: Obtener la cadena/string del texto a cifrar y convertirlo a mayúscula.(Pasarlo como parámetro al objeto window.cipher) let string = document.getElementById('decodex-string').value; //console.log(codexString);  //PASO 4: Imprimir resultado en el input correspondiente //document.getElementById(encodex-string).value.innerHTML     //Conocer la posición del código ASCII para desplazar // codexString.charCodeAt(0); // console.log(codexString);  //Detonar el evento del input de desplazamiento (offset o key) //offsetKey.addEventListener('click', window.cipher.encode());   //Invoca la data que obtuvimos //cipherData();  //Aquí invoco las funciones window.cipher.encode();      introducir el código aquí 

Por qué cuando hago scroll en el TableView las imágenes hacen AutoSize y vuelven a su tamaño natural?

Cuando cargo la aplicación por primera vez se ven todas las imagenes del tableview de un mismo tamaño y sin problemas, de esta manera.

introducir la descripción de la imagen aquí

Pero cuando hago scroll sobre el tableview, las imagenes vuelven a su estado natural, no entiendo por qué ocurre esto… Quedan así. introducir la descripción de la imagen aquí

Este es el código donde agrego la imagen en CELL en el tableview

let reference = user?["Logo"] as? String ?? ""         let fileUrl = NSURL(string: reference)          let placeholderImage = #imageLiteral(resourceName: "negociophoto") //placeholder if wanted          cell.imageView?.sd_setImage(with: fileUrl as URL?, placeholderImage: placeholderImage)         cell.imageView?.layer.cornerRadius = 5         cell.imageView?.layer.borderWidth = 1.0         cell.imageView?.layer.borderColor = UIColor.gray.cgColor         cell.imageView?.layer.masksToBounds = true         cell.imageView?.frame = CGRect(x: 10,y: 0,width: 10,height: 10)         cell.imageView?.contentMode = UIView.ContentMode.scaleAspectFit 

Espero alguien sepa por qué ocurre esto, muchas gracias por todo.

¿Por qué la vista no ejecuta repaint() en update()?

Tengo problemas, al pintar una vista, siguiendo el patrón MVC.

El problema es que cuando el modelo indica que el objeto observable ha cambiado, se ejecuta la actualización de la vista, pero al llamar al repaint() no ejecuta su contenido. Lo que quiero pintar es una imagen, el problema puede ser que la clase extiende la vista, no sea apropiada (Canvas).

Al depurar, lo que sucede es que el modelo notifica a la vista que el objeto se ha modificado, luego ejecuta el método update (), pero no ejecuta el contenido de paint ().

El modelo se modifica cuando la “anguloRotacion”, en la que aumento o disminuyo, el ángulo de rotación de la imagen. Este código se encuentra dentro del método anguloRotacion (), dentro del modelo.

Si necesitáis más explicaciones o aclaraciones, por favor hacermelo saber. Realmente necesito resolver este problema.

Controller code:

/*  * To change this license header, choose License Headers in Project Properties.  * To change this template file, choose Tools | Templates  * and open the template in the editor.  */ package controlador;  import Auxiliares.Canon; import Auxiliares.Casilla; import Auxiliares.ContenedorFinal; import Vistas.*; import Vistas.VistaCanon; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.*; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.geom.AffineTransform; import java.awt.geom.Line2D; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.io.IOException; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.swing.*; import javax.swing.plaf.basic.BasicProgressBarUI;  /**  *  * @author ignacioaranguren  */ public class Controlador extends JFrame {      private JPanel contenedorFinal;     private JProgressBar barra;     private ActionListener ac;     private Timer t;     private int puntuacion = 0;     private DecimalFormat timeFormatter;     private JLabel etiquetaFin;     private JButton finalizar;     private Graphics2D offGraphics;     private Image offImage;     private Modelo modelo;     private VistaCanon vistaCanon;     private VistaBala vistaBala;     private VistaCasillas vistaCasillas;     private VistaCorazon vistaCorazon;     private VistaHaCaidoAgua vistaHaCaidoAgua;     private VistaSegundero vistaSegundero;     private VistaPuntuacion vistaPuntuacion;      public Controlador() {          setLayout(null);         modelo = new Modelo();         vistaCanon = new VistaCanon(modelo);          modelo.addObserver(vistaCanon);          modelo.initComponents();         timeFormatter = new DecimalFormat("00");         etiquetaFin = new JLabel("Juego finalizado");         etiquetaFin.setFont(new Font("Arial", Font.PLAIN, 35));         etiquetaFin.setBounds(250, 330, 300, 100);         etiquetaFin.setVisible(false);         finalizar = new JButton("Menu principal");         finalizar.setBounds(300, 410, 150, 30);         finalizar.addActionListener(new ActionListener() {             @Override             public void actionPerformed(ActionEvent e) {                 System.exit(0);             }         });         finalizar.setVisible(false);         contenedorFinal = new ContenedorFinal();         contenedorFinal.setBackground(Color.red);         contenedorFinal.setVisible(false);         contenedorFinal.setBounds(0, 0, 940, 900);          barra = new JProgressBar(JProgressBar.HORIZONTAL, 0, 100);         barra.setBounds(450, 730, 200, 40);         barra.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(0, 0, 0), 2, true));         barra.setUI(new BasicProgressBarUI() {             @Override             protected void paintDeterminate(Graphics g, JComponent c) {                 Graphics2D g2d = (Graphics2D) g;                 int ancho = barra.getWidth();                 int alto = barra.getHeight();                  int espacioAncho = ancho;                 int espacioAlto = alto;                 barra.setPreferredSize(new Dimension(200, 40));                 double porcentajeProgres = barra.getPercentComplete();                  espacioAncho = (int) (espacioAncho * porcentajeProgres);                 if (porcentajeProgres <= 0.25) {                     g2d.setColor(Color.GREEN);                 } else if (porcentajeProgres > 0.25 && porcentajeProgres <= 0.5) {                     g2d.setColor(Color.yellow);                 } else if (porcentajeProgres > 0.5 && porcentajeProgres <= 0.75) {                     g2d.setColor(Color.orange);                 } else {                     g2d.setColor(Color.red);                 }                 Rectangle rec1 = new Rectangle(0, 0, espacioAncho, espacioAlto);                 g2d.fill(rec1);             }          });            ac = new ActionListener() {             @Override             public void actionPerformed(ActionEvent e) {                 modelo.BarraProgreso();             }          };          modelo.setBarra(barra);         modelo.setBotonFinalizar(finalizar);         modelo.setContenedorFinal(contenedorFinal);         modelo.setEtiquetaFin(etiquetaFin);         modelo.setTimerFormater(timeFormatter);          t = new Timer(35, ac);         t.start();          addKeyListener(new KeyAdapter() {             @Override             public void keyPressed(KeyEvent evento) {                 switch (evento.getKeyCode()) {                     case KeyEvent.VK_LEFT:                         modelo.anguloRotacion(1);                         break;                     case KeyEvent.VK_RIGHT:                         modelo.anguloRotacion(2);                         break;                     case KeyEvent.VK_ENTER:                         modelo.anguloRotacion(3);                         break;                     case KeyEvent.VK_ESCAPE:                                  repaint();                         modelo.salirJuego(JOptionPane.showConfirmDialog(null, "¿Volver al menú principal?", "Juego", JOptionPane.YES_NO_OPTION));                         break;                     case KeyEvent.VK_H:                         JOptionPane.showMessageDialog(null, "-Pulsa las teclas izquierda y derecha para mover el cañón.\n-Selecciona una "                                 + "intensidad mediante la barra de fuerza:\n   -Rojo = Disparar fuerte.\n   -Amarillo = disparar medio fuerte"                                 + ". \n   -Verde = disparar suave.\n-Pulsa Enter para disparar. \n-Durante el disparo puedes modificar su trayectoria mediante la teclas izquierda y derecha."                                 + "\n-La puntuación: \n   -Los cangrejos (+1). \n   -Los tesoros (+2). \n   -Las botellas de ron (-1) vidas.", "Cómo jugar", JOptionPane.QUESTION_MESSAGE);                         break;                 }                 requestFocus();             }             });          addWindowListener(new java.awt.event.WindowAdapter() {             @Override             public void windowClosing(java.awt.event.WindowEvent evt) {                 close();             }         });          setSize(940, 900);         setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);         add(finalizar);         add(etiquetaFin);         setResizable(false);         add(contenedorFinal);         add(barra);         setVisible(true);      }      @Override     public void paint(Graphics g) {         Graphics2D g2d = (Graphics2D) g;         Image fondo = new ImageIcon(getClass().getResource("/imagenes/fondo.jpeg")).getImage();         g2d.drawImage(fondo, 0, 0, null);         g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,         RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);         g2d.setFont(new Font("Marker Felt", Font.PLAIN, 30));         g2d.setColor(Color.white);         g2d.drawString("Cómo jugar, Pulsa H", 710, 330);         g2d.drawString("Pulsa ESC para salir", 710, 380);               Image img2 = new ImageIcon(getClass().getResource("/imagenes/fondoMapa.png")).getImage();         g2d.drawImage(img2, 30, 30, this);     }      private void close() {         if (JOptionPane.showConfirmDialog(rootPane, "¿Volver al menú principal?",                 "Juego", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {             System.exit(0);         }     }      } 

Model manipulation:

   package controlador;  import Auxiliares.Canon; import Auxiliares.Casilla; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.io.IOException; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Observable; import java.util.logging.Level; import java.util.logging.Logger; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.Timer;  /**  *  * @author ignacio  */ public class Modelo extends Observable {      private double anguloRotacion, anguloMin, anguloMax;     private boolean teclaPresionada, flag, flagBala, pintarCasilla, balaAgua;     private JProgressBar barra;     private double vX, vY, x1, x2, x1Anterior, x2Anterior, alfa, escala, i;     private Timer animacion, timer;     private Canon canon;     private int progreso, x, y, puntuacion, vidas, posVidaX, contadorCasilla;     private Casilla[][] casilla;     private double posX[], posY[];     private BufferedImage imgB;     private Image img2, fondo, fondoMapa, vida, img;     private ArrayList<Casilla> arrayCasilla;     private JLabel etiquetaFin;     private JButton finalizar;     private JPanel contenedorFinal;     private byte seconds;     private short minutes;     private DecimalFormat timeformater;       public void setBarra(JProgressBar b){         this.barra = b;     }      public void setEtiquetaFin(JLabel f){         this.etiquetaFin = f;     }      public void setTimerFormater(DecimalFormat d){         timeformater = d;     }      public void setContenedorFinal(JPanel p){         contenedorFinal = p;     }      public void setBotonFinalizar(JButton b){         this.finalizar = b;     }       public void initComponents(){         seconds = 00;         minutes = 03;          timer = new Timer(1000, new ActionListener() {             @Override             public void actionPerformed(ActionEvent e) {                  if (seconds == 0 && minutes == 0) {                     timer.stop();                     etiquetaFin.setVisible(true);                     finalizar.setVisible(true);                     contenedorFinal.setVisible(true);                  } else if (seconds > 0) {                     seconds--;                     setChanged();                     notifyObservers();                  } else if (minutes > 0) {                     minutes--;                     seconds = 59;                     setChanged();                     notifyObservers();                 }              }         });         timer.start();          posX = new double[]{30, 79, 128.0, 177.0, 226.0, 275.0, 324.0, 373.0, 422.0, 471.0, 520.0, 569.0, 618};         posY = new double[]{30, 83.0, 136.0, 189.0, 242.0, 295.0, 348.0, 401.0, 454.0, 507.0, 560.0, 613.0, 613};         casilla = new Casilla[13][13];         inicializarCasillas();         anguloRotacion = Math.PI / 2;         vidas = 3;         anguloMax = 0.81986726449;         anguloMin = anguloMax = 2.32172538679;         teclaPresionada = false;         flag = false;         flagBala = false;         pintarCasilla = false;         balaAgua = false;         i = 0;         progreso = 0;         this.canon = canon = new Canon();         this.barra = barra;         arrayCasilla = new ArrayList<>();         llenarCasillas();     }      public void cargarImagenes() {         try {             img2 = new ImageIcon(getClass().getResource("/imagenes/fondoMapa.png")).getImage();             fondo = new ImageIcon(getClass().getResource("/imagenes/fondo.jpeg")).getImage();             vida = new ImageIcon(getClass().getResource("/imagenes/vida.png")).getImage();             img = new ImageIcon(getClass().getResource("/imagenes/BalaCanon.png")).getImage();             imgB = ImageIO.read(getClass().getResource("/imagenes/canon.png"));         } catch (IOException ex) {             Logger.getLogger(Modelo.class.getName()).log(Level.SEVERE, null, ex);         }      }      public void anguloRotacion(int direccion) {         switch (direccion) {             case 1:                 if (anguloRotacion > anguloMin && anguloRotacion < anguloMax) {                     anguloRotacion = anguloRotacion + 0.05;                 } else {                     anguloRotacion = anguloRotacion - 0.05;                 }                 setChanged();                 notifyObservers();                 break;             case 2:                 if (anguloRotacion > anguloMin && anguloRotacion < anguloMax) {                     anguloRotacion = anguloRotacion - 0.05;                 } else {                     anguloRotacion = anguloRotacion + 0.05;                 }                 setChanged();                 notifyObservers();                 break;              default:                 break;         }      } } 

View code:

package Vistas;  import controlador.Modelo; import java.awt.Canvas; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.util.Observable; import java.util.Observer;   public class VistaCanon extends Canvas implements Observer {      private Modelo m;      public VistaCanon(Modelo m) {         this.m = m;     }      @Override     public void paint(Graphics g) {         super.paint(g);         Graphics2D g2d = (Graphics2D) g;         g2d.setColor(Color.gray);         g2d.fillRect(30, 720, 646, 122);         AffineTransform tx = AffineTransform.getRotateInstance(Math.PI / 2 - m.getAnguloRotacion(), m.getImB().getWidth(this) / 2, m.getImB().getHeight(this) / 2);         AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);         tx.rotate(Math.PI / 2 - m.getAnguloRotacion());         System.out.println(tx.toString());          g2d.drawImage(op.filter(m.getImB(), null), 360, 740, null);     }      @Override     public void update(Observable o, Object arg) {         repaint();     }  } 

¿Que lenguajes suplantan a JAVA EE (Entreprise Edition)?

Estoy a punto de empezar un curso de JAVA EE y tengo entendido que maneja bases de datos empresariales con una seguridad robusta, etc, para lo que es aplicaciones web. Ahora bien, no estoy muy seguro si hacerlo o aprender otro lenguaje para suplantar JAVA EE. Me podrian asesorar un poquito? Gracias de antemano!

Gonzalo

¿Por qué no recibo información envíada de app de terminal Bluetooth a modulo HM-10 en arduino?

Estoy intentando comenzar con el uso de bluetooth por medio de un modulo HM-10 y arduino UNO, estoy utilizando la app llamada “Serial Bluetooth Terminal” al parecer conecta correctamente con el dispositivo HM-10 pero a la hora de enviarle un “1” o “0” no lo recibe y por obviedad no lo demás que en mi programación arduino le estoy pidiendo que en este caso es encender un led. El código arduino es el siguiente:

#define RX 11 #define TX 10 #define pinLED 13 #include <SoftwareSerial.h>  SoftwareSerial bluetooth(TX, RX);  void setup() {    bluetooth.begin(9600);   bluetooth.println("Arduino Enabled, Bluetooth Test.");   Serial.begin(9600);   Serial.println("Arduino Enabled, Bluetooth Test.");   pinMode(pinLED, OUTPUT); }  void loop() {   byte BluetoothData;     if (bluetooth.available() > 0) {     switch (bluetooth.read()) {     case '0':       digitalWrite(pinLED, LOW);       bluetooth.println("Apaga el LED");       Serial.println("Apaga el LED");       break;     case '1':       digitalWrite(pinLED, HIGH);       bluetooth.println("Enciende el LED");       Serial.println("Enciende el LED");       break;     default:       bluetooth.println("Sin comando");       Serial.println("Sin comando");    }  }  delay(100); } 

Ojalá alguien pueda ayudarme he estado viendo preguntas similares y no son respondidas por lo regular, por el momento gracias.