miércoles, 31 de mayo de 2023

Limpiar un Wordpress hackeado

 Check list para limpiar instancias de Wordpress que han sido hackeadas, y para prevenir hackeos. Para técnicos de sistemas con acceso SSH al servidor.

  1. Hay que estar atentos a las fechas de modificacion de los archivos. El hackeo puede ser con la inyección de ficheros nuevos, con nombres raros y codigo ofuscado, pero tambien puede hacerse modificando ficheros del nucleo de Wordpress. Ahí la pista la dará la fecha de modificación de los ficheros. ls -latr permite listar los ficheros de un directorio ordenados por fechas.
  2. El comando "find . -type f -mtime -1 -ls" lista todos los ficheros que han cambiado en el último dia.
  3. Los hackers tratan de pasar inadvertidos. Por este motivo, ponen codigo PHP en directorios donde no debería estar y donde no vas a mirar: /log/, /css/, /js/.
  4. Atentos a los nombres de los ficheros. Tratan de pasar inadvertidos con extensiones .js.php, o .css.php.
  5. Los dos ficheros más vulnerables al hackeo son el .htaccess del raiz de la web (ahí se encargan de dar permisos a la ejecución de archivos de cualquier tipo. pl, php, etc) y el index.php ,que siempre se ejecuta y por tanto ahí inyectan código de propagación para replicar y crear ficheros que te encargas de borrar.
  6. En el .htaccess tienes que bloquear la ejecución del xmlrpc.php. Es un foco de vulnerabiilidad.
  7. Tienes que tener instalado el Wordfence y hacer escaneos periodicos de los ficheros.
  8. A veces algunos archivos no se detectan. Si se tiene acceso a la consola de Linux, poner el siguiente comando:
find . -type f -exec grep -H "eval" {} \; | less

Y buscar en nano la palabra "eval", suelen indentarlo muchisimo para que no se vea.

sábado, 1 de junio de 2019

Base de datos de aeropuertos del mundo con coordenadas geográficas - Worldwide airports database with geodetic coordinates

Este blog lo utilizo como bloc de notas en el que apunto una serie de tareas relacionadas con la creación de blogs, desde una perspectiva muy técnica, para programadores (development for bloggers).

Hasta ahora, la gran mayoría de las entradas trataban sobre posicionamiento en buscadores (lo que todo el mundo llama SEO, search engine optimization), sobre cómo personalizar las plantillas de Blogger (blogspot.com), o sobre algunas técnicas de programación avanzada para personalizar tus blogs.

Actualización a 2 de Junio de 2019.

Han pasado ya 2 años desde que lancé el proyecto de buscador especializado en mapas, y me he lanzado con nuevos proyectos. Si el trabajo que hice de recopilar las coordenadas de aeropuertos del mundo te ha servido de ayuda, te agradecería que visites estas webs y me des tu opinión en los comentarios.

Guía de Compra de Regalos Originales y Divertidos.

Parece un cambio de inquietudes bastante radical ¡Pasa de hacer un buscador de mapas, y de trabajar con coordenadas, en hacer una guía de compras de regalos originales y divertidos!

Pues sí, en Internet hay que ir cambiando constantemente y, seamos sinceros, la gente acude a Internet a buscar todo tipo de información

Me dí cuenta de que en los regalos divertidos y de broma había un nicho sin explotar, cuando el amigo invisible del año pasado me hinché de buscar ideas de regalos divertidos, y  no encontraba nada más que generalidades y los típicos blogs de rankings, con 6, 7 u 8 ideas sueltas.

Así que, viendo que tenía una necesidad sin resolver, me he liado la manta a la cabeza y he lanzado el proyecto https://regalosdebroma10.com/ 

La idea es recopilar ideas divertidas y originales para hacer regalos, pero clasificadas para la ocasión: amigo invisible, jubilación de un compañero, primera paternidad o maternidad de una amiga, compañero que cambia de trabajo, carnaval, fiesta de fin de año, despedidas de soltero, despedidas de soltera, camisetas para friquis...¡Hay regalos de coña como tazas con la imagen del negro del whatsapp!

Opiniones y reviews de los mejores patinetes y monopatines skate del mercado.

Con los patinetes, me pasó prácticamente lo mismo que con los regalos originales. Quería comprarme un patinete de ruedas grandes, pero hoy en día casi toda la información que vas a encontrar en Internet está referida a patinetes eléctricos.

