Recuperar contenido de un textarea asociado a TinyMCE

Se nota que cuando estoy muy ocupado dejo de lado las discusiones con mi padre, eso no quita que actualice con contenidos mas o menos interesantes, según voy ¿avanzando? en diferentes lenguajes de programación, sea pues:

Nos podemos encontrar en el caso de querer recuperar el valor de un textarea que previamente hemos asociado al editor wysiwyg TinyMCE, mediante alguna instrucción javascript, como podría ser, a la hora de validar un formulario.

Pues bien, si lo hacemos directamente con la instrucciones conocidas tales como:

var contenido=document.getElementById("nombreTextarea").value;

no nos recuperará ningún valor, pues parece ser que el contenido del textarea es nulo justo hasta el momento de pulsar el boton submit del formulario, en el momento en que el editor TinyMCE vuelca el contenido dentro del textarea.

Bien, atascado en esta situación me he puesto a googlear y he encontrado un foro en el que indicaban la respuesta, que al parecer se encuentra en la documentación del mismo editor.

tinyMCE.triggerSave();

El propio editor tiene una función preparada para volcar la información en el textarea. Por lo tanto tan solo tendremos que llamarla en el momento que queramos recuperar el contenido actual. Por ejemplo:

if (tinyMCE) tinyMCE.triggerSave(); 
if (formulari.contenido.value==''){
		alert('El contenido no puede estar en blanco.');
		formulari.contenido.focus();
		return false;
	}

Hasta pronto!

Publicado en Javascript, Programación, TinyMCE | 6 comentarios

Comprobar NIF con Python

Este es una pequeña función que nos permitirá comprobar si un NIF introducido es correcto. Se sabe que para comprobar el nif hay que realizar una división entre el numero DNI y 23 y comparar el resto con una tabla formada por letras.

Si habeis programado antes en web seguro que lo habréis visto tanto en Javascript como en PHP. Este pequeño ejemplo está realizado en Python:

def nif():
	import string # no necesario
	tabla = "TRWAGMYFPDXBNJZSQVHLCKE"
	numeros = "1234567890"
	nif = raw_input("Introduzca el NIF: ")
	respuesta = "No ha introducido un NIF valido"
	if (len(nif) == 9):
		letraControl = nif[8].upper()
		dni = nif[:8]
		if ( len(dni) == len( [n for n in dni if n in numeros] ) ):
			if tabla[int(dni)%23] == letraControl:
				respuesta="El NIF introducido es correcto"
	print respuesta

Desgranemos un poco el asunto
Primero declaramos la función e importamos la clase string (No es necesario)

def nif():
	import string #no necesario

Luego añadimos la tabla de letras y una con todos los numeros para poder comparar los datos introducidos (sin incluir la I, tal y comenta Manuel en el primer comentario):

##tabla="TRWAGMYFPDXBIJZSQVHLCKE"
tabla="TRWAGMYFPDXBNJZSQVHLCKE"
números="1234567890"

Pediremos que introduzcan el nif y declararemos la respuesta negativa, por defecto:

nif = raw_input("Introduzca el NIF: ")
respuesta = "No ha introducido un NIF valido"

Ahora viene el meollo:
Comprobaremos que el NIF introducido tiene 9 caracteres.

if (len(nif) == 9):

Acto seguido, separaremos la letra (pasándola a mayúscula) en la variable letraControl y los dígitos los guardaremos en la variable dni. Ambas serán del tipo String, ya que provienen de otro String

letraControl = nif[8].upper()
dni = nif[:8]

En esta parte comprobaremos que cada dígito del String dni  es igual a algún otro dígito del String llamado números (que habíamos declarado al inicio).
Puede resultar un poco liosa pero con este método consigues incluir en una sola linea dos If y un For. Trabaja de la siguiente manera: Compara si la longitud del string dni es igual al numero de n’s en dni que están dentro del string números, donde cada n es un dígito del string dni.

if ( len(dni) == len( [n for n in dni if n in numeros] ) ):

Por ultimo comprobaremos si la letra que hemos separado coincide con la de la formula antes mencionada, y si es así, cambiaremos la respuesta negativa por una positiva.

if tabla[int(dni)%23] == letraControl:
	respuesta="El NIF introducido es correcto"

