¿Que es un Gravatar?



Un Gravatar es una imagen vinculada a tu dirección de correo, y este sirve para cuando publicamos un comentario en un blog tu comentario se le adjunte una imagen representativa de vos. Digamos que es como parte de tu firma digital y puede ser utilizado en blog o cualquier sitio que soporte Gravatar!.
Para poder utilizar este servicio es muy fácil, entra a la página de Gravatar, regístrate y sube una imagen y listo!

Si lo que quieres es implementar el servicio de Gravatar a tu blog de WordPress simplemente inserta esta linea dentro del foreach de comments.php

  1. <? if(function_exists('get_avatar')) { echo get_avatar($comment, '50'); } ?>

O también si tienes un sitio que no es un blog pero si tiene algún modulo de comentarios y es en PHP puedes utilizar el servicio de la siguiente manera:

  1. <?
  2. $email = $comment->comment_author_email;
  3. $default = ""; // link to your default avatar
  4. $size = 62; // size in pixels squared
  5. $grav_url = "http://www.gravatar.com/avatar.php?gravatar_id=
  6. " . md5($email) . "&default=" . urlencode($default) . "&size=" . $size;
  7. ?>
  8. <img src="<?=$grav_url ?>" height="<?=$size ?>" width="<?=$size ?>" alt="User Gravatar" />

Formulario Whois para multiples dominios

En el post anterior publique un SWF para consultar dominios .com.ar y dado a las consultas por uno que consulte otros dominios acá les dejo esta nueva versión para múltiples dominios (com.ar, net, com, tv, org, info y ws) más un formulario de registro si es que el cliente quiere encargarlo.

Se requiere php, Flash9

ActionScript
< view plain text >
  1. String.prototype.findstring = function(string) {
  2. if (this.indexOf(string) != -1) {
  3. resultado_mc.gotoAndStop(3);
  4. return true;
  5. } else {
  6. resultado_mc.gotoAndStop(2);
  7. return false;
  8. }
  9. };
  10. //
  11. dominio_txt.restrict = "a-z 0-9^.@";
  12. var whoisAr:String = "whois.php";
  13. var whoisAll:String = "whoisphp/example.php";
  14. //aca indicamos el html o lo que sea donde este formulario para registrar el dominio
  15. var urlFormDisponible:String = "formulario-contratar.php";
  16. var resultado:String = "";
  17. var Dominios:Array = new Array();
  18. Dominios.push(".com.ar",".com",".net",".org",".info",".ws",".tv",".biz");
  19. var dominioSlect:String = ".com.ar";
  20. resultado_txt.html = true;
  21. //
  22. function comprobar(nombre) {
  23. resultado_txt.text = "";
  24. loading_mc._visible = true;
  25. resultado_mc._visible = false;
  26. //
  27. var my_lv:LoadVars = new LoadVars();
  28. if (dominioSlect != ".com.ar") {
  29. my_lv.query = nombre+dominioSlect;
  30. my_lv.sendAndLoad(whoisAll,my_lv,"GET");
  31. my_lv.onLoad = function() {
  32. resultado = unescape(my_lv.toString());
  33. if (_root.resultado.findstring("No match for") || _root.resultado.findstring("Not found") || _root.resultado.findstring("NOT FOUND")) {
  34. resultado_txt.htmlText = "<strong><span style="color: #006600;">Nombre DISPONIBLE! Si quieres contrar este nombre, hace <span style="text-decoration: underline;"><a href="&quot;+urlFormDisponible+&quot;?plan=6&amp;dominio=&quot;+dominio_txt.text+dominioSlect+&quot;">clic AQUI!!!</a></span></span></strong>";
  35. } else {
  36. resultado_txt.htmlText = "<strong><span style="color: #660000;">Nombre NO DISPONIBLE! Intenta con otro nombre o otro tipo de dominio.</span></strong>";
  37. }
  38. comprobar_btn.enabled = true;
  39. loading_mc._visible = false;
  40. resultado_mc._visible = true;
  41. };
  42. } else {
  43. my_lv.nombre = nombre;
  44. my_lv.sendAndLoad(whoisAr,my_lv,"GET");
  45. my_lv.onLoad = function() {
  46. resultado = unescape(my_lv.toString());
  47. if (_root.resultado.findstring("disponible")) {
  48. resultado_txt.htmlText = "<strong><span style="color: #006600;">Nombre DISPONIBLE! Si quieres contrar este nombre, hace <span style="text-decoration: underline;"><a href="&quot;+urlFormDisponible+&quot;?plan=6&amp;dominio=&quot;+dominio_txt.text+dominioSlect+&quot;">clic AQUI!!!</a></span></span></strong>";
  49. } else {
  50. resultado_txt.htmlText = "<strong><span style="color: #660000;">Nombre NO DISPONIBLE! Intenta con otro nombre o otro tipo de dominio.</span></strong>";
  51. }
  52. comprobar_btn.enabled = true;
  53. loading_mc._visible = false;
  54. resultado_mc._visible = true;
  55. };
  56. }
  57. }
  58. //
  59. comprobar_btn.onRelease = function() {
  60. if (dominio_txt.text != "") {
  61. this.enabled = false;
  62. comprobar(dominio_txt.text);
  63. } else {
  64. resultado_txt.htmlText = "<strong><span style="color: #ff0000;">Introduce un nombre a buscar...</span></strong>";
  65. resultado_mc.gotoAndStop(1);
  66. }
  67. };
  68. loading_mc._visible = false;
  69. //
  70. for (i=0; i
  71. combo.addItem({data:Dominios[i], label:Dominios[i]});
  72. }
  73. var cbListener:Object = new Object();
  74. cbListener.change = function(evt_obj:Object):Void  {
  75. var currentlySelected:Object = evt_obj.target.selectedItem;
  76. dominioSlect = currentlySelected.data;
  77. };
  78. combo.addEventListener("change",cbListener);

