jueves, 7 de marzo de 2013

Números enteros a cualquier base con VBA

Convertir a cualquier base con VBA

Usa Visual Basic para Aplicaciones para convertir un número en base 10 a cualquier base.

Microsoft Office ofrece una serie de funciones en VBA para convertir un número en base 10 a otra base. Dichas funciones como HEX o OCT tienen como limite máximo el tipo de datos Long.

Sin embargo, a veces es interesante y sobre todo en sistemas operativos de 32 bits, convertir números mucho más grandes.

Para este propósito he escrito una función para números enteros cuyo límite está establecido por el tipo de datos Double. El número más grande para este tipo de datos es 1,79769313486232E308 frente a 2.147.483.647.

El código:

Function CBase(Numero_Base_10 As String, Optional Base As Integer) As String

'Convierte un número decimal a otro de máximo 35 de base

Dim n, r, c As Double
Dim esFin As Boolean
Dim strCrt As Variant

strCrt = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")

'Si no se pasa el argumento asume el máximo de la matriz

If IsMissing(Base) Then Base = UBound(strCrt)
'Si el usuario es un poquito cabr... corrige el fallo
If Base > UBound(strCrt) Or Base < 2 Then Base = UBound(strCrt)

esFin = False
'Convierte el número al tipo de dato doble

n = CDbl(Numero_Base_10
'Inicializa el resultado

CBase = "" 
Do While Not esFin
     c = n / Base 'Cociente
     r = (c - Int(c)) * Base 'Resto
     CBase = strCrt(r) & CBase
     'Si el cociente es menor que la Base acaba
     If c < Base Then esFin = True Else n = Int(c)
Loop
'Añade el cociente final
CBase = strCrt(Int(c)) & CBase

End Function


La función está preparada para cualquier base que se quiera. En el código descrito se podría llegar hasta una base de 36. Si se quiere convertir a una base inferior a 36 sólo hay que pasar el parámetro de la base correspondiente, por ejemplo para convertir a hexadecimal el número 562133321251410, simplemente usa CBase( 5621333212514,16) sin modificar la función. Si quieres convertir a una base de por ejemplo 85, debes modificar la función añadiendo más caracteres diferentes a la matriz strCrt.


Agradecimientos:
Jack Daniel's

jueves, 17 de mayo de 2012

Convierte imágenes de CD/DVD

Convertir imágenes de discos CD/DVD con Ubuntu.

De los .bin, .img, .mdf, .nrg y .uif al más manejable .iso



1.- Instala bchunk, ccd2iso, mdf2iso, nrg2iso y uif2iso.
sudo aptitude install bchunk, ccd2iso, mdf2iso, nrg2iso, uif2iso
2.- Teclea.
Para el formato bin/cue: bchunk achivo_origen.bin archivo_origen.cue archivo_destino.iso
Para el formato img: ccd2iso archivo_origen.img archivo_destino.iso 
Para el formato mdf: mdf2iso archivo_origen.mdf archivo_destino.iso
Para el formato nrg: nrg2iso archivo_origen.nrg archivo_destino.iso
Para el formato uif: uif2iso archivo_origen.uif archivo_destino.iso 
3.- Para montar el archivo .iso.
mount -o loop -t iso9660 archivo_destino.iso /mnt/archivo_destino

También puedes usar el programa Furius ISO Mount el cual te permite montar y usar directamente los formatos ISO, IMG, MDF y NRG. Además te permitirá grabar las imágenes de disco .iso y .img.

Para realizar el proceso inverso ... y quién quiere hacer el proceso inverso.

Agradecimientos:
Jack Daniel's
http://www.howtodothings.com
http://www.junauza.com
http://debianrules.blogspot.com.es

domingo, 6 de mayo de 2012

Horror, error en Synaptic

Ubuntu. ¡No puedo abrir Synaptic!

Valor inválido en APT::Default-Release



Este error se produce después de actualizar Ubuntu. Harto de acudir a Google para solucionarlo, escribo esta entrada para que me sirva de recordatorio.

He aquí el pantallazo del problema.




La solución, edita el fichero /root/.synaptic/synaptic.conf



Busca el parámetro DefaultDistro="xxxxxxx".


Cámbialo por DefaultDistro=""



Ya está.

Gracias, Jack Daniel's.


domingo, 1 de abril de 2012

Lo que se ve no siempre es la realidad.

Hace tiempo que quería escribir algo sobre este tema. La razón es bien sencilla, ¿nunca os habéis preguntado por qué a veces la Luna o el Sol se ven más grandes en el cielo? Yo sí, pues mira que tontería, pero tuve que buscar el porqué.

La curiosidad se hizo mayor en un viaje que hice al Algarbe. Estaba corriendo por una playa de Faro al anochecer y de pronto giré la cabeza. Me quedé impresionado, tan impresionado que aún hoy recuerdo aquella imagen (y eso que no recuerdo nada desde que me casé). La Luna que surgía por detrás de las montañas, de un color anaranjado era enorme; y cuando digo enorme quiero decir "maximo supremus diplodocus". Mis compañeros me preguntaban qué estaba viendo porque ellos no estaban tan sorprendidos.

Bien, creo que todos, si alguna vez habéis visto un orto o un ocaso, sabréis de lo que hablo. Puede que el tamaño que veáis no sea tan grande pero sobrepasa con creces el tamaño aparente en el cielo habitual.

Y, ¿cuál es la explicación? Bueno, la distancia del astro a la Tierra, los distintas capas atmosféricas, las distintas temperaturas del aire, refracción, vuestro cerebro,... qué.

Pues veréis, esta es una de las cosas en las que la ciencia no tiene una postura definida y por tanto la conclusión es que es una mezcla de todo aunque lo que más influye en la percepción del tamaño aparente es el cerebro humano. Se podría decir que en un 75%.

El cerebro debe interpretar un mundo tridimensional a partir de dos imágenes bidimensionales. Para ello usa su experiencia (sí los bebés no saber ver, hasta los cinco años aproximadamente un niño no verá como un adulto, casi). Por tanto, como interpreta el cerebro el Sol, la Luna y todo lo que nos sobrevuela. Pues sí, comparándolo con los objetos más próximos a este y compensando las diferencias.

Por cierto el color si se debe a factores externos principalmente aunque también depende de tu capacidad visual. Hay gente que el capaz de ver hasta 40 veces más tonos de verde que otros aunque todos estemos de acuerdo en cual es el color verde. Sí, ...excepto los que padecen alguna enfermedad.

Finalmente si no lo crees haz la siguiente prueba. Cuando estés viendo una hermosa puesta de Sol con tu pareja juntitos y acarameladitos, haz una pausa, saca tu móvil y fotografía la puesta. Te llevarás una decepción.