Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Temas - do-while

#1
¡Buenas!

Me he venido a casa de mis padres a pasar las vacaciones, y como no tenemos internet utilizo la tarifa de datos que tengo contratada para conectarme a internet. Esta mañana me he llevado una sorpresa. Teniendo el móvil conectado al ordenador por medio del cable USB, si al entrar en el GRUB activo el modo "módem USB" desde Android antes de que se seleccione el sistema operativo, GRUB se queda completamente colgado.

Os dejo la versión de Android y la del GRUB:
- Android 2.3.6
- grub-pc 2.02~beta3-5 (Debian 9 stretch)

El único sistema operativo que tengo instalado es Debian.

Siento curiosidad por saber si pasa lo mismo en vuestros equipos al activar el modo módem USB cuando salta GRUB.

¡Saludos!
#2
¡Buenas!

He retomado un proyecto que empecé hace un tiempo sobre crear esctructuras de datos genéricas en C, y tengo alguna duda sobre qué tipo de dato debería devolver una búsqueda sobre una lista. La estructura contiene un puntero void* en el que se almacena el dato, y en un principio lo que estoy devolviendo en NULL si no encuentro el dato y void const* si lo encuentro para evitar modificar el dato (de momento estoy trabajando con listas ordenadas).

La cuestión es que este valor de retorno no da ningún tipo de información sobre la posicion que el elemento ocupa dentro de la lista, por lo que, por ejemplo, no se podría combinar una busqueda con la extracción de una sublista en caso de que haga falta seleccionar elementos dentro de un rango determinado. Si por el contrario utilizo un entero (lo más lógico sería un unsigned long) como valor de retorno, estaría limitando la cantidad de datos que se podrían almacenar al rango de valores de ese tipo de entero (un valor menos, teniendo en cuenta que tendría que escoger un valor de retorno, por ejemplo (unsigned long)(-1) para informar de que no ha habido ninguna coincidencia).

Otra alternativa sería buscar un elemento y devolver un puntero como comentaba antes, y en caso de que la búsqueda tuviese éxito utilizar una función que me devuelva la posición, pero seguiría existiendo la limitación sobre la cantidad máxima de datos que la lista podría contener.

Si alguna vez habéis trabajado con listas, ¿Cómo habéis enfocado el problema de la busqueda/posición de un elemento dentro de ésta?
#3
¡Buenas!

Desde hace unos meses (no recuerdo exactamente desde cuándo) y de forma que al menos a mi me parece completamente aleatoria no siempre es posible consultar el foro como visitante. En cuanto se accede al foro se redirige directamente a la página de inicio de sesión. Resulta molesto si solo se quiere entrar para ver por encima que novedades hay. No se si es un error o alguna medida de seguridad. Si es lo primero aquí queda el aviso, si es lo segundo, pues tocará pasar por el aro. XD

¡Saludos!
#4
GNU/Linux / [Noticia] Insync regala cuentas premium
22 Diciembre 2016, 04:36 AM
Insync es un cliente multiplataforma para Google Drive. Durante los próximos seis días regala cuentas premium. Os dejo el enlace a la noticia.

http://www.muylinux.com/2016/12/21/google-drive-insync-gratis-2
#5
¡Buenas!

Hace tiempo empecé el curso de cracking de Ricardo Narvaja y recuerdo que el tema era la mar de entretenido, no avancé demasiado porque tuve que centrarme en los estudios, pero el tema de los crackme y programar keygens estaba chulo.

Hace un par de años me pasé a GNU/Linux y me estaba preguntando si para los pingüineros hay algún curso equivalente al del señor Ricardo o si me va a tocar recopilar documentación por mi cuenta.

El tema de las herramientas no me molesta demasiado, simplemente se trata de buscar las que más me gusten (no se si me tocará adaptarme a la notacion ATT&T o si se podría seguir en Intel, supongo que dependerá del debugger y tampoco es algo que me moleste), el problema sería encontrar documentación sobre la estructura de los ejecutables explicada paso a paso, los distintos segmentos, secciones en los que se especifican los permisos de acceso al código binario... refrescar la memoria y adaptarme al nuevo formato.

¿Hay algo parecido al curso de introducción al cracking con OllyDbg, yendo paso a paso, para GNU/Linux?
#6
¡Buenas!

Os aviso de que en XUbuntu 16.04 + Firefox 48 no se ve la publicidad, no se si hay algún error, si os he pillado cambiándola o si la habéis quitado de forma voluntaria. Por si a caso os dejo el aviso. Yo no soy partidario de ella, pero el foro es uno de los pocos sitios en los que tengo desactivado uBlock.

¡Saludos!
#7
¡Buenas!

Para el que no sepa de que va la cosa, se trata de un tablero rectangular (o cuadrado) vacío y se dispone de varias piezas de tetris que colocadas de una forma determinada llenan todo el tablero.

Ayer me aburrí de probar distintas disposiciones de piezas en el minijuego de tetris de The Talos principle y hoy he creado un programa que resuelve el juego. La solución está basa en backtracking:
- unas cuantas funciones para manipular las piezas y cargar las condiciones del juego...
- una funcion que decide si es correcto o no poner una pieza en una posicion dada
- una funcion recursiva que soluciona probando para cada uno de los giros posibles de las piezas todas las posiciones del tablero en las que cabe.

Para tableros no muy grandes, entre unas 20-36 casillas y no más de 10 piezas, la solución normalmente no tarda nada, o en algún caso raro tarda algunos segundos, pero si pasamos a tableros con más datos, en algún caso después de media hora de ejecución todavía no ha encontrado la solución.

La verdad es que ya estoy cansado de código por hoy. Quería pediros que si se os ocurren condiciones nuevas, por ejemplo que descarten callejones sin salida, para añadir a la función que detecta la corrección, o si conocéis o se os ocurre algún método eurístico para buscar posiciones iniciales más óptimas de las piezas que me lo digáis, o si queréis modificad el código que os dejo en el enlace y compartidlo por aquí.

Podéis descargar el código desde aquí. Creo que se entiende bien, pero si no lo entiendo yo que soy el que lo ha escrito mal vamos, si no entendéis algo o hace falta introducir más comentarios avisad y actualizo el enlace.

¡Saludos!

Enlace actualizado: Alguna pincelada en main y ahora las piezas guardan la posición fila-columna en la que se han colocado por si una vez resuelto se quiere representar de alguna forma menos cutre que la actual (mensaje para los que manejan SDL, Allego u otra librería gráfica  :silbar:) y se ha añadido una función para comprobar si un hueco en el tablero está formado por menos de cuatro casillas vacías, en cuyo caso, al no caber ninguna pieza en ese hueco, se vuelve atrás en la función recursiva que busca la solución. El algoritmo ha mejorado, con el juego del ejemplo 2 la solución es instantánea. Podéis comprobar la diferencia comentando y descomentando la parte:

if(huecos_inutiles(juego))
return 0;

en la función resolver.

Se me olvidaba. El programa funciona por línea de comandos. La sintaxis es nombre_programa fichero1 [fichero2 ... ficheroN]

Cada uno de los ficheros tiene que contener un juego con la siguiente información:
1ª línea: Numero de filas del tablero.
2ª línea: Numero de columnas del tablero
3ª línea: Numero de piezas.
- Tantas líneas como numero de piezas y en cada una de ellas el nombre de una de las piezas del juego (CUADRADO, L_NORMAL, L_SIMETRICA, T, Z_NORMAL, Z_SIMETRICA o BARRA)

Por ejemplo:

8
5
10
2 Z_NORMAL
1 Z_SIMETRICA
2 T
2 BARRA
2 L_NORMAL
1 CUADRADO



Ejemplo 2:

8
7
14
2 T
4 Z_NORMAL
2 Z_SIMETRICA
3 L_NORMAL
3 L_SIMETRICA



La leyenda de la solución es:
C-Cuadrado:

**
**


L-L normal en alguno de sus giros:

*
*
**


l-L simétrica en alguno de sus giros:

*
*
**


T:

***
*


Z:

**
**


z:

**
**


-, barra:

****


Sigo con el culebrón. Al final la versión en la que utilizaba un árbol para almacenar las situaciones que no llevaban a ninguna solución ha resultado ser mucho mas lenta, así que en el enlace inicial dejo la última solución que tengo.

De todas formas, tengo pendiente un algoritmo en el que para tablas grandes, de más de 60 casillas (15 piezas), trocee la tabla en fragmentos más pequeños para intentar solucionarlos y luego solapar las distintas soluciones. Si me da por hacerlo y consigo algo mejor que lo actual colgaré el código por aquí.

Por cierto, he modificado el formato de los archivos para que queden más compactos. Ahora las filas con las piezas contienen pares Repeticiones-Nombre de la pieza, que indican, como bien habréis deducido, el número de veces que se repite cada pieza.

El primero de los siguientes ejemplos, 15 piezas (60 casillas) se resuelve, en un Intel Core 2 Duo viejete, en un poco más de 9 segundos, el segundo, 64 casillas y 16 piezas,  en 11 minutos y 3 segundos y el tercero, con 33 piezas, ni idea, pero mejor ni lo intento.


6
10
15
2 Z_NORMAL
3 L_NORMAL
4 T
3 Z_SIMETRICA
3 L_SIMETRICA



8
8
16
5 Z_SIMETRICA
1 Z_NORMAL
1 L_NORMAL
3 L_SIMETRICA
6 T



11
12
33
4 Z_SIMETRICA
11 L_SIMETRICA
4 T
2 Z_NORMAL
12 L_NORMAL



Hola otra vez. Aquí os dejo el último código que tengo. Esta vez repartido en varios ficheros fuente.

La idea esta vez es, en lugar de resolver el puzzle completo con todas las piezas, delimitar sectores con una cantidad determinada de filas y columnas, como si fuesen baldosas que cubren el tablero de juego, e intentar resolver cada uno de ellos por completo, sin tener en cuenta que por los bordes sobresalgan las piezas, pues el propio algoritmo se encargara de rellenas los huecos que queden al llegar al sector hacia el que sobresalgan.

La línea de comandos queda:
nombre_programa filasxsector columnasxsector fichero1 [fichero2 ... ficheroN]

En cuanto a tiempos de ejecución el resultado ha sido muy irregular.

