All posts by josejavierfm

Jugando con imagenes en jquery (añadir texto y reemplazar texto )

Añadir automaticamente una leyenda a una imagen con su texto alternativo o poder cambiar las imagenes por un div con el mismo tamaño que la imagen y como contenido el texto alternativo.

Para ello nos hace falta JQuery y estilo css

Dada una imagen

Lo que obtenemos es la misma imagen pero con una leyenda inferior

La otra variante oculta la imagen y en su lugar muestra un hueco del mismo tamaño pero con el texto alternativo como contenido.

El ejemplo completo se puede ver aquí

Como hacer amigos en internet

Vivimos en una sociedad donde las relaciones humanas son cada vez mas difíciles, o por lo menos mas complicadas, dejarme que me explique: Ahora todo es digital, la manera de comunicarnos ha cambiado y hay que adaptarse a ello.
Hace algunos años no existían los móviles, ni con ellos los sms al principio o el whatsapp mas recientemente, tampoco había redes sociales.
Facebook por ejemplo empezó en 2004 pero no fué hasta 2008 cuando se convirtió en lo que es ahora.
A lo largo de los últimos años hemos visto como nacían muchas redes sociales (Instagram, Pinterest, Twitter) y algunas de ellas también morían, como por ejemplo Friendster o myspace.


El tema de los moviles tambien es digno de destacar, hace 20 años los telefonos moviles se utilizaban solo para llamar y muchas veces ni eso, se hacia una “llamada perdida” que dependiendo de la situacion podia significar varias cosas, como ya he llegado o si era de hijos a padres un “llamame tu”.
Ahora los moviles se usan menos para llamar pero mas para la comunicación digital, sobre todo whatsapp, siendo la aplicación mas utilizada en españa.
Pero volvamos al tema principal, antes la unica manera de conocer gente era mediante el trato personal, habia que hablar con la persona y eso podia ser el comienzo de una amistad. Las interacciones se producian en el lugar de trabajo, el gimnasio, o en bares y zonas de ocio, los mas mayores recordarán tambien los recreativos o las plazas llenas de niños jugando.
Ahora todo es digital, cada vez se ven menos niños jugando en la calle, menos balones y menos bicicletas, y un ejemplo se pudo comprobar solo hace unos días, mas concretamente el 25 de diciembre, donde hace 20 años veías gente en la calle estrenando regalos, ahora no había nadie, los chicos solo quieren cosas digitales, consolas, videojuegos, teléfonos móviles y tabletas.
Eso nos lleva otra vez a que si los niños son así, los mayores tambien cambian sus habitos, todo el mundo tiene el movil “a mano”, e Internet es la manera de comunicarnos e informarnos, de interactuar con el entorno, fotos de lo que comemos, de donde vamos y de con quien estamos, etiquetamos todo y comentamos lo que hacen nuestros amigos y conocidos.
Todo esto nos lleva a que cada vez hay menos relaciones personales, incluso entre parejas que estando sentadas juntas se escriben por whatsapp…
Entonces, ¿como se hacen amigos?
Dependiendo de la edad las redes sociales te pueden ayudar, los amigos de tus amigos comentan, tu respondes y puede que surja una conversación, o por el otro lado, si no conoces gente de verdad no puedes añadir a nadie a las redes sociales por lo que no hay manera de empezar a “hablar” aunque sea digitalmente.
Luego está el tema de cuantos amigos tienes y la “calidad” de esas amistades, mucha gente tiene 500 o mas amigos en una red social, pero de verdad los conoces a todos o has hablado con ellos alguna vez.
Entonces descubrimos que una manera de conocer gente puede ser un foro de amistad, donde buscar un tema que te apasione y encontrar gente que también le guste, ese es el punto de partida que necesitamos para conocer gente.

xpath

Partimos del siguiente xml:






  Everyday Italian
  Giada De Laurentiis
  2005
  30.00



  Harry Potter
  J K. Rowling
  2005
  29.99



  XQuery Kick Start
  James McGovern
  Per Bothner
  Kurt Cagle
  James Linn
  Vaidyanathan Nagarajan
  2003
  49.99



  Learning XML
  Erik T. Ray
  2003
  39.95



 

y trabajamos con javascript para utilizar xpath y ver los resultados





Y vemos como resultado:

/bookstore/book/author
Giada De Laurentiis
J K. Rowling
James McGovern
Per Bothner
Kurt Cagle
James Linn
Vaidyanathan Nagarajan
Erik T. Ray

//title
Everyday Italian
Harry Potter
XQuery Kick Start
Learning XML

//book/author[1]
Giada De Laurentiis
J K. Rowling
James McGovern
Erik T. Ray

//book[@category="web"]/title
XQuery Kick Start
Learning XML

