Jump to content

susodicho

Warianos
  • Posts

    128
  • Joined

  • Last visited

  • Days Won

    4

Everything posted by susodicho

  1. Cuando tengas dudas, siempre deberías consultar la documentación oficial primero ;) Como dije antes, para poder ordenar las fechas cronológicamente, hay que usar el formato YYYY-MM-DD, pero como guardaste las fechas de la forma DD-MM-YYYY, entonces lo que hago es extraer los componentes de la fecha (año, mes y día) y pásarselos al ORDER BY. Generalmente, al ORDER BY se le pasa una o más columnas para ordenar las filas (Ej: ORDER BY apellido,rut, quiere decir que si hay varias personas que tienen el mismo apellido, entonces las filas que contienen el mismo apellido se ordenan por RUT). En este caso, no se pasan columnas al ORDER BY, sino cadenas extraídas de la columna fecha; así que sería similar a usar algo como ORDER BY año, mes, día, donde año, mes y día son sub-cadenas extraídas de una cadena más grande. Así que, en este caso, "recorto" los componentes de cada fecha y se los paso al ORDER BY en el orden que me interesa (año, mes y día). :huasonto:
  2. :mmm: Es que para que las fechas puedan ordenarse (correctamente) tienes que guardarlas en el formato YYYY-MM-DD. Pero si ya las guardaste así, podrías tratar haciendo la consulta de esta forma (no tengo idea si funciona) : Cursor c = db.query("rutinas", columns, null, null, null, null, "substr(fecha, 7, 4), substr(fecha, 4, 2), substr(fecha, 1, 2)"); :huasonto:
  3. :mmm: Sobre la cantidad de usuarios que se pueden conectar a una base de datos Access 97, encontré este artículo. Lo importante es el número de usuarios que se pueden conectar simultáneamente a la base de datos y, al parecer, la cifra bordea los 25 usuarios. Podrías leer este documento (del año 2004), creo que la parte que te interesa empieza en la página 17 (el título "Using Access Strategically"), pero si andas con ganas de leer, quizás podrías empezar desde el final de la página 13 (el título "Limitations of Access"). Ahora, ten en cuenta que ya están usando un producto que tiene casi 2 décadas (cuando todavía no existían los procesadores con varios núcleos) y no sé por cuánto tiempo más tienen pensado seguir usándolo. Supongo que la actualización que les ofrece su proveedor usa algún motor de base de datos gratuito (MySQL, PostgreSQL o SQL Server Express) y desarrollado en .NET. Esto es pura especulación mía, pero como mencionaste "programa SQL", creo que te refieres a SQL Server y, tomando en cuenta la cantidad de usuarios que necesitas que se conecten a la base de datos, supongo que sería una edición Express de SQL Server. Ahora, la edición Express tiene varias limitaciónes, pero creo que sería suficiente para lo que necesitan, o sea, la edición Express usa un máximo de 1 GB de RAM (no sé si esto será realmente una limitación a la hora de tener 10 usuarios conectados simultáneamente a la BD) y además el tamaño máximo de la BD es de 10 GB a partir de SQL Server 2008 R2 Express (dudo mucho que esto sea un problema, sospecho que con Access 97 estás más limitado, quizás no más de 2 GB). Puedes ver la lista de características de las distintas ediciones de SQL Server aquí. Insisto, lo de arriba es especulación mía, no puedo estar seguro. De hecho, quizás el nuevo sistema quizás use alguna edición pagada de SQL Server y esa sea una de las razones por la que es tan caro, o quizás use algún otro motor de bases de datos. Échale una mirada a esta pregunta sobre SQL Server Express y la cantidad de conexiones simultáneas que admite. :huasonto:
  4. En el enlace aparecen las instrucciones de cómo eliminar el SpyHunter, mira la captura: Sería algo así: Abres el Programador de tareas y eliminas la tarea del SpyHunterAbres el Explorador de Windows, vas a la carpeta C:\Users\NombreUsuario\AppData\Local\Temp y elimina el archivo SHSetup.exe Obviamente, tienes que remplazar donde dice NombreUsuario por tu nombre de usuario de Windows ;) Sigues los pasos que aparecen en el enlace (How to Uninstall SpyHunter) :huasonto:
  5. :mmm: Yo no me preocuparía por saber qué es el zlob.trojan, porque el problema en realidad es el SpyHunter (lee lo que aparece en el enlace). Es una aplicación dudosa, por decirlo de alguna manera; de hecho, quizás la infección no sea tal. Así que mejor preocúpate de desinstalar el SpyHunter, aunque parece que es más o menos difícil; creo que te convendría formatear. Igual sería interesante saber cómo llegó esta aplicación a tu equipo, ¿la instalaste tú?, ¿te la recomendaron?,... Si decides formatear, lo lógico sería que apenas termines de instalar Windows, instales algún antivirus gratuito bajado desde la página oficial de éste, y siempre prefiere los instaladores sin conexión (offline). :huasonto:
  6. De hecho, String.valueOf es directo igual que Boolean.toString (ambos devuelven un String), pero prefiero este último porque creo que es "más claro" en relación a lo que hace, ya que la llamada queda como Boolean.toString, que se ve igual que la frase "Boolean to String" ;) . Es más que nada porque es más evidente a la hora de revisar el código fuente. :missenyel:
  7. :mmm: Creo que puedes usar método estático valueOf de la clase Boolean (no confundir con el tipo nativo boolean :no: ), o la otra forma sería convertir la variable (suponiendo que es de tipo boolean) a Boolean y usar el método toString. Aunque también hay una versión estática del método toString y se usaría igual que valueOf (no hay necesidad de hacer una conversión explícita). Si entendí bien, la variable que necesitas convertir de boolean a String es atencion.isBd. Así que la línea podría quedar de alguna de estas formas: datos=atencion.getRut()+" "+ Boolean.valueOf(atencion.isBd()) +".\n"; datos=atencion.getRut()+" "+ ((Boolean)atencion.isBd()).toString() +".\n"; datos=atencion.getRut()+" "+ Boolean.toString(atencion.isBd()) +".\n"; En todo caso, creo que la forma más directa es la última, ya que devuelve directamente un String, mientras que valueOf devuelve una instancia de tipo Boolean y al concatenarse con una cadena, se llama implícitamente a toString. :huasonto:
  8. Desde Windows 8, el Reproductor de Windows Media ya no viene con la capacidad de reproducir DVD de video. O sea, puedes usar el Reproductor de Windows Media para ver archivos de video (MP4, AVI, WMV, etc.) y escuchar archivos de audio (MP3, WAV, WMA, etc.), pero no para ver películas en DVD , si quieres esta funcionalidad, tienes que instalar algún software de terceros (comprarlo o bajar uno gratuito) o adquirirla por separado. Así que la frase podría escribirse así: "Una vez instalada la versión preliminar de windows 10, no podrá ver películas en DVD con el Reproductor de Windows Media" :huasonto:
  9. En esta página aparece una forma de solucionar el problema. Básicamente tienes que hacer lo siguiente: Bajar la utilidad AutoRuns y ejecutarlaEn la pestaña Everything, buscar las filas de color amarillo y fijarse si en la columna Image Path hay algo que termine en \System\SysMenu.dllHacer clic con el botón derecho en dicha fila, y en el menú contextual que aparece, seleccionar la opción DeleteReiniciar el equipoOjo, debes tener claro que buscas filas que cumplan con estas 2 condiciones:Estar destacada en color amarilloLa columna Image Path de dicha fila debe contener una ruta de archivo que termine en "\System\SysMenu.dll"Insisto, deben cumplirse ambas condiciones. En tu caso, deberías encontrar 3 filas que cumplen con estas condiciones. Si no te queda claro el procedimiento, aquí hay un video que muestra cómo se hace. :huasonto:
  10. :mmm: No tengo claro cuál es tu pregunta, pero parece que es que no puedes mostrar las imágenes que están almacenadas como BLOB en la base de datos¿Te fijaste lo que estás haciendo aquí?<td><c:out value="${imagen.foto}" /></td> <td> <img src="${imagen.foto}" /></td>En ambos estás ocupando el campo imagen.foto, pero parece que uno debería mostrar quizás el nombre de la imagen y el otro la imagen en sí (o sea, parece que esperas que el campo imagen.foto se interprete mágicamente de forma distinta dependiendo del contexto )En general, el atributo src de la etiqueta img es una URL, aunque también podría ser la imagen directa, pero no sé si tú sabes cómo hacer eso (además tiene ciertas limitaciones dependiendo del navegador). No subiste la clase imagen completa. Aunque, por lo que entiendo, estás tratando las imágenes como un arreglo de bytes que después guardas como un objeto Image :blink: , así que dudo que te sirva pasar imagen.foto al atributo src directamente. No esperes que un objeto Java sea interpretado correctamente por un navegador (a menos que sea de la clase String).Yo creo que tendrías que guardar el arreglo de bytes que contiene la imagen en un archivo, y pasar la URL de este archivo al atributo src de la etiqueta img. Otra cosa, para salir de dudas deberías ver el código fuente de la página (HTML) cuando ejecutas tu aplicación Web (todos los navegadores deberían tener una opción para esto). Fíjate en las líneas que menciono en el punto 2. :huasonto:
  11. Declara un arreglo de 3 elementos con las respectivas clases (el elemento del medio no es de ninguna clase), y usas una variable que itere de 0 a 2 (sin importar cuántos productos haya). Aquí hay un ejemplo: $clase = array(" class='first'", "", " class='last'"); $idx = 0; for($i = 1;$i <= 15;$i++) { echo "<li". $clase[$idx] .">PRODUCTO $i</li>\n"; $idx++; $idx %= 3; }Obviamente, tienes que remplazar el ciclo for por algún ciclo en donde vayas leyendo los valores (filas) desde la base de datos.La línea: $idx %= 3;es para que nunca se pase de 2 ;) :huasonto:
  12. Noté algo raro apenas vi las capturas, y no me refiero a los valores, sino al texto. El punto es que estás malinterpretando la información que aparece; según tú, estás viendo las temperaturas, pero dice Márgen térmico (por la ortografía, parece que fue traducido por un chileno :huasonto: ). O sea, el valor que aparece no es la temperatura actual :no: , sino cuánto le falta para alcanzar la temperatura máxima que aguanta el procesador. En otras palabras, si el valor es muy bajo (cercano a 0°C) es porque la CPU está a punto de quemarse :gua: Así que es lógico que al renderizar video, los valores (el margen térmico) bajen, eso significa que la CPU se va acercando a la temperatura máxima que soporta. La fórmula sería: T° actual = T° máxima - Margen térmicoAhora, no sé si tú sabes cuál es la temperatura máxima que aguanta el procesador (así podrías calcular la temperatura actual de la CPU). :huasonto:
  13. :mmm: No sé si leíste lo que te respondí antes, si te sirvió o no, si ya solucionaste el problema, ni por qué abriste otro tema (tenías que pedir que lo movieran) Si es que todavía no lo solucionas, en esta página hay otro código VBA que creo que hace algo como lo que necesitas. Es parecido al anterior, pero creo que está más entendible. :huasonto:
  14. Creo que esto va en Aplicaciones Web. En todo caso, basándome en el ejemplo que pones, creo que lo que te serviría sería la función explode :mmm: . :huasonto:
  15. Por si acaso, en C es válido declarar una variable o función sin especificar el tipo de dato, se asume el tipo int. Ahora, esa es una característica del lenguaje C, en C++ eso no se puede hacer, excepto en algunos compiladores antiguos como los de Borland. De hecho, en cualquier compilador actual, el código ni siquiera compila porque en C++ hace tiempo que se usan los espacios de nombres y actualmente los encabezados C++ no tienen la extensión ".h". Así que lo único que se podría echar de menos es una advertencia del compilador diciendo que la función main no devuelve un valor (ya que implícitamente debería devolver un int). :huasonto:
  16. :mmm: Si esto fuese VB.NET, la matriz que declaraste sería de 4 filas y 5 columnas, pero esto es C++, así que la matriz que declaraste es de 3 filas y 4 columnas :huasonto: Lo otro, estás asignándole valores aleatorios entre 0 y 99.
  17. +20% de advertencia por leer esto.

  18. Actualizado :gua: [hide] Logré hacer que funcione en Python 2 con UTF-8 :huasonto: Aquí hay algunas cosas que descubrí: Python 2: Hay que abrir el archivo usando codec.open para poder especificar la codificación de éste, pero con esto, el archivo se abre en modo binario, esto significa que los saltos de línea no se normalizan. O sea, al leer un archivo de texto guardado con el bloc de notas de Windows, tendrá líneas terminandas en "\r\n"No reconoce la codificación UTF-8 en el símbolo de sistema de Windows (LookupError: unknown encoding: cp65001)A pesar que se trabaje con UTF-8, hay que usar la página de códigos 850 en el símbolo de sistema de Windows (debido a lo anterior)Python 3:Sí reconoce la codificación UTF-8 en el símbolo de sistema de Windows (cp65001), al menos en la versión más reciente es asíRequiere que se use la página de códigos cp65001 (UTF-8) en el símbolo de sistema sólo si hay que imprimir caracteres que no se puedan representar con la página de códigos que esté usando actualmente el símbolo de sistema (que por defecto es cp850)Ambas versiones normalizan los saltos de línea al abrir archivos en modo texto (todos quedan como "\n"). Ambas versiones realizan internamente una conversión si la codificación de la cadena que se va a imprimir no coincide con la página de códigos del símbolo de sistema. En este caso, la conversión sería UTF-8 a cp850 (UTF-8 = cp65001). Al parecer, esta conversión automática se realiza solamente si la codificación de origen es Unicode. ACLARACIÓN: Al decir que cp850 es la página de códigos por defecto, me estoy refiriendo específicamente a Windows en español y en particular a la codificación que se usa en el símbolo de sistema de éste. Para otros sistemas operativos o idiomas, esto probablemente no sea así. Se supone que el script y el archivo de texto (text.txt) están codificados en UTF-8. Python 2 En Python 2 hay que usar codecs.open para poder especificar la codificación del archivo. Nótese el uso del prefijo u para las cadenas literales. # coding=utf-8 import codecs # El bloc de notas de Windows agrega un BOM a los archivos guardados en UTF-8. # Para saltárselo, hay que usar 'utf-8-sig' en vez de 'utf-8'. archivo = codecs.open("text.txt", encoding="utf_8_sig") for linea in archivo: linea = linea.rstrip("\n\r") if linea == u"montaña": print u"<<< SE ENCONTRÓ >>>" else: print u"No hay montaña:\t" + linea archivo.close()No es necesario cambiar la fuente del símbolo de sistema. Además, no cambies la página de códigos, o sea, no ejecutes el comando chcp 65001 :no: . NOTA: Ten en cuenta que dentro de tu script puedes usar cualquier caracter UTF-8 y, por ejemplo, ver si la cadena "αβγδ" se encuentra dentro del archivo de texto, pero no puedes imprimirla en pantalla porque esa cadena no es representable en la página de códigos cp850. O sea, el siguiente código sería válido y no daría problemas (ya que no imprime la cadena, sólo la busca dentro del archivo): if linea == u"αβγδ": print u"<<< SE ENCONTRÓ >>>"Python 3 # coding=utf-8 # El bloc de notas de Windows agrega un BOM a los archivos guardados en UTF-8. # Para saltárselo, hay que usar 'utf-8-sig' en vez de 'utf-8'. archivo = open('text.txt', encoding='utf-8-sig', mode='rt') for linea in archivo: linea = linea.rstrip('\n') if linea == "montaña": print("<<< SE ENCONTRÓ >>>") else: print("No hay montaña:\t", linea) archivo.close()Si vas a usar la página de códigos UTF-8 (usando el comando chcp 65001), entonces también tienes que cambiar la fuente del símbolo de sistema (Consolas o Lucida Console).[/hide] :huasonto:
  19. Para completar un poco, si quieres hacerlo usando el enfoque inicial, tienes que tener claro que la variable que usas para iterar no la puedes usar como índice para el arreglo (porque la tienes que volver a cero mientras se ejecuta el ciclo). Así que el código quedaría más o menos así (usando if como lo tenías en tu código original): array = [11,22,33,44] i = 0 contador = 0 while i < 10: if contador >= len(array): contador = 0 siguiente = contador + 1 if siguiente >= len(array): siguiente = 0 print array[contador] print array[siguiente] contador += 1 i += 1Si te fijas, la variable i sólo se usa para llevar la cuenta de las iteraciones del ciclo while. :huasonto:
  20. Para esas cosas generalmente usas el módulo (resto de una división). Además ten claro que los arreglos parten en el índice 0, así que array[len(array)] ya está fuera de rango, o sea, los índices van de 0 a len(array) - 1. Por eso, la condición if contador > len(array): contador = 0es incorrecta, debería ser if contador >= len(array):, aunque aun así no haría lo que tú esperas ;) . Aquí está la versión modificada de tu código: array = [11,22,33,44] contador = 0 siguiente = contador +1 siguiente %= len(array) for contador in range (0,10): contador %= len(array) siguiente = contador +1 siguiente %= len(array) print array[contador] print array[siguiente] :huasonto:
  21. [hide] Aunque te parezca raro, lo que muestra en pantalla es correcto ("monta±a" y "monta├▒a"). El problema es que tu código fuente usa una codificación distinta a la que usa por defecto el símbolo de sistema de Windows. Normalmente el símbolo de sistema usa codificación OEM (en el mundo occidental, esto significa alguna codificación ASCII extendida, en los Windows en español debería ser CP850). En el primer caso ("monta±a"), el código fuente está en Windows-1252, pero el símbolo de lo muestra como si fuese CP850; mientras que en el segundo caso ("monta├▒a"), el código fuente está en UTF-8, pero lo muestra como si fuese CP850. Ahora, para solucionar el problema de cómo se representan los caracteres en pantalla (símbolo de sistema), hay que hacer 2 cosas: Usar una fuente que admita Unicode (en otras palabras, no usar una fuente mapa de bits o raster)Hacer que la página de códigos activa coincida con la codificación de tu código fuentePara seleccionar una fuente que pueda representar caracteres Unicode en el símbolo de sistema: Paso 1: Paso 2: en este caso yo elegí la fuente Lucida Console Ahora, en Windows, Python tiene problemas para mostrar caracteres en UTF-8 (mira este enlace) o sea, funciona a medias. Creo que es capaz de imprimir hasta la primera cadena que contenga caracteres especiales (> 127) y después tira error (IOError: [Errno 0] Error). Así que la solución que estaría quedando sería usar la codificación Windows-1252. En el símbolo de sistema ingresa el comando chcp 1252, con esto le indicas que use la codificación Windows-1252: Ojo, se supone que el archivo de texto que estás leyendo (text.txt) está codificado en ANSI (Windows-1252). Así que tu código fuente debería verse así (también tienes que guardarlo como ANSI, que es la opción por defecto en el bloc de notas): # coding=windows-1252 archivo=open("text.txt") for linea in archivo: if linea=="montaña": print "algo" else: print linea+" montaña" Si de todas formas quieres probar usando UTF-8 (se supone que el código fuente y el archivo de texto están en UTF-8), ingresa el comando chcp 65001 en el símbolo de sistema y después ejecutas tu script Python. [/hide] :huasonto:
  22. No arreglaste bien la función ingresa_nodo... :huasonto: :mmm: Para eliminar un nodo, tienes que saber cuál es el nodo anterior al que vas a eliminar, para enlazarlo con el que viene después. Por ejemplo, si tienes esta lista: A -> B -> C -> D -> E -> F -> G -> H -> I -> Jy quieres eliminar el nodo G, entonces tienes que enlazar el nodo F con el nodo H, una vez enlazados puedes eliminar el nodo G. Creo que la función eliminar_nodo sería más o menos así (pseudocódigo): Lista *eliminar_nodo(Lista *p, cual) anterior = NULL inicio = p while (p <> NULL) and (no es el nodo que ando buscando) anterior = p avanzar(p) if p = NULL then // ERROR: ese nodo no existe elseif anterior = NULL then // hacer que 'inicio' apunte al nodo que viene después de 'p' // borrar 'p' else // enlazar nodo 'anterior' con el que viene después de 'p' // borrar 'p' return inicio endOjalá que se entienda. Ten cuidado de no confundir las comparaciones y asignaciones en el pseudocódigo y en el lenguaje C ;)Al salir del while hay que verificar lo siguiente: si se encontró el nodo que se quiere eliminarsi se va a eliminar el primer nodosi no se encontró el nodo que se quiere eliminar entonces p será NULL (se recorrió la lista completa o estaba vacía); si anterior es NULL significa que no se entró al ciclo while y, por lo tanto, se va a eliminar el primer nodo; en caso contrario se va a eliminar algún otro nodo (del segundo en adelante). Ojo, el hecho que no se encuentre el nodo que se quiere eliminar, no significa haya que tirar error o hacer algo, quizás no haya que hacer nada; eso queda a criterio tuyo (si no hay que hacer nada, tendrías que reestructurar los if...tú sabrás cómo ;) ) Por último, parece que no es necesario usar una variable auxiliar a la hora de borrar el nodo.
  23. :mmm: Hay varios problemas: No subiste el código fuente de lista.h :huasonto: ...y soy terriblemente malo para adivinarLas funciones que no devuelven ningún valor tienes que declararlas como void. En C, si no especificas un tipo de dato para un identificador, se asume que éste es int, o sea, implícitamente se declara como int. Así que deberías arreglar las funciones ingresa_nodo y mostrar_lista (así como están actualmente, están devolviendo un entero)La función ingresa_nodo está mal implementada. Estás ingresando nodos dentro de la función, pero al salir de ésta, todo queda igual (la lista queda igual como estaba antes de entrar a la función) . Tienes que hacer que la función devuelva la nueva lista (un puntero al comienzo de ésta) ;), o sea, sería la misma idea de la función insertar_nodo_lista (suponiendo que esté bien implementada... )Se supone que la lista se inicializa en NULL (indicando que está vacía) al comienzo del programa, tú la inicializas en NULL cada vez que entras a la función ingresa_nodo, pero esto ni siquiera importa porque, como dije antes, esta función deja la lista tal cual como estaba antes de entrar a la función.Como la variable pl que está en el main no está inicializada, contiene basura, o sea, apunta a cualquier parte, por eso te ocurre un error (estás tratando de acceder a una dirección de memoria a la que el programa no tiene permiso para acceder)Como no subiste el codigo fuente de lista.h, no puedo estar seguro si la definición del tipo Lista es correcta y, como dije antes, soy malazo para adivinar Sobre el tercer punto, la función ingresa_nodo no altera la lista porque los parámetros de funciones se comportan igual que variables locales, así que da lo mismo qué le asignes al parámetro p dentro de la función porque es una variable local. Por ejemplo, podrías agregar una función que supuestamente asignaría NULL a una lista y, por lo tanto, la destruiría (haría que todos los nodos que tenga quedaran inaccesibles), la función sería así: void anular(Lista *p) { p = NULL; }como dije, esto no funciona. La lista quedaría tal cual porque el parámetro p tiene validez dentro de la función. Por esta misma razón, en la función mostrar_lista no necesitas usar una variable auxiliar para recorrer la lista :huasonto: (haz la prueba ;) )
  24. :mmm: Parece que el programa usa una versión más antigua. Vuelve a dejar todo como estaba, o sea, borra el archivo lualib5.dll (se supone que ese archivo no venía con la aplicación). Baja esta versión de la DLL, extrae el archivo lua50.dll y le cambias el nombre a lualib5.dll y lo mueves a la carpeta del programa. :huasonto:
  25. [hide] :mmm: Sí, parece que cambiaron la forma de guardar los videos. Por lo que veo, ahora guardan el video en partes y lo muestran usando una lista de reproducción M3U (donde se indican todos los archivos que conforman el video). El problema es que el video lo dividen en partes de un poco más de 10 segundos, así que te va a salir medio salado bajar las 77 partes que componen el video completo Entonces tendrías que bajar la lista de reproducción desde este enlace y el video está más abajo. Yo probé el video usando el VLC media player. Guardas la lista de reproducción y todas las partes del video en la misma carpeta, y abres la lista de reproducción (chunklist.m3u8) con el VLC media player. También puedes ver el video con el VLC directamente desde internet abriendo la URL de la lista de reproducción (Medio > Abrir ubicación de red...) En el spoiler están los 77 enlaces para bajar todas las partes. Porsiaca, estos enlaces los creé usando un pequeño script Python...nica lo iba a hacer a mano :huasonto: Ahora, si querías bajar el video para verlo fácilmente en cualquier equipo (PC o televisor), entonces tendrías que unir todas las partes con alguna aplicación, pero eso ya es otro problema... [/hide] :huasonto:
×
×
  • Create New...