martes, 16 de diciembre de 2025

instalar Linux (cualquier distro) con Grub

requisitos: tener un usb con la distro que se quiere instalar en la PC, en mi caso Debian Trixie (Debian 13). esto debe de ser creado con Rufus por ejemplo, en MBR en modo DD

instalación en LAPTOP con GRUB herramienta que utilizo por que no observo boot  con f2,f8, etc etc.

pasos:
PASO 1- Habilitar Grub para poder entrar en modo consola grub>, paraesto en la terminal del equipo (si es linux) colocar el siguiente comando
sudo nano /etc/default/grub
y ahi observar que estas lineas existan o crearlas o descomentarlas:
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=10
GRUB_TERMINAL=console
después guardar el archivo y realizar el siguiente comando en terminal
sudo update-grub

PASO 2- antes de reiniciar el equipo colocar el USB y reiniciar el equipo y cuando aparezca menú colocar la letra "c" u otra que permita ingresar al grub y tener la siguiente pantalla

PASO 3- Escribe el siguiente comando para ver los discos y particiones detectados  "ls"   comandos linux, usualmente se observa :  (hd0)(hd0,msdos1)(hd1)(hd1,msdos1) o similar.

debe buscar cual es el USB conectado para esto probar:
ls (hd1)/
ls (hd0)/
ls (hd1,msdos1)/
.... etc
debemos de buscar específicamente la carpeta de: /install  donde este esa carpeta es el USB conectado.
y nos anotamos la dirección ya que ese es el USB de donde se debe de instalar, por ejemplo (hd0)

PASO 4-  identificado el USB debe de colocar los siguientes comandos uno a uno
set root=(hd0)
linux /install.amd/vmlinuz
initrd /install.amd/initrd.gz
boot
con esto empieza de manera normal un instalación tipica de Debian, utilizando pero grub sin entrar al bios o seleccionar BOOT


2



domingo, 9 de febrero de 2025

guia rapida para instalar tensorflow en windows 11 para utilizarlo con VScode

la siguiente guía es para instalar tensorflow de manera nativa en una computadora con windows 11.

De los links referencias se puede resumir todo en el siguiente grafico:


Tensorflow

https://www.tensorflow.org/?hl=en

Driver actualizado de la tarjeta grafica Nvidia Geforce

https://www.nvidia.com/es-es/drivers/

CUDA

https://developer.nvidia.com/cuda-toolkit

cuDNN

https://developer.nvidia.com/cudnn


Código para ver si funciona Tensorflow utilizando GPU.

import tensorflow as tf # type: ignore

print("num. de GPUs disponibles = ", len(tf.config.experimental.list_physical_devices('GPU')))


if tf.config.list_physical_devices('GPU'):

    gpu_details = tf.config.experimental.get_device_details(tf.config.list_physical_devices('GPU')[0])

    print("Nombre de la GPU:", gpu_details.get('device_name', 'Desconocido'))

 



domingo, 10 de noviembre de 2024

C++ de arduino sobre Notepad

 esto ayuda a que se pueda tener los mismos estilos (aprox.) que arduino IDE pero en notepad++



git clone https://github.com/FLL-e/Notepadpp-Arduino.git

copiar los archivos XML de la carpeta que se descargo


y pegarlos a la carpeta de lenguajes definidos por usuario, esta carpeta se lo puede abrir desde Notepad++


Finalmente debería de quedar algo así:


reiniciar NOTEPAD++ y a disfrutar de lenguaje C++ estilo arduino sobre este editor


jueves, 25 de julio de 2024

Python + OPENCV + Arduino/ESP


Comando para crear un ambiente virtual, instalar requerimientos para trabajar con jupyter notebook, ademas de la libreria Pyserial para controlar con rs232 una placa Arduino o ESP32


comandos en orden:


conda info --env

conda update --all --yes

conda create -n OPENCV python=3.9


conda activate OPENCV

python --version

conda install anaconda::jupyter

si no se ejecuta, antes de instalar  jupyter hacer correr este comando: conda config --set channel_priority flexible

conda install conda-forge::opencv

conda install anaconda::pyserial

conda update pip