Los archivos fuentes, xhtml del formulario de registro y PHP los tienen todos disponibles en los files para descargar, recuerden de subir todo a su servidor para probarlo y en el formulario indicar la casilla de destino del mismo.

Hacer formulario Whois para dominios .com.ar

Bueno mirando y mirando no encontré nada, como saben mi herramienta preferida es flash y como esto lo necesitaba de urgencia para un trabajo que estoy armando dio como resultado en unas horitas un Whois para saber la disponibilidad de nombres de dominios .com.ar.
Bueno se los dejo porque vi muchas consultas sobre el tema, espero que sirva!

ActionScript
< view plain text >
  1. //simple proto para buscar una cadena
  2. String.prototype.findstring = function(string) {
  3. if (this.indexOf(string) != -1) {
  4. return true;
  5. } else {
  6. return false;
  7. }
  8. };
  9. //aca si queremos definir un dominio donde esta nuestro swf
  10. var dominio:String = "";
  11. //el php que hace la consulta
  12. var file:String = "whois.php";
  13. //almaceno el resultado
  14. var resultado:String = "";
  15. //compruebo si esta disponible
  16. function comprobar(nombre) {
  17. resultado_txt.text = "";
  18. loading_mc._visible = true;
  19. //
  20. var my_lv:LoadVars = new LoadVars();
  21. my_lv.nombre = nombre;
  22. my_lv.sendAndLoad(dominio+file,my_lv,"GET");
  23. my_lv.onLoad = function() {
  24. resultado = unescape(my_lv.toString());
  25. if (_root.resultado.findstring("disponible")) {
  26. resultado_txt.text = "&lt; -- SI esta disponible!";
  27. } else {
  28. resultado_txt.text = "&lt;-- NO disponible!";
  29. }
  30. comprobar_btn.enabled = true;
  31. loading_mc._visible = false;
  32. };
  33. }
  34. //accion del boton
  35. comprobar_btn.onRelease = function() {
  36. if (dominio_txt.text != "") {
  37. this.enabled = false;
  38. comprobar(dominio_txt.text);
  39. } else {
  40. resultado_txt.text = "&lt;--indica un dominio";
  41. }
  42. };
  43. loading_mc._visible = false;

Tambien para esto se utiliza un php que esta incluido en los files para descargar

Incluir videos de Youtube en tu swf, descagar video youtube con flash, lista personalizada de videos youtube en flash

(08-10-2009) NOTICIA!: Nuevamente el problema de que no se veian los videos ya esta solucionado! descarguen los nuevos files ;)

Navegando por la pagina de unijimpe me encontré con un tuto en php para descargar video de youtube simplemente indicando el valor de id del video, me pareció una excelente idea más si dicha idea podíamos aprovecharla en flash para crear un reproductor con nuestra propia lista de videos y un reproductor armado por nosotros mismos.

reproductor.jpg

Bueno ante que todo se agradece a unijimpe por el php que dio origen a todo el AS que desarrolle.