Ahora tan solo queda mostrar la respuesta por pantalla

print respuesta

Evidentemente, si en algún momentos no se cumple cualquiera de los tres condicionales, es que el Nif introducido no sera correcto.

Volveré pronto con mas y mejor!

Publicado en Programación, Python | 4 comentarios

Recursividad

¿Qué es? He de admitir que ando un poco vago con este concepto, lo poco que se, o que tengo claro es que es una función que se llama a si misma. Muy bien.
El otro día me pare a pensar, tras un ejemplo visto en clase, y me parecio entender que es una forma de programar evitable, así como el uso del break y del continue.

Y es que andaba yo programando en Python, algo que cada día aprecio mas, y me encontré en una disyuntiva por mi afán de generar un código eficiente, y mi una solución parecía ser la llamada a un continue dentro de un bucle while. Claro, nunca antes lo había utilizado así que tras informarme bien, me pareció entender que su uso se debe restringir a situaciones en el que no sea posible evitarlo, y al tenerlo tan claro, observe que yo si lo podía evitar. Tan solo eran necesarios unos cuantos retoques en el código.

Así que analizando casos de funciones recursivas, bastante básicos, he llegado a la conclusión de que si el único merito de estas es llamarse a sí mismas hasta que se cumpla una condición, estas, podrán ser sustituidas por alguna instrucción iterativa, por lo menos en niveles de baja complejidad. Por favor, que alguien me corrija si me equivoco!

Y aqui tenemos un ejemplo bastante basico:
Disponemos de un vector con unos nombres y queremos mostrarlos por pantalla

nombres=['Juan','Claudio','Inaki','Alberto']

La función llamada iterativa se compone por un bucle while del cual no saldra hasta que i
sea  igual a la longitud del vector llamado nombres, e irá imprimiendo los valores que se vayan encontrando en la posición i del vector:

def iterativa(nombres):
	i=0
	while not i==len(nombres):
		print nombres[i]
		i=i+1

La función llamada recursiva generará un vector igual al que recibe, para no modificarlo, y eliminara el primer elemento del nuevo vector justo después de mostrarlo,(esto se consigue con la función pop(), que por defecto muestra y elimina el ultimo, pero podemos indicarle la posición  del indice para adecuarlo a nuestras necesidades). Inmediatamente después comprobara si la longitud del nuevo vector es igual a 0 y si no es así se llamará a sí misma, pero esta vez con un vector que tendrá una posición menos, y así hasta que el numero de posiciones sea cero.

def recursiva(nombres):
	nombresCopia=nombres[:]
	print nombresCopia.pop(0)
	if (len(nombresCopia)>0):
		recursiva(nombresCopia)

Observamos que ya la segunda llamada se realiza con el nuevo vector, y que este se sobre-escribe luego a sí mismo.

Un apunte. Este paso que muestro debajo, realiza una copia del vector nombres y todos sus elementos en el vector nombresCopia

nombresCopia=nombre[:]

Si no lo hiciésemos así, Python, tan sólo nos crearía un enlace llamado nombresCopia a la misma posición de memoria que ocupa el vector llamado nombres. Por lo tanto, cualquier cambio sobre el vector nombresCopia se vería reflejado en el vector nombres, ya que el contenido de ambos proviene de la misma posición de memoria, que equivale a ser el mismo vector con dos enlaces de llamada diferentes.

Hemos visto la manera de sustituir una instrucción iterativa mediante una función recursiva, y viceversa. Sería interesante tratar de encontrar algún método de los dos que no permitiese el cambio al otro, o que resultase lo suficiente complejo como para evitarlo.

Se admiten discusiones!

Publicado en Programación, Python | Deja un comentario

Improving

Hoy, dejaremos las discusiones con mi padre a un lado y nos centraremos en algo a lo que dedico cierto tiempo diariamente, la programación.

No llevo mucho en esto, pero lo suficiente como para haber tocado un lenguaje, haberlo olvidado, y haber vuelto a el.

En esta ocasión hablaremos de Python.

He de confesar que al principio, hace prácticamente dos años, no me hizo mucha gracia, yo venia de C, el cual había sido mi primer lenguaje, y aquel me resultaba un tanto confuso ya que no entendía la obligatoriedad de tabular ni el desprecio a los punto y coma. Pero ahora, todo me parece diferente.