si no se ejecuta, antes del conda update pip ejecutar este comando: conda config --add channels conda-forge  

pip install cvzone

pip install mediapipe

pip install controller




viernes, 5 de julio de 2024

Kali Linux sobre Windows utilizando Docker

Estos pasos los realizo, talvez se pueden reducir a mucho menos pasos, pero así me ¡funciona! utilizando un dockerfile.

1- En un sistema Windows descargar e instalar Docker desktop



2- una vez abierto el docker desktop, Pull a la imagen Kalilinux/kali-rolling que es la que recomiendo utilizar

3- Verificamos si ya tenemos la imagen Kalilinux/kali-rolling en PowerShell de windows 

4- entramos a kali linux

 docker run -it kalilinux/kali-rolling

5- ejecutamos los siguientes comandos

apt update

apt full-upgrade -y

apt autoremove -y


5- damos build al archivo dockerfile colocando un nombre de la imagen  nueva (yo le llame mikaliwin), y a esperar que descargue (mucho tiempo, vi una película con todo lo que tardo), descarga aproximadamente 4Gb.


6- momento de utilizar Kali con docker en windows

 docker run -it --network=host mikaliwin bash


Adicional: si por ejemplo nos olvidamos la instalación de un programa, una vez dentro del Kali, en linea Bash por ejemplo pudiéramos instalar:

apt install net-tools

lunes, 1 de abril de 2024

RF-nano



para controlar un robot

Emisor TX

#include <SPI.h>
#include "Mirf.h"
#include "nRF24L01.h"
#include "MirfHardwareSpiDriver.h"
Nrf24l Mirf = Nrf24l(10, 9);
int value;
int contador=0;
int MOV=1;

void setup()
{
  Serial.begin(9600);
  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();
  //Set your own address (sender address) using 5 characters
  Mirf.setRADDR((byte *)"CONTR");
  Mirf.payload = sizeof(value);
  Mirf.channel = 90;              //Set the channel used
  Mirf.config();
}

void loop()
{
  Mirf.setTADDR((byte *)"ROB01");         //Set the receiver address
  value = MOV;                                //adelante MOV=1
  Mirf.send((byte *)&value);                //Send instructions, send random number value
  while (Mirf.isSending()) delay(1);        //Until you send successfully, exit the loop
  delay(200);
  contador=contador+1;
  if(contador>=50){
    MOV=2;
  }
  if(contador>=100){
    MOV=1;
    contador=0;
  }
}

Receptor RX

//Receiver program
#include <SPI.h>
#include "Mirf.h"
#include "nRF24L01.h"
#include "MirfHardwareSpiDriver.h"
Nrf24l Mirf = Nrf24l(10, 9);

int value;
int mov;
//MOTOR 1
const int mot1_A=6; 
const int mot1_B=5;
//MOTOR 2
const int mot2_A=4;
const int mot2_B=3;
//MOTOR 3
const int mot3_A=14;   //A0
const int mot3_B=15;   //A1
//MOTOR 4
const int mot4_A=16;   //A2
const int mot4_B=17;   //A3

void setup()
{
  Serial.begin(9600);
  Mirf.spi = &MirfHardwareSpi;
  Mirf.init();

  Mirf.setRADDR((byte *)"ROB01"); //Set your own address (receiver address) using 5 characters
  Mirf.payload = sizeof(value);
  Mirf.channel = 90;             //Set the used channel
  Mirf.config();
  Serial.println("Listening...");  //Start listening to received data

  pinMode(mot1_A, OUTPUT);
  pinMode(mot1_B, OUTPUT);
  pinMode(mot2_A, OUTPUT);
  pinMode(mot2_B, OUTPUT);
  pinMode(mot3_A, OUTPUT);
  pinMode(mot3_B, OUTPUT);
  pinMode(mot4_A, OUTPUT);
  pinMode(mot4_B, OUTPUT);
}

void loop()
{
  if (Mirf.dataReady()) { //When the program is received, the received data is output from the serial port
    Mirf.getData((byte *) &value);
    mov=value;
    Serial.println(mov);
    switch (mov) {
    case 1:
      adelante();
      break;
    case 2:
      atras();
      break;
    case 3:
      izquierda();
      break;
    case 4:
      derecha();
      break;
    case 5:
      detenido();
      break;
    default:
      // if nothing else matches, do the default
      // default is optional
      break;
    }
  }
}