Los mejores resultados los he obtenido con sectores 2x2 y aumentar el numero de filas o columnas por sector hace que los tiempos de ejecución se disparen. Por ejemplo, con sectores 2x2, de los tres juegos anteriores el primero ha pasado a resolverse en 0'0037 segundos, el segundo en 3'731 segundos y el tercero sigo sin saber cuanto tiempo le cuesta, porque me aburro de esperar y lo corto.

Pero por ejemplo, el juego que muestro a continuación, con el algoritmo del primer enlace se resuelve en 0'026 segundos, pero con el nuevo algoritmo y siendo que el tablero es de menor tamaño que cualquiera de los tres anteriores (y por lo tanto con menos piezas) tarda 4 minutos y 21 segundos en resolverlo:


8
7
14
2 T
4 Z_NORMAL
2 Z_SIMETRICA
3 L_NORMAL
3 L_SIMETRICA




Yo solo usaría este nuevo código para puzzles de más de 14-15 piezas y solo por si hay suerte y lo resuelve en un tiempo relativamente razonable.

Hasta aquí ha llegado mi aventura con este problema. Si alguien puede mejorar alguno de los dos algoritmos que lo haga y nos deje las mejoras por aquí, o si encuentra uno mejor y puede hacérmelo llegar se lo agradecería, pero lo que es por mi parte, abandono, tengo mejores cosas que hacer que estar perdiendo el tiempo con esto.  :P



¡Buenas!

Hay veces que parezco tonto. Me acabo de dar cuenta de que los huecos inútiles no son aquellos con una cantidad de espacios menor que tres, sino los que no tienen una cantidad de espacios que sea múltiplo de cuatro.

He corregido el código y he actualizado los enlaces. No esperéis que los puzzles que antes no resolvían en un tiempo razonable ahora si lo hagan, simplemente han mejorado algo los tiempos de los puzzles que ya se podían resolver.