Yo no quería un patinete eléctrico porque tengo varios compañeros de trabajo que tienen el famosísimo Xiaomi Mijia M365, y aunque el patinete es una pasada, falla lo que en mi opinión es esencial para usarlo para ir al trabajo: su portabilidad y su peso. ¿Es plegable? Sí. ¿Sirve para llevarlo encima en el metro o en el autobus? En mi opinión: no. El patinete eléctrico Xiaomi Mi Scooter pesa 12 kg, y plegado es muy poco compacto. Mis compañeros de trabajo lo usan como si fuera una bicicleta: lo meten en el metro sin plegar, y cuando se bajan de él lo llevan empujándolo.

Así que yo quería comprar un patinete adulto para ciudad, con ruedas grandes y que fuese plegable ¡Pero no eléctrico! Estos patinetes pesan entre 3 y 5 kg. Una pasada. Y como me hinché de buscar, y vi que un patinete urbano no tiene nada que ver con un patinete freestyle (stunt), decidí crear una web para ayudar a la gente que se quiera comprar un patinete:

https://www.depatinetes.com/


La biblia de las superheroinas de los cómics.

Este es, sin dudarlo, mi proyecto más personal. Yo soy amante de los cómics de superheroes desde que prácticamente tengo uso de razón. ¡Y me daban igual los cómics de Marvel que los de DC!

Os podeis figurar que, ahora que estamos en la época dorada de los superheroes en el cine, estoy encantado. Pero salvo en los dos últimos años, en este mundillo siempre había un gran hueco sin cubrir si hablamos de superheroinas de los comics. Y este es el hueco que precisamente pretendo cubrir con mi web que trata única y exclusivamente sobre personajes femeninos de los comics, de Marvel, DC o cualquier otra editorial independiente:




Actualización a 19 de Junio de 2017:
Por un proyecto en el que ando metido, del que pronto voy a hacer su lanzamiento en este mismo blog, en esta entrada voy a liberar un contenido de temática diferente a la que viene siendo habitual: una base de datos de aeropuertos del mundo, con nombres de ciudades y paises en inglés y castellano, incluyendo coordenadas geográficas latitud y longitud

El proyecto al que me refería en este post, del que ya han pasado más de 6 años, es un motor de búsqueda de mapas, www.lookingformaps.com, incluyendo estos mapas de aeropuestos del mundo.
 

Para el proyecto del que hablo necesitaba los códigos IATA de los aeropuertos del mundo. Buscando con Google en la web, lo primero que encontré fue la entrada de la wikipedia con los aeropuertos por código IATA. Pero en vez de aparecer en un único listado, que me permitiese leerlo con un programa de ordenador y parsearlo, los aeropuertos aparecen clasificados por paises y continentes, en páginas distintas, sin coordenadas, y en formato MediaWiki, que es el wiki utilizado por Wikipedia.

Buscando fuentes en lengua inglesa de aeropuertos del mundo, encontré la Global Airport Database, una base de datos constituida por 9300 aeropuertos de todo el mundo, en formato de archivo de texto separado por comas (CSV), y distribuida bajo licencia libre CPL (Common Public License), un tipo de licencia muy parecido a la LGPL, que permite su uso en software privativo.

No obstante, pese a aproximarse bastante a lo que buscaba, esta base de datos adolecía de una serie de limitaciones que me impedían poder utilizarla para el software que estoy desarrollando:
  • Los nombres de ciudades y paises están en inglés. Para explotar esta base de datos, necesitaba tanto nombres en inglés como en castellano
  • Las coordenadas, latitud y longitud, de los aeropuertos están en formato grados, minutos y segundos. Para poder representar esta base de datos en un mapa, a través de cualquiera de las APIs existentes en la nube para la publicación e mapas como Yahoo, Bing o Google, es necesario que estén en formato grado y décimas de grado
  • La altitud sobre el nivel del mar está en piés, y no en metros.
Ante estas limitaciones, y aprovechando que la licencia CPL bajo la que estaba liberado el trabajo original me lo permitía, decidí mejorar esta base de datos con una serie de tratamientos automatizados:
  • Utilizando los servicios web de traducción de Google, Google Translate, y su API Java, añadí los nombres de ciudades y paises en castellano a la base de datos. Es asombroso lo que ha mejorado la calidad de las traducciones de Google Translate. Para muestra un botón: "IVORY COAST" es traducido como "COSTA DE MARFIL".
  • Mediante un cálculo simple, convertí grados, minutos y segundos en grados y partes enteras de grado, y pies en metros
El resultado final se puede descargar según diferentes formatos: CSV, ODS (OpenOffice.org), XLS (Excel) y KML (Google Maps y Google Earth).

Podeis descargar estos archivos de los siguientes enlaces del servicio de discos duros virtuales Mediafire:

Al visualizar la base de datos de aeropuertos del mundo en formato KML con Google Earth, he detectado que algunas coordenadas salen claramente desplazadas, en especial las de los aeropuertos de España. Esto es debido a que en la base de datos original determinados registros tenían el sentido de la longitud (Este u Oeste, East or West) marcado con el valor U (Unknown).

El siguiente tratamiento a aplicar, para conseguir una correcta visualización geográfica de los aeropuertos de esta base de datos, será confrontar las coordenadas de estos aeropuertos con servicios de nomenclator y consulta de coordenadas de nombres geográficos (geonames, Yahoo Places, Google, etc) para tratar de corregir la posición de aquellos aeropuertos que tengan coordenadas incorrectas.





jueves, 14 de febrero de 2019

Dinorank❤️te❤️desplaza❤️y❤️Enlazalia❤️te❤️enlaza

En el mundillo SEO de vez en cuando les gusta medírsela para ver quien la tiene más larga.

Por eso, las verdaderas manos que mueven los hilos, gustan de sacar concursos para SEOs en los que por una miseria de premio, tienen a decenas de SEOs dejándose su tiempo y sus horas (y con ello su dinero) para ganar el prestigio de ser nombrado "el mejor SEO de habla hispana", a cambio de un trabajo de link building y menciones sociales quie no tiene precio.

El último concurso de este tipo lo saca Dean Romero, el tio que hay detrás del blog blogger30.com, un blog muy potente con miles de visitas diarias, y un tío que está encantado de conocerse a sí mismo.

Yo, como paso de concursar, pues this is not my bussiness, he escrito esta entrada para ponerle un link a dos amiguetes:

  • El blog de Gastre, que es un tío muy majo, y posiblemente el mejor relaciones públicas del SEO: Dinorank te desplaza y Enlazalia te enlaza.
  • Una página que Diego, otro hipercrack del SEO, ha hecho aprovechando un dominio expirado que tenía sin utilizar:Dinorank te desplaza y Enlazalia te enlaza.

Ala, ahí va mi enlace, en la única mierda de blog que tenía dedicada a esta temática, y que tengo abandonado desde hace muchísimo tiempo. También le meteré un enlace interno desde la página que tengo mejor posicionada de este blog.

¿Por qué se organiza el concurso de Dinorank te desplaza y Enlazalia te enlaza? 


¿Y por qué lo hace? Para promocionar una nueva pala, que acaba de sacar a la venta, dentro de esta fiebre del oro que se está convirtiendo el SEO y ganar dinero con Internet.

Esta pala, o navaja suiza por la cantidad de cosas que dicen que hace, se llama DinoRank.
Si es buena o no no voy a ser yo quien lo diga, que lo diga el mercado.

Yo ni siquiera soy un SEO, soy simplemente un amateur que aspira que algún día le suene la flauta y que alguno de mis experimentes den el suficiente dinero como para empezar a dedicarme a esto.

Junto con Dean Romero, que aporta su comunidad y poder de convocatoria (ya os digo, miles de visitas diarias de SEOs y de aprendices de SEOs como yo), el concurso lo organiza Enlazalia, una enpresa que vende servicios de link building y que es la que aporta la pasta.

La jugada es una obra maestra del marketing, y de la nueva economía colaborativa basada en tener un montón de gente currando por tí por 4 perras. La cantidad de menciones, enlaces, dominios que le enlacen, y actividad en redes sociales que van a conseguir por LITERALMENTE 4 perras.

Los 2.000 euros que van a dar en premios, si se los hubieran gastado en Adwords o en Facebook Ads, los habrían quemado en un plis plas. No quiero pensar el CPC que tendrán las palabras clave por las que podrían pujar estas dos herramientas:

  • Herramienta SEO.
  • Link Building.
  • Enlaces manuales.
  • Tracking de Posiciones.
  • Keyword Research.
  • Análisis de enlaces.
En fin, que los que organizan esto son unos cracks, y creo que los que participan tontos no son. No solo lo hacen por ego, sino por la fama que te puede dar ganar un concurso así, lo que sin duda se traduciría en nuevos clientes y en enlaces a sus webs personales...

Ahora, que las técnicas black hat que van a utilizar no se si son el mejor reclamo para un cliente. Veréis como a los SEOs serios de este país no participan (o al menos no exponen sus webs personales).





viernes, 30 de diciembre de 2011

Passing values from PHP to javascript

Seen in stackoverflow:



What is the easiest way to encode a PHP string for output to a Javascript variable?

I have a PHP string which includes quotes and newlines. I need the contents of this string to be put into a Javascript variable.

Normally, I would just construct my Javascript in a PHP file, ala:

var myvar = "";


However, this doesn't work when $myVarValue contains quotes or newlines.



Expanding on someone else's answer:



This does require PHP 5.2.0 or greater.

miércoles, 30 de noviembre de 2011

Creating dialogs with jquery-ui

<script type="text/javascript">
$(function(){

var options = {
autoOpen: false,
width: 600,
buttons: {
"Ok": function() {
$(this).dialog("close");
}
}
};
$("#dialog").dialog(options);


// Dialog Link
$('#dialog_link').click(function(){
$('#dialog').dialog('open');
return false;
});

//hover states on the static widgets
$('#dialog_link, ul#icons li').hover(
function() { $(this).addClass('ui-state-hover'); },
function() { $(this).removeClass('ui-state-hover'); }
);

});
</script>

miércoles, 2 de noviembre de 2011

jueves, 20 de octubre de 2011

Removing html tags in a php string

Visto en http://php.net/manual/en/function.strip-tags.php 

strip_tags

(PHP 4, PHP 5)
strip_tagsStrip HTML and PHP tags from a string

reject note Description

string strip_tags ( string $str [, string $allowable_tags ] )
This function tries to return a string with all NUL bytes, HTML and PHP tags stripped from a given str. It uses the same tag stripping state machine as the fgetss() function.

reject note Parameters

str
The input string.
allowable_tags
You can use the optional second parameter to specify tags which should not be stripped.
Note:
HTML comments and PHP tags are also stripped. This is hardcoded and can not be changed with allowable_tags.
Note:
This parameter should not contain whitespace. strip_tags() sees a tag as a case-insensitive string between < and the first whitespace or >. It means that strip_tags(" ", " ") returns an empty string.

reject note Return Values

Returns the stripped string.

reject note Changelog

Version Description
5.0.0 strip_tags() is now binary safe
4.3.0 HTML comments are now always stripped

reject note Examples

Example #1 strip_tags() example
$text 'Test paragraph.
 Other text'
;
echo 
strip_tags($text);
echo 
"\n";
// Allow  and 
echo strip_tags($text'');?>

reject note Notes

Warning
Because strip_tags() does not actually validate the HTML, partial or broken tags can result in the removal of more text/data than expected.
Warning
This function does not modify any attributes on the tags that you allow using allowable_tags, including the style and onmouseover attributes that a mischievous user may abuse when posting text that will be shown to other users.

reject note See Also



stripcslashes> <strcspn
[edit] Last updated: Fri, 14 Oct 2011
 
reject note add a
 note add a note User Contributed Notes strip_tags
dhgouveia at hotmail dot com 10-Oct-2011 11:09
this is just for strip the inside tags

$allow = '
  • ';

    $str = '
    Paragraph
    Bold
    Red

    Header

    '
    ;

    $result = strip_tags($str,$allow);
    $result = clean_inside_tags($result,$allow);

    echo
    '';

    //Clean the inside of the tags
    function clean_inside_tags($txt,$tags){
       
       
    preg_match_all("/<([^>]+)>/i",$tags,$allTags,PREG_PATTERN_ORDER);

        foreach (
    $allTags[1] as $tag){
           
    $txt = preg_replace("/<".$tag."[^>]*>/i","<".$tag.">",$txt);
        }

        return
    $txt;
    }

    ?>

lunes, 10 de octubre de 2011

Setting file name in dynamically generated files wiht HTTP headers

Content-Disposition

The Content-Disposition response-header field has been proposed as a means for the origin server to suggest a default filename if the user requests that the content is saved to a file. This usage is derived from the definition of Content-Disposition in RFC 1806 [35].
content-disposition = "Content-Disposition" ":"
                              disposition-type *( ";" disposition-parm )
        disposition-type = "attachment" | disp-extension-token
        disposition-parm = filename-parm | disp-extension-parm
        filename-parm = "filename" "=" quoted-string
        disp-extension-token = token
        disp-extension-parm = token "=" ( token | quoted-string )