Después de haber tanteado Java, Visual Basic .Net, JavaScript,ASP, PHP ( he de confesar que ese ultimo me cautivó, y mas después de llevar un año trabajando bajo el lenguaje de Microsoft el cual parece ser que abandonó en Noviembre de 2000 apostando por .Net) me ha parecido que aquello que cierto día me asustó, hoy me resulta de lo mas sugerente, y me he animado a mostrar un ejemplo tras haber encontrado un post en el que se realiza cierta comparación entre este y otro llamado Ruby, otro que pinta muy bien.
La cuestión es sencilla:
Se trata de realizar una función que pida un texto y te muestre el numero de palabras que contiene.

def paraules():
55555cadena=raw_input("Introdueixi una frase: ")
55555count=0
55555for paraula in string.split(cadena):
5555555555count=count+1
55555print count, " Paraules"

Bueno, algunos ya habrán notado la inexperiencia, pero a simple vista esta seria una de las maneras mas intuitivas de realizarlo. Pero claro, poco a poco hay que empezar a conocer los diferentes lenguajes y a utilizar las herramientas que ellos mismos nos disponen para hacer la tarea de programar mucho mas sencilla.

Así que con un par de retoques, tendríamos esto:

import string
def paraules():
55555cadena=raw_input("Introdueixi una frase: ")
55555print len(string.split(cadena))

Así de simple y así de elegante.

Pronto, mas discusiones!

Publicado en Programación, Python | Deja un comentario

Morderse la lengua

Llegaron las clases, llego la inestabilidad temporal. Una mañana gélida se convierte en un tórrido medio día. Y como no, con el paso de las semanas mi pelo volvió a tomar una medida demasiado incomoda.

Para que mentir, adoro el poder levantarme por la mañana sin la necesidad de tener que perder el tiempo peinándome. Entiéndase por esto, que puedo invertir en este menester desde cero hasta la nada despreciable suma de dos minutos, pero sobrepasar tal marca me resulta problemático para desarrollar el resto de actividades matutinas, pues mi tiempo es limitado

Así que el pasado domingo decidí cortarme el pelo, como viene siendo costumbre, con la «moto» y aproveché para recortarme la barba, como venia siendo costumbre antes del verano, ahorrándome la necesidad de la cuchilla de afeitar.

Y cuan grande fue mi asombro cuando mientras salia del baño mi padre, que casualmente por el pasillo andaba, con una indiferencia sumamente paradójica, me espeto:

-¿Es que ahora por ir a la universidad te tienes que afeitar como un intelectual?

Publicado en De mi, El | Deja un comentario

La lejanía

Si algo he apreciado del hecho de recorrer grandes distancias en espacios cortos de tiempo es de la capacidad de transformacion que provoca en uno mismo.
Proveernos del misterio de lo novedoso, de lo desconocido es algo que se deberia tener en cuenta, es mas deberia ser de obligada prueba.

Así pues, unas vacaciones lejos del hogar diario dispone a uno de energía y vitalidad con suficiencia para convertir su persona, hastiada tras el día a día natural, en alguien símil-mente diferente.

Afortunadamente estos rasgos no han de ser algo tan llamativo como para no pasar desapercibido a los observadores y puede manejarse con la suficiente discreción para no ser considerado por nadie mas que para uno mismo.

Publicado en Añoranza, De mi | Deja un comentario

Las nuevas tecnologías

El jueves llegué a mi casa y por lo visto también lo había hecho el nuevo nokia de mi madre.

Esta, al abrir la caja se sorprendió de que no incluía la tarjeta sim y ya marcaba el numero de teléfono de su operador telefónico cuando la paró mi padre argumentándole que al no haber hecho potabilidad pues había de usar la misma que ya tenia. Mi madre seguía en sus trece pero ya fuera por impaciencia pues accedió a abrir su móvil y sacar la tarjeta para ponerla en el nuevo.

Grande fue la sorpresa cuando comprobó que aquella tarjeta no entraba bien en la ranura, a tal efecto, de su nuevo móvil, entrar entraba pero una vez dentro esta bailaba y parecía no hacer buen contacto pues cuando encendía el móvil ni tan siquiera le pedía el código pin, huelga decir que tampoco podía llamar, así que ahora si, se aventuró y llamo a atención al cliente de su operador telefónico.