void adelante() {
  digitalWrite(mot1_A, HIGH);
  digitalWrite(mot1_B, LOW);
  digitalWrite(mot2_A, HIGH);
  digitalWrite(mot2_B, LOW);
  digitalWrite(mot3_A, HIGH);
  digitalWrite(mot3_B, LOW);
  digitalWrite(mot4_A, HIGH);
  digitalWrite(mot4_B, LOW);
  }
void atras() {
  digitalWrite(mot1_A, LOW);
  digitalWrite(mot1_B, HIGH);
  digitalWrite(mot2_A, LOW);
  digitalWrite(mot2_B, HIGH);
  digitalWrite(mot3_A, LOW);
  digitalWrite(mot3_B, HIGH);
  digitalWrite(mot4_A, LOW);
  digitalWrite(mot4_B, HIGH);
  }
void izquierda() {
  //motor 1 y 3 adelante
  digitalWrite(mot1_A, HIGH);
  digitalWrite(mot1_B, LOW);
  digitalWrite(mot3_A, HIGH);
  digitalWrite(mot3_B, LOW);
  //motor 2 y 4 atras
  digitalWrite(mot2_A, LOW);
  digitalWrite(mot2_B, HIGH);
  digitalWrite(mot4_A, LOW);
  digitalWrite(mot4_B, HIGH);
  }
void derecha() {
  //motor 1 y 3 atras
  digitalWrite(mot1_A, LOW);
  digitalWrite(mot1_B, HIGH);
  digitalWrite(mot3_A, LOW);
  digitalWrite(mot3_B, HIGH);
  //motor 2 y 4 adelante
  digitalWrite(mot2_A, HIGH);
  digitalWrite(mot2_B, LOW);
  digitalWrite(mot4_A, HIGH);
  digitalWrite(mot4_B, LOW);
  }
void detenido() {
  digitalWrite(mot1_A, LOW);
  digitalWrite(mot1_B, LOW);
  digitalWrite(mot2_A, LOW);
  digitalWrite(mot2_B, LOW);
  digitalWrite(mot3_A, LOW);
  digitalWrite(mot3_B, LOW);
  digitalWrite(mot4_A, LOW);
  digitalWrite(mot4_B, LOW);
  }

Robot

ffdsa fdsa fds  dfdafds

miércoles, 21 de febrero de 2024

todo de docker rapido


Instalar

https://www.youtube.com/watch?v=ZO4KWQfUBBc


BUSCAR imagen

en cmd buscar contenedores

o en por web en docker hub   https://hub.docker.com/

DESCARGAR imagen en este caso Ubuntu, solo el comando: 

docker pull ubuntu



BUILD a una imagen ya descargada con docker, creando de esta manera el contenedor

docker run -it ubuntu:latest /bin/bash


es necesario actualizar dependencias para no tener errores en el contenedor docker ubuntu

apt-get update

apt-get upgrade 


instalando algunos programas útiles

apt-get install net-tools

apt-get install -y build-essential

apt-get install -y software-properties-common

add-apt-repository ppa:deadsnakes/ppa

apt-get update

apt-get install python3

 apt-get install python3-pip

ln -s /usr/bin/python3 /usr/bin/python


salir del contenedor ya coriendo bash

exit


VOLVER a entrar al contenedor del cual salimos que esta en suspension, con la misma sesion


comandos


docker ps -a

docker start 4bca06dc3530

docker exec -it gracious_stonebraker bash


OJO

tener en cuenta que descargar imagen no es tener el contenedor. Al ejecutar RUN creamos el contenedor para ver contenedores ACTIVOS:

docker ps

para ver todos los contenedores ACTIVOS e INACTIVOS: 

docker ps -a

para detener un CONTENEDOR activo:

docker stop 3db75215661 (id del contenedor activo)

para  arrancar un CONTENEDOR detenido:

docker start 3db75215661 (id del contenedor inactivo)


docker sobre linux ver rapidamente este video https://www.youtube.com/watch?v=_0EYw9PGMnM