Es muy simple de utilizar, para flash simplemente utilizamos la clase NetStream y para indicar los videos que deseamos, construimos un archivo de tipo xml para indicar la lista de videos de youtube a reproducir. Con la posibilidad de también cargar un titulo y pequeña descripción del video.

En la estructura del xml, el atributo id=”” dentro de las comillas debe ir el id de video que vemos en youtube, en la siguiente imagen se resalta lo que deben copiar y pegar.
Puede pasar que la url sea así: http://youtube.com/watch?v=NyoCQ9WA0PY&feature=related en ese caso el id es el la parte resaltada en bold http://youtube.com/watch?v=NyoCQ9WA0PY&feature=related

id.jpg

Entre las etiquetas CDATA indicamos la descripción del video como así en el atributo titulo el valor o cadena de texto para dicho título.

El xml utilizado:

  1. <!&#91;CDATA&#91;Presentación equipo subaru rally 2007 para el campeonato del mundo 2008&#93;&#93;>
  2. </video>
  3. <video id="GF4qad2sj00" titulo="Capusotto">
  4. <!&#91;CDATA&#91;Me encanta este video!&#93;&#93;>
  5. </video>
  6. <video id="6qEcX01WrNk" titulo="Previa de Soda en Cba">
  7. <!&#91;CDATA&#91;Se presento soda y fue toda una fiesta, impresionante!&#93;&#93;>
  8. </video>
  9. <video id="do1dAX-IVTE" titulo="El bananero - Harry Potter">
  10. <!&#91;CDATA&#91;Aca un video para morirse de risa del amigo elbananero&#93;&#93;>
  11. </video>
  12. <video id="qAWFk63Lrmw" titulo="Battlefield 2142 U2">
  13. <!&#91;CDATA&#91;Este un video que lo puse porque si nomas no tenia ganas de buscar ni de escribir&#93;&#93;>

Actionscript utilizado para el reproductor:

ActionScript
< view plain text >
  1. //Dominio donde esta alojado nuestro php
  2. var dominio:String = "";
  3. //nuestro php propiamente dicho
  4. var FilePHP:String = "phpyoutube.php";
  5. //nuestro xml con la lista de videos
  6. var FileXML:String = "videos.xml";
  7. //el valor de id del video en youtube
  8. var id:String = "";
  9. //
  10. var contador:Number = 0;
  11. //
  12. var miXML:XML = new XML();
  13. miXML.ignoreWhite = true;
  14. //
  15. var ListVideos:Array = new Array();
  16. miXML.onLoad = function(ok) {
  17. if (ok) {
  18. ListVideos = this.firstChild.childNodes;
  19. cantVideos_txt.text = "total videos: "+String(ListVideos.length);
  20. id = ListVideos[0].attributes.id;
  21. cargarVideo();
  22. loadDtaVdo();
  23. //
  24. } else {
  25. }
  26. };
  27. miXML.load(dominio+FileXML);
  28. //aca recibimos el resultado del php
  29. var result_lv:LoadVars = new LoadVars();
  30. result_lv.onLoad = function(success:Boolean) {
  31. if (success) {
  32. /*********************************************/
  33. //desde aqui el cambio realizado para el 08-10-2009
  34. var varsTemp:LoadVars = new LoadVars()
  35. varsTemp.decode(String(this))
  36. var urlText:String = varsTemp.toString()
  37. urlText = urlText.substr(35,urlText.length)
  38. urlText = urlText.split('%2C').join(',');
  39. urlText = urlText.split('%2E').join('.');
  40. urlText = urlText.split('%2F').join('/');
  41. urlText = urlText.split('%3F').join('?');
  42. urlText = urlText.split('%3D').join('=');
  43. urlText = urlText.split('%3A').join(':');
  44. my_ns.play(urlText);
  45. //hasta aqui el cambio realizado para el 08-10-2009
  46.  
  47. } else {
  48. trace("Error connecting to server.");
  49. }
  50. };
  51. //enviamos los datos al php
  52. var send_lv:LoadVars = new LoadVars();
  53. function cargarVideo() {
  54. status_txt._visible = true;
  55. status_txt.text = "cargando...";
  56. send_lv.item = id;
  57. send_lv.type = 0;
  58. send_lv.sendAndLoad(dominio+FilePHP,result_lv,"GET");
  59. }
  60. //el encargado de cargar y reproducir el video
  61. var my_video:Video;
  62. var my_nc:NetConnection = new NetConnection();
  63. my_nc.connect(null);
  64. var my_ns:NetStream = new NetStream(my_nc);
  65. my_video.attachVideo(my_ns);
  66. //suavizado del video
  67. my_video.smoothing = true;
  68. //duracion del buffer
  69. my_ns.setBufferTime(4);
  70. //duracion del video
  71. my_ns.onMetaData = function(infoObject:Object) {
  72. //trace(Math.floor(infoObject.duration));
  73. };
  74. //enviamos datos de que esta sucediendo
  75. my_ns.onStatus = function(infoObject:Object) {
  76. if (infoObject.code == "NetStream.Buffer.Full") {
  77. status_txt._visible = false;
  78. }
  79. if (infoObject.code == "NetStream.Play.Start") {
  80. status_txt._visible = true;
  81. buffer();
  82. }
  83. if (infoObject.code == "NetStream.Play.Stop") {
  84. status_txt.text = "Video finalizado!";
  85. }
  86. if (infoObject.code == "NetStream.Play.StreamNotFound") {
  87. status_txt.text = "No se encontro el video!!!";
  88. }
  89. };
  90. //con esto sabemos si ya esta el buffer listo!
  91. function buffer() {
  92. this.onEnterFrame = function() {
  93. var porcentaje:Number = Math.min(Math.round(my_ns.bufferLength/my_ns.bufferTime*100), 100);
  94. status_txt.text = "Buffer:"+porcentaje+"%";
  95. if (porcentaje == 100) {
  96. delete this.onEnterFrame;
  97. }
  98. };
  99. }
  100. //un efectito fade
  101. MovieClip.prototype.fade = function(direccion:String, velocidad:Number) {
  102. if (direccion == "in") {
  103. var efecto = mx.transitions.easing.Regular.easeIn;
  104. this.mi_Tween = new mx.transitions.Tween(this, '_alpha', efecto, this._alpha, 100, velocidad, true);
  105. } else {
  106. var efecto = mx.transitions.easing.Regular.easeOut;
  107. this.mi_Tween = new mx.transitions.Tween(this, '_alpha', efecto, this._alpha, 0, velocidad, true);
  108. }
  109. };
  110. //creamos la funcionalidad de los botones y cargamos los datos de la info
  111. function loadDtaVdo() {
  112. for (var i = 0; i&lt;2; i++) {
  113. this["video"+i].fdoFicha_mc._alpha = 0;
  114. this["video"+i]._alpha = 0;
  115. this["video"+i].fade("in",0.5);
  116. var temp = this["video"+i].fdoFicha_mc;
  117. this["video"+i].reproducir_mc.fondo = temp;
  118. this["video"+i].mini_mc.loadMovie("http://img.youtube.com/vi/"+ListVideos[contador].attributes.id+"/1.jpg");
  119. this["video"+i].titulo_txt.text = ListVideos[contador].attributes.titulo;
  120. this["video"+i].descripcion_txt.text = ListVideos[contador].firstChild;
  121. //
  122. this["video"+i].reproducir_mc.id = ListVideos[contador].attributes.id;
  123. this["video"+i].reproducir_mc.onRelease = function() {
  124. video0.fdoFicha_mc._alpha = 0;
  125. video1.fdoFicha_mc._alpha = 0;
  126. this.fondo.fade("in",0.5);
  127. id = this.id;
  128. cargarVideo();
  129. //
  130. };
  131. if (this["video"+i].reproducir_mc.id == id) {
  132. this["video"+i].fdoFicha_mc.fade("in",0.5);
  133. }
  134. if (contador == ListVideos.length-1) {
  135. contador = 0;
  136. } else {
  137. contador++;
  138. }
  139. }
  140. }
  141. //accion boton siguiente
  142. siguiente_btn.onRelease = function() {
  143. loadDtaVdo();
  144. };
  145. //

Configuración de mi php.ini

Muchas veces nos vemos complicados con cosas que no nos funciona en nuestro Server (localhost), o nuestro Server Web y no sabemos como pedir un cambio o como solucionar el problema. En particular me encontré trabajando con una clase de AS de flash la cual no me dejaba subir más de 2Mb a mi localhost por el método POST. Buscando y buscando encontré este artículo http://www.hacktimes.com/?q=node/22 con las cosas básicas y configuraciones a tener en cuenta en nuestro Apache. Espero que les sea tan útil como a mí.