Se puede interactuar y probar desde la url: aquí

Añadir contador de caracteres restantes a caja de texto

La idea es teniendo una caja de texto o un elemento input añadir un contador de los caracteres que faltan y que se vaya actualizando a medida que escribimos.


para ello utilizamos JQuery y la siguiente libreria:

(function($) {
'use strict';

$.fn.countChar = function() {

return this.each(function(i, element) {
$(element).keyup(function updateCharCounter() {

var $me = $(this);
var maxLength = parseInt($me.attr('maxlength'), 10);
var charCount = $me.val().length;
var nombrecajalimite=$me.prop('id')+"_limit";
var cajalimite = $('#'+nombrecajalimite);

cajalimite.text('' + maxLength + '/' + (maxLength - charCount));
});

var $me = $(this),
maxLength = parseInt($me.attr('maxlength'), 10),
charCount = $me.val().length;
var nombrecajalimite=$me.prop('id')+"_limit";
var cajalimite = $('#'+nombrecajalimite);
if (cajalimite){
$me.after('

'); } cajalimite = $('#'+nombrecajalimite); cajalimite.text('' + maxLength + '/' + (maxLength - charCount)); }); }; $( "" ).appendTo( "head" ) }(jQuery));

Con esto lo único que tenemos que hacer es añadir una clase a nuestra caja de texto:

Y añadir al final del documento la linea que lo enlaza:


Generar un zip de backup del servidor FTP

basandome en el código
he modificado la clase para añadirle seguridad (*):

Para ello partimos de una estructura de servidor:

Donde colocamos el fichero zip.php en el raiz

Dentro del fichero configuramos la ruta donde se van a guardar los archivos y las exclusiones que queremos hacer, en este caso los directorios dir2 y dir4 y el propio fichero de generar el zip.

Una vez que invocamos el fichero desde navegador


obtenemos un zip como:


\n";
		flush();
		ob_flush();
	}
	function secured($nombre,$directorio){
		return str_replace($directorio."/backup",$directorio."/secured_backup",$nombre);
	}
	
	//configuracion
	ini_set('max_execution_time', 5000);
	$maxFilePerArchive = 20000;
	$directorio="zipBk";
	$debug=false;
	//directorios y ficheros que no quieres que se añadan al archivo
	$excludes=array("dir2","dir4","zip.php");
	
	
	//parametros recibidos
	if (isset($_REQUEST['pass'])){
		$password=$_REQUEST['pass'];
	}else{
		$password="";
	}
	if (isset($_REQUEST['delete'])){
		$delete=true;
	}else{
		$delete=false;
	}
	if (isset($_REQUEST['ver'])){
		$ver=true;
	}else{
		$ver=false;
	}
	if (isset($_REQUEST['dias'])){
		$dias=$_REQUEST['dias'];
	}else{
		$dias=2;
	}
	if (isset($_REQUEST['help'])){
		show("Puedes pasar los parametros
pass Para poner password al zip
ver Para ver los archivos que son, pero sin crear el zip
delete Para borrar los archivos zip anteriores, se puede pasar un parametro dias ( indicando el numero de dias de margen para borrar )
"); die; } // increase script timeout value if ($directorio!="" && $directorio!="." && !file_exists($directorio)) { mkdir($directorio, 0777, true); if($debug){show("Se ha creado el directorio $directorio porque no existia");} } if ($delete){ show("Borramos los archivos anteriores a 2 dias"); $ficheros=0; $borrados=0; $ahora=time(); foreach (glob($directorio."/*.zip") as $file) { if (is_file($file)){ $ficheros++; if ($ahora - filemtime($file) >= 60*60*24*$dias){ // 1 days $borrados++; echo $file; unlink($file); } echo "
"; } } show("Hemos borrado $borrados archivos");die; } $numFiles = 0; $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("./")); foreach ($iterator as $key=>$value){ $key=substr($key,2,strlen($key)-1); if (! preg_match('/'.$directorio.'\/backup_'.'/', $key) && !preg_match('/'.$directorio.'\/secured_backup_'.'/', $key)){ if (!(substr($key,-2)==".." || substr($key,-1)==".")){ if ($excludes){ $puede=true; foreach ($excludes as $exclude) { if (preg_match('/^'.$exclude.'/', $key)) { $puede = false; } } }else{ $puede=true; } if ($puede){ $numFiles += 1; if ($ver){ show("Se insertara el archivo $key"); } } } } } show( "Comprimiremos $numFiles archivos" ); if (!$ver){ $date = getdate(); $enlaces=array(); $splitNum = 0; $archive = $directorio."/backup_" . $date[0]; $currentArchive = $archive . "_" . $splitNum . ".zip"; $enlaces[]=$currentArchive; $zip = new ZipArchive(); if ($zip->open($currentArchive, ZIPARCHIVE::CREATE) !== TRUE) { die ("No se puede abrir el archivo"); } $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("./")); $numFiles = 0; $counter = 0; foreach ($iterator as $key=>$value){ $counter += 1; if ($counter >= $maxFilePerArchive) { $zip->close(); if ($password!=""){ try{ system('zip -P '.$password.' '.secured($currentArchive).' '.$currentArchive); unlink($currentArchive); }catch(Exception $ex){ } } $currentArchive = $archive . "_" . $splitNum++ . ".zip"; $enlaces[]=$currentArchive; show( "Limite de ficheros: partimos el archivo, Nuevo archivo es $currentArchive" ); $zip = new ZipArchive(); if ($zip->open($currentArchive, ZIPARCHIVE::CREATE) !== TRUE) { die ("No se puede crear el archivo"); } $counter = 0; } $key=substr($key,2,strlen($key)-1); if (! preg_match('/'.$directorio.'\/backup_'.'/', $key) && !preg_match('/'.$directorio.'\/secured_backup_'.'/', $key)){ if (substr($key,-2)==".." || substr($key,-1)=="."){ if ($debug){show( "Excluimos $key" );} }else{ if ($excludes){ $puede=true; foreach ($excludes as $exclude) { if (preg_match('/^'.$exclude.'/', $key)) { $puede = false; } } }else{ $puede=true; } if ($puede){ $zip->addFile(realpath($key), $key) or die ("ERROR: No se puede añadir el fichero: $key"); $numFiles += 1; if ($debug){show( "Añadimos $key" );} } } } else { if($debug){show( "No se comprime el archivo,por ser una copia previa-> $key" );} } } // close and save archive $zip->addFromString("LEEME_".time().".txt", "#1 Fichero generado automaticamenta\nPor un proceso para realizar backup de todo el FTP. "); $zip->close(); if ($password!=""){ try{ system('zip -P '.$password.' '.secured($currentArchive).' '.$currentArchive); unlink($currentArchive); }catch(Exception $ex){ } } if ($password=="" ){ show( "El fichero no tiene clave, llama al script pasando el parametro ?pass=xxxx para mayor seguridad" ); } if ($password!=""){$enlaces=secured($enlaces);} echo "
"; if($enlaces){ foreach($enlaces as $enlace){ if (file_exists($enlace)){ echo "".$enlace."
"; }else{ echo "No se pudo generar el fichero $enlace
"; } } } } ?>

(*) Como la clase ZipArchive de php no soporta clave, se genera un segundo zip mediante llamada al sistema operativo que si que pone contraseña al original y lo borra.

Nociones de economia

Llevo unos días con ganas de aprender algo de economía con la intención de invertir.

Por lo que he leido términos totalmente desconocidos para mi como pueden ser commodities, forwards, los swaps, las OTC, tipos de derivados financieros o los CFDs entre otros.

Entonces esto no parece un tema sencillo, por lo que vamos a intentar ir por partes:

Macroeconomía vs. Microeconomía.

La Macroeconomía estudia el funcionamiento económico a gran escala, así como la repercusión de las políticas económicas en un país, por ejemplo. Se ocupa de analizar:

– La evolución en el corto plazo de la producción, del empleo y de los precios, es decir, de los ciclos económicos.

– La evolución en el largo plazo de la producción y del nivel de vida, es decir, del crecimiento económico.

La Microeconomía estudia el comportamiento de las unidades económicas individuales: individuos, familias, empresas y los mercados en los que operan. Analiza:

– La formación de los precios a partir del cruce entre Oferta y Demanda.

– La asignación de los recursos escasos entre finalidades alternativas.

Hay varias premisas que tenemos que tener clara desde el comienzo:
– Toda inversión tiene un riesgo ( que nadie intente venderte un producto con riesgo 0 )
– Cuanto menor es el riesgo menor será la rentabilidad, o visto de otra forma, cuanto mayor sea el riesgo, mayor tiene a ser su beneficio, aunque también la posibilidad de perder mucho o todo.

Cuando hablamos de riesgo tenemos que ser conscientes de que se puede perder una parte , todo y con algunos productos se puede perder mas de lo invertido.

Otro de los puntos a tener en cuenta es el tiempo que vas a tener la inversión bloqueada, con la imposibilidad de utilizar ese capital. Por lo que necesitas un remanente de dinero con el que no puedes contar en el tiempo que vas a invertir.

Productos de bajo riesgo
Aquí se incluyen los depósitos y las cuentas bancarias de plazo fijo, que a dia de hoy tienen unos intereses muy bajos, por ejemplo ( y según esta web), el valor mas alto es 2% .

Con esto la ganancia que se consigue es bastante baja si tenemos en cuenta que el coste de la vida crece mientras tenemos el dinero bloqueado.

Otro de los productos es la deuda pública, que en el momento de escribir esto tiene valores incluso negativos (web), por lo que no solo no ganamos dinero, sino que nos cuesta.

Productos de alto riesgo
Comprar deuda privada, es el equivalente al punto anterior, pero cambiando la administración por una empresa. Esto tiene un riesgo mayor, pues la empresa puede quebrar y al final quedarnos sin el dinero. Pero también es posible ganar mas dinero si al final todo sale bien.

Otro de los productos que podemos encontrar como de alto riesgo son las acciones. Que son participaciones del capital de una empresa. Si compramos acciones al final lo que obtenemos es una pequeña ( en algunos casos minúscula) parte de la empresa. En este punto podemos hacer referencia a la bolsa y ver unos de los indicadores principales ( que no el único) que es el IBEX

Uno de los ejemplos que mas me gustan es el de las acciones de amazon:

Donde en el año 1997 las acciones valían 1,5 dolares, para pasar en el año 2007 a cerrar con un valor de 97, que podríamos decir que es muy grande, pero es que si lo comparamos con el valor de 2017, donde han pasado la barrera de los 1000 dolares, es casi irrisorio, pero cuantos de nosotros en el año 1997 podríamos pensar en lo que llegaría a ser….

Como caso contrario podemos mostrar el del banco popular,

Donde la gente que invirtiera en 2008 ha visto como sus acciones han pasado de 25 a 0, por lo que han perdido todo su dinero.

Raiola manda y no el panda

Esta mañana repasando los rss de las distintas web que sigo me ha llamado la atención que en varias paginas hablaban de raiola manda y no el panda, pero ¿ Qué es raiola manda y no el panda?

Pues básicamente un concurso SEO organizado por David Ayala y Deam Romero.
Podeis encontrar el enlace aqui

Pero eso tampoco cuenta nada, por lo que os explico un poco mas.

Todo empezó aproximadamente hace un mes, David & Dean, presentaron mediante un vídeo hace aproximadamente un mes, concretamente el 8 de mayo, lo que iba a acontecer durante el mes de junio, este gran concurso SEO al que pusieron el nombre raiola manda y no panda, y en el que ponían todos sus esfuerzos para que todos los SEOs pudiésemos ponernos a prueba, y lo hacían mediante el siguiente vídeo:

Aquí ya nos dejaron con las ganas a todos, y estábamos deseando que llegará el 1 de junio para empezar a enfrentarnos al concurso SEO de los 5.000. ¡ahí es nada!

Actualmente el concurso lo ganara quien tenga más autoridad, es decir si hoy busco en Google La Raiola manda y no el panda obviamente van a salir sitios que tienen mucho tiempo online y por ende con autoridad, por lo que es complicado que un dominio nuevo pueda hacerles frente.

Es súper interesante como se puede sacar mucho provecho de estos concursos, una de las fuentes de más valor son las oportunidades de en laces que podemos conseguir con el concurso de La Raiola manda y no el panda muchos usuarios sacan esos enlaces “escondidillos” permitiendo que pueda hacerme de una base de datos nueva de sitios donde dejar enlaces para futuros proyectos.

Por qué quieren dar 5000 euros a un ganador

Es fácil. Los packs SEO han dañado el sector y cada vez vemos más anuncios en adwords anunciando top 1 en keywords sin competencia como hoteles, etc.. por sólo 50 euros. Y esto ha hecho mucho daño.

Los SEO que antes cobraban 500 euros por una campaña SEO (al mes), han acabado comprando en Primark por culpa de este nuevo tipo de SEOs. Los SEO destroyers les llaman.

Debido a esta cantidad de bajada en los presupuestos, la compañia Raiola ha decidido donar 5000 euros al sector SEO para que alguien pueda irse de vacaciones este año.

Por otro lado el sector del SEM se ha quejado de la iniciativa. “Nunca hacéis un concurso para nosotros, estamos hasta los huevos y nos posicionamos más rápido” dicen…

¿Estamos ante la próxima guerra de sectores? ¿El Taxi y Cabify/Uber pasarán a un segundo plano? Si los SEO y los SEM quieren, sí. Sin duda.

Y el panda que tiene que ver en esto
El panda ha sido usado como parte de la campaña para causar ternura y facilitar que la gente caiga y participe. El panda siempre ha sido un animal adorable hasta que Google lo uso para nombrar a su algoritmo y desde entonces la gente le tiene manía. Las búsquedas en Youtube de videos sobre panda han bajado, les han cambiado el bambú por cebollinos y ya no saben que hacer con su vida. Están tristes y cabreados.