An example is
Content-Disposition: attachment; filename="fname.ext"
The receiving user agent SHOULD NOT respect any directory path information present in the filename-parm parameter, which is the only parameter believed to apply to HTTP implementations at this time. The filename SHOULD be treated as a terminal component only.
If this header is used in a response with the application/octet- stream content-type, the implied suggestion is that the user agent should not display the response, but directly enter a `save response as...' dialog.
See section 15.5 for Content-Disposition security issues.


Content-Disposition

The original MIME specifications only described the structure of mail messages. They did not address the issue of presentation styles. The content-disposition header field was added in RFC 2183 to specify the presentation style. A MIME part can have:
  • an inline content-disposition, which means that it should be automatically displayed when the message is displayed, or
  • an attachment content-disposition, in which case it is not displayed automatically and requires some form of action from the user to open it.
In addition to the presentation style, the content-disposition header also provides fields for specifying the name of the file, the creation date and modification date, which can be used by the reader's mail user agent to store the attachment.
The following example is taken from RFC 2183, where the header is defined
Content-Disposition: attachment; filename=genome.jpeg;
         modification-date="Wed, 12 February 1997 16:29:51 -0500";
The filename may be encoded as defined by RFC 2231.
As of 2010, a good majority of mail user agents do not follow this prescription fully. The widely used Mozilla Thunderbird mail client makes its own decisions about which MIME parts should be automatically displayed, ignoring the content-disposition headers in the messages. It also sends out newly composed messages with inline content-disposition for all MIME parts. Most users are unaware of how to set the content-disposition to attachment.[4] Many mail user agents also send messages with the file name in the name parameter of the content-type header instead of the filename parameter of the content-disposition header. This practice is discouraged.[5]

lunes, 29 de agosto de 2011

301 redirection with wikidot pages

Visto en http://doc.wikidot.com/module:redirect

Redirect
Short Description
Performs a "301" redirect from a page with optional URL mapping

Description

The Redirect module performs a "301 Permanently Moved" redirection, i.e. it tells a web browser to request another web page.

Attributes

attribute required allowed values default description
destination yes page-name or URL none where to redirect?
When the destination attribute is just an alphanumeric string, e.g. "start", the page which contains the Redirect module will automatically forward the browser to the wiki page called "start". If destination is the whole URL address (e.g. "http://slashdot.org"), the browser will be redirected to this external address.

Mapping

If the destination attribute ends with a slash, e.g. destination="start/" or destination="http://www.example.com/", the current URL will be mapped to the destination in the following way. The code for the module would be:
[[module Redirect destination="http://www.example.com/base/"]]
Now if the Redirect module is placed on page http://your-wiki.wikidot.com/redir the following mapping will be performed:
from to
http://your-wiki.wikidot.com/redir http://www.example.com/base/
http://your-wiki.wikidot.com/redir/mapped-path http://www.example.com/base/mapped-path
http://your-wiki.wikidot.com/redir/mapped-path/file1.html http://www.example.com/base/mapped-path/file1.html

Preventing the redirect

If the Redirect module redirected the browser always there would be no way to edit the actual page. The solution is to pass an extra parameter to the module in the URL as follows:
http://your-wiki.wikidot.com/page-with-redirect/noredirect/true
There should be an information box where the module is placed.
Working with the Redirect module might not be very convenient but even of you have to do this you will not configure it every day ;-)



domingo, 28 de agosto de 2011

Use '=' or LIKE to compare strings in SQL?


LIKE and the equality operator have different purposes, they don't do the same thing: = is much faster, whereas LIKE can interpret wildcards. Use = wherever you can and LIKE wherever you must.

SELECT * FROM user WHERE login LIKE 'Test%';
-- Matches
-- TestUser1
-- TestUser2
-- TestU
-- Test
-- etc.

Registros duplicados con SQL

Here's a handy query for finding duplicates in a table. Suppose you want to find all email addresses in a table that exist more than once:

SELECT email,
COUNT(email) AS NumOccurrences
FROM users
GROUP BY email
HAVING ( COUNT(email) > 1 )

You could also use this technique to find rows that occur exactly once:
SELECT email
FROM users
GROUP BY email
HAVING ( COUNT(email) = 1 )

domingo, 19 de junio de 2011

Expandir textos con JQuery y su plugin Expander

Estoy en pleno desarrollo de una web relacionada con el mundo de los mapas y la cartografía. El tema está es que, dentro de una sola página tienen que convivir textos descriptivos, que en algunos casos pueden ser muy grandes, con mapas interactivos, y siempre es deseable que el mapa ocupe un lugar predominante en el diseño final.

Buscando alguna solución para que de los textos descriptivos solo se muestre una parte, pudiéndose leer el resto al pulsar sobre éstos, me he encontrado un magnífico plugin de la librería javascript JQuery: JQueryExpander.

La verdad es que es muy simple de utilizar:

En primer lugar se "importan" las librerías javascript JQuery, y su plugin JQueryExpander (en el ejemplo uso una librería local, también se puede referenciar la librería publicada por los desarrolladores):






Seguidamente, el texto que se quiera hacer "expandible" hay que marcarlo con etiquetas CSS (div, p, etc:


Finalmente, añadimos un script a la cabecera de la página html (header) que ejecute un código de inicialización al cargarse la página, código que manipula los elementos que hemos marcado como expandibles.



sábado, 23 de abril de 2011

Replace All en Javascript

En ocasiones cuando trabajamos con Javascript, es necesario buscar una cadena de texto y sustituirla por otra.

El API de javascript tiene una función, para los objetos de tipo cadena de texto (String) replace, pero ésta solo sustituye la primera ocurrencia que encuentra.

Así, si tenemos el texto "primero;segundo;tercero" (campos separados por ;, típico cuando trabajamos con ficheros en formato CSV), y con javascript queremos sustituir el separador ; por el separador ',', el siguiente código no funcionará:

"primero;segundo;tercero".replace(";",",")

Pues devolverá el siguiente resultado:
"primero,segundo;tercero" (es decir, solo sustituirá la primera ocurrencia).

Podemos conseguir sustituir todas las ocurrencias del texto a cambiar haciendo uso de expresiones regulares, en concreto de la expresión /textoAcambiar/g (el /g le indica al motor de sustitución basado en expresiones regulares que busque todas las ocurrencias).

Si el texto a sustituir está en una variable javascript, el código a emplear sería el siguiente:


var separator = ";";
var re = new RegExp(separator, "g");
var textoNuevo = "primero;segundo;tercero".replace(re, ",");

domingo, 17 de octubre de 2010

Añadir más widgets a la cabecera de la plantilla de Blogger (y II)

En una entrada anterior veíamos cómo podíamos desbloquear la cabecera de la plantilla de Blogger, para poder añadir más widgets aparte de la propia cabecera, con una técnica que no solo vale para la cabecera de la plantilla sino también para cualquier sección.

Decíamos que solo había que localizar la etiqueta que sirve para representar una sección de la plantilla (<section>),y dentro de ésta el atributo maxWidgets, que índica el número máximo de widgets que puede tener esta sección.



No obstante, hay un paso más que no comenté en esa entrada, paso sin el cual desde el menú de Diseño de Blogger (en concreto desde la pestaña elementos de página) no nos aparecerá la opción "Añadir un Gadget" en la sección que habíamos desbloqueado con los pasos mencionados en la entrada anterior.

dev4bloggers_showaddelement

Este paso consiste en modificar el atributo showaddelement de la etiqueta <section> para que tome el valor 'yes', en lugar del valor 'no', como podemos ver en la figura anterior.

English.

In a previous post we saw how we could unlock the head of the Blogger template to add more widgets than their own head , with a technique that not only applies to the head of the staff but also to any section.

We said we only had to locate the label used to represent a section of the template (<section>
), And within this maxwidgets attribute that indicates the maximum number of widgets that can be found.



However, there is one more step that did not mention in that entry, step, without which the menu Blogger Design (specifically from the page elements tab) does not see the option "Add a Gadget" in the section had unlocked with the steps mentioned in the previous entry.

dev4bloggers_showaddelement

This step is to modify the attribute label showaddelement
to take the value 'yes' instead of the value 'no', as seen in the previous figure.

sábado, 18 de septiembre de 2010

Añadir más widgets a la cabecera de la plantilla de Blogger

En ocasiones nos gustaría añadir widgets a la parte superior de la plantilla de Blogger, debajo de la cabecera, pero cuando tratamos de añadir el widget vemos que Blogger no nos deja, que es como si la cabecera estuviese bloqueada.

More than one widget in Blogger Header

En general, este comportamiento se produce no solo con la cabecera (header) de la plantilla de Blogger, sino con el resto de secciones de la plantilla.

Esto es debido a que en el lenguaje de marcado de la plantilla de Blogger, del que si consultáis entradas anteriores veréis que es una implementación de XHTML con extensiones (es decir, HTML conforme a la especificación XML), la etiqueta que sirve para representar una sección de la plantilla (<section>) tiene un atributo maxWidgets, que índica el número máximo de widgets que puede tener esta sección.

maxWidgets attribute in blogger template section

Por defecto, en la mayor parte de las plantillas de Blogger para la sección de la cabecera toma un valor igual a uno. Si queréis incluir más widgets en esta sección, tenéis que modificar este valor con el editor de código fuente de la plantilla de Blogger (no olvidéis marcar el cuadro de selección expandir plantilla de artilugios).

English:

Sometimes we would like to add widgets to the top of the Blogger template, under the header, but when we try to add the widget see that Blogger does not let us, it's as if the header was blocked.

In general, this behavior occurs not only with the header (header) of the Blogger template, but with the other sections of the template.

This is because the markup language of the Blogger template, which if you consult previous entries you will see that XHTML is an implementation of extensions (ie, HTML according to the XML specification), the label used to represent a section of the template (
) maxwidgets has an attribute that indicates the maximum number of widgets that can be found.

By default, most Blogger templates for the header section takes a value equal to one. If you want to include more widgets in this section, you must change this value with the source code editor Blogger template (do not forget to check the selection box Expand Widget Templates.)

viernes, 16 de julio de 2010

Como centrar el título de la cabecera de la plantilla de Blogger dejando la imagen a la izquierda

Retomamos el tema de la personalización avanzada de plantillas de Blogger, que habíamos dejado aparcado últimamente por temas varios (tijeratazo, blog follow, liberación de una base de datos de aeropuertos del mundo).


Ultima actualización 2019: Dinorank te desplaza y enlazalia te enlaza.

En este caso, el tema que vengo a tratar es muy sencillo. Quiero crear un nuevo blog en la plataforma Blogger, y estoy realizando el diseño de su plantilla.

En la cabecera del blog (representado por el css .header de blogger) quiero poner texto y una imágen de fondo. Lo que pasa es que si se utilizan las opciones que blogger te proporciona por defecto para editar la cabecera, no existe forma de controlar la alineación del texto y de la imagen, de tal forma que en muchas ocasiones la imágen no te deja ver el texto, y viceversa. En la siguiente figura podeis ver mejor lo que estoy contando.

Cabecera con título e imágen de fondo que se pisan

Por defecto, con el asistente de configuración de plantillas de Blogger no puedes arregar esto, y hacer que por ejemplo el título de la cabecera se desplace hacia la derecha, y que la imágen se quede en la izquierda de tal forma que no se pisen.

No obstante, esto sí que se puede arreglar con un poco de conocimiento de CSS, HTML y del modelo de estilos de las plantillas de Blogger. En la plantilla de Blogger, existe un estilo CSS para la cabecera denominado Header. Es necesario modificar los subelementos de este estilo (el estilo del texto, que se vuelca con la etiqueta HTML h1, y el de la imágen de fondo, con la etiqueta html image). En la siguiente figura podeis ver cómo he modificado el estilo CSS .Header .h1 ,que es el utilizado para etiquetar el título del blog, mostrado en la cabecera, para que el texto del título se desplace hacia la derecha, mientras que la imágen de fondo de la cabecera se queda en la izquierda.

2010-07-16_1607

El estilo CSS .Header .h1 determina las propiedades de la descripción de la cabecera, que también hemos tenido que modificar. La siguiente figura muestra los cambios aplicados para que la descripción se desplace también hacia la derecha.

2010-07-16_1543

Y el resultado de aplicar estos dos cambios a los estilos .Header .h1 y .Header .description lo podemos ver en la siguiente figura.

2010-07-16_1547

En conclusión, jugando con las propiedades right, top, width y text-align de los estilos CSS de los elementos .Header .h1 y .Header .description de la plantilla de Blogger hemos conseguido el objetivo que perseguíamos: permitir que el título y la descripción de la cabecera de la plantilla del blog no se superpongan con la imágen de fondo.

miércoles, 23 de junio de 2010

Este es un blog follow: u comment i follow

Este blog es un blog "follow".

¿Qué significa esto? Significa que he eliminado de todos los enlaces html del blog, en especial de los comentarios, el atributo rel = "nofollow", medida ésta que se creó en su día para eliminar los comentarios spam de los blogs, pero que pienso que hoy en día no es necesaria con la existencia de los formularios captcha (palabras de confirmación en formato imágen, y por tanto no inteligibles para un bot de Internet de forma que deban ser rellenadas por un usuario humano).

¿Y qué se consigue con que éste sea un blog follow? Sobretodo incentivar la participación en el blog, mediante la escritura de comentarios, de aquellos lectores que tengan un blog y deseen adjuntar un enlace a éste en los comentarios. El enlazar a tu blog es una recompensa por el algoritmo que Google utiliza para indexar los contenidos de la web: Page Rank, que asigna relevancia (y por tanto prioridad en el listado de resultados mostrados para una búsqueda concreta) en función del número de sitios que enlacen a otro. Un sitio es más relevante cuanto más sitios enlacen a él (esto es simplificar mucho, pues se tienen en cuenta otros factores, pero nos sirve para entendernos).

Así que nada, blogeros, animaros a comentar que éste es un blog follow.

English.

This blog is a blog "follow."

What does this mean? It means I've removed all html links blog, especially the comments, rel = "nofollow" , a measure that was created at the time for removing comment spam from blogs, But I think today is not necessary with the existence of forms captcha (word format confirmation image, and therefore not intelligible to an Internet bot so that must be filled by a human user).

What is achieved that this is a follow blog? Especially encourage participation in the blog, by writing comments, readers who have a blog and want to attach a link to it in the comments. The link to your blog is a reward for the algorithm that Google uses to index the contents of the site Page Rank, which assigns importance (and therefore priority in the list of results displayed for a particular search) depending on the number of sites linking to another. A site is more relevant the more sites link to it (this is to simplify a lot, it takes into account other factors, but helps us to understand).

So nothing, bloggers, to encourage you to comment that this is a follow blog.

martes, 18 de mayo de 2010

Carta abierta al gobierno de Zapatero

Acabo de enviar el siguiente comentario en el blog de Leire Pajín. Como no creo que lo publiquen, le daré difusión a través de este propio blog.

Soy funcionario, grupo A. Me vais a bajar el sueldo el 10,5% según lo que cuenta el diario El País. Yo con mi sueldo pago la guardería de mis dos niños, mi hipoteca, y comemos toda mi familia, pues mi mujer está en paro. ¿Es esto progresivo? En el IRPF, que sí es justo y progresivo, pago menos que una persona que gane lo mismo que yo que sea soltero. Como lo vais a hacer, yo lo voy a sufrir mucho más que el soltero sin cargas.

Otra cosa: destino todo mi sueldo a vivir, al llegar a fin de mes no ahorro nada. Los políticos, entre los que tú te encuentras, ahorrais todo vuestro sueldo, o lo invertís. Así que no me contento con que os rebajeis el sueldo el 15% vosotros. Renunciad a las dietas, y pensaré que dais ejemplo. A tí te dan 1000 y pico euros en concepto de dietas para desplazarte a vivir a Madrid. Cuando yo me fuí a Madrid a cobrar 1200 euros de funcionario del estado, tenía de sueldo menos de lo que tu tienes de dietas.

Más cosas: yo no puedo compatibilizar mi trabajo con actividad privada, y con otra actividad pública si no de dedico más de 20 horas adicionales. ¿Por qué tu si puedes tener dos sueldos, el de tu partido y el de senadora? ¿No son incompatibles ambos cargos? Es como si yo cobrara por adjudicar contratos (un senador debe luchar por la sociedad) y también por ejecutarlos con una empresa privada (tu partido).

No creo que llegueis a publicar esto.
Saludos.

viernes, 23 de abril de 2010

Insertar HTML en Blogger

En entradas anteriores ya hemos comentado que la plataforma de Blogger, de forma interna en sus plantillas, trabaja con XHTML, que es una implementación de HTML sobre el lenguaje XML.

Esto se traduce en que las normas para escribir páginas web es mucho más extricta que en otros entornos (basados en HTML, que es menos ríguroso que XHTML).

Además de tener mucho cuidado con cerrar todas las etíquetas, esto se vuelve especialmente engorroso cuando queremos insertar código HTML para que Blogger lo muestre en una entrada. Para poder hacer esto, hay que "escapar" el código, y si el bloque HTML es muy largo, esto se convierte en un engorro.

La alternativa sencilla es utilizar servicios como el de Simplebits.

Se trata de un formulario web muy simple, en el que puedes introducir en un cuadro de text el código html que deseas insertar en tu blog, y tras pulsar el botón "procesar" se te muestra en otro cuadro de texto el código convenientemente "escapado", para que Blogger (o cualquier otro motor) no te de problemas.

Titulos de posts de Blogger optimizados para buscadores ( SEO )

Los principales navegadores, como Google o Yahoo, una de las cosas en las que más se fijan a la hora de indexar contenidos, y categorizarlos como relevantes para determinadas "palabras clave" es en el título, y las palabras contenidas en éste.

Si has creado tu blog con Blogger, por defecto esta plataforma construye el título de las páginas de tus entradas bajo la forma "título del blog" : "título de la entrada". Cuando el buscador analice las páginas de tu blog para indexarlas, la primera parte del título es la que más peso tendrá, y en ésta siempre aparecerá el nombre del blog (no el título de la entrada, que se supone que es el que tendrá las palabras clave de mayor relevancia del post).

Se puede cambiar este comportamiento por defecto de las plantillas de Blogspot, de forma que el título de la página esté formado primero por el título del post, y luego por el nombre del blog. Para eso, solamente hay que editar el código XHML de la plantilla. En primer lugar hay que buscar un texto como el siguiente:


<title><data:blog.pageTitle/></title>


Y sustituirlo por éste otro:


<b:if cond='data:blog.url == data:blog.homepageUrl'>

<title><data:blog.pageTitle/></title>

<b:else/>

<title><data:blog.pageName/> ~ <data:blog.title/></title>

</b:if>



Guardando a continuación los cambios. Así de simple.

Limpiar un Wordpress hackeado

 Check list para limpiar instancias de Wordpress que han sido hackeadas, y para prevenir hackeos. Para técnicos de sistemas con acceso SSH a...