|
1
|
Sistemas Operativos / Unix/Unix-Like / Expirar passwords inmediatamente en Unix
|
en: 7 Mayo 2017, 00:37 am
|
Saludos
Necesito saber de que manera se pueden expirar las contraseña de un nuevo usuario, o sea creo el usuario, le doy una contraseña y la proxima vez que este se loguee oblique al usuario a cambiar la contraseña. Intenté usar el comando chage -d 0, pero este no expira la contraseña inmediatamente despues de la creacion del usuario sino que se tiene que hacer manualmente. Hay alguna manera de hacerlo automaticamente
De antemano gracias
|
|
|
2
|
Programación / PHP / envio de correo con función phpmailer
|
en: 23 Octubre 2016, 20:54 pm
|
Saludos Soy principiante en porgramación web y estoy haciendo una pequeña aplicación que debe de enviar un formulario por correo. Simplemente ingresas el correo al que deseas enviar y das clic en el boton. Instale correctamente el wamp y la libreria PHPMailer, pero no se cual sea el problema . <?php include_once('phpmailer/class.phpmailer.php'); include_once('phpmailer/class.smtp.php'); if(isset($_POST['correo'] && !empty($_POST['correo']))) { $mail = new PHPMailer(); $mail->IsSMTP(); $mail->SMTPAuth = true; $mail->SMTPSecure = "ssl"; $mail->Host = "smtp.gmail.com"; $mail->Port = 465; $mail->Username ='xxxxxxxxx@gmail.com'; $mail->Password = '*********'; //Agregar destinatario $para = $_POST['correo']; $mail->AddAddress($para); $mail->Send(); } ?>
no se cual puede ser el error, esta es la parte hecha en html donde se ingresa el correo al que deseas enviar <!DOCTYPE html> Pounce <link rel="stylesheet" type="text/css" href="../css/styles.css" media="screen" /> <img src="../images/pounce.jpg" alt="" /> <FORM action="enviar.php" METHOD="POST"> <h3>Escribe el correo al que deseas enviar una invitacion: </h3> <INPUT name="correo" required> <INPUT type="submit" value="Enviar">
|
|
|
3
|
Programación / Programación General / Lisp
|
en: 16 Mayo 2016, 00:12 am
|
Saludos Tengo el siguiente codigo en lisp que es un sistema experto para apagar un incendio. El problema es que no entiendo muy bien el funcionamiento del programa. Primero esta defrule inicio, y despues esta el initial-fact, pero no se que significa esta instrucción. Despues tenemos(assert (se-quema (read))), que lee el material que se esta quemando, pero apartir de alli ya no se como continua la ejecución del código. Si alguien me lo pudiera explicar se lo agradeceria (deffacts inicio (materiales A papel madera tela) (materiales B aceite gas lubricante) (materiales C magnesio sodio potasio) (extintores A agua sustancia-quimica-seca) (extintores B co2 sustancia-quimica-seca) (extintores C co2 espuma) ) (defrule tipo-incendio (se-quema ?material) (materiales ?tipo $? ?material $?) => (assert (incendio-tipo ?tipo)) (printout t "Hay un incendio de tipo " ?tipo crlf) (printout t "De que es el extintor?" crlf) (assert (tengo-extintor-de (read))) ) (defrule tipo-extintor (tengo-extintor-de ?x) (extintores ?tipo $? ?x $?) => (assert (tengo-extintor ?tipo ?x)) (printout t "Tenemos un extintor de " ?x " que es de tipo " ?tipo crlf) ) (defrule puedo-apagar (incendio-tipo ?tipo) (tengo-extintor ?tipo ?x) => (assert (puedo-apagar)) (printout t "El incendio se puede apagar con el extintor de " ?x crlf) ) (defrule inicio (initial-fact) => (printout t "Que se quema? " crlf) (assert (se-quema (read))) )
|
|
|
4
|
Programación / Programación C/C++ / guardar una imagen bmp
|
en: 20 Noviembre 2015, 17:53 pm
|
Saludos Tengo el siguiente código en C++ que tiene una función llamada Bresenham(), que nos va a dibujar una(s) linea(s) simple en la ventana. Una vez que se dibujó la línea, el usuario debe de dar clic derecho en la ventana para que las líneas se guarden como una imagen bmp. Para esto tengo que crear dos estructuras: bmpInfoHeader y bmpFileHeader. El problema que tengo es que en la estructura de bmpFileHeader no se cómo calcular los campos de altura y anchura, y al momento de abrir la imagen no me aparece nada #include<windows.h> #include<stdio.h> #include<stdlib.h> #include<stdint.h> #include<gl/glut.h> typedef struct { uint32_t tamanio; uint16_t campoReservado; uint32_t offset; }bmpFileHeader; typedef struct { uint32_t tamanioEncabezado; uint32_t anchura; uint32_t altura; uint16_t planos; uint16_t profundidadModeloColor; uint32_t compresion; uint32_t tamanioImagen; uint32_t bmpx; uint32_t bmpy; uint32_t colores; uint32_t impColores; }bmpInfoHeader; float a[90000]; int x0=0,y0=0,xf=0,yf=0; int puedeImprimir=0; FILE *bmp = NULL; unsigned char *imagen; bmpInfoHeader infoEncabezado; bmpFileHeader encabezadoArchivo; void init(void); void putpixel(int x,int y); void Bresenham(int x0,int y0,int x1,int y1); void display(void); void onMotion(int x,int y); void onMouse(int button, int e, int x, int y); void onPassive(int x,int y); void crearEncabezadoInformacion(bmpInfoHeader *infoEncabezado); void crearEncabezadoArchivo(bmpFileHeader *encabezadoArchivo); void Guardar(bmpFileHeader *encabezadoArchivo,bmpInfoHeader *infoEncabezado); int main() { glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH); glutInitWindowSize(300, 300); glutInitWindowPosition(100, 100); glutCreateWindow("Practica 2. Trazo de lineas con mouse"); init(); glutDisplayFunc(display); glutMotionFunc(onMotion); glutMouseFunc(onMouse); glutPassiveMotionFunc(onPassive); glutMainLoop(); } void init(void) { glClearColor(1.0, 1.0, 1.0, 0.0); glMatrixMode(GL_PROJECTION); gluOrtho2D(0.0, 300.0, 0.0,300.0); } void putpixel(int x,int y) { glColor3f(0.0, 0.0,0.0); glBegin(GL_POINTS); glVertex2i(x,y); glEnd(); } void Bresenham(int x0,int y0,int x1,int y1) { int dx,dy,p,x,y,pasox = 1,pasoy = 1,dosDymenosDx,dosDy,i; glColor3f(0.0,0.0,1.0); dx = x1-x0; dy = y1-y0; if(dx < 0) dx = dx*-1; if(dy < 0) dy = dy*-1; if(x1 < x0) pasox = -1; if(y1 < y0) pasoy = -1; x = x0; y = y0; if( dx > dy ) { putpixel(x,y); p = 2 * dy - dx; dosDymenosDx = 2 * ( dy - dx ); dosDy = 2 * dy; for( i = 0; i < dx; i++ ) { if( p >= 0 ) { y += pasoy; p += dosDymenosDx; } else p += dosDy; x += pasox; putpixel(x,y); } } else { putpixel(x,y); p = 2*dx - dy; dosDymenosDx = 2 * ( dx - dy ); dosDy = 2*dx; for( i = 0; i < dy; i++ ) { if( p >= 0 ) { x += pasox; p += dosDymenosDx; } else p += dosDy; y += pasoy; putpixel(x,y); } } glFlush(); } void display(void) { glClear(GL_COLOR_BUFFER_BIT); if(puedeImprimir==1) glDrawPixels(300,300,GL_RGB,GL_UNSIGNED_BYTE,a); Bresenham(x0,y0,xf,yf); glFlush(); } void onMotion(int x,int y) { xf = x; yf = 300-y; glutPostRedisplay(); } void onMouse(int button, int e, int x, int y) { unsigned char media; if((button == GLUT_LEFT_BUTTON) && (e == GLUT_DOWN)) { puedeImprimir = 1; x0 = xf = x; y0 = yf = abs(300-y); } else if((button == GLUT_LEFT_BUTTON) && (e == GLUT_UP)) puedeImprimir = 0; else if((button == GLUT_RIGHT_BUTTON) && (e == GLUT_UP)) { //Abrir(); crearEncabezadoInformacion(&infoEncabezado); Guardar(&encabezadoArchivo,&infoEncabezado); } } void crearEncabezadoInformacion(bmpInfoHeader *infoEncabezado) { infoEncabezado = (bmpInfoHeader*)malloc(sizeof(bmpInfoHeader)); infoEncabezado->tamanioEncabezado = sizeof(bmpInfoHeader); infoEncabezado->anchura = ????; infoEncabezado->altura = ????; infoEncabezado->planos = 1; infoEncabezado->profundidadModeloColor = 24; infoEncabezado->compresion = BI_RGB; infoEncabezado->tamanioImagen = ?????; infoEncabezado->bmpx = 0; infoEncabezado->bmpy = 0; infoEncabezado->colores = 0; infoEncabezado->impColores = 0; } void Guardar(bmpFileHeader *encabezadoArchivo,unsigned char *imagen,bmpInfoHeader *info) { uint16_t firma; if((bmp = fopen("practica no. 7.bmp","wt"))!= NULL) { firma = 0x4D42; encabezadoArchivo->campoReservado = 0; encabezadoArchivo->offset = sizeof(bmpFileHeader)+sizeof(bmpInfoHeader)+2; encabezadoArchivo->tamanio = info->tamanioImagen+sizeof(bmpFileHeader)+sizeof(bmpInfoHeader); fwrite(&firma,sizeof(firma),1,bmp); fwrite(encabezadoArchivo,sizeof(bmpFileHeader),1,bmp); fwrite(info,sizeof(bmpInfoHeader),1,bmp); } else printf("No se pudo crear fichero"); } void onPassive(int x,int y) { glReadPixels(0.0,0.0,300.0,300.0,GL_RGB,GL_UNSIGNED_BYTE,a); Bresenham(x0,y0,xf,yf); }
alguna idea de cómo arreglarlo?
|
|
|
5
|
Programación / Java / Multihilos
|
en: 21 Septiembre 2015, 05:38 am
|
Saludos, estoy haciendo un programa el cuál tiene que correr e imprimir X número de procesos en una JTextArea, para esto utilizo un hilo de la siguiente manera { Nodo enEjecucion; private Hilo2 hilo2; private static final int CANICAS_X_LOTE = 5; private boolean puedeImprimir = true,sinPulsar = true; private static LinkedList<Nodo> listos = new LinkedList<Nodo>(); private JTextArea areaTexto1,areaTexto2,areaTexto3,areaBloqueados ; private int numeroCanicas,id = 1; { numeroCanicas = numero; areaTexto1 = a1; areaTexto2 = a2; areaTexto3 = a3; areaBloqueados = bloqueados; campoTeclaPulsada = campoTeclax; campoTeclaPulsada.addKeyListener(this); } public void run() { for(int i = 1;i <= CANICAS_X_LOTE;i++) agregarCanica(); ejecutar(); } public void agregarCanica() { Nodo nodo = new Nodo(); nodo.ID = id; nodo.Tiempo = (int)(t.nextDouble() * 5 + 1); nodo.tipoCanica = elegirTipoCanica(); listos.add(nodo); id++; } public void ejecutar() { long tiempo; while(!listos.isEmpty() && puedeImprimir) { imprimirListos(); try { enEjecucion = listos.removeFirst(); areaTexto1.setText(null); if(id <= numeroCanicas) agregarCanica(); imprimirListos(); areaTexto2.append("ID: "+enEjecucion.ID+"\nTiempo: "+enEjecucion.Tiempo+"\nTipo: "+enEjecucion.tipoCanica+"\n\n"); tiempo = (enEjecucion.Tiempo)*1000; areaTexto2.setText(null); if(sinPulsar) areaTexto3.append("ID: "+enEjecucion.ID+" Tiempo: "+enEjecucion.Tiempo+" Tipo: "+enEjecucion.tipoCanica+"\n"); } e.printStackTrace(); } } areaTexto2.setText(null); } public void imprimirListos() { Iterator<Nodo> it = listos.iterator(); while(it.hasNext()) { Nodo canica = (Nodo)it.next(); areaTexto1.append("Canica: "+canica.ID+"\tTiempo: "+canica.Tiempo+"\n"); } areaTexto1.append("\n"); } public static String elegirTipoCanica () { int indice; String tipo [] = {"Ojo de gato", "Transparente", "Bolones", "Trebol", "Agatas", "Vergel", "Onix", "Piojines", "Tirito", "Japonesa"}; indice = (int)(n.nextDouble() * 9 + 0); return tipo[indice]; } { hilo2 = new Hilo2(areaBloqueados,enEjecucion); hilo2.start(); } }
El problema que tengo es que tengo que utilizar un evento de boton, una vez que oprima el boton se tiene que bloquear el proceso que se esta imprimiendo, yo por eso cree otro hilo al que le paso el JTextArea donde se va a imprimir el proceso bloqueado y el proceso. public class Hilo2 extends Thread{ private long espera; private Nodo bloqueado; public Hilo2 (JTextArea area,Nodo enEjecucion ) { bloqueado = enEjecucion; } public void run() { try { bloqueado.Tiempo = (int)(t.nextDouble()* 7 + 5); espera = (bloqueado.Tiempo)*1000; areaBloqueados.append("ID: "+bloqueado.ID+" Espera: "+bloqueado.Tiempo+" Tipo: "+bloqueado.tipoCanica+"\n"); } } }
pero me lanza un error una vez que el hilo2 se ejecuta y no se cual es el problema de antemano gracias
|
|
|
6
|
Programación / Java / duda con wait() y notify()
|
en: 12 Septiembre 2015, 01:13 am
|
Saludos Estoy haciendo el siguiente código en el que tengo dos hilos, cada uno de los cuales va a imprimir un contador en un área de texto. En el código tengo un botón, el cual se va a bloquear(deja de imprimir) si hago clic en el botón y se desbloquea una vez que haga clic otra vez en el botón. Para esto traté de usar un wait() y un notify, pero creo que no los estoy usando correctamente porque la primera vez que oprimo el botón si se bloquea pero a la segunda no se desbloquea import java.awt.*; import java.util.Random; import java.awt.event.*; import javax.swing.*; private int cuenta = 0; private long pausa; private boolean puedeImprimir = true; Hilo (long milisegundos, JTextArea cuadroTexto ){ pausa = milisegundos; areaTexto = cuadroTexto; } public void ocurrioBotonazo(){ if(puedeImprimir) this.puedeImprimir = false; else { this.puedeImprimir = true; reanudar(this); } } public synchronized void reanudar(Hilo hilo) { if(hilo.puedeImprimir) hilo.notify(); } public void run() { while(this.puedeImprimir) { try { this.imprimirContador(); this.cuenta++; } { e.printStackTrace(); } } } public void imprimirContador(){ areaTexto.setText(tiempo); } } private Hilo hilo,hiloEvento; Interfaz() { hilo = new Hilo(2000,areaTexto); hiloEvento = new Hilo(1000,areaTexto2); boton = new JButton("Pausar/Reanudar"); hilo.start(); hiloEvento.start(); boton.addActionListener(this); } { hiloEvento.ocurrioBotonazo(); } } public class MensajesHilos { public static void main (String[] args ){ Interfaz i = new Interfaz(); i.setTitle("Hilos de Control"); i.setBounds(200, 200, 300, 240); i.setVisible(true); } }
gracias de antemano
|
|
|
7
|
Programación / Java / problema con setText("")
|
en: 8 Septiembre 2015, 00:18 am
|
Saludos Tengo el siguiente problema con un textArea con el que estoy trabajando. Primero, con el método append() imprimo en el area de texto unos datos que se encuentran en una lista, esto por medio de un ciclo while que va a iterar hasta que la lista se quede vacia. una vez que termina de recorrer cada uno de los elementos de la lista se elimina el primer elemento de la lista y se limpia el textArea, esto lo hice con setText(""). Y se regresa sucesivamente al ciclo while() cada vez que eliminas un elemento de la lista. El problema es que no se como borrar correctamente el textArea para que se pueda volver a escribir alli public void x(){ Nodo enEjecucion; while(!lista.isEmpty()) { imprimirListos(); enEjecucion = lista.getFirst(); lista.remove(enEjecucion); } } public void imprimirListos() { Iterator<Nodo> it = lista.iterator(); while(it.hasNext()) { Nodo canica = (Nodo)it.next(); areaTexto1.append("Canica: "+canica.ID+"\tTiempo: "+canica.Tiempo+"\n"); } areaTexto1.setText(""); }
el setText("") que se supone deberia de limpiar no me deja volver a escribir nada en el area de texto. ¿cómo puedo solucionar esto??
|
|
|
8
|
Programación / Java / Uso del KeyListener
|
en: 27 Agosto 2015, 22:50 pm
|
Saludos, tengo el siguiente código el cuál me imprime el ID y el tiempo de duración de X número de procesos. El problema es que tengo que agregarle un evento de teclado, una vez que está corriendo el programa, si yo oprimo la tecla E me tiene que salir un mensaje de error y continuar con la ejecucion de procesos, y si oprimo la tecla S la ejecucion para por completo. Busqué información de keyListener y trate de agregarle el evento de teclado como pude, pero no funciona correctamente y no sé que estoy haciendo mal import java.awt.*; import java.awt.event.*; import java.util.Random; import javax.swing.*; private boolean puedeImprimir; private int ID,numeroCanicas,Tiempo; public Hilo (JTextArea areaTextox, int numeroCanicasx ) { areaTexto = areaTextox; puedeImprimir = true; numeroCanicas = numeroCanicasx; ID = 1; } { if(e.getKeyCode() == 69) System. out. println("Error de"); if(e.getKeyCode() == 83) puedeImprimir = false; } public void run() { for(int i = 0;i < numeroCanicas;i++) { try { Tiempo = (int)(t.nextDouble() * 5 + 1); this.imprimirDatos(Tiempo,ID); Tiempo*=1000; this.ID++; } { e.printStackTrace(); } } } public void imprimirDatos(int Tiempo,int ID) { areaTexto.append("ID: "+id+"\tTiempo: "+tiempo+"\n"); } } private int numeroCanicas; private Hilo hilo; public Interfaz() { numeroCanicas = (int)(n.nextDouble() * 10 + 1); System. out. println(""+numeroCanicas ); etiqueta = new JLabel("Número Canicas : "+numeroCanicas ); etiqueta.setBounds(10, 11, 96, 14); hilo = new Hilo(areaTexto,numeroCanicas); hilo.start(); addKeyListener(this); } hilo.letraOprimida(e); } } public void keyReleased (KeyEvent arg0 ) { } } public class Canicas { public static void main (String[] args ) { Interfaz interfaz = new Interfaz(); interfaz.setTitle("Canicas"); interfaz.setBounds(200, 200, 300, 300); interfaz.setVisible(true); } }
de antemano gracias
|
|
|
9
|
Programación / Java / problema con método sleep de Thread
|
en: 19 Agosto 2015, 20:45 pm
|
Saludos Tengo el siguiente hilo en el cual una vez que se ejecuta con el método run(), imprimo un dato y después hago una pausa con el método sleep, el problema es que el tiempo de pausa tiene que ser un número aleatorio entre 10 y 1, pero como el parámetros de sleep() debe ser tipo long, lo puse como 10000 y 1000: tiempo = (long)(t.nextDouble() * 10000 + 1000);
despues de asingarle un numero aleatorio tengo que imprimir la variable tiempo, pero esta vez como entero por ejemplo si quiero una pausa de 1 segundo o sea sleep(1000) quiero que me imprima tiempo = 1 seg, pero me imprime tiempo = 1000 ¿cómo puedo solucionar esto??? de antemano gracias
|
|
|
10
|
Programación / Java / simulador de procesos
|
en: 23 Junio 2015, 03:36 am
|
Saludos Tengo el siguiente programa que se trata de un simulador de procesos Tengo que introducir desde el teclado N procesos, estos seran los que conformen los lotes, la capacidad máxima de un lote es de 5, y si el número de procesos que se introduce excede esta cantidad, se conformará otro lote.Al terminar un lote se ejecuta. La información a capturar por cada proceso es: 1)Nombre de Programador 2)Operación(+,-,*,/) y datos a realizar(validar operaciones) 3 Tiempo Máximo Estimado (validar, debe ser mayor a 0) Los procesos se atenderán en el orden en que se capturaron. En pantalla debe mostrarse lo siguiente: a) Procesos en Espera 1) Nombre de programador 2) Tiempo Maximo Estimado 3) Si hay lotes en espera, anotar el número de lotes pendientes. b) Proceso en Ejecucion 1) Se deberán mostrar todos los datos del proceso (Nombre, Operacion, tiempo max) 2) Tiempo transcurrido de ejecución 3) Tiempo restante por ejecutar. c) Procesos Terminados 1) Número de Programa 2) Operación y datos 3) Resultado de la operación. Desde que se inicia la simulacion, se desplegará un reloj global, es decir, un contador que lleve el tiempo desde el inicio del programa hasta que termine El programa se pausa una vez que se hayan realizado todas las operaciones. hasta ahora tengo ya la parte que captura la información de los procesos y los va almacenando en un arreglo de tipo infoProceso, pero no se bien como tengo que usar hilos (Threads) para que se vayan ejecutando los procesos, tengo que usar una clase para los lotes??? el codigo es el siguiente: class infoProceso{ int numeroPrograma,tiempoMaximo,num1,num2,resultado; char operador; } public class ProcesamientoPorLotes { public static int MAX = 5; public static infoProceso[] lote = new infoProceso[50]; public static void main (String[] args ) { int numProcesos; Scanner entradaTeclado = new Scanner (System. in); System. out. println("Dame el numero de procesos: "); numProcesos = entradaTeclado.nextInt(); entradaTeclado.close(); capturarInformacion(numProcesos); } public static void capturarInformacion(int numProcesos) { String nombre = "",operador = ""; boolean opValido,tiempoValido = true,idRepetido = false; int tiempo,numero,i,j; for(i = numProcesos;i > 0;i--) { for(j = 0;j < MAX;j++) { Scanner teclado = new Scanner (System. in); //ingresar nombre del programador System. out. println("Dame Nombre de Programador: "); nombre = teclado.nextLine(); lote[j].nombreProgramador = nombre; //ingresar la operación do { System. out. println("Dame la Operacion: "); operador = teclado.nextLine(); teclado.close(); opValido = validarOperador(operador); }while(!opValido); capturarOperacion(operador,j); //ingresar el máximo tiempo estimado do { System. out. println("Dame el tiempo maximo estimado: "); tiempo = teclado.nextInt(); teclado.close(); tiempoValido = validarTiempo(tiempo); }while(!tiempoValido); lote[j].tiempoMaximo = tiempo; //ingresar ID do { System. out. println("Dame el numero de programa: "); numero = teclado.nextInt(); teclado.close(); verificarID(numero); }while(idRepetido); } // } } public static boolean verificarID(int numero) { boolean esRepetido = false; return esRepetido; } public static boolean validarOperador (String op ) { boolean esValido; char operador = op.charAt(0); if(operador == '+' || operador == '-' || operador == '*' || operador == '/') esValido = true; else esValido = false; return esValido; } public static boolean validarTiempo(int tiempo) { boolean esValido = true; if(tiempo <= 0) { System. out. println("Tiempo invalido (debe ser mayor a 0).\nIntroducir dato nuevamente"); esValido = false; } return esValido; } public static void capturarOperacion (String op, int j ){ char operador = op.charAt(0); int num1,num2; Scanner entrada1 = new Scanner (System. in); Scanner entrada2 = new Scanner (System. in); System. out. println("Dame el numero1: "); num1 = entrada1.nextInt(); System. out. println("Dame el numero2: "); num2 = entrada2.nextInt(); lote[j].num1 = num1; lote[j].num2 = num2; lote[j].operador = operador; switch(operador) { case '+': lote[j].resultado = lote[j].num1+lote[j].num2; break; case '-': lote[j].resultado = lote[j].num1-lote[j].num2; break; case '*': lote[j].resultado = lote[j].num1*lote[j].num2; break; case '/': lote[j].resultado = lote[j].num1/lote[j].num2; break; } entrada1.close(); entrada2.close(); } }
de antemano gracias
|
|
|
|
|
|
|