Estos, realmente no cabían en su asombro, ¿como podía ser que la tarjeta sim fuese mas pequeña de lo normal?
El único consejo que pudieron darle era que se acercase a alguna tienda física y se la renovasen.

Ahora si, la cuestión implicaba un dispendio monetario, por lo tanto esperarían a mi llegada para empezar de nuevo el proceso junto con la previa tormenta de preguntas.

En cuanto mi padre me lo explicó todo me puse manos a la obra, creía tener la respuesta a todas sus dudas, pero mi padre tiene un problema el cual acusa frecuentemente cuando ando yo de por medio, aún sabiendo que el ya esta mas que desfasado en cuanto a las nuevas tecnologías se refiere, cosa de la cual no le culpo pues yo con su edad estaré seguramente mucho mas desinformado, pues, a pesar de ello cree llevarme cierta ventaja en ocasiones como la del otro día tan solo porque el ya ha estado tratando el tema con anterioridad a mi llegada. Así pues en cuanto abrí el móvil me indicó donde se alojaba la tarjeta, y aquí ya pecó, pues el me indicaba la tarjeta de memoria, una micro sd en este caso.

Yo hice oídos sordos porque acababa de confirmar todas mis sospechas, pero el se irritó y me instigó de nuevo a que le hiciese caso….

Haciendo un inciso os pondré al tanto de por qué estas divergencias con mi padre:
El normalmente, y cada vez con mas asiduidad, se queja de que cuando yo era pequeño el me explicaba todas mis dudas y resolvía todas mis cuestiones, el cree que era así, pero normalmente las solucionaba invitándome a consultar mis dudas en un diccionario o similares. Pues bien, parece ser que por aquella gracia divina que me proveía, ahora, a día de hoy me toca a mi ser su bienhechor, hasta el fin de sus días, y sin poder quejarme, pues el es mi padre y así están dispuestas las cosas. Pues bien, yo trato de cumplir con mi cometido pero a mi manera, lo cual implica no hacer preguntas hasta que no haya terminado, no interrumpir y ni mucho menos llevarme la contraria.

Pues bien, volviendo al hilo, el me instigó a que le  obedeciera y quitase la tarjeta microsd y la metiera en la ranura de la tarjeta sim del nuevo movil para así comprobar que no encajaba, claro que el no sabia que esa era una tarjeta de memoria, ni que la que debiamos colocar en el movil era una tarjeta sim etc…

Yo lo miré a los ojos y le dije:

-Mira, si voy a mirarte el problema que tienes con el movil dejame que lo haga a mi manera, tan solo tienes que callar y mirar.

-Pero Juan, es que no hay otra tarjeta, es esa ¿o es que no lo ves?

-A ver, tu me has venido y me has dicho que te eche una mano con lo del móvil ya que tu no puedes, ¿cierto? Pues, si no puedes no trates de decirme como  lo he de hacer pues así tan solo conseguiremos que lo haga como tu y entonces llegaremos al mismo punto en el que tu estabas.

-Mira Juan, déjate de historias, si no quieres ayudarme ya buscare algún amigo que lo haga por que ya veo que a ti pocas cosas te puedo pedir.

Con esto ya me irrite y le alcé un tanto la voz, quizá era innecesario, pero a mi parecer era lo necesario para que me prestase la atención adecuada:

-Presta atención porque solo lo haré una vez

Quite la batería, saque la tarjeta sim que estaba debajo, se la di y me volví con mis cosas.

Publicado en De mi, El, Móvil | 2 comentarios

La tristeza

Hoy me he levantado realmente cansado, por ello, mientras desayunaba apoyaba la barbilla sobre la palma de la mano y miraba al suelo añorando el regreso a la cama. Instantes después ha aparecido mi padre por la cocina, algo habitual en las mañanas, y nada mas verme me ha preguntado por qué estaba triste.

No estaba triste, tan solo cansado, pero el necesita interpretar cada uno de mis estados, cosa en la que normalmente yerra.

Publicado en De mi, El, Mañana | 1 Comentario