Por cierto, jugando un poco con las dimensiones de las celdas os podéis llevar alguna sorpresa. Por ejemplo, en el último ejemplo que he colgado con sectores 3x5 la solución es casi inmediata (0'225 segundos en mi caso)

¡Saludos!



Ya se que dije que iba a dejar el tema, pero no he podido hacerlo, y por fin tengo una solución que mejora, y mucho, las anteriores.

La idea esta vez ha sido ir llenando primero los huecos más pequeños, valorando cada una de las casillas vacías de forma que guarden el numero de casillas vacías que haya en el hueco en el que se encuentra... lío. Mejor lo pongo con un ejemplo:


 123456
 ------
1|
2|  **
3| **
4|
5|


En la segunda fila vemos que hay dos espacios, una pieza y después otros dos espacios libres, así que las dos primeras casillas indican que están en una fila de un hueco, y que el hueco en esa fila tiene dos espacios horizontales libre. Lo mismo con las dos últimas casillas.

En la tercera columna hay un espacio vacío, una pieza y tres espacios vacíos más, así que la primera casilla tendrá un uno como espacio vertical y las casillas 3, 4 y 5 un tres como valor de espacio vertical, ya que la columna en la que se encuentran está en un hueco de 3 espacios.

Una vez que se ha asignado a cada casilla vacía el espacio vertical y horizontal, buscamos la que tenga el valor más pequeño (da lo mismo que sea vertical u horizontal, ya que buscamos el hueco más pequeño), e intentamos rellenarlo con los distintos tipos de pieza que queden por usar (fuerza bruta para rellenar el hueco, vamos).

Aquí os dejo el último código. Como ejemplo, el siguiente puzzle lo resuelve, en mi ordenador, en unos dos minutos y medio. La mejora con respecto a los algoritmos anteriores es muy grande.


11
12
33
4 Z_SIMETRICA
11 L_SIMETRICA
4 T
2 Z_NORMAL
12 L_NORMAL



Ahora que he llegado a este resultado si que doy el tema por zanjado.

¡Saludos!



Hala, ahora si que paro con el tema. XD

El enlace al código definitivo.

Acabo de añadir una función que da "color" a la solución. Realmente lo que se hace es asignar al campo color del struct Pieza el índice de un color dentro de una paleta de colores. He decidido no incluir el código que da "color" directamente a la solución dentro de la funcion colorear_solucion para que el código sea independiente de cualquier sistema de representación de los datos. La contrapartida de esta independencia es que la persona que vaya a usar el código tiene que crear la paleta de colores (en este caso un conjunto de cuatro caracteres) y luego tiene que acceder a los campos que correspondan en las estructuras de datos para poder crear su propia representación de la solución. En main hay un ejemplo sobre como hacerlo.

Como en linux los caracteres bonitos para dibujar las piezas salen como interrogantes he tenido que recurrir a x, o, + y *. Los que uséis Windows podéis imprimir los caracteres de la tabla ASCII en la forma valor-caracter y veréis que hay caracteres cuadrados con distintos dibujos que podéis usar para hacer que la representación quede más bonita.

Enlace actualizado: he econtrado algún error en el código que podía hacer que el programa cascase.
#8
¡Buenas!

Durante unos días tengo que depender de la conexión móvil, y ya ya llevo un par tirando de elinks. Quería saber si estoy ahorrando datos o si por el contrario, aunque no muestre ni imágenes ni publicidad ni nada que no sea texto recibe la información completa y luego solo descarta la que no va a mostrar, vamos, si estoy haciendo el tonto.

¡Saludos!
#9
Si sois usuarios de Google Drive, durante unas pocas horas se ofrece el cliente insync de forma gratuita.

Más información en:
http://www.muylinux.com/2016/05/16/google-drive-insync-gratis

No lo he puesto en la sección de noticias porque es algo que está directamente relacionado con el mundo de GNU/Linux.

MinusFour tu decides si mover el hilo a la sección de noticias o dejarlo aquí. Tula. XD

También os dejo un enlace a la página de insync:
https://www.insynchq.com/free
#10
¡Buenas!

La cosa no tiene ninguna gravedad, simplemente es una cuestión estética.

Después de loguearme y mientras se carga el escritorio aparece una ventana en la que se muestra el avance en la carga del escritorio. Por mucho que busco en Google, si introduzco los términos de búsqueda imagen, image o picture me salen un montón de enlaces que no tienen ninguna relación con lo que me interesa.

¿No sabréis por alguna casualidad cual es el archivo de configuración en el que se guarda la información de ésta ventana de carga?

Por cierto, el display manager que utilizo es lightdm y el entorno de escritorio Xfce. No se con cual de los dos puede estar relacionado el dichoso archivo...

¡Saludos y gracias por vuestro tiempo!

Se me olvidaba, utilizo Debian. Aviso por si cambia la localización y nombre del archivo entre las distintas distros.

¡Saludos!
#11
¡Buenas!

Llevo perdidas dos horas y media con una cámara digital que tiene mi madre por casa. Al menos en Debian aparecía en la lista de conexiones por USB pero no se montaba automáticamente. He visto que esta solución no está en el foro, así que por si os encontráis en la misma situación no perderéis el tiempo como lo he perdido yo, debería de aparecer en el buscador y si tenéis alguna solución mejor, bienvenida sea:

- Instalad gphotofs con vuestro gestor de paquetes favorito.
- Si no vais a querer utilizar algún directorio ya existente como punto de montaje cread un directorio nuevo.
- ejecutad gphotofs punto_de_montaje para poder acceder a vuestra cámara desde vuestro navegador de archivos favorito.
- ejecutad fusermount -u punto_de_montaje para desmontar la cámara

¡Saludos y espero que os sea útil!
#12
¡Buenas!

Lo dicho, sobre VirtualBox, ni gdm3 ni sddm funcionan. Miento un poco, sddm funcionó la semana pasada, pero después de cambiar a lightdm, al volver a sddm pasa lo descrito en el título, pantallazo negro. Lo único que funciona 100% es lightdm (no he probado slim). Y todo sería correcto si no perdiese homogeneidad en el sistema, vamos, que me toca la flauta travesera el hecho de que el display manager tenga un estilo y luego el entorno de escritorio sea completamente distinto.

Tengo que aclarar que en Ubuntu 14.04 pasa lo mismo, al menos con gdm3. No se que pasa con kdm porque kde4 me parece más feo que mandar al abuelo a por droga y no lo he usado más que una vez, el día que lo probé. En otros foros y páginas de consultas comentan que en Arch pasa (y ha pasado, hay consultas que se remontan a 2010, si mal no recuerdo) lo mismo, y supongo que habrá mas distros en las que pase.

Evidentemente las instalaciones limpias de sistemas con kde y gnome funcionan, lo que no funciona es cambiar de cualquier entorno a plasma o gnome. Bueno, plasma y gnome funcionan, los que no funcionan son gdm3 ni sddm.

Ya he probado reinstalando (apt-get --reinstall install) los display managers (¿como se llaman en castellano?), reinstalando los entornos, reconfigurando tanto lightdm como gdm3 y sddm (dpkg-reconfigure), y reiniciando los servicios mediante systemd (systemctl restart). Nada de esto ha servido.

¿Os ha pasado lo mismo? ¿Lo habéis podido apañar? ¿si no es mucho pedir podéis trastear con una máquina virtual y ver si os pasa lo mismo?  :silbar:<(...a ver si cuela...)

¡Saludos!

Por cierto, también he probado reinstalando GuestAdditions y tampoco ha funcionado.

Más datos. Si después de eliminar por completo el entorno de escrito y x11 (haciendo esto también te cargas todas la aplicaciones que dependen de estas librerias) se instala kde-standard, sddm funciona perfectamente, así que supongo que alguna librería o archivo de configuración interfería con su funcionamiento. Si se repite el proceso anterior para instalar gnome, gdm3 sigue dando problemas.

------------------------------------------------------------------------------------------------------------------

Una solución al problema de gdm3 puede ser instalar el paquete xserver-xorg-legacy, a mi me ha funcionado.

En este enlace sugieren activar systemd en las opciones de arranque de GRUB. Esto último no lo he probado.

Ahora solo me falta saber cual es el problema con sddm.

¡Saludos!
#13
¡Buenas!

El último kernel introducido en Ubuntu 14.04 hace que algunos programas no funcionen bien, así que tengo que estar utilizando el anterior kernel. A lo mejor no utilizo los términos de búsqueda adecuados pero tanto en inglés como en castellano cualquier búsqueda relacionada con mantener, guardar o evitar que los kernels antiguos se eliminen me lleva a enlaces en los que explican todo lo contrario, como cargarte los kernels antiguos...

¿Sabéis alguno como evitar que un --purge autoremove + autoclean me elimine un kernel que se que funciona bien?

¡Saludos!
#14
¡Buenas!

Aquellos usuarios que queráis bloquear a Israel en vuestros clientes P2P que utilicen ipfilter.dat (emule, amule y supongo que al menos todos aquellos que utilicen las redes eD2K y kad), podéis descargar un ipfilter.dat al que se han añadido rangos de IP conocidos para Israel:

https://mega.nz/#!uZVmASBC!GDhPvaSydRK-VsCFrwM34q_9nNqpKdMTxPzQ8sZSCXQ

El archivo ipfilter.dat se ha obtenido desde http://emule-security.org/ (después de descargar el archivo ipfilter.zip y renombrar el archivo que contiene a ipfilter.dat) y la lista de rangos de IP correspondientes a Israel desde http://www.nirsoft.net/countryip/il.html

Podréis comprobar que los rangos bloqueados con descripción Israel son los que se corresponden con los de la web.

Ya se que no es mucho, pero si queréis boicotear a Israel menos es nada.

¡Saludos!

Se me olvidaba, el formato de salto de linea se corresponde con *NIX, so se si el archivo os servirá a los usuarios de windows.

En un rato subo los archivos utilizados y el código fuente de los programas usados por si queréis compilarlos, crear el nuevo ipfilter.dat y subirlo para que puedan utilizarlo los demás.

¡Saludos de nuevo!

Archivo CSV que contiene los datos de los rangos de IP correspondientes a Israel:
http://www.nirsoft.net/countryip/il.csv

Enlace a ipfilter.zip. Tendréis que descomprimirlo en el mismo directorio en el que esté el archivo anterior y renombrar su contenido a ipfilter.dat.
http://upd.emule-security.org/ipfilter.zip

Código fuente del programa que transforma el contenido del archivo CSV en el formato utilizado por ipfilter.dat:
https://mega.nz/#!OdtUSRqb!rbCKmuOtBJKiiFJ17ZkZBXYmalgHwLkUUN6W80PQZLI

Código fuente del programa que fusiona el contenido del archivo que obtiene el programa anterior con el de ipfilter.dat (he tenido problemas si los rangos de IP no están en orden creciente, así que he tenido que hacer esta paja mental):
https://mega.nz/#!KZ0nSJ5Q!SqREvZoztnEeJjcDpT9RaGuuPrbJwLJCpXnVdQlsHVs

Tendréis que ejecutar ambos programas en el mismo directorio en el que estén los dos primeros archivos y luego solo tenéis que copiar el archivo ipfilter.dat en el mismo directorio en el que esté emule, amule o el programa que utilice dicho archivo.

¡Saludos!
#15
Series.ly, una de las páginas en español más populares para descarga y visualización de contenidos multimedia vía streaming, ha emitido un comunicado desmintiendo la detención de sus administradores en el día de ayer. Una información de la que se hicieron eco una gran cantidad de medios con los habituales grandes titulares en este tipo de noticias: "golpe mortal a la piratería y a las descargas ilegales".

Series.ly aseguran que esas informaciones son falsas, que sus administradores están en libertad y que los hechos comentados sucedieron hace un mes. "Ante las informaciones que están apareciendo en algunos medios de comunicación queremos decir lo siguiente":

    Los hechos a los que se hace referencia en la mayoría de informaciones publicadas ocurrieron hace un mes, en concreto el pasado 17 de junio. Una unidad de la Policía Nacional se presentó en nuestras oficinas para practicar un registro. En todo momento colaboramos con ellos para facilitarles toda la información que necesitaban. Cuando terminó el registro fuimos detenidos, declaramos ante la policía y se nos puso en libertad.
    A día de hoy aún no sabemos ni quien ha puesto la denuncia ni tenemos más información sobre el presunto delito del que se nos acusa. Siempre hemos respetado la ley, y cuando a principios de 2015 esta cambió operamos y comunicamos todos los cambios oportunos en nuestra página, que sigue funcionando, para adaptarnos al nuevo cambio legislativo.

Más información:
http://www.muycomputer.com/2015/07/17/series-lyç

Noticia relacionada:
http://foro.elhacker.net/noticias/la_policia_detiene_a_los_administradores_de_seriesly-t438610.0.html
#16
Noticia en muylinux:

Este miércoles el Gobierno de Extremadura cambió de manos, seis semanas después de las elecciones municipales y autonómicas que se celebraron en España. Una par de semanas antes, el todavía presidente José Antonio Monago (PP) se saltaba a la torera una propuesta y una ley aprobadas por él mismo cuyo resultado está por ver, aunque deja en muy mal lugar la implantación de software libre en la educación que la comunidad había impulsado en los últimos años.

Monago aprobó en 2012 con los votos de la oposición una propuesta por "el uso exclusivo de software libre en los ordenadores del sistema educativo extremeño", además, con una hoja de ruta concreta que parece no haberse materializado, y que no sería otra que la migración de todos los equipos dependientes del Gobierno a soluciones de software libre: el proyecto Linex, principalmente.

A pocos meses de las elecciones que lo dejarían fuera, Monago aprobó asimismo la Ley de Transición, que supuestamente debería facilitar el cambio de gobierno, por ejemplo, no llevando a cabo contrataciones a destiempo que comprometan al Gobierno entrante. Dicha ley indica que "no podrán suscribir convenios con entidades públicas o privadas que supongan reconocimiento de obligaciones para la hacienda pública".

Pero cuando faltaban diez días para las elecciones, el Consejo de Gobierno, ya en funciones, autorizaba la "contratación del suministro de equipamiento de Tecnologías de la Información y la Comunicación (TIC) para la dotación tecnológica de los centros educativos no universitarios sostenidos con fondos públicos de la región". Lo cual significa la apertura de un plazo para presentar ofertas... Y la de Microsoft no tiene competencia, parece. Así es como Windows y Office regresan a las aulas extremeñas.

Más información en
http://www.muylinux.com/2015/07/03/extremadura-microsoft

Recogida de firmas en contra de esta medida en change.org:
https://www.change.org/p/junta-de-extremadura-no-al-uso-de-software-propietario-en-la-educaci%C3%B3n-extreme%C3%B1a?recruiter=36771294&utm_source=share_petition&utm_medium=copylink




Dejo al gusto del moderador unir este post con el anterior o no, lo pongo como un post separado porque ya no forma parte de la noticia en si.

Os querría pedir que ,si estáis interesados en este tema, le deis difusión tanto a la noticia y como al enlace a change.org

¡Saludos!




[MOD] No es por "gusto", es por cumplir Reglas......No hacer doble post.
#17
¡Buenas!

Últimamente tengo algunos problemas en la red de casa y estaba investigando sobre las MAC de los equipos conectados en nuestra red para saber si alguien ajeno se nos está conectando utilizando nmap -sP sobre todo el rango de IPs locales, y aunque una de ellas aparece en la interfaz web del router, no responde al comando. ¿Sabéis como puedo obtener la MAC de esta IP?

¡Saludos!
#18
¡Buenas!

Llevo ya un tiempo inscrito en la Lista Robinson y mi empresa de telefonía movil sigue enviandome SMS publicitarios. ¿Sabéis como o donde hay que denunciar este hecho?

¡Saludos!
#19
¡Buenas!

Como ya he mencionado en una noticia, a lo mejor pasándome de radical, querría pedir que no se incluyesen en el foro de noticias aquellas que enlacen a medios de AEDE. No se si esto va en contra de las normas o la política del foro, si así es pues nada. Hay una lista de asociados con AEDE y no resulta difícil comprobar en ella si la noticia que vamos a poner pertenece a ellos o no. Creo que después de haber conseguido que se apruebe un canon para ellos, al mas puro estilo de la SGAE, no es ético que se les de difusión.

¡Saludos!
#20
No he podido esperar que la noticia aparezca en el foro.

La gente de muycomputer nos cuenta un poco más.

http://www.muycomputer.com/2014/12/12/google-news-aede

¡Saludos!
#21
¡Buenas!

Al reiniciar ayer el sistema me encontré con que no había forma de reproducir audio. Ni funciona el MIDI (comprobado en musescore) ni se oye la música o las pistas de audio de ningún vídeo en VLC o Audacity.

Leyendo sobre el tema, he encontrado información relativamente antigua sobre problemas con el audio derivados de la actualización del kernel y tarjetas de sonido Intel (en mi caso la que venía integrada con el portátil), pero la última actualización del kernel fue el día 12 y tras reiniciar el ordenador (juraría que en algún momento entre la instalación del kernel y ayer lo reinicié) no tuve problemas.

Tanto antes de ayer como ayer hubo actualizaciones de paquetes relacionados con el audio:

Start-Date: 2014-11-14  19:46:46
Commandline: apt-get dist-upgrade
Upgrade: libgssapi-krb5-2:amd64 (1.12.1+dfsg-11, 1.12.1+dfsg-14), libkrb5-3:amd64 (1.12.1+dfsg-11, 1.12.1+dfsg-14), libnb-org-openide-util-java:amd64 (7.4+dfsg1-1, 7.4+dfsg1-2), libaudio2:amd64 (1.9.4-1+b1, 1.9.4-3), krb5-locales:amd64 (1.12.1+dfsg-11, 1.12.1+dfsg-14), bash:amd64 (4.3-11, 4.3-11+b1), libnb-org-openide-util-lookup-java:amd64 (7.4+dfsg1-1, 7.4+dfsg1-2), libkrb5support0:amd64 (1.12.1+dfsg-11, 1.12.1+dfsg-14), libk5crypto3:amd64 (1.12.1+dfsg-11, 1.12.1+dfsg-14), x11-apps:amd64 (7.7+3, 7.7+4)
End-Date: 2014-11-14  19:47:09

Start-Date: 2014-11-15  12:29:51
Commandline: apt-get dist-upgrade
Upgrade: libgnutls-openssl27:amd64 (3.3.8-3, 3.3.8-4), libvorbisfile3:amd64 (1.3.4-1, 1.3.4-2), libgnutls-deb0-28:amd64 (3.3.8-3, 3.3.8-4), libgnutls-deb0-28:i386 (3.3.8-3, 3.3.8-4), libvorbis0a:amd64 (1.3.4-1, 1.3.4-2), libvorbis0a:i386 (1.3.4-1, 1.3.4-2), libvorbisenc2:amd64 (1.3.4-1, 1.3.4-2), libvorbisenc2:i386 (1.3.4-1, 1.3.4-2)
End-Date: 2014-11-15  12:30:00

He estado buscando información sobre posibles conflictos que pueda haber entre estos paquetes y el buen funcionamiento del audio, pero la verdad es que no he encontrado nada (solo llevo perdida media mañana). He probado a reinstalar los paquetes tanto en el orden de las actualizaciones como en orden inverso (por si acaso), he probado a sustituir oss-compat por osspd, ya que en un informe de bug de Debian comentaban que en Jessie oss-compat podía dar problemas, y en alguna otra página comentaban que puede haber conflictos entre oss, alsa y pulseaudio, con algunos comandos que he visto por ahi (no me preguntéis cuales porque he visto tantos que no me acuerdo) he comprobado que la tarjeta de sonido predefinida es la que tiene que ser y que en el mezclador de audio el sonido no está muteado  ;D

Quería saber si os encontráis u os habéis encontrado en la misma situación y si habéis podido solucionarlo, o en su defecto si podrías ayudarme a diagnosticar el problema para ver si se puede solucionar y como hacerlo...

¡Saludos!
#22
¡Buenas!

Estoy apañando Debian Jessie para intentar funcionar sin systemd, volviendo a sysvinit. Por los experimentos que he hecho en una máquina virtual, se puede tener un sistema funcional con xfce, slim como display manager y sustituyendo network-manager por wicd, así que le he metido mano al sistema del día a día y he realizado esos cambios. Ahora me acabo de dar cuenta de que al conectar cualquier dispositivo USB tengo que montarlo a mano (aún no he probado con los CDs). Al cargarme systemd también ha volado udisks2. He intentado instalar udevil pero también intenta instalarme systemd.

La cuestión es saber si conocéis alguna utilidad que monte dispositivos USB/opticos de forma automática sin depender de systemd o si al final me tengo que resignar a montarlos a mano.

¡Saludos!
#23
¡Buenas!

Ya se que este no es un foro específico sobre matemáticas, pero creo que podría resultar útil, si no requiere demasiado esfuerzo, integrar alguna opción para editar fórmulas en TeX. No se utilizaría demasiado, ya lo sé, pero serviría para plantear problemas concretos y que la opción exista no creo que haga daño a nadie.

¡Saludos!
#24
¡Buenas!

No llevo ni 12 horas con LMDE (la última versión disponible) y ya tengo problemas. Ya lo he instalado, he consguido configurar el controlador de la dichosa Broadcom he instalado cairo dock y he comprobado que no podía inicar sesión utilizándolo (esto lo tengo pendiente por cabezonería), Steam sin problemas (aun no he instalado ningún juego)...

El problema que me trae aquí es la RAM. Me he puesto a ver una serie online, a instalar paquetes y a curiosear webs, todo a la vez, y de repente el sistema se ha transfomado en un caracol con un esguince. Lentísimo y tardaba una barbaridad en responder. Cuando he mirado la temperatura uno de los núcleos alcanzaba 93ºC y el otro 90ºC y el monitor del sistema me ha contado que de 4GB de RAM solo quedaba libre el 2% y de los 4GB de swap se estaba usando la mitad.

Llevo al rededor de una hora haciendo funcionar el ordenador al mínimo y la temperatura ya es normal, pero la ram sigue al 98% y la swap al 50%.

¿Podéis ayudarme a encontrar (y si se puede, a solucionar) el problema? (A lo mejor lo que tengo que hacer es jubilar el ordenador, no lo se...)

Aquí os dejo las características del enjendro este...

Intel Core 2 Duo a 2.2 GHz
4GB de RAM
Y la grafica es expres chipset family yo que se que. La integrada esta que traen los portatiles... (no se como mirarlo... ya lo descubriré)
El controlador de la gráfica puedo deciros que es este: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller

Ya se que la información no es muy precisa, si os hace falta algo mas concreto avisad y ya os contaré.

¡Saludos!

He seguido investigando un poco y tengo un candidato a culpable. El proceso mate-settings-daemon se come casi 2GB de RAM.
________________________________________________________________________________

Reinicie y despues de haber tenido funcionando el equipo mas de 18 horas no he vuelto a tener el problema...
#25
¡Buenas!

He estado curioseando un rato para saber que particiones y de que tipo me hacen falta para instalar un sistema GNU/LINUX, y he encontrado información contradictoria. Quiero instalar Linux Mint basado en Debian. La cuestión es que solo dispongo de una partición primaria (las demás están ya asignadas a la partición oculta de windows, la del propio windows y otra partición más con etiqueta recovery). Así que en principio, si no toco nada, solo me queda una partición. Había pensado que podía hacer que la partición en la que voy a instalar Mint fuese una partición extendida y a partir de aquí crear 3 particiones lógicas para el sistema, swap y home, pero como ya he dicho, la información que tengo es contradictoria.

Algunas páginas me dicen que el sistema tiene que estar instalado en una partición primaria y que tanto swap como home pueden estar en particiones lógicas y otras me dicen que el directorio raíz también puede estar en una partición lógica.

Quería aclararme con esto antes de empezar a mover archivos para hacerle hueco a Mint.

¡Saludos!
#26
¡Buenas!

Llevo unas cuantas horas intentando buscar información sobre el tema de Win32 Loader, pero la que encuentro es escasa y mala (a lo mejor estoy saturado y no veo lo que tengo delante...)

Los pasos que sigo son:
- Creo un USB booteable utilizando unetbootin. (Debian 6)
- Entro en el pen y ejecuto setup.exe
- Sigo los pasos que me marca win32 loader.
- Reinicio el ordenador y entro en la instalación de debian.
- Llego hasta el punto en que me pide crear particiones, me cago en todo, mantengo pulsado el botón de encendido hasta que se apaga el ordenador, lo enciendo, entro en windows y desinstalo el lanzador de la instalación de debian.
- Busco información en internet
- Me pongo de mal humor porque no encuentro nada util que me explique paso por paso lo que tengo que hacer...
- Creo que no he entendido bien las cosas...

El último punto es la clave de todo el asunto.  :xD

Tenía entendido que win32 loader era equivalente a wubi. Cuando instalé ubuntu con wubi, como una aplicación mas de windows, no recuerdo haber tenido que reiniciar ni crear particiones. Se instalo como una aplicación mas de windows y cuando arranco el ordenador puedo escoger entre los dos SO.

¿No puedo hacer esto con debian? ¿Estoy obligado a tener que formatear una de las particiones y tener que mover todos los datos que tengo en ella para no perderlos?

Si alguno de vosotros ha conseguido instalar debian como un programa de windows sin tener que perder o mover datos me gustaría saber como lo ha hecho...

¡Saludos!
#27
¡Buenas!

Estoy conectado a internet a través de mi smartphone con una conexión capada a 16 KB/s. Si mientras estoy ejecutando el gestor de descargas intento acceder a alguna web y esta es un poco pesada (con alguna imagen un poco pesada, varias imágenes o algún video) el gestor pierde todo el ancho de banda, me da error en la transferencia del archivo y tengo que volver a reiniciar la descarga.

¿Existe alguna forma de asegurar un ancho de banda mínimo para el gestor y repartir el resto de la conexión entre el resto de las aplicaciones?

(Intentaría googlear, pero google se me come todo el ancho de banda...)

¡Saludos!
#28
¡Buenas!

Esta mañana me he dedicado a perder el tiempo, así que comparto el tiempo perdido con vosotros y no tengo la sensación de haberlo perdido para nada.

Se trata de la sucesión de Fibonacci (ya conocida por todos (supongo)).

El algoritmo obtenido no es tan rápido como la versión iterativa (creo que anda cerca), pero mejora con creces la versión recursiva.

Evidentemente no es inmediata, como la formula que obtiene el enésimo termino en función de n y de phi (el numero aureo...)

Tampoco he utilizado programación dinamica, así que el único problema de memoria, si lo hubiese, estaría originado por una cantidad excesiva de llamadas recursivas.

Aquí os dejo un par de códigos. El primero con explicaciones sobre como se llega a la formula utilizada y con una comparación entre el algoritmo clásico y el optimizado, y el segundo para utilizarlo desde la linea de comandos, por si a alguien le hace ilusión.

¡Saludos!


/*
  JUGANDO UN POCO CON LA SUCESION DE FIBONACCI
  ============================================

  La sucesion de Fibonacci se define de forma recursiva como:

fibo(n) = n  si n = 0 ó 1
fibo(n) = fibo(n - 1) + fibo(n - 2) si n > 1

  Aplicar la recursion de esta forma hace que el numero de llamadas sea de orden
exponencial con respecto al tamaño inicial del dato, por lo que el algoritmo se
vuelve lento rapidamente.

  Suponiendo n suficientemente grande podemos descomponer fibo(n - 1) en el paso
de recurcion como sigue:

fibo(n) = fibo(n - 1) + fibo(n - 2) = (fibo(n - 2) + fibo(n - 3)) + fibo(n - 2) =
= 2 * fibo(n - 2) + fibo(n - 3)

  Aplicamos el mismo proceso a fibo(n - 2):

fibo(n) = 2 * fibo(n - 2) + fibo(n - 3) = 2 * (fibo(n - 3) + fibo(n - 4)) + fibo(n - 3) =
= 3 * fibo(n - 3) + 2 * fibo(n - 4)

  Y para ver las cosas mas claras lo repetimos con fibo(n - 3):

fibo(n) = 3 * fibo(n - 3) + 2 * fibo(n - 4) = 3 * (fibo(n - 4) + fibo(n - 5) + 2 * fibo(n - 4) =
= 5 * fibo(n - 4) + 3 * fibo(n - 5)

  Por si no queda claro donde queremos llegar resumimos lo que tenemos hasta ahora:

  Cada una de las siguientes expresion son iguales a fibo(n):

1 * fibo(n - 1) + 1 * fibo(n - 2) = fibo(2) * fibo(n - 1) + fibo(1) * fibo(n - 2) =
2 * fibo(n - 2) + 1 * fibo(n - 3) = fibo(3) * fibo(n - 2) + fibo(2) * fibo(n - 3) =
3 * fibo(n - 3) + 2 * fibo(n - 4) = fibo(4) * fibo(n - 3) + fibo(3) * fibo(n - 4) =
5 * fibo(n - 4) + 3 * fibo(n - 5) = fibo(5) * fibo(n - 4) + fibo(4) * fibo(n - 5)

  Si seguimos de esta forma podemos intuir que

  fibo(n) = fibo(k + 1) * fibo(n - k) + fibo(k) * fibo(n - k - 1) := F(n,k) para 0 <= k < n

  Se puede demostrar por induccion que fijando un N natural (N >= 2) se tiene que

  fibo(N) = F(N,k) para todo 0 <= k < N

  y que fijado K natural para todo n > K se tiene que

  fibo(n) = F(n,K)

  por lo tanto tenemos:

  fibo(n) = F(n,k) = fibo(k + 1) * fibo(n - k) + fibo(k) * fibo(n - k - 1) para 0 <= k < n


  SUCESION DE FIBONACCI OPTIMIZADA
  ================================

  Escribiremos fibo(n) como  f(n), es mas corto :-)
  Partiendo de la expresion F(n,k) consideraremos dos casos:

  - n par:

        Sea k = n / 2

        Asi F(n,k) = f(k + 1) f(n - k) + f(k) f(n - k - 1) =
        f(n/2 + 1) f(n/2) + f(n/2) f(n/2 - 1) =
        =f(n/2) (f(n/2 + 1) + f(n/2 - 1)

        F(n,n/2) = f(n / 2) * (f(n / 2 + 1) + f(n / 2 - 1)) := F(n)

    - n impar:

        Sea k = (n - 1) / 2

        F(n,k) = f(k + 1) f(n - k) + f(k) f(n - k - 1) =
        f((n - 1) / 2 + 1) f((n + 1) / 2) + f((n - 1) / 2) f((n + 1) / 2 - 1) =
        f((n + 1) / 2) f((n + 1) / 2) + f((n - 1) / 2) f((n - 1) / 2) =
        (f((n + 1) / 2))^2 + (f((n - 1) / 2))^2

        F(n,(n - 1)/2) = (f((n + 1) / 2))^2 + (f((n - 1) / 2))^2 := F(n)

    Por lo tanto definimos la sucesion de Fibonacci como sigue:

    fibo(0) = 0
    fibo(1) = 1
    fibo(n) = F(n) si n > 1

    donde:
        F(n) = fibo(n / 2) * (fibo(n / 2 + 1) + fibo(n / 2 - 1)) si n par
        F(n) = (fibo((n + 1) / 2))^2 + (fibo((n - 1) / 2))^2     si n impar

    Observemos ahora que si n==2,

    fibo(2) = F(2) = fibo(1) * (fibo(2) + fibo(0)) = fibo(1) * fibo(2)

    y tenemos una recursion infinita, ya que para calcular fibo(2) hay que calcular fibo(2)...

    Asi pues, tenemos la definicion final de la sucesion de Fibonacci:

    fibo(0) = 0
    fibo(1) = 1
    fibo(2) = 1
    fibo(n) = F(n) si n > 1

    con F(n) como antes.

    Definiendo fibo(n) de esta forma, en cada paso de recursion generamos dos o tres llamadas
    a la misma funcion fibo, pero en cada una de ellas reducimos el tamaño del dato inicial a
    la mitad, por lo que el coste computacional es mucho menor (¿Cual es el coste? No se calcularlo)
*/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MIN 37
#define MAX 42

typedef unsigned long long fibo_t;

unsigned long long llamadas_clasico;
unsigned long long llamadas_optimizado;

fibo_t fibo_clasico(fibo_t n)
{
    llamadas_clasico++;

    if(n == 0)
        return 0;
    if(n == 1)
        return 1;

    return fibo_clasico(n - 1) + fibo_clasico(n - 2);
}

fibo_t fibo(fibo_t n)
{
    llamadas_optimizado++;

    if(n == 0)
        return 0;
    if(n == 1)
        return 1;
    if(n == 2) //Evitamos recurion infinita si n == 2
        return 1;

    if(n % 2) //n impar y mayor que 2
    {
        fibo_t k1,k2;

        k1 = fibo((n + 1) / 2);
        k2 = fibo((n - 1) / 2);

        return k1 * k1 + k2 * k2;
    }

    //n par y mayor que 2
    return fibo(n / 2) * (fibo((n / 2) + 1) + fibo((n / 2) - 1));
    //si n == 2 fibo(n / 2) * fibo(n / 2 + 1) = fibo(1) * fibo(2)
    //habria recursion infinita si no se pone n == 2 como caso base
}

int main(int argc, char *argv[])
{
    fibo_t i,valor;
    time_t ini;

    printf("Fibonacci clasico:\n");

    ini = time(NULL);

    for(i = MIN ; i < MAX ; i++)
    {
        llamadas_clasico = 0;
        valor = fibo_clasico(i);

        printf("  fibo_clasico(%llu) = %llu (%llu llamadas)\n",i,valor,llamadas_clasico);
    }

    printf("%llu segundos\n",time(NULL) - ini);

    printf("\nFibonacci optimizado:\n");

    ini = time(NULL);

    for(i = MIN ; i < MAX ; i++)
    {
        llamadas_optimizado = 0;
        valor = fibo(i);

        printf("  fibo(%llu) = %llu (%llu llamadas)\n",i,valor,llamadas_optimizado);
    }

    printf("%llu segundos\n",time(NULL) - ini);

    return 0;
}



#include <stdio.h>

typedef unsigned long long fibo_t;

fibo_t fibo(fibo_t n)
{
    if(n == 0)
        return 0;
    if(n == 1)
        return 1;
    if(n == 2)
        return 1;

    if(n % 2)
    {
        fibo_t k1,k2;

        k1 = fibo((n + 1) / 2);
        k2 = fibo((n - 1) / 2);

        return k1 * k1 + k2 * k2;
    }

    return fibo(n / 2) * (fibo((n / 2) + 1) + fibo((n / 2) - 1));
}

int convertir(char *s, fibo_t *valor)
{
    *valor = 0;

    while(*s)
    {
        if((*s) < '0' || (*s) > '9')
        {
            *valor = 0;
            return 0;
        }

        *valor *= 10;
        *valor += (*(s++)) - '0';
    }

    return 1;
}

int main(int argc, char *argv[])
{
    int i;
    fibo_t n;

    if(argc < 2)
    {
        fprintf(stderr,"\nLinea de comandos: %s PARAMETRO_1 [PARAMETRO_2 ... PARAMETRO_N]\n\n",argv[0]);
        fprintf(stderr,"Los distintos parametros deben ser enteros positivos\n");
        return 1;
    }

    fprintf(stdout,"\n");

    for(i = 1 ; i < argc ; i++)
    {
        if(!convertir(argv[i],&n))
            fprintf(stderr,"%s: parametro incorrecto\n",argv[i]);
        else
            fprintf(stdout,"%s(%llu) = %llu\n",argv[0],n,fibo(n));
    }

    return 0;
}
#29
¡Buenas!

Supongo que habrá mas usuarios en esta situación. La publicidad masiva que se hace desde el foro de Tapatalk, cada vez que hago click en algún mensaje del foro cuando me conecto por el movil.

Puedo entender que el mensaje de descarga de la aplicación aparezca de forma informativa una sola vez, pero que cada vez que acceda a un foro o un hilo aparezca el dichoso mensaje es harto molesto.

No se quien ha diseñado el anuncio, pero por favor, si no lo quitáis, ponedle al menos una forma de evitar que se muestre mas de una vez.

¡Saludos!
#30
¡Buenas!

Uno de mis compañeros de piso utiliza un programa de descargas que tambien va subiendo el archivo que esta descargando. Dicho programa ocupa todo el ancho de banda de subida y a pesar de que he mirado sus opciones de configuracion, no se puede limitar la subida. Viendo que esta persona, a pesar de que le hayamos explicado que no debe hacerlo porque nos esta jodiendo a todos, sigue utilizando el programa (lo acabo de comprobar mirando en el router la lista de aplicaciones que utilizan UPnP), me gustaria saber si hay alguna forma de bloquear el programa en el router, para evitar que se pueda utilizar.

El router es un Livebox 2 de Orange.

¡Saludos!
#31
¡Buenas!

Acabo de instalar Ubuntu (la ultima version, creo que es 12.04), y no me reconocia el controlador de red. A traves de otra conexion wifi he instalado el controlador privativo "Broadcom STA wireless driver".

No me he quedado a gusto, asi que he investigado si en el repositorio de ubuntu existia algun controlador equivalente y he llegado a esta pagina:

http://nfolamp.wordpress.com/2011/10/15/ubuntu-11-10-getting-wireless-bcm4311-working/

(lspci me dice que la version que tengo es la 4312, aunque intuyo que la solucion es la misma)

¿Lo que dicen ahi es correcto?

Si asi es, que hago primero, ¿eliminar el controlador privativo e instalar despues el nuevo? ¿tendria problemas haciendolo al reves?

Por cierto, ¿como puedo saber como se llama dentro del sistema el controlador que he instalado? Lo digo por eliminarlo con remove, para no estar cambiando de consola a ventanas...

¡Saludos!

Solucionado: Al final he hecho lo que indicaba el sentido comun. Primero eliminar el driver privativo y luego instalar el del repositorio.

Por cierto, me ha quedado la duda de como saber el nombre del controlador para eliminarlo con remove

¡Saludos!
#32
¡Buenas!

Tengo una herramienta casera para consola que he guardado en el directorio C:\Windows\system32 para poder ejecutarla sin tener que introducir la ruta completa en la que se encuentra. El programa va acompañado de un archivo de texto, que tambien he incluido en c:\windows\system32, desde el que lee datos para mostrarlos en la consola. Lo malo es que tanto cuando intento acceder al fichero de texto como al fichero de la propia herramienta no me los puede abrir. No he probado con el resto de elementos del directorio, pero supongo que sucedera lo mismo. He intentado ejecutar el programa en modo administrador, pero no hay forma. Me extraña, porque por ejemplo type si que me muestra el contenido de los ficheros...

¿Que tengo que hacer para poder abrir los ficheros que se encuentran en c:\windows\system32 con programas propios?

¡Saludos!

PD: Utilizo Windows 7 home premium
PD2: He mentido como un bellaco, resulta que si me abre otros ficheros que se encuentran en el directorio. Parece que los unicos que no puedo abrir son los dos ficheros que he metido a mano.
#33
¡Buenas!

Hace unos dias adquiri un juego para windows (windows 7 Home Premium). Al instalarlo e ir a lanzarlo, me saltaba un aviso sobre los drivers de la tarjeta grafica (Mobile Intel (R) 4 Series Express Chipset Family), diciendo que no podia renderizar.

Investigando en la pagina de Intel encontre una version reciente de los drivers, pero me daba el aviso de que podia haber conflictos con el modelo de laptop que tengo. Entonces acudi a la pagina del fabricante y busque los drivers, que resultaron ser algo mas recientes que los que tenia, pero bastante mas antiguos que la untima version ofrecida por Intel.

He instalado los drivers del fabricante y el juego sigue sin funcionar. Acabo de comprobar desde el administrador de dispositivos que los drivers no se pueden "actualizar mas".

¿Que es lo que recomendais? ¿Instalar la ultima version que ofrece Intel? ¿Quedarme con lo que tengo? Si actualizo con la version ofrecida desde intel y no fuese compatible con el modelo del ordenador ¿Que problemas podria tener?

¡Saludos!

PD: Si he metido la pata y esto va en hardware, avisad.

¡Saludos de nuevo!
#34
¡Buenas!

Tratando de leer el tamaño en bytes de unos ficheros iso, me he econtrado con un par de casos en los que obtengo como tamaño incorrecto del fichero 0xFFFFFFFF bytes (lo que es lo mismo (unsigned long) (-1)). Viendo la referencia de cplusplus.com, me dice que cuando hay algun error por parte de ftell, este es el valor devuelto, pero una llamada a perror me dice que no hay ningun error. Los archivos en si son dos imagenes iso de windows 7 (versiones de 32 y 64 bits), descargadas de MSDNAA (una especie de acuerdo entre microsoft e institutos para regalar software). Con el resto de ficheros no tengo ningun problema.

Aqui el primer codigo:

unsigned long flen(FILE *f)
{
   unsigned long len, pos;

   pos = ftell(f);

   fseek(f,0,SEEK_END);

   len = ftell(f);

   fseek(f,pos,SEEK_SET);

   return len;
}


Y aqui otro, para linea de comandos,  que cree por si tenia algun error que no habia visto, pero que me da los mismos resultados:

#include <stdio.h>

int main(int argc, char *argv[])
{
   if(argc < 2)
   {
       printf("%s fic1 [fic2 ... ficN]",argv[0]);
       return 1;
   }
   else
   {
       FILE *f;

       while(--argc)
       {
           if(!(f = fopen(argv[argc],"rb")))
               fprintf(stderr,"No se puede abrir %s\n",argv[argc]);
           else
           {
               fseek(f,0,SEEK_END);

               if(ftell(f) == -1UL)
                   perror(argv[argc]);
               else
                   fprintf(stdout,"%10lu %s\n",ftell(f),argv[argc]);

                fclose(f);
           }
       }
   }

   return 0;
}


Si veis la razon de que me devuelva una longitud falsa, o si sabeis que pasa con este tipo de isos y ftell, avisad, por favor.

¡Saludos!
#35
¡Buenas a todos!

Estoy intentando crear una aventura conversacional (luego la pasare a grafica, pero esto es lo basico), y estoy atascado con distintos planteamientos. Quiero crear una estructura lo mas general posible para poder hacer aventuras posteriormente cambiando tan solo los datos de los objetos y escenarios que intervienen en ella.

De momento, la estructura que relaciona los escenarios la tengo clara. Voy a utilizar un ADT grafo que ya tengo construido, asi cada vertice sera un escenario y las aristas los caminos que llevan de un escenario a otro. La informacion la cargaria desde un fichero, asi distintos ficheros tendran distintos escenarios para distintas aventuras.

Los objetos tendran una ID, un nombre y una descripcion, tambien los cargare desde un fichero, asi que tambien es bastante general. Solo tendre que crear ficheros de datos para las distintas aventuras.

Cada escenario tendra una descripcion y una lista de objetos con los que se pueda interactuar, y el inventario del protagonista tambien sera una lista de objetos, por lo que tampoco pierdo generalidad.

El problema lo tengo a la hora de decidir como llevar a cabo las acciones (sera una cantidad pequeña de comandos, del estilo del Day Of Tentacle) sobre los distintos objetos.

Se me ocurren distintas opciones pero no se por cual decidirme ni que sera mejor o peor, aqui es donde me hace falta vuestra experiencia o sentido comun.

Tengo claro (o creo que lo tengo, si veis que voy dando palos de ciego avisad) que la estructura de la funcion que lleve a cabo la accion sobre el/los objetos tiene que ser la siguiente:

nombre_funcion(referencia a tipo_escenario, referencia a personaje, referencia a objeto1, referencia a objeto2, lista_de_objetos).

Asi podre modificar la lista de objetos del escenario y del protagonista, y decidir si el resultado es otro objeto distinto a los dos dados de entre todos los objetos que haya en el juego y realizar las modificaciones en consecuencia.

Por ejemplo:

Usar sombrero con perchero. Busco sombrero, busco perchero, compruebo que puedo realizar la accion, elimino el sombrero del inventario, elimino perchero del escenario y sustituyo perchero por perchero con sombrero que se encontrara en la lista de los objetos.

Las opciones que barajo son las siguientes:

- Crear una funcion, que dependiendo del comando introducido, discrimine con if-elses los objetos sobre los que se lleva a cabo, por ejemplo.

ejecutar_accion(accion, escenario, prota, objeto1, objeto2, lista_objetos)
{
    if(accion == UNA_ACCION)
    {
        if(objeto1 == UN_OBJETO)
        {
            if(objeto2 == OTRO_OBJETO)
            {
                una_accion(escenario, prota, objeto1, objeto2, lista_objetos);
            }
            else if(objeto2 == MAS_OBJETOS)
            {
                ...
            }
            ...
        }
    }
}
una_accion(escenario, prota, objeto1, objeto2, lista_objetos)
{
    Lo mismo de arriba, con if elses compruebo con que par de objetos estoy tratando y actuo en consecuencia.
}


Con este tipo de codigo me puedo volver loco discriminando todos los posibles casos y para cada aventura tendria que modificar todas las relaciones en el codigo fuente...

- La segunda opcion que estoy pensando es crear ficheros dependientes de cada accion con matrices NxN, donde N es la cantidad de objetos, con la siguiente estructura:


     ID1  ID2 ... IDN

ID1  R11  R12 ... R1N

ID2  R21  R22 ... R2N

.     .    .  .    .
.     .    .   .   .
.     .    .    .  .

IDN  RN1  RN2 ... RNN


Rij es el nombre de una funcion que realiza acciones sobre el protagonista y el escenario correspondiente dependiendo de la accion.

Rij, en el ejecutable, sera unsigned long funcion(escenario *, protagonista *, objeto1*, objeto2 *, listaobjetos*)

Rij con i < j sera una funcion binaria (relacionara dos objetos)
Rij con i >= j sera una funcion unaria (la accion recaera sobre un solo objeto, segundo = NULL)
Rij = NULL si los objetos no se relacionan por la accion indicada.

La forma de relacionar el nombre de la funcion con la funcion que cree en el codigo, seria utilizando una lista de pares (nombre funcion, puntero a funcion), asi al leer el nombre de la funcion en el fichero podria traducirlo a la direccion de dicha funcion para asignarlo en la matriz del ejecutable.

Lo malo de este metodo es, que aunque gano en generalidad, si por ejemplo tengo 30 objetos, tendria que rellenar 900 datos de una matriz por cada accion.

¿Cual es la mejor forma para trabajar este problema?

Si conoceis o se os ocurre otro metodo me gustaria saberlo. Si quereis que os aclare algo mas sobre lo que tengo pensado, preguntad. Solo quiero tener las ideas claras antes de empezar a teclear codigo.

Muchas gracias por vuestra atencion.

¡Saludos!
#36
¡Buenas!

Acabo de hacer (hace un par de dias) un upgrade de Ubuntu a la ultima version y cuando pulso ctrl+alt+Fx para acceder a alguna consola, esta me aparece en azul.

He probado actualizando la distribucion (update + dist-upgrade), actualizando VirtualBox y Googleando (a lo mejor no como deberia, porque ya estoy un poco harto), pero no consigo que se deje de ver todo azul y con letras enormes y distorsionadas (como si fuese un gran zoom de una pequeña parte de la consola).

¿Alguien mas tiene o ha tenido este problema? ¿Sabeis como solucionarlo?

¡Saludos!
#37
¡Buenas!

He visto que ultimamente hay bastantes preguntas sobre memoria dinamica. Aqui os dejo un pequeño programa que la utiliza varias veces y con distintos tipos de puntero. Espero que podais usarlo como ejemplo para resover vuestros propios problemas.

Para los interesados en criptografia, tengo que decir que es una variante del cifrado de Beaufort en el que se pueden utilizar varias claves para añadir seguridad al cifrado:


/*

    Utilidad que cifra ficheros basandose en el cifrado de Beaufort con claves multiples

    Al ultilzar claves multiples, la longitud de la clave resultante sera el minimo comun
multiplo de todas las claves utilizadas.

    cifra +|- "claves" fichero_de_entrada fichero_de_salida

    +: cifrar
    -: descifrar

*/

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

/* funcion que guarda en tokens las palabras contenidas en s y devuelve el numero de parabras extraidas */
int tokenize(char *s, char ***tokens);

/* carga en (*s) el contenido del fichero al que apunta f */
unsigned long cargar_fichero(FILE *f, unsigned char** s);

/*

calcula el coeficiente nsimo segun el siguiene criterio:

ultima_clave[posicion % longitud ultima_clave] -
penultima_clave[posicion % longitud penuultima_clave] +
antepenultima_clave[posicion % longitud antepenultima_clave] +
... + o - (segun el numero de claves) primera_clave[posicion % longitud primera_clave]
*/
int coeficiente(unsigned long posicion, char **claves, int nclaves);

/*
    cifrado[i] = coeficiente[i] + o - (depende del numero de claves) texto_plano[i] mod 256;

    tomando la clase de quivalencia positiva entre 0 y 255
*/
int cifrar(unsigned char *s, unsigned long longitud, char **claves, int nclaves);


/*
    texto_plando[i] = 1 o (-1) (depende del numero de claves) * (cifrado[i] - coeficiente[i]) mod 256;

    tomando la clase de quivalencia positiva entre 0 y 255
*/
int descifrar(unsigned char *s, unsigned long longitud, char **claves, int nclaves);

/*

    las siguientes funciones calculan el minimo comun multiplo y maximo comun divisor de dos enteros

*/
unsigned long mcm(unsigned long a, unsigned long b);
unsigned long mcd(unsigned long a, unsigned long b);

int main(int argc, char *argv[])
{
    FILE *f; /* fichero de entrada y de salida */
    char **claves = NULL; /* variable para guardar las claves introducidas */
    unsigned char *contenido = NULL; /* puntero para almacenar el contenido del fichero */
    unsigned long longitud, nclaves; /* longitud del fichero y numero de claves introducidas*/

    if(argc != 5)
    {
        printf("\ncomando: cifra +|- \"claves\" fic_entrada fic_salida\n\n+: cifrar\n-: descifrar\n");
    }
    else
    {
        if(!(f = fopen(argv[3] , "rb")))
            printf("No se puede abrir el fichero: %s\n", argv[3]);
        else
        {
            if((longitud = cargar_fichero(f,&contenido)) == (unsigned long)(-1))
            {
                printf("Ha ocurrido un error al cargar el contenido del fichero de entrada.\n");
                fclose(f);
            }
            else
            {
                if((nclaves = tokenize(argv[2] , &claves)) != (unsigned long)(-1))
                {
                    if(!strcmp(argv[1],"+"))
                    {
                        if(!cifrar(contenido,longitud,claves,nclaves))
                            printf("\nHa ocurrido un error en el proceso de cifrado.\n");
                        else
                        {
                            if(!(f = fopen(argv[4] , "wb")))
                                printf("No se puede abrir el fichero: %s\n", argv[4]);
                            else
                            {
                                fwrite(contenido,longitud,1,f);
                                fclose(f);
                            }
                        }

                        free(contenido);

                        for(longitud = 0 ; longitud < nclaves ; longitud++)
                            free(claves[longitud]);
                        free(claves);
                    }
                    else if(!strcmp(argv[1],"-"))
                    {
                        if(!descifrar(contenido,longitud,claves,nclaves))
                            printf("\nHa ocurrido un error en el proceso de descifrado.\n");
                        else
                        {
                            if(!(f = fopen(argv[4] , "wb")))
                                printf("No se puede abrir el fichero: %s\n", argv[4]);
                            else
                            {
                                fwrite(contenido,longitud,1,f);
                                fclose(f);
                            }
                        }

                        free(contenido);

                        for(longitud = 0 ; longitud < nclaves ; longitud++)
                            free(claves[longitud]);
                        free(claves);
                    }
                    else
                        printf("\ncomando: cifra +|- \"claves\" fic_entrada fic_salida\n\n+: cifrar\n-: descifrar\n");
                }
                else
                {
                    printf("\nHa ocurrido un error al cargar las claves.\n");
                    free(contenido);
                }
            }
        }
    }

    return 0;
}

unsigned long cargar_fichero(FILE *f,unsigned char **ptr)
{
    unsigned long pos, len;

    /* calculamos la longitud del fichero */
    pos = ftell(f);
    fseek(f,0,SEEK_END);
    len = ftell(f);
    fseek(f,pos,SEEK_SET);

    /* asignamos tantos bytes como tenga el fichero */
    if(((*ptr) = (unsigned char *) malloc(len * sizeof(unsigned char))) != NULL)
        /* y cargamos el contenido */
        fread((*ptr),len,1,f);
    else
        len = (unsigned long)(-1);

    return len;
}

int tokenize(char *s, char ***tokens)
{
    char **aux; /* variable auxiliar para ir añadiendo una cadena mas a la lista */
    char *palabra; /* palabra extraida de la cadena s*/
    int npalabras = 0,i; /* numero de palabras y contador para bucles */

    /* intentamos leer una palabra */
    palabra = strtok(s," ");

    (*tokens) = NULL;

    while(palabra)
    {
        /* si se ha encontrado una palabra incrementamos el recuento de palabras*/
        npalabras++;

        /* hacemos que aux contenga tantos punteros a char como paralbras haya */
        if(!(aux = (char **) realloc((*tokens) , npalabras * sizeof(char*))))
        {
            for(i = 0 ; i < npalabras - 1 ; i++)
                free((*tokens)[i]);

            free(*tokens);
            (*tokens) = NULL;

            return -1;
        }
        else
        {
            /* asignamos la ultima palabra leida */
            aux[npalabras - 1] = (char *) malloc(sizeof(char) * (strlen(palabra) + 1));
            strcpy(aux[npalabras - 1] , palabra);

            /* y hacemos que la variable de entrada/salida apunte al nuevo conjunto de palabras */
            (*tokens) = aux;
        }

        /* intentamos leer la siguiente palabra */
        palabra = strtok(NULL , " ");
    }

    return npalabras;
}

int coeficiente(unsigned long posicion, char **claves, int nclaves)
{
    int c=0;
    unsigned long j;

    for(j = 0 ; j < nclaves ; j++)
    {
        if((nclaves - 1 - j) % 2)
            c -= claves[j][posicion % strlen(claves[j])];
        else
            c += claves[j][posicion % strlen(claves[j])];
    }

    return c;
}

int cifrar(unsigned char *s, unsigned long longitud, char **claves, int nclaves)
{
    unsigned long i;
    char *clave;
    unsigned long long_clave=1;

    /* la longitud de la clave final sera el mcm de las longitudes de las claves */
    for(i = 0 ; i < nclaves ; i++)
        long_clave = mcm(long_clave , strlen(claves[i]));

    if(!(clave = (char*) malloc(long_clave * sizeof(char))))
        return 0;

    for(i = 0 ; i < long_clave ; i++)
        clave[i] = coeficiente(i,claves,nclaves);

    for(i = 0 ; i < longitud ; i++)
        s[i] = (nclaves * 256 + (clave[i % long_clave] + (1 - 2 *(nclaves % 2)) * s[i])) % 256;

    free(clave);

    return 1;
}

int descifrar(unsigned char *s, unsigned long longitud, char **claves, int nclaves)
{
    unsigned long i;
    char *clave;
    unsigned long long_clave=1;

    for(i = 0 ; i < nclaves ; i++)
        long_clave = mcm(long_clave , strlen(claves[i]));

    if(!(clave = (char*) malloc(long_clave * sizeof(char))))
        return 0;

    for(i = 0 ; i < long_clave ; i++)
        clave[i] = coeficiente(i,claves,nclaves);

    for(i = 0 ; i < longitud ; i++)
        s[i] = (nclaves * 256 + ((1 - 2 * (nclaves % 2)) * (s[i] - clave[i % long_clave]))) % 256;

    free(clave);

    return 1;
}

unsigned long mcm(unsigned long a, unsigned long b)
{
    return (a * b) / mcd(a,b);
}

unsigned long mcd(unsigned long a, unsigned long b)
{
    if(a < b)
    {
        a ^= b;
        b ^= a;
        a ^= b;
    }

    if(!b)
        return a;

    return mcd(b , a % b);
}


Se debe utilizar desde la linea de comandos, por lo que es recomendable dejar el ejecutable en c:\windows\system32 para sistemas windows, \bin en sistemas UNIX y en general, en el directorio en el que se encuentren por defecto los comandos del sistema.

Para cifrar un fichero llamado "prueba" con la clave "clave de prueba" y como fichero de salida "cifrado", se debera hacer:

cifra + "clave de prueba" prueba cifrado

suponiendo que nombre del ejecutable sea cifra.

Para obtener el texto plano se utilizara la misma sintaxis utilizando el parametro - en lugar de +.

¡Saludos y espero que os sirva de referencia!

PD: Si veis algun error avisad, que uno es humano y por lo tanto propenso a cometer errores. Lo mismo si teneis alguna sugerencia.

¡Saludos!
#38
¡Buenas!

Hace unos dias reinstale un Windows XP SP2 Profesional en un Toshiba Satellite Pro M40X (laptop). Como no, me encontre con que faltaban un monton de drivers y poco a poco los he ido consiguiendo. La persona propietaria del ordenador como veia que avanzaba lentamente en la busqueda de drivers se puso a instalar como un poseso todo lo que encontraba relacionado con el modelo y de repente el teclado empezo a ir lentisimo.

Al final y despues de dar muchas vueltas, he identificado al culpable. Un proceso llamado TCtrlIOHook. Ya lo he quitado de la lista de inicio de windows. El programa al parecer se encarga de controlar las teclas especiales del teclado.

Solo queria saber como quitar el proceso de forma definitiva de la lista de inicio de Windows (igual podria buscarlo, pero llevo ya unas tres horas a vueltas con los drivers y estoy harto de buscar, leer, instalar, equibocarme y reinstalar drivers...), ya que al desactivar la pestaña en msconfig, cada vez que arranco windows me sale un mensaje diciendo que el cambio no es definitivo, y directamente me entra en msconfig.

Me da igual que el programa sea util o no. Lo que quiero es olvidarme de una vez del dichoso portatil....

¡Saludos!
#39
GNU/Linux / Problemas de dependencias...
15 Febrero 2011, 06:42 AM
¡Buenas!

Estoy intentando instalar Code::Blocks en gNewSense. Despues de descargar el package (no se me ocurre ninguna traduccion, ando espeso) correspondiente a debian (gNewSense esta basado en Ubuntu y usa paquetes .deb (por si a caso)),

Despues de extraer los ficheros, accedo mediante el terminal al directorio en el en el que  los he extraido y ejecuto

sudo dpkg -i *.deb 2> unfichero

para recoger los errores en un fichero. El resultado es el siguiente


dpkg: problemas de dependencias impiden la configuración de codeblocks:
codeblocks depende de libwxbase2.8-0 (>= 2.8.10.1); sin embargo:
 La versión de `libwxbase2.8-0' en el sistema es 2.8.7.1-0ubuntu3.
codeblocks depende de libwxgtk2.8-0 (>= 2.8.10.1); sin embargo:
 La versión de `libwxgtk2.8-0' en el sistema es 2.8.7.1-0ubuntu3.
dpkg: error al procesar codeblocks (--install):
problemas de dependencias - se deja sin configurar
dpkg: problemas de dependencias impiden la configuración de codeblocks-contrib:
codeblocks-contrib depende de libwxbase2.8-0 (>= 2.8.10.1); sin embargo:
 La versión de `libwxbase2.8-0' en el sistema es 2.8.7.1-0ubuntu3.
codeblocks-contrib depende de libwxgtk2.8-0 (>= 2.8.10.1); sin embargo:
 La versión de `libwxgtk2.8-0' en el sistema es 2.8.7.1-0ubuntu3.
codeblocks-contrib depende de codeblocks (= 10.05-1); sin embargo:
El paquete `codeblocks' no está configurado todavía.
dpkg: error al procesar codeblocks-contrib (--install):
problemas de dependencias - se deja sin configurar
dpkg: problemas de dependencias impiden la configuración de libcodeblocks0:
libcodeblocks0 depende de libwxbase2.8-0 (>= 2.8.10.1); sin embargo:
 La versión de `libwxbase2.8-0' en el sistema es 2.8.7.1-0ubuntu3.
libcodeblocks0 depende de libwxgtk2.8-0 (>= 2.8.10.1); sin embargo:
 La versión de `libwxgtk2.8-0' en el sistema es 2.8.7.1-0ubuntu3.
dpkg: error al procesar libcodeblocks0 (--install):
problemas de dependencias - se deja sin configurar
dpkg: problemas de dependencias impiden la configuración de libwxsmithlib0:
libwxsmithlib0 depende de libcodeblocks0 (= 10.05-1); sin embargo:
El paquete `libcodeblocks0' no está configurado todavía.
libwxsmithlib0 depende de libwxbase2.8-0 (>= 2.8.10.1); sin embargo:
 La versión de `libwxbase2.8-0' en el sistema es 2.8.7.1-0ubuntu3.
libwxsmithlib0 depende de libwxgtk2.8-0 (>= 2.8.10.1); sin embargo:
 La versión de `libwxgtk2.8-0' en el sistema es 2.8.7.1-0ubuntu3.
dpkg: error al procesar libwxsmithlib0 (--install):
problemas de dependencias - se deja sin configurar
dpkg: problemas de dependencias impiden la configuración de wxsmith-dev:
wxsmith-dev depende de libcodeblocks0 (= 10.05-1); sin embargo:
El paquete `libcodeblocks0' no está configurado todavía.
dpkg: error al procesar wxsmith-dev (--install):
problemas de dependencias - se deja sin configurar
dpkg: problemas de dependencias impiden la configuración de codeblocks-dev:
codeblocks-dev depende de libcodeblocks0 (= 10.05-1); sin embargo:
El paquete `libcodeblocks0' no está configurado todavía.
dpkg: error al procesar codeblocks-dev (--install):
problemas de dependencias - se deja sin configurar
dpkg: problemas de dependencias impiden la configuración de libwxsmithlib0-dev:
libwxsmithlib0-dev depende de wxsmith-dev (= 10.05-1); sin embargo:
El paquete `wxsmith-dev' no está configurado todavía.
dpkg: error al procesar libwxsmithlib0-dev (--install):
problemas de dependencias - se deja sin configurar
Se encontraron errores al procesar:
codeblocks
codeblocks-contrib
libcodeblocks0
libwxsmithlib0
wxsmith-dev
codeblocks-dev
libwxsmithlib0-dev


Lo que observo es que al parecer hace falta actualizar unos cuantos paquetes (ya me ha salido el palabro) o ficheros, pero antes de intentar instalar codeblocks he realizado un update y un dist-upgrade.

Una ultima informacion. Tengo instalado codeblocks en Ubuntu y no he tenido ningun problema (venia en el repositorio)

¿Puedo forzar la actualizacion de los paquetes anticuados aunque no se pueda hacer con apt-get update + apt-get dist-upgrade?

Y sobre todo, ¿que herramientas (comandos) me hace falta conocer para poder instalar paquetes que no esten en los repositorios de Debian, Ubuntu, gNewSense u otra distribucion basada en Debian?

¡Un saludo y perdon por las molestias!

PD: Si hace falta mas informacion o informacion mas especifica avisas.

¡Saludos de nuevo!
#40
GNU/Linux / Cosas curiosas XD
24 Enero 2011, 06:40 AM
Buenas a todos!

No se si conocereis este navegador (como en todos los casos, habra muchos que si y otros tantos que no...). Si os gusta editar con Vi, os recomiendo navegar con links. Supongo que estara disponible para la mayor parte de las distros (aunque realmente no lo se...)

Lo estoy haciendo en este momento. Cuando oi que exisitia algo asi, me dije, "no puede ser", pero si que lo es. Hay que ver como esta el mundo. Hay artilugios para todos los gustos.

Un saludo desde links!
#41
¡Buenas!

Estoy trabajando con memoria dinamica bajo Windows 7 con 4 GB de RAM. Para saber si las distintas funciones encargadas de manejarla realizan bien su trabajo estoy utilizando mensajes en forma de unsigned long. Si trabajo con fragmentos pequeños de memoria, la insercion de informacion en un punto de la memoria, el reemplazo de un fragmento por otro o la extension de un fragmento con otro funcionan bien.

El problema esta al pasar de 112 bytes. En ese momento toda operacion que conlleve el aumento de la memoria me devuelve el mensaje de que la asignacion no ha podido ser posible.

Anteriormente habia realizado un trabajo parecido bajo Windows 98 y XP y nunca me habia encontrado con este problema. Aunque tambien es verdad que he cambiado el enfoque del codigo. Ahora en lugar de que cada funcion actue sobre la memoria directamente he creado un conjunto de funciones que realizan acciones sobre la memoria y el resto de funciones utilizan estas ultimas.

¿Porque con pequeños fragmentos de memoria no tengo problema, pero cuando pasado un limite comienzan los problemas?

Dejar codigo resultaria casi imposible, porque son unos cuantos ficheros, un par con unas 450 lineas de codigo (o algo mas), con llamadas a funciones entre ellos.

Simplemente queria saber si sabiais la razon de que suceda lo descrito.

¡Saludos!

PD: No se si sera de importancia o no. Una funcion no implica una sola asignacion de memoria. En una sola llamada a las funciones que la manipulan puede haber dos o tres sentencias relacionadas con la asignacion dinamica de memoria. Lo digo por si el hecho de que se ejecuten en tan poco periodo de tiempo puede influir... Hasta ahi no llego...

¡Saludos!
#42
¡Buenas!

Estoy realizando un programa que en cierto modo tiene relacion con lo que es cambiar un numero de base. He empezado con un algoritmo general para pasar de cualquier base entre 2 y 16 a base 10 y a la inversa. Luego me he dado cuenta de que podia ampliarlo hasta base 64, pero con esta ultima base me he encontrado con problemas de definicion. Hasta el momento he encontrado estas dos distribuciones de digitos.

- ./ - cifras del 0 al 9 - mayusculas - minusculas
- cifras del 0 al 9 - mayusculas - minusculas - +/

¿Existen mas? ¿Se utilizan las dos y tengo que detectar con cual estoy trabajando? ¿Alguna de ellas esta en desuso y puedo utilizar la otra? ¿Depende de mi elegir con cual trabajo?

¡Saludos y gracias por vuestra atencion!
#43
¡Buenas!

Recientemente he descubierto VirtualBox, y me he descargado un par de distribuciones, entre ellas Ubuntu (la que mas utilizo), para empezar a moverme un poco en sistemas GNU-Linux.

Hasta hoy tenia instalada la version 10.04, con el paquete Gues tAdditions para que la configuracion se adaptase a la del anfitrion, pero cuando he actualizado a la version 10.10 (por medio del entorno grafico), aunque he vuelto a instalar el paquete, al trabajar en modo de pantalla completa, el escritorio sigue apareciendo reducido y centrado en la pantalla, aun cuando la ultima ejecucion haya sido en pantalla completa, lo cual solia hacer que Ubuntu 10.04 entrase directamente en pantalla completa y sin problemas.

Los pasos que he seguido han sido:

- Ejecutar VirtualBox->Dispositivos->Instalar <<Guest Additions>>
- He cambiado el directorio a /media/VBOXADDITIONS_3.2.8_64453
- He ejecutado: ./VBoxLinuxAdditions-x86.run
- He reiniciado Ubuntu
- No ha habido cambios

¿Cual ha sido el error que he cometido?

¡Saludos!
#44
¡Buenas!

No se si el post corresponde con la sección, si no fuese asi, trasladadlo donde corresponda.

Tengo aMule instalado en Ubuntu 10.04. Cada vez que me conecto me da ID Baja a pesar de que los puertos que he definido estan abiertos, asi que algo he hecho mal a la hora de configurarlo y no tengo ni idea de que es.

Y bueno, una pregunta que sera tonta para el que entienda del tema, pero es algo que a mi no me queda muy claro. En Opciones->Conexion, donde pone "Direccion de enlace", ¿se refiere a la IP del router? (Es lo que estoy poniendo...)

Resumiendo, ¿podeis ayudarme a configurar la conexion? Ya he estado ojeando la pagina oficial de aMule, y no he encontrado informacion... (a lo mejor no he sabido buscarla bien, no se)

¡Saludos!
#45
¡Buenas!

Nunnca he tenido en mis manos el texto de la especificicacion de C del comite ANSI que lo estandarizo (tampoco el ISO), pero tenia entendido (posiblemente de forma erronea) que existia la siguiente correspondencia:

char -> 1byte
short-> 2 bytes
long -> 4 bytes

Y sobre numeros de coma flotante... lo mismo, no tengo ni idea.

La cuestion esta en que acabo de empezar un modulo para sacarle rendimiento a lo que se sobre programacion, y en clase nos han dicho que el estandar no define ningun tipo de rango de valores para los tipos de datos predefinidos. Yo tenia entendido que aunque no existia una definicion de maximo para cada tipo de dato, si existia una cantidad minima de bytes establecida para cada tipo.

Lo unico que he encontrado es una referencia rapida de una sola oja, que se supone que es un resumen del ANSI, en la que se especifica que char, short y long deben tener 1, 2 y 4 bytes respectivamente.

¿Alguno sabeis exactamente cual es la verdad y cual la leyenda?

¡Saludos!