• Sábado 24 de Octubre de 2020, 07:57

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - RadicalEd

Páginas: [1] 2 3 ... 123
1
La taberna del BIT / Re:Saludo
« en: Jueves 19 de Octubre de 2017, 18:16 »
Yo, logicamente, aunque ya no participo en el foro, si lo veo cada que puedo.

2
Visual C++ / Re:alguien que me contribuya para crear un codigo en c++ :(
« en: Viernes 21 de Abril de 2017, 13:50 »
Aprende!

3
Código: Javascript
  1. fecha=new Date();
  2. if (fecha.getDay()==5) {
  3.     // TODO
  4. }
  5.  

Ten en cuenta que getDay() te devuelve un entero, entonces puedes manejar un array con los días de la semana, comenzando desde el domingo.

4
GNU/Linux / Script para creación de archivos de conexión y PPK
« en: Lunes 27 de Marzo de 2017, 19:02 »
Un script shell para crear un PPK desde Linux, sin necesidad de usar el puttygen de Windows

Código: C
  1. #!/bin/bash
  2. # RadicalEd
  3. # Genera clave de conexión ssh y archivo ppk
  4.  
  5. RED='\033[0;31m'
  6. GREEN='\033[1;32m'
  7. BLUE='\033[1;34m'
  8. NC='\033[0m'
  9. DIRSSH="$HOME/.ssh/"
  10. DIRPPK="$HOME/Documentos/proyectos/ppk/"
  11.  
  12. # Se verifica si existe la carpeta donde se guardarán los ppk
  13. if ! [ -d ${DIRPPK} ]; then
  14.    printf "La carpeta ${BLUE}${DIRPPK}${NC} no existe, será creada!\n\n"
  15.    mkdir -p "${DIRPPK}"
  16. fi
  17.  
  18. # Se comprobará si existen los programas ssh-keygen y puttygen
  19. if ! [ -x "/usr/bin/puttygen" ]; then
  20.     echo "Se debe tener instalado el programa puttygen"
  21.     exit 1;
  22. fi
  23. if ! [ -x "/usr/bin/ssh-keygen" ]; then
  24.     echo "Se debe tener instalado el programa ssh-keygen"
  25.     exit 1;
  26. fi
  27.  
  28. # En caso de que no pasen el usuario en los parametros se captura
  29. usuario=$1
  30. if [ -z ${usuario} ]; then
  31.     echo -n "Nombre de usuario del servidor ssh: "
  32.     printf "${BLUE}"
  33.     read usuario
  34.     printf "${NC}"
  35. fi
  36. echo "Se creará clave ssh y archivo ppk para el usuario ${GREEN} $usuario ${NC}"
  37.  
  38. # Generación de la clave pública y ppk
  39. ssh-keygen -t dsa -C $usuario -f ${DIRSSH}$usuario -q -N ""
  40. puttygen ${DIRSSH}$usuario -o ${DIRSSH}$usuario.ppk
  41.  
  42. # Se guarda en el path de los ppk
  43. mv ${DIRSSH}$usuario.ppk $DIRPPK
  44.  
  45. # Si desea entrar por ssh, se creará un alias en el bashrc
  46. echo -n "Desea crear un alias-ssh para entrar por consola (si/no)?: "
  47. printf "${BLUE}"
  48. read aliassh
  49. printf "${NC}"
  50. if [ "$aliassh" = "si" ]; then
  51.     echo -n "IP o nombre de servidor: "
  52.     printf "${BLUE}"
  53.     read servidor
  54.     printf "${NC}"
  55.  
  56.     echo "alias ssh$usuario='ssh -i $HOME/.ssh/$usuario $usuario@$servidor'" >> $HOME/.bashrc
  57.     #source $HOME/.bashrc
  58.     #exec bash
  59.  
  60.     printf "\nSe creó un nuevo alias, lo puedes usar con el comando ${GREEN}ssh$usuario${NC}\n\nRecuerda que antes de poder usar el alias, "
  61. fi
  62. # Copiar contenido de la llave pública para copiar al servidor
  63. printf "debes copiar la siguiente llave en tu servidor $servidor\n\n$usuario:"
  64. cat ${DIRSSH}$usuario.pub
  65. printf "\n"
  66.  
  67. # Se elimina la clave pública creada
  68. rm -f ${DIRSSH}$usuario.pub
  69. exec bash

5
MySQL / Auditoria tablas en MySQL y PostgreSQL
« en: Jueves 23 de Marzo de 2017, 15:04 »
Hace rato no posteo nada en mi amado SoloCodigo, les adjunto auditorias para bases de datos PostgreSQL y MySQL, la segunda es una mamera.

Si se puede mejorar, sobre todo la parte del MySQL, seré feliz

PostgreSQL

Tabla
Código: SQL
  1. CREATE TABLE auditoria
  2. (
  3.   fecha_cambio TIMESTAMP WITH TIME zone DEFAULT now(),
  4.   nombre_disparador text,
  5.   tipo_disparador text,
  6.   nivel_disparador text,
  7.   comando text,
  8.   tabla text,
  9.   old_info text,
  10.   new_info text
  11. )
  12. WITH (
  13.   OIDS=FALSE
  14. );
  15. ALTER TABLE auditoria
  16.   OWNER TO postgres;
  17.  

Función (Stored Procedure)
Código: SQL
  1. CREATE OR REPLACE FUNCTION sp_auditoria_log()
  2.   RETURNS TRIGGER AS
  3. $BODY$
  4.   DECLARE
  5.   BEGIN
  6.  
  7.       IF (TG_OP = 'DELETE') THEN
  8.           INSERT INTO auditoria (nombre_disparador,tipo_disparador,nivel_disparador,comando,tabla,old_info,new_info)
  9.           VALUES (TG_NAME,TG_WHEN,TG_LEVEL,TG_OP,TG_TABLE_NAME,OLD,NULL);
  10.           RETURN OLD;
  11.       ELSIF (TG_OP = 'UPDATE') THEN
  12.           INSERT INTO auditoria (nombre_disparador,tipo_disparador,nivel_disparador,comando,tabla,old_info,new_info)
  13.           VALUES (TG_NAME,TG_WHEN,TG_LEVEL,TG_OP,TG_TABLE_NAME,OLD,NEW);
  14.           RETURN NEW;
  15.       ELSIF (TG_OP = 'INSERT') THEN
  16.           INSERT INTO auditoria (nombre_disparador,tipo_disparador,nivel_disparador,comando,tabla,old_info,new_info)
  17.           VALUES (TG_NAME,TG_WHEN,TG_LEVEL,TG_OP,TG_TABLE_NAME,NULL,NEW);
  18.           RETURN NEW;
  19.       END IF;
  20.       RETURN NULL;
  21.  
  22.   END;
  23. $BODY$
  24.   LANGUAGE plpgsql VOLATILE
  25.   COST 100;
  26. ALTER FUNCTION tg_auditoria_log()
  27.   OWNER TO postgres;

Trigger
Código: SQL
  1. CREATE TRIGGER tg_disparador_nombre_tabla
  2.   AFTER INSERT OR UPDATE OR DELETE
  3.   ON nombre_tabla
  4.   FOR EACH ROW
  5.   EXECUTE PROCEDURE sp_auditoria_log();

MySQL

Tabla
Código: SQL
  1. CREATE TABLE auditoria (
  2.   fecha_cambio DATETIME NOT NULL DEFAULT NOW() ,
  3.   nombre_disparador VARCHAR(30) NOT NULL,
  4.   tipo_disparador VARCHAR(15) NOT NULL,
  5.   nivel_disparador VARCHAR(15) NOT NULL,
  6.   comando VARCHAR(45) NOT NULL,
  7.   tabla VARCHAR(45) NOT NULL,
  8.   old_info LONGTEXT NOT NULL,
  9.   new_info LONGTEXT NOT NULL
  10. );

Stored Procedure
Código: SQL
  1. DROP PROCEDURE IF EXISTS sp_auditoria_log;
  2. DELIMITER $$
  3. CREATE PROCEDURE sp_auditoria_log (
  4.                                    IN disparador VARCHAR(30),
  5.                                    IN tipo VARCHAR(15),
  6.                                    IN nivel VARCHAR(15),
  7.                                    IN comando VARCHAR(45),
  8.                                    IN tabla VARCHAR(45),
  9.                                    IN oldInfo LONGTEXT,
  10.                                    IN newInfo LONGTEXT)
  11. BEGIN
  12.       INSERT INTO auditoria (nombre_disparador,tipo_disparador,
  13.                                     nivel_disparador,comando,tabla,old_info,new_info)
  14.       VALUES (disparador, tipo, nivel, comando, tabla, oldInfo, newInfo);
  15. END $$
  16.  
Trigger
A diferencia de postgres, se necesita crear disparador por cada DML, además se debe colocar cada campo, tanto nuevo como viejo, en los 2 últimos campos del SP.

Código: SQL
  1. DROP TRIGGER IF EXISTS tg_disparador_nombre_tabla;
  2. DELIMITER $$
  3. CREATE TRIGGER tg_disparador_nombre_tabla
  4.    AFTER INSERT ON nombre_tabla
  5.    FOR EACH ROW
  6. BEGIN
  7.      CALL sp_auditoria_log('tg_disparador_nombre_tabla',
  8.                            'AFTER', 'ROW', 'INSERT',
  9.                            'nombre_tabla',
  10.                            NULL,
  11.                            CONCAT(NEW.campo1, ',', NEW.campo2, ',', NEW.campo3, ',', NEW.campo4, ',', NEW.campoN));
  12. END
  13. $$
  14. DELIMITER ;
  15.  
  16. DROP TRIGGER IF EXISTS tg_disparador_nombre_tabla;
  17. DELIMITER $$
  18. CREATE TRIGGER tg_disparador_nombre_tabla
  19.    AFTER UPDATE ON nombre_tabla
  20.    FOR EACH ROW
  21. BEGIN
  22.      CALL sp_auditoria_log('tg_disparador_nombre_tabla',
  23.                            'AFTER', 'ROW', 'UPDATE',
  24.                            'nombre_tabla',
  25.                            CONCAT(OLD.campo1, ',', OLD.campo2, ',', OLD.campo3, ',', OLD.campo4, ',', OLD.campoN),
  26.                            CONCAT(NEW.campo1, ',', NEW.campo2, ',', NEW.campo3, ',', NEW.campo4, ',', NEW.campoN));
  27. END;
  28. $$
  29. DELIMITER ;
  30.  
  31. DROP TRIGGER IF EXISTS tg_disparador_nombre_tabla;
  32. DELIMITER $$
  33. CREATE TRIGGER tg_disparador_nombre_tabla
  34.    AFTER DELETE ON nombre_tabla
  35.    FOR EACH ROW
  36. BEGIN
  37.      CALL sp_auditoria_log('tg_disparador_nombre_tabla',
  38.                            'AFTER', 'ROW', 'DELETE',
  39.                            'nombre_tabla',
  40.                            CONCAT(OLD.campo1, ',', OLD.campo2, ',', OLD.campo3, ',', OLD.campo4, ',', OLD.campoN),
  41.                            NULL);
  42. END;
  43. $$
  44. DELIMITER ;

Adjunto SP que genera los triggers de las tablas que se le pasen como parametro, las imprime en un select, si conocen una forma de ejecutarlos directamente, con PREPARE-EXECUTE y no me funcionó.
Código: SQL
  1. DROP PROCEDURE IF EXISTS sp_genera_triggers;
  2. DELIMITER $$
  3. CREATE PROCEDURE sp_genera_triggers (IN schema_auditar VARCHAR(50),
  4.                                      IN tablasNo LONGTEXT CHARSET utf8)
  5. BEGIN
  6.     DECLARE tg_insert, tg_update, tg_delete LONGTEXT;
  7.     DECLARE stmt, tablasTrigger LONGTEXT;
  8.     DECLARE nombreTabla VARCHAR(50);
  9.     DECLARE completo INT DEFAULT FALSE;
  10.  
  11.     -- --------------------------------------------------------
  12.     -- [ Se escogen las tablas que están por fuera de la lista]
  13.     -- --------------------------------------------------------
  14.     DECLARE tablas_lista CURSOR
  15.     FOR SELECT TABLE_NAME
  16.         FROM INFORMATION_SCHEMA.TABLES  
  17.         WHERE TABLE_SCHEMA=schema_auditar AND
  18.               !FIND_IN_SET(TABLE_NAME, tablasNo);
  19.              
  20.     DECLARE CONTINUE HANDLER
  21.         FOR NOT FOUND SET completo = TRUE;
  22.        
  23.     OPEN tablas_lista;
  24.  
  25.     cursor_loop: LOOP
  26.         FETCH tablas_lista INTO nombreTabla;
  27.  
  28.         IF completo THEN
  29.             LEAVE cursor_loop;
  30.         END IF;
  31.  
  32.         -- -------------------------------------------------------------------
  33.         -- [ Crea los triggers INSERT/UPDATE/DELETE de las tablas permitidas ]
  34.         -- -------------------------------------------------------------------
  35.         SET tg_update := CONCAT('DROP TRIGGER IF EXISTS ',
  36.                                  schema_auditar,
  37.                                  REPLACE(nombreTabla, 'tn_', '.tg_upd_'), ';\n',
  38.                                  'DELIMITER $$\n',
  39.                                  'CREATE TRIGGER ',
  40.                                  schema_auditar,
  41.                                  REPLACE(nombreTabla, 'tn_', '.tg_upd_'), '\n',
  42.                                  '   AFTER UPDATE ON ', nombreTabla,'\n',
  43.                                  '   FOR EACH ROW\n',
  44.                                  'BEGIN\n',
  45.                                  '     CALL sp_auditoria_log(\'', nombreTabla, '\',\n',
  46.                                  '                           \'AFTER\', \'ROW\', \'UPDATE\', \n',
  47.                                  '                           \'', nombreTabla, '\', \n');
  48.                                  
  49.         SET tg_delete := REPLACE(tg_update, 'tg_upd_', 'tg_del_');
  50.         SET tg_delete := REPLACE(tg_delete, 'UPDATE', 'DELETE');
  51.         SET tg_insert := REPLACE(tg_update, 'tg_upd_', 'tg_ins_');
  52.         SET tg_insert := REPLACE(tg_insert, 'UPDATE', 'INSERT');
  53.        
  54.         SET stmt := (SELECT CONCAT('                           CONCAT(',
  55.                                    GROUP_CONCAT(CONCAT('OLD.', COLUMN_NAME) SEPARATOR ', \',\', '),
  56.                                    '),\n')
  57.                      FROM information_schema.COLUMNS
  58.                      WHERE TABLE_SCHEMA=BINARY schema_auditar AND
  59.                            TABLE_NAME=BINARY nombreTabla);
  60.         SET tg_update := CONCAT(tg_update, stmt);
  61.         SET tg_delete := CONCAT(tg_delete, stmt,
  62.                                 '                           NULL',
  63.                                 ');\nEND;\n$$\nDELIMITER ;\n\n');
  64.        
  65.         SET stmt := (SELECT CONCAT('                           CONCAT(',
  66.                                    GROUP_CONCAT(CONCAT('NEW.', COLUMN_NAME) SEPARATOR ', \',\', '),
  67.                                    ')')
  68.                      FROM information_schema.COLUMNS
  69.                      WHERE TABLE_SCHEMA=BINARY schema_auditar AND
  70.                            TABLE_NAME=BINARY nombreTabla);
  71.         SET tg_update := CONCAT(tg_update, stmt, ');\nEND;\n$$\nDELIMITER ;\n\n');
  72.         SET tg_insert := CONCAT(tg_insert,
  73.                                 '                           NULL,\n',
  74.                                 stmt, ');\nEND\n$$\nDELIMITER ;\n\n');
  75.  
  76.  
  77.         SET tablasTrigger := CONCAT(tg_insert, tg_update, tg_delete);
  78.        
  79.         SELECT tablasTrigger;
  80.        
  81.     END LOOP;
  82.     CLOSE tablas_lista;
  83.    
  84.     SET script := tablasTrigger;
  85. END $$
  86.  

Código: SQL
  1. SET @tablasNo:='tabla1,tabla2,tabla3,tabla4,tablaN';
  2.  
  3. CALL sp_genera_triggers('nombre_schema', @tablasNo, @scriopt);

6
PHP / Re:Obtener la fecha de la última actualización de una tabla con PHP
« en: Viernes 3 de Febrero de 2017, 22:30 »
No sé si todavía te sirve, pero con ésta consulta obtendrás lo que necesitas.
Código: SQL
  1. SELECT UPDATE_TIME
  2. FROM information_schema.TABLES
  3. WHERE TABLE_SCHEMA='base de datos' AND TABLE_NAME='tabla';
  4.  

7
HTML / Re:Lo tomo de aqui y lo pongo por aca
« en: Martes 24 de Marzo de 2015, 14:00 »
Con HTML no se puede, lo que puedes hacer es guardar esos datos en un form con text ocultos y por medio de javascript enviarlos de una página a otra por medio de parámetros GET

8
La taberna del BIT / Re:Fotos de Usuarios del Foro
« en: Viernes 12 de Diciembre de 2014, 15:01 »
Que post, cómo extraño a los locos que conocí en mis inicios de SoloCódigo, con ellos aprendí muchísimo  :gracias:

9
Python / Re:15 tutoriales en pdf de python
« en: Lunes 5 de Mayo de 2014, 03:56 »
Excelente :gracias: :gracias:

10
C/C++ / Re:Package R does not exist
« en: Domingo 4 de Mayo de 2014, 03:58 »
Te equivocaste de foro, lo que debes hacer es buscar la clase R de Java o precompilar la aplicación para que se vuelva a autogenerar, o por lo menos eso pasa en eclipse

11
PHP / Re:iteraccion foreach con div en php
« en: Domingo 9 de Marzo de 2014, 04:14 »
Pues todo parece estar bien, revisa las capas que de pronto va por ese lado.

PD: Quién tiene ahora mis clases de Énfasis II y III?

12
VB .NET / Re:tarea
« en: Miércoles 13 de Noviembre de 2013, 01:27 »
por favor!! necesito resolver esto podrian ayudarme con el codigo por favor! ingrese una fecha y diga cuantos dias faltan para acabar el año,
cuantos dias han pasado desde esa fecha hasta la fecha actual,que dia cae esa fecha(lunes,martes), y mestre la misma fecha en el sigueinte formato:" lunes 15 de abril de 2003" es urgente ayuda por favor!
Bravo, un inútil más en este mundo, gracias a personas como tú yo seguiré teniendo trabajo

13
PHP / [Código Fuente] Re:Software de Control de Acceso de Personal
« en: Jueves 7 de Noviembre de 2013, 05:25 »
Si está en un linux prueba los permisos a los directorios, muestra un pantallazo y te colaboro

14
Servidores / Re:Montar Un Servidor De Correo
« en: Martes 15 de Octubre de 2013, 00:27 »
bueno muchachos... les cuento q yo no estoy casado con IIS, lo unico q me
apegaba a él, era q yo le daba click derecho y podia configurar mi sitio desde
alli facilmente.

pero como no pude ponerlo a andar con PHP, entonces ahora coji e instale
la version del Servidor Apache 2.2 Estable, luego instalo lanzo el instalador
de PHP y en su transcurso me pide q le indique el servidor web, y yo le
indico q es Apache 2.2 (al parecer el mismo deberia configurar el .ini de
Apache).

Ahora ya tengo coriendo Apache en mi equipo... y corre perfectamente con
paginas HTML... pero cuando le doy un .php nohace nada, ni siquiera me da
el error q anteriormente me daba IIS.
.....
Bueno muchachos... gracias x su colaboracion, voy a seguir buscando por
hay por la red algun documento q me pueda servir...

...,y porsupuesto, voy a intentar con las sugerencias q me dieron....
pa' ver como me va...

Lo que pienso que te faltaria es que le digas a Apache que tiene al php como modulo y asi tambien que los archivos de php los interprete como tal.
tambien para salir de dudas puedes hacer lo siguiente:

Si te tomaste la molestia de leer este enunciado te darás cuenta que es un post de hace 6 años

15
La taberna del BIT / Re:Foros mas activos
« en: Sábado 7 de Septiembre de 2013, 04:19 »
yo nunca dejaré el foro, acá aprendí muchísimo de manos de muchos monstruos de la programación y aunque no lo visito si lo tengo en mi FeedRSS para ver los mensajes que me traman

16
La taberna del BIT / Re:Foros mas activos
« en: Martes 3 de Septiembre de 2013, 19:52 »
Exactamente, los inútiles de ahora quieren todo el código hecho

17
PHP / Re:Mostrar registros de Mysql en un Formulario en php
« en: Jueves 22 de Agosto de 2013, 19:13 »

18
C/C++ / Re:Libreria crypto++ linux
« en: Jueves 15 de Agosto de 2013, 23:47 »
Usa una ruta interna en tu path de la aplicación y usa el include con las comillas

Código: C
  1. #include "cripto/loquesea.h"

19
Programación Lógica / Re:laberinto
« en: Miércoles 14 de Agosto de 2013, 17:54 »
Con mucho cuidado y paciencia :suerte:

20
Python / Re:Problema Codigo
« en: Viernes 2 de Agosto de 2013, 19:56 »
Intentalo con excepciones

Código: Python
  1. try:
  2.   # código
  3. except:
  4.   # código

21
PHP / Re:tengo una duda sobre ataques informaticos
« en: Domingo 28 de Julio de 2013, 06:12 »
Mira sobre ataques SQL Injection, XSS, HTML Injection, con unas cuantas funciones te puedes ahorrar muchos problemas, pero recuerda que nunca será siempre segura, pero por lo menos para los más bobos te servirá; 2 funciones que te ayudarán son, htmlentities y stripslashes

22
PHP / Re:PHP
« en: Lunes 8 de Julio de 2013, 18:37 »
la etiqueta select no debes ponerle type="text", el select es una etiqueta aparte del input que si tiene varios tipos, deja el select sin ese atributo type y prueba

23
C/C++ / Re:Abrir archivo .txt en bloc de notas!
« en: Viernes 28 de Junio de 2013, 18:10 »
Busca sobre hilos en C

24
PHP / Re:no puedo guardar en la bd, cual sera el error php
« en: Martes 25 de Junio de 2013, 17:55 »
"UPDATE profesor  SET rut=".'$_POST["rut"]'.",nombre='".$_POST["nombre"].",apellido=".$_POST["apellido"].",telefono=".$_POST["telefono"]."WHERE rut=".$_GET["id"].";"

faltan comillas y hay comillas de sobra, revisa bien, en la primera las comillas simples están mal puestas; en la segunda, pusiste al principio y no al final, en la tercera si es una cadena apellido, le hacen falta las comillas

25
HTML / Re:Boton que de valor a una variable
« en: Martes 25 de Junio de 2013, 16:24 »
Esta parte la debes manejar con javascript ya que HTML no maneja calculos,

Páginas: [1] 2 3 ... 123